Mercurial > repos > simple16
annotate controller.s16 @ 34:4a093f15fb1b
Finish controller test for controller 1
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 03 Apr 2016 19:03:35 -0700 |
parents | 8642cb2ceb89 |
children | 5a5e02d1acf1 |
rev | line source |
---|---|
32 | 1 ldim vectors, r0 |
2 ldimh vectors, r0 | |
3 setvbr r0 | |
4 ;load palette | |
5 ldim 0, r0 | |
6 ldimh $FF,r0 | |
7 outi $E, r0 | |
8 ldim colors, r1 | |
9 ldimh colors, r1 | |
10 | |
11 ;copy 3 colors for 1st palette | |
12 ldim 0, r2 | |
13 ldim 3, r3 | |
14 ldim copy_data, r12 | |
15 ldimh copy_data, r12 | |
16 call r12, r13 | |
17 | |
18 ;setup writes to 2nd palette | |
34
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
19 ldim $20, r0 |
32 | 20 ldimh $FF,r0 |
21 outi $E, r0 | |
22 | |
23 ;copy 3 colors for 2nd palette | |
24 ldim 3, r3 | |
25 call r12, r13 | |
26 | |
27 ;setup writes for first map row | |
28 ldim 0, r0 | |
29 ldimh $60, r0 | |
30 outi $E, r0 | |
31 | |
32 ldim write_zeros, r11 | |
33 ldimh write_zeros, r11 | |
34 ;offset by one row and two columns | |
35 ldim 66, r3 | |
36 call r11, r13 | |
37 | |
38 ldim 3, r5 | |
39 row_loop: | |
40 ;copy 9 table entries for first row | |
41 ldim 9, r3 | |
42 call r12, r13 | |
43 | |
44 ;zero out rest of row | |
45 | |
46 ldim 55, r3 | |
47 call r11, r13 | |
48 | |
49 addi -1, r5 | |
50 bne row_loop | |
51 | |
52 ;setup writes to tile data area | |
53 ldim 0, r0 | |
54 outi $E, r0 | |
55 | |
56 ;zero out first tile | |
57 ldim $10, r3 | |
58 call r11, r13 | |
59 | |
60 ;copy tiles | |
61 ldim $C0, r3 | |
62 ldimh 0, r3 | |
63 call r12, r13 | |
64 | |
65 | |
66 | |
67 ;copy tile map to ram | |
68 ldim 0, r0 | |
69 ldimh $C0, r0 | |
70 | |
71 ldim map, r1 | |
72 ldimh map, r1 | |
73 | |
74 ldim 0, r2 | |
75 ldim 27, r3 | |
76 | |
77 ldim memcpy16, r10 | |
78 ldimh memcpy16, r10 | |
79 call r10, r13 | |
80 | |
81 ;enable vertical interrupts | |
82 ori 2, sr | |
83 | |
84 ;vscroll reg | |
85 ldim 0, r0 | |
86 ldimh $C6, r0 | |
87 outi $C, r0 | |
88 ;hscroll reg + enable display | |
89 ldim 0, r0 | |
90 ldimh $80, r0 | |
91 outi $D, r0 | |
92 | |
93 forever: | |
94 bra forever | |
95 | |
96 copy_data: | |
97 ld16 r1, r2, r4 | |
98 outi $F, r4 | |
99 | |
100 addi 2, r2 | |
101 addi -1, r3 | |
102 bne copy_data | |
103 mov r13, pc | |
104 | |
105 memcpy16: | |
106 ld16 r1, r2, r4 | |
107 str16 r0, r2, r4 | |
108 | |
109 addi 2, r2 | |
110 addi -1, r3 | |
111 bne memcpy16 | |
112 mov r13, pc | |
113 | |
114 write_zeros: | |
115 ldim 0, r4 | |
116 zloop: | |
117 outi $f, r4 | |
118 | |
119 addi -1, r3 | |
120 bne zloop | |
121 mov r13, pc | |
122 | |
123 | |
124 | |
125 vectors: | |
126 dc.w 0 | |
127 dc.w vint_handler | |
128 | |
129 vint_handler | |
130 setuer r13 | |
131 ;handler code goes here | |
132 | |
133 ;setup writes to first element of diagram | |
134 ldim $84, r0 | |
135 ldimh $60, r0 | |
136 outi $E, r0 | |
137 | |
138 ;copy first row of updated tile map | |
139 ldim 0, r1 | |
140 ldimh $C0, r1 | |
141 ldim 0, r2 | |
142 ldim 9, r3 | |
143 call r12, r13 | |
144 | |
145 ;setup writes to second row of diagram | |
146 ldim $04, r0 | |
147 ldimh $61, r0 | |
148 outi $E, r0 | |
149 ;copy second row | |
150 ldim 9, r3 | |
151 call r12, r13 | |
152 | |
153 ;setup writes to third row of diagram | |
154 ldim $84, r0 | |
155 ldimh $61, r0 | |
156 outi $E, r0 | |
157 ;copy third row | |
158 ldim 9, r3 | |
159 call r12, r13 | |
160 | |
34
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
161 ;update map for next frame |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
162 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
163 ;read controller 1 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
164 ini $0, r0 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
165 ;r1 = map |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
166 ldim offsets, r2 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
167 ldimh offsets, r2 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
168 ;index |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
169 ldim 0, r3 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
170 ;mask to test bits |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
171 ldim 1, r4 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
172 ;constant $2000 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
173 ldim 0, r9 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
174 ldimh $20, r9 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
175 ;limit |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
176 ldim 12, r5 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
177 modify_loop |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
178 ;load offset |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
179 ld8 r2, r3, r6 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
180 ;load existing value |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
181 ld16 r1, r6, r7 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
182 ;test for button pressed |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
183 and r0, r4, r8 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
184 beq not_pressed |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
185 or r9, r7, r7 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
186 bra store_modified |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
187 not_pressed |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
188 not r9, r9 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
189 and r9, r7, r7 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
190 not r9, r9 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
191 store_modified |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
192 str16 r1, r6, r7 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
193 ;shift mask to the left |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
194 add r4, r4, r4 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
195 addi 1, r3 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
196 cmp r3, r5 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
197 bne modify_loop |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
198 |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
199 |
32 | 200 reti r13 |
201 | |
202 offsets: | |
34
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
203 dc.b 34 ;Z |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
204 dc.b 32 ;Y |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
205 dc.b 30 ;X |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
206 dc.b 52 ;C |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
207 dc.b 50 ;B |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
208 dc.b 48 ;A |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
209 dc.b 44 ;Mode |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
210 dc.b 26 ;Start |
32 | 211 |
34
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
212 dc.b 22 ;Right |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
213 dc.b 18 ;Left |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
214 dc.b 38 ;Down |
4a093f15fb1b
Finish controller test for controller 1
Michael Pavone <pavone@retrodev.com>
parents:
32
diff
changeset
|
215 dc.b 2 ;Up |
32 | 216 |
217 colors: | |
218 dc.w $000 | |
219 dc.w $777 | |
220 dc.w $333 | |
221 ;second palette | |
222 dc.w $000 | |
223 dc.w $FFF | |
224 dc.w $00F | |
225 map: | |
226 dc.w 0, 1, 0, 0, 0, 0, 0, 0, 0 | |
227 dc.w 3, 0, 4, 0, 5, 0, 7, 8, 9 | |
228 dc.w 0, 2, 0, 0, 6, 0, 10, 11, 12 | |
229 | |
230 tiles: | |
231 incbin buttons.tiles |