passport/src/modify.a

74 lines
1.7 KiB
Plaintext
Executable File

;-------------------------------
; modify subroutine
; in: A = starting address (high byte)
; X = starting address (low byte)
; Y = string length
; stack = string to set
; out $BASEPAGE buffer changed
; $gPatchCount++
; $modsrc zero page clobbered
; $moddest zero page clobbered
; stack set to return to
; code after string
; all registers clobbered
; all flags clobbered
;-------------------------------
modify
sta gDisplayBytes
clc
adc #BASEPAGE
sta moddest+1
stx moddest
stx gDisplayBytes+1
pla
sta modsrc
pla
sta modsrc+1
tax
tya
clc
adc modsrc
bcc noinc
inx
noinc
sta tmp
txa
pha
lda tmp
pha
sty modtmp
bit gMode
bpl exitnomod ; verify mode -> no modify
bvc exitnomod ; demuffin mode -> no modify
lda #s_modify
jsr PrintByID
ldy #0
dest
lda (moddest),y
jsr PrintByte
iny
cpy modtmp
bne dest
lda #s_modifyto
jsr PrintByID
ldy #0
src
iny
lda (modsrc),y
jsr PrintByte
cpy modtmp
bne src
lda #$8D
jsr PrintA
mod
lda (modsrc),y
dey
bmi modify_exit
sta (moddest),y
clv
bvc mod ; unconditional branch
modify_exit
inc gPatchCount
exitnomod
rts