-
Notifications
You must be signed in to change notification settings - Fork 0
/
interrupt.asm
165 lines (133 loc) · 1.94 KB
/
interrupt.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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
; R_DMA .eq 0
; PC_INT .eq 1
; STACK .eq 2
; R_CUR_PAGE .eq 6 ; upper byte
; R_FR_CNT .eq 7
.no $0B00
INT0_RET
LDXA
RET
INT0_ENTRY
NOP
DEC STACK
SAV
DEC STACK
STR STACK
GHI R_CUR_PAGE
XRI $01
PHI R_DMA
LDI $00
PLO R_DMA ; R_DMA = ((current page) xor 1) << 8
SEX STACK
SEX STACK
INT0_DISP
SEX STACK
GLO R_DMA
SEX STACK
DEC R_DMA
PLO R_DMA
SEX STACK
DEC R_DMA
PLO R_DMA
SEX STACK
DEC R_DMA
PLO R_DMA
BN1 INT0_DISP
INC R_FR_CNT
BR INT0_RET
INT_RET
LDXA
RET
INT_ENTRY
NOP
DEC STACK
SAV
DEC STACK
STR STACK
GHI R_CUR_PAGE
XRI $01
PHI R_DMA
LDI $00
PLO R_DMA ; R_DMA = ((current page) xor 1) << 8
SEX STACK
SEX STACK
SEX STACK
SEX STACK
SEX STACK
SEX STACK
PLO R_DMA
SEX STACK
DEC STACK
PLO R_DMA
DEC STACK
DEC STACK
PLO R_DMA
; this might produce some garbage on the screen
OUT 5
OUT 5
OUT 5
SEX STACK
LDI $08
PLO R_DMA
SEX STACK
SEX STACK
PLO R_DMA
SEX STACK
SEX STACK
PLO R_DMA
SEX STACK
SEX STACK
INT_DISP0
GLO R_DMA
SEX STACK
SEX STACK
PLO R_DMA
SEX STACK
SEX STACK
PLO R_DMA
SEX STACK
PLO R_DMA
XRI $80
; can't use SMI, since in interrupt routine, DF must be preserved
SEX STACK
BNZ INT_DISP0
GLO R_DMA
SEX STACK
SEX STACK
PLO R_DMA
SEX STACK
SEX STACK
PLO R_DMA
DEC STACK
DEC STACK
PLO R_DMA
OUT 5
OUT 5
INT_DISP
GLO R_DMA
SEX STACK
SEX STACK
PLO R_DMA
SEX STACK
SEX STACK
PLO R_DMA
SEX STACK
SEX STACK
PLO R_DMA
XRI $F0
BNZ INT_DISP
GLO R_DMA
DEC STACK
DEC R_DMA
PLO R_DMA
DEC STACK
DEC R_DMA
PLO R_DMA
DEC STACK
DEC R_DMA
PLO R_DMA
OUT 5
OUT 5
OUT 5
INC R_FR_CNT
BR INT_RET