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