]> git.sur5r.net Git - cc65/blob - libsrc/atari/shadow_ram_timerirq1.s
atari: split color.s into bordercolor.s and bgcolor.s
[cc65] / libsrc / atari / shadow_ram_timerirq1.s
1 ;
2 ; Atari XL shadow RAM timer IRQ #1 handler
3 ;
4 ; Christian Groessler, chris@groessler.org, 2014
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_VTIMR1_handler
15
16
17 .segment "LOWBSS"
18
19 VTIMR1_handler: .res    3
20
21
22 .segment "BSS"
23
24 old_VTIMR1_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_VTIMR1_handler:
34                 disable_rom_quick
35                 jsr     VTIMR1_handler
36                 enable_rom_quick
37                 pla
38                 rti
39
40 .segment "CODE"
41
42 ; install or remove VTIMR1 handler
43 ; input: CF - 0/1 for remove/install handler
44 ;        AX - pointer to handler (if CF=1)
45 ; registers destroyed
46
47 set_VTIMR1_handler:
48
49                 bcc     @remove
50
51 ; install vector
52
53                 stx     VTIMR1_handler+2
54                 sta     VTIMR1_handler+1        ; save passed vector in low memory
55                 lda     #$4C                    ; "JMP" opcode
56                 sta     VTIMR1_handler
57
58                 lda     VTIMR1
59                 sta     old_VTIMR1_handler
60                 lda     VTIMR1+1
61                 sta     old_VTIMR1_handler+1
62
63                 lda     #<my_VTIMR1_handler
64                 php
65                 sei
66                 sta     VTIMR1
67                 lda     #>my_VTIMR1_handler
68                 sta     VTIMR1+1
69                 plp
70                 rts
71
72 @remove:        php
73                 sei
74                 lda     old_VTIMR1_handler
75                 sta     VTIMR1
76                 lda     old_VTIMR1_handler+1
77                 sta     VTIMR1+1
78                 plp
79                 rts
80
81 .endif  ; .ifdef __ATARIXL__