Skip to main content

mc683xx

An emulator for the Motorola MC68331 microcontroller, in Rust, with Python bindings: the CPU32 core, the chip's own modules (SIM, QSM, GPT), and a board layer that wires memories and peripherals around the chip as a board does. It runs real firmware inside a host program: board emulators, firmware test harnesses, fuzzers, debuggers.

Licensed MIT OR Apache-2.0.

Crates

One repository and one version; this README is every crate's on crates.io.

Crate What it is
mc683xx-cpu32 The CPU32 core, and a bare CPU on flat memory (flat).
mc683xx-modules The SIM and the QSM, and the interfaces host peripherals plug into.
mc683xx-mc68331 The GPT, and the MC68331 chip built from the core and the modules.
mc683xx-board Board files: memories, peripherals from a registry, decoders and nets around the chip, on board time.
mc683xx-peripherals Stock peripherals for board files, each from its datasheet.
mc683xx-gdb A GDB remote stub over the bare CPU, the chip or a board.
mc683xx-run The runner: runs a board file from the command line.
mc683xx (PyPI) The Python package.

Status

  • CPU32 core: every instruction family (data movement, integer arithmetic and logic, shifts and rotates, bit operations, BCD, multiply and divide, chk2/cmp2, tbl*, program and system control, movec/moves, stop/lpstop/bkpt), exception processing with the CPU32's frames, interrupts, trace, and table-based cycle estimates. Checked against the manuals, SingleStepTests' 68000 cases, Musashi and a firmware function corpus.
  • Chip: the SIM (clock synthesizer, chip selects, bus monitor, PIT, watchdog, ports, resets), the QSM (QSPI and SCI) and the GPT, on next-event timing, deterministic run to run.
  • Host interface: peripherals on chip-select pins, QSPI peripherals, module pins, code, block and memory hooks, page permissions, tracing, and save/restore.
  • Boards: board files in TOML (memories, peripherals from a registry, decoders and nets on picosecond board time), and mc683xx-run, a command that runs one.
  • Stock peripherals: 74x373/374 latches, 74x244 buffer, 74x164 shift register, AD569 DAC, ADC0838 ADC, AT28C64B EEPROM, MC144110 DAC, MC68681 and SCC68692 DUARTs, each modeled from its datasheet.
  • gdb: a GDB remote stub over the bare CPU, the chip or a board.
  • Python: the chip, boards and a bare CPU, with Python objects as peripherals and callables as hooks, and type stubs.

Early: 0.x, and the API may change between minor versions.

Install

cargo add mc683xx-board      # boards, with the chip and core below it
cargo install mc683xx-run    # the runner
pip install mc683xx          # the Python package

Rust: a board (mc683xx-board)

