Merge pull request #500 from PsyK0p4T/master

"Retron 3in1" support for GG added
This commit is contained in:
sanni 2022-08-29 14:43:29 +02:00 committed by GitHub
commit 1a9e4b9795
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -3,10 +3,6 @@
//******************************************************** //********************************************************
#ifdef enable_SMS #ifdef enable_SMS
/******************************************
Variables
*****************************************/
/****************************************** /******************************************
Menu Menu
*****************************************/ *****************************************/
@ -15,7 +11,8 @@ static const char SMSAdapterItem1[] PROGMEM = "SMS/Mark 3 raphnet";
static const char SMSAdapterItem2[] PROGMEM = "SG-1000 raphnet"; static const char SMSAdapterItem2[] PROGMEM = "SG-1000 raphnet";
static const char SMSAdapterItem3[] PROGMEM = "SMS Retrode"; static const char SMSAdapterItem3[] PROGMEM = "SMS Retrode";
static const char SMSAdapterItem4[] PROGMEM = "GG Retrode"; static const char SMSAdapterItem4[] PROGMEM = "GG Retrode";
static const char* const menuAdapterSMS[] PROGMEM = {SMSAdapterItem1, SMSAdapterItem2, SMSAdapterItem3, SMSAdapterItem4}; static const char SMSAdapterItem5[] PROGMEM = "GG Retron 3in1";
static const char* const menuAdapterSMS[] PROGMEM = {SMSAdapterItem1, SMSAdapterItem2, SMSAdapterItem3, SMSAdapterItem4, SMSAdapterItem5};
// MD menu items // MD menu items
static const char SMSMenuItem1[] PROGMEM = "Read Rom"; static const char SMSMenuItem1[] PROGMEM = "Read Rom";
@ -39,6 +36,8 @@ static const char* const romOptionsSMS[] PROGMEM = {SMSRomItem1, SMSRomItem2, SM
static bool retrode_mode = false; static bool retrode_mode = false;
static bool retrode_mode_sms = false; // true: SMS/Mark3 false: GG static bool retrode_mode_sms = false; // true: SMS/Mark3 false: GG
static bool raphnet_mode_sg1000 = false; // true: SG-1000 false: SMS/Mark3 static bool raphnet_mode_sg1000 = false; // true: SG-1000 false: SMS/Mark3
static bool retron_mode = false;
void _smsMenu() { void _smsMenu() {
// create menu with title and n options to choose from // create menu with title and n options to choose from
@ -50,6 +49,11 @@ void _smsMenu() {
convertPgm(menuOptionsSMS, noptions); convertPgm(menuOptionsSMS, noptions);
mainMenu = question_box(retrode_mode ? (retrode_mode_sms ? F("Retrode:SMS") : F("Retrode:GG")) : F("SMS/GG Retrode:NO"), menuOptions, noptions, 0); mainMenu = question_box(retrode_mode ? (retrode_mode_sms ? F("Retrode:SMS") : F("Retrode:GG")) : F("SMS/GG Retrode:NO"), menuOptions, noptions, 0);
} }
else if (retron_mode) {
// Copy menuOptions out of progmem
convertPgm(menuOptionsSMS, 4);
mainMenu = question_box(F("Game Gear"), menuOptions, 4, 0);
}
else { else {
// Copy menuOptions out of progmem // Copy menuOptions out of progmem
convertPgm(menuOptionsSMS, (raphnet_mode_sg1000 ? 1 : 4)); convertPgm(menuOptionsSMS, (raphnet_mode_sg1000 ? 1 : 4));
@ -66,7 +70,7 @@ void _smsMenu() {
// Change working dir to root // Change working dir to root
sd.chdir("/"); sd.chdir("/");
readROM_SMS(); readROM_SMS();
if (retrode_mode && !retrode_mode_sms) { if ((retrode_mode && !retrode_mode_sms) || retron_mode) {
compareCRC("gg.txt", 0, 1, 0); compareCRC("gg.txt", 0, 1, 0);
} }
else { else {
@ -126,8 +130,8 @@ void smsMenu() {
// create main menu with title and 4 options to choose from // create main menu with title and 4 options to choose from
unsigned char SMSAdapterMenu; unsigned char SMSAdapterMenu;
// Copy menuOptions out of progmem // Copy menuOptions out of progmem
convertPgm(menuAdapterSMS, 4); convertPgm(menuAdapterSMS, 5);
SMSAdapterMenu = question_box(F("Select System/Adapter"), menuOptions, 4, 0); SMSAdapterMenu = question_box(F("Select System/Adapter"), menuOptions, 5, 0);
// wait for user choice to come back from the question box menu // wait for user choice to come back from the question box menu
switch (SMSAdapterMenu) switch (SMSAdapterMenu)
@ -137,6 +141,7 @@ void smsMenu() {
retrode_mode = false; retrode_mode = false;
retrode_mode_sms = false; retrode_mode_sms = false;
raphnet_mode_sg1000 = false; raphnet_mode_sg1000 = false;
retron_mode = false;
break; break;
case 1: case 1:
@ -144,6 +149,7 @@ void smsMenu() {
retrode_mode = false; retrode_mode = false;
retrode_mode_sms = false; retrode_mode_sms = false;
raphnet_mode_sg1000 = true; raphnet_mode_sg1000 = true;
retron_mode = false;
break; break;
case 2: case 2:
@ -151,6 +157,7 @@ void smsMenu() {
retrode_mode = true; retrode_mode = true;
retrode_mode_sms = true; retrode_mode_sms = true;
raphnet_mode_sg1000 = false; raphnet_mode_sg1000 = false;
retron_mode = false;
break; break;
case 3: case 3:
@ -158,7 +165,15 @@ void smsMenu() {
retrode_mode = true; retrode_mode = true;
retrode_mode_sms = false; retrode_mode_sms = false;
raphnet_mode_sg1000 = false; raphnet_mode_sg1000 = false;
retron_mode = false;
break; break;
case 4:
// retron 3in1 GG
retrode_mode = false;
retrode_mode_sms = false;
raphnet_mode_sg1000 = false;
retron_mode = true;
} }
for (;;) _smsMenu(); for (;;) _smsMenu();
} }
@ -350,7 +365,7 @@ byte readNibble(byte data, byte number) {
} }
/****************************************** /******************************************
MASTER SYSTEM functions Cartridges functions
*****************************************/ *****************************************/
void getCartInfo_SMS() { void getCartInfo_SMS() {
// Rom size // Rom size
@ -389,10 +404,10 @@ void getCartInfo_SMS() {
break; break;
default: default:
cartSize = 48 * 1024UL; cartSize = 48 * 1024UL;
// LED Error // LED Error
setColor_RGB(0, 0, 255); setColor_RGB(0, 0, 255);
break; break;
} }
// Read TMR SEGA string // Read TMR SEGA string
@ -506,7 +521,7 @@ void getCartInfo_SMS() {
// Header found // Header found
else { else {
display_Clear(); display_Clear();
if (retrode_mode && !retrode_mode_sms) { if ((retrode_mode && !retrode_mode_sms) || retron_mode) {
println_Msg(F("GG Header Info")); println_Msg(F("GG Header Info"));
} }
else { else {
@ -535,7 +550,7 @@ void getCartInfo_SMS() {
void readROM_SMS() { void readROM_SMS() {
// Get name, add extension and convert to char array for sd lib // Get name, add extension and convert to char array for sd lib
strcpy(fileName, romName); strcpy(fileName, romName);
if (retrode_mode && !retrode_mode_sms) { if ((retrode_mode && !retrode_mode_sms) || retron_mode) {
strcat(fileName, ".gg"); strcat(fileName, ".gg");
} }
else { else {
@ -544,7 +559,7 @@ void readROM_SMS() {
// create a new folder // create a new folder
EEPROM_readAnything(0, foldern); EEPROM_readAnything(0, foldern);
if (retrode_mode && !retrode_mode_sms) { if ((retrode_mode && !retrode_mode_sms) || retron_mode) {
sprintf(folder, "GG/ROM/%s/%d", romName, foldern); sprintf(folder, "GG/ROM/%s/%d", romName, foldern);
} }
else { else {
@ -568,10 +583,11 @@ void readROM_SMS() {
print_Error(F("SD Error"), true); print_Error(F("SD Error"), true);
} }
// set default bank size to 16KB
word bankSize = 16 * 1024UL; word bankSize = 16 * 1024UL;
// carts with no mapper (SG1000 or GG 32KB) // for carts not using mappers (SG1000 or SMS/GG 32KB)
if (raphnet_mode_sg1000 || (retrode_mode && !retrode_mode_sms && cartSize == 32 * 1024UL)) { if (raphnet_mode_sg1000 || (cartSize == 32 * 1024UL)) {
bankSize = cartSize; bankSize = cartSize;
} }
@ -588,11 +604,12 @@ void readROM_SMS() {
// Blink led // Blink led
blinkLED(); blinkLED();
// Read 16KB from slot 2 which starts at 0x8000 // Read 16KB from slot 2 which starts at 0x8000
for (word currBuffer = 0; currBuffer < bankSize; currBuffer += 512) { for (word currBuffer = 0; currBuffer < bankSize; currBuffer += 512) {
// Fill SD buffer // Fill SD buffer
for (int currByte = 0; currByte < 512; currByte++) { for (int currByte = 0; currByte < 512; currByte++) {
sdBuffer[currByte] = readByte_SMS((raphnet_mode_sg1000 || (retrode_mode && !retrode_mode_sms && cartSize == 32 * 1024UL) ? 0 : 0x8000) + currBuffer + currByte); sdBuffer[currByte] = readByte_SMS((raphnet_mode_sg1000 || (cartSize == 32 * 1024UL) ? 0 : 0x8000) + currBuffer + currByte);
} }
// hexdump for debugging: // hexdump for debugging:
// if (currBank == 0 && currBuffer == 0) { // if (currBank == 0 && currBuffer == 0) {
@ -628,7 +645,7 @@ void readSRAM_SMS() {
// create a new folder // create a new folder
EEPROM_readAnything(0, foldern); EEPROM_readAnything(0, foldern);
if (retrode_mode && !retrode_mode_sms) { if ((retrode_mode && !retrode_mode_sms) || retron_mode) {
sprintf(folder, "GG/SAVE/%s/%d", romName, foldern); sprintf(folder, "GG/SAVE/%s/%d", romName, foldern);
} }
else { else {