* Add 4 window pixels of padding around the screen contents Move the canvases from emulated-pixel to window-pixel coordinates and draw the screen texture at an explicit 3x rect inset by PAD, so the contents no longer touch the window border. The dst rect stays an exact integer 3x of the texture, keeping the nearest-neighbor crispness. In the ][+ this also stops the status-bar mode from stretching the screen over the bar strip before overdrawing it: the screen rect is now mode-independent and the bar sits below it inside the side padding. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Make the window padding configurable via EWM_WINDOW_PADDING Defaults to 4; missing or unparsable values fall back to the default. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Emulated Woz Machine
EWM is an emulator for the machines Steve Wozniak built: the Apple 1, the Replica 1 and the Apple ][+. It started life many years ago as a tiny 6502 emulator written between christmas and new year, and has since grown into a full emulator with Disk II support, graphics, and sound.
Note: EWM is a hobby project and still under development. Things may be incomplete, quirky, or broken — bug reports and pull requests are welcome. See REWRITE.md for the project's verification gates and a list of known quirks and deliberate divergences.
![]() |
![]() |
| Replica 1 — KRUSADER 1.3 from the Woz Monitor | Apple ][+ — booting the DOS 3.3 sample programs disk |
![]() |
![]() |
| Frogger in color hi-res graphics | Bandits by Sirius Software |
What's emulated
- Apple 1 — 6502, 8KB RAM, Woz Monitor
- Replica 1 — 65C02, 32KB RAM, KRUSADER assembler ROM
- Apple ][+ — 6502, 48KB RAM, Apple Language Card, Disk II with two drives, a slot 7 hard drive for 32MB ProDOS block images (boots Total Replay!), 40-column text, low-resolution and high-resolution graphics (color or green monochrome), speaker sound, joystick paddles and buttons
Requirements
- A Rust toolchain (the pinned version is in
rust-toolchain.toml; rustup picks it up automatically) - SDL2 —
brew install sdl2on macOS,apt install libsdl2-devon Debian/Ubuntu
Building
cargo build --release
Running
Running EWM with no arguments opens the bootloader, a menu where keys 1/2/3 select the machine to start:
cargo run --release
Or start a machine directly:
# Apple ][+ with color graphics and the DOS 3.3 sample programs disk
cargo run --release -- two --color --drive1 disks/DOS33-SamplePrograms.dsk
# Apple ][+ booting Total Replay from a ProDOS hard drive image
cargo run --release -- two --color --hdd "disks/Total Replay v6.0.1.hdv"
# Replica 1 (Woz Monitor + KRUSADER)
cargo run --release -- one --model replica1
# Classic Apple 1
cargo run --release -- one --model apple1
Each subcommand accepts --help for all options. Useful keys while the
emulator runs:
| Key | Action |
|---|---|
| Cmd-R | Reset the machine |
| Cmd-Return | Toggle fullscreen |
| Cmd-P | Pause (Apple ][+) |
| Cmd-I | Toggle the status bar with drive lights (Apple ][+) |
There are also headless terminal consoles, handy for quick experiments without a window:
cargo run -p ewm --example one # Woz Monitor
cargo run -p ewm --example two -- disks/DOS33-SystemMaster.dsk # AppleSoft / DOS 3.3
Testing
cargo test
This runs the full verification suite: the Klaus Dormann 6502 and 65C02
functional tests, golden instruction traces, headless machine boot tests,
a complete DOS 3.3 boot with CATALOG, and a golden screenshot comparison.
The cc65 assembly sources under tests/ are manual test programs for the
machines themselves and are not part of the automated suite.
History
EWM was originally written in C and was ported to Rust in 2026 — the full phase-by-phase plan, parity checklist, and benchmark numbers are preserved in REWRITE.md. The original C implementation lives in the git history.
License
MIT, as declared in Cargo.toml (the same license the original C carried
in its source headers).


![Apple ][+ booting DOS 3.3](/Apple-2-Tools/ewm/media/commit/fec25cfec8c4f104f96e15b85aefd97292c1063f/screenshots/Screenshot%202026-07-05%20at%2011.30.59.png)

