sd2snes/snes/mainmenu.a65
2012-01-14 02:23:43 +01:00

197 lines
2.9 KiB
Plaintext

#include "memmap.i65"
;number of menu entries
main_entries .byt 2
;menu entry data
main_enttab ;Set Clock
.word !text_mm_time
.byt ^text_mm_time
.word !time_init-1
.byt ^time_init
.byt 1, 0
;System Information
.word !text_mm_sysinfo
.byt ^text_mm_sysinfo
.word !show_sysinfo-1
.byt ^show_sysinfo
;SuperCIC
.word !text_mm_scic
.byt ^text_mm_scic
.word !time_init
.byt ^time_init
.byt 1, 0
;Menu vmode
.word !text_mm_vmode_menu
.byt ^text_mm_vmode_menu
.word !time_init
.byt ^time_init
.byt 1, 0
;Game vmode
.word !text_mm_vmode_game
.byt ^text_mm_vmode_game
.word !time_init
.byt ^time_init
.byt 1, 0
mainmenu:
php
sep #$20 : .as
stz mm_sel
mm_redraw
stz mm_tmp
jsr backup_screen
lda #^text_mainmenu
sta window_tbank
ldx #!text_mainmenu
stx window_taddr
lda @main_win_x
sta window_x
lda @main_win_y
sta window_y
lda @main_win_w
sta window_w
lda @main_win_h
sta window_h
jsr draw_window
jsr mm_do_refresh
stz print_pal
ldx #!main_enttab
mm_entloop
lda #^main_enttab
phb
pha
plb
lda !0, x
sta @print_src
lda !1, x
sta @print_src+1
lda !2, x
sta @print_bank
lda @mm_tmp
asl
clc
adc @main_win_y
inc
inc
sta @print_y
lda @main_win_x
inc
inc
sta @print_x
plb
phx
jsr hiprint
plx
inx
inx
inx
inx
inx
inx
inx
inx
inc mm_tmp
lda mm_tmp
cmp @main_entries
bne mm_entloop
stz mm_tmp
stz mm_refresh
mm_menuloop
lda isr_done
lsr
bcc mm_menuloop
jsr printtime
stz isr_done
lda mm_refresh
beq +
jsr mm_do_refresh
stz mm_refresh
+
jsr read_pad
lda #$80
and pad1trig
bne mmkey_a
lda #$04
and pad1trig+1
bne mmkey_down
lda #$08
and pad1trig+1
bne mmkey_up
lda #$80
and pad1trig+1
bne mmkey_b
bra mm_menuloop
mmkey_b
jsr restore_screen
plp
rts
mmkey_a
jsr mmkey_a_2
jmp mm_redraw
mmkey_down
jsr mmkey_down_2
bra mm_menuloop
mmkey_up
jsr mmkey_up_2
bra mm_menuloop
mmkey_down_2
lda @main_entries
dec
cmp mm_sel
beq +
inc mm_sel
inc mm_refresh
+
rts
mmkey_up_2
lda mm_sel
beq +
dec mm_sel
dec bar_yl
dec bar_yl
+
rts
mmkey_a_2
jsr restore_screen
phk ; push return bank for subroutine
per mmkey_a_2_return-1 ; push return addr for subroutine
xba
lda #$00
xba
lda mm_sel
asl
asl
asl
tax
lda @main_enttab+5, x
pha ; push subroutine bank
rep #$20 : .al
lda @main_enttab+3, x
pha ; push subroutine addr
sep #$20 : .as
rtl ; jump to subroutine
mmkey_a_2_return
rts
mm_do_refresh
lda mm_sel
asl
clc
adc @main_win_y
inc
sta bar_yl
lda @main_win_x
inc
inc
sta bar_xl
lda @main_win_w
sec
sbc #$04
sta bar_wl
rts