Sitelet https://github.com/titmouse001/ZX-Spectrum-48k-Arduino-Interface
Skip to content

Latest commit

 

History

346 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ZX Spectrum 48k Game Cartridge Interface using an Arduino

This is an Arduino-based ZX Spectrum 48K game loader interface. It loads the following from a microSD card (FAT or FAT32) with long file name support:

  • SNA - Load & Save 48K Snapshots
  • Z80 - load ver1/2/3 48K snapshots
  • SCR - View & Take screenshots
  • TXT - Read ASCII text files

The interface displays an on-screen menu that can be navigated via Spectrum keyboard or joystick. Supports both Kempston joystick and Mega Drive controller, the controller allows a 2nd fire button to be used as jump. For compatibility, the interface can also start up in the standard Spectrum ROM by holding down the menu or fire2 button during power-up.

2026 Update

PCB Gerbers (latest V2.60): Download Gerber Files

In-game pause menu

Pressing the PCB button while playing a game takes you the in-game pause menu screen. Currently it supports:

  • Resume - back to playing the game
  • Save - save game state to snapshot file
  • SloMo - slowdown gameplay
  • Poke - enter game cheats
  • Screenshot - saves to the "/Shots" folder
  • Memory Viewer - inspect memory contents
  • Exit - return to the main menu
In-Game Pause Menu

Ver 0.21 - with 90° cartridge design

Interface Features

The interface loads games from a microSD card in about a second, using a slot at the back. Games can be in .sna or .z80 format and stored either in folders or in the root directory of a FAT or FAT32 formatted SD card.

The built-in browser displays 24 titles per page on the ZX Spectrum screen. Navigation is done with Q/A and Enter or with a Kempston joystick. If you enter multiple nested folders, the top menu option [/] will take you back to the root from any directory depth (note: there is no back to parent-folder option due to memory limits or the Arduino Nano). Pressing the menu button during a game returns you to the game browser.

The browser can also open .scr Spectrum screen files and .txt text files. These can be exited with the Enter key.

PCB Design (Ver 2.40)

Circuit Diagram
The 74HC574 latch replaces the previous 1‑bit pulse‑halt protocol, which was ok for keyboard input but too slow for large 
data transfers such as screenshots.

Hardware Design (Ver 0.21 - prototype)

I've been using JLCPCB with EasyEDA for my PCB design and fabrication, as EasyEDA is a free and simple-to-use circuit designer

Front Back Photo view

PCB Design (Ver 0.21)

Circuit Diagram

The hardware design uses a minimal chip count. It includes a 27C256 EPROM, which holds the Z80 machine code for accepting data and restoring the snapshot state. The Arduino manages data transfer to the ZX Spectrum, coordinating the interface. The interface primarily utilizes the data bus, with glue logic enabling the external ROM’s function.

To address issues caused by returning to the original internal ROM after loading and starting a game, the setup uses a duplicated Spectrum ROM. The external EPROM is split into two halves: the first contains the browser and game‑loading code; once a game is loaded, the second half provides the stock Spectrum ROM.

  • 74HC165D – The Arduino Nano has limited I/O pins, so a shift register is used to handle joystick inputs.
    • Two fire buttons are supported if using a Mega Drive controller (fire2 mapped to Up).
    • The PCB menu select button is also mapped into the same shift register, leaving one bit free for future use.
    • The Arduino masks out the menu button from the joystick data during gameplay.
  • 74HC245D – Used as a transceiver (IC is unidirectional, but I've tied DIR to +5 V)
    • Enables high-impedance (Z) state (detaches Arduino from the data bus)
  • 74HC32 – Provides the necessary glue logic to manage and monitor I/O signals.
  • EPROM 27C256 – Stores all the Z80 code, including the browser and game launch routines.

https://oshwlab.com/titmouse001/zx-spectrum-interface (link to older Ver 0.14)

TAG: Older Software Support for Legacy Circuit Designs (v0.xx) You can skip the ROM assembly; pre-compiled bins are here: Ver0.24-27C256.bin

Initial Prototypes...

Early Breadboard Prototype

Prototype Evolving...

Next Step - The ROM

Warning: No EPROMs were harmed in the making of this project… but they were definitely burned a few times!

Making Progress ROM On Stripboard

Ver 0.01 First PCB - Mistakes Were Made!

Ver 0.14 - Older Flat PCB

This version had extra navigation buttons on the PCB, until I worked out a way to read the Spectrum keyboard using a cunning HALT-pulse fudging protocol I came up with!

Back Photo view Front

Releases

Packages

Contributors

Languages