Menu: remember cursor position for directory traversal

This commit is contained in:
Maximilian Rehkopf 2011-08-20 20:55:10 +02:00
parent 9a87fba657
commit 4727b6da3d
3 changed files with 89 additions and 11 deletions

View File

@ -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 $@ $^

View File

@ -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

View File

@ -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