Skip to content

Commit c00d67e

Browse files
committed
Fixed bug, improved second controller handling, added splash screen
1 parent 59d24a1 commit c00d67e

File tree

8 files changed

+201
-63
lines changed

8 files changed

+201
-63
lines changed

src/BRBmenu.asm

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ cm_brb_table:
1010
; 1000h bytes transferred
1111
incbin ../resources/cm_brb_gfx.bin
1212

13+
%endfree(8E)
14+
15+
16+
%startfree(A1)
1317

1418
; --------
1519
; BRB Menu
@@ -182,9 +186,15 @@ cm_brb_loop:
182186
cm_draw_brb:
183187
{
184188
JSL cm_tilemap_bg_interior_long
189+
LDA !ram_sram_detection : BNE .splash_screen
185190
JSR cm_tilemap_brb
186191
JSL cm_tilemap_transfer_long
187192
JMP cm_brb_scroll_BG3
193+
194+
.splash_screen
195+
JSR cm_tilemap_splash_screen
196+
JSL cm_tilemap_transfer_long
197+
RTS
188198
}
189199

190200
cm_tilemap_brb:
@@ -287,6 +297,36 @@ cm_tilemap_brb:
287297
RTS
288298
}
289299

300+
cm_tilemap_splash_screen:
301+
{
302+
; Same bank for all of the BRB text
303+
PHK : PHK : PLA : STA !DP_CurrentMenu+2
304+
305+
LDA !ram_sram_detection
306+
CMP !SRAM_DETECTION_32KB : BEQ .legacy
307+
CMP !SRAM_DETECTION_128KB : BEQ .tinystates
308+
CMP !SRAM_DETECTION_ZSNES : BEQ .zsnes
309+
BRK
310+
311+
.legacy
312+
LDA.w #BRB_legacy : STA !DP_CurrentMenu
313+
LDX #$0286
314+
JSR cm_draw_brb_text
315+
RTS
316+
317+
.tinystates
318+
LDA.w #BRB_tinystates : STA !DP_CurrentMenu
319+
LDX #$0286
320+
JSR cm_draw_brb_text
321+
RTS
322+
323+
.zsnes
324+
LDA.w #BRB_zsnes : STA !DP_CurrentMenu
325+
LDX #$0286
326+
JSR cm_draw_brb_text
327+
RTS
328+
}
329+
290330
brb_handle_countup_timer:
291331
{
292332
LDA !ram_cm_brb_frames : INC : STA !ram_cm_brb_frames
@@ -470,6 +510,15 @@ table ../resources/header.tbl
470510

471511
BRB_common_2:
472512
db #$28, " Will Be Right Back", #$FF
513+
514+
BRB_legacy:
515+
db #$28, " SNES CLASSIC OR VC", #$FF
516+
517+
BRB_tinystates:
518+
db #$28, " SELECT MODERN EMULATORS", #$FF
519+
520+
BRB_zsnes:
521+
db #$28, " DO NOT USE ZSNES", #$FF
473522
table ../resources/normal.tbl
474523

475524
BRBTilemapAddress:
@@ -532,5 +581,5 @@ BRB_screen_07:
532581
BRB_screen2_07:
533582
db #$28, " crocomi.re", #$FF
534583

535-
%endfree(8E)
584+
%endfree(A1)
536585

src/defines.asm

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
; The crash buffer and initial address can be moved around as needed
77
; It is currently placed in the back half of the backup of BG2 tilemap during x-ray,
88
; which means it is unlikely to overwrite anything relevant for debugging
9-
!CRASHDUMP_TILEMAP_BUFFER = !ram_tilemap_buffer ; 2048 bytes
9+
!CRASHDUMP_TILEMAP_BUFFER = $7E5800 ; 2048 bytes
1010
!CRASH_INITIAL_ADDRESS = #$7E0A44
1111

1212
; Practice hack menu tilemap buffer
@@ -271,9 +271,7 @@
271271
!ram_cm_sfxlib2 = !WRAM_MENU_START+$58
272272
!ram_cm_sfxlib3 = !WRAM_MENU_START+$5A
273273

274-
if !FEATURE_SD2SNES
275-
!ram_sram_savestates = !WRAM_MENU_START+$5C
276-
endif
274+
!ram_sram_detection = !WRAM_MENU_START+$5C
277275

278276
!ram_timers_autoupdate = !WRAM_MENU_START+$5E
279277
!ram_cm_gmode = !WRAM_MENU_START+$60
@@ -354,6 +352,7 @@ endif
354352
!ram_cm_ctrl_assign = !WRAM_MENU_START+$96
355353
!ram_cm_ctrl_swap = !WRAM_MENU_START+$98
356354
!ram_cm_ctrl_timer = !WRAM_MENU_START+$9A
355+
!ram_cm_ctrl_savestates_allowed = !WRAM_MENU_START+$9C
357356

358357
!ram_cm_crop_mode = !WRAM_MENU_START+$90
359358
!ram_cm_crop_tile = !WRAM_MENU_START+$92
@@ -1145,6 +1144,11 @@ endif
11451144
!CTRL_SHORTCUT_TYPE_MASK = #$007F
11461145
!CTRL_SHORTCUT_EXACT_MATCH = #$0080
11471146

1147+
; By default, value is zero and we assume there are no issues
1148+
!SRAM_DETECTION_32KB = #$0032
1149+
!SRAM_DETECTION_128KB = #$0128
1150+
!SRAM_DETECTION_ZSNES = #$0505
1151+
11481152
!SUIT_PROPERTIES_MASK = #$0007
11491153
!SUIT_PROPRETIES_PAL_DEBUG_FLAG = #$0008
11501154

src/gamemode.asm

Lines changed: 68 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,7 @@ endif
549549
BPL .initialFirstCheckInputs
550550
CMP #$01 : BEQ .initialFirstCheckInputs
551551
if !FEATURE_SD2SNES
552-
LDA !ram_sram_savestates : BNE .initialFirstCheckInputs
552+
LDA !ram_sram_detection : BEQ .initialFirstCheckInputs
553553
endif
554554
.initialFirstInvalid
555555
TDC : STA !CTRL_SHORTCUT_TABLE,X
@@ -593,7 +593,7 @@ endif
593593
BPL .initialSecondCheckInputs
594594
CMP #$01 : BEQ .initialSecondCheckInputs
595595
if !FEATURE_SD2SNES
596-
LDA !ram_sram_savestates : BNE .initialSecondCheckInputs
596+
LDA !ram_sram_detection : BEQ .initialSecondCheckInputs
597597
endif
598598
.initialSecondInvalid
599599
TDC : STA !CTRL_SHORTCUT_TABLE,X
@@ -825,7 +825,7 @@ endif
825825
LDA #$F0 : STA !CTRL_SHORTCUT_ROUTINE,X : INX
826826

827827
; Determine how much to branch by
828-
PHX : LDA !CTRL_SHORTCUT_TYPE : AND.b !CTRL_SHORTCUT_TYPE_MASK : TAX
828+
PHX : TDC : LDA !CTRL_SHORTCUT_TYPE : AND.b !CTRL_SHORTCUT_TYPE_MASK : TAX
829829
LDA.l ctrl_shortcut_jsl_word_lsb_table,X : STA !CTRL_SHORTCUT_JSL_WORD_LSB
830830
LDA.l ctrl_shortcut_jsl_word_msb_table,X : STA !CTRL_SHORTCUT_JSL_WORD_MSB
831831
LDA.l ctrl_shortcut_cancel_gameplay_table,X : BNE .priWriteMatchClc
@@ -888,7 +888,7 @@ endif
888888
LDA #$F0 : STA !CTRL_SHORTCUT_ROUTINE,X : INX
889889

890890
; Determine how much to branch by
891-
PHX : LDA !CTRL_SHORTCUT_TYPE : AND.b !CTRL_SHORTCUT_TYPE_MASK : TAX
891+
PHX : TDC : LDA !CTRL_SHORTCUT_TYPE : AND.b !CTRL_SHORTCUT_TYPE_MASK : TAX
892892
LDA.l ctrl_shortcut_jsl_word_lsb_table,X : STA !CTRL_SHORTCUT_JSL_WORD_LSB
893893
LDA.l ctrl_shortcut_jsl_word_msb_table,X : STA !CTRL_SHORTCUT_JSL_WORD_MSB
894894
LDA.l ctrl_shortcut_cancel_gameplay_table,X : BNE .priWriteSpecialClc
@@ -1065,7 +1065,7 @@ endif
10651065
LDA #$F0 : STA !CTRL_SHORTCUT_ROUTINE,X : INX
10661066

10671067
; Determine how much to branch by
1068-
PHX : LDA !CTRL_SHORTCUT_TYPE : AND.b !CTRL_SHORTCUT_TYPE_MASK : TAX
1068+
PHX : TDC : LDA !CTRL_SHORTCUT_TYPE : AND.b !CTRL_SHORTCUT_TYPE_MASK : TAX
10691069
LDA.l ctrl_shortcut_jsl_word_lsb_table,X : STA !CTRL_SHORTCUT_JSL_WORD_LSB
10701070
LDA.l ctrl_shortcut_jsl_word_msb_table,X : STA !CTRL_SHORTCUT_JSL_WORD_MSB
10711071
LDA.l ctrl_shortcut_cancel_gameplay_table,X : BNE .secWriteMatchClc
@@ -1128,7 +1128,7 @@ endif
11281128
LDA #$F0 : STA !CTRL_SHORTCUT_ROUTINE,X : INX
11291129

11301130
; Determine how much to branch by
1131-
PHX : LDA !CTRL_SHORTCUT_TYPE : AND.b !CTRL_SHORTCUT_TYPE_MASK : TAX
1131+
PHX : TDC : LDA !CTRL_SHORTCUT_TYPE : AND.b !CTRL_SHORTCUT_TYPE_MASK : TAX
11321132
LDA.l ctrl_shortcut_jsl_word_lsb_table,X : STA !CTRL_SHORTCUT_JSL_WORD_LSB
11331133
LDA.l ctrl_shortcut_jsl_word_msb_table,X : STA !CTRL_SHORTCUT_JSL_WORD_MSB
11341134
LDA.l ctrl_shortcut_cancel_gameplay_table,X : BNE .secWriteSpecialClc
@@ -1261,7 +1261,7 @@ endif
12611261
LDA #$F0 : STA !CTRL_SHORTCUT_ROUTINE,X : INX
12621262

12631263
; Determine how much to branch by
1264-
PHX : LDA !CTRL_SHORTCUT_TYPE : AND.b !CTRL_SHORTCUT_TYPE_MASK : TAX
1264+
PHX : TDC : LDA !CTRL_SHORTCUT_TYPE : AND.b !CTRL_SHORTCUT_TYPE_MASK : TAX
12651265
LDA.l ctrl_shortcut_jsl_word_lsb_table,X : STA !CTRL_SHORTCUT_JSL_WORD_LSB
12661266
LDA.l ctrl_shortcut_jsl_word_msb_table,X : STA !CTRL_SHORTCUT_JSL_WORD_MSB
12671267
LDA.l ctrl_shortcut_cancel_gameplay_table,X : BNE .dualWriteMatchClc
@@ -1396,35 +1396,75 @@ cm_condense_ctrl_shortcuts:
13961396
RTL
13971397
}
13981398

