mirror of
https://github.com/st3fan/ewm.git
synced 2026-10-25 02:02:15 +00:00
Phase A2 of plans/20260720-01-original-apple2.md. config::Model gains Two (serde token "apple2"), apple2 family, two_type() -> TwoType::Apple2; that arm of new_with_slots is now a real constructor instead of "unsupported". Two::new_apple2 builds the 48K machine on the same TwoIo motherboard as the ][+, mapping the Integer ROM set from A1: Programmer's Aid at $D000-$D7FF, a hole at $D800-$DFFF (unmapped -> $00), Integer BASIC at $E000-$F7FF, Original Monitor at $F800-$FFFF. The Monitor is non-autostart, so no emulator code is needed for the behavioral difference: reset lands at the `*` prompt and does NOT boot the Disk ][ in slot 6 (a ][+ would). The A1 ROM statics lose their #[allow(dead_code)]; options_to_config now maps Apple2 -> Model::Two (so --print-config round-trips), and the state INFO tag is "apple2". Slot 0 (the memory-expansion socket) is deferred: wiring a Language Card / Saturn to bank the Integer ROM is future work, so apple2 is 48K for now. An explicit slot-0 card fails validation with a clear message; the default ][+ layout's Language Card (inherited by a bare `--set machine:model=apple2`) is refused at build time, pointing at the fix. builtin:apple2 (A3) is the clean no-slot-0 path. Gate: apple2 resets to the Monitor `*` prompt (not an autostart disk boot), Ctrl-B enters Integer BASIC and PRINT 2+2 answers 4; the slot-0 rejection is pinned at both the validation and build stages. Schemas regenerated for the new Model token. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>