Skip to the content
PCBKitNew board
6 layers253.6 × 134.2 mmCadzilla, the printed circuit board in 3D

CADzilla is an S-100 bus board built around the Hitachi HD63484 Advanced CRT Controller (ACRTC) paired with a Brooktree Bt453 video DAC.

Size
253.6 × 134.2 mm
Copper layers
6
Thickness
1.6 mm
Parts
172
Nets
483
Pads
1,869
Tracks, vias
6,050, 1,311
Pours
4
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
21 Sep 2026
Updated
5 Nov 2026

Overview

Cadzilla is an open-source printed circuit board by ToddHoug, from the ToddHoug/cadzilla repository on GitHub. It is a 6-layer board of 253.6 × 134.2 mm with 172 parts on 483 nets, routed with 6,050 tracks and 1,311 vias.

It is built around the 74F245D, 74F676PC and 74LS573PC, with the 74LS04PC, 74LS273PC and 74LS85DC among its other parts. Its parts include 87 capacitors, 60 ICs, 11 diodes, 7 resistors and 3 connectors. It belongs with the FPGA and CPLD boards of this library.

Main components

7

README

README.md

CADzilla

CADzilla

CADzilla is an S-100 bus board built around the Hitachi HD63484 Advanced CRT Controller (ACRTC) paired with a Brooktree Bt453 video DAC. The board carries about 2.2 MBytes of video memory in total:

  • a 2 MByte frame buffer for 8-bit-per-pixel display modes at resolutions up to 1024x768;
  • a 256 KByte, 1-bit-per-pixel overlay layer, mapped pixel for pixel onto the frame buffer and shown on top of it in the Bt453's overlay color. It can be drawn, shown and hidden without disturbing the picture underneath, which suits text, cursors, grids and annotations.

Board design project: KiCAD schematics/PCB, GAL16V8 PLD logic, and supporting software projects that run on it (assembled and tested on an emulator).

For the full board reference, see the CADzilla User Reference Manual.

Design philosophy

CADzilla exists for one reason: to enjoy the graphics board design process the way I did it forty years ago. The circuit architecture, schematic design, and PCB layout were all done by hand, with no AI assistance — the way boards like this were designed back then.

Every component on the board, aside from the modern SRAM used for the frame buffer, is a part that would have been available in 1984, when the Hitachi HD63484 was released and the S-100 bus was still a going concern. As far as I could find, no one had ever built an HD63484-based S-100 board — so I built one.

AI did play a role, but not in the hardware: it made it possible to build a CP/M software development environment and toolchain for the board that I could never have put together on my own.

Layout

  • schematics/ — KiCAD project (schematic, PCB, libraries, fab outputs)
  • pld/ — GAL16V8 PLD source (src/) and assembled fuse maps (jed/)
  • software/ — software projects targeting the board, grouped by toolchain
    • asm/ — Digital Research ASM + LOAD: hello, firstdraw, drawdemo
    • m80/ — Microsoft M80 + L80: the czgfx graphics library, gfxdemo, czbasic, testpat
    • rmac/ — Digital Research RMAC + LINK: rhello, ddcz (GSX-80 driver)
    • z88dk/ — z88dk z80asm (host cross-assembler): the cz88gfx graphics library, zhello, z88demo, autodemo
    • zcc/ — z88dk zcc (C): chello, cgfxdemo, cgsxdemo, dxfview
  • docs/ — design notes and reference datasheets
    • docs/cadzilla-manual.pdf — user reference manual
    • docs/images/ — logo and other documentation images
  • tools/ — build/assemble/program scripts
  • tests/ — emulator test programs and expected output

Getting started with the software

