replace 5200 and ARC cart selection code with code used in NES, COLV & INTV

This commit is contained in:
smesgr9000 2024-04-29 19:09:50 +02:00
parent 06d5f28d0c
commit 9909fdafb3
7 changed files with 431 additions and 624 deletions

View File

@ -136,7 +136,6 @@ void a5200Menu() {
case 0: case 0:
// Select Cart // Select Cart
setCart_5200(); setCart_5200();
wait();
setup_5200(); setup_5200();
break; break;
@ -632,258 +631,44 @@ setmapper:
//****************************************** //******************************************
// CART SELECT CODE // CART SELECT CODE
//****************************************** //******************************************
struct database_entry_5200 {
byte gameMapper;
byte gameSize;
};
FsFile a5200csvFile; void readDataLine_5200(FsFile& database, struct database_entry_5200* entry) {
char a5200game[39]; // title // Read mapper
char a5200mm[3]; // mapper entry->gameMapper = database.read() - 48;
char a5200rr[3]; // romsize
char a5200ll[4]; // linelength (previous line)
unsigned long a5200csvpos; // CSV File Position
char a5200cartCSV[] = "5200.txt"; // CSV List
char a5200csvEND[] = "EOF"; // CSV End Marker for scrolling
bool readLine_5200(FsFile& f, char* line, size_t maxLen) { // Skip over semicolon
for (size_t n = 0; n < maxLen; n++) { database.seekCur(1);
int c = f.read();
if (c < 0 && n == 0) return false; // EOF
if (c < 0 || c == '\n') {
line[n] = 0;
return true;
}
line[n] = c;
}
return false; // line too long
}
bool readVals_5200(char* a5200game, char* a5200mm, char* a5200rr, char* a5200ll) { // Read rom size
char line[44]; entry->gameSize = database.read() - 48;
a5200csvpos = a5200csvFile.position();
if (!readLine_5200(a5200csvFile, line, sizeof(line))) {
return false; // EOF or too long
}
char* comma = strtok(line, ",");
int x = 0;
while (comma != NULL) {
if (x == 0)
strcpy(a5200game, comma);
else if (x == 1)
strcpy(a5200mm, comma);
else if (x == 2)
strcpy(a5200rr, comma);
else if (x == 3)
strcpy(a5200ll, comma);
comma = strtok(NULL, ",");
x += 1;
}
return true;
}
bool getCartListInfo_5200() { // Skip rest of line
bool buttonreleased = 0; database.seekCur(2);
bool cartselected = 0;
#if (defined(ENABLE_OLED) || defined(ENABLE_LCD))
display_Clear();
println_Msg(F(" HOLD TO FAST CYCLE"));
display_Update();
#else
Serial.println(F("HOLD BUTTON TO FAST CYCLE"));
#endif
delay(2000);
#if defined(ENABLE_OLED)
buttonVal1 = (PIND & (1 << 7)); // PD7
#elif defined(ENABLE_LCD)
boolean buttonVal1 = (PING & (1 << 2)); //PG2
#endif
if (buttonVal1 == LOW) { // Button Held - Fast Cycle
while (1) { // Scroll Game List
while (readVals_5200(a5200game, a5200mm, a5200rr, a5200ll)) {
if (strcmp(a5200csvEND, a5200game) == 0) {
a5200csvFile.seek(0); // Restart
} else {
#if (defined(ENABLE_OLED) || defined(ENABLE_LCD))
display_Clear();
println_Msg(F("CART TITLE:"));
println_Msg(FS(FSTRING_EMPTY));
println_Msg(a5200game);
display_Update();
#else
Serial.print(F("CART TITLE:"));
Serial.println(a5200game);
#endif
#if defined(ENABLE_OLED)
buttonVal1 = (PIND & (1 << 7)); // PD7
#elif defined(ENABLE_LCD)
buttonVal1 = (PING & (1 << 2)); //PG2
#endif
if (buttonVal1 == HIGH) { // Button Released
buttonreleased = 1;
break;
}
if (buttonreleased) {
buttonreleased = 0; // Reset Flag
break;
}
}
}
#if defined(ENABLE_OLED)
buttonVal1 = (PIND & (1 << 7)); // PD7
#elif defined(ENABLE_LCD)
buttonVal1 = (PING & (1 << 2)); //PG2
#endif
if (buttonVal1 == HIGH) // Button Released
break;
}
}
#if (defined(ENABLE_OLED) || defined(ENABLE_LCD))
display.setCursor(0, 56);
println_Msg(F("FAST CYCLE OFF"));
display_Update();
#else
Serial.println(FS(FSTRING_EMPTY));
Serial.println(F("FAST CYCLE OFF"));
Serial.println(F("PRESS BUTTON TO STEP FORWARD"));
Serial.println(F("DOUBLE CLICK TO STEP BACK"));
Serial.println(F("HOLD TO SELECT"));
Serial.println(FS(FSTRING_EMPTY));
#endif
while (readVals_5200(a5200game, a5200mm, a5200rr, a5200ll)) {
if (strcmp(a5200csvEND, a5200game) == 0) {
a5200csvFile.seek(0); // Restart
} else {
#if (defined(ENABLE_OLED) || defined(ENABLE_LCD))
display_Clear();
println_Msg(F("CART TITLE:"));
println_Msg(FS(FSTRING_EMPTY));
println_Msg(a5200game);
display.setCursor(0, 48);
#if defined(ENABLE_OLED)
print_STR(press_to_change_STR, 1);
print_STR(right_to_select_STR, 1);
#elif defined(ENABLE_LCD)
print_STR(rotate_to_change_STR, 1);
print_STR(press_to_select_STR, 1);
#endif
display_Update();
#else
Serial.print(F("CART TITLE:"));
Serial.println(a5200game);
#endif
while (1) { // Single Step
uint8_t b = checkButton();
if (b == 1) { // Continue (press)
break;
}
if (b == 2) { // Reset to Start of List (doubleclick)
byte prevline = strtol(a5200ll, NULL, 10);
a5200csvpos -= prevline;
a5200csvFile.seek(a5200csvpos);
break;
}
if (b == 3) { // Long Press - Select Cart (hold)
new5200mapper = strtol(a5200mm, NULL, 10);
new5200size = strtol(a5200rr, NULL, 10);
EEPROM_writeAnything(7, new5200mapper);
EEPROM_writeAnything(8, new5200size);
cartselected = 1; // SELECTION MADE
#if (defined(ENABLE_OLED) || defined(ENABLE_LCD))
println_Msg(F("SELECTION MADE"));
display_Update();
#else
Serial.println(F("SELECTION MADE"));
#endif
break;
}
}
if (cartselected) {
cartselected = 0; // Reset Flag
return true;
}
}
}
#if (defined(ENABLE_OLED) || defined(ENABLE_LCD))
println_Msg(FS(FSTRING_EMPTY));
println_Msg(FS(FSTRING_END_OF_FILE));
display_Update();
#else
Serial.println(FS(FSTRING_END_OF_FILE));
#endif
return false;
}
void checkCSV_5200() {
if (getCartListInfo_5200()) {
#if (defined(ENABLE_OLED) || defined(ENABLE_LCD))
display_Clear();
println_Msg(FS(FSTRING_CART_SELECTED));
println_Msg(FS(FSTRING_EMPTY));
println_Msg(a5200game);
display_Update();
// Display Settings
display.setCursor(0, 56);
print_Msg(F("CODE: M"));
print_Msg(new5200mapper);
print_Msg(F("/R"));
println_Msg(new5200size);
display_Update();
#else
Serial.println(FS(FSTRING_EMPTY));
Serial.println(FS(FSTRING_CART_SELECTED));
Serial.println(a5200game);
// Display Settings
Serial.print(F("CODE: M"));
Serial.print(new5200mapper);
Serial.print(F("/R"));
Serial.println(new5200size);
Serial.println(FS(FSTRING_EMPTY));
#endif
} else {
#if (defined(ENABLE_OLED) || defined(ENABLE_LCD))
display.setCursor(0, 56);
println_Msg(FS(FSTRING_NO_SELECTION));
display_Update();
#else
Serial.println(FS(FSTRING_NO_SELECTION));
#endif
}
}
void checkSize_5200() {
EEPROM_readAnything(7, a5200mapper);
for (int i = 0; i < a5200mapcount; i++) {
a5200index = i * 3;
if (a5200mapper == pgm_read_byte(a5200mapsize + a5200index)) {
a5200size = pgm_read_byte(a5200mapsize + a5200index + 1);
EEPROM_writeAnything(8, a5200size);
break;
}
}
} }
void setCart_5200() { void setCart_5200() {
#if (defined(ENABLE_OLED) || defined(ENABLE_LCD)) //go to root
display_Clear();
println_Msg(a5200cartCSV);
display_Update();
#endif
sd.chdir(); sd.chdir();
sprintf(folder, "5200/CSV");
sd.chdir(folder); // Switch Folder struct database_entry_5200 entry;
a5200csvFile = sd.open(a5200cartCSV, O_READ);
if (!a5200csvFile) { // Select starting letter
#if (defined(ENABLE_OLED) || defined(ENABLE_LCD)) byte myLetter = starting_letter();
display_Clear();
println_Msg(F("CSV FILE NOT FOUND!")); // Open database
display_Update(); if (myFile.open("5200.txt", O_READ)) {
#else seek_first_letter_in_database(myFile, myLetter);
Serial.println(F("CSV FILE NOT FOUND!"));
#endif if(checkCartSelection(myFile, &readDataLine_5200, &entry)) {
while (1) { EEPROM_writeAnything(7, entry.gameMapper);
if (checkButton() != 0) EEPROM_writeAnything(8, entry.gameSize);
setup_5200();
} }
} else {
print_FatalError(F("Database file not found"));
} }
checkCSV_5200();
a5200csvFile.close();
} }
#endif #endif

View File

@ -100,7 +100,6 @@ void arcMenu() {
case 0: case 0:
// Select Cart // Select Cart
setCart_ARC(); setCart_ARC();
wait();
setup_ARC(); setup_ARC();
break; break;
@ -336,239 +335,33 @@ void checkStatus_ARC() {
//****************************************** //******************************************
// CART SELECT CODE // CART SELECT CODE
//****************************************** //******************************************
void readDataLine_ARC(FsFile& database, byte* gameSize) {
// Read rom size
(*gameSize) = database.read() - 48;
FsFile arccsvFile; // Skip rest of line
char arcgame[20]; // title database.seekCur(2);
char arcrr[3]; // romsize
char arcll[4]; // linelength (previous line)
unsigned long arccsvpos; // CSV File Position
char arccartCSV[] = "arccart.txt"; // CSV List
char arccsvEND[] = "EOF"; // CSV End Marker for scrolling
bool readLine_ARC(FsFile& f, char* line, size_t maxLen) {
for (size_t n = 0; n < maxLen; n++) {
int c = f.read();
if (c < 0 && n == 0) return false; // EOF
if (c < 0 || c == '\n') {
line[n] = 0;
return true;
}
line[n] = c;
}
return false; // line too long
}
bool readVals_ARC(char* arcgame, char* arcrr, char* arcll) {
char line[26];
arccsvpos = arccsvFile.position();
if (!readLine_ARC(arccsvFile, line, sizeof(line))) {
return false; // EOF or too long
}
char* comma = strtok(line, ",");
int x = 0;
while (comma != NULL) {
if (x == 0)
strcpy(arcgame, comma);
else if (x == 1)
strcpy(arcrr, comma);
else if (x == 2)
strcpy(arcll, comma);
comma = strtok(NULL, ",");
x += 1;
}
return true;
}
bool getCartListInfo_ARC() {
bool buttonreleased = 0;
bool cartselected = 0;
#if (defined(ENABLE_OLED) || defined(ENABLE_LCD))
display_Clear();
println_Msg(F(" HOLD TO FAST CYCLE"));
display_Update();
#else
Serial.println(F("HOLD BUTTON TO FAST CYCLE"));
#endif
delay(2000);
#if defined(ENABLE_OLED)
buttonVal1 = (PIND & (1 << 7)); // PD7
#elif defined(ENABLE_LCD)
boolean buttonVal1 = (PING & (1 << 2)); //PG2
#endif
if (buttonVal1 == LOW) { // Button Held - Fast Cycle
while (1) { // Scroll Game List
while (readVals_ARC(arcgame, arcrr, arcll)) {
if (strcmp(arccsvEND, arcgame) == 0) {
arccsvFile.seek(0); // Restart
} else {
#if (defined(ENABLE_OLED) || defined(ENABLE_LCD))
display_Clear();
println_Msg(F("CART TITLE:"));
println_Msg(FS(FSTRING_EMPTY));
println_Msg(arcgame);
display_Update();
#else
Serial.print(F("CART TITLE:"));
Serial.println(arcgame);
#endif
#if defined(ENABLE_OLED)
buttonVal1 = (PIND & (1 << 7)); // PD7
#elif defined(ENABLE_LCD)
buttonVal1 = (PING & (1 << 2)); //PG2
#endif
if (buttonVal1 == HIGH) { // Button Released
buttonreleased = 1;
break;
}
if (buttonreleased) {
buttonreleased = 0; // Reset Flag
break;
}
}
}
#if defined(ENABLE_OLED)
buttonVal1 = (PIND & (1 << 7)); // PD7
#elif defined(ENABLE_LCD)
buttonVal1 = (PING & (1 << 2)); //PG2
#endif
if (buttonVal1 == HIGH) // Button Released
break;
}
}
#if (defined(ENABLE_OLED) || defined(ENABLE_LCD))
display.setCursor(0, 56);
println_Msg(F("FAST CYCLE OFF"));
display_Update();
#else
Serial.println(FS(FSTRING_EMPTY));
Serial.println(F("FAST CYCLE OFF"));
Serial.println(F("PRESS BUTTON TO STEP FORWARD"));
Serial.println(F("DOUBLE CLICK TO STEP BACK"));
Serial.println(F("HOLD TO SELECT"));
Serial.println(FS(FSTRING_EMPTY));
#endif
while (readVals_ARC(arcgame, arcrr, arcll)) {
if (strcmp(arccsvEND, arcgame) == 0) {
arccsvFile.seek(0); // Restart
} else {
#if (defined(ENABLE_OLED) || defined(ENABLE_LCD))
display_Clear();
println_Msg(F("CART TITLE:"));
println_Msg(FS(FSTRING_EMPTY));
println_Msg(arcgame);
display.setCursor(0, 48);
#if defined(ENABLE_OLED)
print_STR(press_to_change_STR, 1);
print_STR(right_to_select_STR, 1);
#elif defined(ENABLE_LCD)
print_STR(rotate_to_change_STR, 1);
print_STR(press_to_select_STR, 1);
#endif
display_Update();
#else
Serial.print(F("CART TITLE:"));
Serial.println(arcgame);
#endif
while (1) { // Single Step
uint8_t b = checkButton();
if (b == 1) { // Continue (press)
break;
}
if (b == 2) { // Reset to Start of List (doubleclick)
byte prevline = strtol(arcll, NULL, 10);
arccsvpos -= prevline;
arccsvFile.seek(arccsvpos);
break;
}
if (b == 3) { // Long Press - Select Cart (hold)
newarcsize = strtol(arcrr, NULL, 10);
EEPROM_writeAnything(8, newarcsize);
cartselected = 1; // SELECTION MADE
#if (defined(ENABLE_OLED) || defined(ENABLE_LCD))
println_Msg(F("SELECTION MADE"));
display_Update();
#else
Serial.println(F("SELECTION MADE"));
#endif
break;
}
}
if (cartselected) {
cartselected = 0; // Reset Flag
return true;
}
}
}
#if (defined(ENABLE_OLED) || defined(ENABLE_LCD))
println_Msg(FS(FSTRING_EMPTY));
println_Msg(FS(FSTRING_END_OF_FILE));
display_Update();
#else
Serial.println(FS(FSTRING_END_OF_FILE));
#endif
return false;
}
void checkCSV_ARC() {
if (getCartListInfo_ARC()) {
#if (defined(ENABLE_OLED) || defined(ENABLE_LCD))
display_Clear();
println_Msg(FS(FSTRING_CART_SELECTED));
println_Msg(FS(FSTRING_EMPTY));
println_Msg(arcgame);
display_Update();
// Display Settings
display.setCursor(0, 56);
print_Msg(F("CODE: R"));
println_Msg(newarcsize);
display_Update();
#else
Serial.println(FS(FSTRING_EMPTY));
Serial.println(FS(FSTRING_CART_SELECTED));
Serial.println(arcgame);
// Display Settings
Serial.print(F("CODE: R"));
Serial.println(newarcsize);
Serial.println(FS(FSTRING_EMPTY));
#endif
} else {
#if (defined(ENABLE_OLED) || defined(ENABLE_LCD))
display.setCursor(0, 56);
println_Msg(FS(FSTRING_NO_SELECTION));
display_Update();
#else
Serial.println(FS(FSTRING_NO_SELECTION));
#endif
}
} }
void setCart_ARC() { void setCart_ARC() {
#if (defined(ENABLE_OLED) || defined(ENABLE_LCD)) //go to root
display_Clear();
println_Msg(arccartCSV);
display_Update();
#endif
sd.chdir(); sd.chdir();
sprintf(folder, "ARC/CSV");
sd.chdir(folder); // Switch Folder
arccsvFile = sd.open(arccartCSV, O_READ);
if (!arccsvFile) {
#if (defined(ENABLE_OLED) || defined(ENABLE_LCD))
display_Clear();
println_Msg(F("CSV FILE NOT FOUND!"));
display_Update();
#else
Serial.println(F("CSV FILE NOT FOUND!"));
#endif
while (1) {
if (checkButton() != 0)
setup_ARC();
}
}
checkCSV_ARC();
arccsvFile.close(); byte gameSize;
// Select starting letter
//byte myLetter = starting_letter();
// Open database
if (myFile.open("arccart.txt", O_READ)) {
// seek_first_letter_in_database(myFile, myLetter);
if(checkCartSelection(myFile, &readDataLine_ARC, &gameSize)) {
EEPROM_writeAnything(8, gameSize);
}
} else {
print_FatalError(F("Database file not found"));
}
} }
#endif #endif
//****************************************** //******************************************

View File

@ -370,23 +370,18 @@ struct database_entry_COL {
}; };
void readDataLine_COL(FsFile& database, struct database_entry_COL* entry) { void readDataLine_COL(FsFile& database, struct database_entry_COL* entry) {
char tempStr2[2];
// Read CRC32 checksum // Read CRC32 checksum
sprintf(checksumStr, "%c", database.read()); for (byte i = 0; i < 8; i++) {
for (byte i = 0; i < 7; i++) { checksumStr[i] = char(database.read());
sprintf(tempStr2, "%c", database.read());
strcat(checksumStr, tempStr2);
} }
// Skip over semicolon // Skip over semicolon
database.seekCur(1); database.seekCur(1);
// Read CRC32 of first 512 bytes // Read CRC32 of first 512 bytes
sprintf(entry->crc_search, "%c", database.read()); for (byte i = 0; i < 8; i++) {
for (byte i = 0; i < 7; i++) { entry->crc_search[i] = char(database.read());
sprintf(tempStr2, "%c", database.read());
strcat(entry->crc_search, tempStr2);
} }
// Skip over semicolon // Skip over semicolon

View File

@ -764,23 +764,18 @@ struct database_entry_INTV {
}; };
void readDataLine_INTV(FsFile& database, struct database_entry_INTV* entry) { void readDataLine_INTV(FsFile& database, struct database_entry_INTV* entry) {
char tempStr2[2];
// Read CRC32 checksum // Read CRC32 checksum
sprintf(checksumStr, "%c", database.read()); for (byte i = 0; i < 8; i++) {
for (byte i = 0; i < 7; i++) { checksumStr[i] = char(database.read());
sprintf(tempStr2, "%c", database.read());
strcat(checksumStr, tempStr2);
} }
// Skip over semicolon // Skip over semicolon
database.seekCur(1); database.seekCur(1);
// Read CRC32 of first 512 bytes // Read CRC32 of first 512 bytes
sprintf(entry->crc_search, "%c", database.read()); for (byte i = 0; i < 8; i++) {
for (byte i = 0; i < 7; i++) { entry->crc_search[i] = char(database.read());
sprintf(tempStr2, "%c", database.read());
strcat(entry->crc_search, tempStr2);
} }
// Skip over semicolon // Skip over semicolon

View File

@ -384,23 +384,18 @@ struct database_entry_WSV {
}; };
void readDataLine_WSV(FsFile& database, struct database_entry_WSV* entry) { void readDataLine_WSV(FsFile& database, struct database_entry_WSV* entry) {
char tempStr2[2];
// Read CRC32 checksum // Read CRC32 checksum
sprintf(checksumStr, "%c", database.read()); for (byte i = 0; i < 8; i++) {
for (byte i = 0; i < 7; i++) { checksumStr[i] = char(database.read());
sprintf(tempStr2, "%c", database.read());
strcat(checksumStr, tempStr2);
} }
// Skip over semicolon // Skip over semicolon
database.seekCur(1); database.seekCur(1);
// Read CRC32 of first 512 bytes // Read CRC32 of first 512 bytes
sprintf(entry->crc_search, "%c", database.read()); for (byte i = 0; i < 8; i++) {
for (byte i = 0; i < 7; i++) { entry->crc_search[i] = char(database.read());
sprintf(tempStr2, "%c", database.read());
strcat(entry->crc_search, tempStr2);
} }
// Skip over semicolon // Skip over semicolon

View File

@ -1,76 +1,225 @@
Activision Decathlon,0,2,0 Activision Decathlon
Astro Chase,1,2,28 0,2
Atari PAM - Pete's Test,0,1,20
Atari PAM Diagnostics,1,2,32 Astro Chase
Atari PAM System Test,0,1,30 1,2
Ballblazer,0,3,30
Beamrider,0,2,19 Atari PAM - Pete's Test
BerZerk,0,2,18 0,1
Blue Print,0,2,16
Boogie,0,0,19 Atari PAM Diagnostics
Bounty Bob Strikes Back!,2,4,15 1,2
Buck Rogers,1,2,33
Centipede,1,2,20 Atari PAM System Test
Choplifter!,0,2,18 0,1
Congo Bongo,1,2,20
Countermeasure,1,2,20 Ballblazer
Defender,1,2,23 0,3
Dig Dug,1,2,17
Dreadnaught Factor,0,1,16 Beamrider
Frogger,0,1,27 0,2
Frogger II,1,2,16
Galaxian,0,1,19 BerZerk
Gorf,0,1,17 0,2
Gremlins,0,3,13
Gyruss,1,2,17 Blue Print
H.E.R.O.,0,2,15 0,2
James Bond 007,1,2,17
Joust,1,2,23 Boogie
Jungle Hunt,1,2,14 0,0
Kaboom!,0,0,20
Kangaroo,1,2,16 Bounty Bob Strikes Back!
Keystone Kapers,0,1,17 2,4
K-Razy Shoot-Out,0,1,24
Mario Bros.,0,3,25 Buck Rogers
MegaMania,0,1,20 1,2
Meteorites,0,2,18
Miner 2049er,0,2,19 Centipede
Missile Command,0,1,21 1,2
Montezuma's Revenge,1,2,24
Moon Patrol,0,2,28 Choplifter!
Mountain King,0,1,20 0,2
Mr. Do!'s Castle,0,1,22
Ms. Pac-Man,1,2,25 Congo Bongo
Pac-Man,1,2,20 1,2
Pengo,0,3,16
Pitfall II,0,2,14 Countermeasure
Pitfall!,0,1,19 1,2
Pole Position,1,2,17
Popeye,1,2,22 Defender
Q-bert,0,1,15 1,2
QIX,1,2,15
Quest for Quintana Roo,0,2,12 Dig Dug
RealSports Baseball,0,3,31 1,2
RealSports Basketball,0,3,28
RealSports Football,1,2,30 Dreadnaught Factor
RealSports Soccer,1,2,28 0,1
RealSports Tennis,1,2,26
Rescue on Fractalus!,0,3,26 Frogger
River Raid,0,1,29 0,1
Robotron 2084,0,2,19
Space Dungeon,1,2,22 Frogger II
Space Invaders,0,1,22 1,2
Space Shuttle,0,2,23
Star Raiders,1,2,22 Galaxian
Star Trek,1,2,21 0,1
Star Wars - Return of the Jedi,0,1,18
Star Wars - The Arcade Game,1,2,39 Gorf
Super Breakout,0,0,36 0,1
Super Cobra,0,1,23
Vanguard,0,3,20 Gremlins
Wizard of Wor,0,2,17 0,3
Yellow Submarine,0,0,22
Zaxxon,0,3,25 Gyruss
Zenji,0,1,15 1,2
Zone Ranger,0,2,14
EOF,0,0,0 H.E.R.O.
0,2
James Bond 007
1,2
Joust
1,2
Jungle Hunt
1,2
Kaboom!
0,0
Kangaroo
1,2
Keystone Kapers
0,1
K-Razy Shoot-Out
0,1
Mario Bros.
0,3
MegaMania
0,1
Meteorites
0,2
Miner 2049er
0,2
Missile Command
0,1
Montezuma's Revenge
1,2
Moon Patrol
0,2
Mountain King
0,1
Mr. Do!'s Castle
0,1
Ms. Pac-Man
1,2
Pac-Man
1,2
Pengo
0,3
Pitfall II
0,2
Pitfall!
0,1
Pole Position
1,2
Popeye
1,2
Q-bert
0,1
QIX
1,2
Quest for Quintana Roo
0,2
RealSports Baseball
0,3
RealSports Basketball
0,3
RealSports Football
1,2
RealSports Soccer
1,2
RealSports Tennis
1,2
Rescue on Fractalus!
0,3
River Raid
0,1
Robotron 2084
0,2
Space Dungeon
1,2
Space Invaders
0,1
Space Shuttle
0,2
Star Raiders
1,2
Star Trek
1,2
Star Wars - Return of the Jedi
0,1
Star Wars - The Arcade Game
1,2
Super Breakout
0,0
Super Cobra
0,1
Vanguard
0,3
Wizard of Wor
0,2
Yellow Submarine
0,0
Zaxxon
0,3
Zenji
0,1
Zone Ranger
0,2

View File

@ -1,49 +1,144 @@
3D Bowling,1,0 3D Bowling
3D Soccer,3,16 1
Alien Invaders,1,16
American Football,2,21 3D Soccer
Astro Invader,3,24 3
Autorace,3,20
Baseball,1,15 Alien Invaders
Basketball,1,15 1
Blackjack and Poker,1,17
Boxing,1,26 American Football
Brain Quiz,1,13 2
Breakaway,1,17
Capture,0,16 Astro Invader
Cat Trax,1,14 3
Circus,1,15
Combat,3,13 Autorace
Crazy Climber,1,13 3
Crazy Gobbler,0,20
Escape,1,20 Baseball
Funky Fish,3,13 1
Golf,3,17
Grand Slam Tennis,3,11 Basketball
Hobo,3,24 1
Horse Racing,1,11
Jump Bug,3,19 Blackjack and Poker
Jungler,3,15 1
Missile War,1,14
Monaco Grand Prix,1,18 Boxing
Nibblemen,1,24 1
Ocean Battle,1,16
Parashooter,1,19 Brain Quiz
Pleiades,3,18 1
R2D Tank,1,15
Red Clash,3,15 Breakaway
Robot Killer,1,16 1
Route 16,3,19
Soccer,3,15 Capture
Space Attack,1,13 0
Space Mission,1,19
Space Raiders,1,20 Cat Trax
Space Squadron,1,20 1
Space Vultures,2,21
Spiders,3,21 Circus
Star Chess,1,14 1
Super Gobbler,1,17
Tanks a Lot,1,20 Combat
The End,1,18 3
Turtles,3,14
EOF,0,0 Crazy Climber
1
Crazy Gobbler
0
Escape
1
Funky Fish
3
Golf
3
Grand Slam Tennis
3
Hobo
3
Horse Racing
1
Jump Bug
3
Jungler
3
Missile War
1
Monaco Grand Prix
1
Nibblemen
1
Ocean Battle
1
Parashooter
1
Pleiades
3
R2D Tank
1
Red Clash
3
Robot Killer
1
Route 16
3
Soccer
3
Space Attack
1
Space Mission
1
Space Raiders
1
Space Squadron
1
Space Vultures
2
Spiders
3
Star Chess
1
Super Gobbler
1
Tanks a Lot
1
The End
1
Turtles
3