<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="http://86box.net/feed.xml" rel="self" type="application/atom+xml" /><link href="http://86box.net/" rel="alternate" type="text/html" /><updated>2026-07-03T21:09:25+00:00</updated><id>http://86box.net/feed.xml</id><title type="html">86Box</title><subtitle>Emulator of x86-based machines</subtitle><entry><title type="html">Help needed!</title><link href="http://86box.net/2026/07/03/help-needed.html" rel="alternate" type="text/html" title="Help needed!" /><published>2026-07-03T00:00:00+00:00</published><updated>2026-07-03T00:00:00+00:00</updated><id>http://86box.net/2026/07/03/help-needed</id><content type="html" xml:base="http://86box.net/2026/07/03/help-needed.html"><![CDATA[<figure class="image">
    <img src="/assets/images/helpneeded/hero.png" class="heading" />
</figure>

<p>Hi everyone,</p>

<p>In case anyone is wonder why progress on the emulator appears slow or feature requests feel ignored, we are currently still understaffed and have, in addition to new bugs reported every day that have to be fixed, a backlog of items on our internal TODO list such as:</p>

<ul>
  <li>EISA;</li>
  <li>Turbo Button for XT PCs;</li>
  <li>Emulation of the ESS Solo-1;</li>
  <li>PD (Phase-change Dual) and DVD-RAM support;</li>
  <li>IBM Expanded Memory Adapter (XMA);</li>
  <li>Passthrough of real CD/DVD drives to the emulator on macOS;</li>
  <li>Support for cloneCD and TOC CD-ROM image files;</li>
  <li>Mitsumi CD-ROM emulation (it would also allow eventual emulation of the Tandy VIS).</li>
</ul>

<p>In addition, we are currently in severe need of developers and/or maintainers for the following:</p>

<ul>
  <li>New dynamic recompiler;</li>
  <li>macOS support;</li>
  <li>Emulation of the NEC PC-98 family of computers;</li>
  <li>A potential built-in non-GDBSTUB debugger to replace the current GDBSTUB implementation;</li>
  <li>Our SDL backend;</li>
  <li>The ImGui OSD;</li>
  <li>The Qt UI.</li>
</ul>

<p>We would also appreciate anyone who could help the fixing of issues that get reported to our GitHub or in our Discord server.</p>

<p>Any kind of help would be extremely appreciated.</p>

<p>Lastly, we are in desperate need of funds to guarantee continued support of the macOS platform for 86Box - specifically, we need a second Mac that someone in our team could use to test and maintain the macOS builds.</p>

<p>Consider subscribing to our <a href="//patreon.com/86box">Patreon</a> or doing one-time donations via <a href="//paypal.me/86Box">PayPal</a> in order to make it possible.</p>

<p>Thanks, have fun with emulation, and thank you for flying 86Box!</p>

<p>Update: We now have a GoFundMe fundraiser for ensuring continued macOS support: <a href="https://www.gofundme.com/f/support-86boxs-future-on-macos">https://www.gofundme.com/f/support-86boxs-future-on-macos</a></p>]]></content><author><name>OBattler</name></author><summary type="html"><![CDATA[We need help in developing this emulator.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://86box.net/assets/images/helpneeded/hero.png" /><media:content medium="image" url="http://86box.net/assets/images/helpneeded/hero.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">86Box v6.0</title><link href="http://86box.net/2026/05/31/86box-v6-0.html" rel="alternate" type="text/html" title="86Box v6.0" /><published>2026-05-31T00:00:00+00:00</published><updated>2026-05-31T00:00:00+00:00</updated><id>http://86box.net/2026/05/31/86box-v6-0</id><content type="html" xml:base="http://86box.net/2026/05/31/86box-v6-0.html"><![CDATA[<figure class="image">
    <img src="/assets/images/v6.0/hero.png" class="heading" />
</figure>

<p>This is the May 2026 update to 86Box, bringing in the obligatory bugfixes, some performance improvements, user interface updates and lots of new hardware.</p>

<hr />

<h2 id="main-features">Main features</h2>

<p id="hdd-sounds">After the <a href="/2025/10/26/86box-v5-2.html#floppy-drive-sounds">floppy drive sounds</a> feature in v5.2, the same contributor now brings in <strong>hard disk sounds</strong>, configurable through the <a href="//86box.readthedocs.io/en/v6.0/settings/hdd.html"><strong>hard disk settings</strong></a> separately from the existing model presets. Recordings from three <strong>3600 RPM</strong> disk models are currently available, with more to come in the future.</p>

<p id="switch">The long-awaited <strong>local switch</strong> allows for networking multiple 86Box machines running on the same host computer and across multiple hosts on the same real network, <strong>automatically</strong> and <strong>across platforms</strong>, unlike previous solutions such as VDE which required manual configuration and left Windows users in the dark. Multiple networks can be created and isolated by passwords, and more technically-inclined users can connect other emulators to the switch; see <a href="//86box.readthedocs.io/en/v6.0/hardware/network.html#local-switch">the documentation</a> for more information.</p>

<p id="ports"><strong>Serial and parallel connectivity</strong> also saw many updates. On the parallel side, printers are now configurable, new sound devices join the existing DACs, and the new <strong>Named Pipe</strong> device can connect machines together with a LapLink cable or the rare DirectParallel cable for high-speed Windows Direct Cable Connection. On the serial side, the passthrough feature has evolved into <strong>serial devices</strong> bringing many improvements: <strong>Named Pipe</strong> (now supported on Linux and macOS) has an automatic client/server mode, <strong>Serial Passthrough</strong> no longer requires setting the host port’s baud rate separately, and <strong>Virtual Console</strong> (now supported on Windows) can automatically connect a terminal to the emulated port.</p>

<p id="tape"><strong>SCSI tape drives</strong> are now emulated, in case you’re emulating a retro server and want to make period-accurate backups. Tape drives for the <strong>floppy interface</strong>, which were more common in the consumer space, are planned for the future.</p>

<p id="settings">Many updates have been made to the user interface, starting with some <strong>updated icons</strong>, including a more colorful logo. New <strong>toolbar</strong> buttons allow for <strong>fast forwarding emulation</strong> (running as fast as your host system can handle) and quickly taking a screenshot to file or clipboard. The <strong>Settings window</strong> was starting to become overwhelming with the sheer amount of options available, so it now has <strong>tabs</strong> on most pages; <a href="#moved-options">most</a> of the options you know are still there, just organized into tabs, and some <strong>no longer require a hard reset</strong> to be applied. All device selectors now have <strong>search</strong>, activated by clicking the X button and typing a search query. The <a href="//86box.readthedocs.io/en/v6.0/usage/preferences.html"><strong>Preferences window</strong></a> now has pages like the Settings window.</p>

<hr />

<h2 id="important-changes">Important changes</h2>

<h3 id="moved-options">Moved options</h3>

<p><strong>Custom key bindings</strong> have moved from the Settings window’s <strong>Input devices</strong> page to the Preferences window’s new <a href="//86box.readthedocs.io/en/v6.0/usage/preferences.html#key-bindings-key-bindings"><strong>Key bindings</strong></a> page, as they are now <strong>saved system-wide</strong> and apply to all machines on all copies of 86Box v6.0 and newer. Due to this change, any 86Box keyboard shortcuts you may have changed on individual machines have been <strong>reset</strong>.</p>

<p>Additionally, several <strong>View menu</strong> options related to the emulated display have moved to a new <a href="//86box.readthedocs.io/en/v6.0/settings/display.html#monitor-monitor"><strong>Monitor</strong> tab</a> in the Settings window’s <strong>Display</strong> page, where they can still be changed without a hard reset.</p>

<h3 id="merged-video-cards">Merged video cards</h3>

<p>The very large amount of video cards to choose from is a longstanding issue which has finally been addressed in this release. We have shortened the video card list by <strong>merging cards</strong>: the card selector now lists <strong>video chipsets</strong> instead, and the individual card and VBIOS variants for each chipset are available through the <strong>Configure</strong> button next to the selector. The new <strong>search</strong> feature (pictured above) can help you find the video chipset for a given card name.</p>

<p>Upgrading to 86Box v6.0 will <strong>automatically migrate</strong> the configured video card to this new system. After this migration, downgrading to v5.3 or older may result in the machine losing its video card settings.</p>

<h3 id="mds-v2--mdx-support-component">MDS v2 / MDX support component</h3>

<p>The new support for <strong>Daemon Tools MDS v2</strong> and <strong>MDX</strong> CD-ROM images uses an external component due to a license incompatibility issue. This component is <strong>included</strong> with 86Box as the <code class="language-plaintext highlighter-rouge">mdsx.dll</code> file inside the <code class="language-plaintext highlighter-rouge">.zip</code> on Windows, or embedded within the AppImage on Linux or the app bundle on macOS. <strong>Windows users</strong> should make sure the included <code class="language-plaintext highlighter-rouge">mdsx.dll</code> is present in the same folder as the 86Box executable, otherwise MDS v2 and MDX images will refuse to load.</p>

<p><strong>Linux package maintainers</strong> should note that <code class="language-plaintext highlighter-rouge">mdsx.so</code> is an optional component located in <a href="//github.com/86Box/mdsx">a separate repository</a> governed by the non-free TrueCrypt License, which may prevent its inclusion in the 86Box package according to your distribution’s policies. We welcome contributions bringing in a GPL-compatible reimplementation of the legacy encryption algorithms used by Daemon Tools.</p>

<h3 id="windows-arm-support">Windows ARM support</h3>

<p>We now provide builds for Windows host systems with <strong>Snapdragon</strong>, <strong>RTX Spark</strong> and other <strong>ARM processors</strong> through the <code class="language-plaintext highlighter-rouge">86Box-NDR-Windows-ARM64</code> download. Intel and AMD systems should continue using the same <code class="language-plaintext highlighter-rouge">86Box-Windows-64</code> download as before. Note that ARM builds require Windows 11, and these currently lack some minor features relying on external components (Discord integration and the PostScript printer’s PDF conversion).</p>

<p><strong>Third-party manager applications</strong> may need to be updated to handle these builds, even on non-ARM systems. Please <strong>update your manager</strong> if it fails to download or run 86Box v6.0, with symptoms including “This app can’t run on your PC”, “not compatible with the version of Windows you’re running” or “machine type other than the current machine” error messages.</p>

<h3 id="macos-1013-support">macOS 10.13 support</h3>

<p>86Box no longer supports macOS hosts running <strong>High Sierra 10.13</strong>. The minimum supported version is now <strong>Mojave 10.14</strong>, and a future release will bring it up to <strong>Catalina 10.15</strong>.</p>

<hr />

<h2 id="changelog">Changelog</h2>

<p>This changelog covers the original May 17 beta preview. A separate changelog for the final release can be found <a href="#changelog-for-final-release">further below</a>.</p>

<h3 id="emulator">Emulator</h3>

<ul>
  <li>Added <a href="#windows-arm-support"><strong>Windows ARM64</strong></a> host system support</li>
  <li>Added <strong>fast forward</strong> command to remove emulation speed limits</li>
  <li>Added <strong>copy screenshot</strong> command for taking screenshots to the clipboard instead of saving to file</li>
  <li>Added <strong>raw screenshot</strong> commands for taking screenshots without any scaling or shaders</li>
  <li>Added button to reset the manager’s <strong>system directory</strong></li>
  <li>Added relative path conversion to <strong>disk images</strong> located two levels above the machine folder</li>
  <li>Changed minimum macOS version to <a href="#macos-1013-support"><strong>Mojave 10.14</strong></a></li>
  <li>Fixed AppImage crashing on startup on <strong>Wayland</strong> Linux hosts with the NVIDIA driver</li>
  <li>Fixed <strong>Send Ctrl+Alt+Del</strong> and <strong>Ctrl+Alt+Esc</strong> buttons not working if the <strong>Keyboard requires capture</strong> option is enabled</li>
  <li>Fixed emulated display <strong>resolution changes</strong> occasionally crashing the emulator (again)</li>
  <li>Fixed manager <strong>system directory</strong> root showing up as a machine if a configuration file is present</li>
  <li>Fixed manager <strong>machine count</strong> not updating when adding a new machine</li>
  <li>Fixed manager not checking for <strong>invalid names</strong> when adding a new machine</li>
  <li>Fixed <strong>update checker</strong> crashing the manager during GitHub outages</li>
  <li>Fixed <strong>empty machine folder</strong> being left behind when cancelling the configuration of a new machine</li>
  <li>Fixed <code class="language-plaintext highlighter-rouge">-?</code>/<code class="language-plaintext highlighter-rouge">--help</code> command line option displaying a message box on non-Windows hosts</li>
</ul>

<h3 id="user-interface">User interface</h3>

<ul>
  <li>Reworked <a href="#settings"><strong>Settings and Preferences windows</strong></a> with tabs and pages respectively</li>
  <li>Moved <a href="#moved-options"><strong>key bindings</strong></a> from the per-machine Settings window to the system-wide Preferences window</li>
  <li>Moved <a href="#moved-options"><strong>monitor settings</strong></a> from the <strong>View</strong> menu to the Settings window’s <strong>Display</strong> page</li>
  <li>Moved <strong>machine list</strong> search feature to the machine selector box</li>
  <li>Moved <strong>monitor sleep mode indicator</strong> to the refresh rate indicator</li>
  <li>Added text search to all Settings window <strong>device lists</strong></li>
  <li>Added <strong>screenshot buttons</strong> to the toolbar</li>
  <li>Added blue <strong>DVD icon</strong> to DVD-capable CD-ROM drives on the status bar</li>
  <li>Added <strong>CD audio play and pause indicators</strong> to CD-ROM drives on the status bar</li>
  <li>Added <strong>tape play and record indicators</strong> to cassette drives on the status bar</li>
  <li>Added write protection indicator to the <strong>recently used image lists</strong></li>
  <li>Added decibel scale to the <strong>sound gain control</strong></li>
  <li>Added serial port driver name to the <strong>serial passthrough port selector</strong> on Windows and Linux hosts</li>
  <li>Added translation: <span class="emoji">🇬🇷</span> <strong>Greek</strong> by <a href="//github.com/DimMan88">DimMan88</a></li>
  <li>Improved <strong>manager performance</strong> when selecting machines</li>
  <li>Improved ordering on Settings window <strong>machine and device lists</strong> (again)</li>
  <li>Fixed <strong>emulation speed</strong> indicator disappearing on small window sizes</li>
  <li>Fixed <strong>custom system fonts</strong> not being used by the interface on Windows hosts</li>
  <li>Fixed <strong>mouse capture release indicator</strong> disappearing on macOS hosts</li>
  <li>Fixed visual glitch when changing <strong>floppy drive types</strong></li>
  <li>Fixed <strong>keyboard navigation</strong> of settings pages containing tables</li>
  <li>Changed <strong>Select media images from program working directory</strong> option to remember the last selected directory on subsequent prompts</li>
  <li>Removed <strong>Toggle recompilation</strong> toolbar button due to its reduced importance</li>
  <li>Updated translations: <strong>Chinese (Simplified)</strong>, <strong>Chinese (Taiwan)</strong>, <strong>Czech</strong>, <strong>Dutch</strong>, <strong>Finnish</strong>, <strong>French</strong>, <strong>German</strong>, <strong>Italian</strong>, <strong>Polish</strong>, <strong>Portuguese (Brazil)</strong>, <strong>Portuguese (Portugal)</strong>, <strong>Russian</strong>, <strong>Slovenian</strong>, <strong>Spanish (Spain)</strong>, <strong>Turkish</strong>, <strong>Vietnamese</strong></li>
</ul>

<h3 id="machines">Machines</h3>

<ul>
  <li><strong>Multiple categories</strong>
    <ul>
      <li>Renamed many machines to move their <strong>variant names</strong> to the machine list search feature</li>
    </ul>
  </li>
  <li><strong>808x</strong>
    <ul>
      <li>Added 8086 machine: <strong>IBM Multistation 5550</strong></li>
      <li>Fixed emulator crash during POST on the default <strong>IBM PC</strong> configuration</li>
      <li>Fixed <strong>IBM PCjr</strong> keyboard freezes with some games</li>
      <li>Changed <strong>Zenith Data Systems SupersPort</strong> on-board video to the Yamaha V6355D</li>
    </ul>
  </li>
  <li><strong>286</strong>
    <ul>
      <li>Added machine: <strong>Nixdorf 8810 M30</strong></li>
      <li>Added older Rev 0 BIOS option to the <strong>IBM PS/2 Model 30-286</strong></li>
      <li>Fixed incorrect memory detection on the <strong>IBM PS/2 Model 30-286</strong></li>
      <li>Fixed incorrect font on the <strong>Toshiba T3100e</strong> display</li>
    </ul>
  </li>
  <li><strong>386</strong>
    <ul>
      <li>Added 386SX machines: <strong>Philips P3345</strong>, <strong>Tandy 1000 RSX</strong></li>
      <li>Added ALi M6117 machines: <strong>ICOP-6021</strong> (also known as <strong>Hand386</strong> and <strong>Pocket 386</strong>), <strong>JUMPtec MOPS/386A</strong></li>
      <li>Fixed <strong>IBM PS/55</strong> display glitches in Windows 3.x and OS/2</li>
      <li>Renamed <strong>DataExpert SX495</strong> to <strong>OPTI-495SX</strong></li>
    </ul>
  </li>
  <li><strong>486</strong>
    <ul>
      <li>Added Socket 1 machines: <strong>Pioneer Vantage 4865C-25/33</strong>, <strong>Tandy Sensation!</strong></li>
      <li>Added Socket 2 machines: <strong>Intel Classic R/R Plus</strong>, <strong>Samsung SPC-7500P</strong>, <strong>Tandy Sensation! II</strong></li>
      <li>Added Socket 3 machine: <strong>ADD-X Normerel Xenon</strong></li>
      <li>Added PS/2 mouse support to the <strong>ECS Elite UM8810P-AIO</strong></li>
      <li>Added Award BIOS and more BIOS version options to the <strong>Acrosser AR-B1479</strong></li>
      <li>Added Micro Firmware BIOS variant option to the <strong>Packard Bell PB410A</strong></li>
      <li>Removed Cyrix CPUs from the <strong>DTK PKM-0038S</strong> and <strong>ECS AL486</strong> due to BIOS incompatibilities</li>
      <li>Removed Enhanced Am486, Am5x86 and Cyrix CPUs from the <strong>AIR 486PI</strong> due to BIOS incompatibilities</li>
      <li>Fixed NVRAM error on the <strong>Lanner Electronics IAC-H488</strong></li>
      <li>Fixed emulator crash during POST on the <strong>Advantech PCM-9340</strong></li>
      <li>Changed minimum/maximum RAM and supported CPUs on many <strong>Socket 3 machines</strong></li>
      <li>Renamed <strong>ASUS PVI-486SP3C</strong> to <strong>PVI-486SP3</strong></li>
      <li>Renamed <strong>DataExpert SX495</strong> to <strong>OPTI-495SX</strong></li>
      <li>Renamed <strong>DEC DECpc LPV</strong> to <strong>LPV+</strong></li>
      <li>Renamed <strong>FIC VIP-IO2</strong> to <strong>486-VIP-IO2</strong></li>
      <li>Renamed <strong>Zida Tomato 4DP</strong> to <strong>4DPS</strong></li>
    </ul>
  </li>
  <li><strong>586</strong>
    <ul>
      <li>Added Socket 5 machine: <strong>Compaq Presario 7100 Series 586</strong></li>
      <li>Added Socket 7 machines: <strong>ASUS TXP4-X</strong>, <strong>Lucky Star 5AVP3</strong>, <strong>MSI MS-5156</strong>, <strong>Siemens Simatic OP47</strong></li>
      <li>Added on-board Yamaha YMF701 sound and National Semiconductor LM78 hardware monitor to the <strong>Micronics Thunderbolt</strong></li>
      <li>Removed IDT WinChip CPUs from the <strong>HP Pavilion 73xx/74xx</strong> due to BIOS incompatibilities</li>
      <li>Removed Cyrix CPUs from the <strong>NEC Mate NX MA23C</strong> due to BIOS incompatibilities</li>
      <li>Fixed incorrect memory detection on the <strong>AST Bravo MS P/90</strong></li>
      <li>Changed minimum CPU support on the <strong>Siemens-Nixdorf D943</strong></li>
      <li>Changed default <strong>AST Bravo MS P/90</strong> BIOS to the newer 2.02 version</li>
      <li>Renamed <strong>AST Bravo MS P/90</strong> to <strong>MS/MS-T/MS-L</strong></li>
      <li>Renamed <strong>ASUS TX97-XV</strong> to <strong>HP Pavilion 81xx</strong></li>
    </ul>
  </li>
  <li><strong>686</strong>
    <ul>
      <li>Added Slot 1 machines: <strong>AIR P6KDI</strong>, <strong>FIC KN-6000</strong>, <strong>HP Brio 83xx</strong>, <strong>MSI MS-6117</strong>, <strong>TriGem Como</strong></li>
      <li>Added newer BIOS version option to the <strong>ECS P6BXT-A+</strong></li>
      <li>Added older BIOS version option to the <strong>Gigabyte GA-686BX</strong></li>
      <li>Added newer beta BIOS version option to the <strong>MiTAC/Trigon 6110Zu</strong></li>
      <li>Changed default <strong>ECS P6BXT-A+</strong> and <strong>MiTAC/Trigon 6110Zu</strong> BIOS to the retail variants</li>
      <li>Renamed <strong>PC Partner APAS3</strong> to <strong>VIM863S</strong> and added on-board Sound Blaster ViBRA 16XV sound</li>
    </ul>
  </li>
</ul>

<h3 id="hardware">Hardware</h3>

<ul>
  <li><strong>Core</strong>
    <ul>
      <li>Improved CPU performance on <strong>ARM hosts</strong> (again)</li>
      <li>Improved emulation accuracy of <strong>NEC V20/V30</strong> CPUs</li>
      <li>Added option to force the faster <strong>486 interpreter</strong> when emulating 286 and 386 CPUs</li>
      <li>Fixed <strong>OS/2 1.x</strong> crashing on some machines due to an FPU error handling inaccuracy</li>
      <li>Fixed <strong>IBM DOS J4.x</strong> crashing due to a debug register inaccuracy</li>
      <li>Fixed unreasonably fast <strong>POST times</strong> on machines with Flash ROM</li>
      <li>Fixed expanded (EMS) memory support on the <strong>ACC 2036</strong> chipset</li>
      <li>Fixed power management (APM) support on the <strong>ALi M1489</strong>, <strong>SiS 496</strong>, <strong>SiS 5581</strong>, <strong>STPC</strong> and <strong>UMC 8881</strong> chipsets, as well as <strong>Cyrix CPUs</strong></li>
      <li>Fixed incorrect PCI IDs for <strong>STPC</strong> integrated devices</li>
    </ul>
  </li>
  <li><strong>Display</strong>
    <ul>
      <li>Improved the <a href="#merged-video-cards"><strong>emulated video card list</strong></a> by merging cards based on the same video chipset</li>
      <li>Improved emulation performance of <strong>Voodoo</strong> cards on ARM hosts</li>
      <li>Improved emulation performance of <strong>S3 ViRGE</strong> and <strong>Trio3D/2X</strong> cards</li>
      <li>Added actual name to <strong>internal devices</strong> on the video card selector</li>
      <li>Added 256 KB video RAM option to the <strong>Cirrus Logic GD5402</strong></li>
      <li>Added and changed <strong>on-board video RAM</strong> options on many machines</li>
      <li>Added gamma control support to the <strong>S3 Trio3D/2X</strong></li>
      <li>Fixed <strong>ATI Mach</strong>, <strong>IBM 8514/A</strong> and <strong>Video 7 VGA 1024i</strong> rendering glitches on specific drivers</li>
      <li>Fixed <strong>Voodoo Banshee/3</strong> emulator crashes on specific drivers</li>
      <li>Fixed <strong>incorrect refresh rates</strong> on even more cards (it never ends)</li>
      <li>Fixed <strong>Cirrus Logic</strong> rendering glitches on E-Ten</li>
      <li>Fixed <strong>Tseng ET4000/W32</strong> picture positioning with overscan enabled</li>
      <li>Fixed <strong>card model names</strong> on several video cards</li>
      <li>Fixed incorrect video BIOS on the VLB <strong>Cirrus Logic GD5434</strong></li>
      <li>Fixed <strong>S3</strong> video card detection by some tools</li>
      <li>Renamed <strong>BOCA Research 4610</strong> video card to <strong>BRI4610</strong> and changed it to the correct GD5422 controller</li>
    </ul>
  </li>
  <li><strong>Input</strong>
    <ul>
      <li>Fixed <strong>mouse wheel accuracy</strong> on Windows hosts with certain mice and touchpads</li>
      <li>Fixed <strong>Ctrl+Num Lock</strong> key combination on Windows hosts</li>
      <li>Fixed <strong>3M MicroTouch</strong> not registering touches on macOS hosts</li>
      <li>Fixed <strong>3M MicroTouch</strong> baud rate configuration</li>
      <li>Fixed key code inaccuracies on some <strong>keyboard types</strong></li>
    </ul>
  </li>
  <li><strong>Sound</strong>
    <ul>
      <li>Added <strong>Analog Devices AD1816</strong>, <strong>Aztech Sound Galaxy Pro 16 AZTPR16</strong>, <strong>Covox Sound Master</strong>, <strong>HP Multimedia Pro 16V-A</strong>, <strong>IBM Music Feature Card</strong>, <strong>MediaVision ThunderBoard</strong>, <strong>Pro Audio Spectrum</strong> and <strong>TexElec SAAYM</strong> (CMS/Game Blaster + Yamaha OPM) ISA sound cards</li>
      <li>Added <strong>Roland SC-55</strong> MIDI synthesizer emulation (<a href="//86box.readthedocs.io/en/v6.0/settings/sound.html#midi-out-device">setup required</a>)</li>
      <li>Added ESS0968 ID variant of the <strong>ESS ES688</strong> ISA sound card</li>
      <li>Added <strong>audio output device</strong> option</li>
      <li>Added <a href="//github.com/nukeykt/Nuked-OPL2-Lite"><strong>Nuked OPL2 Lite</strong></a> for more accuracy over the previous Nuked OPL3-based OPL2 emulation</li>
      <li>Added on-board MIDI input/output support to the <strong>IBM PS/1 family</strong></li>
      <li>Added DSP version configuration to select <strong>Sound Blaster</strong> models</li>
      <li>Added software game port disable support to <strong>Pro Audio Spectrum Plus</strong> and <strong>16</strong> cards</li>
      <li>Added actual name to <strong>internal devices</strong> on the sound card selector</li>
      <li>Changed <strong>ESS ES688</strong>, <strong>ES1688</strong> and <strong>Pro Audio Spectrum Plus</strong> cards to the 16-bit ISA bus</li>
      <li>Changed <strong>MIDI input/output device selection</strong> to no longer require a hard reset</li>
      <li>Changed <strong>FluidSynth</strong> to fall back to the system soundfont if none is set on Windows</li>
      <li>Fixed <strong>Crystal CS423x</strong> and <strong>Aztech Sound Galaxy</strong> detection errors with some drivers</li>
      <li>Fixed <strong>Pro Audio Spectrum Plus</strong> and <strong>16</strong> playback issues with some drivers</li>
      <li>Fixed <strong>Pro Audio Spectrum Plus</strong> and <strong>16</strong> low playback volumes</li>
      <li>Fixed SoftSynth issues with some drivers on <strong>Yamaha</strong> cards</li>
      <li>Fixed Windows 9x DOS compatibility issues on <strong>Yamaha</strong> cards</li>
      <li>Fixed CD audio volume control on <strong>Aztech Sound Galaxy</strong> cards</li>
      <li>Fixed <strong>MPU-401</strong> losing MIDI output messages when reset</li>
    </ul>
  </li>
  <li><strong>Network</strong>
    <ul>
      <li>Added <a href="#switch"><strong>network switch</strong></a> for connecting emulated machines</li>
      <li>Added <strong>SMC 83C170</strong> PCI network card</li>
      <li>Added actual name to <strong>internal devices</strong> on the network card selector</li>
      <li>Moved <strong>DEC DE-435</strong> and <strong>Microsoft Virtual PC</strong> network cards into a single <strong>DECchip 21140</strong> entry with variant selection</li>
      <li>Changed <strong>Novell NE2000</strong> and <strong>Realtek RTL8019AS</strong> network cards to the 8-bit ISA bus</li>
      <li>Fixed <strong>DEC</strong> network cards losing connectivity during normal operation</li>
      <li>Fixed <strong>DEC</strong> network cards not losing connectivity when disconnecting the cable</li>
      <li>Fixed <strong>DEC</strong> network cards crashing the emulator on soft reboot</li>
      <li>Fixed <strong>PLIP</strong> not reaching the network with some drivers</li>
      <li>Fixed <strong>PLIP</strong> not working if the parallel port has no IRQ</li>
      <li>Fixed <strong>PLIP</strong> packet loss on Linux</li>
    </ul>
  </li>
  <li><strong>Ports</strong>
    <ul>
      <li>Added <a href="#ports"><strong>parallel named pipe</strong></a> device emulating a LapLink, DirectParallel or basic bidirectional cable</li>
      <li>Added <strong>FTL Sound Adapter</strong>, <strong>SiliconSoft SoundJr</strong>, <strong>OPL2LPT</strong>, <strong>OPL3LPT</strong>, <strong>CMSLPT</strong> and <strong>TNDLPT</strong> parallel port sound devices</li>
      <li>Added <a href="#ports"><strong>serial device selector</strong></a> replacing the existing serial passthrough options</li>
      <li>Added automatic client/server mode option to <strong>named pipe serial passthrough</strong></li>
      <li>Added Linux and macOS host support to <strong>named pipe serial passthrough</strong></li>
      <li>Added terminal emulator connection option to <strong>virtual console serial passthrough</strong></li>
      <li>Added partial Windows host support to <strong>virtual console serial passthrough</strong> for using a Command Prompt window as a terminal emulator</li>
      <li>Added custom command option to <strong>virtual console serial passthrough</strong> on Linux and macOS hosts (defaults to creating a GNU Screen session)</li>
      <li>Added <strong>parallel file</strong> device to log all transmitted data without the text printer’s page formatting</li>
      <li>Added <strong>serial file</strong> device to log all transmitted data or receive data from an input file</li>
      <li>Added <strong>serial and parallel port loopback plug</strong> devices for diagnostics software</li>
      <li>Added printer language option to disable PDF conversion on the <strong>PostScript printer</strong></li>
      <li>Added printer language and paper size options to the <strong>ESC/P 2 printer</strong></li>
      <li>Added audio channel selection option to the <strong>Covox Speech Thing</strong></li>
      <li>Changed <strong>parallel port device selection</strong> to no longer require a hard reset</li>
      <li>Fixed <strong>PostScript printer</strong> not saving output files in some cases</li>
      <li>Fixed <strong>virtual console serial passthrough</strong> not displaying the pseudoterminal path in an easily-accessible location (now a message box)</li>
      <li>Fixed <strong>host serial port passthrough</strong> not receiving data on some Linux hosts</li>
      <li>Fixed ECP and EPP parallel port modes on machines with the <strong>VIA VT82C686A</strong>/<strong>B</strong> southbridge</li>
      <li>Removed <strong>host serial port passthrough</strong> baud rate, data bits and stop bits options (the emulated port’s parameters are now automatically passed through to the host port)</li>
      <li>Removed <strong>PLIP</strong> parallel port device as only the network card is required now (the parallel port to use is selectable through its <strong>Configure</strong> button)</li>
    </ul>
  </li>
  <li><strong>Storage</strong>
    <ul>
      <li>Improved <strong>CD folder mounting</strong> load times on Windows and macOS hosts</li>
      <li>Added optional <a href="#hdd-sounds"><strong>hard disk sounds</strong></a></li>
      <li>Added <strong>CD-ROM passthrough</strong> for real drives on <strong>Linux hosts</strong></li>
      <li>Added <a href="#mds-v2-mdx-support-component">Daemon Tools <strong>MDS v2</strong> and <strong>MDX</strong></a> CD-ROM image support</li>
      <li>Added <a href="#tape"><strong>SCSI tape drive</strong></a> emulation</li>
      <li>Added <strong>MFM/RLL hard disk models</strong> with speed emulation</li>
      <li>Added <strong>physical hard disk support</strong> through <a href="//86box.readthedocs.io/en/v6.0/settings/hdd.html#using-physical-disks">manual configuration</a></li>
      <li>Added <strong>physical floppy drive support</strong> for Linux hosts</li>
      <li>Added <strong>QLogic ISP1xxx</strong> PCI SCSI controllers</li>
      <li>Added <strong>standalone versions</strong> of several IDE controllers</li>
      <li>Added <strong>jr-IDE</strong> PCjr IDE controller</li>
      <li>Added <strong>IBM PS/2 ST-506</strong> MCA hard disk controller</li>
      <li>Added optional CD-ROM <strong>EDC/ECC error checking</strong> emulation</li>
      <li>Added SCSI CD-ROM drive model: <strong>DEC RRD42</strong></li>
      <li>Added Panasonic/MKE CD-ROM drive models: <strong>MATSHITA CR-562 081k</strong>, <strong>MATSHITA CR-563 0.74</strong> (replacing the previous 0.75 which is now a separate option)</li>
      <li>Added IDE hard disk models: <strong>Quantum Fireball EL2.5AT</strong>, <strong>EL5.1AT</strong>, <strong>EL7.6AT</strong>, <strong>EL10.2AT</strong>, <strong>Western Digital Expert 200BA</strong></li>
      <li>Fixed hard disk write errors with <strong>VHD images</strong> on some hosts</li>
      <li>Fixed Rock Ridge permission issues with <strong>CD folder mounting</strong> on Linux and macOS hosts</li>
      <li>Fixed <strong>cue files</strong> encoded with BOM failing to load</li>
      <li>Fixed <strong>CD audio</strong> playback on specific DOS games</li>
      <li>Fixed <strong>CD audio</strong> tracks on paths with special characters on Windows</li>
      <li>Fixed BIOS <strong>floppy drive errors</strong> after a soft reboot</li>
      <li>Fixed <strong>Rancho RT1000B</strong> SCSI controller not working with specific versions of its DOS driver</li>
      <li>Fixed <strong>AMD 53C974</strong> and <strong>Tekram DC-390</strong> SCSI controllers not working with specific Windows NT drivers</li>
      <li>Fixed <strong>PS/2 ESDI</strong>, <strong>PS/2 SCSI</strong> and <strong>Adaptec AHA-154xC</strong> controllers not working on AIX</li>
      <li>Fixed <strong>PS/1 XTA</strong> controller not reading disks on OS/2 1.x</li>
      <li>Fixed incorrect <strong>GET CONFIGURATION</strong> reporting on non-DVD-capable ATAPI and SCSI CD-ROM drives</li>
      <li>Fixed <strong>ATAPI hard disk</strong> detection issues</li>
      <li>Fixed revision code on the <strong>MITSUMI CRMC-FX810T4</strong> IDE CD-ROM drive model</li>
      <li>Changed default IRQ to 7 on the <strong>Longshine LCS-6821N</strong>, <strong>Rancho RT1000B</strong> and <strong>Trantor T130B</strong> SCSI controllers</li>
      <li>Renamed <strong>Panasonic/MKE</strong> CD-ROM controller to <strong>MKE/Panasonic</strong></li>
      <li>Renamed <strong>Acculogic XT IDE</strong> controller to <strong>sIDE-1/16</strong></li>
      <li>Renamed <strong>WD1003 AT</strong> controller to <strong>WD1003-WAH</strong></li>
    </ul>
  </li>
