#!/bin/sh # Shell script to patch galaga roms to preserve high score area during # self test. To reset high score table, set "Unknown", "Freeze", and # "Rack Test" DIP switches all on, and hit reset. After self-test has # run and hung, turn the DIPs back off, and reset again. # # Replace 2114 RAMs at 3J & 3H with a non-volatile RAM adapter # available from cambridgearcade@gmail.com # # Replace ROMS 3200A and 3500D with the (provided) patched ROMs. # # Draw high score from RAM, not " 20000" # 00d9 21208a ld hl,#8a20 ; HS location in NOVRAM # 00dc 010600 ld bc,#0006 ; Draw 6 digits ~/src/rompatch/rompatch2 3200A.BIN 00da b9 20 8a 01 06 00 # Skip old routine # 0310 1821 jr #0333 ; (33) # 0312 92 sub d ; Patch checksum ~/src/rompatch/rompatch2 3200A.BIN 0310 11 18 21 92 # Insert jump # 3434 cd003c call #3c00 # 3437 00 nop # 3438 00 nop # 3439 00 nop ~/src/rompatch/rompatch2 3500D.BIN 0434 11 cd 00 3c 00 00 00 # Copy HS Table to good RAM # 3c00 21208a ld hl,#8a20 # 3c03 110084 ld de,#8400 # 3c06 013000 ld bc,#0030 # 3c09 edb0 ldir ~/src/rompatch/rompatch2 3500D.BIN 0c00 ff 21 20 8a 11 00 84 01 30 00 ed b0 # Test RAM # 3c0b 110088 ld de,#8800 # 3c0e cd7f34 call #347f ~/src/rompatch/rompatch2 3500D.BIN 0c0b ff 11 00 88 cd 7f 34 # Copy HS Table back # 3c11 11208a ld de,#8a20 # 3c14 210084 ld hl,#8400 # 3c17 013000 ld bc,#0030 # 3c1a edb0 ldir ~/src/rompatch/rompatch2 3500D.BIN 0c11 ff 11 20 8a 21 00 84 01 30 00 ed b0 # Check "Unknown" Dip # 3c1c 3a0668 ld a,(#6806) # 3c1f cb4f bit 1,a # 3c21 2031 jr nz,#3c54 ; (49) ~/src/rompatch/rompatch2 3500D.BIN 0c1c ff 3a 06 68 cb 4f 20 31 # Check "Rack Test" Dip # 3c23 3a0568 ld a,(#6805) # 3c26 cb4f bit 1,a # 3c28 202a jr nz,#3c54 ; (42) ~/src/rompatch/rompatch2 3500D.BIN 0c23 ff 3a 05 68 cb 4f 20 2a # Check "Freeze" Dip # 3c2a 3a0468 ld a,(#6804) # 3c2d cb4f bit 1,a # 3c2f 2023 jr nz,#3c54 ; (35) ~/src/rompatch/rompatch2 3500D.BIN 0c2a ff 3a 04 68 cb 4f 20 23 # Write New Scores # 3c31 11208a ld de,#8a20 # 3c34 3e05 ld a,#05 # 3c36 0600 ld b,#00 # 3c38 21b902 ld hl,#02b9 ; ROM location of " 20000" # 3c3b 0e06 ld c,#06 # 3c3d edb0 ldir # 3c3f 3d dec a # 3c40 20f6 jr nz,#3c38 ; (-10) ~/src/rompatch/rompatch2 3500D.BIN 0c31 ff 11 20 8a 3e 05 06 00 21 b9 02 0e 06 ed b0 3d 20 f6 # Write New Initials # 3c42 21553c ld hl,#3c55 ; New initials table # 3c45 3e2a ld a,#2a # 3c47 0605 ld b,#05 # 3c49 0eff ld c,#ff # 3c4b eda0 ldi # 3c4d 2b dec hl # 3c4e 12 ld (de),a # 3c4f 1c inc e # 3c50 eda0 ldi # 3c52 10f7 djnz #3c4b ; (-9) # 3c54 c9 ret ~/src/rompatch/rompatch2 3500D.BIN 0c42 ff 21 55 3c 3e 2a 06 05 0e ff ed a0 2b 12 1c ed a0 10 f7 c9 # New Initials # 3c55 1b ; R # 3c56 10 ; G # 3c57 1f ; V # 3c58 0a ; A # 3c59 0c ; C # 3c5a 66 ; Patch ROM checksum ~/src/rompatch/rompatch2 3500D.BIN 0c55 ff 1b 10 1f 0a 0c 66