Skip to content
This repository was archived by the owner on Mar 16, 2026. It is now read-only.

Commit 726fa27

Browse files
authored
Merge pull request #1085 from plaidpants/master
Add support for atari2600 SUPERBank
2 parents 3169259 + b7092ea commit 726fa27

File tree

1 file changed

+29
-3
lines changed

1 file changed

+29
-3
lines changed

Cart_Reader/2600.ino

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,15 @@ static const byte PROGMEM a2600mapsize[] = {
4242
0x3E, 5, // Tigervision 32K with 32K RAM
4343
0x07, 6, // X07 64K ROM
4444
0xDF, 7, // "DFSC" Penult 128K ROM with 32K RAM
45+
0xBA, 7, // SUPERBank 128K Casey's Gold
46+
0xBB, 8, // SUPERBank 256K
4547
};
4648

4749
byte a2600mapcount = (sizeof(a2600mapsize) / sizeof(a2600mapsize[0])) / 2;
4850
byte a2600mapselect;
4951
int a2600index;
5052

51-
byte a2600[] = { 2, 4, 8, 12, 16, 32, 64, 128 };
53+
int a2600[] = { 2, 4, 8, 12, 16, 32, 64, 128, 256 };
5254
byte a2600mapper = 0;
5355
byte a2600size;
5456

@@ -528,6 +530,20 @@ void readROM_2600() {
528530
}
529531
break;
530532

533+
case 0xBA: // SUPERbank 128K
534+
for (int x = 0; x < 0x20; x++) {
535+
readData_2600(0x0800 + x);
536+
readSegment_2600(0x1000, 0x2000);
537+
}
538+
break;
539+
540+
case 0xBB: // SUPERbank 256K
541+
for (int x = 0; x < 0x40; x++) {
542+
readData_2600(0x0800 + x);
543+
readSegment_2600(0x1000, 0x2000);
544+
}
545+
break;
546+
531547
default:
532548
break;
533549
}
@@ -569,6 +585,10 @@ void println_Mapper2600(byte mapper) {
569585
println_Msg(F("X07"));
570586
else if (mapper == 0xDF)
571587
println_Msg(F("DFSC"));
588+
else if (mapper == 0xBA)
589+
println_Msg(F("SB 128K"));
590+
else if (mapper == 0xBB)
591+
println_Msg(F("SB 256K"));
572592
else
573593
println_Msg(mapper, HEX);
574594
#else
@@ -594,6 +614,10 @@ void println_Mapper2600(byte mapper) {
594614
Serial.println(F("X07"));
595615
else if (mapper == 0xDF)
596616
Serial.println(F("DFSC"));
617+
else if (mapper == 0xBA)
618+
Serial.println(F("SB 128K"));
619+
else if (mapper == 0xBB)
620+
Serial.println(F("SB 256K"));
597621
else
598622
Serial.println(mapper, HEX);
599623
#endif
@@ -602,7 +626,7 @@ void println_Mapper2600(byte mapper) {
602626
void checkStatus_2600() {
603627
EEPROM_readAnything(7, a2600mapper);
604628
EEPROM_readAnything(8, a2600size);
605-
if (a2600size > 7) {
629+
if (a2600size > 8) {
606630
a2600size = 1; // default 4KB
607631
EEPROM_writeAnything(8, a2600size);
608632
}
@@ -687,7 +711,9 @@ setmapper:
687711
Serial.println(F("18 = 3E [Tigervision 32K \w RAM]"));
688712
Serial.println(F("19 = 07 [X07 64K]"));
689713
Serial.println(F("20 = DFSC [Penult 128K]"));
690-
Serial.print(F("Enter Mapper [0-20]: "));
714+
Serial.println(F("21 = SB [SuperBank Casey's Gold 128K]"));
715+
Serial.println(F("22 = SB [SuperBank 256K]"));
716+
Serial.print(F("Enter Mapper [0-22]: "));
691717
while (Serial.available() == 0) {}
692718
newmap = Serial.readStringUntil('\n');
693719
Serial.println(newmap);

0 commit comments

Comments
 (0)