Playing Zork 1 on a CP/M emulator on Linux (2021)
Developers can run Infocom's 1982 text title Zork 1 on Linux by pairing the z80pack emulator with CP/M 3, virtual disk tools, and terminal key remappings.
By Dillip Chowdary โข Nov 08, 2026 โข Source: kevinboone.me
A documented technical deployment outlines how to run Infocom's 1982 text adventure Zork 1 under CP/M 3 on Linux. Reported in kevinboone.me's report, the guide pairs the z80pack Z80 emulator with cpmtools to recreate the vintage operating environment, compiling core simulation components from source rather than relying on modern native interpreters.
This article covers building z80pack binaries, configuring virtual disk images, copying game files across user areas, and correcting terminal key mappings. It is designed for retrocomputing hobbyists, systems programmers, and vintage computer builders seeking practical operational familiarity with CP/M architecture prior to designing physical Z80 microcomputer hardware.
Playing Zork 1 on a CP/M emulator on Linux: what actually changed
The installation begins by downloading and compiling z80pack version 1.37 from source code rather than relying on outdated repository packages. After unpacking the archive into a convenient directory like $HOME/lib/z80pack-1.37, developers build the core simulation engine by running make with Makefile.linux inside cpmsim/srcsim. Supporting utilities are compiled next by executing make inside cpmsim/srctools. Basic operational readiness is verified by running the cpm3 script within cpmsim, which stages required disks from the disk image library before launching the cpmsim binary system.
Managing virtual disk images requires building cpmtools to list archive contents and transfer files between host Linux systems and virtual disks. Because standard repository packages on distributions like Fedora 31 failed to operate reliably, compiling from source is necessary. Users unpack the source archive, execute ./configure, run make, and complete sudo make install, placing binaries in /usr/local/bin. The tools assume a 720kB 8-inch floppy disk format by default but support custom geometry definitions from /usr/local/share/diskdefs for larger virtual hard disks.
Playing Zork 1 on a CP/M emulator on Linux: how it works

