summaryrefslogtreecommitdiff
path: root/menu.s68
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2015-11-06 14:17:41 -0800
committerMichael Pavone <pavone@retrodev.com>2015-11-06 14:17:41 -0800
commit5d484fc10b53f6e5542837519715747631f45795 (patch)
tree7686bc3ce13785998ceefc8a33bbd5538ffd7695 /menu.s68
parent9730e62a5e917d5c88bd7626259efb73c26ba73e (diff)
Allow directory navigation in menu. Sort directory entries
Diffstat (limited to 'menu.s68')
-rw-r--r--menu.s6878
1 files changed, 68 insertions, 10 deletions
diff --git a/menu.s68 b/menu.s68
index ec84810..e882c46 100644
--- a/menu.s68
+++ b/menu.s68
@@ -172,8 +172,10 @@ MAX_DISPLAY equ 24
x_pos rs.w 1
base_cmd rs.l 1
sprite_list rs.l 160
+page_index rs.l MAX_DISPLAY+1
num_sprites rs.b 1
last_pad rs.b 1
+selected rs.b 1
int_6:
dmasrc sprite_list, DMA_SRC_68K
@@ -190,6 +192,7 @@ int_6:
move.l d0, (a1)
startdma $C000, VDP_VRAM_WRITE
+ ;read gamepad in port 1
lea PAD1_DATA, a2
move.b #$40, (a2)
move.b (a2), d0
@@ -200,28 +203,69 @@ int_6:
add.b d1, d1
add.b d1, d1
or.b d1, d0
- not.b d0
+ not.b d0 ;button state is inveterted
move.b (last_pad).w, d1
eor.b d0, d1
and.b d0, d1
move.b d0, (last_pad).w
moveq #16, d2
+ ;d0 = SACBRLUD
+ ;d1 = newly pressed buttons
btst #1, d1
bne down
btst #0, d1
bne up
+ btst #7, d1
+ bne start_pressed
+int_done:
rte
down:
+ ;check if we are already at the bottom of the page
+ moveq #1, d0
+ add.b (selected).w, d0
+ move.w d0, d1
+ add.w d0, d0
+ add.w d0, d0
+ lea page_index.w, a2
+ tst.l (0, a2, d0.w)
+ beq int_done
+ move.b d1, (selected).w
+
add.w d2, (sprite_list).w
add.w d2, (sprite_list+8).w
rte
up:
+ ;check if we are already at the top of the page
+ move.b (selected).w, d0
+ beq int_done
+ subq #1, d0
+ move.b d0, (selected).w
+
sub.w d2, (sprite_list).w
sub.w d2, (sprite_list+8).w
rte
+start_pressed:
+ moveq #0, d0
+ move.b (selected).w, d0
+ add.w d0, d0
+ add.w d0, d0
+ lea page_index.w, a2
+ lea (-1, a2, d0.w), a2
+ tst.b (a2)+
+ bne enter_dir
+ ;regular file
+ rte
+enter_dir:
+ lea menu_port+4, a3
+ move.l (a2), (a3)
+.wait_complete
+ tst.w (a3)
+ bne .wait_complete
+ addq #6, a7
+ bra menu_start
int_4:
empty_handler:
rte
@@ -273,15 +317,7 @@ tloop:
- ;clear name tables
- vdpaccess $8000, VDP_VRAM_WRITE
- moveq #32, d0
- swap d0
- move.b #32, d0
- move.w #(64*64-1), d1
-ploop:
- move.l d0, (a0)
- dbra d1, ploop
+
;setup SAT
;;vdpaccess $C000, VDP_VRAM_WRITE
@@ -296,6 +332,17 @@ ploop:
move.l #$887F01AA, (a2)+
move.b #2, num_sprites.w
+menu_start:
+ ;clear name tables
+ vdpaccess $8000, VDP_VRAM_WRITE
+ moveq #32, d0
+ swap d0
+ move.b #32, d0
+ move.w #(64*64-1), d1
+ploop:
+ move.l d0, (a0)
+ dbra d1, ploop
+
move.l #$40860002, d3
move.l d3, (a1)
move.l d3, base_cmd.w
@@ -308,11 +355,14 @@ wait_complete:
tst.w (a2)
bne wait_complete
+ lea page_index.w, a3
moveq #MAX_DISPLAY-1, d7
file_loop:
tst.b (a6)+
+ beq done_files
addq #1, a6 ;TODO: Do something with directory flag
+ ;skip over entries starting with a dot except ..
cmp.b #$2E, (a6)
bne normal
cmp.b #$2E, (1, a6)
@@ -325,6 +375,9 @@ file_loop:
move.l a6, d6
bra skip
normal:
+ ;save entry pointer to page index
+ move.l a6, (a3)+
+ ;print name on screen
moveq #0, d0
bsr print_string
move.l a6, d6
@@ -339,6 +392,11 @@ skip:
move.l d6, a6
dbra d7, file_loop
+done_files:
+
+ ;null terminate page_index
+ moveq #0, d0
+ move.l d0, (a3)
;setup gamepad in port 1
move.b #$40, PAD1_CTRL