The software runs under CP/M 2.2 on altairsim, an Altair/S-100 simulator with a CADzilla board. Requirements:

  • altairsim, built at ~/altairsim/build/altairsim, on PATH, or named by $ALTAIRSIM.
    • To see the graphics, altairsim must be built with SDL3, with an X11 or Wayland backend.
    • Without SDL3 it builds headless: everything here still builds and runs, but no video window ever opens.
    • altairsim -n -x 'SHOW VERSION' says which build you have. Its video row should read SDL3 -- windowed (...), not none -- headless (null display).
    • To fix it, build SDL3 with altairsim's own script and link it in statically. The headers are listed in altairsim's docs/building-linux.md; libxtst-dev is required, and without the X11/Wayland ones SDL3 gets no window backend:
      bash
      sudo apt-get install -y build-essential cmake git ninja-build pkg-config \
        libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxfixes-dev \
        libxss-dev libxtst-dev libwayland-dev libxkbcommon-dev wayland-protocols \
        libdecor-0-dev libasound2-dev libpulse-dev
      cd ~/altairsim
      tools/build-sdl3-static.sh           # SDL3, pinned version, into ~/opt/sdl3-static
      cmake -S . -B build -DCMAKE_PREFIX_PATH=$HOME/opt/sdl3-static
      cmake --build build
      The configure step should report SDL3 found -- video boards enabled (windowed);
  • a desktop session, for the window: it can't open over plain ssh;
  • bash 4.4 or later, python3 and GNU coreutils;
  • z88dk, for the z88dk and zcc projects only: sudo snap install z88dk --edge. The snap only sees paths under $HOME, so the clone has to be there too.

After cloning, run:

bash
tools/setup.sh

It checks the requirements, then builds every project. Each project gets its own altairsim machine and CP/M disks in work/, and its program on that disk. Nothing is installed. Without z88dk, the projects that need it are skipped. tools/setup.sh --check runs only the check.

To run a program, start altairsim from the project's work/:

bash
cd software/asm/hello/work
altairsim cadzilla.toml
A0>HELLO
  • Ctrl-E stops the machine and gives you the altairsim> monitor, RUN carries on, and QUIT leaves.
  • Wait a moment at A0> before stopping: the BIOS writes its last disk track to the image only then.

Each project has its own build.sh, which rebuilds it onto its disk, e.g. software/m80/gfxdemo/build.sh.

  • --clean resets the project's disks from the pristine images first.
  • A failed build exits non-zero, shows the error lines, and leaves the full CP/M transcript in build/<NAME>.LOG.

tools/altairsim/README.md has the details, and how an AI assistant drives the same machines.

Board specification

I/O address map

The board decodes a single 8-byte-aligned base I/O address, set by SW1 (see below). All board registers are addressed as offsets from that base address:

OffsetRegisterAccess
Base + 0HD63484 Address/Status Register (RS = 0)Read/Write
Base + 1MODE register (board configuration, write only)Write only
Base + 2HD63484 Control/FIFO Register (RS = 1)Read/Write
Base + 3Reserved / not decoded—
Base + 4–Base + 7Bt453 video DAC registersRead/Write

MODE register (Base + 1, write only)

BitNameDescription
0HSPOLHorizontal sync polarity: 0 = positive sync pulse, 1 = negative sync pulse
1VSPOLVertical sync polarity: 0 = positive sync pulse, 1 = negative sync pulse
2AMODEAddress mode: 0 = single access mode, 1 = interleaved access mode
3OLENOverlay enable: 0 = overlay plane blanked (shift register loads zeros), 1 = overlay pixels displayed over the frame buffer
4OLSELOverlay select: 0 = lower half, 1 = upper half of the overlay memory — selects which 64K-word half of the 128K-word overlay SRAM a drawing-mode CHR screen addresses
5–7—Reserved

The overlay (U19, 1 bit per pixel, mapped 1:1 onto frame-buffer pixels) is drawn by targeting an ACRTC screen with the CHR bit set in its Memory Width register. A CHR screen only has a 64K-word address space, so OLSEL selects which 64K-word half of the 128K-word overlay SRAM that screen addresses. OLSEL is cleared to 0 by reset. A CHR screen must never be displayed — overlay display is driven by the frame buffer's own display cycles, independent of OLSEL.

