What it is:
A personal computer on a single board, built around a CPU
from 1976.
The board is designed to be small because this is my first PCB motherboard project and I don't have a lot of experience with the expenses and complications of creating larger boards. Start with a 5 V supply, plug in a VGA monitor and a PS/2 keyboard, and theoretically a few seconds later you should have a command prompt. No operating system to install, no updates, no network. It boots into CP/M, the operating system that ran most serious 8-bit machines before MS-DOS, and from there you write programs, edit files, and save your work to a microSD card.
What you'd actually do with it:
Boot to an A> prompt. Write a "BASIC" program and you can run it immediately. You will be able to write Z80 assembly and assemble it on the machine itself, or cross-compile C on
your main laptop and drop the binary on the SD card. Real software of the
era should run on it, such as WordStar, Turbo Pascal, or simple games. Thousands of CP/M programs exist free today.
And because a 40-pin connector exposes the complete CPU bus,
anyone can design their own card - more memory, a sound chip, an instrument
interface - and plug it in. That makes it easy to learn what a bus actually is and what it lets the system do.
What's on the board:
The three big black chips down the left are the heart: the Z80
processor at 8 MHz, 128 KB of RAM (bank-switched, because the Z80
can only see 64 KB at a time), and an ATmega
microcontroller acting as the entire support chipset.
The small green board
in the middle is a designed to be the GPU (Graphics Processing Unit): a Raspberry Pi Pico that generates the video and reads
the keyboard. Around the edge: VGA, keyboard, serial, SD card, clock, power,
expansion. The empty patch top-right is deliberately reserved so sound can be
added later without redesigning everything.
A modern approach:
A 1983 machine needed a dozen support chips around its CPU -
boot ROM, serial controller, disk controller, timer, video. This replaces
nearly all of that with two microcontrollers running software!
The computer is real, though: the Z80 is genuinely in charge.
It fetches and executes every instruction, owns the memory, and runs CP/M
natively - not in an emulator. Nothing you write is simulated. The clever chips
are peripherals, and peripherals outperforming the CPU isn't new; a 1983 floppy
controller often held a microprocessor doing more work than the host.
What it isn't:
It's not that fast. Whomp whomp. It won't browse the web. This is a simple, but complete-ish board. Everything is
through-hole with socketed chips, so it's a reasonable first or second board to
build.
Sadly, it isn't finished:
The schematic is complete and
checked, the components are placed, but more work needs to be done.
The traces are not routed yet. A manufacturing
files does not yet exist. The firmware is not written yet,
The video firmware is recognized and noted as being a substantial project.
FAQ:
Why not discrete video logic or a TMS9918A?
Discrete character-cell video is a dozen more chips and a
much harder board. Sourcing TMS9918A/V9958 parts may be hard to source
at fair prices, and the 9918 outputs composite, not VGA. Neither fits the
with the direction of this PC.
Parts list
| Ref | Part | Package | Notes |
|---|---|---|---|
| U1 | Z84C0008PEG | DIP-40 | CMOS Z80, 8 MHz. |
| U2 | ATmega1284P-PU | DIP-40 | 128 KB flash, 16 KB RAM |
| U3 | AS6C1008-55PCN | DIP-32 | 128 KB SRAM (TC551001 equivalent) |
| U4 | 74HC32 | DIP-14 | Bank select - 2 OR gates used, 2 spare |
| U5 | 74HC00 | DIP-14 | WAIT latch (IOS sheet) |
| U6 | 74LVC245AN | DIP-20 | Z80 data → Pico, LVC at 3.3 V |
| U7 | 74HCT245N | DIP-20 | Pico data → Z80, HCT at 5 V |
| U8 | 74LVC245AN | DIP-20 | Control lines, 5 V → 3.3 V |
| M1 | Raspberry Pi Pico | 2×20 header | Video + keyboard. Socket it. |
| M2 | Micro SD module | 6-pin header | Same style as MBC2 |
| M3 | DS3231 RTC module | 6-pin header | Optional |
Real Time Clock (RTC as a module): J2 six-pin header accepts a real time clock add-on module to enable a system clock with a battery backup. DS3231 RTC module
FAQ:
Why not discrete video logic or a TMS9918A?
Discrete character-cell video is a dozen more chips and a much harder board. Sourcing TMS9918A/V9958 parts may be hard to source at fair prices, and the 9918 outputs composite, not VGA. Neither fits the with the direction of this PC.
Why three bus buffers rather than one
The obvious design is a single bidirectional 74LVC245
between the Z80 bus and the Pico. It does not work. An LVC245 running from 3.3
V drives its outputs to 3.3 V, and a CMOS Z80's input threshold can be as high
as 0.7 × VCC = 3.5 V. The Z80 might read the Pico's data as a
logic low. Some Z84C00 datasheets quote a TTL-level 2.2 V VIH, in
which case it could work.
So the two directions are split, each using a part that
is unambiguously correct:
- Z80
→ Pico (U6): 74LVC245 at 3.3 V. Its inputs are 5 V-tolerant, and it
outputs a clean 3.3 V into the Pico.
- Pico
→ Z80 (U7): 74HCT245 at 5 V. HCT inputs use TTL thresholds (VIH =
2.0 V), so the Pico's 3.3 V is comfortably a logic high, and the outputs
swing to a full 5 V for the Z80.
- Control
lines (U8): 74LVC245 at 3.3 V, one direction only — /VID_CS, /RD, /WR, A0, A1.
Five of eight channels used; the spare inputs are grounded.
U6 and U7 are never enabled at once: VID_WR_N and VID_RD_N, generated by the two spare OR gates of U4, enable exactly one of them per bus cycle. Those two gates are physically on the Memory sheet's 74HC32 but drawn on the Video sheet, which is where they are used.
LED Lights explanation:
D1 - HALT - Wired to the Z80's /HALT pin. The Z80 pulls that line low when it executes a HALT instruction, meaning it has deliberately stopped and is waiting for an interrupt. This could indicate a program crash.
D2 - DMA - Wired to /BUSACK pin. Flashes while board microcontroller loads code into memory. If it stays on, this indicates the machine is frozen.
D3 - USER - Driven from microcontroller. The firmware controls this, and it can be used for a "heartbeat", disk activity, and/or boot progress indicator.
D6 - PWR - Power light sits after the reverse-polarity
diode. Indicates power is wired correctly. On = Powered!
Buttons explanation:
SW1 - RESET - System reset button. It resets the microcontroller on the board. The microcontroller then holds the Z80 processor in reset, reloads the boot code into RAM, then releases the Z80.
SW2 - USER - General purpose. Can be used to change what the machine boots into. Can be sensed in programs as "The operator pressed the button".
SW3 - PICO_RST - Resets the Raspberry Pi Pico only. Z80 CPU
remains running. Useful for video firmware development and restarting
graphics/keyboard input. Additional use: Put R. Pi Pico into USB drive mode.
Updated 8/1/2026
No comments:
Post a Comment