Initial commit

This commit is contained in:
Gericom
2025-11-22 11:08:28 +01:00
commit 9cf3ffbfcf
358 changed files with 58350 additions and 0 deletions

32
common/logger/ILogger.h Normal file
View File

@@ -0,0 +1,32 @@
#pragma once
#include <stdarg.h>
enum class LogLevel
{
Off,
Fatal,
Error,
Warning,
Info,
Debug,
Trace,
All
};
class ILogger
{
public:
virtual ~ILogger() { }
void Log(LogLevel level, const char* fmt, ...)
{
va_list vlist;
va_start(vlist, fmt);
LogV(level, fmt, vlist);
va_end(vlist);
}
virtual void LogV(LogLevel level, const char* fmt, va_list vlist) = 0;
};

View File

@@ -0,0 +1,10 @@
#pragma once
class IOutputStream
{
public:
virtual ~IOutputStream() { }
virtual void Write(const char* str) = 0;
virtual void Flush() = 0;
};

View File

@@ -0,0 +1,8 @@
#pragma once
#include "ILogger.h"
class NullLogger : public ILogger
{
public:
void LogV(LogLevel level, const char* fmt, va_list vlist) override { }
};

View File

@@ -0,0 +1,9 @@
#pragma once
#include "IOutputStream.h"
class NullOutputStream : public IOutputStream
{
public:
void Write(const char* str) { }
void Flush() { }
};

View File

@@ -0,0 +1,26 @@
#include <nds.h>
#include "picoAgbAdapter.h"
#include "PicoAgbAdapterOutputStream.h"
void PicoAgbAdapterOutputStream::Write(const char* str)
{
char c;
vu16* ring = PICO_AGB_PRINT_ARM9_RING;
u32 writePtr = PICO_AGB_PRINT_ARM9_WRITE_PTR;
u32 readPtr = PICO_AGB_PRINT_ARM9_READ_PTR;
while ((c = *str++) != 0)
{
u32 newWritePtr = (writePtr + 1) & (PICO_AGB_PRINT_RING_LENGTH - 1);
while (newWritePtr == readPtr)
{
PICO_AGB_PRINT_ARM9_WRITE_PTR = writePtr;
readPtr = PICO_AGB_PRINT_ARM9_READ_PTR;
}
if (writePtr & 1)
ring[writePtr >> 1] = (ring[writePtr >> 1] & 0xFF) | (c << 8);
else
ring[writePtr >> 1] = (ring[writePtr >> 1] & 0xFF00) | c;
writePtr = newWritePtr;
}
PICO_AGB_PRINT_ARM9_WRITE_PTR = writePtr;
}

View File

@@ -0,0 +1,11 @@
#pragma once
#include "IOutputStream.h"
class PicoAgbAdapterOutputStream : public IOutputStream
{
public:
PicoAgbAdapterOutputStream() { }
void Write(const char* str) override;
void Flush() override { }
};