Skip to content

v1.0.0 — Rachel for the Commodore VIC-20

Latest

Choose a tag to compare

@stevehill1981 stevehill1981 released this 31 Aug 20:47
· 2 commits to main since this release

A complete Rachel client in 6502 assembly, in one 8K-expanded PRG: solo play for two to eight seats against a local rules kernel, and online play against the authoritative host over RUBP v2 through a user-port WiFi modem.

What this version number is based on

Emulation. Everything below was verified under Emu198x or VICE against the real Go server. None of it has run on a physical VIC-20. The checklist in docs/HARDWARE_TESTING.md is still open and this release remains experimental on real hardware. Tagging verifies nothing.

Verified

  • A complete solo game reaches a winner at every table size from two to eight.
  • The kernel soak plays sixteen seeds across all seven table sizes, asserting on every turn that the fifty-two cards are conserved across hands, deck and discard pile. No seed reaches the turn bound.
  • A complete online game reaches the terminal server event through the cycle-driven user-port ESP-AT bridge, under both PAL and NTSC timing.
  • The online human input path is driven separately with the production PRG rather than the autoplay build.
  • The source assembles under both cc65 and Asm198x 0.0.53.

Fixed on the way here

Three of these had been shipping:

  • solo_deck_pop overran the packed deck into SW_DISCARD_COUNT, so every draw zeroed the discard count and the pile could never be recycled. Three of sixteen soak seeds were silently grinding to the turn bound; none now do.
  • The client acknowledged state snapshots it had never received, letting the host release TURN_START against a view a turn old — seven to nine unearned acknowledgements per ten-play game (#14).
  • render_hand discarded the page base it had just computed, so past the fifth card the selected card was not on screen.
  • Solo seeded every game, and every replay, from a fixture constant, so the deal never varied.
  • The lobby's waiting message was never cleared when play began, and sat across the discard card all game.

Known and recorded

The serial link discards 37 to 74 inbound frames per game to CRC failure, and the protocol is built to absorb it. That figure is an emulator measurement; what real hardware does is one of the things the physical checklist should establish, and it matters because the sync-acknowledgement fix above is verified against a simulated link.

Getting it running

xvic -memory 8k rachel-vic20.prg

Then RUN. S for solo — it asks how many seats — or O for online.

Requires a VIC-20 with 8KB+ expansion. For online play the modem must run stock Espressif ESP-AT firmware, not the Hayes-style firmware most Commodore user-port modems ship with; see the README for what to check.

Fits in 9,462 bytes of a 9,712-byte ceiling, with the 2 KiB single-PRG contingency intact.