Mercurial > repos > blastem
comparison menu.s68 @ 827:35f5658d141f
Add selection arrow to menu
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 05 Aug 2015 23:23:15 -0700 |
parents | 109ac52ffecd |
children | 69a6ec208111 |
comparison
equal
deleted
inserted
replaced
826:9060946ce219 | 827:35f5658d141f |
---|---|
92 dc.b " " | 92 dc.b " " |
93 dc.b " " | 93 dc.b " " |
94 dc.b "JUE " | 94 dc.b "JUE " |
95 | 95 |
96 ;register addresses | 96 ;register addresses |
97 VDP_DATA equ $C00000 | 97 VDP_DATA equ $C00000 |
98 VDP_CTRL equ $C00004 | 98 VDP_CTRL equ $C00004 |
99 VDP_HV equ $C00008 | 99 VDP_HV equ $C00008 |
100 Z80_RAM equ $A00000 | 100 Z80_RAM equ $A00000 |
101 IO_AREA equ $A10000 | 101 IO_AREA equ $A10000 |
102 | 102 PAD1_DATA equ (IO_AREA + 3) |
103 MODE_0 equ 0 | 103 PAD2_DATA equ (IO_AREA + 5) |
104 MODE_1 equ 1 | 104 EXT_DATA equ (IO_AREA + 7) |
105 PAD1_CTRL equ (IO_AREA + 9) | |
106 PAD2_CTRL equ (IO_AREA + 11) | |
107 EXT_CTRL equ (IO_AREA + 13) | |
108 | |
109 MODE_1 equ 0 | |
110 MODE_2 equ 1 | |
105 SCROLL_A equ 2 | 111 SCROLL_A equ 2 |
106 WINDOW equ 3 | 112 WINDOW equ 3 |
107 SCROLL_B equ 4 | 113 SCROLL_B equ 4 |
108 SAT equ 5 | 114 SAT equ 5 |
109 BG_COLOR equ 7 | 115 BG_COLOR equ 7 |
139 ;\2 - Access type | 145 ;\2 - Access type |
140 vdpaccess macro | 146 vdpaccess macro |
141 move.l #((\2) | (\1) << 16 & $3FFF0000 | (\1) >> 14 & 3), (a1) | 147 move.l #((\2) | (\1) << 16 & $3FFF0000 | (\1) >> 14 & 3), (a1) |
142 endm | 148 endm |
143 | 149 |
150 ;Writes a DMA command to the control port | |
151 ;\1 - Destination address | |
152 ;\2 - Destination type | |
153 startdma macro | |
154 move.l #(\2 | VDP_DMA_FLAG | (\1 << 16) & $3FFF0000 | (\1 >> 14) & 3), (a1) | |
155 endm | |
156 | |
157 DMA_SRC_68K equ 0 | |
158 DMA_SRC_VRAM equ $C0 | |
159 DMA_SRC_FILL equ $80 | |
160 | |
161 dmasrc macro | |
162 move.l #($95009600 + (\1) << 15 & $FF0000 + (\1) >> 9 & $FF), (a1) | |
163 move.w #($9700 + (\1) >> 17 & $7F | (\2)), (a1) | |
164 endm | |
165 | |
166 rsset $FFFF8000 | |
167 x_pos rs.w 1 | |
168 base_cmd rs.l 1 | |
169 sprite_list rs.l 160 | |
170 num_sprites rs.b 1 | |
171 last_pad rs.b 1 | |
172 | |
173 int_6: | |
174 dmasrc sprite_list, DMA_SRC_68K | |
175 ;set DMA length | |
176 move.l #$94009300, d0 | |
177 moveq #0, d1 | |
178 move.b num_sprites.w, d1 | |
179 add.w d1, d1 | |
180 add.w d1, d1 | |
181 move.b d1, d0 | |
182 swap d0 | |
183 lsr.w #8, d1 | |
184 move.b d1, d0 | |
185 move.l d0, (a1) | |
186 startdma $C000, VDP_VRAM_WRITE | |
187 | |
188 lea PAD1_DATA, a2 | |
189 move.b #$40, (a2) | |
190 move.b (a2), d0 | |
191 and.b #$3F, d0 | |
192 move.b d0, (a2) | |
193 move.b (a2), d1 | |
194 and.b #$30, d1 | |
195 add.b d1, d1 | |
196 add.b d1, d1 | |
197 or.b d1, d0 | |
198 not.b d0 | |
199 move.b (last_pad).w, d1 | |
200 eor.b d0, d1 | |
201 and.b d0, d1 | |
202 move.b d0, (last_pad).w | |
203 | |
204 moveq #16, d2 | |
205 btst #1, d1 | |
206 bne down | |
207 btst #0, d1 | |
208 bne up | |
209 rte | |
210 | |
211 down: | |
212 add.w d2, (sprite_list).w | |
213 add.w d2, (sprite_list+8).w | |
214 rte | |
215 up: | |
216 sub.w d2, (sprite_list).w | |
217 sub.w d2, (sprite_list+8).w | |
218 rte | |
219 | |
220 int_4: | |
144 empty_handler: | 221 empty_handler: |
145 int_6: | |
146 rte | 222 rte |
147 int_4: | 223 |
148 rte | 224 |
149 | |
150 rsset $FFFF8000 | |
151 x_pos rs.w 1 | |
152 base_cmd rs.l 1 | |
153 | 225 |
154 initial_regs: | 226 initial_regs: |
155 vdpreg MODE_1, $4 ;Mode 5, everything turned off | 227 vdpreg MODE_2, $4 ;Mode 5, everything turned off |
156 vdpreg MODE_0, $4 | 228 vdpreg MODE_1, $4 |
157 vdpreg SCROLL_A, $20 ;Scroll a table $8000 | 229 vdpreg SCROLL_A, $20 ;Scroll a table $8000 |
158 vdpreg SCROLL_B, $05 ;Scroll b table $A000 | 230 vdpreg SCROLL_B, $05 ;Scroll b table $A000 |
159 vdpreg SAT, $60 ;SAT table $C000 | 231 vdpreg SAT, $60 ;SAT table $C000 |
160 vdpreg BG_COLOR, 0 | 232 vdpreg BG_COLOR, 0 |
161 vdpreg HINT, $FF | 233 vdpreg HINT, $FF |
175 .regloop | 247 .regloop |
176 move.w (a2)+, (a1) | 248 move.w (a2)+, (a1) |
177 dbra d0, .regloop | 249 dbra d0, .regloop |
178 | 250 |
179 vdpaccess $0, VDP_CRAM_WRITE | 251 vdpaccess $0, VDP_CRAM_WRITE |
180 move.w #$000, (a0) | 252 move.w #$020, (a0) |
181 move.w #$EEE, (a0) | 253 move.w #$EEE, (a0) |
254 move.w #$222, (a0) | |
182 | 255 |
183 ;init scroll table | 256 ;init scroll table |
184 vdpaccess $0, VDP_VRAM_WRITE | 257 vdpaccess $0, VDP_VRAM_WRITE |
185 move.w #0, (a0) | 258 move.w #0, (a0) |
186 move.w #4, (a0) | 259 move.w #4, (a0) |
187 | 260 |
188 ;load tiles | 261 ;load tiles |
189 vdpaccess $800, VDP_VRAM_WRITE | 262 vdpaccess $800, VDP_VRAM_WRITE |
190 lea font(pc), a2 | 263 lea font(pc), a2 |
191 move.w #((fontend-font)/4 - 1), d0 | 264 move.w #((arrowend-font)/4 - 1), d0 |
192 tloop: | 265 tloop: |
193 move.l (a2)+, (a0) | 266 move.l (a2)+, (a0) |
194 dbra d0, tloop | 267 dbra d0, tloop |
195 | 268 |
196 | 269 |
197 | 270 |
198 ;clear name tables | 271 ;clear name tables |
199 vdpaccess $8000, VDP_VRAM_WRITE | 272 vdpaccess $8000, VDP_VRAM_WRITE |
200 moveq #32, d0 | 273 moveq #32, d0 |
274 swap d0 | |
275 move.b #32, d0 | |
201 move.w #(64*64-1), d1 | 276 move.w #(64*64-1), d1 |
202 ploop: | 277 ploop: |
203 move.l d0, (a0) | 278 move.l d0, (a0) |
204 dbra d1, ploop | 279 dbra d1, ploop |
205 | 280 |
206 move.l #$40000002, d3 | 281 ;setup SAT |
282 ;;vdpaccess $C000, VDP_VRAM_WRITE | |
283 | |
284 lea sprite_list.w, a2 | |
285 ;left arrow | |
286 move.l #$01080501, (a2)+ | |
287 move.l #$807F0086, (a2)+ | |
288 | |
289 ;right arrow | |
290 move.l #$01080500, (a2)+ | |
291 move.l #$887F01AA, (a2)+ | |
292 move.b #2, num_sprites.w | |
293 | |
294 move.l #$40860002, d3 | |
207 move.l d3, (a1) | 295 move.l d3, (a1) |
208 move.l d3, base_cmd.w | 296 move.l d3, base_cmd.w |
209 | 297 |
210 lea Message(pc), a6 | 298 lea Message(pc), a6 |
211 moveq #0, d0 | 299 moveq #0, d0 |
212 bsr print_string | 300 bsr print_string |
213 | 301 |
214 | 302 ;setup gamepad in port 1 |
215 | 303 move.b #$40, PAD1_CTRL |
216 move.w #$8144, (a1) ;enable display | 304 |
217 move #$2300, sr | 305 move.w #$8174, (a1) ;enable display, vertical interrupts, DMA |
218 | 306 |
219 | 307 |
220 wait_forever | 308 wait_forever |
221 stop #2500 | 309 stop #2500 |
222 bra wait_forever | 310 bra wait_forever |
258 move.l d2, d1 | 346 move.l d2, d1 |
259 ;switch to other plane | 347 ;switch to other plane |
260 and.w #$FFFE, d1 | 348 and.w #$FFFE, d1 |
261 swap d1 | 349 swap d1 |
262 eor.l #$20000000, d3 | 350 eor.l #$20000000, d3 |
263 or.l d3, d1 | 351 add.l d3, d1 |
264 move.l d1, (a1) | 352 move.l d1, (a1) |
265 bra .loop | 353 bra .loop |
266 .newline | 354 .newline |
267 moveq #0, d2 | 355 moveq #0, d2 |
268 ;switch back to plane A | 356 ;switch back to plane A |
278 | 366 |
279 align 1 | 367 align 1 |
280 font: | 368 font: |
281 incbin font_interlace_variable.tiles | 369 incbin font_interlace_variable.tiles |
282 fontend | 370 fontend |
371 arrow: | |
372 incbin arrow.tiles | |
373 arrowend: | |
283 | 374 |
284 widths: | 375 widths: |
285 dc.b 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1 | 376 dc.b 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1 |
286 dc.b 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0 | 377 dc.b 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0 |
287 dc.b 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1 | 378 dc.b 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1 |