Sign inSign up

geokm/cpm3plus

By geokm

•Updated 5 months ago

Image
0

364

geokm/cpm3plus repository overview

⁠geokm/cpm3plus

CP/M-Plus (Z3Plus distribution) emulator running on SIMH AltairZ80 inside an Ubuntu 24.04 Docker container.

⁠What's Inside

  • Ubuntu 24.04 base image
  • SIMH 3.8.1 emulator with AltairZ80 support (apt install simh)
  • Pre-configured Z3Plus CP/M disk images
  • Automatic volume seeding for persistent data

⁠Quick Start

⁠Pull
docker pull geokm/cpm3plus:latest
⁠Run with Docker
docker run -d \\
  --name CPM3Plus \\
  -p 3003:3001 \\
  -v cpm3plus_data:/data \\
  --restart unless-stopped \\
  geokm/cpm3plus:latest
⁠Run with Docker Compose
services:
  cpm3plus:
    image: geokm/cpm3plus:latest
    container_name: CPM3Plus
    ports:
      - "3003:3001"
    volumes:
      - cpm3plus_data:/data
    restart: unless-stopped

volumes:
  cpm3plus_data:
    driver: local

⁠Ports

  • 3001/tcp — SIMH AltairZ80 SIO terminal (mapped to host port 3003)

⁠Persistence

On first run, the entrypoint seeds the /data volume with all base disk images from the container image. After that, everything in /data is persistent across restarts. Any changes made inside CP/M (new files, etc.) survive container rebuilds as long as you keep the named volume.

To reset/wipe and re-seed:

docker compose rm -v
# Then docker compose up -d again

⁠Included Disk Images

All located in the container under /data (and seeded into the volume on first boot):

  • z3plus.dsk, z3plusb.dsk, z3plusc.dsk — boot/system
  • i.dsk, j.dsk, k.dsk — IDE hard-disk images
  • blank.dsk — blank formatted disk
  • D1/, D2/ — additional programs and data
  • Various CP/M utilities: FF.COM, LU.COM, SWEEP40.COM, etc.

⁠Dockerfile

FROM ubuntu:24.04
LABEL maintainer="Keith Matthews <[email protected]>"

RUN apt-get update \\
    && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \\
        simh \\
    && apt-get clean \\
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

RUN mkdir -p /home/SIMH/X

# Copy base disk images into the image
COPY base/ /home/SIMH/X/
COPY entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/entrypoint.sh

WORKDIR /home/SIMH/X
EXPOSE 3001/tcp

ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["/usr/bin/altairz80", "z3plus.ini"]

⁠docker-compose.yml

services:
  cpm3plus:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: CPM3Plus
    ports:
      - "3003:3001"
    volumes:
      - cpm3plus_data:/data
    restart: unless-stopped

volumes:
  cpm3plus_data:
    driver: local

⁠z3plus.ini (SIMH config)

d tracks[0-7] 254
attach dsk0 z3plus.dsk
attach dsk1 z3plusb.dsk
attach dsk2 z3plusc.dsk
attach hdsk0 i.dsk
attach hdsk1 j.dsk
attach hdsk2 k.dsk
reset cpu
d common c000
set cpu 64k
set cpu banked
set cpu itrap
set cpu z80
set cpu altairrom
d clock 0
set sio nosleep
attach sio 3001
boot dsk0

⁠Maintainer

Keith Matthews [email protected]⁠

Tag summary

Content type

Image

Digest

sha256:9a6eb69b6…

Size

39.3 MB

Last updated

5 months ago

docker pull geokm/cpm3plus