diff options
author | Mike Pavone <pavone@retrodev.com> | 2013-05-15 23:51:22 -0700 |
---|---|---|
committer | Mike Pavone <pavone@retrodev.com> | 2013-05-15 23:51:22 -0700 |
commit | 1998eddc3c8f7f26a32772d83e8da3bc94394a56 (patch) | |
tree | 095cf60c6c2885725bf4144fcdb999e1054adfcc | |
parent | 4ac4182037dad9f6fd1693b1e75cefa9cc60aa7f (diff) |
Support regions other than USA
-rw-r--r-- | blastem.c | 44 |
1 files changed, 44 insertions, 0 deletions
@@ -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; |