Cloud CP/M is crucial to continuing the legacy of the original NABU Corporation's vision of Personal Computers connected to a worldwide network without needing local storage. Unlike any other, the 1982 NABU Personal Computer was not designed to load applications on local storage but instead connected to a network. While Canada's 1982 network was limited to country-wide, the vision was to connect devices worldwide. The original hardware was also limited to only downloading applications due to the television cable company's infrastructure at the time. Today, with the availability of the internet, we can expand the available source code and tools to implement its full potential - welcome to DJ Sures' Cloud CP/M! [what is CP/M?]
Being the world's first, the Cloud CP/M use the internet and remote storage for its filesystem. This allows the NABU PC to run without any local storage connection. As explained in more detail below, the BIOS function calls use the HCCA network adapter port to load and save data from disk images from either the internet or the RetroNET storage folder on the Internet Adapter server. After optimizing and stabilizing the BIOS and Cloud CP/M, I'll design a PCB for ESP32 that will cut the cord from the Internet Adapter and put the NABU on WiFi directly to the cloud. You can read more about my development plan here.
1) Look at the bottom of this page for troubleshooting tips. *do this first*
2) To report issues, submit an issue on Github here. Please read the bug report rules on Github before submitting.
Cloud CP/M Gallery
MSX Games (User Area 8)
Lynx over Telnet
Screen with split windows over Telnet
Hitch Hikers Guide To The Galaxy
RetroNET Chat in CPM
How To Run Cloud CP/M
Step back into 1979 and experience CP/M with a touch of 2023 Cloud technology!
1) Load the latest Internet Adapter.
2) Select the Cloud CP/M NABU Channel from the left
3) Start the SERIAL or TCP server
*Tip: Read the rest of this page to get the most out of Cloud CP/M! Use RetroNET Chat, telnet, games, and more!
How Does Cloud CP/M Work?
Digital Research created CP/M in 1979 as the first mainstream operating system before Microsoft DOS. The CPM operating system was compatible across 8086 and z80 computers because it used a custom BIOS per computer system. DJ Sures had created Cloud-Enabled-BIOS, Loader, and modified CP/M to work on the NABU PC without local storage. Here are the guts of NABU Cloud CP/M...
1. The Loader
There is a loader to get the Cloud CP/M BIOS, BDOS, and CCP on the NABU. The loader will install the BIOS and CPM into the NABU Ram at the location specified on the boot screen.
The priority of searching for the BIOS and CPM files is:
1) Local RetroNET Storage Folder
2) NABU Cloud
The BIOS file is named BIOS.BIN, and the CPM filename is CPM22.BIN. The CPM22.BIN includes the BDOS and CCP.
2. The BIOS
The BIOS (Basic Input Output System) is a middleware that connects the computer's hardware to the operating system and application software. This makes it easier to port operating systems and software between different computers.
The Cloud CP/M BIOS uses the NABU RetroNET Cloud to simulate local storage. This is done through the NABU-LIB RetroNET File System functions in DJ Sures' GitHub.
Disk images are downloaded from https://cloud.nabu.ca and cached locally. They are only downloaded again when the remote file has been updated.
3. CP/M 2.2
The NABU Cloud CP/M is currently running 2.2. There are a few modifications to the CP/M system:
1) Increased the stack size for both CCP and BDOS. I did this to use up a bit of RAM, otherwise being wasted above 0xFF0E. This is because the IM2 interrupt on Z80 requires the LSB bytes of the vector map table to be 00. That means the BIOS is using 0xFF00 - 0xFF0E for the interrupt table. This leaves quite a bit of space between 0xFF0E and 0xFFFFF. So, I placed the CPM and BIOS stack to give applications room to stretch. This will be useful for new homebrew ports, games, and utilities.
2) Added the current User Area to the command-line prompt
3) Removed the drive from the directory listing
Cloud CP/M BIOS Features
1) The BIOS also includes a 16-character keyboard buffer connected to the keyboard interrupt.
2) Text mode is 80 columns with 24 rows. The flashing cursor is part of the BIOS. Use the PAGE UP and DOWN keys to scroll the virtual 80-column screen.
3) The current drive activity will flash in the top right of the screen. When writing to A, you will find RA for Reading from A:, or WA. CPM means the BIOS is re-loading the CPM OS from the disk. And SA means Selecting A:.
4) You may also notice the CHECK light on the NABU flickers for READ and ALERT flickers for WRITE. Pause flickers for selecting the disk.
5) The BIOS includes a built-in VT52 and ADM-3a terminal emulator for games and software. This is available at all times to any application. It is demonstrated using DJ's included TELNET.COM program that will use VT52 emulation when connecting to remote computers. Use the MODE.COM tool to switch emulation modes
6) The BIOS includes CP/M DPH/DPB specifications with DSM cache for 3 drives (A:, B:, C:) that are 8mb each. See the diskdef below to create your disk images.
7) HELP.COM will display a summary of CPM commands
8) TUTORIAL.COM displays a graphic slideshow of Cloud CPM
9) SUMMARY.COM displays a list of the cloud drives and files in each user area
10) RNCMD.COM allows copying files between the Internet Adapter, CPM, and User Areas
11) Print to the Internet Adapter storage folder with the LST: device. This behavior can be changed by using the MODE.COM command.
Cloud CP/M Drives & User Areas
The Cloud CP/M includes one drive image with eight user areas (0-7) including various applications. The contents of the drives are listed further down on this page. However, I will provide an overview of how to use CP/M to access the various user areas of each drive.
CP/M 2.2 did not include a folder structure like we are used to on modern-day computers. Instead, all files were in the root folder of the drive. You can imagine how messy this eventually got as more extensive storage media, such as hard drives, became affordable. The CP/M response to organizing files into sections was User Areas.
Tip: User Areas are numbers between 0 and 15, with 0 being the default on startup.
Changing to a new user area is as simple as typing:
USER [area number]
e.g., USER 2
User Area 0
When Cloud CP/M initially loads, you will be in the A: with User Area set to 0.
Files on the A: User Area 0 include some utilities.
Exploring User Areas
Now type USER 1 on the A:
When you type DIR to list the files, you will see different files than you did on first startup.
Lower on this page is a list of the current cloud drive images.
If you were to want to play ZORK...
1) type A: to enter the A drive.
2) type USER 3 to enter the user area 3.
3) type DIR *.COM to see all the programs on that drive and user area.
4) type ZORK1 to execute Zork and open some leaflets.
The Homebrew RetroNET apps have been ported to Cloud CP/M, including chat and telnet.
1) type A: to enter the A drive.
2) type USER 1 to ensure you are on the user area 1.
3) DIR will give you a list of all RetroNET programs
4) To run a program, simply type the name, such as RETRONET will load the chat.
*Note: Scroll down to see the list of user areas on the included Cloud CP/M A: Drive.
If you wish to run a basic program, they are located on the A: in User Area 2.
1) type A: to enter the A drive
2) type USER 2 to ensure you are on the user area 2.
3) DIR *.BAS will give you a list of all basic programs.
4) To run a basic program, such as my favorite (animals), type MBASIC ANIMALS.BAS
On the B: in User Area 0 and 1 contain the MSXROM BIOS and ROM files for the MSX Computer. Due to hardware similarties, Luis has ported the MSX BIOS to the NABU which runs under Cloud CP/M.
1) Type B:
2) Type User 0 -or- User 1
3) DIR to get a list of games
4) pick a game and type either
MSXROM game.rom 2
*Some games require the 2 for IM2 mode. If they have an IM2 extension, the program will add the 2 automatically.
Huge special thanks to Luis F.A. for the amazing work with porting the MSX BIOS to Cloud CP/M so we can have more games for the Nabu!
A: Cloud Hard Drive
Tip: You can list files with the * wildcard, such as DIR *.COM to find all executables. CPM uses the .COM extension for executable files.
Type SUMMARY in the A: User Area #0 for a summary list of drives and user areas during Cloud CP/M usage.
1) Changes to the cloud disk image are not preserved across sessions. The cloud disk image contains default applications. You should download the empty C: below for storing your project and work files.
2) The A: and B: cloud disk images are READ-ONLY. Meaning it was created as the size of the data on the disk and not the size of the disk itself. This allows the file to be downloaded faster because the diskdef is 8mb, which would be too large for your computer to download every time. You can download blank images in the section below if you wish to save information.
User Area 0
The first default user area contains a few utilities included with CPM 2.2 installation. Some notable mentions are...
HELP.COM (Cloud CP/M Tutorial)
MODE.COM (Change terminal emulation mode)
POWER.COM (Power utility)
SX.COM (UNIX-like Shell) (MANUAL)
XDIR.COM (NABU 1100 Directory Lister)
NSWEEP.COM (file manager)
User Area 1
The RetroNET applications and homebrew NABU Channels have been ported to Cloud CP/M using z88dk and NABULIB.
BADAPPLE.COM - The Bad Apple demo
CPMCURS.COM - Test of reading the Cloud CPM BIOS cursor from an application
DOOM.COM - The NABU DOOM demo
DUMPRAM.COM - Dumps the NABU ram to a file on your PC's storage folder
GAME1.COM - The first prototype of GameManYeah! in textmode
GAME5.COM - The first graphic mode prototype of GameManYeah!
HTTPTEST.COM - Test your NABU talking to the internet and saving files on the PC
MNDLBRT.COM - The mandelbrot on ABU
NABUMENU.COM - The original menu from the NABU Network as an experiment (doesn't work)
RETRONET.COM - The RetroNET Chat in Cloud CP/M!
SLIDESHO.COM - A graphic slideshow of pictures
TELNET.COM - The Cloud CP/M Telnet Client with VT52 emulation
TESTC51.COM - Test of a custom 51 column textmode
TESTC64.COM - Test of a custom 64 column textmode
TESTC80.COM - Test of a custom 80 column textmode
TESTC84.COM - Test of a custom 84 column textmode
VTEST52.COM - Test of the Cloud CP/M BIOS' built-in V52 emulation decoder
User Area 2
You will find many .BAS files here, including the MBASIC.COM executable. If you want to run a basic program, go to this user area, and type MBASIC <filename>. For example, MBASIC ANIMALS.BAS. If loading from within MBASIC, you can use the LOAD "ANIMALS.BAS" command, but remember the filename is case sensitive, so turn your caps lock on when working in basic. [click here for MBASIC manual]
*Tip: You may also load MBASIC MENU.BAS to load the basic game menu.
User Area 3
Games games games and more games! There are a number of adventure games and action games on this drive in various user areas. They have not all been tested, as I find out what works and doesn't. The games include the Zork adventures, Hitchhiker's guide (good demonstration of the BIOS VT52 emulation, and more).
User Area 4
Microsoft Fortran-80 v3.43
User Area 5
Microsoft COBOL v4.01
User Area 6
This area has several word processors and text editors.
NVEDIT 3.0 [manual]
TE (text editor) [manual] (Requires VT52 mode)
User Area 7
Plan 80 spreadsheet software [manual]
User Area 8
MSX Games that can run on the NABU thanks to Luis F. A., who has ported the MSX BIOS to run under the NABU Cloud CP/M. Some games require IM2 mode, which you specific a 2 on the commandline. Here is how you run an MSX game, type one of the two commands...
MSXROM game.rom 2
*More MSX Games: The B: has MSX games on User Area 0 and User Area 1.
Tips and Tricks
CP/M Help Tutorial
Type TUTORIAL on the A: User Area #0 for a guided tutorial that introduces how to use Cloud CP/M
Recover From Disk Error
If you receive a disk error in CPM, you can recover by pressing CTRL-C.
On the A: User Area #0 is a HELP.COM program, which displays a summary of the most common CPM commands.
Take a look on the A: in User Area 1. You will find Games, Telnet, Bad Apple, and RetroNET Chat.
It is a mystery to many first-time users how to exit from Microsoft Basic. Many type "bye", "exit", "quit", and "let me out of here". But the actual command is "system".
Scroll Virtual 80 Columns
The original CP/M was designed for text-only ASCII terminals, or DUMB terminals. These were 80 column displays, where the NABU is 40 column. Because this will cause issues with rendering software designed for 80 columns, DJ wrote a virtual 80 column driver in his Cloud CP/M BIOS.
Use the PAGE UP and PAGE DOWN keys to scroll left/right.
Switch Emulation Modes
Type MODE on the A: User Area 0 to switch emulation modes between VT52 and ADM3a for different programs.
Print to the PC's Storage Folder
By default, the LST: device (printer output) is set to print to the LST.TXT file in the Internet Adapter's storage folder. This behavior can be changed with the MODE.COM command.
Get More CP/M Software
There are several repositories to obtain CP/M z80 software that will work with Cloud CP/M. I have listed my favorites here.
- Retro Archive (most popular)
- Humongous Archive
- CPM Archives
Download DJ's Disk Images (Optional)
Note: You do not need to download the A: or B: disk images to use Cloud CP/M. The NABU will automatically download the most recent disk images when loaded. These downloads are available for curious people, not because they are needed. You will miss out on additional software added to the original cloud drive if you download the A: or B: images. I recommend adding a C: for your private files.
Protect Your Disk Locally
The Internet Adapter will download the disk image from the NABU Cloud Server every time one is mounted to ensure you have the latest copy. However, you may wish to change the images without being overwritten. To do that, download any image and place it in your RetroNET Store folder. You can alter the image using the CPM Tools as mentioned in the above section.
Tip: I recommend you use C: before putting it in the RetroNET Store folder so that you do not miss out on updates for the online images.
Available Disk Slots
Each disk in CP/M requires an allocation vector buffer that is 256b of RAM. Due to the size of this buffer and a limited amount of RAM on the NABU, the Cloud CP/M is limited to using only 3 drives (A:, B:, and C:).
System & Utilities A:
Primary Cloud CP/M Drive.
Note: You do not need to download this disk image to use Cloud CP/M. The NABU will automatically download the most recent disk image when loaded. This download is available for curious people, not because it is needed.
You will miss out on additional software added to the original cloud drive if you download the A: image. I recommend adding a B: or C: for your private files.
Creating Custom Disk Images
You can add disk images to load with this CPM 2.2. Please let me know if you assemble a nice disk with some goodies to share. You can find me on the discord channel, or I occasionally check the email address on my YouTube About page. As mentioned above regarding the BIOS loading priority, it will first look for files in the Internet Adapter's RetroNET folder. This is configurable in the settings of the Internet Adapter.
Why Use Custom Image?
The cloud disk images are created to be the size of the data stored on them. They are not the size of the disk defintition, whichi would be 8mb. This is done so the files can be easily downloaded without using bandwidth and taking a long time. This means the cloud disk images do not have space for you to save information to. You will need to use your own custom disk image to save information. In addition, the disk image you create must be the physical size of the image. The CP/M Cloud BIOS will not "add to" or "append" data to a physical file. The image file must be the size of the disk image.
Where To Save Custom Image Files?
To load your custom disk images, you need to put the file in the RetroNET folder and name it according to the drive you wish to use.
Tip: Drive images can be any letter between A - J. That means using a filename such as C.DSK or E.DSK
The tool you will require to create a disk image is CPM TOOLS by Moria. The windows download of CPM Tools includes the "naburn" disk definition.
[Download Linux Src] [Download Windows Binaries]
APT-GET CPM Tools on Linux
Optionally, if you're using Linux, CPM Tools can be installed with APT-GET rather than compiling from source from the above link. The Linux version is easy to install and available on popular distros using APT-GET with the following command.
$ sudo apt-get install CPM tools
The CPM Tools commands will require a disk definition file containing the disk's geometry named "diskdefs." From what I can tell, the diskdefs file needs to be in the same folder when you run the command. The windows download includes the "naburn8mb" image definition in the diskdefs file. The naburn defiition will support the maximum CP/M drive size of 8mb.
[email protected]:~/cpm$ cat diskdefs
Fact: This diskdefs file was inspired by John's Basement CPM video, which I've mentioned as an excellent series to watch in my Cloud CPM Intro video. The difference with the naburn image is that there is no boot track offset because we don't boot from disk images.
Linux & macOS Image File Case
The Linux and macOS file system is case sensitive. That means an upper case 'A' is different than a lower case 'a'. The Internet Adapter requires the Cloud CP/M image disk naes to be entirely in UPPERCASE. For example, B.DSK or C.DSK.
1. Create a diskdefs file
Use your favorite text editor, or get lots in vi, and add the disk definition that i listed above.
*Remember: The diskdefs file needs to be in the same folder where you will run the cpmtools commands.
2. Organize CPM Files
I like to keep the files for each image sorted in a folder by their drive name and user area.
3. Create Empty File
Before the drive can be formatted, we need to have a file that has padding for the total size of the disk. The NABURN disk image is eight MB, so we will use the DD command in Linux to create an empty 8MB file.
$ dd if=/dev/zero of=B.DSK bs=512 count=16384
Get the Windows port of dd from here.
C:\> dd if=/dev/zero of=B.DSK bs=512 count=16384
4. Format Drive
Now we need to format the empty file for it to become a blank CP/M file system. This can b done by entering the following command.
$ mkfs.cpm -f naburn8mb b.dsk
You can replace the b.dsk with any letter between A to J. If you use a letter that matches a cloud drive, for example A:, your disk image will replace it.
5. Copy Files To Image
Copying files into the disk image is as easy as copying files on your local filesystem. Specify the image type (naburn), destination image file, source file(s), and user area.
Here is an example of copying all files in my cpm22/a/0 folder to the A: image.
$ cpmcp -f naburn8mb a.dsk cpm22/a/0/* 0:
*Note: the files on Linux and macOS are case-sensitive filenames; read above for the details. But the summary is it is an uppercase letter, a lowercase extension. (i.e., F.dsk, or E.dsk)
You can use the cpmls -f naburn a.dsk to view the files of the disk image that you have just created.
6. Put Images In RetroNET Storage
Before booting Cloud CP/M, copy the disk images to the RetroNET storage folder. You will find the location in the Internet Adapter Settings under RetroNET tab.
6. Alter Images
There are many commands to modify the CP/M disk image contents. On Linux, type this to get the manual page for CPM Tools.
$ man cpm
If you download one of my images, you can alter it using the CPM Tool commands.
Note: Before attempting the troubleshooting steps below, verify that you are using the latest Internet Adapter version.
Receive *ouch* The file is too large!
Your cable is a mess, and it's so bad that a short or poor connection is causing the NABU to think it is receiving extra bits. The solution is to fix your cable. Perhaps cut the end of a Midi cable and use that rather than soldering to a connector.
Bad Sector or Drive Error is displayed
Attempting to read a drive that does not exist will present you with this error. Or, you may have a custom disk image that is formatted incorrectly. Either way, you can escape this error by pressing CTRL-C multiple times. It may take 3-5 times before the error clears, as CP/M will continue to retry the drive. The solution is to create disk images in the correct format and not select drives that don't exist.
My custom disk images aren't detected
So, you want to create a custom disk image and it ain't working. That's going to be a simple fix because it is one of two problems...
1) The filename is not uppercase and in the root of the RetroNET Store directory. That means, your filename must be something like C.DSK (All uppercase letters).
2) The file has not been created using the "naburn8mb" diskdef as mentioned above.
3) The file is not one of the suppoted drive letters A:, B:, or C:. I recommend using B: or C: for custom images, as to keep using A: and experience updates as they happen.
Internet Adapter requires a start/stop after rebooting during Telnet or RetroCHAT session
If you are using Telnet or RetroNET and restart the NABU, the Internet Adapter may require the server to be stopped and restarted. This is because the TCP passthrough mode is still enabled and was not correctly exited. When a TCP passthrough program closes, it will send the exit command. But, if the computer is restarted and the program does not have the opportunity to send the exit command, the Internet Adapter will continue in TCP passthrough mode.
The solution is to either...
1) Let the application exit as intended, which sends the TCP Passthrough Exit command to the internet adapter. This means not pushing the reset or power button on the NABU PC.
2) Stopping the Internet Adapter and starting the Internet Adapter will forcefully exit the TCP passthrough mode.
3) Let the NABU send initialization (0x83) requests to automatically cancel the TCP Bridge. This may take a few extra moments after NABU has rebooted.
Cloud CP/M works on mame but not real hardware
1) Fix your cable. RS422 cable is getting interference and might need to be shielded. Connect the shield of the cable to the GND pin on the RS422 adapter. Also, check your solder joints to ensure they are securely connected and not touching the outside plug surround or other wires. An insufficient electrical connection is a bad electrical connection, simple as that.
2) Verify the correct baudrate is used for your operating system.
3) The RS422 USB adapter may not have the capacity required on a USB HUB or docking station. Docking stations that share HDMI output, specifically multiple monitors or 4K resolutions, may have bandwidth limitations that prevent the RS422 adapter from performing correctly. Ensure the RS422 adapter is connected directly to a computer USB port.