Stefan ArentzandClaude Fable 5 e331ebeadc Phase 7: Apple ][+ SDL frontend and boo menu
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>
2026-07-05 10:46:12 -04:00
2016-11-29 21:52:29 -05:00
2016-11-26 08:50:38 -05:00
2016-12-26 11:10:26 -05:00
2017-09-18 21:21:57 -04:00

Emulated Woz Machine

Build Status

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 support
  • 65C02 support
  • Tracing facility
  • Debugger
  • Speed throttling

Apple 1

8K / 6502 / Classic ROM

  • Terminal based emulation
  • Classic display emulation (SDL based)
  • Cassette interface

Replica 1

32K / 65C02 / KRUSADER ROM

  • Terminal based emulation
  • Classic display emulation (SDL based)
  • Cassette interface
  • CFFA1 Support

Apple ][+

48K / 6502

  • Basic Apple ][+ architecture implementation - In progress
  • Disk II emulation - In progress
  • Display Emulation - 40 Column mode
  • Display Emulation - Low resolution graphics
  • Apple Language Card
  • Joystick 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
S
Description
Emulated Woz Machine - Apple ][+ Emulator
Readme
4.4 MiB
0 Stars 1 Watchers 0 Forks
Languages
C 95%
Lua 1.8%
Makefile 1.5%
Assembly 1.4%
CMake 0.3%