ewm two and ewm boo run windowed; the frontend is feature-complete against the C binary (minus Lua, by decision): - ewm/src/scr.rs: scr.c — TEXT with interleaved rows and flashing, LGR 16-color blocks, HGR in green monochrome or color (including the fringing fix from #187: adjacent-pixel white detection and column-parity coloring), mixed mode, page 2. Rendering is pure pixels (no SDL) so the golden screenshot gate runs headless in CI; the loop uploads the buffer as a streaming texture. Includes a dependency-free BMP encoder for --screenshot and the golden test. - ewm/src/snd.rs: snd.c (#188) — the core's cycle-stamped $C030 toggles replay into a square-wave sample buffer queued to SDL, with the same 100ms backpressure check. - ewm/src/two.rs: the SDL loop of two.c — fixed 40 fps step with 1023000/fps cycle bursts, --drive1/--drive2/--color/--fps/--memory/ --trace/--strict/--debug, controller buttons and joystick paddles, the key mapping (with two.c's TAB fallthrough and alt-keyup-only button clearing), Cmd-Esc reset, Cmd-Return fullscreen, Cmd-P pause with the tty overlay, Cmd-I status bar with the fake ~1.023 MHz display (quirk #3) and drive lights, and the hidden --screenshot=<path> debug flag (BMP after 120 frames, then exit). - ewm/src/boo.rs: boo.c — the bootloader menu; main.rs dispatches one/two/boo with no args running boo, as ewm.c does. - Golden gate: rust/ewm/golden/two-boot.bmp is the System Master boot screen rendered after a fixed 100M cycles; the test boot_screen_matches_golden_bmp re-renders and compares byte for byte (regenerate with EWM_WRITE_GOLDEN=1). - Core: Two::ram() read access for the renderers, extra --memory regions (dispatched after base RAM like the C fast path), and Dsk::active_drive() for the drive lights. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Emulated Woz Machine
Introduction
Two years ago between christmas and new year I wrote a tiny and incomplete 6502 emulator and turned it into an original Apple 1 emulator. It was a fun and nostalgic project to work on. I grew up with the Apple II and never had a change to see an Apple 1 in action.
A few weeks ago I decided to pick this project up again. I am extremely motivated to turn this into a high quality emulator that supports the Apple 1, Replica 1, Apple ][+ and Apple IIe. Some of that work is really close to being finished, other work will take many months of spare time hacking.
Note: A Rust rewrite is in progress; see REWRITE.md. The C build below remains the primary build until the rewrite completes.
Goals & Status
Here are some of the things I want to accomplish for each emulated machine:
CPU Emulator
6502 support65C02 supportTracing facility- Debugger
- Speed throttling
Apple 1
8K / 6502 / Classic ROM
Terminal based emulationClassic display emulation (SDL based)- Cassette interface
Replica 1
32K / 65C02 / KRUSADER ROM
Terminal based emulationClassic display emulation (SDL based)- Cassette interface
- CFFA1 Support
Apple ][+
48K / 6502
Basic Apple ][+ architecture implementation - In progressDisk II emulation - In progressDisplay Emulation - 40 Column modeDisplay Emulation - Low resolution graphicsApple Language CardJoystick Support- Audio Support
- Display Emulation - High resolution graphics - Mostly works.
Building the emulator
cd src
make
Running the emulator
From the command line:
./src/ewm two --color --drive1 disks/DOS33-SamplePrograms.dsk
