Old computers. New hardware. Questionable ideas.

PB686: there is no fast A20 on port 92h

The Packard Bell PB686 has no "fast A20" gate at port 92h. Writing bit 1 of port 92h does not switch the A20 address line, and the reason is plain once you look: on this board, port 92h is the same register as port 82h, the AT's DMA page register for channel 3. The only working A20 gate I've found on the PB686 is the usual one, through the 8042 keyboard controller's output port. If your software or BIOS assumes every AT-class board has a fast A20 gate at port 92h, it will quietly fail on this machine, and it will move a DMA page register while it's at it.

Applies to

Evidence

Everything here was measured on real hardware [I] (measured on real hardware), on the PB686, except the one documented-only [D] (documented only, not measured) line, which says so:

An earlier result said the opposite about D0h. On 2026-09-12, under the original BIOS, a probe sent D0h twice and got nothing back: the status register sat at 1C with the output buffer empty through 400,000 polls. I haven't proved why they disagree. The earlier probe sent D0h with the keyboard interface still switched on (I've checked its source: no ADh first). The later one switched the keyboard off and emptied the buffer before asking. Why that changed the outcome isn't established. The 2026-10-12 reading is the current answer.

Check it yourself

Two warnings first. Writing port 92h or 82h on a PB686 moves the DMA channel 3 page register, so do it only with the machine idle: no floppy access, and no card using DMA channel 3 (on my machine nothing is on DRQ3). And put back every value you change.

I ran these through probe programs, not by hand. The same port operations in DOS DEBUG look like this:

  1. Read both ports as found: i 82 and i 92. Note both values.
  2. Write a test value to 82h and read 92h: o 82 52, then i 92. On the PB686, 92h reads 52. Try a second value (o 82 64, i 92) so a single lucky match can't fool you.
  3. Read a control port that you've already established nothing on your machine decodes. Mine happened to be 300h, which read FF, but on plenty of vintage PCs 300h belongs to a network or sound card, so don't assume. If the control port also returns your test value, you're reading bus residue, and step 2 proved nothing.
  4. Put 82h back to the value from step 1 (o 82 00 on my machine) and read both ports again. The A20 half isn't something I'd do by hand. For the record, my probe booted without HIMEM.SYS so A20 was off, saved the byte at 0000:0510, wrote a signature there, and read it back at FFFF:0520 (the same byte when the address wraps), with port 92h bit 1 clear and then set, restoring everything afterwards. Poking low memory from DEBUG is an easy way to crash a machine, so the better route is the probe program itself, which saves and restores state and fails safely. I'll publish it.

The D0h reading needs a program rather than DEBUG at the keyboard, because the keyboard interface is switched off while it runs, and I drove mine over a serial console. Here's exactly what can go wrong: if the program crashes or hangs after switching the keyboard off and before switching it back on, the keyboard stays dead until you reset the machine. That's another reason to wait for the published probe program rather than writing your own.

Sources

Revised

2026-10-25.

Revision log:

Wrong about something? Tell me at [email protected].

What links here

Index of /library/