summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pavone <pavone@retrodev.com>2013-05-15 23:51:22 -0700
committerMike Pavone <pavone@retrodev.com>2013-05-15 23:51:22 -0700
commit1998eddc3c8f7f26a32772d83e8da3bc94394a56 (patch)
tree095cf60c6c2885725bf4144fcdb999e1054adfcc
parent4ac4182037dad9f6fd1693b1e75cefa9cc60aa7f (diff)
Support regions other than USA
-rw-r--r--blastem.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/blastem.c b/blastem.c
index 240dcda..7551f41 100644
--- a/blastem.c
+++ b/blastem.c
@@ -1056,6 +1056,24 @@ void update_title()
strcpy(cur, " - BlastEm");
}
+#define REGION_START 0x1F0
+
+int detect_specific_region(char region)
+{
+ return cart[REGION_START/2] & 0xFF == region || (cart[REGION_START/2]) >> 8 == region || cart[REGION_START/2+1] & 0xFF == region;
+}
+
+void detect_region()
+{
+ if (detect_specific_region('U')) {
+ version_reg = NO_DISK | USA;
+ } else if (detect_specific_region('J')) {
+ version_reg = NO_DISK | JAP;
+ } if (detect_specific_region('E') || detect_specific_region('A') || detect_specific_region('B') || detect_specific_region('4')) {
+ version_reg = NO_DISK | EUR;
+ }
+}
+
int main(int argc, char ** argv)
{
if (argc < 2) {
@@ -1066,6 +1084,7 @@ int main(int argc, char ** argv)
fprintf(stderr, "Failed to open %s for reading\n", argv[1]);
return 1;
}
+ detect_region();
int width = -1;
int height = -1;
int debug = 0;
@@ -1088,6 +1107,31 @@ int main(int argc, char ** argv)
case 'n':
z80_enabled = 0;
break;
+ case 'r':
+ i++;
+ if (i >= argc) {
+ fputs("-r must be followed by region (J, U or E)\n", stderr);
+ return 1;
+ }
+ switch (argv[i][0])
+ {
+ case 'j':
+ case 'J':
+ version_reg = NO_DISK | JAP;
+ break;
+ case 'u':
+ case 'U':
+ version_reg = NO_DISK | USA;
+ break;
+ case 'e':
+ case 'E':
+ version_reg = NO_DISK | EUR;
+ break;
+ default:
+ fprintf(stderr, "'%c' is not a valid region character for the -r option\n", argv[i][0]);
+ return 1;
+ }
+ break;
default:
fprintf(stderr, "Unrecognized switch %s\n", argv[i]);
return 1;