Second round of 4-agent parallel code review found several
critical bugs that were not caught in the first review:
Critical (game-breaking):
1. Screen RAM writes go to VIC registers, not DRAM — with
$01=$35, writes to $D000 hit VIC-II registers, not screen
RAM. Also disables raster IRQ ($D01A overwritten). Works in
oscar64 emulator (doesn't simulate banking).
2. vic_setup_mcm() clears RST8 on every screen change — moves
raster IRQ from line 311 to line 55 (visible display).
3. $D41B random still frozen — audio_stop() re-zeroes voice 3
freq; NOISE waveform bit never set. WAIT always 100 frames.
4. Makefile: $(PRG) has no rule — make run-vice fails on clean
checkout.
5. Makefile: .PHONY lists non-existent targets.
Medium (spec deviations, edge cases):
- DRAW fault >500 vs >=500 (1 frame off)
- Counter minimum value 2 not 1
- WAIT upper bound 249 not 250
- DRAW strobe 5 frames not 4
- GAMEOVER resets scores immediately (spec: show final score)
- ADSR decay comments inconsistent with constants
- clear_color_ram() 4x redundant
- memmap_setup() redundant MMAP_RAM call
- Makefile: no VICE/c1541/$DISPLAY checks, setsid PID fragile,
parallel race, oscar64 guard duplicated
Low (cosmetic, docs):
- Doc 'WHACKED' references, font array signedness,
memmap_restore dead code, PROG_C64 banking oversimplification,
Makefile clean @ prefix, undocumented intermediates
No fixes applied — these are tasks for a future Phase 10 work
session.
All 8 implementation phases are done. Changes:
- Marked every phase as ✅ done with all tasks checked
- Fixed verify steps to use 'make run' / 'make play' (was broken
shell commands like 'cd src && ./make run')
- Added 'Post-Phase 8 work' section documenting the Makefile
migration, VICE autostart fix, rename to Nyuller, build dir
move, and code review fixes
- Updated VICE section: now works with -drive8type 1541, make
play/kill manage the lifecycle
- Added LZO screen swap refactor and trampoline re-enable to
optional Phase 9 features
New targets:
help (default) — show usage (was the -help/--help equivalent)
compile — compile main.c → build/nyuller.prg
run — compile + run in oscar64 built-in emulator
run-vice — compile + run in VICE x64 (foreground)
run-vice-cycle — compile + run in VICE x64sc (cycle-exact)
play — compile + launch VICE x64 detached
play-cycle — compile + launch VICE x64sc detached
kill — kill any detached VICE
clean — remove build/ artifacts
build/nyuller.d64 — build the .d64 disk image from the .prg
Optimization: override with 'make OPT=O3' (or O0/O1/O2/Os/g).
Default is -O1 (oscar64 default).
The Makefile builds oscar64 automatically if missing, uses
c1541 to create the .d64 with verification, and passes
-drive8type 1541 to VICE (required for autostart).
Removed src/build.sh and updated all docs (README, tasks.md,
AGENT_CONTEXT.md, GAME.md, helloworld.c) to reference make.
All references updated:
- src/build.sh: PRG=nyuller.prg, D64=nyuller.d64, disk name 'ny',
all grep/pgrep patterns updated, all comments updated
- All 10 header files: include guards WHACK_HARE_* → NYULLER_*
- C source comments: 'Whack Hare!' → 'Nyuller'
- README.md: updated build command output path
- GAME.md: title updated
- tasks.md: all whack_hare.prg → nyuller.prg
- src/AGENT_CONTEXT.md: project name updated
- tools/convert_screens.py: project name updated
Build artifacts renamed: whack_hare.* → nyuller.*, whack.d64 → nyuller.d64
Note: title screen image (source_images/screen_title.png) still shows
'WHACKED' logo — that's a visual asset, not a code reference.
The build directory was under src/, which is unusual for a project
with a separate source tree. Moving it to the repo root's build/
directory follows the conventional project layout:
./build/ # build output (gitignored)
./src/ # source code only
./oscar64/ # compiler (submodule)
Changes:
- src/build.sh: BUILD_DIR changed from $SCRIPT_DIR/build to
$ROOT/build
- .gitignore: replaced src/build/ with build/
- README.md: updated layout tree, build commands, and output path
- src/AGENT_CONTEXT.md: updated gitignore reference
- tasks.md: replaced all src/build/ with build/
VICE x64 is a GUI emulator that requires a real X11/Wayland display.
In this headless environment the KERNAL/BASIC/CHAR/1541 ROMs had to be
fetched manually, autostart produced blank screenshots (no display
to render to), and no other C64 emulator is installed. The oscar64
built-in emulator (-e) is the practical headless test tool. VICE is
left in build.sh as -v / -V for interactive use in a real terminal
session, but tasks.md and README.md are updated to reflect that the
development loop and all Verify steps use the oscar64 emulator.
Removed the failed test artifacts from src/build/.