Load a board file with the stock peripherals and run it for a second of board time (from the repository's root):

use std::error::Error;
use std::path::Path;

use mc683xx_board::board::Board;
use mc683xx_board::description::Options;
use mc683xx_board::registry::Environment;
use mc683xx_board::registry::Registry;
use mc683xx_board::time::Time;
use mc683xx_mc68331::chip::Mc68331;

fn main() -> Result<(), Box<dyn Error>> {
    let mut registry = Registry::with_builtins();
    mc683xx_peripherals::register(&mut registry)?;
    let mut board = Board::<Mc68331>::read(
        Path::new("examples/boards/echo.toml"),
        &Options::default(),
        &registry,
        Environment::default(),
    )?;
    let run = board.run_until(Time::from_seconds(1))?;
    println!("{:?} at {:?}", run.stop, run.now);
    Ok(())
}

Registry::with_builtins() holds the built-in peripheral types, mc683xx_peripherals::register adds the stock ones, and a host registers its own peripheral models the same way. A host can also build the chip directly, without a board file, with mc683xx_mc68331::chip::Builder (the host guide, below).

Python: a board (mc683xx)

The same board, with bytes sent to its console and echoed back:

import mc683xx

board = mc683xx.Board("examples/boards/echo.toml")
board.run_for(seconds=0.001)
for byte in b"hello":
    board.send("console", byte)
run = board.run_for(seconds=0.01)
print(run.stop, [frame for _, frame in board.take_received("console")])

The runner (mc683xx-run)

cargo run -p mc683xx-run -- examples/boards/echo.toml --bind console=stdio --seconds 5

runs the board the file describes for five seconds of board time, its external.console on standard input and output, and says on standard error why it stopped. --trace bus-cycles,exceptions,pins,qspi traces the run; --gdb 127.0.0.1:1234 waits at reset for gdb to run it. Standard input that is a file or a pipe is read to its end when input first goes in and fed a byte a turn, so the run is the same each time; a terminal's is live. --bind NAME=stdout writes an endpoint's output as stdio does and reads nothing, for an endpoint that only listens or to leave standard input to another binding. mc683xx-run --help gives the rest. The example's firmware, echo.bin, is committed, and make echo-image rebuilds it from examples/src/echo.rs; give a board its own with --firmware.

Documentation

  • Host guide: embedding the chip in a Rust host: building a chip, running, peripherals, pins, hooks, save/restore, errors.
  • Board files: the format, the built-in peripheral types and the Rust API for peripheral models.
  • Stock peripherals: the peripherals a board file names by part number, their parameters and ports.
  • Python: the same from Python.
  • gdb: debugging firmware with gdb.
  • Tracing: the run trace's format.
  • Performance: measurements and the benchmarks.
  • PLAN.md: the architecture and the decisions behind it.
  • Releasing: versions and the release procedure.

Workspace

The crates above are in crates/: cpu32 (mc683xx-cpu32), mc683xx (mc683xx-modules), mc68331 (mc683xx-mc68331), mc68331-board (mc683xx-board), peripherals (mc683xx-peripherals), gdb (mc683xx-gdb) and mc68331-run (mc683xx-run). The other members are not on crates.io:

  • cpu32-py (crates/cpu32-py): the Python package mc683xx, on PyPI.
  • examples: the host guide's examples, run as doctests, this README's, run as a test, and the example boards (examples/boards) with their firmware.
  • benches: the criterion benchmarks.
  • cpu32-harness, cpu32-oracle: test-only checks of the core against SingleStepTests' 68000 cases, Musashi, Unicorn and the firmware functions of smartclock (HP's firmware images, not in this repository).
  • snapshot-golden: test-only golden files of the snapshot formats.

Building

make hooks   # once per clone
make ci      # fmt check, license copies, commit-msg hook, clippy, tests, rustdoc
make python      # the Python module in .venv, with its tests
make echo-image  # examples/boards/echo.bin
make singlestep  # SingleStepTests m68000 (fetches about 140 MB once)
make oracle      # differential runs against Musashi (fetches it once)
make corpus SMARTCLOCK_FIRMWARE=...  # smartclock firmware functions
make boot-smoke SMARTCLOCK_FIRMWARE=...  # whole images from reset
make boot-diff SMARTCLOCK_FIRMWARE=... BOOT_DIFF_REFERENCE=...  # against smartclock-emu's trace
make bench       # benchmarks (docs/performance.md)
make deny        # dependencies' licenses and advisories (cargo-deny)
make smartclock-boards SMARTCLOCK_BOARDS=...  # smartclock's board files, stock peripherals real
make corpus-musashi SMARTCLOCK_FIRMWARE=...  # their results against Musashi
make corpus-unicorn SMARTCLOCK_FIRMWARE=...  # against Unicorn
make corpus-oracles SMARTCLOCK_FIRMWARE=...  # against both
make unicorn     # the Unicorn oracle's own tests and clippy
make gdb         # gdb-multiarch against the runner's --gdb

make python creates .venv with maturin, pytest and mypy the first time; after it, .venv/bin/python imports mc683xx.

The Unicorn targets build Unicorn and QEMU's m68k from C through the unicorn-engine crate the first time, which takes some minutes and needs cmake, a C compiler (cc or clang) and pkg-config. Unicorn is GPL-2.0; it is a test-only oracle, off by default and never part of the shipped crates (third_party/NOTICE).

The manuals in third_party/ are kept in Git LFS; git lfs install before cloning, or git lfs pull after.

Contributing

