214 lines
2.4 KiB
ArmAsm
214 lines
2.4 KiB
ArmAsm
|
|
; Monitor helper code - memory read and write
|
|
|
|
|
|
Get_From_Memory_LAC:
|
|
|
|
jsr Exchange_LAC_LPC
|
|
jsr Get_From_Memory_LPC
|
|
jmp Exchange_LAC_LPC
|
|
|
|
Get_From_Memory_LDA:
|
|
|
|
jsr Exchange_LDA_LPC
|
|
jsr Get_From_Memory_LPC
|
|
jmp Exchange_LDA_LPC
|
|
|
|
Get_From_Memory_LPC:
|
|
|
|
phx
|
|
phy
|
|
phz
|
|
|
|
; Copy PC + .Z to TMP, set .Z to 0
|
|
|
|
jsr Get_Put_Memory_Prepare
|
|
|
|
; Check addressing mode
|
|
|
|
bbs7 Addr_Mode, @mode_flat
|
|
|
|
@mode_64k:
|
|
|
|
lda #$00 ; make sure this is 64K address
|
|
sta Long_TMP+2
|
|
sta Long_TMP+3
|
|
|
|
lda Long_TMP+1
|
|
bne @read_64k ; branch if no need to handle shadow memory (not zero page)
|
|
lda Long_TMP+0
|
|
dec
|
|
dec
|
|
cmp #$8E
|
|
bcs @read_64k ; branch if no need to handle shadow memory (0, 1, or above $8F)
|
|
@1:
|
|
bra @read_shadow
|
|
|
|
@mode_flat:
|
|
|
|
lda Long_TMP+3
|
|
ora Long_TMP+2
|
|
ora Long_TMP+1
|
|
bne @read_flat
|
|
|
|
lda Long_TMP+0
|
|
dec
|
|
dec
|
|
cmp #$8E
|
|
bcs @read_flat
|
|
bra @1
|
|
|
|
@read_64k:
|
|
|
|
bbr7 Long_TMP+1, @read_flat ; below $8000 we do not want to retrieve MAP/EOM banked memory
|
|
bra @read
|
|
|
|
@read_shadow:
|
|
|
|
jsr Get_Put_Memory_Prepare_Shadow
|
|
|
|
@read_flat:
|
|
|
|
jsr monitor_memread_helper
|
|
bra Get_Put_Memory_End
|
|
|
|
@read:
|
|
|
|
lda (Long_TMP),Z
|
|
|
|
; FALLTROUGH
|
|
|
|
Get_Put_Memory_End:
|
|
|
|
plz
|
|
ply
|
|
plx
|
|
|
|
rts
|
|
|
|
Get_Put_Memory_Prepare:
|
|
|
|
; Copy PC + .Z to TMP, set .Z to 0
|
|
|
|
clc
|
|
tza
|
|
adc Long_PC+0
|
|
sta Long_TMP+0
|
|
|
|
ldx #$01
|
|
@1:
|
|
lda Long_PC+0,x
|
|
adc #$00
|
|
sta Long_TMP+0,x
|
|
inx
|
|
cpx #$04
|
|
bne @1
|
|
|
|
ldz #$00
|
|
|
|
rts
|
|
|
|
Get_Put_Memory_Prepare_Shadow:
|
|
|
|
sta Long_TMP+0
|
|
|
|
lda #MEMCONF_SHADOW_BZP_1
|
|
sta Long_TMP+1
|
|
lda #MEMCONF_SHADOW_BZP_2
|
|
sta Long_TMP+2
|
|
lda #MEMCONF_SHADOW_BZP_3
|
|
sta Long_TMP+3
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
Put_To_Memory_LAC:
|
|
|
|
jsr Exchange_LAC_LPC
|
|
jsr Put_To_Memory_LPC
|
|
jmp Exchange_LAC_LPC
|
|
|
|
Put_To_Memory_LPC:
|
|
|
|
phx
|
|
phy
|
|
phz
|
|
pha
|
|
|
|
; Copy PC + .Z to TMP, set .Z to 0
|
|
|
|
jsr Get_Put_Memory_Prepare
|
|
|
|
; Check if address is related to shadow zeropage
|
|
|
|
lda Long_TMP+1
|
|
ora Long_TMP+2
|
|
ora Long_TMP+3
|
|
bne @write_flat
|
|
|
|
lda Long_TMP+0
|
|
dec
|
|
dec
|
|
cmp #$8E
|
|
bcs @write_flat
|
|
|
|
@write_shadow:
|
|
|
|
jsr Get_Put_Memory_Prepare_Shadow
|
|
|
|
@write_flat:
|
|
|
|
pla
|
|
jsr monitor_memwrite_helper
|
|
bra Get_Put_Memory_End
|
|
|
|
|
|
|
|
Exchange_LDA_LPC:
|
|
|
|
phx
|
|
pha
|
|
|
|
ldx #$03
|
|
|
|
@loop:
|
|
|
|
lda Long_DA,X
|
|
pha
|
|
lda Long_PC,X
|
|
sta Long_DA,X
|
|
pla
|
|
sta Long_PC,X
|
|
|
|
dex
|
|
bpl @loop
|
|
|
|
pla
|
|
plx
|
|
rts
|
|
|
|
Exchange_LAC_LPC:
|
|
|
|
phx
|
|
pha
|
|
|
|
ldx #$03
|
|
|
|
@loop:
|
|
|
|
lda Long_AC,X
|
|
pha
|
|
lda Long_PC,X
|
|
sta Long_AC,X
|
|
pla
|
|
sta Long_PC,X
|
|
|
|
dex
|
|
bpl @loop
|
|
|
|
pla
|
|
plx
|
|
rts
|