Skip to content

avwohl/ioscpm

Repository files navigation

iOSCPM - CP/M Emulator for iOS and macOS

A Z80/CP/M emulator for iPhone, iPad, and Mac, built on the RomWBW HBIOS platform.

Features

  • Full Z80 emulation with accurate instruction timing
  • RomWBW HBIOS compatibility for authentic CP/M experience
  • VT100/ANSI terminal with escape sequence support (runs Zork, WordStar, etc.)
  • Multiple disk support - up to 4 disk units with hd1k format (8MB slices)
  • Download disk images from RomWBW project - no bundled copyrighted content
  • Local file support - open, create, and save disk images
  • NVRAM boot configuration - auto-boot settings persist across sessions
  • Mac Catalyst - runs natively on macOS

Screenshots

The emulator provides a classic 80x25 terminal display with support for:

  • CP/M 2.2, CP/M 3, ZSDOS, ZPM3, NZCOM
  • Text adventures (Zork, Adventure, Hitchhiker's Guide)
  • Productivity software (WordStar, dBASE, Turbo Pascal)

Getting Started

  1. Open Settings (gear icon) before starting
  2. Download disk images - scroll to "Download Disk Images" section
  3. Select a disk - CP/M 2.2 recommended for first boot
  4. Press Play to start the emulator
  5. At boot menu, press 0 to boot from disk

Boot Menu Keys

  • h - Help (shows full menu)
  • l - List ROM applications
  • d - List disk devices
  • w - SYSCONF - Configure auto-boot settings
  • 0-9 - Boot from device number
  • C - Boot CP/M 2.2 from ROM

Auto-Boot Configuration

Use the ROM's SYSCONF utility to configure auto-boot:

  1. At boot menu, press W
  2. Select boot device and timeout
  3. Settings persist across app restarts

To clear auto-boot settings, go to Settings and tap "Clear Auto-Boot".

Disk Images

Disk images are downloaded from the official RomWBW project:

Disk Description License
CP/M 2.2 Classic Digital Research OS Free (Lineo)
ZSDOS Enhanced CP/M with timestamps Free
NZCOM ZCPR3 command processor Free
CP/M 3 (Plus) Banked memory support Free
ZPM3 Z-System CP/M 3 Free
WordStar 4 Word processor Abandonware

Downloaded images are stored in the app's Documents folder and work offline.

Technical Details

Architecture

┌─────────────────────────────────────┐
│         SwiftUI Interface           │
├─────────────────────────────────────┤
│      EmulatorViewModel (Swift)      │
├─────────────────────────────────────┤
│    RomWBWEmulator (Obj-C++ Bridge)  │
├─────────────────────────────────────┤
│       HBIOSEmulator (C++)           │
│  ┌─────────────┬─────────────────┐  │
│  │   qkz80     │  HBIOSDispatch  │  │
│  │  (Z80 CPU)  │  (HBIOS calls)  │  │
│  └─────────────┴─────────────────┘  │
└─────────────────────────────────────┘

Dependencies

This project uses code from sibling directories:

  • ../cpmemu/src/ - qkz80 Z80 CPU emulator
  • ../romwbw_emu/src/ - HBIOS dispatch, memory banking

VT100 Terminal Emulation

The terminal supports ANSI/VT100 escape sequences:

  • Cursor positioning (ESC[row;colH)
  • Screen/line clearing (ESC[2J, ESC[K)
  • Text attributes (ESC[7m reverse video)
  • Cursor save/restore (ESC 7, ESC 8)

This enables proper display for applications like Zork that use cursor positioning for status lines.

Disk Format

Uses RomWBW hd1k format:

  • 8MB per slice
  • Up to 8 slices per disk (64MB total)
  • 1024 directory entries per slice
  • Compatible with all RomWBW disk images

Building

Requirements

  • Xcode 15+
  • iOS 14+ / macOS 11+ (Mac Catalyst)

Build Steps

  1. Clone sibling projects (cpmemu, romwbw_emu)
  2. Open iOSCPM.xcodeproj
  3. Select target device
  4. Build and run

License

GPLv3 License

Third-Party Licenses

  • CP/M: Released by Lineo for non-commercial use
  • RomWBW: MIT License
  • qkz80: GPL v3 License

Related Projects

  • 80un - Unpacker for CP/M compression and archive formats (LBR, ARC, squeeze, crunch, CrLZH)
  • cpmdroid - Z80/CP/M emulator for Android with RomWBW HBIOS compatibility and VT100 terminal
  • cpmemu - CP/M 2.2 emulator with Z80/8080 CPU emulation and BDOS/BIOS translation to Unix filesystem
  • learn-ada-z80 - Ada programming examples for the uada80 compiler targeting Z80/CP/M
  • mbasic - Modern MBASIC 5.21 Interpreter & Compilers
  • mbasic2025 - MBASIC 5.21 source code reconstruction - byte-for-byte match with original binary
  • mbasicc - C++ implementation of MBASIC 5.21
  • mbasicc_web - WebAssembly MBASIC 5.21
  • mpm2 - MP/M II multi-user CP/M emulator with SSH terminal access and SFTP file transfer
  • romwbw_emu - Hardware-level Z80 emulator for RomWBW with 512KB ROM + 512KB RAM banking and HBIOS support
  • scelbal - SCELBAL BASIC interpreter - 8008 to 8080 translation
  • uada80 - Ada compiler targeting Z80 processor and CP/M 2.2 operating system
  • uc80 - ANSI C compiler targeting Z80 processor and CP/M 2.2 operating system
  • ucow - Unix/Linux Cowgol to Z80 compiler
  • um80_and_friends - Microsoft MACRO-80 compatible toolchain for Linux: assembler, linker, librarian, disassembler
  • upeepz80 - Universal peephole optimizer for Z80 compilers
  • uplm80 - PL/M-80 compiler targeting Intel 8080 and Zilog Z80 assembly language
  • z80cpmw - Z80 CP/M emulator for Windows (RomWBW)