Mercurial > repos > blastem
comparison menu.s68 @ 871:f364f4f22f8f
Allow navigation between pages for long directories in menu ROM
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 06 Nov 2015 19:47:58 -0800 |
parents | 4298db923cf8 |
children | 7022ba865cfd |
comparison
equal
deleted
inserted
replaced
870:f173317ecdb4 | 871:f364f4f22f8f |
---|---|
167 menu_port equ $180000 | 167 menu_port equ $180000 |
168 | 168 |
169 MAX_DISPLAY equ 24 | 169 MAX_DISPLAY equ 24 |
170 | 170 |
171 rsset $FFFF8000 | 171 rsset $FFFF8000 |
172 x_pos rs.w 1 | 172 x_pos rs.w 1 |
173 base_cmd rs.l 1 | 173 base_cmd rs.l 1 |
174 sprite_list rs.l 160 | 174 sprite_list rs.l 160 |
175 page_index rs.l MAX_DISPLAY+1 | 175 page_index rs.l MAX_DISPLAY+1 |
176 num_sprites rs.b 1 | 176 page_stack rs.l 1 |
177 last_pad rs.b 1 | 177 page_pointers rs.l 1024 |
178 selected rs.b 1 | 178 num_sprites rs.b 1 |
179 last_pad rs.b 1 | |
180 selected rs.b 1 | |
181 more_pages rs.b 1 | |
182 | |
179 | 183 |
180 int_6: | 184 int_6: |
181 dmasrc sprite_list, DMA_SRC_68K | 185 dmasrc sprite_list, DMA_SRC_68K |
182 ;set DMA length | 186 ;set DMA length |
183 move.l #$94009300, d0 | 187 move.l #$94009300, d0 |
214 ;d1 = newly pressed buttons | 218 ;d1 = newly pressed buttons |
215 btst #1, d1 | 219 btst #1, d1 |
216 bne down | 220 bne down |
217 btst #0, d1 | 221 btst #0, d1 |
218 bne up | 222 bne up |
223 btst #3, d1 | |
224 bne right | |
225 btst #2, d1 | |
226 bne left | |
219 btst #7, d1 | 227 btst #7, d1 |
220 bne start_pressed | 228 bne start_pressed |
221 int_done: | 229 int_done: |
222 rte | 230 rte |
223 | 231 |
244 move.b d0, (selected).w | 252 move.b d0, (selected).w |
245 | 253 |
246 sub.w d2, (sprite_list).w | 254 sub.w d2, (sprite_list).w |
247 sub.w d2, (sprite_list+8).w | 255 sub.w d2, (sprite_list+8).w |
248 rte | 256 rte |
257 | |
258 right: | |
259 ;check that we have another page to go to | |
260 tst.b more_pages.w | |
261 beq int_done | |
262 ;switch to the next page | |
263 move.l page_stack.w, a6 | |
264 move.l (-4, a6), a6 | |
265 | |
266 addq #6, a7 | |
267 bra render_page | |
268 | |
269 left: | |
270 move.l page_stack.w, a5 | |
271 ;check if we're already on the first page | |
272 cmp.l #(page_pointers+8), a5 | |
273 beq int_done | |
274 ;switch to previous page | |
275 lea (-12, a5), a5 | |
276 move.l (a5)+, a6 | |
277 move.l a5, page_stack.w | |
278 | |
279 addq #6, a7 | |
280 bra render_page | |
249 | 281 |
250 start_pressed: | 282 start_pressed: |
251 moveq #0, d0 | 283 moveq #0, d0 |
252 move.b (selected).w, d0 | 284 move.b (selected).w, d0 |
253 add.w d0, d0 | 285 add.w d0, d0 |
314 tloop: | 346 tloop: |
315 move.l (a2)+, (a0) | 347 move.l (a2)+, (a0) |
316 dbra d0, tloop | 348 dbra d0, tloop |
317 | 349 |
318 | 350 |
319 | |
320 | |
321 | |
322 ;setup SAT | 351 ;setup SAT |
323 ;;vdpaccess $C000, VDP_VRAM_WRITE | 352 ;;vdpaccess $C000, VDP_VRAM_WRITE |
324 | 353 |
325 lea sprite_list.w, a2 | 354 lea sprite_list.w, a2 |
326 ;left arrow | 355 ;left arrow |
331 move.l #$01080500, (a2)+ | 360 move.l #$01080500, (a2)+ |
332 move.l #$887F01AA, (a2)+ | 361 move.l #$887F01AA, (a2)+ |
333 move.b #2, num_sprites.w | 362 move.b #2, num_sprites.w |
334 | 363 |
335 menu_start: | 364 menu_start: |
365 lea page_pointers.w, a5 | |
366 lea dir_buffer, a6 | |
367 move.l a6, (a5)+ | |
368 move.l a5, page_stack.w | |
369 lea menu_port, a2 | |
370 move.l a6, (a2) | |
371 | |
372 wait_complete: | |
373 tst.w (a2) | |
374 bne wait_complete | |
375 | |
376 render_page: | |
336 ;clear name tables | 377 ;clear name tables |
337 vdpaccess $8000, VDP_VRAM_WRITE | 378 vdpaccess $8000, VDP_VRAM_WRITE |
338 moveq #32, d0 | 379 moveq #32, d0 |
339 swap d0 | 380 swap d0 |
340 move.b #32, d0 | 381 move.b #32, d0 |
345 | 386 |
346 move.l #$40860002, d3 | 387 move.l #$40860002, d3 |
347 move.l d3, (a1) | 388 move.l d3, (a1) |
348 move.l d3, base_cmd.w | 389 move.l d3, base_cmd.w |
349 | 390 |
350 lea dir_buffer, a6 | 391 move.b #0, more_pages.w |
351 lea menu_port, a2 | |
352 move.l a6, (a2) | |
353 | |
354 wait_complete: | |
355 tst.w (a2) | |
356 bne wait_complete | |
357 | |
358 lea page_index.w, a3 | 392 lea page_index.w, a3 |
359 moveq #MAX_DISPLAY-1, d7 | 393 moveq #MAX_DISPLAY-1, d7 |
360 file_loop: | 394 file_loop: |
361 tst.b (a6)+ | 395 tst.b (a6)+ |
362 beq done_files | 396 beq done_files |
390 addq #1, d6 | 424 addq #1, d6 |
391 and.w #$FFFE, d6 | 425 and.w #$FFFE, d6 |
392 move.l d6, a6 | 426 move.l d6, a6 |
393 | 427 |
394 dbra d7, file_loop | 428 dbra d7, file_loop |
429 tst.b (a6) | |
430 beq done_files | |
431 move.b #1, more_pages.w | |
395 done_files: | 432 done_files: |
433 move.l page_stack.w, a5 | |
434 move.l a6, (a5)+ | |
435 move.l a5, page_stack.w | |
396 | 436 |
397 ;null terminate page_index | 437 ;null terminate page_index |
398 moveq #0, d0 | 438 moveq #0, d0 |
399 move.l d0, (a3) | 439 move.l d0, (a3) |
400 | 440 |