Colored Boot-Scren of RunCPM on the TTGO VGA32

This is a information page about the RunCPM port for the TTGO VGA32.
The RunCPM port fo the TTGO VGA32 derived from 2 other projects:

1 – RunCPM itself (at GitHub or Discord-Channel) from Marcelo Dantas
2 – FabGL Library (at GitHub) from Fabrizio Di Vittorio

From the original RunCPM project there was also support for the ESP32, but Derek Cooper (at GitHub = coopzone-dc) created a fork of RunCPM which does use the ANSI Terminal sketch (using VGA16Controller) of FabGL to provide RunCPM along with the FabGL ANSI Terminal on the same PCB – here the TTGO VGA32 (and for his homemade ESP32 VGA device).

Derek Copper ported the version 4.1 to the TTGO VGA32


the v1.4 has left beside the 6-pin-ports the 4MB PSRAM Chip
the 4MB PSRAM Chip
the v1.4 of the TTGO VGA32 has 6 pin-ports for soldering a Pin-header (GND, IO2, and IO34 for serial port) which cant be used simultaneously with the MicroSD card port 😦 So no support for the TTL serial port in RunCPM
serial port (TTL 3.3v) on the TTGO VGA32 which can be used with the original FabGL ANSI Terminal sketch – not RunCPM

After a while, I was using prior to that RunCPM on the Arduino Due / ESP32 without VGA / Linux and Windows, I found the fork of Derek on the net and found it was a great port 😉

At this time the actual version of RunCPM was at version 5.1
So I took a deep look in the source of his fork and compared some of the Arduino .ino includes with the newer version and tried to port the functions of the v4.1 to the v5.1

To my surprise this worked very well 🙂

A short while later Marcelo Dantas did release v5.2 of RunCPM and I included the few improvments (for the ESP32 part) also in my fork of the fork from Derek Cooper.

I had many nice written conversations with all these 3 authors as they help me very politely.

With their help I was able to improve the v5.2 of RunCPM for the TTGO VGA32 in many ways – for new functional and design features – which I wanted.

Over the time the following new features had been added against the inital v4.1 fork of Derek Cooper:

  • USB-serial-Control/-Console as a alternative to the VGA / PS/2-keyboard-port
  • Mirror-function of the VGA-console at the USB-serial-port (switchable control PS/2-keyboard or USB-Terminal-session)
  • Key-Click (could be disabled)
  • Reboot without clearing Terminal-Config (with BREAK-Keyboard-Shortcut or REBOOT at the CP/M prompt)
  • Reboot-Countdown (not interruptible) but also with sound
  • Auto-Reboot when config-changes need a reboot to be activated
  • Bootup-Sound
  • Colored Boot-Screen
  • Support for another display-color for the bold-screen-attribute

To compile this / my fork of RunCPM for the TTGO VGA32 v1.4 you need

  • my RunCPM fork of a fork 🙂  ( from my Google-Drive )
    the actual source (RunCPM v5.5 Rev 20210712.0) from HERE
  • the Arduino IDE ( I use v1.8.13 )
    – for RunCPM the SDFat Library >= v2.0.2 from Greiman via the Arduino IDE Library Manager
  • ESP32 Board support via the Arduino IDE Board Manager
    (by now – 11. April 2021 – install only up to ESP32 board-support v1.0.6)
  • initial install of the FabGL Library v1.0.3 (24.05.2021) inside the Arduino IDE
  • update the FabGL Library (only if < v1.0.3) inside the Arduino IDE Installation with the FabGL from GitHub
  • maybe the Drive A: RunCPM-BootDisk or the complete CP/M-Software -Library from the RunCPM-GitHub-Page

Before the first compile read carefully the from the original RunCPM-GitHub-page – especially the section about the
SdFat library change“ and maybe the „Important Notes“ section at the coopzone-dc-Gihub-page about „hard-setting“ the fuse for 3.3V programming voltage via
./ –port /dev/ttyUSB0 set_flash_voltage 3.3V

The for the FabGL Library has to be copied (content of FabGL-master-directory of the .ZIP) to a path like the following on my system:

Update the FabGL-library in the FabGL-Library-Path of the ArduinoIDE with the content of the FabGL.master path of the

