]> git.sur5r.net Git - cc65/blob - libsrc/atari/shadow_ram_timerirq2.s
Fixed _textcolor definition.
[cc65] / libsrc / atari / shadow_ram_timerirq2.s
1 ;
2 ; Atari XL shadow RAM timer IRQ #2 handler
3 ;
4 ; Christian Groessler, chris@groessler.org, 2019
5 ;
6
7 ;DEBUG           =       1
8
9 .ifdef __ATARIXL__
10
11 SHRAM_HANDLERS  =       1
12                 .include        "atari.inc"
13                 .include        "romswitch.inc"
14                 .export         set_VTIMR2_handler
15
16
17 .segment "LOWBSS"
18
19 VTIMR2_handler: .res    3
20
21
22 .segment "BSS"
23
24 old_VTIMR2_handler:
25                 .res    2
26
27
28 .segment "LOWCODE"
29
30 ; timer interrupt handler:
31 ; disable ROM, call user handler, enable ROM again
32
33 my_VTIMR2_handler:
34                 disable_rom_quick
35                 jsr     VTIMR2_handler
36                 enable_rom_quick
37                 pla
38                 rti
39
40 .segment "CODE"
41
42 ; install or remove VTIMR2 handler
43 ; input: CF - 0/1 for remove/install handler
44 ;        AX - pointer to handler (if CF=1)
45 ; registers destroyed
46
47 set_VTIMR2_handler:
48
49                 bcc     @remove
50
51 ; install vector
52
53                 stx     VTIMR2_handler+2
54                 sta     VTIMR2_handler+1        ; save passed vector in low memory
55                 lda     #$4C                    ; "JMP" opcode
56                 sta     VTIMR2_handler
57
58                 lda     VTIMR2
59                 sta     old_VTIMR2_handler
60                 lda     VTIMR2+1
61                 sta     old_VTIMR2_handler+1
62
63                 lda     #<my_VTIMR2_handler
64                 php
65                 sei
66                 sta     VTIMR2
67                 lda     #>my_VTIMR2_handler
68                 sta     VTIMR2+1
69                 plp
70                 rts
71
72 @remove:        php
73                 sei
74                 lda     old_VTIMR2_handler
75                 sta     VTIMR2
76                 lda     old_VTIMR2_handler+1
77                 sta     VTIMR2+1
78                 plp
79                 rts
80
81 .endif  ; .ifdef __ATARIXL__