Merge branch 'master' into support-casio-loopy

This commit is contained in:
Roger Braunstein 2023-06-28 13:13:26 -07:00
commit 52da1a1c36
35 changed files with 4189 additions and 1730 deletions

View File

@ -56,6 +56,9 @@ static const char arcMenuItem4[] PROGMEM = "Reset";
static const char* const menuOptionsARC[] PROGMEM = { arcMenuItem1, arcMenuItem2, arcMenuItem3, arcMenuItem4 }; static const char* const menuOptionsARC[] PROGMEM = { arcMenuItem1, arcMenuItem2, arcMenuItem3, arcMenuItem4 };
void setup_ARC() { void setup_ARC() {
// Request 5V
setVoltage(VOLTS_SET_5V);
// Set Address Pins to Output // Set Address Pins to Output
// Arcadia 2001 uses A0-A13 [A14-A23 UNUSED] // Arcadia 2001 uses A0-A13 [A14-A23 UNUSED]
//A0-A7 //A0-A7
@ -94,7 +97,6 @@ void setup_ARC() {
} }
void arcMenu() { void arcMenu() {
setVoltage(VOLTS_SET_5V);
convertPgm(menuOptionsARC, 4); convertPgm(menuOptionsARC, 4);
uint8_t mainMenu = question_box(F("ARCADIA 2001 MENU"), menuOptions, 4, 0); uint8_t mainMenu = question_box(F("ARCADIA 2001 MENU"), menuOptions, 4, 0);

View File

@ -63,6 +63,9 @@ static const char atariMenuItem4[] PROGMEM = "Reset";
static const char* const menuOptionsATARI[] PROGMEM = { atariMenuItem1, atariMenuItem2, atariMenuItem3, atariMenuItem4 }; static const char* const menuOptionsATARI[] PROGMEM = { atariMenuItem1, atariMenuItem2, atariMenuItem3, atariMenuItem4 };
void setup_ATARI() { void setup_ATARI() {
// Request 5V
setVoltage(VOLTS_SET_5V);
// Set Address Pins to Output // Set Address Pins to Output
// Atari 2600 uses A0-A12 [A13-A23 UNUSED] // Atari 2600 uses A0-A12 [A13-A23 UNUSED]
//A0-A7 //A0-A7
@ -101,7 +104,6 @@ void setup_ATARI() {
} }
void atariMenu() { void atariMenu() {
setVoltage(VOLTS_SET_5V);
convertPgm(menuOptionsATARI, 4); convertPgm(menuOptionsATARI, 4);
uint8_t mainMenu = question_box(F("ATARI 2600 MENU"), menuOptions, 4, 0); uint8_t mainMenu = question_box(F("ATARI 2600 MENU"), menuOptions, 4, 0);

View File

@ -55,6 +55,9 @@ static const char colMenuItem3[] PROGMEM = "Set Size";
static const char* const menuOptionsCOL[] PROGMEM = { colMenuItem1, colMenuItem2, colMenuItem3, string_reset2 }; static const char* const menuOptionsCOL[] PROGMEM = { colMenuItem1, colMenuItem2, colMenuItem3, string_reset2 };
void setup_COL() { void setup_COL() {
// Request 5V
setVoltage(VOLTS_SET_5V);
// Set Address Pins to Output // Set Address Pins to Output
// Colecovision uses A0-A14 [A15-A23 UNUSED] // Colecovision uses A0-A14 [A15-A23 UNUSED]
//A0-A7 //A0-A7
@ -93,7 +96,6 @@ void setup_COL() {
} }
void colMenu() { void colMenu() {
setVoltage(VOLTS_SET_5V);
convertPgm(menuOptionsCOL, 4); convertPgm(menuOptionsCOL, 4);
uint8_t mainMenu = question_box(F("COLECOVISION MENU"), menuOptions, 4, 0); uint8_t mainMenu = question_box(F("COLECOVISION MENU"), menuOptions, 4, 0);

View File

@ -4,8 +4,8 @@
This project represents a community-driven effort to provide This project represents a community-driven effort to provide
an easy to build and easy to modify cartridge dumper. an easy to build and easy to modify cartridge dumper.
Date: 2023-03-29 Date: 2023-06-26
Version: 12.5 Version: 12.6
SD lib: https://github.com/greiman/SdFat SD lib: https://github.com/greiman/SdFat
LCD lib: https://github.com/olikraus/u8g2 LCD lib: https://github.com/olikraus/u8g2
@ -15,13 +15,13 @@
RTC lib: https://github.com/adafruit/RTClib RTC lib: https://github.com/adafruit/RTClib
Frequency lib: https://github.com/PaulStoffregen/FreqCount Frequency lib: https://github.com/PaulStoffregen/FreqCount
Compiled with Arduino IDE 2.0.4 Compiled with Arduino IDE 2.1.0
Thanks to: Thanks to:
MichlK - ROM Reader for Super Nintendo MichlK - ROM Reader for Super Nintendo
Jeff Saltzman - 4-Way Button Jeff Saltzman - 4-Way Button
Wayne and Layne - Video Game Shield menu Wayne and Layne - Video Game Shield menu
skaman - Cart ROM READER SNES ENHANCED, Famicom Cart Dumper, Coleco-, Intellivision, Virtual Boy, WSV, PCW, ARC, Atari, ODY2, Fairchild modules skaman - Cart ROM READER SNES ENHANCED, Famicom Cart Dumper, Coleco-, Intellivision, Virtual Boy, WSV, PCW, ARC, Atari, ODY2, Fairchild, MSX2, Pokemon Mini modules
Tamanegi_taro - PCE and Satellaview modules Tamanegi_taro - PCE and Satellaview modules
splash5 - GBSmart, Wonderswan, NGP and Super A'can modules splash5 - GBSmart, Wonderswan, NGP and Super A'can modules
hkz & themanbehindthecurtain - N64 flashram commands hkz & themanbehindthecurtain - N64 flashram commands
@ -38,7 +38,7 @@
jiyunomegami, splash5, Kreeblah, ramapcsx2, PsyK0p4T, Dakkaron, majorpbx, Pickle, sdhizumi, jiyunomegami, splash5, Kreeblah, ramapcsx2, PsyK0p4T, Dakkaron, majorpbx, Pickle, sdhizumi,
Uzlopak, sakman55, Tombo89, scrap-a, borti4938, vogelfreiheit, CaitSith2, Modman, Uzlopak, sakman55, Tombo89, scrap-a, borti4938, vogelfreiheit, CaitSith2, Modman,
philenotfound, karimhadjsalem, nsx0r, ducky92, niklasweber, Lesserkuma, BacteriaMage, philenotfound, karimhadjsalem, nsx0r, ducky92, niklasweber, Lesserkuma, BacteriaMage,
vpelletier, Ancyker, mattiacci, RWeick vpelletier, Ancyker, mattiacci, RWeick, joshman196
And to nocash for figuring out the secrets of the SFC Nintendo Power cartridge. And to nocash for figuring out the secrets of the SFC Nintendo Power cartridge.
@ -248,6 +248,8 @@ void print_STR(byte string_number, boolean newline) {
#define mode_ARC 30 #define mode_ARC 30
#define mode_FAIRCHILD 31 #define mode_FAIRCHILD 31
#define mode_SUPRACAN 32 #define mode_SUPRACAN 32
#define mode_MSX 33
#define mode_POKE 34
// optimization-safe nop delay // optimization-safe nop delay
#define NOP __asm__ __volatile__("nop\n\t") #define NOP __asm__ __volatile__("nop\n\t")
@ -367,7 +369,6 @@ void draw_progressbar(uint32_t processedsize, uint32_t totalsize);
byte eepbit[8]; byte eepbit[8];
byte eeptemp; byte eeptemp;
#ifdef nointro
// Array to hold iNES header // Array to hold iNES header
byte iNES_HEADER[16]; byte iNES_HEADER[16];
//ID 0-3 //ID 0-3
@ -382,7 +383,6 @@ byte iNES_HEADER[16];
//TV_system 12 //TV_system 12
//VS_hardware 13 //VS_hardware 13
//reserved 14, 15 //reserved 14, 15
#endif
//****************************************** //******************************************
// CRC32 // CRC32
@ -491,7 +491,7 @@ uint32_t calculateCRC(char* fileName, char* folder, int offset) {
/****************************************** /******************************************
CRC Functions for Atari, Fairchild, Ody2, Arc modules CRC Functions for Atari, Fairchild, Ody2, Arc modules
*****************************************/ *****************************************/
#if (defined(enable_ATARI) || defined(enable_ODY2) || defined(enable_ARC) || defined(enable_FAIRCHILD)) #if (defined(enable_ATARI) || defined(enable_ODY2) || defined(enable_ARC) || defined(enable_FAIRCHILD) || defined(enable_MSX) || defined(enable_POKE))
inline uint32_t updateCRC(uint8_t ch, uint32_t crc) { inline uint32_t updateCRC(uint8_t ch, uint32_t crc) {
uint32_t idx = ((crc) ^ (ch)) & 0xff; uint32_t idx = ((crc) ^ (ch)) & 0xff;
@ -610,7 +610,6 @@ void rewind_line(FsFile& readfile, byte count = 1) {
// Calculate CRC32 if needed and compare it to CRC read from database // Calculate CRC32 if needed and compare it to CRC read from database
boolean compareCRC(const char* database, uint32_t crc32sum, boolean renamerom, int offset) { boolean compareCRC(const char* database, uint32_t crc32sum, boolean renamerom, int offset) {
#ifdef nointro
char crcStr[9]; char crcStr[9];
print_Msg(F("CRC32... ")); print_Msg(F("CRC32... "));
display_Update(); display_Update();
@ -688,7 +687,7 @@ boolean compareCRC(const char* database, uint32_t crc32sum, boolean renamerom, i
if (renamerom) { if (renamerom) {
println_Msg(gamename); println_Msg(gamename);
// Rename file to nointro // Rename file to database name
sd.chdir(folder); sd.chdir(folder);
delay(100); delay(100);
if (myFile.open(fileName, O_READ)) { if (myFile.open(fileName, O_READ)) {
@ -712,9 +711,6 @@ boolean compareCRC(const char* database, uint32_t crc32sum, boolean renamerom, i
print_Error(F("Database missing")); print_Error(F("Database missing"));
return 0; return 0;
} }
#else // nointro
println_Msg("");
#endif // !nointro
return 0; return 0;
} }
@ -835,18 +831,20 @@ static const char modeItem9[] PROGMEM = "NeoGeo Pocket (3V)";
static const char modeItem10[] PROGMEM = "Intellivision"; static const char modeItem10[] PROGMEM = "Intellivision";
static const char modeItem11[] PROGMEM = "Colecovision"; static const char modeItem11[] PROGMEM = "Colecovision";
static const char modeItem12[] PROGMEM = "Virtual Boy"; static const char modeItem12[] PROGMEM = "Virtual Boy";
static const char modeItem13[] PROGMEM = "Watara Supervision"; static const char modeItem13[] PROGMEM = "Watara Supervision (3V)";
static const char modeItem14[] PROGMEM = "Pocket Challenge W"; static const char modeItem14[] PROGMEM = "Pocket Challenge W";
static const char modeItem15[] PROGMEM = "Atari 2600"; static const char modeItem15[] PROGMEM = "Atari 2600";
static const char modeItem16[] PROGMEM = "Magnavox Odyssey 2"; static const char modeItem16[] PROGMEM = "Magnavox Odyssey 2";
static const char modeItem17[] PROGMEM = "Arcadia 2001"; static const char modeItem17[] PROGMEM = "Arcadia 2001";
static const char modeItem18[] PROGMEM = "Fairchild Channel F"; static const char modeItem18[] PROGMEM = "Fairchild Channel F";
static const char modeItem19[] PROGMEM = "Super A'can"; static const char modeItem19[] PROGMEM = "Super A'can";
static const char modeItem20[] PROGMEM = "Flashrom Programmer"; static const char modeItem20[] PROGMEM = "MSX";
static const char modeItem21[] PROGMEM = "Self Test"; static const char modeItem21[] PROGMEM = "Pokemon Mini (3V)";
static const char modeItem22[] PROGMEM = "About"; static const char modeItem22[] PROGMEM = "Flashrom Programmer";
//static const char modeItem22[] PROGMEM = "Reset"; (stored in common strings array) static const char modeItem23[] PROGMEM = "Self Test (3V)";
static const char* const modeOptions[] PROGMEM = { modeItem1, modeItem2, modeItem3, modeItem4, modeItem5, modeItem6, modeItem7, modeItem8, modeItem9, modeItem10, modeItem11, modeItem12, modeItem13, modeItem14, modeItem15, modeItem16, modeItem17, modeItem18, modeItem19, modeItem20, modeItem21, modeItem22, string_reset2 }; static const char modeItem24[] PROGMEM = "About";
//static const char modeItem25[] PROGMEM = "Reset"; (stored in common strings array)
static const char* const modeOptions[] PROGMEM = { modeItem1, modeItem2, modeItem3, modeItem4, modeItem5, modeItem6, modeItem7, modeItem8, modeItem9, modeItem10, modeItem11, modeItem12, modeItem13, modeItem14, modeItem15, modeItem16, modeItem17, modeItem18, modeItem19, modeItem20, modeItem21, modeItem22, modeItem23, modeItem24, string_reset2 };
// All included slots // All included slots
void mainMenu() { void mainMenu() {
@ -872,7 +870,7 @@ void mainMenu() {
num_answers = 7; num_answers = 7;
} else { // currPage == 4 } else { // currPage == 4
option_offset = 21; option_offset = 21;
num_answers = 2; num_answers = 4;
} }
// Copy menuOptions out of progmem // Copy menuOptions out of progmem
convertPgm(modeOptions + option_offset, num_answers); convertPgm(modeOptions + option_offset, num_answers);
@ -901,9 +899,7 @@ void mainMenu() {
display_Clear(); display_Clear();
display_Update(); display_Update();
setup_NES(); setup_NES();
#ifdef nointro
getMapping(); getMapping();
#endif
checkStatus_NES(); checkStatus_NES();
nesMenu(); nesMenu();
break; break;
@ -1026,23 +1022,40 @@ void mainMenu() {
break; break;
#endif #endif
#ifdef enable_FLASH #ifdef enable_MSX
case 19: case 19:
setup_MSX();
msxMenu();
break;
#endif
#ifdef enable_POKE
case 20:
setup_POKE();
pokeMenu();
break;
#endif
#ifdef enable_FLASH
case 21:
#ifdef ENABLE_VSELECT
setup_FlashVoltage();
#endif
flashMenu(); flashMenu();
break; break;
#endif #endif
#ifdef enable_selftest #ifdef enable_selftest
case 20: case 22:
selfTest(); selfTest();
break; break;
#endif #endif
case 21: case 23:
aboutScreen(); aboutScreen();
break; break;
case 22: case 24:
resetArduino(); resetArduino();
break; break;
@ -1093,8 +1106,9 @@ static const char* const consoles70Options[] PROGMEM = { consoles70Item1, consol
static const char consoles80Item1[] PROGMEM = "NES/Famicom"; static const char consoles80Item1[] PROGMEM = "NES/Famicom";
static const char consoles80Item2[] PROGMEM = "PC Engine/TG16"; static const char consoles80Item2[] PROGMEM = "PC Engine/TG16";
static const char consoles80Item3[] PROGMEM = "SMS/GG/MIII/SG-1000"; static const char consoles80Item3[] PROGMEM = "SMS/GG/MIII/SG-1000";
//static const char consoles80Item4[] PROGMEM = "Reset"; (stored in common strings array) static const char consoles80Item4[] PROGMEM = "MSX";
static const char* const consoles80Options[] PROGMEM = { consoles80Item1, consoles80Item2, consoles80Item3, string_reset2 }; //static const char consoles80Item5[] PROGMEM = "Reset"; (stored in common strings array)
static const char* const consoles80Options[] PROGMEM = { consoles80Item1, consoles80Item2, consoles80Item3, consoles80Item4, string_reset2 };
// 90s Consoles submenu // 90s Consoles submenu
static const char consoles90Item1[] PROGMEM = "Super A'can"; static const char consoles90Item1[] PROGMEM = "Super A'can";
@ -1104,10 +1118,11 @@ static const char* const consoles90Options[] PROGMEM = { consoles90Item1, string
static const char handheldsItem1[] PROGMEM = "Virtual Boy"; static const char handheldsItem1[] PROGMEM = "Virtual Boy";
static const char handheldsItem2[] PROGMEM = "WonderSwan (3V)"; static const char handheldsItem2[] PROGMEM = "WonderSwan (3V)";
static const char handheldsItem3[] PROGMEM = "NeoGeo Pocket (3V)"; static const char handheldsItem3[] PROGMEM = "NeoGeo Pocket (3V)";
static const char handheldsItem4[] PROGMEM = "Watara Supervision"; static const char handheldsItem4[] PROGMEM = "Watara Supervision (3V)";
static const char handheldsItem5[] PROGMEM = "Pocket Challenge W"; static const char handheldsItem5[] PROGMEM = "Pocket Challenge W";
static const char handheldsItem6[] PROGMEM = "Pokemon Mini (3V)";
//static const char handheldsItem6[] PROGMEM = "Reset"; (stored in common strings array) //static const char handheldsItem6[] PROGMEM = "Reset"; (stored in common strings array)
static const char* const handheldsOptions[] PROGMEM = { handheldsItem1, handheldsItem2, handheldsItem3, handheldsItem4, handheldsItem5, string_reset2 }; static const char* const handheldsOptions[] PROGMEM = { handheldsItem1, handheldsItem2, handheldsItem3, handheldsItem4, handheldsItem5, handheldsItem6, string_reset2 };
// All included slots // All included slots
void mainMenu() { void mainMenu() {
@ -1191,6 +1206,9 @@ void addonMenu() {
#ifdef enable_FLASH #ifdef enable_FLASH
case 4: case 4:
#ifdef ENABLE_VSELECT
setup_FlashVoltage();
#endif
flashMenu(); flashMenu();
break; break;
#endif #endif
@ -1275,8 +1293,8 @@ void consoles80Menu() {
// create menu with title and 6 options to choose from // create menu with title and 6 options to choose from
unsigned char consoles80Menu; unsigned char consoles80Menu;
// Copy menuOptions out of progmem // Copy menuOptions out of progmem
convertPgm(consoles80Options, 4); convertPgm(consoles80Options, 5);
consoles80Menu = question_box(F("Choose Adapter"), menuOptions, 4, 0); consoles80Menu = question_box(F("Choose 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 (consoles80Menu) { switch (consoles80Menu) {
@ -1286,9 +1304,7 @@ void consoles80Menu() {
display_Clear(); display_Clear();
display_Update(); display_Update();
setup_NES(); setup_NES();
#ifdef nointro
getMapping(); getMapping();
#endif
checkStatus_NES(); checkStatus_NES();
nesMenu(); nesMenu();
break; break;
@ -1306,7 +1322,14 @@ void consoles80Menu() {
break; break;
#endif #endif
#ifdef enable_MSX
case 3: case 3:
setup_MSX();
msxMenu();
break;
#endif
case 4:
resetArduino(); resetArduino();
break; break;
@ -1345,8 +1368,8 @@ void handheldMenu() {
// create menu with title and 6 options to choose from // create menu with title and 6 options to choose from
unsigned char handheldsMenu; unsigned char handheldsMenu;
// Copy menuOptions out of progmem // Copy menuOptions out of progmem
convertPgm(handheldsOptions, 6); convertPgm(handheldsOptions, 7);
handheldsMenu = question_box(F("Choose Adapter"), menuOptions, 6, 0); handheldsMenu = question_box(F("Choose Adapter"), menuOptions, 7, 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 (handheldsMenu) { switch (handheldsMenu) {
@ -1389,7 +1412,14 @@ void handheldMenu() {
break; break;
#endif #endif
#ifdef enable_POKE
case 5: case 5:
setup_POKE();
pokeMenu();
break;
#endif
case 6:
resetArduino(); resetArduino();
break; break;
@ -1405,6 +1435,11 @@ void handheldMenu() {
#ifdef enable_selftest #ifdef enable_selftest
void selfTest() { void selfTest() {
#ifdef ENABLE_VSELECT
// Set Automatic Voltage Selection to 3V
setVoltage(VOLTS_SET_3V3);
#endif
display_Clear(); display_Clear();
println_Msg(F("Self Test")); println_Msg(F("Self Test"));
println_Msg(F("")); println_Msg(F(""));
@ -2036,8 +2071,10 @@ void setup() {
#endif #endif
#endif #endif
#ifdef ENABLE_VSELECT
// Set power to low to protect carts // Set power to low to protect carts
setVoltage(VOLTS_SET_3V3); setVoltage(VOLTS_SET_3V3);
#endif
#ifdef enable_OLED #ifdef enable_OLED
display.begin(); display.begin();
@ -2100,7 +2137,7 @@ void setup() {
statusLED(true); statusLED(true);
// Start menu system // Start menu system
startMenu(); mainMenu();
} }
/****************************************** /******************************************
@ -3548,6 +3585,16 @@ void loop() {
else if (mode == mode_SUPRACAN) { else if (mode == mode_SUPRACAN) {
suprAcanMenu(); suprAcanMenu();
} }
#endif
#ifdef enable_MSX
else if (mode == mode_MSX) {
msxMenu();
}
#endif
#ifdef enable_POKE
else if (mode == mode_POKE) {
pokeMenu();
}
#endif #endif
else { else {
display_Clear(); display_Clear();

View File

@ -151,6 +151,13 @@
/****/ /****/
/* [ MSX ------------------------------------------- ]
*/
//#define enable_MSX
/****/
/* [ PC Engine/TurboGrafx 16 -------------------------------------- ] /* [ PC Engine/TurboGrafx 16 -------------------------------------- ]
*/ */
@ -158,6 +165,13 @@
/****/ /****/
/* [ Pokemon Mini -------------------------------------- ]
*/
//#define enable_POKE
/****/
/* [ Sega Master System/Mark III/Game Gear/SG-1000 ---------------- ] /* [ Sega Master System/Mark III/Game Gear/SG-1000 ---------------- ]
*/ */
@ -253,7 +267,7 @@
* other than HW5 and HW3. * other than HW5 and HW3.
*/ */
#define ENABLE_UPDATER //#define ENABLE_UPDATER
/****/ /****/
@ -265,19 +279,6 @@
/****/ /****/
/* [ Start Menu --------------------------------------------------- ]
* Change this when using a single slot cart reader to always start
* in that menu.
*
* OPTIONS :
* mainMenu, snsMenu, mdMenu, n64Menu, gbxMenu, pcsMenu,
* flashMenu, nesMenu, smsMenu
*/
#define startMenu mainMenu
/****/
/* [ Logging ------------------------------------------------------ ] /* [ Logging ------------------------------------------------------ ]
* Write all info to OSCR_LOG.txt in root dir * Write all info to OSCR_LOG.txt in root dir
*/ */
@ -286,14 +287,6 @@
/****/ /****/
/* [ Use No Intro Database ---------------------------------------- ]
* Renames ROM if found in database
*/
#define nointro
/****/
/* [ SNES Core/CLOCKGEN: Read Clock Generator Calibration Data ---- ] /* [ SNES Core/CLOCKGEN: Read Clock Generator Calibration Data ---- ]
* Toggle to use calibration data from snes_clk.txt * Toggle to use calibration data from snes_clk.txt
*/ */

View File

@ -87,6 +87,9 @@ static const char fairchildMenuItem5[] PROGMEM = "Reset";
static const char* const menuOptionsFAIRCHILD[] PROGMEM = { fairchildMenuItem1, fairchildMenuItem2, fairchildMenuItem3, fairchildMenuItem4, fairchildMenuItem5 }; static const char* const menuOptionsFAIRCHILD[] PROGMEM = { fairchildMenuItem1, fairchildMenuItem2, fairchildMenuItem3, fairchildMenuItem4, fairchildMenuItem5 };
void setup_FAIRCHILD() { void setup_FAIRCHILD() {
// Request 5V
setVoltage(VOLTS_SET_5V);
// Set Address Pins to Output // Set Address Pins to Output
// Channel F uses A0-A4 [A5-A23 UNUSED] // Channel F uses A0-A4 [A5-A23 UNUSED]
//A0-A7 //A0-A7
@ -126,7 +129,6 @@ void setup_FAIRCHILD() {
} }
void fairchildMenu() { void fairchildMenu() {
setVoltage(VOLTS_SET_5V);
convertPgm(menuOptionsFAIRCHILD, 5); convertPgm(menuOptionsFAIRCHILD, 5);
uint8_t mainMenu = question_box(F("CHANNEL F MENU"), menuOptions, 5, 0); uint8_t mainMenu = question_box(F("CHANNEL F MENU"), menuOptions, 5, 0);

View File

@ -680,6 +680,41 @@ void id_Flash16() {
/****************************************** /******************************************
Setup Setup
*****************************************/ *****************************************/
#if defined(ENABLE_VSELECT) || defined(ENABLE_3V3FIX)
static const char flashvoltItem1[] PROGMEM = "3.3V";
static const char flashvoltItem2[] PROGMEM = "5V";
//static const char flashvoltItem3[] PROGMEM = "Reset"; (stored in common strings array)
static const char* const flashvoltOptions[] PROGMEM = { flashvoltItem1, flashvoltItem2, string_reset2 };
void setup_FlashVoltage() {
// create menu with title and 3 options to choose from
unsigned char flashvolt;
// Copy menuOptions out of progmem
convertPgm(flashvoltOptions, 3);
flashvolt = question_box(F("Select Flash Voltage"), menuOptions, 3, 0);
// wait for user choice to come back from the question box menu
switch (flashvolt) {
case 0:
// Request 3.3V
setVoltage(VOLTS_SET_3V3);
break;
case 1:
// Request 5V
setVoltage(VOLTS_SET_5V);
break;
case 2:
resetArduino();
break;
}
}
#else
// The compiler will optimize this out when this condition is met.
void setup_FlashVoltage() {}
#endif
void setup_Flash8() { void setup_Flash8() {
// Set Address Pins to Output // Set Address Pins to Output
//A0-A7 //A0-A7

View File

@ -41,8 +41,7 @@ static const char* const menuOptionsGBFlash[] PROGMEM = { GBFlashItem1, GBFlashI
// Start menu for both GB and GBA // Start menu for both GB and GBA
void gbxMenu() { void gbxMenu() {
setVoltage(VOLTS_SET_3V3); // create menu with title and 5 options to choose from
// create menu with title and 4 options to choose from
unsigned char gbType; unsigned char gbType;
// Copy menuOptions out of progmem // Copy menuOptions out of progmem
convertPgm(menuOptionsGBx, 5); convertPgm(menuOptionsGBx, 5);
@ -51,7 +50,6 @@ void gbxMenu() {
// 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 (gbType) { switch (gbType) {
case 0: case 0:
setVoltage(VOLTS_SET_5V);
display_Clear(); display_Clear();
display_Update(); display_Update();
setup_GB(); setup_GB();
@ -59,7 +57,6 @@ void gbxMenu() {
break; break;
case 1: case 1:
setVoltage(VOLTS_SET_3V3);
display_Clear(); display_Clear();
display_Update(); display_Update();
setup_GBA(); setup_GBA();
@ -69,7 +66,6 @@ void gbxMenu() {
case 2: case 2:
// create submenu with title and 7 options to choose from // create submenu with title and 7 options to choose from
unsigned char gbFlash; unsigned char gbFlash;
setVoltage(VOLTS_SET_5V);
// Copy menuOptions out of progmem // Copy menuOptions out of progmem
convertPgm(menuOptionsGBFlash, 7); convertPgm(menuOptionsGBFlash, 7);
gbFlash = question_box(F("Select type"), menuOptions, 7, 0); gbFlash = question_box(F("Select type"), menuOptions, 7, 0);
@ -97,7 +93,6 @@ void gbxMenu() {
case 1: case 1:
//Flash MBC5 //Flash MBC5
setVoltage(VOLTS_SET_5V);
display_Clear(); display_Clear();
display_Update(); display_Update();
setup_GB(); setup_GB();
@ -291,7 +286,7 @@ void gbxMenu() {
} }
void gbMenu() { void gbMenu() {
// create menu with title and 3 options to choose from // create menu with title and 4 options to choose from
unsigned char mainMenu; unsigned char mainMenu;
// Copy menuOptions out of progmem // Copy menuOptions out of progmem
convertPgm(menuOptionsGB, 4); convertPgm(menuOptionsGB, 4);
@ -375,6 +370,9 @@ void gbMenu() {
Setup Setup
*****************************************/ *****************************************/
void setup_GB() { void setup_GB() {
// Request 5V
setVoltage(VOLTS_SET_5V);
// Set Address Pins to Output // Set Address Pins to Output
//A0-A7 //A0-A7
DDRF = 0xFF; DDRF = 0xFF;
@ -876,7 +874,7 @@ void getCartInfo_GB() {
if (romType == 32) { if (romType == 32) {
sramBanks = 8; sramBanks = 8;
lastByte = 0xAFFF; lastByte = 0xAFFF;
} else if (romType == 34) { // MBC7 } else if (romType == 34) { // MBC7
lastByte = (*((uint16_t*)(eepbit + 6)) == 0xa5be ? 512 : 256); // Only "Command Master" use LC66 EEPROM lastByte = (*((uint16_t*)(eepbit + 6)) == 0xa5be ? 512 : 256); // Only "Command Master" use LC66 EEPROM
} }

View File

@ -34,7 +34,6 @@ static const char GBASaveItem6[] PROGMEM = "1M FLASH";
static const char* const saveOptionsGBA[] PROGMEM = { GBASaveItem1, GBASaveItem2, GBASaveItem3, GBASaveItem4, GBASaveItem5, GBASaveItem6 }; static const char* const saveOptionsGBA[] PROGMEM = { GBASaveItem1, GBASaveItem2, GBASaveItem3, GBASaveItem4, GBASaveItem5, GBASaveItem6 };
void gbaMenu() { void gbaMenu() {
setVoltage(VOLTS_SET_3V3);
// create menu with title and 4 options to choose from // create menu with title and 4 options to choose from
unsigned char mainMenu; unsigned char mainMenu;
// Copy menuOptions out of progmem // Copy menuOptions out of progmem
@ -247,6 +246,9 @@ void gbaMenu() {
Setup Setup
*****************************************/ *****************************************/
void setup_GBA() { void setup_GBA() {
// Request 3.3V
setVoltage(VOLTS_SET_3V3);
setROM_GBA(); setROM_GBA();
// Get cart info // Get cart info
@ -761,7 +763,7 @@ void getCartInfo_GBA() {
} }
// Get name // Get name
buildRomName(romName, &sdBuffer[0xA0], 11); buildRomName(romName, &sdBuffer[0xA0], 12);
// Get ROM version // Get ROM version
romVersion = sdBuffer[0xBC]; romVersion = sdBuffer[0xBC];
@ -894,6 +896,18 @@ void readROM_GBA() {
draw_progressbar(processedProgressBar, totalProgressBar); draw_progressbar(processedProgressBar, totalProgressBar);
} }
// Fix unmapped ROM area of cartridges with 32 MB ROM + EEPROM save type
if ((cartSize == 0x2000000) && ((saveType == 1) || (saveType == 2))) {
byte padding_byte[256];
char tempStr[32];
myFile.seek(0x1FFFEFF);
myFile.read(padding_byte, 1);
sprintf(tempStr, "Fixing ROM padding (0x%02X)", padding_byte[0]);
println_Msg(tempStr);
memset(padding_byte + 1, padding_byte[0], 255);
myFile.write(padding_byte, 256);
}
// Close the file: // Close the file:
myFile.close(); myFile.close();
} }

View File

@ -17,7 +17,6 @@ static const char gbmMenuItem7[] PROGMEM = "Write Mapping";
static const char* const menuOptionsGBM[] PROGMEM = { gbmMenuItem1, gbmMenuItem2, gbmMenuItem3, gbmMenuItem4, gbmMenuItem5, gbmMenuItem6, gbmMenuItem7 }; static const char* const menuOptionsGBM[] PROGMEM = { gbmMenuItem1, gbmMenuItem2, gbmMenuItem3, gbmMenuItem4, gbmMenuItem5, gbmMenuItem6, gbmMenuItem7 };
void gbmMenu() { void gbmMenu() {
setVoltage(VOLTS_SET_5V);
// create menu with title and 7 options to choose from // create menu with title and 7 options to choose from
unsigned char mainMenu; unsigned char mainMenu;
// Copy menuOptions out of progmem // Copy menuOptions out of progmem
@ -185,6 +184,9 @@ void gbmMenu() {
Setup Setup
*****************************************/ *****************************************/
void setup_GBM() { void setup_GBM() {
// Request 5V
setVoltage(VOLTS_SET_5V);
// Set RST(PH0) to Input // Set RST(PH0) to Input
DDRH &= ~(1 << 0); DDRH &= ~(1 << 0);
// Activate Internal Pullup Resistors // Activate Internal Pullup Resistors

View File

@ -109,6 +109,9 @@ byte readByte_GBS(word myAddress) {
} }
void setup_GBSmart() { void setup_GBSmart() {
// Request 5V
setVoltage(VOLTS_SET_5V);
// take from setup_GB // take from setup_GB
// Set RST(PH0) to Input // Set RST(PH0) to Input
DDRH &= ~(1 << 0); DDRH &= ~(1 << 0);
@ -145,7 +148,6 @@ void setup_GBSmart() {
} }
void gbSmartMenu() { void gbSmartMenu() {
setVoltage(VOLTS_SET_5V);
uint8_t mainMenu; uint8_t mainMenu;
// Copy menuOptions out of progmem // Copy menuOptions out of progmem

View File

@ -99,6 +99,9 @@ static const char intvMenuItem3[] PROGMEM = "Set Mapper + Size";
static const char* const menuOptionsINTV[] PROGMEM = { intvMenuItem1, intvMenuItem2, intvMenuItem3, string_reset2 }; static const char* const menuOptionsINTV[] PROGMEM = { intvMenuItem1, intvMenuItem2, intvMenuItem3, string_reset2 };
void setup_INTV() { void setup_INTV() {
// Request 5V
setVoltage(VOLTS_SET_5V);
// Set Address Pins to Output (UNUSED) // Set Address Pins to Output (UNUSED)
//A0-A7 //A0-A7
DDRF = 0xFF; DDRF = 0xFF;
@ -135,7 +138,6 @@ void setup_INTV() {
} }
void intvMenu() { void intvMenu() {
setVoltage(VOLTS_SET_5V);
convertPgm(menuOptionsINTV, 4); convertPgm(menuOptionsINTV, 4);
uint8_t mainMenu = question_box(F("INTELLIVISION MENU"), menuOptions, 4, 0); uint8_t mainMenu = question_box(F("INTELLIVISION MENU"), menuOptions, 4, 0);

View File

@ -13,6 +13,7 @@ word addrhi;
word addrlo; word addrlo;
word chksum; word chksum;
boolean is32x = 0; boolean is32x = 0;
boolean isSVP = 0;
//*********************************************** //***********************************************
// EEPROM SAVE TYPES // EEPROM SAVE TYPES
@ -86,7 +87,7 @@ unsigned long bramSize = 0;
boolean realtec = 0; boolean realtec = 0;
#ifndef DEFAULT_VALUE_segaSram16bit #ifndef DEFAULT_VALUE_segaSram16bit
#define DEFAULT_VALUE_segaSram16bit 0 #define DEFAULT_VALUE_segaSram16bit 0
#endif #endif
int segaSram16bit = DEFAULT_VALUE_segaSram16bit; int segaSram16bit = DEFAULT_VALUE_segaSram16bit;
@ -183,6 +184,11 @@ void mdLoadConf() {
} }
#endif #endif
void pulse_clock(int n) {
for (int i = 0; i < n; i++)
PORTH ^= (1 << 1);
}
/****************************************** /******************************************
Menu Menu
*****************************************/ *****************************************/
@ -211,7 +217,6 @@ static const char* const menuOptionsSCD[] PROGMEM = { SCDMenuItem1, SCDMenuItem2
// Sega start menu // Sega start menu
void mdMenu() { void mdMenu() {
setVoltage(VOLTS_SET_5V);
// create menu with title and 4 options to choose from // create menu with title and 4 options to choose from
unsigned char mdDev; unsigned char mdDev;
// Copy menuOptions out of progmem // Copy menuOptions out of progmem
@ -308,7 +313,7 @@ void mdCartMenu() {
readRealtec_MD(); readRealtec_MD();
} else { } else {
readROM_MD(); readROM_MD();
// Calculate and compare CRC32 with nointro // Calculate and compare CRC32 with database
if (is32x) if (is32x)
//database, crcString, renamerom, offset //database, crcString, renamerom, offset
compareCRC("32x.txt", 0, 1, 0); compareCRC("32x.txt", 0, 1, 0);
@ -458,6 +463,9 @@ void segaCDMenu() {
Setup Setup
*****************************************/ *****************************************/
void setup_MD() { void setup_MD() {
// Request 5V
setVoltage(VOLTS_SET_5V);
#ifdef use_md_conf #ifdef use_md_conf
mdLoadConf(); mdLoadConf();
#endif #endif
@ -473,18 +481,24 @@ void setup_MD() {
// Set Control Pins to Output RST(PH0) CLK(PH1) CS(PH3) WRH(PH4) WRL(PH5) OE(PH6) // Set Control Pins to Output RST(PH0) CLK(PH1) CS(PH3) WRH(PH4) WRL(PH5) OE(PH6)
DDRH |= (1 << 0) | (1 << 1) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6); DDRH |= (1 << 0) | (1 << 1) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6);
// Set TIME(PJ0) to Output // Set TIME(PJ0), AS(PJ1) to Output
DDRJ |= (1 << 0); DDRJ |= (1 << 0) | (1 << 1);
//set ASEL(PG5) to Output
DDRG |= (1 << 5);
// Set Data Pins (D0-D15) to Input // Set Data Pins (D0-D15) to Input
DDRC = 0x00; DDRC = 0x00;
DDRA = 0x00; DDRA = 0x00;
// Setting RST(PH0) CLK(PH1) CS(PH3) WRH(PH4) WRL(PH5) OE(PH6) HIGH // Setting RST(PH0) CS(PH3) WRH(PH4) WRL(PH5) OE(PH6) HIGH
PORTH |= (1 << 0) | (1 << 1) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6); PORTH |= (1 << 0) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6);
// Setting TIME(PJ0) HIGH // Setting TIME(PJ0) AS(PJ1) HIGH
PORTJ |= (1 << 0); PORTJ |= (1 << 0) | (1 << 1);
// setting ASEL(PG5) HIGH
PORTG |= (1 << 5);
delay(200); delay(200);
@ -556,6 +570,12 @@ word readWord_MD(unsigned long myAddress) {
PORTH &= ~(1 << 3); PORTH &= ~(1 << 3);
// Setting OE(PH6) LOW // Setting OE(PH6) LOW
PORTH &= ~(1 << 6); PORTH &= ~(1 << 6);
// Setting AS(PJ1) LOW
PORTJ &= ~(1 << 1);
// Setting ASEL(PG5) LOW
PORTG &= ~(1 << 5);
// Pulse CLK(PH1), needed for SVP enhanced carts
pulse_clock(10);
// most MD ROMs are 200ns, comparable to SNES > use similar access delay of 6 x 62.5 = 375ns // most MD ROMs are 200ns, comparable to SNES > use similar access delay of 6 x 62.5 = 375ns
NOP; NOP;
@ -572,6 +592,12 @@ word readWord_MD(unsigned long myAddress) {
PORTH |= (1 << 3); PORTH |= (1 << 3);
// Setting OE(PH6) HIGH // Setting OE(PH6) HIGH
PORTH |= (1 << 6); PORTH |= (1 << 6);
// Setting AS(PJ1) HIGH
PORTJ |= (1 << 1);
// Setting ASEL(PG5) HIGH
PORTG |= (1 << 5);
// Pulse CLK(PH1), needed for SVP enhanced carts
pulse_clock(10);
// these 6x nop delays have been here before, unknown what they mean // these 6x nop delays have been here before, unknown what they mean
NOP; NOP;
@ -718,6 +744,12 @@ void getCartInfo_MD() {
id[c + 1] = loByte; id[c + 1] = loByte;
} }
//Identify games using SVP chip
if (!strncmp("GM MK-1229 ", id, 11) || !strncmp("GM G-7001 ", id, 11)) // Virtua Racing (E/U/J)
isSVP = 1;
else
isSVP = 0;
// Fix cartridge sizes according to no-intro database // Fix cartridge sizes according to no-intro database
if (cartSize == 0x400000) { if (cartSize == 0x400000) {
switch (chksum) { switch (chksum) {
@ -1414,6 +1446,14 @@ void readROM_MD() {
PORTH &= ~(1 << 3); PORTH &= ~(1 << 3);
// Setting OE(PH6) LOW // Setting OE(PH6) LOW
PORTH &= ~(1 << 6); PORTH &= ~(1 << 6);
// Setting AS(PJ1) LOW
PORTJ &= ~(1 << 1);
// Setting ASEL(PG5) LOW
PORTG &= ~(1 << 5);
// Pulse CLK(PH1)
if (isSVP)
pulse_clock(10);
// most MD ROMs are 200ns, comparable to SNES > use similar access delay of 6 x 62.5 = 375ns // most MD ROMs are 200ns, comparable to SNES > use similar access delay of 6 x 62.5 = 375ns
NOP; NOP;
NOP; NOP;
@ -1430,6 +1470,13 @@ void readROM_MD() {
PORTH |= (1 << 3); PORTH |= (1 << 3);
// Setting OE(PH6) HIGH // Setting OE(PH6) HIGH
PORTH |= (1 << 6); PORTH |= (1 << 6);
// Setting AS(PJ1) HIGH
PORTJ |= (1 << 1);
// Setting ASEL(PG5) HIGH
PORTG |= (1 << 5);
// Pulse CLK(PH1)
if (isSVP)
pulse_clock(10);
// Skip first 256 words // Skip first 256 words
if (((currBuffer == 0) && (currWord >= 256)) || (currBuffer > 0)) { if (((currBuffer == 0) && (currWord >= 256)) || (currBuffer > 0)) {
@ -1463,6 +1510,14 @@ void readROM_MD() {
PORTH &= ~(1 << 3); PORTH &= ~(1 << 3);
// Setting OE(PH6) LOW // Setting OE(PH6) LOW
PORTH &= ~(1 << 6); PORTH &= ~(1 << 6);
// Setting AS(PJ1) LOW
PORTJ &= ~(1 << 1);
// Setting ASEL(PG5) LOW
PORTG &= ~(1 << 5);
// Pulse CLK(PH1)
if (isSVP)
pulse_clock(10);
// most MD ROMs are 200ns, comparable to SNES > use similar access delay of 6 x 62.5 = 375ns // most MD ROMs are 200ns, comparable to SNES > use similar access delay of 6 x 62.5 = 375ns
NOP; NOP;
NOP; NOP;
@ -1479,6 +1534,13 @@ void readROM_MD() {
PORTH |= (1 << 3); PORTH |= (1 << 3);
// Setting OE(PH6) HIGH // Setting OE(PH6) HIGH
PORTH |= (1 << 6); PORTH |= (1 << 6);
// Setting AS(PJ1) HIGH
PORTJ |= (1 << 1);
// Setting ASEL(PG5) HIGH
PORTG |= (1 << 5);
// Pulse CLK(PH1)
if (isSVP)
pulse_clock(10);
// Skip first 256 words // Skip first 256 words
if (((currBuffer == 0) && (currWord >= 256)) || (currBuffer > 0)) { if (((currBuffer == 0) && (currWord >= 256)) || (currBuffer > 0)) {
@ -1513,6 +1575,14 @@ void readROM_MD() {
PORTH &= ~(1 << 3); PORTH &= ~(1 << 3);
// Setting OE(PH6) LOW // Setting OE(PH6) LOW
PORTH &= ~(1 << 6); PORTH &= ~(1 << 6);
// Setting AS(PJ1) LOW
PORTJ &= ~(1 << 1);
// Setting ASEL(PG5) LOW
PORTG &= ~(1 << 5);
// Pulse CLK(PH1)
if (isSVP)
PORTH ^= (1 << 1);
// most MD ROMs are 200ns, comparable to SNES > use similar access delay of 6 x 62.5 = 375ns // most MD ROMs are 200ns, comparable to SNES > use similar access delay of 6 x 62.5 = 375ns
NOP; NOP;
NOP; NOP;
@ -1529,6 +1599,13 @@ void readROM_MD() {
PORTH |= (1 << 3); PORTH |= (1 << 3);
// Setting OE(PH6) HIGH // Setting OE(PH6) HIGH
PORTH |= (1 << 6); PORTH |= (1 << 6);
// Setting AS(PJ1) HIGH
PORTJ |= (1 << 1);
// Setting ASEL(PG5) HIGH
PORTG |= (1 << 5);
// Pulse CLK(PH1)
if (isSVP)
PORTH ^= (1 << 1);
calcCKSSonic2 += ((buffer[d] << 8) | buffer[d + 1]); calcCKSSonic2 += ((buffer[d] << 8) | buffer[d + 1]);
d += 2; d += 2;
@ -2006,13 +2083,12 @@ void busyCheck_MD() {
//****************************************** //******************************************
// EEPROM Functions // EEPROM Functions
//****************************************** //******************************************
void EepromInit(byte eepmode) { // Acclaim Type 2 void EepromInit(byte eepmode) { // Acclaim Type 2
PORTF = 0x00; // ADDR A0-A7 PORTF = 0x00; // ADDR A0-A7
PORTK = 0x00; // ADDR A8-A15 PORTK = 0x00; // ADDR A8-A15
PORTL = 0x10; // ADDR A16-A23 PORTL = 0x10; // ADDR A16-A23
PORTA = 0x00; // DATA D8-D15 PORTA = 0x00; // DATA D8-D15
PORTH |= (1 << 0); // /RES HIGH PORTH |= (1 << 0); // /RES HIGH
PORTC = eepmode; // EEPROM Switch: 0 = Enable (Read EEPROM), 1 = Disable (Read ROM) PORTC = eepmode; // EEPROM Switch: 0 = Enable (Read EEPROM), 1 = Disable (Read ROM)
PORTH &= ~(1 << 3); // CE LOW PORTH &= ~(1 << 3); // CE LOW
PORTH &= ~(1 << 4) & ~(1 << 5); // /UDSW + /LDSW LOW PORTH &= ~(1 << 4) & ~(1 << 5); // /UDSW + /LDSW LOW
@ -2250,7 +2326,6 @@ void EepromSet1() {
} }
} }
void EepromDevice() { // 24C02+ void EepromDevice() { // 24C02+
EepromSet1(); EepromSet1();
EepromSet0(); EepromSet0();

1662
Cart_Reader/MSX.ino Normal file

File diff suppressed because it is too large Load Diff

View File

@ -114,7 +114,6 @@ static const char* const sectorOptionsN64[] PROGMEM = { N64SectorItem1, N64Secto
// N64 start menu // N64 start menu
void n64Menu() { void n64Menu() {
setVoltage(VOLTS_SET_3V3);
// create menu with title and 5 options to choose from // create menu with title and 5 options to choose from
unsigned char n64Dev; unsigned char n64Dev;
// Copy menuOptions out of progmem // Copy menuOptions out of progmem
@ -400,6 +399,9 @@ void n64CartMenu() {
Setup Setup
*****************************************/ *****************************************/
void setup_N64_Controller() { void setup_N64_Controller() {
// Request 3.3V
setVoltage(VOLTS_SET_3V3);
// Output a low signal // Output a low signal
PORTH &= ~(1 << 4); PORTH &= ~(1 << 4);
// Set Controller Data Pin(PH4) to Input // Set Controller Data Pin(PH4) to Input
@ -407,6 +409,9 @@ void setup_N64_Controller() {
} }
void setup_N64_Cart() { void setup_N64_Cart() {
// Request 3.3V
setVoltage(VOLTS_SET_3V3);
// Set Address Pins to Output and set them low // Set Address Pins to Output and set them low
//A0-A7 //A0-A7
DDRF = 0xFF; DDRF = 0xFF;
@ -1052,7 +1057,7 @@ void nextscreen() {
} }
void controllerTest_Display() { void controllerTest_Display() {
int mode = 0; boolean cmode = 1;
//name of the current displayed result //name of the current displayed result
String anastick = ""; String anastick = "";
@ -1162,7 +1167,7 @@ void controllerTest_Display() {
display.drawStr(36, 8, "Range Test"); display.drawStr(36, 8, "Range Test");
display.drawLine(0, 9, 128, 9); display.drawLine(0, 9, 128, 9);
if (mode == 0) { if (cmode == 0) {
// Print Stick X Value // Print Stick X Value
String stickx = String("X:" + String(N64_status.stick_x, DEC) + " "); String stickx = String("X:" + String(N64_status.stick_x, DEC) + " ");
printSTR(stickx, 22 + 54, 26); printSTR(stickx, 22 + 54, 26);
@ -1186,7 +1191,7 @@ void controllerTest_Display() {
display.drawPixel(10 + xax - 68 / 4, 12 + yax + 68 / 4); display.drawPixel(10 + xax - 68 / 4, 12 + yax + 68 / 4);
//Draw Analog Stick //Draw Analog Stick
if (mode == 1) { if (cmode == 1) {
display.drawPixel(10 + xax + N64_status.stick_x / 4, 12 + yax - N64_status.stick_y / 4); display.drawPixel(10 + xax + N64_status.stick_x / 4, 12 + yax - N64_status.stick_y / 4);
//Update LCD //Update LCD
display.updateDisplay(); display.updateDisplay();
@ -1199,11 +1204,11 @@ void controllerTest_Display() {
// switch mode // switch mode
if (button == "Press a button" && lastbutton == "Z") { if (button == "Press a button" && lastbutton == "Z") {
if (mode == 0) { if (cmode == 0) {
mode = 1; cmode = 1;
display.clearDisplay(); display.clearDisplay();
} else { } else {
mode = 0; cmode = 0;
display.clearDisplay(); display.clearDisplay();
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -21,6 +21,9 @@ uint8_t manufacturerID;
uint8_t deviceID; uint8_t deviceID;
void setup_NGP() { void setup_NGP() {
// Request 3.3V
setVoltage(VOLTS_SET_3V3);
// A0 - A7 // A0 - A7
DDRF = 0xff; DDRF = 0xff;
// A8 - A15 // A8 - A15
@ -52,7 +55,6 @@ void setup_NGP() {
} }
void ngpMenu() { void ngpMenu() {
setVoltage(VOLTS_SET_3V3);
uint8_t mainMenu; uint8_t mainMenu;
convertPgm(menuOptionsNGP, 4); convertPgm(menuOptionsNGP, 4);

View File

@ -69,6 +69,9 @@ static const char ody2MenuItem4[] PROGMEM = "Reset";
static const char* const menuOptionsODY2[] PROGMEM = { ody2MenuItem1, ody2MenuItem2, ody2MenuItem3, ody2MenuItem4 }; static const char* const menuOptionsODY2[] PROGMEM = { ody2MenuItem1, ody2MenuItem2, ody2MenuItem3, ody2MenuItem4 };
void setup_ODY2() { void setup_ODY2() {
// Request 5V
setVoltage(VOLTS_SET_5V);
// Set Address Pins to Output // Set Address Pins to Output
// Odyssey 2 uses A0-A13 [A14-A23 UNUSED] // Odyssey 2 uses A0-A13 [A14-A23 UNUSED]
//A0-A7 //A0-A7
@ -110,7 +113,6 @@ void setup_ODY2() {
} }
void ody2Menu() { void ody2Menu() {
setVoltage(VOLTS_SET_5V);
convertPgm(menuOptionsODY2, 4); convertPgm(menuOptionsODY2, 4);
uint8_t mainMenu = question_box(F("ODYSSEY 2 MENU"), menuOptions, 4, 0); uint8_t mainMenu = question_box(F("ODYSSEY 2 MENU"), menuOptions, 4, 0);

View File

@ -41,7 +41,7 @@
/*==== VARIABLES ==================================================*/ /*==== VARIABLES ==================================================*/
// Firmware Version // Firmware Version
char ver[5] = "12.5"; char ver[5] = "12.6";
// Clock speed // Clock speed
unsigned long clock = CS_16MHZ; unsigned long clock = CS_16MHZ;
@ -173,55 +173,76 @@ VOLTS setVoltage(VOLTS volts) {
switch(volts) { switch(volts) {
/* 5V */ /* 5V */
case VOLTS_SET_5V: case VOLTS_SET_5V:
if (clock == CS_16MHZ && volts == VOLTS_SET_5V) return VOLTS_SUCCESS; // Just return if already as requested if (
#if defined(ENABLE_3V3FIX)
clock == CS_16MHZ
#endif
#if defined(ENABLE_VSELECT) && defined(ENABLE_3V3FIX)
&&
#endif
#if defined(ENABLE_VSELECT)
VOLTS_SET_5V == voltage
#endif
) return VOLTS_SUCCESS; // Just return if already as requested
// Adjust voltage high if VSELECT is available // Adjust voltage high if VSELECT is available
#if defined(ENABLE_VSELECT) #if defined(ENABLE_VSELECT)
PORTD &= ~(1 << 7); /*[1]*/ PORTD &= ~(1 << 7); /*[1]*/
voltage = VOLTS_SET_5V; voltage = VOLTS_SET_5V;
#endif #endif
// Adjust clock speed when 3V3FIX is enabled // Adjust clock speed when 3V3FIX is enabled
#if defined(ENABLE_3V3FIX) #if defined(ENABLE_3V3FIX)
// Stop serial if running // Stop serial if running
#if !defined(enable_serial) && defined(ENABLE_UPDATER) #if !defined(enable_serial) && defined(ENABLE_UPDATER)
ClockedSerial.end(); ClockedSerial.end();
#endif #endif
// Set clock speed // Set clock speed
clock = CS_16MHZ; clock = CS_16MHZ;
setClockScale(volts); /*[2]*/ setClockScale(volts); /*[2]*/
// Restart serial // Restart serial
#if !defined(enable_serial) && defined(ENABLE_UPDATER) #if !defined(enable_serial) && defined(ENABLE_UPDATER)
ClockedSerial.begin(UPD_BAUD); ClockedSerial.begin(UPD_BAUD);
#endif #endif
#else #else
clock = CS_16MHZ; clock = CS_16MHZ;
#endif #endif
// Done // Done
return VOLTS_SUCCESS; return VOLTS_SUCCESS;
/* 3.3V */ /* 3.3V */
case VOLTS_SET_3V3: case VOLTS_SET_3V3:
if (clock == CS_8MHZ && volts == VOLTS_SET_3V3) return VOLTS_SUCCESS; // Just return if already as requested if (
#if defined(ENABLE_3V3FIX)
clock == CS_8MHZ
#endif
#if defined(ENABLE_VSELECT) && defined(ENABLE_3V3FIX)
&&
#endif
#if defined(ENABLE_VSELECT)
VOLTS_SET_3V3 == voltage
#endif
) return VOLTS_SUCCESS; // Just return if already as requested
// Adjust clock speed when 3V3FIX is enabled // Adjust clock speed when 3V3FIX is enabled
#if defined(ENABLE_3V3FIX) #if defined(ENABLE_3V3FIX)
#if !defined(enable_serial) && defined(ENABLE_UPDATER) #if !defined(enable_serial) && defined(ENABLE_UPDATER)
ClockedSerial.end(); ClockedSerial.end();
#endif #endif
clock = CS_8MHZ; // Set clock speed
setClockScale(volts); /*[2]*/ clock = CS_8MHZ;
#if !defined(enable_serial) && defined(ENABLE_UPDATER) setClockScale(volts); /*[2]*/
ClockedSerial.begin(UPD_BAUD); #if !defined(enable_serial) && defined(ENABLE_UPDATER)
#endif ClockedSerial.begin(UPD_BAUD);
#endif #endif
#endif
// Adjust voltage high if VSELECT is available // Adjust voltage high if VSELECT is available
#if defined(ENABLE_VSELECT) #if defined(ENABLE_VSELECT)
PORTD |= (1 << 7); /*[1]*/ PORTD |= (1 << 7); /*[1]*/
voltage = VOLTS_SET_3V3; voltage = VOLTS_SET_3V3;
#endif #endif
// Done // Done
return VOLTS_SUCCESS; return VOLTS_SUCCESS;
@ -232,6 +253,9 @@ VOLTS setVoltage(VOLTS volts) {
} }
} }
#else #else
// The compiler will optimize this out when this condition is met.
// Yes, even though it has a return value it will only be compiled
// if something reads that value. Currently nothing does.
VOLTS setVoltage(VOLTS volts __attribute__((unused))) { VOLTS setVoltage(VOLTS volts __attribute__((unused))) {
return VOLTS_NOTENABLED; return VOLTS_NOTENABLED;
} }

View File

@ -70,7 +70,6 @@ static const char *const menuOptionspceTC[] PROGMEM = { pceTCMenuItem1, string_r
// PCE start menu // PCE start menu
void pcsMenu(void) { void pcsMenu(void) {
setVoltage(VOLTS_SET_5V);
// create menu with title and 3 options to choose from // create menu with title and 3 options to choose from
unsigned char pceDev; unsigned char pceDev;
// Copy menuOptions out of progmem // Copy menuOptions out of progmem
@ -171,6 +170,9 @@ void pin_init_PCE(void) {
} }
void setup_cart_PCE(void) { void setup_cart_PCE(void) {
// Request 5V
setVoltage(VOLTS_SET_5V);
// Set cicrstPin(PG1) to Output // Set cicrstPin(PG1) to Output
DDRG |= (1 << 1); DDRG |= (1 << 1);
// Output a high to disable CIC // Output a high to disable CIC
@ -411,6 +413,12 @@ uint32_t detect_rom_size_PCE(void) {
rom_size = 512; rom_size = 512;
} }
} }
if (rom_size == 384) {
//"CD-ROM² Super System Card (v3.0)(Japan)" or "Arcade Card Pro CD-ROM²"
if (read_byte_PCE(0x29D1) == 'V' && read_byte_PCE(0x29D2) == 'E' && read_byte_PCE(0x29D3) == 'R' && read_byte_PCE(0x29D4) == '.' && read_byte_PCE(0x29D5) == ' ' && read_byte_PCE(0x29D6) == '3' && read_byte_PCE(0x29D7) == '.' && read_byte_PCE(0x29D8) == '0' && read_byte_PCE(0x29D9) == '0') {
rom_size = 256;
}
}
return rom_size; return rom_size;
} }

View File

@ -101,6 +101,9 @@ byte bank1;
//****************************************** //******************************************
void setup_PCW() { void setup_PCW() {
// Request 5V
setVoltage(VOLTS_SET_5V);
// Set Address Pins to Output // Set Address Pins to Output
//A8-A15 //A8-A15
DDRK = 0xFF; DDRK = 0xFF;
@ -141,7 +144,6 @@ static const char pcwmenuItem3[] PROGMEM = "Write SRAM";
static const char* const menuOptionsPCW[] PROGMEM = { pcwmenuItem1, pcwmenuItem2, pcwmenuItem3, string_reset2 }; static const char* const menuOptionsPCW[] PROGMEM = { pcwmenuItem1, pcwmenuItem2, pcwmenuItem3, string_reset2 };
void pcwMenu() { void pcwMenu() {
setVoltage(VOLTS_SET_5V);
convertPgm(menuOptionsPCW, 4); convertPgm(menuOptionsPCW, 4);
uint8_t mainMenu = question_box(F(" POCKET CHALLENGE W"), menuOptions, 4, 0); uint8_t mainMenu = question_box(F(" POCKET CHALLENGE W"), menuOptions, 4, 0);
@ -629,7 +631,7 @@ uint32_t detect_rom_size_PCW(void) {
} else if (detect_2m == DETECTION_SIZE) { } else if (detect_2m == DETECTION_SIZE) {
rom_size = 0x200000; rom_size = 0x200000;
} else { } else {
rom_size = 0x400000; rom_size = 0x400000;
} }
return rom_size; return rom_size;

283
Cart_Reader/POKEMINI.ino Normal file
View File

@ -0,0 +1,283 @@
//******************************************
// POKEMON MINI MODULE
//******************************************
#ifdef enable_POKE
// Pokemon Mini
// Cartridge Pinout
// 32P 0.5mm pitch
// NOTE: Console SMD connector - 33P 1.0mm pitch
//
// TOP ROW BOTTOM ROW
// +----------+
// VCC (3.3V) -| B1 |
// | A1 |- VCC (3.3V)
// A20 -| B2 |
// | A2 |- A9/A19
// A8/A18 -| B3 |
// | A3 |- A7/A17
// A6/A16 -| B4 |
// | A4 |- A5/A15
// A4/A14 -| B5 |
// | A5 |- A3/A13
// A2/A12 -| B6 |
// | A6 |- A1/A11
// A0/A10 -| B7 |
// | A7 |- VCC (3.3V)
// HALE -| B8 |
// | -- |
// LALE -| B9 |
// | A8 |- GND
// D0 -| B10 |
// | A9 |- D1
// D2 -| B11 |
// | A10 |- D3
// D4 -| B12 |
// | A11 |- D5
// D6 -| B13 |
// | A12 |- D7
// OE -| B14 |
// | A13 |- IRQ
// WE -| B15 |
// | A14 |- CS
// CARD_N -| B16 |
// | A15 |- GND
// GND -| B17 |
// +----------+
//
// TOP
// +----------------------------------------------------------------------------+
// | B17 B16 B15 B14 B13 B12 B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 |
// LEFT | | RIGHT
// | A15 A14 A13 A12 A11 A10 A9 A8 --- A7 A6 A5 A4 A3 A2 A1 |
// +----------------------------------------------------------------------------+
// BOTTOM
// CONTROL PINS:
// HALE(PH0) - SNES RESET
// CS(PH3) - SNES /CS
// LALE(PH4) - SNES /IRQ
// WE(PH5) - SNES /WR
// OE(PH6) - SNES /RD
// NOTE: SET VOLTAGE TO 3.3V
//******************************************
// Defines
//******************************************
#define HALE_ENABLE PORTH |= (1 << 0) // LATCH HIGH ADDRESS
#define HALE_DISABLE PORTH &= ~(1 << 0)
#define LALE_ENABLE PORTH |= (1 << 4) // LATCH LOW ADDRESS
#define LALE_DISABLE PORTH &= ~(1 << 4)
#define CS_ENABLE PORTH |= (1 << 3) // CHIP SELECT
#define CS_DISABLE PORTH &= ~(1 << 3)
#define WE_ENABLE PORTH |= (1 << 5) // WRITE ENABLE
#define WE_DISABLE PORTH &= ~(1 << 5)
#define OE_ENABLE PORTH |= (1 << 6) // OUTPUT ENABLE
#define OE_DISABLE PORTH &= ~(1 << 6)
//******************************************
// Menu
//******************************************
// Base Menu
static const char pokeMenuItem1[] PROGMEM = "Read ROM";
static const char* const menuOptionsPOKE[] PROGMEM = { pokeMenuItem1, string_reset2 };
void pokeMenu() {
convertPgm(menuOptionsPOKE, 2);
uint8_t mainMenu = question_box(F("POKEMON MINI MENU"), menuOptions, 2, 0);
switch (mainMenu) {
case 0:
// Read ROM
sd.chdir("/");
readROM_POKE();
sd.chdir("/");
break;
case 1:
// reset
resetArduino();
break;
}
}
//******************************************
// SETUP
//******************************************
void setup_POKE() {
// Request 3.3V
setVoltage(VOLTS_SET_3V3);
// Set Address Pins to Output
// Pokemon Mini uses A0-A9 (DUAL A10-A19) + A20 (CONNECT TO SNES A10) [A11-A23 UNUSED]
//A0-A7
DDRF = 0xFF;
//A8-A15
DDRK = 0xFF;
//A16-A23
DDRL = 0xFF;
// Set Control Pins to Output
// LALE(PH0) ---(PH1) CS(PH3) HALE(PH4) WE(PH5) OE(PH6)
DDRH |= (1 << 0) | (1 << 1) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6);
// Set TIME(PJ0) to Output (UNUSED)
DDRJ |= (1 << 0);
// Set Pins (D0-D7) to Input
DDRC = 0x00;
// Setting Control Pins to LOW (DISABLE)
// LALE(PH0) CS(PH3) HALE(PH4) WE(PH5) OE(PH6)
PORTH &= ~(1 << 0) & ~(1 << 3) & ~(1 << 4) & ~(1 << 5) & ~(1 << 6);
// SET CS HIGH
PORTH |= (1 << 3); // CS HIGH (ENABLE)
// Set Unused Data Pins (PA0-PA7) to Output
DDRA = 0xFF;
// Set Unused Pins HIGH
PORTA = 0xFF;
PORTH |= (1 << 1); // CPUCLK(PH1)
PORTL = 0xFF; // A16-A23
PORTJ |= (1 << 0); // TIME(PJ0)
strcpy(romName, "POKEMINI");
mode = mode_POKE;
}
//******************************************
// READ DATA
//******************************************
uint8_t readData_POKE(uint32_t addr) {
// Address Lines A0-A20 = 1MB (ALL ROMS ARE 512K)
// 100000 = 1 0000 0000 0000 0000 0000 = 100 0000 0000|00 0000 0000
// High Address A10-A20
PORTF = (addr >> 10) & 0xFF; // A10-A17
PORTK = (addr >> 18) & 0x07; // A18-A20
HALE_ENABLE; // LATCH HIGH ADDRESS
NOP;
NOP;
HALE_DISABLE;
// Low Address A0-A9
PORTF = addr & 0xFF; // A0-A7
PORTK = (addr >> 8) & 0x03; // A8-A9
LALE_ENABLE; // LATCH LOW ADDRESS
NOP;
NOP;
// Read Enable
OE_ENABLE; // OE HIGH
NOP;
NOP;
NOP;
NOP;
NOP;
// Data
uint8_t ret = PINC;
// Read Disable
OE_DISABLE; // OE LOW
NOP;
NOP;
NOP;
NOP;
LALE_DISABLE;
return ret;
}
//******************************************
// WRITE DATA
//******************************************
void writeData_POKE(uint32_t addr, uint8_t data) {
// High Address A10-A20
PORTF = (addr >> 10) & 0xFF; // A10-A17
PORTK = (addr >> 18) & 0x07; // A18-A20
HALE_ENABLE; // LATCH HIGH ADDRESS
NOP;
NOP;
HALE_DISABLE;
// Low Address A0-A9
PORTF = addr & 0xFF; // A0-A7
PORTK = (addr >> 8) & 0x03; // A8-A9
LALE_ENABLE; // LATCH LOW ADDRESS
// Set Data to Output
DDRC = 0xFF;
PORTC = data;
// Write Enable
WE_ENABLE; // WE HIGH
NOP;
NOP;
NOP;
NOP;
NOP;
// Write Disable
WE_DISABLE; // OE LOW
NOP;
NOP;
NOP;
NOP;
LALE_DISABLE;
// Reset Data to Input
DDRC = 0x00;
}
//******************************************
// READ ROM
//******************************************
void readROM_POKE() {
strcpy(fileName, romName);
strcat(fileName, ".min");
// create a new folder for storing rom file
EEPROM_readAnything(0, foldern);
sprintf(folder, "POKE/ROM/%d", foldern);
sd.mkdir(folder, true);
sd.chdir(folder);
display_Clear();
print_STR(saving_to_STR, 0);
print_Msg(folder);
println_Msg(F("/..."));
display_Update();
// open file on sdcard
if (!myFile.open(fileName, O_RDWR | O_CREAT))
print_FatalError(sd_error_STR);
// write new folder number back to EEPROM
foldern++;
EEPROM_writeAnything(0, foldern);
for (uint32_t addr = 0; addr < 0x80000; addr += 512) { // 512K
for (int w = 0; w < 512; w++) {
uint8_t temp = readData_POKE(addr + w);
sdBuffer[w] = temp;
}
myFile.write(sdBuffer, 512);
}
myFile.close();
calcCRC(fileName, 0x80000, NULL, 0); // 512K
println_Msg(F(""));
// Prints string out of the common strings array either with or without newline
print_STR(press_button_STR, 1);
display_Update();
wait();
}
#endif

View File

@ -50,7 +50,6 @@ static const char sfmGameMenuItem4[] PROGMEM = "Switch Game";
static const char* const menuOptionsSFMGame[] PROGMEM = { sfmGameMenuItem1, sfmGameMenuItem2, sfmGameMenuItem3, sfmGameMenuItem4, string_reset2 }; static const char* const menuOptionsSFMGame[] PROGMEM = { sfmGameMenuItem1, sfmGameMenuItem2, sfmGameMenuItem3, sfmGameMenuItem4, string_reset2 };
void sfmMenu() { void sfmMenu() {
setVoltage(VOLTS_SET_5V);
// create menu with title and 3 options to choose from // create menu with title and 3 options to choose from
unsigned char mainMenu; unsigned char mainMenu;
// Copy menuOptions out of progmem // Copy menuOptions out of progmem
@ -525,6 +524,9 @@ void getGames(char gameCode[8][20], boolean* hasMenu, byte* numGames) {
Setup Setup
*****************************************/ *****************************************/
void setup_SFM() { void setup_SFM() {
// Request 5V
setVoltage(VOLTS_SET_5V);
// Set cicrstPin(PG1) to Output // Set cicrstPin(PG1) to Output
DDRG |= (1 << 1); DDRG |= (1 << 1);
// Output a high signal to disable snesCIC // Output a high signal to disable snesCIC

View File

@ -26,31 +26,30 @@ static const char SMSRomSizeItem1[] PROGMEM = "8 KB";
static const char SMSRomSizeItem2[] PROGMEM = "16 KB"; static const char SMSRomSizeItem2[] PROGMEM = "16 KB";
static const char SMSRomSizeItem3[] PROGMEM = "24 KB"; static const char SMSRomSizeItem3[] PROGMEM = "24 KB";
static const char SMSRomSizeItem4[] PROGMEM = "32 KB"; static const char SMSRomSizeItem4[] PROGMEM = "32 KB";
static const char SMSRomSizeItem5[] PROGMEM = "40 KB"; //SG-1000 40k mapping not yet supported static const char SMSRomSizeItem5[] PROGMEM = "40 KB"; //SG-1000 40k mapping not yet supported
static const char SMSRomSizeItem6[] PROGMEM = "48 KB"; //SG-1000 40k mapping not yet supported static const char SMSRomSizeItem6[] PROGMEM = "48 KB"; //SG-1000 40k mapping not yet supported
static const char SMSRomSizeItem7[] PROGMEM = "64 KB"; static const char SMSRomSizeItem7[] PROGMEM = "64 KB";
static const char SMSRomSizeItem8[] PROGMEM = "128 KB"; static const char SMSRomSizeItem8[] PROGMEM = "128 KB";
static const char SMSRomSizeItem9[] PROGMEM = "256 KB"; static const char SMSRomSizeItem9[] PROGMEM = "256 KB";
static const char SMSRomSizeItem10[] PROGMEM = "512 KB"; static const char SMSRomSizeItem10[] PROGMEM = "512 KB";
static const char SMSRomSizeItem11[] PROGMEM = "1024 KB"; static const char SMSRomSizeItem11[] PROGMEM = "1024 KB";
static const char* const SG1RomSizeMenu[] PROGMEM = { SMSRomSizeItem1, SMSRomSizeItem2, SMSRomSizeItem3, SMSRomSizeItem4}; // Rom sizes for SG-1000 static const char* const SG1RomSizeMenu[] PROGMEM = { SMSRomSizeItem1, SMSRomSizeItem2, SMSRomSizeItem3, SMSRomSizeItem4 }; // Rom sizes for SG-1000
static const char* const SMSRomSizeMenu[] PROGMEM = { SMSRomSizeItem4, SMSRomSizeItem7, SMSRomSizeItem8, SMSRomSizeItem9, SMSRomSizeItem10, SMSRomSizeItem11}; // Rom sizes for SMS and GG static const char* const SMSRomSizeMenu[] PROGMEM = { SMSRomSizeItem4, SMSRomSizeItem7, SMSRomSizeItem8, SMSRomSizeItem9, SMSRomSizeItem10, SMSRomSizeItem11 }; // Rom sizes for SMS and GG
// Init systems // Init systems
static bool system_sms = false; // SMS or MarkIII static bool system_sms = false; // SMS or MarkIII
static bool system_gg = false; // GameGear static bool system_gg = false; // GameGear
static bool system_sg1000 = false; // SG-1000 static bool system_sg1000 = false; // SG-1000
// Init adapters // Init adapters
static bool adapter_raphnet = false; // raphet adapater (SMS-to-MD or MIII-to-MD) static bool adapter_raphnet = false; // raphet adapater (SMS-to-MD or MIII-to-MD)
static bool adapter_retrode = false; // Retrode adapter (SMS-to-MD or GG-to-MD) static bool adapter_retrode = false; // Retrode adapter (SMS-to-MD or GG-to-MD)
static bool adapter_retron = false; // Retron 3in1 adapter (SMS-to-MD or GG-to-MD) static bool adapter_retron = false; // Retron 3in1 adapter (SMS-to-MD or GG-to-MD)
//********************************************************* //*********************************************************
// Main menu with systems/adapters setups to choose from // Main menu with systems/adapters setups to choose from
//********************************************************* //*********************************************************
void smsMenu() { void smsMenu() {
setVoltage(VOLTS_SET_5V);
unsigned char SMSSetup; unsigned char SMSSetup;
convertPgm(SMSAdapterMenu, 6); convertPgm(SMSAdapterMenu, 6);
SMSSetup = question_box(F("Select your setup"), menuOptions, 6, 0); SMSSetup = question_box(F("Select your setup"), menuOptions, 6, 0);
@ -62,7 +61,7 @@ void smsMenu() {
adapter_raphnet = true; adapter_raphnet = true;
break; break;
case 1: case 1:
// SMS with Retrode adapter // SMS with Retrode adapter
system_sms = true; system_sms = true;
adapter_retrode = true; adapter_retrode = true;
@ -156,6 +155,9 @@ void smsOperations() {
// Setup I/O // Setup I/O
//******************************** //********************************
void setup_SMS() { void setup_SMS() {
// Request 5V
setVoltage(VOLTS_SET_5V);
// Set Address Pins to Output // Set Address Pins to Output
//A0-A7 //A0-A7
DDRF = 0xFF; DDRF = 0xFF;
@ -178,7 +180,7 @@ void setup_SMS() {
PORTH |= (1 << 6); PORTH |= (1 << 6);
// Setting WR(PL5) and RD(PL6) HIGH // Setting WR(PL5) and RD(PL6) HIGH
PORTL |= (1 << 5) | (1 << 6); PORTL |= (1 << 5) | (1 << 6);
} }
// For Raphnet and Retron adapters // For Raphnet and Retron adapters
else { else {
@ -215,7 +217,7 @@ void setup_SMS() {
} }
//***************************************** //*****************************************
// Low level functions // Low level functions
//***************************************** //*****************************************
void writeByte_SMS(word myAddress, byte myData) { void writeByte_SMS(word myAddress, byte myData) {
if (adapter_retrode && system_gg) { if (adapter_retrode && system_gg) {
@ -354,7 +356,7 @@ byte readNibble(byte data, byte number) {
//***************************************** //*****************************************
// Cartridges functions // Cartridges functions
//***************************************** //*****************************************
void getCartInfo_SMS() { void getCartInfo_SMS() {
// Get rom size // Get rom size
switch (readNibble(readByte_SMS(0x7FFF), 0)) { switch (readNibble(readByte_SMS(0x7FFF), 0)) {
// Adding UL gets rid of integer overflow compiler warning // Adding UL gets rid of integer overflow compiler warning
@ -450,7 +452,7 @@ void getCartInfo_SMS() {
} }
// If "TMR SEGA" header is not found // If "TMR SEGA" header is not found
if (strcmp(romName, "TMR SEGA") != 0) { if (strcmp(romName, "TMR SEGA") != 0) {
// Set rom size manually // Set rom size manually
unsigned char SMSRomSize; unsigned char SMSRomSize;
@ -460,23 +462,23 @@ void getCartInfo_SMS() {
SMSRomSize = question_box(F("Select ROM size"), menuOptions, 4, 0); SMSRomSize = question_box(F("Select ROM size"), menuOptions, 4, 0);
switch (SMSRomSize) { switch (SMSRomSize) {
case 0: case 0:
cartSize = 8 * 1024UL; // 8KB cartSize = 8 * 1024UL; // 8KB
break; break;
case 1: case 1:
cartSize = 16 * 1024UL; // 16KB cartSize = 16 * 1024UL; // 16KB
break; break;
case 2: case 2:
cartSize = 24 * 1024UL; // 24KB cartSize = 24 * 1024UL; // 24KB
break; break;
case 3: case 3:
cartSize = 32 * 1024UL; // 32KB cartSize = 32 * 1024UL; // 32KB
break; break;
//case 4: //case 4:
// cartSize = 40 * 1024UL; // 40KB // cartSize = 40 * 1024UL; // 40KB
// break; // break;
//case 5: //case 5:
// cartSize = 48 * 1024UL; // 48KB // cartSize = 48 * 1024UL; // 48KB
// break; // break;
} }
} else { } else {
// Rom sizes for SMS and GG // Rom sizes for SMS and GG
@ -484,22 +486,22 @@ void getCartInfo_SMS() {
SMSRomSize = question_box(F("Select ROM size"), menuOptions, 6, 0); SMSRomSize = question_box(F("Select ROM size"), menuOptions, 6, 0);
switch (SMSRomSize) { switch (SMSRomSize) {
case 0: case 0:
cartSize = 32 * 1024UL; // 32KB cartSize = 32 * 1024UL; // 32KB
break; break;
case 1: case 1:
cartSize = 64 * 1024UL; // 64KB cartSize = 64 * 1024UL; // 64KB
break; break;
case 2: case 2:
cartSize = 128 * 1024UL; // 128KB cartSize = 128 * 1024UL; // 128KB
break; break;
case 3: case 3:
cartSize = 256 * 1024UL; // 256KB cartSize = 256 * 1024UL; // 256KB
break; break;
case 4: case 4:
cartSize = 512 * 1024UL; // 512KB cartSize = 512 * 1024UL; // 512KB
break; break;
case 5: case 5:
cartSize = 1024 * 1024UL; // 1MB cartSize = 1024 * 1024UL; // 1MB
break; break;
} }
} }
@ -534,13 +536,13 @@ void getCartInfo_SMS() {
println_Msg(F(" ")); println_Msg(F(" "));
} }
// Wait for user input // Wait for user input
#if (defined(enable_LCD) || defined(enable_OLED)) #if (defined(enable_LCD) || defined(enable_OLED))
// Prints string out of the common strings array either with or without newline // Prints string out of the common strings array either with or without newline
print_STR(press_button_STR, 1); print_STR(press_button_STR, 1);
display_Update(); display_Update();
wait(); wait();
#endif #endif
// Turn off LED // Turn off LED
setColor_RGB(0, 0, 0); setColor_RGB(0, 0, 0);
@ -647,9 +649,9 @@ void readROM_SMS() {
compareCRC("sg1000.txt", 0, 1, 0); compareCRC("sg1000.txt", 0, 1, 0);
} }
#ifdef global_log #ifdef global_log
save_log(); save_log();
#endif #endif
print_STR(press_button_STR, 1); print_STR(press_button_STR, 1);
} }
@ -709,7 +711,7 @@ void readSRAM_SMS() {
print_STR(press_button_STR, 1); print_STR(press_button_STR, 1);
display_Update(); display_Update();
} else { } else {
print_FatalError(sd_error_STR); print_FatalError(sd_error_STR);
} }
} }

View File

@ -70,7 +70,6 @@ static const char* const menuOptionsRepro[] PROGMEM = { reproMenuItem1, reproMen
// SNES repro menu // SNES repro menu
void reproMenu() { void reproMenu() {
setVoltage(VOLTS_SET_5V);
// create menu with title and 6 options to choose from // create menu with title and 6 options to choose from
unsigned char snsRepro; unsigned char snsRepro;
// Copy menuOptions out of progmem // Copy menuOptions out of progmem
@ -133,7 +132,6 @@ void reproMenu() {
// SNES start menu // SNES start menu
void snsMenu() { void snsMenu() {
setVoltage(VOLTS_SET_5V);
// create menu with title and 6 options to choose from // create menu with title and 6 options to choose from
unsigned char snsCart; unsigned char snsCart;
// Copy menuOptions out of progmem // Copy menuOptions out of progmem
@ -174,6 +172,7 @@ void snsMenu() {
#ifdef enable_FLASH #ifdef enable_FLASH
case 3: case 3:
setup_FlashVoltage();
reproMenu(); reproMenu();
break; break;
#endif #endif
@ -192,7 +191,6 @@ void snsMenu() {
// SNES Menu // SNES Menu
void snesMenu() { void snesMenu() {
setVoltage(VOLTS_SET_5V);
// create menu with title and 7 options to choose from // create menu with title and 7 options to choose from
unsigned char mainMenu; unsigned char mainMenu;
// Copy menuOptions out of progmem // Copy menuOptions out of progmem
@ -388,6 +386,9 @@ void stopSnesClocks_resetCic_resetCart() {
Setup Setup
*****************************************/ *****************************************/
void setup_Snes() { void setup_Snes() {
// Request 5V
setVoltage(VOLTS_SET_5V);
// Set cicrstPin(PG1) to Output // Set cicrstPin(PG1) to Output
DDRG |= (1 << 1); DDRG |= (1 << 1);
// Output a high signal until we're ready to start // Output a high signal until we're ready to start

View File

@ -17,6 +17,7 @@ static const char acanMenuItem6[] PROGMEM = "Flash repro";
static const char *const menuOptionsAcan[] PROGMEM = { acanMenuItem1, acanMenuItem2, acanMenuItem3, acanMenuItem4, acanMenuItem5, string_reset2, acanMenuItem6 }; static const char *const menuOptionsAcan[] PROGMEM = { acanMenuItem1, acanMenuItem2, acanMenuItem3, acanMenuItem4, acanMenuItem5, string_reset2, acanMenuItem6 };
void setup_SuprAcan() { void setup_SuprAcan() {
// Request 5V
setVoltage(VOLTS_SET_5V); setVoltage(VOLTS_SET_5V);
// addr as output // addr as output

View File

@ -42,7 +42,6 @@ static const char* const menuOptionsSVFlash[] PROGMEM = { svFlashMenuItem1, svFl
void svMenu() { void svMenu() {
setVoltage(VOLTS_SET_5V);
// create menu with title and 3 options to choose from // create menu with title and 3 options to choose from
unsigned char mainMenu; unsigned char mainMenu;
// Copy menuOptions out of progmem // Copy menuOptions out of progmem
@ -102,6 +101,9 @@ void svMenu() {
Setup Setup
*****************************************/ *****************************************/
void setup_SV() { void setup_SV() {
// Request 5V
setVoltage(VOLTS_SET_5V);
// Set cicrstPin(PG1) to Output // Set cicrstPin(PG1) to Output
DDRG |= (1 << 1); DDRG |= (1 << 1);
// Output a high signal until we're ready to start // Output a high signal until we're ready to start

View File

@ -56,6 +56,9 @@
//****************************************** //******************************************
void setup_VBOY() { void setup_VBOY() {
// Request 5V
setVoltage(VOLTS_SET_5V);
// Set Address Pins to Output // Set Address Pins to Output
//A0-A7 //A0-A7
DDRF = 0xFF; DDRF = 0xFF;
@ -101,7 +104,6 @@ static const char vboyMenuItem3[] PROGMEM = "Write SRAM";
static const char* const menuOptionsVBOY[] PROGMEM = { vboyMenuItem1, vboyMenuItem2, vboyMenuItem3, string_reset2 }; static const char* const menuOptionsVBOY[] PROGMEM = { vboyMenuItem1, vboyMenuItem2, vboyMenuItem3, string_reset2 };
void vboyMenu() { void vboyMenu() {
setVoltage(VOLTS_SET_5V);
convertPgm(menuOptionsVBOY, 4); convertPgm(menuOptionsVBOY, 4);
uint8_t mainMenu = question_box(F("VIRTUALBOY MENU"), menuOptions, 4, 0); uint8_t mainMenu = question_box(F("VIRTUALBOY MENU"), menuOptions, 4, 0);

View File

@ -46,6 +46,9 @@ static uint8_t wsEepromShiftReg[2];
static boolean wsWitch = false; static boolean wsWitch = false;
void setup_WS() { void setup_WS() {
// Request 3.3V
setVoltage(VOLTS_SET_3V3);
// A-1 - A6 // A-1 - A6
DDRF = 0xff; DDRF = 0xff;
// A7 - A14 // A7 - A14
@ -117,7 +120,6 @@ static boolean headerCheck() {
} }
void wsMenu() { void wsMenu() {
setVoltage(VOLTS_SET_3V3);
uint8_t mainMenu = (wsWitch ? 5 : 4); uint8_t mainMenu = (wsWitch ? 5 : 4);
convertPgm(menuOptionsWS, mainMenu); convertPgm(menuOptionsWS, mainMenu);

View File

@ -53,6 +53,9 @@ byte newwsvsize;
//****************************************** //******************************************
void setup_WSV() { void setup_WSV() {
// Request 3.3V
setVoltage(VOLTS_SET_3V3);
// Set Address Pins to Output // Set Address Pins to Output
//A0-A7 //A0-A7
DDRF = 0xFF; DDRF = 0xFF;
@ -106,7 +109,6 @@ static const char wsvMenuItem3[] PROGMEM = "Set Size";
static const char* const menuOptionsSV[] PROGMEM = { wsvMenuItem1, wsvMenuItem2, wsvMenuItem3, string_reset2 }; static const char* const menuOptionsSV[] PROGMEM = { wsvMenuItem1, wsvMenuItem2, wsvMenuItem3, string_reset2 };
void wsvMenu() { void wsvMenu() {
setVoltage(VOLTS_SET_3V3);
convertPgm(menuOptionsSV, 4); convertPgm(menuOptionsSV, 4);
uint8_t mainMenu = question_box(F("SUPERVISION MENU"), menuOptions, 4, 0); uint8_t mainMenu = question_box(F("SUPERVISION MENU"), menuOptions, 4, 0);

View File

@ -50,6 +50,8 @@ Happy making. 🔧🔨😊
- Fairchild Channel F - Fairchild Channel F
- Magnavox Odyssey 2 - Magnavox Odyssey 2
- Super A'Can - Super A'Can
- MSX
- Pokemon Mini
#### Open Source Licenses: #### Open Source Licenses:
- Software(everything in Cart_Reader folder) = GPL v3 - Software(everything in Cart_Reader folder) = GPL v3

View File

@ -78,11 +78,6 @@ BA58ED29,716956B4,4E45531A100010080000070700000001
Name Name
CRC32 (prg+chr combined), CRC32 (512 bytes), iNES Header CRC32 (prg+chr combined), CRC32 (512 bytes), iNES Header
## nes20db.txt
This file stores NES 2.0 data about NES ROMs, generated from [NewRisingSun's nes20db XML file on NesDev](https://forums.nesdev.org/viewtopic.php?t=19940). Converting updated versions of the XML file to this format requires compiling and running [NES20Tool](https://github.com/Kreeblah/NES20Tool) with the following options at runtime:
NES20Tool -operation transform -xml-file nes20db.xml -xml-format nes20db -format-transform-type sanni -format-transform-destination nes20db.txt
## snes.txt ## snes.txt
This file is needed for odd sized SNES games like Final Fantasy (JAP), Super Metroid(US/JAP) or Tales of Symphonia. Without this file you will get overdumps and the checksum calculation will fail. This file is needed for odd sized SNES games like Final Fantasy (JAP), Super Metroid(US/JAP) or Tales of Symphonia. Without this file you will get overdumps and the checksum calculation will fail.

View File

@ -1,494 +1,494 @@
32 in 1,240,0 32 in 1,240,0
3-D Tic-Tac-Toe,32,15 3-D Tic-Tac-Toe,32,15
Acid Drop,246,23 Acid Drop,246,23
Action Force,64,18 Action Force,64,18
Adventure,64,20 Adventure,64,20
Adventures of TRON,64,17 Adventures of TRON,64,17
Air Raid,64,26 Air Raid,64,26
Air Raiders,64,16 Air Raiders,64,16
Airlock,64,19 Airlock,64,19
Air-Sea Battle,32,15 Air-Sea Battle,32,15
AKA Space Adventure,64,22 AKA Space Adventure,64,22
Alien,64,27 Alien,64,27
Alpha Beam with Ernie,248,13 Alpha Beam with Ernie,248,13
Amidar,64,30 Amidar,64,30
Armor Ambush,64,14 Armor Ambush,64,14
Artillery Duel,248,20 Artillery Duel,248,20
Assault,64,23 Assault,64,23
Asterix,248,15 Asterix,248,15
Asteroids,248,16 Asteroids,248,16
Astroblast,64,18 Astroblast,64,18
Atari Video Cube,64,18 Atari Video Cube,64,18
Atlantis,64,24 Atlantis,64,24
Atlantis II,64,16 Atlantis II,64,16
Bachelor Party,64,19 Bachelor Party,64,19
Bachelorette Party,64,22 Bachelorette Party,64,22
Backgammon,64,26 Backgammon,64,26
Bank Heist,64,18 Bank Heist,64,18
Barnstorming,64,18 Barnstorming,64,18
Base Attack,64,20 Base Attack,64,20
Basic Math,32,19 Basic Math,32,19
BASIC Programming,64,18 BASIC Programming,64,18
Basketball,32,25 Basketball,32,25
Battlezone,248,18 Battlezone,248,18
Beamrider,248,19 Beamrider,248,19
Beany Bopper,64,18 Beany Bopper,64,18
Beat 'Em & Eat 'Em,64,20 Beat 'Em & Eat 'Em,64,20
Berenstain Bears,248,26 Berenstain Bears,248,26
Bermuda,64,25 Bermuda,64,25
Bermuda Triangle,64,15 Bermuda Triangle,64,15
Berzerk,64,24 Berzerk,64,24
Big Bird's Egg Catch,248,15 Big Bird's Egg Catch,248,15
Blackjack,32,29 Blackjack,32,29
Blueprint,248,17 Blueprint,248,17
BMX Air Master,246,18 BMX Air Master,246,18
Bobby Is Going Home,64,23 Bobby Is Going Home,64,23
Boing!,64,27 Boing!,64,27
Bowling,32,14 Bowling,32,14
Boxing,32,15 Boxing,32,15
Brain Games,32,14 Brain Games,32,14
Breakout,32,19 Breakout,32,19
Bridge,64,16 Bridge,64,16
Buck Rogers - Planet of Zoom,248,14 Buck Rogers - Planet of Zoom,248,14
Bugs,64,37 Bugs,64,37
Bump 'n' Jump,231,12 Bump 'n' Jump,231,12
Bumper Bash,64,22 Bumper Bash,64,22
BurgerTime,231,19 BurgerTime,231,19
Burning Desire,64,19 Burning Desire,64,19
Cakewalk,64,22 Cakewalk,64,22
California Games,246,16 California Games,246,16
Canyon Bomber,32,25 Canyon Bomber,32,25
Carnival,64,21 Carnival,64,21
Casino,64,16 Casino,64,16
Cat Trax,64,14 Cat Trax,64,14
Cathouse Blues,64,16 Cathouse Blues,64,16
Centipede,248,22 Centipede,248,22
Challenge,248,18 Challenge,248,18
Challenge of.... Nexar,64,18 Challenge of.... Nexar,64,18
Chase the Chuckwagon,64,30 Chase the Chuckwagon,64,30
Checkers,32,28 Checkers,32,28
China Syndrome,64,16 China Syndrome,64,16
Chopper Command,64,22 Chopper Command,64,22
Chuck Norris Superkicks,248,23 Chuck Norris Superkicks,248,23
Circus Atari,64,32 Circus Atari,64,32
Coco Nuts,64,20 Coco Nuts,64,20
Codebreaker,32,17 Codebreaker,32,17
Combat,32,19 Combat,32,19
Commando,246,14 Commando,246,14
Commando Raid,64,17 Commando Raid,64,17
Condor Attack,64,21 Condor Attack,64,21
Confrontation,64,21 Confrontation,64,21
Congo Bongo,248,21 Congo Bongo,248,21
Cookie Monster Munch,248,20 Cookie Monster Munch,248,20
Cosmic Ark,64,29 Cosmic Ark,64,29
Cosmic Commuter,64,18 Cosmic Commuter,64,18
Cosmic Corridor,64,23 Cosmic Corridor,64,23
Cosmic Creeps,64,23 Cosmic Creeps,64,23
Cosmic Swarm,32,21 Cosmic Swarm,32,21
Crackpots,64,20 Crackpots,64,20
Crash Dive,64,17 Crash Dive,64,17
Crazy Climber,248,18 Crazy Climber,248,18
Cross Force,64,22 Cross Force,64,22
Crossbow,246,19 Crossbow,246,19
Crypts of Chaos,64,17 Crypts of Chaos,64,17
Crystal Castles,246,23 Crystal Castles,246,23
Cubicolor,64,24 Cubicolor,64,24
Cubo Magico,64,17 Cubo Magico,64,17
Custer's Revenge,64,19 Custer's Revenge,64,19
Dancing Plate,64,24 Dancing Plate,64,24
Dark Cavern,64,21 Dark Cavern,64,21
Dark Chambers,246,19 Dark Chambers,246,19
Dark Mage,248,22 Dark Mage,248,22
Deadly Duck,64,18 Deadly Duck,64,18
Death Trap,64,19 Death Trap,64,19
Decathlon,254,18 Decathlon,254,18
Defender,64,18 Defender,64,18
Defender II,248,16 Defender II,248,16
Demolition Herby,64,20 Demolition Herby,64,20
Demon Attack,64,24 Demon Attack,64,24
Demons to Diamonds,64,20 Demons to Diamonds,64,20
Desert Falcon,246,26 Desert Falcon,246,26
Dice Puzzle,64,22 Dice Puzzle,64,22
Dig Dug,246,19 Dig Dug,246,19
Dishaster,64,16 Dishaster,64,16
Dodge 'Em,64,17 Dodge 'Em,64,17
Dolphin,64,17 Dolphin,64,17
Donald Duck's Speedboat,248,15 Donald Duck's Speedboat,248,15
Donkey Kong,64,32 Donkey Kong,64,32
Donkey Kong Jr,248,19 Donkey Kong Jr,248,19
Double Dragon,246,23 Double Dragon,246,23
Double Dunk,246,22 Double Dunk,246,22
Dragon Defender,64,20 Dragon Defender,64,20
Dragonfire,64,23 Dragonfire,64,23
Dragster,32,18 Dragster,32,18
Dukes of Hazzard,246,16 Dukes of Hazzard,246,16
E.T.,248,25 E.T.,248,25
Earth Dies Screaming,64,13 Earth Dies Screaming,64,13
Eggomania,64,28 Eggomania,64,28
Elevator Action,248,17 Elevator Action,248,17
Eli's Ladder,64,24 Eli's Ladder,64,24
Encounter at L-5,64,20 Encounter at L-5,64,20
Enduro,64,24 Enduro,64,24
Entombed,64,14 Entombed,64,14
Espial,63,16 Espial,63,16
Exocet,64,14 Exocet,64,14
Extra Terrestrials,64,14 Extra Terrestrials,64,14
Fantastic Voyage,64,26 Fantastic Voyage,64,26
Farmyard Fun,64,24 Farmyard Fun,64,24
Fast Eddie,64,20 Fast Eddie,64,20
Fast Food,64,18 Fast Food,64,18
Fatal Run,244,17 Fatal Run,244,17
Fathom,248,18 Fathom,248,18
Fighter Pilot,246,15 Fighter Pilot,246,15
Final Approach,64,22 Final Approach,64,22
Fire Fighter,64,22 Fire Fighter,64,22
Fire Fly,64,20 Fire Fly,64,20
Fishing Derby,32,16 Fishing Derby,32,16
Flag Capture,32,21 Flag Capture,32,21
Flash Gordon,64,20 Flash Gordon,64,20
Football,32,20 Football,32,20
Forest,64,16 Forest,64,16
Frankenstein's Monster,64,14 Frankenstein's Monster,64,14
Freeway,32,30 Freeway,32,30
Frisco,64,15 Frisco,64,15
Frog Pond,248,14 Frog Pond,248,14
Frogger,64,18 Frogger,64,18
Frogger II,224,15 Frogger II,224,15
Frogs and Flies,64,19 Frogs and Flies,64,19
Front Line,248,23 Front Line,248,23
Frostbite,64,19 Frostbite,64,19
G.I. Joe,64,17 G.I. Joe,64,17
Galaxian,248,16 Galaxian,248,16
Gamma Attack,32,17 Gamma Attack,32,17
Gangster Alley,64,20 Gangster Alley,64,20
Gas Hog,64,22 Gas Hog,64,22
Gauntlet,64,15 Gauntlet,64,15
Ghost Manor,248,16 Ghost Manor,248,16
Ghostbusters,248,20 Ghostbusters,248,20
Ghostbusters II,246,21 Ghostbusters II,246,21
Gigolo,64,24 Gigolo,64,24
Glacier Patrol,64,14 Glacier Patrol,64,14
Glib,64,22 Glib,64,22
Golf,32,12 Golf,32,12
Gopher,64,12 Gopher,64,12
Gorf,64,14 Gorf,64,14
Grand Prix,246,12 Grand Prix,246,12
Gravitar,248,19 Gravitar,248,19
Great Escape,64,17 Great Escape,64,17
Gremlins,248,20 Gremlins,248,20
Guardian,64,17 Guardian,64,17
Gyruss,224,16 Gyruss,224,16
H.E.R.O.,248,15 H.E.R.O.,248,15
Halloween,64,17 Halloween,64,17
Hangman,64,17 Hangman,64,17
Harbor Escape,64,15 Harbor Escape,64,15
Haunted House,64,21 Haunted House,64,21
Hole Hunter,64,21 Hole Hunter,64,21
Home Run,32,19 Home Run,32,19
Human Cannonball,32,16 Human Cannonball,32,16
Hunt & Score,32,24 Hunt & Score,32,24
I Want My Mommy,64,20 I Want My Mommy,64,20
Ice Hockey,64,23 Ice Hockey,64,23
Ikari Warriors,246,18 Ikari Warriors,246,18
Indy 500,32,23 Indy 500,32,23
Infiltrate,64,16 Infiltrate,64,16
International Soccer,64,18 International Soccer,64,18
IQ 180,64,28 IQ 180,64,28
James Bond 007,224,14 James Bond 007,224,14
Jaw Breaker,64,23 Jaw Breaker,64,23
Journey Escape,64,19 Journey Escape,64,19
Joust,248,22 Joust,248,22
JoustPong,64,14 JoustPong,64,14
Jr. Pac-Man,246,17 Jr. Pac-Man,246,17
Jungle Fever,64,20 Jungle Fever,64,20
Jungle Hunt,248,20 Jungle Hunt,248,20
Kaboom!,32,20 Kaboom!,32,20
Kangaroo,248,15 Kangaroo,248,15
Karate,64,17 Karate,64,17
Keystone Kapers,64,14 Keystone Kapers,64,14
King Kong,64,23 King Kong,64,23
Klax,246,17 Klax,246,17
Knight on the Town,64,13 Knight on the Town,64,13
Kool-Aid Man,64,26 Kool-Aid Man,64,26
Krull,248,20 Krull,248,20
Kung Fu Superkicks,248,14 Kung Fu Superkicks,248,14
Kung-Fu Master,248,27 Kung-Fu Master,248,27
Lady in Wading,64,23 Lady in Wading,64,23
Laser Blast,32,22 Laser Blast,32,22
Laser Gates,64,19 Laser Gates,64,19
Lilly Advenure,64,19 Lilly Advenure,64,19
Lochjaw,64,22 Lochjaw,64,22
Lock 'n' Chase,64,15 Lock 'n' Chase,64,15
London Blitz,64,22 London Blitz,64,22
Lost Luggage,64,20 Lost Luggage,64,20
M.A.D.,64,20 M.A.D.,64,20
M.A.S.H,64,14 M.A.S.H,64,14
MagiCard,192,15 MagiCard,192,15
Malagai,64,17 Malagai,64,17
Mangia',64,15 Mangia',64,15
Marauder,64,15 Marauder,64,15
Marine Wars,64,16 Marine Wars,64,16
Mario Bros.,248,19 Mario Bros.,248,19
Master Builder,64,20 Master Builder,64,20
Masters of the Universe,231,22 Masters of the Universe,231,22
Math Gran Prix,64,32 Math Gran Prix,64,32
Maze Craze,64,22 Maze Craze,64,22
Mega Force,64,18 Mega Force,64,18
MegaBoy,240,18 MegaBoy,240,18
MegaMania,64,16 MegaMania,64,16
Midnight Magic,246,17 Midnight Magic,246,17
Millipede,246,23 Millipede,246,23
Mind Maze,248,18 Mind Maze,248,18
Miner 2049er,63,18 Miner 2049er,63,18
Miner 2049er Volume II,63,20 Miner 2049er Volume II,63,20
Mines of Minos,64,30 Mines of Minos,64,30
Miniature Golf,32,22 Miniature Golf,32,22
Miss Piggy's Wedding,248,22 Miss Piggy's Wedding,248,22
Missile Command,64,29 Missile Command,64,29
Missile Control,64,23 Missile Control,64,23
Mission 3000 A.D.,64,23 Mission 3000 A.D.,64,23
Mission Survive,64,25 Mission Survive,64,25
Mogul Maniac,64,23 Mogul Maniac,64,23
Montezuma's Revenge,224,20 Montezuma's Revenge,224,20
Moon Patrol,248,28 Moon Patrol,248,28
Moonsweeper,248,20 Moonsweeper,248,20
Motocross,64,20 Motocross,64,20
Motocross Racer,248,17 Motocross Racer,248,17
MotoRodeo,246,24 MotoRodeo,246,24
Mountain King,250,18 Mountain King,250,18
Mouse Trap,64,22 Mouse Trap,64,22
Mr. Do!,248,18 Mr. Do!,248,18
Mr. Do!'s Castle,224,16 Mr. Do!'s Castle,224,16
Mr. Postman,64,25 Mr. Postman,64,25
Ms. Pac-Man,248,19 Ms. Pac-Man,248,19
Music Machine,64,20 Music Machine,64,20
My Golf,248,21 My Golf,248,21
Name This Game,64,16 Name This Game,64,16
Night Driver,32,22 Night Driver,32,22
Night Stalker,64,20 Night Stalker,64,20
Nightmare,64,21 Nightmare,64,21
No Escape!,64,17 No Escape!,64,17
Nuts,64,18 Nuts,64,18
Obelix,248,12 Obelix,248,12
Off the Wall,246,15 Off the Wall,246,15
Oink!,64,21 Oink!,64,21
Omega Race,250,13 Omega Race,250,13
Open Sesame,64,19 Open Sesame,64,19
Oscar's Trash Race,248,19 Oscar's Trash Race,248,19
Othello,32,27 Othello,32,27
Out of Control,64,15 Out of Control,64,15
Outlaw,32,22 Outlaw,32,22
Pac-Kong,64,14 Pac-Kong,64,14
Pac-Man,64,16 Pac-Man,64,16
Panda Chase,64,15 Panda Chase,64,15
Parachute,64,19 Parachute,64,19
Pele's Soccer,64,17 Pele's Soccer,64,17
Pengo,248,21 Pengo,248,21
Pepsi Invaders,64,14 Pepsi Invaders,64,14
Pete Rose Baseball,246,22 Pete Rose Baseball,246,22
Phantom Tank,64,27 Phantom Tank,64,27
Pharaoh's Curse,64,20 Pharaoh's Curse,64,20
Philly Flasher,64,23 Philly Flasher,64,23
Phoenix,248,22 Phoenix,248,22
Pick 'n' Pile,246,16 Pick 'n' Pile,246,16
Picnic,64,22 Picnic,64,22
Piece o' Cake,64,14 Piece o' Cake,64,14
Pigs in Space,248,21 Pigs in Space,248,21
Pitfall II,208,22 Pitfall II,208,22
Pitfall!,64,19 Pitfall!,64,19
Planet Patrol,64,16 Planet Patrol,64,16
Plaque Attack,64,21 Plaque Attack,64,21
Polaris,63,21 Polaris,63,21
Pole Position,248,15 Pole Position,248,15
Polo,32,22 Polo,32,22
Pompeii,64,12 Pompeii,64,12
Pooyan,64,15 Pooyan,64,15
Popeye,224,14 Popeye,224,14
Porky's,248,15 Porky's,248,15
Pressure Cooker,248,16 Pressure Cooker,248,16
Private Eye,248,24 Private Eye,248,24
Pyramid War,64,20 Pyramid War,64,20
Q-bert,64,19 Q-bert,64,19
Q-bert's Qubes,224,14 Q-bert's Qubes,224,14
Quadrun,248,23 Quadrun,248,23
Quest for Quintana Roo,248,16 Quest for Quintana Roo,248,16
Quick Step!,64,31 Quick Step!,64,31
Rabbit Transit,248,19 Rabbit Transit,248,19
Racing Car,64,23 Racing Car,64,23
Racquetball,64,18 Racquetball,64,18
Radar Lock,246,19 Radar Lock,246,19
Raft Rider,64,19 Raft Rider,64,19
Raiders of the Lost Ark,248,18 Raiders of the Lost Ark,248,18
Ram It,64,32 Ram It,64,32
Rampage!,246,14 Rampage!,246,14
Raumpatrouille,64,17 Raumpatrouille,64,17
Reactor,64,22 Reactor,64,22
RealSports Baseball,248,15 RealSports Baseball,248,15
RealSports Boxing,246,28 RealSports Boxing,246,28
RealSports Football,248,26 RealSports Football,248,26
RealSports Soccer,248,28 RealSports Soccer,248,28
RealSports Tennis,248,26 RealSports Tennis,248,26
RealSports Volleyball,64,26 RealSports Volleyball,64,26
Rescue Terra I,64,29 Rescue Terra I,64,29
Resgate Espacial,248,22 Resgate Espacial,248,22
Revenge of the Beefsteak Tomatoes,64,25 Revenge of the Beefsteak Tomatoes,64,25
Riddle of the Sphinx,64,41 Riddle of the Sphinx,64,41
River Patrol,63,28 River Patrol,63,28
River Raid,64,20 River Raid,64,20
River Raid II,246,18 River Raid II,246,18
Road Runner,246,22 Road Runner,246,22
Robin Hood,248,20 Robin Hood,248,20
Robot Tank,254,19 Robot Tank,254,19
Roc 'n Rope,248,19 Roc 'n Rope,248,19
Room of Doom,64,20 Room of Doom,64,20
Rubik's Cube,64,20 Rubik's Cube,64,20
Save Our Ship,64,20 Save Our Ship,64,20
Scuba Diver,64,21 Scuba Diver,64,21
Sea Hawk,64,19 Sea Hawk,64,19
Sea Hunt,64,16 Sea Hunt,64,16
Sea Monster,64,16 Sea Monster,64,16
Seaquest,64,19 Seaquest,64,19
Secret Quest,246,16 Secret Quest,246,16
Sentinel,246,21 Sentinel,246,21
Shark Attack,64,17 Shark Attack,64,17
Shootin' Gallery,64,20 Shootin' Gallery,64,20
Shuttle Orbiter,64,24 Shuttle Orbiter,64,24
Sir Lancelot,248,23 Sir Lancelot,248,23
Skate Boardin',248,21 Skate Boardin',248,21
Skeet Shoot,32,23 Skeet Shoot,32,23
Ski Hunt,64,19 Ski Hunt,64,19
Ski Run,64,16 Ski Run,64,16
Skiing,32,15 Skiing,32,15
Sky Diver,32,14 Sky Diver,32,14
Sky Jinks,32,17 Sky Jinks,32,17
Sky Skipper,64,17 Sky Skipper,64,17
Slot Machine,32,19 Slot Machine,32,19
Slot Racers,32,20 Slot Racers,32,20
Smurf - Rescue in Gargamel's Castle,248,19 Smurf Rescue in Gargamels Castle,248,19
Smurfs Save the Day,248,44 Smurfs Save the Day,248,41
Sneak 'n Peek,64,28 Sneak 'n Peek,64,28
Snoopy and the Red Baron,248,21 Snoopy and the Red Baron,248,21
Solar Fox,248,33 Solar Fox,248,33
Solar Storm,64,18 Solar Storm,64,18
Solaris,246,19 Solaris,246,19
Sorcerer,64,16 Sorcerer,64,16
Sorcerer's Apprentice,248,16 Sorcerer's Apprentice,248,16
Space Attack,64,30 Space Attack,64,30
Space Canyon,64,20 Space Canyon,64,20
Space Cavern,64,20 Space Cavern,64,20
Space Invaders,64,20 Space Invaders,64,20
Space Jockey,32,22 Space Jockey,32,22
Space Shuttle,248,20 Space Shuttle,248,20
Space Tunnel,64,22 Space Tunnel,64,22
Space War,32,20 Space War,32,20
Spacechase,64,17 Spacechase,64,17
SpaceMaster X-7,64,18 SpaceMaster X-7,64,18
Spider Fighter,64,23 Spider Fighter,64,23
Spider Maze,64,22 Spider Maze,64,22
Spider-Man,64,19 Spider-Man,64,19
Spike's Peak,248,18 Spike's Peak,248,18
Spitfire Attack,64,21 Spitfire Attack,64,21
Springer,63,23 Springer,63,23
Sprint Master,246,16 Sprint Master,246,16
Spy Hunter,248,22 Spy Hunter,248,22
Squeeze Box,64,19 Squeeze Box,64,19
Squirrel,64,19 Squirrel,64,19
Sssnake,64,16 Sssnake,64,16
Stampede,32,15 Stampede,32,15
Star Fox,64,16 Star Fox,64,16
Star Raiders,248,16 Star Raiders,248,16
Star Ship,32,21 Star Ship,32,21
Star Strike,64,17 Star Strike,64,17
Star Trek,248,19 Star Trek,248,19
Star Voyager,64,18 Star Voyager,64,18
Star Wars - Arcade Game,224,20 Star Wars - Arcade Game,224,20
Star Wars - Death Star Battle,224,32 Star Wars - Death Star Battle,224,32
Star Wars - Empire Strikes Back,64,38 Star Wars - Empire Strikes Back,64,38
Star Wars - Jedi Arena,64,39 Star Wars - Jedi Arena,64,39
Stargate,246,30 Stargate,246,30
Stargunner,64,17 Stargunner,64,17
StarMaster,64,18 StarMaster,64,18
Steeplechase,32,18 Steeplechase,32,18
Stellar Track,64,20 Stellar Track,64,20
Strategy X,64,21 Strategy X,64,21
Strawberry Shortcake,64,18 Strawberry Shortcake,64,18
Street Racer,32,28 Street Racer,32,28
Stronghold,64,20 Stronghold,64,20
Stunt Man,64,18 Stunt Man,64,18
Submarine Commander,64,17 Submarine Commander,64,17
Sub-Scan,64,27 Sub-Scan,64,27
Subterranea,248,16 Subterranea,248,16
Summer Games,246,20 Summer Games,246,20
Super Baseball,246,21 Super Baseball,246,21
Super Breakout,64,23 Super Breakout,64,23
Super Challenge Baseball,64,22 Super Challenge Baseball,64,22
Super Challenge Football,64,32 Super Challenge Football,64,32
Super Cobra,224,32 Super Cobra,224,32
Super Football,248,20 Super Football,248,20
Superman,64,23 Superman,64,23
Surfer's Paradise,64,16 Surfer's Paradise,64,16
Surround,32,25 Surround,32,25
Survival Run,64,16 Survival Run,64,16
SwordQuest - EarthWorld,248,20 SwordQuest - EarthWorld,248,20
SwordQuest - FireWorld,248,32 SwordQuest - FireWorld,248,32
SwordQuest - WaterWorld,248,31 SwordQuest - WaterWorld,248,31
Tac-Scan,64,32 Tac-Scan,64,32
Tanks But No Tanks,64,16 Tanks But No Tanks,64,16
Tapeworm,64,26 Tapeworm,64,26
Tapper,248,16 Tapper,248,16
Tax Avoiders,248,15 Tax Avoiders,248,15
Taz,248,21 Taz,248,21
Tempest,248,12 Tempest,248,12
Tennis,32,16 Tennis,32,16
Texas Chainsaw Massacre,64,14 Texas Chainsaw Massacre,64,14
Threshold,64,31 Threshold,64,31
Thunderground,64,17 Thunderground,64,17
Time Pilot,248,21 Time Pilot,248,21
Time Warp,64,19 Time Warp,64,19
Title Match Pro Wrestling,248,17 Title Match Pro Wrestling,248,17
Tomarc the Barbarian,248,34 Tomarc the Barbarian,248,34
Tomcat,246,29 Tomcat,246,29
Tooth Protectors,224,15 Tooth Protectors,224,15
Towering Inferno,64,25 Towering Inferno,64,25
Track and Field,246,24 Track and Field,246,24
Treasure Below,64,24 Treasure Below,64,24
Treasure Island,64,22 Treasure Island,64,22
Trick Shot,64,23 Trick Shot,64,23
TRON - Deadly Discs,64,18 TRON - Deadly Discs,64,18
Tunnel Runner,250,27 Tunnel Runner,250,27
Turmoil,64,22 Turmoil,64,22
Tutankham,224,15 Tutankham,224,15
Universal Chaos,64,18 Universal Chaos,64,18
Up 'n Down,248,23 Up 'n Down,248,23
Vanguard,248,19 Vanguard,248,19
Venture,64,17 Venture,64,17
Video Checkers,64,15 Video Checkers,64,15
Video Chess,64,22 Video Chess,64,22
Video Jogger,64,19 Video Jogger,64,19
Video Life,32,20 Video Life,32,20
Video Olympics,32,18 Video Olympics,32,18
Video Pinball,64,22 Video Pinball,64,22
Video Reflex,64,21 Video Reflex,64,21
Vogel Flieh,64,20 Vogel Flieh,64,20
Vulture Attack,64,19 Vulture Attack,64,19
Wabbit,64,22 Wabbit,64,22
Walker,64,14 Walker,64,14
Wall Ball,64,14 Wall Ball,64,14
Wall Break,64,17 Wall Break,64,17
Wall-Defender,64,18 Wall-Defender,64,18
Warlords,64,21 Warlords,64,21
Warplock,64,16 Warplock,64,16
Wing War,248,16 Wing War,248,16
Wings,250,17 Wings,250,17
Winter Games,246,14 Winter Games,246,14
Wizard of Wor,64,21 Wizard of Wor,64,21
Word Zapper,64,21 Word Zapper,64,21
World End,64,19 World End,64,19
Worm War I,64,17 Worm War I,64,17
Xenophobe,246,18 Xenophobe,246,18
X-Man,64,18 X-Man,64,18
Yars' Revenge,64,13 Yars' Revenge,64,13
Zaxxon,248,21 Zaxxon,248,21
Zoo Fun,64,15 Zoo Fun,64,15
Z-Tack,64,15 Z-Tack,64,15
EOF,0,0 EOF,0,0

727
sd/msxcart.txt Normal file
View File

@ -0,0 +1,727 @@
1942,1,5,0,0
10-Yard Fight,0,3,0,15
3-D Golf Simulation,0,2,0,24
3D Tennis,0,2,0,30
3D Water Driver,0,2,0,20
A Life Planet M36,1,5,0,26
A Ressha de Ikou,2,5,2,28
A.E.,0,2,0,27
A1 Spirit,9,5,0,15
AcroJet,2,5,0,20
Actman,0,2,0,18
Adven' Chuta!,0,2,0,17
Adventure Island,0,3,0,24
Afternoon Angels,0,3,0,27
Albatross,0,3,0,27
Alcazar,0,2,0,20
Aleste,2,6,0,18
Algeese no Tsubasa,1,6,0,17
Alibaba and 40 Thieves,0,2,0,29
Alien 8,0,3,0,33
Aliens,2,5,0,18
Alpha Roid,0,3,0,17
Alpha Squadron,0,2,0,21
American Soccer,1,4,0,25
American Truck,0,3,0,26
Anaza,0,3,0,25
Androgynus,2,6,0,16
Angelo,0,2,0,21
Animal Land,1,5,0,17
Antarctic Adventure,0,2,0,22
Anty,0,2,0,30
Aoki Ookami - Genchou Hishi,7,8,4,15
Aoki Ookami - Genghis Khan,7,7,2,38
Aquapolis SOS,0,2,0,37
Aquattack,0,2,0,24
Aramo,0,3,0,20
Arctic,2,5,0,16
Arkanoid,0,3,0,17
Arkanoid II,1,5,0,19
AshGuine,1,5,0,22
AshGuine Story II,1,6,0,19
AshGuine Story III,1,6,0,28
Athletic Ball,0,2,0,29
Athletic Land,0,2,0,24
Attack Four,0,3,0,24
B.C.'s Quest,0,3,0,22
B.C. II - Grog's Revenge,0,3,0,23
Back to the Future,0,3,0,35
Backgammon,0,3,0,29
Balance,0,2,0,21
Banana,0,2,0,18
Bank Panic,0,3,0,17
Baseball Craze,0,3,0,21
BASIC Lessons 1,0,3,0,25
BASIC Lessons 2,0,3,0,26
Batman,1,4,0,26
Batten Tanuki no Daibouken,0,3,0,17
Battle Cross,0,2,0,37
Battle Ship Clapton II,0,2,0,23
Beamrider,0,3,0,33
Becky,0,2,0,20
Bee & Flower,0,2,0,16
Black Onyx,0,3,0,23
Black Onyx II,2,5,0,21
Blockade Runner,0,2,0,24
Boggy '84,0,1,0,26
Boing Boing,0,1,0,20
Bokosuka Wars,0,2,0,22
Bomber King,1,5,0,24
Bomber Man,0,1,0,22
Boogie Woogi Jungle,0,2,0,21
Boomerang,0,2,0,30
Borfesu,2,5,0,20
Bosconian (Star Destroyer),0,3,0,18
Bouken Roman,0,3,0,37
Boulder Dash,0,3,0,23
Brain,0,2,0,23
Break In,0,4,0,16
Break Out,0,2,0,19
Bruce Lee,0,3,0,20
Bubble Bobble,1,5,0,20
Bug Bomb,0,2,0,24
Bull and Mighty's Slim Chance,0,3,0,19
Burger Time,0,3,0,40
Butamaru Pants,0,2,0,22
Cabbage Patch Kids,0,2,0,25
Candoo Ninja,0,2,0,29
Cannon Ball,0,2,0,23
Captain Chef,0,1,0,22
Captain Cosmo,0,2,0,23
Car Fighter,0,2,0,24
Car Jamboree,0,3,0,22
Car Race,0,2,0,23
Carry's Great Escape,0,3,0,19
Casio Daishogai Keiba,0,2,0,31
Casio World Open,0,3,0,32
Castle,0,3,0,27
Castle Excellent,0,3,0,17
Chack'n Pop,0,2,0,27
Challenge Derby,0,3,0,22
Champion Boxing,0,3,0,26
Champion Ice Hockey,0,3,0,26
Champion Kendo,0,3,0,30
Champion Pro Wrestling,0,3,0,25
Champion Soccer,0,2,0,33
Championship Lode Runner,0,3,0,26
Checkers in Tan Tan Tanuki,0,2,0,35
Cheese,0,2,0,37
Cheese 2,0,3,0,17
Chess,0,2,0,19
Chima Chima,0,3,0,16
Choplifter,0,3,0,22
ChoroQ,0,2,0,21
Circus Charlie,0,2,0,17
City Connection,0,3,0,25
Coaster Race,0,3,0,26
Cockpit,2,5,0,23
Color Ball,0,2,0,18
Color Midway,0,2,0,21
Come On! Picot,0,3,0,23
Comet Tail,0,2,0,25
Comic Bakery,0,2,0,21
Computer Billiards,0,1,0,23
Computer Master,0,3,0,29
Computer Othello,0,2,0,26
Computer Pachinko,0,2,0,27
Computer Painting,0,2,0,28
Con-dori,0,2,0,28
Contra,9,5,0,19
Cosmo Explorer,0,3,0,17
Courageous Perseus,0,3,0,25
Craze,2,5,0,29
Crazy Bullet,0,2,0,16
Crazy Cars,0,3,0,23
Crazy Train,0,1,0,21
Creamy Lemon - Star Trap,0,3,0,22
Crest of the Dragon King,0,3,0,35
Crimson,1,6,0,35
Cross Blaim,3,4,0,18
Crusader,0,3,0,22
C-So!,0,2,0,19
Dai Dassou,0,3,0,16
Daikoukai Jidai,7,7,4,21
Daisenryaku,2,5,1,26
Daiva Story 4,1,6,0,22
Dam Busters,0,3,0,24
DangerX4,0,2,0,22
Darwin 4078,1,5,0,19
David II,0,2,0,22
Dawn Patrol,0,4,0,19
D-Day,0,2,0,22
Decathlon,0,3,0,16
Deep Dungeon,1,5,2,20
Deep Dungeon II,1,5,2,23
Deep Forest,1,5,0,26
Demon Crystal,0,3,0,22
Designer's Pencil,0,2,0,24
Devil's Heaven,0,2,0,28
Dig Dug,0,3,0,25
Digital Devil Monogatari,1,5,0,18
Dip Dip,0,2,0,35
Dires,1,5,1,18
Doki Doki Penguin Land,0,3,0,16
Door Door mkII,0,2,0,33
Dorodon,0,2,0,25
Double Vision,1,6,0,18
Dr. Copy,0,2,0,24
Dragon Attack,0,2,0,19
Dragon Buster,1,5,0,24
Dragon Quest,1,5,0,24
Dragon Quest II,1,6,0,23
Dragon Slayer,0,3,0,26
Dragon Slayer II,1,6,2,24
Dragon Slayer IV,1,6,0,27
Dragon Slayer Jr.,2,5,0,27
Drainer,0,3,0,28
Druaga no Tou,0,3,0,18
Druid,1,5,0,24
Dungeon Hunter,2,5,0,16
Dungeon Master,0,3,0,25
Dunk Shot,0,3,0,25
DX7 Voicing Program,0,2,0,20
Dynamite Bowl,2,5,0,30
E.I.,0,2,0,24
Eagle Fighter,0,3,0,15
Eddy II,0,2,0,24
Eggerland Mystery,0,3,0,18
Eidolon,1,5,0,28
Eiwa Jiten,1,5,0,18
Elevator Action,0,3,0,21
Elthlead,1,5,2,26
Erika,0,3,0,19
Europe Sensen,7,8,4,16
Exchanger,0,2,0,24
Exciting Baseball,0,2,0,20
Exciting Jockey,0,2,0,28
Exerion,0,2,0,26
Exerion II,0,2,0,18
Exoide-Z,0,2,0,21
Exoide-Z Area 5,0,3,0,19
F-1 Spirit,9,5,0,26
F-15 Strike Eagle,1,5,0,21
F16 Fighting Falcon,0,2,0,28
Fairy,0,2,0,30
Fairy Land Story,1,5,0,16
Famicle Parodic,1,6,0,27
Family Automation Language,0,3,0,26
Family Billiards,1,4,0,37
Family Boxing,1,6,0,27
Family Stadium Pro Baseball,2,6,0,24
Fandom Library #1,1,6,0,38
Fandom Library #2,1,6,0,28
Fandom Library #3,1,6,0,28
Fantasy Zone,1,5,0,28
Fantasy Zone II,2,6,0,23
Farm Kit,0,3,0,26
Fathom,0,3,0,19
FB-01 Voicing Program,0,3,0,17
Final Justice,0,2,0,32
Final Mahjong,0,2,0,24
Final Mystery Murder Club,1,7,0,24
Final Zone Wolf,1,5,0,36
Fire Ball,1,5,0,26
Fire Rescue,0,2,0,20
Firebird,8,5,0,22
Flappy Limited '85,0,2,0,19
Flash Splash,0,1,0,29
Fleet Commander II,1,6,0,23
Flicky,0,3,0,29
Flight Deck II,0,4,0,17
Flight Simulator,1,5,0,25
Flipper Slipper,0,2,0,27
Flower Card a Carp,0,2,0,26
FM Music Composer,0,2,0,29
FM Music Composer II,0,3,0,28
FM Music Macro,0,3,0,31
FM Musiwriter,0,2,0,25
FM PAC,11,4,2,24
FM Voicing Program,0,2,0,18
Formation Z,0,3,0,29
Four Battle Mahjong,0,2,0,22
Frogger,0,2,0,30
Front Line,0,2,0,18
Fruit Search,0,2,0,21
Funky Mouse,0,2,0,23
G.P. World,0,3,0,22
Gakuen Monogatari,2,6,0,21
Galactic Drifter Vifam,0,2,0,28
Galaga,0,3,0,33
Galaxian,0,1,0,17
Gall Force,2,5,0,19
Gambler Jiko Chuushinha,1,6,0,21
Gambler Jiko Chuushinha 2,1,6,0,34
Game Land,0,3,0,36
Game Master,0,2,0,20
Game Master II,4,5,2,22
Ganbare Goemon!,8,5,0,25
Gang Master,0,2,0,26
Garakuta,2,4,0,22
Garyuu Ou,1,6,0,19
Gate of Labyrinth,2,5,0,20
Gekitotsu Pennant Race,9,5,0,28
Gekitotsu Pennant Race 2,9,5,0,33
Ghost House,0,3,0,35
Ghostbusters,0,3,0,22
Girly Block,2,5,0,23
Glider,0,2,0,22
Goblin,0,4,0,17
Gojira vs 3 Daikaijuu,0,2,0,17
Gojira-kun,0,3,0,32
Gokiburi Daisakusen,0,2,0,21
Golf Game,0,2,0,30
Golgo 13 - Wolf's Nest,0,3,0,20
Golvellius,2,5,0,33
Gomoku Narabe,0,2,0,21
Goonies,0,3,0,24
Green Beret,0,3,0,18
Grog's Revenge,0,3,0,22
Guardic,0,3,0,25
Gulkave,0,3,0,18
Gun Fright,0,3,0,18
Gyrodine,0,3,0,21
H.E.R.O.,0,3,0,19
Hacker,2,5,0,19
Hades no Monshou,0,3,0,17
Hai no Majutsushi,8,5,0,27
Haja No Fuin,1,5,0,28
Hal Note,5,8,3,23
Han Seimei Senki Androgynus,2,6,0,19
Hanafuda,0,3,0,38
Hanafuda Koi Koi,0,2,0,19
Hang On,0,3,0,27
Harapeko Pakkun,0,1,0,18
Hard Ball,1,5,0,26
Harry Fox MSX Special,2,5,1,20
Harry Fox - Yuki no Maou Hen,6,4,0,32
Heavy Boxing,0,2,0,39
Heist,0,3,0,23
Heli-tank,0,2,0,16
Heroes of the Lance,1,7,2,20
Hi no Tori,8,5,0,30
Higemaru Makai Shima,2,5,0,21
High School! Kimengumi,1,5,0,31
High Way Star,0,2,0,33
Hisha,0,2,0,24
Hitsuji Yai,0,1,0,16
Hole in One,0,2,0,22
Hole in One Professional,0,3,0,22
Hole in One Special,2,5,0,35
Home Calc,0,2,0,30
Home Writer,0,2,0,20
Hudson 3D Golf,0,3,0,22
Hustle! Chumy,0,2,0,25
Hydlide,0,3,0,24
Hydlide II,2,5,1,18
Hydlide 3,1,7,0,21
Hyper Olympic 1,0,2,0,20
Hyper Olympic 2,0,2,0,26
Hyper Rally,0,2,0,26
Hyper Sports 1,0,2,0,22
Hyper Sports 2,0,2,0,25
Hyper Sports 3,0,3,0,25
Ice World,0,2,0,25
Ide Yousuke Meijin Mahjong,1,5,0,20
Iga Ninpou Chou,0,2,0,37
Iga Ninpou Chou 2,0,3,0,26
Ikari,2,6,0,28
Indian no Bouken,0,2,0,16
Inemuri-ryuu Asada Mahjong,2,5,0,27
Inindou,7,8,4,37
Iriegas - Theseus,0,2,0,18
Iriegas Episode IV,0,2,0,28
Inspecteur Z,0,3,0,29
Ishin no Arashi,7,7,4,23
Issunboushi no Donnamondai,0,3,0,26
J.P. Winkle,0,3,0,37
Jagur,2,5,0,22
Janka,0,2,0,16
Jansei,2,5,1,16
Janyu Mahjong,0,3,0,17
Japanese MSX-Write,1,7,0,24
Japanese MSX-Write II,1,7,2,29
Jet Set Willy,0,2,0,32
Jigsaw Set,0,2,0,24
Jissen - 4-nin Mahjong,0,2,0,21
Jong Kyo,0,2,0,33
Joytelop,0,3,0,19
Jump,0,2,0,19
Jump Coaster,0,1,0,15
Junior High English Words 1,0,3,0,23
Juno First,0,3,0,38
Kage no Densetsu,0,3,0,21
Kakikukekon,0,2,0,27
Karamaru's Strange Trip,0,2,0,22
Karuizawa,1,5,0,34
Kazuo Morita's Othello,0,3,0,20
Kempelen Chess,2,5,0,33
Keystone Kapers,0,3,0,25
Kick It!,0,3,0,26
Kiki Kaikai,1,5,0,19
King & Balloon,0,3,0,22
King Knight,2,5,0,25
King Kong 2,8,5,0,22
King's Valley,0,2,0,22
King's Valley II,9,5,0,24
Kin-nikuman,0,3,0,27
Kisei,1,5,2,22
Kitahei,1,5,0,16
Knight Lore,0,3,0,18
Knightmare,0,3,0,22
Knightmare II,8,5,0,21
Knightmare III,8,6,0,24
Knither Special,2,5,0,25
Koji Tanigawa's Shougi,0,3,0,26
Koji Tanigawa's Shougi 2,1,5,2,33
Konami's Baseball,0,2,0,35
Konami's Billiards,0,1,0,28
Konami's Boxing,0,3,0,29
Konami's Football,0,3,0,26
Konami's Golf,0,2,0,28
Konami's Mahjong,0,3,0,24
Konami's Ping Pong,0,2,0,27
Konami's Soccer,0,3,0,29
Konami's Tennis,0,2,0,26
Koneko no Daibouken,0,3,0,26
Koronis Rift,2,6,0,30
Kung Fu Master,0,2,0,23
Kung Fu Taigun,0,2,0,25
L' Empereur,7,7,4,25
Labyrinth,1,6,0,22
Ladder Building,0,2,0,20
Laptick'2,0,3,0,26
Legend of Kage,0,3,0,20
Legend of Takeru,0,3,0,25
Let's Take the A-Train,2,5,2,27
Light Corridor,2,4,0,33
Lode Runner,0,3,0,25
Lode Runner II,0,3,0,22
Lord Over,0,2,0,25
Lot Lot,0,3,0,20
Lunar Ball,0,3,0,18
Lupin Sansei - Babylon,1,5,0,21
Lupin Sansei - Cagliostro,1,5,0,33
M36,1,5,0,36
Macross Countdown,0,3,0,14
Mad Rider,1,5,0,28
Mado Fuki Kaisha no Swing-kun,0,2,0,20
Magical Kid Wiz,0,3,0,40
Magical Tree,0,2,0,26
Magnum Prohibition 1931,2,5,0,23
Mahjong Friend,0,2,0,34
Maison Ikkoku - Kanketsu Hen,1,7,0,25
Maison Ikkoku - Omoide,1,6,0,39
Make-a-Face,0,1,0,33
Malaya no Hihou,2,5,0,22
Manes,0,2,0,26
Mappy,0,3,0,16
Marchen Veil I,1,5,0,16
Marine Battle,0,2,0,25
Mashou no Yakata Goblin,0,4,0,24
Megalopolis SOS,0,2,0,34
Meikyuu Shinwa,2,5,0,26
Metal Gear,8,5,0,25
Metal Gear 2,9,7,0,21
MIDI Macro,0,3,0,23
Midnight Brothers,0,3,0,21
Midnight Building,0,2,0,28
Mini Golf,0,3,0,28
Mirai,1,5,0,20
Mississippi Satsujinjiken,1,5,0,16
Mitsumega Toohru,1,5,0,36
Moai no Hihou,0,3,0,27
Mobile Planet Styllus,0,3,0,24
Mobile-Suit Gundam,0,3,0,32
Moero!! Nettou Yakyuu '88,1,6,0,29
Mo-Karimakka,0,3,0,36
Mole,0,2,0,23
Mole Mole 2,0,3,0,15
Monkey Academy,0,2,0,22
Monmon Kaibutsu,1,5,0,25
Monster's Fair,0,3,0,26
Moon Landing,0,2,0,25
Moon Patrol,0,2,0,23
Moonsweeper,0,3,0,22
Mopiranger,0,2,0,22
Morita Kazuo no Othello,0,3,0,21
Mouser,0,2,0,34
Mr. Chin,0,1,0,17
Mr. Do!,0,1,0,19
Mr. Do! vs Unicorns,0,2,0,18
Mr. Do's Wild Ride,0,2,0,30
MSX Baseball,0,2,0,29
MSX Baseball II,0,2,0,23
MSX Derby,0,2,0,26
MSX Rugby,0,2,0,20
MSX Shougi Game,0,3,0,20
MSX Soccer,0,2,0,26
MSX-21,0,2,0,21
MSX-AID,0,2,0,17
MSX-BASIC-kun,0,2,0,18
MSX-BASIC-kun Plus,0,2,0,24
MSX-Logo,0,3,0,29
Mugen Senshi Valis,1,5,0,19
Music Editor,0,2,0,29
Music Harmonizer 3,0,2,0,23
Music Studio G7,0,3,0,29
Nausicaa,0,2,0,26
Nekketsu Juudou,1,6,0,19
Nemesis,8,5,0,26
Nemesis 2,9,5,0,18
Nemesis 3,9,6,0,20
Nessen Koushien,0,2,0,20
New Horizon,1,5,0,26
Night Shade,0,3,0,22
Nihon-Shi Nenpyou,0,3,0,22
Ninja Jajamaru-kun,0,3,0,28
Ninja Princess,0,3,0,29
Ninja-kun,0,2,0,25
Ninja-kun - Asura no Shou,1,5,0,20
Ninja-kun - Majou no Bouken,0,3,0,36
Ninjya Kage,0,2,0,38
Nobunaga no Yabou - Bushou,7,8,4,22
Nobunaga no Yabou - Sengoku,7,7,4,37
Nobunaga no Yabou Zenkoku MSX,7,6,2,38
Nobunaga no Yabou Zenkoku MSX2,7,7,2,40
Nyan Nyan Pro Wrestling,0,3,0,41
Nyorols,0,2,0,34
Ogre,2,6,0,18
Oil's Well,0,3,0,15
O'Mac Farmer,0,2,0,21
Othello,0,3,0,23
Ouke no Tani,9,5,0,18
Out Run,1,6,0,23
Oyoide Tango,0,1,0,18
PAC,11,0,2,23
Pachi Pro Densetsu,1,5,0,15
Pachicom,0,3,0,29
Pachinko-U.F.O.,0,2,0,19
Pac-Man,0,3,0,26
Pac-Mania,1,6,0,18
Pai Panic,0,2,0,20
Pairs,0,2,0,20
Parodius,9,5,0,16
Pass Ball,0,2,0,19
Pastfinder,0,2,0,20
Payload,0,3,0,21
Peetan,0,1,0,18
Pegasus,0,3,0,17
Penguin Adventure,8,5,0,18
Penguin-kun Wars,0,3,0,28
Penguin-kun Wars 2,2,6,0,27
Picture Puzzle,0,1,0,29
Pillbox,0,2,0,25
Pinball Blaster,2,4,0,18
Pinball Maker,0,2,0,26
Pine Applin,0,2,0,24
Pinky Chase,0,2,0,22
Pipi,0,3,0,22
Pippols,0,2,0,15
Pitfall II,0,2,0,18
Pitfall!,0,2,0,21
Playball,0,3,0,19
Point X Senryou Sakusen,0,3,0,19
Police Story,0,3,0,34
Poppaq the Fish,0,2,0,23
Predator,1,5,0,26
Pretty Sheep,0,1,0,19
Price of Magik,2,4,0,23
Pro Yakyuu Family Stadium,2,6,0,25
Pro Yakyuu Fan,1,6,0,36
Professional Baseball,0,3,0,25
Professional Mahjong,0,3,0,32
Professional Mahjong Gokuu,2,5,1,31
Project A2,1,5,0,37
Protector,0,2,0,21
PSG Musiwriter,0,2,0,20
Psychic War,1,6,2,25
Puzzle Panic,0,3,0,22
Pyramid Warp,0,1,0,23
Q-bert,0,3,0,23
Quarth,9,5,0,17
Queen's Golf,0,2,0,17
Quinpl,1,6,0,23
Raccoon Dog,0,3,0,17
Raid on Bungeling Bay,0,3,0,22
Rally-X,0,3,0,32
Rambo,0,3,0,18
Rastan Saga,1,6,0,16
Real Tennis,0,1,0,22
Red Zone,0,2,0,22
Relics MSX,1,5,0,19
Relics MSX2,1,6,0,21
Renju & Ojama Dogs,0,2,0,22
Replicart,1,5,0,29
Return of Ishtar,2,6,0,20
Return of Jelda,1,5,0,27
Rick to Mick no Daibouken,1,5,0,26
Rise Out,0,2,0,36
River Raid,0,3,0,19
Road Fighter,0,2,0,21
Robo Wres 2001,2,5,0,23
Robofrog,0,2,0,25
Rockn' Bolt,0,2,0,19
Roger Rubbish,0,2,0,22
Roller Ball,0,2,0,24
Romancia,2,5,0,22
Rotors,0,2,0,19
Royal Blood,7,8,4,17
R-Type,12,7,0,22
Salamander,9,5,0,18
Sangokushi MSX,7,6,0,21
Sangokushi MSX2,7,7,4,25
Sangokushi II,7,8,4,26
Sasa,0,2,0,24
Scarlet 7,0,3,0,15
Scion,0,2,0,20
Scope On,0,2,0,16
Scramble Eggs,0,1,0,19
Scramble Formation,1,6,0,24
Sea Hunter,0,2,0,29
Secret Treasure of Moai,0,3,0,21
Seiken Acho,0,3,0,34
Seikima II Special,1,5,0,22
Senjo no Ookami,1,5,0,29
Senjyo,0,2,0,26
Sewer Sam,0,3,0,17
Shanghai,2,5,0,20
Shiryou Sensen,1,6,2,19
Shougi (Micro Cabin),0,2,0,25
Shougi (Pony),0,3,0,31
Shougi Expert,0,3,0,24
Shougi Meijin,0,3,0,24
Shougun,1,5,2,24
Shout Match,0,3,0,18
Simple ASM 1.0,0,2,0,22
Sinbad,0,2,0,25
Ski Command,0,2,0,17
Skooter,0,3,0,22
Sky Jaguar,0,2,0,18
Skygaldo,0,3,0,21
Slapshot,0,2,0,19
Small Boy's Quiz,0,3,0,19
Snake It,0,3,0,27
Sofia,1,4,0,19
Soukoban,0,3,0,16
Space Camp,0,3,0,19
Space Invaders,0,2,0,21
Space Manbow,9,6,0,25
Space Maze Attack,0,2,0,23
Space Trouble,0,1,0,28
Sparkie,0,3,0,24
Spelunker,0,3,0,18
Square Dancer,0,2,0,20
Squish'em,0,2,0,24
Star Blazer,0,2,0,20
Star Command,0,2,0,22
Star Trap,0,3,0,23
Star Virgin,1,5,0,20
Starship Simulator,0,2,0,22
Step Up,0,1,0,29
Stepper,0,2,0,18
Stone of Wisdom,0,3,0,18
Strange Loop,0,3,0,26
Strategic Mars,2,5,0,23
Suikoden,7,7,4,25
Super Billiards,0,1,0,19
Super Cobra,0,1,0,26
Super Cross Force,0,2,0,22
Super Daisenryaku,2,6,1,28
Super Drinker,0,2,0,28
Super Golf,0,3,0,24
Super Laydock,1,6,0,21
Super Lode Runner,13,5,0,24
Super Pachinko,0,2,0,29
Super Pierrot,2,5,0,25
Super Rambo Special,2,5,0,24
Super Runner,1,5,0,30
Super Snake,0,2,0,23
Super Soccer,0,3,0,22
Super Synth,0,2,0,23
Super Tennis,0,2,0,22
Super Tritorn,1,5,0,23
Supertripper,0,3,0,24
Sweet Acorn,0,2,0,23
Swimming Tango,0,1,0,22
Synth Saurus,1,4,0,25
Taiyou no Shinden,1,6,2,23
Takahashi Meijin no Boukenjima,0,3,0,28
Takeru Densetsu,0,3,0,41
Tanigawa Koji no Shougi,0,3,0,26
Tanigawa Koji no Shougi 2,1,5,2,34
Tank Battalion,0,1,0,36
Tatica,0,2,0,25
Tawara-kun,0,2,0,17
Tear of Nile,0,3,0,21
Teitoku no Ketsudan,7,8,4,23
Telebunnie,0,2,0,30
Tengoku Yoitoko,1,5,0,21
Tensai Rabbian Daifunsen,0,3,0,26
Tenshi-tachi no Gogo,0,3,0,35
Tetra Horror,0,2,0,31
Tetris,1,5,0,23
Tetsuman,0,2,0,17
Thexder,0,3,0,19
Thunder Ball,0,3,0,18
Thunderbolt,0,3,0,23
Time Pilot,0,2,0,22
Top Roller,0,2,0,21
Topple Zip MSX,0,3,0,21
Topple Zip MSX2,1,5,0,25
Tower of Druaga,0,3,0,26
Track & Field 1,0,2,0,26
Track & Field 2,0,2,0,26
Traffic,0,3,0,26
Treasure of Usas,8,5,0,18
Trial Ski,0,2,0,27
Tritorn,0,3,0,20
Trump Aid,0,3,0,18
Tsumego 120,2,5,0,20
Tsurikichi Sanpei - Blue,1,5,0,22
Tsurikichi Sanpei - Tsuri,1,6,0,35
Turboat,0,2,0,36
Turmoil,0,2,0,18
Twinbee,0,3,0,18
TZR Grandprix Rider,0,3,0,18
Ultima Exodus,1,6,2,30
Ultraman,0,2,0,24
Urusei Yatsura,1,7,0,19
Vampire Killer,8,5,0,25
Vaxol,2,5,0,25
Venus Fire,0,3,0,16
Victorious Nine II,2,5,0,21
Video Hustler,0,1,0,29
Vifam,0,2,0,24
Volguard,0,3,0,16
Warp & Warp,0,1,0,19
Warroid,0,3,0,22
Wing Man 2,1,5,0,18
Wizardry,1,7,2,21
Wonderboy,0,3,0,19
Woody Poco,2,5,0,20
Wrangler,0,2,0,21
Wreck,0,3,0,19
Xanadu,1,6,2,16
Xevious,2,6,0,17
Xyzolog,0,2,0,18
Yaksa,1,6,0,18
Yakyuu-kyou,0,3,0,16
Yamaha Play Card System,0,2,0,22
Yamamura Misa Suspense,1,6,0,34
Yellow Submarine,0,2,0,33
Yie Ar Kung-Fu,0,2,0,27
Yie Ar Kung-Fu II,0,3,0,25
Youkai Yashiki,0,3,0,28
Young Sherlock,1,5,0,25
Yuurei-kun,1,6,0,25
Zaider,0,3,0,21
Zanac A.I.,0,3,0,17
Zanac Ex,2,5,0,21
Zaxxon,0,3,0,19
Zenji,0,3,0,17
Zexas Limited,0,3,0,16
Zoids,2,5,0,24
Zombie Hunter,1,5,0,16
Zoom 909,0,3,0,24
Zukkoke Yajikita,1,5,0,19
EOF,0,0,0,0

Binary file not shown.