See CONTRIBUTING.md: changes follow the manuals and datasheets in third_party/, cite them, and come with tests.

Releases

One version for the crates and the Python package, semver from 0.1.0. Release notes are on GitHub's releases.

Specification

The vendor manuals in third_party/motorola/ are the specification; see third_party/NOTICE.

Metadata

Release files for mc683xx 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mc683xx 0.1.0
File Size Uploaded Provenance
mc683xx-0.1.0.tar.gz 673.0 kB With provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for mc683xx 0.1.0
File
mc683xx-0.1.0-cp310-abi3-win_amd64.whl CPython 3.10 abi3 Windows x86-64 Details
mc683xx-0.1.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 abi3 Linux glibc 2.17+ x86-64 Details
mc683xx-0.1.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.10 abi3 Linux glibc 2.17+ ARM64 Details
mc683xx-0.1.0-cp310-abi3-macosx_11_0_arm64.whl CPython 3.10 abi3 macOS 11.0+ ARM64 Details
mc683xx-0.1.0-cp310-abi3-macosx_10_12_x86_64.whl CPython 3.10 abi3 macOS 10.12+ x86-64 Details

Total release size: 9.6 MB

Release files / mc683xx-0.1.0.tar.gz

Download URL mc683xx-0.1.0.tar.gz
Size 673.0 kB
Tags Source
SHA-256 checksum
How to use checksums
47d752c8f02a1428a51bb2642f4aab245edc67a80e7af2b47cecc3be7cec3c09
BLAKE2b-256 checksum
How to use checksums
d564b18c58990375022d382bf91f87a497928c9277b682ae3d0e8648ea2fa4c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

Release files / mc683xx-0.1.0-cp310-abi3-win_amd64.whl

Download URL mc683xx-0.1.0-cp310-abi3-win_amd64.whl
Size 1.6 MB
Tags CPython 3.10 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
b5cf44e52d4f5564cf89f86a054a92bf5f1f4e85c82f83d67ec731d23ae054db
BLAKE2b-256 checksum
How to use checksums
a49a903803fc269c324615c957a4f37d5baad4c5adc02e656ce8e0dcc288547f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

Release files / mc683xx-0.1.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL mc683xx-0.1.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.9 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
7a72da3377d3fbc94f931b493d836ab6924eb6fd0848aa9cb71a92466b7e16b7
BLAKE2b-256 checksum
How to use checksums
cad51a13be5cb839a30a671d04128577f9835d184543e78a1a3e91176097ef23
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

Release files / mc683xx-0.1.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL mc683xx-0.1.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 1.9 MB
Tags CPython 3.10 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
6e7ade84c5c00175a7c01dc8489daf5669f3207a2204e67f8e1f9f827afd442d
BLAKE2b-256 checksum
How to use checksums
3f8968ed54ebb0b630cd10acbe8a653c5815a95504b7477f23ae8f7fffbfbb25
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

Release files / mc683xx-0.1.0-cp310-abi3-macosx_11_0_arm64.whl

Download URL mc683xx-0.1.0-cp310-abi3-macosx_11_0_arm64.whl
Size 1.7 MB
Tags CPython 3.10 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
5982f097e59473b0a872df775f81196fc401b3f86a8f529ff1081caa54ab1dd7
BLAKE2b-256 checksum
How to use checksums
1bb573c424e3ba4eb574ded1db9e6d56ec7020b7cc81cd91f4aad15d4dd2b097
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

Release files / mc683xx-0.1.0-cp310-abi3-macosx_10_12_x86_64.whl

Download URL mc683xx-0.1.0-cp310-abi3-macosx_10_12_x86_64.whl
Size 1.8 MB
Tags CPython 3.10 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
311271846438f9ff22a4d99a9daa920f98ea57a66734417d1d8016309ba05cf3
BLAKE2b-256 checksum
How to use checksums
44471bb185e2eab32c876eb2430846212120604b5675528b9e7a6c69cbe34ebf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

Security for mc683xx 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 6 files in this release have been uploaded with provenance metadata.

Select from 6 files

Attestation for mc683xx-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

6 release files Full provenance

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