Created
December 25, 2013 05:56
-
-
Save brook2/8120536 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff -x higan -x '*.so' -x '*~' -x '*.o' -uNr higan_v093r11/src/gb/cpu/mmio.cpp higan_v093r11_trace/src/gb/cpu/mmio.cpp | |
--- higan_v093r11/src/gb/cpu/mmio.cpp 2013-12-12 00:42:15.000000000 +0000 | |
+++ higan_v093r11_trace/src/gb/cpu/mmio.cpp 2013-12-24 06:22:02.629748505 +0000 | |
@@ -43,12 +43,36 @@ | |
} | |
if(addr == 0xff01) { //SB | |
+ if(status.serial_transfer) { | |
+ printf("PROHIBITED: SB read during serial transfer\n"); | |
+ if(interface->tracer.open()) { | |
+ interface->tracer.print("PROHIBITED: SB read during serial transfer\n"); | |
+ interface->tracer.flush(); | |
+ } | |
+ } | |
+ | |
+ if(interface->tracer.open()) { | |
+ char buffer[1024]; | |
+ sprintf(buffer, "SB R 0x%.2x\n", 0xff); | |
+ interface->tracer.print(buffer); | |
+ interface->tracer.flush(); | |
+ } | |
+ | |
return 0xff; | |
} | |
if(addr == 0xff02) { //SC | |
- return (status.serial_transfer << 7) | |
- | (status.serial_clock << 0); | |
+ uint8 value = (status.serial_transfer << 7) | |
+ | (status.serial_clock << 0); | |
+ | |
+ if(interface->tracer.open()) { | |
+ char buffer[1024]; | |
+ sprintf(buffer, "SC R 0x%.2x\n", 0xff); | |
+ interface->tracer.print(buffer); | |
+ interface->tracer.flush(); | |
+ } | |
+ | |
+ return value; | |
} | |
if(addr == 0xff04) { //DIV | |
@@ -142,13 +166,35 @@ | |
interface->joypWrite(status.p15, status.p14); | |
return; | |
} | |
- | |
+ | |
if(addr == 0xff01) { //SB | |
+ if(status.serial_transfer) { | |
+ printf("PROHIBITED: SB write during serial transfer\n"); | |
+ if(interface->tracer.open()) { | |
+ interface->tracer.print("PROHIBITED: SB write during serial transfer\n"); | |
+ interface->tracer.flush(); | |
+ } | |
+ } | |
+ | |
+ if(interface->tracer.open()) { | |
+ char buffer[1024]; | |
+ sprintf(buffer, "SB W 0x%.2x\n", data); | |
+ interface->tracer.print(buffer); | |
+ interface->tracer.flush(); | |
+ } | |
+ | |
status.serial_data = data; | |
return; | |
} | |
if(addr == 0xff02) { //SC | |
+ if(interface->tracer.open()) { | |
+ char buffer[1024]; | |
+ sprintf(buffer, "SC W 0x%.2x\n", data); | |
+ interface->tracer.print(buffer); | |
+ interface->tracer.flush(); | |
+ } | |
+ | |
status.serial_transfer = data & 0x80; | |
status.serial_clock = data & 0x01; | |
if(status.serial_transfer) status.serial_bits = 8; | |
diff -x higan -x '*.so' -x '*~' -x '*.o' -uNr higan_v093r11/src/gb/interface/interface.cpp higan_v093r11_trace/src/gb/interface/interface.cpp | |
--- higan_v093r11/src/gb/interface/interface.cpp 2013-12-17 04:33:14.000000000 +0000 | |
+++ higan_v093r11_trace/src/gb/interface/interface.cpp 2013-12-24 05:34:35.801610725 +0000 | |
@@ -135,6 +135,27 @@ | |
video.generate_palette(mode); | |
} | |
+bool Interface::tracerEnable(bool trace) { | |
+ string pathname = {path(group(ID::ROM)), "debug/"}; | |
+ if(trace == true) directory::create(pathname); | |
+ | |
+ if(trace == true && !tracer.open()) { | |
+ for(unsigned n = 0; n <= 999; n++) { | |
+ string filename = {pathname, "trace-", format<3, '0'>(n), ".log"}; | |
+ if(file::exists(filename)) continue; | |
+ tracer.open(filename, file::mode::write); | |
+ return true; | |
+ } | |
+ } | |
+ | |
+ if(trace == false && tracer.open()) { | |
+ tracer.close(); | |
+ return true; | |
+ } | |
+ | |
+ return false; | |
+} | |
+ | |
Interface::Interface() { | |
interface = this; | |
hook = nullptr; | |
diff -x higan -x '*.so' -x '*~' -x '*.o' -uNr higan_v093r11/src/gb/interface/interface.hpp higan_v093r11_trace/src/gb/interface/interface.hpp | |
--- higan_v093r11/src/gb/interface/interface.hpp 2013-12-17 04:33:00.000000000 +0000 | |
+++ higan_v093r11_trace/src/gb/interface/interface.hpp 2013-12-24 05:33:47.901608407 +0000 | |
@@ -60,7 +60,11 @@ | |
void paletteUpdate(PaletteMode mode); | |
+ bool tracerEnable(bool); | |
+ | |
Interface(); | |
+ | |
+ file tracer; | |
private: | |
vector<Device> device; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment