I asked GPT-5.6 Luna to help build a Sudoku game for the Commodore 64 in 6502 assembly language. This post documents the experiment: the early proof of concept, the handoff to GPT-5.6 Sol when problems appeared, what worked, what broke, and the plan for a more graphical C64 version.
At each phase I create new contexts and run the plan through that phase of development. If Luna fails. I take what Luna did, and run a new Context with GPT 5.6 Sol.
Phase 0 — Lock the C64 design contract
Phase 1 — Toolchain and boot smoke test
Did Luna get its own tool chain testing steps, and input harness, board preview working. Yes it did.

Here we see the build POC where the program is accepting keyboard and joystick input on VICE on MacOSX.
Phase 2 — Pure Sudoku core
Phase 3 — Canonical puzzle pack and game selection
After iteration the TODO List was not updated by GPT 5.6 Luna.
- [ ] Export games 1–100 × four difficulties from the native/web reference into a documented intermediate format on the Mac.
- [ ] Validate every pack entry: clue count, valid completed solution, and solution compatibility with all givens.
- [ ] Convert the validated data into a compact C64-friendly binary or assembly include file.
- [ ] Implement game-number and difficulty selection, wrapping, and loading.
- [ ] Record the pack format and generator version so future puzzle changes are reviewable.
Luna had a hiccup here. The POC got a little wrecked with the changes, became unresponsive to keyboard and joystick.

I decided to have GPT 5.6 SOL run with corrections. “Ok GPT 5.6 Luna build the base out, but there is a bug when I run the last phase of development for SudokuGeekC64, can you review the code and see why it still looks like the base POC test phase 2?
~/source2026/Games2026/SudokuGeekC64 (main*) » x64sc –autostartprgmode 1 -autostart build/SudokuGeekC64.prg”
I also passed in a lot of debug info and errors from vice.
Phase 3 — completed by GPT 5.6 Sol
And the TODO list was updated by GPT 5.6 SOL
- [x] Export games 1–100 × four difficulties from the web reference into a documented generated pack format on the Mac.
- [x] Validate every pack entry: clue count, unique completed solution, and solution compatibility with all givens.
- [x] Convert the validated data into a compact C64-friendly assembly include file.
- [x] Implement game-number and difficulty selection, wrapping, and loading.
- [x] Record the pack format and generator version so future puzzle changes are reviewable.
GPT 5.6 SOL – My prompt mistake was not asking for limiting to finishing phase 3.
At this point GPT 5.6 went the full steam ahead and did a lot of programming more phases. I had pointed it at the directory to fix, without it seeing the directory it was in, or asking it to merely fix this 3rd phase.
Phase 4 — Character-mode playable board
- [x] Draw a readable 9×9 board in the 40×25 screen using PETSCII/custom characters and color RAM.
- [x] Render givens, player values, selected digit, and cursor state.
- [ ] Render compact player notes in the character board.
- [x] Add keyboard and joystick navigation with repeat/debounce behavior.
- [x] Implement number-first selection, placement feedback, invalid move feedback, erase, and completed-number picker hiding.
- [ ] Keep redraws bounded: update changed cells and HUD regions instead of repainting the entire screen for every input.
**Gate:** a player can complete a known Easy puzzle entirely in VICE using the
joystick or keyboard, and invalid moves never remain on the board. Automated
VICE keyboard scenarios now cover render, select/place, rejection, erase, and
undo; a full puzzle and interactive joystick pass remain open.
Phase 5 — Assistance, flow, and persistence
- [ ] Add player notes mode using a compact 3×3 candidate representation.
- [ ] Add three-stage hints: locate, reveal, place; any other action resets the hint stage as in the native contract.
- [x] Add one-place undo to the playable board.
- [ ] Add timer, with pause/menu handling.
- [ ] Add win screen, next game, replay, and difficulty/game-number selection.
- [ ] Add the smallest useful save/restore path for the selected target media; keep persistence off the critical path until the Mini’s loader behavior is
- confirmed.
In about 10 minutes most of Phase 5 was completed by GPT 5.6 Sol.

