Menu: remember cursor position for directory traversal
This commit is contained in:
parent
9a87fba657
commit
4727b6da3d
@ -3,7 +3,7 @@ OBJS = header.ips reset.o65 main.o65 font.o65 palette.o65 data.o65 const.o65 log
|
||||
all: menu.bin
|
||||
|
||||
smc: menu.bin
|
||||
cat menu.bin sd2snes.rom > $@
|
||||
cat menu.bin sd2snes.rom > menu.smc
|
||||
menu.bin: $(OBJS)
|
||||
sneslink -fsmc -o $@ $^
|
||||
|
||||
|
||||
@ -8,19 +8,11 @@ dirend_addr .word 0
|
||||
dirend_bank .byt 0
|
||||
dirend_idx .word 0
|
||||
dirptr_idx .word 0
|
||||
dirptr_table .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
dirent_addr .word 0
|
||||
dirent_bank .byt 0
|
||||
dirent_type .byt 0
|
||||
dirend_onscreen .byt 0
|
||||
dirlog_idx .byt 0
|
||||
dirlog .word 0,0,0,0,0,0,0,0,0
|
||||
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
dirlog_idx .byt 0,0,0 ; long ptr
|
||||
|
||||
;----------parameters for text output----------
|
||||
print_x .byt 0 ;x coordinate
|
||||
@ -163,6 +155,19 @@ hdma_window .byt 0
|
||||
.byt 0
|
||||
.byt 0,0
|
||||
.byt 0
|
||||
; dirlog format:
|
||||
; dirstart_addr 2
|
||||
; dirstart_bank 1
|
||||
; dirptr_addr 2
|
||||
; dirptr_bank 1
|
||||
; menu_sel 2
|
||||
; total 8 bytes
|
||||
dirlog .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
|
||||
infloop .byt 0,0 ; to be filled w/ 80 FE
|
||||
wram_fadeloop .byt 0
|
||||
|
||||
@ -25,6 +25,12 @@ menu_init:
|
||||
stx menu_sel
|
||||
lda #$01
|
||||
sta menu_dirty
|
||||
rep #$20 : .al
|
||||
lda #!dirlog
|
||||
sta dirlog_idx
|
||||
sep #$20 : .as
|
||||
lda #^dirlog
|
||||
sta dirlog_idx+2
|
||||
rts
|
||||
|
||||
menuloop:
|
||||
@ -247,6 +253,7 @@ print_direntry:
|
||||
plb
|
||||
|
||||
lda @dirent_type
|
||||
and #$f0
|
||||
cmp #$80
|
||||
rep #$20 : .al
|
||||
bne dirent_is_file
|
||||
@ -319,6 +326,7 @@ dirent_type_cont
|
||||
|
||||
sep #$20 : .as
|
||||
lda dirent_type
|
||||
and #$f0
|
||||
cmp #$80
|
||||
bne dirent_is_file_2
|
||||
lda #^text_dirmark
|
||||
@ -486,12 +494,17 @@ select_item:
|
||||
beq sel_is_file
|
||||
cmp #$80
|
||||
beq sel_is_dir
|
||||
cmp #$81
|
||||
beq sel_is_parent
|
||||
select_item_cont
|
||||
plb
|
||||
rts
|
||||
sel_is_file
|
||||
jsr select_file
|
||||
bra select_item_cont
|
||||
sel_is_parent
|
||||
jsr select_parent
|
||||
bra select_item_cont
|
||||
sel_is_dir
|
||||
jsr select_dir
|
||||
bra select_item_cont
|
||||
@ -516,7 +529,35 @@ select_file:
|
||||
jsl @wram_fadeloop
|
||||
rts
|
||||
|
||||
select_dir: ; y = direntry ptr
|
||||
select_dir:
|
||||
tyx
|
||||
; save old dir position
|
||||
rep #$20 : .al
|
||||
ldy #$0000
|
||||
lda @dirstart_addr
|
||||
sta [dirlog_idx], y
|
||||
iny
|
||||
iny
|
||||
lda @dirstart_bank
|
||||
sta [dirlog_idx], y
|
||||
iny
|
||||
lda @dirptr_addr
|
||||
sta [dirlog_idx], y
|
||||
iny
|
||||
iny
|
||||
lda @dirptr_bank
|
||||
sta [dirlog_idx], y
|
||||
iny
|
||||
lda @menu_sel
|
||||
sta [dirlog_idx], y
|
||||
lda @dirlog_idx
|
||||
clc
|
||||
adc #$0008
|
||||
sta @dirlog_idx
|
||||
sep #$20 : .as
|
||||
;---
|
||||
; y = direntry ptr
|
||||
txy
|
||||
dey
|
||||
lda (dirptr_addr), y
|
||||
clc
|
||||
@ -550,6 +591,38 @@ select_dir: ; y = direntry ptr
|
||||
plb
|
||||
rts
|
||||
|
||||
select_parent:
|
||||
rep #$20 : .al
|
||||
lda @dirlog_idx
|
||||
sec
|
||||
sbc #$0008
|
||||
sta @dirlog_idx
|
||||
ldy #$0000
|
||||
lda [dirlog_idx], y ; load dirstart_addr
|
||||
sta @dirstart_addr
|
||||
iny
|
||||
iny
|
||||
sep #$20 : .as
|
||||
lda [dirlog_idx], y ; load dirstart_bank
|
||||
sta @dirstart_bank
|
||||
iny
|
||||
rep #$20 : .al
|
||||
lda [dirlog_idx], y ; load dirptr_addr
|
||||
sta @dirptr_addr
|
||||
iny
|
||||
iny
|
||||
sep #$20 : .as
|
||||
lda [dirlog_idx], y ; load dirptr_bank
|
||||
sta @dirptr_bank
|
||||
iny
|
||||
rep #$20 : .al
|
||||
lda [dirlog_idx], y ; load menu_sel
|
||||
sta @menu_sel
|
||||
sep #$20 : .as
|
||||
lda #$01
|
||||
sta @menu_dirty
|
||||
rts
|
||||
|
||||
menu_key_x:
|
||||
jsr mainmenu
|
||||
rts
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user