From 182946841df570944f925dddcfe13fec5c6d5ab3 Mon Sep 17 00:00:00 2001 From: ikari Date: Mon, 25 Apr 2011 03:39:16 +0200 Subject: [PATCH] SNES menu: tweaks, add missing source, remove "smc" target from default make targets --- snes/boot/main.a65 | 21 +++--- snes/boot/text.a65 | 2 +- snes/const.a65 | 10 ++- snes/data.a65 | 2 + snes/logospr.a65 | 128 +++++++++++++++++++++++++++++++++++++ snes/main.a65 | 2 +- snes/mainmenu.a65 | 156 ++++++++++++++++++++++++++++++++++++++++----- snes/menu.a65 | 34 +++++++++- snes/text.a65 | 8 +-- snes/time.a65 | 2 +- 10 files changed, 326 insertions(+), 39 deletions(-) create mode 100644 snes/logospr.a65 diff --git a/snes/boot/main.a65 b/snes/boot/main.a65 index fcfeeef..942e451 100644 --- a/snes/boot/main.a65 +++ b/snes/boot/main.a65 @@ -3,6 +3,7 @@ GAME_MAIN: sep #$20 : .as + sei stz $4200 ; inhibit VBlank NMI jsr killdma lda #$01 @@ -44,12 +45,6 @@ printloop lda #$00 sta @print_pal jsr loprint_wram -- lda @$4212 - and #$80 - bne - -- lda @$4212 - and #$80 - beq - rep #$20 : .al lda #!BG1_TILE_BASE sta $2116 @@ -64,6 +59,12 @@ printloop stx $4302 ldx #36*64 stx $4305 +- lda @$4212 + and #$80 + bne - +- lda @$4212 + and #$80 + beq - lda #$01 sta $420b bra printloop @@ -165,9 +166,9 @@ tests: sta $2107 ;for BG1 lda #$40 ;chr base addr: sta $210b ;BG1=0x0000, BG2=0x8000 - lda #$01 ;enable BG1 + lda #$01 ;enable BG1 sta $212c ;BG Main - lda #$01 ;enable none + lda #$01 ;enable none sta $212d ;BG Sub lda #$00 sta $2130 @@ -175,7 +176,7 @@ tests: lda #$0f sta $2100 ;screen on, full brightness rts - + snes_init: sep #$20 : .as ;8-bit accumulator rep #$10 : .xl ;16-bit index @@ -228,7 +229,7 @@ snes_init: stz $2113 ; stz $2114 ; stz $2114 ; - lda #$80 + lda #$80 sta $2115 ; stz $2116 ; stz $2117 ; diff --git a/snes/boot/text.a65 b/snes/boot/text.a65 index c9b5035..ee0411a 100644 --- a/snes/boot/text.a65 +++ b/snes/boot/text.a65 @@ -26,7 +26,7 @@ loprint: sta @$2183 ldx !print_src lda !print_bank - pha + pha plb loprint_loop_inner lda !0,x diff --git a/snes/const.a65 b/snes/const.a65 index 97e8c39..268a661 100644 --- a/snes/const.a65 +++ b/snes/const.a65 @@ -148,7 +148,11 @@ main_win_w .byt 27 main_win_h .byt 13 text_mainmenu .byt 28,"Main Menu", 29, 0 -text_mm_time .byt "Set Clock", 0 -main_entries .byt 1 -main_enttab .byt ^text_mm_time, text_mm_time, 1, ^time_init, time_init +text_mm_file .byt "File Browser", 0 +text_mm_last .byt "Run last game", 0 +text_mm_time .byt "Set Clock", 0 +text_mm_scic .byt "Enable SuperCIC", 0 +text_mm_vmode_menu .byt "Menu video mode", 0 +text_mm_vmode_game .byt "Game video mode", 0 +text_statusbar_keys .byt "B:Select A:Back X:Menu", 0 diff --git a/snes/data.a65 b/snes/data.a65 index d6b211e..5e8a47e 100644 --- a/snes/data.a65 +++ b/snes/data.a65 @@ -89,6 +89,8 @@ time_ptr .byt 0 time_tmp .byt 0 ;-- mm_tmp .byt 0 +mm_sel .byt 0 +mm_refresh .byt 0 ;----------menu layout/system constants (224/448) vidmode .byt 0 ; 0=224, 1=448 listdisp .word 0 ; number of displayable list entries diff --git a/snes/logospr.a65 b/snes/logospr.a65 new file mode 100644 index 0000000..5117dd1 --- /dev/null +++ b/snes/logospr.a65 @@ -0,0 +1,128 @@ +logospr .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $e0, $a0, $a1, $a0, $41, $80, $01, $c0 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $de, $3f, $9e, $7f, $bf, $7f, $bf, $7f + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $ff, $ff, $fe, $ff, $01, $fe, $00, $fe + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $ff, $00, $ff, $00, $ff, $00, $fe, $01 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $80, $80, $00, $80, $80, $80 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $ff, $7f, $7f, $7f, $7f, $7f, $7f, $ff + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $2f, $07, $13, $07, $11, $02, $48, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $df, $d8, $cb, $cc, $cd, $ce, $87, $86 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $ff, $ff, $ff, $ff, $00, $ff, $c5, $3b + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $ff, $00, $ff, $00, $ff, $00, $7f, $83 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $c0, $e0, $a0, $e0, $00, $00, $80, $80 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $ff, $0f, $ff, $3f, $7f, $bf, $7f, $ff + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $04, $00, $08, $00, $10, $00, $10, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $f8, $f8, $f0, $f0, $e0, $e0, $e0, $e0 + .byt $7f, $20, $7f, $20, $60, $00, $00, $20 + .byt $00, $3f, $c0, $3f, $ff, $40, $ff, $00 + .byt $3f, $20, $3f, $20, $20, $3f, $40, $7f + .byt $5f, $7f, $1f, $3f, $20, $7f, $20, $3f + .byt $c1, $01, $80, $00, $01, $01, $40, $40 + .byt $00, $c0, $40, $c0, $c0, $40, $c0, $40 + .byt $ff, $7f, $ff, $3e, $7e, $be, $3f, $bf + .byt $bf, $bf, $bf, $ff, $3f, $ff, $3f, $ff + .byt $ff, $00, $ff, $00, $01, $01, $01, $81 + .byt $80, $fc, $5c, $4c, $00, $00, $18, $00 + .byt $fe, $01, $ff, $01, $01, $ff, $00, $fe + .byt $3f, $fd, $bb, $db, $ff, $ff, $e7, $e7 + .byt $00, $00, $00, $00, $00, $00, $c0, $c0 + .byt $80, $80, $00, $00, $01, $00, $03, $00 + .byt $ff, $ff, $ff, $ff, $ff, $ff, $3f, $ff + .byt $7f, $ff, $ff, $ff, $fe, $fe, $fc, $fc + .byt $46, $00, $41, $00, $40, $00, $40, $00 + .byt $40, $00, $80, $00, $80, $00, $00, $00 + .byt $81, $81, $80, $80, $80, $80, $80, $80 + .byt $80, $80, $00, $00, $00, $00, $00, $00 + .byt $44, $44, $00, $00, $78, $00, $03, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $bb, $83, $ff, $ff, $07, $07, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $03, $00, $fc, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $ff, $ff, $ff, $ff, $fc, $fc, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $60, $00, $c0, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $80, $80, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $e0, $5f, $a0, $5f, $bf, $40, $bf, $60 + .byt $bf, $7f, $bf, $7f, $80, $40, $00, $40 + .byt $20, $7f, $20, $3f, $3f, $3f, $3f, $3f + .byt $3f, $3f, $3f, $3f, $3f, $00, $bf, $80 + .byt $00, $80, $10, $c0, $c0, $40, $e0, $40 + .byt $c0, $c0, $e0, $e0, $60, $60, $00, $40 + .byt $7f, $ff, $2f, $af, $bf, $bf, $9f, $9f + .byt $bf, $bf, $9f, $bf, $9f, $3f, $bf, $3f + .byt $13, $00, $10, $00, $10, $00, $08, $00 + .byt $08, $00, $08, $00, $08, $00, $00, $00 + .byt $e0, $e0, $e0, $e0, $e0, $e0, $f0, $f0 + .byt $f0, $f0, $f0, $f0, $f0, $f0, $f8, $f8 + .byt $fc, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $3f, $7f, $3f, $7f, $c0, $7f, $80, $3f + .byt $3f, $3f, $1f, $1f, $00, $00, $00, $00 + .byt $80, $80, $80, $80, $00, $40, $40, $40 + .byt $40, $7f, $60, $7f, $3f, $3f, $1f, $1f + .byt $80, $c0, $80, $c0, $00, $c0, $40, $c0 + .byt $80, $80, $00, $00, $00, $00, $00, $00 + .byt $3f, $3f, $3f, $3f, $3f, $3f, $3f, $7f + .byt $7f, $ff, $ff, $ff, $ff, $ff, $ff, $ff + .byt $08, $00, $08, $00, $08, $00, $00, $00 + .byt $00, $00, $00, $00, $20, $00, $40, $00 + .byt $f0, $f0, $f0, $f0, $f0, $f0, $f0, $f0 + .byt $f0, $f0, $e0, $e0, $c0, $c0, $80, $80 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $5f, $2f, $5f, $2f, $70, $2f, $40, $1f + .byt $00, $00, $00, $00, $00, $00, $00, $00 + .byt $1f, $00, $1f, $00, $1f, $00, $3f, $00 diff --git a/snes/main.a65 b/snes/main.a65 index cb81c39..a38f10b 100644 --- a/snes/main.a65 +++ b/snes/main.a65 @@ -24,7 +24,7 @@ GAME_MAIN: sep #$20 : .as lda @RTC_STATUS beq + - jsr time_init + jsl time_init + jsr menuloop cli diff --git a/snes/mainmenu.a65 b/snes/mainmenu.a65 index 1c76943..cb35d01 100644 --- a/snes/mainmenu.a65 +++ b/snes/mainmenu.a65 @@ -1,8 +1,38 @@ #include "memmap.i65" +;number of menu entries +main_entries .byt 1 +;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 + ;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 @@ -10,35 +40,26 @@ mainmenu: stx window_taddr lda @main_win_x sta window_x - inc - inc - sta bar_xl lda @main_win_y sta window_y - inc - sta bar_yl lda @main_win_w sta window_w - sec - sbc #$04 - sta bar_wl lda @main_win_h sta window_h jsr draw_window - - stz mm_tmp + jsr mm_do_refresh + stz print_pal + ldx #!main_enttab mm_entloop - lda @$912345 lda #^main_enttab phb pha plb - ldx #!main_enttab - lda !1, x - sta @print_src - lda !2, x - sta @print_src+1 lda !0, x + sta @print_src + lda !1, x + sta @print_src+1 + lda !2, x sta @print_bank lda @mm_tmp asl @@ -52,18 +73,119 @@ mm_entloop 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 - plp + 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_a jsr restore_screen + plp + rts + +mmkey_b + jsr mmkey_b_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_b_2 + jsr restore_screen + phk ; push return bank for subroutine + per mmkey_b_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_b_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 diff --git a/snes/menu.a65 b/snes/menu.a65 index ee0db9e..9e7cba7 100644 --- a/snes/menu.a65 +++ b/snes/menu.a65 @@ -44,6 +44,7 @@ menuloop_s1 bra menuloop_s1 menuloop_redraw stz menu_dirty + jsr menu_statusbar jsr menu_redraw jsr menu_cleanup ;update phase 2 bra menuloop_s1 @@ -565,7 +566,7 @@ setup_224: setup_224_adjsel sta menu_sel + - lda #19*64 + lda #18*64 sta textdmasize lda #$0007 sta hdma_scroll+8 @@ -607,7 +608,7 @@ setup_448: rep #$30 : .xl : .al lda #36 sta listdisp - lda #38*64 + lda #36*64 sta textdmasize lda #$ffc6 sta hdma_scroll+8 @@ -628,4 +629,33 @@ setup_448: plp rts +menu_statusbar + pha + phx + php + sep #$20 : .as + rep #$10 : .xl + lda #^text_statusbar_keys + sta @print_bank + rep #$20 : .al + lda #!text_statusbar_keys + sta @print_src + sep #$20 : .as + lda #$00 + sta @print_pal + lda #$02 + sta @print_x + lda #$40 + sta @print_count + lda listdisp + clc + adc #$0a + clc + adc vidmode + sta @print_y + jsr hiprint + plp + plx + pla + rts diff --git a/snes/text.a65 b/snes/text.a65 index 24af5a7..a574c53 100644 --- a/snes/text.a65 +++ b/snes/text.a65 @@ -183,11 +183,11 @@ backup_screen: rep #$30 : .xl : .al ldx #!BG1_TILE_BUF+64*9 ldy #!BG1_TILE_BAK+64*9 - lda #36*64-1 + lda @textdmasize mvn ^BG1_TILE_BUF, ^BG1_TILE_BAK ldx #!BG2_TILE_BUF+64*9 ldy #!BG2_TILE_BAK+64*9 - lda #36*64-1 + lda @textdmasize mvn ^BG2_TILE_BUF, ^BG2_TILE_BAK plp plb @@ -201,11 +201,11 @@ restore_screen: rep #$30 : .xl : .al ldx #!BG1_TILE_BAK+64*9 ldy #!BG1_TILE_BUF+64*9 - lda #36*64 + lda @textdmasize mvn ^BG1_TILE_BAK, ^BG1_TILE_BUF ldx #!BG2_TILE_BAK+64*9 ldy #!BG2_TILE_BUF+64*9 - lda #36*64 + lda @textdmasize mvn ^BG2_TILE_BAK, ^BG2_TILE_BUF plp plb diff --git a/snes/time.a65 b/snes/time.a65 index b90c84e..669253b 100644 --- a/snes/time.a65 +++ b/snes/time.a65 @@ -128,7 +128,7 @@ timeloop1 ; restore text area jsr restore_screen plp - rts + rtl tkey_b inc time_exit