Mercurial > repos > blastem
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 |