mirror of
https://github.com/sanni/cartreader.git
synced 2024-11-11 07:25:07 +01:00
V1.2: CX4 support by skaman
Thanks alot :)
This commit is contained in:
parent
38d872a7b6
commit
904e23cecd
@ -2,8 +2,8 @@
|
|||||||
Cartridge Reader for Arduino Mega2560
|
Cartridge Reader for Arduino Mega2560
|
||||||
|
|
||||||
Author: sanni
|
Author: sanni
|
||||||
Date: 11-06-2018
|
Date: 21-06-2018
|
||||||
Version: 1.1
|
Version: 1.2
|
||||||
|
|
||||||
SD lib: https://github.com/greiman/SdFat
|
SD lib: https://github.com/greiman/SdFat
|
||||||
LCD lib: https://github.com/adafruit/Adafruit_SSD1306
|
LCD lib: https://github.com/adafruit/Adafruit_SSD1306
|
||||||
@ -35,7 +35,7 @@
|
|||||||
infinest - help with GB Memory cart
|
infinest - help with GB Memory cart
|
||||||
|
|
||||||
**********************************************************************************/
|
**********************************************************************************/
|
||||||
char ver[5] = "1.1";
|
char ver[5] = "1.2";
|
||||||
|
|
||||||
/******************************************
|
/******************************************
|
||||||
Define Starting Point
|
Define Starting Point
|
||||||
|
@ -17,10 +17,12 @@
|
|||||||
// Define SNES Cart Reader Variables
|
// Define SNES Cart Reader Variables
|
||||||
int romSpeed = 0; // 0 = SlowROM, 3 = FastROM
|
int romSpeed = 0; // 0 = SlowROM, 3 = FastROM
|
||||||
int romChips = 0; // 0 = ROM only, 1 = ROM & RAM, 2 = ROM & Save RAM, 3 = ROM & DSP1, 4 = ROM & RAM & DSP1, 5 = ROM & Save RAM & DSP1, 19 = ROM & SFX
|
int romChips = 0; // 0 = ROM only, 1 = ROM & RAM, 2 = ROM & Save RAM, 3 = ROM & DSP1, 4 = ROM & RAM & DSP1, 5 = ROM & Save RAM & DSP1, 19 = ROM & SFX
|
||||||
// 227 = ROM & RAM & GameBoy data, 246 = ROM & DSP2
|
// 227 = ROM & RAM & GameBoy data, 243 = CX4, 246 = ROM & DSP2
|
||||||
byte romSizeExp = 0; // ROM-Size Exponent
|
byte romSizeExp = 0; // ROM-Size Exponent
|
||||||
int cartCountry = 255;
|
int cartCountry = 255;
|
||||||
boolean NP = false;
|
boolean NP = false;
|
||||||
|
byte cx4Type = 0;
|
||||||
|
byte cx4Map = 0;
|
||||||
|
|
||||||
/******************************************
|
/******************************************
|
||||||
Menu
|
Menu
|
||||||
@ -484,6 +486,8 @@ void getCartInfo_SNES() {
|
|||||||
}
|
}
|
||||||
else if (romChips == 227)
|
else if (romChips == 227)
|
||||||
println_Msg(F("RAM GBoy"));
|
println_Msg(F("RAM GBoy"));
|
||||||
|
else if (romChips == 243)
|
||||||
|
println_Msg(F("CX4"));
|
||||||
else if (romChips == 246)
|
else if (romChips == 246)
|
||||||
println_Msg(F("DSP2"));
|
println_Msg(F("DSP2"));
|
||||||
else if (romChips == 245)
|
else if (romChips == 245)
|
||||||
@ -607,6 +611,17 @@ boolean checkcart_SNES() {
|
|||||||
numBanks = 96;
|
numBanks = 96;
|
||||||
romType = HI;
|
romType = HI;
|
||||||
}
|
}
|
||||||
|
else if (romChips == 243) {
|
||||||
|
cx4Type = readBank_SNES(0, 65481) & 0xF;
|
||||||
|
if (cx4Type == 3) { // X3
|
||||||
|
romSize = 16;
|
||||||
|
numBanks = 64;
|
||||||
|
}
|
||||||
|
else { // X2
|
||||||
|
romSize = 12;
|
||||||
|
numBanks = 48;
|
||||||
|
}
|
||||||
|
}
|
||||||
else if ((romChips == 245) && (romType == HI)) {
|
else if ((romChips == 245) && (romType == HI)) {
|
||||||
romSize = 24;
|
romSize = 24;
|
||||||
numBanks = 48;
|
numBanks = 48;
|
||||||
@ -941,6 +956,23 @@ void readROM_SNES() {
|
|||||||
|
|
||||||
//Dump Low-type ROM
|
//Dump Low-type ROM
|
||||||
else if (romType == LO) {
|
else if (romType == LO) {
|
||||||
|
if (romChips == 243) { //0xF3
|
||||||
|
cx4Map = readBank_SNES(0, 32594); //0x7F52
|
||||||
|
if ((cx4Type == 2) && (cx4Map != 0)) { //X2
|
||||||
|
dataOut();
|
||||||
|
controlOut_SNES();
|
||||||
|
writeBank_SNES(0, 32594, 0); // Set 0x7F52 to 0
|
||||||
|
dataIn();
|
||||||
|
controlIn_SNES();
|
||||||
|
}
|
||||||
|
else if ((cx4Type == 3) && (cx4Map == 0)) { //X3
|
||||||
|
dataOut();
|
||||||
|
controlOut_SNES();
|
||||||
|
writeBank_SNES(0, 32594, 1); // Set 0x7F52 to 1
|
||||||
|
dataIn();
|
||||||
|
controlIn_SNES();
|
||||||
|
}
|
||||||
|
}
|
||||||
if (romSize > 24) {
|
if (romSize > 24) {
|
||||||
// ROM > 96 banks (up to 128 banks)
|
// ROM > 96 banks (up to 128 banks)
|
||||||
readLoRomBanks( 0x80, numBanks + 0x80, &myFile );
|
readLoRomBanks( 0x80, numBanks + 0x80, &myFile );
|
||||||
@ -948,6 +980,14 @@ void readROM_SNES() {
|
|||||||
// Read up to 96 banks starting at bank 0×00.
|
// Read up to 96 banks starting at bank 0×00.
|
||||||
readLoRomBanks( 0, numBanks, &myFile );
|
readLoRomBanks( 0, numBanks, &myFile );
|
||||||
}
|
}
|
||||||
|
if (romChips == 243) { //0xF3
|
||||||
|
// Restore CX4 Mapping Register
|
||||||
|
dataOut();
|
||||||
|
controlOut_SNES();
|
||||||
|
writeBank_SNES(0, 32594, cx4Map); // 0x7F52
|
||||||
|
dataIn();
|
||||||
|
controlIn_SNES();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dump SDD1 High-type ROM
|
// Dump SDD1 High-type ROM
|
||||||
|
Loading…
Reference in New Issue
Block a user