;
.export _set_brk, _reset_brk
- .destructor _reset_brk
.export _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc
+ .import brk_jmp
.include "plus4.inc"
_brk_sr: .res 1
_brk_pc: .res 2
-oldvec: .res 2 ; Old vector
+oldvec: .res 2 ; Old vector
.data
-uservec: jmp $FFFF ; Patched at runtime
+uservec: jmp $FFFF ; Patched at runtime
.code
.proc _set_brk
sta uservec+1
- stx uservec+2 ; Set the user vector
+ stx uservec+2 ; Set the user vector
- lda oldvec
- ora oldvec+1 ; Did we save the vector already?
- bne L1 ; Jump if we installed the handler already
-
- lda BRKVec
- sta oldvec
- lda BRKVec+1
- sta oldvec+1 ; Save the old vector
-
-L1: lda #<brk_handler ; Set the break vector to our routine
- ldx #>brk_handler
- sta BRKVec
- stx BRKVec+1
+ lda #<brk_handler ; Set the break vector to our routine
+ sta brk_jmp+1
+ lda #>brk_handler
+ sta brk_jmp+2
rts
.endproc
; Reset the break vector
.proc _reset_brk
- lda oldvec
- ldx oldvec+1
- beq @L9 ; Jump if vector not installed
- sta BRKVec
- stx BRKVec+1
- lda #$00
- sta oldvec ; Clear the old vector
- stx oldvec+1
-@L9: rts
+ lda #$00
+ sta brk_jmp+1
+ sta brk_jmp+2 ; Reset the vector
+ rts
.endproc
-; Break handler, called if a break occurs
+; Break handler, called if a break occurs.
.proc brk_handler
pla
- sta _brk_y
+ sta _brk_y
pla
sta _brk_x
pla