# Atlas 286

Atlas 286 is a from-scratch BIOS for 286 PCs. It boots DOS from a CompactFlash card on a plain IDE card, tested on a real Packard Bell PB686.

Source page: https://barelybooting.com/atlas286/

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.

<p class="legend">Every claim here says where it was proven: <span class="ev ev-i">[I]</span> on real hardware, <span class="ev ev-e">[E]</span> in the 86Box emulator (it's only a model), or <span class="ev ev-u">[U]</span> on a CPU model (more in the <a href="/glossary/">glossary</a>). Lately the real-hardware runs use One ROM emulators in the ROM sockets instead of burned EPROMs.</p>

## What works so far

- It boots MS-DOS from a CF card on the PB686 [I]. 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].
- HIMEM.SYS loads, the 2 MB of extended memory shows up, A20 behaves, and the 287 maths chip is found and working [I].
- 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].
- Windows 3.1 runs in Standard mode, DOS box and all [I]. 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].
- The 1.2 MB 5.25" drive formats and writes fine [I] (on the M15 build; not re-tested since).
- Big disks: the emulator is happy past the old 504 MB limit [E], and the CPU model gets much further than that [U]. The biggest disk I've actually run on real hardware is a 488 MB CF card [I].
- CD-ROM and Zip boot work in the emulator [E]. I haven't had a real drive on the bench yet.

<figure><a href="/img/atlas-windows31-2026-10-10.jpg"><img src="/img/thumb/atlas-windows31-2026-10-10.jpg" alt="Windows 3.1 About Program Manager dialog in Standard Mode, licensed to Atlas Test, showing 2,155 KB free and 86% system resources" width="320" loading="lazy"></a><figcaption>Windows 3.1 in Standard mode on the PB686, M12 build, 10 October 2026. <a href="/img/atlas-windows31-2026-10-10.jpg">Full size</a> (320 KB).</figcaption></figure>

## 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.

<figure>
<a href="/img/atlas-setup-2026-10-05.jpg"><img src="/img/thumb/atlas-setup-2026-10-05.jpg" alt="A blue Atlas 286 Setup screen on a CRT, listing date, time, floppy drives A: 1.44 MB and B: 1.2 MB, hard disk, memory and video" width="320" loading="lazy"></a>
<figcaption>Atlas's own Setup screen on day one, 5 October 2026. The help line still says "TBD (Tony's wording)". <a href="/img/atlas-setup-2026-10-05.jpg">Full size</a> (373 KB).</figcaption>
</figure>

The [status page](/atlas286/status/) has the milestones and what's left before 1.0, and the [journal](/atlas286/journal/) has the story so far.

## Built with {: #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.

<figure>
<a href="/img/onerom-pair-pb686.jpg"><img src="/img/thumb/onerom-pair-pb686.jpg" alt="Two One ROM boards glowing red in the PB686's BIOS sockets U41 and U40, each with a USB cable plugged in" width="320" loading="lazy"></a>
<figcaption>Two One ROMs doing the EPROMs' job in the PB686. <a href="/img/onerom-pair-pb686.jpg">Full size</a> (221 KB).</figcaption>
</figure>

**Bench tools**

- [One ROM](https://github.com/piersfinlayson/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](https://github.com/redruM0381/ATAboy) by JJ Dasher. The drive IDENTIFY dumps I took with it shaped how Atlas handles older drives that only speak CHS.
- [Greaseweazle](https://github.com/keirf/greaseweazle) by Keir Fraser. It made and checked the floppy images I test with on the real 286.
- An [XGecu](http://www.xgecu.com/en/) TL866II+ with Xgpro. It burned every EPROM pair before the One ROMs arrived, including the M15 release pair.

**Software**

- [86Box](https://86box.net/) 6.0, the emulator behind every [E] result.
- [Unicorn Engine](https://www.unicorn-engine.org/) 2.1, the CPU model behind every [U] result.
- [NASM](https://www.nasm.us/) 3.02, the assembler.
- [Python](https://www.python.org/) 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](https://www.capstone-engine.org/) 5.0, which checks that no 386-or-later instruction ever sneaks into the ROM.
- [XTIDE Universal BIOS](https://www.xtideuniversalbios.org/) 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](https://youtube.com/@adriansdigitalbasement), the YouTube channel that got me into all of this (and [adriansbasement.com](https://adriansbasement.com/)).
- [The Retro Web](https://theretroweb.com/), the community database of old motherboards, chips and manuals.
- [DOS Days](https://www.dosdays.co.uk/), 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.

<figure>
<a href="/img/ibm5170-arrival-top.jpg"><img src="/img/thumb/ibm5170-arrival-top.jpg" alt="An IBM 5170 PC/AT with its cover off, seen from above: the power supply with its yellow warning label, the drive cage, and the system board with rows of memory chips and expansion slots" width="320" loading="lazy"></a>
<figcaption>The IBM 5170 on arrival, lid off, 24 October 2026. <a href="/img/ibm5170-arrival-top.jpg">Full size</a> (502 KB).</figcaption>
</figure>

## Coming at 1.0

<div class="construction"><picture>
<source srcset="/img/retro/under-construction-still.png" media="(prefers-reduced-motion: reduce)">
<img src="/img/retro/under-construction.gif" alt="An animated barrier with flashing red lamps and the words UNDER CONSTRUCTION" width="177" height="175">
</picture></div>

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.
