comparison blastem.c @ 341:6ad8e36de685

Support regions other than USA
author Mike Pavone <pavone@retrodev.com>
date Wed, 15 May 2013 23:51:22 -0700
parents 58a085cfc6bd
children 13f994c88c34
comparison
equal deleted inserted replaced
340:58a085cfc6bd 341:6ad8e36de685
1054 *(cur++) = *start; 1054 *(cur++) = *start;
1055 } 1055 }
1056 strcpy(cur, " - BlastEm"); 1056 strcpy(cur, " - BlastEm");
1057 } 1057 }
1058 1058
1059 #define REGION_START 0x1F0
1060
1061 int detect_specific_region(char region)
1062 {
1063 return cart[REGION_START/2] & 0xFF == region || (cart[REGION_START/2]) >> 8 == region || cart[REGION_START/2+1] & 0xFF == region;
1064 }
1065
1066 void detect_region()
1067 {
1068 if (detect_specific_region('U')) {
1069 version_reg = NO_DISK | USA;
1070 } else if (detect_specific_region('J')) {
1071 version_reg = NO_DISK | JAP;
1072 } if (detect_specific_region('E') || detect_specific_region('A') || detect_specific_region('B') || detect_specific_region('4')) {
1073 version_reg = NO_DISK | EUR;
1074 }
1075 }
1076
1059 int main(int argc, char ** argv) 1077 int main(int argc, char ** argv)
1060 { 1078 {
1061 if (argc < 2) { 1079 if (argc < 2) {
1062 fputs("Usage: blastem FILENAME\n", stderr); 1080 fputs("Usage: blastem FILENAME\n", stderr);
1063 return 1; 1081 return 1;
1064 } 1082 }
1065 if(!load_rom(argv[1])) { 1083 if(!load_rom(argv[1])) {
1066 fprintf(stderr, "Failed to open %s for reading\n", argv[1]); 1084 fprintf(stderr, "Failed to open %s for reading\n", argv[1]);
1067 return 1; 1085 return 1;
1068 } 1086 }
1087 detect_region();
1069 int width = -1; 1088 int width = -1;
1070 int height = -1; 1089 int height = -1;
1071 int debug = 0; 1090 int debug = 0;
1072 FILE *address_log = NULL; 1091 FILE *address_log = NULL;
1073 for (int i = 2; i < argc; i++) { 1092 for (int i = 2; i < argc; i++) {
1085 case 'v': 1104 case 'v':
1086 headless = 1; 1105 headless = 1;
1087 break; 1106 break;
1088 case 'n': 1107 case 'n':
1089 z80_enabled = 0; 1108 z80_enabled = 0;
1109 break;
1110 case 'r':
1111 i++;
1112 if (i >= argc) {
1113 fputs("-r must be followed by region (J, U or E)\n", stderr);
1114 return 1;
1115 }
1116 switch (argv[i][0])
1117 {
1118 case 'j':
1119 case 'J':
1120 version_reg = NO_DISK | JAP;
1121 break;
1122 case 'u':
1123 case 'U':
1124 version_reg = NO_DISK | USA;
1125 break;
1126 case 'e':
1127 case 'E':
1128 version_reg = NO_DISK | EUR;
1129 break;
1130 default:
1131 fprintf(stderr, "'%c' is not a valid region character for the -r option\n", argv[i][0]);
1132 return 1;
1133 }
1090 break; 1134 break;
1091 default: 1135 default:
1092 fprintf(stderr, "Unrecognized switch %s\n", argv[i]); 1136 fprintf(stderr, "Unrecognized switch %s\n", argv[i]);
1093 return 1; 1137 return 1;
1094 } 1138 }