# M18: what changed, and what the bench taught us

2026-10-31. M18 is tagged. It adds a boot menu, six POST checks, a secondary IDE channel and some floppy fixes, and the bench found one dead drive, one awkward boot sector and a power supply that needs recapping.

Source page: https://barelybooting.com/atlas286/journal/2026-10-31-m18-what-changed-and-what-the-bench-taught-us/

M18 is tagged. The automated gate ran 240 jobs and all 240 passed. On 30 October the PB686 got its full bench campaign, with me at the keyboard this time, and most of it passed. The parts that didn't pass were more interesting, so they get most of the space.

## What's new in M18

- **A boot menu.** Press F10 during the "Press DEL" window (F12 as well, on a 101-key keyboard) and Atlas lists what it found: floppy A:, hard disk C:, CD-ROM and Zip. A number boots that device once. Esc, or ten seconds of indecision, carries on with the normal order. Both keys worked on the PB686 [I]. The CD-ROM and Zip lines have only been seen in the emulator [E].
- **The secondary IDE channel.** Atlas now uses disks on it when the primary channel has fewer than two. The PB686 has no second controller, so this has only run in the emulator [E].
- **Disk geometry.** Atlas now uses a disk's own geometry when the disk reports LBA and fits within 1024 cylinders and 16 heads [E]. A disk partitioned under an older Atlas build may need repartitioning.
- **The keyboard works while option ROMs start.** A card's "press a key" prompt or setup hotkey can now see the keyboard. It's built and tested in the automated suite, but there was no option ROM card on the bench, so a real one hasn't tried it yet.
- **Six POST hardware checks that warn and continue.** Refresh, timer tick, timer counter, ROM checksum, memory size and real-time clock. A failure prints one line and the boot carries on. A healthy PB686 prints none of them [I]. That is the right answer and the dullest one possible. A warm start skips most of them.
- **Floppy fixes.** Cylinders 80 to 83 can now be formatted, read and written, which the 82 and 83 cylinder formats need. I haven't tried one on real hardware. The BIOS also fills in the floppy status bytes that M17 left at zero [I].

## The 1.44 MB format failure that was a drive

For weeks, F11 said that anything written to a 1.44 MB disk in drive A: came back unreadable. DOS FORMAT stopped at 0 percent with "Invalid media or Track 0 bad". Reading was fine, so the BIOS was the obvious suspect, and Atlas stood accused for most of October.

The evidence pointed the other way. The drive read all 160 tracks of a pattern disk correctly, every header in the right place. Every format attempt ended with a missing address mark and no readable header. Cleaning the heads with isopropyl alcohol changed nothing, and a 720 KB format failed the same way, so it wasn't specific to high density. The same board, cable and code wrote B: perfectly well.

Then a Sony drive went into A:, and it passed everything: a full FORMAT with the system files (1,457,664 bytes), two identical file comparisons, a clean CHKDSK, and a disk that boots DOS from A:. The Mitsumi went to my parts bin. F11 is closed.

## Why B: came out of the boot menu

The first version of the F10 menu offered B:. On the bench I put a DOS 4.01 boot disk in B:, left A: empty and picked it. Atlas did what it should: it loaded the disk's first sector and jumped to it with the drive number set to B:. The disk's boot code looked for its system files on A: anyway and gave up with its usual non-system-disk complaint.

So B: is out of the menu. A choice that can't work for a DOS disk shouldn't be offered. Period BIOSes solved this with a "swap floppy drives" setting, and a proper A:/B: swap is planned for a later release. The whole story is in [Why you can't boot a PC from drive B:](/library/why-you-cant-boot-a-pc-from-drive-b/).

## The parity fault the board showed before

On 28 October I ran a diagnostic ROM build: a test image, never a release candidate, that hammers memory and logs every NMI. It found memory parity errors on the PB686's onboard memory, at the same offset in every 512-byte block of one 256 KB bank. The data read back correctly every time. Only the parity bit complained.

It came and went. Three of the ten short boots showed it, and it turned up more than once in a long run. Nine boots that evening showed nothing at all, and I haven't explained that.

A normal Atlas doesn't switch planar parity checking on, so a normal build would never have told me. The fault also predates Atlas. On 7 September, under the board's original BIOS, which does check parity, the PB686 stopped with a parity error while I was running something unrelated under DOS. At that point there was no memory card in it, so no extended memory and no HIMEM. My guess is a DRAM row that isn't being refreshed properly, with the parity chips losing it first. I'm calling the fault P1, and it is separate from E1.

## The power supply that has never been recapped

E1, the occasional I/O channel check on the first HIMEM boot, halted one boot in twenty on 27 October, then none in the next fifteen cycles on 28 October. The halts I've seen all came after short power-offs of 16 to 20 seconds, which is a pattern and not a proof.

The PB686's power supply has never been recapped, and it may have RIFA X2 capacitors, a type with a reputation. A supply in poor shape could produce faults like these: intermittent, odd, and gone when you point a diagnostic at it. So I now suspect board-level faults for E1 and P1, and I've stopped experimenting on either until the recap. More experiments on a suspect supply would only give me a lot of data and very little information. The diagnostic build stays as the before-and-after instrument.

## What's next

The recaps come first, on both machines. Then the IBM 5170 goes on the bench as the second target, ATLASTST gets finished so other people can test their own boards, and then there's a release candidate. A provenance review is in progress before release, and there's nothing to download until then.

*I build Atlas with a lot of help from Claude, Anthropic's AI model, including drafting this post, and I check it against my bench records. See [About](/about/) for how that works.*
