PATCH Solution
CHECK DIGIT
PATCH wrong checksum total

Prerequisites
Unlocks
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