From 33c65103d6fdce0ef0ed6d727ab9f09f1576db1c Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Tue, 11 Jun 2019 14:35:01 -0230 Subject: [PATCH] File extensions used by BS autodetect can now use longer that 3-char extensions. --- Changes.txt | 4 + docs/index.html | 34 ++-- src/emucore/Bankswitch.cxx | 327 +++++++++++++++++++------------------ 3 files changed, 193 insertions(+), 172 deletions(-) diff --git a/Changes.txt b/Changes.txt index f935fd551..7cb8cb666 100644 --- a/Changes.txt +++ b/Changes.txt @@ -97,6 +97,10 @@ down the mouse button (Time Machine, debugger step/trace/frame advance, etc.) + * Auto-detection of bankswitch scheme by file extension now includes + more human-readable formats (not restricted to DOS 3-char length). + See the documentation for the new names. + * PNG/ZIP image support is now conditionally compiled into Stella. All major ports (Linux/macOS/Windows) have it enabled by default. diff --git a/docs/index.html b/docs/index.html index 6a3542d33..8f3bc2b59 100644 --- a/docs/index.html +++ b/docs/index.html @@ -3678,47 +3678,47 @@ Ms Pac-Man (Stella extended codes): are not fully supported in the debugger: - + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/src/emucore/Bankswitch.cxx b/src/emucore/Bankswitch.cxx index 200fc1ca0..4365379ad 100644 --- a/src/emucore/Bankswitch.cxx +++ b/src/emucore/Bankswitch.cxx @@ -87,58 +87,58 @@ bool Bankswitch::isValidRomName(const string& name) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Bankswitch::Description Bankswitch::BSList[int(Bankswitch::Type::NumSchemes)] = { - { "AUTO", "Auto-detect" }, - { "0840", "0840 (8K ECONObank)" }, - { "2IN1", "2IN1 Multicart (4-32K)" }, - { "4IN1", "4IN1 Multicart (8-32K)" }, - { "8IN1", "8IN1 Multicart (16-64K)" }, - { "16IN1", "16IN1 Multicart (32-128K)" }, - { "32IN1", "32IN1 Multicart (64/128K)" }, - { "64IN1", "64IN1 Multicart (128/256K)" }, - { "128IN1", "128IN1 Multicart (256/512K)" }, - { "2K", "2K (64-2048 bytes Atari)" }, - { "3E", "3E (32K Tigervision)" }, - { "3E+", "3E+ (TJ modified DASH)" }, - { "3F", "3F (512K Tigervision)" }, - { "4A50", "4A50 (64K 4A50 + ram)" }, - { "4K", "4K (4K Atari)" }, - { "4KSC", "4KSC (CPUWIZ 4K + ram)" }, - { "AR", "AR (Supercharger)" }, - { "BF", "BF (CPUWIZ 256K)" }, - { "BFSC", "BFSC (CPUWIZ 256K + ram)" }, - { "BUS", "BUS (Experimental)" }, - { "CDF", "CDF (Chris, Darrell, Fred)" }, - { "CM", "CM (SpectraVideo CompuMate)" }, - { "CTY", "CTY (CDW - Chetiry)" }, - { "CV", "CV (Commavid extra ram)" }, - { "CV+", "CV+ (Extended Commavid)" }, - { "DASH", "DASH (Experimental)" }, - { "DF", "DF (CPUWIZ 128K)" }, - { "DFSC", "DFSC (CPUWIZ 128K + ram)" }, - { "DPC", "DPC (Pitfall II)" }, - { "DPC+", "DPC+ (Enhanced DPC)" }, - { "E0", "E0 (8K Parker Bros)" }, - { "E7", "E7 (16K M-network)" }, - { "E78K", "E78K (8K M-network)" }, - { "EF", "EF (64K H. Runner)" }, - { "EFSC", "EFSC (64K H. Runner + ram)" }, - { "F0", "F0 (Dynacom Megaboy)" }, - { "F4", "F4 (32K Atari)" }, - { "F4SC", "F4SC (32K Atari + ram)" }, - { "F6", "F6 (16K Atari)" }, - { "F6SC", "F6SC (16K Atari + ram)" }, - { "F8", "F8 (8K Atari)" }, - { "F8SC", "F8SC (8K Atari + ram)" }, - { "FA", "FA (CBS RAM Plus)" }, - { "FA2", "FA2 (CBS RAM Plus 24/28K)" }, - { "FE", "FE (8K Decathlon)" }, - { "MDM", "MDM (Menu Driven Megacart)" }, - { "SB", "SB (128-256K SUPERbank)" }, - { "UA", "UA (8K UA Ltd.)" }, - { "WD", "WD (Experimental)" }, - { "X07", "X07 (64K AtariAge)" }, + { "AUTO" , "Auto-detect" }, + { "0840" , "0840 (8K ECONObank)" }, + { "2IN1" , "2IN1 Multicart (4-32K)" }, + { "4IN1" , "4IN1 Multicart (8-32K)" }, + { "8IN1" , "8IN1 Multicart (16-64K)" }, + { "16IN1" , "16IN1 Multicart (32-128K)" }, + { "32IN1" , "32IN1 Multicart (64/128K)" }, + { "64IN1" , "64IN1 Multicart (128/256K)" }, + { "128IN1" , "128IN1 Multicart (256/512K)" }, + { "2K" , "2K (64-2048 bytes Atari)" }, + { "3E" , "3E (32K Tigervision)" }, + { "3E+" , "3E+ (TJ modified DASH)" }, + { "3F" , "3F (512K Tigervision)" }, + { "4A50" , "4A50 (64K 4A50 + ram)" }, + { "4K" , "4K (4K Atari)" }, + { "4KSC" , "4KSC (CPUWIZ 4K + ram)" }, + { "AR" , "AR (Supercharger)" }, + { "BF" , "BF (CPUWIZ 256K)" }, + { "BFSC" , "BFSC (CPUWIZ 256K + ram)" }, + { "BUS" , "BUS (Experimental)" }, + { "CDF" , "CDF (Chris, Darrell, Fred)" }, + { "CM" , "CM (SpectraVideo CompuMate)" }, + { "CTY" , "CTY (CDW - Chetiry)" }, + { "CV" , "CV (Commavid extra ram)" }, + { "CV+" , "CV+ (Extended Commavid)" }, + { "DASH" , "DASH (Experimental)" }, + { "DF" , "DF (CPUWIZ 128K)" }, + { "DFSC" , "DFSC (CPUWIZ 128K + ram)" }, + { "DPC" , "DPC (Pitfall II)" }, + { "DPC+" , "DPC+ (Enhanced DPC)" }, + { "E0" , "E0 (8K Parker Bros)" }, + { "E7" , "E7 (16K M-network)" }, + { "E78K" , "E78K (8K M-network)" }, + { "EF" , "EF (64K H. Runner)" }, + { "EFSC" , "EFSC (64K H. Runner + ram)" }, + { "F0" , "F0 (Dynacom Megaboy)" }, + { "F4" , "F4 (32K Atari)" }, + { "F4SC" , "F4SC (32K Atari + ram)" }, + { "F6" , "F6 (16K Atari)" }, + { "F6SC" , "F6SC (16K Atari + ram)" }, + { "F8" , "F8 (8K Atari)" }, + { "F8SC" , "F8SC (8K Atari + ram)" }, + { "FA" , "FA (CBS RAM Plus)" }, + { "FA2" , "FA2 (CBS RAM Plus 24/28K)" }, + { "FE" , "FE (8K Decathlon)" }, + { "MDM" , "MDM (Menu Driven Megacart)" }, + { "SB" , "SB (128-256K SUPERbank)" }, + { "UA" , "UA (8K UA Ltd.)" }, + { "WD" , "WD (Experimental)" }, + { "X07" , "X07 (64K AtariAge)" }, #if defined(CUSTOM_ARM) - { "CUSTOM", "CUSTOM (ARM)" } + { "CUSTOM" , "CUSTOM (ARM)" } #endif }; @@ -146,116 +146,133 @@ Bankswitch::Description Bankswitch::BSList[int(Bankswitch::Type::NumSchemes)] = Bankswitch::ExtensionMap Bankswitch::ourExtensions = { // Normal file extensions that don't actually tell us anything // about the bankswitch type to use - { "a26", Bankswitch::Type::_AUTO }, - { "bin", Bankswitch::Type::_AUTO }, - { "rom", Bankswitch::Type::_AUTO }, + { "a26" , Bankswitch::Type::_AUTO }, + { "bin" , Bankswitch::Type::_AUTO }, + { "rom" , Bankswitch::Type::_AUTO }, #if defined(ZIP_SUPPORT) - { "zip", Bankswitch::Type::_AUTO }, + { "zip" , Bankswitch::Type::_AUTO }, #endif - { "cu", Bankswitch::Type::_AUTO }, + { "cu" , Bankswitch::Type::_AUTO }, // All bankswitch types (those that UnoCart and HarmonyCart support have the same name) - { "084", Bankswitch::Type::_0840 }, - { "2N1", Bankswitch::Type::_2IN1 }, - { "4N1", Bankswitch::Type::_4IN1 }, - { "8N1", Bankswitch::Type::_8IN1 }, - { "16N", Bankswitch::Type::_16IN1 }, - { "32N", Bankswitch::Type::_32IN1 }, - { "64N", Bankswitch::Type::_64IN1 }, - { "128", Bankswitch::Type::_128IN1 }, - { "2K", Bankswitch::Type::_2K }, - { "3E", Bankswitch::Type::_3E }, - { "3EP", Bankswitch::Type::_3EP }, - { "3F", Bankswitch::Type::_3F }, - { "4A5", Bankswitch::Type::_4A50 }, - { "4K", Bankswitch::Type::_4K }, - { "4KS", Bankswitch::Type::_4KSC }, - { "AR", Bankswitch::Type::_AR }, - { "BF", Bankswitch::Type::_BF }, - { "BFS", Bankswitch::Type::_BFSC }, - { "BUS", Bankswitch::Type::_BUS }, - { "CDF", Bankswitch::Type::_CDF }, - { "CM", Bankswitch::Type::_CM }, - { "CTY", Bankswitch::Type::_CTY }, - { "CV", Bankswitch::Type::_CV }, - { "CVP", Bankswitch::Type::_CVP }, - { "DAS", Bankswitch::Type::_DASH }, - { "DF", Bankswitch::Type::_DF }, - { "DFS", Bankswitch::Type::_DFSC }, - { "DPC", Bankswitch::Type::_DPC }, - { "DPP", Bankswitch::Type::_DPCP }, - { "E0", Bankswitch::Type::_E0 }, - { "E7", Bankswitch::Type::_E7 }, - { "E78", Bankswitch::Type::_E78K }, - { "EF", Bankswitch::Type::_EF }, - { "EFS", Bankswitch::Type::_EFSC }, - { "F0", Bankswitch::Type::_F0 }, - { "F4", Bankswitch::Type::_F4 }, - { "F4S", Bankswitch::Type::_F4SC }, - { "F6", Bankswitch::Type::_F6 }, - { "F6S", Bankswitch::Type::_F6SC }, - { "F8", Bankswitch::Type::_F8 }, - { "F8S", Bankswitch::Type::_F8SC }, - { "FA", Bankswitch::Type::_FA }, - { "FA2", Bankswitch::Type::_FA2 }, - { "FE", Bankswitch::Type::_FE }, - { "MDM", Bankswitch::Type::_MDM }, - { "SB", Bankswitch::Type::_SB }, - { "UA", Bankswitch::Type::_UA }, - { "WD", Bankswitch::Type::_WD }, - { "X07", Bankswitch::Type::_X07 } + { "084" , Bankswitch::Type::_0840 }, + { "0840" , Bankswitch::Type::_0840 }, + { "2N1" , Bankswitch::Type::_2IN1 }, + { "4N1" , Bankswitch::Type::_4IN1 }, + { "8N1" , Bankswitch::Type::_8IN1 }, + { "16N" , Bankswitch::Type::_16IN1 }, + { "16N1" , Bankswitch::Type::_16IN1 }, + { "32N" , Bankswitch::Type::_32IN1 }, + { "32N1" , Bankswitch::Type::_32IN1 }, + { "64N" , Bankswitch::Type::_64IN1 }, + { "64N1" , Bankswitch::Type::_64IN1 }, + { "128" , Bankswitch::Type::_128IN1 }, + { "128N1" , Bankswitch::Type::_128IN1 }, + { "2K" , Bankswitch::Type::_2K }, + { "3E" , Bankswitch::Type::_3E }, + { "3EP" , Bankswitch::Type::_3EP }, + { "3E+" , Bankswitch::Type::_3EP }, + { "3F" , Bankswitch::Type::_3F }, + { "4A5" , Bankswitch::Type::_4A50 }, + { "4A50" , Bankswitch::Type::_4A50 }, + { "4K" , Bankswitch::Type::_4K }, + { "4KS" , Bankswitch::Type::_4KSC }, + { "4KSC" , Bankswitch::Type::_4KSC }, + { "AR" , Bankswitch::Type::_AR }, + { "BF" , Bankswitch::Type::_BF }, + { "BFS" , Bankswitch::Type::_BFSC }, + { "BFSC" , Bankswitch::Type::_BFSC }, + { "BUS" , Bankswitch::Type::_BUS }, + { "CDF" , Bankswitch::Type::_CDF }, + { "CM" , Bankswitch::Type::_CM }, + { "CTY" , Bankswitch::Type::_CTY }, + { "CV" , Bankswitch::Type::_CV }, + { "CVP" , Bankswitch::Type::_CVP }, + { "DAS" , Bankswitch::Type::_DASH }, + { "DASH" , Bankswitch::Type::_DASH }, + { "DF" , Bankswitch::Type::_DF }, + { "DFS" , Bankswitch::Type::_DFSC }, + { "DFSC" , Bankswitch::Type::_DFSC }, + { "DPC" , Bankswitch::Type::_DPC }, + { "DPP" , Bankswitch::Type::_DPCP }, + { "DPCP" , Bankswitch::Type::_DPCP }, + { "E0" , Bankswitch::Type::_E0 }, + { "E7" , Bankswitch::Type::_E7 }, + { "E78" , Bankswitch::Type::_E78K }, + { "E78K" , Bankswitch::Type::_E78K }, + { "EF" , Bankswitch::Type::_EF }, + { "EFS" , Bankswitch::Type::_EFSC }, + { "EFSC" , Bankswitch::Type::_EFSC }, + { "F0" , Bankswitch::Type::_F0 }, + { "F4" , Bankswitch::Type::_F4 }, + { "F4S" , Bankswitch::Type::_F4SC }, + { "F4SC" , Bankswitch::Type::_F4SC }, + { "F6" , Bankswitch::Type::_F6 }, + { "F6S" , Bankswitch::Type::_F6SC }, + { "F6SC" , Bankswitch::Type::_F6SC }, + { "F8" , Bankswitch::Type::_F8 }, + { "F8S" , Bankswitch::Type::_F8SC }, + { "F8SC" , Bankswitch::Type::_F8SC }, + { "FA" , Bankswitch::Type::_FA }, + { "FA2" , Bankswitch::Type::_FA2 }, + { "FE" , Bankswitch::Type::_FE }, + { "MDM" , Bankswitch::Type::_MDM }, + { "SB" , Bankswitch::Type::_SB }, + { "UA" , Bankswitch::Type::_UA }, + { "WD" , Bankswitch::Type::_WD }, + { "X07" , Bankswitch::Type::_X07 } }; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Bankswitch::NameToTypeMap Bankswitch::ourNameToTypes = { - { "AUTO", Bankswitch::Type::_AUTO }, - { "0840", Bankswitch::Type::_0840 }, - { "2IN1", Bankswitch::Type::_2IN1 }, - { "4IN1", Bankswitch::Type::_4IN1 }, - { "8IN1", Bankswitch::Type::_8IN1 }, - { "16IN1", Bankswitch::Type::_16IN1 }, - { "32IN1", Bankswitch::Type::_32IN1 }, - { "64IN1", Bankswitch::Type::_64IN1 }, - { "128IN1", Bankswitch::Type::_128IN1 }, - { "2K", Bankswitch::Type::_2K }, - { "3E", Bankswitch::Type::_3E }, - { "3E+", Bankswitch::Type::_3EP }, - { "3F", Bankswitch::Type::_3F }, - { "4A50", Bankswitch::Type::_4A50 }, - { "4K", Bankswitch::Type::_4K }, - { "4KSC", Bankswitch::Type::_4KSC }, - { "AR", Bankswitch::Type::_AR }, - { "BF", Bankswitch::Type::_BF }, - { "BFSC", Bankswitch::Type::_BFSC }, - { "BUS", Bankswitch::Type::_BUS }, - { "CDF", Bankswitch::Type::_CDF }, - { "CM", Bankswitch::Type::_CM }, - { "CTY", Bankswitch::Type::_CTY }, - { "CV", Bankswitch::Type::_CV }, - { "CV+", Bankswitch::Type::_CVP }, - { "DASH", Bankswitch::Type::_DASH }, - { "DF", Bankswitch::Type::_DF }, - { "DFSC", Bankswitch::Type::_DFSC }, - { "DPC", Bankswitch::Type::_DPC }, - { "DPC+", Bankswitch::Type::_DPCP }, - { "E0", Bankswitch::Type::_E0 }, - { "E7", Bankswitch::Type::_E7 }, - { "E78K", Bankswitch::Type::_E78K }, - { "EF", Bankswitch::Type::_EF }, - { "EFSC", Bankswitch::Type::_EFSC }, - { "F0", Bankswitch::Type::_F0 }, - { "F4", Bankswitch::Type::_F4 }, - { "F4SC", Bankswitch::Type::_F4SC }, - { "F6", Bankswitch::Type::_F6 }, - { "F6SC", Bankswitch::Type::_F6SC }, - { "F8", Bankswitch::Type::_F8 }, - { "F8SC", Bankswitch::Type::_F8SC }, - { "FA", Bankswitch::Type::_FA }, - { "FA2", Bankswitch::Type::_FA2 }, - { "FE", Bankswitch::Type::_FE }, - { "MDM", Bankswitch::Type::_MDM }, - { "SB", Bankswitch::Type::_SB }, - { "UA", Bankswitch::Type::_UA }, - { "WD", Bankswitch::Type::_WD }, - { "X07", Bankswitch::Type::_X07 } + { "AUTO" , Bankswitch::Type::_AUTO }, + { "0840" , Bankswitch::Type::_0840 }, + { "2IN1" , Bankswitch::Type::_2IN1 }, + { "4IN1" , Bankswitch::Type::_4IN1 }, + { "8IN1" , Bankswitch::Type::_8IN1 }, + { "16IN1" , Bankswitch::Type::_16IN1 }, + { "32IN1" , Bankswitch::Type::_32IN1 }, + { "64IN1" , Bankswitch::Type::_64IN1 }, + { "128IN1" , Bankswitch::Type::_128IN1 }, + { "2K" , Bankswitch::Type::_2K }, + { "3E" , Bankswitch::Type::_3E }, + { "3E+" , Bankswitch::Type::_3EP }, + { "3F" , Bankswitch::Type::_3F }, + { "4A50" , Bankswitch::Type::_4A50 }, + { "4K" , Bankswitch::Type::_4K }, + { "4KSC" , Bankswitch::Type::_4KSC }, + { "AR" , Bankswitch::Type::_AR }, + { "BF" , Bankswitch::Type::_BF }, + { "BFSC" , Bankswitch::Type::_BFSC }, + { "BUS" , Bankswitch::Type::_BUS }, + { "CDF" , Bankswitch::Type::_CDF }, + { "CM" , Bankswitch::Type::_CM }, + { "CTY" , Bankswitch::Type::_CTY }, + { "CV" , Bankswitch::Type::_CV }, + { "CV+" , Bankswitch::Type::_CVP }, + { "DASH" , Bankswitch::Type::_DASH }, + { "DF" , Bankswitch::Type::_DF }, + { "DFSC" , Bankswitch::Type::_DFSC }, + { "DPC" , Bankswitch::Type::_DPC }, + { "DPC+" , Bankswitch::Type::_DPCP }, + { "E0" , Bankswitch::Type::_E0 }, + { "E7" , Bankswitch::Type::_E7 }, + { "E78K" , Bankswitch::Type::_E78K }, + { "EF" , Bankswitch::Type::_EF }, + { "EFSC" , Bankswitch::Type::_EFSC }, + { "F0" , Bankswitch::Type::_F0 }, + { "F4" , Bankswitch::Type::_F4 }, + { "F4SC" , Bankswitch::Type::_F4SC }, + { "F6" , Bankswitch::Type::_F6 }, + { "F6SC" , Bankswitch::Type::_F6SC }, + { "F8" , Bankswitch::Type::_F8 }, + { "F8SC" , Bankswitch::Type::_F8SC }, + { "FA" , Bankswitch::Type::_FA }, + { "FA2" , Bankswitch::Type::_FA2 }, + { "FE" , Bankswitch::Type::_FE }, + { "MDM" , Bankswitch::Type::_MDM }, + { "SB" , Bankswitch::Type::_SB }, + { "UA" , Bankswitch::Type::_UA }, + { "WD" , Bankswitch::Type::_WD }, + { "X07" , Bankswitch::Type::_X07 } };
 Type DescriptionFile Extension
(to force type)
0840 8K ECONObanking .084
0840 8K ECONObanking .084, .0840
2IN1 ¹4-32K Multicart (2 games) .2N1
4IN1 ¹8-32K Multicart (4 games) .4N1
8IN1 ¹16-64K Multicart (8 games) .8N1
16IN1 ¹32-128K Multicart (16 games) .16N
32IN1 ¹64-128K Multicart (32 games) .32N
64IN1 ¹64/128K Multicart .64N
128IN1 ¹256/512K Multicart .128
16IN1 ¹32-128K Multicart (16 games) .16N, 16N1
32IN1 ¹64-128K Multicart (32 games) .32N, .32N1
64IN1 ¹64/128K Multicart .64N, .64N1
128IN1 ¹256/512K Multicart .128, .128N1
2K 64-2048 byte Atari .2K
3E 32K Tigervision .3E
3E+ 3E+ (TJ modified DASH) .3EP
3E+ 3E+ (TJ modified DASH) .3EP, .3E+
3F 512K Tigervision .3F
4A50 ²64K 4A50 + ram .4A5
4A50 ²64K 4A50 + ram .4A5, .4A50
4K 4K Atari .4K
4KSC CPUWIZ 4K + ram .4KS
4KSC CPUWIZ 4K + ram .4KS, .4KSC
AR Supercharger .AR
BF CPUWIZ 256K .BF
BFSC CPUWIZ 256K + ram.BFS
BFSC CPUWIZ 256K + ram.BFS, .BFSC
BUS Experimental.BUS
CDF Chris, Darrell, Fred.CDF
CM ¹Spectravideo CompuMate .CM
CTY ²CDW - Chetiry .CTY
CV Commavid extra ram .CV
CV+ Extended Commavid extra ram.CVP
DASH Boulder Dash 2 .DAS
DASH Boulder Dash 2 .DAS, .DASH
DF CPUWIZ 128K .DF
DFSC CPUWIZ 128K + ram.DFS
DFSC CPUWIZ 128K + ram.DFS, .DFSC
DPC Pitfall II .DPC
DPC+Enhanced DPC .DPP
DPC+Enhanced DPC .DPP, .DPC+
E0 8K Parker Bros .E0
E7 16K M-network .E7
E78K 8K M-network .E78
E78K 8K M-network .E78, .E78K
EF 64K Homestar Runner .EF
EFSC 64K Homestar Runner + ram.EFS
EFSC 64K Homestar Runner + ram.EFS, .EFSC
F0 Dynacom Megaboy .F0
F4 32K Atari .F4
F4SC 32K Atari + ram .F4S
F4SC 32K Atari + ram .F4S, .F4SC
F6 16K Atari .F6
F6SC 16K Atari + ram .F6S
F6SC 16K Atari + ram .F6S, .F6SC
F8 8K Atari .F8
F8SC 8K Atari + ram .F8S
F8SC 8K Atari + ram .F8S, .F8SC
FA CBS RAM Plus .FA
FA2 CBS RAM Plus 24/28K .FA2
FE 8K Decathlon .FE