The 3Com Audrey (2000–2001) was a kitchen-counter “internet appliance.” 3Com dropped it within a year. It has:

    a 200 MHz National Geode GX1;
    32 MB of RAM and 16 MB of flash;
    a 640×480 colour touchscreen;
    a wireless IR keyboard, a dial and buttons, and speakers;
    two USB 1.1 ports, a CompactFlash slot and a 56k modem.

It ran QNX.

Why PC/GEOS is the correct OS for it:

    Linux is a squeeze in 32 MB of RAM and 16 MB of flash.
    ELKS or uClinux would fit, but give you little to use.
    Some form of Windows might work like CE or something. But...
    PC/GEOS is the sweet spot. It leaves the hardware plenty of headroom and still brings a full desktop: word processor, spreadsheet, drawing, database, presentations, calendar, contacts, a web browser and email. The whole thing, every app and font, fits in the Audrey’s 16 MB flash with FreeDOS and all my drivers.

The approach

PC/GEOS is a 16-bit real-mode system that runs on top of DOS. So the job wasn’t a kernel port. It was:

    make the Audrey boot DOS, which it was never meant to do;
    write a driver for every piece of hardware that isn’t a standard PC part.

That turned out to be nearly all of it.
Challenge 1: there’s no BIOS

    The wall: I built a probe image and ran it on a unit. The firmware offers exactly one real-mode PC service, video. Every other interrupt vector points to a bare return. The timer doesn’t count. There’s no memory map, no disk services and no keyboard services. DOS can’t boot on that.
    The fix: A mini-BIOS from scratch. It provides the BIOS data area, timer, AT keyboard, memory map, real-time clock, A20 gate, serial port and disk services, so FreeDOS sees an ordinary PC.

Challenge 2: the firmware only boots QNX

    The wall: 3Com’s loader doesn’t jump to arbitrary code. It scans the image for a QNX startup header, checks two checksums, and only then enters it in 32-bit protected mode. Cards also need a 3Com trailer, or it says “Invalid image.”
    The fix: my bootloader, FlashBoot, is packaged as a QNX startup image. 3Com’s loader accepts it. It drops back to real mode, installs the mini-BIOS, and boots FreeDOS from its disk image.
    The safe path: holding Datebook at power-on makes the firmware copy a card into RAM and run it without touching the flash. That’s how the whole system runs: from a 32 MB CF card, with the stock QNX still in the flash, untouched.
    One rule all along: the firmware’s boot region, the top 256 KB of flash, is never touched.

Challenge 3: fitting it all in 16 MB

    What fits: FreeDOS plus the full PC/GEOS Ensemble, with every app and font, plus all my drivers, fit in an image sized for the Audrey’s internal flash.
    Run from a card: the image lives in RAM while it runs. A second partition on the card holds files that must survive a power-off, plus a boot log.

Challenge 4: the CF slot isn’t IDE

    How it’s wired: the slot hangs off a general-purpose chip select on the CS5530 chipset. I read 3Com’s own CF driver to learn the wiring and the commands.
    Two quirks of 3Com’s driver, which explain years of “this card works, that one doesn’t” folklore:
        It only reads the low 16 bits of the card’s size. A 2 GB card looks like 8 MB to it.
        It rejects cards that identify themselves as fixed disks.
    The boot log: every boot writes BOOT.LOG to the card, so every test on the real unit came back with a full report, even when nothing showed on screen.

Challenge 5: input the Audrey way

    The IR keyboard isn’t a keyboard controller at all. It’s raw consumer-IR samples arriving on a UART in the Super I/O chip. Reverse-engineered the frame format and decode the keyboard in...

Read more »