@@ -549,7 +549,7 @@ endif
549549 BPL .initialFirstCheckInputs
550550 CMP #$01 : BEQ .initialFirstCheckInputs
551551if !FEATURE_SD2SNES
552- LDA !ram_sram_savestates : BNE .initialFirstCheckInputs
552+ LDA !ram_sram_detection : BEQ .initialFirstCheckInputs
553553endif
554554 .initialFirstInvalid
555555 TDC : STA !CTRL_SHORTCUT_TABLE,X
@@ -593,7 +593,7 @@ endif
593593 BPL .initialSecondCheckInputs
594594 CMP #$01 : BEQ .initialSecondCheckInputs
595595if !FEATURE_SD2SNES
596- LDA !ram_sram_savestates : BNE .initialSecondCheckInputs
596+ LDA !ram_sram_detection : BEQ .initialSecondCheckInputs
597597endif
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
14161436else
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
14191457endif
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:
16621702if !FEATURE_SD2SNES
16631703ctrl_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
16691709ctrl_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
16751715ctrl_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
16801720endif
@@ -1986,8 +2026,8 @@ endif
19862026
19872027ctrl_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
0 commit comments