-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvia.asm
141 lines (121 loc) · 4.16 KB
/
via.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
; slot
SLOT .equ $c400
; VIA registers
VIAORB .equ 0
VIAORA .equ 1
VIADDRB .equ 2
VIADDRA .equ 3
VIAT1CL .equ 4
VIAT1CH .equ 5
VIAT1LL .equ 6
VIAT1LH .equ 7
VIAACR .equ 11
VIAIFR .equ 13
VIAIER .equ 14
; set register (X contains $00 for chip 0, $80 for chip 1 )
VIAInit
LDX #$80
LDA #$FF
STA SLOT+VIADDRA,X
LDA #$07
STA SLOT+VIADDRB,X
LDX #$00
LDA #$FF
STA SLOT+VIADDRA,X
LDA #$07
STA SLOT+VIADDRB,X
RTS
VIAReset LDA #0
STA SLOT+VIAORB,X
JSR VIASetInactive
NOP
NOP
NOP
NOP
NOP
RTS
VIAWriteData LDA #6
STA SLOT+VIAORB,X
JSR VIASetInactive
RTS
VIAReadData LDA #5
STA SLOT+VIAORB,X
JSR VIASetInactive
RTS
VIASetRegister LDA #7
STA SLOT+VIAORB,X
JSR VIASetInactive
RTS
VIASetInactive LDA #4
STA SLOT+VIAORB,X
RTS
VIASetA STA SLOT+VIAORA,X
RTS
VIAGetA LDA #$00
STA SLOT+VIADDRA,X
LDA SLOT+VIAORA,X
PHA
LDA #$FF
STA SLOT+VIADDRA,X
PLA
RTS
VIAEnableT1IRQ ; X = chip $00,$80
LDA #%11000000
STA SLOT+VIAIER,X
RTS
VIADisableT1IRQ ; X = chip $00,$80
LDA #%01000000
STA SLOT+VIAIER,X
RTS
Timer1Counter .word 63780
VIASetTimer1O ; X = chip $00, $80
LDA Timer1Counter+0
STA SLOT+VIAT1CL,X
LDA Timer1Counter+1
STA SLOT+VIAT1CH,X
LDA SLOT+VIAACR,X
AND #%01111111
ORA #%01000000
STA SLOT+VIAACR,X
JSR VIAEnableT1IRQ
RTS
VIAUpdateTimer1
; LDA Timer1Counter+0
; STA SLOT+VIAT1LL,X
; LDA Timer1Counter+1
; STA SLOT+VIAT1LH,X
;
LDA Timer1Counter+0
STA SLOT+VIAT1CL,X
LDA Timer1Counter+1
STA SLOT+VIAT1CH,X
;
RTS
VIASetTimer1
SEI
;
LDA #$40
STA SLOT+VIAACR,X
;
LDA #$7F
STA SLOT+VIAIER,X
;
LDA #$C0
STA SLOT+VIAIFR,X
STA SLOT+VIAIER,X
; ;
LDA Timer1Counter+0
STA SLOT+VIAT1CL,X
LDA Timer1Counter+1
STA SLOT+VIAT1CH,X
;
; LDA Timer1Counter+0
; STA SLOT+VIAT1LL,X
; LDA Timer1Counter+1
; STA SLOT+VIAT1LH,X
;
CLI
;
RTS
VIAACKTimer1IRQ BIT SLOT+VIAT1CL
RTS