Wednesday, November 12, 2014

I just wrote this small application which works as a framework to execute old 8bit Z80 applications on Windows machines.
The objective is to allow old Z80-CP/M 2.2 based application to run on up-to-date environments like Windows 7 or Windows 8.1.

Most of the CP/M emulators I was finding online were compatible only with MS-DOS, or would require the files to be loaded onto clumsy disk images before running.

This one runs the CP/M 2.2 applications directly from their Windows folders, which is seen as "Drive A:" by the running application.

The application doesn't implement console compatibility, so, unfortunately, it won't be able to accurately run Wordstar for example..

So far I am able to run UCD Mumps and multiple versions of Basic 80, and some other applications will load but crash due to some missing BDOS/BIOS functionality.

The code is all standard C, so it should be easily modified to compile on Linux, OSX and other environments.

Anyone interested on the source code and on helping with the project, please feel free to contact me.

I will be keeping the source code updated at



  1. Good job Marcelo!

    I'm a proud user of an Amstrad PCW and a fan of CP/M.

    In fact, I was trying to find a good CP/M emulator for my new Windows 8 machine.

  2. Hi there.

    I never used an Amstrad myself, but had a lot of fun running CP/M on AppleII and TRS-80 clones.
    The emulator I used when writing my code is Z80emu ( It allowed me to run the apps and examine memory, serving as reference to build mine.
    This one runs nicely on Windows 8.1, but still require you to build disk images.
    Mine doesn't, you can just copy your .COM files to a folder a run "RunCPM .COM" ... it will load the CP/M executable and present it with an emulated "Drive A" which is in fact the folder itself.
    This way your CP/M application can read/write files directly from/to the folder, thinking it is drive A:

    The advantage is that you don't need to build disk images, and your files are readily available as you create them.
    Of course only applications that behave correctly using the BDOS and BIOS will be able to work, so it is not guaranteed that you can use every single CP/M app you have.

  3. Hi, thanks for creating RunCPM.
    What is the syntax (e.g. command line options on runcpm) to choose a specific ccp? I am only able to load the built in default.
    My aim is to run it on a Raspberry Pi Zero W (cheaper than an Arduino Due :) ), but am experimenting on Mint and OSX.

  4. Hi there,

    Unfortunately I didn't put a command line flag to select the CCP.
    It is selected via a #define inside the code itself.

    Look at line 23 of "globals.h", there you will find the CCP definition.
    Just rebuild the code with the CCP you want to use.

    The internal CCP is a small (beta) CCP written in C inside the RunCPM code, so it doesn't require any external CCP.
    It is not "vintage", but it was fun to write.

    I am excited about the Pi Zero W ... please report your success on that, maybe I will get one and make a "RunCPM Tablet" ... :)