To download the source code, build the KC 87 binary, and install it in $HOME/.cargo/bin in one go run:
cargo install --locked --git https://github.com/coignard/kc87You can also install the latest release directly from crates.io:
cargo install kc87Or install via Homebrew:
brew install coignard/tap/kc87Alternatively, you can manually download the source code and build the KC 87 binary with:
git clone https://github.com/coignard/kc87
cd kc87
cargo build --release
sudo cp target/release/kc87 /usr/local/bin/Add the following to your Cargo.toml:
[dependencies]
kc87 = "0.7.0"cargo testTests use a replay-based snapshot system. Each file in tests/replays/ is a JSON recording of a session: input events, timing, and metadata (ROM name, sample rate, display settings, SHA-256 of the ROM).
The emulator replays the events and at each checkpoint compares machine state and screenshot against the expected dumps in tests/dumps/.
To update snapshots after an intentional change:
UPDATE_SNAPSHOTS=1 cargo testPlease note that changes to u880 that affect instruction timing or CPU state require manually reviewing and rerecording the affected replays, not just regenerating snapshots.
Thanks to Jens Müller for his JKCEMU source code, which was a reference for the RTC, 80-column mode, PZG, Robotron/KRT graphics, and floppy disk controller implementations, Andre Weissflog for inspiring this project with his KC 87 emulator, Volker Pohlers for his Z 9001/KC 87 documentation and test programs, Filippo Scognamiglio for his cool-retro-term shaders, and Olga Podivilova for the KC 87 illustration.
The KC 87 source code is © 2026 René Coignard and licensed under the GNU General Public License v3.0 or later.
The KC 87 SDK source code is © 2026 René Coignard and licensed under the GNU Lesser General Public License v3.0 or later.
The flat assembler g source code is © 2015-2025 Tomasz Grysztar and licensed under the BSD 3-Clause License.
The cool-retro-term shaders are © 2013-2021 Filippo Scognamiglio and licensed under the GNU General Public License v3.0.