Files
open-roms/src/mon_m65/mon_command_jmp_jsr.s
T

91 lines
1.1 KiB
ArmAsm

; Based on BSM (Bit Shifter's Monitor)
Mon_JSR:
lda #$00
sta Addr_Mode
jsr Get_Val_To_LAC ; Long_AC = jump address
+beq Mon_Error
; Push return addresses
lda #>(Mon_JSR_ret-1) ; XXX return routine should JSR, to store address
pha
lda #<(Mon_JSR_ret-1)
pha
lda #>(monitor_jmpout_ret-1)
pha
lda #<(monitor_jmpout_ret-1)
pha
bra Mon_Go_JSR_comon
Mon_Go:
lda #$00
sta Addr_Mode
jsr Get_Val_To_LAC ; Long_AC = jump address
+bne Mon_Go_JSR_comon
lda PCL ; use PC as jump address
sta Long_AC+0
lda PCH
sta Long_AC+1
; FALLTROUGH
Mon_Go_JSR_comon:
lda Addr_Mode ; only first 64KB is supported as target
+bne Mon_Error
dew Long_AC+0 ; push target address for RTS-jump
lda Long_AC+1
pha
lda Long_AC+0
pha
; Prepare registers
lda SR
pha
lda AC
pha
lda BP
pha
lda XR
pha
lda YR
pha
lda ZR
pha
jsr m65_shadow_BZP
jmp monitor_jmpout
Mon_JSR_ret:
jsr m65_shadow_BZP
; Retrieve registers
pha
php
pla
sta SR
pla
sta AC
tba
sta BP
stx XR
sty YR
stz ZR
jmp Mon_Register