Configuration DIP switch (SW1)

SW1 is an 8-position DIP switch that sets the board's I/O base address and host interface options:

SwitchFunctionOnOff
SW1-1 – SW1-5I/O base address (address bits 7:3)——
SW1-6HD63484 host bus width8-bit host interface: DACK* follows RESET*, so it is low during reset16-bit host interface: DACK* is pulled high
SW1-716-bit address decode enableDecodes the full 16-bit I/O address (A15–A8 must be 00h)Decodes only the 8-bit I/O address
SW1-8Interrupt enableHD63484 interrupt request connected to the S-100 busInterrupt request disconnected from the S-100 bus

Frame buffer and feature support

  • About 2.2 MBytes of video SRAM in total — no refresh cycles required
  • 2 MByte frame buffer (U11–U18): 8 bits per pixel only, Graphics Address Increment (GAI) = 8
  • 256 KByte 1-bit-per-pixel overlay (U19, 128K x 16):
    • mapped 1:1 onto frame-buffer pixels, and read during the frame buffer's own display cycles;
    • shown over the picture in the Bt453's programmable overlay color, and turned on or off with MODE register bit OLEN;
    • drawn through an ACRTC screen with CHR set, which is never displayed. MODE register bit OLSEL selects which half of the overlay it addresses
  • The ACRTC's own hardware cursor, superimposed access mode, light pen, zooming, video attributes, external sync, and DMA transfers are not supported. A cursor can be drawn in the overlay instead
  • Interrupts are supported, enabled via SW1-8

See the board manual for full details.

License

Copyright (C) 2026 Todd Houg.

The manufacturers' datasheets in docs/datasheets/, and the third-party CP/M tools on the disk images, are not covered by either license. See LICENSE for the full breakdown.

See CLAUDE.md for AI-assistance working notes.

Parts

172
QtyValueFootprintReferences
470.1ufS-100:C_Rect_L9.1mm_W2.5mm_P7.62mm_MKTC1, C2, C10, C11, C12, C13, C14, C17, C18, C19, C20, C21, C26, C27, C28, C29 +31
2174F245S-100:DIP-20_W7.62mm_SocketU20, U21, U22, U23, U24, U25, U26, U27, U28, U29, U30, U31, U32, U33, U34, U35 +5
180.1ufCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC70, C71, C72, C73, C74, C75, C76, C77, C78, C79, C80, C81, C82, C83, C84, C85 +2
170.1ufS-100:C_Rect_L9.1mm_W2.5mm_P7.62mm_Small_PadsC8, C15, C16, C22, C23, C24, C25, C31, C32, C38, C39, C45, C51, C52, C58, C61 +1
101N4148Diode_SMD:D_0805_2012Metric_Pad1.15x1.40mm_HandSolderD2, D3, D4, D5, D6, D7, D8, D9, D10, D11
974F676S-100:DIP-24_W7.62mm_Socket_Small_PadsU2, U3, U4, U5, U6, U7, U8, U9, U10
9CY62136ESLPackage_SO:TSOP-II-44_10.16x18.41mm_P0.8mmU11, U12, U13, U14, U15, U16, U17, U18, U19
7GAL16V8S-100:DIP-20_W7.62mm_SocketU45, U46, U48, U55, U56, U57, U58
30.1ufCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC66, C67, C68
374ALS857S-100:DIP-24_W7.62mm_SocketU52, U53, U54
375RResistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_HorizontalR8, R9, R10
210ufS-100:C_Rect_L9.1mm_W2.5mm_P7.62mm_MKTC69, C88
233RResistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_HorizontalR11, R12
274LS573S-100:DIP-20_W7.62mm_SocketU49, U50
11.2VDiode_THT:D_A-405_P7.62mm_HorizontalD1
110KResistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_HorizontalR1
14.7KResistor_THT:R_Array_SIP8RN1
174LS04S-100:DIP-14_W7.62mm_SocketU42
174LS244S-100:DIP-20_W7.62mm_SocketU51
174LS273S-100:DIP-20_W7.62mm_SocketU41
174LS85S-100:DIP-16_W7.62mm_SocketU44
174LS86S-100:DIP-14_W7.62mm_SocketU43
1ACO-xxxMHzOscillator:Oscillator_DIP-14Y1
1BT453_DIP40S-100:DIP-40_W15.24mm_SocketU47
1Conn_02x08_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x08_P2.54mm_VerticalJ2
1DE15_Socket_HighDensityConnector_Dsub:DSUB-15-HD_Socket_Horizontal_P2.29x1.90mm_EdgePinOffset3.03mm_Housed_MountingHolesOffset4.94mmJ1
1FerriteBead_SmallS-100:C_Rect_L9.1mm_W2.5mm_P7.62mm_MKTFB1
1GAL16V8S-100:DIP-20_W7.62mm_Socket_Small_PadsU60
1HD63484PS-100:DIP-64_W22.86mm_SocketU1
1LM1084-5.0Package_TO_SOT_THT:TO-220F-3_Horizontal_TabDownU59
1RSETResistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_HorizontalR7
1S100_MALES-100:S100_MALEP1
1SW_DIP_x08S-100:DIP-16_W7.62mm_SocketSW1

