Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

cpm80

CP/M-80 2.2 emulator with Python API.

Python package CI PyPI Python License: MIT

Based on the fast and flexible z80 emulator.

Installing

$ pip install cpm80

Running and terminating

$ cpm80

>save 1 dump.dat
A>dir
A: DUMP     DAT
A>exit

Enter exit or just hit Ctrl + C three times to quit the emulator.

Running commands automatically

From the command line:

$ cpm80 dir 'save 1 a.dat' dir

Alternatively, we can use the API's StringKeyboard class to feed arbitrary commands to the command processor, CCP, thus replacing KeyboardDevice console readers used by default:

import cpm80

COMMANDS = (
    'dir',
    'save 1 a.dat',
    'dir',
    )

console_reader = cpm80.StringKeyboard(*COMMANDS)
m = cpm80.I8080CPMMachine(console_reader=console_reader)
m.run()

string_keyboard.py

Output:

A>dir
NO FILE
A>save 1 a.dat
A>dir
A: A        DAT
A>

Getting output as a string

Similarly, we can replace DisplayDevice console writers used by default with custom writers to do special work for the emulator's output. For example, one could use a StringDisplay writer to gather the output into a string.

d = cpm80.StringDisplay()

m = cpm80.I8080CPMMachine(
    console_reader=cpm80.StringKeyboard('dir'),
    console_writer=d)

m.run()

print(d.string)

string_display.py

Making BDOS calls

BDOS calls can be performed on the machine object directly or by using convenience wrappers.

m = cpm80.I8080CPMMachine()

STR_ADDR = 0x100
m.set_memory_block(STR_ADDR, b'Hello $')
m.bdos_call(m.C_WRITESTR, de=STR_ADDR)

m.write_str('World!\n')

bdos_call.py

Working with files

Similarly, using BDOS wrappers one can manipulate files on disks.

drive = cpm80.DiskDrive()

m = cpm80.I8080CPMMachine(drive=drive)
m.make_file('file.txt')
m.write_file(f'bin(100) is {bin(100)}\n'.encode())
m.close_file()
del m

# Then read and print the contents of the file using another machine.
m = cpm80.I8080CPMMachine(drive=drive)
m.open_file('file.txt')
print(m.read_file())
m.close_file()

doing_files.py

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cpm80-1.0a8.tar.gz (17.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cpm80-1.0a8-py3-none-any.whl (14.7 kB view details)

Uploaded Python 3

File details

Details for the file cpm80-1.0a8.tar.gz.

File metadata

  • Download URL: cpm80-1.0a8.tar.gz
  • Upload date:
  • Size: 17.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for cpm80-1.0a8.tar.gz
Algorithm Hash digest
SHA256 e6cfe50792fca340733a346f589df1f5b70955f507a69bbb84acea1618335514
MD5 fc448d1419358503980bfbd573f455fb
BLAKE2b-256 b640b5fc494ab1b76b82b40a4e1482604ae13d4fc6274b4c6e70cff07fe2d112

See more details on using hashes here.

Provenance

The following attestation bundles were made for cpm80-1.0a8.tar.gz:

Publisher: release.yml on kosarev/cpm80

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cpm80-1.0a8-py3-none-any.whl.

File metadata

  • Download URL: cpm80-1.0a8-py3-none-any.whl
  • Upload date:
  • Size: 14.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for cpm80-1.0a8-py3-none-any.whl
Algorithm Hash digest
SHA256 28919a6df1c8f3724a94537dd1d6cd1a2b37c7c48f249f901b93036a73815717
MD5 ff5fb92a19da7415be8bebdcaf97f35c
BLAKE2b-256 0cb42eb462d549190c8d089a6dee83fac9c304f3e5fe386724bca7e945ce16b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for cpm80-1.0a8-py3-none-any.whl:

Publisher: release.yml on kosarev/cpm80

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

1.1.0

2 files

1.0.0

2 files

This release

1.0a8 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page