Storage handling in cpmsim uses disk image files stored in a relative ./disks directory to represent physical media. The simulator supports floppy drives A: through D: and hard disks I: and P:, expecting files like drivea.dsk. Booting CP/M 3 requires copying disks/library/cpm3-1.dsk to disks/drivea.dsk and disks/library/cpm3-2.dsk to disks/driveb.dsk. Users create a 4Mb virtual hard disk for drive I: using mkfs.cpm with the z80pack-hd parameter from /usr/local/share/diskdefs, creating disks/drivei.dsk well below the 500Mb capacity limit supported by the CP/M 3 operating system.
Running Zork 1 requires placing the executable binary ZORK1.COM and data file ZORK1.DAT onto the virtual hard drive image. Because CP/M disks do not support subdirectories, files reside in numbered user areas, defaulting to user area zero. Using cpmcp with the -fz80pack-hd flag, both files are copied into user area zero of disks/drivei.dsk. Launching ./cpmsim loads the A> prompt, where switching to drive I: and typing zork1 starts Release 25 with Serial number 000000, revealing the white house and small mailbox.
Advertisement
Tech Pulse Daily
Get tomorrow's pulse first
Join engineers who read Tech Pulse before stand-up. Free, weekday mornings.
Playing Zork 1 on a CP/M emulator on Linux: why it matters
Experimenting with CP/M provides direct technical insight into early microcomputing architecture and its enduring influence on MS-DOS. Originally developed for Intel 8080 processors before widespread adoption on the Z80, CP/M established fundamental conventions for command prompts, device naming, and disk storage management. For engineers planning to build their own physical Z80 retro computers, running an emulated system provides practical operational experience with CP/M disk structures, disk image tools, and command-line utilities before assembling and debugging physical microprocessor hardware components and circuits.
Although modern computers offer superior ways to experience Zork, such as running the ZORK1.DAT z-machine story file through interpreters like frotz, Zork 1 serves as an ideal baseline test. It is a non-trivial puzzle adventure that relies entirely on plain text input and output, parsing simple instructions like "take axe", "look at box", "open mailbox", and "read leaflet". Because it avoids complex screen formatting, Zork 1 verifies processor emulation and disk storage operations without introducing terminal display issues during initial verification.
Playing Zork 1 on a CP/M emulator on Linux: who is affected
Linux users face a specific keyboard complication caused by mismatched backspace control characters between host terminal emulators and CP/M applications. Linux terminals generate DEL, or ASCII 127, when pressing backspace. The CP/M command line accepts DEL to erase characters, but Zork 1 requires the traditional ctrl-h code, represented by ASCII 8. In Gnome Terminal, users adjust this mapping under the Compatibility tab in profile settings, then run the stty erase ^H command in the host shell to keep backspace functioning correctly.
Software preservationists and retrocomputing developers also navigate legal uncertainties surrounding original Infocom game releases. The Zork catalog exists in intellectual property limbo, with unclear commercial ownership and undefined distribution terms expected to last for at least another ten years. While CP/M versions of ZORK1.COM and ZORK1.DAT circulate on community websites, there is no official distribution repository. Most CP/M software occupies a similar abandonware status, meaning private and educational experimentation remains common and largely uncontested despite unresolved licensing terms across the ecosystem.
Playing Zork 1 on a CP/M emulator on Linux: what to watch
Moving beyond line-oriented games to screen-oriented CP/M applications introduces significant software handling challenges. Programs like WordStar, the platform's leading word processor, remain surprisingly popular among vintage computing users. Similarly, Borland's Turbo Pascal compiler earned acclaim by employing technical tricks to overcome the 64k RAM addressing boundary enforced by the Z80 processor. However, running these visual programs introduces complex terminal-related problems that do not occur when executing text adventures like Zork 1, which rely exclusively on plain sequential text input and output.
Terminal handling remains an obstacle because CP/M provided no universal mechanism for screen output, leaving each application to implement its own display routines. The z80pack emulator does not include a virtual terminal; it merely passes program output directly to the host console. While modern Linux terminal emulators generally follow VT100 conventions, running full-screen CP/M software requires addressing terminal incompatibilities manually. Users experimenting with advanced vintage software must account for these terminal limitations when progressing from line-based games to complex interactive development tools.
Developer Action Items
- โ Verify the claim on the official Linux page (or Hacker News Front Page), not from this recap alone.
- โ Name the surface that moved โ API, policy, model, hardware, or commercial terms โ before you Slack the thread.
- โ Assign one owner a day to read the primary material and decide: this-sprint, this-quarter, or noise.
- โ Do not change production on day-one coverage. Watch the vendor changelog and one independent write-up first.
Playing Zork 1 on a CP/M emulator on Linux FAQ
Which tools are required to run Zork 1 on CP/M under Linux?
Users need the z80pack Z80 emulator to run CP/M 3 and the cpmtools utilities to create and manage virtual disk images. The game itself requires the binary file ZORK1.COM and the data file ZORK1.DAT.
How is virtual disk storage structured in the z80pack emulator?
The emulator searches the relative disks directory for floppy drives A: through D: and hard disks I: and P:. Drive I: can be formatted as a 4Mb hard disk using mkfs.cpm with the z80pack-hd parameter definition.
Why does the backspace key require reconfiguration in Linux terminals?
Linux terminals transmit DEL (ASCII 127), which CP/M accepts at the prompt but Zork 1 rejects in favor of ctrl-h (ASCII 8). Users reconfigure Gnome Terminal compatibility settings and execute stty erase ^H in the host shell to align keycodes.
Can the Zork 1 game data file be played without a CP/M emulator?
Yes, ZORK1.DAT is an Infocom z-machine story file that runs natively on modern computers using standalone interpreters such as frotz.
Sources
Author
Dillip Chowdary
Writes Tech Bytes coverage of AI, engineering, and the tools that actually ship. Editor of Tech Pulse Daily.
Related on Tech Bytes
Advertisement