Mercurial > repos > blastem
diff menu.s68 @ 866:69a6ec208111
Menu ROM now pulls real file names from the OS rather than using a fake list
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 06 Nov 2015 12:19:39 -0800 |
parents | 35f5658d141f |
children | 1bab7e01ae98 |
line wrap: on
line diff
--- a/menu.s68 Fri Nov 06 11:44:51 2015 -0800 +++ b/menu.s68 Fri Nov 06 12:19:39 2015 -0800 @@ -84,7 +84,7 @@ dc.b "Menu " dc.b " " dc.b " " - dc.b "GM MK-00000-00", 0, 0 + dc.b "MP BlstMenu-00", 0, 0 dc.b " " dc.l $0, rom_end-1, $FF0000, $FFFFFF dc.b " " @@ -92,7 +92,7 @@ dc.b " " dc.b " " dc.b "JUE " - + ;register addresses VDP_DATA equ $C00000 VDP_CTRL equ $C00004 @@ -139,21 +139,21 @@ vdpreg macro dc.w (((\1) << 8) | $8000 | (\2)) endm - + ;Writes a normal VDP command to the control port ;\1 - VDP address ;\2 - Access type vdpaccess macro move.l #((\2) | (\1) << 16 & $3FFF0000 | (\1) >> 14 & 3), (a1) endm - + ;Writes a DMA command to the control port ;\1 - Destination address ;\2 - Destination type startdma macro move.l #(\2 | VDP_DMA_FLAG | (\1 << 16) & $3FFF0000 | (\1 >> 14) & 3), (a1) endm - + DMA_SRC_68K equ 0 DMA_SRC_VRAM equ $C0 DMA_SRC_FILL equ $80 @@ -162,14 +162,19 @@ move.l #($95009600 + (\1) << 15 & $FF0000 + (\1) >> 9 & $FF), (a1) move.w #($9700 + (\1) >> 17 & $7F | (\2)), (a1) endm - + +dir_buffer equ $100000 +menu_port equ $180000 + +MAX_DISPLAY equ 24 + rsset $FFFF8000 x_pos rs.w 1 base_cmd rs.l 1 sprite_list rs.l 160 num_sprites rs.b 1 last_pad rs.b 1 - + int_6: dmasrc sprite_list, DMA_SRC_68K ;set DMA length @@ -184,7 +189,7 @@ move.b d1, d0 move.l d0, (a1) startdma $C000, VDP_VRAM_WRITE - + lea PAD1_DATA, a2 move.b #$40, (a2) move.b (a2), d0 @@ -200,14 +205,14 @@ eor.b d0, d1 and.b d0, d1 move.b d0, (last_pad).w - + moveq #16, d2 btst #1, d1 bne down btst #0, d1 bne up rte - + down: add.w d2, (sprite_list).w add.w d2, (sprite_list+8).w @@ -216,11 +221,11 @@ sub.w d2, (sprite_list).w sub.w d2, (sprite_list+8).w rte - + int_4: empty_handler: rte - + initial_regs: @@ -241,13 +246,13 @@ start: lea $C00000, a0 lea $C00004, a1 - + moveq #(end_initial_regs-initial_regs-1), d0 lea initial_regs.w, a2 .regloop move.w (a2)+, (a1) dbra d0, .regloop - + vdpaccess $0, VDP_CRAM_WRITE move.w #$020, (a0) move.w #$EEE, (a0) @@ -277,43 +282,76 @@ ploop: move.l d0, (a0) dbra d1, ploop - + ;setup SAT ;;vdpaccess $C000, VDP_VRAM_WRITE - + lea sprite_list.w, a2 ;left arrow move.l #$01080501, (a2)+ move.l #$807F0086, (a2)+ - + ;right arrow move.l #$01080500, (a2)+ move.l #$887F01AA, (a2)+ move.b #2, num_sprites.w - + move.l #$40860002, d3 move.l d3, (a1) move.l d3, base_cmd.w - lea Message(pc), a6 + lea dir_buffer, a6 + lea menu_port, a2 + move.l a6, (a2) + +wait_complete: + tst.w (a2) + bne wait_complete + + moveq #MAX_DISPLAY-1, d7 +file_loop: + tst.b (a6)+ + addq #1, a6 ;TODO: Do something with directory flag + + cmp.b #$2E, (a6) + bne normal + cmp.b #$2E, (1, a6) + beq normal + addq #1, a6 +.skip_loop: + tst.b (a6)+ + bne .skip_loop + addq #1, d7 + move.l a6, d6 + bra skip +normal: moveq #0, d0 bsr print_string - + move.l a6, d6 + + lea Newline(pc), a6 + bsr print_string + +skip: + ;word align pointer + addq #1, d6 + and.w #$FFFE, d6 + move.l d6, a6 + + dbra d7, file_loop + ;setup gamepad in port 1 move.b #$40, PAD1_CTRL - + move.w #$8174, (a1) ;enable display, vertical interrupts, DMA - + wait_forever stop #2500 bra wait_forever -Message: - dc.b "Journey From Darkness - Strider Returns (U) [c][!].bin", $A - dc.b "Toejam & Earl in Panic on Funkotron (U) [!].bin", $A - dc.b "Fire Shark (U) [c][!].bin", $A - dc.b "Sonic and Knuckles (W) [!].bin", 0 +Newline: + dc.b $A, 0 align 1 @@ -378,5 +416,5 @@ dc.b 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1 dc.b 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 dc.b 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1 - + rom_end: