@@ -216,7 +216,7 @@ static const struct mapper_NES PROGMEM mapsize[] = {
216216 { 175 , 4 , 4 , 5 , 5 , 0 , 0 }, // Kaiser KS-122 (15-in-1)
217217 { 176 , 4 , 4 , 5 , 5 , 0 , 0 }, // YH-xxx / SFC-12B / many others...
218218 { 177 , 1 , 7 , 0 , 0 , 0 , 0 }, // 恒格电子 [Hénggé Diànzǐ]
219- { 178 , 5 , 5 , 0 , 0 , 0 , 0 }, // 外星 [Wàixīng] FS305 / 南晶 [Nánjīng] NJ0430 / PB030703-1x1
219+ { 178 , 5 , 6 , 0 , 0 , 0 , 0 }, // 外星 [Wàixīng] FS305 / 南晶 [Nánjīng] NJ0430 / PB030703-1x1
220220 // 179 - duplicate of 176
221221 { 180 , 3 , 3 , 0 , 0 , 0 , 0 }, // Inverse UNROM (Crazy Climber)
222222 // 181 - duplicate of 185
@@ -313,6 +313,7 @@ static const struct mapper_NES PROGMEM mapsize[] = {
313313 { 289 , 5 , 7 , 0 , 0 , 0 , 0 }, // 60311C / N76A-1
314314 { 290 , 0 , 5 , 0 , 4 , 0 , 0 }, // Asder 20-in-1
315315 // 313 - undumpable (reset-based TKROM multicarts)
316+ { 314 , 6 , 7 , 0 , 7 , 0 , 0 }, // bmc-64in1norepeat
316317 { 315 , 0 , 5 , 0 , 7 , 0 , 0 }, // 820732C / 830134C
317318 { 319 , 3 , 3 , 4 , 4 , 0 , 0 }, // HP-898F / KD-7/9-E
318319 { 329 , 1 , 7 , 0 , 0 , 0 , 3 }, // EDU2000 (duplicate of 177)
@@ -2997,9 +2998,11 @@ void readPRG(bool readrom) {
29972998 write_prg_byte (0x4800 , 0 ); // NROM-256 mode
29982999 write_prg_byte (0x4803 , 0 ); // set PRG-RAM
29993000 for (size_t i = 0 ; i < banks; i += 2 ) {
3000- write_prg_byte (0x4802 , i >> 3 ); // high PRG (up to 8 bits?!)
3001- write_prg_byte (0x4801 , i & 0x07 ); // low PRG (3 bits)
3002- dumpBankPRG (0x0 , 0x8000 , base);
3001+ for (word address = 0x0 ; address < 0x8000 ; address += 512 ) {
3002+ write_prg_byte (0x4802 , i >> 3 ); // high PRG (up to 8 bits?!)
3003+ write_prg_byte (0x4801 , i & 0x07 ); // low PRG (3 bits)
3004+ dumpPRG (base, address);
3005+ }
30033006 }
30043007 break ;
30053008
@@ -3298,6 +3301,15 @@ void readPRG(bool readrom) {
32983301 }
32993302 break ;
33003303
3304+ case 314 : // 1024K/2048K
3305+ banks = int_pow (2 , prgsize) / 2 ;
3306+ for (size_t i = 0 ; i < banks; i++) {
3307+ write_prg_pulsem2 (0x5000 , 0x80 ); // NROM
3308+ write_prg_pulsem2 (0x5001 , ((i & 0x3F ) | 0x80 )); // prg 32k bank (M==1 (NROM-256))
3309+ dumpBankPRG (0x0 , 0x8000 , base);
3310+ }
3311+ break ;
3312+
33013313 case 319 : // 128K
33023314 banks = int_pow (2 , prgsize) / 2 ;
33033315 for (size_t i = 0 ; i < banks; i++) {
@@ -4328,6 +4340,15 @@ void readCHR(bool readrom) {
43284340 }
43294341 break ;
43304342
4343+ case 314 : // 512K
4344+ banks = int_pow (2 , chrsize) / 2 ;
4345+ for (size_t i = 0 ; i < banks; i++) {
4346+ write_prg_pulsem2 (0x5000 , ((i & 0x3 ) << 1 )); // chr 8k bank (bits 0-1)
4347+ write_prg_pulsem2 (0x5002 , i >> 2 ); // chr 8k bank (bits 2-5)
4348+ dumpBankCHR (0x0 , 0x2000 );
4349+ }
4350+ break ;
4351+
43314352 case 319 : // 64K
43324353 banks = int_pow (2 , chrsize) / 2 ;
43334354 for (size_t i = 0 ; i < banks; i++) {
0 commit comments