mirror of
https://github.com/st3fan/ewm.git
synced 2026-10-25 17:02:19 +00:00
ewm-core used to mean "everything headless", which put the Apple wiring (pia, dsk, alc, chr, one, two) next to the generic CPU. The crates now split kernel-vs-machine: - ewm-core keeps only what is common to machines: cpu, mem, ins, fmt, plus the CPU-level tests (Dormann, golden trace) and the benches. - ewm gains a library target beside its binary and owns everything Apple-specific: the devices (pia, dsk, alc, chr) and the machines. one.rs and two.rs now each hold the machine *and* its SDL loop, restoring the original one.c/two.c file layout. main.rs is the thin ewm.c-style dispatcher over the library. - The machine tests (boots, DOS 3.3 + CATALOG, language card) and the headless example consoles move to ewm with the machines; the consoles run as 'cargo run -p ewm --example ...' (README updated). scr stays in the frontend, unchanged. Pure code motion, no behavior change: all 39 tests pass unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
106 lines
3.5 KiB
Markdown
106 lines
3.5 KiB
Markdown
# 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](REWRITE.md) for the project's verification
|
|
> gates and a list of known quirks and deliberate divergences.
|
|
|
|

|
|
|
|
| | |
|
|
|---|---|
|
|
|  | ![Apple \]\[+ booting DOS 3.3](screenshots/Screenshot%202026-07-05%20at%2011.30.59.png) |
|
|
| *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, 40-column text, low-resolution and high-resolution graphics
|
|
(color or green monochrome), speaker sound, joystick paddles and buttons
|
|
|
|
## Requirements
|
|
|
|
* A [Rust toolchain](https://rustup.rs) (the pinned version is in
|
|
`rust-toolchain.toml`; rustup picks it up automatically)
|
|
* SDL2 — `brew install sdl2` on macOS, `apt install libsdl2-dev` on
|
|
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
|
|
|
|
# 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-Esc | 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](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).
|