Questions

How big is the Cadzilla PCB?

It measures 253.6 × 134.2 mm and has 6 copper layers, 1.6 mm thick.

What parts does the Cadzilla use?

172 parts, built around the 74F245D, 74F676PC, 74LS573PC and 74LS04PC. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Cadzilla KiCad files?

From the ToddHoug/cadzilla repository on GitHub, at the commit this page was made from: the board is schematics/cadzilla.kicad_pcb and its schematic schematics/Data BUffers.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Cadzilla design in my own project?

Its repository states no licence, so its author keeps all rights: ask ToddHoug before reusing the design.

Similar boards

  • 2 layers156 × 100.1 mmVIO MPF v2.0, the printed circuit board in 3D

    VIO MPF v2.0

    electrickery/VIO_MPF_I

    Extended firmware for the 6845 based video card for the Microprofessor MPF-I(b)

    64 parts4
  • 2 layers129.5 × 100 mmQl Cumana, the printed circuit board in 3D

    Ql Cumana

    alvaroalea/QL_Cumana_FLoppyController

    A clone of the Cumana's Disk Interface for the Sinclair QL

    40 partsCERN-OHL-S-2.0
  • 2 layers229.9 × 83.8 mm4b computer rev1, the printed circuit board in 3D

    4b computer rev1

    ethanjamesauto/modular_8bit_computer

    35 parts2
  • 2 layers228.6 × 139.7 mm80cvc, the printed circuit board in 3D

    80cvc

    reifsnyderb/Atari-1090XL-80CVC

    Re-make of the Atari 1090XL 80 column card for monochrome monitors.

    78 parts3GPL-2.0
  • 2 layers320 × 150 mmDigiTrainer, the printed circuit board in 3D

    DigiTrainer

    RetroStack/BitStack-DigiTrainer

    A trainer board for digital electronics

    262 parts2MIT
  • 2 layers486 × 306.3 mmMonacoGP, the printed circuit board in 3D

    MonacoGP

    stonedDiscord/MonacoGP

    Sega MonacoGP TTL Boards

    257 parts1
  • 2 layersYa4b alu, the printed circuit board in 3D

    Ya4b alu

    lafehubert/electronics

    A place for info and code relating to my electronics projects

    133 parts
  • 2 layers630 × 300 mmSecretBase, the printed circuit board in 3D

    SecretBase

    stonedDiscord/SecretBase

    SEGA Secret Base Arcade Game

    441 parts