</ul>

<hr />

<h2 id="changelog-for-final-release">Changelog for final release</h2>

<h3 id="user-interface-1">User interface</h3>

<ul>
  <li>Added translations to more <strong>emulator error messages</strong></li>
  <li>Fixed <strong>status bar icons</strong> for removable media remaining active after a load failure in some cases</li>
  <li>Fixed <strong>hard disk image creation</strong> overwriting the file without confirmation if it already exists</li>
  <li>Updated and cleaned up many translations</li>
</ul>

<h3 id="machines-1">Machines</h3>

<ul>
  <li><strong>486</strong>
    <ul>
      <li>Fixed <strong>Samsung SPC-7500P</strong> BIOS crashing the emulator and not retaining CMOS settings</li>
      <li>Fixed <strong>Samsung SPC-7500P</strong> incorrectly listing an internal video card</li>
    </ul>
  </li>
  <li><strong>586</strong>
    <ul>
      <li>Added on-board Yamaha YMF715 sound to the <strong>NEC Mate NX MA23C</strong></li>
    </ul>
  </li>
  <li><strong>686</strong>
    <ul>
      <li>Removed Award v6.00PG BIOS option from the <strong>ECS P6BXT-A+</strong> as it is not meant for this machine</li>
    </ul>
  </li>
</ul>

<h3 id="hardware-1">Hardware</h3>

<ul>
  <li><strong>Display</strong>
    <ul>
      <li>Fixed <strong>ATI Mach</strong> and <strong>S3</strong> rendering glitches on specific drivers</li>
      <li>Fixed black screens and other issues caused by <strong>invalid video memory configurations</strong></li>
      <li>Fixed incorrect refresh rates on <strong>Tseng ET4000AX</strong> cards</li>
    </ul>
  </li>
  <li><strong>Input</strong>
    <ul>
      <li>Fixed <strong>104-key</strong> AT and PS/2 keyboard inaccuracies</li>
    </ul>
  </li>
  <li><strong>Sound</strong>
    <ul>
      <li>Fixed loss of <strong>MIDI input and output</strong> after changing devices while the machine is running</li>
    </ul>
  </li>
  <li><strong>Ports</strong>
    <ul>
      <li>Fixed <strong>ESC/P 2 printer</strong> not applying underlines correctly</li>
      <li>Fixed <strong>text</strong> and <strong>PostScript printers</strong> corrupting non-ASCII character encodings</li>
      <li>Fixed <strong>serial virtual console</strong> on Windows displaying extraneous messages when performing some emulator actions</li>
      <li>Fixed <strong>serial virtual console</strong> on Konsole displaying a crash notification on exit</li>
      <li>Fixed <strong>serial virtual console</strong> on macOS Terminal displaying an inaccurate folder in the title bar</li>
      <li>Fixed <strong>serial virtual console</strong> on macOS Terminal not displaying session messages correctly on exit</li>
    </ul>
  </li>
  <li><strong>Storage</strong>
    <ul>
      <li>Added IDE CD-ROM drive model: <strong>MATSHITA CR-581-B</strong></li>
      <li>Fixed <strong>CD audio</strong> tracks on paths with special characters on Windows (again)</li>
      <li>Fixed <strong>CD folder mounting</strong> crashing the emulator on some macOS hosts</li>
      <li>Fixed <strong>CD folder mounting</strong> DOS file name conversion for dotfiles</li>
      <li>Fixed <strong>CD folder mounting</strong> file timestamps older than 1970 or newer than 2037 (not displayed by all guest operating systems)</li>
      <li>Fixed <strong>MDS/MDX</strong> image files remaining locked after a load failure</li>
      <li>Fixed <strong>IDE hard disk</strong> inaccuracy when accessing sectors beyond the limit</li>
      <li>Fixed <strong>IDE hard disk</strong> cylinder count, PIO and SDMA capability reporting inconsistencies</li>
      <li>Fixed inaccuracies on IDE hard disk models: <strong>Seagate U8</strong>, <strong>Western Digital Expert 135BA</strong></li>
    </ul>
  </li>