Key fixes:
- Loaded givens and player values render with distinct colors.
- Picker selection, placement, invalid rejection, erase, and undo are connected.
- Completed digits hide and cannot be reselected.
- Keyboard and joystick fire are release/edge gated.
- BASIC ROM is banked out so Expert 98–100 load correctly.
- Game state no longer overlaps KERNAL zero-page memory.
- All text fits the 40-column display.
- Fixed the latent notes-index core bug.
./tools/verify-core.shnow executes VICE and returnedDBGCART: exit(0)/CORE PASS.
VICE screenshots verified rendering, no-selection feedback, legal placement, conflicting-move rejection, erase, and undo.
The rebuilt program is [SudokuGeekC64.prg](/Users/wthomps/source2026/Games2026/SudokuGeekC64/build/SudokuGeekC64.prg). Documentation and changelogs are updated. Existing uncommitted/staged work was preserved; no commit was created.
Remaining hardware checks: interactive joystick regression, physical held-key testing, full Easy completion, and THEC64 Mini verification.
This C64 versions output seems difficult with the TUI and maybe even near unplayable for the public from my perspective. Not the user friendliness and good UX I built for the handheld iPhone and iPad versions. I decided to record a video to give it a chance of playability, the joystick is offline.
Results so far
All complaints aside it is playable in this ascii format which surprised me. In 1989 I would sit for hours and have played this if it was available in this ASCII format.
Remaining Work – ya this is still only POC. As the video demonstrates, it is playable. Notes are missing, this is expected at this point.
Phase 6 — C64 presentation pass
Phase 7 — Verification and THEC64 Mini release
I let GPT 5.6 Sol run with this prompt over night. – Bill
Request to GPT 5.6 Sol
I asked Luna to wrap this up, but there are some misses.. here is the list I asked for, can you review the code and find what to fix;
- A) I want you to finish up the SudokuGeekC64 conversion. GPT 5.6 Sol did some extra effort getting through phase 3 and 4. There is some todo there left.
- B) May I suggest – the joystick input is no longer working, but it was when you had me run Phase 1.
- C) Some simple audio noises for invalid moves that don’t fit would be nice.
- D)Flashing the background colors on the invalid moves text.
- E) When a number is completed. flash the background multi color for that and a ‘ding’ or ‘bell’ sound would be wonderful.
- F) some sort of completed the grid sounds, with sprites flying around, Ballons, confetti, something that feels good with the background and border colors changing.
- G) A ‘next’ game option….
- H) A ‘difficulty’ button.
GPT 5.6 Sol Response
Review result: Luna built most of the visible pieces, but B–F are not functionally complete and the documentation overstates their readiness. G/H are mostly wired correctly. I made no source changes.
Critical fixes:
– Joystick movement is checked only once every five frames—even while neutral—so short taps disappear. Any buffered keyboard byte can also suppress joystick processing. See [input.asm](/Users/wthomps/source2026/Games2026/SudokuGeekC64/src/input.asm) and [input.asm](/Users/wthomps/source2026/Games2026/SudokuGeekC64/src/input.asm).
– Holding N, F, Space, or Return can activate Next/Difficulty repeatedly because reloading clears the held-key latch immediately. See [input.asm](/Users/wthomps/source2026/Games2026/SudokuGeekC64/src/input.asm).
– SID sounds are misconfigured: attack is effectively several seconds while effects last fractions of a second, and the frequencies are mostly sub-bass. The digit “ding” is one fixed tone, while the win arpeggio fails to retrigger notes and leaves its final note gated. See [feedback.asm](/Users/wthomps/source2026/Games2026/SudokuGeekC64/src/feedback.asm).
– There is no protected won state. Undo or erase can make the solved grid incomplete while confetti and victory audio continue. Native SudokuGeek blocks normal input after winning.
– Color effects advance every video frame, producing harsh 25–60 Hz flashing rather than a pleasant paced flash. They need a slower phase timer.
– Effects are not cancelled when another action replaces their message, so an old invalid/completion flash can continue behind unrelated text.
– Next Game wraps game 100 to game 1 without advancing difficulty. Native SudokuGeek advances difficulty at that boundary; this must either be fixed or documented as an intentional C64 divergence. See [game_select.asm](/Users/wthomps/source2026/Games2026/SudokuGeekC64/src/game_select.asm).
– [feedback.asm](/Users/wthomps/source2026/Games2026/SudokuGeekC64/src/feedback.asm) is currently untracked. A commit omitting it will not build.
What is working:
– Invalid, digit-complete, and grid-complete triggers are connected correctly.
– Background/border effects and four text-mode confetti marks are implemented safely outside the board.
– NEXT GAME and DIFFICULTY are rendered, joystick-reachable, reload the puzzle, and reset player state.
– Game and difficulty wrapping/loading work at the core level.
The conversion is not finished under [PLAN.md](/Users/wthomps/source2026/Games2026/SudokuGeekC64/PLAN.md): 22 checklist entries remain. The immediate Phase 3/4 gaps are exhaustive verification of all 400 C64 selections, player-note rendering, bounded redraws, and a complete joystick-played Easy puzzle. The verifier currently checks only clue counts for sampled selections, so it could load the wrong same-difficulty puzzle and still pass.
Verification performed:
– Build, 64tass -Wall, pack validation, fixture validation, shell checks, and git diff –check passed.
– The core verifier returned DBGCART: exit(0) in VICE with desktop access.
– Interactive joystick, SID audio, visual timing, complete-puzzle flow, and THEC64 Mini remain unverified.
Recommended fix order: joystick dispatch/repeat → held-button protection → SID sequencing → won-state guard → slower visual timing → Next Game parity → retained UI/input verifier → live VICE and Mini testing.
Sunday Morning, I would rather just have GPT Sol finish the fixes at this point. -Bill
My Request: Fix the bugs you identified last night.
Adjust the plan so we get a graphic sudoku mode. A 9 x 9 playable board graphically on screen. I think this means most of those sudoku games have to be offloaded from memory as well. Or you can enable the C64 Ram Expansion unit to load the games there. both are likely scenarios. ask questions
GPT 5.6 response
Implemented the identified fixes and updated the graphical-mode roadmap.
Key repairs:
- Joystick taps are accepted immediately; neutral resets repeat timing.
- Buffered keyboard input no longer suppresses joystick processing.
- Held Next/Difficulty/Fire keys survive game reloads without repeating.
- Completed boards reject placement, erase, and undo while keeping win actions usable.
- Game 100 advances to game 1 of the next difficulty.
- SID sounds now use fast envelopes, audible frequencies, sequenced notes, and gate retriggering.
- Color flashing is paced instead of changing every frame.
- New messages cancel stale effects.
- The verifier now compares all 400 loaded puzzles cell-for-cell.
[PLAN.md](/Users/wthomps/source2026/Games2026/SudokuGeekC64/PLAN.md) now requires a graphical 9×9 board. It documents three storage options, with a recommended 20.8 KB compressed resident pack that should leave enough space for an 8 KB hires bitmap without requiring an REU.
Build,
64tass -Wall, pack validation, fixture validation, syntax checks, andgit diff --checkpass. VICE execution remains unverified because this Mac’s sandboxed VICE crashes and the elevated process cannot open the PRG. Also, [feedback.asm](/Users/wthomps/source2026/Games2026/SudokuGeekC64/src/feedback.asm) remains untracked and must be included in the eventual commit.Questions before graphical implementation:
- Should graphics replace the text board in the normal build, with text retained only as a separate debug build? That is my recommendation.
- Should the main release always work on a stock 64 KB C64/THEC64 Mini, with REU support optional?
- Is a single resident PRG preferred, or may we also ship a D64/CRT enhanced edition?
- For the board, do you prefer crisp hires graphics—best for grid lines and notes—or chunkier, more colorful multicolor graphics? I recommend hires with sprites/color effects for cursor and celebrations.
The text-mode prototype proved that a playable C64 Sudoku game is possible, but it is not yet the polished experience I want. The next major milestone is a graphical 9×9 board, reliable joystick support, improved sound and feedback, and testing on THEC64 Mini.
I went and purchased the C64 Ultimate yesterday. https://commodore.net/ so I am prepared to make Sudoku for the machine. With an online accessible store this makes it a bit more exciting beyond the proof of concept.
Q) Why only Luna then Sol? What about Terra? Why not iterate with Luna more to fix its mistakes?
- It’s my days off. I’m having a fun seeing what GPT 5.6 can do for a 30+ year old platform. I’m not interested in 4 to 8 hours of iteration with Terra, but I was interested in how far Luna could get me.
- Terra would take longer where as Sol can be done in 5 to 10 minutes with fixes.
- I know Terra doesn’t directly translate to Claude Sonnet 4.6 or 5, but given my history, I leaped to Sol.
- I trust that with enough “You can do it” “Keep going” prompts with Luna, or “Your not done until XYZ” would get it to a sufficient working order.
- That said I am surprised Luna ended work earlier and earlier declaring it was done.
Does this answer my question of “Can Luna do more than simple tasks?”. Yes I’ve been pleasantly surprised at work using it. I believe this also demonstrates get what you can for cheap, step up to the next tier Terra to get more complex work done, the more you need quality with complex work, and less human time and effort step up to the last tier Sol.