1399-
if !FEATURE_SD2SNES
1400-
validate_sram_for_savestates:
1399+
validate_sram:
14011400
{
1401+
; check if this is ZSNES
1402+
PHP : SEP #$28
1403+
LDA #$FF : CLC : ADC #$FF
1404+
CMP #$64 : CLD : BNE .doneZSNES
1405+
PLP
1406+
LDA !SRAM_DETECTION_ZSNES : STA !ram_sram_detection
1407+
JMP .fail
1408+
1409+
.doneZSNES
1410+
PLP
1411+
1412+
if !FEATURE_SD2SNES
14021413
; check if required SRAM range is valid
14031414
; writes to SRAM will mirror in other banks if not valid
1404-
if !FEATURE_TINYSTATES
1415+
LDA $707FFE : PHA
14051416
LDA $737FFE : INC : STA $707FFE
1406-
CMP $737FFE : BNE .success
1407-
else
1408-
LDA $777FFE : INC : STA $707FFE
1409-
CMP $777FFE : BNE .success
1410-
endif
1417+
CMP $737FFE : BNE .first128CheckPass
14111418

14121419
; double check
1413-
if !FEATURE_TINYSTATES
1420+
LDA $702FFE : PHA
14141421
LDA $732FFE : INC : STA $702FFE
1415-
CMP $732FFE : BEQ .fail
1422+
CMP $732FFE : BNE .second128CheckPass
1423+
1424+
; 128kb check failed
1425+
PLA : STA $702FFE
1426+
PLA : STA $707FFE
1427+
LDA !SRAM_DETECTION_32KB : STA !ram_sram_detection
1428+
BRA .fail
1429+
1430+
.second128CheckPass
1431+
PLA : STA $702FFE
1432+
.first128CheckPass
1433+
PLA : STA $707FFE
1434+
1435+
if !FEATURE_TINYSTATES
14161436
else
1417-
LDA $772FFE : INC : STA $702FFE
1418-
CMP $772FFE : BEQ .fail
1437+
LDA $737FFE : PHA
1438+
LDA $777FFE : INC : STA $737FFE
1439+
CMP $777FFE : BNE .first256CheckPass
1440+
1441+
; double check
1442+
LDA $732FFE : PHA
1443+
LDA $772FFE : INC : STA $732FFE
1444+
CMP $772FFE : BNE .second256CheckPass
1445+
1446+
; 256kb check failed
1447+
PLA : STA $732FFE
1448+
PLA : STA $737FFE
1449+
LDA !SRAM_DETECTION_128KB : STA !ram_sram_detection
1450+
BRA .fail
1451+
1452+
.second256CheckPass
1453+
PLA : STA $732FFE
1454+
.first256CheckPass
1455+
PLA : STA $737FFE
1456+
endif
14191457
endif
14201458

1421-
.success
1422-
LDA #$0001 : STA !ram_sram_savestates
1459+
; success
1460+
TDC : STA !ram_sram_detection
14231461
RTL
14241462

14251463
.fail
1464+
LDA !sram_cutscenes : ORA !CUTSCENE_QUICKBOOT : STA !sram_cutscenes
1465+
if !FEATURE_SD2SNES
14261466
; disable savestate controls
1427-
TDC : TAX : STA !ram_sram_savestates
1467+
TDC : TAX
14281468
%a8()
14291469
.firstLoop
14301470
LDA !sram_ctrl_shortcut_selections,X : ASL
@@ -1440,9 +1480,9 @@ endif
14401480
INX : CPX #$0030 : BMI .secondLoop
14411481
.found
14421482
%a16()
1483+
endif
14431484
RTL
14441485
}
1445-
endif
14461486

