Disk Images are now available as part of the project releases, ready to use ! Full Source Build
This project preserves Digital Research's Concurrent CP/M-86 3.1 multitask OS as a usable, rebuildable system for running and exploring classic 16-bit software. Runnable disks and development tools accompany the sources and patch notes, making the system more consumable (CP/M-Plus style) and accessible to anyone interested in its history.
The default system now includes PC-MODE: run supported DOS .COM and .EXE
programs alongside native CP/M-86 .CMD commands, from the same shell.
This brings a major part of the system's heritage into the normal source build
and floppy distribution... with plenty of fixes and patches.
Microsoft Macro Assembler 1.10 running under PC-MODE in PCE
- A familiar shell: PCTMP includes command-line editing and recall,
?help,CLS,SYSDISK, startup scripts and configurableSETDEFsearch order. - DOS text applications get all 25 rows. Returning to the shell restores the native 24-row console and status line. DOS/BIOS services connect to the shared XIOS.
- DOS development tools are included: MASM, LIB, LINK, LINKCMD, LINKEXE,
EXE2BIN and Microsoft BASIC have their own
ccpmdos.imgcompanion disk.BATCH.CMDis included on the system disks for BAT execution. - Two personalities, one build:
makeproduces both the PC-MODE system (ccpm86.img) and a native TMP alternative (ccpmnative.img). Choose at boot.
With the project's pcfloppy launcher, boot PC-MODE and mount the DOS tools:
pcfloppy ccpm86.img ccpmdos.imgPC-MODE supports a bounded DOS/BIOS subset; application compatibility varies. The supplied disks use the CP/M filesystem—DOS FAT support is not enabled.
EXE loading fixes the same DOS Plus defect: headers need not be 512-byte aligned.
See the API tables for DOS, BIOS and native interrupt coverage. See patch notes for the implementation and verification details, and distributions for all seven disks.
Concurrent CP/M-86 3.1 · Console windows
System setup · Microsoft BASIC 5.50A
Rose
| Goal | Distribution |
|---|---|
| Full source distribution | Kernel, nine RSPs, most commands; gaps below |
| PC-MODE | DOS COM/EXE execution, PCTMP shell, DOS development disk; native TMP boot alternative |
| Additional tools | ASM80, HEXCOM, DREDIX, DR development chain, Microsoft BASIC 5.50A |
| Y2K components | SDIR, DATE, SHOW, TOD for CCP/M-86 3.2 through Concurrent DOS 4.1; 3.1 fixes included |
| Usability and Bug fixes | CP/M Plus usability, known problem fixes (like the failing sysdisk on systems with 2 floppies and a hard disk) ... |
Alongside PC-MODE, the current version includes:
- Enhanced SUBMIT
- CP/M Plus mapped and direction keys command line recall and editing,
- CP/M Plus setdef style configurability
- CP/M Plus style Input/Ouput redirection with put/get/rdr commands
- CP/M Plus style paging for DIR, SDIR, TYPE
- Support for CGA, EGA modes even on VGA card,
- Y2K compliance,
- CLIs for floppy copy, format and more
- New terminal commands (cls, sysdisk)
- and many other patches ...
These additions make the system easier to use while preserving its native CP/M workflow.
Buffered console input supports cursor movement, insertion, deletion and recall of the last nonempty line on each console:
| Key | Action |
|---|---|
| Left / Ctrl-A | Move one character left |
| Right / Ctrl-F | Move one character right |
| Home / End | Go to the beginning / end |
| Up / Ctrl-W | Recall the last line when empty; otherwise go to the end |
| Backspace / Rubout | Delete left of the cursor |
| Delete / Ctrl-G | Delete at the cursor |
| Ctrl-K / Ctrl-X | Delete to the right / left of the cursor |
| Ctrl-B | Toggle between beginning and end |
| Ctrl-U / Ctrl-R | Cancel the line / retype it on a new line |
Return accepts the whole line from any cursor position. The editor also serves applications using BDOS Function 10; raw-input applications keep their own keys. There is one saved line per console, not a history list.
At the shell prompt, ? lists common commands and ? PIP opens HELP PIP
when HELP is installed. Command errors identify missing commands, unavailable
drives, invalid names, resource limits and malformed executables.
SETDEF controls each console's command search path and file order:
| Command | Effect |
|---|---|
SETDEF |
Show current settings |
SETDEF *,A:,C: |
Search the current drive, then A: and C: |
SETDEF [ORDER=(CMD,SUB)] |
Search CMD, then SUB on each drive |
SETDEF [ORDER=(CMD,DOS)] |
Search CMD, COM, EXE, BAT on each drive (default) |
SETDEF [ORDER=(CMD,SUB,DOS)] |
Search CMD, SUB, COM, EXE, BAT on each drive |
SETDEF * [ORDER=(CMD)] |
Search only the current drive for CMD commands, then the system fallback |
Resident commands take priority; an explicit drive bypasses the path.
The system disk remains the final fallback. SYSDISK selects that disk
globally, while SETDEF settings are local to each console and last until
changed or rebooted. Add SETDEF to STARTUP.nnn for persistent preferences.
Automatic SUB execution requires the rebuilt SUBMIT.CMD on the search
path. An explicit .SUB runs a script even when SUB is absent from the search
order. Native TMP accepts the same settings and ignores DOS entries.
Loading commands from other drives preserves the working drive and user.
See HELP SETDEF and Patches for details and limitations.
PUT, GET and RDR redirect a program's console output, input or both,
using a bracket prefix like the other Digital Research tools (ccpmext.img):
| Command | Effect |
|---|---|
PUT [out{,A}{,E|EO}] cmd |
Write the program's console output to out; A appends, E/EO also shows it |
GET [in{,E|EI}] cmd |
Read the program's console input from in; E/EI echoes it |
RDR [in,out{,A}{,E|EI|EO}] cmd |
Both at once |
B>PUT [DIR.TXT] SDIR.CMD *.CMD
B>PUT [BUILD.LOG,A,EO] ASM86.CMD MYPROG
B>GET [KEYS.IN] PIP.CMD
B>RDR [KEYS.IN,PIP.LOG] PIP.CMD
cmd must be a native .CMD program. Resident DIR and the shell built-in
CLS are not redirected; use DIR.CMD or SDIR.CMD for directory output.
TYPE runs the external TYPE.CMD and can be redirected. DOS programs
(.COM, .EXE) run by PC-MODE cannot be redirected, because PC-MODE
handles their console calls itself. Only the console of the caller is
affected. See HELP PUT, HELP GET and HELP RDR.
| Image | Bootable | Contents |
|---|---|---|
ccpm86.img |
Yes | PC-MODE/PCTMP kernel, core commands, ED, full HELP, BATCH, SYSDISK, SETDEF, PIP |
ccpmnative.img |
Yes | Native TMP/XIOS alternative, with the same core commands and shared kernel fixes |
ccpmtools.img |
No | ASM86, DDT86, GENCMD, GENCCPM, CHKCPMFS, WINDOW/WMENU, PRINT, sample SUB files, PIP, TOD |
ccpmext.img |
No | PUT, GET, RDR (console redirection), DREDIX, PIP |
ccpmmaint.img |
Yes | PC-MODE kernel, disk maintenance tools, CONFIG, FUNCTION, SETUP, SYSTAT, PIP, TOD |
ccpmdev.img |
No | Native DR development/BASIC tools, Microsoft BASIC CMD, ASM80, HEXCOM, GENTAB |
ccpmdos.img |
No | DOS MASM, LIB, LINK, LINKCMD, LINKEXE, EXE2BIN and Microsoft BASIC COM |
make dist places the images above and disks.zip containing all seven at the repository root.
Root make builds both kernels in one run: kernel/sysgen/ccpm.sys (PC-MODE)
and kernel/sysgen/ccpm-native.sys (native TMP). The native floppy installs its
kernel as CCPM.SYS, as required by the normal boot loader. Both personalities
use the same XIOS implementation and shared kernel fixes. Native XIOS disables
the PC-MODE gateway; this is a source-built alternative, not an archival binary.
Boot either system disk in A: and use the data disks in B:. DOS programs require
the PC-MODE system. Configuration utilities live on maintenance to keep both
system disks within 320 KB.
320 KB: untwist → cpmtools ccpm86-320 → twist.
Media recipes and emulator usage.
The full HELP is on the main disk; WINDOW and WMENU are on the tools disk.
Window layouts: CARDDECK.SUB, CLEAR.SUB, GLASS.SUB and WORDPROC.SUB.
The source-built boot track reproduces all 4,096 bytes of the original.
Format: cpm86-kernel. 3.1 = rebuildable sources; SYSDISK: byte-identical CMD plus TMP built-in.
| Tool | Purpose | Binary (base/) |
Source (commands/) |
BDOS 2.2 Compat. |
|---|---|---|---|---|
asm86 |
8086 assembler | — | Recompiled from CCP/M-86 3.1 and adapted | ✓ |
batch |
Run PC-MODE BAT command files | Original | Reverse engineered from CCP/M-86 | |
cls |
Clear the terminal screen | — | TMP built-in; VT52 ESC-E | |
chset |
Inspect or change CMD header flags | — | Recompiled from CCP/M-86 3.1 and adapted | |
chkcpmfs |
CP/M allocation check and confirmed metadata repair | — | New shared PL/M-86 checker for CDOS, CCP/M-86 and CP/M-86 | ✓ |
config |
Configure serial ports | Original | Reverse engineered from CCP/M-86 | |
date |
Display or set the date | — | Recompiled from CCP/M-86 3.1 and adapted, Y2K patched | |
dcomp |
Compare raw 8/9-sector CP/M/FAT floppies | — | Ported from PC DOS 1.10 | ✓ |
dcopy |
Copy raw 8/9-sector CP/M/FAT floppies | — | Ported from PC DOS 1.10 | ✓ |
ddt86 |
Interactive machine-code debugger | — | Recompiled from CCP/M-86 3.1 and adapted | ✓ |
dir |
List directory contents | — | Recompiled from CCP/M-86 3.1 and adapted; command/RSP | |
dform |
Command-line floppy formatter | — | New | ✓ |
dskmaint |
Format, verify and copy diskettes | Original | Reverse engineered from CCP/M-86 | |
ed |
Line-oriented text editor | — | Recompiled from CCP/M-86 3.1 and adapted | ✓ |
era / eraq |
Erase files, optionally with confirmation | — | Recompiled from CCP/M-86 3.1 and adapted | |
function |
Program function keys | — | Reverse engineered from CCP/M-86 | |
gencmd |
Convert H86 output into CMD executables | — | Recompiled from CCP/M-86 3.1 and adapted | ✓ |
genccpm |
Generate and configure the system image | — | Recompiled from CCP/M-86 3.1 and adapted; flag-table fix | |
gentab |
Generate disassembler opcode tables | — | Recompiled from CCP/M-86 3.1 and adapted | |
get |
Feed a program's console input from a text file | — | New; shares the putget.lib engine with PUT and RDR |
|
hdmaint |
Hard-disk maintenance | Original | Reverse engineered from CCP/M-86 | |
help / help.hlp |
Browse indexed command help | — | Recompiled from CCP/M-86 3.1 and adapted; indexed from help.dat |
✓ |
initdir |
Enable directory date/time stamps | — | Recompiled from CCP/M-86 3.1 and adapted | |
pcetime |
Synchronize time with the PCE host | External | CPM86 Hacking Project | |
pip |
Copy and transfer files | — | Recompiled from CDOS 4.1 and adapted | |
print |
Print files using Concurrent printer services | Original | Recompiled from CCP/M-86 3.1 | |
put |
Capture a program's console output into a file | — | New; shares the putget.lib engine with GET and RDR |
|
rdr |
Redirect a program's console input and output together | — | New; shares the putget.lib engine with PUT and GET |
|
ren |
Rename files | — | Recompiled from CCP/M-86 3.1 and adapted | |
sdir |
Detailed, sorted directory listing | — | Recompiled from CCP/M-86 3.1 and adapted, Y2K/DPB/tail fixes | |
set |
Set file and drive attributes | — | Recompiled from CCP/M-86 3.1 and adapted | |
setup |
Customize IBM PC/XT XIOS settings | Original | Reverse engineered from CCP/M-86 | |
show |
Display disk space and drive information | — | Recompiled from CCP/M-86 3.1 and adapted, Y2K patched | |
setdef |
Display/change the per-console command drive list; fixed system fallback | — | New, Source-built SETDEF.CMD; local kernel extension |
|
stop |
List processes and request termination | — | Ported from the maintained CDOS reconstruction; standard CCP/M 3.1 services | |
submit |
Run batch command files | — | Recompiled from CCP/M-86 3.1 and adapted | |
sysdisk |
Display or change the system drive; TMP built-in and standalone tool | — | TMP built-in + standalone SYSDISK.CMD recompiled from CCP/M-86 3.1 and adapted; byte-identical CMD reconstruction |
|
systat |
Inspect processes and system resources | — | Recompiled from CCP/M-86 3.1 and adapted | |
tod |
Display or set date and time | — | Recompiled from MP/M-86 2.1 and adapted, Y2K patched | |
type |
Display a text file | — | Recompiled from CCP/M-86 3.1 and adapted | |
window |
Control console windows from commands | Original | C rewrite; shared modules in commands/window |
|
wmenu |
Interactive console-window manager | Original | C rewrite; shared modules in commands/window |
|
vcmode |
Set virtual-console background modes | — | Recompiled from CCP/M-86 3.1 and adapted | |
asm80 |
8080 assembler | — | Translated using XLT86 from CP/M-80 2.2 and adapted | ✓ |
hexcom |
Convert Intel HEX to COM binaries | — | HEXCOM 3.00-compatible C from tpzasm | ✓ |
dredix |
Full-screen text editor | — | DREDIX C Backported from Concurrent DOS 4.1 |
DCOPY/DCOMP support 160/180/320/360K raw media. Nine-sector access needs the updated XIOS; see disk tools.
✓ = confirmed compatible with BDOS 2.2.
After installing WMENU, Ctrl+Alt+0 (top row) or Ctrl+Alt+Esc opens its menu; Ctrl+keypad-Plus remains available.
WINDOW and WMENU share a C implementation with CDOS 4.1 in commands/window.
BDOS 12 selects CCP/M's original 0..3 numbering or CDOS's 1..4 numbering.
The highlighted WMENU follows the original CCP/M interface. The default build
produces both programs, and ccpmtools.img installs them. See
WINDOW/WMENU build and usage notes for validation.
PRINT is built from the original C sources in commands/print using the
historical SQLINK.INP module list. The tools disk, ccpmtools.img,
includes the rebuilt commands/print/print.cmd. See
the PRINT README for usage and build details.
dev/ contains imported binaries; guest compatibility is not fully audited.
| Tool | Product | Version | Vendor |
|---|---|---|---|
rasm86.cmd |
Relocating assembler | 1.4 | Digital Research |
link86.cmd |
Linkage editor | 2.02 | Digital Research |
lib86.cmd |
Library manager | 1.3 | Digital Research |
xref86.cmd |
Cross-reference tool | 1.1 | Digital Research |
sid86.cmd |
Debugger with 286 disassembler | 2.4 | Digital Research |
cbas86.cmd |
CBASIC compiler | 1.4 | Digital Research |
crun86.cmd |
CBASIC runtime | 1.4 | Digital Research |
pbasic.cmd |
Personal BASIC | 1.2 | Digital Research |
mbasic86.cmd |
BASIC-86 recreation | 5.50A | Microsoft lineage |
mbas522.cmd |
BASIC-86 reference; archive only | 5.22 | Microsoft |
| Utility | CCP/M-86 3.1 | 3.2 family | Concurrent DOS 4.1 | DOS Plus 1.2 |
|---|---|---|---|---|
| SDIR | Fixed | Fixed | Fixed | Fixed |
| DATE | Fixed | Compliant | Compliant | Compliant |
| SHOW | Fixed | Fixed | Compliant | Compliant |
| TOD | Fixed | Fixed | Compliant | Compliant |
Fixed = replacement needed; Compliant = existing utility works. Audit: CCP/M-86/Concurrent DOS 3.2; boot regressions: 3.1.
Patches: RTC startup/persistence, yellow status, adapter-aware cursor, EGA/VGA retrace handling, console shortcuts, configured drives, GENCCPM flag records, PIN and build corrections. CGA graphics modes 4/6 now use kernel-controlled BIOS mode/palette calls on EGA/VGA, preserving the CGA path and restoring text. EGA modes 0Dh/0Eh/10h, monochrome 0Fh on EGA monochrome/VGA, and VGA modes 11h/12h/13h include graphics drawing and palette services. See api.md. The SYSDISK B: versus C: selection with two floppies is also fixed.
TYPE and SDIR accept [PAGE]; DIR.RSP and DIR.CMD use [P]. TYPE also accepts
[P01] through [P23] for shorter pages. Paging is off by default and uses
the native pause prompt; Ctrl-C stops output. TYPE syntax and paging details.
Build: cpm86-crossdev, make,
cpmtools, Python 3, Git, tar, zip. Emulators: PCE (interactive), QEMU (checks).
The boot build requires native h862bin from cpm86-cmdtools on PATH.
| Command | Result |
|---|---|
make |
Commands, kernel/RSPs, boot sources, four images |
make -C commands/sysdisk check |
Byte-identical SYSDISK reconstruction |
make check |
SYSDISK identity, source-built boot identity, every packaged file, sizes |
make check-graphics |
Assembled graphics guards and adapter gates; PCE VGA/EGA/CGA, EGA monochrome and Hercules checks: pixels, palettes, graphics text/TTY and restoration |
make check-hercules |
Native and DOS Hercules graphics, text/cursor/scrolling, exit restoration and plain-MDA rejection |
make check-text40 |
Booted 40-column text tests on CGA/EGA/VGA: cursor, wrapping, scrolling and restoration |
make check-qemu |
Boot, RTC, status, switching, HELP, SDIR, SYSDISK, SETDEF, DREDIX, windows |
make check-paging |
TYPE, SDIR, DIR.RSP and DIR.CMD paging, resume, Ctrl-C and default-off |
make test |
Launch PCE |
make dist |
y2k-dist.zip, disks.zip and the seven disk images at the repository root |
make source-dist |
Sources and reference/vendor inputs; no ignored outputs |
Source pedigree · License correspondence.
| Project | Description |
|---|---|
| cpm86-kernel | CP/M-86 1.1 distribution rebuilt from patched and reconstituted sources |
| ccpm86-kernel | CCP/M-86 3.1 distribution rebuilt from patched and reconstituted sources |
| cdos41-kernel | Concurrent DOS 4.1 distribution rebuilt from patched and reconstituted sources |
| cpm86-crossdev | Unix CP/M-86 cross development project (compilers, emulation and tools) |
| cpm86-hacking | CP/M-86 miscellaneous tools and PCE emulator helpers |
| cpm86-cmdtools | CP/M-86 .cmd file manipulation tools |
| cpm86-ports | CP/M-86 application ports in C and assembler |
| cpm86-vi | STevie vi port for CP/M-86 and PC-DOS |
| cpm86-msbasic | A recreaction of msbasic-86 for CP/M-86 and PC-DOS 1.1 from gwbasic sources |
| cpm86-menu | A submit replacement and a menu system for submit orchestration for CP/M-86 1.1 |
| cpm86-make | A simple submit based make tool for CP/M-86 |
| pcdos11-hacking | PC-DOS 1.1 distribution, tools and notes |
CP/M-derived material is covered by the CP/M license; other material uses the MIT license, unless specified otherwise in a subdirectory.
XIOS is one loaded component assembled from three maintained modules in
kernel/con/xios/: core.a86, console.a86 and devices.a86, each including maintained functional
.lib files, with explicit
imports/exports and shared declarations. RASM86 builds three objects; LINK86
combines them into the existing single-segment XIOS format. The other kernel
components and their interfaces are unchanged.
make -C kernel/con xios.con xiosnat.con builds PC-MODE and native-only
flavours from the same sources. pcmode.lib retains the PC-MODE and enhanced
keyboard settings. The build checks fixed system/header offsets and entry
jumps before publishing either component. See kernel/con/xios/README.md.