diff --git a/emulator.c b/emulator.c index 730927f..9b3bb7f 100644 --- a/emulator.c +++ b/emulator.c @@ -76,6 +76,7 @@ int mem_fd; int mem_fd_gpclk; +int gayle_emulation_enabled = 1; void *gpio_map; void *gpclk_map; @@ -144,10 +145,17 @@ void *iplThread(void *args) { } } -int main() { +int main(int argc, char *argv[]) { int g; const struct sched_param priority = {99}; + // Some command line switch stuffles + for (g = 1; g < argc; g++) { + if (strcmp(argv[g], "--disable-gayle") == 0) { + gayle_emulation_enabled = 0; + } + } + sched_setscheduler(0, SCHED_FIFO, &priority); mlockall(MCL_CURRENT); // lock in memory to keep us from paging out @@ -321,8 +329,10 @@ unsigned int m68k_read_memory_8(unsigned int address) { } } - if (address > GAYLEBASE && address < GAYLEBASE + GAYLESIZE) { - return readGayleB(address); + if (gayle_emulation_enabled) { + if (address > GAYLEBASE && address < GAYLEBASE + GAYLESIZE) { + return readGayleB(address); + } } if (address < 0xffffff) { @@ -343,8 +353,10 @@ unsigned int m68k_read_memory_16(unsigned int address) { } } - if (address > GAYLEBASE && address < GAYLEBASE + GAYLESIZE) { - return readGayle(address); + if (gayle_emulation_enabled) { + if (address > GAYLEBASE && address < GAYLEBASE + GAYLESIZE) { + return readGayle(address); + } } if (address < 0xffffff) { @@ -365,8 +377,10 @@ unsigned int m68k_read_memory_32(unsigned int address) { } } - if (address > GAYLEBASE && address < GAYLEBASE + GAYLESIZE) { - return readGayleL(address); + if (gayle_emulation_enabled) { + if (address > GAYLEBASE && address < GAYLEBASE + GAYLESIZE) { + return readGayleL(address); + } } if (address < 0xffffff) { @@ -384,9 +398,11 @@ void m68k_write_memory_8(unsigned int address, unsigned int value) { return; } - if (address > GAYLEBASE && address < GAYLEBASE + GAYLESIZE) { - writeGayleB(address, value); - return; + if (gayle_emulation_enabled) { + if (address > GAYLEBASE && address < GAYLEBASE + GAYLESIZE) { + writeGayleB(address, value); + return; + } } if (address == 0xbfe001) { @@ -408,9 +424,11 @@ void m68k_write_memory_16(unsigned int address, unsigned int value) { return; } - if (address > GAYLEBASE && address < GAYLEBASE + GAYLESIZE) { - writeGayle(address, value); - return; + if (gayle_emulation_enabled) { + if (address > GAYLEBASE && address < GAYLEBASE + GAYLESIZE) { + writeGayle(address, value); + return; + } } if (address < 0xffffff) { @@ -426,8 +444,10 @@ void m68k_write_memory_32(unsigned int address, unsigned int value) { return; } - if (address > GAYLEBASE && address < GAYLEBASE + GAYLESIZE) { - writeGayleL(address, value); + if (gayle_emulation_enabled) { + if (address > GAYLEBASE && address < GAYLEBASE + GAYLESIZE) { + writeGayleL(address, value); + } } if (address < 0xffffff) {