mirror of
https://github.com/sanni/cartreader.git
synced 2024-11-30 08:24:14 +01:00
support mapper > 255, implement mapper 446 submapper 0&1 - thanks to NewRisingSun for support, fix iNES2.0 mapper parsing of byte 8
This commit is contained in:
parent
1aaa90af97
commit
73700e2886
@ -24,146 +24,157 @@
|
|||||||
//4384 Eeprom Functions
|
//4384 Eeprom Functions
|
||||||
//4574 NESmaker Flash Cart Functions
|
//4574 NESmaker Flash Cart Functions
|
||||||
|
|
||||||
|
struct mapper_NES {
|
||||||
|
uint16_t mapper;
|
||||||
|
uint8_t prglo;
|
||||||
|
uint8_t prghi;
|
||||||
|
uint8_t chrlo;
|
||||||
|
uint8_t chrhi;
|
||||||
|
uint8_t ramlo;
|
||||||
|
uint8_t ramhi;
|
||||||
|
};
|
||||||
|
|
||||||
/******************************************
|
/******************************************
|
||||||
Supported Mappers
|
Supported Mappers
|
||||||
*****************************************/
|
*****************************************/
|
||||||
// Supported Mapper Array (iNES Mapper #s)
|
// Supported Mapper Array (iNES Mapper #s)
|
||||||
// Format = {mapper,prglo,prghi,chrlo,chrhi,ramlo,ramhi}
|
// Format = {mapper,prglo,prghi,chrlo,chrhi,ramlo,ramhi}
|
||||||
static const uint8_t PROGMEM mapsize[] = {
|
static const struct mapper_NES PROGMEM mapsize[] = {
|
||||||
0, 0, 1, 0, 1, 0, 2, // nrom [sram r/w]
|
{ 0, 0, 1, 0, 1, 0, 2 }, // nrom [sram r/w]
|
||||||
1, 1, 5, 0, 5, 0, 3, // mmc1 [sram r/w]
|
{ 1, 1, 5, 0, 5, 0, 3 }, // mmc1 [sram r/w]
|
||||||
2, 2, 4, 0, 0, 0, 0, // uxrom
|
{ 2, 2, 4, 0, 0, 0, 0 }, // uxrom
|
||||||
3, 0, 1, 0, 3, 0, 0, // cnrom
|
{ 3, 0, 1, 0, 3, 0, 0 }, // cnrom
|
||||||
4, 1, 5, 0, 6, 0, 1, // mmc3/mmc6 [sram/prgram r/w]
|
{ 4, 1, 5, 0, 6, 0, 1 }, // mmc3/mmc6 [sram/prgram r/w]
|
||||||
5, 3, 5, 5, 7, 0, 3, // mmc5 [sram r/w]
|
{ 5, 3, 5, 5, 7, 0, 3 }, // mmc5 [sram r/w]
|
||||||
7, 2, 4, 0, 0, 0, 0, // axrom
|
{ 7, 2, 4, 0, 0, 0, 0 }, // axrom
|
||||||
9, 3, 3, 5, 5, 0, 0, // mmc2 (punch out)
|
{ 9, 3, 3, 5, 5, 0, 0 }, // mmc2 (punch out)
|
||||||
10, 3, 4, 4, 5, 1, 1, // mmc4 [sram r/w]
|
{ 10, 3, 4, 4, 5, 1, 1 }, // mmc4 [sram r/w]
|
||||||
11, 1, 3, 1, 5, 0, 0, // Color Dreams [UNLICENSED]
|
{ 11, 1, 3, 1, 5, 0, 0 }, // Color Dreams [UNLICENSED]
|
||||||
13, 1, 1, 0, 0, 0, 0, // cprom (videomation)
|
{ 13, 1, 1, 0, 0, 0, 0 }, // cprom (videomation)
|
||||||
15, 6, 6, 0, 0, 0, 0, // K-1029/K-1030P [UNLICENSED]
|
{ 15, 6, 6, 0, 0, 0, 0 }, // K-1029/K-1030P [UNLICENSED]
|
||||||
16, 3, 4, 5, 6, 0, 1, // bandai x24c02 [eep r/w]
|
{ 16, 3, 4, 5, 6, 0, 1 }, // bandai x24c02 [eep r/w]
|
||||||
18, 3, 4, 5, 6, 0, 1, // jaleco ss8806 [sram r/w]
|
{ 18, 3, 4, 5, 6, 0, 1 }, // jaleco ss8806 [sram r/w]
|
||||||
19, 3, 4, 5, 6, 0, 1, // namco 106/163 [sram/prgram r/w]
|
{ 19, 3, 4, 5, 6, 0, 1 }, // namco 106/163 [sram/prgram r/w]
|
||||||
// 20 - bad mapper, not used
|
// 20 - bad mapper, not used
|
||||||
21, 4, 4, 5, 6, 0, 1, // vrc4a/vrc4c [sram r/w]
|
{ 21, 4, 4, 5, 6, 0, 1 }, // vrc4a/vrc4c [sram r/w]
|
||||||
22, 3, 3, 5, 5, 0, 0, // vrc2a
|
{ 22, 3, 3, 5, 5, 0, 0 }, // vrc2a
|
||||||
23, 3, 3, 5, 6, 0, 0, // vrc2b/vrc4e
|
{ 23, 3, 3, 5, 6, 0, 0 }, // vrc2b/vrc4e
|
||||||
24, 4, 4, 5, 5, 0, 0, // vrc6a (akumajou densetsu)
|
{ 24, 4, 4, 5, 5, 0, 0 }, // vrc6a (akumajou densetsu)
|
||||||
25, 3, 4, 5, 6, 0, 1, // vrc2c/vrc4b/vrc4d [sram r/w]
|
{ 25, 3, 4, 5, 6, 0, 1 }, // vrc2c/vrc4b/vrc4d [sram r/w]
|
||||||
26, 4, 4, 5, 6, 1, 1, // vrc6b [sram r/w]
|
{ 26, 4, 4, 5, 6, 1, 1 }, // vrc6b [sram r/w]
|
||||||
28, 5, 7, 0, 0, 0, 0, // Action 53 [UNLICENSED]
|
{ 28, 5, 7, 0, 0, 0, 0 }, // Action 53 [UNLICENSED]
|
||||||
30, 4, 5, 0, 0, 0, 0, // unrom 512 (NESmaker) [UNLICENSED]
|
{ 30, 4, 5, 0, 0, 0, 0 }, // unrom 512 (NESmaker) [UNLICENSED]
|
||||||
31, 6, 6, 0, 0, 0, 0, // NSF music compilations [UNLICENSED]
|
{ 31, 6, 6, 0, 0, 0, 0 }, // NSF music compilations [UNLICENSED]
|
||||||
32, 3, 4, 5, 5, 0, 0, // irem g-101
|
{ 32, 3, 4, 5, 5, 0, 0 }, // irem g-101
|
||||||
33, 3, 4, 5, 6, 0, 0, // taito tc0190
|
{ 33, 3, 4, 5, 6, 0, 0 }, // taito tc0190
|
||||||
34, 1, 8, 0, 4, 0, 0, // BxROM & NINA
|
{ 34, 1, 8, 0, 4, 0, 0 }, // BxROM & NINA
|
||||||
35, 0, 7, 1, 8, 0, 0, // J.Y. Company ASIC [UNLICENSED]
|
{ 35, 0, 7, 1, 8, 0, 0 }, // J.Y. Company ASIC [UNLICENSED]
|
||||||
36, 0, 3, 1, 5, 0, 0, // TXC 01-22000-400 Board [UNLICENSED]
|
{ 36, 0, 3, 1, 5, 0, 0 }, // TXC 01-22000-400 Board [UNLICENSED]
|
||||||
37, 4, 4, 6, 6, 0, 0, // (super mario bros + tetris + world cup)
|
{ 37, 4, 4, 6, 6, 0, 0 }, // (super mario bros + tetris + world cup)
|
||||||
38, 1, 3, 0, 3, 0, 0, // Crime Busters [UNLICENSED]
|
{ 38, 1, 3, 0, 3, 0, 0 }, // Crime Busters [UNLICENSED]
|
||||||
42, 0, 3, 0, 5, 0, 0, // hacked FDS games converted to cartridge [UNLICENSED]
|
{ 42, 0, 3, 0, 5, 0, 0 }, // hacked FDS games converted to cartridge [UNLICENSED]
|
||||||
45, 3, 6, 0, 8, 0, 0, // ga23c asic multicart [UNLICENSED]
|
{ 45, 3, 6, 0, 8, 0, 0 }, // ga23c asic multicart [UNLICENSED]
|
||||||
46, 1, 6, 0, 8, 0, 0, // Rumble Station [UNLICENSED]
|
{ 46, 1, 6, 0, 8, 0, 0 }, // Rumble Station [UNLICENSED]
|
||||||
47, 4, 4, 6, 6, 0, 0, // (super spike vball + world cup)
|
{ 47, 4, 4, 6, 6, 0, 0 }, // (super spike vball + world cup)
|
||||||
48, 3, 4, 6, 6, 0, 0, // taito tc0690
|
{ 48, 3, 4, 6, 6, 0, 0 }, // taito tc0690
|
||||||
52, 0, 3, 0, 3, 0, 0, // Realtec 8213 [UNLICENSED]
|
{ 52, 0, 3, 0, 3, 0, 0 }, // Realtec 8213 [UNLICENSED]
|
||||||
56, 0, 7, 0, 6, 0, 0, // KS202 [UNLICENSED]
|
{ 56, 0, 7, 0, 6, 0, 0 }, // KS202 [UNLICENSED]
|
||||||
57, 0, 3, 0, 5, 0, 0, // BMC-GKA [UNLICENSED]
|
{ 57, 0, 3, 0, 5, 0, 0 }, // BMC-GKA [UNLICENSED]
|
||||||
58, 1, 6, 1, 6, 0, 0, // BMC-GKB (C)NROM-based multicarts, duplicate of mapper 213 [UNLICENSED]
|
{ 58, 1, 6, 1, 6, 0, 0 }, // BMC-GKB (C)NROM-based multicarts, duplicate of mapper 213 [UNLICENSED]
|
||||||
59, 0, 3, 0, 4, 0, 0, // BMC-T3H53 & BMC-D1038 [UNLICENSED]
|
{ 59, 0, 3, 0, 4, 0, 0 }, // BMC-T3H53 & BMC-D1038 [UNLICENSED]
|
||||||
60, 2, 2, 3, 3, 0, 0, // Reset-based NROM-128 4-in-1 multicarts [UNLICENSED]
|
{ 60, 2, 2, 3, 3, 0, 0 }, // Reset-based NROM-128 4-in-1 multicarts [UNLICENSED]
|
||||||
62, 7, 7, 8, 8, 0, 0, // K-1017P [UNLICENSED]
|
{ 62, 7, 7, 8, 8, 0, 0 }, // K-1017P [UNLICENSED]
|
||||||
63, 8, 8, 0, 0, 0, 0, // NTDEC "Powerful" multicart, 3072K [UNLICENSED]
|
{ 63, 8, 8, 0, 0, 0, 0 }, // NTDEC "Powerful" multicart, 3072K [UNLICENSED]
|
||||||
64, 2, 3, 4, 5, 0, 0, // tengen rambo-1 [UNLICENSED]
|
{ 64, 2, 3, 4, 5, 0, 0 }, // tengen rambo-1 [UNLICENSED]
|
||||||
65, 3, 4, 5, 6, 0, 0, // irem h-3001
|
{ 65, 3, 4, 5, 6, 0, 0 }, // irem h-3001
|
||||||
66, 2, 3, 2, 3, 0, 0, // gxrom/mhrom
|
{ 66, 2, 3, 2, 3, 0, 0 }, // gxrom/mhrom
|
||||||
67, 3, 3, 5, 5, 0, 0, // sunsoft 3
|
{ 67, 3, 3, 5, 5, 0, 0 }, // sunsoft 3
|
||||||
68, 3, 3, 5, 6, 0, 1, // sunsoft 4 [sram r/w]
|
{ 68, 3, 3, 5, 6, 0, 1 }, // sunsoft 4 [sram r/w]
|
||||||
69, 3, 4, 5, 6, 0, 1, // sunsoft fme-7/5a/5b [sram r/w]
|
{ 69, 3, 4, 5, 6, 0, 1 }, // sunsoft fme-7/5a/5b [sram r/w]
|
||||||
70, 3, 3, 5, 5, 0, 0, // bandai
|
{ 70, 3, 3, 5, 5, 0, 0 }, // bandai
|
||||||
71, 2, 4, 0, 0, 0, 0, // camerica/codemasters [UNLICENSED]
|
{ 71, 2, 4, 0, 0, 0, 0 }, // camerica/codemasters [UNLICENSED]
|
||||||
72, 3, 3, 5, 5, 0, 0, // jaleco jf-17
|
{ 72, 3, 3, 5, 5, 0, 0 }, // jaleco jf-17
|
||||||
73, 3, 3, 0, 0, 0, 0, // vrc3 (salamander)
|
{ 73, 3, 3, 0, 0, 0, 0 }, // vrc3 (salamander)
|
||||||
75, 3, 3, 5, 5, 0, 0, // vrc1
|
{ 75, 3, 3, 5, 5, 0, 0 }, // vrc1
|
||||||
76, 3, 3, 5, 5, 0, 0, // namco 109 variant (megami tensei: digital devil story)
|
{ 76, 3, 3, 5, 5, 0, 0 }, // namco 109 variant (megami tensei: digital devil story)
|
||||||
77, 3, 3, 3, 3, 0, 0, // (napoleon senki)
|
{ 77, 3, 3, 3, 3, 0, 0 }, // (napoleon senki)
|
||||||
78, 3, 3, 5, 5, 0, 0, // irem 74hc161/32
|
{ 78, 3, 3, 5, 5, 0, 0 }, // irem 74hc161/32
|
||||||
79, 1, 2, 2, 3, 0, 0, // NINA-03/06 by AVE [UNLICENSED]
|
{ 79, 1, 2, 2, 3, 0, 0 }, // NINA-03/06 by AVE [UNLICENSED]
|
||||||
80, 3, 3, 5, 6, 0, 1, // taito x1-005 [prgram r/w]
|
{ 80, 3, 3, 5, 6, 0, 1 }, // taito x1-005 [prgram r/w]
|
||||||
82, 3, 3, 5, 6, 0, 1, // taito x1-017 [prgram r/w]
|
{ 82, 3, 3, 5, 6, 0, 1 }, // taito x1-017 [prgram r/w]
|
||||||
// 84 - bad mapper, not used
|
// 84 - bad mapper, not used
|
||||||
85, 3, 5, 0, 5, 0, 1, // vrc7 [sram r/w]
|
{ 85, 3, 5, 0, 5, 0, 1 }, // vrc7 [sram r/w]
|
||||||
86, 3, 3, 4, 4, 0, 0, // jaleco jf-13 (moero pro yakyuu)
|
{ 86, 3, 3, 4, 4, 0, 0 }, // jaleco jf-13 (moero pro yakyuu)
|
||||||
87, 0, 1, 2, 3, 0, 0, // Jaleco/Konami CNROM (DIS_74X139X74)
|
{ 87, 0, 1, 2, 3, 0, 0 }, // Jaleco/Konami CNROM (DIS_74X139X74)
|
||||||
88, 3, 3, 5, 5, 0, 0, // namco (dxrom variant)
|
{ 88, 3, 3, 5, 5, 0, 0 }, // namco (dxrom variant)
|
||||||
89, 3, 3, 5, 5, 0, 0, // sunsoft 2 variant (tenka no goikenban: mito koumon)
|
{ 89, 3, 3, 5, 5, 0, 0 }, // sunsoft 2 variant (tenka no goikenban: mito koumon)
|
||||||
90, 0, 7, 1, 8, 0, 0, // J.Y. Company ASIC [UNLICENSED]
|
{ 90, 0, 7, 1, 8, 0, 0 }, // J.Y. Company ASIC [UNLICENSED]
|
||||||
91, 3, 5, 7, 8, 0, 0, // JY830623C/YY840238C boards [UNLICENSED]
|
{ 91, 3, 5, 7, 8, 0, 0 }, // JY830623C/YY840238C boards [UNLICENSED]
|
||||||
92, 4, 4, 5, 5, 0, 0, // jaleco jf-19/jf-21
|
{ 92, 4, 4, 5, 5, 0, 0 }, // jaleco jf-19/jf-21
|
||||||
93, 3, 3, 0, 0, 0, 0, // sunsoft 2
|
{ 93, 3, 3, 0, 0, 0, 0 }, // sunsoft 2
|
||||||
94, 3, 3, 0, 0, 0, 0, // hvc-un1rom (senjou no ookami)
|
{ 94, 3, 3, 0, 0, 0, 0 }, // hvc-un1rom (senjou no ookami)
|
||||||
95, 3, 3, 3, 3, 0, 0, // namcot-3425 (dragon buster)
|
{ 95, 3, 3, 3, 3, 0, 0 }, // namcot-3425 (dragon buster)
|
||||||
96, 3, 3, 0, 0, 0, 0, // (oeka kids)
|
{ 96, 3, 3, 0, 0, 0, 0 }, // (oeka kids)
|
||||||
97, 4, 4, 0, 0, 0, 0, // irem tam-s1 (kaiketsu yanchamaru)
|
{ 97, 4, 4, 0, 0, 0, 0 }, // irem tam-s1 (kaiketsu yanchamaru)
|
||||||
// 100 - bad mapper, not used
|
// 100 - bad mapper, not used
|
||||||
// 101 - bad mapper, not used
|
// 101 - bad mapper, not used
|
||||||
105, 4, 4, 0, 0, 0, 0, // (nintendo world Championships 1990) [UNTESTED]
|
{ 105, 4, 4, 0, 0, 0, 0 }, // (nintendo world Championships 1990) [UNTESTED]
|
||||||
111, 5, 5, 0, 0, 0, 0, // GTROM [UNLICENSED]
|
{ 111, 5, 5, 0, 0, 0, 0 }, // GTROM [UNLICENSED]
|
||||||
113, 1, 4, 0, 5, 0, 0, // NINA-03/06 [UNLICENSED]
|
{ 113, 1, 4, 0, 5, 0, 0 }, // NINA-03/06 [UNLICENSED]
|
||||||
114, 3, 4, 5, 6, 0, 0, // SuperGame MMC3-clone [UNLICENSED]
|
{ 114, 3, 4, 5, 6, 0, 0 }, // SuperGame MMC3-clone [UNLICENSED]
|
||||||
118, 3, 4, 5, 5, 0, 1, // txsrom/mmc3 [sram r/w]
|
{ 118, 3, 4, 5, 5, 0, 1 }, // txsrom/mmc3 [sram r/w]
|
||||||
119, 3, 3, 4, 4, 0, 0, // tqrom/mmc3
|
{ 119, 3, 3, 4, 4, 0, 0 }, // tqrom/mmc3
|
||||||
126, 1, 8, 0, 8, 0, 0, // MMC3-based multicart (PJ-008, AT-207) [UNLICENSED]
|
{ 126, 1, 8, 0, 8, 0, 0 }, // MMC3-based multicart (PJ-008, AT-207) [UNLICENSED]
|
||||||
134, 1, 8, 0, 8, 0, 0, // T4A54A, WX-KB4K, or BS-5652 [UNLICENSED]
|
{ 134, 1, 8, 0, 8, 0, 0 }, // T4A54A, WX-KB4K, or BS-5652 [UNLICENSED]
|
||||||
140, 3, 3, 3, 5, 0, 0, // jaleco jf-11/jf-14
|
{ 140, 3, 3, 3, 5, 0, 0 }, // jaleco jf-11/jf-14
|
||||||
142, 1, 3, 0, 0, 0, 0, // UNL-KS7032 [UNLICENSED]
|
{ 142, 1, 3, 0, 0, 0, 0 }, // UNL-KS7032 [UNLICENSED]
|
||||||
146, 1, 2, 2, 3, 0, 0, // Sachen 3015 [UNLICENSED]
|
{ 146, 1, 2, 2, 3, 0, 0 }, // Sachen 3015 [UNLICENSED]
|
||||||
148, 1, 2, 0, 4, 0, 0, // Sachen SA-0037 & Tengen 800008 [UNLICENSED]
|
{ 148, 1, 2, 0, 4, 0, 0 }, // Sachen SA-0037 & Tengen 800008 [UNLICENSED]
|
||||||
// 151 - bad mapper, not used
|
// 151 - bad mapper, not used
|
||||||
152, 2, 3, 5, 5, 0, 0, // BANDAI-74*161/161/32
|
{ 152, 2, 3, 5, 5, 0, 0 }, // BANDAI-74*161/161/32
|
||||||
153, 5, 5, 0, 0, 1, 1, // (famicom jump ii) [sram r/w]
|
{ 153, 5, 5, 0, 0, 1, 1 }, // (famicom jump ii) [sram r/w]
|
||||||
154, 3, 3, 5, 5, 0, 0, // namcot-3453 (devil man)
|
{ 154, 3, 3, 5, 5, 0, 0 }, // namcot-3453 (devil man)
|
||||||
155, 3, 3, 3, 5, 0, 1, // mmc1 variant [sram r/w]
|
{ 155, 3, 3, 3, 5, 0, 1 }, // mmc1 variant [sram r/w]
|
||||||
157, 4, 4, 0, 0, 0, 0, // Datach
|
{ 157, 4, 4, 0, 0, 0, 0 }, // Datach
|
||||||
158, 3, 3, 5, 5, 0, 0, // tengen rambo-1 variant (alien syndrome (u)) [UNLICENSED]
|
{ 158, 3, 3, 5, 5, 0, 0 }, // tengen rambo-1 variant (alien syndrome (u)) [UNLICENSED]
|
||||||
159, 3, 4, 5, 6, 1, 1, // bandai x24c01 [eep r/w]
|
{ 159, 3, 4, 5, 6, 1, 1 }, // bandai x24c01 [eep r/w]
|
||||||
162, 6, 7, 0, 0, 0, 0, // Waixing FS304 [UNLICENSED]
|
{ 162, 6, 7, 0, 0, 0, 0 }, // Waixing FS304 [UNLICENSED]
|
||||||
163, 6, 7, 0, 0, 0, 0, // Nanjing FC-001 [UNLICENSED]
|
{ 163, 6, 7, 0, 0, 0, 0 }, // Nanjing FC-001 [UNLICENSED]
|
||||||
174, 3, 3, 4, 4, 0, 0, // NTDEC 5-in-1 [UNLICENSED]
|
{ 174, 3, 3, 4, 4, 0, 0 }, // NTDEC 5-in-1 [UNLICENSED]
|
||||||
176, 4, 4, 5, 5, 0, 0, // 8025 enhanced MMC3 [UNLICENSED]
|
{ 176, 4, 4, 5, 5, 0, 0 }, // 8025 enhanced MMC3 [UNLICENSED]
|
||||||
177, 1, 7, 0, 0, 0, 0, // Henggedianzi Super Rich PCB [UNLICENSED]
|
{ 177, 1, 7, 0, 0, 0, 0 }, // Henggedianzi Super Rich PCB [UNLICENSED]
|
||||||
178, 5, 5, 0, 0, 0, 0, // some Waixing PCBs [UNLICENSED]
|
{ 178, 5, 5, 0, 0, 0, 0 }, // some Waixing PCBs [UNLICENSED]
|
||||||
180, 3, 3, 0, 0, 0, 0, // unrom variant (crazy climber)
|
{ 180, 3, 3, 0, 0, 0, 0 }, // unrom variant (crazy climber)
|
||||||
184, 1, 1, 2, 3, 0, 0, // sunsoft 1
|
{ 184, 1, 1, 2, 3, 0, 0 }, // sunsoft 1
|
||||||
185, 0, 1, 1, 1, 0, 0, // cnrom lockout
|
{ 185, 0, 1, 1, 1, 0, 0 }, // cnrom lockout
|
||||||
// 186 - bad mapper, not used
|
// 186 - bad mapper, not used
|
||||||
200, 1, 4, 1, 4, 0, 0, // HN-02 multicarts [UNLICENSED]
|
{ 200, 1, 4, 1, 4, 0, 0 }, // HN-02 multicarts [UNLICENSED]
|
||||||
201, 1, 8, 1, 9, 0, 0, // NROM-256 multicarts [UNLICENSED]
|
{ 201, 1, 8, 1, 9, 0, 0 }, // NROM-256 multicarts [UNLICENSED]
|
||||||
202, 0, 3, 1, 4, 0, 0, // BMC-150IN1 multicarts [UNLICENSED]
|
{ 202, 0, 3, 1, 4, 0, 0 }, // BMC-150IN1 multicarts [UNLICENSED]
|
||||||
203, 1, 4, 1, 4, 0, 0, // various NROM-128 multicarts [UNLICENSED]
|
{ 203, 1, 4, 1, 4, 0, 0 }, // various NROM-128 multicarts [UNLICENSED]
|
||||||
206, 1, 3, 2, 4, 0, 0, // dxrom
|
{ 206, 1, 3, 2, 4, 0, 0 }, // dxrom
|
||||||
207, 4, 4, 5, 5, 0, 0, // taito x1-005 variant (fudou myouou den)
|
{ 207, 4, 4, 5, 5, 0, 0 }, // taito x1-005 variant (fudou myouou den)
|
||||||
209, 0, 7, 1, 8, 0, 0, // J.Y. Company ASIC [UNLICENSED]
|
{ 209, 0, 7, 1, 8, 0, 0 }, // J.Y. Company ASIC [UNLICENSED]
|
||||||
210, 3, 5, 5, 6, 0, 0, // namco 175/340
|
{ 210, 3, 5, 5, 6, 0, 0 }, // namco 175/340
|
||||||
211, 0, 7, 1, 8, 0, 0, // J.Y. Company ASIC [UNLICENSED]
|
{ 211, 0, 7, 1, 8, 0, 0 }, // J.Y. Company ASIC [UNLICENSED]
|
||||||
212, 0, 3, 0, 4, 0, 0, // BMC Super HiK 300-in-1 [UNLICENSED]
|
{ 212, 0, 3, 0, 4, 0, 0 }, // BMC Super HiK 300-in-1 [UNLICENSED]
|
||||||
213, 1, 6, 1, 6, 0, 0, // BMC-GKB (C)NROM-based multicarts, duplicate of mapper 58 [UNLICENSED]
|
{ 213, 1, 6, 1, 6, 0, 0 }, // BMC-GKB (C)NROM-based multicarts, duplicate of mapper 58 [UNLICENSED]
|
||||||
214, 0, 3, 0, 4, 0, 0, // BMC-SUPERGUN-20IN1, BMC-190IN1 [UNLICENSED]
|
{ 214, 0, 3, 0, 4, 0, 0 }, // BMC-SUPERGUN-20IN1, BMC-190IN1 [UNLICENSED]
|
||||||
225, 4, 7, 5, 8, 0, 0, // ET-4310 (FC) + K-1010 (NES) [UNLICENSED]
|
{ 225, 4, 7, 5, 8, 0, 0 }, // ET-4310 (FC) + K-1010 (NES) [UNLICENSED]
|
||||||
226, 6, 7, 0, 0, 0, 0, // BMC-76IN1, BMC-SUPER42IN1, BMC-GHOSTBUSTERS63IN1 [UNLICENSED]
|
{ 226, 6, 7, 0, 0, 0, 0 }, // BMC-76IN1, BMC-SUPER42IN1, BMC-GHOSTBUSTERS63IN1 [UNLICENSED]
|
||||||
227, 1, 5, 0, 0, 0, 0, // 810449-C-A1 / FW-01 [UNLICENSED]
|
{ 227, 1, 5, 0, 0, 0, 0 }, // 810449-C-A1 / FW-01 [UNLICENSED]
|
||||||
228, 4, 7, 5, 7, 0, 0, // Action 52 + Cheetahmen II [UNLICENSED]
|
{ 228, 4, 7, 5, 7, 0, 0 }, // Action 52 + Cheetahmen II [UNLICENSED]
|
||||||
229, 5, 5, 6, 6, 0, 0, // BMC 31-IN-1 [UNLICENSED]
|
{ 229, 5, 5, 6, 6, 0, 0 }, // BMC 31-IN-1 [UNLICENSED]
|
||||||
232, 4, 4, 0, 0, 0, 0, // Camerica/Codemasters "Quattro" cartridges [UNLICENSED]
|
{ 232, 4, 4, 0, 0, 0, 0 }, // Camerica/Codemasters "Quattro" cartridges [UNLICENSED]
|
||||||
235, 6, 8, 0, 0, 0, 0, // "Golden Game" multicarts [UNLICENSED]
|
{ 235, 6, 8, 0, 0, 0, 0 }, // "Golden Game" multicarts [UNLICENSED]
|
||||||
236, 0, 6, 0, 5, 0, 0, // Realtec 8031, 8099, 8106, 8155 [UNLICENSED]
|
{ 236, 0, 6, 0, 5, 0, 0 }, // Realtec 8031, 8099, 8106, 8155 [UNLICENSED]
|
||||||
240, 1, 5, 1, 5, 0, 3, // C&E Bootleg Board (Sheng Huo Lie Zhuan, Jing Ke Xin Zhuan) [UNLICENSED]
|
{ 240, 1, 5, 1, 5, 0, 3 }, // C&E Bootleg Board (Sheng Huo Lie Zhuan, Jing Ke Xin Zhuan) [UNLICENSED]
|
||||||
241, 3, 5, 0, 0, 0, 0, // BxROM with WRAM [UNLICENSED]
|
{ 241, 3, 5, 0, 0, 0, 0 }, // BxROM with WRAM [UNLICENSED]
|
||||||
242, 5, 5, 0, 0, 0, 0, // ET-113 [UNLICENSED]
|
{ 242, 5, 5, 0, 0, 0, 0 }, // ET-113 [UNLICENSED]
|
||||||
246, 5, 5, 7, 7, 0, 0, // C&E Feng Shen Bang [UNLICENSED]
|
{ 246, 5, 5, 7, 7, 0, 0 }, // C&E Feng Shen Bang [UNLICENSED]
|
||||||
// 248 - bad mapper, not used
|
// 248 - bad mapper, not used
|
||||||
255, 4, 7, 5, 8, 0, 0, // 110-in-1 multicart (same as 225) [UNLICENSED]
|
{ 255, 4, 7, 5, 8, 0, 0 }, // 110-in-1 multicart (same as 225) [UNLICENSED]
|
||||||
|
{ 446, 0, 8, 0, 0, 0, 0 } // Mindkids SMD172B_FGPA submapper 0 & 1
|
||||||
};
|
};
|
||||||
|
|
||||||
const char _file_name_no_number_fmt[] PROGMEM = "%s.%s";
|
const char _file_name_no_number_fmt[] PROGMEM = "%s.%s";
|
||||||
@ -207,8 +218,8 @@ const char _file_name_with_number_fmt[] PROGMEM = "%s.%02d.%s";
|
|||||||
Variables
|
Variables
|
||||||
*****************************************/
|
*****************************************/
|
||||||
// Mapper
|
// Mapper
|
||||||
uint8_t mapcount = (sizeof(mapsize) / sizeof(mapsize[0])) / 7;
|
uint8_t mapcount = (sizeof(mapsize) / sizeof(mapsize[0]));
|
||||||
uint8_t mapselect;
|
uint16_t mapselect;
|
||||||
|
|
||||||
const uint16_t PRG[] PROGMEM = { 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 };
|
const uint16_t PRG[] PROGMEM = { 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 };
|
||||||
uint8_t prglo = 0; // Lowest Entry
|
uint8_t prglo = 0; // Lowest Entry
|
||||||
@ -238,7 +249,7 @@ uint8_t firstbyte;
|
|||||||
bool flashfound = false; // NESmaker 39SF040 Flash Cart
|
bool flashfound = false; // NESmaker 39SF040 Flash Cart
|
||||||
|
|
||||||
// Cartridge Config
|
// Cartridge Config
|
||||||
uint8_t mapper;
|
uint16_t mapper;
|
||||||
uint8_t prgsize;
|
uint8_t prgsize;
|
||||||
uint8_t chrsize;
|
uint8_t chrsize;
|
||||||
uint8_t ramsize;
|
uint8_t ramsize;
|
||||||
@ -526,7 +537,7 @@ void printDataLine_NES(void* entry) {
|
|||||||
input += 2;
|
input += 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
mapper = (iNES[6] >> 4) | (iNES[7] & 0xF0) | (iNES[8] & 0x0F);
|
mapper = (iNES[6] >> 4) | (iNES[7] & 0xF0) | ((iNES[8] & 0x0F) << 8);
|
||||||
|
|
||||||
if ((iNES[9] & 0x0F) != 0x0F) {
|
if ((iNES[9] & 0x0F) != 0x0F) {
|
||||||
// simple notation
|
// simple notation
|
||||||
@ -656,9 +667,9 @@ void getMapping() {
|
|||||||
// anything else: select current record
|
// anything else: select current record
|
||||||
// Save Mapper
|
// Save Mapper
|
||||||
EEPROM_writeAnything(7, mapper);
|
EEPROM_writeAnything(7, mapper);
|
||||||
EEPROM_writeAnything(8, prgsize);
|
EEPROM_writeAnything(9, prgsize);
|
||||||
EEPROM_writeAnything(9, chrsize);
|
EEPROM_writeAnything(10, chrsize);
|
||||||
EEPROM_writeAnything(10, ramsize);
|
EEPROM_writeAnything(11, ramsize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
database.close();
|
database.close();
|
||||||
@ -1019,14 +1030,14 @@ void CreateRAMFileInSD() {
|
|||||||
#if defined(ENABLE_LCD)
|
#if defined(ENABLE_LCD)
|
||||||
void printMapperSelection_NES(int index) {
|
void printMapperSelection_NES(int index) {
|
||||||
display_Clear();
|
display_Clear();
|
||||||
mapselect = pgm_read_byte(mapsize + index * 7);
|
mapselect = pgm_read_word(mapsize + index);
|
||||||
print_Msg(F("Mapper: "));
|
print_Msg(F("Mapper: "));
|
||||||
println_Msg(mapselect);
|
println_Msg(mapselect);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void setMapper() {
|
void setMapper() {
|
||||||
uint8_t newmapper;
|
uint16_t newmapper;
|
||||||
#ifdef ENABLE_GLOBAL_LOG
|
#ifdef ENABLE_GLOBAL_LOG
|
||||||
// Disable log to prevent unnecessary logging
|
// Disable log to prevent unnecessary logging
|
||||||
println_Log(F("Set Mapper manually"));
|
println_Log(F("Set Mapper manually"));
|
||||||
@ -1156,9 +1167,8 @@ chooseMapper:
|
|||||||
|
|
||||||
// Check if valid
|
// Check if valid
|
||||||
bool validMapper = 0;
|
bool validMapper = 0;
|
||||||
uint8_t mapcount = (sizeof(mapsize) / sizeof(mapsize[0])) / 7;
|
|
||||||
for (uint8_t currMaplist = 0; currMaplist < mapcount; currMaplist++) {
|
for (uint8_t currMaplist = 0; currMaplist < mapcount; currMaplist++) {
|
||||||
if (pgm_read_byte(mapsize + currMaplist * 7) == newmapper)
|
if (pgm_read_word(mapsize + currMaplist) == newmapper)
|
||||||
validMapper = 1;
|
validMapper = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1189,8 +1199,7 @@ setmapper:
|
|||||||
bool mapfound = false;
|
bool mapfound = false;
|
||||||
Serial.println(F("SUPPORTED MAPPERS:"));
|
Serial.println(F("SUPPORTED MAPPERS:"));
|
||||||
for (size_t i = 0; i < mapcount; i++) {
|
for (size_t i = 0; i < mapcount; i++) {
|
||||||
int index = i * 7;
|
mapselect = pgm_read_word(mapsize + i);
|
||||||
mapselect = pgm_read_byte(mapsize + index);
|
|
||||||
Serial.print("[");
|
Serial.print("[");
|
||||||
Serial.print(mapselect);
|
Serial.print(mapselect);
|
||||||
Serial.print("]");
|
Serial.print("]");
|
||||||
@ -1208,8 +1217,7 @@ setmapper:
|
|||||||
Serial.println(newmap);
|
Serial.println(newmap);
|
||||||
newmapper = newmap.toInt();
|
newmapper = newmap.toInt();
|
||||||
for (uint8_t i = 0; i < mapcount; i++) {
|
for (uint8_t i = 0; i < mapcount; i++) {
|
||||||
int index = i * 7;
|
mapselect = pgm_read_word(mapsize + i);
|
||||||
mapselect = pgm_read_byte(mapsize + index);
|
|
||||||
if (newmapper == mapselect)
|
if (newmapper == mapselect)
|
||||||
mapfound = true;
|
mapfound = true;
|
||||||
}
|
}
|
||||||
@ -1231,16 +1239,16 @@ setmapper:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void checkMapperSize() {
|
void checkMapperSize() {
|
||||||
|
mapper_NES v;
|
||||||
for (uint8_t i = 0; i < mapcount; i++) {
|
for (uint8_t i = 0; i < mapcount; i++) {
|
||||||
int index = i * 7;
|
memcpy_P(&v, mapsize + i, sizeof(v));
|
||||||
uint8_t mapcheck = pgm_read_byte(mapsize + index);
|
if (mapper == v.mapper) {
|
||||||
if (mapcheck == mapper) {
|
prglo = v.prglo;
|
||||||
prglo = pgm_read_byte(mapsize + index + 1);
|
prghi = v.prghi;
|
||||||
prghi = pgm_read_byte(mapsize + index + 2);
|
chrlo = v.chrlo;
|
||||||
chrlo = pgm_read_byte(mapsize + index + 3);
|
chrhi = v.chrhi;
|
||||||
chrhi = pgm_read_byte(mapsize + index + 4);
|
ramlo = v.ramlo;
|
||||||
ramlo = pgm_read_byte(mapsize + index + 5);
|
ramhi = v.ramhi;
|
||||||
ramhi = pgm_read_byte(mapsize + index + 6);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1306,7 +1314,7 @@ setprg:
|
|||||||
Serial.print(pgm_read_word(&(PRG[newprgsize])));
|
Serial.print(pgm_read_word(&(PRG[newprgsize])));
|
||||||
Serial.println(F("K"));
|
Serial.println(F("K"));
|
||||||
#endif
|
#endif
|
||||||
EEPROM_writeAnything(8, newprgsize);
|
EEPROM_writeAnything(9, newprgsize);
|
||||||
prgsize = newprgsize;
|
prgsize = newprgsize;
|
||||||
|
|
||||||
#ifdef ENABLE_GLOBAL_LOG
|
#ifdef ENABLE_GLOBAL_LOG
|
||||||
@ -1374,7 +1382,7 @@ setchr:
|
|||||||
Serial.print(pgm_read_word(&(CHR[newchrsize])));
|
Serial.print(pgm_read_word(&(CHR[newchrsize])));
|
||||||
Serial.println(F("K"));
|
Serial.println(F("K"));
|
||||||
#endif
|
#endif
|
||||||
EEPROM_writeAnything(9, newchrsize);
|
EEPROM_writeAnything(10, newchrsize);
|
||||||
chrsize = newchrsize;
|
chrsize = newchrsize;
|
||||||
|
|
||||||
#ifdef ENABLE_GLOBAL_LOG
|
#ifdef ENABLE_GLOBAL_LOG
|
||||||
@ -1534,7 +1542,7 @@ setram:
|
|||||||
Serial.println(FS(FSTRING_EMPTY));
|
Serial.println(FS(FSTRING_EMPTY));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
EEPROM_writeAnything(10, newramsize);
|
EEPROM_writeAnything(11, newramsize);
|
||||||
ramsize = newramsize;
|
ramsize = newramsize;
|
||||||
|
|
||||||
#ifdef ENABLE_GLOBAL_LOG
|
#ifdef ENABLE_GLOBAL_LOG
|
||||||
@ -1559,9 +1567,9 @@ void checkMMC6() { // Detect MMC6 Carts - read PRG 0x3E00A ("START
|
|||||||
|
|
||||||
void checkStatus_NES() {
|
void checkStatus_NES() {
|
||||||
EEPROM_readAnything(7, mapper);
|
EEPROM_readAnything(7, mapper);
|
||||||
EEPROM_readAnything(8, prgsize);
|
EEPROM_readAnything(9, prgsize);
|
||||||
EEPROM_readAnything(9, chrsize);
|
EEPROM_readAnything(10, chrsize);
|
||||||
EEPROM_readAnything(10, ramsize);
|
EEPROM_readAnything(11, ramsize);
|
||||||
prg = (int_pow(2, prgsize)) * 16;
|
prg = (int_pow(2, prgsize)) * 16;
|
||||||
if (chrsize == 0)
|
if (chrsize == 0)
|
||||||
chr = 0; // 0K
|
chr = 0; // 0K
|
||||||
@ -2681,6 +2689,19 @@ void readPRG(bool readrom) {
|
|||||||
dumpBankPRG(0x0, 0x8000, base);
|
dumpBankPRG(0x0, 0x8000, base);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 446: {
|
||||||
|
banks = int_pow(2, prgsize) * 2;
|
||||||
|
write_prg_byte(0x5003, 0);
|
||||||
|
write_prg_byte(0x5005, 0);
|
||||||
|
for (uint8_t i = 0; i < banks; i++) { // 8192 for 64MiB
|
||||||
|
write_prg_byte(0x5002, i >> 8); // outer bank LSB
|
||||||
|
write_prg_byte(0x5001, i); // outer bank MSB
|
||||||
|
write_prg_byte(0x8000, 0);
|
||||||
|
dumpBankPRG(0x0, 0x2000, base);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!readrom) {
|
if (!readrom) {
|
||||||
myFile.flush();
|
myFile.flush();
|
||||||
@ -3951,9 +3972,9 @@ void resetEEPROM() {
|
|||||||
EEPROM_writeAnything(5, 0); // UNKNOWNCRC
|
EEPROM_writeAnything(5, 0); // UNKNOWNCRC
|
||||||
EEPROM_writeAnything(6, 1); // LED (RESET TO ON)
|
EEPROM_writeAnything(6, 1); // LED (RESET TO ON)
|
||||||
EEPROM_writeAnything(7, 0); // MAPPER
|
EEPROM_writeAnything(7, 0); // MAPPER
|
||||||
EEPROM_writeAnything(8, 0); // PRG SIZE
|
EEPROM_writeAnything(9, 0); // PRG SIZE
|
||||||
EEPROM_writeAnything(9, 0); // CHR SIZE
|
EEPROM_writeAnything(10, 0); // CHR SIZE
|
||||||
EEPROM_writeAnything(10, 0); // RAM SIZE
|
EEPROM_writeAnything(11, 0); // RAM SIZE
|
||||||
}
|
}
|
||||||
|
|
||||||
void EepromStart_NES() {
|
void EepromStart_NES() {
|
||||||
|
@ -1069,6 +1069,9 @@ B683A856,368C1B65,4E45531A081010080000000000000001
|
|||||||
Blaster Master (USA).nes
|
Blaster Master (USA).nes
|
||||||
3F0FD764,368C1B65,4E45531A081010080000000000000001
|
3F0FD764,368C1B65,4E45531A081010080000000000000001
|
||||||
|
|
||||||
|
Blazing Rangers (World) (Homebrew).nes
|
||||||
|
030D9844,C9DA7A15,4E45531A2000E0B81100000C00000001
|
||||||
|
|
||||||
Block Out (USA) (Proto).nes
|
Block Out (USA) (Proto).nes
|
||||||
CF992E34,E3183FD1,4E45531A080040080000070700000001
|
CF992E34,E3183FD1,4E45531A080040080000070700000001
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user