Z80 CP/M Computer (using an Arduino)

A CP/M Z80 compatible computer using an Arduino as a 'host'.
*** A RunCPM Project***

Similar projects worth following
I've been wanting a CP/M compatible computer for years, not just a PC emulator but an actual physical machine.

I had looked at some amazing Z80 projects online, to build a machine and be able to hack CP/M onto it, but I wanted something -ANYONE- could build, with a tight budget with easily obtainable parts.

Then I came across the CPMDuino project by Marcelo Dantas (now RunCPM). This allowed me to use an Arduino to realise the goal.

(ADDENDUM: The micro now starts a customised version of Tiny BASIC on power-on, CP/M can be launched via 'cpm' keyword.)

Completed project using Marcelo Dantas' RunCPM to make an Arduino based Z80 CP/M computer.

Original CPMDuino

Current RunCPM Project


Font used in terminal application (Putty etc.)

TrueType Font - 86.16 kB - 01/23/2017 at 18:01


  • 1 × Arduino DUE 32-bit board with sufficient RAM for a 64K CP/M system
  • 1 × MicroSD SPI adaptor
  • 1 × Project case
  • 2 × Red LED Wired with resistor (for Power and disk activity)
  • 1 × MicroUSB to USB cable

View all 6 components

  • September 2017 Update

    Martian09/14/2017 at 14:19 0 comments

    Just an update on my computer project.  I'm still using it, I recently moved it's internals into a large enclosure (salvaged from another project), with plenty of room for future expansion and upgrades.

    My forked Tiny BASIC which I renamed as 'microBASIC' has had a number of new statements added as described previously, I've added some functions: SQR, SIN, COS and TAN.  The trig functions are scaled integers from -32767 to +32767.  I also changed the standard colours in BASIC to black on green, in honour of my old (and much loved and missed) TRS-80 Color Computer.  The serial speed has been increased to 115200.

    Funky block graphics, plotting sine and cosine functions:

    CP/M 2.2 functionality courtesy of the brilliant RunCPM:

  • Adding an 'Extended Color Basic'

    Martian02/19/2017 at 16:37 0 comments

    I took Tiny BASIC Plus and RunCPM and squished them rather inelegantly together! Both projects could compile on other hardware, I've broken that! (oops!)

    I figured out how to expand Tiny BASIC Plus and added a 'CPM' command. This then calls the setup and loop functions of RunCPM, in effect leaving native BASIC and booting Z80 CP/M like the C128.

    It then occurred to me that BASIC was LOADing and SAVEing to the root of the SD card, so I adjusted those routines to prefix filenames with "/B/0/", this makes BASIC files available to CP/M's drive B, user 0. The 'TE' editor is much nicer for writing code.

    Finally, I decided to add some ANSI spice!

    • CLS - Clears the screen
    • COLOR - Changes the text color, 9 resets to default
    • PLOT - Plots and lovely BLOCK graphic at co-ordinates X, Y

    In future, I may make BASIC and CP/M switchable, BASIC programs use 24K RAM and CP/M sits in a separate 64K.

    Power on display:

    FILES defaults to CP/M drive B:, user 0. Chaining a color graphics demo:

    Spectacular ANSI graphics:

    From BASIC, type 'CPM' to boot the OS:

    The BASIC graphics demo, now loaded into 'TE' in CP/M:

  • Upgrades Jan 27th, 2016

    Martian01/27/2017 at 12:28 0 comments

    I added a hardware reset button to the back of the unit, handy! One quick press and CP/M will reboot.

    Added a second LED

    Now there is a power-on LED

    ..and a disk activity LED

    When CP/M exits, they blink alternately until the USB plug is pulled or the Reset button is pressed.

View all 3 project logs

  • 1
    Step 1

    Marcello Dantas' RunCPM was flashed onto the Arduino Due. The MicroSD adaptor is connected via SPI. The good thing about RunCPM is that the SD card uses a standard PC filesystem, CP/M drives A to P are implemented as directories. This makes copying software and data over nice and easy. No arcane disk images.

    I tweaked RunCPM to my own tastes, minor things really like the displayed text on startup etc.

  • 2
    Step 2

    I bought a nice project case off eBay. I put some spacers in to mount a 3mm piece of plasticard that I would attach the Arduino and MicroSD adapter.I then drilled the appropriate holes.

  • 3
    Step 3

    Ready for the PCBs

View all 7 instructions

Enjoy this project?



FloppySoftware wrote 06/29/2017 at 20:19 point

Very nice project!

I'm glad to see that my humble TE text editor for CP/M is useful for somebody!

  Are you sure? yes | no

Martian wrote 09/14/2017 at 14:23 point

My apologies for not replying before.  My sincerest thanks to you for TE, it's a very useful program and it's great to see new software on the venerable CP/M OS.

  Are you sure? yes | no

Marcelo Dantas wrote 01/25/2017 at 00:18 point

This is simply AWESOME!!! Looks like the real thing, I just had a trip down memory lane right now.

Honored that RunCPM is behind such a beautiful machine.

  Are you sure? yes | no

Martian wrote 01/25/2017 at 06:54 point

Thanks, and thanks to you for RunCPM.  The machine is a joy to use, I'm gonna get many years out of it.  I've been doing some distraction-free writing on it.  I've also to look into the Lua aspect of it, but that sounds really interesting.

  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