14471487

14481488
; ------------------
@@ -1662,19 +1702,19 @@ ctrl_select_shortcut_goto_page3:
16621702
if !FEATURE_SD2SNES
16631703
ctrl_add_save_state_dynamic:
16641704
dw !ACTION_DYNAMIC
1665-
dl #!ram_sram_savestates
1705+
dl #!ram_cm_ctrl_savestates_allowed
16661706
dw #$0000
16671707
dw #ctrl_add_save_state
16681708

16691709
ctrl_add_load_state_dynamic:
16701710
dw !ACTION_DYNAMIC
1671-
dl #!ram_sram_savestates
1711+
dl #!ram_cm_ctrl_savestates_allowed
16721712
dw #$0000
16731713
dw #ctrl_add_load_state
16741714

16751715
ctrl_add_auto_save_state_dynamic:
16761716
dw !ACTION_DYNAMIC
1677-
dl #!ram_sram_savestates
1717+
dl #!ram_cm_ctrl_savestates_allowed
16781718
dw #$0000
16791719
dw #ctrl_add_auto_save_state
16801720
endif
@@ -1986,8 +2026,8 @@ endif
19862026

19872027
ctrl_add_shortcut_select:
19882028
{
1989-
LDA !ram_cm_ctrl_add_shortcut_slot : TAX
1990-
CMP #$001E : BPL .additional
2029+
LDA !ram_cm_ctrl_add_shortcut_slot
2030+
TAX : CPX #$001E : BPL .additional
19912031
TYA : %a8() : STA !sram_ctrl_shortcut_selections,X
19922032
INX : CPX #$001E : BPL .secondLoop
19932033
.firstLoop

src/init.asm

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ init_sram_controller_shortcuts:
237237
; Main Menu
238238
LDA #$81 : LDX #$0000 : STA !sram_ctrl_shortcut_selections,X
239239
if !FEATURE_SD2SNES
240-
LDA !ram_sram_savestates : BEQ .skipTypes
240+
LDA !ram_sram_detection : BNE .skipTypes
241241
; Save State
242242
LDA #$82 : INX : STA !sram_ctrl_shortcut_selections,X
243243
; Load State
@@ -246,6 +246,8 @@ if !FEATURE_SD2SNES
246246
endif
247247
; Reload Preset
248248
LDA #$86 : INX : STA !sram_ctrl_shortcut_selections,X
249+
; Main Menu
250+
LDA #$81 : INX : STA !sram_ctrl_shortcut_selections,X
249251
; Pause
250252
LDA #$95 : INX : STA !sram_ctrl_shortcut_selections,X
251253
; Unpause
@@ -276,7 +278,7 @@ endif
276278
; Main Menu (Controller 1, Start + Select)
277279
LDA #$3000 : LDX #$0000 : STA !sram_ctrl_1_shortcut_inputs,X
278280
if !FEATURE_SD2SNES
279-
LDA !ram_sram_savestates : BEQ .skipValues
281+
LDA !ram_sram_detection : BNE .skipValues
280282
; Save State (Controller 1, Select + Y + R)
281283
LDA #$6010 : INX #2 : STA !sram_ctrl_1_shortcut_inputs,X
282284
; Load State (Controller 1, Select + Y + L)
@@ -285,6 +287,8 @@ if !FEATURE_SD2SNES
285287
endif
286288
; Reload Preset (Controller 1, Start + Y + L)
287289
LDA #$5020 : INX #2 : STA !sram_ctrl_1_shortcut_inputs,X
290+
; Main Menu (Controller 2, Start + Select)
291+
LDA #$3000 : INX #2 : STA !sram_ctrl_2_shortcut_inputs,X
288292
; Pause (Controller 2, Right)
289293
LDA #$0100 : INX #2 : STA !sram_ctrl_2_shortcut_inputs,X
290294
; Unpause (Controller 2, Left)

src/macros.asm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ endmacro
523523

524524
macro SDE_dec(label, address)
525525
; increments or decrements an address based on controller input, used in cm_edit_decimal_digits
526-
LDA !IH_CONTROLLER_PRI : BIT !IH_INPUT_UP : BNE .<label>_inc
526+
LDA !IH_CONTROLLER_PRI : ORA !IH_CONTROLLER_SEC : BIT !IH_INPUT_UP : BNE .<label>_inc
527527
; dec
528528
LDA <address> : DEC : BPL .store_<label>
529529
LDA #$0009 : BRA .store_<label>

0 commit comments

Comments
 (0)