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