</ul>]]></content><author><name>richardg867</name></author><summary type="html"><![CDATA[Release for May 2026.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://86box.net/assets/images/v6.0/hero.png" /><media:content medium="image" url="http://86box.net/assets/images/v6.0/hero.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">86Box v5.3</title><link href="http://86box.net/2025/12/21/86box-v5-3.html" rel="alternate" type="text/html" title="86Box v5.3" /><published>2025-12-21T00:00:00+00:00</published><updated>2025-12-21T00:00:00+00:00</updated><id>http://86box.net/2025/12/21/86box-v5-3</id><content type="html" xml:base="http://86box.net/2025/12/21/86box-v5-3.html"><![CDATA[<figure class="image">
    <img src="/assets/images/v5.3/hero.png" class="heading" />
</figure>

<p>This is the December 2025 update to 86Box, bringing in performance improvements, bugfixes and some new hardware for the holidays.</p>

<hr />

<h2 id="main-features">Main features</h2>

<p>Several small and localized performance improvements have been made to emulation performance, including a new C runtime library for <strong>Windows host systems</strong>, optimizations to the <a href="/2022/01/07/pcem-migration-guide.html#the-new-recompiler">“new” dynamic recompiler</a> used on <strong>ARM and Apple Silicon host systems</strong>, as well as multithreading improvements to <strong>Voodoo</strong> and other video cards. We remain engaged in investigating more potential performance improvements for the next release.</p>

<p>The <a href="/2025/10/26/86box-v5-2.html#floppy-drive-sounds"><strong>floppy drive sounds</strong></a> feature added last release got a big update, with <strong>improved accuracy</strong> especially in head seeks, and new recordings from <strong>two 3.5”</strong> and <strong>three 5.25”</strong> floppy drives. The recordings have been moved to a new package outside of the ROM set, so read below for more information before upgrading.</p>

<hr />

<h2 id="important-changes">Important changes</h2>

<h3 id="asset-pack-and-floppy-sounds">Asset pack and floppy sounds</h3>

<p>Due to its large size, the floppy drive sound collection has been moved out of the ROM set and into a new <strong>asset pack</strong>, which is now included with <strong>release versions</strong> of 86Box downloaded from <a href="//github.com/86Box/86Box/releases">GitHub</a>, as the <code class="language-plaintext highlighter-rouge">assets</code> folder inside the <code class="language-plaintext highlighter-rouge">.zip</code> on Windows, or embedded within the AppImage on Linux or the app bundle on macOS. <strong>Linux packages</strong> may or may not include the asset pack; we recommend maintainers to include it in <code class="language-plaintext highlighter-rouge">/usr/share/86Box/assets</code> as part of the standard 86Box package.</p>

<p>If you use our <a href="//86box.net/builds"><strong>experimental builds</strong></a> or any other package without the asset pack, floppy sounds will not be available until you <strong>install the pack</strong> the same way you would install the ROM set. <a href="//github.com/86Box/assets/releases/v5.3">Download</a> and decompress it into an <code class="language-plaintext highlighter-rouge">assets</code> folder next to (not inside!) the <code class="language-plaintext highlighter-rouge">roms</code> folder in <a href="//86box.readthedocs.io/en/v5.3/usage/roms.html">any of the same places</a>: next to the 86Box application (Windows executable, Linux AppImage or macOS app bundle) or in one of the system-wide locations for your host operating system.</p>

<p>On top of the asset pack change, the <strong>Mitsumi</strong> and <strong>Teac</strong> floppy drive recordings from v5.2 have been removed for technical reasons, so you may need to <a href="//86box.readthedocs.io/en/v5.3/settings/floppycdrom.html#floppy-drives"><strong>reconfigure floppy sounds</strong></a> after upgrading.</p>

<h3 id="windows-7-and-8-support">Windows 7 and 8 support</h3>

<p>Windows 7 and 8 host systems are still supported for the time being, but on those Windows versions, the <strong>Visual C++ 2015 Redistributable</strong> must now be installed. You probably already have this installed from other applications or Windows updates, but in case you don’t and 86Box complains about a missing DLL, an installer can be downloaded from <a href="//www.microsoft.com/download/details.aspx?id=48145">Microsoft’s website</a> (get the x64 version).</p>

<hr />

<h2 id="changelog">Changelog</h2>

<h3 id="emulator">Emulator</h3>

<ul>
  <li>Improved overall performance on <a href="#main-features"><strong>Windows hosts</strong></a> by upgrading to the Universal C Runtime</li>
  <li>Added <a href="#asset-pack-and-floppy-sounds"><strong>asset pack</strong></a> for floppy drive sounds and other future features</li>
  <li>Added customizable <strong>Ctrl+Alt+Page Down</strong> keyboard shortcut to show or hide the user interface in full screen mode</li>
  <li>Added toolbar button, <strong>Action</strong> menu option and customizable <strong>Ctrl+Alt+I</strong> keyboard shortcut to <strong>temporarily disable the dynamic recompiler</strong> for troublesome applications</li>
  <li>Added relative path conversion to <strong>disk images</strong> located next to the 86Box application or one level above the machine folder (for portable setups)</li>
  <li>Fixed <strong>OpenGL renderer</strong> crashing the emulator when taking screenshots</li>
  <li>Fixed emulated display <strong>resolution changes</strong> occasionally crashing the emulator</li>
</ul>

<h3 id="user-interface">User interface</h3>

<ul>
  <li>Added a <strong>toolbar</strong> with quick commands to the manager</li>
  <li>Added <strong>icons</strong> to some menu entries</li>
  <li>Fixed <strong>refresh rate indicator</strong> displaying inaccurate numbers when a Voodoo add-in card is active</li>
  <li>Changed <strong>emulation speed</strong> indicator to be consistent across CPU frame size options</li>
  <li>Updated and cleaned up many translations</li>
</ul>

<h3 id="machines">Machines</h3>

<ul>
  <li><strong>808x</strong>
    <ul>
      <li>Added real time clock I/O port and IRQ configuration to the <strong>Multitech PC-500</strong> and <strong>PC-500 plus</strong></li>
      <li>Fixed <strong>Tandy 1000 family</strong> display shake effect used by some games</li>
    </ul>
  </li>
  <li><strong>286</strong>
    <ul>
      <li>Fixed extended memory support on <strong>C&amp;T PC/AT</strong> machines</li>
      <li>Fixed <strong>Amstrad PC5286</strong> keyboard issues when a PS/2 mouse is emulated</li>
    </ul>
  </li>
  <li><strong>386</strong>
    <ul>
      <li>Added Socket 1 486 CPU support to the <strong>IBM PS/55 model 5550-V</strong></li>
      <li>Renamed <strong>IBM PS/55 model 5550-T</strong> to <strong>5550-S/T Stage II</strong></li>
      <li>Renamed <strong>IBM PS/55 model 5550-V</strong> to <strong>5550-V0/V1</strong> and changed category to 386DX/486</li>
    </ul>
  </li>
  <li><strong>486</strong>
    <ul>
      <li>Fixed incorrect on-board video BIOS on the <strong>IBM PS/ValuePoint 433DX/Si</strong></li>
    </ul>
  </li>
  <li><strong>586</strong>
    <ul>
      <li>Added Socket 5 machine: <strong>HP Pavilion 50x0/70xx</strong></li>
      <li>Added Socket 7 machines: <strong>ASUS TX97-XV</strong>, <strong>HP Pavilion 51xx/7070/7090/71xx</strong>, <strong>52xx/53xx/71xx/72xx</strong>, <strong>73xx/74xx</strong></li>
      <li>Added on-board Crystal CS4232 sound to the <strong>Intel Advanced/AS</strong>, <strong>Advanced/ATX</strong> and <strong>Advanced/MA</strong></li>
      <li>Added RM Accelerator 350P2XB/450P3XB BIOS variant option to the <strong>AOpen AX6BC</strong></li>
      <li>Added Award BIOS option to the <strong>MSI MS-5124</strong> and <strong>MS-5146</strong></li>
      <li>Fixed BIOS settings for serial and parallel ports the <strong>Intel Advanced/ATX</strong></li>
    </ul>
  </li>
  <li><strong>686</strong>
    <ul>
      <li>Added Slot 1 machine: <strong>MSI MS-6199VA</strong> (plus Compaq and Packard Bell BIOS variants)</li>
      <li>Added Socket 370 machines: <strong>MSI MS-6318</strong> (plus Elonex, Fujitsu-Siemens, HP and Medion BIOS variants), <strong>Samsung CAIRO-5</strong></li>
      <li>Added more BIOS version options to the <strong>ABIT AB-BX6</strong></li>
      <li>Added Leadtek WinFast 8000BX BIOS variant option to the <strong>Supermicro P6SBA</strong></li>
      <li>Changed default <strong>ABIT BX6</strong> BIOS back to the EG version</li>
      <li>Changed maximum RAM on the <strong>AOpen AP61</strong></li>
    </ul>
  </li>
</ul>

<h3 id="hardware">Hardware</h3>

<ul>
  <li><strong>Core</strong>
    <ul>
      <li>Improved CPU performance on <a href="#main-features"><strong>ARM hosts</strong></a>, especially on MMX applications</li>
      <li>Fixed specific FPU inaccuracy on <strong>ARM hosts</strong> leading to loss of sound on some Windows games</li>
      <li>Fixed <strong>INC</strong>/<strong>DEC</strong> instruction legality inaccuracy</li>
    </ul>
  </li>
  <li><strong>Display</strong>
    <ul>
      <li><a href="#main-features">Improved emulation performance</a> of <strong>Voodoo</strong>, <strong>ATI Mach64</strong> and <strong>S3</strong> video cards</li>
      <li>Fixed <strong>VideoMagic ETW32PVS</strong> (Tseng ET4000/W32p) VLB video card not being selectable on Linux and other case-sensitive systems</li>
      <li>Fixed <strong>IBM 8514/A</strong> ATI MCA variant crashing the emulator on startup on some hosts</li>
      <li>Fixed <strong>incorrect refresh rates</strong> on many cards (again)</li>
      <li>Fixed <strong>S3 ViRGE</strong> rendering glitches on full motion video applications (again)</li>
      <li>Fixed <strong>IBM XGA</strong> rendering glitches on specific color depths</li>
      <li>Fixed <strong>Matrox</strong> and <strong>Voodoo</strong> texture glitches on 3D applications</li>
      <li>Fixed <strong>Voodoo Banshee/3</strong> text rendering glitches on Linux</li>
      <li>Fixed rendering issues with specific drivers on <strong>S3 9xx</strong> and <strong>Tseng ET4000/W32</strong> cards</li>
      <li>Fixed transparency glitches with more games on <strong>Voodoo</strong> cards</li>
      <li>Fixed VGA scrolling behavior not matching real hardware on <strong>ATI Mach64</strong> and <strong>Tseng ET4000/W32</strong> cards</li>
      <li>Fixed incorrect dark gray color on the <strong>IBM 5153</strong> CGA monitor</li>
    </ul>
  </li>
  <li><strong>Input</strong>
    <ul>
      <li>Fixed <strong>XT keyboard</strong> key count option not taking effect</li>
    </ul>
  </li>
  <li><strong>Sound</strong>
    <ul>
      <li>Added <strong>Crystal CS4232</strong> ISA sound card</li>
      <li>Added <strong>OPTi 82C930</strong> and <strong>82C931</strong> ISA sound cards</li>
      <li>Fixed <strong>Sound Blaster 16</strong> and <strong>AWE</strong> sound issues on some DOS games</li>
      <li>Fixed incorrect default I/O port on the <strong>Covox Voice Master Key</strong></li>
      <li>Removed <strong>Raise CODEC interrupt</strong> option from <strong>Aztech Sound Galaxy</strong> cards as it is no longer required</li>
    </ul>
  </li>
  <li><strong>Ports</strong>
    <ul>
      <li>Added <strong>Windows named pipe client</strong> mode to serial passthrough</li>
      <li>Fixed emulation hangs with serial passthrough to <strong>Windows named pipes</strong> in server mode (known issue: VMware serial ports fail to connect if 86Box is the pipe server; use VMware as the server and 86Box as the client instead)</li>
    </ul>
  </li>
  <li><strong>Storage</strong>
    <ul>
      <li>Improved accuracy of <a href="#main-features"><strong>floppy drive sounds</strong></a></li>
      <li>Added a new set of <a href="#main-features"><strong>floppy drive sounds</strong></a></li>
      <li>Added IDE CD-ROM drive models: <strong>HITACHI CDR-8435</strong> (for the RM Accelerator 350P2XB/450P3XB (AOpen AX6BC)), <strong>TOSHIBA CD-ROM XM-6102B</strong></li>
      <li>Added SCSI CD-ROM drive models: <strong>NEC CD-ROM DRIVE:900</strong>, <strong>PLEXTOR CD-ROM PX-12CS</strong>, <strong>PX-12TS</strong>, <strong>PX-83CS</strong>, <strong>TOSHIBA CD-ROM XM-3701B</strong></li>
      <li>Fixed missing DVD support on the <strong>HITACHI GD-7500</strong> and <strong>HL-DT-ST DVDRAM GSA-4160</strong> CD-ROM drive models</li>
      <li>Fixed <strong>Panasonic/MKE</strong> CD-ROM drives not being detected by OS/2</li>
      <li>Fixed floppy drive controller inaccuracy crashing <strong>1B/V3</strong></li>
      <li>Removed Mitsumi and Teac <a href="#main-features"><strong>floppy drive sounds</strong></a> which could not be updated to the improved system</li>
    </ul>
  </li>
  <li><strong>Other</strong>
    <ul>
      <li>Added base memory backfill support to the <strong>Everex EV-159</strong> ISA memory expansion card</li>
    </ul>
  </li>
</ul>]]></content><author><name>richardg867</name></author><summary type="html"><![CDATA[Release for December 2025.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://86box.net/assets/images/v5.3/hero.png" /><media:content medium="image" url="http://86box.net/assets/images/v5.3/hero.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">86Box v5.2</title><link href="http://86box.net/2025/10/26/86box-v5-2.html" rel="alternate" type="text/html" title="86Box v5.2" /><published>2025-10-26T00:00:00+00:00</published><updated>2025-10-26T00:00:00+00:00</updated><id>http://86box.net/2025/10/26/86box-v5-2</id><content type="html" xml:base="http://86box.net/2025/10/26/86box-v5-2.html"><![CDATA[<figure class="image">
    <img src="/assets/images/v5.2/hero.png" class="heading" />
</figure>

<p>This is the October 2025 update to 86Box, bringing in a few more new features, lots of new machines and the obligatory bugfixes.</p>

<hr />

<h2 id="main-features">Main features</h2>

<h3 id="floppy-drive-sounds">Floppy drive sounds</h3>

<p>We often get requests to add <strong>ambient sounds</strong>, to make emulated setups sound just like real hardware for a more immersive experience. <a href="//github.com/Domppari">Domppari</a> took the first step towards that by contributing <strong>floppy sounds</strong> recorded from actual drives, leveraging our accurate floppy emulation to track the drive’s motor and head activity.</p>

<p>These sounds are not enabled by default; they can be enabled through the <a href="//86box.readthedocs.io/en/v5.2/settings/floppycdrom.html#floppy-drives"><strong>floppy drive settings</strong></a> by selecting a drive model in the <strong>Audio</strong> box. Recordings from <strong>one 3.5”</strong> and <strong>two 5.25”</strong> drive models are currently available as part of the ROM set.</p>

<h3 id="other-highlights">Other highlights</h3>

<p>Many new <strong>game port joystick types</strong> have been added, between generic options and real models from CH Products and Thrustmaster, expanding upon the previous joystick work led by <a href="//github.com/jriwanek">jriwanek</a> in v5.0.</p>

<p>The Settings window’s <strong>machine list</strong> is quite overwhelming due to the sheer amount of categories and machine models available. Locating a specific model - when following a guide, for instance - can be tricky, so a <strong>search box</strong> has been added to help quickly locate any machine by its name or chipset.</p>

<hr />

<h2 id="important-changes">Important changes</h2>

<h3 id="machine-changes">Machine changes</h3>

<p>The <strong>IBM PCjr</strong> no longer has a floppy drive controller by default. PCjr setups with a floppy drive must now have the <a href="//86box.readthedocs.io/en/v5.2/settings/storage.html#fd-controller">FD controller</a> set to <strong>Internal device</strong> for the drive to work.</p>

<p>Continuing the work <a href="/2025/09/14/86box-v5-1.html#merged-machines">started in v5.1</a>, <strong>3 OEM machines</strong> (listed in the 686 category <a href="#machines">below</a>) have moved and are now BIOS variant options for their respective base motherboards. As before, configuration and CMOS data is <strong>migrated automatically</strong> upon upgrading to v5.2, and if the machine no longer boots, make sure the <strong>ROM set</strong> is up to date.</p>

<p>On top of that, 5 other machines (listed in the 586 and 686 categories <a href="#machines">below</a>) have received BIOS updates; however, existing emulated setups will remain on the previous BIOS until an NVRAM wipe is performed, either <a href="//86box.readthedocs.io/en/v5.2/usage/manager.html#machine-list">through the manager’s right-click menu</a> or by deleting the respective <code class="language-plaintext highlighter-rouge">.bin</code> file in the machine’s <code class="language-plaintext highlighter-rouge">nvr</code> folder.</p>

<h3 id="host-system-deprecations">Host system deprecations</h3>

<p><strong>32-bit x86 and ARM32</strong> host systems are no longer fully supported when compiling 86Box from source. Support for these 32-bit architectures has been <a href="/2024/07/26/86box-v4-2.html#32-bit-deprecation-notice">deprecated for over a year</a>, with builds no longer provided <a href="/2025/08/24/86box-v5-0.html#host-system-deprecations">since v5.0</a>; it has now been removed from the source code to allow us to better focus on the relevant x64 and ARM64 architectures.</p>

<p>macOS <strong>High Sierra 10.13</strong> and <strong>Mojave 10.14</strong> support is still on track to be removed in a future update.</p>

<hr />

<h2 id="changelog">Changelog</h2>

<h3 id="emulator">Emulator</h3>

<ul>
  <li>Slightly improved emulator startup speed through ROM scanning optimizations</li>
  <li>Fixed <strong>OpenGL shader</strong> loading errors and black screens on some hosts</li>
  <li>Fixed <strong>OpenGL renderer</strong> producing invisible or transparent screenshots</li>
  <li>Fixed compilation from source on hosts with <strong>Qt 6.10</strong></li>
</ul>

<h3 id="user-interface">User interface</h3>

<ul>
  <li>Added <a href="#other-highlights">search box</a> to the Settings window’s <strong>machine list</strong></li>
  <li>Fixed erratic window movement upon emulated display <strong>resolution changes</strong></li>
  <li>Fixed <strong>Force 4:3 display ratio</strong> option not working when combined with the <strong>Resizable window</strong> option</li>
  <li>Fixed inaccurate display sizing with the <strong>Force 4:3 display ratio</strong> option in windowed mode</li>
  <li>Fixed display glitches when <strong>resizing the window</strong> while emulation is paused</li>
  <li>Fixed incorrect window size after <strong>changing languages</strong></li>
  <li>Improved ordering on the Settings window <strong>joystick list</strong></li>
  <li>Improved numeric precision of <strong>OpenGL shader parameter</strong> configuration sliders</li>
  <li>Updated translations: <strong>Chinese (Simplified)</strong>, <strong>Chinese (Taiwan)</strong>, <strong>Dutch</strong>, <strong>Polish</strong></li>
</ul>

<h3 id="machines">Machines</h3>

<ul>
  <li><strong>808x</strong>
    <ul>
      <li>Added real time clock to the <strong>Multitech PC-500</strong> and <strong>PC-500 plus</strong></li>
      <li>Added older BIOS version option to the <strong>DTK PIM-TB10-Z</strong></li>
      <li>Added older and newer BIOS version options to the <strong>Multitech PC-500 plus</strong></li>
      <li>Added newer BIOS version option to the <strong>Multitech PC-700</strong></li>
      <li>Fixed <strong>IBM PCjr</strong> display glitches in 4-bit mode</li>
      <li>Changed default <strong>Multitech PC-700</strong> BIOS to the newer 3.30 version</li>
      <li><a href="#machine-changes">Removed floppy disk controller</a> from the default <strong>IBM PCjr</strong> configuration</li>
    </ul>
  </li>
  <li><strong>286</strong>
    <ul>
      <li>Added Commodore PC 40 BIOS variant and newer version options to the <strong>Multitech PC-900</strong></li>
      <li>Fixed incorrect memory detection on 286 <strong>IBM PS/2</strong> machines</li>
      <li>Changed maximum RAM on the <strong>IBM PS/2 Model 30-286</strong> and <strong>Model 60</strong></li>
      <li>Changed <strong>Wells American A*Star</strong> memory size selection to 128 KB increments</li>
    </ul>
  </li>
  <li><strong>386</strong>
    <ul>
      <li>Added AMI BIOS option to the <strong>DataExpert 386C</strong></li>
      <li>Changed default <strong>Compaq Deskpro 386</strong> BIOS to the newer 1988 version</li>
      <li>Renamed <strong>Chaintech 325AX</strong> to <strong>3xxAX/AXB</strong></li>
      <li>Renamed <strong>Packard Bell Legend 300SX</strong> to <strong>PB300/PB320</strong></li>
    </ul>
  </li>
  <li><strong>486</strong>
    <ul>
      <li>Added Socket 3 machine: <strong>ABIT AB-AH4T</strong></li>
      <li>Fixed cache error on the <strong>Jetway J-403TG</strong> AMI BIOS</li>
      <li>Fixed incorrect boot logo on the <strong>Epson ActionPC 2600</strong></li>
      <li>Changed default <strong>Jetway J-403TG</strong> BIOS to the AMI variant</li>
      <li>Changed maximum CPU support on the <strong>ABIT AB-AH4</strong></li>
      <li>Renamed <strong>ABIT AV4</strong> to <strong>AB-AV4</strong></li>
      <li>Renamed <strong>Chaintech 433SC</strong> to <strong>4xxSX/SC</strong></li>
      <li>Renamed <strong>Compaq Presario 7100/7200 Series 486</strong> to <strong>7100 Series 486</strong></li>
      <li>Renamed <strong>Packard Bell PB410A</strong> to <strong>PB410/PB410A/PB420/PB420T</strong></li>
    </ul>
  </li>
  <li><strong>586</strong>
    <ul>
      <li>Added Socket 4/5 machine: <strong>DEC Celebris 5xx</strong></li>
      <li>Added Socket 5 machines: <strong>AST Bravo MS P/90</strong>, <strong>AT&amp;T Globalyst 620/630</strong>, <strong>DFI G586VPM</strong>, <strong>IBM PC 3x0 Type 65x6</strong>, <strong>Micronics M54Si</strong>, <strong>Packard Bell Agoura/Wildcat</strong></li>
      <li>Added Socket 7 machines: <strong>HP Vectra VE 5/xxx Series 2</strong>, <strong>Intel Advanced/AS</strong>, <strong>Intel Advanced/MA</strong> (plus AST Bravo MS-T BIOS variant), <strong>ZEOS Boa 2</strong></li>
      <li>Added Super Socket 7 machine: <strong>DFI K6BV3+</strong></li>
      <li>Added on-board Yamaha YMF701 sound to the <strong>Intel TC430HX</strong> and <strong>Sony Vaio PCV-90</strong></li>
      <li>Added older BIOS version option to the <strong>AOpen AX6BC</strong></li>
      <li>Added newer BIOS version options to the <strong>ASUS P/I-P5MP3</strong>, <strong>ECS P5VX-B</strong>, <strong>FIC PT-2000</strong>, <strong>Micronics M7S-Hi</strong> and <strong>NEC PowerMate Vxxx</strong></li>
      <li>Added eSupport BIOS variant option to the <strong>Gigabyte GA-5AX</strong></li>
      <li>Added Gateway 2000 BIOS variant option to the <strong>Intel Advanced/ZP</strong></li>
      <li>Added Sony Vaio PCV-130/150 BIOS variant option to the <strong>Intel AN430TX</strong></li>
      <li>Added Award BIOS option to the <strong>MSI MS-5119</strong> and <strong>QDI FMB</strong></li>
      <li>Added non-OEM BIOS variant option to the <strong>TriGem Delhi-III</strong></li>
      <li>Added Tulip Vision Line TP90 BIOS variant option to the <strong>Tyan Tsunami ATX</strong></li>
      <li>Fixed on-board S3 ViRGE/DX video on the <strong>Intel TC430HX</strong></li>
      <li>Fixed incorrect boot logo on the <strong>TriGem Hawk</strong></li>
      <li><a href="#machine-changes">Changed</a> default <strong>Biostar M5ATA</strong> BIOS to the newer 1998 version</li>
      <li><a href="#machine-changes">Changed</a> default <strong>Micronics M7S-Hi</strong> BIOS to the newer 1998 version</li>
      <li><a href="#machine-changes">Changed</a> default <strong>NEC PowerMate Vxxx</strong> BIOS to the newer 00.04.15 version</li>
      <li>Renamed <strong>HP Vectra VL 5 Series 4</strong> to <strong>Vectra VL 5/xxx Series 4</strong></li>
      <li>Renamed <strong>Packard Bell PB520R</strong> to <strong>Robin LC</strong></li>
      <li>Renamed <strong>Packard Bell PB640</strong> to <strong>Thousand Oaks</strong></li>
      <li>Renamed <strong>Packard Bell Multimedia C110</strong> to <strong>Orlando/2D/3D/MMX</strong></li>
      <li>Renamed <strong>Packard Bell Multimedia M415</strong> to <strong>PB810/820</strong></li>
      <li>Renamed <strong>Packard Bell Bora Pro</strong> to <strong>Bora/Bora Pro</strong></li>
      <li>Renamed <strong>Sony Vaio PCV-90</strong> to <strong>PCV-70/90/100/120</strong></li>
    </ul>
  </li>
  <li><strong>686</strong>
    <ul>
      <li>Added Slot 1 machines: <strong>ECS P6BXT-A+</strong>, <strong>MiTAC/Trigon 6110Zu</strong>, <strong>MSI MS-6119</strong> (plus Packard Bell Tacoma and Viglen Vig69M BIOS variants), <strong>MSI MS-6147</strong> (plus Packard Bell Tempest BIOS variant)</li>
      <li>Added newer beta BIOS version option to the <strong>ABIT LX6</strong></li>
      <li>Added Amptron PII-3100 BIOS variant option to the <strong>Gigabyte GA-686BX</strong></li>
      <li><a href="#machine-changes">Moved</a> <strong>Compaq ProSignia S316/318</strong> into the base <strong>ECS P6BXT-A+</strong> as a BIOS variant option</li>
      <li><a href="#machine-changes">Moved</a> <strong>HP Vectra VEi 8</strong> into the base <strong>MiTAC/Trigon 6110Zu</strong> as a BIOS variant option</li>
      <li><a href="#machine-changes">Moved</a> <strong>LG IBM Multinet i x7G</strong> into the base <strong>MSI MS-6119</strong> as a BIOS variant option</li>
      <li>Fixed <strong>ASUS CUBX</strong> BIOS option to disable the CMD IDE controller</li>
      <li><a href="#machine-changes">Changed</a> default <strong>FIC PO-6000</strong> BIOS to the newer F05C version</li>
      <li><a href="#machine-changes">Changed</a> default <strong>ABIT BX6</strong> BIOS to the newer QS version</li>
      <li>Renamed <strong>ABIT LX6</strong> to <strong>AB-LX6</strong></li>
      <li>Renamed <strong>ABIT BF6</strong> to <strong>AB-BF6</strong></li>
      <li>Renamed <strong>ABIT BX6</strong> to <strong>AB-BX6</strong></li>
    </ul>
  </li>
</ul>

<h3 id="hardware">Hardware</h3>

<ul>
  <li><strong>Core</strong>
    <ul>
      <li>Added 570 and 600 MHz speed options to the <strong>AMD K6-2</strong> on Super Socket 7 machines</li>
      <li>Removed <a href="#host-system-deprecations"><strong>32-bit host support</strong></a> from the dynamic recompiler and other components</li>
    </ul>
  </li>
  <li><strong>Display</strong>
    <ul>
      <li>Added <strong>ATI WinCharger</strong> (Mach64CT) and <strong>Mach64VT</strong> PCI video cards</li>
      <li>Added gamma control support to the <strong>ATI Mach64VT2</strong></li>
      <li>Fixed PCI <strong>Tseng ET4000/W32</strong> cards causing POST failures</li>
      <li>Fixed <strong>incorrect refresh rates</strong> on many cards (again)</li>
      <li>Fixed <strong>ATI Mach64</strong> and <strong>S3 ViRGE</strong> rendering glitches on full motion video applications</li>
      <li>Fixed display issues with DOS VBE drivers on <strong>S3 ViRGE</strong> and <strong>Trio3D/2X</strong> cards</li>
      <li>Fixed rendering issues with specific drivers on <strong>ATI Mach64</strong>, <strong>S3 9xx</strong> and <strong>Tseng ET4000/W32p</strong> cards</li>
      <li>Fixed <strong>emulator crashes</strong> in very specific VGA text mode applications</li>
      <li>Changed video BIOS on several <strong>Tseng ET4000/W32</strong> cards and the <strong>ELSA Winner 1000 805i</strong> (S3 86C805)</li>
      <li>Removed <strong>VideoMagic</strong> (Tseng ET4000/W32p) PCI video card due to an incorrect video BIOS</li>
    </ul>
  </li>
  <li><strong>Input</strong>
    <ul>
      <li>Added <strong>Gravis PC GamePad</strong> game port joystick</li>
      <li>Added <strong>CH Flightstick</strong>, <strong>CH Virtual Pilot</strong>, <strong>CH Virtual Pilot Pro</strong>, <strong>CH Pedals Pro</strong> and <strong>Thrustmaster Formula T1/T2</strong> <a href="#other-highlights">game port joysticks</a></li>
      <li>Added more <a href="#other-highlights"><strong>generic game port joystick</strong></a> types</li>
      <li>Added <strong>trigger button</strong> names to the mappings for several game port joysticks</li>
      <li>Fixed mapping of multiple <strong>POV hats</strong> to joysticks</li>
      <li>Temporarily removed host touchscreen input support from the <strong>3M MicroTouch</strong> due to unexpected performance issues in some systems</li>
    </ul>
  </li>
  <li><strong>Sound</strong>
    <ul>
      <li>Added <strong>Yamaha YMF701</strong> (OPL3-SA), <strong>YMF718</strong> (OPL3-SA2) and <strong>YMF719</strong> (OPL3-SA3) ISA sound cards</li>
      <li>Improved <strong>AdLib Gold</strong> sound quality</li>
      <li>Fixed <strong>MIDI input</strong> hanging emulation upon receiving a SysEx message</li>
      <li>Fixed <strong>Aztech Sound Galaxy Nova 16 Extra</strong> not working with some drivers</li>
      <li>Fixed <strong>Aztech Sound Galaxy Pro 16 AB</strong> and <strong>Nova 16 Extra</strong> volume controls</li>
      <li>Fixed <strong>Yamaha OPL4</strong> incorrectly falling back to OPL3 mode on Linux drivers</li>
      <li>Fixed <strong>Crystal CS423x</strong> OPL3 not working in Sound Blaster Pro compatibility mode</li>
      <li>Fixed <strong>Crystal CS423x</strong> OPL3 volume control</li>
      <li>Fixed <strong>Crystal CS4231</strong> codec detection by some drivers</li>
      <li>Fixed <strong>AdLib Gold</strong> volume clipping</li>
    </ul>
  </li>
  <li><strong>Network</strong>
    <ul>
      <li>Fixed incorrect speed on 100 Mbit <strong>DEC</strong> network cards</li>
      <li>Fixed <strong>Realtek RTL8019AS</strong> detection by DOS drivers</li>
      <li>Fixed <strong>Realtek RTL8139</strong> not using Realtek MAC addresses</li>
    </ul>
  </li>
  <li><strong>Storage</strong>
    <ul>
      <li>Added optional <a href="#floppy-drive-sounds"><strong>floppy drive sounds</strong></a></li>
      <li>Added CD-ROM drive models: <strong>GOLDSTAR CRD-8400B</strong>, <strong>SONY CD-ROM CDU611</strong> (for the Sony Vaio PCV-130/150 (Intel AN430TX) recovery disc), <strong>TOSHIBA DVD-ROM SD-M1202</strong>, <strong>MATSHITA CR-562</strong></li>
      <li>Added hard disk models: <strong>IBM DSAA-3270</strong>, <strong>Quantum Fireball EX12.7A</strong>, <strong>Quantum Fireball LCT-08</strong>, <strong>Western Digital Caviar 35100</strong></li>
      <li>Added port 630h option to the <strong>Panasonic/MKE</strong> CD-ROM interfaces (matching certain Aztech Sound Galaxy cards)</li>
      <li>Added <strong>REM TAOGAP</strong> support to cue/bin CD-ROM images</li>
      <li>Fixed <strong>PS/2 ESDI</strong> controller BIOS not loading when configured to some addresses</li>
      <li>Fixed detection of secondary <strong>IDE devices</strong> alongside an ATAPI primary device on some operating systems (again)</li>
      <li>Fixed configuration files from older versions resulting in <strong>multiple internal hard disk controllers</strong></li>
    </ul>
  </li>
</ul>]]></content><author><name>richardg867</name></author><summary type="html"><![CDATA[Release for October 2025.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://86box.net/assets/images/v5.2/hero.png" /><media:content medium="image" url="http://86box.net/assets/images/v5.2/hero.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">86Box v5.1</title><link href="http://86box.net/2025/09/14/86box-v5-1.html" rel="alternate" type="text/html" title="86Box v5.1" /><published>2025-09-14T00:00:00+00:00</published><updated>2025-09-14T00:00:00+00:00</updated><id>http://86box.net/2025/09/14/86box-v5-1</id><content type="html" xml:base="http://86box.net/2025/09/14/86box-v5-1.html"><![CDATA[<figure class="image">
    <img src="/assets/images/v5.1/hero.png" class="heading" />
</figure>

<p>This is the September 2025 update to 86Box, bringing in some new features and the results of a bugfix marathon started right after <a href="/2025/08/24/86box-v5-0.html">the v5.0 release</a>.</p>

<hr />

<h2 id="important-changes">Important changes</h2>

<h3 id="merged-machines">Merged machines</h3>

<p>In previous versions of 86Box, several machines had <strong>separate entries</strong> in the machine list for different BIOS vendors or OEM customizations. These variants have now been <strong>merged</strong> into their respective base entries, using the new BIOS variant selection system introduced in v5.0, accessed through the <strong>Configure</strong> button next to the machine selector.</p>

<p>If your emulated setup uses one of those machine variants, upgrading to 86Box v5.1 will <strong>automatically migrate</strong> the configuration and CMOS data to this new system. After this migration, downgrading to v5.0 or older is not recommended. If the machine no longer boots after upgrading, make sure the <strong>ROM set</strong> is up to date.</p>

<h3 id="host-system-deprecations">Host system deprecations</h3>

<p>As noted in the <a href="/2025/08/24/86box-v5-0.html#host-system-deprecations">v5.0 release announcement</a>, support for macOS hosts running <strong>High Sierra 10.13</strong> and <strong>Mojave 10.14</strong> is scheduled to be removed. However, due to the short amount of time since the previous release, 86Box v5.1 <strong>still supports</strong> these macOS versions, and the removal will take place in a future update.</p>

<hr />

<h2 id="changelog">Changelog</h2>

<h3 id="emulator">Emulator</h3>

<ul>
  <li>Added <strong>input scaling</strong> options to the OpenGL 3.0 Core renderer</li>
  <li>Added saving of <strong>full screen mode</strong> after exiting the emulator</li>
  <li>Added <strong>portable mode</strong> enabled by placing an empty <code class="language-plaintext highlighter-rouge">86box_global.cfg</code> file next to the Windows executable, Linux AppImage or macOS app bundle</li>
  <li>Fixed keyboard shortcuts with <strong>numpad keys</strong> in full screen mode</li>
  <li>Fixed <strong>command line options</strong> not applying to machines started from the manager</li>
  <li>Fixed <code class="language-plaintext highlighter-rouge">--clear</code> command line option in its long form</li>
</ul>

<h3 id="user-interface">User interface</h3>

<ul>
  <li>Added <strong>color scheme override</strong> option to the <strong>Preferences</strong> window on Windows hosts</li>
  <li>Added <strong>remember size &amp; position</strong> option to the manager’s <strong>Preferences</strong> window</li>
  <li>Added <strong>interlaced mode indication</strong> to the refresh rate display</li>
  <li>Added <strong>machine actions</strong> to the manager’s right-click menu</li>
  <li>Improved ordering on Settings window <strong>machine lists</strong></li>
  <li>Fixed <strong>resizable window option</strong> crashing the emulator on Windows hosts</li>
  <li>Fixed incorrect window size when hiding the <strong>toolbar</strong> and <strong>status bar</strong></li>
  <li>Fixed blank sections and missing CD-ROM information on the manager’s <strong>machine details</strong> display</li>
  <li>Updated translations: <strong>Chinese (Taiwan)</strong>, <strong>Finnish</strong>, <strong>French</strong>, <strong>Italian</strong>, <strong>Portuguese (Brazil)</strong></li>
</ul>

<h3 id="machines">Machines</h3>

<ul>
  <li><strong>Multiple categories</strong>
    <ul>
      <li>Fixed floppy disk error on several machines with <strong>Winbond</strong> Super I/O</li>
    </ul>
  </li>
  <li><strong>808x</strong>
    <ul>
      <li>Added 8088 machine: <strong>Multitech PC-500</strong></li>
      <li>Added display line doubling modes to the <strong>Amstrad PC1512</strong>, <strong>PC1640</strong>, <strong>IBM PCjr</strong> and <strong>Tandy 1000</strong> family</li>
      <li>Fixed <strong>Amstrad PC1512</strong> screen clearing effect</li>
      <li>Fixed F11 and F12 keys not working on the <strong>Tandy 1000 family</strong></li>
      <li>Renamed the existing <strong>Multitech PC-500</strong> to <strong>PC-500 plus</strong></li>
      <li>Changed <strong>Olivetti M19</strong> BIOS revision to a newer one</li>
    </ul>
  </li>
  <li><strong>286</strong>
    <ul>
      <li>Added machine: <strong>Multitech PC-900</strong></li>
      <li>Added Model 50Z BIOS variant option to the <strong>IBM PS/2 Model 50</strong></li>
      <li>Fixed chipset name on the <strong>Hyundai Super-286C</strong></li>
      <li>Renamed <strong>AMI IBM AT</strong> to <strong>Trangg Bow Unknown 286</strong></li>
      <li>Renamed <strong>Phoenix IBM AT</strong> and <strong>Quadtel IBM AT</strong> into <strong>AT clones</strong></li>
      <li>Changed maximum RAM on the <strong>IBM AT clones</strong></li>
      <li>Changed minimum RAM on the <strong>Senor Science Co. SCAT-286-003</strong></li>
    </ul>
  </li>
  <li><strong>386</strong>
    <ul>
      <li>Moved BIOS version variants of the <strong>Compaq Deskpro 386</strong> into a single entry with BIOS variant selection</li>
      <li>Moved MR BIOS variants of the <strong>Chaintech 325AX</strong> and <strong>DataExpert SX495</strong> into the base machines as BIOS variant options</li>
      <li>Reverted incorrect removal of the on-board IDE controller from the <strong>Commodore SL386SX-16</strong></li>
      <li>Fixed keyboard not working properly on the <strong>Acrosser AR-B1374</strong></li>
      <li>Fixed parallel port on the <strong>CAF Technology C747</strong></li>
    </ul>
  </li>
  <li><strong>486</strong>
    <ul>
      <li>Added Socket 1 machine: <strong>Olivetti PCS 44/C</strong></li>
      <li>Moved Rev D and MR BIOS variants of the <strong>Jetway J-403TG</strong> into the base machine as BIOS variant options</li>
      <li>Moved <strong>IBM Aptiva 510/710/Vision</strong> into the base <strong>IBM PC 330 (type 6573)</strong> as a BIOS variant option</li>
      <li>Fixed <strong>AMI WinBIOS 486 PCI</strong> not booting</li>
      <li>Fixed floppy drives not working on the <strong>Silicon Valley Computer 486WB</strong></li>
      <li>Fixed keyboard not working properly on the <strong>Advanced Integration Research 486PI</strong>, <strong>AMI Super Voyager PCI</strong>, <strong>ECS Elite UM8810P-AIO</strong>, <strong>Intel Classic/PCI ED</strong> and <strong>MSI MS-4145</strong></li>
      <li>Fixed Fixed I/O port resource conflict error on the <strong>ICS SB486P</strong></li>
      <li>Fixed <strong>Shuttle HOT-433A</strong> Award BIOS option not working properly</li>
      <li>Fixed <strong>Intel Classic/PCI</strong> not saving BIOS settings</li>
      <li>Renamed <strong>Dell 466/NP</strong> to <strong>Dell System 4xx/NP</strong></li>
      <li>Changed maximum RAM on the <strong>Acer V10</strong></li>
    </ul>
  </li>
  <li><strong>586</strong>
    <ul>
      <li>Added Socket 4 machine: <strong>Intel Premiere/PCI</strong> (Batman)</li>
      <li>Added newer BIOS version option to the <strong>Biostar M5ATA</strong></li>
      <li>Added older BIOS version option to the <strong>Rise R534F</strong></li>
      <li>Added NEC PowerMate V2xxx/P2xxx BIOS variant option to the <strong>Intel CU430HX</strong></li>
      <li>Moved <strong>AMBRA DP60 PCI</strong> and <strong>Dell Dimension XPS P60</strong> into the base <strong>Intel Premiere/PCI</strong> as BIOS variant options</li>
      <li>Moved <strong>AMBRA DP90 PCI</strong> and <strong>Dell Dimension XPS Pxxx</strong> into the base <strong>Intel Premiere/PCI II</strong> as BIOS variant options</li>
      <li>Moved <strong>Gateway 2000 Thor</strong> into the base <strong>Intel Advanced/ATX</strong> as a BIOS variant option</li>
      <li>Moved <strong>Toshiba Equium 5200D</strong> into the base <strong>Intel CU430HX</strong> as a BIOS variant option</li>
      <li>Moved <strong>Toshiba Infinia 7201</strong> into the base <strong>Intel TC430HX</strong> as a BIOS variant option</li>
      <li>Moved MR BIOS variants of the <strong>ASUS P/I-P55TP4XE</strong> and <strong>Intel Advanced/ATX</strong> into the base machines as BIOS variant options</li>
      <li>Fixed <strong>TMC PAT54PV</strong> not booting</li>
      <li>Fixed IDE hard disks not working on the <strong>Dell Dimension XPS Pxxx</strong></li>
      <li>Fixed keyboard not working properly on the <strong>Teknor TEK-932</strong></li>
      <li>Changed default <strong>Rise R534F</strong> BIOS to the older 1998 version</li>
      <li>Changed maximum CPU support on the <strong>MSI MS-5119</strong></li>
    </ul>
  </li>
  <li><strong>686</strong>
    <ul>
      <li>Added newer BIOS version option to the <strong>ABIT BX6</strong></li>
      <li>Moved <strong>Dell Dimension XPS Pro___n</strong> and <strong>Gateway 2000 Venus</strong> into the base <strong>Intel VS440FX</strong> as BIOS variant options</li>
      <li>Fixed <strong>Micronics Spitfire</strong> hanging during POST</li>
    </ul>
  </li>
</ul>

<h3 id="hardware">Hardware</h3>

<ul>
  <li><strong>Core</strong>
    <ul>
      <li>Improved performance of <strong>386DX</strong> CPUs</li>
    </ul>
  </li>
  <li><strong>Display</strong>
    <ul>
      <li>Added loading of <strong>custom monitor EDID</strong> files</li>
      <li>Added configuration EEPROM support to <strong>ELSA S3</strong> cards</li>
      <li>Added <strong>256-color text mode</strong> support to VGA cards</li>
      <li>Improved <strong>CGA</strong> display line doubling mode quality</li>
      <li>Fixed incorrect refresh rates on the <strong>C&amp;T SuperEGA</strong></li>
      <li>Fixed <strong>Voodoo Banshee/3</strong> rendering glitches on direct SVGA applications</li>
      <li>Fixed <strong>S3 Trio32</strong> cursor rendering glitches</li>
      <li>Fixed <strong>Matrox</strong> rendering glitches on full motion video applications</li>
      <li>Fixed screen cut-off issues and incorrect refresh rates in <strong>S3</strong> cards</li>
    </ul>
  </li>
  <li><strong>Input</strong>
    <ul>
      <li>Added keyboard <strong>key remapping</strong> through manual configuration file editing</li>
      <li>Fixed <strong>game controller detection</strong> on macOS hosts</li>
    </ul>
  </li>
  <li><strong>Sound</strong>
    <ul>
      <li>Added <strong>Gravis UltraSound rev 3.7</strong> and <strong>Gravis UltraSound ACE</strong> ISA sound cards</li>
      <li>Added game port control to the <strong>Gravis Ultrasound</strong> family</li>
      <li>Fixed incorrect I/O port options on the <strong>Covox Sound Master Plus</strong></li>
      <li>Changed minimum RAM on the <strong>Gravis UltraSound MAX</strong></li>
    </ul>
  </li>
  <li><strong>Network</strong>
    <ul>
      <li>Fixed <strong>SLiRP</strong> changing its IP addresses on hard reset</li>
      <li>Fixed incorrect behavior with multiple <strong>DEC</strong> and/or <strong>Realtek RTL8139</strong> network cards in the same machine</li>
    </ul>
  </li>
  <li><strong>Ports</strong>
    <ul>
      <li>Added status line support to <strong>serial passthrough</strong></li>
      <li>Added international character set support to the <strong>ESC/P printer</strong></li>
      <li>Added 28800 and 33600 baud options to the <strong>modem</strong></li>
      <li>Renamed <strong>ESC/P printer</strong> to <strong>ESC/P 2</strong> to better reflect its hardware capabilities</li>
      <li>Fixed <strong>printers</strong> not behaving properly on faster emulated CPUs</li>
      <li>Fixed <strong>ECP mode</strong> printing on several machines</li>
      <li>Fixed <strong>ESC/P printer</strong> printing monospaced text with an incorrect font in some cases</li>
    </ul>
  </li>
  <li><strong>Storage</strong>
    <ul>
      <li>Added CD-ROM <strong>CRC/ECC check override</strong> through manual configuration file editing</li>
      <li>Fixed read errors with <strong>Video CD</strong>, <strong>Mode 2</strong> and <strong>multi-session</strong> CD-ROM images</li>
      <li>Fixed incorrect detection of DVDs in <strong>host drives</strong></li>
      <li>Fixed emulator crashes with <strong>SCSI devices</strong> on some operating systems and drivers</li>
      <li>Fixed detection of secondary <strong>IDE devices</strong> alongside an ATAPI primary device on some operating systems</li>
    </ul>
  </li>
</ul>]]></content><author><name>richardg867</name></author><summary type="html"><![CDATA[Release for September 2025.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://86box.net/assets/images/v5.1/hero.png" /><media:content medium="image" url="http://86box.net/assets/images/v5.1/hero.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">86Box v5.0</title><link href="http://86box.net/2025/08/24/86box-v5-0.html" rel="alternate" type="text/html" title="86Box v5.0" /><published>2025-08-24T00:00:00+00:00</published><updated>2025-08-24T00:00:00+00:00</updated><id>http://86box.net/2025/08/24/86box-v5-0</id><content type="html" xml:base="http://86box.net/2025/08/24/86box-v5-0.html"><![CDATA[<figure class="image">
    <img src="/assets/images/v5.0/hero.png" class="heading" />
</figure>

<p>This is the August 2025 update to 86Box, bringing in many new features, fixes, some important changes and an exciting preview for the highly-requested <strong>integrated manager</strong>.</p>

<hr />

<h2 id="main-features">Main features</h2>

<h3 id="manager-preview">Manager preview</h3>

<p>This release features a preview for one of the most requested 86Box features of all time: an <strong>integrated machine manager</strong> to organize all your emulated setups. This new manager is only meant to replace the old 86Box Manager and other simple front-ends; you can still use other managers with more features such as <a href="//github.com/notBald/Avalonia86">Avalonia 86</a>.</p>

<p>The manager is started by <strong>opening 86Box directly</strong>. This is a change from previous versions, where doing this would create or start an emulated machine in the current folder. Starting a machine directly (bypassing the manager) requires the <code class="language-plaintext highlighter-rouge">-P</code>/<code class="language-plaintext highlighter-rouge">--vmpath</code> command line option to be used with the machine’s path.</p>

<p>Emulated machines are stored in the following folders by default. You can move your existing machines there or change the folder through <strong>Tools</strong> &gt; <strong>Preferences</strong> &gt; <strong>System Directory</strong>; note that, for now, you must restart 86Box for the change to take effect.</p>

<ul>
  <li><strong>Windows:</strong> <code class="language-plaintext highlighter-rouge">C:\Users\[username]\86Box VMs</code> (same as the old 86Box Manager)</li>
  <li><strong>macOS:</strong> <code class="language-plaintext highlighter-rouge">~/Library/Application Support/86Box/Virtual Machines</code></li>
  <li><strong>Linux:</strong> <code class="language-plaintext highlighter-rouge">~/.local/share/86Box/Virtual Machines</code></li>
</ul>

<h3 id="other-highlights">Other highlights</h3>

<p>Mouse input and display output are now <b title="PureSmooth, in fact">much smoother</b>, especially on high refresh rate monitors, thanks to improvements to the emulator’s frame timing, input polling and video rendering systems. The frame timing changes may potentially have a negative performance impact on <strong>low-end systems</strong>, but the <a href="//86box.readthedocs.io/en/v5.0/settings/machine.html#cpu-frame-size"><strong>CPU frame size</strong></a> option can be changed to <strong>Larger frames</strong> to restore the previous behavior from v4.2.</p>

<p>The OpenGL 3.0 Core renderer, which allows for applying <a href="//docs.libretro.com/shader/crt/">CRT emulation</a> and other shader effects to the emulated display, has been completely reworked. New features include <strong>multiple shaders</strong>, support for shaders in the <strong><code class="language-plaintext highlighter-rouge">.glslp</code> format</strong> and configuring <strong>shader parameters</strong> through the user interface.</p>

<p>Out of the many new machines, a couple represent early attempts to bring standard PC-compatible architectures to the Japanese market, dominated at the time by the incompatible NEC PC-98 and other non-x86 computers. The <a href="/assets/images/v5.0/okiax.png" title="Screenshot of MS-DOS with AX support drivers loaded"><strong>OKI if386AX30L</strong></a> follows the <a href="//en.wikipedia.org/wiki/AX_architecture">AX specification</a> spearheaded by a consortium of manufacturers and Microsoft, while the <a href="/assets/images/v5.0/ps55.png" title="Screenshot of IBM PC DOS J4.08 for the PS/55 family"><strong>IBM PS/55 Model 5550</strong></a> is part of a family of PS/2 machines modified for that market’s needs. The AX specification’s <strong>JEGA</strong> and <strong>JVGA</strong> video cards are also available as standalone options for other machines. Emulation for all this hardware was contributed by <a href="//github.com/akmed772">Akamaki</a>.</p>

<p>CD-ROM has been around since the 1980s, but the IDE-based ATAPI interface we all know was only released in <a href="//www.os2museum.com/wp/the-secret-history-of-atapi/">1994</a>. Prior to this, CD-ROM drives used <strong>proprietary vendor-specific interfaces</strong> on the average PC, or SCSI on higher-end gear. Several of these early drives made by <strong>Panasonic/Matsushita</strong> are now emulated, along with a matching controller card available in both a standalone version and a Creative version commonly found in Sound Blaster cards. Emulation is based on the <a href="//github.com/polpo/picogus">PicoGUS</a> project, which in turn uses part of our code in its CD-ROM emulation feature - we appreciate the support!</p>

<p>On the subject of CD-ROM, the <strong>MDS/MDF</strong> disc image format used by Alcohol 120% and Daemon Tools is now supported. Note that encrypted images produced by newer versions of Daemon Tools are currently not supported.</p>

<p>On top of the new manager, many improvements have been made to the user interface, including <strong>dark mode support on Windows</strong>, <strong>write indicators</strong> on the status bar icons, and a new status bar section with <strong>keyboard lock light indicators</strong> and a <strong>refresh rate display</strong>. The <strong>keyboard shortcuts</strong> for releasing mouse capture and calling other emulator functions are now <a href="//86box.readthedocs.io/en/v5.0/settings/input.html#key-bindings">configurable</a> thanks to a contribution by <a href="//gekk.info/">Cathode Ray Dude</a>.</p>

<hr />

<h2 id="important-changes">Important changes</h2>

<h3 id="mouse-release-shortcut">Mouse release shortcut</h3>

<p>The key combination for releasing mouse capture is now <strong>Ctrl+End on all host operating systems</strong>, as the previous F8+F12 used on Windows hosts was found to have application compatibility issues. Releasing capture with the middle mouse button is still an option <a href="//86box.readthedocs.io/en/v5.0/settings/input.html#mouse" title="See note about the middle button">where available</a>. The F8+F12 combination <strong>cannot be restored</strong> using the new keyboard shortcut customization feature.</p>

<h3 id="host-system-deprecations">Host system deprecations</h3>

<p>v5.0 is the final release of 86Box to support macOS hosts running <strong>High Sierra 10.13</strong> and <strong>Mojave 10.14</strong>. The next release is slated to require <strong>Catalina 10.15</strong> or newer, with no plans to end Intel support.</p>

<p>As noted in the <a href="/2024/07/26/86box-v4-2.html#32-bit-deprecation-notice">v4.2 release announcement</a>, we are no longer providing builds for <strong>32-bit host systems</strong>. Compiling from source remains an option on 32-bit and other unsupported architectures.</p>

<h3 id="system-wide-preferences">System-wide preferences</h3>

<p>All settings found in the <strong>Preferences window</strong>, such as language and mouse sensitivity, are now <strong>saved system-wide</strong> and apply to all machines on all copies of 86Box v5.0 and newer. Due to this change, any of these settings you may have changed on individual machines have been <strong>reset</strong>.</p>

<p><a href="#mouse-release-shortcut">Custom key combinations</a> are <strong>not</strong> saved system-wide for now.</p>

<h3 id="dvd-on-cd-drives">DVD on CD drives</h3>

<p>Inserting <strong>DVD-ROM discs</strong> (or folders larger than 1 GB) now requires <a href="//86box.readthedocs.io/en/v5.0/settings/floppycdrom.html#cd-rom-drives">setting a drive model</a> with DVD-ROM support, such as the <strong>86BOX 86B_DVD</strong>, unlike previous versions where all drives accepted all disc types.</p>

<hr />

<h2 id="changelog">Changelog</h2>

<h3 id="emulator">Emulator</h3>

<ul>
  <li>Added <strong>keyboard shortcut customization</strong> through the Settings window’s Input section</li>
  <li>Added customizable keyboard shortcuts for <strong>Ctrl+Alt+Esc</strong> (Ctrl+F10), <strong>pause</strong> (Ctrl+Alt+F1), <strong>hard reset</strong> (Ctrl+Alt+F12), <strong>screenshot</strong> (Ctrl+F11) and <strong>mute</strong> (Ctrl+Alt+M)</li>
  <li>Added <a href="#system-wide-preferences"><strong>system-wide saving</strong></a> for all settings in the Preferences window</li>
  <li>Added detailed image path and size information to the tooltip for <strong>hard disk icons</strong> on the status bar</li>
  <li>Added preliminary <strong>NetBSD</strong> host support (currently source code only, no builds available)</li>
  <li>Added <strong>configuration file entry sorting</strong> to aid readability when performing manual edits</li>
  <li>Added passthrough for some <strong>multimedia keys</strong> on Windows hosts (can be disabled through the <strong>Preferences</strong> window)</li>
  <li>Added <strong>GameMode support</strong> on Linux hosts</li>
  <li>Added <strong>more icons</strong> to status bar and Media menu options</li>
  <li>Added <code class="language-plaintext highlighter-rouge">-W</code>/<code class="language-plaintext highlighter-rouge">--nohook</code> command line option to disable advanced keyboard capture methods</li>
  <li>Reworked <strong>OpenGL 3.0 Core</strong> renderer, adding support for multiple shaders, <code class="language-plaintext highlighter-rouge">.glslp</code> shaders and parameter configuration</li>
  <li>Removed <strong>Qt OpenGL</strong> and <strong>OpenGL ES</strong> renderers to eliminate maintenance burden and user confusion with the OpenGL 3.0 Core renderer</li>
  <li>Improved <strong>input responsiveness</strong> on Windows hosts</li>
  <li>Fixed <strong>stuck keys</strong> when the 86Box window loses focus (including Alt+Tab) on Windows hosts</li>
  <li>Fixed <strong>mouse capture</strong> on Linux hosts causing a movement jump on the emulated mouse when activated</li>
  <li>Fixed mouse input with <strong>Remote Desktop</strong> and other remote access tools on Windows</li>
  <li>Fixed <strong>keyboard shortcuts</strong> on Wayland Linux hosts</li>
  <li>Fixed incorrect emulated display size with <strong>HiDPI scaling</strong> on some renderers</li>
  <li>Changed the <a href="#mouse-release-shortcut">key combination for releasing mouse capture</a> to <strong>Ctrl+End</strong> on all platforms</li>
  <li>Changed the key combination for exiting full screen mode to the same <strong>Ctrl+Alt+Page Up</strong> used to enter full screen</li>
  <li>Changed <code class="language-plaintext highlighter-rouge">-?</code>/<code class="language-plaintext highlighter-rouge">--help</code> command line option to a message box on Windows hosts</li>
</ul>

<h3 id="user-interface">User interface</h3>

<ul>
  <li>Added <strong>dark mode</strong> for Windows hosts</li>
  <li>Added <a href="//86box.readthedocs.io/en/v5.0/usage/statusbar.html#num-lock-off-caps-lock-off-scroll-lock-off-keyboard-indicators"><strong>keyboard indicator lights</strong></a> and <strong>refresh rate indicator</strong> to the status bar</li>
  <li>Added <strong>write activity and write protection indicators</strong> to status bar icons</li>
  <li>Added <strong>full mute</strong> option to the sound icon in the status bar</li>
  <li>Added <strong>printer tray folder</strong> shortcut to the Tools menu</li>
  <li>Added a decimal place to the <strong>emulation speed</strong> indicator</li>
  <li>Added translations for <strong>device configuration</strong> options (also known as <strong>Configure button</strong> options), <strong>message box buttons</strong> and other untranslated parts of the interface</li>
  <li>Added translations: <span class="emoji">🇳🇱</span> <strong>Dutch</strong> by <a href="//github.com/sharkbyte16">sharkbyte16</a>, <span class="emoji">🇳🇴</span> <strong>Norwegian (Bokmål)</strong> by <a href="//github.com/elislays08">elislays08</a>, <span class="emoji">🇸🇪</span> <strong>Swedish</strong> by toshineon</li>
  <li>Removed <strong>icon sets</strong> feature to eliminate maintenance burden for a seldom-used feature</li>
  <li>Improved <strong>Settings window</strong> load times</li>
  <li>Improved ordering on Settings window <strong>device lists</strong></li>
  <li>Fixed inaccessible device configuration options for <strong>floppy drive controllers</strong></li>
  <li>Fixed <strong>recently used image lists</strong> not saving across restarts</li>
  <li>Fixed status bar icons not updating media insertion state with <strong>Update status bar icons</strong> turned off</li>
  <li>Fixed <strong>Windows 11 rounded corners</strong> cutting into the emulated display when the status bar is hidden</li>
  <li>Fixed <strong>mouse sensitivity slider</strong> not showing up properly on some hosts</li>
  <li>Fixed window close button and Esc key not closing the <strong>About window</strong></li>
  <li>Changed <strong>default language</strong> from English to the system language</li>
  <li>Renamed many <strong>device configuration options</strong> to improve consistency</li>
  <li>Updated many <strong>translations</strong> with fixes and the new device configuration translations</li>
</ul>

<h3 id="machines">Machines</h3>

<ul>
  <li><strong>Multiple categories</strong>
    <ul>
      <li>Fixed secondary floppy drive not being detected on several <strong>IBM PS/2</strong> machines</li>
      <li>Fixed secondary IDE channel issues within operating systems on the <strong>ASUS P/I-P65UP5</strong></li>
      <li>Fixed soft reboot hangs on several <strong>PCI machines</strong></li>
      <li>Fixed <strong>Compaq Portable family</strong> identification by applications</li>
      <li>Fixed <strong>Compaq Portable family</strong> gas plasma display glitches</li>
    </ul>
  </li>
  <li><strong>808x</strong>
    <ul>
      <li>Added 8088 machines: <strong>Atari PC 3</strong>, <strong>Tulip PC Compact 2</strong>, <strong>VTech Laser Turbo XT</strong></li>
      <li>Added 8086 machines: <strong>Amstrad PC5086</strong>, <strong>Mazovia 1016</strong>, <strong>VTech Laser XT3</strong></li>
      <li>Added a small number of compatible expansion devices to the <strong>IBM PCjr</strong></li>
      <li>Added alternate color palette options to the <strong>IBM PCjr</strong></li>
      <li>Added option to disable ROM BASIC on the <strong>IBM PC</strong> and <strong>XT</strong></li>
      <li>Added BIOS version selection and diagnostic ROM options to the <strong>IBM PC</strong>, <strong>XT</strong> and <strong>AT</strong></li>
      <li>Added <a href="//glabios.org/">GLaBIOS</a> option to the <strong>Juko ST</strong> and <strong>Vendex HeadStart Turbo 888-XT</strong></li>
      <li>Fixed <strong>IBM PCjr</strong> floppy write errors</li>
      <li>Fixed <strong>Tandy 1000 family</strong> hang issues with some games</li>
      <li>Fixed <strong>Tandy 1000 family</strong> displaying horizontal line artifacts in some applications</li>
      <li>Fixed <strong>Schneider EuroPC</strong> JIM jumper option</li>
      <li>Changed <strong>Olivetti M240</strong> BIOS revision to a newer one (again)</li>
      <li>Renamed <strong>Olivetti M21/24/24SP</strong> to <strong>M21/24/24SP/AT&amp;T PC 6300</strong></li>
      <li>Renamed <strong>Olivetti M240</strong> to <strong>M240/AT&amp;T PC 6300 WGS</strong></li>
      <li>Renamed <strong>Packard Bell PB8810</strong> to <strong>Samsung SPC-3000V</strong></li>
    </ul>
  </li>
  <li><strong>286</strong>
    <ul>
      <li>Added machines: <strong>Amstrad PC7286</strong>, <strong>PC5286</strong>, <strong>Atari PC 4</strong>, <strong>Dell System 200</strong>, <strong>GRiD GRiDcase 1520</strong> (<a href="//86box.readthedocs.io/en/v5.0/hardware/machinespecific.html#grid1520">setup required</a>), <strong>ICL DRS M35/286</strong>, <strong>Olivetti M290/AT&amp;T 6286 WGS</strong>, <strong>Packard Bell PB286</strong>, <strong>PC’s Limited (Dell) 28608L/AT122</strong>, <strong>Sanyo MBC-17PLUS</strong>, <strong>Sharp AX286D</strong>, <strong>Tulip AT Compact</strong></li>
      <li>Fixed <strong>Toshiba T3100e</strong> Fn key not working in some environments</li>
      <li>Fixed <strong>Toshiba T3100e</strong> upper memory detection</li>
      <li>Changed minimum RAM on the <strong>IBM PS/2 Model 30-286</strong>, <strong>Hyundai Solomon 286KP</strong> and <strong>Hyundai Super-286TR</strong></li>
      <li>Changed maximum RAM on the <strong>NCR 3302</strong> and <strong>Arche AMA-2010</strong></li>
    </ul>
  </li>
  <li><strong>386</strong>
    <ul>
      <li>Added 386SX machines: <strong>Dell System 333s/L</strong>, <strong>OKI if386AX30L</strong>, <strong>Packard Bell Legend 300SX</strong>, <strong>Silicon Valley Computer SVC386SX/P1</strong></li>
      <li>Added 386DX machines: <strong>ASUS 386/33-64K</strong>, <strong>IBM PS/55 Model 5550-T</strong>, <strong>5550-V</strong></li>
      <li>Added 386DX/486 machine: <strong>CAF Technology C747</strong></li>
      <li>Added Phoenix BIOS variant option to the <strong>Micronics 09-00021</strong></li>
      <li>Removed non-existent on-board IDE controller from the <strong>Commodore SL386SX-16</strong></li>
      <li>Fixed <strong>Acer 100T</strong> machine not being selectable on Linux and other case-sensitive systems</li>
      <li>Fixed <strong>DataExpert EXP4349</strong> not booting properly with 386 CPUs</li>
      <li>Fixed <strong>Amstrad MegaPC</strong> not booting with some memory amounts</li>
      <li>Fixed IDE disks not being detected on the <strong>AAEON SBC-350A</strong></li>
      <li>Fixed floppy drives not being detected on the <strong>Acer 100T</strong></li>
      <li>Changed maximum RAM on the <strong>DataExpert EXP4349</strong></li>
    </ul>
  </li>
  <li><strong>486</strong>
    <ul>
      <li>Added a new category for <strong>Socket 3 PCI</strong> machines</li>
      <li>Added Socket 1 machines: <strong>AST Advantage! 40xxd</strong>, <strong>ASUS ISA-486C</strong>, <strong>DTK PKM-0031Y</strong>, <strong>Silicon Valley Computer 486WB</strong>, <strong>Tulip 486 DC/DT</strong></li>
      <li>Added Socket 2 machines: <strong>Alaris Cobalt LPX</strong>, <strong>Dell 466/NP</strong>, <strong>ZEOS Martin</strong></li>
      <li>Added Socket 3 machines: <strong>Acer P3</strong>, <strong>Biostar MB-84xxUUD-A</strong>, <strong>Compaq Presario 7100/7200 Series 486</strong>, <strong>ICS SB486PV</strong></li>
      <li>Added PCI/ISA BIOS variant selection to the <strong>Packard Bell PB450</strong></li>
      <li>Added Award eSupport BIOS variant option to the <strong>Shuttle HOT-433A</strong></li>
      <li>Fixed <strong>Samsung SPC7700P-LW</strong> crashing the emulator on soft reboot</li>
      <li>Fixed <strong>DEC Venturis 4xx</strong> crashing the emulator during POST</li>
      <li>Fixed keyboard not working with some operating systems on the <strong>J-Bond PCI400C-A</strong>, <strong>ASUS PCI/I-486SP3</strong></li>
      <li>Fixed PS/2 mouse not being detected on the <strong>ASUS VL/I-486SV2G (GX4)</strong></li>
      <li>Fixed cache error on the <strong>TriGem 486G</strong></li>
      <li>Fixed DMI/ESCD write error on the <strong>FIC VIP-IO2</strong></li>
      <li>Fixed incorrect chipset type on the <strong>Mylex MVI486</strong> and <strong>Siemens Nixdorf D824</strong></li>
      <li>Changed minimum/maximum RAM on several <strong>SiS 471</strong> based machines and the <strong>Acrosser AR-B1476</strong></li>
      <li>Changed maximum RAM on the <strong>Lanner Electronics AP-4100AA</strong></li>
      <li>Changed most <strong>STPC</strong> machines to remove discrete PCI card support</li>
      <li>Renamed <strong>ASUS VL/I-486SV2G (GX4)</strong> to <strong>VL/I-486SV2GX4</strong></li>
    </ul>
  </li>
  <li><strong>586</strong>
    <ul>
      <li>Added Socket 4 machines: <strong>Acer V12P</strong>, <strong>AT&amp;T Globalyst 330</strong>, <strong>ECS SI5PI AIO</strong>, <strong>Micronics M5Pi</strong></li>
      <li>Added Socket 4/5 machine: <strong>Taken PCI560-01</strong></li>
      <li>Added Socket 5 machines: <strong>Dell OptiPlex GXL/GXM</strong>, <strong>Siemens-Nixdorf D842</strong></li>
      <li>Added Socket 7 machines: <strong>Biostar M5ATA</strong>, <strong>Dell OptiPlex GN+</strong>, <strong>Gateway 2000 Tigereye</strong> (replacing the previous Tigereye which is now Mailman), <strong>LG IBM Multinet x52</strong>, <strong>Packard Bell PB790</strong>, <strong>PC Partner VIA809DS</strong>, <strong>Siemens-Nixdorf D943</strong></li>
      <li>Added Super Socket 7 machine: <strong>eMachines eTower 300k</strong></li>
      <li>Added Award 4.50PG and newer 4.51PG BIOS version options to the <strong>AOpen AP5S</strong></li>
      <li>Added Award 4.50PG and 4.51PG BIOS version options to the <strong>Chaintech 5SBM2</strong></li>
      <li>Added on-board PC Technology RZ1000 IDE controller to the <strong>Intel Premiere/PCI</strong> family</li>
      <li>Added AMD K6-2 CPU support to the <strong>ASUS P/I-P55T2P4</strong>, <strong>ASUS TX97</strong> and <strong>PC Chips M560</strong></li>
      <li>Removed AMD K6 CPUs from most <strong>Intel motherboards</strong> due to BIOS incompatibilities</li>
      <li>Fixed keyboard not working with some operating systems on the <strong>Gigabyte GA-586IP</strong></li>
      <li>Fixed I/O port resource conflict error on the <strong>FIC VA-503+</strong></li>
      <li>Fixed missing secondary IDE channel on the <strong>Intel Premiere/PCI II</strong></li>
      <li>Fixed PCI device IRQs on the <strong>ASUS PCI/I-P54NP4</strong></li>
      <li>Fixed <strong>Dell Dimension XPS Pxxx</strong> and <strong>Hannibal+</strong> password jumper error</li>
      <li>Changed minimum/maximum RAM and supported CPUs on many <strong>Socket 7 machines</strong></li>
      <li>Changed minimum RAM on the <strong>PC Chips M579</strong></li>
      <li>Changed minimum CPU support on the <strong>Gigabyte GA-5SG100</strong></li>
      <li>Renamed <strong>Chaintech 5SBM2</strong> to <strong>5SBM/5SBM2</strong></li>
      <li>Renamed <strong>Gateway 2000 Tigereye</strong> to <strong>Mailman</strong> and changed category to Socket 7 Dual Voltage</li>
      <li>Renamed <strong>Acer M3A</strong> to <strong>Acer AcerPower Ultima</strong></li>
      <li>Renamed <strong>Toshiba Infinia 7200</strong> to the <strong>7201</strong> variant to better reflect its on-board hardware</li>
      <li>Renamed <strong>Compaq Presario 2240</strong> to <strong>224x</strong></li>
      <li>Renamed <strong>Compaq Presario 4500</strong> to <strong>45xx</strong></li>
      <li>Renamed <strong>Dell Hannibal+</strong> to <strong>Dell Dimension XPS Pxxxa/Mxxxa</strong></li>
      <li>Renamed <strong>Packard Bell PB680</strong> to <strong>Packard Bell Multimedia C110</strong></li>
      <li>Renamed <strong>Packard Bell PB810</strong> to <strong>Packard Bell Multimedia M415</strong></li>
      <li>Renamed <strong>Gateway Tomahawk</strong> to <strong>Gateway E-1000</strong></li>
      <li>Renamed <strong>TriGem Richmond</strong> to <strong>TriGem RD535</strong></li>
      <li>Renamed <strong>Daewoo CB52X-SI</strong> to <strong>Daewoo CD520</strong></li>
    </ul>
  </li>
  <li><strong>686</strong>
    <ul>
      <li>Added Socket 8 machines: <strong>Dell Dimension XPS Pro___n</strong> (OEM version of the <strong>Intel VS440FX</strong>), <strong>FIC PO-6000</strong></li>
      <li>Added Slot 1 machines: <strong>ABIT BX6</strong>, <strong>Acer V62X</strong>, <strong>Compaq ProSignia S316/318</strong>, <strong>Dell OptiPlex GXa</strong></li>
      <li>Added Socket 370 machine: <strong>Soyo SY-7SBB</strong></li>
      <li>Added on-board Crystal CS4236B sound to the <strong>Intel VS440FX</strong></li>
      <li>Added on-board CMD PCI-0648 IDE controller to the <strong>ASUS CUBX</strong></li>
      <li>Removed Pentium Pro CPUs from the <strong>ASUS P3V4X</strong> and <strong>Virtual PC 2007</strong> due to BIOS incompatibilities</li>
      <li>Fixed on-board Crystal CS4236B sound on the <strong>Intel AP440FX</strong></li>
      <li>Fixed BIOS setup hang on <strong>LG IBM Multinet</strong> machines</li>
      <li>Fixed <strong>FIC KA-6130</strong> password jumper error</li>
      <li>Changed minimum RAM on the <strong>PC Chips M729</strong></li>
      <li>Changed maximum RAM on the <strong>Acer V60N</strong>, <strong>Biostar MB-8600TTC</strong>, <strong>Chaintech 5SBM2</strong>, <strong>Intel AP440FX</strong>, <strong>HP Vectra VEi 8</strong>, <strong>Tyan Tsunami ATX</strong> and <strong>ECS P6BAT-A+</strong></li>
      <li>Changed maximum CPU support on the <strong>ABIT LX6</strong>, <strong>ASUS KN97</strong>, <strong>Packard Bell Bora Pro</strong> and <strong>Gigabyte GA-6GXU</strong></li>
    </ul>
  </li>
</ul>

<h3 id="hardware">Hardware</h3>

<ul>
  <li><strong>Core</strong>
    <ul>
      <li>Added <strong>CPU frame size</strong> option with a new default to increase smoothness</li>
      <li>Added <strong>Cyrix 6x86</strong> family of Socket 7 CPUs</li>
      <li>Added missing <strong>8080 emulation</strong> feature to the NEC V20 and V30</li>
      <li>Added missing <strong>PSE-36</strong> feature to the Pentium II Deschutes</li>
      <li>Added <strong>Samuel</strong> codename to better identify VIA Cyrix III CPUs</li>
      <li>Changed <strong>NEC V30</strong> CPU speed options to better reflect real chips</li>
      <li>Improved CPU performance on <strong>ARM hosts</strong></li>
      <li>Fixed modern versions of <strong>OpenBSD</strong> crashing due to inaccuracies in the <strong>MMU</strong> and Pentium Pro <strong>SYSENTER/SYSEXIT</strong> handling</li>
      <li>Fixed <strong>Windows 9x</strong> installer crashing on ARM hosts due to a memory paging inaccuracy</li>
      <li>Fixed <strong>ReactOS</strong> and Microsoft C <strong>LINK.EXE</strong> crashing due to protected mode inaccuracies</li>
      <li>Fixed <strong>Windows NT 3.x</strong> DOS box crashing due to a recompiler inaccuracy</li>
      <li>Fixed <strong>USL SVR4.2 Unix</strong> crashing due to a CPU flag inaccuracy</li>
      <li>Fixed specific <strong>FPU diagnostic tests</strong> failing due to an interrupt inaccuracy</li>
      <li>Fixed rendering issues with the <strong>Final Reality</strong> demo on MMX-capable CPUs due to an inaccuracy</li>
      <li>Fixed <strong>FXSAVE and FXRSTOR</strong> FPU instruction inaccuracies</li>
      <li>Fixed EFER inaccuracy affecting <strong>CPU probing applications</strong> on <strong>K6-2</strong> and <strong>K6-III</strong> CPUs</li>
      <li>Fixed <strong>LOCK</strong> instruction legality inaccuracy</li>
      <li>Fixed CPU privilege level inaccuracy on <strong>cache and MSR</strong> related instructions</li>
      <li>Fixed D6 opcode inaccuracy on <strong>NEC V20</strong> and <strong>V30</strong> CPUs</li>
      <li>Fixed <strong>newer Linux kernels</strong> limiting maximum memory on Pentium II Deschutes and Celeron Mendocino CPUs due to a cache reporting inaccuracy</li>
      <li>Fixed <strong>debug breakpoints</strong> on 386 CPUs</li>
      <li>Fixed <strong>segment wraparound</strong> inaccuracy with some CPU instructions</li>
      <li>Fixed PCI device IRQs on machines with <strong>UMC chipsets</strong></li>
      <li>Fixed expanded (EMS) memory support on the <strong>C&amp;T NEAT</strong>, <strong>SCAT</strong> and <strong>VLSI SCAMP</strong> chipsets</li>
      <li>Fixed <strong>PCI bridge</strong> not being automatically installed upon running out of slots</li>
      <li>Fixed <strong>ISA Plug and Play</strong> detection hangs with some device drivers</li>
      <li>Fixed ACPI IRQ resource allocation issue on later <strong>VIA chipsets</strong></li>
      <li>Fixed <strong>microcode update</strong> errors with Pentium II and Celeron CPUs on some machines</li>
      <li>Fixed <strong>PS/2 DMA</strong> inaccuracy due to missing commands</li>
    </ul>
  </li>
  <li><strong>Display</strong>
    <ul>
      <li>Improved emulation performance of <strong>S3 ViRGE</strong> and <strong>Trident TGUI</strong> cards</li>
      <li>Added <strong>Quadram Quadcolor</strong> and <strong>Yamaha V6355D</strong> CGA-compatible ISA video cards</li>
      <li>Added <strong>OKI JEGA</strong> and <strong>OKIVGA/H-2</strong> ISA video cards</li>
      <li>Added <strong>ATI VGA Wonder 1024D XL Plus</strong> ISA video card (ATI 28800-6 with 1 MB VRAM)</li>
      <li>Added <strong>ELSA Winner 1000</strong> (S3 86C805) ISA video card</li>
      <li>Added <strong>Quantum3D Raven</strong> (Voodoo Banshee) PCI video card</li>
      <li>Added <a href="/assets/images/v5.0/cgacomp.webp">picture controls</a> to <strong>composite CGA</strong> emulation</li>
      <li>Added color support to the <strong>IBM MDA</strong> (enabled by selecting a color monitor through the <strong>Configure</strong> window)</li>
      <li>Added IBM Nordic and Czech Kamenicky font ROM options to the <strong>IBM MDA</strong> and <strong>Hercules</strong></li>
      <li>Added 256 KB video RAM option to the <strong>Paradise WD90C30-LR</strong></li>
      <li>Added 512 KB video RAM option to the <strong>IBM 8514/A</strong></li>
      <li>Added linear framebuffer base option to VLB <strong>Cirrus Logic</strong> cards</li>
      <li>Added 640x480 mode and other missing features to the <strong>C&amp;T SuperEGA</strong></li>
      <li>Fixed <strong>incorrect refresh rates</strong> on many cards</li>
      <li>Fixed <strong>rendering issues</strong> with specific drivers on many cards</li>
      <li>Fixed <strong>Voodoo Banshee/3</strong> crashing the emulator while booting BeOS</li>
      <li>Fixed <strong>Voodoo</strong> 3D rendering glitches on some games</li>
      <li>Fixed <strong>ATI Mach32</strong> rendering issues on NeXTSTEP</li>
      <li>Fixed <strong>ATI Mach64</strong> rendering glitches on Solaris</li>
      <li>Fixed <strong>Voodoo Banshee/3</strong> rendering glitches on full motion video applications</li>
      <li>Fixed <strong>C&amp;T B69000</strong> and <strong>Cirrus Logic</strong> cards not working with some drivers</li>
      <li>Fixed <strong>XGA</strong> emulator crashes with some drivers</li>
      <li>Fixed <strong>Force 4:3 display ratio</strong> option on <strong>8514/A</strong> and <strong>XGA</strong> cards</li>
      <li>Fixed transparency glitches with some games on <strong>Voodoo</strong> cards</li>
      <li>Fixed 8-bit color glitches on the <strong>ATI Mach64VT2</strong></li>
      <li>Fixed cursor glitches on the <strong>ATI Mach64VT2</strong></li>
      <li>Fixed <strong>Bochs SVGA</strong> machine compatibility issues</li>
      <li>Fixed emulator crash on exit with some <strong>VGA</strong> cards</li>
      <li>Fixed text mode formatting attributes on <strong>EGA</strong> cards</li>
      <li>Fixed pixel inaccuracy with <strong>VGA overscan</strong></li>
      <li>Fixed video RAM size reporting on <strong>Paradise</strong> cards</li>
    </ul>
  </li>
  <li><strong>Input</strong>
    <ul>
      <li>Added <strong>5-button 2-wheel</strong> PS/2 mouse option to emulate a horizontal tilt wheel (as seen on later Microsoft IntelliMouse Explorer models)</li>
      <li>Added <strong>Mouse Systems</strong> bus mouse</li>
      <li>Added <strong>Microsoft Serial BallPoint</strong> mouse</li>
      <li>Added <strong>CH Flightstick Pro + CH Pedals</strong> and <strong>Thrustmaster FCS + Rudder Control System</strong> game port joysticks</li>
      <li>Added generic <strong>flight yoke</strong> and <strong>steering wheel</strong> game port joysticks</li>
      <li>Added <strong>keyboard type</strong> selector</li>
      <li>Added host touchscreen input support to the <strong>3M MicroTouch</strong></li>
      <li>Added calibration data saving, software baud rate selection and more missing features to the <strong>3M MicroTouch</strong></li>
      <li>Fixed <strong>keyboard</strong> not working with some DOS games</li>
      <li>Fixed <strong>mouse wheel</strong> on Linux hosts</li>
      <li>Fixed <strong>serial mouse</strong> crashing the emulator on SCO Unix</li>
      <li>Fixed <strong>Logitech serial mouse</strong> and <strong>Microsoft InPort bus mouse</strong> not working with some drivers</li>
      <li>Fixed stuck keys after a soft reboot through <strong>Ctrl+Alt+Del</strong></li>
      <li>Fixed <strong>3M MicroTouch</strong> misaligning touches when the emulated display is scaled</li>
      <li>Fixed <strong>serial mouse</strong> (again) and <strong>3M MicroTouch</strong> crashing the emulator if attached to a non-existent serial port</li>
    </ul>
  </li>
  <li><strong>Sound</strong>
    <ul>
      <li>Added non-IDE variants of the <strong>Sound Blaster 16 PnP</strong> and <strong>AWE64</strong> cards</li>
      <li>Added <strong>Gravis UltraSound MAX</strong> ISA sound card</li>
      <li>Added <strong>Creative EMU8000 PnP</strong> (Goldfinch) ISA sound card</li>
      <li>Added <strong>Sound Blaster ViBRA 16CL</strong> ISA sound card</li>
      <li>Added <strong>Ensoniq AudioPCI (ES1370)</strong> PCI sound card</li>
      <li>Added <a href="//www.youtube.com/watch?v=Eeo4INoGyRY"><strong>Mindscape Music Board</strong></a> ISA sound card</li>
      <li>Added <strong>The Entertainer</strong> Commodore SID-based ISA sound card</li>
      <li>Added <strong>Covox Voice Master Key</strong>, <strong>Covox Sound Master Plus</strong>, <strong>ISA DAC</strong> and <strong>Rainbow Arts PC-Soundman</strong> ISA sound cards</li>
      <li>Added game port disable option to select <strong>Sound Blaster</strong> models</li>
      <li>Added SID model and filter strength options to the <strong>Innovation SSI-2001</strong></li>
      <li>Fixed <strong>PC speaker</strong> sound effect glitches with slow PIT mode on some games</li>
      <li>Fixed <strong>Sound Blaster 16 family</strong> cards not working on OS/2 verison 4</li>
      <li>Fixed <strong>Sound Blaster Classic</strong> detection by more DOS games</li>
      <li>Fixed <strong>ESS</strong> cards (including MCA models) not working with some drivers</li>
      <li>Fixed <strong>ESS ES688</strong> playback issues on OS/2</li>
      <li>Fixed <strong>ESS ES688</strong> crashing the emulator when its non-existent MPU-401 is accessed</li>
      <li>Fixed <strong>VIA on-board sound</strong> playback issues with some drivers</li>
      <li>Fixed low default volume and playback speed issues on the <strong>Pro Audio Spectrum Plus</strong></li>
      <li>Fixed sound distortion on the <strong>AdLib Gold</strong></li>
      <li>Renamed <strong>SB/DSP</strong> and <strong>MPU-401</strong> MIDI input options on sound cards to <strong>Receive MIDI input</strong> and <strong>Receive MIDI input (MPU-401)</strong> respectively</li>
      <li>Updated <strong>ymfm</strong> and <strong>reSIDfp</strong> libraries</li>
    </ul>
  </li>
  <li><strong>Network</strong>
    <ul>
      <li>Added <strong>TAP</strong> networking support for Linux hosts</li>
      <li>Added MAC address OUI (vendor) editing to the <strong>generic NE1000 and NE2000</strong> cards</li>
      <li>Improved <strong>SLiRP</strong> connection stability (especially on Windows hosts)</li>
      <li>Fixed <strong>modem</strong> crashing the emulator with <code class="language-plaintext highlighter-rouge">Assertion failed!</code> message under heavy Telnet traffic (again)</li>
      <li>Fixed <strong>modem</strong> crashing the emulator if attached to a non-existent serial port</li>
      <li>Fixed <strong>modem</strong> not connecting to some Telnet servers which require option negotiation</li>
      <li>Fixed <strong>modem</strong> hanging the emulated machine when receiving a dial-in call</li>
      <li>Fixed <strong>Realtek RTL8139C+</strong> not working with some drivers</li>
      <li>Fixed <strong>Realtek RTL8139C+</strong> reporting a half-duplex link (known issue: still not 100 Mbit)</li>
      <li>Fixed <strong>NE2000</strong> and compatible cards not working with NetWare client drivers</li>
      <li>Renamed <strong>AMD PCnet-VL</strong> network card to <strong>PCnet-32</strong></li>
    </ul>
  </li>
  <li><strong>Ports</strong>
    <ul>
      <li>Added <strong>bidirectional</strong>, <strong>ECP</strong> and <strong>EPP</strong> parallel port modes on supported machines</li>
      <li>Added <strong>named pipe client</strong> mode to serial passthrough on Windows hosts</li>
      <li>Fixed <strong>ESC/P printer</strong> not printing text when using a system-wide or custom ROM folder</li>
    </ul>
  </li>
  <li><strong>Storage</strong>
    <ul>
      <li>Added <strong>Panasonic/MKE</strong> CD-ROM interface and drive</li>
      <li>Added <strong>Alcohol 120% MDS</strong> CD-ROM image support</li>
      <li>Added <strong>read and write error reporting</strong> to hard disks, CD-ROM, MO and ZIP drives</li>
      <li>Added <strong>hard disk model presets</strong> to the existing disk speed system</li>
      <li>Added a <strong>removable disk drive</strong> system including a generic drive</li>
      <li>Added <strong>Micro Solutions CompatiCard I</strong> and <strong>II</strong> floppy drive controller cards</li>
      <li>Added support for <strong>up to 4 hard disk controllers</strong> per machine</li>
      <li>Added <strong>CMD PCI-0646</strong>, <strong>PCI-0648</strong> and <strong>PCI-0649</strong> IDE controller cards</li>
      <li>Added generic <strong>AMD 53C974A</strong> card based on the PCscsi controller</li>
      <li>Added <strong>Seagate ST-50X</strong> ISA MFM controller card</li>
      <li>Added single-channel variants of the <strong>XTIDE</strong> controller cards</li>
      <li>Added support for raw floppy images in the <strong>OpenStep 1.6 MB</strong> format</li>
      <li>Added I/O address, BIOS address and writable ROM options to the <strong>PC/XT XTIDE</strong> controller card</li>
      <li>Added more IRQ options to the <strong>Trantor T128</strong> SCSI card</li>
      <li>Added BIOS version options to the <strong>Adaptec AHA-154xB</strong> and <strong>AMD 53C974</strong> SCSI cards</li>
      <li>Added <strong>early ATAPI/SCSI</strong> variant (1.00) to the standard 86Box CD-ROM model</li>
      <li>Reworked <strong>CD-ROM emulation</strong> to fix many issues with specific discs and improve performance</li>
      <li>Improved <strong>raw disk image creation</strong> performance on Linux and macOS hosts</li>
      <li>Improved <strong>MO and ZIP drive</strong> performance</li>
      <li>Improved floppy drive performance in <strong>turbo timings mode</strong></li>
      <li>Changed <strong>CD-ROM drives</strong> to <a href="#dvd-on-cd-drives">reject DVDs</a> on drive models without DVD support</li>
      <li>Changed <strong>ZIP drives</strong> to removable disk drives under the new system</li>
      <li>Changed <strong>tertiary and quaternary IDE controllers</strong> to selectable hard disk controllers under the new system</li>
      <li>Changed <strong>Vision Systems LBA Enhancer</strong> to a selectable ISA ROM card under the new system in the <strong>Other peripherals</strong> section</li>
      <li>Removed broken <strong>special PS/2 floppy drive types</strong> (PS/2 machines should now use standard floppy drives)</li>
      <li>Fixed <strong>hard disks disappearing</strong> from the emulated machine if the image file is in use (disks now remain present but reads/writes fail with errors)</li>
      <li>Fixed <strong>mounted folders</strong> reading inaccessible host files as corrupted data (a read error is now returned instead)</li>
      <li>Fixed emulator crash when <strong>ejecting disk images</strong> on some hosts</li>
      <li>Fixed Windows 95 not reading <strong>floppy disks</strong> after a soft reboot</li>
      <li>Fixed some operating systems not reading <strong>floppy disks</strong> when booting with a disk inserted</li>
      <li>Fixed a cue/bin emulation inaccuracy affecting some <strong>copy-protected CDs</strong></li>
      <li>Fixed <strong>PS/2 ESDI</strong> disk errors on Xenix and OS/2 version 1</li>
      <li>Fixed <strong>IDE</strong> disk errors on OS/2 version 3</li>
      <li>Fixed <strong>startup hangs</strong> on some DOS CD-ROM games</li>
      <li>Fixed <strong>CD-ROM boot</strong> issues with FreeBSD discs in some machines</li>
      <li>Fixed <strong>AMD 53C974</strong>, <strong>Tekram DC-390</strong> and <strong>IBM PS/2 SCSI Adapter</strong> not working with some drivers</li>
      <li>Fixed <strong>IBM PS/2 SCSI Adapter</strong> detecting duplicate SCSI devices</li>
      <li>Fixed <strong>NCR 53c90a</strong> MCA card instability and CD audio issues</li>
      <li>Fixed <strong>Trantor</strong> and <strong>Pro Audio Spectrum</strong> SCSI instability</li>
      <li>Fixed <strong>2.3 GB MO</strong> image corruption</li>
      <li>Fixed <strong>Adaptec AHA-1542CP</strong> boot ROM not working on some Plug and Play machines</li>
      <li>Fixed <strong>BusLogic</strong> SCSI controllers causing boot errors after exiting AUTO-SCSI on some machines</li>
      <li>Fixed <strong>slow detection</strong> of IDE channels with a single device by some BIOSes and Linux</li>
      <li>Fixed emulation of specific protection methods on <strong>86F floppy images</strong></li>
      <li>Fixed <strong>disk image write</strong> timing issue affecting very specific cases on very specific machines</li>
      <li>Fixed incorrect identification data on the <strong>AT ESDI</strong> controller</li>
      <li>Fixed incorrect <strong>VHD image</strong> geometry in some cases</li>
      <li>Fixed emulator crash when ejecting disk images with <strong>long file paths</strong></li>
    </ul>
  </li>
  <li><strong>Other</strong>
    <ul>
      <li>Added <strong>ISA ROM cards</strong> for loading arbitrary option ROMs into the emulated machine</li>
      <li>Added <strong>AST MegaPlus II</strong> ISA memory expansion and RTC card (currently as separate devices in their respective categories)</li>
      <li>Improved <strong>ISABugger</strong> display with monospaced font and colored LEDs</li>
      <li>Changed maximum memory amount and IRQ options on the <strong>AST SixPackPlus</strong> ISA memory expansion card</li>
      <li>Changed minimum and maximum memory amounts on the <strong>Everex EV-165A</strong> ISA memory expansion card (and fixed the <em>double magic</em> in its name)</li>
    </ul>
  </li>
</ul>]]></content><author><name>richardg867</name></author><summary type="html"><![CDATA[Release for August 2025, now previewing an integrated manager.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://86box.net/assets/images/v5.0/hero.png" /><media:content medium="image" url="http://86box.net/assets/images/v5.0/hero.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">NVIDIA emulation journey, part 1: RIVA 128 / NV3 architecture history and basic overview</title><link href="http://86box.net/2025/02/25/riva128-part-1.html" rel="alternate" type="text/html" title="NVIDIA emulation journey, part 1: RIVA 128 / NV3 architecture history and basic overview" /><published>2025-02-25T00:00:00+00:00</published><updated>2025-02-25T00:00:00+00:00</updated><id>http://86box.net/2025/02/25/riva128-part-1</id><content type="html" xml:base="http://86box.net/2025/02/25/riva128-part-1.html"><![CDATA[<figure class="image">
    <img src="/assets/images/riva128/p1/hero.png" class="heading" />
</figure>

<p><strong>Editor’s Note:</strong> This is the first in a series of guest posts by <a href="//github.com/starfrost013">starfrost013</a> going over the architecture of NVIDIA’s first commercially-successful product, and the ongoing effort to get it emulated on 86Box. It gets more technical than all our previous posts, but there is little detailed information out there on this chip that helped launch NVIDIA into success, so we’ve decided to publish this saga here.</p>

<hr />

<h2 id="note-documents-wanted">Note: Documents wanted</h2>

<p>If you are in possession of any of:</p>
<ul>
  <li>NVIDIA RIVA 128 Programmers’ Reference Manual</li>
  <li>NVIDIA RIVA 128 Customer Evaluation Kit (we have the NV1 CEK version 1.22)</li>
  <li>NVIDIA RIVA 128 Turnkey Manufacturing Package</li>
  <li>Source code (drivers, VBIOS, etc) related to the NVIDIA RIVA 128</li>
  <li>Any similar documents, <strong>excluding the well-known datasheet</strong>, with technical information about a GPU going by the name “NV3”, “STG-3000”, “RIVA 128”, “NV3T”, “RIVA 128 Turbo” (an early name for the ZX) or “RIVA 128 ZX”</li>
  <li><strong>Any</strong> document, code, or materials relating to a graphics chip by NVIDIA, in association with Sega, Helios Semiconductor or SGS-Thomson (now STMicroelectronics) codenamed “Mutara”, “Mutara V08”, or “NV2”, or relating to a cancelled Sega console codenamed “V08”</li>
  <li>Any documentation relating to RIVA TNT</li>
  <li>Any NVIDIA SDK version that is not 0.81 or 0.83</li>
</ul>

<p>Please contact me at thefrozenstar_ on Discord, via the 86Box Discord, my e-mail address (mario64crashed@gmail.com) or the linked GitHub account. These documents would be very helpful in helping me to emulate the NVIDIA RIVA 128 and other NVIDIA graphics cards.</p>

<hr />

<h2 id="introduction">Introduction</h2>

<p>The NVIDIA RIVA 128 is a graphics chip released in 1997 by NVIDIA, nowadays of AI and $2000 overpriced quad-slot GPU fame. It was a Direct3D 5.0-capable accelerator, and one of the first to use a standard graphics API such as DirectX as its “native” API. I have been working on emulating this graphics chip for the last several months; currently, while VGA works and the drivers are loading successfully on Windows 2000, they are not rendering any kind of accelerated output yet. Many people, myself included, have asked for and even tried to develop emulation for this graphics chip and other similar ones (such as its successor, “NV4” or RIVA TNT), but have not succeeded yet, although many of these efforts continue.</p>

<p>In this series, I will explore the architecture and my experiences in emulating this graphics chip, aiming to demystify it once and for all. I can’t guarantee success, but if it was successful, it appears that it would be the first time that a full functional emulation of this chip has been developed; although later NVIDIA chips have been emulated to at least some extent, such as the GeForce 3 in Cxbx-Reloaded and Xemu.</p>

<p>This first part will dive into the history of NVIDIA up to the release of the RIVA 128, and a brief overview of how the chip actually works. The second part will dive into the architecture of NVIDIA’s drivers and how they relate to the hardware, and the third part will follow the lifetime of a graphics object from birth to display on the screen in extreme detail. Then, part four and an unknown number of parts after part four will go into detail on the experiences of developing a functional emulation for this graphics chip.</p>

<hr />

<h2 id="a-not-so-brief-history">A not so brief history</h2>

<h3 id="beginnings">Beginnings</h3>

<p>NVIDIA was conceived in 1992 by three LSI Logic and Sun Microsystems engineers: Jensen Huang (now one of the world’s richest men, still the CEO and, apparently, mobbed by fans in his country of birth Taiwan), Curtis Priem (whose boss almost convinced him to work on Java instead of founding the company) and Chris Malachowsky (a veteran of graphics chip development). They saw a business opportunity in the PC graphics and audio market, which was dominated by low-end, high-volume players such as S3 Graphics, Tseng Labs, Cirrus Logic and Matrox<sup id="fnref:matrox" role="doc-noteref"><a href="#fn:matrox" class="footnote" rel="footnote">1</a></sup>. The company was formally founded on April 5, 1993, after all three left their jobs at LSI Logic and Sun between December 1992 and March 1993.</p>

<p>After the requisite $3 million of venture capital funding was acquired (a little nepotism owing to their reputation helped), work immediately began on a first generation graphics chip; this was one of the first of a rush of dozens of companies attempting to develop graphics cards - both established players in the 2D graphics market such as Number Nine and S3, and new companies, almost all of which no longer exist - many of which failed to even release a single graphics card. The name was initially GXNV for “GX next version”, after a graphics chip Malachowsky led the development of at Sun, but Huang requested him to rename the chip to NV1 in order to not get sued. This also inspired the name of the company - NVIDIA, after other names such as “Primal Graphics” and “Huaprimal” were considered and rejected, and their originally chosen name of “Invision” turned out to have been trademarked by a toilet paper company.</p>

<p>In a perhaps ironic twist of fate, toilet paper turned out to be an apt metaphor for the sales, if not quality, of their first product, which Jensen Huang appears to be embarassed to discuss when asked, and has been quoted as saying “You don’t build NV1 because you’re great”. The product was released in 1995 after a two-year development cycle and the creation of what NVIDIA dubbed a hardware simulator, but actually appears to have been simply a set of Windows 3.x drivers intended to emulate their architecture, called the NV0 in 1994.</p>

<h3 id="the-nv1">The NV1</h3>

<p>The <strong>NV1</strong> was a combination graphics, audio, DRM (yes, really) and game port card implementing what NVIDIA dubbed the “NV Unified Media Architecture” (UMA); the chip was manufactured by SGS-Thomson Microelectronics (now STMicroelectronics) on a 350-nanometer process node, who also white-labelled NVIDIA’s design (which allegedly<sup id="fnref:contract" role="doc-noteref"><a href="#fn:contract" class="footnote" rel="footnote">2</a></sup> featured a DAC block designed by SGS-Thomson) as the STG-2000, a variant without audio functionality, also called the “NV1-V32” (for 32-bit VRAM) in internal documentation as opposed to NVIDIA’s NV1-D64. The chip was designed to implement a reasonable level of 3D graphics functionality, as well as audio, public-key encryption for DRM purposes (ultimately never used as it would have required the cooperation of software companies) and Sega Saturn game ports, all within a single megabyte of RAM, as memory costs were around $50 a megabyte when initial design began in 1993.</p>

<p>In order to achieve this, many techniques had to be used that ultimately compromised the chip’s 3D rendering quality, such as forward texture mapping, where a texel (output pixel) of a texture is directly mapped to a point on the screen, instead of the more traditional inverse texture mapping, which iterates through pixels and maps texels from those. While this has memory space advantages (as you can cache the texture in the very limited amount of VRAM NVIDIA had to work with very easily), it has many more disadvantages; firstly, this approach does not support UV mapping (a special coordinate system used to map textures to three-dimensional objects) and other aspects of what would be considered to be today basic graphical functionality.</p>

<p>Additionally, the fundamental implementation of 3D rendering used quad patching instead of traditional triangle-based approaches; this has very advantageous implications for things like curved surfaces, and may have been a very effective design for the CAD/CAM customers purchasing more high end 3D products, however, it turned out to not be particularly useful at all for the actually intended target market of gaming. There was also a total lack of Sound Blaster compatibility (very much a requirement for half-decent audio in games back then) in the audio engine, and VGA compatibility was very slow and partially emulated, which led to slow performance in the games people <em>actually played</em>, unless your favourite game was a crappier, slower version of <em>Descent</em>, <em>Virtua Cop</em> or <em>Daytona USA</em> for some reason. Another body blow to NVIDIA was received when Microsoft released Direct3D in 1996 with DirectX 2.0, which not only used triangles, but also became the standard 3D API and deprecated all of the numerous non-OpenGL proprietary APIs of the time, including S3’s S3D and MeTaL<sup id="fnref:metal" role="doc-noteref"><a href="#fn:metal" class="footnote" rel="footnote">3</a></sup>, ATI’s 3DCIF, and NVIDIA’s own NVLIB.</p>

<p>The upshot of all of this was what can be understood as nothing less than the total failure of NVIDIA to sell or convince anyone to develop for NV1 in any way, despite its innovative silicon design. While Diamond Multimedia purchased 250,000 chips to place into their “Edge 3D” series of cards, and other manufacturers produced cards in smaller quantities, barely any of them sold, and those that did sell were often returned, leading to the chips themselves being returned to NVIDIA and hundreds of thousands of chips sitting simply unused in warehouses. Barely any NV1-capable software was released, with the few pieces of software that do exist coming via a partnership with Sega (more on that later), while most others were forced to run under software emulators for Direct3D (or other APIs) written by Priem, which were made possible by the software architecture NVIDIA chose for their drivers, but were slower and worse-looking than software rendering, buggy, and generally extremely unappealing.</p>

<p>NVIDIA lost $6.4 million in 1995 on a revenue of $1.1 million, and $3 million on a revenue of $3.9 million in 1996. Most of the capital that allowed NVIDIA to continue operating were from the milestone payments from SGS-Thomson for developing the chip, their NV2 contract with Sega (again, more on that later), and their venture capital funding, but not from the very few NV1 sales. The NV1 was poorly reviewed, had very little software and ultimately almost no sales; despite various desperate efforts to revive it, including releasing the SDK for free (with a new proprietary <em>NVLIB</em> API for game development as an alternative to direct hardware programming) and by early 1996 straight up begging customers on their website to spam developers with requests to add NV1 support to games, the chip was effectively dead within a year.</p>

<h3 id="the-nv2">The NV2</h3>

<p>Nevertheless, NVIDIA grew to close to a hundred employees, including sales and marketing teams. The company, and especially its cofounders, remained confident in their architecture and overall prospects of success. They had managed to solidify a business relationship with Sega, to the point where they had initially won the contract to provide the graphics hardware for the successor to the Sega Saturn, at that time codenamed “V08”. The GPU was codenamed “Mutara” (after the nebula critical to the plot in <em>Star Trek II: The Wrath of Khan</em>) and the overall architecture was the <strong>NV2</strong>. It maintained many of the functional characteristics of the NV1 and was essentially a more powerful successor to that chip. According to available sources, this would have been the only NVIDIA chip manufactured by the then-just founded Helios Semiconductor.</p>

<p>However, problems started to emerge almost immediately. Game developers, especially Sega’s internal teams, were not happy with having to use a GPU with such a heterodox design; for example, porting games to or from the PC, which Sega did do at the time, would be made far harder. This position was especially championed by Yu Suzuki, head of one of Sega’s most prestigious internal development teams Sega-AM2, responsible for the <em>Daytona USA</em>, <em>Virtua Racing</em>, <em>Virtua Fighter</em>, and <em>Shenmue</em> series among others, who sent his best graphics programmer to interface with NVIDIA and push for the company to change the rendering method to a more traditional triangle-based approach. At this point, the story diverges: some tellings claim that NVIDIA simply refused to accede to Sega’s request and this damaged their relationship irreparably, leading to the NV2’s cancellation; others that the NV2 wasn’t killed until it failed to produce any video during a demonstration, and Sega still paid NVIDIA for developing it to prevent bankruptcy, with a single engineer apparently assigned to (and succeeding at) getting the chip working for the sole purpose of receiving a milestone payment.</p>

<p>At some point, Sega, as a traditional Japanese company, couldn’t simply kill the deal, so the NV2 was officially relegated to be used in the successor to the educational toddler-aimed Sega Pico, while in reality, Sega of America had already been told to “not worry” about NVIDIA anymore. NVIDIA got the hint, and the NV2 was cancelled. With both NV1 and NV2 out of the picture, NVIDIA had no sales, no customers, and barely any money; by late 1996, the company had $3 million in the bank and was burning through $330,000 a month, and most of the NV2 team had been redeployed to the next-generation NV3. No venture capital funding was going to be forthcoming due to the failure to actually create any products people wanted to buy, at least not without extremely unfavourable terms on things like ownership. The company was effectively almost a complete failure and a waste of years of the employees’ time.</p>

<h3 id="near-destruction-of-the-company">Near destruction of the company</h3>

<p>By the end of 1996, things had gotten infinitely worse, with the competition heating up extraordinarily fast; despite NV1 being the first texture-mapped consumer GPU ever released, they had been fundamentally outclassed by their competition. It was a one-two punch: initially, Rendition - founded around the same time as NVIDIA in 1993 - released its V1000 chip based on a custom RISC architecture, and while not particularly fast, it was, for a few months, the only chip that could run Quake (the hottest game of 1996) in hardware accelerated mode. The V1000 was an early market leader, alongside S3’s laughably bad ViRGE (Video and Rendering Graphics Engine) which was infamously slower than software rendering on high-end CPUs at launch, and was reserved for high-volume OEM bargain-bin disaster machines.</p>

<p>However, this was nothing compared to the body blow about to hit the entire industry, NVIDIA included. At a conference in early 1996, an $80,000 machine from SiliconGraphics, then the world leader in accelerated graphics, crashed during a demo by the then-CEO Ed McCracken. If accounts of the event are to be believed, while the machine rebooted, people who had heard rumors left the room and headed downstairs to another demo by a then-tiny company made up of ex-SGI employes calling themselves “3D/fx” (later shortened to 3dfx), claiming comparable graphics quality for $250… with demos to prove it. As with many cases of supposed “wonder innovations” in the tech industry, it was too good to be true, but when their card, the “Voodoo Graphics” was first released in the form of the “Righteous 3D” by Orchid in October 1996, it turned out to be true. Despite the fact that it was a 3D-only card and required a 2D card to be installed, and the fact it could not accelerate graphics in a window (which almost all other cards could do), performance was so high relative to other products (including the NV1) that it not only had rave reviews on its own but also kicked off a revolution in consumer 3D graphics, which especially caught fire when GLQuake was released in January 1997.</p>

<p>The reasons for 3dfx being able to design such an effective GPU when all others failed were numerous. The price of RAM plummeted by 80% throughout 1996, allowing the Voodoo’s estimated retail price to be cut from $1000 to $300; many of their staff members came from SiliconGraphics, perhaps the most respected and certainly the largest company in the graphics industry of that time<sup id="fnref:sgi" role="doc-noteref"><a href="#fn:sgi" class="footnote" rel="footnote">4</a></sup>; and while the Voodoo used a proprietary API called Glide, it also supported OpenGL and Direct3D. Glide was designed to be very similar to OpenGL while allowing for 3dfx to approximate standard graphical techniques through their driver design; the Voodoo only accelerates edge interpolation<sup id="fnref:edge" role="doc-noteref"><a href="#fn:edge" class="footnote" rel="footnote">5</a></sup>, texture mapping and blending, span interpolation<sup id="fnref:span" role="doc-noteref"><a href="#fn:span" class="footnote" rel="footnote">6</a></sup>, and final presentation of the rendered 3D scene, while the rest is all done in software. All of these factors were key in what proved to be an exceptionally high-quality product at an exceptionally low price for the time.</p>

<p>Meanwhile, NVIDIA effectively had to design a graphics architecture that could at the very least get close to 3dfx’s performance, on a shoestring budget and with very little resources, as 60% of their staff (including the entire sales and marketing teams) had been laid off to preserve money. They could not do a complete redesign of the NV1 from scratch if they felt the need to, as it would take two years (time they simply didn’t have) and any design that came out of this effort would be immediately obsoleted by competitors, such as 3dfx’s Voodoo series, and ATI’s Rage which was initially rather pointless but rapidly advancing in performance and driver stability. The chip would also have to work reasonably well on the first tapeout, as there was no capital to produce more revisions of the chip. The fact NVIDIA were able to achieve a successful design in the form of the NV3 under such conditions was a testament to the intelligence, skill and luck of their designers; we will explore how they managed to achieve this later on this write-up.</p>

<h3 id="the-nv3">The NV3</h3>

<p>It was with these financial, competitive and time constraints in mind that design on the NV3 began in 1996. This chip would eventually be commercialised as the RIVA 128, standing for “Real-time Interactive Video and Animation accelerator” followed by a nod to its 128-bit internal bus width, which was very large for the time. NVIDIA retained SGS-Thomson (soon to be STMicroelectronics) as their manufacturing partner, in exchange for SGS-Thomson cancelling their competing STG-3001 GPU. In a similar vein to the NV1, NVIDIA was to sell the chip as “NV3” and SGS-Thomson was to white-label it as STG-3000, once again separated by audio functionality; however, NVIDIA convinced SGS-Thomson to cancel their own part and stick to manufacturing the NV3 instead, which later proved to be a terrible decision when NVIDIA dropped them in favor of TSMC for manufacturing of the RIVA 128 ZX due to both yield issues and pressure from venture capital funders. ST went on to manufacture the PowerVR Kyro series of GPU chips before dropping out of the market entirely by 2002.</p>

<p>After the NV2 disaster, the company made several calls on the NV3’s design that turned out to be very good decisions. First, they acquiesced to Sega’s advice (which they might have already done to save the Mutara V08/NV2, but it was too late) and moved to an inverse texture mapping triangle-based model, although some remnants of the original quad patching design remain. The unused DRM functionality was also removed, which may have been assisted by David Kirk<sup id="fnref:dkirk" role="doc-noteref"><a href="#fn:dkirk" class="footnote" rel="footnote">7</a></sup> taking over from Curtis Priem as chief designer, as Priem insisted on including the DRM functionality with the NV1, citing piracy issues with the game he had written as a demo of the Malachowsky-designed GX GPU back when he worked at Sun.</p>

<p>Another decision that turned out to pay very large dividends was deciding to forgo a native API entirely and build the chip around accelerating the most popular graphical APIs, which led to an initial focus on Direct3D, although OpenGL drivers were first publicly released in alpha form in December 1997 and fully in early 1998. DirectX 3.0 was the initial target, and after 4.0 was <a href="//devblogs.microsoft.com/oldnewthing/20040122-00/?p=40963">cancelled due to a lack of developer interest in its new functionality</a>, 5.0 came out late during development of the chip, which turned out to be mostly compliant, with the exception of some blending modes such as additive blending which Jensen Huang later claimed was due to Microsoft not giving them the specification in time. This compliance was made much easier by the design of their driver, which allowed (and still allows) graphical APIs to be plugged in as “clients” to the Resource Manager kernel; as I mentioned earlier, this will be explained in full detail later.</p>

<p>The VGA core, previously so separate from the main GPU on the NV1 that it had its own PCI ID, was replaced by a new one licensed from Weitek who would soon exit the graphics market. The core was placed in the chip parallel to the main GPU with its own 32-bit bus, which massively accelerated performance in unaccelerated VESA titles such as <em>Doom</em>, and provided a real advantage over the 3D-only 3dfx cards, especially as their combination SST-96 or Voodoo Rush card used a questionable Alliance chip and was generally considered a failure. Finally, Huang, in his capacity as the CEO, allowed the chip to be expanded (in terms of physical size and number of gates) from its original specification, allowing for a more complex design with more features.</p>

<p>The initial revision of the architecture appears to have been completed in January 1997. Then, aided by hardware simulation software (an actual hardware simulation unlike the NV0) purchased from another almost-bankrupt company, an exhaustive test set was completed. The first bug presented itself almost immediately when the “C” character in the MS-DOS codepage appeared incorrectly, Windows took 15 minutes to boot, and moving the mouse cursor required a map of the screen so you didn’t lose it by moving too far, but ultimately the testing was completed. However, NVIDIA didn’t have the money to respin the silicon for a second stepping if problems appeared, so it had to work at least reasonably well in the first stepping.</p>

<h3 id="riva-128">RIVA 128</h3>

<p>Luckily for NVIDIA, the NV3 chip worked well enough to be sold to their board partners (almost certainly thanks to that hardware simulation package), and the company survived. Most accounts indicate they were only three or four weeks away from bankruptcy; when 3dfx saw the RIVA 128 at its reveal at the CGDC 1997 conference, one founder responded with “you guys are still around?”, considering 3dfx almost <em>bought</em> NVIDIA effectively for the purpose of killing the company as a theoretical competitor, but NVIDIA refused as they assumed they would be bankrupt within months anyway. However, this revision A of the chip was not the one NVIDIA actually commercialised; SGS-Thomson dropped their plans for the STG-3000 at some point, which led NVIDIA, now flush with cash<sup id="fnref:revenue" role="doc-noteref"><a href="#fn:revenue" class="footnote" rel="footnote">8</a></sup>, to create a new revision of the chip to remove the sound functionality (although some parts remained), fix some errata and make other minor adjustments to the silicon.</p>

<p>The chip was respun, with the revision B silicon being completed in October 1997 and presumably available a month or two later; it is most likely that some revision A cards were sold at retail, but based on the dates, these would have to be very early units<sup id="fnref:stb" role="doc-noteref"><a href="#fn:stb" class="footnote" rel="footnote">9</a></sup>, with the earliest NVIDIA RIVA 128 drivers that I have discovered (labelled as “Version 0.75” and also doubling as the only NV1 drivers for Windows NT) being dated August 1997, and reviews starting to drop on websites such as AnandTech in the first half of September 1997. There are no known drivers available for the audio functionality in the revision A RIVA 128, so anyone wishing to use it would have to write custom drivers.</p>

<p>The RIVA 128 was generally well-reviewed at its launch and considered as the fastest graphics chip released in 1997, beating the Voodoo1 in raw speed but not output video quality, most likely due to NVIDIA’s financial situation leading to rushed development of the chip with shortcuts taken in the design process in order to ship on time. Examples of this lower quality include the lack of support for some of Direct3D 5.0’s blending modes, and the use of per-polygon mipmapping<sup id="fnref:mipmap" role="doc-noteref"><a href="#fn:mipmap" class="footnote" rel="footnote">10</a></sup> instead of the more accurate per-pixel approach, causing seams between different mipmapping layers; the dithering and bilinear texture filtering quality were often criticised as well, and some games exhibited seams between polygons. Furthermore, the drivers were generally very rough at launch, especially if the graphics card was an upgrade and previous drivers were not; while NVIDIA were able to fix many driver issues by the 3.xx versions released in 1998 and 1999, going as far as writing a fairly decent OpenGL ICD, the standards for graphical quality had risen over time and what was considered “decent” in 1997 was considered to be “bad” and even “awful” by 1999.</p>

<p>Nevertheless, over a million RIVA 128 units sold within a few months, and NVIDIA’s immediate existence as a company was secured; an enhanced version (revision C, also called “NV3T”) was released in March 1998 as the RIVA 128 ZX, in order to compete with the Intel/Lockheed Martin i740, a chip which was hyped as being very fast on paper but turned out to be not very good, leading to Intel starting their long line of sub-par integrated GPUs before finally returning to the discrete market in recent years under the Arc brand, with the current Battlemage line being their <em>13th or 16th generation</em> product depending on who you ask.</p>

<p>After all of this history and exposition, we are finally ready to actually explore the GPU behind the RIVA 128 series. I refer to it as NV3 as a catch-all term for all chips using this architecture, including the RIVA 128, RIVA 128 ZX, and the hypothetical STG-3000. Note that the 32-bit Weitek VGA core’s architecture will not be discussed at length here unless absolutely required, as it is pretty much a standard SVGA core, and really is not that interesting compared to the main GPU; they’re not even substantially integrated, although there are a few areas in the design that allow the main GPU to write directly to the Weitek’s registers.</p>

<hr />

<h2 id="architectural-overview">Architectural overview</h2>

<p>NV3 is the third-generation NV architecture designed by NVIDIA in 1997, commercialised as the RIVA 128 family. It implements a fixed-function 2D and 3D render path primarily aimed at desktop software and video games, with hardware acceleration best described as partial by modern standards, but one of the more complete, fully-featured solutions for 1997. It can be attached through the legacy PCI 2.1 bus or AGP 1X (2X on the RIVA 128 ZX), a higher-speed superset of PCI designed for graphics which was brand new at the time but ultimately proved successful.</p>

<p>The primary goals of this architecture were low manufacturing cost, short development time (due to NVIDIA’s dire financial condition at the time), and beating the 3dfx Voodoo1 in raw pixel pushing performance. It generally achieved these goals with caveats, with a bulk cost of $15 per chip, a design period of around 9 months (excluding Revision B), and performance generally better than that of the Voodoo, in spite of 3dfx’s more integrated Glide API, and NVIDIA’s smaller performance advantage with large triangles as compared to smaller ones.</p>

<p>While the focus of study has been the Revision B chip, efforts have been made to understand the A and C revisions as well. Each revision has different values for the GPU ID in the framebuffer boot configuration register in MMIO space (at offset <code class="language-plaintext highlighter-rouge">0x100000</code>) and the PCI configuration space Revision ID register:</p>

<table>
  <thead>
    <tr>
      <th>Revision</th>
      <th><code class="language-plaintext highlighter-rouge">NV_PFB_BOOT_0</code> value</th>
      <th>PCI revision ID</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>A</td>
      <td><code class="language-plaintext highlighter-rouge">0x30100</code></td>
      <td><code class="language-plaintext highlighter-rouge">0x00</code></td>
    </tr>
    <tr>
      <td>B</td>
      <td><code class="language-plaintext highlighter-rouge">0x30110</code></td>
      <td><code class="language-plaintext highlighter-rouge">0x10</code></td>
    </tr>
    <tr>
      <td>C</td>
      <td><code class="language-plaintext highlighter-rouge">0x30120</code></td>
      <td><code class="language-plaintext highlighter-rouge">0x20</code></td>
    </tr>
  </tbody>
</table>

<p>There is a common misconception that the PCI ID is different on RIVA 128 ZX chips; this is partially true, but misleading. The standard NV3 architecture uses a PCI vendor ID of <code class="language-plaintext highlighter-rouge">0x12D2</code> (identified as “NVidia / SGS Thomson (Joint Venture)” by <a href="//pci-ids.ucw.cz/">The PCI ID Repository</a>) instead of NVIDIA’s own <code class="language-plaintext highlighter-rouge">0x10DE</code>, with a device ID of <code class="language-plaintext highlighter-rouge">0x0018</code>, or <code class="language-plaintext highlighter-rouge">0x0019</code> on a RIVA 128 ZX with ACPI enabled. However, the presence of a <code class="language-plaintext highlighter-rouge">0x0019</code> device ID is not sufficient for a RIVA 128 ZX to be detected as such; the revision must be C, or <code class="language-plaintext highlighter-rouge">0x20</code>, regardless of device ID, as confirmed through VBIOS and driver reverse engineering. Since the device ID can be either value, the best way to check is to use the revision ID encoded into the chip at manufacturing time, through the <code class="language-plaintext highlighter-rouge">NV_PFB_BOOT_0</code> register or PCI configuration space.</p>

<p>The NV3 architecture incorporates accelerated triangle setup (the Voodoo is limited to around 2/3 of that), the aforementioned span and edge interpolation, texture mapping, blending, and final presentation. It does not accelerate the initial polygon transformation or lighting rendering phases. It is capable of rendering in 2D at a resolution of up to 1280x1024 (or a higher limit of at least 1600x1200 in the ZX) and 32-bit colour. 3D rendering is only possible in 16-bit colour, and at 960x720 or lower in a 4 MB card due to a lack of VRAM. DDC is supported for monitor identification via an entirely software-programmed I2C bus.</p>

<p>While 2 MB and even 1 MB cards were planned, they were seemingly never released. The level of pain of using them can only be imagined; there were also low-end cards released that only used a 64-bit bus, handled using a manufacture-time configuration mechanism (sometimes exposed via DIP switches) known as straps, which will be explained in Part 2. To compete with the i740, the RIVA 128 ZX had, among other changes that will be described later, an increased amount of VRAM (8 MB) also allowing it to render 3D at higher resolutions of up to 1280x1024.</p>

<p>The design of the RIVA is very complex compared to other contemporaneous video cards. I am not sure why such a complex design was used, but it was inherited from the NV1; the only real reason I can think of is that the overengineered design is intended to be future-proof and easy to enhance without requiring complete rewiring of the silicon, as many other companies had to do. The GPU is split into a around a dozen subsystems (functional hardware blocks), each with names starting in <code class="language-plaintext highlighter-rouge">P</code> for some reason; some examples are <code class="language-plaintext highlighter-rouge">PGRAPH</code>, <code class="language-plaintext highlighter-rouge">PTIMER</code>, <code class="language-plaintext highlighter-rouge">PFIFO</code>, <code class="language-plaintext highlighter-rouge">PRAMDAC</code> and <code class="language-plaintext highlighter-rouge">PBUS</code>. Presumably, a subsystem has a 1:1 mapping with a functional block on the GPU die, since the registers are named after the subsystem that they are a part of.</p>

<p>There are several hundred different registers across the entire graphics card, so things are necessarily simplified for brevity, at least in Part 1. To be honest, the architecture of this graphics card is too complicated to show in a diagram without simplifying things so much as to be effectively pointless or complicating it to the point of not being useful (I tried!), so a diagram has not been provided.</p>

<h3 id="fundamental-concept-the-scene-graph">Fundamental concept: the scene graph</h3>

<p>In order to begin this journey through the NVIDIA NV3 architecture, you must understand the fundamental concept of a scene graph. Although the architecture does not strictly implement a scene graph, knowing the concept helps understand how graphical objects are represented by the GPU. A scene graph is a description of a form of tree where the nodes of the tree are graphical objects, and the properties of a parent object cascade down to its children.</p>

<p>This is how almost all modern game engines (Unity, Unreal, Godot…) represent 3D space. A very easy way to understand how a scene graph works is - I am not joking - install Roblox Studio, place some objects into the scene, save it as an <code class="language-plaintext highlighter-rouge">RBXLX</code> file (not the default), and open it in a text editor of your choice. You will see an XML representation of the scene you have created as a scene graph; the only caveat is that on Roblox, the cascading of characteristics from parent nodes to children is optional.</p>

<p>The scene graph is almost certainly the namesake for the functional block actually implementing the 2D and 3D drawing engine that makes the GPU, well, a GPU: <code class="language-plaintext highlighter-rouge">PGRAPH</code>. This part has survived from the very first NV1 all the way to the current Blackwell (RTX 5000) architecture; NVIDIA have never done a ground-up redesign since initial development of the NV1 architecture began in 1993, although the Ship of Theseus argument applies here.</p>

<h3 id="clocks">Clocks</h3>

<p>The RIVA 128 is not dependent on the host machine’s clock. It has a 13.5 or 14.3 MHz (depending on boot-time configuration) clock crystal, split by the hardware into a memory clock (MCLK) and video clock (VCLK). Note that these names are misleading; the MCLK also handles the chip’s actual rendering and timing, with the VCLK seemingly just handling the actual pushing out of frames.</p>

<p>The actual clocks are controlled by registers in <code class="language-plaintext highlighter-rouge">PRAMDAC</code> set by the video BIOS, which can later be overridden by drivers. In this iteration of the NVIDIA architecture, the VBIOS only performs a very basic POST sequence, initialises the chip and sets its clock speed; once the chip is initialised, the VBIOS is effectively never needed again, although there are mechanisms to read from it after initialisation. Clocks were controlled by card manufacturers through parameters <code class="language-plaintext highlighter-rouge">m</code>/<code class="language-plaintext highlighter-rouge">n</code>/<code class="language-plaintext highlighter-rouge">p</code>, from which the chip derives the final memory and pixel clock speed with the formula <code class="language-plaintext highlighter-rouge">(frequency * n) / (m &lt;&lt; p)</code>. Generally, most manufacturers set the memory clock at around 100 MHz, and the pixel clock at around 40 MHz, although drivers seemingly reduce these clocks in some cases.</p>

<p>The chip’s RAMDAC handles final conversion of the digital image generated by the GPU into an analog video signal, and clock generation via three phase-locked loops. It has its own clock (ACLK) running at around 200 MHz on RIVA 128 (revision A/B) and 260 MHz on RIVA 128 ZX (revision C) chips, which unlike the other clocks, was not configurable by manufacturers.</p>

<h3 id="memory-mapping">Memory mapping</h3>

<p>Before we can discuss any part of how the RIVA 128 works, its memory architecture must be explained, since this is a fundamental requirement to even access the chip’s registers in the first place. NVIDIA picked a fairly strange memory mapping architecture, at least for chips of that time. The exact setup of the memory mapping changed numerous times as NVIDIA’s architecture evolved, so only NV3-based GPUs will be analyzed.</p>

<p>The memory mapping is split into three primary components, all exposed via memory-mapped I/O through Base Address Registers (BAR) in PCI configuration space; there is no port I/O support outside of the Weitek core’s registers for SVGA compatibility. The RIVA 128 uses two BARs, both 16 MB in size: BAR0 holding the main GPU registers, and BAR1 holding the <code class="language-plaintext highlighter-rouge">DFB</code> and <code class="language-plaintext highlighter-rouge">RAMIN</code> areas (which really refer to overlapping areas of memory).</p>

<h4 id="mmio">MMIO</h4>

<p>This is the primary memory mapping area, set up as Base Address Register 0 in the PCI configuration registers. This is how you speak to the GPU: 16 MB (!) of MMIO, mapped at a memory location defined by the system BIOS. Since the video BIOS has no access to PCI services, it instead uses I/O ports <code class="language-plaintext highlighter-rouge">0x3D0</code>-<code class="language-plaintext highlighter-rouge">0x3D3</code> in the Weitek SVGA core, mapped to a mechanism called RMA (Real Mode Access); a 32-bit address is formed by writing to all four RMA registers, then the next read/write to the VGA I/O region is redirected to the MMIO area, allowing the VBIOS to access it from real mode and initialise the GPU.</p>

<p>This MMIO area has numerous functional subsystems of the GPU mapped into it, with some overlap. The actual function of each graphics object will be described later.</p>

<table>
  <thead>
    <tr>
      <th>Range</th>
      <th>Name</th>
      <th>Purpose</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x0-0xFFF</code></td>
      <td>PMC</td>
      <td>Controls the GPU functional units and interrupt state</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x1000-0x1FFF</code></td>
      <td>PBUS</td>
      <td>Controls the 128-bit internal bus</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x1800-0x18FF</code></td>
      <td>PCI mirror</td>
      <td>Mirror of PCI configuration registers</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x2000-0x3FFF</code></td>
      <td>PFIFO</td>
      <td>FIFO buffer for graphics command submission from DMA</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x4000-0x4FFF</code></td>
      <td>PRM</td>
      <td>Real mode device support (e.g. MPU-401)</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x6000-0x6FFF</code></td>
      <td>PRAM</td>
      <td>Controls RAMIN area configuration</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x7000-0x7FFF</code></td>
      <td>PRMA</td>
      <td>Real Mode Access registers</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x9000-0x9FFF</code></td>
      <td>PTIMER</td>
      <td>Custom programmable interval timer</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0xA0000-0xAFFFF</code></td>
      <td>PRMFB</td>
      <td>Real Mode Framebuffer: emulated VGA video memory</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0xC0000-0xCFFFF</code></td>
      <td>PRMVIO</td>
      <td>Real Mode Video: VGA emulation registers (Weitek)</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x100000-0x100FFF</code></td>
      <td>PFB</td>
      <td>Framebuffer interface (config, debug, initialisation)</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x101000-0x101FFF</code></td>
      <td>PEXTDEV</td>
      <td>External Device interface</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x101000</code></td>
      <td>PSTRAPS</td>
      <td>Device configuration bits (set at factory)</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x110000-0x110FFF</code></td>
      <td>PROM</td>
      <td>Video BIOS mirror</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x120000-0x120FFF</code></td>
      <td>PALT</td>
      <td>External memory access mirror (unknown, possible NV1 remnant)</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x200000-0x200FFF</code></td>
      <td>PME</td>
      <td>Mediaport: External MPEG decoder interface</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x400000-0x401FFF</code></td>
      <td>PGRAPH</td>
      <td>2D/3D graphics engine: Core</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x410000-0x411FFF</code></td>
      <td>UBETA</td>
      <td>2D/3D graphics engine: Beta factor object</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x420000-0x421FFF</code></td>
      <td>UROP</td>
      <td>2D/3D graphics engine: Render operation object</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x430000-0x431FFF</code></td>
      <td>UCHROMA</td>
      <td>2D/3D graphics engine: Chroma key object</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x440000-0x441FFF</code></td>
      <td>UPLANE</td>
      <td>2D/3D graphics engine: Plane mask object</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x450000-0x451FFF</code></td>
      <td>UCLIP</td>
      <td>2D/3D graphics engine: Clip object</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x460000-0x461FFF</code></td>
      <td>UPATT</td>
      <td>2D/3D graphics engine: Blit pattern object (e.g. for BitBLT)</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x470000-0x471FFF</code></td>
      <td>URECT</td>
      <td>2D/3D graphics engine: Rectangle object</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x480000-0x481FFF</code></td>
      <td>UPOINT</td>
      <td>2D/3D graphics engine: Point object</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x490000-0x491FFF</code></td>
      <td>ULINE</td>
      <td>2D/3D graphics engine: Line object</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x4A0000-0x4A1FFF</code></td>
      <td>ULIN</td>
      <td>2D/3D graphics engine: Lin (line without starting or ending pixels)</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x4B0000-0x4B1FFF</code></td>
      <td>UTRI</td>
      <td>2D/3D graphics engine: Triangle object (possible NV1 leftover)</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x4C0000-0x4C1FFF</code></td>
      <td>UW95TXT</td>
      <td>2D/3D graphics engine: Windows 95 GDI text acceleration object</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x4D0000-0x4D1FFF</code></td>
      <td>UMEMFMT</td>
      <td>2D/3D graphics engine: Memory to memory format object</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x4E0000-0x4E1FFF</code></td>
      <td>USCALED</td>
      <td>2D/3D graphics engine: Scaled image from memory object</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x500000-0x501FFF</code></td>
      <td>UBLIT</td>
      <td>2D/3D graphics engine: Blit object</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x510000-0x511FFF</code></td>
      <td>UIMAGE</td>
      <td>2D/3D graphics engine: Image object</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x520000-0x521FFF</code></td>
      <td>UBITMAP</td>
      <td>2D/3D graphics engine: Bitmap object</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x540000-0x541FFF</code></td>
      <td>UTOMEM</td>
      <td>2D/3D graphics engine: Transfer to memory object</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x550000-0x551FFF</code></td>
      <td>USTRTCH</td>
      <td>2D/3D graphics engine: Stretched image from CPU object</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x570000-0x571FFF</code></td>
      <td>UD3D0Z</td>
      <td>2D/3D graphics engine: Direct3D 5.0 triangle w/zeta buffer<sup id="fnref:zetabuf" role="doc-noteref"><a href="#fn:zetabuf" class="footnote" rel="footnote">11</a></sup> object</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x580000-0x581FFF</code></td>
      <td>UPOINTZ</td>
      <td>2D/3D graphics engine: Point w/zeta buffer<sup id="fnref:zetabuf:1" role="doc-noteref"><a href="#fn:zetabuf" class="footnote" rel="footnote">11</a></sup></td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x5C0000-0x5C1FFF</code></td>
      <td>UINMEM</td>
      <td>2D/3D graphics engine: Image in memory object</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x601000-0x601FFF</code></td>
      <td>PRMCIO</td>
      <td>VGA CRTC registers</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x680000-0x6802FF</code></td>
      <td>PVIDEO</td>
      <td>Video overlay engine</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x680300-0x680FFF</code></td>
      <td>PRAMDAC</td>
      <td>Video signal generation, cursor, CLUT, clock generation</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x681200-0x681FFF</code></td>
      <td>USER_DAC</td>
      <td>Optional for external DAC?</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">0x800000-0xFFFFFF</code></td>
      <td>USER</td>
      <td>Graphics object submission area (for PFIFO, via DMA)</td>
    </tr>
  </tbody>
</table>

<h4 id="dfb">DFB</h4>

<p><code class="language-plaintext highlighter-rouge">DFB</code> is the aptly-named “Dumb Framebuffer”, a linear framebuffer set up as Base Address Register 1 on the NV3 (moved to BAR0 offset <code class="language-plaintext highlighter-rouge">0x1000000</code> on later GPUs). The default size of 4 MB may change depending on VRAM size. This area is presumably meant for manipulating the GPU without using its DMA facilities.</p>

<h4 id="ramin">RAMIN</h4>

<p><code class="language-plaintext highlighter-rouge">RAMIN</code> is also located in BAR1. It’s a somewhat complicated area, but also the most important one to understand when it comes to the actual operation of the GPU, as it’s the part of video RAM where graphics objects and structures containing references to them are stored.</p>

<p>This area is effectively the last megabyte of VRAM (regardless of VRAM size), but organized as 16-byte blocks which are then stored from the top down. A <code class="language-plaintext highlighter-rouge">RAMIN</code> address can be converted to a real VRAM address with the formula <code class="language-plaintext highlighter-rouge">ramin_address ^ (vram_size - 16)</code>. I’m not entirely sure why they did this, but I assume it was for providing a more convenient interface to the user and for general efficiency reasons.</p>

<h3 id="interrupts">Interrupts</h3>

<p>A traditional interrupt system is implemented, supporting interrupts issued by different GPU components. <code class="language-plaintext highlighter-rouge">PMC</code> contains an interrupt status register and an interrupt enable register, with one bit for each component (including the eventually-removed <code class="language-plaintext highlighter-rouge">PAUDIO</code>), as well as a software interrupt represented by bit 31; components also have a local status register and enable register, with each bit representing an individual interrupt from that block. If the <code class="language-plaintext highlighter-rouge">PMC</code> interrupt status and enable bits for a given component are both 1, with some minor exceptions to be explained in later parts, an interrupt is declared to be pending and a PCI IRQ is sent.</p>

<p>Interrupts can be turned off globally (or just component interrupts, or just the software interrupt) via the <code class="language-plaintext highlighter-rouge">PMC_INTR_EN</code> register.</p>

<h3 id="programmable-interval-timer">Programmable interval timer</h3>

<p>Time-sensitive functions are provided by a relatively simple programmable interval timer <code class="language-plaintext highlighter-rouge">PTIMER</code> that fires an interrupt whenever the threshold value (set by the <code class="language-plaintext highlighter-rouge">PTIMER_ALARM</code>) is exceeded in nanoseconds. This is how the drivers internally keep track of many actions that they need to perform, and is the first functional block which must be done right if you ever hope to emulate the RIVA 128.</p>

<p>The least straightforward part of this timer is the counter itself, a 56-bit value split across two 32-bit registers: the lower 27 bits are stored in bits [31:5] of <code class="language-plaintext highlighter-rouge">PTIMER_TIME0</code>, and the upper 29 bits are stored in bits [28:0] of <code class="language-plaintext highlighter-rouge">PTIMER_TIME1</code>.</p>

<h3 id="graphics-commands-and-dma-engine">Graphics commands and DMA engine</h3>

<p>What may be called <em>graphics commands</em> in other GPU architectures are instead called <em>graphics objects</em> in the NV3 and all other NVIDIA architectures. Objects are submitted into the GPU core by writing into the <code class="language-plaintext highlighter-rouge">NV_USER</code> section of the MMIO BAR0 region through programmed I/O. Despite the fact that a custom memory access engine with its own translation lookaside buffer and other memory management structures was implemented for graphics object types that perform memory transfers, it does not seem to be used for graphics object submission until the NV4 architecture. Existing documentation is contradictory on whether or not this exists on the NV3, but drivers do not seem to use DMA to submit graphics objects; if a DMA submission method exists, it certainly works very differently to later versions of the architecture.</p>

<p>There are 8 DMA channels, with the default being channel 0 (also the only channel accessible through PIO?), but only one can be used at a time; using other channels requires a <em>context switch</em>, which entails writing the current channel ID to to <code class="language-plaintext highlighter-rouge">PGRAPH</code> registers for every class. All DMA channels use 64 KB of <code class="language-plaintext highlighter-rouge">RAMIN</code> memory (to be explained later), further divided into 8 KB (<code class="language-plaintext highlighter-rouge">0x2000</code>) subchannels, effectively representing one object; the meaning of what is in those subchannels depends on the type (or <em>class</em> to use NVIDIA terminology) of the object submitted into them, with the attributes of each object being called a <em>method</em>. A simple way to program the GPU is to just create subchannels for specific objects (such as one for text, one for rectangle, and so on) and change their data and methods as the program runs in order to create a graphical effect; however, this is a severely limited approach<sup id="fnref:nt" role="doc-noteref"><a href="#fn:nt" class="footnote" rel="footnote">12</a></sup>, and tapping the chip’s full potential requires the use of context switches between DMA channels, as well as the additional classes implemented in software by the drivers.</p>

<p>All objects have a <em>context</em>, consisting of a 32-bit “name” and another 32-bit value storing its class, associated channel and subchannel ID, where it is relative to the start of <code class="language-plaintext highlighter-rouge">RAMIN</code>, and whether it’s a software-injected or hardware graphical rendering object (bit 31). Contexts are stored in an area of RAM called <code class="language-plaintext highlighter-rouge">RAMFC</code> if the object’s channel is not being used; otherwise, they are stored in <code class="language-plaintext highlighter-rouge">RAMHT</code>, a <em>hash table</em> where the hash key is a single byte calculated by XORing each byte of the object’s name<sup id="fnref:htdriver" role="doc-noteref"><a href="#fn:htdriver" class="footnote" rel="footnote">13</a></sup> as well as the channel ID. Objects are stored in <code class="language-plaintext highlighter-rouge">RAMHT</code> as structures consisting of their 8-byte context followed by the <em>methods</em> mentioned earlier; an object’s byte offset in <code class="language-plaintext highlighter-rouge">RAMHT</code> is its hash multiplied by 16.</p>

<p>The exact set of methods of every graphics object in the architecture is incredibly long and often shared between several different types of objects (although the first 256 bytes and usually a few more after that are shared), and thus won’t be listed in part 1. An overall list of graphics objects can be found in the next section, but note that these are the ones defined by the hardware, while the drivers implement a much larger set of objects that do not map exactly to the ones in the GPU; furthermore, as you will see later, as each object is quite large at 8 KB, only one object does not mean only one (or even any at all - some are used to represent DMA objects, for example) graphics objects are drawn once the object is process. Objects can also be connected together with a special type of object called a “patchcord” constructed by the Resource Manager; the name is a remnant from the old NV1 quad patching days.</p>

<p>After being written to <code class="language-plaintext highlighter-rouge">NV_USER</code>, graphics objects are sent to one of two caches within the <code class="language-plaintext highlighter-rouge">PFIFO</code> subsystem: <code class="language-plaintext highlighter-rouge">CACHE0</code> which holds a single entry (really intended for the <a href="#interrupts-20-notifiers">notifier engine</a> to be able to inject graphics commands from software), or <code class="language-plaintext highlighter-rouge">CACHE1</code> which holds 32 entries on revisions A-B and 64 on revision C onwards. What these critical components actually do will be explored in full in later parts, but they effectively just store object names and contexts as they are waiting to be sent to <code class="language-plaintext highlighter-rouge">RAMIN</code>; a “pusher” pushes objects in from the bus as they are written into <code class="language-plaintext highlighter-rouge">NV_USER</code>, and a “puller” pulls them out of the bus and sends them where they need to be inside of the VRAM (or to <code class="language-plaintext highlighter-rouge">RAMRO</code> if they are invalid).</p>

<p>Once objects are pulled out, the GPU will simply manipulate the various registers in the <code class="language-plaintext highlighter-rouge">PGRAPH</code> subsystem in order to draw the object (if the object is actually rendered), and/or perform any DMA operations the graphics object may require using the DMA engine. Objects do not appear to “disappear” on frame refresh; instead, it would simply appear that they are simply drawn over, and most likely, any renderer will simply clear the entire screen (with a <em>Rectangle</em> object for instance) before resubmitting any graphics objects they need to render.</p>

<p>Both <code class="language-plaintext highlighter-rouge">RAMFC</code> and <code class="language-plaintext highlighter-rouge">RAMHT</code> can have their sizes, and to some extent their location within RAMIN, configured by registers within the <code class="language-plaintext highlighter-rouge">PFIFO</code> block. <code class="language-plaintext highlighter-rouge">RAMHT</code> can be 4 KB (of questionable usefulness as that cannot fill <code class="language-plaintext highlighter-rouge">CACHE1</code>), 8 KB, 16 KB, or 32 KB in size, while RAMFC is either 512 bytes or 8 KB.</p>

<h4 id="object-list">Object list</h4>

<p>Any class values not listed here are invalid; in theory, the 5-bit value in the object context allows for 32 classes, but NVIDIA did not implement the full amount, and moved to a different approach (where the classes are somewhat more constructed in software) with the NV4 architecture.</p>

<p><strong><code class="language-plaintext highlighter-rouge">0x01</code> (Beta factor):</strong> The beta factor used for blending operations. (combining an output pixel with another pixel to produce a final image)</p>

<p><strong><code class="language-plaintext highlighter-rouge">0x02</code> (ROP5 operation):</strong> The Render OPeration used for blending. (e.g. XOR)</p>

<p><strong><code class="language-plaintext highlighter-rouge">0x03</code> (Chroma Key):</strong> Similar to a color key used in video editing.</p>

<p><strong><code class="language-plaintext highlighter-rouge">0x04</code> (Plane mask):</strong> Seems to be implemented similarly to <em>Chroma Key</em>, not sure what it has to do with planes. (bitplane? 2D plane?)</p>

<p><strong><code class="language-plaintext highlighter-rouge">0x05</code> (Clipping rectangle):</strong> A rectangle used for enabling/disabling render operations within a specific region.</p>

<p><strong><code class="language-plaintext highlighter-rouge">0x06</code> (Pattern):</strong> Pattern used for bitblit and other blits.</p>

<p><strong><code class="language-plaintext highlighter-rouge">0x07</code> (Rectangle):</strong> Up to 16 rectangles with size and position represented as a 32-bit value. (low 16 bits are X, high 16 bits are Y)</p>

<p><strong><code class="language-plaintext highlighter-rouge">0x08</code> (Point):</strong> An arbitrary point on the screen. Depending on the methods used to submit the object, this object can take the form of:</p>

<ul>
  <li>Up to 32 points, each with a single arbitrary 32-bit colour (probably BGRA format) and 16-bit size and position values;</li>
  <li>Up to 16 points, each with a single arbitrary 32-bit colour (probably BGRA format) and 32-bit size and position values;</li>
  <li>Up to 16 points, making up a polygon, with an arbitrary 32-bit colour for each polygon line (probably BGRA format) and 16-bit size and position values.</li>
</ul>

<p><strong><code class="language-plaintext highlighter-rouge">0x09</code> (Line):</strong> An arbitrary line on the screen. Depending on the methods used to submit the object, this object can take the form of:</p>

<ul>
  <li>Up to 16 lines, each with a single arbitrary 32-bit colour (probably BGRA format) and 16-bit size and position values;</li>
  <li>Up to 8 lines, each with a single arbitrary 32-bit colour (probably BGRA format) and 32-bit size and position values;</li>
  <li>Up to 32 lines, each making up a polygon, with a single arbitrary 32-bit colour (probably BGRA format) and 16-bit size and position values;</li>
  <li>Up to 16 lines, each making up a polygon, with a single arbitrary 32-bit colour (probably BGRA format) and 32-bit size and position values;</li>
  <li>Up to 16 lines, each making up a polygon, with an arbitrary 32-bit colour for each polygon line (probably BGRA format) and 16-bit size and position values.</li>
</ul>

<p><strong><code class="language-plaintext highlighter-rouge">0x0A</code> (Lin):</strong> Same as <em>Line</em>, but the starting and ending pixels are not drawn for each line.</p>

<p><strong><code class="language-plaintext highlighter-rouge">0x0B</code> (Triangle):</strong> A basic (presumably pre-transformed?) 2D triangle. Depending on the methods used to submit the object, this object can take the form of:</p>

<ul>
  <li>A single triangle with a single arbitrary 32-bit colour and three 16-bit position values for each of the triangle’s vertexes;</li>
  <li>A single triangle with a single arbitrary 32-bit colour for the entire mesh, and three 16-bit position values for each of the triangle’s vertexes;</li>
  <li>A part of a mesh of up to 32 triangles with a single arbitrary 32-bit colour and two 16-bit position values for each of the points on the mesh;</li>
  <li>A part of a mesh of up to 16 triangles with a single arbitrary 32-bit colour and two 32-bit position values for each of the points on the mesh;</li>
  <li>A set of up to 8 triangles with a single arbitrary 32-bit colour for the entire mesh, and three 16-bit position values for each of the triangle’s vertexes;</li>
  <li>A part of a mesh of up to 16 triangles with a 32-bit colour and two 32-bit position values for each of the points on the mesh.</li>
</ul>

<p><strong><code class="language-plaintext highlighter-rouge">0x0C</code> (Windows 95 GDI Text Acceleration):</strong> A specialized hardware accelerator for the manner by which Windows 95’s GDI (and its DIB Engine?) renders text. This is a very complicated set of clipping logic that won’t be covered until Part 3; it’s too long for this part, and I don’t fully understand it yet.</p>

<p><strong><code class="language-plaintext highlighter-rouge">0x0D</code> (Memory to memory format):</strong> Changes the format of a set of pixels in VRAM. Allows for changing the line (vertical size) length, count and pitch of the image.</p>

<p><strong><code class="language-plaintext highlighter-rouge">0x0E</code> (Scaled image from memory):</strong> Obtains an image from VRAM (in YUV or RGB format) and scales it before displaying it to the screen, performing a bit of differentiation to achieve this. Parameters an output position and size for the final screen as well as an input position or size.</p>

<p><strong><code class="language-plaintext highlighter-rouge">0x10</code> (Blit):</strong> Blits an image (a final one made up of 3D polygons or a 2D one) between two different parts of the screen. Has an input and output position and a size.</p>

<p><strong><code class="language-plaintext highlighter-rouge">0x11</code> (Image from CPU):</strong> Takes an image from “CPU” (main memory?), optionally scales it, and then displays it on the screen. Parameters are an input size, set of 32-bit colour values and output position and size.</p>

<p><strong><code class="language-plaintext highlighter-rouge">0x12</code> (Bitmap):</strong> Similar to <em>Image from CPU</em>, but deals with monochrome or two-colour bitmaps instead, possibly as an optimisation.</p>

<p><strong><code class="language-plaintext highlighter-rouge">0x14</code> (Transfer to Memory):</strong> Takes an image from the screen (?) and transfers it to memory. Parameters are a start position offset from VRAM and a pitch, as well as a position and size for the image.</p>

<p><strong><code class="language-plaintext highlighter-rouge">0x15</code> (Stretched image from CPU):</strong> Takes an image from “CPU” (main memory?), stretches it using an optional clip region and a little bit of differentiation, and then uses it. Parameters are an input size and a clip region using the same 16-bit coordinate format used by the basic primitive drawing silicon.</p>

<p><strong><code class="language-plaintext highlighter-rouge">0x17</code> (Direct3D 5.0 accelerated triangle with zeta buffer):</strong> Seemingly an attempt to implement the Direct3D 5.0 specification to the letter in silicon. Allows for up to 128 triangles to be submitted at a time, with six coordinates:</p>

<ul>
  <li>The traditional X, Y and Z coordinates used for representing vector values in 3D space</li>
  <li>U and V coordinates for textures. Textures may be <em>uploaded</em> at sizes up to 2048x2048 (only power of two textures are allowed!), but are scaled down to 256x256 during upload, if they are larger.</li>
  <li>An “M” coordinate, apparently a “measurement dimension” used for more precise measurement of real-world distances</li>
</ul>

<p>Each triangle may have a 32-bit colour value as well. Note that the RIVA 128 is not a multitexture-capable GPU; you can only apply one texture to each batch of 128 triangles, so the implementation of Direct3D in the drivers should attempt to send as many triangles with the same texture to the GPU as the GPU can fit, as closely as possible. If you write applications targeting this GPU, you should try ensuring objects with the same texture add up to close to a multiple of 128 triangles, as the D3D driver’s implementation of this optimisation will improve the efficiency of your renderer.</p>

<p>These triangles, as a group, may have the following effects applied to them:</p>
<ul>
  <li>“Zeta buffer” (may be similar to the Z-buffer used for polygon ordering, or for mipmapping?)</li>
  <li>“Alpha buffer” (probably for alpha blending)</li>
  <li>Specular highlighting</li>
  <li>Vertex fog (of any 32-bit colour)</li>
  <li>Interpolation between vertex positions (using a zero-order hold, “Microsoft” variant of zero-order hold, or full-order hold implementation)</li>
  <li>Frustum culling clockwise or counterclockwise (discarding triangles, although presumably this would only work in the batch of 128 triangles sent to the hardware for processing)</li>
  <li>Texture UV coordinate wrapping for seamless textures (coordinates can wrap cleanly, be clamped to their “last” pixels or mirror themselves)</li>
</ul>

<p><strong><code class="language-plaintext highlighter-rouge">0x18</code> (Point with zeta buffer):</strong> Similar to <em>Point</em>, but the zeta and alpha buffer can be applied to it too.</p>

<h4 id="when-you-screw-up-ramro">When you screw up: RAMRO</h4>

<p>Aside from the previously-covered <code class="language-plaintext highlighter-rouge">RAMFC</code> and <code class="language-plaintext highlighter-rouge">RAMAU</code>, another important structure is stored in <code class="language-plaintext highlighter-rouge">RAMIN</code>. <code class="language-plaintext highlighter-rouge">RAMRO</code> saves the day and prevents the GPU from blowing up if a graphics object you submit is invalid, because after all, nothing is perfect and there are always bugs in code.</p>

<p>During object submission, if the GPU detects that the cache ran out, was turned off, or any kind of illegal access was performed, the submission is not processed; instead, it is sent to a special area of <code class="language-plaintext highlighter-rouge">RAMIN</code> known as <code class="language-plaintext highlighter-rouge">RAMRO</code> (always half the size of <code class="language-plaintext highlighter-rouge">RAMHT</code>), which stores the object, what went wrong, and whether a read or write operation was involved in the error. Additionally, an interrupt is fired so that any drivers running on the system can catch the error and (hopefully) correct it.</p>

<p>The <code class="language-plaintext highlighter-rouge">PFIFO_RUNOUT_STATUS</code> register holds the current state of the <code class="language-plaintext highlighter-rouge">RAMRO</code> region, including whether or not any errors have occurred.</p>

<h4 id="ramau">RAMAU</h4>

<p><code class="language-plaintext highlighter-rouge">RAMAU</code> was an area used in the NV1 and revision A NV3 chips for storing audio data being streamed into the CPU. In Revision B and later chips, this area is still mapped to MMIO space, but its functionality has been removed entirely.</p>

<h3 id="interrupts-20-notifiers">Interrupts 2.0: Notifiers</h3>

<p>Some people at NVIDIA decided that they were too cool for interrupts and thought: why have an interrupt that tells the GPU to do something, when you could have an interrupt that has the GPU tell the drivers to do something? And thus the incredible <em>notifier</em> system was born.</p>

<p>Notifiers appear to have been implemented to allow the drivers to manage GPU resources implemented in software instead of silicon. Every single subsystem in the GPU has a notifier enable register alongside its interrupt enable register, with some having multiple enable registers for different notifier types; notifiers are mostly found within <code class="language-plaintext highlighter-rouge">PGRAPH</code>, <code class="language-plaintext highlighter-rouge">PME</code> and <code class="language-plaintext highlighter-rouge">PVIDEO</code>, but may also exist in other subsystems.</p>

<p><code class="language-plaintext highlighter-rouge">PGRAPH</code> notifiers appear to be intended to work with the object class system, and actually differ - there is basically one “type” of notification depending on the object class, with each object having a set of “notification parameters” that can be used to trigger the <code class="language-plaintext highlighter-rouge">SetNotify</code> method at <code class="language-plaintext highlighter-rouge">0x104</code> within an object stored in <code class="language-plaintext highlighter-rouge">RAMHT</code>. There is also the <code class="language-plaintext highlighter-rouge">SetNotifyCtxDma</code> method, usually but not always at <code class="language-plaintext highlighter-rouge">0x0</code>, which is used for context switching. Notifiers appear to be “requested” until the GPU processes them, and <code class="language-plaintext highlighter-rouge">PGRAPH</code> can take up to 16 software and 1 hardware notifier type. Objects are signalled to the driver by directly DMAing into the Resource Manager memory. Notifications are represented by a structure as such:</p>

<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">typedef</span> <span class="k">struct</span> <span class="p">{</span>
    <span class="k">struct</span> <span class="p">{</span>
        <span class="kt">uint32_t</span> <span class="n">nanoseconds</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span>
    <span class="p">}</span> <span class="n">TimeStamp</span><span class="p">;</span>
    <span class="kt">int32_t</span> <span class="n">info32</span><span class="p">;</span>
    <span class="kt">int16_t</span> <span class="n">info16</span><span class="p">;</span>
    <span class="kt">int16_t</span> <span class="n">status</span><span class="p">;</span> <span class="cm">/* 0xFF (NV_NOTIFICATION_IN_PROGRESS) = pending; 0x00 = complete; others = error */</span>
<span class="p">}</span> <span class="n">NvNotification</span><span class="p">;</span>
</code></pre></div></div>

<p>More research is ongoing. It appears that most notifiers are generated by the driver in order to manage hardware resources that they would not otherwise be capable of managing, such as the <code class="language-plaintext highlighter-rouge">PFIFO</code> caches.</p>

<h3 id="pramdac">PRAMDAC</h3>

<p>The final part of the GPU that handles the intricacies of generating a video signal, sets the resolution, and holds a color lookup table for the various modes.</p>

<p>I haven’t looked into this part as much, so expect more information in an update on this part or in future parts of this series. It’s not really super critical to emulate anyway, outside of the <a href="#clocks">clock control portion</a>, as the actual analog video generation part mostly does not apply to emulation.</p>

<hr />

<h2 id="next-part">Next part</h2>

<p>The next part will dive into how NVIDIA’s drivers work and how they make this ridiculously complicated mess of an architecture transform itself into a GPU that allows you to run games you may actually want to play. Stay tuned!</p>

<hr />
<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:matrox" role="doc-endnote">
      <p>Only Matrox is both still around and still in the graphics space, after exiting the consumer market in 2003 and ceasing to design graphics cards entirely from 2014 until their recent comeback with Intel Arc-based products. Cirrus Logic is still around as an audio chip designer, stemming from their acquisition of Crystal in 1991. <a href="#fnref:matrox" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:contract" role="doc-endnote">
      <p>Source: <a href="//web.archive.org/web/20240722140726/https://contracts.onecle.com/nvidia/sgs.collab.1993.11.10.shtml">Strategic Collaboration Agreement between NVIDIA and SGS-Thomson</a>, originally covering NV1 but later revised to include NV3, apparently part of a filing with the US Securities and Exchange Commission. <a href="#fnref:contract" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:metal" role="doc-endnote">
      <p>S3’s later proprietary API for the Savage family, not to be confused with Apple’s Metal from many years later. <a href="#fnref:metal" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:sgi" role="doc-endnote">
      <p>By 1997, SGI had over 15 years of experience in developing graphics hardware, while also suffering from rampant mismanagement and experiencing the start of what would later prove to be their terminal decline. <a href="#fnref:sgi" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:edge" role="doc-endnote">
      <p>In the edge interpolation process, a triangle is converted into “spans” of horizontal lines, and the positions of nearby vertexes are used to determine the span’s start and end positions. <a href="#fnref:edge" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:span" role="doc-endnote">
      <p>To simplify a complex topic, in a GPU of this era, span interpolation generally involves Z-buffering (also known as depth buffering), sorting polygons back to front, and color buffering, storing the color of each pixel sent to the screen in a buffer which allows for blending and alpha transparency. Some GPUs do not implement a Z-buffer and delegate polygon sorting to software instead; examples include the NV1, original ATI Rage and the PlayStation 1’s Geometry Transformation Engine. <a href="#fnref:span" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:dkirk" role="doc-endnote">
      <p>David Kirk is perhaps notable as a “Special Thanks” credit on <em>Gex</em> and the producer of the truly unparalleled <em>3D Baseball</em> on Sega Saturn during his time at Crystal Dynamics. <a href="#fnref:dkirk" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:revenue" role="doc-endnote">
      <p>NVIDIA’s revenue in the first nine months of 1997 was only $5.5 million, but skyrocketed up to $23.5 million in the last three months, corresponding to the first three months of the RIVA 128’s availability, owing to the numerous sales of chips to add-in board partners. <a href="#fnref:revenue" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:stb" role="doc-endnote">
      <p>While there are mentions of quality problems with early cards in a lawsuit involving STB Systems, the RIVA 128’s first OEM partner, it is not clear if the problems were on STB or NVIDIA’s end. <a href="#fnref:stb" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:mipmap" role="doc-endnote">
      <p>Mipmapping is a graphical technique involving scaling textures down as you move away from an object in order to prevent shimmering. <a href="#fnref:mipmap" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:zetabuf" role="doc-endnote">
      <p>A zeta buffer is NVIDIA parlance for a combined Z-buffer (a buffer within the framebuffer for sorting polygons based on their distance from the camera) and stencil buffer (a buffer for discarding parts of an image). In this case, a 16-bit Z-buffer and 8-bit stencil buffer are interleaved. This evolved to a “super zeta buffer” on later NVIDIA GPUs. <a href="#fnref:zetabuf" class="reversefootnote" role="doc-backlink">&#8617;</a> <a href="#fnref:zetabuf:1" class="reversefootnote" role="doc-backlink">&#8617;<sup>2</sup></a></p>
    </li>
    <li id="fn:nt" role="doc-endnote">
      <p>NVIDIA have successfully deployed this approach on simpler projects, such as early versions of their Windows NT miniport drivers, before the full Resource Manager was able to be ported. <a href="#fnref:nt" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:htdriver" role="doc-endnote">
      <p>Object names below 4096 are reserved on NVIDIA’s drivers, which also have the duty to prevent the hash table area from getting full with only basic error handling from the hardware itself. <a href="#fnref:htdriver" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name>starfrost013</name></author><summary type="html"><![CDATA[An exploration of efforts to create a functional emulation of NVIDIA GPUs.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://86box.net/assets/images/riva128/p1/hero.png" /><media:content medium="image" url="http://86box.net/assets/images/riva128/p1/hero.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">86Box v4.2.1</title><link href="http://86box.net/2024/09/01/86box-v4-2-1.html" rel="alternate" type="text/html" title="86Box v4.2.1" /><published>2024-09-01T00:00:00+00:00</published><updated>2024-09-01T00:00:00+00:00</updated><id>http://86box.net/2024/09/01/86box-v4-2-1</id><content type="html" xml:base="http://86box.net/2024/09/01/86box-v4-2-1.html"><![CDATA[<figure class="image">
    <img src="/assets/images/v4.2.1/hero.png" class="heading" />
</figure>

<p>This is the September 2024 update to 86Box, bringing in the results of a month-long bugfix marathon started right after <a href="/2024/07/26/86box-v4-2.html">the original v4.2 release</a>.</p>

<p>The removal of 32-bit builds and the release of a new Patreon feature preview, both outlined in the v4.2 post, are still on track for the next full release.</p>

<hr />

<h2 id="important-notes">Important notes</h2>

<h3 id="we-need-help">We need help!</h3>

<p>While this release has many bugfixes, we could have done so much more if not for our <strong>limited resources</strong>. Our development team consists entirely of volunteers, many with full-time jobs, who have poured countless hours of work and even out-of-pocket money to help make 86Box the best retro PC emulator out there. While donations through <a href="//www.patreon.com/86box">Patreon</a> and <a href="//paypal.me/86Box">PayPal</a> are always appreciated, <strong>the project also needs help in other ways</strong>.</p>

<h4 id="code-contributions">Code contributions</h4>

<p>We are lacking contributors in various areas of expertise, including but not limited to:</p>

<ul>
  <li><strong>Linux host interfacing</strong>, for fixing mouse input, keyboard shortcuts and other recurring issues that our Linux users face.</li>
  <li><strong>Qt on C++</strong>, to address our user interface code’s many loose ends from being modeled after the old Win32 interface.</li>
  <li><strong>Dynamic recompilers</strong>, to help close the performance gap between our emulation and full virtualization, analyzing potential optimizations on known pain points such as the complex and well-utilized x86 MMU.</li>
  <li><strong>ARM assembly</strong>, for diagnosing a dynamic recompiler issue with MMX acceleration that has stumped us, and potentially bringing the ARM recompiler to parity with our <a href="/2022/01/07/pcem-migration-guide.html#the-new-recompiler">tried-and-true x86 one</a>.</li>
</ul>

<p>Our <a href="//github.com/86Box/86Box">GitHub</a> and <a href="//discord.gg/v5fCgFw">Discord</a> are always open to pull requests and code contribution discussions, respectively; we will follow development and provide constructive feedback if needed. The <a href="//86box.readthedocs.io/en/latest/dev/api/index.html">codebase documentation</a> is currently lacking in details about the emulator’s inner workings, but this is something we are looking into correcting in the future.</p>

<h4 id="testing">Testing</h4>

<p>In our mission to cover almost two decades’ worth of the very diverse PC ecosystem, 86Box ends up emulating a <strong>large quantity of hardware</strong> which only piles up over time. We admit to having <strong>lost our way</strong> in the past when it comes to adding new hardware components; from the many machines added in the last few releases (just for the novelty of their unique platform-BIOS combinations) to the Matrox video cards, a lot of new stuff did not work properly at first and had to be bugfixed later, not to mention all the existing components that have remained broken for several releases because <strong>no one noticed</strong>.</p>

<p>Even if you’re not a programmer, you can help us with <strong>testing this sheer mass of hardware</strong>, observing any issues with drivers, applications, or even different behavior from the real thing if you happen to have it. With how open and unpredictable the PC platform can be, <strong>writing emulation is only half the battle</strong>, and <strong>testing is key</strong> to make sure the next user doesn’t get a nasty surprise when building their emulated system; after all, the beauty of 86Box is the ability to go absolutely wild with hardware configurations (want to see how much a Voodoo 3 gets bottlenecked by a Pentium 1?) without having to procure real components, which are often getting too old and expensive to be practical to use.</p>

<h3 id="rom-set-update">ROM set update</h3>

<p>A minor change was made to the ROM set. Users of the <strong>Diamond Stealth 3D 4000</strong> video card based on the S3 ViRGE/GX2 chip should update the ROM set, as a newer video BIOS version was located. If this update is not present, the card will <strong>disappear from emulated machines</strong> and the video card selector until the ROM set is updated.</p>

<p>Updating the ROM set will also change the <strong>Phoenix XT clone</strong> machine to a newer BIOS revision which was also located.</p>

<hr />

<h2 id="changelog">Changelog</h2>

<h3 id="emulator">Emulator</h3>

<ul>
  <li>Fixed keyboard shortcuts for full screen mode when the <strong>Keyboard requires capture</strong> option is set</li>
</ul>

<h3 id="user-interface">User interface</h3>

<ul>
  <li>Added a <strong>list of recently used images</strong> to all removable media types (not just floppy and CD-ROM)</li>
</ul>

<h3 id="machines">Machines</h3>

<ul>
  <li>Added video overscan delta option to the <strong>IBM PCjr</strong> (fixing the game on the screenshot above)</li>
  <li>Fixed some copy-protected games on the <strong>IBM PCjr</strong></li>
  <li>Fixed CMOS password and other boot issues on the <strong>Radisys EPC-2102</strong></li>
  <li>Fixed PCI device IRQs on the <strong>A-Trend ATC6310BXII</strong></li>
  <li>Fixed on-board S3 ViRGE video on the <strong>Intel AP440FX</strong></li>
  <li>Fixed incorrect CPU speed reporting on the <strong>HP Vectra VL 5 Series 4</strong></li>
  <li>Fixed missing CPU selections on the <strong>DataExpert SX495</strong></li>
  <li>Fixed <strong>Genoa Unknown 486</strong> extended memory support</li>
  <li>Fixed <strong>Acer A1G</strong> hanging during POST with some CPUs</li>
  <li>Fixed <strong>Olivetti M19</strong> display corruption in high resolution mode</li>
  <li>Fixed <strong>IBM PCjr / Tandy 1000 family</strong> display corruption with some games</li>
  <li>Fixed <strong>Tandy 1000</strong> display corruption on soft reboot</li>
  <li>Fixed <strong>IBM PCjr</strong> not rebooting on cartridge removal</li>
  <li>Fixed <strong>IBM PCjr</strong> video type selection not working</li>
  <li>Changed minimum RAM on the <strong>Tandy 1000</strong> to 384 KB and on the <strong>Tandy 1000 HX</strong> to 256 KB</li>
  <li>Changed <strong>Phoenix XT clone</strong> BIOS revision to a newer one</li>
  <li>Renamed <strong>Tandy 1000</strong> to the <strong>SX</strong> variant to better reflect its hardware and firmware</li>
</ul>

<h3 id="hardware">Hardware</h3>

<ul>
  <li><strong>Core</strong>
    <ul>
      <li>Fixed <strong>8087 FPU</strong> inaccuracy causing diagnostic test failures</li>
    </ul>
  </li>
  <li><strong>Display</strong>
    <ul>
      <li>Improved emulation performance of <strong>ATI Mach64</strong> and <strong>S3 ViRGE</strong> cards</li>
      <li>Added <strong>miroCRYSTAL 3D</strong> (S3 ViRGE) PCI video card</li>
      <li>Fixed <strong>hard reset crashes</strong> with more video cards</li>
      <li>Fixed <strong>Voodoo Banshee/3</strong> crashing the emulator with <code class="language-plaintext highlighter-rouge">banshee_do_screen_to_screen_blt: unknown srcFormat</code> message on more full motion video applications</li>
      <li>Fixed rendering issues with some drivers on <strong>S3 ViRGE</strong> and <strong>Trident TGUI</strong> cards</li>
      <li>Fixed <strong>Diamond Stealth VRAM</strong> (S3 86C911) slowing emulation performance</li>
      <li>Fixed hangs or display corruption with <strong>S3</strong> cards on soft reboot</li>
      <li>Fixed <strong>Compaq EGA</strong> display corruption in high resolution mode</li>
      <li>Fixed <strong>Compaq EGA</strong> compatibility with non-Compaq machines</li>
      <li>Fixed <strong>VGA color accuracy</strong> issue with some DOS games</li>
      <li>Changed <strong>Diamond Stealth 3D 4000</strong> (S3 ViRGE/GX2) video BIOS to a newer version</li>
    </ul>
  </li>
  <li><strong>Input</strong>
    <ul>
      <li>Added more model options to the <strong>3M MicroTouch</strong></li>
      <li>Added crosshair cursor hiding option to the <strong>3M MicroTouch</strong></li>
      <li>Fixed <strong>3M MicroTouch</strong> not working with some drivers</li>
      <li>Fixed <strong>keyboard controller</strong> inaccuracy causing keyboard lock-ups with some DOS applications</li>
      <li>Fixed <strong>serial mouse</strong> crashing the emulator if attached to a non-existent serial port</li>
    </ul>
  </li>
  <li><strong>Sound</strong>
    <ul>
      <li>Fixed <strong>Aztech Sound Galaxy Pro 16 AB</strong> not working with some drivers</li>
      <li>Fixed <strong>IBM PCjr / Tandy 1000 / TNDY</strong> sound issues with some games</li>
      <li>Fixed <strong>MPU-401</strong> playback issues with some games, particularly in intelligent mode</li>
      <li>Renamed <strong>SB MIDI</strong> input option on Sound Blaster cards to <strong>DSP MIDI</strong></li>
    </ul>
  </li>
  <li><strong>Network</strong>
    <ul>
      <li>Fixed <strong>modem</strong> crashing the emulator with <code class="language-plaintext highlighter-rouge">Assertion failed!</code> message under heavy Telnet traffic</li>
      <li>Fixed <strong>modem</strong> autodetection taking too long on Windows 9x</li>
      <li>Fixed <strong>modem SLIP</strong> not being reachable on some Windows configurations</li>
      <li>Fixed loss of received packets on <strong>DEC</strong> and <strong>NE2000-based cards</strong></li>
      <li>Changed <strong>PLIP</strong> to require SLiRP mode like the modem</li>
    </ul>
  </li>
  <li><strong>Storage</strong>
    <ul>
      <li>Added generic <strong>AMD 53C974</strong> card based on the PCscsi controller</li>
      <li>Fixed <strong>dynamic VHD</strong> corruption with MFM/RLL controllers in specific cases</li>
      <li>Fixed hanging issues with the <strong>Pro Audio Spectrum 16</strong> SCSI controller</li>
      <li>Fixed <strong>Tekram DC-390</strong> not working with some drivers</li>
      <li>Fixed <strong>WD MFM/RLL</strong> controllers not booting from hard disk when set to IRQ 2</li>
    </ul>
  </li>
</ul>]]></content><author><name>richardg867</name></author><summary type="html"><![CDATA[Release for September 2024.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://86box.net/assets/images/v4.2.1/hero.png" /><media:content medium="image" url="http://86box.net/assets/images/v4.2.1/hero.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">86Box v4.2</title><link href="http://86box.net/2024/07/26/86box-v4-2.html" rel="alternate" type="text/html" title="86Box v4.2" /><published>2024-07-26T00:00:00+00:00</published><updated>2024-07-26T00:00:00+00:00</updated><id>http://86box.net/2024/07/26/86box-v4-2</id><content type="html" xml:base="http://86box.net/2024/07/26/86box-v4-2.html"><![CDATA[<figure class="image">
    <img src="/assets/images/v4.2/hero.png" class="heading" />
</figure>

<p>This is the July 2024 update to 86Box, bringing new features in the multimedia front, new machines and many bugfixes.</p>

<p>The work-in-progress build currently available to our <a href="//www.patreon.com/86box"><strong>Patreon supporters</strong></a> will be updated soon. We have a <strong>new Patreon preview</strong> in our roadmap for the coming months, replacing the Local Switch which will receive a public release, so stay tuned.</p>

<h3 id="32-bit-deprecation-notice">32-bit deprecation notice</h3>

<p>v4.2 is the final release of 86Box for which <strong>32-bit builds</strong> will be provided, for 32-bit x86 on Windows and Linux as well as ARM32 on Linux. By removing these legacy options, we can better focus on maintaining the dynamic recompiler and other architecture-specific portions of our code for the architectures that matter, which are currently <strong>x64 and ARM64</strong>.</p>

<p>We believe that any host hardware old enough to be incapable of running 64-bit operating systems will not provide a satisfactory emulation experience. Should you have such hardware, the ability to <a href="//86box.readthedocs.io/en/latest/dev/buildguide.html"><strong>compile 86Box from source</strong></a> for unsupported architectures is not going anywhere, but we cannot guarantee that the dynamic recompiler will remain functional on them.</p>

<hr />

<h2 id="main-features">Main features</h2>

<h3 id="sound-ess-pas-sb-pci">Sound: ESS, PAS, SB PCI</h3>

<p>Many have requested that we emulate sound cards from <strong>ESS</strong>; more specifically, their ISA Sound Blaster compatible chips that were very popular throughout the 1990s. This release brings two ESS cards, the <strong>AudioDrive ES688</strong> and <strong>ES1688</strong>. The ES1688 in particular features <strong>ESFM</strong>, a set of proprietary extensions adding more capabilities to the Yamaha OPL3 synthesizer, supported by some games and for Windows MIDI playback. ESFM emulation uses the <a href="//github.com/Kagamiin/ESFMu"><strong>ESFMu library</strong></a> developed by <a href="//github.com/Kagamiin">Kagamiin</a>, who also did the initial work for adding ESS cards on our end; many retro community members have also contributed to the ESFM reverse engineering effort.</p>

<p>The <a href="//en.wikipedia.org/wiki/Media_Vision_Pro_AudioSpectrum"><strong>Media Vision Pro AudioSpectrum</strong></a> family now joins 86Box as well, with the <strong>Plus</strong>, <strong>16</strong> and <strong>16D</strong>. These cards were praised at the time for their high audio quality (not that it matters in an emulated environment), and while they were mostly Sound Blaster compatible, many games and operating systems had <strong>native drivers</strong> to take full advantage of them. The Plus and 16’s integrated <strong>SCSI controller</strong> is also emulated, taking the first available channel after any integrated SCSI controller that the selected machine might have, but before any configured SCSI cards.</p>

<p>The <strong>Ensoniq AudioPCI</strong> emulation was also expanded with Sound Blaster PCI cards based on the <strong>ES1373</strong> and <strong>CT5880</strong> chips. These were far more common than the previous ES1371 chip, which is better known through VMware’s emulation than real cards. The newer chips are functionally equivalent and allow you to use later Creative drivers for Windows without running into <a href="//messaroundery.net/2023/09/19/ensoniq-es1371-driver-bug" title="Ensoniq AudioPCI ES1371 and the driver bug nobody found">issues stemming from an incompatibility with the ES1371</a>; though be careful with older ES1371-specific drivers, which may recognize the ES1373 but end up in crashes and other misbehavior.</p>

<p><strong>Small but important note:</strong> similarly to the <a href="/2024/03/20/86box-v4-1-1.html#rom-set-update">AWE64 in v4.1.1</a>, users of the <strong>Sound Blaster 16 PnP</strong> and <strong>Crystal CS4236B</strong> should update the ROM set, as accurate Plug and Play ROMs were located. If this update is not present, these cards will <strong>disappear from emulated machines</strong> and the sound card selector until the ROM set is updated.</p>

<h3 id="modem">Modem</h3>

<p>A <strong>serial modem</strong> is now available as a network card option. This standard Hayes-compliant modem has three modes of operation: <strong>dial-up access through SLIP</strong> by dialing number <code class="language-plaintext highlighter-rouge">0.0.0.0</code>, a <strong>Telnet client</strong> by dialing the address (or <code class="language-plaintext highlighter-rouge">address:port</code>) of a Telnet server, and a <strong>dial-in server</strong> for receiving calls from Telnet clients or even another 86Box instance. Additionally, a <strong>phonebook</strong> feature allows for loading a text file with a list of numbers and their respective dialing targets.</p>

<p>As with any hardware of this era, there are many potential gotchas to account for when configuring the modem, all described in the <a href="//86box.readthedocs.io/en/v4.2/hardware/network.html#modem">documentation</a>.</p>

<hr />

<h2 id="changelog">Changelog</h2>

<h3 id="emulator">Emulator</h3>

<ul>
  <li>Added prompt when starting the machine from a new location (similar to VMware) for regenerating MAC addresses</li>
  <li>Added build number and host CPU string information to the configuration file to aid troubleshooting</li>
</ul>

<h3 id="user-interface">User interface</h3>

<ul>
  <li>Added approximate <strong>year indicators</strong> to the list of machine types</li>
  <li>Added interlocks to <strong>Voodoo cards</strong> and <strong>storage device channels</strong> to reduce configuration mistakes</li>
  <li>Added performance impact warning to the <strong>Softfloat FPU</strong> option</li>
  <li>Added new icons to the <strong>CD-ROM menu</strong></li>
  <li>Added translation: <span class="emoji">🇻🇳</span> <strong>Vietnamese</strong> by <a href="//github.com/Barnacl437">Barnacl437</a></li>
  <li>Fixed menus not updating after <strong>ejecting a CD-ROM</strong></li>
  <li>Updated translations: <strong>Chinese (Simplified)</strong>, <strong>Chinese (Taiwan)</strong></li>
</ul>

<h3 id="machines">Machines</h3>

<ul>
  <li>Re-added <strong>Compaq Deskpro 386</strong> machine</li>
  <li>Added <strong>Pravetz 16S / CPU12 Plus</strong> Bulgarian XT clone</li>
  <li>Added <strong>Senor Science Co. SCAT-286-003</strong> and <strong>Wells American A*Star</strong> 286 machines</li>
  <li>Added <strong>Acer 100T</strong> 386SX machine</li>
  <li>Added <strong>DataExpert 386WB</strong> and <strong>Tandy 4000</strong> 386DX machines</li>
  <li>Added <strong>Genoa Unknown 486</strong> and <strong>Alaris COUGAR 486BL</strong> 486 machines</li>
  <li>Added <strong>IBM PC 140 (type 6260)</strong> Socket 7 machine</li>
  <li>Added missing I/O chip to the <strong>Arche AMA-932J</strong></li>
  <li>Added on-board S3 ViRGE/DX video and Crystal CS4236B sound to the <strong>Intel AP440FX</strong></li>
  <li>Added on-board Chips &amp; Technologies B69000 video to the <strong>ADLink NuPRO-592</strong></li>
  <li>Added more CPU speeds to the <strong>Tandy 1000 HX</strong></li>
  <li>Fixed <strong>Pravetz 16 / IMKO-4</strong>, <strong>AMI Super Voyager PCI</strong>, <strong>Packard Bell PB450</strong> and <strong>Dell Dimension XPS Pxxx</strong> machines not being selectable on Linux and other case-sensitive systems</li>
  <li>Fixed <strong>DEC Venturis 4xx</strong> and <strong>Rise R534F</strong> hanging during POST</li>
  <li>Fixed <strong>Micronics M4Li</strong> rebooting during POST</li>
  <li>Fixed <strong>HP Vectra VL 5 Series 4</strong> not booting</li>
  <li>Fixed <strong>Packard Bell PB450</strong> password jumper error</li>
  <li>Fixed <strong>FIC PT-2000</strong> hanging after reboot</li>
  <li>Fixed floppy drives not working on <strong>IBM PS/1</strong> machines</li>
  <li>Fixed MFM/RLL hard disks not working on the <strong>Arche AMA-2010</strong></li>
  <li>Fixed emulator crash while booting the <strong>Compaq Presario 2240</strong></li>
  <li>Fixed emulator crash with more than 16 MB RAM on the <strong>Amstrad MegaPC</strong></li>
  <li>Fixed keyboard not working with some operating systems on the <strong>ASUS P/I-P5MP3</strong></li>
  <li>Fixed hard disk controller error on the <strong>Siemens Nixdorf D824</strong></li>
  <li>Fixed BIOS settings not saving on the <strong>Radisys EPC-2102</strong></li>
  <li>Fixed incorrect on-board video detection on the <strong>IBM PC 330</strong></li>
  <li>Fixed AGP slot incorrectly available (and broken) on the <strong>NEC Mate NX MA30D/23D</strong></li>
  <li>Fixed Windows hanging during startup on the <strong>FIC VA-502</strong></li>
  <li>Fixed <strong>IBM PCjr</strong> display glitches in 2-bit mode or with overscan enabled</li>
  <li>Fixed <strong>Acer 100T</strong>, <strong>Commodore SL386SX-25</strong>, <strong>HP Vectra 486VL</strong> and <strong>Tyan Trinity 371</strong> on-board device detection issues</li>
  <li>Fixed <strong>AMI Apollo</strong> not starting up with the minimum 8 MB RAM</li>
  <li>Fixed <strong>Olystar LIL1429</strong> filed on the wrong category (now Socket 2)</li>
  <li>Fixed <strong>Acer V10</strong> and <strong>SiS VL-BUS 471 REV. A1</strong> filed on the wrong category (now Socket 3)</li>
  <li>Fixed <strong>Acer M3A</strong>, <strong>Dell Hannibal+</strong> and <strong>ECS P5VX-B</strong> filed on the wrong category (now Socket 7 Dual Voltage)</li>
  <li>Renamed <strong>DTK 386SX clone</strong> to <strong>DTK PM-1630C</strong></li>
  <li>Renamed <strong>AMA-932J</strong> to <strong>Arche AMA-932J</strong></li>
  <li>Changed maximum RAM on the <strong>IBM XT Model 286 and AT</strong> to reflect the base boards’ 640 and 512 KB limits respectively (use ISA memory expansion cards to go beyond that)</li>
  <li>Changed <strong>DataExpert SX495</strong> CPU selection to reflect compatible models</li>
  <li>Changed <strong>Olivetti M240</strong> BIOS revision to a newer one</li>
</ul>

<h3 id="hardware">Hardware</h3>

<ul>
  <li><strong>Core</strong>
    <ul>
      <li>Added Softfloat support to the <strong>8087 FPU</strong></li>
      <li>Upgraded <strong>Softfloat FPU</strong> to Release 3e</li>
      <li>Fixed hard reset crash on <strong>SiS Socket 7</strong> machines</li>
      <li>Fixed emulator crash with <strong>RapidCAD</strong> CPUs on ARM hosts</li>
      <li>Fixed issues with Lotus 1-2-3 and other applications due to missing <strong>FBLD</strong> FPU instruction</li>
      <li>Fixed incorrect <strong>LOCK</strong> instruction behavior on 286 CPUs</li>
      <li>Fixed CPU inaccuracies breaking <strong>Microsoft OS/2 2.0 betas</strong></li>
      <li>Fixed <strong>OPTi chipset</strong> detection by some tools</li>
    </ul>
  </li>
  <li><strong>Display</strong>
    <ul>
      <li>Added <strong>ATI VGA Wonder 18800</strong> ISA video card</li>
      <li>Added <strong>Bochs SVGA</strong> PCI video card</li>
      <li>Added <strong>Diamond Stealth64 Video VRAM</strong> (S3 Vision968) VLB and PCI video card</li>
      <li>Removed <strong>Matrox Productiva G100</strong> video card due to numerous issues</li>
      <li>Fixed <strong>VideoMagic Tseng ET4000</strong> cards not being selectable on Linux and other case-sensitive systems</li>
      <li>Fixed emulator crash triggered by mouse movement on the <strong>Voodoo Banshee/3</strong></li>
      <li>Fixed random emulator crashes with <strong>Matrox cards</strong></li>
      <li>Fixed hard reset crashes with <strong>S3 cards</strong> and the <strong>Voodoo Banshee/3</strong></li>
      <li>Fixed Windows 3.x hanging and resolution switching issues with <strong>Matrox cards</strong></li>
      <li>Fixed transparency rendering issues with <strong>Matrox cards</strong></li>
      <li>Fixed overscan with <strong>Voodoo and Voodoo 2</strong> cards</li>
      <li>Fixed some <strong>XGA</strong>, <strong>ATI Mach8</strong>, <strong>Mach32</strong> and <strong>Mach64</strong> rendering glitches on Windows</li>
      <li>Fixed some resolution-specific rendering issues with <strong>S3 Vision</strong> cards on Windows</li>
      <li>Fixed some 3D-related issues with <strong>S3 ViRGE</strong> cards</li>
      <li>Fixed <strong>Chips &amp; Technologies B69000</strong> not working with some Windows drivers</li>
      <li>Fixed <strong>ATI Mach32</strong> and <strong>Mach64</strong> not working with OpenStep drivers</li>
      <li>Changed memory size selection on <strong>Tseng ET3000</strong>, <strong>ET4000</strong>, <strong>3dfx Velocity 100</strong> and <strong>Voodoo3 1000</strong> cards to address inaccuracies</li>
    </ul>
  </li>
  <li><strong>Input</strong>
    <ul>
      <li>Added <strong>3M MicroTouch</strong> serial touchscreen</li>
      <li>Fixed <strong>Microsoft SideWinder Pad</strong> detection issues on some setups</li>
      <li>Fixed emulator crash when pressing <strong>multimedia keys</strong> on Windows hosts</li>
    </ul>
  </li>
  <li><strong>Sound</strong>
    <ul>
      <li>Added <strong>ESS AudioDrive ES688</strong> and <strong>ES1688</strong> ISA sound cards</li>
      <li>Added <strong>SoundPiper 16</strong>, <strong>32</strong> and <strong>ChipChat 16</strong> ESS-based MCA sound cards</li>
      <li>Added <strong>Pro Audio Spectrum Plus</strong>, <strong>16</strong> and <strong>16D</strong> ISA sound cards</li>
      <li>Added <strong>Sound Blaster PCI ES1373</strong> and <strong>CT5880</strong> PCI sound cards</li>
      <li>Improved <strong>Sound Blaster AWE</strong> EMU8000 synth sound quality</li>
      <li>Fixed <strong>Roland MT-32 (New)</strong> MIDI emulation not being selectable</li>
      <li>Fixed <strong>Sound Blaster Classic</strong> and <strong>Pro</strong> detection by some DOS games</li>
      <li>Fixed <strong>Sound Blaster 16</strong> 8-bit DMA compatibility mode</li>
      <li>Fixed <strong>C-Media CMI8338</strong> and <strong>CMI8738</strong> hanging during initialization with some DOS drivers</li>
      <li>Fixed <strong>Ensoniq AudioPCI</strong> not outputting audio after resuming from sleep mode</li>
      <li>Fixed <strong>Sound Blaster 16 PnP</strong> and <strong>Crystal CS4236B</strong> configuration data not matching real cards</li>
    </ul>
  </li>
  <li><strong>Network</strong>
    <ul>
      <li>Added SLIP and Telnet <strong>serial modem emulation</strong> as a network card option</li>
      <li>Added partial <strong>MAC address editing</strong> through the <strong>Configure</strong> window</li>
      <li>Fixed detection of the <strong>DEC DE-500A</strong> card by some operating systems</li>
      <li>Fixed emulator crash during Windows installation with <strong>NE2000-based cards</strong></li>
      <li>Fixed loss of <strong>multicast packets</strong> (used by AppleTalk and other protocols) in PCap mode</li>
      <li>Fixed PCap mode not detecting <strong>Npcap</strong> without WinPcap compatibility mode on Windows hosts</li>
      <li>Fixed <strong>VDE</strong> permission issue when running the switch as an unprivileged user</li>
    </ul>
  </li>
  <li><strong>Ports</strong>
    <ul>
      <li>Fixed <strong>ESC/P printer</strong> cutting a line of text near the bottom of a page</li>
    </ul>
  </li>
  <li><strong>Storage</strong>
    <ul>
      <li>Added <strong>CD-ROM passthrough</strong> for real and virtual drives on Windows hosts</li>
      <li>Added <strong>Trantor T228</strong> MCA SCSI card</li>
      <li>Added <strong>PCjs</strong> floppy image support for the current v2 format (replacing the previous v1)</li>
      <li>Added <strong>Teledisk 1.x compressed</strong> floppy image support</li>
      <li>Added support for tracks with compressed/encapsulated audio or big endian data on <strong>cue/bin CD-ROM images</strong></li>
      <li>Added writable configuration support to the <strong>Monster FDC</strong> card</li>
      <li>Added <strong>3.5” 2.88M dual RPM</strong> floppy drive option</li>
      <li>Increased SCSI bus speed on <strong>NCR 53C860</strong> and <strong>53C875</strong> cards</li>
      <li>Fixed emulator crash when loading <strong>ZIP disk images</strong></li>
      <li>Fixed emulator crash when accessing <strong>DVD images</strong> with some applications</li>
      <li>Fixed <strong>CD folder mounting</strong> misbehaving on Windows hosts if a file larger than 2 GB is present</li>
      <li>Fixed <strong>dynamic VHD images</strong> growing uncontrollably during a low level format</li>
      <li>Fixed read errors with some <strong>HxC MFM</strong> floppy images</li>
      <li>Fixed IDE hard disk detection errors on <strong>OpenStep</strong></li>
      <li>Fixed CD-ROM read errors with <strong>Mode 2 ISO images</strong></li>
      <li>Fixed <strong>ALi IDE driver</strong> for Windows 95 on later chipsets</li>
      <li>Fixed I/O timeout issues with some <strong>Trantor T130B</strong> drivers</li>
      <li>Fixed small inaccuracy with <strong>CD-ROM sector headers</strong></li>
    </ul>
  </li>
  <li><strong>Other</strong>
    <ul>
      <li>Added <strong>BocaRAM/XT</strong> and <strong>Lo-tech EMS Board</strong> ISA memory expansion cards</li>
      <li>Added <strong>IBM XT and AT Memory Expansion Option</strong> ISA memory expansion cards</li>
      <li>Added <a href="//www.os2museum.com/wp/unlocking-netware-2-0a/"><strong>Novell NetWare 2.x Key Card</strong></a> device</li>
      <li>Increased maximum supported memory size to 3 MB on the <strong>Everex EV-159</strong> ISA memory expansion card</li>
      <li>Fixed page frame address selection on the <strong>Everex EV-159</strong> ISA memory expansion card</li>
      <li>Fixed default configurations for some <strong>ISA memory expansion cards</strong></li>
    </ul>
  </li>
</ul>]]></content><author><name>richardg867</name></author><summary type="html"><![CDATA[Release for July 2024.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://86box.net/assets/images/v4.2/hero.png" /><media:content medium="image" url="http://86box.net/assets/images/v4.2/hero.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">86Box v4.1.1</title><link href="http://86box.net/2024/03/20/86box-v4-1-1.html" rel="alternate" type="text/html" title="86Box v4.1.1" /><published>2024-03-20T00:00:00+00:00</published><updated>2024-03-20T00:00:00+00:00</updated><id>http://86box.net/2024/03/20/86box-v4-1-1</id><content type="html" xml:base="http://86box.net/2024/03/20/86box-v4-1-1.html"><![CDATA[<figure class="image">
    <img src="/assets/images/v4.1.1/hero.png" class="heading" />
</figure>

<p>This is the March 2024 update to 86Box, bringing bugfixes over <a href="/2024/02/21/86box-v4-1.html">the original v4.1 release</a> and some new hardware.</p>

<p>As always, the work-in-progress build currently available to our <a href="//www.patreon.com/86box"><strong>Patreon supporters</strong></a> will be updated accordingly.</p>

<hr />

<h2 id="important-notes">Important notes</h2>

<h3 id="rom-set-update">ROM set update</h3>

<p>A minor change was made to the ROM set. Users of the base <strong>Sound Blaster AWE64</strong> (not the Value or Gold) should update the ROM set, as an accurate CT4380 Plug and Play ROM was located. If this update is not present, the card will <strong>disappear from emulated machines</strong> and the sound card selector until the ROM set is updated.</p>

<p>The newly-added machines also require an updated ROM set, otherwise they will not be listed in the machine selector.</p>

<hr />

<h2 id="changelog">Changelog</h2>

<h3 id="user-interface">User interface</h3>

<ul>
  <li>Fixed <strong>exit confirmation</strong> incorrectly disabled by ACPI shutdowns</li>
  <li>Fixed <strong>missing translations</strong> on some error messages related to hard disk images</li>
  <li>Updated translations: <strong>Chinese (Simplified)</strong>, <strong>Chinese (Taiwan)</strong>, <strong>Japanese</strong>, <strong>Korean</strong></li>
</ul>

<h3 id="machines">Machines</h3>

<ul>
  <li>Added <strong>IBM Aptiva 510/710/Vision</strong> Socket 3 machine</li>
  <li>Added <strong>NEC Mate NX MA23C</strong> Socket 7 machine</li>
  <li>Added <strong>PC Chips M747</strong> Slot 1 machine</li>
  <li>Added AGP support to the <strong>MSI MS-5172</strong></li>
  <li>Fixed BIOS error caused by serial passthrough on the <strong>IBM PS/2 Model 70</strong></li>
  <li>Fixed <strong>Gigabyte GA-5SG100</strong> filed on the wrong category (now Super Socket 7)</li>
  <li>Changed maximum CPU speed on the <strong>Hyundai SUPER-16T</strong> to 8 MHz</li>
</ul>

<h3 id="hardware">Hardware</h3>

<ul>
  <li><strong>Core</strong>
    <ul>
      <li>Fixed operating system crashes related to the <strong>LOCK</strong> instruction on 386 CPUs only</li>
    </ul>
  </li>
  <li><strong>Display</strong>
    <ul>
      <li>Added <strong>Trident TVGA 8900D-R</strong> ISA video card (faster 8900D)</li>
      <li>Added more BIOS options to the <strong>Tseng ET4000AX</strong> ISA video card</li>
      <li>Fixed <strong>Voodoo</strong> 3D glitches in several games, especially on 64-bit builds</li>
      <li>Fixed 1600x1200 resolution availability through <strong>DDC data</strong> on older operating systems</li>
      <li>Fixed <strong>Tseng ET4000AX</strong> and <strong>ET4000/W32</strong> rendering issues with specific resolutions</li>
      <li>Fixed several rendering issues on <strong>S3 86C801</strong> and <strong>86C805</strong> cards</li>
      <li>Fixed Linux cursor issues on <strong>Matrox</strong> cards</li>
      <li>Fixed specific video playback acceleration glitches on <strong>S3 ViRGE</strong> cards</li>
      <li>Changed maximum video memory on the <strong>STB PowerGraph 64 Video</strong> to 2 MB to match real cards</li>
    </ul>
  </li>
  <li><strong>Sound</strong>
    <ul>
      <li>Improved <strong>OPL2</strong> and <strong>OPL3</strong> sound quality</li>
      <li>Fixed base <strong>Sound Blaster AWE64</strong> incorrectly identifying as a Value</li>
    </ul>
  </li>
  <li><strong>Storage</strong>
    <ul>
      <li>Added <strong>McIDE</strong> IDE disk controller for MCA machines</li>
      <li>Added <strong>Vision Systems LBA Enhancer</strong> add-on ROM</li>
      <li>Added German and newer English BIOS options to the <strong>Adaptec AHA-154xCP</strong> SCSI controller</li>
      <li>Fixed instability issues with <strong>ESDI</strong> disk controllers, particularly MCA ones</li>
      <li>Fixed floppy drive controller inaccuracy crashing <strong>386BSD</strong> and <strong>FlexOS 286</strong></li>
    </ul>
  </li>
  <li><strong>Other</strong>
    <ul>
      <li>Added <strong>Everex Maxi Magic EV-165A</strong> ISA memory expansion card</li>
    </ul>
  </li>
</ul>]]></content><author><name>richardg867</name></author><summary type="html"><![CDATA[Release for March 2024.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://86box.net/assets/images/v4.1.1/hero.png" /><media:content medium="image" url="http://86box.net/assets/images/v4.1.1/hero.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>