mirror of
https://github.com/sanni/cartreader.git
synced 2024-12-26 04:51:52 +01:00
Merge branch 'master' into support-casio-loopy
This commit is contained in:
commit
52da1a1c36
@ -56,6 +56,9 @@ static const char arcMenuItem4[] PROGMEM = "Reset";
|
||||
static const char* const menuOptionsARC[] PROGMEM = { arcMenuItem1, arcMenuItem2, arcMenuItem3, arcMenuItem4 };
|
||||
|
||||
void setup_ARC() {
|
||||
// Request 5V
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
|
||||
// Set Address Pins to Output
|
||||
// Arcadia 2001 uses A0-A13 [A14-A23 UNUSED]
|
||||
//A0-A7
|
||||
@ -94,7 +97,6 @@ void setup_ARC() {
|
||||
}
|
||||
|
||||
void arcMenu() {
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
convertPgm(menuOptionsARC, 4);
|
||||
uint8_t mainMenu = question_box(F("ARCADIA 2001 MENU"), menuOptions, 4, 0);
|
||||
|
||||
|
@ -63,6 +63,9 @@ static const char atariMenuItem4[] PROGMEM = "Reset";
|
||||
static const char* const menuOptionsATARI[] PROGMEM = { atariMenuItem1, atariMenuItem2, atariMenuItem3, atariMenuItem4 };
|
||||
|
||||
void setup_ATARI() {
|
||||
// Request 5V
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
|
||||
// Set Address Pins to Output
|
||||
// Atari 2600 uses A0-A12 [A13-A23 UNUSED]
|
||||
//A0-A7
|
||||
@ -101,7 +104,6 @@ void setup_ATARI() {
|
||||
}
|
||||
|
||||
void atariMenu() {
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
convertPgm(menuOptionsATARI, 4);
|
||||
uint8_t mainMenu = question_box(F("ATARI 2600 MENU"), menuOptions, 4, 0);
|
||||
|
||||
|
@ -55,6 +55,9 @@ static const char colMenuItem3[] PROGMEM = "Set Size";
|
||||
static const char* const menuOptionsCOL[] PROGMEM = { colMenuItem1, colMenuItem2, colMenuItem3, string_reset2 };
|
||||
|
||||
void setup_COL() {
|
||||
// Request 5V
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
|
||||
// Set Address Pins to Output
|
||||
// Colecovision uses A0-A14 [A15-A23 UNUSED]
|
||||
//A0-A7
|
||||
@ -93,7 +96,6 @@ void setup_COL() {
|
||||
}
|
||||
|
||||
void colMenu() {
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
convertPgm(menuOptionsCOL, 4);
|
||||
uint8_t mainMenu = question_box(F("COLECOVISION MENU"), menuOptions, 4, 0);
|
||||
|
||||
|
@ -4,8 +4,8 @@
|
||||
This project represents a community-driven effort to provide
|
||||
an easy to build and easy to modify cartridge dumper.
|
||||
|
||||
Date: 2023-03-29
|
||||
Version: 12.5
|
||||
Date: 2023-06-26
|
||||
Version: 12.6
|
||||
|
||||
SD lib: https://github.com/greiman/SdFat
|
||||
LCD lib: https://github.com/olikraus/u8g2
|
||||
@ -15,13 +15,13 @@
|
||||
RTC lib: https://github.com/adafruit/RTClib
|
||||
Frequency lib: https://github.com/PaulStoffregen/FreqCount
|
||||
|
||||
Compiled with Arduino IDE 2.0.4
|
||||
Compiled with Arduino IDE 2.1.0
|
||||
|
||||
Thanks to:
|
||||
MichlK - ROM Reader for Super Nintendo
|
||||
Jeff Saltzman - 4-Way Button
|
||||
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
|
||||
splash5 - GBSmart, Wonderswan, NGP and Super A'can modules
|
||||
hkz & themanbehindthecurtain - N64 flashram commands
|
||||
@ -38,7 +38,7 @@
|
||||
jiyunomegami, splash5, Kreeblah, ramapcsx2, PsyK0p4T, Dakkaron, majorpbx, Pickle, sdhizumi,
|
||||
Uzlopak, sakman55, Tombo89, scrap-a, borti4938, vogelfreiheit, CaitSith2, Modman,
|
||||
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.
|
||||
|
||||
@ -248,6 +248,8 @@ void print_STR(byte string_number, boolean newline) {
|
||||
#define mode_ARC 30
|
||||
#define mode_FAIRCHILD 31
|
||||
#define mode_SUPRACAN 32
|
||||
#define mode_MSX 33
|
||||
#define mode_POKE 34
|
||||
|
||||
// optimization-safe nop delay
|
||||
#define NOP __asm__ __volatile__("nop\n\t")
|
||||
@ -367,7 +369,6 @@ void draw_progressbar(uint32_t processedsize, uint32_t totalsize);
|
||||
byte eepbit[8];
|
||||
byte eeptemp;
|
||||
|
||||
#ifdef nointro
|
||||
// Array to hold iNES header
|
||||
byte iNES_HEADER[16];
|
||||
//ID 0-3
|
||||
@ -382,7 +383,6 @@ byte iNES_HEADER[16];
|
||||
//TV_system 12
|
||||
//VS_hardware 13
|
||||
//reserved 14, 15
|
||||
#endif
|
||||
|
||||
//******************************************
|
||||
// CRC32
|
||||
@ -491,7 +491,7 @@ uint32_t calculateCRC(char* fileName, char* folder, int offset) {
|
||||
/******************************************
|
||||
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) {
|
||||
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
|
||||
boolean compareCRC(const char* database, uint32_t crc32sum, boolean renamerom, int offset) {
|
||||
#ifdef nointro
|
||||
char crcStr[9];
|
||||
print_Msg(F("CRC32... "));
|
||||
display_Update();
|
||||
@ -688,7 +687,7 @@ boolean compareCRC(const char* database, uint32_t crc32sum, boolean renamerom, i
|
||||
if (renamerom) {
|
||||
println_Msg(gamename);
|
||||
|
||||
// Rename file to nointro
|
||||
// Rename file to database name
|
||||
sd.chdir(folder);
|
||||
delay(100);
|
||||
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"));
|
||||
return 0;
|
||||
}
|
||||
#else // nointro
|
||||
println_Msg("");
|
||||
#endif // !nointro
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -835,18 +831,20 @@ static const char modeItem9[] PROGMEM = "NeoGeo Pocket (3V)";
|
||||
static const char modeItem10[] PROGMEM = "Intellivision";
|
||||
static const char modeItem11[] PROGMEM = "Colecovision";
|
||||
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 modeItem15[] PROGMEM = "Atari 2600";
|
||||
static const char modeItem16[] PROGMEM = "Magnavox Odyssey 2";
|
||||
static const char modeItem17[] PROGMEM = "Arcadia 2001";
|
||||
static const char modeItem18[] PROGMEM = "Fairchild Channel F";
|
||||
static const char modeItem19[] PROGMEM = "Super A'can";
|
||||
static const char modeItem20[] PROGMEM = "Flashrom Programmer";
|
||||
static const char modeItem21[] PROGMEM = "Self Test";
|
||||
static const char modeItem22[] PROGMEM = "About";
|
||||
//static const char modeItem22[] 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, string_reset2 };
|
||||
static const char modeItem20[] PROGMEM = "MSX";
|
||||
static const char modeItem21[] PROGMEM = "Pokemon Mini (3V)";
|
||||
static const char modeItem22[] PROGMEM = "Flashrom Programmer";
|
||||
static const char modeItem23[] PROGMEM = "Self Test (3V)";
|
||||
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
|
||||
void mainMenu() {
|
||||
@ -872,7 +870,7 @@ void mainMenu() {
|
||||
num_answers = 7;
|
||||
} else { // currPage == 4
|
||||
option_offset = 21;
|
||||
num_answers = 2;
|
||||
num_answers = 4;
|
||||
}
|
||||
// Copy menuOptions out of progmem
|
||||
convertPgm(modeOptions + option_offset, num_answers);
|
||||
@ -901,9 +899,7 @@ void mainMenu() {
|
||||
display_Clear();
|
||||
display_Update();
|
||||
setup_NES();
|
||||
#ifdef nointro
|
||||
getMapping();
|
||||
#endif
|
||||
checkStatus_NES();
|
||||
nesMenu();
|
||||
break;
|
||||
@ -1026,23 +1022,40 @@ void mainMenu() {
|
||||
break;
|
||||
#endif
|
||||
|
||||
#ifdef enable_FLASH
|
||||
#ifdef enable_MSX
|
||||
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();
|
||||
break;
|
||||
#endif
|
||||
|
||||
#ifdef enable_selftest
|
||||
case 20:
|
||||
case 22:
|
||||
selfTest();
|
||||
break;
|
||||
#endif
|
||||
|
||||
case 21:
|
||||
case 23:
|
||||
aboutScreen();
|
||||
break;
|
||||
|
||||
case 22:
|
||||
case 24:
|
||||
resetArduino();
|
||||
break;
|
||||
|
||||
@ -1093,8 +1106,9 @@ static const char* const consoles70Options[] PROGMEM = { consoles70Item1, consol
|
||||
static const char consoles80Item1[] PROGMEM = "NES/Famicom";
|
||||
static const char consoles80Item2[] PROGMEM = "PC Engine/TG16";
|
||||
static const char consoles80Item3[] PROGMEM = "SMS/GG/MIII/SG-1000";
|
||||
//static const char consoles80Item4[] PROGMEM = "Reset"; (stored in common strings array)
|
||||
static const char* const consoles80Options[] PROGMEM = { consoles80Item1, consoles80Item2, consoles80Item3, string_reset2 };
|
||||
static const char consoles80Item4[] PROGMEM = "MSX";
|
||||
//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
|
||||
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 handheldsItem2[] PROGMEM = "WonderSwan (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 handheldsItem6[] PROGMEM = "Pokemon Mini (3V)";
|
||||
//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
|
||||
void mainMenu() {
|
||||
@ -1191,6 +1206,9 @@ void addonMenu() {
|
||||
|
||||
#ifdef enable_FLASH
|
||||
case 4:
|
||||
#ifdef ENABLE_VSELECT
|
||||
setup_FlashVoltage();
|
||||
#endif
|
||||
flashMenu();
|
||||
break;
|
||||
#endif
|
||||
@ -1275,8 +1293,8 @@ void consoles80Menu() {
|
||||
// create menu with title and 6 options to choose from
|
||||
unsigned char consoles80Menu;
|
||||
// Copy menuOptions out of progmem
|
||||
convertPgm(consoles80Options, 4);
|
||||
consoles80Menu = question_box(F("Choose Adapter"), menuOptions, 4, 0);
|
||||
convertPgm(consoles80Options, 5);
|
||||
consoles80Menu = question_box(F("Choose Adapter"), menuOptions, 5, 0);
|
||||
|
||||
// wait for user choice to come back from the question box menu
|
||||
switch (consoles80Menu) {
|
||||
@ -1286,9 +1304,7 @@ void consoles80Menu() {
|
||||
display_Clear();
|
||||
display_Update();
|
||||
setup_NES();
|
||||
#ifdef nointro
|
||||
getMapping();
|
||||
#endif
|
||||
checkStatus_NES();
|
||||
nesMenu();
|
||||
break;
|
||||
@ -1306,7 +1322,14 @@ void consoles80Menu() {
|
||||
break;
|
||||
#endif
|
||||
|
||||
#ifdef enable_MSX
|
||||
case 3:
|
||||
setup_MSX();
|
||||
msxMenu();
|
||||
break;
|
||||
#endif
|
||||
|
||||
case 4:
|
||||
resetArduino();
|
||||
break;
|
||||
|
||||
@ -1345,8 +1368,8 @@ void handheldMenu() {
|
||||
// create menu with title and 6 options to choose from
|
||||
unsigned char handheldsMenu;
|
||||
// Copy menuOptions out of progmem
|
||||
convertPgm(handheldsOptions, 6);
|
||||
handheldsMenu = question_box(F("Choose Adapter"), menuOptions, 6, 0);
|
||||
convertPgm(handheldsOptions, 7);
|
||||
handheldsMenu = question_box(F("Choose Adapter"), menuOptions, 7, 0);
|
||||
|
||||
// wait for user choice to come back from the question box menu
|
||||
switch (handheldsMenu) {
|
||||
@ -1389,7 +1412,14 @@ void handheldMenu() {
|
||||
break;
|
||||
#endif
|
||||
|
||||
#ifdef enable_POKE
|
||||
case 5:
|
||||
setup_POKE();
|
||||
pokeMenu();
|
||||
break;
|
||||
#endif
|
||||
|
||||
case 6:
|
||||
resetArduino();
|
||||
break;
|
||||
|
||||
@ -1405,6 +1435,11 @@ void handheldMenu() {
|
||||
#ifdef enable_selftest
|
||||
|
||||
void selfTest() {
|
||||
#ifdef ENABLE_VSELECT
|
||||
// Set Automatic Voltage Selection to 3V
|
||||
setVoltage(VOLTS_SET_3V3);
|
||||
#endif
|
||||
|
||||
display_Clear();
|
||||
println_Msg(F("Self Test"));
|
||||
println_Msg(F(""));
|
||||
@ -2036,8 +2071,10 @@ void setup() {
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_VSELECT
|
||||
// Set power to low to protect carts
|
||||
setVoltage(VOLTS_SET_3V3);
|
||||
#endif
|
||||
|
||||
#ifdef enable_OLED
|
||||
display.begin();
|
||||
@ -2100,7 +2137,7 @@ void setup() {
|
||||
statusLED(true);
|
||||
|
||||
// Start menu system
|
||||
startMenu();
|
||||
mainMenu();
|
||||
}
|
||||
|
||||
/******************************************
|
||||
@ -3548,6 +3585,16 @@ void loop() {
|
||||
else if (mode == mode_SUPRACAN) {
|
||||
suprAcanMenu();
|
||||
}
|
||||
#endif
|
||||
#ifdef enable_MSX
|
||||
else if (mode == mode_MSX) {
|
||||
msxMenu();
|
||||
}
|
||||
#endif
|
||||
#ifdef enable_POKE
|
||||
else if (mode == mode_POKE) {
|
||||
pokeMenu();
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
display_Clear();
|
||||
|
@ -151,6 +151,13 @@
|
||||
|
||||
/****/
|
||||
|
||||
/* [ MSX ------------------------------------------- ]
|
||||
*/
|
||||
|
||||
//#define enable_MSX
|
||||
|
||||
/****/
|
||||
|
||||
/* [ PC Engine/TurboGrafx 16 -------------------------------------- ]
|
||||
*/
|
||||
|
||||
@ -158,6 +165,13 @@
|
||||
|
||||
/****/
|
||||
|
||||
/* [ Pokemon Mini -------------------------------------- ]
|
||||
*/
|
||||
|
||||
//#define enable_POKE
|
||||
|
||||
/****/
|
||||
|
||||
/* [ Sega Master System/Mark III/Game Gear/SG-1000 ---------------- ]
|
||||
*/
|
||||
|
||||
@ -253,7 +267,7 @@
|
||||
* 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 ------------------------------------------------------ ]
|
||||
* 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 ---- ]
|
||||
* Toggle to use calibration data from snes_clk.txt
|
||||
*/
|
||||
|
@ -87,6 +87,9 @@ static const char fairchildMenuItem5[] PROGMEM = "Reset";
|
||||
static const char* const menuOptionsFAIRCHILD[] PROGMEM = { fairchildMenuItem1, fairchildMenuItem2, fairchildMenuItem3, fairchildMenuItem4, fairchildMenuItem5 };
|
||||
|
||||
void setup_FAIRCHILD() {
|
||||
// Request 5V
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
|
||||
// Set Address Pins to Output
|
||||
// Channel F uses A0-A4 [A5-A23 UNUSED]
|
||||
//A0-A7
|
||||
@ -126,7 +129,6 @@ void setup_FAIRCHILD() {
|
||||
}
|
||||
|
||||
void fairchildMenu() {
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
convertPgm(menuOptionsFAIRCHILD, 5);
|
||||
uint8_t mainMenu = question_box(F("CHANNEL F MENU"), menuOptions, 5, 0);
|
||||
|
||||
|
@ -680,6 +680,41 @@ void id_Flash16() {
|
||||
/******************************************
|
||||
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() {
|
||||
// Set Address Pins to Output
|
||||
//A0-A7
|
||||
|
@ -41,8 +41,7 @@ static const char* const menuOptionsGBFlash[] PROGMEM = { GBFlashItem1, GBFlashI
|
||||
|
||||
// Start menu for both GB and GBA
|
||||
void gbxMenu() {
|
||||
setVoltage(VOLTS_SET_3V3);
|
||||
// create menu with title and 4 options to choose from
|
||||
// create menu with title and 5 options to choose from
|
||||
unsigned char gbType;
|
||||
// Copy menuOptions out of progmem
|
||||
convertPgm(menuOptionsGBx, 5);
|
||||
@ -51,7 +50,6 @@ void gbxMenu() {
|
||||
// wait for user choice to come back from the question box menu
|
||||
switch (gbType) {
|
||||
case 0:
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
display_Clear();
|
||||
display_Update();
|
||||
setup_GB();
|
||||
@ -59,7 +57,6 @@ void gbxMenu() {
|
||||
break;
|
||||
|
||||
case 1:
|
||||
setVoltage(VOLTS_SET_3V3);
|
||||
display_Clear();
|
||||
display_Update();
|
||||
setup_GBA();
|
||||
@ -69,7 +66,6 @@ void gbxMenu() {
|
||||
case 2:
|
||||
// create submenu with title and 7 options to choose from
|
||||
unsigned char gbFlash;
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
// Copy menuOptions out of progmem
|
||||
convertPgm(menuOptionsGBFlash, 7);
|
||||
gbFlash = question_box(F("Select type"), menuOptions, 7, 0);
|
||||
@ -97,7 +93,6 @@ void gbxMenu() {
|
||||
|
||||
case 1:
|
||||
//Flash MBC5
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
display_Clear();
|
||||
display_Update();
|
||||
setup_GB();
|
||||
@ -291,7 +286,7 @@ void gbxMenu() {
|
||||
}
|
||||
|
||||
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;
|
||||
// Copy menuOptions out of progmem
|
||||
convertPgm(menuOptionsGB, 4);
|
||||
@ -375,6 +370,9 @@ void gbMenu() {
|
||||
Setup
|
||||
*****************************************/
|
||||
void setup_GB() {
|
||||
// Request 5V
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
|
||||
// Set Address Pins to Output
|
||||
//A0-A7
|
||||
DDRF = 0xFF;
|
||||
@ -876,7 +874,7 @@ void getCartInfo_GB() {
|
||||
if (romType == 32) {
|
||||
sramBanks = 8;
|
||||
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
|
||||
}
|
||||
|
||||
|
@ -34,7 +34,6 @@ static const char GBASaveItem6[] PROGMEM = "1M FLASH";
|
||||
static const char* const saveOptionsGBA[] PROGMEM = { GBASaveItem1, GBASaveItem2, GBASaveItem3, GBASaveItem4, GBASaveItem5, GBASaveItem6 };
|
||||
|
||||
void gbaMenu() {
|
||||
setVoltage(VOLTS_SET_3V3);
|
||||
// create menu with title and 4 options to choose from
|
||||
unsigned char mainMenu;
|
||||
// Copy menuOptions out of progmem
|
||||
@ -247,6 +246,9 @@ void gbaMenu() {
|
||||
Setup
|
||||
*****************************************/
|
||||
void setup_GBA() {
|
||||
// Request 3.3V
|
||||
setVoltage(VOLTS_SET_3V3);
|
||||
|
||||
setROM_GBA();
|
||||
|
||||
// Get cart info
|
||||
@ -761,7 +763,7 @@ void getCartInfo_GBA() {
|
||||
}
|
||||
|
||||
// Get name
|
||||
buildRomName(romName, &sdBuffer[0xA0], 11);
|
||||
buildRomName(romName, &sdBuffer[0xA0], 12);
|
||||
|
||||
// Get ROM version
|
||||
romVersion = sdBuffer[0xBC];
|
||||
@ -894,6 +896,18 @@ void readROM_GBA() {
|
||||
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:
|
||||
myFile.close();
|
||||
}
|
||||
|
@ -17,7 +17,6 @@ static const char gbmMenuItem7[] PROGMEM = "Write Mapping";
|
||||
static const char* const menuOptionsGBM[] PROGMEM = { gbmMenuItem1, gbmMenuItem2, gbmMenuItem3, gbmMenuItem4, gbmMenuItem5, gbmMenuItem6, gbmMenuItem7 };
|
||||
|
||||
void gbmMenu() {
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
// create menu with title and 7 options to choose from
|
||||
unsigned char mainMenu;
|
||||
// Copy menuOptions out of progmem
|
||||
@ -185,6 +184,9 @@ void gbmMenu() {
|
||||
Setup
|
||||
*****************************************/
|
||||
void setup_GBM() {
|
||||
// Request 5V
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
|
||||
// Set RST(PH0) to Input
|
||||
DDRH &= ~(1 << 0);
|
||||
// Activate Internal Pullup Resistors
|
||||
|
@ -109,6 +109,9 @@ byte readByte_GBS(word myAddress) {
|
||||
}
|
||||
|
||||
void setup_GBSmart() {
|
||||
// Request 5V
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
|
||||
// take from setup_GB
|
||||
// Set RST(PH0) to Input
|
||||
DDRH &= ~(1 << 0);
|
||||
@ -145,7 +148,6 @@ void setup_GBSmart() {
|
||||
}
|
||||
|
||||
void gbSmartMenu() {
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
uint8_t mainMenu;
|
||||
|
||||
// Copy menuOptions out of progmem
|
||||
|
@ -99,6 +99,9 @@ static const char intvMenuItem3[] PROGMEM = "Set Mapper + Size";
|
||||
static const char* const menuOptionsINTV[] PROGMEM = { intvMenuItem1, intvMenuItem2, intvMenuItem3, string_reset2 };
|
||||
|
||||
void setup_INTV() {
|
||||
// Request 5V
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
|
||||
// Set Address Pins to Output (UNUSED)
|
||||
//A0-A7
|
||||
DDRF = 0xFF;
|
||||
@ -135,7 +138,6 @@ void setup_INTV() {
|
||||
}
|
||||
|
||||
void intvMenu() {
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
convertPgm(menuOptionsINTV, 4);
|
||||
uint8_t mainMenu = question_box(F("INTELLIVISION MENU"), menuOptions, 4, 0);
|
||||
|
||||
|
@ -13,6 +13,7 @@ word addrhi;
|
||||
word addrlo;
|
||||
word chksum;
|
||||
boolean is32x = 0;
|
||||
boolean isSVP = 0;
|
||||
|
||||
//***********************************************
|
||||
// EEPROM SAVE TYPES
|
||||
@ -86,7 +87,7 @@ unsigned long bramSize = 0;
|
||||
boolean realtec = 0;
|
||||
|
||||
#ifndef DEFAULT_VALUE_segaSram16bit
|
||||
#define DEFAULT_VALUE_segaSram16bit 0
|
||||
#define DEFAULT_VALUE_segaSram16bit 0
|
||||
#endif
|
||||
int segaSram16bit = DEFAULT_VALUE_segaSram16bit;
|
||||
|
||||
@ -183,6 +184,11 @@ void mdLoadConf() {
|
||||
}
|
||||
#endif
|
||||
|
||||
void pulse_clock(int n) {
|
||||
for (int i = 0; i < n; i++)
|
||||
PORTH ^= (1 << 1);
|
||||
}
|
||||
|
||||
/******************************************
|
||||
Menu
|
||||
*****************************************/
|
||||
@ -211,7 +217,6 @@ static const char* const menuOptionsSCD[] PROGMEM = { SCDMenuItem1, SCDMenuItem2
|
||||
|
||||
// Sega start menu
|
||||
void mdMenu() {
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
// create menu with title and 4 options to choose from
|
||||
unsigned char mdDev;
|
||||
// Copy menuOptions out of progmem
|
||||
@ -308,7 +313,7 @@ void mdCartMenu() {
|
||||
readRealtec_MD();
|
||||
} else {
|
||||
readROM_MD();
|
||||
// Calculate and compare CRC32 with nointro
|
||||
// Calculate and compare CRC32 with database
|
||||
if (is32x)
|
||||
//database, crcString, renamerom, offset
|
||||
compareCRC("32x.txt", 0, 1, 0);
|
||||
@ -458,6 +463,9 @@ void segaCDMenu() {
|
||||
Setup
|
||||
*****************************************/
|
||||
void setup_MD() {
|
||||
// Request 5V
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
|
||||
#ifdef use_md_conf
|
||||
mdLoadConf();
|
||||
#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)
|
||||
DDRH |= (1 << 0) | (1 << 1) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6);
|
||||
|
||||
// Set TIME(PJ0) to Output
|
||||
DDRJ |= (1 << 0);
|
||||
// Set TIME(PJ0), AS(PJ1) to Output
|
||||
DDRJ |= (1 << 0) | (1 << 1);
|
||||
|
||||
//set ASEL(PG5) to Output
|
||||
DDRG |= (1 << 5);
|
||||
|
||||
// Set Data Pins (D0-D15) to Input
|
||||
DDRC = 0x00;
|
||||
DDRA = 0x00;
|
||||
|
||||
// Setting RST(PH0) CLK(PH1) CS(PH3) WRH(PH4) WRL(PH5) OE(PH6) HIGH
|
||||
PORTH |= (1 << 0) | (1 << 1) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6);
|
||||
// Setting RST(PH0) CS(PH3) WRH(PH4) WRL(PH5) OE(PH6) HIGH
|
||||
PORTH |= (1 << 0) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6);
|
||||
|
||||
// Setting TIME(PJ0) HIGH
|
||||
PORTJ |= (1 << 0);
|
||||
// Setting TIME(PJ0) AS(PJ1) HIGH
|
||||
PORTJ |= (1 << 0) | (1 << 1);
|
||||
|
||||
// setting ASEL(PG5) HIGH
|
||||
PORTG |= (1 << 5);
|
||||
|
||||
delay(200);
|
||||
|
||||
@ -556,6 +570,12 @@ word readWord_MD(unsigned long myAddress) {
|
||||
PORTH &= ~(1 << 3);
|
||||
// Setting OE(PH6) LOW
|
||||
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
|
||||
NOP;
|
||||
@ -572,6 +592,12 @@ word readWord_MD(unsigned long myAddress) {
|
||||
PORTH |= (1 << 3);
|
||||
// Setting OE(PH6) HIGH
|
||||
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
|
||||
NOP;
|
||||
@ -718,6 +744,12 @@ void getCartInfo_MD() {
|
||||
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
|
||||
if (cartSize == 0x400000) {
|
||||
switch (chksum) {
|
||||
@ -1414,6 +1446,14 @@ void readROM_MD() {
|
||||
PORTH &= ~(1 << 3);
|
||||
// Setting OE(PH6) LOW
|
||||
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
|
||||
NOP;
|
||||
NOP;
|
||||
@ -1430,6 +1470,13 @@ void readROM_MD() {
|
||||
PORTH |= (1 << 3);
|
||||
// Setting OE(PH6) HIGH
|
||||
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
|
||||
if (((currBuffer == 0) && (currWord >= 256)) || (currBuffer > 0)) {
|
||||
@ -1463,6 +1510,14 @@ void readROM_MD() {
|
||||
PORTH &= ~(1 << 3);
|
||||
// Setting OE(PH6) LOW
|
||||
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
|
||||
NOP;
|
||||
NOP;
|
||||
@ -1479,6 +1534,13 @@ void readROM_MD() {
|
||||
PORTH |= (1 << 3);
|
||||
// Setting OE(PH6) HIGH
|
||||
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
|
||||
if (((currBuffer == 0) && (currWord >= 256)) || (currBuffer > 0)) {
|
||||
@ -1513,6 +1575,14 @@ void readROM_MD() {
|
||||
PORTH &= ~(1 << 3);
|
||||
// Setting OE(PH6) LOW
|
||||
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
|
||||
NOP;
|
||||
NOP;
|
||||
@ -1529,6 +1599,13 @@ void readROM_MD() {
|
||||
PORTH |= (1 << 3);
|
||||
// Setting OE(PH6) HIGH
|
||||
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]);
|
||||
d += 2;
|
||||
@ -2006,13 +2083,12 @@ void busyCheck_MD() {
|
||||
//******************************************
|
||||
// EEPROM Functions
|
||||
//******************************************
|
||||
void EepromInit(byte eepmode) { // Acclaim Type 2
|
||||
PORTF = 0x00; // ADDR A0-A7
|
||||
PORTK = 0x00; // ADDR A8-A15
|
||||
PORTL = 0x10; // ADDR A16-A23
|
||||
PORTA = 0x00; // DATA D8-D15
|
||||
PORTH |= (1 << 0); // /RES HIGH
|
||||
|
||||
void EepromInit(byte eepmode) { // Acclaim Type 2
|
||||
PORTF = 0x00; // ADDR A0-A7
|
||||
PORTK = 0x00; // ADDR A8-A15
|
||||
PORTL = 0x10; // ADDR A16-A23
|
||||
PORTA = 0x00; // DATA D8-D15
|
||||
PORTH |= (1 << 0); // /RES HIGH
|
||||
PORTC = eepmode; // EEPROM Switch: 0 = Enable (Read EEPROM), 1 = Disable (Read ROM)
|
||||
PORTH &= ~(1 << 3); // CE LOW
|
||||
PORTH &= ~(1 << 4) & ~(1 << 5); // /UDSW + /LDSW LOW
|
||||
@ -2250,7 +2326,6 @@ void EepromSet1() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void EepromDevice() { // 24C02+
|
||||
EepromSet1();
|
||||
EepromSet0();
|
||||
|
1662
Cart_Reader/MSX.ino
Normal file
1662
Cart_Reader/MSX.ino
Normal file
File diff suppressed because it is too large
Load Diff
@ -114,7 +114,6 @@ static const char* const sectorOptionsN64[] PROGMEM = { N64SectorItem1, N64Secto
|
||||
|
||||
// N64 start menu
|
||||
void n64Menu() {
|
||||
setVoltage(VOLTS_SET_3V3);
|
||||
// create menu with title and 5 options to choose from
|
||||
unsigned char n64Dev;
|
||||
// Copy menuOptions out of progmem
|
||||
@ -400,6 +399,9 @@ void n64CartMenu() {
|
||||
Setup
|
||||
*****************************************/
|
||||
void setup_N64_Controller() {
|
||||
// Request 3.3V
|
||||
setVoltage(VOLTS_SET_3V3);
|
||||
|
||||
// Output a low signal
|
||||
PORTH &= ~(1 << 4);
|
||||
// Set Controller Data Pin(PH4) to Input
|
||||
@ -407,6 +409,9 @@ void setup_N64_Controller() {
|
||||
}
|
||||
|
||||
void setup_N64_Cart() {
|
||||
// Request 3.3V
|
||||
setVoltage(VOLTS_SET_3V3);
|
||||
|
||||
// Set Address Pins to Output and set them low
|
||||
//A0-A7
|
||||
DDRF = 0xFF;
|
||||
@ -1052,7 +1057,7 @@ void nextscreen() {
|
||||
}
|
||||
|
||||
void controllerTest_Display() {
|
||||
int mode = 0;
|
||||
boolean cmode = 1;
|
||||
|
||||
//name of the current displayed result
|
||||
String anastick = "";
|
||||
@ -1162,7 +1167,7 @@ void controllerTest_Display() {
|
||||
display.drawStr(36, 8, "Range Test");
|
||||
display.drawLine(0, 9, 128, 9);
|
||||
|
||||
if (mode == 0) {
|
||||
if (cmode == 0) {
|
||||
// Print Stick X Value
|
||||
String stickx = String("X:" + String(N64_status.stick_x, DEC) + " ");
|
||||
printSTR(stickx, 22 + 54, 26);
|
||||
@ -1186,7 +1191,7 @@ void controllerTest_Display() {
|
||||
display.drawPixel(10 + xax - 68 / 4, 12 + yax + 68 / 4);
|
||||
|
||||
//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);
|
||||
//Update LCD
|
||||
display.updateDisplay();
|
||||
@ -1199,11 +1204,11 @@ void controllerTest_Display() {
|
||||
|
||||
// switch mode
|
||||
if (button == "Press a button" && lastbutton == "Z") {
|
||||
if (mode == 0) {
|
||||
mode = 1;
|
||||
if (cmode == 0) {
|
||||
cmode = 1;
|
||||
display.clearDisplay();
|
||||
} else {
|
||||
mode = 0;
|
||||
cmode = 0;
|
||||
display.clearDisplay();
|
||||
}
|
||||
}
|
||||
|
1615
Cart_Reader/NES.ino
1615
Cart_Reader/NES.ino
File diff suppressed because it is too large
Load Diff
@ -21,6 +21,9 @@ uint8_t manufacturerID;
|
||||
uint8_t deviceID;
|
||||
|
||||
void setup_NGP() {
|
||||
// Request 3.3V
|
||||
setVoltage(VOLTS_SET_3V3);
|
||||
|
||||
// A0 - A7
|
||||
DDRF = 0xff;
|
||||
// A8 - A15
|
||||
@ -52,7 +55,6 @@ void setup_NGP() {
|
||||
}
|
||||
|
||||
void ngpMenu() {
|
||||
setVoltage(VOLTS_SET_3V3);
|
||||
uint8_t mainMenu;
|
||||
|
||||
convertPgm(menuOptionsNGP, 4);
|
||||
|
@ -69,6 +69,9 @@ static const char ody2MenuItem4[] PROGMEM = "Reset";
|
||||
static const char* const menuOptionsODY2[] PROGMEM = { ody2MenuItem1, ody2MenuItem2, ody2MenuItem3, ody2MenuItem4 };
|
||||
|
||||
void setup_ODY2() {
|
||||
// Request 5V
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
|
||||
// Set Address Pins to Output
|
||||
// Odyssey 2 uses A0-A13 [A14-A23 UNUSED]
|
||||
//A0-A7
|
||||
@ -110,7 +113,6 @@ void setup_ODY2() {
|
||||
}
|
||||
|
||||
void ody2Menu() {
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
convertPgm(menuOptionsODY2, 4);
|
||||
uint8_t mainMenu = question_box(F("ODYSSEY 2 MENU"), menuOptions, 4, 0);
|
||||
|
||||
|
@ -41,7 +41,7 @@
|
||||
/*==== VARIABLES ==================================================*/
|
||||
|
||||
// Firmware Version
|
||||
char ver[5] = "12.5";
|
||||
char ver[5] = "12.6";
|
||||
|
||||
// Clock speed
|
||||
unsigned long clock = CS_16MHZ;
|
||||
@ -173,55 +173,76 @@ VOLTS setVoltage(VOLTS volts) {
|
||||
switch(volts) {
|
||||
/* 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
|
||||
#if defined(ENABLE_VSELECT)
|
||||
PORTD &= ~(1 << 7); /*[1]*/
|
||||
voltage = VOLTS_SET_5V;
|
||||
#endif
|
||||
#if defined(ENABLE_VSELECT)
|
||||
PORTD &= ~(1 << 7); /*[1]*/
|
||||
voltage = VOLTS_SET_5V;
|
||||
#endif
|
||||
|
||||
// Adjust clock speed when 3V3FIX is enabled
|
||||
#if defined(ENABLE_3V3FIX)
|
||||
// Stop serial if running
|
||||
#if !defined(enable_serial) && defined(ENABLE_UPDATER)
|
||||
ClockedSerial.end();
|
||||
#endif
|
||||
// Set clock speed
|
||||
clock = CS_16MHZ;
|
||||
setClockScale(volts); /*[2]*/
|
||||
// Restart serial
|
||||
#if !defined(enable_serial) && defined(ENABLE_UPDATER)
|
||||
ClockedSerial.begin(UPD_BAUD);
|
||||
#endif
|
||||
#else
|
||||
clock = CS_16MHZ;
|
||||
#endif
|
||||
#if defined(ENABLE_3V3FIX)
|
||||
// Stop serial if running
|
||||
#if !defined(enable_serial) && defined(ENABLE_UPDATER)
|
||||
ClockedSerial.end();
|
||||
#endif
|
||||
// Set clock speed
|
||||
clock = CS_16MHZ;
|
||||
setClockScale(volts); /*[2]*/
|
||||
// Restart serial
|
||||
#if !defined(enable_serial) && defined(ENABLE_UPDATER)
|
||||
ClockedSerial.begin(UPD_BAUD);
|
||||
#endif
|
||||
#else
|
||||
clock = CS_16MHZ;
|
||||
#endif
|
||||
|
||||
// Done
|
||||
return VOLTS_SUCCESS;
|
||||
|
||||
/* 3.3V */
|
||||
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
|
||||
#if defined(ENABLE_3V3FIX)
|
||||
#if !defined(enable_serial) && defined(ENABLE_UPDATER)
|
||||
ClockedSerial.end();
|
||||
#endif
|
||||
clock = CS_8MHZ;
|
||||
setClockScale(volts); /*[2]*/
|
||||
#if !defined(enable_serial) && defined(ENABLE_UPDATER)
|
||||
ClockedSerial.begin(UPD_BAUD);
|
||||
#endif
|
||||
#endif
|
||||
#if defined(ENABLE_3V3FIX)
|
||||
#if !defined(enable_serial) && defined(ENABLE_UPDATER)
|
||||
ClockedSerial.end();
|
||||
#endif
|
||||
// Set clock speed
|
||||
clock = CS_8MHZ;
|
||||
setClockScale(volts); /*[2]*/
|
||||
#if !defined(enable_serial) && defined(ENABLE_UPDATER)
|
||||
ClockedSerial.begin(UPD_BAUD);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Adjust voltage high if VSELECT is available
|
||||
#if defined(ENABLE_VSELECT)
|
||||
PORTD |= (1 << 7); /*[1]*/
|
||||
voltage = VOLTS_SET_3V3;
|
||||
#endif
|
||||
#if defined(ENABLE_VSELECT)
|
||||
PORTD |= (1 << 7); /*[1]*/
|
||||
voltage = VOLTS_SET_3V3;
|
||||
#endif
|
||||
|
||||
// Done
|
||||
return VOLTS_SUCCESS;
|
||||
@ -232,6 +253,9 @@ VOLTS setVoltage(VOLTS volts) {
|
||||
}
|
||||
}
|
||||
#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))) {
|
||||
return VOLTS_NOTENABLED;
|
||||
}
|
||||
|
@ -70,7 +70,6 @@ static const char *const menuOptionspceTC[] PROGMEM = { pceTCMenuItem1, string_r
|
||||
|
||||
// PCE start menu
|
||||
void pcsMenu(void) {
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
// create menu with title and 3 options to choose from
|
||||
unsigned char pceDev;
|
||||
// Copy menuOptions out of progmem
|
||||
@ -171,6 +170,9 @@ void pin_init_PCE(void) {
|
||||
}
|
||||
|
||||
void setup_cart_PCE(void) {
|
||||
// Request 5V
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
|
||||
// Set cicrstPin(PG1) to Output
|
||||
DDRG |= (1 << 1);
|
||||
// Output a high to disable CIC
|
||||
@ -411,6 +413,12 @@ uint32_t detect_rom_size_PCE(void) {
|
||||
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;
|
||||
}
|
||||
|
@ -101,6 +101,9 @@ byte bank1;
|
||||
//******************************************
|
||||
|
||||
void setup_PCW() {
|
||||
// Request 5V
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
|
||||
// Set Address Pins to Output
|
||||
//A8-A15
|
||||
DDRK = 0xFF;
|
||||
@ -141,7 +144,6 @@ static const char pcwmenuItem3[] PROGMEM = "Write SRAM";
|
||||
static const char* const menuOptionsPCW[] PROGMEM = { pcwmenuItem1, pcwmenuItem2, pcwmenuItem3, string_reset2 };
|
||||
|
||||
void pcwMenu() {
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
convertPgm(menuOptionsPCW, 4);
|
||||
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) {
|
||||
rom_size = 0x200000;
|
||||
} else {
|
||||
rom_size = 0x400000;
|
||||
rom_size = 0x400000;
|
||||
}
|
||||
|
||||
return rom_size;
|
||||
|
283
Cart_Reader/POKEMINI.ino
Normal file
283
Cart_Reader/POKEMINI.ino
Normal 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
|
@ -50,7 +50,6 @@ static const char sfmGameMenuItem4[] PROGMEM = "Switch Game";
|
||||
static const char* const menuOptionsSFMGame[] PROGMEM = { sfmGameMenuItem1, sfmGameMenuItem2, sfmGameMenuItem3, sfmGameMenuItem4, string_reset2 };
|
||||
|
||||
void sfmMenu() {
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
// create menu with title and 3 options to choose from
|
||||
unsigned char mainMenu;
|
||||
// Copy menuOptions out of progmem
|
||||
@ -525,6 +524,9 @@ void getGames(char gameCode[8][20], boolean* hasMenu, byte* numGames) {
|
||||
Setup
|
||||
*****************************************/
|
||||
void setup_SFM() {
|
||||
// Request 5V
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
|
||||
// Set cicrstPin(PG1) to Output
|
||||
DDRG |= (1 << 1);
|
||||
// Output a high signal to disable snesCIC
|
||||
|
@ -26,31 +26,30 @@ static const char SMSRomSizeItem1[] PROGMEM = "8 KB";
|
||||
static const char SMSRomSizeItem2[] PROGMEM = "16 KB";
|
||||
static const char SMSRomSizeItem3[] PROGMEM = "24 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 SMSRomSizeItem6[] PROGMEM = "48 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 SMSRomSizeItem7[] PROGMEM = "64 KB";
|
||||
static const char SMSRomSizeItem8[] PROGMEM = "128 KB";
|
||||
static const char SMSRomSizeItem9[] PROGMEM = "256 KB";
|
||||
static const char SMSRomSizeItem10[] PROGMEM = "512 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 SMSRomSizeMenu[] PROGMEM = { SMSRomSizeItem4, SMSRomSizeItem7, SMSRomSizeItem8, SMSRomSizeItem9, SMSRomSizeItem10, SMSRomSizeItem11}; // Rom sizes for SMS and GG
|
||||
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
|
||||
|
||||
// Init systems
|
||||
static bool system_sms = false; // SMS or MarkIII
|
||||
static bool system_gg = false; // GameGear
|
||||
static bool system_sg1000 = false; // SG-1000
|
||||
static bool system_sms = false; // SMS or MarkIII
|
||||
static bool system_gg = false; // GameGear
|
||||
static bool system_sg1000 = false; // SG-1000
|
||||
|
||||
// Init adapters
|
||||
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_retron = false; // Retron 3in1 adapter (SMS-to-MD or GG-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_retron = false; // Retron 3in1 adapter (SMS-to-MD or GG-to-MD)
|
||||
|
||||
//*********************************************************
|
||||
// Main menu with systems/adapters setups to choose from
|
||||
//*********************************************************
|
||||
void smsMenu() {
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
unsigned char SMSSetup;
|
||||
convertPgm(SMSAdapterMenu, 6);
|
||||
SMSSetup = question_box(F("Select your setup"), menuOptions, 6, 0);
|
||||
@ -62,7 +61,7 @@ void smsMenu() {
|
||||
adapter_raphnet = true;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
case 1:
|
||||
// SMS with Retrode adapter
|
||||
system_sms = true;
|
||||
adapter_retrode = true;
|
||||
@ -156,6 +155,9 @@ void smsOperations() {
|
||||
// Setup I/O
|
||||
//********************************
|
||||
void setup_SMS() {
|
||||
// Request 5V
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
|
||||
// Set Address Pins to Output
|
||||
//A0-A7
|
||||
DDRF = 0xFF;
|
||||
@ -460,23 +462,23 @@ void getCartInfo_SMS() {
|
||||
SMSRomSize = question_box(F("Select ROM size"), menuOptions, 4, 0);
|
||||
switch (SMSRomSize) {
|
||||
case 0:
|
||||
cartSize = 8 * 1024UL; // 8KB
|
||||
cartSize = 8 * 1024UL; // 8KB
|
||||
break;
|
||||
case 1:
|
||||
cartSize = 16 * 1024UL; // 16KB
|
||||
cartSize = 16 * 1024UL; // 16KB
|
||||
break;
|
||||
case 2:
|
||||
cartSize = 24 * 1024UL; // 24KB
|
||||
cartSize = 24 * 1024UL; // 24KB
|
||||
break;
|
||||
case 3:
|
||||
cartSize = 32 * 1024UL; // 32KB
|
||||
cartSize = 32 * 1024UL; // 32KB
|
||||
break;
|
||||
//case 4:
|
||||
// cartSize = 40 * 1024UL; // 40KB
|
||||
// break;
|
||||
//case 5:
|
||||
// cartSize = 48 * 1024UL; // 48KB
|
||||
// break;
|
||||
//case 4:
|
||||
// cartSize = 40 * 1024UL; // 40KB
|
||||
// break;
|
||||
//case 5:
|
||||
// cartSize = 48 * 1024UL; // 48KB
|
||||
// break;
|
||||
}
|
||||
} else {
|
||||
// Rom sizes for SMS and GG
|
||||
@ -484,22 +486,22 @@ void getCartInfo_SMS() {
|
||||
SMSRomSize = question_box(F("Select ROM size"), menuOptions, 6, 0);
|
||||
switch (SMSRomSize) {
|
||||
case 0:
|
||||
cartSize = 32 * 1024UL; // 32KB
|
||||
cartSize = 32 * 1024UL; // 32KB
|
||||
break;
|
||||
case 1:
|
||||
cartSize = 64 * 1024UL; // 64KB
|
||||
cartSize = 64 * 1024UL; // 64KB
|
||||
break;
|
||||
case 2:
|
||||
cartSize = 128 * 1024UL; // 128KB
|
||||
cartSize = 128 * 1024UL; // 128KB
|
||||
break;
|
||||
case 3:
|
||||
cartSize = 256 * 1024UL; // 256KB
|
||||
cartSize = 256 * 1024UL; // 256KB
|
||||
break;
|
||||
case 4:
|
||||
cartSize = 512 * 1024UL; // 512KB
|
||||
cartSize = 512 * 1024UL; // 512KB
|
||||
break;
|
||||
case 5:
|
||||
cartSize = 1024 * 1024UL; // 1MB
|
||||
cartSize = 1024 * 1024UL; // 1MB
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -534,13 +536,13 @@ void getCartInfo_SMS() {
|
||||
println_Msg(F(" "));
|
||||
}
|
||||
|
||||
// Wait for user input
|
||||
#if (defined(enable_LCD) || defined(enable_OLED))
|
||||
// Prints string out of the common strings array either with or without newline
|
||||
print_STR(press_button_STR, 1);
|
||||
display_Update();
|
||||
wait();
|
||||
#endif
|
||||
// Wait for user input
|
||||
#if (defined(enable_LCD) || defined(enable_OLED))
|
||||
// Prints string out of the common strings array either with or without newline
|
||||
print_STR(press_button_STR, 1);
|
||||
display_Update();
|
||||
wait();
|
||||
#endif
|
||||
|
||||
// Turn off LED
|
||||
setColor_RGB(0, 0, 0);
|
||||
@ -647,9 +649,9 @@ void readROM_SMS() {
|
||||
compareCRC("sg1000.txt", 0, 1, 0);
|
||||
}
|
||||
|
||||
#ifdef global_log
|
||||
save_log();
|
||||
#endif
|
||||
#ifdef global_log
|
||||
save_log();
|
||||
#endif
|
||||
|
||||
print_STR(press_button_STR, 1);
|
||||
}
|
||||
@ -709,7 +711,7 @@ void readSRAM_SMS() {
|
||||
print_STR(press_button_STR, 1);
|
||||
display_Update();
|
||||
} else {
|
||||
print_FatalError(sd_error_STR);
|
||||
print_FatalError(sd_error_STR);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -70,7 +70,6 @@ static const char* const menuOptionsRepro[] PROGMEM = { reproMenuItem1, reproMen
|
||||
|
||||
// SNES repro menu
|
||||
void reproMenu() {
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
// create menu with title and 6 options to choose from
|
||||
unsigned char snsRepro;
|
||||
// Copy menuOptions out of progmem
|
||||
@ -133,7 +132,6 @@ void reproMenu() {
|
||||
|
||||
// SNES start menu
|
||||
void snsMenu() {
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
// create menu with title and 6 options to choose from
|
||||
unsigned char snsCart;
|
||||
// Copy menuOptions out of progmem
|
||||
@ -174,6 +172,7 @@ void snsMenu() {
|
||||
|
||||
#ifdef enable_FLASH
|
||||
case 3:
|
||||
setup_FlashVoltage();
|
||||
reproMenu();
|
||||
break;
|
||||
#endif
|
||||
@ -192,7 +191,6 @@ void snsMenu() {
|
||||
|
||||
// SNES Menu
|
||||
void snesMenu() {
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
// create menu with title and 7 options to choose from
|
||||
unsigned char mainMenu;
|
||||
// Copy menuOptions out of progmem
|
||||
@ -388,6 +386,9 @@ void stopSnesClocks_resetCic_resetCart() {
|
||||
Setup
|
||||
*****************************************/
|
||||
void setup_Snes() {
|
||||
// Request 5V
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
|
||||
// Set cicrstPin(PG1) to Output
|
||||
DDRG |= (1 << 1);
|
||||
// Output a high signal until we're ready to start
|
||||
|
@ -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 };
|
||||
|
||||
void setup_SuprAcan() {
|
||||
// Request 5V
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
|
||||
// addr as output
|
||||
|
@ -42,7 +42,6 @@ static const char* const menuOptionsSVFlash[] PROGMEM = { svFlashMenuItem1, svFl
|
||||
|
||||
|
||||
void svMenu() {
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
// create menu with title and 3 options to choose from
|
||||
unsigned char mainMenu;
|
||||
// Copy menuOptions out of progmem
|
||||
@ -102,6 +101,9 @@ void svMenu() {
|
||||
Setup
|
||||
*****************************************/
|
||||
void setup_SV() {
|
||||
// Request 5V
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
|
||||
// Set cicrstPin(PG1) to Output
|
||||
DDRG |= (1 << 1);
|
||||
// Output a high signal until we're ready to start
|
||||
|
@ -56,6 +56,9 @@
|
||||
//******************************************
|
||||
|
||||
void setup_VBOY() {
|
||||
// Request 5V
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
|
||||
// Set Address Pins to Output
|
||||
//A0-A7
|
||||
DDRF = 0xFF;
|
||||
@ -101,7 +104,6 @@ static const char vboyMenuItem3[] PROGMEM = "Write SRAM";
|
||||
static const char* const menuOptionsVBOY[] PROGMEM = { vboyMenuItem1, vboyMenuItem2, vboyMenuItem3, string_reset2 };
|
||||
|
||||
void vboyMenu() {
|
||||
setVoltage(VOLTS_SET_5V);
|
||||
convertPgm(menuOptionsVBOY, 4);
|
||||
uint8_t mainMenu = question_box(F("VIRTUALBOY MENU"), menuOptions, 4, 0);
|
||||
|
||||
|
@ -46,6 +46,9 @@ static uint8_t wsEepromShiftReg[2];
|
||||
static boolean wsWitch = false;
|
||||
|
||||
void setup_WS() {
|
||||
// Request 3.3V
|
||||
setVoltage(VOLTS_SET_3V3);
|
||||
|
||||
// A-1 - A6
|
||||
DDRF = 0xff;
|
||||
// A7 - A14
|
||||
@ -117,7 +120,6 @@ static boolean headerCheck() {
|
||||
}
|
||||
|
||||
void wsMenu() {
|
||||
setVoltage(VOLTS_SET_3V3);
|
||||
uint8_t mainMenu = (wsWitch ? 5 : 4);
|
||||
|
||||
convertPgm(menuOptionsWS, mainMenu);
|
||||
|
@ -53,6 +53,9 @@ byte newwsvsize;
|
||||
//******************************************
|
||||
|
||||
void setup_WSV() {
|
||||
// Request 3.3V
|
||||
setVoltage(VOLTS_SET_3V3);
|
||||
|
||||
// Set Address Pins to Output
|
||||
//A0-A7
|
||||
DDRF = 0xFF;
|
||||
@ -106,7 +109,6 @@ static const char wsvMenuItem3[] PROGMEM = "Set Size";
|
||||
static const char* const menuOptionsSV[] PROGMEM = { wsvMenuItem1, wsvMenuItem2, wsvMenuItem3, string_reset2 };
|
||||
|
||||
void wsvMenu() {
|
||||
setVoltage(VOLTS_SET_3V3);
|
||||
convertPgm(menuOptionsSV, 4);
|
||||
uint8_t mainMenu = question_box(F("SUPERVISION MENU"), menuOptions, 4, 0);
|
||||
|
||||
|
@ -50,6 +50,8 @@ Happy making. 🔧🔨😊
|
||||
- Fairchild Channel F
|
||||
- Magnavox Odyssey 2
|
||||
- Super A'Can
|
||||
- MSX
|
||||
- Pokemon Mini
|
||||
|
||||
#### Open Source Licenses:
|
||||
- Software(everything in Cart_Reader folder) = GPL v3
|
||||
|
@ -78,11 +78,6 @@ BA58ED29,716956B4,4E45531A100010080000070700000001
|
||||
Name
|
||||
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
|
||||
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.
|
||||
|
||||
|
@ -364,8 +364,8 @@ Sky Jinks,32,17
|
||||
Sky Skipper,64,17
|
||||
Slot Machine,32,19
|
||||
Slot Racers,32,20
|
||||
Smurf - Rescue in Gargamel's Castle,248,19
|
||||
Smurfs Save the Day,248,44
|
||||
Smurf Rescue in Gargamels Castle,248,19
|
||||
Smurfs Save the Day,248,41
|
||||
Sneak 'n Peek,64,28
|
||||
Snoopy and the Red Baron,248,21
|
||||
Solar Fox,248,33
|
||||
|
727
sd/msxcart.txt
Normal file
727
sd/msxcart.txt
Normal 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
|
BIN
sd/nes20db.txt
BIN
sd/nes20db.txt
Binary file not shown.
Loading…
Reference in New Issue
Block a user