mirror of
https://github.com/LNH-team/pico-loader.git
synced 2026-06-02 09:16:49 +02:00
Initial commit
This commit is contained in:
61
arm7/source/core/Environment.cpp
Normal file
61
arm7/source/core/Environment.cpp
Normal file
@@ -0,0 +1,61 @@
|
||||
#include <nds.h>
|
||||
#include "picoAgbAdapter.h"
|
||||
#include "Environment.h"
|
||||
|
||||
u32 Environment::_flags;
|
||||
|
||||
static bool detectIsNitroEmulator()
|
||||
{
|
||||
u32 agbMemoryAddress = *(vu32*)0x027FFF7C;
|
||||
if (agbMemoryAddress < 0x08000000 || agbMemoryAddress >= 0x0A000000)
|
||||
return false;
|
||||
// u32 monitorRomLoadAddress = *(vu32*)0x027FFF68;
|
||||
// if (monitorRomLoadAddress < 0x02000000 || monitorRomLoadAddress >= 0x02800000)
|
||||
// return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool detectNocashPrintSuppport()
|
||||
{
|
||||
u32 nocashIdentifier = *(vu32*)0x04FFFA00;
|
||||
return nocashIdentifier == 0x67246F6E; //no$g
|
||||
}
|
||||
|
||||
static bool detectPicoAgbAdapter()
|
||||
{
|
||||
REG_EXMEMSTAT &= ~0xFF;
|
||||
return PICO_AGB_IDENTIFIER == PICO_AGB_IDENTIFIER_VALUE;
|
||||
}
|
||||
|
||||
void Environment::Initialize(bool dsiMode)
|
||||
{
|
||||
_flags = ENVIRONMENT_FLAGS_NONE;
|
||||
if (dsiMode)
|
||||
{
|
||||
_flags |= ENVIRONMENT_FLAGS_DSI_MODE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (detectIsNitroEmulator())
|
||||
{
|
||||
_flags |= ENVIRONMENT_FLAGS_IS_NITRO_EMULATOR;
|
||||
_flags |= ENVIRONMENT_FLAGS_JTAG_SEMIHOSTING;
|
||||
|
||||
REG_EXMEMSTAT &= ~0xFF;
|
||||
|
||||
u32 agbMemoryAddress = *(vu32*)0x027FFF7C;
|
||||
if (*(vu32*)(agbMemoryAddress + 0x100) == 0x44495349) //ISID
|
||||
_flags |= ENVIRONMENT_FLAGS_AGB_SEMIHOSTING;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (detectPicoAgbAdapter())
|
||||
_flags |= ENVIRONMENT_FLAGS_PICO_AGB_ADAPTER;
|
||||
}
|
||||
}
|
||||
if (!(_flags & ENVIRONMENT_FLAGS_IS_NITRO_EMULATOR))
|
||||
{
|
||||
if (detectNocashPrintSuppport())
|
||||
_flags |= ENVIRONMENT_FLAGS_NOCASH_PRINT;
|
||||
}
|
||||
}
|
||||
32
arm7/source/core/Environment.h
Normal file
32
arm7/source/core/Environment.h
Normal file
@@ -0,0 +1,32 @@
|
||||
#pragma once
|
||||
|
||||
class Environment
|
||||
{
|
||||
enum EnvironmentFlags : u32
|
||||
{
|
||||
ENVIRONMENT_FLAGS_NONE = 0,
|
||||
|
||||
ENVIRONMENT_FLAGS_DSI_MODE = (1 << 0),
|
||||
ENVIRONMENT_FLAGS_NOCASH_PRINT = (1 << 1),
|
||||
ENVIRONMENT_FLAGS_IS_NITRO_EMULATOR = (1 << 2),
|
||||
ENVIRONMENT_FLAGS_JTAG_SEMIHOSTING = (1 << 3),
|
||||
ENVIRONMENT_FLAGS_AGB_SEMIHOSTING = (1 << 4),
|
||||
ENVIRONMENT_FLAGS_DLDI = (1 << 5),
|
||||
ENVIRONMENT_FLAGS_ARGV = (1 << 6),
|
||||
ENVIRONMENT_FLAGS_PICO_AGB_ADAPTER = (1 << 7)
|
||||
};
|
||||
|
||||
static u32 _flags;
|
||||
|
||||
public:
|
||||
static void Initialize(bool dsiMode);
|
||||
|
||||
static inline bool IsDsiMode() { return _flags & ENVIRONMENT_FLAGS_DSI_MODE; }
|
||||
static inline bool SupportsNocashPrint() { return _flags & ENVIRONMENT_FLAGS_NOCASH_PRINT; }
|
||||
static inline bool IsIsNitroEmulator() { return _flags & ENVIRONMENT_FLAGS_IS_NITRO_EMULATOR; }
|
||||
static inline bool SupportsJtagSemihosting() { return _flags & ENVIRONMENT_FLAGS_JTAG_SEMIHOSTING; }
|
||||
static inline bool SupportsAgbSemihosting() { return _flags & ENVIRONMENT_FLAGS_AGB_SEMIHOSTING; }
|
||||
static inline bool SupportsDldi() { return _flags & ENVIRONMENT_FLAGS_DLDI; }
|
||||
static inline bool SupportsArgv() { return _flags & ENVIRONMENT_FLAGS_ARGV; }
|
||||
static inline bool HasPicoAgbAdapter() { return _flags & ENVIRONMENT_FLAGS_PICO_AGB_ADAPTER; }
|
||||
};
|
||||
Reference in New Issue
Block a user