diff --git a/src/fix/main.c b/src/fix/main.c index 7821ac6d..bbe16192 100644 --- a/src/fix/main.c +++ b/src/fix/main.c @@ -24,6 +24,7 @@ #define OPTF_MBCTYPE 0x080L #define OPTF_GBCMODE 0x100L #define OPTF_JAPAN 0x200L +#define OPTF_SGBMODE 0x400L unsigned long ulOptions; @@ -70,6 +71,7 @@ PrintUsage(void) printf(" -b\tSet MBC type\n"); printf(" -c\t\tSet Game Boy Color compatible flag ([0x143] = 0x80)\n"); printf(" -o\t\tSet Game Boy Color only flag ([0x143] = 0xC0)\n"); + printf(" -s\t\tSet Super Game Boy flags\n"); printf(" -q\t\tExecute quietly (suppress all text except errors)\n"); exit(0); @@ -312,6 +314,9 @@ main(int argc, char *argv[]) ulOptions |= OPTF_GBCMODE; gbc_mode = 0x80; break; + case 's': + ulOptions |= OPTF_SGBMODE; + break; } } argn++; @@ -512,6 +517,23 @@ main(int argc, char *argv[]) } } } + /* + * -s (Set SGB mode) option code + */ + if (ulOptions & OPTF_SGBMODE) { + fflush(f); + // set old licensee code to 0x33 + fseek(f, 0x14B, SEEK_SET); + fputc(0x33, f); + // set SGB flag to 0x03 + fseek(f, 0x146, SEEK_SET); + fputc(3, f); + fflush(f); + + if (!(ulOptions & OPTF_QUIET)) { + printf("Setting SGB mode flag\n"); + } + } /* * -v (Validate header) option code *