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:
parent
19280cff2d
commit
79dfb8dc8f
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
16
src/ARM.cpp
16
src/ARM.cpp
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)));
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)));
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
47
src/CP15.cpp
47
src/CP15.cpp
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
50
src/DSi.cpp
50
src/DSi.cpp
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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));
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
92
src/NDS.cpp
92
src/NDS.cpp
|
@ -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]);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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]);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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:
|
||||||
|
|
32
src/SPI.cpp
32
src/SPI.cpp
|
@ -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
|
||||||
|
|
21
src/SPU.cpp
21
src/SPU.cpp
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
38
src/Wifi.cpp
38
src/Wifi.cpp
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue