comparison menu.s68 @ 868:1bab7e01ae98

Allow directory navigation in menu. Sort directory entries
author Michael Pavone <pavone@retrodev.com>
date Fri, 06 Nov 2015 14:17:41 -0800
parents 69a6ec208111
children 4298db923cf8
comparison
equal deleted inserted replaced
867:bacd67a82d58 868:1bab7e01ae98
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 num_sprites rs.b 1 176 num_sprites rs.b 1
176 last_pad rs.b 1 177 last_pad rs.b 1
178 selected rs.b 1
177 179
178 int_6: 180 int_6:
179 dmasrc sprite_list, DMA_SRC_68K 181 dmasrc sprite_list, DMA_SRC_68K
180 ;set DMA length 182 ;set DMA length
181 move.l #$94009300, d0 183 move.l #$94009300, d0
188 lsr.w #8, d1 190 lsr.w #8, d1
189 move.b d1, d0 191 move.b d1, d0
190 move.l d0, (a1) 192 move.l d0, (a1)
191 startdma $C000, VDP_VRAM_WRITE 193 startdma $C000, VDP_VRAM_WRITE
192 194
195 ;read gamepad in port 1
193 lea PAD1_DATA, a2 196 lea PAD1_DATA, a2
194 move.b #$40, (a2) 197 move.b #$40, (a2)
195 move.b (a2), d0 198 move.b (a2), d0
196 and.b #$3F, d0 199 and.b #$3F, d0
197 move.b d0, (a2) 200 move.b d0, (a2)
198 move.b (a2), d1 201 move.b (a2), d1
199 and.b #$30, d1 202 and.b #$30, d1
200 add.b d1, d1 203 add.b d1, d1
201 add.b d1, d1 204 add.b d1, d1
202 or.b d1, d0 205 or.b d1, d0
203 not.b d0 206 not.b d0 ;button state is inveterted
204 move.b (last_pad).w, d1 207 move.b (last_pad).w, d1
205 eor.b d0, d1 208 eor.b d0, d1
206 and.b d0, d1 209 and.b d0, d1
207 move.b d0, (last_pad).w 210 move.b d0, (last_pad).w
208 211
209 moveq #16, d2 212 moveq #16, d2
213 ;d0 = SACBRLUD
214 ;d1 = newly pressed buttons
210 btst #1, d1 215 btst #1, d1
211 bne down 216 bne down
212 btst #0, d1 217 btst #0, d1
213 bne up 218 bne up
219 btst #7, d1
220 bne start_pressed
221 int_done:
214 rte 222 rte
215 223
216 down: 224 down:
225 ;check if we are already at the bottom of the page
226 moveq #1, d0
227 add.b (selected).w, d0
228 move.w d0, d1
229 add.w d0, d0
230 add.w d0, d0
231 lea page_index.w, a2
232 tst.l (0, a2, d0.w)
233 beq int_done
234 move.b d1, (selected).w
235
217 add.w d2, (sprite_list).w 236 add.w d2, (sprite_list).w
218 add.w d2, (sprite_list+8).w 237 add.w d2, (sprite_list+8).w
219 rte 238 rte
220 up: 239 up:
240 ;check if we are already at the top of the page
241 move.b (selected).w, d0
242 beq int_done
243 subq #1, d0
244 move.b d0, (selected).w
245
221 sub.w d2, (sprite_list).w 246 sub.w d2, (sprite_list).w
222 sub.w d2, (sprite_list+8).w 247 sub.w d2, (sprite_list+8).w
223 rte 248 rte
224 249
250 start_pressed:
251 moveq #0, d0
252 move.b (selected).w, d0
253 add.w d0, d0
254 add.w d0, d0
255 lea page_index.w, a2
256 lea (-1, a2, d0.w), a2
257 tst.b (a2)+
258 bne enter_dir
259 ;regular file
260 rte
261 enter_dir:
262 lea menu_port+4, a3
263 move.l (a2), (a3)
264 .wait_complete
265 tst.w (a3)
266 bne .wait_complete
267 addq #6, a7
268 bra menu_start
225 int_4: 269 int_4:
226 empty_handler: 270 empty_handler:
227 rte 271 rte
228 272
229 273
271 move.l (a2)+, (a0) 315 move.l (a2)+, (a0)
272 dbra d0, tloop 316 dbra d0, tloop
273 317
274 318
275 319
320
321
322 ;setup SAT
323 ;;vdpaccess $C000, VDP_VRAM_WRITE
324
325 lea sprite_list.w, a2
326 ;left arrow
327 move.l #$01080501, (a2)+
328 move.l #$807F0086, (a2)+
329
330 ;right arrow
331 move.l #$01080500, (a2)+
332 move.l #$887F01AA, (a2)+
333 move.b #2, num_sprites.w
334
335 menu_start:
276 ;clear name tables 336 ;clear name tables
277 vdpaccess $8000, VDP_VRAM_WRITE 337 vdpaccess $8000, VDP_VRAM_WRITE
278 moveq #32, d0 338 moveq #32, d0
279 swap d0 339 swap d0
280 move.b #32, d0 340 move.b #32, d0
281 move.w #(64*64-1), d1 341 move.w #(64*64-1), d1
282 ploop: 342 ploop:
283 move.l d0, (a0) 343 move.l d0, (a0)
284 dbra d1, ploop 344 dbra d1, ploop
285 345
286 ;setup SAT
287 ;;vdpaccess $C000, VDP_VRAM_WRITE
288
289 lea sprite_list.w, a2
290 ;left arrow
291 move.l #$01080501, (a2)+
292 move.l #$807F0086, (a2)+
293
294 ;right arrow
295 move.l #$01080500, (a2)+
296 move.l #$887F01AA, (a2)+
297 move.b #2, num_sprites.w
298
299 move.l #$40860002, d3 346 move.l #$40860002, d3
300 move.l d3, (a1) 347 move.l d3, (a1)
301 move.l d3, base_cmd.w 348 move.l d3, base_cmd.w
302 349
303 lea dir_buffer, a6 350 lea dir_buffer, a6
306 353
307 wait_complete: 354 wait_complete:
308 tst.w (a2) 355 tst.w (a2)
309 bne wait_complete 356 bne wait_complete
310 357
358 lea page_index.w, a3
311 moveq #MAX_DISPLAY-1, d7 359 moveq #MAX_DISPLAY-1, d7
312 file_loop: 360 file_loop:
313 tst.b (a6)+ 361 tst.b (a6)+
362 beq done_files
314 addq #1, a6 ;TODO: Do something with directory flag 363 addq #1, a6 ;TODO: Do something with directory flag
315 364
365 ;skip over entries starting with a dot except ..
316 cmp.b #$2E, (a6) 366 cmp.b #$2E, (a6)
317 bne normal 367 bne normal
318 cmp.b #$2E, (1, a6) 368 cmp.b #$2E, (1, a6)
319 beq normal 369 beq normal
320 addq #1, a6 370 addq #1, a6
323 bne .skip_loop 373 bne .skip_loop
324 addq #1, d7 374 addq #1, d7
325 move.l a6, d6 375 move.l a6, d6
326 bra skip 376 bra skip
327 normal: 377 normal:
378 ;save entry pointer to page index
379 move.l a6, (a3)+
380 ;print name on screen
328 moveq #0, d0 381 moveq #0, d0
329 bsr print_string 382 bsr print_string
330 move.l a6, d6 383 move.l a6, d6
331 384
332 lea Newline(pc), a6 385 lea Newline(pc), a6
337 addq #1, d6 390 addq #1, d6
338 and.w #$FFFE, d6 391 and.w #$FFFE, d6
339 move.l d6, a6 392 move.l d6, a6
340 393
341 dbra d7, file_loop 394 dbra d7, file_loop
395 done_files:
396
397 ;null terminate page_index
398 moveq #0, d0
399 move.l d0, (a3)
342 400
343 ;setup gamepad in port 1 401 ;setup gamepad in port 1
344 move.b #$40, PAD1_CTRL 402 move.b #$40, PAD1_CTRL
345 403
346 move.w #$8174, (a1) ;enable display, vertical interrupts, DMA 404 move.w #$8174, (a1) ;enable display, vertical interrupts, DMA