From fa14f1a59191e0143ede38896400a02ec09e8405 Mon Sep 17 00:00:00 2001 From: meepingsnesroms Date: Tue, 1 May 2018 14:02:38 -0700 Subject: [PATCH] Allow frontend to define its own debug print handler Also remove unneeded EMU_DEBUG checks. --- qtBuildSystem/Mu/Mu.pro | 3 ++- qtBuildSystem/Mu/fileaccess.cpp | 2 +- src/emulator.c | 16 +++------------- src/emulator.h | 7 +++++++ src/hardwareRegisters.c | 11 +++++++++++ src/m68k/m68kconf.h | 2 +- src/memoryAccess.c | 18 ++++++------------ 7 files changed, 31 insertions(+), 28 deletions(-) diff --git a/qtBuildSystem/Mu/Mu.pro b/qtBuildSystem/Mu/Mu.pro index 848a2b1..90beae8 100644 --- a/qtBuildSystem/Mu/Mu.pro +++ b/qtBuildSystem/Mu/Mu.pro @@ -31,7 +31,8 @@ macx { } CONFIG(debug, debug|release){ - DEFINES += FRONTEND_DEBUG EMU_DEBUG EMU_OPCODE_LEVEL_DEBUG EMU_LOG_REGISTER_ACCESS_UNKNOWN EMU_LOG_APIS + DEFINES += FRONTEND_DEBUG EMU_DEBUG EMU_LOG_REGISTER_ACCESS_ALL +# EMU_OPCODE_LEVEL_DEBUG EMU_LOG_APIS EMU_LOG_REGISTER_ACCESS_UNKNOWN } QMAKE_CFLAGS += -std=c99 diff --git a/qtBuildSystem/Mu/fileaccess.cpp b/qtBuildSystem/Mu/fileaccess.cpp index 68f11d2..e768e6c 100644 --- a/qtBuildSystem/Mu/fileaccess.cpp +++ b/qtBuildSystem/Mu/fileaccess.cpp @@ -61,7 +61,7 @@ uint32_t setFileBuffer(QString filePath, uint8_t* data, size_t size){ } bool validFilePath(QString path){ -#ifdef Q_OS_WIN +#if defined(Q_OS_WIN) if(path.length() < 3 || !path[0].isLetter() || path[1] != ':' || (path[2] != '/' && path[2] != '\\')) return false; #else diff --git a/src/emulator.c b/src/emulator.c index f6631c2..886d735 100644 --- a/src/emulator.c +++ b/src/emulator.c @@ -61,6 +61,7 @@ static inline bool allSdCardCallbacksPresent(){ static bool invalidBehaviorAbort; static char disassemblyBuffer[LOGGED_OPCODES][100];//store the opcode and program counter for the last 10 opcodes + #if defined(EMU_LOG_APIS) const char* lookupTrap(uint16_t trap); #endif @@ -154,24 +155,14 @@ static void invalidBehaviorCheck(){ } #if defined(EMU_LOG_APIS) - /* - static uint32_t trapDumpWait = 300; - static bool trapsNotDumped = true; - - if(trapsNotDumped && trapDumpWait == 0){ - debugLog("Trap dispatch controller is at:0x%08X, table addr:0x%08X\n", programCounter, m68k_read_memory_32(0x00000122)); - for(uint32_t count = 0xA000; count < 0xA475; count++) - printTrapInfo(count); - trapsNotDumped = false; - } - */ - if(instruction == 0x4E4F){ //Trap F/api call uint16_t trap = m68k_read_memory_16(lastProgramCounter + 2); if(!spammingTrap(trap)){ debugLog("Trap F API:%s, API number:0x%04X, PC:0x%08X\n", lookupTrap(trap), trap, lastProgramCounter); } + + //custom debug operations switch(trap){ case 0xA09A://sysTrapSysTimerWrite printTrapInfo(trap); @@ -180,7 +171,6 @@ static void invalidBehaviorCheck(){ default: break; } - //trapDumpWait--; } #endif } diff --git a/src/emulator.h b/src/emulator.h index 80a9587..f0d6128 100644 --- a/src/emulator.h +++ b/src/emulator.h @@ -21,7 +21,14 @@ extern "C" { //debug #if defined(EMU_DEBUG) +#if defined(EMU_CUSTOM_DEBUG_LOG_HANDLER) +extern uint32_t frontendDebugStringSize; +extern char* frontendDebugString; +void frontendHandleDebugPrint(); +#define debugLog(...) {snprintf(frontendDebugString, frontendDebugStringSize, __VA_ARGS__);frontendHandleDebugPrint();} +#else #define debugLog(...) printf(__VA_ARGS__) +#endif #else #define debugLog(...) #endif diff --git a/src/hardwareRegisters.c b/src/hardwareRegisters.c index 62f4311..9a01f51 100644 --- a/src/hardwareRegisters.c +++ b/src/hardwareRegisters.c @@ -54,6 +54,17 @@ void refreshInputState(){ if(!(registerArrayRead8(PFSEL) & 0x02) && penIrqPin == (bool)(icr & 0x0080)) setIprIsrBit(INT_IRQ5); + /* + //IRQ set as pin function and triggered, the pen IRQ triggers when going low to high or high to low + if(!(registerArrayRead8(PFSEL) & 0x02) && (penIrqPin == (bool)(icr & 0x0080)) != (bool)(edgeTriggeredInterruptLastValue & INT_IRQ5)) + setIprIsrBit(INT_IRQ5); + + if(penIrqPin == (bool)(icr & 0x0080)) + edgeTriggeredInterruptLastValue |= INT_IRQ5; + else + edgeTriggeredInterruptLastValue &= ~INT_IRQ5; + */ + checkPortDInterrupts();//this calls checkInterrupts() so it doesnt need to be called above } diff --git a/src/m68k/m68kconf.h b/src/m68k/m68kconf.h index 949170c..c62c348 100755 --- a/src/m68k/m68kconf.h +++ b/src/m68k/m68kconf.h @@ -130,7 +130,7 @@ /* If ON, CPU will call the instruction hook callback before every * instruction. */ -#ifdef EMU_OPCODE_LEVEL_DEBUG +#if defined(EMU_DEBUG) && defined(EMU_OPCODE_LEVEL_DEBUG) #define M68K_INSTRUCTION_HOOK OPT_ON #else #define M68K_INSTRUCTION_HOOK OPT_OFF diff --git a/src/memoryAccess.c b/src/memoryAccess.c index 26cb043..9a00a53 100644 --- a/src/memoryAccess.c +++ b/src/memoryAccess.c @@ -132,11 +132,10 @@ unsigned int m68k_read_memory_8(unsigned int address){ case CHIP_NONE: setBusErrorTimeOut(); return 0x00; -#ifdef EMU_DEBUG + default: debugLog("Unknown bank type:%d\n", bankType[START_BANK(address)]); break; -#endif } return 0x00; @@ -168,11 +167,10 @@ unsigned int m68k_read_memory_16(unsigned int address){ case CHIP_NONE: setBusErrorTimeOut(); return 0x0000; -#ifdef EMU_DEBUG + default: debugLog("Unknown bank type:%d\n", bankType[START_BANK(address)]); break; -#endif } return 0x0000; @@ -204,11 +202,10 @@ unsigned int m68k_read_memory_32(unsigned int address){ case CHIP_NONE: setBusErrorTimeOut(); return 0x00000000; -#ifdef EMU_DEBUG + default: debugLog("Unknown bank type:%d\n", bankType[START_BANK(address)]); break; -#endif } return 0x00000000; @@ -244,11 +241,10 @@ void m68k_write_memory_8(unsigned int address, unsigned int value){ case CHIP_NONE: setBusErrorTimeOut(); break; -#ifdef EMU_DEBUG + default: debugLog("Unknown bank type:%d\n", bankType[START_BANK(address)]); break; -#endif } return; @@ -283,11 +279,10 @@ void m68k_write_memory_16(unsigned int address, unsigned int value){ case CHIP_NONE: setBusErrorTimeOut(); break; -#ifdef EMU_DEBUG + default: debugLog("Unknown bank type:%d\n", bankType[START_BANK(address)]); break; -#endif } return; @@ -322,11 +317,10 @@ void m68k_write_memory_32(unsigned int address, unsigned int value){ case CHIP_NONE: setBusErrorTimeOut(); break; -#ifdef EMU_DEBUG + default: debugLog("Unknown bank type:%d\n", bankType[START_BANK(address)]); break; -#endif } return;