From 843095109fcbfc94a55ecb4df013549a454d743a Mon Sep 17 00:00:00 2001 From: Yuri Kunde Schlesner Date: Sun, 24 May 2015 22:56:43 -0300 Subject: [PATCH] Add (optional) verbose logging of cart traffic, for debugging --- source/gamecart/protocol_ctr.c | 34 ++++++++++++++++++++++++++++++++++ source/gamecart/protocol_ntr.c | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/source/gamecart/protocol_ctr.c b/source/gamecart/protocol_ctr.c index d393966..3fdea64 100644 --- a/source/gamecart/protocol_ctr.c +++ b/source/gamecart/protocol_ctr.c @@ -6,6 +6,7 @@ #include "protocol.h" #include "delay.h" +#include "draw.h" void CTR_SetSecKey(u32 value) { REG_CTRCARDSECCNT |= ((value & 3) << 8) | 4; @@ -28,6 +29,10 @@ void CTR_SetSecSeed(const u32* seed, bool flag) { void CTR_SendCommand(const u32 command[4], u32 pageSize, u32 blocks, u32 latency, void* buffer) { +#ifdef VERBOSE_COMMANDS + Debug("C> %08X %08X %08X %08X", command[0], command[1], command[2], command[3]); +#endif + REG_CTRCARDCMD[0] = command[3]; REG_CTRCARDCMD[1] = command[2]; REG_CTRCARDCMD[2] = command[1]; @@ -142,4 +147,33 @@ void CTR_SendCommand(const u32 command[4], u32 pageSize, u32 blocks, u32 latency // wait rom cs high do { cardCtrl = REG_CTRCARDCNT; } while( cardCtrl & CTRCARD_BUSY ); //lastCmd[0] = command[0];lastCmd[1] = command[1]; + +#ifdef VERBOSE_COMMANDS + if (!useBuf) { + Debug("C< NULL"); + } else if (!useBuf32) { + Debug("C< non32"); + } else { + u32* p = (u32*)buffer; + int transferWords = count / 4; + for (int i = 0; i < transferWords && i < 4*4; i += 4) { + switch (transferWords - i) { + case 0: + break; + case 1: + Debug("C< %08X", p[i+0]); + break; + case 2: + Debug("C< %08X %08X", p[i+0], p[i+1]); + break; + case 3: + Debug("C< %08X %08X %08X", p[i+0], p[i+1], p[i+2]); + break; + default: + Debug("C< %08X %08X %08X %08X", p[i+0], p[i+1], p[i+2], p[i+3]); + break; + } + } + } +#endif } diff --git a/source/gamecart/protocol_ntr.c b/source/gamecart/protocol_ntr.c index 75bf873..0781fdf 100644 --- a/source/gamecart/protocol_ntr.c +++ b/source/gamecart/protocol_ntr.c @@ -3,9 +3,14 @@ // Refer to the license.txt file included. #include "protocol_ntr.h" +#include "draw.h" void NTR_SendCommand(const u32 command[2], u32 pageSize, u32 latency, void* buffer) { +#ifdef VERBOSE_COMMANDS + Debug("N> %08X %08X", command[0], command[1]); +#endif + REG_NTRCARDMCNT = NTRCARD_CR1_ENABLE; for( u32 i=0; i<2; ++i ) @@ -109,4 +114,33 @@ void NTR_SendCommand(const u32 command[2], u32 pageSize, u32 latency, void* buff // wait rom cs high do { cardCtrl = REG_NTRCARDROMCNT; } while( cardCtrl & NTRCARD_BUSY ); //lastCmd[0] = command[0];lastCmd[1] = command[1]; + +#ifdef VERBOSE_COMMANDS + if (!useBuf) { + Debug("N< NULL"); + } else if (!useBuf32) { + Debug("N< non32"); + } else { + u32* p = (u32*)buffer; + int transferWords = count / 4; + for (int i = 0; i < transferWords && i < 4*4; i += 4) { + switch (transferWords - i) { + case 0: + break; + case 1: + Debug("N< %08X", p[i+0]); + break; + case 2: + Debug("N< %08X %08X", p[i+0], p[i+1]); + break; + case 3: + Debug("N< %08X %08X %08X", p[i+0], p[i+1], p[i+2]); + break; + default: + Debug("N< %08X %08X %08X %08X", p[i+0], p[i+1], p[i+2], p[i+3]); + break; + } + } + } +#endif }