PATCH Solution

CHECK DIGIT

PATCH wrong checksum total

In-game screenshot of CHECK DIGIT
In-game view
FamilyPATCH Graph0.509 DifficultyHard Ring03 IDzp46_fold

Prerequisites

DUAL STAIRSpin Lock

Unlocks

DEBOUNCE

Patch choices total=0xFD
Accepted keysCRC16 Editable slots1 Rulenonzero

Walkthrough

A position-weighted fold runs over the whole key, but the stored total it checks against has drifted. The fold is correct, so the only move is to compute what the fold actually produces for the real key and store that. Only the marked total can move. Run the math, set the total, then TEST.

The fold multiplies the running value by three and adds each byte, starting from zero. Walk the real key through that step by step, keep everything to a byte, and the value you land on is the total to store.

Valid Patch Combos

  • total=0xFD

Reject Battery

  • CRC17
  • CRC15
  • DRC16
  • CRC1
  • CRC166

Editable Slot Options

  • total: 0x94, 0xFD, 0x1B, 0xC0
Broken Listing
; CHECK DIGIT: a PATCH job. A position-weighted fold runs over the whole key
; (multiply the running value, add the next byte, repeat) and the result is
; compared against a stored total. The fold itself is correct: the seed is clean,
; the weight is right, every byte is walked. The STORED TOTAL is what drifted.
; Only the marked total (label "total") is yours to edit; the fold and the verdict
; are frozen, so there is no shortcut: you have to run the fold on the real key and
; set the total to what it actually produces.
;
; The real key is CRC16. The fold is r3 = (r3 * 3 + byte) per byte, starting from
; zero, which lands on a specific final value. Compute that value and store it.
;
; r0 = 1 on accept; rule: nonzero. SHIPPED total is 0xC0, a value the real fold
; never reaches, so the key is bounced.

        len   r2
        cmp   r2, 5
        jnz   bad

        mov   r3, 0         ; fold accumulator (correctly cleared)
        mov   r7, 0
loop:   cmp   r7, 5
        jge   total
        mul   r3, 3         ; position weight
        ldb   r0, [r7]
        add   r3, r0
        inc   r7
        jmp   loop

total:  cmp   r3, 0xC0      ; SHIPPED BROKEN: wrong stored total -> compute the real fold
        jnz   bad
        mov   r0, 1
        ret
bad:    mov   r0, 0
        ret