86Box v3.0
December 1, 2021 - written by richardg867It has arrived. Some have raised concerns about what the future holds for the 86Box project after it took us nearly 3 years to finish v2.00 (which is 2 years old by now), but fear not, as we continue to work on making 86Box the best emulator for PC software preservation and gaming alike. As always, you can download v3.0 from GitHub. Read on to check out what’s new in this release, because there’s a lot.
86Box v3.0 provides a total of 288 emulated machine entries, more than tripling the amount of machines compared to the previous v2.07 release. A number of newly-added machines bring unique features: obscure chipsets, gas plasma displays, multiple supported CPU types, unusual BIOSes and more.
Many of these additions were made possible through investigation and testing work by developers and community members like richardg867, tiseno100, evasive, Carlos S. M., explorerexe and others, so we would like to thank them. The BIOS identification tools developed internally for this effort will eventually be open-sourced through the 86Box GitHub organization.
Several refinements have been made to the 86Box user interface introduced in the previous v2.00 release, starting with a new look. We have a new logo, designed by OBattler and enhanced by laciba96 and Foxlet. New icons were also drawn by OBattler in the Windows 9x aesthetic, with the old icons and another set by laciba96 available through the Icon set option in the new Preferences window.
The user interface now has translations contributed by community members, also available through the Preferences window:
- 🇨🇳 Chinese (Simplified) by startmenu
- 🇭🇷 Croatian by dob205
- 🇨🇿 Czech by dhrdlicka
- 🇬🇧 English (United Kingdom) by jriwanek
- 🇫🇮 Finnish by ts-korhonen
- 🇫🇷 French by jvernet
- 🇩🇪 German by dob205
- 🇭🇺 Hungarian by laciba96
- 🇮🇹 Italian by explorerexe
- 🇯🇵 Japanese by OBattler
- 🇧🇷 Portuguese (Brazil) by altiereslima
- 🇵🇹 Portuguese (Portugal) by OBattler and DoutorHouse
- 🇷🇺 Russian by OBattler
- 🇸🇮 Slovenian by daviunic and OBattler
- 🇪🇸 Spanish (Spain) by mgtroyas
- 🇹🇷 Turkish by luennix
Inspired by other PC virtualizers, dhrdlicka introduced the Media menu, which provides an alternative way of changing the emulated machine’s removable media aside from clicking their respective status bar icons.
As the list of emulated machines grew unwieldy, OBattler split it into categories, and richardg867 reorganized the CPU list into individual families and their available speed ratings, adjusted dynamically around what the selected machine supports.
The 86Box interface no longer looks like a blurry mess on HiDPI displays thanks to driver1998 adding HiDPI support, including the latest Per-Monitor v2 mode supported by Windows 10. HiDPI scaling of the emulated machine’s display can be disabled through an option in the View menu, in case the picture is too big or (as a result of non-integer scales) too blurry on your HiDPI display; that option can also be combined with the existing scale factor options.
richardg867 and dhrdlicka upgraded the interface’s prompts and message boxes to the modern Task Dialogs introduced in Windows Vista. Welcome to 2007. These modern dialogs also bring in a new feature: you can now disable the prompts displayed when saving settings, resetting the emulated machine or quitting 86Box, by checking the Don’t show this message again box.
OBattler added a menu option to dial in a specific resolution for the emulated display area, and optionally lock it for a more immersive windowed experience.
86Box now has proper documentation, located at 86box.readthedocs.io. This new documentation provides descriptions for all settings and features the emulator provides, notes on machine-specific quirks and more advanced features, and specifications developed as part of the project such as the 86F floppy bitstream image file format.
The documentation’s source files are on a GitHub repository, so anyone can contribute to it. richardg867 wrote most pages, with some bits written by daviunic, dhrdlicka and OBattler.
As part of this release, a number of important additions and improvements were made to the emulator’s internal components. This section gets a bit technical.
Plug and Play
richardg867 built a framework for ISA Plug and Play cards, a commonly requested feature. Plug and Play is implemented on the following ISA cards:
- PnP variants of the Creative Sound Blaster 16 and AWE32 sound cards;
- The new Crystal CS4236B sound card;
- The new AMD PCnet-ISA+ and Realtek RTL8019AS network cards;
- Tertiary and quaternary IDE controllers, which now have a Plug and Play option in the IRQ box, allowing PnP to pick any available I/O port range and IRQ line.
It is worth noting to the younger crowd that ISA Plug and Play was a complex beast, hence the “Plug and Pray” nickname it eventually earned. Device resources can be assigned by both the BIOS and the operating system, and conflicts may arise (and hair-pulling may ensue) when mixing PnP and non-PnP cards without proper configuration.
Still somewhat on the subject of Plug and Play, richardg867 also added SMBus and I2C bus emulation, allowing 86Box machines to have 86Box-branded SDRAM memory modules and VGA monitors, which identify themselves through SPD and DDC respectively where applicable and supported. On top of that, ISA and SMBus hardware monitoring chips were added to motherboards containing those, always reporting fixed temperatures (fun fact: the reported 86°F value was completely accidental), voltages and fan speeds.
ACPI
Advanced Configuration and Power Interface is a standardized interface through which a PC operating system can take control of power management and device configuration duties, instead of relying on the system’s BIOS to do so. Features provided by that interface include standardized soft power off (marking the end of “It’s now safe to turn off your computer”) and sleep mode. ACPI is now a cornerstone of modern PC architecture, so much that it became a system requirement for Windows starting with Vista, or Longhorn build 5048 for the beta enthusiasts out there.
86Box now features ACPI support thanks to OBattler’s work. Soft power off and hibernation automatically close 86Box, and sleep mode pauses emulation. Having ACPI also allows for running Windows Vista and 7 as guests on newer emulated machines, as seen on the screenshot which opened this post. We really don’t recommend running these versions of Windows, as they were never really meant to run on the old hardware we work with, especially if it’s not being emulated at full speed; if you want to try anyway, use Windows 7 with Service Pack 1, and don’t expect driver support for video, sound or networking.
Keep in mind ACPI is only available on select Socket 7 and newer machines. Adding to that, early ACPI is notoriously buggy; you may have difficulties getting it to work, partially due to both Windows and Linux having lockouts which prevent ACPI from working if the machine’s BIOS was made before a specific year: 1999 for Windows starting with 98 Second Edition, or 2001 for Linux starting with kernel 2.6.
Rewrites and improvements
Several internal components were rewritten or reworked by OBattler:
- The Programmable Interval Timer (PIT) and Programmable Interrupt Controller (PIC) were rewritten to fix several outstanding bugs with older software such as Microsoft Word 1.0 for DOS and the MR BIOS. Work has also started on an AT keyboard controller rewrite to fix even more bugs in a future release.
- The memory framework was reworked to support features required by newly-added CPUs, such as SMM for SL-Enhanced 486 models, and PAE for the Pentium II. Up to 2 GB of emulated RAM can now be used where supported, or up to 3 GB on 64-bit builds of 86Box.
- The dynamic recompiler and graphics rendering system were tweaked, resulting in a slight emulation performance increase in some cases.
- Network emulation performance and stability have been improved.
v3.0 also brings in several new CPU families. It’s important to mention that most of these new CPUs raise the clock speed bar by quite a bit, and even the latest and greatest host systems struggle to emulate them, so stick to something like a Pentium 1 if you’re running speed-sensitive tasks such as games or if your PC isn’t a modern high-end one.
Intel Pentium Pro, Pentium II and Celeron
After many years of waiting (going back to the start of the 86Box project!), emulation of Intel’s P6 CPU family has finally arrived. This brings the Pentium Pro, Pentium II “Klamath”/”Deschutes” and Celeron “Mendocino” CPUs, which can be run on the new Socket 8, Slot 1/2 and Socket 370 machines respectively; with the Celeron “Mendocino” also being available on Slot 1, simulating the use of a “slotket” Socket 370 adapter. P6 core emulation was developed by OBattler, instruction timings were refined by nerd73, and the Celeron “Mendocino” was added by tiseno100.
Our P6 emulation is not fully accurate due to the core’s out-of-order engine and integrated L2 cache, both of which are too complex to emulate, though the Pentium II “Deschutes” instruction timings in particular were tweaked to benchmark reasonably close to a real CPU.
Enter Super Socket 7
OBattler brought more Socket 7 CPUs to 86Box by adding the AMD K6, K6-2 and K6-III, as well as the IDT WinChip 2, with an instruction timing model based on PCem’s implementation.
Note that a Super Socket 7 machine is required for the K6-III, as well as the highest clock speeds available for the K6-2 and WinChip 2.
The underdog VIA Cyrix III
Tester extraordinaire nerd73 has contributed emulation of the VIA Cyrix III family of CPUs based on the Samuel core, released in 2000, making it our newest CPU family yet. While it uses the same PGA370 socket as the later Pentium III chips, the Cyrix III is a 586-class CPU based on Centaur’s IDT WinChip design (despite carrying the Cyrix brand), therefore limiting it to the same software that would run on a Pentium MMX or WinChip 2. While the last Cyrix-branded chip performed just as badly as the WinChip it was based on – the contributor describes it as a “really fast 486 with Pentium instructions” – its power consumption was best-in-class, which led VIA to further develop its core into the better-known C3, C7 and Nano series.
The Cyrix III is available on all newly-added Socket 370 and Slot 1 (the latter also simulating a “slotket”) machines. While motherboard compatibility with this CPU was hit-or-miss, we did our best to specifically pick boards that are compatible, either officially or unofficially; in the latter case, the BIOS may misidentify the Cyrix III as an Intel CPU or display garbage instead of the CPU name, a minor issue with no other implications.
386 and 486 odds and ends
nerd73 also added emulation of IBM’s 386SLC, 486SLC and 486BL, available on PS/2 machines; as well as SL-Enhanced models of Intel and AMD 486 CPUs, available where supported. The 486SLC and 486BL were notable for having a 386-class core derived from the 386SLC, with the 486 instruction set and a small L1 cache added on top. The SL-Enhanced 486 models support the System Management Mode feature, designed for “Green PC” and laptop power management applications, which resulted in litigation between Intel and AMD over its implementation and eventually became a standard feature on x86 CPUs.
richardg867 implemented the STPC series of System-on-Chip devices marketed by STMicroelectronics for embedded applications between the late 1990s and early 2000s. These chips featured a Cyrix Cx486DX CPU core running at up to 133 MHz, integrated PCI chipset, and optional integrated VGA (not emulated yet). The STPC Client, Consumer-II, Elite and Atlas are emulated, with at least one machine representing each. In keeping with the embedded theme, they have also implemented the ALi M6117 SoC, which had a long run from Acer Labs to Nvidia (yes, that Nvidia) and DM&P; this chip has a 33 or 40 MHz 386SX CPU core and an integrated ALi M1217 chipset providing most peripherals, allowing for tiny 386SX systems.
Picking a chipset was an important step in PC building back in the 1990s, even more so than it is today; back then, any given x86 CPU platform had many chipset choices offered by several vendors. This often came down to choosing between the higher quality options from Intel or AMD, or the lower cost options from VIA, ALi, SiS and others; granted, there were outliers providing high performance at a low price, and some motherboard manufacturers that weren’t exactly honest about their chipset choices.
While the performance and reliability differences from one chipset to the other don’t really translate into emulation, all chipsets have their own set of quirks and features (sorry), with the different levels of integration and variety of BIOS choices making them worth emulating. 86Box v3.0 is the chipset release, bringing in many new emulated chipsets contributed by several developers.
OBattler overhauled the Intel 430 series chipset emulation and introduced the 440 series, with tiseno100 bringing in additional variants. Highlights include the legendary 440BX for the Pentium II platform, and the 430TX for the Pentium platform. The lesser-known 420 series for the 486 platform was also expanded by OBattler, with the 420EX and 420ZX joining the existing 420TX.
richardg867 and OBattler expanded upon the Intel 440 work by adding the SMSC VictoryBX-66, a relatively unknown combination of Intel’s acclaimed 440BX northbridge and Standard Microsystems’ SLC90E66 Victory66 southbridge, announced in late 2000 and released in early 2001 as the product of a technology exchange agreement between the two companies. This chipset’s obscurity was a result of its late release; the 440BX northbridge was quite outdated by 2001, with the final nail in its coffin put by the Intel 815 chipset released the year before, ending the notorious Intel-Rambus disaster which had extended the BX’s life for motherboard manufacturers.
Chipsets from the VIA Apollo series were also added, ranging from the VPX for the Pentium platform to the Pro 133A for the Pentium II/III platform, with tiseno100 working on the northbridges and richardg867 on the southbridges. One highlight is the MVP3, seen by many as the best Super Socket 7 chipset ever made.
nerd73 contributed the OPTi 82C546/547 “Python” for the Pentium platform, which provided VESA Local Bus and optionally also PCI connectivity, making it a highly unusual design, given that VLB was designed with the 486 CPU bus architecture in mind. On the 486 platform, they have also provided the Chips & Technologies CS8230 and OPTi 82C291.
Last but not least, v3.0 saw the start of a chipset task force run by tiseno100 and OBattler, which has implemented numerous chipsets from the 386/486 era and beyond; while the list is too large for this post, it includes models from ALi, Chips & Technologies, IMS, Intel, OPTi, SiS, UMC (lots of reverse engineering involved), VIA and VLSI. The task force is still active and working on more chipsets for a future release of 86Box, so stay tuned…
This release brings a variety of new hardware components and peripherals across the board:
Magneto-optical discs and drives
The magneto-optical disc joins the Iomega ZIP in 86Box’s removable storage device emulation. MO discs were available in capacities up to 1.3 GB, and while the standard was not very successful, it had a cult following in Japan.
MO emulation was developed by claunia as an independent fork of 86Box, with upstreaming and finishing by TC1995, OBattler and driver1998.
Video
TC1995 was the star of the video department on this release, bringing us the following in cooperation with OBattler:
- Porting the 3dfx Voodoo Banshee and Voodoo3 video cards over from PCem, as well as adding the 3dfx Velocity 100 OEM variant of the Voodoo3;
- Adding the 86C924, 86C928, Vision868, Vision968, Trio64V+, Trio64V2 and Trio3D/2X to the range of emulated S3 cards;
- Adding the TGUI 9660XGi and 9680XGi to the range of emulated Trident cards, while also finishing the 9400CXi and 9440AGi from v2.xx;
- Adding the Tseng ET4000-based Kasan Hangulmadang-16 Korean VGA;
- Overhauling emulation of the G2 GC205 and Headland HT216-32 while adding the HT209-based Radius SVGA Multiview;
- Fixing numerous driver-specific bugs on existing video cards.
richardg867 added basic AGP support, making the 3dfx Voodoo3 and S3 Trio3D/2X our first AGP video cards.
tiseno100 implemented the CL-GD 5401, Cirrus Logic’s first VGA chip, based on the AVGA1 acquired as part of Acumos. They have also added the Schetmash Iskra EGA, a Cyrillic-capable clone of the IBM EGA designed for the Iskra-3104 Soviet XT clone, which 86Box v3.0 also emulates.
Networking
TC1995 implemented the AMD PCnet-FAST III Am79C973 and PCnet-PCI II Am79C970A Ethernet controllers, based on their emulation in VirtualBox. The PCnet family is best known for being emulated by all major virtualizers (VMware, VirtualBox and QEMU), and is natively supported by Windows (NT 3.51 to XP), Linux and many other operating systems.
Two new Plug and Play ISA network cards were added: OBattler brought the NE2000-based Realtek RTL8019AS, and richardg867 brought the AMD PCnet-ISA+.
SCSI
TC1995 implemented the AMD Am53C974 PCscsi controller, based on QEMU’s emulation. The Tekram DC-390 SCSI card uses that controller, and its BIOS supports CD-ROM boot.
OBattler added the 53C815, 53C820, 53C825A, 53C860 and 53C875 to the range of emulated NCR SCSI controllers. Many BIOSes include a Symbios SDMS option ROM for the 53C860 which is also capable of CD-ROM boot, so you might see the SCSI BIOS show up on some machines even if the SCSI card’s Enable BIOS option is unchecked. When migrating emulated machines from v2.xx, keep in mind the 53C810 no longer has an onboard option ROM; use the 53C815 instead.
Sound
The Sound Blaster AWE64 Gold was added by lemondrops to the list of emulated Creative Sound Blaster cards. The AWE64 is a slightly improved, Plug and Play only variant of the AWE32.
richardg867 added the Crystal CS4236B sound card, a Plug and Play ISA chip with support for both Sound Blaster Pro and Windows Sound System standards, whose family lives on in modern retro sound projects such as the Orpheus Sound Card.
TC1995 implemented the Sound Blaster-compatible Aztech Sound Galaxy 16 card, based on an user contribution to PCem.
An AC’97 codec implementation was developed by richardg867, powering the Ensoniq AudioPCI (which also had some outstanding issues fixed by OBattler), as well as the on-board audio on later VIA chipsets introduced in this release.
PostScript PDF printer
dhrdlicka expanded parallel port printer emulation by bringing in a PostScript printer, which uses the Ghostscript library to output PDF files. This printer can be used with generic PostScript drivers or, in absence of those, Apple LaserWriter drivers. If the gsdll32.dll
or gsdll64.dll
library included with 86Box downloads is missing or PDF conversion otherwise fails, the original PostScript files are saved.
POST card
richardg867 introduced the option for a POST diagnostic card, which displays diagnostic codes reported by the machine’s BIOS on the status bar. These codes are helpful for debugging hardware setups which fail to boot. As with real POST cards, the leftmost value is the most recent code reported, while the rightmost value is the second most recent code; both are in hexadecimal.
PCI bridges
Due to the way the PCI bus works, PCI-based machines have a limited number of slots to work with, with the exact slot count varying from one machine to the other. In previous versions of 86Box, running out of PCI slots (often an issue with Voodoo 2 SLI setups) resulted in a silent failure; no error message would be shown, and any cards that didn’t “fit” simply wouldn’t work.
richardg867 worked around this limitation by implementing emulation of the DEC 21150 PCI-PCI bridge. This bridge takes up a single PCI slot and provides 9 more slots; it is automatically deployed whenever the emulated machine runs out of available PCI slots, and works without any additional drivers or setup on the operating system side, although some devices may not work correctly under a bridge, such as the game port built into the Ensoniq AudioPCI sound card on Windows.
This is quite definitely the request we’ve received the most ever since the 86Box project started. After a couple false starts over the years, we are glad to announce that a Linux and macOS version is being worked on, with initial porting done by Cacodemon345, macOS support tweaks by dob205, and a new cross-platform Qt user interface (pictured below) by jgilje, all newcomers to the project.
As of writing, the user interface is not finished yet, as it took us some time to determine the right UI toolkit to use. However, v3.0 already has some of the groundwork done: 64-bit Windows builds of 86Box are now available (though 32-bit builds are still recommended on 64-bit systems due to the slight performance impact), as we have located and fixed bugs related to the 64-bit dynamic recompiler, which is required for x64 and ARM64 Linux distributions as well as macOS on Intel and Apple Silicon.
Our plan is to release the Linux and macOS version alongside a minor release in the not-so-distant future. For now, interested users can download experimental Linux builds from Jenkins, or use CMake to compile manually from the master branch on our GitHub repository. The Jenkins builds and main GitHub repository currently have a barebones user interface developed by Cacodemon345, with command line controls similar to QEMU’s Monitor, requiring manual editing of 86box.cfg
to configure emulated machines.
An open source project is nothing without its contributors, so the 86Box development team would like to thank all contributors (and some outside GitHub) the project has had so far, who have made and will continue to make this emulator awesome.
We would also like to thank our Patreon supporters and one-time donors. Consider supporting the development of 86Box through those methods.
Image credits: cpu-collection.de (most CPUs), ZyMOS @ Wikimedia Commons (IBM 486), PLASMA online (chipsets)