Python automation framework for driving asid-vice (a binmon-extended C64 emulator) — protocol client, key matrix + chord typing, screen scrape, container management, code-coverage harness.
Project description
vice-driver
vice-driver is a Python automation framework for driving
asid-vice, an extension of the
VICE C64 emulator that exposes a binary monitor with key-matrix tap and
screen-scrape opcodes.
It is application-agnostic: use it to drive any C64 program inside a
binmon-extended VICE container. (The companion
defmon-driver package
builds defMON-specific automation on top of this library.)
The driver itself is pure-Python with no runtime dependencies beyond the standard library. It speaks the asid-vice binary monitor protocol over a single TCP socket per connection.
Capabilities
vice_driver.binmon— wire-level binary-monitor client. Handles framing, request/response matching by id, asynchronous events (STOPPED / RESUMED / JAM), checkpoints (CHECK_EXEC / CHECK_LOAD / CHECK_STORE), cpuhistory, mem_get / mem_set, register get/set, keymatrix tap + set + get, SCREEN_GET.vice_driver.keys— symbolic C64 key-matrix names (case-insensitive with aliases) + ASCII → chord conversion for typing text into programs that read the matrix directly.vice_driver.screen— SCREEN_GET response parser + screencode → PETSCII → ASCII rendering withfind_text().vice_driver.vice_docker—ViceContainercontext manager that spins up a one-shot asid-vice Docker container with the right binmon binding, sound dump, SID configuration, and disk mounts.vice_driver.coverage— per-action 6502 code-coverage harness built on CHECK_EXEC checkpoints + cpuhistory drains. Byte- or page-granularity.vice_driver.expect—Expectdataclass +verify()polling helper for "did this byte change to X within T seconds" assertions.
Requirements
- Python ≥ 3.10
- Docker, with a built
asid-vice:latestimage — seeanarkiwi/asid-vicefor the Dockerfile and build instructions. - A C64
.d64(or PRG / TAP) image to autostart.
Installation
pip install vice-driver
For development:
git clone https://github.com/anarkiwi/vice-driver
cd vice-driver
pip install -e ".[dev]"
pytest
Quick start
import logging
from vice_driver import BinMon, DiskMount, ViceContainer
logging.basicConfig(level=logging.INFO)
container = ViceContainer(
autostart="/work/program.d64",
mounts=[DiskMount("/host/path/to/program.d64", "/work/program.d64", read_only=True)],
)
with container:
bm = BinMon("127.0.0.1", 6502)
bm.connect(timeout=10.0, attempts=80, retry_delay=0.25)
# Drain the initial halt and resume the CPU.
bm.exit()
# ... drive the program: bm.keymatrix_tap, bm.mem_get/set, bm.screen_get ...
bm.close()
Testing
pytest # runs unit tests + lint + format gates
pytest --cov-report=html # open htmlcov/index.html for the line-level report
CI enforces:
ruff check(lint)ruff format --check(format)black --check(format, redundant with ruff format but explicit)pytest(unit tests)- Coverage ≥ 85% over
vice_driver/
Run individual gates locally:
ruff check vice_driver tests
ruff format --check vice_driver tests
black --check vice_driver tests
pytest --cov=vice_driver --cov-fail-under=85
License
Apache 2.0 — see LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vice_driver-0.2.0.tar.gz.
File metadata
- Download URL: vice_driver-0.2.0.tar.gz
- Upload date:
- Size: 34.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
30f8c921e6d373e51fb393f70fc01feee8f7abbb98eda2242a165591a7d39539
|
|
| MD5 |
3b02d1bb4357afdb0810fdcba1df2eb5
|
|
| BLAKE2b-256 |
713e833e3c81142e934fab4b356f8a45a18659194d0d91a9604376509ead1ce4
|
Provenance
The following attestation bundles were made for vice_driver-0.2.0.tar.gz:
Publisher:
publish.yml on anarkiwi/vice-driver
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vice_driver-0.2.0.tar.gz -
Subject digest:
30f8c921e6d373e51fb393f70fc01feee8f7abbb98eda2242a165591a7d39539 - Sigstore transparency entry: 1609514664
- Sigstore integration time:
-
Permalink:
anarkiwi/vice-driver@6bc26955ed280deef15fc1f8f5de20ccdcc305e3 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/anarkiwi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6bc26955ed280deef15fc1f8f5de20ccdcc305e3 -
Trigger Event:
release
-
Statement type:
File details
Details for the file vice_driver-0.2.0-py3-none-any.whl.
File metadata
- Download URL: vice_driver-0.2.0-py3-none-any.whl
- Upload date:
- Size: 33.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3fda926333be1e0d6fcedc0da13404c3f98b913ee4c177f28b4a47d511a99571
|
|
| MD5 |
2956992d15cd3d5655bf9960002fbbee
|
|
| BLAKE2b-256 |
16efb1d4b6377503dac22b91b40343e6f639f77e9d9e0b79ecb414fb75f02a38
|
Provenance
The following attestation bundles were made for vice_driver-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on anarkiwi/vice-driver
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vice_driver-0.2.0-py3-none-any.whl -
Subject digest:
3fda926333be1e0d6fcedc0da13404c3f98b913ee4c177f28b4a47d511a99571 - Sigstore transparency entry: 1609514729
- Sigstore integration time:
-
Permalink:
anarkiwi/vice-driver@6bc26955ed280deef15fc1f8f5de20ccdcc305e3 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/anarkiwi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6bc26955ed280deef15fc1f8f5de20ccdcc305e3 -
Trigger Event:
release
-
Statement type: