Projects /

A2FPGA: Five Cards, One Board

A fork of the A2FPGA Multicard Core that adds Videx VideoTerm 80-column card emulation and ThunderClock Plus clock card emulation to a Tang Nano 20K FPGA board — alongside three upstream bus timing bug fixes that had gone unnoticed for two years.

Completed November 2025 – March 2026 Tang Nano 20K / GW2AR-18C Rev a2n20v2
apple-iifpgaemulationretrocomputingveriloga2fpga-series
↗ Repository

The A2FPGA Multicard Core is an open-source FPGA project that emulates multiple Apple II expansion cards simultaneously from a single physical board — a Tang Nano 20K plugged into one slot of a real Apple II. The upstream project already emulated the Mockingboard, Super Serial Card, SuperSprite, and Disk II. This fork adds two more: the Videx VideoTerm 80-column display card and the ThunderClock Plus real-time clock card.

Both cards are complete, firmware-accurate emulations that pass the same software tests a real card would. CardCat, Apple Pascal, ProDOS, and original Videx demo software all work without modification.

The original 1981 Videx VideoTerm card (top) next to the A2FPGA that emulates it (bottom)

From Composite to HDMI

The Apple II+ was designed to display on a television. Its video output is NTSC composite — a signal format optimized for 1970s consumer TVs with low resolution, color bleeding, and scan line artifacts that were considered normal at the time. On a period-correct TV it was fine. On any modern display it looks like what it is: a 45-year-old analog signal from a machine that predates the concept of pixel-accurate display.

The A2FPGA solves this by bypassing composite output entirely. Rather than capturing and upscaling the analog signal, it monitors the Apple II’s video memory directly — the same text pages and hires graphics pages that the Apple II’s video hardware reads — and generates a clean HDMI signal from the raw memory contents. The result is crisp, artifact-free output on any modern monitor, rendered at the correct character and pixel boundaries rather than smeared through an analog chain.

The Videx VideoTerm emulation extends this pipeline. When 80-column mode is active (signaled by the AN0 soft switch), the A2FPGA substitutes its own Videx VRAM rendering for the Apple II’s native 40-column text, producing 80-column output at 640×432 within the 720×480 HDMI frame — sharper than any physical Videx card connected via composite ever looked.

What This Fork Adds

Videx VideoTerm (slot 3) — The MC6845 CRTC, 2 KB video RAM, firmware ROM, 80-column rendering pipeline, 40/80-column switching via AN0, and full Apple Pascal compatibility. The FPGA renders 80-column text at 640×432 within a 720×480 VGA frame, output over HDMI to any modern display.

ThunderClock Plus (slot 1) — Full NEC uPD1990AC serial calendar clock emulation with ProDOS auto-detection. ProDOS finds the ThunderClock signature bytes during boot and installs the firmware’s built-in clock driver automatically — no additional software needed. File timestamps work immediately after boot.

Three upstream bus timing fixes — Discovered during Videx development, these bugs had existed undetected in the upstream codebase for approximately two years: a CPLD bus OE timing error causing ~100ns of bus contention, an Apple ][+ INTC8ROM logic error that permanently breaks all expansion ROM reads after any slot 3 access, and an SSC expansion ROM ownership bug causing bus contention in multi-card builds.

The Hardware

The A2N20v2 board carries a Sipeed Tang Nano 20K module (Gowin GW2AR-18C, 20K LUTs) mounted on a PCB with an Apple II edge connector, a Xilinx XC9572XL CPLD as a bus bridge, SDRAM, and a USB-C connector. The CPLD is the key: it interfaces between the 1MHz Apple II bus and the 54MHz FPGA fabric.

With all five emulated cards enabled (Videx, ThunderClock, SSC, Mockingboard, SuperSprite), the build uses 45 of 46 BSRAM blocks (98%), 6753 of 20736 LUTs (33%), and 4433 of 15552 registers (29%).

Apple II+ running DOS 3.3, displaying via HDMI to a modern ViewSonic monitor

Slot Configuration

SlotEmulated Card
1ThunderClock Plus
2Super Serial Card
3Videx VideoTerm
4Mockingboard
7SuperSprite

The physical A2FPGA card can be installed in any slot. With Videx enabled, slot 3 is recommended since the Videx emulation claims that slot’s address space regardless of where the physical card sits.

CardCat detecting all five emulated cards from a single A2FPGA board

HDMI Compatibility

The A2FPGA’s HDMI output works correctly with most flat-panel monitors and TVs after the AVI InfoFrame and control period fixes submitted upstream. One known exception: the Samsung Odyssey Neo G9 does not display the signal directly from the A2FPGA, but works perfectly when an HDMI switch is placed between the A2FPGA and the monitor. The switch appears to recondition the signal electrically, suggesting the Tang Nano 20K’s HDMI output is marginal for strict high-end displays. An HDMI switch is a reliable workaround.

Articles

Part 1The Card That Made the Apple II Serious Feb 2026 Part 1Why Microsoft CP/M Didn't Recognize an 80-Column Card Apr 2026 Part 2Building the Rendering Pipeline Mar 2026 Part 2From the Disk II ROM to the Z-80's First Instruction Apr 2026 Part 3The Clock Card That Just Works Mar 2026 Part 3Apple Memory, Through Z-80 Eyes Apr 2026 Part 4Four Bugs That Lived in the Dark Mar 2026 Part 4The Handoff: 6502 to Z-80 Apr 2026 Part 5The BIOS That Half-Exists Apr 2026 Part 6The BIOS Factory Apr 2026 Part 7From the Reset Vector to the Device Scan Apr 2026 Part 8The Cooperative-CPU Round-Trip Apr 2026 Part 9Every Difference: A Complete Inventory of CP/M 2.20 vs 2.23 Apr 2026 Part 10The CPU Switch, and What's Left Apr 2026 Part 11Verifying It in the Emulator Apr 2026

Dev Logs

ThunderClock complete. ProDOS timestamps work. Mar 3, 2026 Videx emulation complete Feb 22, 2026 Samsung G9 won't display — HDMI switch fixes it Feb 19, 2026 CI/CD attempt — OSS toolchain doesn't produce a usable bitstream Feb 16, 2026
← All Projects