Welcome

Design

I didn't initially start with the portable machine in mind. For my initial prototype, I simply wanted to create the equivalent of a desktop PC: VGA output, no need for power management; I just want to make sure I can put a PC together in the first place. (I mostly succeeded; the amount of bodges on this PCB are limited to some forgotten pull-ups and -downs, two misplaced bootstrap capacitors and a switched USB lane. How I managed to pick the wrong gender of VGA port still is beyond me... luckily soldering it on the other side was an easy fix.)

Unlabeled VapourDeck mainboard PCB

This prototype uses an Intel 486-DX4-100. This is the last 486 processor Intel made. I also used an AMD 486-DX5-133 in a second board; it's pin-compatible and AMD made the 486 processor for a bit longer; it's likely the last standalone 486 chip produced. As process nodes improved later on, the DX5-133 runs cooler and faster than its Intel counterpart. Both chips run at 3.3V, in contrast to the earlier ones that needed 5V. This is useful as 3.3V is way more common than 5V nowadays.

Now, how do you interface with a 486 chip? Unlike modern SoCs or even desktop CPUs, some of which integrate DRAM-controllers and even entire GPUs, a 486 CPU is mostly that: the central processing unit. Aside from perhaps some cache, it lacks any integrated peripherals. This means that every single thing it needs to do, be it reading its program, writing data to memory, or accessing peripherals, needs to be done through its bus interface. In other words: understanding how that works is pretty important.

Luckily, this was the time when Intel actually wanted people to use their chips in any design and wasn't super-secretive with their bus protocol information yet. As such, the user manual (link) is freely available and very informative. For electrical signalling, the 486 uses pretty standard TTL- and (for the 3.3V models) LVTTL-style signals. It has a lot of those: Especially the later 486 chips have all kinds of fancy features available like internal caches, writeback cache, multiple bus hold modes, multiprocessor features, burst reads etc, but the nice thing is that those are all optional: if you don't use the pins for these features, you end up with a fairly simple 32-bit bus where any transaction takes two or more clock cycles. The following schematic from the user manual describes a basic transaction like that:


Cycles always happen synchronous to the falling edge of the bus clock. A cycle always starts with ADS# (the Address Strobe) being pulled low. This is a signal to everything listening on the bus that the address and control lines are valid. The address lines specify the memory or I/O address that the CPU wants to read from or write to, and the control lines indicate if it's a memory or IO operation, and if the access is a read or a write. In case of a write, the actual data that the CPU wants to write appears on the bus the next cycle. Regardless, whatever peripheral handles the request can do so, and will indicate it's done by lowering the RDY# line. If the access was a read, it'll also put the requested data on the line. The data bus is 32 bit, but the CPU can use the BE0#-BE3# Byte-Enable lines to indicate which of the 4 8-bit portions of the bus it actually wants to read and write; this way the CPU can also handle byte and word accesses easily.

Note that this bus still very much resembles the 'classic' memory bus of the older 8-bit CPUs: transactions are one word wide to one address, with some provisions for slower peripherals and byte enable lines to handle smaller words. For more speed, you could also use enhanced transaction modes (like burst modes) by doing the correct handshake. As mentioned before, this is entirely optional and the CPU will happily work fine with just these 'simple' transactions. Now what to connect to that bus?

Now, while I do have a nostalgic interest in building a PC, I don't have an interest in the failure modes and waiting times associated with it. That is, I'd rather not relive the emotions accompanied by installing some game that I copied from a friend that came on 20 floppies, only for the 17th to have a bad sector. Actually, I'd rather not re-live floppy disks at all: they were quite slow and error-prone in general. Hard disks I have a better feeling about, but they come with the issue that all period-accurate hard disks are long past the far side of the bathtub curve, so even if I could obtain one, I couldn't be sure how long it kept working. Input devices like keyboards and mice have a longer life in general, so on one hand I could get period-accurate ones and use those. On the other hand, the stack of spare USB keyboards I have only has the connection method as major difference with an old keyboard, and I already own these more modern keyboards. Same goes for the mice I have here; although these use an optical sensor rather than a ball, using them is still more-or-less the same. And you don't have to boil a new egg every time you lose or break the old ball.

Labeled VapourDeck PCB. CPU, FPGA, VGA chip, RAM, VRAM, audio codec, ESP32-S3 and USB-hubchip are all labeled.

With that in mind, the other chips on the prototype mainboard are unlikely to surprise you: aside from the CPU, there's an FPGA and an ESP32-S3. The former will act as the chipset on a conventional mainboard, replacing the 40-pin IDE connector, the floppy connector, the PS/2 signalling etc with one QPI bus to the ESP32. The latter then becomes the peripheral MCU that replaces what in the original PC would have been the keyboard controller, the controller in the hard disk and CDROM drive and (in a laptop) the embedded controller. Finally, the mainboard contains a discrete VGA chip paired with its DRAM.

« Prev 2 Next »


© 2006-2026 Sprite_tm - Contact