Homebrew CP/M-computer powered by Arduino Nano

Homebrew computer under CP/M with TV Out and PS/2 keyboard powered by Arduino Nano

Similar projects worth following
I want to tell you about my project "cpm4nano" - a complete CP/M system based on Arduino Nano 3.0.

Currently one (!) Arduino Nano (!) in my project:
- emulates the Intel 8080 processor, 64 KBytes RAM (with two FRAM chips) + 4 FDD with 100 diskettes (with SDHC card);
- with the help of the PS/2-UART converter on STM8 allows you to enter information from the keyboard (allows you to switch English/Russian languages, upper/lower case, enable lock for scrolling text on screen);
- displays text information on the TV screen (20 rows with 40 cols or 80 cols on two virtual screens, between which you can switch) without jitter (with duplication of information to the PC through serial channel);
- receives/sends data from/to the PC through serial port via XMODEM;
- data input/output via magnetic tape or audiofile;
- loads the OS CP/M and runs its programs (including BASIC, C, ADA, FORTH, LISP, FORTRAN, FOCAL, MINOL).

Stay tuned for updates!

Current project shematic:

Current project appearance:

Chars of font:

on LCD TV:

on CRT TV:


TV Out:


Keyboard controller:

Results of successfully passed tests:


CPU Test by Ian Bartholomew:

Kelly Smith Test:


Successfully launched compilers and interpreters of programming languages:







compilation + linking:


Star Trek (wrritten in Ada):



compilation + linking:



compilation + linking:



Stay tuned for updates!

  • 1 × Arduino Nano 3.0
  • 1 × STM8S103F3P6 Microprocessors, Microcontrollers, DSPs / Microcontrollers (MCUs)
  • 2 × FM24C256-G Memory ICs / Other Memory ICs

  • My homebrew Arduino Nano-based CP/M computer in action

    Alexey Voronin10/11/2021 at 07:38 0 comments

    My homebrew Arduino Nano-based CP/M computer in action (recording with TV tuner):

    • power on
    • memory test
    • CP/M loading
    • DIR command
    • virtual screens toggle
    • CPU test
    • BASIC

  • Current look

    Alexey Voronin06/05/2021 at 07:52 0 comments

  • 8080/8085 CPU Exerciser

    Alexey Voronin04/11/2021 at 11:21 0 comments

    8080/8085 CPU Exerciser from Ian Bartholomew & Frank Cringles successfully completed (screenshot from TV tuner):

  • nano4tv in action - scrolling!

    Alexey Voronin12/28/2020 at 15:24 0 comments

    Video output unit based on Arduino Nano + 23K256 in action - per-pixel (smooth) and character-by-character (step) scrolling up and down (the signal is recorded with a TV tuner.):   

    A similar approach (Roller RAM) was used in 8-bit Amstrad computers.

  • Video card for "nanocomputer"

    Alexey Voronin12/21/2020 at 21:01 0 comments

    I started a companion project to expand the graphics capabilities of my "nanocomputer". Another Arduino Nano acts as a video card that provides a monochrome image output on TV with a resolution of 320 x 244 (like the Sega Genesis, 240p format)! And this is not drawing lines in the demo format, this is a module with  pixel video memory - I use SPI RAM 23K256 as it. As a basic option, I want to make time-divided access to this chip - during 244 active pixel lines, the video processor owns it, and the remaining 68 lines - the memory can be used by the main processor. Well, now I just for "proof-of-concept" implemented control via UART. This is the picture my video card gives out after loading via UART into video memory - I converted a screenshot from the FoxyLand game for Sega Genesis to monochrome - the picture was taken using a TV tuner (I dug up my old 609 Beholder in the bins):

  • CRT TV video

    Alexey Voronin12/13/2020 at 07:58 0 comments

    I added video recorded from CRT screen:

  • Boot screen

    Alexey Voronin12/11/2020 at 08:39 0 comments
  • I2C indication

    Alexey Voronin12/10/2020 at 17:16 0 comments

    Added indication of access to the I2C bus (in fact, access to FRAM) - an LED that lights up when the SCL line is low. The quick-and-dirty approach to connect the LED through a 2 kOhm resistor did not pass at all - there was not a single memory module on the bus - it turned out to be too strong pull-up, although it worked after 4.7 kOhm, but in 7407 there are free pins, so through this buffer it turned out more reliable.

    Now the RAM "module" schematic looks like this:

  • Redesign

    Alexey Voronin12/08/2020 at 11:21 0 comments

    I did a redesign of the project, now it looks like this:

    Evaluated the influence of the size of the instruction cache on the real speed of the "nanocomputer" operation using the example of the speed of thinking the first move by the machine in MICROCHESS (results for the TURBO mode, the video image was not drawn):

    • without cache - 291 seconds;
    • 4-byte cache (too small, overhead does not pay off and degrade speed) - 580 seconds;
    • cache 8 bytes (optimum) - 21 seconds !!!;
    • cache 16 bytes (too large, the overhead does not pay off) - 26 seconds.

  • i8080-based system emulator on Rust

    Alexey Voronin01/03/2020 at 20:21 0 comments

    A companion project has begun - an i8080-based system emulator on Rust - me select from the list of binary files in the program directory the desired one (for example, BASIC, Minol or chess) and run:

    The emulator successfully passed the famous "exerciser" test:

View all 21 project logs

Enjoy this project?



m. ohlerich wrote 03/27/2022 at 07:43 point


which FOCAL interpreter do you use?

  Are you sure? yes | no

Alexey Voronin wrote 07/30/2023 at 10:44 point



;            5628 MEADOW CREST DRIVE
;            DALLAS, TEXAS 75230    (214) 368-6820

  Are you sure? yes | no

Ken Yap wrote 12/11/2020 at 12:32 point

I like your "case". Very clever. 👍

  Are you sure? yes | no

Alexey Voronin wrote 12/11/2020 at 14:13 point

Thanks!  🦊

  Are you sure? yes | no

Kn/vD wrote 12/02/2019 at 14:55 point

This must be one of the coolest projects I have seen recently. Great stuff!

  Are you sure? yes | no

Alexey Voronin wrote 12/02/2019 at 15:15 point

Thanks!!! Your PIC18 computer is great!

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

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