]> git.sur5r.net Git - cc65/blob - libsrc/plus4/break.s
Remove trailings spaces from CBM-related asm files
[cc65] / libsrc / plus4 / break.s
1 ;
2 ; Ullrich von Bassewitz, 27.09.1998
3 ;
4 ; void __fastcall__ set_brk (unsigned Addr);
5 ; void reset_brk (void);
6 ;
7
8         .export         _set_brk, _reset_brk
9         .export         _brk_a, _brk_x, _brk_y, _brk_sr, _brk_pc
10         .import         brk_jmp
11
12         .include        "plus4.inc"
13
14
15 .bss
16 _brk_a:         .res    1
17 _brk_x:         .res    1
18 _brk_y:         .res    1
19 _brk_sr:        .res    1
20 _brk_pc:        .res    2
21
22 oldvec:         .res    2               ; Old vector
23
24
25 .data
26 uservec:        jmp     $FFFF           ; Patched at runtime
27
28
29 .code
30
31 ; Set the break vector
32 .proc   _set_brk
33
34         sta     uservec+1
35         stx     uservec+2       ; Set the user vector
36
37         lda     #<brk_handler   ; Set the break vector to our routine
38         sta     brk_jmp+1
39         lda     #>brk_handler
40         sta     brk_jmp+2
41         rts
42
43 .endproc
44
45
46 ; Reset the break vector
47 .proc   _reset_brk
48
49         lda     #$00
50         sta     brk_jmp+1
51         sta     brk_jmp+2       ; Reset the vector
52         rts
53
54 .endproc
55
56
57
58 ; Break handler, called if a break occurs.
59
60 .proc   brk_handler
61
62         pla
63         sta     _brk_y
64         pla
65         sta     _brk_x
66         pla
67         sta     _brk_a
68         pla
69         and     #$EF            ; Clear break bit
70         sta     _brk_sr
71         pla                     ; PC low
72         sec
73         sbc     #2              ; Point to start of brk
74         sta     _brk_pc
75         pla                     ; PC high
76         sbc     #0
77         sta     _brk_pc+1
78
79         jsr     uservec         ; Call the user's routine
80
81         lda     _brk_pc+1
82         pha
83         lda     _brk_pc
84         pha
85         lda     _brk_sr
86         pha
87         ldx     _brk_x
88         ldy     _brk_y
89         lda     _brk_a
90         rti                     ; Jump back...
91
92 .endproc
93