Menu: simplify some memory accesses

This commit is contained in:
ikari 2011-12-16 19:19:51 +01:00
parent d65d657ff7
commit 37a9f09a78
2 changed files with 27 additions and 37 deletions

View File

@ -1,15 +1,15 @@
.data .data
;don't anger the stack! ;don't anger the stack!
dirptr_addr .word 0 dirptr_addr .word 0
dirptr_bank .byt 0 dirptr_bank .word 0
dirstart_addr .word 0 dirstart_addr .word 0
dirstart_bank .byt 0 dirstart_bank .word 0
dirend_addr .word 0 dirend_addr .word 0
dirend_bank .byt 0 dirend_bank .word 0
dirend_idx .word 0 dirend_idx .word 0
dirptr_idx .word 0 dirptr_idx .word 0
dirent_addr .word 0 dirent_addr .word 0
dirent_bank .byt 0 dirent_bank .word 0
dirent_type .byt 0 dirent_type .byt 0
dirend_onscreen .byt 0 dirend_onscreen .byt 0
dirlog_idx .byt 0,0,0 ; long ptr dirlog_idx .byt 0,0,0 ; long ptr

View File

@ -188,32 +188,26 @@ redraw_filelist_loop
lsr lsr
cmp listdisp cmp listdisp
beq redraw_filelist_last beq redraw_filelist_last
lda dirptr_bank
phb
pha
plb
rep #$20 : .al rep #$20 : .al
lda (dirptr_addr), y lda [dirptr_addr], y
sta @dirent_addr sta @dirent_addr
iny iny
iny iny
sep #$20 : .as sep #$20 : .as
lda (dirptr_addr), y ; load fileinfo bank lda [dirptr_addr], y ; load fileinfo bank
clc clc
adc #$c0 ; add $C0 for memory map adc #$c0 ; add $C0 for memory map
sta @dirent_bank ; store as current bank sta @dirent_bank ; store as current bank
cmp #$c0 ; if bank was 0 -> dirend entry in DB cmp #$c0 ; if bank was 0 -> dirend entry in DB
beq redraw_filelist_dirend ; handle dirend beq redraw_filelist_dirend ; handle dirend
iny iny
lda (dirptr_addr), y lda [dirptr_addr], y
iny iny
sta @dirent_type sta @dirent_type
plb
sty dirptr_idx sty dirptr_idx
jsr print_direntry jsr print_direntry
bra redraw_filelist_loop bra redraw_filelist_loop
redraw_filelist_dirend redraw_filelist_dirend
plb
dey ; recover last valid direntry number dey ; recover last valid direntry number
dey ; (we had 2x iny of the direntry pointer above, dey ; (we had 2x iny of the direntry pointer above,
dey ; so account for those too) dey ; so account for those too)
@ -225,15 +219,10 @@ redraw_filelist_dirend
sta dirend_onscreen sta dirend_onscreen
bra redraw_filelist_out bra redraw_filelist_out
redraw_filelist_last ;check if next offscreen item is end of dir redraw_filelist_last ;check if next offscreen item is end of dir
lda dirptr_bank
phb
pha
plb
iny iny
iny iny
lda (dirptr_addr), y lda [dirptr_addr], y
beq redraw_filelist_dirend beq redraw_filelist_dirend
plb
redraw_filelist_out redraw_filelist_out
ldx #$0000 ldx #$0000
stx dirptr_idx stx dirptr_idx
@ -352,7 +341,7 @@ menu_key_down:
lda listdisp lda listdisp
dec dec
cmp menu_sel cmp menu_sel
bne + bne down_noscroll
lda #$01 lda #$01
sta menu_dirty sta menu_dirty
lda dirend_onscreen lda dirend_onscreen
@ -361,10 +350,13 @@ menu_key_down:
lda dirptr_addr lda dirptr_addr
clc clc
adc #$04 adc #$04
sta dirptr_addr bcc +
inc dirptr_bank
+ sta dirptr_addr
sep #$20 : .as sep #$20 : .as
rts rts
+ lda dirend_onscreen down_noscroll
lda dirend_onscreen
beq + beq +
lda dirend_idx lda dirend_idx
lsr lsr
@ -380,7 +372,7 @@ down_out
menu_key_up: menu_key_up:
lda menu_sel lda menu_sel
bne + bne up_noscroll
lda #$01 lda #$01
sta menu_dirty sta menu_dirty
rep #$20 : .al rep #$20 : .al
@ -389,9 +381,12 @@ menu_key_up:
beq up_out beq up_out
sec sec
sbc #$04 sbc #$04
sta dirptr_addr bcs +
dec dirptr_bank
+ sta dirptr_addr
bra up_out bra up_out
+ dec up_noscroll
dec
sta menu_sel sta menu_sel
up_out up_out
sep #$20 : .as sep #$20 : .as
@ -480,14 +475,10 @@ select_item:
asl asl
tay tay
sep #$20 : .as sep #$20 : .as
lda dirptr_bank
phb
pha
plb
iny iny
iny iny
iny iny
lda (dirptr_addr), y lda [dirptr_addr], y
cmp #$01 cmp #$01
beq sel_is_file beq sel_is_file
cmp #$04 cmp #$04
@ -497,7 +488,6 @@ select_item:
cmp #$81 cmp #$81
beq sel_is_parent beq sel_is_parent
select_item_cont select_item_cont
plb
rts rts
sel_is_file sel_is_file
jsr select_file jsr select_file
@ -513,12 +503,12 @@ select_file:
; have avr load the rom ; have avr load the rom
dey dey
rep #$20 : .al rep #$20 : .al
lda (dirptr_addr), y lda [dirptr_addr], y
and #$00ff and #$00ff
sta @AVR_PARAM+2 sta @AVR_PARAM+2
dey dey
dey dey
lda (dirptr_addr), y lda [dirptr_addr], y
sta @AVR_PARAM sta @AVR_PARAM
sep #$20 : .as sep #$20 : .as
lda #$01 lda #$01
@ -559,14 +549,14 @@ select_dir:
; y = direntry ptr ; y = direntry ptr
txy txy
dey dey
lda (dirptr_addr), y lda [dirptr_addr], y
clc clc
adc #$c0 adc #$c0
sta @dirent_bank sta @dirent_bank
dey dey
dey dey
rep #$20 : .al rep #$20 : .al
lda (dirptr_addr), y lda [dirptr_addr], y
sta @dirent_addr sta @dirent_addr
tax tax
sep #$20 : .as sep #$20 : .as