Atlas 286
Atlas 286 is a BIOS for 286 PCs that I'm writing from scratch, in assembly. It boots DOS straight off a CompactFlash card plugged into a plain IDE card, no XT-IDE ROM needed. So far it has run on exactly one real machine, my Packard Bell PB686, plus the 86Box emulator. It's all its own code, and I'm partway through a careful provenance review to back that up.
Every claim here says where it was proven: [I] (measured on real hardware) on real hardware, [E] (measured in the 86Box emulator) in the 86Box emulator (it's only a model), or [U] (measured on the Unicorn CPU model) on a CPU model (more in the glossary). Lately the real-hardware runs use One ROM emulators in the ROM sockets instead of burned EPROMs.
What works so far
- It boots MS-DOS from a CF card on the PB686 [I] (measured on real hardware). It has done that since early October, and the M17 build did it again this weekend.
- My own AT test program, ATLTEST, passes everything, including the tests that really reset the CPU and come back [I] (measured on real hardware).
- HIMEM.SYS loads, the 2 MB of extended memory shows up, A20 behaves, and the 287 maths chip is found and working [I] (measured on real hardware).
- It has its own colour Setup screen, a memory test, a serial port that mirrors what POST is doing, and a little ROM monitor [I] (measured on real hardware).
- Windows 3.1 runs in Standard mode, DOS box and all [I] (measured on real hardware). I haven't re-tested that on the newest build yet, because it needs me sitting at the keyboard.
- In the emulator, every Windows from 1.04 to 3.11 that I tried ran in the modes a 286 can do, with nothing going wrong because of the BIOS [E] (measured in the 86Box emulator).
- The 1.2 MB 5.25" drive formats and writes fine [I] (measured on real hardware) (on the M15 build; not re-tested since).
- Big disks: the emulator is happy past the old 504 MB limit [E] (measured in the 86Box emulator), and the CPU model gets much further than that [U] (measured on the Unicorn CPU model). The biggest disk I've actually run on real hardware is a 488 MB CF card [I] (measured on real hardware).
- CD-ROM and Zip boot work in the emulator [E] (measured in the 86Box emulator). I haven't had a real drive on the bench yet.

What doesn't work yet
- E1. Now and then, usually on the first boot after power-on, a boot with HIMEM stops with an I/O channel check, always at the same spot. It happened twice on Sunday morning's run. I don't know why yet, and I'm not calling it fixed until real hardware says so.
- F11. On the PB686, writing to a 1.44 MB disk in drive A: leaves nothing readable. I can't blame the BIOS for sure yet, because I still need to test that drive on its own. Either way, Atlas hasn't successfully written to A: on this machine.
- S1. With HIMEM loaded, the speed display can say "slow" while the CPU is happily running fast. A newer build has a fix aimed at it that I haven't checked on real hardware.
- Not re-tested on the newest build: Windows 3.1, a full floppy check on A:, and a real Ctrl+Alt+Del with my actual fingers.
- Not in 1.0: old MFM and ST-506 hard disks, and the BIOS Boot Specification.
Why you might want it
- You can follow along as it happens. Every milestone and every open bug ends up on this site, with the evidence.
- Since M17, any change that alters behaviour comes with a deliberately broken build that its test has to catch, so I find out when a test can't fail.
- Every change can be switched off to get the previous bytes back exactly, and something checks that it really does.
- It boots DOS from a cheap CF card on a plain IDE port, with no extra option ROM.
- I try to write down the bugs as plainly as the wins.
Why you might not
- It has run on one real motherboard, and yours is almost certainly not a PB686.
- Atlas is built for a specific board from a description of that board. It doesn't detect chipsets, and so far it has only been built for the PB686 and an 86Box machine.
- There's nothing to download yet. That comes with the 1.0 release candidate.
- There are two open bugs, and one of them means it can't write a 1.44 MB floppy on my machine yet.
How I test it
Since M17, every change that alters behaviour comes with a "RED" build: a copy broken on purpose in exactly the way the change is meant to prevent. If the test doesn't fail on the RED build, the test is no good. Every change also has an off switch that puts the old bytes back, and a check that makes sure it does.
Then there's the bench. The PB686 talks to my PC over a serial console. At the start of each session it reads back its own ROM so I know exactly what's in the sockets, and every boot is checked for the right banner. A smart plug handles the power cycling and a webcam watches the screen. That setup is why I can run the same test twenty times and trust the answer.
The status page has the milestones and what's left before 1.0, and the journal has the story so far.
Built with
Atlas wouldn't exist without other people's work. One ROM turned a burn-and-swap cycle into a few minutes, which is most of why the latest round of testing fit into three days. Greaseweazle made my floppy tests trustworthy, and ATABoy's drive dumps kept the disk code honest.
Bench tools
- One ROM by Piers Finlayson. Since 23 October 2026 two of these sit in the PB686's ROM sockets in place of EPROMs, so a new build goes on the real machine in minutes. Every image gets read back and checked before I trust a result from it.
- ATABoy by JJ Dasher. The drive IDENTIFY dumps I took with it shaped how Atlas handles older drives that only speak CHS.
- Greaseweazle by Keir Fraser. It made and checked the floppy images I test with on the real 286.
- An XGecu TL866II+ with Xgpro. It burned every EPROM pair before the One ROMs arrived, including the M15 release pair.
Software
- 86Box 6.0, the emulator behind every [E] (measured in the 86Box emulator) result.
- Unicorn Engine 2.1, the CPU model behind every [U] (measured on the Unicorn CPU model) result.
- NASM 3.02, the assembler.
- Python 3.14 for the build and test tools, with pyserial, Pillow, numpy, python-kasa and git doing the serial bench, screen captures, image checks, the power switch and version control.
- Capstone 5.0, which checks that no 386-or-later instruction ever sneaks into the ROM.
- XTIDE Universal BIOS 2.1.2. It booted the PB686 from CF until Atlas could. On boards with an IDE port, Atlas is meant to make it unnecessary.
Inspiration
- Adrian's Digital Basement, the YouTube channel that got me into all of this (and adriansbasement.com).
- The Retro Web, the community database of old motherboards, chips and manuals.
- DOS Days, the source of the Iomega Zip DOS drivers I tested Atlas's Zip support against, and of TI chipset datasheets I used to work out the PB686.
Next on the bench: an IBM 5170
The next machine Atlas will be tried on is an IBM 5170, the original PC/AT, the machine every "AT compatible" was being compatible with. If Atlas is going to call itself an AT BIOS, this is where it has to earn it.
It arrived on 24 October 2026 and hasn't been powered on yet, because a machine this old gets a proper refurbish before it gets electricity. Going by the markings it's an early board with a 6 MHz 286, but I haven't measured anything on it yet. When it does run Atlas it'll be with an IDE or CF controller, because MFM hard disks aren't part of the 1.0 plan. Until it passes on the bench, I'm not claiming Atlas works on it.
Coming at 1.0
Downloads, a way to check you've got the real build, and a call for testers with other 286 boards. This bit genuinely is under construction, so the sign stays until it isn't.