in atari_py/ale_interface/src/emucore/CartAR.cxx [204:294]
void CartridgeAR::bankConfiguration(uInt8 configuration)
{
// D7-D5 of this byte: Write Pulse Delay (n/a for emulator)
//
// D4-D0: RAM/ROM configuration:
// $F000-F7FF $F800-FFFF Address range that banks map into
// 000wp 2 ROM
// 001wp 0 ROM
// 010wp 2 0 as used in Commie Mutants and many others
// 011wp 0 2 as used in Suicide Mission
// 100wp 2 ROM
// 101wp 1 ROM
// 110wp 2 1 as used in Killer Satellites
// 111wp 1 2 as we use for 2k/4k ROM cloning
//
// w = Write Enable (1 = enabled; accesses to $F000-$F0FF cause writes
// to happen. 0 = disabled, and the cart acts like ROM.)
// p = ROM Power (0 = enabled, 1 = off.) Only power the ROM if you're
// wanting to access the ROM for multiloads. Otherwise set to 1.
myCurrentBank = configuration & 0x1f; // remember for the bank() method
// Handle ROM power configuration
myPower = !(configuration & 0x01);
if(myPower)
{
myPowerRomCycle = mySystem->cycles();
}
myWriteEnabled = configuration & 0x02;
switch((configuration >> 2) & 0x07)
{
case 0:
{
myImageOffset[0] = 2 * 2048;
myImageOffset[1] = 3 * 2048;
break;
}
case 1:
{
myImageOffset[0] = 0 * 2048;
myImageOffset[1] = 3 * 2048;
break;
}
case 2:
{
myImageOffset[0] = 2 * 2048;
myImageOffset[1] = 0 * 2048;
break;
}
case 3:
{
myImageOffset[0] = 0 * 2048;
myImageOffset[1] = 2 * 2048;
break;
}
case 4:
{
myImageOffset[0] = 2 * 2048;
myImageOffset[1] = 3 * 2048;
break;
}
case 5:
{
myImageOffset[0] = 1 * 2048;
myImageOffset[1] = 3 * 2048;
break;
}
case 6:
{
myImageOffset[0] = 2 * 2048;
myImageOffset[1] = 1 * 2048;
break;
}
case 7:
{
myImageOffset[0] = 1 * 2048;
myImageOffset[1] = 2 * 2048;
break;
}
}
}