Skip to content

Commit

Permalink
Fix SYS far didn't exit cleanly
Browse files Browse the repository at this point in the history
  • Loading branch information
stefan-b-jakobsson committed Oct 15, 2022
1 parent 36059a6 commit 1c18d8d
Showing 1 changed file with 15 additions and 11 deletions.
26 changes: 15 additions & 11 deletions basic/code26.s
Original file line number Diff line number Diff line change
Expand Up @@ -57,27 +57,31 @@ csys jsr frmadr ;get int. addr
plp ;load 6502 status reg
jmp (linnum) ;go do it

csysfar pha ;Far jump
lda spreg
csysfar jsr csysfr2
bra csysrz+1

csysfr2 pha ;Far jump; extra byte on stack for return bank

lda spreg ;Processor status -> stack
pha
lda sareg
lda sareg ;A -> stack
pha
ldx sxreg
ldx sxreg ;X -> stack
phx
ldy syreg
ldy syreg ;Fetch Y

lda linnum ;Set far address
lda linnum ;Set jsrfar target address
sta jmpfr+1
lda linnum+1
sta jmpfr+2
tsx ;Set return bank
lda BANK_BASIC

tsx ;Push return bank to extra byte reserved on stack
lda #BANK_BASIC
sta $0104,x
plx

lda curbank ;Fetch target bank
jsr jsrfar3
lda curbank ;Fetch target bank, and go far!
jmp jsrfar3

csysrz =*-1 ;return to here
php ;save status reg
Expand Down

0 comments on commit 1c18d8d

Please sign in to comment.