X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libsrc%2Fc128%2Fbreak.s;h=f2f872be87d00430c54b892e88abd209e45d099e;hb=f16516047a551319c82debd339ded8bc2b587212;hp=6f4cfe42059eed8c697da9a520e6c1fbaf049f52;hpb=e02b3e91c8f30d4553a03eefc610497b973d99f2;p=cc65 diff --git a/libsrc/c128/break.s b/libsrc/c128/break.s index 6f4cfe420..f2f872be8 100644 --- a/libsrc/c128/break.s +++ b/libsrc/c128/break.s @@ -5,74 +5,69 @@ ; void reset_brk (void); ; - .export _set_brk, _reset_brk - .destructor _reset_brk - .export _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc - .importzp ptr1 + .export _set_brk, _reset_brk + .destructor _reset_brk + .export _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc + .importzp ptr1 - .include "c128.inc" + .include "c128.inc" .bss -_brk_a: .res 1 -_brk_x: .res 1 -_brk_y: .res 1 -_brk_sr: .res 1 -_brk_pc: .res 2 - -oldvec: .res 2 ; Old vector - +_brk_a: .res 1 +_brk_x: .res 1 +_brk_y: .res 1 +_brk_sr: .res 1 +_brk_pc: .res 2 .data -uservec: jmp $FFFF ; Patched at runtime +uservec: jmp $FFFF ; Patched at runtime .code -; Where will we put the break stub? -stub_addr = $0E00 ; BASIC sprite area - - ; Set the break vector -.proc _set_brk +.proc _set_brk - sta uservec+1 - stx uservec+2 ; Set the user vector + sta uservec+1 + stx uservec+2 ; Set the user vector - lda oldvec - ora oldvec+1 ; Did we save the vector already? - bne L2 ; Jump if we installed the handler already + lda brk_old+1 + ora brk_old+2 ; 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 + lda BRKVec ; Save the old vector + sta brk_old+1 + lda BRKVec+1 + sta brk_old+2 - ldy #stub_size-1 ; Copy our stub into the low mem area -L1: lda brk_stub,y - sta stub_addr,y - dey - bpl L1 + lda #brk_stub + sta BRKVec + stx BRKVec+1 -L2: lda #stub_addr - sta BRKVec+1 - rts + lda #brk_handler + sta brk_ind+1 + stx brk_ind+2 + +@L1: rts .endproc ; Reset the break vector -.proc _reset_brk - - lda oldvec - bne @L1 - ldx oldvec - beq @L9 ; Jump if vector not installed -@L1: sta BRKVec - stx BRKVec+1 -@L9: rts +.proc _reset_brk + + lda brk_old+1 + ldx brk_old+2 + beq @L9 ; Jump if vector not installed + sta BRKVec + stx BRKVec+1 + lda #$00 + sta brk_old+1 ; Clear the saved vector + sta brk_old+2 +@L9: rts .endproc @@ -80,46 +75,61 @@ L2: lda #