Minicomputer based on Z80 microprocessor and designed with different cards and backplane bus

Public Chat
Similar projects worth following
This is a small microcomputer based on Z80 microprocessor. This computer is designed in backplane style, they have different cards that able to expand capabilities. The core of microcomputer that contains: Z80, 8KB ROM, 32KB RAM and IO ICs like PIO and UART.

My first idea was use 6502 CPU or similar because never used Z80 CPU in depth only in theory. But, when I put hands on it, like more and more. Initially I'd used some ideas from and basic projects and core from (Grant Searle). The simplicity to manage I/O and memory space help organize memory map than a other processor with a single memory mapping for all things, like 6502. The Z80 have two signals to manage IO requests (IORQ) and Memory Requests (MREQ), this signals are enabled/disabled using in/out instructions or ld (move) memory instructions.

The second step was a design physical layout of main board and how construct a main bus and backplane standard. The backplane system uses 40 pins edge-connector integrated on board similar that used on Expansion bus of Dragon Computer. 

The hardware:

  • CPU-IO Board Card: This is a core of system that contains main CPU (Z84C0008PEG) at 4MHz of main clock generated by a 4MHz clock generator, 32KB SRAM and 8KB or 32KB EEPROM, UART 16550 and PIO 82C55. This card can connect directly to USB PC port to able communicate via serial terminal to operate to core monitor system. The latest version can be powered via USB. This board basically are a computer core, can works alone, but their functionalities depends on EEPROM size:
    • Core with 8KB EEPROM only works with serial port as a system console.
    • Core with 32KB EEPROM can use graphics/sound card and other devices.
  • Graphics and Sound Card: This part that contains a Video Display Processor (TMS9918A) and Programmable Sound Generator (AY-3-8910). The VDP needs a crystal with a critical value like (10.738635MHz) that generate sync signals this is very important thing to use TMS9918A. I tested other crystals without success, and finally use recommended value by datasheet. One other image sync issues that produced by using some PAL color CRTs the image was not seen correctly with clear synchronization problems. Finally works with Philips Monochrome CRT 12". This board have an additional IO Port connector that provides the PSG.
  • The backplane: I working on it, now. I design a simple backplane with a 4 expansion 40 pos. edge female connectors and main power supply. Additionally backplane is have an additional decoding TTL ICs to select more devices are connected to expansion ports.

The software:

First I began with zmac ( Macro Cross Assembler Compiler to compile my first tests on IO ports and my first "hello, world" that blinks a simple LED. Next get a bootloader Grant Searle core program and test it into my core system. In the Searle bootloader don't uses my UART IC and needs adapt and create new IO routines that works with 16650 UART.

Now separate all code to different asm files and linked after with LD80 linker.

KiCAD schamatics and PCBs

x-zip-compressed - 828.66 kB - 08/10/2019 at 01:20


  • 1 × Zilog Z84C0008PEG Z80 CPU
  • 1 × CP82C55A IO Controller
  • 1 × PC16550DN UART
  • 1 × FT232RL Semiconductors and Integrated Circuits / Misc. Semiconductors and Integrated Circuits
  • 1 × TC55257CPI Memory ICs / Static RAM (SRAM)

View all 9 components

  • All in one board and more ...

    Tomeu Capó08/03/2022 at 11:16 0 comments

    After a long time of not updating my Z80 project page, I upload the latest software and hardware update.

    • Software upgrades:
      • Divided source code into different assembler files and assembled separate with zmac and linked then with ld80 linker and generate HEX files, instead assembler all code into one HEX and then concatenate with BASIC HEX file. Clean assembler process and do with propper utilities, assembler all to rel (object files) and link all them.
      • Separate declarations and constants into .inc files.
      • Create a keyboard driver to read C64 keyboard using PSG (Same idea as LM80C Leonardo Milliani Computer).
      • Using VDP graphics routines from Leonardo Milliani.
      • Create new casette routines that able to save and load data from/to magnetic tape.
    • Hardware upgrades:
      • Created all-in-one PCB microcomputer with expansion bus, cassete port and CF IDE port. Also including CTC and Interrupt priority manager with '148 decoder and '373 register.
      • Created cassette interface that uses PPI port to sends data to audio using FSK modulation (same schema as Dragon 32).
    No hay ninguna descripción de la foto disponible.

    All updates are commited to github.


  • Development Board

    Tomeu Capó12/26/2021 at 20:11 0 comments

    To test directly code into SBC board I use EEPROM emulator from Kris Sekula Kris-Sekula/EPROM-EMU-NG: EPROM Emulator Project with Arduino ( Its very useful to test directly code into real hardware without burn EPROMs.

  • Backplane and rack enclosure

    Tomeu Capó07/20/2020 at 16:08 0 comments

    Computer now have an aluminum rack enclosure with backplane inside. This is a adhoc enclosure based on old CNC computer rack enclosure with eurocard size but not use this card sizes. Maybe in the future change card sizes and adjust to eurocard size. 

    Backplane board component mounting process:

    Rack enclosure build and measurements verify with final boards:

    Computer mounted and working:

  • Latest code improvements

    Tomeu Capó07/20/2020 at 15:45 0 comments

    Now I learn about to prepare all routines to support console output mode redirect to VDP in textmode. Until now can view all text printed out on serial port and VDP display, solved bugs into my first text scroll up routine. 

    Try with simple BASIC program scrollup correct effect:

    Change into RST 08 service routine to putchar to VDP and send to Serial:

              .ORG     0008H
    RST08     DI
              CALL     VDP_PUTCHAR
              JP       TXA

    Create main service routine dispatcher RST 20, this is a firmware main service routine that dispatch any firmware function, like: VDP or PSG control. 

    For example, to change screen mode:

    LD      A, 0      ; Mode 0 (TEXTMODE)
    LD      B, 3      ; Call service routine number 1 (VDP_SET_MODE)
    RST     $20    

     Or change screen color:

     LD      A, $F5   ; White foreground and light blue background
     LD      B, 0     ; Call service routine number 0 (VDP_SETCOLOR)
     RST     $20          

  • Graphics and Sound Card

    Tomeu Capó02/05/2020 at 22:05 0 comments

    Recently design additional board to support output display graphics/text and sound generation. This card uses TMS9918 Video Display Processor and AY-3-8910 Sound Generator. This card have same dimensions like main CPU-IO board and controlled by main TTL decoder address IC.

    The graphics VDP design are used similar than and using 32KB Static RAM for video RAM explanied in

  • Version 1.1

    Tomeu Capó12/13/2019 at 16:46 1 comment

    In version 1.1 modify address decoding circuit and replace "OR" logic gates to 74138 TTL decoder to switch between RAM/ROM and devices like: PIO, UART, VDP and SOUND Generator.

    Otherwise, design an external decoder to other devices put an OR gate between /EN internal decoder 138 and /IORQ and A6.

View all 6 project logs

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates