Introduce `Platform::Log` (#1640)

* Add Platform::Log and Platform::LogLevel

* Replace most printf calls with Platform::Log calls

* Move a brace down

* Move some log entries to one Log call

- Some implementations of Log may assume a full line

* Log the MAC address as LogLevel::Info
This commit is contained in:
Jesse Talavera-Greenberg 2023-03-23 13:04:38 -04:00 committed by GitHub
parent 19280cff2d
commit 79dfb8dc8f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
50 changed files with 521 additions and 378 deletions

View File

@ -21,6 +21,8 @@
#include "ARCodeFile.h" #include "ARCodeFile.h"
#include "Platform.h" #include "Platform.h"
using Platform::Log;
using Platform::LogLevel;
// TODO: import codes from other sources (usrcheat.dat, ...) // TODO: import codes from other sources (usrcheat.dat, ...)
// TODO: more user-friendly error reporting // TODO: more user-friendly error reporting
@ -79,7 +81,7 @@ bool ARCodeFile::Load()
if (ret < 1) if (ret < 1)
{ {
printf("AR: malformed CAT line: %s\n", start); Log(LogLevel::Error, "AR: malformed CAT line: %s\n", start);
fclose(f); fclose(f);
return false; return false;
} }
@ -102,14 +104,14 @@ bool ARCodeFile::Load()
if (ret < 2) if (ret < 2)
{ {
printf("AR: malformed CODE line: %s\n", start); Log(LogLevel::Error, "AR: malformed CODE line: %s\n", start);
fclose(f); fclose(f);
return false; return false;
} }
if (!isincat) if (!isincat)
{ {
printf("AR: encountered CODE line with no category started\n"); Log(LogLevel::Error, "AR: encountered CODE line with no category started\n");
fclose(f); fclose(f);
return false; return false;
} }
@ -128,21 +130,21 @@ bool ARCodeFile::Load()
if (ret < 2) if (ret < 2)
{ {
printf("AR: malformed data line: %s\n", start); Log(LogLevel::Error, "AR: malformed data line: %s\n", start);
fclose(f); fclose(f);
return false; return false;
} }
if (!isincode) if (!isincode)
{ {
printf("AR: encountered data line with no code started\n"); Log(LogLevel::Error, "AR: encountered data line with no code started\n");
fclose(f); fclose(f);
return false; return false;
} }
if (curcode.CodeLen >= 2*64) if (curcode.CodeLen >= 2*64)
{ {
printf("AR: code too long!\n"); Log(LogLevel::Error, "AR: code too long!\n");
fclose(f); fclose(f);
return false; return false;
} }

View File

@ -21,7 +21,10 @@
#include "NDS.h" #include "NDS.h"
#include "DSi.h" #include "DSi.h"
#include "AREngine.h" #include "AREngine.h"
#include "Platform.h"
using Platform::Log;
using Platform::LogLevel;
namespace AREngine namespace AREngine
{ {
@ -271,7 +274,7 @@ void RunCheat(ARCode& arcode)
// in practice could be used for a self-modifying AR code // in practice could be used for a self-modifying AR code
// could be implemented with some hackery, but, does anything even // could be implemented with some hackery, but, does anything even
// use it?? // use it??
printf("AR: !! THE FUCKING C4000000 OPCODE. TELL ARISOTURA.\n"); Log(LogLevel::Error, "AR: !! THE FUCKING C4000000 OPCODE. TELL ARISOTURA.\n");
return; return;
case 0xC5: // count++ / IF (count & b.l) == b.h case 0xC5: // count++ / IF (count & b.l) == b.h
@ -428,7 +431,7 @@ void RunCheat(ARCode& arcode)
break; break;
default: default:
printf("!! bad AR opcode %08X %08X\n", a, b); Log(LogLevel::Warn, "!! bad AR opcode %08X %08X\n", a, b);
return; return;
} }
} }

View File

@ -24,12 +24,16 @@
#include "ARMInterpreter.h" #include "ARMInterpreter.h"
#include "AREngine.h" #include "AREngine.h"
#include "ARMJIT.h" #include "ARMJIT.h"
#include "Platform.h"
#ifdef JIT_ENABLED #ifdef JIT_ENABLED
#include "ARMJIT.h" #include "ARMJIT.h"
#include "ARMJIT_Memory.h" #include "ARMJIT_Memory.h"
#endif #endif
using Platform::Log;
using Platform::LogLevel;
// instruction timing notes // instruction timing notes
// //
// * simple instruction: 1S (code) // * simple instruction: 1S (code)
@ -419,7 +423,7 @@ void ARM::RestoreCPSR()
break; break;
default: default:
printf("!! attempt to restore CPSR under bad mode %02X, %08X\n", CPSR&0x1F, R[15]); Log(LogLevel::Warn, "!! attempt to restore CPSR under bad mode %02X, %08X\n", CPSR&0x1F, R[15]);
break; break;
} }
@ -532,7 +536,7 @@ void ARM::TriggerIRQ()
void ARMv5::PrefetchAbort() void ARMv5::PrefetchAbort()
{ {
printf("ARM9: prefetch abort (%08X)\n", R[15]); Log(LogLevel::Warn, "ARM9: prefetch abort (%08X)\n", R[15]);
u32 oldcpsr = CPSR; u32 oldcpsr = CPSR;
CPSR &= ~0xBF; CPSR &= ~0xBF;
@ -543,7 +547,7 @@ void ARMv5::PrefetchAbort()
// so better take care of it // so better take care of it
if (!(PU_Map[ExceptionBase>>12] & 0x04)) if (!(PU_Map[ExceptionBase>>12] & 0x04))
{ {
printf("!!!!! EXCEPTION REGION NOT EXECUTABLE. THIS IS VERY BAD!!\n"); Log(LogLevel::Error, "!!!!! EXCEPTION REGION NOT EXECUTABLE. THIS IS VERY BAD!!\n");
NDS::Stop(); NDS::Stop();
return; return;
} }
@ -555,7 +559,7 @@ void ARMv5::PrefetchAbort()
void ARMv5::DataAbort() void ARMv5::DataAbort()
{ {
printf("ARM9: data abort (%08X)\n", R[15]); Log(LogLevel::Warn, "ARM9: data abort (%08X)\n", R[15]);
u32 oldcpsr = CPSR; u32 oldcpsr = CPSR;
CPSR &= ~0xBF; CPSR &= ~0xBF;
@ -679,7 +683,7 @@ void ARMv5::ExecuteJIT()
&& !ARMJIT::SetupExecutableRegion(0, instrAddr, FastBlockLookup, FastBlockLookupStart, FastBlockLookupSize)) && !ARMJIT::SetupExecutableRegion(0, instrAddr, FastBlockLookup, FastBlockLookupStart, FastBlockLookupSize))
{ {
NDS::ARM9Timestamp = NDS::ARM9Target; NDS::ARM9Timestamp = NDS::ARM9Target;
printf("ARMv5 PC in non executable region %08X\n", R[15]); Log(LogLevel::Error, "ARMv5 PC in non executable region %08X\n", R[15]);
return; return;
} }
@ -830,7 +834,7 @@ void ARMv4::ExecuteJIT()
&& !ARMJIT::SetupExecutableRegion(1, instrAddr, FastBlockLookup, FastBlockLookupStart, FastBlockLookupSize)) && !ARMJIT::SetupExecutableRegion(1, instrAddr, FastBlockLookup, FastBlockLookupStart, FastBlockLookupSize))
{ {
NDS::ARM7Timestamp = NDS::ARM7Target; NDS::ARM7Timestamp = NDS::ARM7Target;
printf("ARMv4 PC in non executable region %08X\n", R[15]); Log(LogLevel::Error, "ARMv4 PC in non executable region %08X\n", R[15]);
return; return;
} }

View File

@ -22,7 +22,10 @@
#include "ARMInterpreter_ALU.h" #include "ARMInterpreter_ALU.h"
#include "ARMInterpreter_Branch.h" #include "ARMInterpreter_Branch.h"
#include "ARMInterpreter_LoadStore.h" #include "ARMInterpreter_LoadStore.h"
#include "Platform.h"
using Platform::Log;
using Platform::LogLevel;
namespace ARMInterpreter namespace ARMInterpreter
{ {
@ -30,7 +33,7 @@ namespace ARMInterpreter
void A_UNK(ARM* cpu) void A_UNK(ARM* cpu)
{ {
printf("undefined ARM%d instruction %08X @ %08X\n", cpu->Num?7:9, cpu->CurInstr, cpu->R[15]-8); Log(LogLevel::Warn, "undefined ARM%d instruction %08X @ %08X\n", cpu->Num?7:9, cpu->CurInstr, cpu->R[15]-8);
//for (int i = 0; i < 16; i++) printf("R%d: %08X\n", i, cpu->R[i]); //for (int i = 0; i < 16; i++) printf("R%d: %08X\n", i, cpu->R[i]);
//NDS::Halt(); //NDS::Halt();
u32 oldcpsr = cpu->CPSR; u32 oldcpsr = cpu->CPSR;
@ -45,7 +48,7 @@ void A_UNK(ARM* cpu)
void T_UNK(ARM* cpu) void T_UNK(ARM* cpu)
{ {
printf("undefined THUMB%d instruction %04X @ %08X\n", cpu->Num?7:9, cpu->CurInstr, cpu->R[15]-4); Log(LogLevel::Warn, "undefined THUMB%d instruction %04X @ %08X\n", cpu->Num?7:9, cpu->CurInstr, cpu->R[15]-4);
//NDS::Halt(); //NDS::Halt();
u32 oldcpsr = cpu->CPSR; u32 oldcpsr = cpu->CPSR;
cpu->CPSR &= ~0xBF; cpu->CPSR &= ~0xBF;
@ -211,11 +214,11 @@ void A_MCR(ARM* cpu)
} }
else if (cpu->Num==1 && cp==14) else if (cpu->Num==1 && cp==14)
{ {
printf("MCR p14,%d,%d,%d on ARM7\n", cn, cm, cpinfo); Log(LogLevel::Debug, "MCR p14,%d,%d,%d on ARM7\n", cn, cm, cpinfo);
} }
else else
{ {
printf("bad MCR opcode p%d,%d,%d,%d on ARM%d\n", cp, cn, cm, cpinfo, cpu->Num?7:9); Log(LogLevel::Warn, "bad MCR opcode p%d,%d,%d,%d on ARM%d\n", cp, cn, cm, cpinfo, cpu->Num?7:9);
return A_UNK(cpu); // TODO: check what kind of exception it really is return A_UNK(cpu); // TODO: check what kind of exception it really is
} }
@ -239,11 +242,11 @@ void A_MRC(ARM* cpu)
} }
else if (cpu->Num==1 && cp==14) else if (cpu->Num==1 && cp==14)
{ {
printf("MRC p14,%d,%d,%d on ARM7\n", cn, cm, cpinfo); Log(LogLevel::Debug, "MRC p14,%d,%d,%d on ARM7\n", cn, cm, cpinfo);
} }
else else
{ {
printf("bad MRC opcode p%d,%d,%d,%d on ARM%d\n", cp, cn, cm, cpinfo, cpu->Num?7:9); Log(LogLevel::Warn, "bad MRC opcode p%d,%d,%d,%d on ARM%d\n", cp, cn, cm, cpinfo, cpu->Num?7:9);
return A_UNK(cpu); // TODO: check what kind of exception it really is return A_UNK(cpu); // TODO: check what kind of exception it really is
} }

View File

@ -16,9 +16,11 @@
with melonDS. If not, see http://www.gnu.org/licenses/. with melonDS. If not, see http://www.gnu.org/licenses/.
*/ */
#include <stdio.h>
#include "ARM.h" #include "ARM.h"
#include "Platform.h"
using Platform::Log;
using Platform::LogLevel;
namespace ARMInterpreter namespace ARMInterpreter
{ {
@ -79,7 +81,7 @@ void T_BLX_REG(ARM* cpu)
{ {
if (cpu->Num==1) if (cpu->Num==1)
{ {
printf("!! THUMB BLX_REG ON ARM7\n"); Log(LogLevel::Warn, "!! THUMB BLX_REG ON ARM7\n");
return; return;
} }

View File

@ -42,7 +42,10 @@
#include "SPU.h" #include "SPU.h"
#include "Wifi.h" #include "Wifi.h"
#include "NDSCart.h" #include "NDSCart.h"
#include "Platform.h"
using Platform::Log;
using Platform::LogLevel;
#include "ARMJIT_x64/ARMJIT_Offsets.h" #include "ARMJIT_x64/ARMJIT_Offsets.h"
static_assert(offsetof(ARM, CPSR) == ARM_CPSR_offset, ""); static_assert(offsetof(ARM, CPSR) == ARM_CPSR_offset, "");
@ -52,7 +55,7 @@ static_assert(offsetof(ARM, StopExecution) == ARM_StopExecution_offset, "");
namespace ARMJIT namespace ARMJIT
{ {
#define JIT_DEBUGPRINT(msg, ...) #define JIT_DEBUGPRINT(msg, ...) Platform::Log(Platform::LogLevel::Debug, msg, ## __VA_ARGS__)
//#define JIT_DEBUGPRINT(msg, ...) printf(msg, ## __VA_ARGS__) //#define JIT_DEBUGPRINT(msg, ...) printf(msg, ## __VA_ARGS__)
Compiler* JITCompiler; Compiler* JITCompiler;
@ -594,7 +597,7 @@ void CompileBlock(ARM* cpu)
u32 localAddr = LocaliseCodeAddress(cpu->Num, blockAddr); u32 localAddr = LocaliseCodeAddress(cpu->Num, blockAddr);
if (!localAddr) if (!localAddr)
{ {
printf("trying to compile non executable code? %x\n", blockAddr); Log(LogLevel::Warn, "trying to compile non executable code? %x\n", blockAddr);
} }
auto& map = cpu->Num == 0 ? JitBlocks9 : JitBlocks7; auto& map = cpu->Num == 0 ? JitBlocks9 : JitBlocks7;
@ -764,7 +767,7 @@ void CompileBlock(ARM* cpu)
u32 translatedAddr = LocaliseCodeAddress(cpu->Num, literalAddr); u32 translatedAddr = LocaliseCodeAddress(cpu->Num, literalAddr);
if (!translatedAddr) if (!translatedAddr)
{ {
printf("literal in non executable memory?\n"); Log(LogLevel::Warn,"literal in non executable memory?\n");
} }
if (InvalidLiterals.Find(translatedAddr) == -1) if (InvalidLiterals.Find(translatedAddr) == -1)
{ {
@ -1175,7 +1178,7 @@ template void CheckAndInvalidate<1, ARMJIT_Memory::memregion_NewSharedWRAM_C>(u3
void ResetBlockCache() void ResetBlockCache()
{ {
printf("Resetting JIT block cache...\n"); Log(LogLevel::Debug, "Resetting JIT block cache...\n");
// could be replace through a function which only resets // could be replace through a function which only resets
// the permissions but we're too lazy // the permissions but we're too lazy

View File

@ -388,7 +388,7 @@ void Compiler::T_Comp_BranchXchangeReg()
{ {
if (Num == 1) if (Num == 1)
{ {
printf("BLX unsupported on ARM7!!!\n"); Log(LogLevel::Warn, "BLX unsupported on ARM7!!!\n");
return; return;
} }
MOV(W0, MapReg(CurInstr.A_Reg(3))); MOV(W0, MapReg(CurInstr.A_Reg(3)));

View File

@ -239,7 +239,7 @@ Compiler::Compiler()
break; break;
if (i++ > 8) if (i++ > 8)
{ {
printf("couldn't find unmapped place for jit memory\n"); Log(LogLevel::Error, "couldn't find unmapped place for jit memory\n");
JitRXStart = NULL; JitRXStart = NULL;
} }
} }
@ -703,12 +703,12 @@ JitBlockEntry Compiler::CompileBlock(ARM* cpu, bool thumb, FetchedInstr instrs[]
{ {
if (JitMemMainSize - GetCodeOffset() < 1024 * 16) if (JitMemMainSize - GetCodeOffset() < 1024 * 16)
{ {
printf("JIT near memory full, resetting...\n"); Log(LogLevel::Debug, "JIT near memory full, resetting...\n");
ResetBlockCache(); ResetBlockCache();
} }
if ((JitMemMainSize + JitMemSecondarySize) - OtherCodeRegion < 1024 * 8) if ((JitMemMainSize + JitMemSecondarySize) - OtherCodeRegion < 1024 * 8)
{ {
printf("JIT far memory full, resetting...\n"); Log(LogLevel::Debug, "JIT far memory full, resetting...\n");
ResetBlockCache(); ResetBlockCache();
} }

View File

@ -56,7 +56,7 @@ u8* Compiler::RewriteMemAccess(u8* pc)
return pc + (ptrdiff_t)patch.PatchOffset; return pc + (ptrdiff_t)patch.PatchOffset;
} }
printf("this is a JIT bug! %08x\n", __builtin_bswap32(*(u32*)pc)); Log(LogLevel::Error, "this is a JIT bug! %08x\n", __builtin_bswap32(*(u32*)pc));
abort(); abort();
} }
@ -332,7 +332,7 @@ void Compiler::Comp_MemAccess(int rd, int rn, Op2 offset, int size, int flags)
if (CurInstr.Info.Branches()) if (CurInstr.Info.Branches())
{ {
if (size < 32) if (size < 32)
printf("LDR size < 32 branching?\n"); Log(LogLevel::Debug, "LDR size < 32 branching?\n");
Comp_JumpTo(rdMapped, Num == 0, false); Comp_JumpTo(rdMapped, Num == 0, false);
} }
} }

View File

@ -48,6 +48,9 @@
#include <stdlib.h> #include <stdlib.h>
using Platform::Log;
using Platform::LogLevel;
/* /*
We're handling fastmem here. We're handling fastmem here.
@ -399,7 +402,7 @@ struct Mapping
if (status == memstate_MappedRW) if (status == memstate_MappedRW)
{ {
u32 segmentSize = offset - segmentOffset; u32 segmentSize = offset - segmentOffset;
printf("unmapping %x %x %x %x\n", Addr + segmentOffset, Num, segmentOffset + LocalOffset + OffsetsPerRegion[region], segmentSize); Log(LogLevel::Debug, "unmapping %x %x %x %x\n", Addr + segmentOffset, Num, segmentOffset + LocalOffset + OffsetsPerRegion[region], segmentSize);
bool success = UnmapFromRange(Addr + segmentOffset, Num, segmentOffset + LocalOffset + OffsetsPerRegion[region], segmentSize); bool success = UnmapFromRange(Addr + segmentOffset, Num, segmentOffset + LocalOffset + OffsetsPerRegion[region], segmentSize);
assert(success); assert(success);
} }
@ -485,7 +488,7 @@ void RemapDTCM(u32 newBase, u32 newSize)
u32 newEnd = newBase + newSize; u32 newEnd = newBase + newSize;
printf("remapping DTCM %x %x %x %x\n", newBase, newEnd, oldDTCMBase, oldDTCMEnd); Log(LogLevel::Debug, "remapping DTCM %x %x %x %x\n", newBase, newEnd, oldDTCMBase, oldDTCMEnd);
// unmap all regions containing the old or the current DTCM mapping // unmap all regions containing the old or the current DTCM mapping
for (int region = 0; region < memregions_Count; region++) for (int region = 0; region < memregions_Count; region++)
{ {
@ -499,7 +502,7 @@ void RemapDTCM(u32 newBase, u32 newSize)
u32 start = mapping.Addr; u32 start = mapping.Addr;
u32 end = mapping.Addr + mapping.Size; u32 end = mapping.Addr + mapping.Size;
printf("unmapping %d %x %x %x %x\n", region, mapping.Addr, mapping.Size, mapping.Num, mapping.LocalOffset); Log(LogLevel::Debug, "unmapping %d %x %x %x %x\n", region, mapping.Addr, mapping.Size, mapping.Num, mapping.LocalOffset);
bool overlap = (oldDTCMSize > 0 && oldDTCMBase < end && oldDTCMEnd > start) bool overlap = (oldDTCMSize > 0 && oldDTCMBase < end && oldDTCMEnd > start)
|| (newSize > 0 && newBase < end && newEnd > start); || (newSize > 0 && newBase < end && newEnd > start);
@ -548,7 +551,7 @@ void RemapNWRAM(int num)
void RemapSWRAM() void RemapSWRAM()
{ {
printf("remapping SWRAM\n"); Log(LogLevel::Debug, "remapping SWRAM\n");
for (int i = 0; i < Mappings[memregion_WRAM7].Length;) for (int i = 0; i < Mappings[memregion_WRAM7].Length;)
{ {
Mapping& mapping = Mappings[memregion_WRAM7][i]; Mapping& mapping = Mappings[memregion_WRAM7][i];
@ -772,13 +775,13 @@ void Init()
MemoryFile = shm_open(fastmemPidName, O_RDWR | O_CREAT | O_EXCL, 0600); MemoryFile = shm_open(fastmemPidName, O_RDWR | O_CREAT | O_EXCL, 0600);
if (MemoryFile == -1) if (MemoryFile == -1)
{ {
printf("Failed to open memory using shm_open!"); Log(LogLevel::Error, "Failed to open memory using shm_open!");
} }
shm_unlink(fastmemPidName); shm_unlink(fastmemPidName);
#endif #endif
if (ftruncate(MemoryFile, MemoryTotalSize) < 0) if (ftruncate(MemoryFile, MemoryTotalSize) < 0)
{ {
printf("Failed to allocate memory using ftruncate!"); Log(LogLevel::Error, "Failed to allocate memory using ftruncate!");
} }
struct sigaction sa; struct sigaction sa;
@ -845,7 +848,7 @@ void Reset()
assert(MappingStatus7[i] == memstate_Unmapped); assert(MappingStatus7[i] == memstate_Unmapped);
} }
printf("done resetting jit mem\n"); Log(LogLevel::Debug, "done resetting jit mem\n");
} }
bool IsFastmemCompatible(int region) bool IsFastmemCompatible(int region)

View File

@ -21,6 +21,7 @@
#include "ARMJIT.h" #include "ARMJIT.h"
#include "ARMJIT_Internal.h" #include "ARMJIT_Internal.h"
#include "Platform.h"
// TODO: replace this in the future // TODO: replace this in the future
#include "dolphin/BitSet.h" #include "dolphin/BitSet.h"
@ -29,6 +30,9 @@
namespace ARMJIT namespace ARMJIT
{ {
using Platform::Log;
using Platform::LogLevel;
// Imported inside the namespace so that other headers aren't polluted
template <typename T, typename Reg> template <typename T, typename Reg>
class RegisterCache class RegisterCache
@ -80,7 +84,7 @@ public:
} }
} }
printf("this is a JIT bug! LoadRegister failed\n"); Log(LogLevel::Error, "this is a JIT bug! LoadRegister failed\n");
abort(); abort();
} }

View File

@ -227,7 +227,7 @@ void Compiler::A_Comp_Arith()
Comp_ArithTriOp(&Compiler::AND, rd, rn, op2, carryUsed, sFlag|opSymmetric|opInvertOp2); Comp_ArithTriOp(&Compiler::AND, rd, rn, op2, carryUsed, sFlag|opSymmetric|opInvertOp2);
break; break;
default: default:
printf("this is a JIT bug! %04x\n", op); Log(LogLevel::Error, "this is a JIT bug! %04x\n", op);
abort(); abort();
} }

View File

@ -247,7 +247,7 @@ void Compiler::T_Comp_BranchXchangeReg()
{ {
if (Num == 1) if (Num == 1)
{ {
printf("BLX unsupported on ARM7!!!\n"); Log(LogLevel::Warn, "BLX unsupported on ARM7!!!\n");
return; return;
} }
MOV(32, R(RSCRATCH), MapReg(CurInstr.A_Reg(3))); MOV(32, R(RSCRATCH), MapReg(CurInstr.A_Reg(3)));

View File

@ -711,12 +711,12 @@ JitBlockEntry Compiler::CompileBlock(ARM* cpu, bool thumb, FetchedInstr instrs[]
{ {
if (NearSize - (GetCodePtr() - NearStart) < 1024 * 32) // guess... if (NearSize - (GetCodePtr() - NearStart) < 1024 * 32) // guess...
{ {
printf("near reset\n"); Log(LogLevel::Debug, "near reset\n");
ResetBlockCache(); ResetBlockCache();
} }
if (FarSize - (FarCode - FarStart) < 1024 * 32) // guess... if (FarSize - (FarCode - FarStart) < 1024 * 32) // guess...
{ {
printf("far reset\n"); Log(LogLevel::Debug, "far reset\n");
ResetBlockCache(); ResetBlockCache();
} }

View File

@ -51,7 +51,7 @@ u8* Compiler::RewriteMemAccess(u8* pc)
return pc + (ptrdiff_t)patch.Offset; return pc + (ptrdiff_t)patch.Offset;
} }
printf("this is a JIT bug %sx\n", pc); Log(LogLevel::Error, "this is a JIT bug %sx\n", pc);
abort(); abort();
} }
@ -382,7 +382,7 @@ void Compiler::Comp_MemAccess(int rd, int rn, const Op2& op2, int size, int flag
if (!(flags & memop_Store) && rd == 15) if (!(flags & memop_Store) && rd == 15)
{ {
if (size < 32) if (size < 32)
printf("!!! LDR <32 bit PC %08X %x\n", R15, CurInstr.Instr); Log(LogLevel::Debug, "!!! LDR <32 bit PC %08X %x\n", R15, CurInstr.Instr);
{ {
if (Num == 1) if (Num == 1)
{ {

View File

@ -21,12 +21,16 @@
#include "NDS.h" #include "NDS.h"
#include "DSi.h" #include "DSi.h"
#include "ARM.h" #include "ARM.h"
#include "Platform.h"
#ifdef JIT_ENABLED #ifdef JIT_ENABLED
#include "ARMJIT.h" #include "ARMJIT.h"
#include "ARMJIT_Memory.h" #include "ARMJIT_Memory.h"
#endif #endif
using Platform::Log;
using Platform::LogLevel;
// access timing for cached regions // access timing for cached regions
// this would be an average between cache hits and cache misses // this would be an average between cache hits and cache misses
// this was measured to be close to hardware average // this was measured to be close to hardware average
@ -201,7 +205,7 @@ void ARMv5::UpdatePURegion(u32 n)
case 3: privmask |= 0x03; usermask |= 0x03; break; case 3: privmask |= 0x03; usermask |= 0x03; break;
case 5: privmask |= 0x01; break; case 5: privmask |= 0x01; break;
case 6: privmask |= 0x01; usermask |= 0x01; break; case 6: privmask |= 0x01; usermask |= 0x01; break;
default: printf("!! BAD DATARW VALUE %d\n", datarw&0xF); default: Log(LogLevel::Warn, "!! BAD DATARW VALUE %d\n", datarw&0xF);
} }
switch (coderw) switch (coderw)
@ -212,7 +216,7 @@ void ARMv5::UpdatePURegion(u32 n)
case 3: privmask |= 0x04; usermask |= 0x04; break; case 3: privmask |= 0x04; usermask |= 0x04; break;
case 5: privmask |= 0x04; break; case 5: privmask |= 0x04; break;
case 6: privmask |= 0x04; usermask |= 0x04; break; case 6: privmask |= 0x04; usermask |= 0x04; break;
default: printf("!! BAD CODERW VALUE %d\n", datarw&0xF); default: Log(LogLevel::Warn, "!! BAD CODERW VALUE %d\n", datarw&0xF);
} }
if (datacache & 0x1) if (datacache & 0x1)
@ -233,8 +237,17 @@ void ARMv5::UpdatePURegion(u32 n)
usermask |= 0x40; usermask |= 0x40;
} }
printf("PU region %d: %08X-%08X, user=%02X priv=%02X\n", n, start<<12, end<<12, usermask, privmask); Log(
printf("%08X/%08X\n", PU_DataRW, PU_CodeRW); LogLevel::Debug,
"PU region %d: %08X-%08X, user=%02X priv=%02X, %08X/%08X\n",
n,
start << 12,
end << 12,
usermask,
privmask,
PU_DataRW,
PU_CodeRW
);
for (u32 i = start; i < end; i++) for (u32 i = start; i < end; i++)
{ {
@ -443,7 +456,7 @@ void ARMv5::CP15Write(u32 id, u32 val)
{ {
UpdatePURegions((old & 0x1) != (val & 0x1)); UpdatePURegions((old & 0x1) != (val & 0x1));
} }
if (val & (1<<7)) printf("!!!! ARM9 BIG ENDIAN MODE. VERY BAD. SHIT GONNA ASPLODE NOW\n"); if (val & (1<<7)) Log(LogLevel::Warn, "!!!! ARM9 BIG ENDIAN MODE. VERY BAD. SHIT GONNA ASPLODE NOW\n");
if (val & (1<<13)) ExceptionBase = 0xFFFF0000; if (val & (1<<13)) ExceptionBase = 0xFFFF0000;
else ExceptionBase = 0x00000000; else ExceptionBase = 0x00000000;
} }
@ -564,11 +577,21 @@ void ARMv5::CP15Write(u32 id, u32 val)
case 0x661: case 0x661:
case 0x670: case 0x670:
case 0x671: case 0x671:
char log_output[1024];
PU_Region[(id >> 4) & 0xF] = val; PU_Region[(id >> 4) & 0xF] = val;
printf("PU: region %d = %08X : ", (id>>4)&0xF, val);
printf("%s, ", val&1 ? "enabled":"disabled"); std::snprintf(log_output,
printf("%08X-", val&0xFFFFF000); sizeof(log_output),
printf("%08X\n", (val&0xFFFFF000)+(2<<((val&0x3E)>>1))); "PU: region %d = %08X : %s, %08X-%08X\n",
(id >> 4) & 0xF,
val,
val & 1 ? "enabled" : "disabled",
val & 0xFFFFF000,
(val & 0xFFFFF000) + (2 << ((val & 0x3E) >> 1))
);
Log(LogLevel::Debug, "%s", log_output);
// Some implementations of Log imply a newline, so we build up the line before printing it
// TODO: smarter region update for this? // TODO: smarter region update for this?
UpdatePURegions(true); UpdatePURegions(true);
return; return;
@ -589,7 +612,7 @@ void ARMv5::CP15Write(u32 id, u32 val)
//Halt(255); //Halt(255);
return; return;
case 0x752: case 0x752:
printf("CP15: ICACHE INVALIDATE WEIRD. %08X\n", val); Log(LogLevel::Warn, "CP15: ICACHE INVALIDATE WEIRD. %08X\n", val);
//Halt(255); //Halt(255);
return; return;
@ -645,7 +668,7 @@ void ARMv5::CP15Write(u32 id, u32 val)
return; return;
if ((id & 0xF00) != 0x700) if ((id & 0xF00) != 0x700)
printf("unknown CP15 write op %03X %08X\n", id, val); Log(LogLevel::Warn, "unknown CP15 write op %03X %08X\n", id, val);
} }
u32 ARMv5::CP15Read(u32 id) u32 ARMv5::CP15Read(u32 id)
@ -741,7 +764,7 @@ u32 ARMv5::CP15Read(u32 id)
if ((id & 0xF00) == 0xF00) // test/debug shit? if ((id & 0xF00) == 0xF00) // test/debug shit?
return 0; return 0;
printf("unknown CP15 read op %03X\n", id); Log(LogLevel::Warn, "unknown CP15 read op %03X\n", id);
return 0; return 0;
} }

View File

@ -22,8 +22,10 @@
#include "DMA.h" #include "DMA.h"
#include "GPU.h" #include "GPU.h"
#include "DMA_Timings.h" #include "DMA_Timings.h"
#include "Platform.h"
using Platform::Log;
using Platform::LogLevel;
// DMA TIMINGS // DMA TIMINGS
// //
@ -142,7 +144,7 @@ void DMA::WriteCnt(u32 val)
GPU3D::CheckFIFODMA(); GPU3D::CheckFIFODMA();
if (StartMode==0x06 || StartMode==0x13) if (StartMode==0x06 || StartMode==0x13)
printf("UNIMPLEMENTED ARM%d DMA%d START MODE %02X, %08X->%08X\n", CPU?7:9, Num, StartMode, SrcAddr, DstAddr); Log(LogLevel::Warn, "UNIMPLEMENTED ARM%d DMA%d START MODE %02X, %08X->%08X\n", CPU?7:9, Num, StartMode, SrcAddr, DstAddr);
} }
} }

View File

@ -43,6 +43,8 @@
#include "tiny-AES-c/aes.hpp" #include "tiny-AES-c/aes.hpp"
using Platform::Log;
using Platform::LogLevel;
namespace DSi namespace DSi
{ {
@ -692,7 +694,7 @@ bool LoadBIOS()
f = Platform::OpenLocalFile(Platform::GetConfigString(Platform::DSi_BIOS9Path), "rb"); f = Platform::OpenLocalFile(Platform::GetConfigString(Platform::DSi_BIOS9Path), "rb");
if (!f) if (!f)
{ {
printf("ARM9i BIOS not found\n"); Log(LogLevel::Warn, "ARM9i BIOS not found\n");
for (i = 0; i < 16; i++) for (i = 0; i < 16; i++)
((u32*)ARM9iBIOS)[i] = 0xE7FFDEFF; ((u32*)ARM9iBIOS)[i] = 0xE7FFDEFF;
@ -702,14 +704,14 @@ bool LoadBIOS()
fseek(f, 0, SEEK_SET); fseek(f, 0, SEEK_SET);
fread(ARM9iBIOS, 0x10000, 1, f); fread(ARM9iBIOS, 0x10000, 1, f);
printf("ARM9i BIOS loaded\n"); Log(LogLevel::Info, "ARM9i BIOS loaded\n");
fclose(f); fclose(f);
} }
f = Platform::OpenLocalFile(Platform::GetConfigString(Platform::DSi_BIOS7Path), "rb"); f = Platform::OpenLocalFile(Platform::GetConfigString(Platform::DSi_BIOS7Path), "rb");
if (!f) if (!f)
{ {
printf("ARM7i BIOS not found\n"); Log(LogLevel::Warn, "ARM7i BIOS not found\n");
for (i = 0; i < 16; i++) for (i = 0; i < 16; i++)
((u32*)ARM7iBIOS)[i] = 0xE7FFDEFF; ((u32*)ARM7iBIOS)[i] = 0xE7FFDEFF;
@ -721,7 +723,7 @@ bool LoadBIOS()
fseek(f, 0, SEEK_SET); fseek(f, 0, SEEK_SET);
fread(ARM7iBIOS, 0x10000, 1, f); fread(ARM7iBIOS, 0x10000, 1, f);
printf("ARM7i BIOS loaded\n"); Log(LogLevel::Info, "ARM7i BIOS loaded\n");
fclose(f); fclose(f);
} }
@ -737,11 +739,11 @@ bool LoadBIOS()
bool LoadNAND() bool LoadNAND()
{ {
printf("Loading DSi NAND\n"); Log(LogLevel::Info, "Loading DSi NAND\n");
if (!DSi_NAND::Init(&DSi::ARM7iBIOS[0x8308])) if (!DSi_NAND::Init(&DSi::ARM7iBIOS[0x8308]))
{ {
printf("Failed to load DSi NAND\n"); Log(LogLevel::Error, "Failed to load DSi NAND\n");
return false; return false;
} }
@ -770,9 +772,9 @@ bool LoadNAND()
fseek(nand, 0x220, SEEK_SET); fseek(nand, 0x220, SEEK_SET);
fread(bootparams, 4, 8, nand); fread(bootparams, 4, 8, nand);
printf("ARM9: offset=%08X size=%08X RAM=%08X size_aligned=%08X\n", Log(LogLevel::Debug, "ARM9: offset=%08X size=%08X RAM=%08X size_aligned=%08X\n",
bootparams[0], bootparams[1], bootparams[2], bootparams[3]); bootparams[0], bootparams[1], bootparams[2], bootparams[3]);
printf("ARM7: offset=%08X size=%08X RAM=%08X size_aligned=%08X\n", Log(LogLevel::Debug, "ARM7: offset=%08X size=%08X RAM=%08X size_aligned=%08X\n",
bootparams[4], bootparams[5], bootparams[6], bootparams[7]); bootparams[4], bootparams[5], bootparams[6], bootparams[7]);
// read and apply new-WRAM settings // read and apply new-WRAM settings
@ -883,8 +885,8 @@ bool LoadNAND()
DSi_NAND::GetIDs(eMMC_CID, ConsoleID); DSi_NAND::GetIDs(eMMC_CID, ConsoleID);
printf("eMMC CID: "); printhex(eMMC_CID, 16); Log(LogLevel::Debug, "eMMC CID: "); printhex(eMMC_CID, 16);
printf("Console ID: %" PRIx64 "\n", ConsoleID); Log(LogLevel::Debug, "Console ID: %" PRIx64 "\n", ConsoleID);
u32 eaddr = 0x03FFE6E4; u32 eaddr = 0x03FFE6E4;
ARM7Write32(eaddr+0x00, *(u32*)&eMMC_CID[0]); ARM7Write32(eaddr+0x00, *(u32*)&eMMC_CID[0]);
@ -1003,7 +1005,7 @@ void MapNWRAM_A(u32 num, u8 val)
if (MBK[0][8] & (1 << num)) if (MBK[0][8] & (1 << num))
{ {
printf("trying to map NWRAM_A %d to %02X, but it is write-protected (%08X)\n", num, val, MBK[0][8]); Log(LogLevel::Warn, "trying to map NWRAM_A %d to %02X, but it is write-protected (%08X)\n", num, val, MBK[0][8]);
return; return;
} }
@ -1050,7 +1052,7 @@ void MapNWRAM_B(u32 num, u8 val)
if (MBK[0][8] & (1 << (8+num))) if (MBK[0][8] & (1 << (8+num)))
{ {
printf("trying to map NWRAM_B %d to %02X, but it is write-protected (%08X)\n", num, val, MBK[0][8]); Log(LogLevel::Warn, "trying to map NWRAM_B %d to %02X, but it is write-protected (%08X)\n", num, val, MBK[0][8]);
return; return;
} }
@ -1099,7 +1101,7 @@ void MapNWRAM_C(u32 num, u8 val)
if (MBK[0][8] & (1 << (16+num))) if (MBK[0][8] & (1 << (16+num)))
{ {
printf("trying to map NWRAM_C %d to %02X, but it is write-protected (%08X)\n", num, val, MBK[0][8]); Log(LogLevel::Warn, "trying to map NWRAM_C %d to %02X, but it is write-protected (%08X)\n", num, val, MBK[0][8]);
return; return;
} }
@ -1179,7 +1181,7 @@ void MapNWRAMRange(u32 cpu, u32 num, u32 val)
u32 end = 0x03000000 + (((val >> 20) & 0x1FF) << 16); u32 end = 0x03000000 + (((val >> 20) & 0x1FF) << 16);
u32 size = (val >> 12) & 0x3; u32 size = (val >> 12) & 0x3;
printf("NWRAM-A: ARM%d range %08X-%08X, size %d\n", cpu?7:9, start, end, size); Log(LogLevel::Debug, "NWRAM-A: ARM%d range %08X-%08X, size %d\n", cpu?7:9, start, end, size);
NWRAMStart[cpu][num] = start; NWRAMStart[cpu][num] = start;
NWRAMEnd[cpu][num] = end; NWRAMEnd[cpu][num] = end;
@ -1198,7 +1200,7 @@ void MapNWRAMRange(u32 cpu, u32 num, u32 val)
u32 end = 0x03000000 + (((val >> 19) & 0x3FF) << 15); u32 end = 0x03000000 + (((val >> 19) & 0x3FF) << 15);
u32 size = (val >> 12) & 0x3; u32 size = (val >> 12) & 0x3;
printf("NWRAM-%c: ARM%d range %08X-%08X, size %d\n", 'A'+num, cpu?7:9, start, end, size); Log(LogLevel::Debug, "NWRAM-%c: ARM%d range %08X-%08X, size %d\n", 'A'+num, cpu?7:9, start, end, size);
NWRAMStart[cpu][num] = start; NWRAMStart[cpu][num] = start;
NWRAMEnd[cpu][num] = end; NWRAMEnd[cpu][num] = end;
@ -1220,12 +1222,12 @@ void ApplyNewRAMSize(u32 size)
case 0: case 0:
case 1: case 1:
NDS::MainRAMMask = 0x3FFFFF; NDS::MainRAMMask = 0x3FFFFF;
printf("RAM: 4MB\n"); Log(LogLevel::Debug, "RAM: 4MB\n");
break; break;
case 2: case 2:
case 3: // TODO: debug console w/ 32MB? case 3: // TODO: debug console w/ 32MB?
NDS::MainRAMMask = 0xFFFFFF; NDS::MainRAMMask = 0xFFFFFF;
printf("RAM: 16MB\n"); Log(LogLevel::Debug, "RAM: 16MB\n");
break; break;
} }
} }
@ -1236,7 +1238,7 @@ void Set_SCFG_Clock9(u16 val)
NDS::ARM9Timestamp >>= NDS::ARM9ClockShift; NDS::ARM9Timestamp >>= NDS::ARM9ClockShift;
NDS::ARM9Target >>= NDS::ARM9ClockShift; NDS::ARM9Target >>= NDS::ARM9ClockShift;
printf("CLOCK9=%04X\n", val); Log(LogLevel::Debug, "CLOCK9=%04X\n", val);
SCFG_Clock9 = val & 0x0187; SCFG_Clock9 = val & 0x0187;
if (SCFG_Clock9 & (1<<0)) NDS::ARM9ClockShift = 2; if (SCFG_Clock9 & (1<<0)) NDS::ARM9ClockShift = 2;
@ -1253,7 +1255,7 @@ void Set_SCFG_MC(u32 val)
val &= 0xFFFF800C; val &= 0xFFFF800C;
if ((val & 0xC) == 0xC) val &= ~0xC; // hax if ((val & 0xC) == 0xC) val &= ~0xC; // hax
if (val & 0x8000) printf("SCFG_MC: weird NDS slot swap\n"); if (val & 0x8000) Log(LogLevel::Warn, "SCFG_MC: weird NDS slot swap\n");
SCFG_MC = (SCFG_MC & ~0xFFFF800C) | val; SCFG_MC = (SCFG_MC & ~0xFFFF800C) | val;
if ((oldslotstatus == 0x0) && ((SCFG_MC & 0xC) == 0x4)) if ((oldslotstatus == 0x0) && ((SCFG_MC & 0xC) == 0x4))
@ -2537,7 +2539,7 @@ void ARM9IOWrite32(u32 addr, u32 val)
SCFG_EXT[0] |= (val & 0x8007F19F); SCFG_EXT[0] |= (val & 0x8007F19F);
SCFG_EXT[1] &= ~0x0000F080; SCFG_EXT[1] &= ~0x0000F080;
SCFG_EXT[1] |= (val & 0x0000F080); SCFG_EXT[1] |= (val & 0x0000F080);
printf("SCFG_EXT = %08X / %08X (val9 %08X)\n", SCFG_EXT[0], SCFG_EXT[1], val); Log(LogLevel::Debug, "SCFG_EXT = %08X / %08X (val9 %08X)\n", SCFG_EXT[0], SCFG_EXT[1], val);
/*switch ((SCFG_EXT[0] >> 14) & 0x3) /*switch ((SCFG_EXT[0] >> 14) & 0x3)
{ {
case 0: case 0:
@ -2558,7 +2560,7 @@ void ARM9IOWrite32(u32 addr, u32 val)
// is still busy clearing/relocating shit // is still busy clearing/relocating shit
//if (newram != oldram) //if (newram != oldram)
// NDS::ScheduleEvent(NDS::Event_DSi_RAMSizeChange, false, 512*512*512, ApplyNewRAMSize, newram); // NDS::ScheduleEvent(NDS::Event_DSi_RAMSizeChange, false, 512*512*512, ApplyNewRAMSize, newram);
printf("from %08X, ARM7 %08X, %08X\n", NDS::GetPC(0), NDS::GetPC(1), NDS::ARM7->R[1]); Log(LogLevel::Debug, "from %08X, ARM7 %08X, %08X\n", NDS::GetPC(0), NDS::GetPC(1), NDS::ARM7->R[1]);
} }
return; return;
@ -2805,7 +2807,7 @@ u32 ARM7IORead32(u32 addr)
case 0x04004D08: return 0; case 0x04004D08: return 0;
case 0x4004700: case 0x4004700:
printf("32-Bit SNDExCnt read? %08X\n", NDS::ARM7->R[15]); Log(LogLevel::Debug, "32-Bit SNDExCnt read? %08X\n", NDS::ARM7->R[15]);
return DSi_DSP::SNDExCnt; return DSi_DSP::SNDExCnt;
} }
@ -3005,7 +3007,7 @@ void ARM7IOWrite32(u32 addr, u32 val)
SCFG_EXT[0] |= (val & 0x03000000); SCFG_EXT[0] |= (val & 0x03000000);
SCFG_EXT[1] &= ~0x93FF0F07; SCFG_EXT[1] &= ~0x93FF0F07;
SCFG_EXT[1] |= (val & 0x93FF0F07); SCFG_EXT[1] |= (val & 0x93FF0F07);
printf("SCFG_EXT = %08X / %08X (val7 %08X)\n", SCFG_EXT[0], SCFG_EXT[1], val); Log(LogLevel::Debug, "SCFG_EXT = %08X / %08X (val7 %08X)\n", SCFG_EXT[0], SCFG_EXT[1], val);
return; return;
case 0x04004010: case 0x04004010:
if (!(SCFG_EXT[1] & (1 << 31))) /* no access to SCFG Registers if disabled*/ if (!(SCFG_EXT[1] & (1 << 31))) /* no access to SCFG Registers if disabled*/
@ -3071,7 +3073,7 @@ void ARM7IOWrite32(u32 addr, u32 val)
case 0x04004408: DSi_AES::WriteInputFIFO(val); return; case 0x04004408: DSi_AES::WriteInputFIFO(val); return;
case 0x4004700: case 0x4004700:
printf("32-Bit SNDExCnt write? %08X %08X\n", val, NDS::ARM7->R[15]); Log(LogLevel::Debug, "32-Bit SNDExCnt write? %08X %08X\n", val, NDS::ARM7->R[15]);
DSi_DSP::WriteSNDExCnt(val); DSi_DSP::WriteSNDExCnt(val);
return; return;
} }

View File

@ -24,6 +24,8 @@
#include "tiny-AES-c/aes.hpp" #include "tiny-AES-c/aes.hpp"
#include "Platform.h" #include "Platform.h"
using Platform::Log;
using Platform::LogLevel;
namespace DSi_AES namespace DSi_AES
{ {
@ -332,7 +334,7 @@ void WriteCnt(u32 val)
OutputMACDue = false; OutputMACDue = false;
if (AESMode == 0 && (!(val & (1<<20)))) printf("AES: CCM-DECRYPT MAC FROM WRFIFO, TODO\n"); if (AESMode == 0 && (!(val & (1<<20)))) Log(LogLevel::Debug, "AES: CCM-DECRYPT MAC FROM WRFIFO, TODO\n");
if ((RemBlocks > 0) || (RemExtra > 0)) if ((RemBlocks > 0) || (RemExtra > 0))
{ {
@ -390,7 +392,7 @@ void WriteBlkCnt(u32 val)
u32 ReadOutputFIFO() u32 ReadOutputFIFO()
{ {
if (OutputFIFO.IsEmpty()) printf("!!! AES OUTPUT FIFO EMPTY\n"); if (OutputFIFO.IsEmpty()) Log(LogLevel::Warn, "!!! AES OUTPUT FIFO EMPTY\n");
u32 ret = OutputFIFO.Read(); u32 ret = OutputFIFO.Read();
@ -423,7 +425,7 @@ void WriteInputFIFO(u32 val)
{ {
// TODO: add some delay to processing // TODO: add some delay to processing
if (InputFIFO.IsFull()) printf("!!! AES INPUT FIFO FULL\n"); if (InputFIFO.IsFull()) Log(LogLevel::Warn, "!!! AES INPUT FIFO FULL\n");
InputFIFO.Write(val); InputFIFO.Write(val);

View File

@ -22,6 +22,8 @@
#include "DSi_Camera.h" #include "DSi_Camera.h"
#include "Platform.h" #include "Platform.h"
using Platform::Log;
using Platform::LogLevel;
namespace DSi_CamModule namespace DSi_CamModule
{ {
@ -245,7 +247,7 @@ u8 Read8(u32 addr)
{ {
// //
printf("unknown DSi cam read8 %08X\n", addr); Log(LogLevel::Warn, "unknown DSi cam read8 %08X\n", addr);
return 0; return 0;
} }
@ -257,7 +259,7 @@ u16 Read16(u32 addr)
case 0x04004202: return Cnt; case 0x04004202: return Cnt;
} }
printf("unknown DSi cam read16 %08X\n", addr); Log(LogLevel::Warn, "unknown DSi cam read16 %08X\n", addr);
return 0; return 0;
} }
@ -283,7 +285,7 @@ u32 Read32(u32 addr)
case 0x04004214: return CropEnd; case 0x04004214: return CropEnd;
} }
printf("unknown DSi cam read32 %08X\n", addr); Log(LogLevel::Warn, "unknown DSi cam read32 %08X\n", addr);
return 0; return 0;
} }
@ -291,7 +293,7 @@ void Write8(u32 addr, u8 val)
{ {
// //
printf("unknown DSi cam write8 %08X %02X\n", addr, val); Log(LogLevel::Warn, "unknown DSi cam write8 %08X %02X\n", addr, val);
} }
void Write16(u32 addr, u16 val) void Write16(u32 addr, u16 val)
@ -370,7 +372,7 @@ void Write16(u32 addr, u16 val)
return; return;
} }
printf("unknown DSi cam write16 %08X %04X\n", addr, val); Log(LogLevel::Warn, "unknown DSi cam write16 %08X %04X\n", addr, val);
} }
void Write32(u32 addr, u32 val) void Write32(u32 addr, u32 val)
@ -387,7 +389,7 @@ void Write32(u32 addr, u32 val)
return; return;
} }
printf("unknown DSi cam write32 %08X %08X\n", addr, val); Log(LogLevel::Warn, "unknown DSi cam write32 %08X %08X\n", addr, val);
} }
@ -506,7 +508,7 @@ int Camera::TransferScanline(u32* buffer, int maxlen)
(FrameWidth & 1)) (FrameWidth & 1))
{ {
// TODO work out something for these cases? // TODO work out something for these cases?
printf("CAM%d: invalid resolution %dx%d\n", Num, FrameWidth, FrameHeight); Log(LogLevel::Warn, "CAM%d: invalid resolution %dx%d\n", Num, FrameWidth, FrameHeight);
//memset(buffer, 0, width*height*sizeof(u16)); //memset(buffer, 0, width*height*sizeof(u16));
return 0; return 0;
} }
@ -584,7 +586,7 @@ void Camera::I2C_Write(u8 val, bool last)
else else
RegAddr |= val; RegAddr |= val;
if (RegAddr & 0x1) printf("DSi_Camera: !! UNALIGNED REG ADDRESS %04X\n", RegAddr); if (RegAddr & 0x1) Log(LogLevel::Warn, "DSi_Camera: !! UNALIGNED REG ADDRESS %04X\n", RegAddr);
} }
else else
{ {
@ -636,7 +638,7 @@ u16 Camera::I2C_ReadReg(u16 addr)
case 0x301A: return ((~StandbyCnt) & 0x4000) >> 12; case 0x301A: return ((~StandbyCnt) & 0x4000) >> 12;
} }
if(Num==1)printf("DSi_Camera%d: unknown read %04X\n", Num, addr); if(Num==1) Log(LogLevel::Warn, "DSi_Camera%d: unknown read %04X\n", Num, addr);
return 0; return 0;
} }
@ -702,7 +704,7 @@ void Camera::I2C_WriteReg(u16 addr, u16 val)
return; return;
} }
if(Num==1)printf("DSi_Camera%d: unknown write %04X %04X\n", Num, addr, val); if(Num==1) Log(LogLevel::Warn, "DSi_Camera%d: unknown write %04X %04X\n", Num, addr, val);
} }
@ -727,7 +729,7 @@ void Camera::MCU_Write(u16 addr, u8 val)
if (val == 2) MCURegs[0x2104] = 7; // capture mode if (val == 2) MCURegs[0x2104] = 7; // capture mode
else if (val == 1) MCURegs[0x2104] = 3; // preview mode else if (val == 1) MCURegs[0x2104] = 3; // preview mode
else if (val != 5 && val != 6) else if (val != 5 && val != 6)
printf("CAM%d: atypical SEQ_CMD %04X\n", Num, val); Log(LogLevel::Debug, "CAM%d: atypical SEQ_CMD %04X\n", Num, val);
return; return;
case 0x2104: // SEQ_STATE, read-only case 0x2104: // SEQ_STATE, read-only

View File

@ -22,7 +22,10 @@
#include "DSi_DSP.h" #include "DSi_DSP.h"
#include "FIFO.h" #include "FIFO.h"
#include "NDS.h" #include "NDS.h"
#include "Platform.h"
using Platform::Log;
using Platform::LogLevel;
namespace DSi_DSP namespace DSi_DSP
{ {
@ -488,7 +491,7 @@ void Write8(u32 addr, u8 val)
} }
void Write16(u32 addr, u16 val) void Write16(u32 addr, u16 val)
{ {
printf("DSP WRITE16 %d %08X %08X %08X\n", IsDSPCoreEnabled(), addr, val, NDS::GetPC(0)); Log(LogLevel::Debug,"DSP WRITE16 %d %08X %08X %08X\n", IsDSPCoreEnabled(), addr, val, NDS::GetPC(0));
//if (!IsDSPIOEnabled()) return; //if (!IsDSPIOEnabled()) return;
DSPCatchUp(); DSPCatchUp();

View File

@ -23,7 +23,10 @@
#include "DSi_Camera.h" #include "DSi_Camera.h"
#include "ARM.h" #include "ARM.h"
#include "SPI.h" #include "SPI.h"
#include "Platform.h"
using Platform::Log;
using Platform::LogLevel;
namespace DSi_BPTWL namespace DSi_BPTWL
{ {
@ -131,7 +134,7 @@ void Write(u8 val, bool last)
if (CurPos == 0x11 && val == 0x01) if (CurPos == 0x11 && val == 0x01)
{ {
printf("BPTWL: soft-reset\n"); Log(LogLevel::Debug, "BPTWL: soft-reset\n");
val = 0; // checkme val = 0; // checkme
// TODO: soft-reset might need to be scheduled later! // TODO: soft-reset might need to be scheduled later!
// TODO: this has been moved for the JIT to work, nothing is confirmed here // TODO: this has been moved for the JIT to work, nothing is confirmed here
@ -225,7 +228,7 @@ void WriteCnt(u8 val)
case 0xA0: case 0xA0:
case 0xE0: Data = 0xFF; break; case 0xE0: Data = 0xFF; break;
default: default:
printf("I2C: read on unknown device %02X, cnt=%02X, data=%02X, last=%d\n", Device, val, 0, islast); Log(LogLevel::Warn, "I2C: read on unknown device %02X, cnt=%02X, data=%02X, last=%d\n", Device, val, 0, islast);
Data = 0xFF; Data = 0xFF;
break; break;
} }
@ -251,7 +254,7 @@ void WriteCnt(u8 val)
case 0xA0: case 0xA0:
case 0xE0: ack = false; break; case 0xE0: ack = false; break;
default: default:
printf("I2C: %s start on unknown device %02X\n", (Data&0x01)?"read":"write", Device); Log(LogLevel::Warn, "I2C: %s start on unknown device %02X\n", (Data&0x01)?"read":"write", Device);
ack = false; ack = false;
break; break;
} }
@ -268,7 +271,7 @@ void WriteCnt(u8 val)
case 0xA0: case 0xA0:
case 0xE0: ack = false; break; case 0xE0: ack = false; break;
default: default:
printf("I2C: write on unknown device %02X, cnt=%02X, data=%02X, last=%d\n", Device, val, Data, islast); Log(LogLevel::Warn, "I2C: write on unknown device %02X, cnt=%02X, data=%02X, last=%d\n", Device, val, Data, islast);
ack = false; ack = false;
break; break;
} }

View File

@ -29,6 +29,8 @@
#include "fatfs/ff.h" #include "fatfs/ff.h"
using Platform::Log;
using Platform::LogLevel;
namespace DSi_NAND namespace DSi_NAND
{ {
@ -62,7 +64,7 @@ bool Init(u8* es_keyY)
FILE* orig = Platform::OpenLocalFile(nandpath, "rb"); FILE* orig = Platform::OpenLocalFile(nandpath, "rb");
if (!orig) if (!orig)
{ {
printf("Failed to open DSi NAND\n"); Log(LogLevel::Error, "Failed to open DSi NAND\n");
return false; return false;
} }
@ -103,7 +105,7 @@ bool Init(u8* es_keyY)
res = f_mount(&CurFS, "0:", 0); res = f_mount(&CurFS, "0:", 0);
if (res != FR_OK) if (res != FR_OK)
{ {
printf("NAND mounting failed: %d\n", res); Log(LogLevel::Error, "NAND mounting failed: %d\n", res);
f_unmount("0:"); f_unmount("0:");
ff_disk_close(); ff_disk_close();
return false; return false;
@ -125,7 +127,7 @@ bool Init(u8* es_keyY)
fread(nand_footer, 1, 16, nandfile); fread(nand_footer, 1, 16, nandfile);
if (memcmp(nand_footer, nand_footer_ref, 16)) if (memcmp(nand_footer, nand_footer_ref, 16))
{ {
printf("ERROR: NAND missing nocash footer\n"); Log(LogLevel::Error, "ERROR: NAND missing nocash footer\n");
return false; return false;
} }
} }
@ -471,7 +473,7 @@ bool ESDecrypt(u8* data, u32 len)
u32 footerlen = footer[0] | (footer[1] << 8) | (footer[2] << 16); u32 footerlen = footer[0] | (footer[1] << 8) | (footer[2] << 16);
if (footerlen != len) if (footerlen != len)
{ {
printf("ESDecrypt: bad length %d (expected %d)\n", len, footerlen); Log(LogLevel::Error, "ESDecrypt: bad length %d (expected %d)\n", len, footerlen);
return false; return false;
} }
@ -479,7 +481,7 @@ bool ESDecrypt(u8* data, u32 len)
{ {
if (data[len+i] != mac[15-i]) if (data[len+i] != mac[15-i])
{ {
printf("ESDecrypt: bad MAC\n"); Log(LogLevel::Warn, "ESDecrypt: bad MAC\n");
return false; return false;
} }
} }
@ -572,7 +574,7 @@ void PatchUserData()
res = f_open(&file, filename, FA_OPEN_EXISTING | FA_READ | FA_WRITE); res = f_open(&file, filename, FA_OPEN_EXISTING | FA_READ | FA_WRITE);
if (res != FR_OK) if (res != FR_OK)
{ {
printf("NAND: editing file %s failed: %d\n", filename, res); Log(LogLevel::Error, "NAND: editing file %s failed: %d\n", filename, res);
continue; continue;
} }
@ -651,7 +653,7 @@ void debug_listfiles(const char* path)
char fullname[512]; char fullname[512];
sprintf(fullname, "%s/%s", path, info.fname); sprintf(fullname, "%s/%s", path, info.fname);
printf("[%c] %s\n", (info.fattrib&AM_DIR)?'D':'F', fullname); Log(LogLevel::Debug, "[%c] %s\n", (info.fattrib&AM_DIR)?'D':'F', fullname);
if (info.fattrib & AM_DIR) if (info.fattrib & AM_DIR)
{ {
@ -838,7 +840,7 @@ void ListTitles(u32 category, std::vector<u32>& titlelist)
res = f_opendir(&titledir, path); res = f_opendir(&titledir, path);
if (res != FR_OK) if (res != FR_OK)
{ {
printf("NAND: !! no title dir (%s)\n", path); Log(LogLevel::Warn, "NAND: !! no title dir (%s)\n", path);
return; return;
} }
@ -931,7 +933,7 @@ bool CreateTicket(const char* path, u32 titleid0, u32 titleid1, u8 version)
res = f_open(&file, path, FA_CREATE_ALWAYS | FA_WRITE); res = f_open(&file, path, FA_CREATE_ALWAYS | FA_WRITE);
if (res != FR_OK) if (res != FR_OK)
{ {
printf("CreateTicket: failed to create file (%d)\n", res); Log(LogLevel::Error, "CreateTicket: failed to create file (%d)\n", res);
return false; return false;
} }
@ -1012,7 +1014,7 @@ bool CreateSaveFile(const char* path, u32 len)
res = f_open(&file, path, FA_CREATE_ALWAYS | FA_WRITE); res = f_open(&file, path, FA_CREATE_ALWAYS | FA_WRITE);
if (res != FR_OK) if (res != FR_OK)
{ {
printf("CreateSaveFile: failed to create file (%d)\n", res); Log(LogLevel::Error, "CreateSaveFile: failed to create file (%d)\n", res);
return false; return false;
} }
@ -1058,11 +1060,11 @@ bool ImportTitle(const char* appfile, u8* tmd, bool readonly)
} }
u32 version = (tmd[0x1E4] << 24) | (tmd[0x1E5] << 16) | (tmd[0x1E6] << 8) | tmd[0x1E7]; u32 version = (tmd[0x1E4] << 24) | (tmd[0x1E5] << 16) | (tmd[0x1E6] << 8) | tmd[0x1E7];
printf(".app version: %08x\n", version); Log(LogLevel::Info, ".app version: %08x\n", version);
u32 titleid0 = (tmd[0x18C] << 24) | (tmd[0x18D] << 16) | (tmd[0x18E] << 8) | tmd[0x18F]; u32 titleid0 = (tmd[0x18C] << 24) | (tmd[0x18D] << 16) | (tmd[0x18E] << 8) | tmd[0x18F];
u32 titleid1 = (tmd[0x190] << 24) | (tmd[0x191] << 16) | (tmd[0x192] << 8) | tmd[0x193]; u32 titleid1 = (tmd[0x190] << 24) | (tmd[0x191] << 16) | (tmd[0x192] << 8) | tmd[0x193];
printf("Title ID: %08x/%08x\n", titleid0, titleid1); Log(LogLevel::Info, "Title ID: %08x/%08x\n", titleid0, titleid1);
FRESULT res; FRESULT res;
FF_DIR ticketdir; FF_DIR ticketdir;
@ -1110,7 +1112,7 @@ bool ImportTitle(const char* appfile, u8* tmd, bool readonly)
res = f_open(&file, fname, FA_CREATE_ALWAYS | FA_WRITE); res = f_open(&file, fname, FA_CREATE_ALWAYS | FA_WRITE);
if (res != FR_OK) if (res != FR_OK)
{ {
printf("ImportTitle: failed to create banner.sav (%d)\n", res); Log(LogLevel::Error, "ImportTitle: failed to create banner.sav (%d)\n", res);
return false; return false;
} }
@ -1127,7 +1129,7 @@ bool ImportTitle(const char* appfile, u8* tmd, bool readonly)
res = f_open(&file, fname, FA_CREATE_ALWAYS | FA_WRITE); res = f_open(&file, fname, FA_CREATE_ALWAYS | FA_WRITE);
if (res != FR_OK) if (res != FR_OK)
{ {
printf("ImportTitle: failed to create TMD (%d)\n", res); Log(LogLevel::Error, "ImportTitle: failed to create TMD (%d)\n", res);
return false; return false;
} }
@ -1142,7 +1144,7 @@ bool ImportTitle(const char* appfile, u8* tmd, bool readonly)
sprintf(fname, "0:/title/%08x/%08x/content/%08x.app", titleid0, titleid1, version); sprintf(fname, "0:/title/%08x/%08x/content/%08x.app", titleid0, titleid1, version);
if (!ImportFile(fname, appfile)) if (!ImportFile(fname, appfile))
{ {
printf("ImportTitle: failed to create executable (%d)\n", res); Log(LogLevel::Error, "ImportTitle: failed to create executable (%d)\n", res);
return false; return false;
} }

View File

@ -23,7 +23,8 @@
#include "GPU.h" #include "GPU.h"
#include "DSi_AES.h" #include "DSi_AES.h"
using Platform::Log;
using Platform::LogLevel;
DSi_NDMA::DSi_NDMA(u32 cpu, u32 num) DSi_NDMA::DSi_NDMA(u32 cpu, u32 num)
{ {
@ -106,7 +107,7 @@ void DSi_NDMA::WriteCnt(u32 val)
case 0: DstAddrInc = 1; break; case 0: DstAddrInc = 1; break;
case 1: DstAddrInc = -1; break; case 1: DstAddrInc = -1; break;
case 2: DstAddrInc = 0; break; case 2: DstAddrInc = 0; break;
case 3: DstAddrInc = 1; printf("BAD NDMA DST INC MODE 3\n"); break; case 3: DstAddrInc = 1; Log(LogLevel::Warn, "BAD NDMA DST INC MODE 3\n"); break;
} }
switch ((Cnt >> 13) & 0x3) switch ((Cnt >> 13) & 0x3)
@ -134,7 +135,7 @@ void DSi_NDMA::WriteCnt(u32 val)
if (StartMode <= 0x03 || StartMode == 0x05 || (StartMode >= 0x0C && StartMode <= 0x0F) || if (StartMode <= 0x03 || StartMode == 0x05 || (StartMode >= 0x0C && StartMode <= 0x0F) ||
(StartMode >= 0x20 && StartMode <= 0x23) || StartMode == 0x25 || StartMode == 0x27 || (StartMode >= 0x2C && StartMode <= 0x2F)) (StartMode >= 0x20 && StartMode <= 0x23) || StartMode == 0x25 || StartMode == 0x27 || (StartMode >= 0x2C && StartMode <= 0x2F))
printf("UNIMPLEMENTED ARM%d NDMA%d START MODE %02X, %08X->%08X LEN=%d BLK=%d CNT=%08X\n", Log(LogLevel::Warn, "UNIMPLEMENTED ARM%d NDMA%d START MODE %02X, %08X->%08X LEN=%d BLK=%d CNT=%08X\n",
CPU?7:9, Num, StartMode, SrcAddr, DstAddr, TotalLength, BlockLength, Cnt); CPU?7:9, Num, StartMode, SrcAddr, DstAddr, TotalLength, BlockLength, Cnt);
} }
} }

View File

@ -24,6 +24,9 @@
#include "WifiAP.h" #include "WifiAP.h"
#include "Platform.h" #include "Platform.h"
using Platform::Log;
using Platform::LogLevel;
const u8 CIS0[256] = const u8 CIS0[256] =
{ {
@ -161,7 +164,7 @@ void DSi_NWifi::Reset()
Mailbox[i].Clear(); Mailbox[i].Clear();
u8* mac = SPI_Firmware::GetWifiMAC(); u8* mac = SPI_Firmware::GetWifiMAC();
printf("NWifi MAC: %02X:%02X:%02X:%02X:%02X:%02X\n", Log(LogLevel::Info, "NWifi MAC: %02X:%02X:%02X:%02X:%02X:%02X\n",
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
u8 type = SPI_Firmware::GetNWifiVersion(); u8 type = SPI_Firmware::GetNWifiVersion();
@ -183,11 +186,11 @@ void DSi_NWifi::Reset()
ROMID = 0x2300006F; ROMID = 0x2300006F;
ChipID = 0x0D000001; ChipID = 0x0D000001;
HostIntAddr = 0x00520000; HostIntAddr = 0x00520000;
printf("NWifi: hardware is 3DS type, unchecked\n"); Log(LogLevel::Info, "NWifi: hardware is 3DS type, unchecked\n");
break; break;
default: default:
printf("NWifi: unknown hardware type, assuming AR6002\n"); Log(LogLevel::Warn, "NWifi: unknown hardware type, assuming AR6002\n");
ROMID = 0x20000188; ROMID = 0x20000188;
ChipID = 0x02000001; ChipID = 0x02000001;
HostIntAddr = 0x00500400; HostIntAddr = 0x00500400;
@ -353,7 +356,7 @@ u8 DSi_NWifi::F0_Read(u32 addr)
return CIS1[addr & 0xFF]; return CIS1[addr & 0xFF];
} }
printf("NWIFI: unknown func0 read %05X\n", addr); Log(LogLevel::Warn, "NWIFI: unknown func0 read %05X\n", addr);
return 0; return 0;
} }
@ -367,7 +370,7 @@ void DSi_NWifi::F0_Write(u32 addr, u8 val)
return; return;
} }
printf("NWIFI: unknown func0 write %05X %02X\n", addr, val); Log(LogLevel::Warn, "NWIFI: unknown func0 write %05X %02X\n", addr, val);
} }
@ -480,7 +483,7 @@ void DSi_NWifi::F1_Write(u32 addr, u8 val)
{ {
if (addr < 0x100) if (addr < 0x100)
{ {
if (Mailbox[0].IsFull()) printf("!!! NWIFI: MBOX0 FULL\n"); if (Mailbox[0].IsFull()) Log(LogLevel::Debug, "!!! NWIFI: MBOX0 FULL\n");
Mailbox[0].Write(val); Mailbox[0].Write(val);
if (addr == 0xFF) HandleCommand(); if (addr == 0xFF) HandleCommand();
UpdateIRQ_F1(); UpdateIRQ_F1();
@ -488,21 +491,21 @@ void DSi_NWifi::F1_Write(u32 addr, u8 val)
} }
else if (addr < 0x200) else if (addr < 0x200)
{ {
if (Mailbox[1].IsFull()) printf("!!! NWIFI: MBOX1 FULL\n"); if (Mailbox[1].IsFull()) Log(LogLevel::Debug, "!!! NWIFI: MBOX1 FULL\n");
Mailbox[1].Write(val); Mailbox[1].Write(val);
UpdateIRQ_F1(); UpdateIRQ_F1();
return; return;
} }
else if (addr < 0x300) else if (addr < 0x300)
{ {
if (Mailbox[2].IsFull()) printf("!!! NWIFI: MBOX2 FULL\n"); if (Mailbox[2].IsFull()) Log(LogLevel::Debug, "!!! NWIFI: MBOX2 FULL\n");
Mailbox[2].Write(val); Mailbox[2].Write(val);
UpdateIRQ_F1(); UpdateIRQ_F1();
return; return;
} }
else if (addr < 0x400) else if (addr < 0x400)
{ {
if (Mailbox[3].IsFull()) printf("!!! NWIFI: MBOX3 FULL\n"); if (Mailbox[3].IsFull()) Log(LogLevel::Debug, "!!! NWIFI: MBOX3 FULL\n");
Mailbox[3].Write(val); Mailbox[3].Write(val);
UpdateIRQ_F1(); UpdateIRQ_F1();
return; return;
@ -543,7 +546,7 @@ void DSi_NWifi::F1_Write(u32 addr, u8 val)
} }
else if (addr < 0x1000) else if (addr < 0x1000)
{ {
if (Mailbox[0].IsFull()) printf("!!! NWIFI: MBOX0 FULL\n"); if (Mailbox[0].IsFull()) Log(LogLevel::Debug, "!!! NWIFI: MBOX0 FULL\n");
Mailbox[0].Write(val); Mailbox[0].Write(val);
if (addr == 0xFFF) HandleCommand(); if (addr == 0xFFF) HandleCommand();
UpdateIRQ_F1(); UpdateIRQ_F1();
@ -551,35 +554,35 @@ void DSi_NWifi::F1_Write(u32 addr, u8 val)
} }
else if (addr < 0x1800) else if (addr < 0x1800)
{ {
if (Mailbox[1].IsFull()) printf("!!! NWIFI: MBOX1 FULL\n"); if (Mailbox[1].IsFull()) Log(LogLevel::Debug, "!!! NWIFI: MBOX1 FULL\n");
Mailbox[1].Write(val); Mailbox[1].Write(val);
UpdateIRQ_F1(); UpdateIRQ_F1();
return; return;
} }
else if (addr < 0x2000) else if (addr < 0x2000)
{ {
if (Mailbox[2].IsFull()) printf("!!! NWIFI: MBOX2 FULL\n"); if (Mailbox[2].IsFull()) Log(LogLevel::Debug, "!!! NWIFI: MBOX2 FULL\n");
Mailbox[2].Write(val); Mailbox[2].Write(val);
UpdateIRQ_F1(); UpdateIRQ_F1();
return; return;
} }
else if (addr < 0x2800) else if (addr < 0x2800)
{ {
if (Mailbox[3].IsFull()) printf("!!! NWIFI: MBOX3 FULL\n"); if (Mailbox[3].IsFull()) Log(LogLevel::Debug, "!!! NWIFI: MBOX3 FULL\n");
Mailbox[3].Write(val); Mailbox[3].Write(val);
UpdateIRQ_F1(); UpdateIRQ_F1();
return; return;
} }
else else
{ {
if (Mailbox[0].IsFull()) printf("!!! NWIFI: MBOX0 FULL\n"); if (Mailbox[0].IsFull()) Log(LogLevel::Debug, "!!! NWIFI: MBOX0 FULL\n");
Mailbox[0].Write(val); Mailbox[0].Write(val);
if (addr == 0x3FFF) HandleCommand(); // CHECKME if (addr == 0x3FFF) HandleCommand(); // CHECKME
UpdateIRQ_F1(); UpdateIRQ_F1();
return; return;
} }
printf("NWIFI: unknown func1 write %05X %02X\n", addr, val); Log(LogLevel::Warn, "NWIFI: unknown func1 write %05X %02X\n", addr, val);
} }
@ -591,7 +594,7 @@ u8 DSi_NWifi::SDIO_Read(u32 func, u32 addr)
case 1: return F1_Read(addr); case 1: return F1_Read(addr);
} }
printf("NWIFI: unknown SDIO read %d %05X\n", func, addr); Log(LogLevel::Warn, "NWIFI: unknown SDIO read %d %05X\n", func, addr);
return 0; return 0;
} }
@ -603,7 +606,7 @@ void DSi_NWifi::SDIO_Write(u32 func, u32 addr, u8 val)
case 1: return F1_Write(addr, val); case 1: return F1_Write(addr, val);
} }
printf("NWIFI: unknown SDIO write %d %05X %02X\n", func, addr, val); Log(LogLevel::Warn, "NWIFI: unknown SDIO write %d %05X %02X\n", func, addr, val);
} }
@ -676,12 +679,12 @@ void DSi_NWifi::SendCMD(u8 cmd, u32 param)
return; return;
} }
printf("NWIFI: unknown CMD %d %08X\n", cmd, param); Log(LogLevel::Warn, "NWIFI: unknown CMD %d %08X\n", cmd, param);
} }
void DSi_NWifi::SendACMD(u8 cmd, u32 param) void DSi_NWifi::SendACMD(u8 cmd, u32 param)
{ {
printf("NWIFI: unknown ACMD %d %08X\n", cmd, param); Log(LogLevel::Warn, "NWIFI: unknown ACMD %d %08X\n", cmd, param);
} }
void DSi_NWifi::ContinueTransfer() void DSi_NWifi::ContinueTransfer()
@ -772,7 +775,7 @@ void DSi_NWifi::BMI_Command()
{ {
case 0x01: // BMI_DONE case 0x01: // BMI_DONE
{ {
printf("BMI_DONE\n"); Log(LogLevel::Debug, "BMI_DONE\n");
EEPROMReady = 1; // GROSS FUCKING HACK EEPROMReady = 1; // GROSS FUCKING HACK
u8 ready_msg[6] = {0x0A, 0x00, 0x08, 0x06, 0x16, 0x00}; u8 ready_msg[6] = {0x0A, 0x00, 0x08, 0x06, 0x16, 0x00};
SendWMIEvent(0, 0x0001, ready_msg, 6); SendWMIEvent(0, 0x0001, ready_msg, 6);
@ -784,7 +787,7 @@ void DSi_NWifi::BMI_Command()
{ {
u32 addr = MB_Read32(0); u32 addr = MB_Read32(0);
u32 len = MB_Read32(0); u32 len = MB_Read32(0);
printf("BMI mem write %08X %08X\n", addr, len); Log(LogLevel::Debug, "BMI mem write %08X %08X\n", addr, len);
for (u32 i = 0; i < len; i++) for (u32 i = 0; i < len; i++)
{ {
@ -800,7 +803,7 @@ void DSi_NWifi::BMI_Command()
u32 entry = MB_Read32(0); u32 entry = MB_Read32(0);
u32 arg = MB_Read32(0); u32 arg = MB_Read32(0);
printf("BMI_EXECUTE %08X %08X\n", entry, arg); Log(LogLevel::Debug, "BMI_EXECUTE %08X %08X\n", entry, arg);
} }
return; return;
@ -830,14 +833,14 @@ void DSi_NWifi::BMI_Command()
case 0x0D: // BMI_LZ_STREAM_START case 0x0D: // BMI_LZ_STREAM_START
{ {
u32 addr = MB_Read32(0); u32 addr = MB_Read32(0);
printf("BMI_LZ_STREAM_START %08X\n", addr); Log(LogLevel::Debug, "BMI_LZ_STREAM_START %08X\n", addr);
} }
return; return;
case 0x0E: // BMI_LZ_DATA case 0x0E: // BMI_LZ_DATA
{ {
u32 len = MB_Read32(0); u32 len = MB_Read32(0);
printf("BMI LZ write %08X\n", len); Log(LogLevel::Debug, "BMI LZ write %08X\n", len);
//FILE* f = fopen("debug/wififirm.bin", "ab"); //FILE* f = fopen("debug/wififirm.bin", "ab");
for (u32 i = 0; i < len; i++) for (u32 i = 0; i < len; i++)
@ -852,7 +855,7 @@ void DSi_NWifi::BMI_Command()
return; return;
default: default:
printf("unknown BMI command %08X\n", cmd); Log(LogLevel::Warn, "unknown BMI command %08X\n", cmd);
return; return;
} }
} }
@ -871,7 +874,7 @@ void DSi_NWifi::HTC_Command()
{ {
u16 svc_id = MB_Read16(0); u16 svc_id = MB_Read16(0);
u16 conn_flags = MB_Read16(0); u16 conn_flags = MB_Read16(0);
printf("service connect %04X %04X %04X\n", svc_id, conn_flags, MB_Read16(0)); Log(LogLevel::Info, "service connect %04X %04X %04X\n", svc_id, conn_flags, MB_Read16(0));
u8 svc_resp[8]; u8 svc_resp[8];
// responses from hardware: // responses from hardware:
@ -908,7 +911,7 @@ void DSi_NWifi::HTC_Command()
break; break;
default: default:
printf("unknown HTC command %04X\n", cmd); Log(LogLevel::Warn, "unknown HTC command %04X\n", cmd);
for (int i = 0; i < len; i++) for (int i = 0; i < len; i++)
{ {
printf("%02X ", Mailbox[0].Read()); printf("%02X ", Mailbox[0].Read());
@ -947,9 +950,9 @@ void DSi_NWifi::WMI_Command()
case 0x0003: // disconnect case 0x0003: // disconnect
{ {
if (ConnectionStatus != 1) if (ConnectionStatus != 1)
printf("WMI: ?? trying to disconnect while not connected\n"); Log(LogLevel::Warn, "WMI: ?? trying to disconnect while not connected\n");
printf("WMI: disconnect\n"); Log(LogLevel::Info, "WMI: disconnect\n");
ConnectionStatus = 0; ConnectionStatus = 0;
u8 reply[11]; u8 reply[11];
@ -985,12 +988,12 @@ void DSi_NWifi::WMI_Command()
u8 scantype = Mailbox[0].Read(); u8 scantype = Mailbox[0].Read();
u8 nchannels = Mailbox[0].Read(); u8 nchannels = Mailbox[0].Read();
printf("WMI: start scan, forceFG=%d, legacy=%d, scanTime=%d, interval=%d, scanType=%d, chan=%d\n", Log(LogLevel::Debug, "WMI: start scan, forceFG=%d, legacy=%d, scanTime=%d, interval=%d, scanType=%d, chan=%d\n",
forcefg, legacy, scantime, forceinterval, scantype, nchannels); forcefg, legacy, scantime, forceinterval, scantype, nchannels);
if (ScanTimer > 0) if (ScanTimer > 0)
{ {
printf("!! CHECKME: START SCAN BUT WAS ALREADY SCANNING (%d)\n", ScanTimer); Log(LogLevel::Debug, "!! CHECKME: START SCAN BUT WAS ALREADY SCANNING (%d)\n", ScanTimer);
} }
// checkme // checkme
@ -1013,7 +1016,7 @@ void DSi_NWifi::WMI_Command()
Mailbox[0].Read(); Mailbox[0].Read();
u32 iemask = MB_Read32(0); u32 iemask = MB_Read32(0);
printf("WMI: set BSS filter, filter=%02X, iemask=%08X\n", bssfilter, iemask); Log(LogLevel::Debug, "WMI: set BSS filter, filter=%02X, iemask=%08X\n", bssfilter, iemask);
} }
break; break;
@ -1028,7 +1031,7 @@ void DSi_NWifi::WMI_Command()
ssid[i] = Mailbox[0].Read(); ssid[i] = Mailbox[0].Read();
// TODO: store it somewhere // TODO: store it somewhere
printf("WMI: set probed SSID: id=%d, flags=%02X, len=%d, SSID=%s\n", id, flags, len, ssid); Log(LogLevel::Debug, "WMI: set probed SSID: id=%d, flags=%02X, len=%d, SSID=%s\n", id, flags, len, ssid);
} }
break; break;
@ -1066,7 +1069,7 @@ void DSi_NWifi::WMI_Command()
channels[i] = MB_Read16(0); channels[i] = MB_Read16(0);
// TODO: store it somewhere // TODO: store it somewhere
printf("WMI: set channel params: scan=%d, phymode=%d, len=%d, channels=", scan, phymode, len); Log(LogLevel::Debug, "WMI: set channel params: scan=%d, phymode=%d, len=%d, channels=", scan, phymode, len);
for (int i = 0; i < len && i < 32; i++) for (int i = 0; i < len && i < 32; i++)
printf("%d,", channels[i]); printf("%d,", channels[i]);
printf("\n"); printf("\n");
@ -1110,7 +1113,7 @@ void DSi_NWifi::WMI_Command()
break; break;
default: default:
printf("WMI: unknown ext cmd 002E:%04X\n", extcmd); Log(LogLevel::Warn, "WMI: unknown ext cmd 002E:%04X\n", extcmd);
break; break;
} }
} }
@ -1161,7 +1164,7 @@ void DSi_NWifi::WMI_Command()
break; break;
default: default:
printf("unknown WMI command %04X (header: %04X:%04X:%04X)\n", cmd, h0, len, h2); Log(LogLevel::Warn, "unknown WMI command %04X (header: %04X:%04X:%04X)\n", cmd, h0, len, h2);
for (int i = 0; i < len-2; i++) for (int i = 0; i < len-2; i++)
{ {
printf("%02X ", Mailbox[0].Read()); printf("%02X ", Mailbox[0].Read());
@ -1210,12 +1213,12 @@ void DSi_NWifi::WMI_ConnectToNetwork()
(gCryptoType != 0x01) || (gCryptoType != 0x01) ||
(memcmp(bssid, WifiAP::APMac, 6))) (memcmp(bssid, WifiAP::APMac, 6)))
{ {
printf("WMI_Connect: bad parameters\n"); Log(LogLevel::Error, "WMI_Connect: bad parameters\n");
// TODO: send disconnect?? // TODO: send disconnect??
return; return;
} }
printf("WMI: connecting to network %s\n", ssid); Log(LogLevel::Info, "WMI: connecting to network %s\n", ssid);
u8 reply[20]; u8 reply[20];
@ -1240,7 +1243,7 @@ void DSi_NWifi::WMI_SendPacket(u16 len)
{ {
if (ConnectionStatus != 1) if (ConnectionStatus != 1)
{ {
printf("WMI: !! trying to send shit while not connected\n"); Log(LogLevel::Warn, "WMI: !! trying to send shit while not connected\n");
// TODO: report error?? // TODO: report error??
return; return;
} }
@ -1255,7 +1258,7 @@ void DSi_NWifi::WMI_SendPacket(u16 len)
if (type == 2) // data sync if (type == 2) // data sync
{ {
printf("WMI: data sync\n"); Log(LogLevel::Debug, "WMI: data sync\n");
/*Mailbox[8].Write(2); // eid /*Mailbox[8].Write(2); // eid
Mailbox[8].Write(0x00); // flags Mailbox[8].Write(0x00); // flags
@ -1270,7 +1273,7 @@ void DSi_NWifi::WMI_SendPacket(u16 len)
if (type) if (type)
{ {
printf("WMI: special frame %04X len=%d\n", hdr, len); Log(LogLevel::Debug, "WMI: special frame %04X len=%d\n", hdr, len);
for (int i = 0; i < len-2; i++) for (int i = 0; i < len-2; i++)
{ {
printf("%02X ", Mailbox[0].Read()); printf("%02X ", Mailbox[0].Read());
@ -1280,7 +1283,7 @@ void DSi_NWifi::WMI_SendPacket(u16 len)
return; return;
} }
printf("WMI: send packet, hdr=%04X, len=%d\n", hdr, len); Log(LogLevel::Debug, "WMI: send packet, hdr=%04X, len=%d\n", hdr, len);
u8 dstmac[6]; u8 dstmac[6];
u8 srcmac[6]; u8 srcmac[6];
@ -1295,7 +1298,7 @@ void DSi_NWifi::WMI_SendPacket(u16 len)
if (plen > len-16) if (plen > len-16)
{ {
printf("WMI: bad packet length %d > %d\n", plen, len-16); Log(LogLevel::Error, "WMI: bad packet length %d > %d\n", plen, len-16);
return; return;
} }
@ -1304,7 +1307,7 @@ void DSi_NWifi::WMI_SendPacket(u16 len)
if (h0 != 0x0003AAAA || h1 != 0x0000) if (h0 != 0x0003AAAA || h1 != 0x0000)
{ {
printf("WMI: bad LLC/SLIP header\n"); Log(LogLevel::Error, "WMI: bad LLC/SLIP header\n");
return; return;
} }
@ -1334,7 +1337,7 @@ void DSi_NWifi::SendWMIEvent(u8 ep, u16 id, u8* data, u32 len)
{ {
if (!Mailbox[8].CanFit(6+len+2+8)) if (!Mailbox[8].CanFit(6+len+2+8))
{ {
printf("NWifi: !! not enough space in RX buffer for WMI event %04X\n", id); Log(LogLevel::Error, "NWifi: !! not enough space in RX buffer for WMI event %04X\n", id);
return; return;
} }
@ -1367,7 +1370,7 @@ void DSi_NWifi::SendWMIAck(u8 ep)
{ {
if (!Mailbox[8].CanFit(6+12)) if (!Mailbox[8].CanFit(6+12))
{ {
printf("NWifi: !! not enough space in RX buffer for WMI ack (ep #%d)\n", ep); Log(LogLevel::Error, "NWifi: !! not enough space in RX buffer for WMI ack (ep #%d)\n", ep);
return; return;
} }
@ -1400,7 +1403,7 @@ void DSi_NWifi::SendWMIBSSInfo(u8 type, u8* data, u32 len)
{ {
if (!Mailbox[8].CanFit(6+len+2+16)) if (!Mailbox[8].CanFit(6+len+2+16))
{ {
printf("NWifi: !! not enough space in RX buffer for WMI BSSINFO event\n"); Log(LogLevel::Error, "NWifi: !! not enough space in RX buffer for WMI BSSINFO event\n");
return; return;
} }
@ -1452,7 +1455,7 @@ void DSi_NWifi::CheckRX()
// packet is good // packet is good
printf("WMI: receive packet %04X, len=%d\n", *(u16*)&LANBuffer[12], rxlen); Log(LogLevel::Debug, "WMI: receive packet %04X, len=%d\n", *(u16*)&LANBuffer[12], rxlen);
/*for (int i = 0; i < rxlen; i++) /*for (int i = 0; i < rxlen; i++)
{ {
@ -1501,7 +1504,7 @@ void DSi_NWifi::CheckRX()
u32 DSi_NWifi::WindowRead(u32 addr) u32 DSi_NWifi::WindowRead(u32 addr)
{ {
printf("NWifi: window read %08X\n", addr); Log(LogLevel::Debug, "NWifi: window read %08X\n", addr);
if ((addr & 0xFFFF00) == HostIntAddr) if ((addr & 0xFFFF00) == HostIntAddr)
{ {
@ -1540,7 +1543,7 @@ u32 DSi_NWifi::WindowRead(u32 addr)
void DSi_NWifi::WindowWrite(u32 addr, u32 val) void DSi_NWifi::WindowWrite(u32 addr, u32 val)
{ {
printf("NWifi: window write %08X %08X\n", addr, val); Log(LogLevel::Debug, "NWifi: window write %08X %08X\n", addr, val);
} }
@ -1567,7 +1570,7 @@ void DSi_NWifi::_MSTimer()
}; };
SendWMIBSSInfo(0x01, beacon, sizeof(beacon)); SendWMIBSSInfo(0x01, beacon, sizeof(beacon));
printf("send beacon\n"); Log(LogLevel::Debug, "send beacon\n");
} }
if (ScanTimer == 0) if (ScanTimer == 0)

View File

@ -23,6 +23,8 @@
#include "DSi_NWifi.h" #include "DSi_NWifi.h"
#include "Platform.h" #include "Platform.h"
using Platform::Log;
using Platform::LogLevel;
// observed IRQ behavior during transfers // observed IRQ behavior during transfers
// //
@ -294,7 +296,7 @@ void DSi_SDHost::FinishRX(u32 param)
u32 DSi_SDHost::DataRX(u8* data, u32 len) u32 DSi_SDHost::DataRX(u8* data, u32 len)
{ {
if (len != BlockLen16) { printf("!! BAD BLOCKLEN\n"); len = BlockLen16; } if (len != BlockLen16) { Log(LogLevel::Warn, "!! BAD BLOCKLEN\n"); len = BlockLen16; }
bool last = (BlockCountInternal == 0); bool last = (BlockCountInternal == 0);
@ -360,7 +362,7 @@ u32 DSi_SDHost::DataTX(u8* data, u32 len)
// drain FIFO32 into FIFO16 // drain FIFO32 into FIFO16
if (!DataFIFO[f].IsEmpty()) printf("VERY BAD!! TRYING TO DRAIN FIFO32 INTO FIFO16 BUT IT CONTAINS SHIT ALREADY\n"); if (!DataFIFO[f].IsEmpty()) Log(LogLevel::Warn, "VERY BAD!! TRYING TO DRAIN FIFO32 INTO FIFO16 BUT IT CONTAINS SHIT ALREADY\n");
for (;;) for (;;)
{ {
u32 f = CurFIFO; u32 f = CurFIFO;
@ -523,7 +525,7 @@ u16 DSi_SDHost::Read(u32 addr)
case 0x10A: return 0; case 0x10A: return 0;
} }
printf("unknown %s read %08X @ %08X\n", SD_DESC, addr, NDS::GetPC(1)); Log(LogLevel::Warn, "unknown %s read %08X @ %08X\n", SD_DESC, addr, NDS::GetPC(1));
return 0; return 0;
} }
@ -591,11 +593,11 @@ void DSi_SDHost::Write(u32 addr, u16 val)
case 0: dev->SendCMD(cmd, Param); break; case 0: dev->SendCMD(cmd, Param); break;
case 1: /*dev->SendCMD(55, 0);*/ dev->SendCMD(cmd, Param); break; case 1: /*dev->SendCMD(55, 0);*/ dev->SendCMD(cmd, Param); break;
default: default:
printf("%s: unknown command type %d, %02X %08X\n", SD_DESC, (Command>>6)&0x3, cmd, Param); Log(LogLevel::Warn, "%s: unknown command type %d, %02X %08X\n", SD_DESC, (Command>>6)&0x3, cmd, Param);
break; break;
} }
} }
else printf("%s: SENDING CMD %04X TO NULL DEVICE\n", SD_DESC, val); else Log(LogLevel::Debug, "%s: SENDING CMD %04X TO NULL DEVICE\n", SD_DESC, val);
} }
return; return;
@ -659,7 +661,7 @@ void DSi_SDHost::Write(u32 addr, u16 val)
case 0x0E0: case 0x0E0:
if ((SoftReset & 0x0001) && !(val & 0x0001)) if ((SoftReset & 0x0001) && !(val & 0x0001))
{ {
printf("%s: RESET\n", SD_DESC); Log(LogLevel::Debug, "%s: RESET\n", SD_DESC);
StopAction = 0; StopAction = 0;
memset(ResponseBuffer, 0, sizeof(ResponseBuffer)); memset(ResponseBuffer, 0, sizeof(ResponseBuffer));
IRQStatus = 0; IRQStatus = 0;
@ -689,7 +691,7 @@ void DSi_SDHost::Write(u32 addr, u16 val)
case 0x10A: return; case 0x10A: return;
} }
printf("unknown %s write %08X %04X\n", SD_DESC, addr, val); Log(LogLevel::Warn, "unknown %s write %08X %04X\n", SD_DESC, addr, val);
} }
void DSi_SDHost::WriteFIFO16(u16 val) void DSi_SDHost::WriteFIFO16(u16 val)
@ -699,7 +701,7 @@ void DSi_SDHost::WriteFIFO16(u16 val)
if (DataFIFO[f].IsFull()) if (DataFIFO[f].IsFull())
{ {
// TODO // TODO
printf("!!!! %s FIFO (16) FULL\n", SD_DESC); Log(LogLevel::Error, "!!!! %s FIFO (16) FULL\n", SD_DESC);
return; return;
} }
@ -715,7 +717,7 @@ void DSi_SDHost::WriteFIFO32(u32 val)
if (DataFIFO32.IsFull()) if (DataFIFO32.IsFull())
{ {
// TODO // TODO
printf("!!!! %s FIFO (32) FULL\n", SD_DESC); Log(LogLevel::Error, "!!!! %s FIFO (32) FULL\n", SD_DESC);
return; return;
} }
@ -732,7 +734,7 @@ void DSi_SDHost::UpdateFIFO32()
if (DataMode != 1) return; if (DataMode != 1) return;
if (!DataFIFO32.IsEmpty()) printf("VERY BAD!! TRYING TO DRAIN FIFO16 INTO FIFO32 BUT IT CONTAINS SHIT ALREADY\n"); if (!DataFIFO32.IsEmpty()) Log(LogLevel::Warn, "VERY BAD!! TRYING TO DRAIN FIFO16 INTO FIFO32 BUT IT CONTAINS SHIT ALREADY\n");
for (;;) for (;;)
{ {
u32 f = CurFIFO; u32 f = CurFIFO;
@ -875,7 +877,7 @@ void DSi_MMCStorage::SendCMD(u8 cmd, u32 param)
} }
else else
{ {
printf("CMD1 on SD card!!\n"); Log(LogLevel::Debug, "CMD1 on SD card!!\n");
} }
return; return;
@ -897,7 +899,7 @@ void DSi_MMCStorage::SendCMD(u8 cmd, u32 param)
else else
{ {
// TODO // TODO
printf("CMD3 on SD card: TODO\n"); Log(LogLevel::Debug, "CMD3 on SD card: TODO\n");
Host->SendResponse((CSR & 0x1FFF) | ((CSR >> 6) & 0x2000) | ((CSR >> 8) & 0xC000) | (1 << 16), true); Host->SendResponse((CSR & 0x1FFF) | ((CSR >> 6) & 0x2000) | ((CSR >> 8) & 0xC000) | (1 << 16), true);
} }
return; return;
@ -938,7 +940,7 @@ void DSi_MMCStorage::SendCMD(u8 cmd, u32 param)
if (BlockSize > 0x200) if (BlockSize > 0x200)
{ {
// TODO! raise error // TODO! raise error
printf("!! SD/MMC: BAD BLOCK LEN %d\n", BlockSize); Log(LogLevel::Warn, "!! SD/MMC: BAD BLOCK LEN %d\n", BlockSize);
BlockSize = 0x200; BlockSize = 0x200;
} }
SetState(0x04); // CHECKME SetState(0x04); // CHECKME
@ -979,7 +981,7 @@ void DSi_MMCStorage::SendCMD(u8 cmd, u32 param)
return; return;
} }
printf("MMC: unknown CMD %d %08X\n", cmd, param); Log(LogLevel::Warn, "MMC: unknown CMD %d %08X\n", cmd, param);
} }
void DSi_MMCStorage::SendACMD(u8 cmd, u32 param) void DSi_MMCStorage::SendACMD(u8 cmd, u32 param)
@ -1018,7 +1020,7 @@ void DSi_MMCStorage::SendACMD(u8 cmd, u32 param)
return; return;
} }
printf("MMC: unknown ACMD %d %08X\n", cmd, param); Log(LogLevel::Warn, "MMC: unknown ACMD %d %08X\n", cmd, param);
} }
void DSi_MMCStorage::ContinueTransfer() void DSi_MMCStorage::ContinueTransfer()

View File

@ -21,7 +21,10 @@
#include "DSi.h" #include "DSi.h"
#include "SPI.h" #include "SPI.h"
#include "DSi_SPI_TSC.h" #include "DSi_SPI_TSC.h"
#include "Platform.h"
using Platform::Log;
using Platform::LogLevel;
namespace DSi_SPI_TSC namespace DSi_SPI_TSC
{ {
@ -214,7 +217,7 @@ void Write(u8 val, u32 hold)
TSCMode = val; TSCMode = val;
if (TSCMode == 0x00) if (TSCMode == 0x00)
{ {
printf("DSi_SPI_TSC: DS-compatibility mode\n"); Log(LogLevel::Debug, "DSi_SPI_TSC: DS-compatibility mode\n");
DataPos = 0; DataPos = 0;
NDS::KeyInput |= (1 << (16+6)); NDS::KeyInput |= (1 << (16+6));
return; return;
@ -224,7 +227,7 @@ void Write(u8 val, u32 hold)
} }
else else
{ {
printf("DSi_SPI_TSC: unknown IO, bank=%02X, index=%02X (%02X %s)\n", Bank, Index, Index>>1, (Index&1)?"read":"write"); Log(LogLevel::Debug, "DSi_SPI_TSC: unknown IO, bank=%02X, index=%02X (%02X %s)\n", Bank, Index, Index>>1, (Index&1)?"read":"write");
} }
Index += (1<<1); // increment index Index += (1<<1); // increment index

View File

@ -23,6 +23,8 @@
#include "CRC32.h" #include "CRC32.h"
#include "Platform.h" #include "Platform.h"
using Platform::Log;
using Platform::LogLevel;
namespace GBACart namespace GBACart
{ {
@ -210,7 +212,7 @@ void CartGame::SetupSave(u32 type)
SRAMType = S_NULL; SRAMType = S_NULL;
break; break;
default: default:
printf("!! BAD GBA SAVE LENGTH %d\n", SRAMLength); Log(LogLevel::Warn, "!! BAD GBA SAVE LENGTH %d\n", SRAMLength);
} }
if (SRAMType == S_FLASH512K) if (SRAMType == S_FLASH512K)
@ -283,7 +285,7 @@ void CartGame::ROMWrite(u32 addr, u16 val)
break; break;
default: default:
printf("Unknown GBA GPIO write 0x%02X @ 0x%04X\n", val, addr); Log(LogLevel::Warn, "Unknown GBA GPIO write 0x%02X @ 0x%04X\n", val, addr);
break; break;
} }
} }
@ -369,7 +371,7 @@ u8 CartGame::SRAMRead_FLASH(u32 addr)
case 0xB0: // bank switching (128K only) case 0xB0: // bank switching (128K only)
break; // ignore here, handled in Write_Flash() break; // ignore here, handled in Write_Flash()
default: default:
printf("GBACart_SRAM::Read_Flash: unknown command 0x%02X @ 0x%04X\n", SRAMFlashState.cmd, addr); Log(LogLevel::Warn, "GBACart_SRAM::Read_Flash: unknown command 0x%02X @ 0x%04X\n", SRAMFlashState.cmd, addr);
break; break;
} }
@ -502,7 +504,7 @@ void CartGame::SRAMWrite_FLASH(u32 addr, u8 val)
return; return;
} }
printf("GBACart_SRAM::Write_Flash: unknown write 0x%02X @ 0x%04X (state: 0x%02X)\n", Log(LogLevel::Warn, "GBACart_SRAM::Write_Flash: unknown write 0x%02X @ 0x%04X (state: 0x%02X)\n",
val, addr, SRAMFlashState.state); val, addr, SRAMFlashState.state);
} }
@ -586,7 +588,7 @@ void CartGameSolarSensor::ProcessGPIO()
u8 prev = LightSample; u8 prev = LightSample;
LightCounter = 0; LightCounter = 0;
LightSample = (0xFF - (0x16 + kLuxLevels[LightLevel])); LightSample = (0xFF - (0x16 + kLuxLevels[LightLevel]));
printf("Solar sensor reset (sample: 0x%02X -> 0x%02X)\n", prev, LightSample); Log(LogLevel::Debug, "Solar sensor reset (sample: 0x%02X -> 0x%02X)\n", prev, LightSample);
} }
if (GPIO.data & 1 && LightEdge) LightCounter++; if (GPIO.data & 1 && LightEdge) LightCounter++;
@ -750,7 +752,7 @@ bool LoadROM(const u8* romdata, u32 romlen)
} }
catch (const std::bad_alloc& e) catch (const std::bad_alloc& e)
{ {
printf("GBACart: failed to allocate memory for ROM (%d bytes)\n", CartROMSize); Log(LogLevel::Error, "GBACart: failed to allocate memory for ROM (%d bytes)\n", CartROMSize);
return false; return false;
} }
@ -759,7 +761,7 @@ bool LoadROM(const u8* romdata, u32 romlen)
char gamecode[5] = { '\0' }; char gamecode[5] = { '\0' };
memcpy(&gamecode, CartROM + 0xAC, 4); memcpy(&gamecode, CartROM + 0xAC, 4);
printf("GBA game code: %s\n", gamecode); Log(LogLevel::Info, "GBA game code: %s\n", gamecode);
bool solarsensor = false; bool solarsensor = false;
for (size_t i = 0; i < sizeof(SOLAR_SENSOR_GAMECODES)/sizeof(SOLAR_SENSOR_GAMECODES[0]); i++) for (size_t i = 0; i < sizeof(SOLAR_SENSOR_GAMECODES)/sizeof(SOLAR_SENSOR_GAMECODES[0]); i++)
@ -770,7 +772,7 @@ bool LoadROM(const u8* romdata, u32 romlen)
if (solarsensor) if (solarsensor)
{ {
printf("GBA solar sensor support detected!\n"); Log(LogLevel::Info, "GBA solar sensor support detected!\n");
} }
CartInserted = true; CartInserted = true;
@ -817,7 +819,7 @@ void LoadAddon(int type)
break; break;
default: default:
printf("GBACart: !! invalid addon type %d\n", type); Log(LogLevel::Warn, "GBACart: !! invalid addon type %d\n", type);
return; return;
} }

View File

@ -16,7 +16,6 @@
with melonDS. If not, see http://www.gnu.org/licenses/. with melonDS. If not, see http://www.gnu.org/licenses/.
*/ */
#include <stdio.h>
#include <string.h> #include <string.h>
#include "NDS.h" #include "NDS.h"
#include "GPU.h" #include "GPU.h"
@ -27,6 +26,9 @@
#include "GPU2D_Soft.h" #include "GPU2D_Soft.h"
using Platform::Log;
using Platform::LogLevel;
namespace GPU namespace GPU
{ {
@ -987,7 +989,7 @@ void SetPowerCnt(u32 val)
// * bit9: disables engine B palette, OAM and rendering (screen turns white) // * bit9: disables engine B palette, OAM and rendering (screen turns white)
// * bit15: screen swap // * bit15: screen swap
if (!(val & (1<<0))) printf("!!! CLEARING POWCNT BIT0. DANGER\n"); if (!(val & (1<<0))) Log(LogLevel::Warn, "!!! CLEARING POWCNT BIT0. DANGER\n");
GPU2D_A.SetEnabled(val & (1<<1)); GPU2D_A.SetEnabled(val & (1<<1));
GPU2D_B.SetEnabled(val & (1<<9)); GPU2D_B.SetEnabled(val & (1<<9));

View File

@ -21,6 +21,8 @@
#include "NDS.h" #include "NDS.h"
#include "GPU.h" #include "GPU.h"
using Platform::Log;
using Platform::LogLevel;
// notes on color conversion // notes on color conversion
// //
@ -218,7 +220,7 @@ u8 Unit::Read8(u32 addr)
case 0x04D: return 0; case 0x04D: return 0;
} }
printf("unknown GPU read8 %08X\n", addr); Log(LogLevel::Warn, "unknown GPU read8 %08X\n", addr);
return 0; return 0;
} }
@ -247,7 +249,7 @@ u16 Unit::Read16(u32 addr)
case 0x06C: return MasterBrightness; case 0x06C: return MasterBrightness;
} }
printf("unknown GPU read16 %08X\n", addr); Log(LogLevel::Warn, "unknown GPU read16 %08X\n", addr);
return 0; return 0;
} }
@ -364,7 +366,7 @@ void Unit::Write8(u32 addr, u8 val)
return; return;
} }
printf("unknown GPU write8 %08X %02X\n", addr, val); Log(LogLevel::Warn, "unknown GPU write8 %08X %02X\n", addr, val);
} }
void Unit::Write16(u32 addr, u16 val) void Unit::Write16(u32 addr, u16 val)

View File

@ -22,7 +22,10 @@
#include "NDS.h" #include "NDS.h"
#include "GPU.h" #include "GPU.h"
#include "FIFO.h" #include "FIFO.h"
#include "Platform.h"
using Platform::Log;
using Platform::LogLevel;
// 3D engine notes // 3D engine notes
// //
@ -2724,7 +2727,7 @@ u8 Read8(u32 addr)
} }
} }
printf("unknown GPU3D read8 %08X\n", addr); Log(LogLevel::Warn, "unknown GPU3D read8 %08X\n", addr);
return 0; return 0;
} }
@ -2768,7 +2771,7 @@ u16 Read16(u32 addr)
case 0x04000634: return VecTestResult[2]; case 0x04000634: return VecTestResult[2];
} }
printf("unknown GPU3D read16 %08X\n", addr); Log(LogLevel::Warn, "unknown GPU3D read16 %08X\n", addr);
return 0; return 0;
} }
@ -2872,7 +2875,7 @@ void Write8(u32 addr, u8 val)
return; return;
} }
printf("unknown GPU3D write8 %08X %02X\n", addr, val); Log(LogLevel::Warn, "unknown GPU3D write8 %08X %02X\n", addr, val);
} }
void Write16(u32 addr, u16 val) void Write16(u32 addr, u16 val)
@ -2959,7 +2962,7 @@ void Write16(u32 addr, u16 val)
return; return;
} }
printf("unknown GPU3D write16 %08X %04X\n", addr, val); Log(LogLevel::Warn, "unknown GPU3D write16 %08X %04X\n", addr, val);
} }
void Write32(u32 addr, u32 val) void Write32(u32 addr, u32 val)
@ -3056,7 +3059,7 @@ void Write32(u32 addr, u32 val)
return; return;
} }
printf("unknown GPU3D write32 %08X %08X\n", addr, val); Log(LogLevel::Warn, "unknown GPU3D write32 %08X %08X\n", addr, val);
} }
Renderer3D::Renderer3D(bool Accelerated) Renderer3D::Renderer3D(bool Accelerated)

View File

@ -45,6 +45,8 @@
#include "DSi_Camera.h" #include "DSi_Camera.h"
#include "DSi_DSP.h" #include "DSi_DSP.h"
using Platform::Log;
using Platform::LogLevel;
namespace NDS namespace NDS
{ {
@ -524,7 +526,7 @@ void Reset()
f = Platform::OpenLocalFile(Platform::GetConfigString(Platform::BIOS9Path), "rb"); f = Platform::OpenLocalFile(Platform::GetConfigString(Platform::BIOS9Path), "rb");
if (!f) if (!f)
{ {
printf("ARM9 BIOS not found\n"); Log(LogLevel::Warn, "ARM9 BIOS not found\n");
for (i = 0; i < 16; i++) for (i = 0; i < 16; i++)
((u32*)ARM9BIOS)[i] = 0xE7FFDEFF; ((u32*)ARM9BIOS)[i] = 0xE7FFDEFF;
@ -534,14 +536,14 @@ void Reset()
fseek(f, 0, SEEK_SET); fseek(f, 0, SEEK_SET);
fread(ARM9BIOS, 0x1000, 1, f); fread(ARM9BIOS, 0x1000, 1, f);
printf("ARM9 BIOS loaded\n"); Log(LogLevel::Info, "ARM9 BIOS loaded\n");
fclose(f); fclose(f);
} }
f = Platform::OpenLocalFile(Platform::GetConfigString(Platform::BIOS7Path), "rb"); f = Platform::OpenLocalFile(Platform::GetConfigString(Platform::BIOS7Path), "rb");
if (!f) if (!f)
{ {
printf("ARM7 BIOS not found\n"); Log(LogLevel::Warn, "ARM7 BIOS not found\n");
for (i = 0; i < 16; i++) for (i = 0; i < 16; i++)
((u32*)ARM7BIOS)[i] = 0xE7FFDEFF; ((u32*)ARM7BIOS)[i] = 0xE7FFDEFF;
@ -551,7 +553,7 @@ void Reset()
fseek(f, 0, SEEK_SET); fseek(f, 0, SEEK_SET);
fread(ARM7BIOS, 0x4000, 1, f); fread(ARM7BIOS, 0x4000, 1, f);
printf("ARM7 BIOS loaded\n"); Log(LogLevel::Info, "ARM7 BIOS loaded\n");
fclose(f); fclose(f);
} }
} }
@ -690,7 +692,7 @@ void Start()
void Stop() void Stop()
{ {
printf("Stopping: shutdown\n"); Log(LogLevel::Info, "Stopping: shutdown\n");
Running = false; Running = false;
Platform::StopEmu(); Platform::StopEmu();
GPU::Stop(); GPU::Stop();
@ -755,7 +757,7 @@ bool DoSavestate_Scheduler(Savestate* file)
} }
if (funcid == 0xFFFFFFFF) if (funcid == 0xFFFFFFFF)
{ {
printf("savestate: VERY BAD!!!!! FUNCTION POINTER FOR EVENT %d NOT IN HACKY LIST. CANNOT SAVE. SMACK ARISOTURA.\n", i); Log(LogLevel::Error, "savestate: VERY BAD!!!!! FUNCTION POINTER FOR EVENT %d NOT IN HACKY LIST. CANNOT SAVE. SMACK ARISOTURA.\n", i);
return false; return false;
} }
} }
@ -780,7 +782,7 @@ bool DoSavestate_Scheduler(Savestate* file)
{ {
if (!eventfuncs[j]) if (!eventfuncs[j])
{ {
printf("savestate: VERY BAD!!!!!! EVENT FUNCTION POINTER ID %d IS OUT OF RANGE. HAX?????\n", j); Log(LogLevel::Error, "savestate: VERY BAD!!!!!! EVENT FUNCTION POINTER ID %d IS OUT OF RANGE. HAX?????\n", j);
return false; return false;
} }
if (j == funcid) break; if (j == funcid) break;
@ -1128,7 +1130,7 @@ u32 RunFrame()
} }
#ifdef DEBUG_CHECK_DESYNC #ifdef DEBUG_CHECK_DESYNC
printf("[%08X%08X] ARM9=%ld, ARM7=%ld, GPU=%ld\n", Log(LogLevel::Debug, "[%08X%08X] ARM9=%ld, ARM7=%ld, GPU=%ld\n",
(u32)(SysTimestamp>>32), (u32)SysTimestamp, (u32)(SysTimestamp>>32), (u32)SysTimestamp,
(ARM9Timestamp>>1)-SysTimestamp, (ARM9Timestamp>>1)-SysTimestamp,
ARM7Timestamp-SysTimestamp, ARM7Timestamp-SysTimestamp,
@ -1181,7 +1183,7 @@ void ScheduleEvent(u32 id, bool periodic, s32 delay, void (*func)(u32), u32 para
{ {
if (SchedListMask & (1<<id)) if (SchedListMask & (1<<id))
{ {
printf("!! EVENT %d ALREADY SCHEDULED\n", id); Log(LogLevel::Debug, "!! EVENT %d ALREADY SCHEDULED\n", id);
return; return;
} }
@ -1209,7 +1211,7 @@ void ScheduleEvent(u32 id, u64 timestamp, void (*func)(u32), u32 param)
{ {
if (SchedListMask & (1<<id)) if (SchedListMask & (1<<id))
{ {
printf("!! EVENT %d ALREADY SCHEDULED\n", id); Log(LogLevel::Debug, "!! EVENT %d ALREADY SCHEDULED\n", id);
return; return;
} }
@ -1315,7 +1317,7 @@ void MicInputFrame(s16* data, int samples)
void Halt() void Halt()
{ {
printf("Halt()\n"); Log(LogLevel::Info, "Halt()\n");
Running = false; Running = false;
} }
@ -1645,7 +1647,7 @@ void NocashPrint(u32 ncpu, u32 addr)
} }
output[ptr] = '\0'; output[ptr] = '\0';
printf("%s", output); Log(LogLevel::Debug, "%s", output);
} }
@ -1659,7 +1661,7 @@ void MonitorARM9Jump(u32 addr)
{ {
if (addr == *(u32*)&NDSCart::CartROM[0x24]) if (addr == *(u32*)&NDSCart::CartROM[0x24])
{ {
printf("Game is now booting\n"); Log(LogLevel::Info, "Game is now booting\n");
RunningGame = true; RunningGame = true;
} }
} }
@ -1987,11 +1989,11 @@ void StartSqrt()
void debug(u32 param) void debug(u32 param)
{ {
printf("ARM9 PC=%08X LR=%08X %08X\n", ARM9->R[15], ARM9->R[14], ARM9->R_IRQ[1]); Log(LogLevel::Debug, "ARM9 PC=%08X LR=%08X %08X\n", ARM9->R[15], ARM9->R[14], ARM9->R_IRQ[1]);
printf("ARM7 PC=%08X LR=%08X %08X\n", ARM7->R[15], ARM7->R[14], ARM7->R_IRQ[1]); Log(LogLevel::Debug, "ARM7 PC=%08X LR=%08X %08X\n", ARM7->R[15], ARM7->R[14], ARM7->R_IRQ[1]);
printf("ARM9 IME=%08X IE=%08X IF=%08X\n", IME[0], IE[0], IF[0]); Log(LogLevel::Debug, "ARM9 IME=%08X IE=%08X IF=%08X\n", IME[0], IE[0], IF[0]);
printf("ARM7 IME=%08X IE=%08X IF=%08X IE2=%04X IF2=%04X\n", IME[1], IE[1], IF[1], IE2, IF2); Log(LogLevel::Debug, "ARM7 IME=%08X IE=%08X IF=%08X IE2=%04X IF2=%04X\n", IME[1], IE[1], IF[1], IE2, IF2);
//for (int i = 0; i < 9; i++) //for (int i = 0; i < 9; i++)
// printf("VRAM %c: %02X\n", 'A'+i, GPU::VRAMCNT[i]); // printf("VRAM %c: %02X\n", 'A'+i, GPU::VRAMCNT[i]);
@ -2089,7 +2091,7 @@ u8 ARM9Read8(u32 addr)
return GBACart::SRAMRead(addr); return GBACart::SRAMRead(addr);
} }
printf("unknown arm9 read8 %08X\n", addr); Log(LogLevel::Warn, "unknown arm9 read8 %08X\n", addr);
return 0; return 0;
} }
@ -2149,7 +2151,7 @@ u16 ARM9Read16(u32 addr)
(GBACart::SRAMRead(addr+1) << 8); (GBACart::SRAMRead(addr+1) << 8);
} }
//if (addr) printf("unknown arm9 read16 %08X %08X\n", addr, ARM9->R[15]); //if (addr) Log(LogLevel::Warn, "unknown arm9 read16 %08X %08X\n", addr, ARM9->R[15]);
return 0; return 0;
} }
@ -2212,7 +2214,7 @@ u32 ARM9Read32(u32 addr)
(GBACart::SRAMRead(addr+3) << 24); (GBACart::SRAMRead(addr+3) << 24);
} }
//printf("unknown arm9 read32 %08X | %08X %08X\n", addr, ARM9->R[15], ARM9->R[12]); //Log(LogLevel::Warn, "unknown arm9 read32 %08X | %08X %08X\n", addr, ARM9->R[15], ARM9->R[12]);
return 0; return 0;
} }
@ -2256,7 +2258,7 @@ void ARM9Write8(u32 addr, u8 val)
return; return;
} }
printf("unknown arm9 write8 %08X %02X\n", addr, val); Log(LogLevel::Warn, "unknown arm9 write8 %08X %02X\n", addr, val);
} }
void ARM9Write16(u32 addr, u16 val) void ARM9Write16(u32 addr, u16 val)
@ -2322,7 +2324,7 @@ void ARM9Write16(u32 addr, u16 val)
return; return;
} }
//if (addr) printf("unknown arm9 write16 %08X %04X\n", addr, val); //if (addr) Log(LogLevel::Warn, "unknown arm9 write16 %08X %04X\n", addr, val);
} }
void ARM9Write32(u32 addr, u32 val) void ARM9Write32(u32 addr, u32 val)
@ -2391,7 +2393,7 @@ void ARM9Write32(u32 addr, u32 val)
return; return;
} }
//printf("unknown arm9 write32 %08X %08X | %08X\n", addr, val, ARM9->R[15]); //Log(LogLevel::Warn, "unknown arm9 write32 %08X %08X | %08X\n", addr, val, ARM9->R[15]);
} }
bool ARM9GetMemRegion(u32 addr, bool write, MemRegion* region) bool ARM9GetMemRegion(u32 addr, bool write, MemRegion* region)
@ -2488,7 +2490,7 @@ u8 ARM7Read8(u32 addr)
return GBACart::SRAMRead(addr); return GBACart::SRAMRead(addr);
} }
printf("unknown arm7 read8 %08X %08X %08X/%08X\n", addr, ARM7->R[15], ARM7->R[0], ARM7->R[1]); Log(LogLevel::Warn, "unknown arm7 read8 %08X %08X %08X/%08X\n", addr, ARM7->R[15], ARM7->R[0], ARM7->R[1]);
return 0; return 0;
} }
@ -2554,7 +2556,7 @@ u16 ARM7Read16(u32 addr)
(GBACart::SRAMRead(addr+1) << 8); (GBACart::SRAMRead(addr+1) << 8);
} }
printf("unknown arm7 read16 %08X %08X\n", addr, ARM7->R[15]); Log(LogLevel::Warn, "unknown arm7 read16 %08X %08X\n", addr, ARM7->R[15]);
return 0; return 0;
} }
@ -2623,7 +2625,7 @@ u32 ARM7Read32(u32 addr)
(GBACart::SRAMRead(addr+3) << 24); (GBACart::SRAMRead(addr+3) << 24);
} }
//printf("unknown arm7 read32 %08X | %08X\n", addr, ARM7->R[15]); //Log(LogLevel::Warn, "unknown arm7 read32 %08X | %08X\n", addr, ARM7->R[15]);
return 0; return 0;
} }
@ -2691,7 +2693,7 @@ void ARM7Write8(u32 addr, u8 val)
//if (ARM7->R[15] > 0x00002F30) // ARM7 BIOS bug //if (ARM7->R[15] > 0x00002F30) // ARM7 BIOS bug
if (addr >= 0x01000000) if (addr >= 0x01000000)
printf("unknown arm7 write8 %08X %02X @ %08X\n", addr, val, ARM7->R[15]); Log(LogLevel::Warn, "unknown arm7 write8 %08X %02X @ %08X\n", addr, val, ARM7->R[15]);
} }
void ARM7Write16(u32 addr, u16 val) void ARM7Write16(u32 addr, u16 val)
@ -2771,7 +2773,7 @@ void ARM7Write16(u32 addr, u16 val)
} }
if (addr >= 0x01000000) if (addr >= 0x01000000)
printf("unknown arm7 write16 %08X %04X @ %08X\n", addr, val, ARM7->R[15]); Log(LogLevel::Warn, "unknown arm7 write16 %08X %04X @ %08X\n", addr, val, ARM7->R[15]);
} }
void ARM7Write32(u32 addr, u32 val) void ARM7Write32(u32 addr, u32 val)
@ -2855,7 +2857,7 @@ void ARM7Write32(u32 addr, u32 val)
} }
if (addr >= 0x01000000) if (addr >= 0x01000000)
printf("unknown arm7 write32 %08X %08X @ %08X\n", addr, val, ARM7->R[15]); Log(LogLevel::Warn, "unknown arm7 write32 %08X %08X @ %08X\n", addr, val, ARM7->R[15]);
} }
bool ARM7GetMemRegion(u32 addr, bool write, MemRegion* region) bool ARM7GetMemRegion(u32 addr, bool write, MemRegion* region)
@ -3016,7 +3018,7 @@ u8 ARM9IORead8(u32 addr)
} }
if ((addr & 0xFFFFF000) != 0x04004000) if ((addr & 0xFFFFF000) != 0x04004000)
printf("unknown ARM9 IO read8 %08X %08X\n", addr, ARM9->R[15]); Log(LogLevel::Warn, "unknown ARM9 IO read8 %08X %08X\n", addr, ARM9->R[15]);
return 0; return 0;
} }
@ -3163,7 +3165,7 @@ u16 ARM9IORead16(u32 addr)
} }
if ((addr & 0xFFFFF000) != 0x04004000) if ((addr & 0xFFFFF000) != 0x04004000)
printf("unknown ARM9 IO read16 %08X %08X\n", addr, ARM9->R[15]); Log(LogLevel::Warn, "unknown ARM9 IO read16 %08X %08X\n", addr, ARM9->R[15]);
return 0; return 0;
} }
@ -3307,7 +3309,7 @@ u32 ARM9IORead32(u32 addr)
} }
if ((addr & 0xFFFFF000) != 0x04004000) if ((addr & 0xFFFFF000) != 0x04004000)
printf("unknown ARM9 IO read32 %08X %08X\n", addr, ARM9->R[15]); Log(LogLevel::Warn, "unknown ARM9 IO read32 %08X %08X\n", addr, ARM9->R[15]);
return 0; return 0;
} }
@ -3388,7 +3390,7 @@ void ARM9IOWrite8(u32 addr, u8 val)
return; return;
} }
printf("unknown ARM9 IO write8 %08X %02X %08X\n", addr, val, ARM9->R[15]); Log(LogLevel::Warn, "unknown ARM9 IO write8 %08X %02X %08X\n", addr, val, ARM9->R[15]);
} }
void ARM9IOWrite16(u32 addr, u16 val) void ARM9IOWrite16(u32 addr, u16 val)
@ -3572,7 +3574,7 @@ void ARM9IOWrite16(u32 addr, u16 val)
return; return;
} }
printf("unknown ARM9 IO write16 %08X %04X %08X\n", addr, val, ARM9->R[15]); Log(LogLevel::Warn, "unknown ARM9 IO write16 %08X %04X %08X\n", addr, val, ARM9->R[15]);
} }
void ARM9IOWrite32(u32 addr, u32 val) void ARM9IOWrite32(u32 addr, u32 val)
@ -3735,7 +3737,7 @@ void ARM9IOWrite32(u32 addr, u32 val)
ch = NDS::ARM9Read8(val + i); ch = NDS::ARM9Read8(val + i);
output[i] = ch; output[i] = ch;
} }
printf("%s", output); Log(LogLevel::Debug, "%s", output);
return; return;
} }
@ -3746,12 +3748,12 @@ void ARM9IOWrite32(u32 addr, u32 val)
bool appendLF = 0x04FFFA18 == addr; bool appendLF = 0x04FFFA18 == addr;
NocashPrint(0, val); NocashPrint(0, val);
if(appendLF) if(appendLF)
printf("\n"); Log(LogLevel::Debug, "\n");
return; return;
} }
// NO$GBA debug register "Char Out" // NO$GBA debug register "Char Out"
case 0x04FFFA1C: printf("%c", val & 0xFF); return; case 0x04FFFA1C: Log(LogLevel::Debug, "%c", val & 0xFF); return;
} }
if (addr >= 0x04000000 && addr < 0x04000060) if (addr >= 0x04000000 && addr < 0x04000060)
@ -3770,7 +3772,7 @@ void ARM9IOWrite32(u32 addr, u32 val)
return; return;
} }
printf("unknown ARM9 IO write32 %08X %08X %08X\n", addr, val, ARM9->R[15]); Log(LogLevel::Warn, "unknown ARM9 IO write32 %08X %08X %08X\n", addr, val, ARM9->R[15]);
} }
@ -3844,7 +3846,7 @@ u8 ARM7IORead8(u32 addr)
} }
if ((addr & 0xFFFFF000) != 0x04004000) if ((addr & 0xFFFFF000) != 0x04004000)
printf("unknown ARM7 IO read8 %08X %08X\n", addr, ARM7->R[15]); Log(LogLevel::Warn, "unknown ARM7 IO read8 %08X %08X\n", addr, ARM7->R[15]);
return 0; return 0;
} }
@ -3938,7 +3940,7 @@ u16 ARM7IORead16(u32 addr)
} }
if ((addr & 0xFFFFF000) != 0x04004000) if ((addr & 0xFFFFF000) != 0x04004000)
printf("unknown ARM7 IO read16 %08X %08X\n", addr, ARM7->R[15]); Log(LogLevel::Warn, "unknown ARM7 IO read16 %08X %08X\n", addr, ARM7->R[15]);
return 0; return 0;
} }
@ -4039,7 +4041,7 @@ u32 ARM7IORead32(u32 addr)
} }
if ((addr & 0xFFFFF000) != 0x04004000) if ((addr & 0xFFFFF000) != 0x04004000)
printf("unknown ARM7 IO read32 %08X %08X\n", addr, ARM7->R[15]); Log(LogLevel::Warn, "unknown ARM7 IO read32 %08X %08X\n", addr, ARM7->R[15]);
return 0; return 0;
} }
@ -4105,7 +4107,7 @@ void ARM7IOWrite8(u32 addr, u8 val)
case 0x04000301: case 0x04000301:
val &= 0xC0; val &= 0xC0;
if (val == 0x40) printf("!! GBA MODE NOT SUPPORTED\n"); if (val == 0x40) Log(LogLevel::Warn, "!! GBA MODE NOT SUPPORTED\n");
else if (val == 0x80) ARM7->Halt(1); else if (val == 0x80) ARM7->Halt(1);
else if (val == 0xC0) EnterSleepMode(); else if (val == 0xC0) EnterSleepMode();
return; return;
@ -4117,7 +4119,7 @@ void ARM7IOWrite8(u32 addr, u8 val)
return; return;
} }
printf("unknown ARM7 IO write8 %08X %02X %08X\n", addr, val, ARM7->R[15]); Log(LogLevel::Warn, "unknown ARM7 IO write8 %08X %02X %08X\n", addr, val, ARM7->R[15]);
} }
void ARM7IOWrite16(u32 addr, u16 val) void ARM7IOWrite16(u32 addr, u16 val)
@ -4272,7 +4274,7 @@ void ARM7IOWrite16(u32 addr, u16 val)
return; return;
} }
printf("unknown ARM7 IO write16 %08X %04X %08X\n", addr, val, ARM7->R[15]); Log(LogLevel::Warn, "unknown ARM7 IO write16 %08X %04X %08X\n", addr, val, ARM7->R[15]);
} }
void ARM7IOWrite32(u32 addr, u32 val) void ARM7IOWrite32(u32 addr, u32 val)
@ -4406,7 +4408,7 @@ void ARM7IOWrite32(u32 addr, u32 val)
return; return;
} }
printf("unknown ARM7 IO write32 %08X %08X %08X\n", addr, val, ARM7->R[15]); Log(LogLevel::Warn, "unknown ARM7 IO write32 %08X %08X %08X\n", addr, val, ARM7->R[15]);
} }
} }

View File

@ -28,6 +28,8 @@
#include "ROMList.h" #include "ROMList.h"
#include "melonDLDI.h" #include "melonDLDI.h"
using Platform::Log;
using Platform::LogLevel;
namespace NDSCart namespace NDSCart
{ {
@ -422,8 +424,8 @@ void CartRetail::DoSavestate(Savestate* file)
file->Var32(&SRAMLength); file->Var32(&SRAMLength);
if (SRAMLength != oldlen) if (SRAMLength != oldlen)
{ {
printf("savestate: VERY BAD!!!! SRAM LENGTH DIFFERENT. %d -> %d\n", oldlen, SRAMLength); Log(LogLevel::Warn, "savestate: VERY BAD!!!! SRAM LENGTH DIFFERENT. %d -> %d\n", oldlen, SRAMLength);
printf("oh well. loading it anyway. adsfgdsf\n"); Log(LogLevel::Warn, "oh well. loading it anyway. adsfgdsf\n");
if (oldlen) delete[] SRAM; if (oldlen) delete[] SRAM;
SRAM = nullptr; SRAM = nullptr;
@ -627,7 +629,7 @@ u8 CartRetail::SRAMWrite_EEPROMTiny(u8 val, u32 pos, bool last)
default: default:
if (pos == 1) if (pos == 1)
printf("unknown tiny EEPROM save command %02X\n", SRAMCmd); Log(LogLevel::Warn, "unknown tiny EEPROM save command %02X\n", SRAMCmd);
return 0xFF; return 0xFF;
} }
} }
@ -693,7 +695,7 @@ u8 CartRetail::SRAMWrite_EEPROM(u8 val, u32 pos, bool last)
default: default:
if (pos == 1) if (pos == 1)
printf("unknown EEPROM save command %02X\n", SRAMCmd); Log(LogLevel::Warn, "unknown EEPROM save command %02X\n", SRAMCmd);
return 0xFF; return 0xFF;
} }
} }
@ -837,7 +839,7 @@ u8 CartRetail::SRAMWrite_FLASH(u8 val, u32 pos, bool last)
default: default:
if (pos == 1) if (pos == 1)
printf("unknown FLASH save command %02X\n", SRAMCmd); Log(LogLevel::Warn, "unknown FLASH save command %02X\n", SRAMCmd);
return 0xFF; return 0xFF;
} }
} }
@ -966,8 +968,8 @@ int CartRetailNAND::ROMCommandStart(u8* cmd, u8* data, u32 len)
// window is 0x20000 bytes, address is aligned to that boundary // window is 0x20000 bytes, address is aligned to that boundary
// NAND remains stuck 'busy' forever if this is less than the starting SRAM address // NAND remains stuck 'busy' forever if this is less than the starting SRAM address
// TODO. // TODO.
if (addr < SRAMBase) printf("NAND: !! BAD ADDR %08X < %08X\n", addr, SRAMBase); if (addr < SRAMBase) Log(LogLevel::Warn,"NAND: !! BAD ADDR %08X < %08X\n", addr, SRAMBase);
if (addr >= (SRAMBase+SRAMLength)) printf("NAND: !! BAD ADDR %08X > %08X\n", addr, SRAMBase+SRAMLength); if (addr >= (SRAMBase+SRAMLength)) Log(LogLevel::Warn,"NAND: !! BAD ADDR %08X > %08X\n", addr, SRAMBase+SRAMLength);
SRAMWindow = addr; SRAMWindow = addr;
} }
@ -1118,7 +1120,7 @@ u8 CartRetailIR::SPIWrite(u8 val, u32 pos, bool last)
CartRetailBT::CartRetailBT(u8* rom, u32 len, u32 chipid) : CartRetail(rom, len, chipid) CartRetailBT::CartRetailBT(u8* rom, u32 len, u32 chipid) : CartRetail(rom, len, chipid)
{ {
printf("POKETYPE CART\n"); Log(LogLevel::Info,"POKETYPE CART\n");
} }
CartRetailBT::~CartRetailBT() CartRetailBT::~CartRetailBT()
@ -1137,7 +1139,7 @@ void CartRetailBT::DoSavestate(Savestate* file)
u8 CartRetailBT::SPIWrite(u8 val, u32 pos, bool last) u8 CartRetailBT::SPIWrite(u8 val, u32 pos, bool last)
{ {
printf("POKETYPE SPI: %02X %d %d - %08X\n", val, pos, last, NDS::GetPC(0)); Log(LogLevel::Debug,"POKETYPE SPI: %02X %d %d - %08X\n", val, pos, last, NDS::GetPC(0));
/*if (pos == 0) /*if (pos == 0)
{ {
@ -1295,12 +1297,12 @@ void CartHomebrew::ApplyDLDIPatchAt(u8* binary, u32 dldioffset, const u8* patch,
{ {
if (patch[0x0D] > binary[dldioffset+0x0F]) if (patch[0x0D] > binary[dldioffset+0x0F])
{ {
printf("DLDI driver ain't gonna fit, sorry\n"); Log(LogLevel::Error, "DLDI driver ain't gonna fit, sorry\n");
return; return;
} }
printf("existing driver is: %s\n", &binary[dldioffset+0x10]); Log(LogLevel::Info, "existing driver is: %s\n", &binary[dldioffset+0x10]);
printf("new driver is: %s\n", &patch[0x10]); Log(LogLevel::Info, "new driver is: %s\n", &patch[0x10]);
u32 memaddr = *(u32*)&binary[dldioffset+0x40]; u32 memaddr = *(u32*)&binary[dldioffset+0x40];
if (memaddr == 0) if (memaddr == 0)
@ -1389,7 +1391,7 @@ void CartHomebrew::ApplyDLDIPatchAt(u8* binary, u32 dldioffset, const u8* patch,
*(u32*)&binary[writesec_addr+0x04] = 0xE12FFF1E; // bx lr *(u32*)&binary[writesec_addr+0x04] = 0xE12FFF1E; // bx lr
} }
printf("applied DLDI patch at %08X\n", dldioffset); Log(LogLevel::Debug, "applied DLDI patch at %08X\n", dldioffset);
} }
void CartHomebrew::ApplyDLDIPatch(const u8* patch, u32 patchlen, bool readonly) void CartHomebrew::ApplyDLDIPatch(const u8* patch, u32 patchlen, bool readonly)
@ -1398,7 +1400,7 @@ void CartHomebrew::ApplyDLDIPatch(const u8* patch, u32 patchlen, bool readonly)
*(u32*)&patch[4] != 0x69684320 || *(u32*)&patch[4] != 0x69684320 ||
*(u32*)&patch[8] != 0x006D6873) *(u32*)&patch[8] != 0x006D6873)
{ {
printf("bad DLDI patch\n"); Log(LogLevel::Error, "bad DLDI patch\n");
return; return;
} }
@ -1413,7 +1415,7 @@ void CartHomebrew::ApplyDLDIPatch(const u8* patch, u32 patchlen, bool readonly)
*(u32*)&binary[i+4] == 0x69684320 && *(u32*)&binary[i+4] == 0x69684320 &&
*(u32*)&binary[i+8] == 0x006D6873) *(u32*)&binary[i+8] == 0x006D6873)
{ {
printf("DLDI structure found at %08X (%08X)\n", i, offset+i); Log(LogLevel::Debug, "DLDI structure found at %08X (%08X)\n", i, offset+i);
ApplyDLDIPatchAt(binary, i, patch, patchlen, readonly); ApplyDLDIPatchAt(binary, i, patch, patchlen, readonly);
i += patchlen; i += patchlen;
} }
@ -1567,13 +1569,13 @@ void DecryptSecureArea(u8* out)
if (!strncmp((const char*)out, "encryObj", 8)) if (!strncmp((const char*)out, "encryObj", 8))
{ {
printf("Secure area decryption OK\n"); Log(LogLevel::Info, "Secure area decryption OK\n");
*(u32*)&out[0] = 0xE7FFDEFF; *(u32*)&out[0] = 0xE7FFDEFF;
*(u32*)&out[4] = 0xE7FFDEFF; *(u32*)&out[4] = 0xE7FFDEFF;
} }
else else
{ {
printf("Secure area decryption failed\n"); Log(LogLevel::Warn, "Secure area decryption failed\n");
for (u32 i = 0; i < 0x800; i += 4) for (u32 i = 0; i < 0x800; i += 4)
*(u32*)&out[i] = 0xE7FFDEFF; *(u32*)&out[i] = 0xE7FFDEFF;
} }
@ -1597,7 +1599,7 @@ bool LoadROM(const u8* romdata, u32 romlen)
} }
catch (const std::bad_alloc& e) catch (const std::bad_alloc& e)
{ {
printf("NDSCart: failed to allocate memory for ROM (%d bytes)\n", CartROMSize); Log(LogLevel::Error, "NDSCart: failed to allocate memory for ROM (%d bytes)\n", CartROMSize);
return false; return false;
} }
@ -1615,7 +1617,7 @@ bool LoadROM(const u8* romdata, u32 romlen)
memcpy(&Banner, CartROM + Header.BannerOffset, bannersize); memcpy(&Banner, CartROM + Header.BannerOffset, bannersize);
} }
printf("Game code: %.4s\n", Header.GameCode); Log(LogLevel::Info, "Game code: %.4s\n", Header.GameCode);
u32 gamecode = (u32)Header.GameCode[3] << 24 | u32 gamecode = (u32)Header.GameCode[3] << 24 |
(u32)Header.GameCode[2] << 16 | (u32)Header.GameCode[2] << 16 |
@ -1629,7 +1631,7 @@ bool LoadROM(const u8* romdata, u32 romlen)
if (!ReadROMParams(gamecode, &romparams)) if (!ReadROMParams(gamecode, &romparams))
{ {
// set defaults // set defaults
printf("ROM entry not found\n"); Log(LogLevel::Warn, "ROM entry not found\n");
romparams.GameCode = gamecode; romparams.GameCode = gamecode;
romparams.ROMSize = CartROMSize; romparams.ROMSize = CartROMSize;
@ -1639,10 +1641,10 @@ bool LoadROM(const u8* romdata, u32 romlen)
romparams.SaveMemType = 2; // assume EEPROM 64k (TODO FIXME) romparams.SaveMemType = 2; // assume EEPROM 64k (TODO FIXME)
} }
else else
printf("ROM entry: %08X %08X\n", romparams.ROMSize, romparams.SaveMemType); Log(LogLevel::Info, "ROM entry: %08X %08X\n", romparams.ROMSize, romparams.SaveMemType);
if (romparams.ROMSize != romlen) if (romparams.ROMSize != romlen)
printf("!! bad ROM size %d (expected %d) rounded to %d\n", romlen, romparams.ROMSize, CartROMSize); Log(LogLevel::Warn, "!! bad ROM size %d (expected %d) rounded to %d\n", romlen, romparams.ROMSize, CartROMSize);
// generate a ROM ID // generate a ROM ID
// note: most games don't check the actual value // note: most games don't check the actual value
@ -1666,14 +1668,14 @@ bool LoadROM(const u8* romdata, u32 romlen)
//CartID = 0x88017FEC; //CartID = 0x88017FEC;
//CartID = 0x80007FC2; // pokémon typing adventure //CartID = 0x80007FC2; // pokémon typing adventure
printf("Cart ID: %08X\n", CartID); Log(LogLevel::Info, "Cart ID: %08X\n", CartID);
if (arm9base >= 0x4000 && arm9base < 0x8000) if (arm9base >= 0x4000 && arm9base < 0x8000)
{ {
// reencrypt secure area if needed // reencrypt secure area if needed
if (*(u32*)&CartROM[arm9base] == 0xE7FFDEFF && *(u32*)&CartROM[arm9base+0x10] != 0xE7FFDEFF) if (*(u32*)&CartROM[arm9base] == 0xE7FFDEFF && *(u32*)&CartROM[arm9base+0x10] != 0xE7FFDEFF)
{ {
printf("Re-encrypting cart secure area\n"); Log(LogLevel::Debug, "Re-encrypting cart secure area\n");
strncpy((char*)&CartROM[arm9base], "encryObj", 8); strncpy((char*)&CartROM[arm9base], "encryObj", 8);
@ -1832,10 +1834,10 @@ void WriteROMCnt(u32 val)
if (seed1 & (1ULL << i)) Key2_Y |= (1ULL << (38-i)); if (seed1 & (1ULL << i)) Key2_Y |= (1ULL << (38-i));
} }
printf("seed0: %02X%08X\n", (u32)(seed0>>32), (u32)seed0); Log(LogLevel::Debug, "seed0: %02X%08X\n", (u32)(seed0>>32), (u32)seed0);
printf("seed1: %02X%08X\n", (u32)(seed1>>32), (u32)seed1); Log(LogLevel::Debug, "seed1: %02X%08X\n", (u32)(seed1>>32), (u32)seed1);
printf("key2 X: %02X%08X\n", (u32)(Key2_X>>32), (u32)Key2_X); Log(LogLevel::Debug, "key2 X: %02X%08X\n", (u32)(Key2_X>>32), (u32)Key2_X);
printf("key2 Y: %02X%08X\n", (u32)(Key2_Y>>32), (u32)Key2_Y); Log(LogLevel::Debug, "key2 Y: %02X%08X\n", (u32)(Key2_Y>>32), (u32)Key2_Y);
} }
// transfers will only start when bit31 changes from 0 to 1 // transfers will only start when bit31 changes from 0 to 1
@ -1872,7 +1874,7 @@ void WriteROMCnt(u32 val)
TransferDir = Cart->ROMCommandStart(TransferCmd, TransferData, TransferLen); TransferDir = Cart->ROMCommandStart(TransferCmd, TransferData, TransferLen);
if ((datasize > 0) && (((ROMCnt >> 30) & 0x1) != TransferDir)) if ((datasize > 0) && (((ROMCnt >> 30) & 0x1) != TransferDir))
printf("NDSCART: !! BAD TRANSFER DIRECTION FOR CMD %02X, DIR=%d, ROMCNT=%08X\n", ROMCommand[0], TransferDir, ROMCnt); Log(LogLevel::Debug, "NDSCART: !! BAD TRANSFER DIRECTION FOR CMD %02X, DIR=%d, ROMCNT=%08X\n", ROMCommand[0], TransferDir, ROMCnt);
ROMCnt &= ~(1<<23); ROMCnt &= ~(1<<23);
@ -1967,7 +1969,7 @@ void WriteSPICnt(u16 val)
// in this case, the transfer continues until the end, even if bit13 or bit15 are cleared // in this case, the transfer continues until the end, even if bit13 or bit15 are cleared
// if the transfer speed is changed, the transfer continues at the new speed (TODO) // if the transfer speed is changed, the transfer continues at the new speed (TODO)
if (SPICnt & (1<<7)) if (SPICnt & (1<<7))
printf("!! CHANGING AUXSPICNT DURING TRANSFER: %04X\n", val); Log(LogLevel::Debug, "!! CHANGING AUXSPICNT DURING TRANSFER: %04X\n", val);
} }
void SPITransferDone(u32 param) void SPITransferDone(u32 param)

View File

@ -18,6 +18,8 @@
#include "OpenGLSupport.h" #include "OpenGLSupport.h"
using Platform::Log;
using Platform::LogLevel;
namespace OpenGL namespace OpenGL
{ {
@ -39,8 +41,8 @@ bool BuildShaderProgram(const char* vs, const char* fs, GLuint* ids, const char*
if (res < 1) res = 1024; if (res < 1) res = 1024;
char* log = new char[res+1]; char* log = new char[res+1];
glGetShaderInfoLog(ids[0], res+1, NULL, log); glGetShaderInfoLog(ids[0], res+1, NULL, log);
printf("OpenGL: failed to compile vertex shader %s: %s\n", name, log); Log(LogLevel::Error, "OpenGL: failed to compile vertex shader %s: %s\n", name, log);
printf("shader source:\n--\n%s\n--\n", vs); Log(LogLevel::Debug, "shader source:\n--\n%s\n--\n", vs);
delete[] log; delete[] log;
glDeleteShader(ids[0]); glDeleteShader(ids[0]);
@ -60,7 +62,7 @@ bool BuildShaderProgram(const char* vs, const char* fs, GLuint* ids, const char*
if (res < 1) res = 1024; if (res < 1) res = 1024;
char* log = new char[res+1]; char* log = new char[res+1];
glGetShaderInfoLog(ids[1], res+1, NULL, log); glGetShaderInfoLog(ids[1], res+1, NULL, log);
printf("OpenGL: failed to compile fragment shader %s: %s\n", name, log); Log(LogLevel::Error, "OpenGL: failed to compile fragment shader %s: %s\n", name, log);
//printf("shader source:\n--\n%s\n--\n", fs); //printf("shader source:\n--\n%s\n--\n", fs);
delete[] log; delete[] log;
@ -100,7 +102,7 @@ bool LinkShaderProgram(GLuint* ids)
if (res < 1) res = 1024; if (res < 1) res = 1024;
char* log = new char[res+1]; char* log = new char[res+1];
glGetProgramInfoLog(ids[2], res+1, NULL, log); glGetProgramInfoLog(ids[2], res+1, NULL, log);
printf("OpenGL: failed to link shader program: %s\n", log); Log(LogLevel::Error, "OpenGL: failed to link shader program: %s\n", log);
delete[] log; delete[] log;
glDeleteProgram(ids[2]); glDeleteProgram(ids[2]);

View File

@ -128,6 +128,16 @@ inline bool LocalFileExists(std::string name)
return true; return true;
} }
enum LogLevel
{
Debug,
Info,
Warn,
Error,
};
void Log(LogLevel level, const char* fmt, ...);
struct Thread; struct Thread;
Thread* Thread_Create(std::function<void()> func); Thread* Thread_Create(std::function<void()> func);
void Thread_Free(Thread* thread); void Thread_Free(Thread* thread);

View File

@ -19,11 +19,13 @@
// Required by MinGW to enable localtime_r in time.h // Required by MinGW to enable localtime_r in time.h
#define _POSIX_THREAD_SAFE_FUNCTIONS #define _POSIX_THREAD_SAFE_FUNCTIONS
#include <stdio.h>
#include <string.h> #include <string.h>
#include <time.h> #include <time.h>
#include "RTC.h" #include "RTC.h"
#include "Platform.h"
using Platform::Log;
using Platform::LogLevel;
namespace RTC namespace RTC
{ {
@ -186,7 +188,7 @@ void ByteIn(u8 val)
case 0x40: case 0x40:
if (InputPos == 1) StatusReg2 = val; if (InputPos == 1) StatusReg2 = val;
if (StatusReg2 & 0x4F) printf("RTC INTERRUPT ON: %02X\n", StatusReg2); if (StatusReg2 & 0x4F) Log(LogLevel::Debug, "RTC INTERRUPT ON: %02X\n", StatusReg2);
break; break;
case 0x20: case 0x20:

View File

@ -29,6 +29,8 @@
#include "DSi_SPI_TSC.h" #include "DSi_SPI_TSC.h"
#include "Platform.h" #include "Platform.h"
using Platform::Log;
using Platform::LogLevel;
namespace SPI_Firmware namespace SPI_Firmware
{ {
@ -96,7 +98,7 @@ u32 FixFirmwareLength(u32 originalLength)
{ {
if (originalLength != 0x20000 && originalLength != 0x40000 && originalLength != 0x80000) if (originalLength != 0x20000 && originalLength != 0x40000 && originalLength != 0x80000)
{ {
printf("Bad firmware size %d, ", originalLength); Log(LogLevel::Warn, "Bad firmware size %d, ", originalLength);
// pick the nearest power-of-two length // pick the nearest power-of-two length
originalLength |= (originalLength >> 1); originalLength |= (originalLength >> 1);
@ -110,7 +112,7 @@ u32 FixFirmwareLength(u32 originalLength)
if (originalLength > 0x80000) originalLength = 0x80000; if (originalLength > 0x80000) originalLength = 0x80000;
else if (originalLength < 0x20000) originalLength = 0x20000; else if (originalLength < 0x20000) originalLength = 0x20000;
printf("assuming %d\n", originalLength); Log(LogLevel::Debug, "assuming %d\n", originalLength);
} }
return originalLength; return originalLength;
} }
@ -286,7 +288,7 @@ void LoadFirmwareFromFile(FILE* f, bool makecopy)
} }
else else
{ {
printf("Could not write firmware backup!\n"); Log(LogLevel::Error, "Could not write firmware backup!\n");
} }
} }
else else
@ -348,7 +350,7 @@ void Reset()
} }
if (!f) if (!f)
{ {
printf("Firmware not found! Generating default firmware.\n"); Log(LogLevel::Warn,"Firmware not found! Generating default firmware.\n");
FirmwarePath = ""; FirmwarePath = "";
} }
else else
@ -425,17 +427,17 @@ void Reset()
} }
} }
printf("MAC: %02X:%02X:%02X:%02X:%02X:%02X\n", Log(LogLevel::Info, "MAC: %02X:%02X:%02X:%02X:%02X:%02X\n",
Firmware[0x36], Firmware[0x37], Firmware[0x38], Firmware[0x36], Firmware[0x37], Firmware[0x38],
Firmware[0x39], Firmware[0x3A], Firmware[0x3B]); Firmware[0x39], Firmware[0x3A], Firmware[0x3B]);
// verify shit // verify shit
printf("FW: WIFI CRC16 = %s\n", VerifyCRC16(0x0000, 0x2C, *(u16*)&Firmware[0x2C], 0x2A)?"GOOD":"BAD"); Log(LogLevel::Debug, "FW: WIFI CRC16 = %s\n", VerifyCRC16(0x0000, 0x2C, *(u16*)&Firmware[0x2C], 0x2A)?"GOOD":"BAD");
printf("FW: AP1 CRC16 = %s\n", VerifyCRC16(0x0000, 0x7FA00&FirmwareMask, 0xFE, 0x7FAFE&FirmwareMask)?"GOOD":"BAD"); Log(LogLevel::Debug, "FW: AP1 CRC16 = %s\n", VerifyCRC16(0x0000, 0x7FA00&FirmwareMask, 0xFE, 0x7FAFE&FirmwareMask)?"GOOD":"BAD");
printf("FW: AP2 CRC16 = %s\n", VerifyCRC16(0x0000, 0x7FB00&FirmwareMask, 0xFE, 0x7FBFE&FirmwareMask)?"GOOD":"BAD"); Log(LogLevel::Debug, "FW: AP2 CRC16 = %s\n", VerifyCRC16(0x0000, 0x7FB00&FirmwareMask, 0xFE, 0x7FBFE&FirmwareMask)?"GOOD":"BAD");
printf("FW: AP3 CRC16 = %s\n", VerifyCRC16(0x0000, 0x7FC00&FirmwareMask, 0xFE, 0x7FCFE&FirmwareMask)?"GOOD":"BAD"); Log(LogLevel::Debug, "FW: AP3 CRC16 = %s\n", VerifyCRC16(0x0000, 0x7FC00&FirmwareMask, 0xFE, 0x7FCFE&FirmwareMask)?"GOOD":"BAD");
printf("FW: USER0 CRC16 = %s\n", VerifyCRC16(0xFFFF, 0x7FE00&FirmwareMask, 0x70, 0x7FE72&FirmwareMask)?"GOOD":"BAD"); Log(LogLevel::Debug, "FW: USER0 CRC16 = %s\n", VerifyCRC16(0xFFFF, 0x7FE00&FirmwareMask, 0x70, 0x7FE72&FirmwareMask)?"GOOD":"BAD");
printf("FW: USER1 CRC16 = %s\n", VerifyCRC16(0xFFFF, 0x7FF00&FirmwareMask, 0x70, 0x7FF72&FirmwareMask)?"GOOD":"BAD"); Log(LogLevel::Debug, "FW: USER1 CRC16 = %s\n", VerifyCRC16(0xFFFF, 0x7FF00&FirmwareMask, 0x70, 0x7FF72&FirmwareMask)?"GOOD":"BAD");
Hold = 0; Hold = 0;
CurCmd = 0; CurCmd = 0;
@ -585,7 +587,7 @@ void Write(u8 val, u32 hold)
break; break;
default: default:
printf("unknown firmware SPI command %02X\n", CurCmd); Log(LogLevel::Warn, "unknown firmware SPI command %02X\n", CurCmd);
Data = 0xFF; Data = 0xFF;
break; break;
} }
@ -937,8 +939,8 @@ void WriteCnt(u16 val)
// TODO: presumably the transfer speed can be changed during a transfer // TODO: presumably the transfer speed can be changed during a transfer
// like with the NDSCart SPI interface // like with the NDSCart SPI interface
Cnt = (Cnt & 0x0080) | (val & 0xCF03); Cnt = (Cnt & 0x0080) | (val & 0xCF03);
if (val & 0x0400) printf("!! CRAPOED 16BIT SPI MODE\n"); if (val & 0x0400) Log(LogLevel::Warn, "!! CRAPOED 16BIT SPI MODE\n");
if (Cnt & (1<<7)) printf("!! CHANGING SPICNT DURING TRANSFER: %04X\n", val); if (Cnt & (1<<7)) Log(LogLevel::Warn, "!! CHANGING SPICNT DURING TRANSFER: %04X\n", val);
} }
void TransferDone(u32 param) void TransferDone(u32 param)
@ -983,7 +985,7 @@ void WriteData(u8 val)
else else
SPI_TSC::Write(val, Cnt&(1<<11)); SPI_TSC::Write(val, Cnt&(1<<11));
break; break;
default: printf("SPI to unknown device %04X %02X\n", Cnt, val); break; default: Log(LogLevel::Warn, "SPI to unknown device %04X %02X\n", Cnt, val); break;
} }
// SPI transfers one bit per cycle -> 8 cycles per byte // SPI transfers one bit per cycle -> 8 cycles per byte

View File

@ -24,6 +24,9 @@
#include "DSi.h" #include "DSi.h"
#include "SPU.h" #include "SPU.h"
using Platform::Log;
using Platform::LogLevel;
// SPU TODO // SPU TODO
// * capture addition modes, overflow bugs // * capture addition modes, overflow bugs
@ -1006,7 +1009,7 @@ u8 Read8(u32 addr)
} }
} }
printf("unknown SPU read8 %08X\n", addr); Log(LogLevel::Warn, "unknown SPU read8 %08X\n", addr);
return 0; return 0;
} }
@ -1033,7 +1036,7 @@ u16 Read16(u32 addr)
} }
} }
printf("unknown SPU read16 %08X\n", addr); Log(LogLevel::Warn, "unknown SPU read16 %08X\n", addr);
return 0; return 0;
} }
@ -1062,7 +1065,7 @@ u32 Read32(u32 addr)
} }
} }
printf("unknown SPU read32 %08X\n", addr); Log(LogLevel::Warn, "unknown SPU read32 %08X\n", addr);
return 0; return 0;
} }
@ -1095,16 +1098,16 @@ void Write8(u32 addr, u8 val)
case 0x04000508: case 0x04000508:
Capture[0]->SetCnt(val); Capture[0]->SetCnt(val);
if (val & 0x03) printf("!! UNSUPPORTED SPU CAPTURE MODE %02X\n", val); if (val & 0x03) Log(LogLevel::Warn, "!! UNSUPPORTED SPU CAPTURE MODE %02X\n", val);
return; return;
case 0x04000509: case 0x04000509:
Capture[1]->SetCnt(val); Capture[1]->SetCnt(val);
if (val & 0x03) printf("!! UNSUPPORTED SPU CAPTURE MODE %02X\n", val); if (val & 0x03) Log(LogLevel::Warn, "!! UNSUPPORTED SPU CAPTURE MODE %02X\n", val);
return; return;
} }
} }
printf("unknown SPU write8 %08X %02X\n", addr, val); Log(LogLevel::Warn, "unknown SPU write8 %08X %02X\n", addr, val);
} }
void Write16(u32 addr, u16 val) void Write16(u32 addr, u16 val)
@ -1145,7 +1148,7 @@ void Write16(u32 addr, u16 val)
case 0x04000508: case 0x04000508:
Capture[0]->SetCnt(val & 0xFF); Capture[0]->SetCnt(val & 0xFF);
Capture[1]->SetCnt(val >> 8); Capture[1]->SetCnt(val >> 8);
if (val & 0x0303) printf("!! UNSUPPORTED SPU CAPTURE MODE %04X\n", val); if (val & 0x0303) Log(LogLevel::Warn, "!! UNSUPPORTED SPU CAPTURE MODE %04X\n", val);
return; return;
case 0x04000514: Capture[0]->SetLength(val); return; case 0x04000514: Capture[0]->SetLength(val); return;
@ -1153,7 +1156,7 @@ void Write16(u32 addr, u16 val)
} }
} }
printf("unknown SPU write16 %08X %04X\n", addr, val); Log(LogLevel::Warn, "unknown SPU write16 %08X %04X\n", addr, val);
} }
void Write32(u32 addr, u32 val) void Write32(u32 addr, u32 val)
@ -1193,7 +1196,7 @@ void Write32(u32 addr, u32 val)
case 0x04000508: case 0x04000508:
Capture[0]->SetCnt(val & 0xFF); Capture[0]->SetCnt(val & 0xFF);
Capture[1]->SetCnt(val >> 8); Capture[1]->SetCnt(val >> 8);
if (val & 0x0303) printf("!! UNSUPPORTED SPU CAPTURE MODE %04X\n", val); if (val & 0x0303) Log(LogLevel::Warn, "!! UNSUPPORTED SPU CAPTURE MODE %04X\n", val);
return; return;
case 0x04000510: Capture[0]->SetDstAddr(val); return; case 0x04000510: Capture[0]->SetDstAddr(val); return;

View File

@ -20,6 +20,9 @@
#include "Savestate.h" #include "Savestate.h"
#include "Platform.h" #include "Platform.h"
using Platform::Log;
using Platform::LogLevel;
/* /*
Savestate format Savestate format
@ -58,7 +61,7 @@ Savestate::Savestate(std::string filename, bool save)
file = Platform::OpenLocalFile(filename, "wb"); file = Platform::OpenLocalFile(filename, "wb");
if (!file) if (!file)
{ {
printf("savestate: file %s doesn't exist\n", filename.c_str()); Log(LogLevel::Error, "savestate: file %s doesn't exist\n", filename.c_str());
Error = true; Error = true;
return; return;
} }
@ -77,7 +80,7 @@ Savestate::Savestate(std::string filename, bool save)
file = Platform::OpenFile(filename, "rb"); file = Platform::OpenFile(filename, "rb");
if (!file) if (!file)
{ {
printf("savestate: file %s doesn't exist\n", filename.c_str()); Log(LogLevel::Error, "savestate: file %s doesn't exist\n", filename.c_str());
Error = true; Error = true;
return; return;
} }
@ -92,7 +95,7 @@ Savestate::Savestate(std::string filename, bool save)
fread(&buf, 4, 1, file); fread(&buf, 4, 1, file);
if (buf != ((u32*)magic)[0]) if (buf != ((u32*)magic)[0])
{ {
printf("savestate: invalid magic %08X\n", buf); Log(LogLevel::Error, "savestate: invalid magic %08X\n", buf);
Error = true; Error = true;
return; return;
} }
@ -103,7 +106,7 @@ Savestate::Savestate(std::string filename, bool save)
fread(&VersionMajor, 2, 1, file); fread(&VersionMajor, 2, 1, file);
if (VersionMajor != SAVESTATE_MAJOR) if (VersionMajor != SAVESTATE_MAJOR)
{ {
printf("savestate: bad version major %d, expecting %d\n", VersionMajor, SAVESTATE_MAJOR); Log(LogLevel::Error, "savestate: bad version major %d, expecting %d\n", VersionMajor, SAVESTATE_MAJOR);
Error = true; Error = true;
return; return;
} }
@ -111,7 +114,7 @@ Savestate::Savestate(std::string filename, bool save)
fread(&VersionMinor, 2, 1, file); fread(&VersionMinor, 2, 1, file);
if (VersionMinor > SAVESTATE_MINOR) if (VersionMinor > SAVESTATE_MINOR)
{ {
printf("savestate: state from the future, %d > %d\n", VersionMinor, SAVESTATE_MINOR); Log(LogLevel::Error, "savestate: state from the future, %d > %d\n", VersionMinor, SAVESTATE_MINOR);
Error = true; Error = true;
return; return;
} }
@ -120,7 +123,7 @@ Savestate::Savestate(std::string filename, bool save)
fread(&buf, 4, 1, file); fread(&buf, 4, 1, file);
if (buf != len) if (buf != len)
{ {
printf("savestate: bad length %d\n", buf); Log(LogLevel::Error, "savestate: bad length %d\n", buf);
Error = true; Error = true;
return; return;
} }
@ -192,7 +195,7 @@ void Savestate::Section(const char* magic)
{ {
if (buf == 0) if (buf == 0)
{ {
printf("savestate: section %s not found. blarg\n", magic); Log(LogLevel::Error, "savestate: section %s not found. blarg\n", magic);
return; return;
} }

View File

@ -26,6 +26,8 @@
#include "ARM.h" #include "ARM.h"
#include "GPU.h" #include "GPU.h"
using Platform::Log;
using Platform::LogLevel;
namespace Wifi namespace Wifi
{ {
@ -33,7 +35,7 @@ namespace Wifi
//#define WIFI_LOG printf //#define WIFI_LOG printf
#define WIFI_LOG(...) {} #define WIFI_LOG(...) {}
#define PRINT_MAC(pf, mac) printf("%s: %02X:%02X:%02X:%02X:%02X:%02X\n", pf, (mac)[0], (mac)[1], (mac)[2], (mac)[3], (mac)[4], (mac)[5]); #define PRINT_MAC(pf, mac) Log(LogLevel::Debug, "%s: %02X:%02X:%02X:%02X:%02X:%02X\n", pf, (mac)[0], (mac)[1], (mac)[2], (mac)[3], (mac)[4], (mac)[5]);
u8 RAM[0x2000]; u8 RAM[0x2000];
u16 IO[0x1000>>1]; u16 IO[0x1000>>1];
@ -223,7 +225,7 @@ void Reset()
IOPORT(0x000) = 0xC340; // DSi has the modern DS-wifi variant IOPORT(0x000) = 0xC340; // DSi has the modern DS-wifi variant
else else
{ {
printf("wifi: unknown console type %02X\n", console); Log(LogLevel::Warn, "wifi: unknown console type %02X\n", console);
IOPORT(0x000) = 0x1440; IOPORT(0x000) = 0x1440;
} }
@ -370,7 +372,7 @@ void UpdatePowerOn()
PowerOn = on; PowerOn = on;
if (on) if (on)
{ {
printf("WIFI: ON\n"); Log(LogLevel::Info, "WIFI: ON\n");
ScheduleTimer(true); ScheduleTimer(true);
@ -378,7 +380,7 @@ void UpdatePowerOn()
} }
else else
{ {
printf("WIFI: OFF\n"); Log(LogLevel::Info, "WIFI: OFF\n");
NDS::CancelEvent(NDS::Event_Wifi); NDS::CancelEvent(NDS::Event_Wifi);
@ -434,7 +436,7 @@ void SetIRQ14(int source) // 0=USCOMPARE 1=BEACONCOUNT 2=forced
SetIRQ(14); SetIRQ(14);
if (source == 2) if (source == 2)
printf("wifi: weird forced IRQ14\n"); Log(LogLevel::Debug, "wifi: weird forced IRQ14\n");
IOPORT(W_BeaconCount2) = 0xFFFF; IOPORT(W_BeaconCount2) = 0xFFFF;
IOPORT(W_TXReqRead) &= 0xFFF2; IOPORT(W_TXReqRead) &= 0xFFF2;
@ -533,7 +535,7 @@ void StartTX_LocN(int nslot, int loc)
TXSlot* slot = &TXSlots[nslot]; TXSlot* slot = &TXSlots[nslot];
if (IOPORT(W_TXSlotLoc1 + (loc*4)) & 0x7000) if (IOPORT(W_TXSlotLoc1 + (loc*4)) & 0x7000)
printf("wifi: unusual loc%d bits set %04X\n", loc, IOPORT(W_TXSlotLoc1 + (loc*4))); Log(LogLevel::Warn, "wifi: unusual loc%d bits set %04X\n", loc, IOPORT(W_TXSlotLoc1 + (loc*4)));
slot->Addr = (IOPORT(W_TXSlotLoc1 + (loc*4)) & 0x0FFF) << 1; slot->Addr = (IOPORT(W_TXSlotLoc1 + (loc*4)) & 0x0FFF) << 1;
slot->Length = *(u16*)&RAM[slot->Addr + 0xA] & 0x3FFF; slot->Length = *(u16*)&RAM[slot->Addr + 0xA] & 0x3FFF;
@ -553,7 +555,7 @@ void StartTX_Cmd()
// TODO: cancel the transfer if there isn't enough time left (check CMDCOUNT) // TODO: cancel the transfer if there isn't enough time left (check CMDCOUNT)
if (IOPORT(W_TXSlotCmd) & 0x3000) if (IOPORT(W_TXSlotCmd) & 0x3000)
printf("wifi: !! unusual TXSLOT_CMD bits set %04X\n", IOPORT(W_TXSlotCmd)); Log(LogLevel::Warn,"wifi: !! unusual TXSLOT_CMD bits set %04X\n", IOPORT(W_TXSlotCmd));
slot->Addr = (IOPORT(W_TXSlotCmd) & 0x0FFF) << 1; slot->Addr = (IOPORT(W_TXSlotCmd) & 0x0FFF) << 1;
slot->Length = *(u16*)&RAM[slot->Addr + 0xA] & 0x3FFF; slot->Length = *(u16*)&RAM[slot->Addr + 0xA] & 0x3FFF;
@ -872,7 +874,7 @@ bool ProcessTX(TXSlot* slot, int num)
} }
if ((num != 5) && (RAM[slot->Addr+4] > 0)) if ((num != 5) && (RAM[slot->Addr+4] > 0))
printf("SLOT %d RETRY COUNTER %d\n", num, RAM[slot->Addr+4]); Log(LogLevel::Debug, "SLOT %d RETRY COUNTER %d\n", num, RAM[slot->Addr+4]);
// set TX addr // set TX addr
IOPORT(W_RXTXAddr) = slot->Addr >> 1; IOPORT(W_RXTXAddr) = slot->Addr >> 1;
@ -909,13 +911,13 @@ bool ProcessTX(TXSlot* slot, int num)
if ((framectl & 0x00FF) == 0x0010) if ((framectl & 0x00FF) == 0x0010)
{ {
u16 aid = *(u16*)&RAM[slot->Addr + 0xC + 24 + 4]; u16 aid = *(u16*)&RAM[slot->Addr + 0xC + 24 + 4];
if (aid) printf("[HOST] syncing client %04X, sync=%016llX\n", aid, USTimestamp); if (aid) Log(LogLevel::Debug, "[HOST] syncing client %04X, sync=%016llX\n", aid, USTimestamp);
} }
else if ((framectl & 0x00FF) == 0x00C0) else if ((framectl & 0x00FF) == 0x00C0)
{ {
if (IsMPClient) if (IsMPClient)
{ {
printf("[CLIENT] deauth\n"); Log(LogLevel::Info, "[CLIENT] deauth\n");
IsMPClient = false; IsMPClient = false;
} }
} }
@ -1478,7 +1480,7 @@ bool CheckRX(int type) // 0=regular 1=MP replies 2=MP host frames
framelen = *(u16*)&RXBuffer[10]; framelen = *(u16*)&RXBuffer[10];
if (framelen != rxlen-12) if (framelen != rxlen-12)
{ {
printf("bad frame length %d/%d\n", framelen, rxlen-12); Log(LogLevel::Error, "bad frame length %d/%d\n", framelen, rxlen-12);
continue; continue;
} }
@ -1515,7 +1517,7 @@ bool CheckRX(int type) // 0=regular 1=MP replies 2=MP host frames
if (aid) if (aid)
{ {
printf("[CLIENT %01X] host sync=%016llX\n", aid&0xF, timestamp); Log(LogLevel::Debug, "[CLIENT %01X] host sync=%016llX\n", aid&0xF, timestamp);
IsMPClient = true; IsMPClient = true;
USTimestamp = timestamp; USTimestamp = timestamp;
@ -1745,7 +1747,7 @@ void USTimer(u32 param)
// TODO: properly check the crossing of the read cursor // TODO: properly check the crossing of the read cursor
// (for example, if it is outside of the RX buffer) // (for example, if it is outside of the RX buffer)
printf("wifi: RX buffer full (buf=%04X/%04X rd=%04X wr=%04X rxtx=%04X power=%04X com=%d rxcnt=%04X filter=%04X/%04X frame=%04X/%04X len=%d)\n", Log(LogLevel::Debug, "wifi: RX buffer full (buf=%04X/%04X rd=%04X wr=%04X rxtx=%04X power=%04X com=%d rxcnt=%04X filter=%04X/%04X frame=%04X/%04X len=%d)\n",
(IOPORT(W_RXBufBegin)>>1)&0xFFF, (IOPORT(W_RXBufEnd)>>1)&0xFFF, (IOPORT(W_RXBufBegin)>>1)&0xFFF, (IOPORT(W_RXBufEnd)>>1)&0xFFF,
IOPORT(W_RXBufReadCursor), IOPORT(W_RXBufWriteCursor), IOPORT(W_RXBufReadCursor), IOPORT(W_RXBufWriteCursor),
IOPORT(W_RXTXAddr), IOPORT(W_PowerState), ComStatus, IOPORT(W_RXTXAddr), IOPORT(W_PowerState), ComStatus,
@ -1845,7 +1847,7 @@ u16 Read(u32 addr)
case W_BBRead: case W_BBRead:
if ((IOPORT(W_BBCnt) & 0xF000) != 0x6000) if ((IOPORT(W_BBCnt) & 0xF000) != 0x6000)
{ {
printf("WIFI: bad BB read, CNT=%04X\n", IOPORT(W_BBCnt)); Log(LogLevel::Error, "WIFI: bad BB read, CNT=%04X\n", IOPORT(W_BBCnt));
return 0; return 0;
} }
return BBRegs[IOPORT(W_BBCnt) & 0xFF]; return BBRegs[IOPORT(W_BBCnt) & 0xFF];
@ -2007,7 +2009,7 @@ void Write(u32 addr, u16 val)
return; return;
case W_IFSet: case W_IFSet:
IOPORT(W_IF) |= (val & 0xFBFF); IOPORT(W_IF) |= (val & 0xFBFF);
printf("wifi: force-setting IF %04X\n", val); Log(LogLevel::Debug, "wifi: force-setting IF %04X\n", val);
return; return;
case W_AIDLow: case W_AIDLow:
@ -2135,11 +2137,11 @@ void Write(u32 addr, u16 val)
FireTX(); FireTX();
} }
val &= 0xFF0E; val &= 0xFF0E;
if (val & 0x7FFF) printf("wifi: unknown RXCNT bits set %04X\n", val); if (val & 0x7FFF) Log(LogLevel::Warn, "wifi: unknown RXCNT bits set %04X\n", val);
break; break;
case W_RXBufDataRead: case W_RXBufDataRead:
printf("wifi: writing to RXBUF_DATA_READ. wat\n"); Log(LogLevel::Warn, "wifi: writing to RXBUF_DATA_READ. wat\n");
if (IOPORT(W_RXBufCount) > 0) if (IOPORT(W_RXBufCount) > 0)
{ {
IOPORT(W_RXBufCount)--; IOPORT(W_RXBufCount)--;
@ -2176,7 +2178,7 @@ void Write(u32 addr, u16 val)
// checkme: any bits affecting the beacon slot? // checkme: any bits affecting the beacon slot?
if (val & 0x0040) IOPORT(W_TXSlotReply2) &= 0x7FFF; if (val & 0x0040) IOPORT(W_TXSlotReply2) &= 0x7FFF;
if (val & 0x0080) IOPORT(W_TXSlotReply1) &= 0x7FFF; if (val & 0x0080) IOPORT(W_TXSlotReply1) &= 0x7FFF;
if ((val & 0xFF30) && (val != 0xFFFF)) printf("unusual TXSLOTRESET %04X\n", val); if ((val & 0xFF30) && (val != 0xFFFF)) Log(LogLevel::Warn, "unusual TXSLOTRESET %04X\n", val);
val = 0; // checkme (write-only port) val = 0; // checkme (write-only port)
break; break;

View File

@ -27,6 +27,9 @@
#include <stddef.h> #include <stddef.h>
#endif #endif
using Platform::Log;
using Platform::LogLevel;
namespace WifiAP namespace WifiAP
{ {
@ -137,7 +140,7 @@ int HandleManagementFrame(u8* data, int len)
if (RXNum) if (RXNum)
{ {
printf("wifiAP: can't reply!!\n"); Log(LogLevel::Warn, "wifiAP: can't reply!!\n");
return 0; return 0;
} }
@ -155,12 +158,12 @@ int HandleManagementFrame(u8* data, int len)
if (ClientStatus != 1) if (ClientStatus != 1)
{ {
printf("wifiAP: bad assoc request, needs auth prior\n"); Log(LogLevel::Error, "wifiAP: bad assoc request, needs auth prior\n");
return 0; return 0;
} }
ClientStatus = 2; ClientStatus = 2;
printf("wifiAP: client associated\n"); Log(LogLevel::Info, "wifiAP: client associated\n");
PWRITE_16(p, 0x0010); PWRITE_16(p, 0x0010);
PWRITE_16(p, 0x0000); // duration?? PWRITE_16(p, 0x0000); // duration??
@ -210,7 +213,7 @@ int HandleManagementFrame(u8* data, int len)
return 0; return 0;
ClientStatus = 1; ClientStatus = 1;
printf("wifiAP: client deassociated\n"); Log(LogLevel::Info, "wifiAP: client deassociated\n");
PWRITE_16(p, 0x00A0); PWRITE_16(p, 0x00A0);
PWRITE_16(p, 0x0000); // duration?? PWRITE_16(p, 0x0000); // duration??
@ -232,7 +235,7 @@ int HandleManagementFrame(u8* data, int len)
return 0; return 0;
ClientStatus = 1; ClientStatus = 1;
printf("wifiAP: client authenticated\n"); Log(LogLevel::Info, "wifiAP: client authenticated\n");
PWRITE_16(p, 0x00B0); PWRITE_16(p, 0x00B0);
PWRITE_16(p, 0x0000); // duration?? PWRITE_16(p, 0x0000); // duration??
@ -256,7 +259,7 @@ int HandleManagementFrame(u8* data, int len)
return 0; return 0;
ClientStatus = 0; ClientStatus = 0;
printf("wifiAP: client deauthenticated\n"); Log(LogLevel::Info, "wifiAP: client deauthenticated\n");
PWRITE_16(p, 0x00C0); PWRITE_16(p, 0x00C0);
PWRITE_16(p, 0x0000); // duration?? PWRITE_16(p, 0x0000); // duration??
@ -273,7 +276,7 @@ int HandleManagementFrame(u8* data, int len)
return len; return len;
default: default:
printf("wifiAP: unknown management frame type %X\n", (framectl>>4)&0xF); Log(LogLevel::Warn, "wifiAP: unknown management frame type %X\n", (framectl>>4)&0xF);
return 0; return 0;
} }
} }
@ -297,7 +300,7 @@ int SendPacket(u8* data, int len)
{ {
if ((framectl & 0x0300) != 0x0100) if ((framectl & 0x0300) != 0x0100)
{ {
printf("wifiAP: got data frame with bad fromDS/toDS bits %04X\n", framectl); Log(LogLevel::Error, "wifiAP: got data frame with bad fromDS/toDS bits %04X\n", framectl);
return 0; return 0;
} }
@ -307,7 +310,7 @@ int SendPacket(u8* data, int len)
{ {
if (ClientStatus != 2) if (ClientStatus != 2)
{ {
printf("wifiAP: trying to send shit without being associated\n"); Log(LogLevel::Warn, "wifiAP: trying to send shit without being associated\n");
return 0; return 0;
} }

View File

@ -19,6 +19,9 @@
#include "ArchiveUtil.h" #include "ArchiveUtil.h"
#include "Platform.h" #include "Platform.h"
using Platform::Log;
using Platform::LogLevel;
namespace Archive namespace Archive
{ {
@ -106,7 +109,7 @@ QVector<QString> ExtractFileFromArchive(QString path, QString wantedFile, QByteA
if (bytesRead < 0) if (bytesRead < 0)
{ {
printf("Error whilst reading archive: %s", archive_error_string(a)); Log(LogLevel::Error, "Error whilst reading archive: %s", archive_error_string(a));
return QVector<QString> {"Err", archive_error_string(a)}; return QVector<QString> {"Err", archive_error_string(a)};
} }

View File

@ -25,6 +25,10 @@
#include <QStringList> #include <QStringList>
#include "CLI.h" #include "CLI.h"
#include "Platform.h"
using Platform::Log;
using Platform::LogLevel;
namespace CLI namespace CLI
{ {
@ -55,7 +59,7 @@ CommandLineOptions* ManageArgs(QApplication& melon)
switch (posargs.size()) switch (posargs.size())
{ {
default: default:
printf("Too many positional arguments; ignoring 3 onwards\n"); Log(LogLevel::Warn, "Too many positional arguments; ignoring 3 onwards\n");
case 2: case 2:
options->gbaRomPath = posargs[1]; options->gbaRomPath = posargs[1];
case 1: case 1:
@ -79,7 +83,7 @@ CommandLineOptions* ManageArgs(QApplication& melon)
} }
else else
{ {
printf("ERROR: -b/--boot only accepts auto/always/never as arguments\n"); Log(LogLevel::Error, "ERROR: -b/--boot only accepts auto/always/never as arguments\n");
exit(1); exit(1);
} }

View File

@ -29,6 +29,8 @@
#include "CheatsDialog.h" #include "CheatsDialog.h"
#include "ui_CheatsDialog.h" #include "ui_CheatsDialog.h"
using Platform::Log;
using Platform::LogLevel;
CheatsDialog* CheatsDialog::currentDlg = nullptr; CheatsDialog* CheatsDialog::currentDlg = nullptr;
@ -150,7 +152,7 @@ void CheatsDialog::on_btnNewARCode_clicked()
} }
else else
{ {
printf("what?? :(\n"); Log(LogLevel::Warn, "what?? :(\n");
return; return;
} }

View File

@ -24,6 +24,7 @@
#include <SDL2/SDL.h> #include <SDL2/SDL.h>
#include "Input.h" #include "Input.h"
#include "Platform.h"
class KeyMapButton : public QPushButton class KeyMapButton : public QPushButton
{ {
@ -51,7 +52,7 @@ protected:
{ {
if (!isChecked()) return QPushButton::keyPressEvent(event); if (!isChecked()) return QPushButton::keyPressEvent(event);
printf("KEY PRESSED = %08X %08X | %08X %08X %08X\n", event->key(), (int)event->modifiers(), event->nativeVirtualKey(), event->nativeModifiers(), event->nativeScanCode()); Platform::Log(Platform::Debug, "KEY PRESSED = %08X %08X | %08X %08X %08X\n", event->key(), (int)event->modifiers(), event->nativeVirtualKey(), event->nativeModifiers(), event->nativeScanCode());
int key = event->key(); int key = event->key();
int mod = event->modifiers(); int mod = event->modifiers();

View File

@ -26,6 +26,7 @@
#include "../Wifi.h" #include "../Wifi.h"
#include "LAN_PCap.h" #include "LAN_PCap.h"
#include "Config.h" #include "Config.h"
#include "Platform.h"
#ifdef __WIN32__ #ifdef __WIN32__
#include <iphlpapi.h> #include <iphlpapi.h>
@ -41,6 +42,8 @@
#endif #endif
#endif #endif
using Platform::Log;
using Platform::LogLevel;
// welp // welp
#ifndef PCAP_OPENFLAG_PROMISCUOUS #ifndef PCAP_OPENFLAG_PROMISCUOUS
@ -136,14 +139,14 @@ bool Init(bool open_adapter)
continue; continue;
} }
printf("PCap: lib %s, init successful\n", PCapLibNames[i]); Log(LogLevel::Info, "PCap: lib %s, init successful\n", PCapLibNames[i]);
PCapLib = lib; PCapLib = lib;
break; break;
} }
if (PCapLib == NULL) if (PCapLib == NULL)
{ {
printf("PCap: init failed\n"); Log(LogLevel::Error, "PCap: init failed\n");
return false; return false;
} }
} }
@ -155,7 +158,7 @@ bool Init(bool open_adapter)
ret = pcap_findalldevs(&alldevs, errbuf); ret = pcap_findalldevs(&alldevs, errbuf);
if (ret < 0 || alldevs == NULL) if (ret < 0 || alldevs == NULL)
{ {
printf("PCap: no devices available\n"); Log(LogLevel::Warn, "PCap: no devices available\n");
return false; return false;
} }
@ -202,7 +205,7 @@ bool Init(bool open_adapter)
} }
if (uret != ERROR_SUCCESS) if (uret != ERROR_SUCCESS)
{ {
printf("GetAdaptersAddresses() shat itself: %08X\n", uret); Log(LogLevel::Error, "GetAdaptersAddresses() shat itself: %08X\n", uret);
return false; return false;
} }
@ -226,7 +229,7 @@ bool Init(bool open_adapter)
if (addr->PhysicalAddressLength != 6) if (addr->PhysicalAddressLength != 6)
{ {
printf("weird MAC addr length %d for %s\n", addr->PhysicalAddressLength, addr->AdapterName); Log(LogLevel::Warn, "weird MAC addr length %d for %s\n", addr->PhysicalAddressLength, addr->AdapterName);
} }
else else
memcpy(adata->MAC, addr->PhysicalAddress, 6); memcpy(adata->MAC, addr->PhysicalAddress, 6);
@ -255,7 +258,7 @@ bool Init(bool open_adapter)
struct ifaddrs* addrs; struct ifaddrs* addrs;
if (getifaddrs(&addrs) != 0) if (getifaddrs(&addrs) != 0)
{ {
printf("getifaddrs() shat itself :(\n"); Log(LogLevel::Error, "getifaddrs() shat itself :(\n");
return false; return false;
} }
@ -273,7 +276,7 @@ bool Init(bool open_adapter)
if (!curaddr->ifa_addr) if (!curaddr->ifa_addr)
{ {
printf("Device (%s) does not have an address :/\n", curaddr->ifa_name); Log(LogLevel::Error, "Device (%s) does not have an address :/\n", curaddr->ifa_name);
curaddr = curaddr->ifa_next; curaddr = curaddr->ifa_next;
continue; continue;
} }
@ -289,7 +292,7 @@ bool Init(bool open_adapter)
{ {
struct sockaddr_ll* sa = (sockaddr_ll*)curaddr->ifa_addr; struct sockaddr_ll* sa = (sockaddr_ll*)curaddr->ifa_addr;
if (sa->sll_halen != 6) if (sa->sll_halen != 6)
printf("weird MAC length %d for %s\n", sa->sll_halen, curaddr->ifa_name); Log(LogLevel::Warn, "weird MAC length %d for %s\n", sa->sll_halen, curaddr->ifa_name);
else else
memcpy(adata->MAC, sa->sll_addr, 6); memcpy(adata->MAC, sa->sll_addr, 6);
} }
@ -298,7 +301,7 @@ bool Init(bool open_adapter)
{ {
struct sockaddr_dl* sa = (sockaddr_dl*)curaddr->ifa_addr; struct sockaddr_dl* sa = (sockaddr_dl*)curaddr->ifa_addr;
if (sa->sdl_alen != 6) if (sa->sdl_alen != 6)
printf("weird MAC length %d for %s\n", sa->sdl_alen, curaddr->ifa_name); Log(LogLevel::Warn, "weird MAC length %d for %s\n", sa->sdl_alen, curaddr->ifa_name);
else else
memcpy(adata->MAC, LLADDR(sa), 6); memcpy(adata->MAC, LLADDR(sa), 6);
} }
@ -326,7 +329,7 @@ bool Init(bool open_adapter)
PCapAdapter = pcap_open_live(dev->name, 2048, PCAP_OPENFLAG_PROMISCUOUS, 1, errbuf); PCapAdapter = pcap_open_live(dev->name, 2048, PCAP_OPENFLAG_PROMISCUOUS, 1, errbuf);
if (!PCapAdapter) if (!PCapAdapter)
{ {
printf("PCap: failed to open adapter %s\n", errbuf); Log(LogLevel::Error, "PCap: failed to open adapter %s\n", errbuf);
return false; return false;
} }
@ -334,7 +337,7 @@ bool Init(bool open_adapter)
if (pcap_setnonblock(PCapAdapter, 1, errbuf) < 0) if (pcap_setnonblock(PCapAdapter, 1, errbuf) < 0)
{ {
printf("PCap: failed to set nonblocking mode\n"); Log(LogLevel::Error, "PCap: failed to set nonblocking mode\n");
pcap_close(PCapAdapter); PCapAdapter = NULL; pcap_close(PCapAdapter); PCapAdapter = NULL;
return false; return false;
} }
@ -376,7 +379,7 @@ int SendPacket(u8* data, int len)
if (len > 2048) if (len > 2048)
{ {
printf("LAN_SendPacket: error: packet too long (%d)\n", len); Log(LogLevel::Error, "LAN_SendPacket: error: packet too long (%d)\n", len);
return 0; return 0;
} }

View File

@ -36,7 +36,10 @@
#include "Config.h" #include "Config.h"
#include "LocalMP.h" #include "LocalMP.h"
#include "Platform.h"
using Platform::Log;
using Platform::LogLevel;
namespace LocalMP namespace LocalMP
{ {
@ -239,10 +242,10 @@ bool Init()
if (!MPQueue->attach()) if (!MPQueue->attach())
{ {
printf("MP sharedmem doesn't exist. creating\n"); Log(LogLevel::Info, "MP sharedmem doesn't exist. creating\n");
if (!MPQueue->create(kQueueSize)) if (!MPQueue->create(kQueueSize))
{ {
printf("MP sharedmem create failed :(\n"); Log(LogLevel::Error, "MP sharedmem create failed :(\n");
return false; return false;
} }
@ -285,7 +288,7 @@ bool Init()
LastHostID = -1; LastHostID = -1;
printf("MP comm init OK, instance ID %d\n", InstanceID); Log(LogLevel::Info, "MP comm init OK, instance ID %d\n", InstanceID);
RecvTimeout = 25; RecvTimeout = 25;
@ -478,7 +481,7 @@ int RecvPacketGeneric(u8* packet, bool block, u64* timestamp)
if (pktheader.Magic != 0x4946494E) if (pktheader.Magic != 0x4946494E)
{ {
printf("PACKET FIFO OVERFLOW\n"); Log(LogLevel::Warn, "PACKET FIFO OVERFLOW\n");
PacketReadOffset = header->PacketWriteOffset; PacketReadOffset = header->PacketWriteOffset;
SemReset(InstanceID); SemReset(InstanceID);
MPQueue->unlock(); MPQueue->unlock();
@ -590,7 +593,7 @@ u16 RecvReplies(u8* packets, u64 timestamp, u16 aidmask)
if (pktheader.Magic != 0x4946494E) if (pktheader.Magic != 0x4946494E)
{ {
printf("REPLY FIFO OVERFLOW\n"); Log(LogLevel::Warn, "REPLY FIFO OVERFLOW\n");
ReplyReadOffset = header->ReplyWriteOffset; ReplyReadOffset = header->ReplyWriteOffset;
SemReset(16+InstanceID); SemReset(16+InstanceID);
MPQueue->unlock(); MPQueue->unlock();

View File

@ -60,10 +60,10 @@ void IPCInit()
if (!IPCBuffer->attach()) if (!IPCBuffer->attach())
{ {
printf("IPC sharedmem doesn't exist. creating\n"); Log(LogLevel::Info, "IPC sharedmem doesn't exist. creating\n");
if (!IPCBuffer->create(1024)) if (!IPCBuffer->create(1024))
{ {
printf("IPC sharedmem create failed :(\n"); Log(LogLevel::Error, "IPC sharedmem create failed :(\n");
delete IPCBuffer; delete IPCBuffer;
IPCBuffer = nullptr; IPCBuffer = nullptr;
return; return;
@ -88,7 +88,7 @@ void IPCInit()
} }
IPCBuffer->unlock(); IPCBuffer->unlock();
printf("IPC: instance ID %d\n", IPCInstanceID); Log(LogLevel::Info, "IPC: instance ID %d\n", IPCInstanceID);
} }
void IPCDeInit() void IPCDeInit()
@ -349,6 +349,17 @@ FILE* OpenLocalFile(std::string path, std::string mode)
return OpenFile(fullpath.toStdString(), mode, mode[0] != 'w'); return OpenFile(fullpath.toStdString(), mode, mode[0] != 'w');
} }
void Log(LogLevel level, const char* fmt, ...)
{
if (fmt == nullptr)
return;
va_list args;
va_start(args, fmt);
vprintf(fmt, args);
va_end(args);
}
Thread* Thread_Create(std::function<void()> func) Thread* Thread_Create(std::function<void()> func)
{ {
QThread* t = QThread::create(func); QThread* t = QThread::create(func);

View File

@ -22,6 +22,8 @@
#include "SaveManager.h" #include "SaveManager.h"
#include "Platform.h" #include "Platform.h"
using Platform::Log;
using Platform::LogLevel;
SaveManager::SaveManager(std::string path) : QThread() SaveManager::SaveManager(std::string path) : QThread()
{ {
@ -122,7 +124,7 @@ void SaveManager::CheckFlush()
SecondaryBufferLock->lock(); SecondaryBufferLock->lock();
printf("SaveManager: Flush requested\n"); Log(LogLevel::Info, "SaveManager: Flush requested\n");
if (SecondaryBufferLength != Length) if (SecondaryBufferLength != Length)
{ {
@ -178,7 +180,7 @@ void SaveManager::FlushSecondaryBuffer(u8* dst, u32 dstLength)
FILE* f = Platform::OpenFile(Path, "wb"); FILE* f = Platform::OpenFile(Path, "wb");
if (f) if (f)
{ {
printf("SaveManager: Written\n"); Log(LogLevel::Info, "SaveManager: Written\n");
fwrite(SecondaryBuffer, SecondaryBufferLength, 1, f); fwrite(SecondaryBuffer, SecondaryBufferLength, 1, f);
fclose(f); fclose(f);
} }

View File

@ -30,6 +30,8 @@
#include "ui_TitleManagerDialog.h" #include "ui_TitleManagerDialog.h"
#include "ui_TitleImportDialog.h" #include "ui_TitleImportDialog.h"
using Platform::Log;
using Platform::LogLevel;
bool TitleManagerDialog::NANDInited = false; bool TitleManagerDialog::NANDInited = false;
TitleManagerDialog* TitleManagerDialog::currentDlg = nullptr; TitleManagerDialog* TitleManagerDialog::currentDlg = nullptr;
@ -262,7 +264,7 @@ void TitleManagerDialog::onImportTitleData()
QListWidgetItem* cur = ui->lstTitleList->currentItem(); QListWidgetItem* cur = ui->lstTitleList->currentItem();
if (!cur) if (!cur)
{ {
printf("what??\n"); Log(LogLevel::Error, "what??\n");
return; return;
} }
@ -283,7 +285,7 @@ void TitleManagerDialog::onImportTitleData()
wantedsize = cur->data(Qt::UserRole+3).toUInt(); wantedsize = cur->data(Qt::UserRole+3).toUInt();
break; break;
default: default:
printf("what??\n"); Log(LogLevel::Warn, "what??\n");
return; return;
} }
@ -332,7 +334,7 @@ void TitleManagerDialog::onExportTitleData()
QListWidgetItem* cur = ui->lstTitleList->currentItem(); QListWidgetItem* cur = ui->lstTitleList->currentItem();
if (!cur) if (!cur)
{ {
printf("what??\n"); Log(LogLevel::Error, "what??\n");
return; return;
} }
@ -357,7 +359,7 @@ void TitleManagerDialog::onExportTitleData()
wantedsize = cur->data(Qt::UserRole+3).toUInt(); wantedsize = cur->data(Qt::UserRole+3).toUInt();
break; break;
default: default:
printf("what??\n"); Log(LogLevel::Warn, "what??\n");
return; return;
} }