4 Commits
Author SHA1 Message Date
Stefan ArentzandClaude Opus 4.8 a45b920e8f Mouse plan M5: docs + as-built notes/MOUSE.md (#329)
The closer for the AppleMouse II card (plans/20260721-01, now complete). No
code — the as-built record and the config surface's documentation.

- notes/MOUSE.md: the as-built — synthetic firmware and the identification /
  screen-hole map, the private DEVSEL protocol, the interrupt model and the
  reusable maskable-IRQ line (so Mockingboard inherits it), and the
  coordinate decision (absolute/mapped, revised from the plan's
  relative/captured).
- README: the "What's emulated" list gains the AppleMouse II; a runnable
  example (examples/mouse.json, a slot-4 mouse //e) checked by
  readme_examples_parse.
- notes/JSON_CONFIG.md: the slot-card inventory gains "mouse" (one, any slot
  1-7, both families); notes/STATE.md lists the Mou Persist fields;
  notes/IDEAS.md ticks the AppleMouse item and points Mockingboard at the
  shared IRQ line.

Gate: readme_examples_parse + standard gates (382 pass).

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 01:27:48 -04:00
Stefan ArentzandClaude Opus 4.8 869ba8175e Rename builtin:apple2e -> apple2enhanced (//e original-plan E1) (#316)
Our `apple2e` was really the Enhanced //e (65C02 + 342-0303/0304 system
ROMs + the 342-0265 MouseText video ROM). Rename the config-level token
to the honest `apple2enhanced`, freeing `apple2e` for the true original
(unenhanced) //e that E2-E4 add. Mechanical, mirroring the
`2plus`->`apple2plus` rename (#308); no ROM or machine changes.

What moved (the config surface only):
- `config::Model` serde token + `Model::token()`; `git mv
  configs/apple2e.json -> apple2enhanced.json` with model updated and
  title made honest ("Apple //e" -> "Enhanced Apple //e", reserving
  "Apple //e" for E4's original). BUILTINS re-sorts in place (apple2enhanced
  sorts before apple2plus, so no manual reorder).
- The `Persist` INFO model string mirrors the token by design
  (apple2/apple2plus/...), so it renames too, keeping save-states
  self-describing as `apple2enhanced`.
- Every `"apple2e"` config-token literal in tests/error strings; usage
  and `--config` help text; README, notes/JSON_CONFIG.md, notes/MAC_APP.md,
  examples/myiie.json. Both JSON schemas regenerated from source
  (EWM_UPDATE_SCHEMA=1), not hand-edited.
- `builtin:list` column widened 12->16 so the longer name still aligns.

Deliberately NOT touched (internal, renamed later by E3): the Rust
identifiers `TwoType::Apple2E` / `Model::TwoE`, the `two_e_*` test files,
and their "apple2e must construct" panic strings — they name the type,
which stays until E3 splits the two machines.

Verified: cargo fmt --all --check, cargo clippy --all-targets -D warnings,
and cargo test (359 pass, incl. the golden-BMP screenshots and
readme_examples_parse). Gate: `builtin:list` shows apple2enhanced; the old
`builtin:apple2e` errors "no built-in config ... (available: apple1,
apple2, apple2enhanced, apple2plus, replica1)".

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 22:58:41 -04:00
Stefan ArentzandClaude Fable 5 64dc24f7a5 Rename model tokens: 2plus -> apple2plus, 2e -> apple2e (#308)
Spell out the two-family model tokens so every machine reads the same
way — apple1, apple2e, apple2plus, replica1 — ahead of adding the
original Apple ][ as `apple2` (plans/20260720-01). Pre-1.0, so the old
terse tokens go outright: `--set machine:model=2plus` and
`--config builtin:2plus` are now apple2plus / apple2e, and an old name
errors with the available list.

Mechanical and wide: the config::Model serde tokens and Model::token(),
the BUILTINS table (renamed, re-sorted, include_str paths), configs/
files (git mv 2plus.json/2e.json -> apple2plus.json/apple2e.json) and
their model values, the ewm/tests/configs fixtures, every "2plus"/"2e"
string literal in tests and error messages, the examples, both schemas,
and the live docs (README, JSON_CONFIG, IDEAS, MAC_APP). Guarded
word-boundary replacement so e2e, new_2e and hex escaped it. The
builtin:list column widened to fit the 10-char "apple2plus".

Verified: fmt, clippy -D warnings, the full suite (37 binaries incl.
golden-BMP and the README example check) pass; builtin:list and the
old-token error checked against the real binary.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 19:49:15 -04:00
Stefan ArentzandClaude Fable 5 a3c856aab3 Docs sweep: README around the four config sources (C5) (#282)
Phase C5, the last phase of plans/20260718-02-config-sources.md.

The README's config section is rewritten around the compositional
model — one document, four source kinds merged in command-line order
(--config base, --config-overlay layers, --set overrides, convenience
flags on top) — with the Total Replay overlay as the worked example
and --config builtin:2e in the quick-start. The example configs are
now committed under examples/ (myiie.json and
drive-with-total-replay.json, shown verbatim in the README), so every
example references real files. --print-config closes the section as
the "what machine did I just describe?" / linter answer.

The gate's scripted check is the readme_two_examples_parse test in
two.rs: it extracts every `cargo run --release -- two ...` example
from the README (quote-aware, continuation-joining) and runs it
through parse_options, which opens every --config/--config-overlay
source — so a renamed flag, a bad example path, or an example config
that stops validating fails the suite.

Notes brought up to date: JSON_CONFIG.md's status table gains the
config-sources row (C1-C5 done) and Phase C is marked as seeded by
options_to_config; IDEAS.md moves machine config files from "in
progress" to "landed" with the remaining palette work named;
MAC_APP.md's Phase 3 bullet records that .ewmachine bundles can be a
thin layer over the landed source surface. Also fixes the --fps usage
text (the default is 40, not 30 — drift spotted during C4).

Verified: the README's composed, complete-config, and overlay-only
examples run against the real binary from the repo root (exit 0,
expected documents); fmt, clippy -D warnings, and the full suite
(including the golden-BMP screenshot tests) pass.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 21:41:42 -04:00