The 3Com Audrey with its keyboard and stylus. Product photo via The Fiscal Times.
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:
- 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 and an incredible OS for its own time. 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.
PC/GEOS on the Audrey, with the application menu open.
About the project photos: these are photographs of the actual Audrey running the software. Its original LCD is a pretty poor screen, and it does not photograph gracefully. The washed-out colours, glare and moiré are part of the experience.
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.
PC/GEOS Ensemble starting on the Audrey.
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...
Read more »
darekdumon
hhuysqt
Ken Yap
Mathijs van den Berg