@@ -206,7 +206,7 @@ static const struct mapper_NES PROGMEM mapsize[] = {
206206 { 165 , 5 , 5 , 5 , 5 , 0 , 0 }, // 圣火徽章 [Fire Emblem] Chinese version by 外星 [Wàixīng]
207207 // 166 - not used (wrong bank order, use 167 instead)
208208 // 167 - Subor educational cartridges [TODO]
209- { 168 , 2 , 2 , 0 , 0 , 0 , 0 }, // Racermate Challenge 2
209+ { 168 , 2 , 2 , 0 , 0 , 0 , 0 }, // Racermate Challenge 2
210210 // 169 - not used (duplicate of 15)
211211 // 170 - 藤屋 [Fujiya] NROM [TODO]
212212 // 171 - 步步高 [Bùbùgāo / BBK] [TODO]
@@ -259,7 +259,7 @@ static const struct mapper_NES PROGMEM mapsize[] = {
259259 // 218 - Magic Floor [TODO]
260260 // 219 - 卡聖 [Kǎshèng] A9746 [TODO]
261261 // 220 - not used (reserved for debugging)
262- // 221 - NTDEC N625092 [TODO]
262+ { 221 , 0 , 7 , 0 , 0 , 0 , 0 }, // NTDEC N625092 (400-in-1)
263263 // 222 - 810343-C [TODO]
264264 // 223 - not used (duplicate of 199)
265265 // 224 - 晶科泰 [Jncota] KT-008 (duplicate of 268)
@@ -308,7 +308,9 @@ static const struct mapper_NES PROGMEM mapsize[] = {
308308 // 267 - 晶太 EL861121C / JY-119 multicart [TODO]
309309 { 268 , 0 , 11 , 0 , 8 , 0 , 0 }, // KP6022 / AA6023 ASIC (Mindkids/Coolboy)
310310 { 286 , 0 , 3 , 0 , 5 , 0 , 0 }, // Benshieng BS-5 multicarts [TODO]
311+ { 288 , 0 , 3 , 0 , 4 , 0 , 0 }, // GKCXIN1 (21-in-1)
311312 { 289 , 5 , 7 , 0 , 0 , 0 , 0 }, // 60311C / N76A-1
313+ { 290 , 0 , 5 , 0 , 4 , 0 , 0 }, // Asder 20-in-1
312314 // 313 - undumpable (reset-based TKROM multicarts)
313315 { 315 , 0 , 5 , 0 , 7 , 0 , 0 }, // 820732C / 830134C
314316 { 319 , 3 , 3 , 4 , 4 , 0 , 0 }, // HP-898F / KD-7/9-E
@@ -2994,6 +2996,15 @@ void readPRG(bool readrom) {
29942996 }
29952997 break ;
29962998
2999+ case 221 :
3000+ banks = int_pow (2 , prgsize);
3001+ for (size_t i = 0 ; i < banks; i++) {
3002+ write_prg_byte (0x8000 + ((i << 2 ) & 0xE0 ) + ((i << 3 ) & 0x200 ), 0 );
3003+ write_prg_byte (0xC000 + (i & 7 ), 0 );
3004+ dumpBankPRG (0x0 , 0x4000 , base);
3005+ }
3006+ break ;
3007+
29973008 case 225 :
29983009 case 255 :
29993010 banks = int_pow (2 , prgsize);
@@ -3181,20 +3192,28 @@ void readPRG(bool readrom) {
31813192
31823193 case 261 :
31833194 banks = int_pow (2 , prgsize);
3184- for (size_t i = 0 ; i < banks; i += 1 ) {
3195+ for (size_t i = 0 ; i < banks; i++ ) {
31853196 write_prg_byte (0xF000 + ((i & 0x0E ) << 6 ) + ((i & 0x01 ) << 5 ), i);
31863197 dumpBankPRG (0x0 , 0x4000 , base);
31873198 }
31883199 break ;
31893200
31903201 case 286 :
31913202 banks = int_pow (2 , prgsize) * 2 ;
3192- for (size_t i = 0 ; i < banks; i += 1 ) {
3203+ for (size_t i = 0 ; i < banks; i++ ) {
31933204 write_prg_byte (0xA0F0 + i, i);
31943205 dumpBankPRG (0x0 , 0x2000 , base);
31953206 }
31963207 break ;
31973208
3209+ case 288 :
3210+ banks = int_pow (2 , prgsize) / 2 ;
3211+ for (size_t i = 0 ; i < banks; i++) {
3212+ write_prg_byte (0x8000 + ((i << 3 ) & 0x18 ), i);
3213+ dumpBankPRG (0x0 , 0x8000 , base);
3214+ }
3215+ break ;
3216+
31983217 case 289 : // 512K/1024K/2048K
31993218 banks = int_pow (2 , prgsize);
32003219 for (int i = 0 ; i < banks; i++) {
@@ -3206,6 +3225,14 @@ void readPRG(bool readrom) {
32063225 }
32073226 break ;
32083227
3228+ case 290 :
3229+ banks = int_pow (2 , prgsize);
3230+ for (size_t i = 0 ; i < banks; i++) {
3231+ write_prg_byte (0x8000 | ((i << 10 ) & 0x7800 ) | ((i << 6 ) & 0x40 ), i);
3232+ dumpBankPRG (0x0 , 0x4000 , base);
3233+ }
3234+ break ;
3235+
32093236 case 319 : // 128K
32103237 banks = int_pow (2 , prgsize) / 2 ;
32113238 for (int i = 0 ; i < banks; i++) {
@@ -4164,6 +4191,22 @@ void readCHR(bool readrom) {
41644191 }
41654192 break ;
41664193
4194+ case 288 :
4195+ banks = int_pow (2 , chrsize) / 2 ;
4196+ for (int i = 0 ; i < banks; i++) {
4197+ write_prg_byte (0x8000 + (i & 0x07 ), i);
4198+ dumpBankCHR (0x0 , 0x2000 );
4199+ }
4200+ break ;
4201+
4202+ case 290 :
4203+ banks = int_pow (2 , chrsize) / 2 ;
4204+ for (int i = 0 ; i < banks; i++) {
4205+ write_prg_byte (0x8000 | ((i << 5 ) & 0x300 ) | (i & 0x07 ), i);
4206+ dumpBankCHR (0x0 , 0x2000 );
4207+ }
4208+ break ;
4209+
41674210 case 319 : // 64K
41684211 banks = int_pow (2 , chrsize) / 2 ;
41694212 for (int i = 0 ; i < banks; i++) {
0 commit comments