Now you can open the .ino in the Arduino IDE and choose the right COM-Port of your Board and disable the PSRAM-Option like

When you are getting weird error messages while compile regarding the FabGL Library then please
CLEAR your Build-Cache.

For clearing the Cache you have to close the Arduino-IDE and delete the following files
arduino_build* AND
in the directory (like)

This is because we update the FabGL Library without notice to the Arduino IDE and the Arduino IDE is exteme caching while compiling 😦 so not all parts of the source would be newly recompiled and we get some weird compile-result or weird compile-messages while the compile is in progress.

When the .ino does compile correctly then its now time to create the FAT32 MicroSD card with the content of the Bootdisk of A.ZIP
You need to create a directory named A at the root of the card for Drive A: and then inside this directory a new directory named 0 (Zero) for the directory of the (normal) User 0 – this look like E:\A\0\ if you Card-Reader is E:\

You could create up to Drive P: (and dont forget the User directory 0 (Zero) upto? 9 (Nine)

If you want to use another than the internal CCP with RunCPM then you have to copy the CCPs to the root of the MicroSD card (and you have to compile your RunCPM with a different CCP – but most users wont neeed another CCP)

If you compiled RunCPM, created the MicroSD card, conneted the card/Keyboard/VGA-Screen and Power to the TTGO VGA32 then its time to bootup 🙂

From here you can start to use CP/M straight away from Drive A: or start to configure the Terminal via the F12-Key:


My Reboot key is the BREAK-Key which could be reached via Ctrl+Pause (Pause is right beside the Scroll-Lock-Key).

The USB-serial-console is useable when the TTGO VGA32 is powered via the USB-port of a computer.
On Windows you have to use the Device-Manager to find the COM:-Port number.
On Linux the easiest way is to have a „dmesg -w“ running while inserting the TTGO VGA32.
So mostly on Linux the TTGO VGA32 is at /dev/ttyUSB0 or /dev/ttyUSB1

The serial speed of the USB-serial-port is set in the Arduino-.ino-File at 115.200 Baud

For using RunCPM for the TTGO VGA32 via USB-serial-port (with Windows) I sugest to use Tera Term as Terminal, because Tera Term has a nice Option to set a small Clipboard-Delay which is handy when inserting MBASIC-Programs via Clipboard directly in the MBASIC prompt:

As you could see in this preferences window the TTGO VGA32 does connect to the computer via a CP2102A TTL-serial chip.
So you need to have the driver for this chip installed on your Windows or Linux system (which is mostly already there or would be installed automatically by Windows)


The Mirror-Function does copy the output and input from the VGA-console to the USB-serial-port.

If you enable USBSerCtl in the Config-Menu the TTGO VGA32 could ony be controlled via a serial session
(only the BREAK-Reboot and F12 Config does work from PS/2-Keyboard – and only from there 🙂 )

Screen-Mirroring in v5.1
Screen-Mirroring in v5.1
Colored Boot-Screen of v5.2 (Rev 06.04.2021) on a VGA (also HDMI) Screen
The same Color-Boot-Screen 80×25 Chars in Tera Term using TTF Font Cousine
with the help of a bigger Terminal Scren at the USB-serial-port MBASIC can be programed to show a fine Mandelbrot-Fractal 🙂

Additionally links in the german VzEkC e.V. Forum about RunCPM on the TTG VGA32 and other hardware and software like RunCPM written by me and the forum-members there:

RunCPM v4.4 Fork fuer ESP32 mit VGA (auch TTGO VGA32 v1.4)

RunCPM v5.1 TTGO VGA32 USB SerCtl & Mirror Edition

RunCPM v4.8 Win32-Shell „Starterpacket“

TTTGO VGA32 FabGL ANSI-Terminal ABER mit USB-serial Support 😉

MBASIC macht Probleme mit Color-Esc-Sequenzen auf FabGL ANSI Terminal

CP/M auf dem Arduino DUE

Altair 8800 auf dem TTGO VGA32 V1.2

CP/M auf dem ESP8266

VT100-Terminal mit TTL-Zugriff als Webpage auf einem ESP8266



Very nice people to the subject/topic CP/M can also be found: