mirror of
https://github.com/pret/pokepinball.git
synced 2026-03-21 17:55:03 -05:00
171 lines
1.7 KiB
NASM
171 lines
1.7 KiB
NASM
LoadSavedData: ; 0xf0c
|
|
call ValidateSaveData
|
|
ret nc
|
|
.loop
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
dec bc
|
|
ld a, b
|
|
or c
|
|
jr nz, .loop
|
|
scf
|
|
ret
|
|
|
|
SaveData: ; 0xf1a
|
|
; Input: hl = data to save
|
|
; bc = number of bytes to save
|
|
; de = destination for saved data
|
|
push bc
|
|
push de
|
|
push hl
|
|
.save
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
dec bc
|
|
ld a, b
|
|
or c
|
|
jr nz, .save
|
|
pop hl
|
|
pop de
|
|
pop bc
|
|
ld h, d
|
|
ld l, e
|
|
call SignData
|
|
call ComputeChecksum
|
|
call CreateBackupCopy
|
|
ret
|
|
|
|
ValidateSaveData: ; 0xf34
|
|
call ValidateSignature
|
|
jr nc, .backup
|
|
call ValidateChecksum
|
|
jr nc, .backup
|
|
ret
|
|
|
|
.backup
|
|
add hl, bc
|
|
inc hl
|
|
inc hl
|
|
inc hl
|
|
inc hl
|
|
call ValidateSignature
|
|
ret nc
|
|
call ValidateChecksum
|
|
ret
|
|
|
|
CreateBackupCopy: ; 0xf4c
|
|
push bc
|
|
push hl
|
|
push de
|
|
inc bc
|
|
inc bc
|
|
inc bc
|
|
inc bc
|
|
ld d, h
|
|
ld e, l
|
|
add hl, bc
|
|
.loop
|
|
ld a, [de]
|
|
ld [hli], a
|
|
inc de
|
|
dec bc
|
|
ld a, b
|
|
or c
|
|
jr nz, .loop
|
|
pop de
|
|
pop hl
|
|
pop bc
|
|
ret
|
|
|
|
ValidateSignature: ; 0xf62
|
|
push hl
|
|
add hl, bc
|
|
ld a, [hli]
|
|
cp $4e
|
|
jr nz, .asm_f71
|
|
ld a, [hl]
|
|
cp $54
|
|
jr nz, .asm_f71
|
|
scf
|
|
jr .asm_f72
|
|
|
|
.asm_f71
|
|
and a
|
|
.asm_f72
|
|
pop hl
|
|
ret
|
|
|
|
SignData: ; 0xf74
|
|
push hl
|
|
add hl, bc
|
|
ld a, $4e
|
|
ld [hli], a
|
|
ld a, $54
|
|
ld [hl], a
|
|
pop hl
|
|
ret
|
|
|
|
ValidateChecksum: ; 0xf7e
|
|
push bc
|
|
push de
|
|
push hl
|
|
inc bc
|
|
inc bc
|
|
ld de, $0000
|
|
.loop
|
|
ld a, [hli]
|
|
add e
|
|
ld e, a
|
|
jr nc, .asm_f8c
|
|
inc d
|
|
.asm_f8c
|
|
dec bc
|
|
ld a, b
|
|
or c
|
|
jr nz, .loop
|
|
ld a, [hli]
|
|
cp e
|
|
jr nz, .fail
|
|
ld a, [hl]
|
|
cp d
|
|
jr nz, .fail
|
|
scf
|
|
jr .pass
|
|
|
|
.fail
|
|
and a
|
|
.pass
|
|
pop hl
|
|
pop de
|
|
pop bc
|
|
ret
|
|
|
|
ComputeChecksum: ; 0xfa1
|
|
push bc
|
|
push de
|
|
push hl
|
|
inc bc
|
|
inc bc
|
|
ld de, $0000
|
|
.loop
|
|
ld a, [hli]
|
|
add e
|
|
ld e, a
|
|
jr nc, .nocarry
|
|
inc d
|
|
.nocarry
|
|
dec bc
|
|
ld a, b
|
|
or c
|
|
jr nz, .loop
|
|
ld a, e
|
|
ld [hli], a
|
|
ld a, d
|
|
ld [hl], a
|
|
pop hl
|
|
pop de
|
|
pop bc
|
|
ret
|