Mercurial > repos > blastem
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 } |