From 61e7cc9556eaa118efa209c2b9cef2a550539bb7 Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Mon, 25 Jan 2016 22:17:01 -0800 Subject: [PATCH] GB: Add basic logging support --- CMakeLists.txt | 2 +- src/gb/gb.c | 4 +++- src/gb/gb.h | 4 ++++ src/gb/io.c | 2 ++ src/gb/io.h | 4 ++++ src/gb/memory.c | 20 +++++++++++++++----- src/gb/memory.h | 5 +++++ 7 files changed, 34 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 34b8f04ac..68e7e1a14 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,7 +40,7 @@ file(GLOB GBA_CHEATS_SRC ${CMAKE_SOURCE_DIR}/src/gba/cheats/*.c) file(GLOB GBA_RR_SRC ${CMAKE_SOURCE_DIR}/src/gba/rr/*.c) file(GLOB GBA_SV_SRC ${CMAKE_SOURCE_DIR}/src/gba/supervisor/*.c) file(GLOB GBA_CTX_SRC ${CMAKE_SOURCE_DIR}/src/gba/context/*.c) -file(GLOB UTIL_SRC ${CMAKE_SOURCE_DIR}/src/util/*.[cSs]) +file(GLOB UTIL_SRC ${CMAKE_SOURCE_DIR}/src/util/*.[cSs] ${CMAKE_SOURCE_DIR}/src/core/*.c) file(GLOB GUI_SRC ${CMAKE_SOURCE_DIR}/src/util/gui/*.c ${CMAKE_SOURCE_DIR}/src/gba/gui/*.c) file(GLOB GBA_RENDERER_SRC ${CMAKE_SOURCE_DIR}/src/gba/renderers/*.c) file(GLOB SIO_SRC ${CMAKE_SOURCE_DIR}/src/gba/sio/lockstep.c) diff --git a/src/gb/gb.c b/src/gb/gb.c index ba1f33571..83b17b86b 100644 --- a/src/gb/gb.c +++ b/src/gb/gb.c @@ -19,6 +19,8 @@ const uint32_t SGB_LR35902_FREQUENCY = 0x418B1E; const uint32_t GB_COMPONENT_MAGIC = 0x400000; +mLOG_DEFINE_CATEGORY(GB); + static void GBInit(struct LR35902Core* cpu, struct LR35902Component* component); static void GBInterruptHandlerInit(struct LR35902InterruptHandler* irqh); static void GBProcessEvents(struct LR35902Core* cpu); @@ -229,7 +231,7 @@ void GBHalt(struct LR35902Core* cpu) { void GBHitStub(struct LR35902Core* cpu) { // TODO - //printf("Hit stub at address %04X\n", cpu->pc); + mLOG(GB, STUB, "Hit stub at address %04X:%02X\n", cpu->pc, cpu->bus); } bool GBIsROM(struct VFile* vf) { diff --git a/src/gb/gb.h b/src/gb/gb.h index 9bf449637..11512bfbd 100644 --- a/src/gb/gb.h +++ b/src/gb/gb.h @@ -8,6 +8,8 @@ #include "util/common.h" +#include "core/log.h" + #include "lr35902/lr35902.h" #include "gb/memory.h" @@ -18,6 +20,8 @@ extern const uint32_t DMG_LR35902_FREQUENCY; extern const uint32_t CGB_LR35902_FREQUENCY; extern const uint32_t SGB_LR35902_FREQUENCY; +mLOG_DECLARE_CATEGORY(GB); + // TODO: Prefix GBAIRQ enum GBIRQ { GB_IRQ_VBLANK = 0x0, diff --git a/src/gb/io.c b/src/gb/io.c index 5e8e84f4c..e24b99579 100644 --- a/src/gb/io.c +++ b/src/gb/io.c @@ -7,6 +7,8 @@ #include "gb/gb.h" +mLOG_DEFINE_CATEGORY(GB_IO); + void GBIOInit(struct GB* gb) { memset(gb->memory.io, 0, sizeof(gb->memory.io)); } diff --git a/src/gb/io.h b/src/gb/io.h index 656a9d9e5..a908f468e 100644 --- a/src/gb/io.h +++ b/src/gb/io.h @@ -8,6 +8,10 @@ #include "util/common.h" +#include "core/log.h" + +mLOG_DECLARE_CATEGORY(GB_IO); + enum GBIORegisters { REG_JOYP = 0x00, REG_SB = 0x01, diff --git a/src/gb/memory.c b/src/gb/memory.c index b8e353d1d..c753ec0b0 100644 --- a/src/gb/memory.c +++ b/src/gb/memory.c @@ -10,11 +10,15 @@ #include "util/memory.h" +mLOG_DEFINE_CATEGORY(GB_MBC); +mLOG_DEFINE_CATEGORY(GB_MEM); + static void _GBMBCNone(struct GBMemory* memory, uint16_t address, uint8_t value) { - // TODO: Log game error UNUSED(memory); UNUSED(address); UNUSED(value); + + mLOG(GB_MBC, GAME_ERROR, "Wrote to invalid MBC"); } static void _GBMBC1(struct GBMemory*, uint16_t address, uint8_t value); @@ -106,7 +110,7 @@ void GBMemoryReset(struct GB* gb) { gb->memory.mbcType = GB_MBC4; break; default: - // TODO: Log + mLOG(GB_MBC, WARN, "Unknown MBC type: %02X", cart->type); case 0x19: case 0x1A: case 0x1B: @@ -166,6 +170,7 @@ uint8_t GBLoad8(struct LR35902Core* cpu, uint16_t address) { return 0xFF; } if (address < GB_BASE_IO) { + mLOG(GB_MEM, GAME_ERROR, "Attempt to read from unusable memory: %04X", address); return 0xFF; } if (address < GB_BASE_HRAM) { @@ -220,7 +225,7 @@ void GBStore8(struct LR35902Core* cpu, uint16_t address, int8_t value) { gb->video.renderer->writeOAM(gb->video.renderer, address & 0xFF); } } else if (address < GB_BASE_IO) { - // TODO: Log + mLOG(GB_MEM, GAME_ERROR, "Attempt to write to unusable memory: %04X:%02X", address, value); } else if (address < GB_BASE_HRAM) { GBIOWrite(gb, address & (GB_SIZE_IO - 1), value); } else if (address < GB_BASE_IE) { @@ -297,7 +302,7 @@ void GBPatch8(struct LR35902Core* cpu, uint16_t address, int8_t value, int8_t* o static void _switchBank(struct GBMemory* memory, int bank) { size_t bankStart = bank * GB_SIZE_CART_BANK0; if (bankStart + GB_SIZE_CART_BANK0 > memory->romSize) { - // TODO: Log + mLOG(GB_MBC, GAME_ERROR, "Attempting to switch to an invalid ROM bank: %0X", bank); return; } memory->romBank = &memory->rom[bankStart]; @@ -324,6 +329,7 @@ void _GBMBC1(struct GBMemory* memory, uint16_t address, uint8_t value) { break; default: // TODO + mLOG(GB_MBC, STUB, "MBC1 unknown value %02X", value); break; } break; @@ -338,7 +344,7 @@ void _GBMBC1(struct GBMemory* memory, uint16_t address, uint8_t value) { } void _GBMBC2(struct GBMemory* memory, uint16_t address, uint8_t value) { - // TODO + mLOG(GB_MBC, STUB, "MBC2 unimplemented"); } void _GBMBC3(struct GBMemory* memory, uint16_t address, uint8_t value) { @@ -355,6 +361,7 @@ void _GBMBC3(struct GBMemory* memory, uint16_t address, uint8_t value) { break; default: // TODO + mLOG(GB_MBC, STUB, "MBC3 unknown value %02X", value); break; } break; @@ -374,6 +381,7 @@ void _GBMBC3(struct GBMemory* memory, uint16_t address, uint8_t value) { void _GBMBC4(struct GBMemory* memory, uint16_t address, uint8_t value) { // TODO + mLOG(GB_MBC, STUB, "MBC4 unimplemented"); } void _GBMBC5(struct GBMemory* memory, uint16_t address, uint8_t value) { @@ -390,6 +398,7 @@ void _GBMBC5(struct GBMemory* memory, uint16_t address, uint8_t value) { break; default: // TODO + mLOG(GB_MBC, STUB, "MBC5 unknown value %02X", value); break; } break; @@ -402,4 +411,5 @@ void _GBMBC5(struct GBMemory* memory, uint16_t address, uint8_t value) { void _GBMBC7(struct GBMemory* memory, uint16_t address, uint8_t value) { // TODO + mLOG(GB_MBC, STUB, "MBC7 unimplemented"); } diff --git a/src/gb/memory.h b/src/gb/memory.h index 0620f1c3c..6a22c141f 100644 --- a/src/gb/memory.h +++ b/src/gb/memory.h @@ -8,8 +8,13 @@ #include "util/common.h" +#include "core/log.h" + #include "lr35902/lr35902.h" +mLOG_DECLARE_CATEGORY(GB_MBC); +mLOG_DECLARE_CATEGORY(GB_MEM); + struct GB; enum {