2 ; Ullrich von Bassewitz, 27.09.1998
4 ; void set_brk (unsigned Addr);
5 ; void reset_brk (void);
8 .export _set_brk, _reset_brk
11 ; Be sure to export the following variables absolute
12 .export _brk_a: abs, _brk_x: abs, _brk_y: abs
13 .export _brk_sr: abs, _brk_pc: abs
25 oldvec: .res 2 ; Old vector
29 uservec: jmp $FFFF ; Patched at runtime
34 ; Set the break vector
38 stx uservec+2 ; Set the user vector
41 ora oldvec+1 ; Did we save the vector already?
42 bne L1 ; Jump if we installed the handler already
47 sta oldvec+1 ; Save the old vector
49 L1: lda #<brk_handler ; Set the break vector to our routine
58 ; Reset the break vector
63 beq @L9 ; Jump if vector not installed
67 sta oldvec ; Clear the old vector
75 ; Break handler, called if a break occurs
81 sbc #$02 ; Point to start of brk
89 adc #$04 ; Adjust stack pointer
92 lda _brk_sr ; Clear brk
96 jsr uservec ; Call the user's routine