Files
Stefan ArentzandClaude Opus 4.8 7815eedb93 Add the original (unenhanced) //e machine (//e original-plan E3)
`model: apple2e` is now a real machine: a 6502 //e with the unenhanced
342-0134/0135 system ROMs and the 342-0133 video ROM, alongside the
Enhanced //e (65C02, 342-0303/0304, MouseText). Kickoff naming (owner):
`Model::TwoE` / `TwoType::Apple2E` = the original (the plain name), the
Enhanced kept the `*Enhanced` names from the prep commit.

- config: `Model::TwoE` (token `apple2e`) joins the enum; family / token /
  two_type / the aux + slot-0 //e validation all cover both //e models.
- two.rs: `TwoType::Apple2E` + `TwoType::is_iie()`; `new_2e` takes the
  variant and selects (6502, unenhanced ROMs) or (65C02, Enhanced ROMs);
  `IouE::new` takes the CD/EF halves. The `Persist` INFO string and
  `--print-config` mapping gain the `apple2e` arm. Schemas regenerated.
- rendering: `Scr` holds both //e glyph sets and picks by variant; the
  five `== Apple2E` //e-detection sites become `is_iie()` (the original
  and Enhanced //e render identically apart from the character ROM).

The one real subtlety — the original //e is NOT a plain ROM swap. Its
video ROM stores plain upper case at `$40-$5F`, but the original //e
*displays* inverse upper case there (the glyphs Apple later replaced with
MouseText). So `alternate_index` gains a `mousetext` flag: the Enhanced
set reads MouseText straight from ROM, the original inverts the upper-case
glyph — the same steady inverse glyph the primary set flashes.
(`render_txt_row_80` also dropped its redundant `line_offset` arg, derived
from `row`, to stay under clippy's argument limit.)

Gates (all green): the Enhanced //e is byte-identical — the golden-BMP
screenshots don't move; a golden pins the composed original-//e $E000-$FFFF
to the unenhanced EF half (and different from the Enhanced); the bare
original //e cold-boots to `]` on the 6502; and a char test proves the
alternate $40-$5F is inverse upper case, distinct from Enhanced MouseText.
cargo fmt / clippy -D warnings / cargo test (364 pass).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 23:41:12 -04:00
..