From fec9004dc176201b6f6adf4d86bd16cc51dd8416 Mon Sep 17 00:00:00 2001 From: ikari Date: Mon, 2 Jan 2012 23:33:24 +0100 Subject: [PATCH] SNES: display system information (new menu entry) --- snes/Makefile | 2 +- snes/const.a65 | 12 +++++++++--- snes/mainmenu.a65 | 7 ++++++- snes/memmap.i65 | 3 +++ snes/text.a65 | 44 ++++++++++++++++++++++++++++++++++++++------ 5 files changed, 57 insertions(+), 11 deletions(-) diff --git a/snes/Makefile b/snes/Makefile index e687c31..079b43e 100644 --- a/snes/Makefile +++ b/snes/Makefile @@ -1,4 +1,4 @@ -OBJS = header.ips reset.o65 main.o65 font.o65 palette.o65 data.o65 const.o65 logo.o65 logospr.o65 text.o65 dma.o65 menu.o65 pad.o65 time.o65 mainmenu.o65 # gfx.o65 # vars.o65 +OBJS = header.ips reset.o65 main.o65 font.o65 palette.o65 data.o65 const.o65 logo.o65 logospr.o65 text.o65 dma.o65 menu.o65 pad.o65 time.o65 mainmenu.o65 sysinfo.o65 # gfx.o65 # vars.o65 all: menu.bin diff --git a/snes/const.a65 b/snes/const.a65 index 268a661..02d27a6 100644 --- a/snes/const.a65 +++ b/snes/const.a65 @@ -136,7 +136,9 @@ window_nh .byt 24 window_sh .byt 25 window_wv .byt 26 window_ev .byt 27 -text_clkset .byt 28,"Please set the clock.", 29,0 +window_tl .byt 28 +window_tr .byt 29 +text_clkset .byt "Please set the clock.", 0 text_buttonB .byt "Dpad: sel/chg, B: OK", 0 time_win_x .byt 18 time_win_y .byt 15 @@ -146,7 +148,11 @@ main_win_x .byt 18 main_win_y .byt 11 main_win_w .byt 27 main_win_h .byt 13 -text_mainmenu .byt 28,"Main Menu", 29, 0 +text_mainmenu .byt "Main Menu", 0 +sysinfo_win_x .byt 10 +sysinfo_win_y .byt 9 +sysinfo_win_w .byt 43 +sysinfo_win_h .byt 17 text_mm_file .byt "File Browser", 0 text_mm_last .byt "Run last game", 0 @@ -154,5 +160,5 @@ 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_mm_sysinfo .byt "System Information", 0 text_statusbar_keys .byt "B:Select A:Back X:Menu", 0 diff --git a/snes/mainmenu.a65 b/snes/mainmenu.a65 index cb35d01..06f7d4e 100644 --- a/snes/mainmenu.a65 +++ b/snes/mainmenu.a65 @@ -1,6 +1,6 @@ #include "memmap.i65" ;number of menu entries -main_entries .byt 1 +main_entries .byt 2 ;menu entry data main_enttab ;Set Clock .word !text_mm_time @@ -8,6 +8,11 @@ main_enttab ;Set Clock .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 diff --git a/snes/memmap.i65 b/snes/memmap.i65 index 7784cdb..97f1497 100644 --- a/snes/memmap.i65 +++ b/snes/memmap.i65 @@ -20,5 +20,8 @@ #define AVR_CMD $307000 #define AVR_PARAM $307004 #define RTC_STATUS $307100 +#define SYSINFO_BLK $307110 #define ROOT_DIR $C10000 + +#define CMD_SYSINFO $03 diff --git a/snes/text.a65 b/snes/text.a65 index a574c53..9a95ecf 100644 --- a/snes/text.a65 +++ b/snes/text.a65 @@ -53,7 +53,9 @@ print_loop phx ; source addr print_loop_inner lda !0,x - asl + bne + + jmp print_end2 ++ asl sta @$2180 lda @print_pal asl @@ -81,6 +83,7 @@ print_loop2 lda @print_count dec sta @print_count_tmp + beq print_end2 lda #$00 pha plb @@ -100,7 +103,9 @@ print_loop2 plb print_loop2_inner lda !0,x - asl + bne + + jmp print_end ++ asl sta @$2180 lda @print_pal asl @@ -124,6 +129,10 @@ print_loop2_inner beq print_end bmi print_end bra print_loop2_inner +print_end2 ; clean up the stack (6 bytes) + ply + ply + ply print_end lda #$00 pha @@ -157,7 +166,7 @@ loprint: sta $2183 ldx !print_src lda !print_bank - pha + pha plb loprint_loop_inner lda !0,x @@ -257,16 +266,39 @@ draw_window: jsr hiprint ; print window title + lda print_x + pha inc print_x inc print_x + lda #^window_tl + sta print_bank + ldx #!window_tl + stx print_src + lda #$01 + sta print_count + jsr hiprint + inc print_x lda window_tbank sta print_bank ldx window_taddr stx print_src + lda window_w + sta print_count jsr hiprint - dec print_x - dec print_x - + lda print_done + adc print_x + sta print_x + lda #^window_tr + sta print_bank + ldx #!window_tr + stx print_src + lda #$01 + sta print_count + jsr hiprint + lda window_w + sta print_count + pla + sta print_x ; draw left+right borders + space inside window lda #^stringbuf sta print_bank