.export _set_brk, _reset_brk
.export _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc
- .import _atexit
-
- .include "zeropage.inc"
- .include "page3.inc"
+ .import _atexit, BRKVec
+
+ .include "cbm610.inc"
.bss
lda BRKVec+1
sta oldvec+1 ; Save the old vector
- lda #<_reset_brk
- ldx #>_reset_brk
- jsr _atexit ; Install an exit handler
-
L1: lda #<brk_handler ; Set the break vector to our routine
+ ldx #>brk_handler
sta BRKVec
- lda #>brk_handler
- sta BRKVec+1
+ stx BRKVec+1
rts
.endproc
; Reset the break vector
.proc _reset_brk
- lda oldvec
- sta BRKVec
- lda oldvec+1
- sta BRKVec+1
- rts
+ 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
.endproc
.proc brk_handler
+ pla
+ sta _brk_01
pla
sta _brk_y
pla
pla ; PC high
sbc #0
sta _brk_pc+1
- lda IndReg
- sta _brk_01
- lda ExecReg
- sta IndReg
jsr uservec ; Call the user's routine
lda _brk_01
- sta IndReg
+ sta IndReg
lda _brk_pc+1
pha