diff --git a/Assets/game-choplifter.png b/Assets/game-choplifter.png new file mode 100644 index 00000000..54bb10f4 Binary files /dev/null and b/Assets/game-choplifter.png differ diff --git a/Assets/game-karateka.png b/Assets/game-karateka.png new file mode 100644 index 00000000..ba4d5c12 Binary files /dev/null and b/Assets/game-karateka.png differ diff --git a/Assets/game-loderunner.png b/Assets/game-loderunner.png new file mode 100644 index 00000000..6f0cb98d Binary files /dev/null and b/Assets/game-loderunner.png differ diff --git a/CHANGELOG.md b/CHANGELOG.md index 863fa4d1..fb8b0a5c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,22 @@ Format follows [Keep a Changelog](https://keepachangelog.com/). Versioned entries use `MAJOR.MINOR.BUILD` from [Version.h](CassoCore/Version.h). Entries before versioning was introduced use dates only. +## [1.5.1289] — Copy-protected games boot + +This release celebrates a milestone: Casso now boots original, +copy-protected Apple II games straight from their unmodified WOZ +preservation images. *Karateka*, *Choplifter*, and *Lode Runner* — +three Broderbund classics whose protection schemes defeated naive +emulation — all load and run. + +The fidelity work behind this milestone landed across the 1.4 series +(motor spin-up delay, MC3470 weak-bit emulation, a real 16-state Logic +State Sequencer, the quarter-track read pipeline for half-track +protection, and a bit-level write path). This entry marks the point at +which those pieces came together well enough to run real protected +software, and bumps Casso to **1.5**. + + ## [1.4.1288] — Protected games boot: quarter-track disk pipeline ### Added diff --git a/CassoCore/Version.h b/CassoCore/Version.h index 08f02d8f..db56081f 100644 --- a/CassoCore/Version.h +++ b/CassoCore/Version.h @@ -4,8 +4,8 @@ // The build number and year are automatically updated by the pre-build script #define VERSION_MAJOR 1 -#define VERSION_MINOR 4 -#define VERSION_BUILD 1288 +#define VERSION_MINOR 5 +#define VERSION_BUILD 1289 #define VERSION_YEAR 2026 // Helper macros for stringification diff --git a/README.md b/README.md index 2476cc7f..70bd1128 100644 --- a/README.md +++ b/README.md @@ -24,12 +24,20 @@ The project includes: - **CLI tool** — runs as an AS65-style assembler by default, or with the `run` subcommand to load and execute a binary or assembly source. - **First-run asset bootstrap** — Casso fetches the ROMs, sample disks, and Disk II audio samples it needs on first launch (with user consent), so a fresh `Casso.exe` boots to a usable //e BASIC prompt with no manual setup. - **Headless test harness** — `HeadlessHost` drives the emulator with no Win32 window, enabling deterministic integration tests for cold boot, disk boot, video framebuffer hashing, and reset semantics. -- **1500+ unit tests** — comprehensive coverage of CPU instruction encoding, addressing modes, arithmetic, branching, assembler features, audio pipeline (speaker + drive), //e MMU + Language Card, video timing, Disk II nibble engine, WOZ + nibblized image formats, 80-col + DHGR video, reset semantics, perf budget, and backwards-compat for ][/][+ machines. +- **1600+ unit tests** — comprehensive coverage of CPU instruction encoding, addressing modes, arithmetic, branching, assembler features, audio pipeline (speaker + drive), //e MMU + Language Card, video timing, Disk II nibble engine, WOZ + nibblized image formats, 80-col + DHGR video, reset semantics, perf budget, and backwards-compat for ][/][+ machines. ## What's New See [CHANGELOG.md](CHANGELOG.md) for the granular history. +### Copy-protected games boot (v1.5.1289) + +Casso's Disk II stack now models quarter-track head positioning and the authentic Logic State Sequencer faithfully enough to boot original, copy-protected Broderbund WOZ disk images straight off the wire. Three classics — *Karateka*, *Choplifter*, and *Lode Runner* — load and run from their unmodified preservation images, protection schemes and all. + +| Karateka | Choplifter | Lode Runner | +| :---: | :---: | :---: | +| ![Karateka booting in Casso](Assets/game-karateka.png) | ![Choplifter title screen in Casso](Assets/game-choplifter.png) | ![Lode Runner running in Casso](Assets/game-loderunner.png) | + ### UI Overhaul (v1.4.1171) Casso's entire chrome moved from the legacy Win32 menu bar / Win32 dialogs to a borderless, themed shell rendered straight onto the same D3D11 framebuffer that draws the emulator video — using a native Direct2D / DirectWrite pipeline (`DxUiPainter` + `DwriteTextRenderer`), no third-party UI engine. @@ -216,7 +224,7 @@ All 56 standard 6502 mnemonics are implemented. Validated against [Klaus Dormann - [ ] 65C02 extended instruction support, with assembler `--cpu` flag ([#9](https://github.com/relmer/Casso/issues/9)) - [ ] Undocumented / illegal opcode support ([#52](https://github.com/relmer/Casso/issues/52)) - [ ] Rockwell / WDC 65C02 variants ([#49](https://github.com/relmer/Casso/issues/49), [#50](https://github.com/relmer/Casso/issues/50)) -- [ ] *Choplifter* gameplay starts after the title screen (WOZ copy protection) — boots; needs joystick/button input ([#69](https://github.com/relmer/Casso/issues/69), [#72](https://github.com/relmer/Casso/issues/72)) +- [ ] *Choplifter* gameplay starts after the title screen (WOZ copy protection) ([#69](https://github.com/relmer/Casso/issues/69), [#72](https://github.com/relmer/Casso/issues/72)) ### Low Priority