mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-08-20 13:24:40 -04:00
shieldD revolution OS mostly done (#2892)
* begin revolution sdk setup * wii rvl test * revo OS mostly done for shieldD
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
#ifndef _REVOLUTION_PPCARCH
|
||||
#define _REVOLUTION_PPCARCH
|
||||
|
||||
#include "dolphin/types.h"
|
||||
#include "revolution/types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -508,6 +508,7 @@ void PPCMtpmc1(u32 newPmc1);
|
||||
void PPCMtpmc2(u32 newPmc1);
|
||||
void PPCMtpmc3(u32 newPmc1);
|
||||
void PPCMtpmc4(u32 newPmc1);
|
||||
void PPCMthid4(u32);
|
||||
void PPCMtmmcr0(u32 newMmcr0);
|
||||
void PPCMtmmcr1(u32 newMmcr0);
|
||||
void PPCMtdmaU(u32 newdmau);
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define _REVOLUTION_DVD_H_
|
||||
|
||||
#include <revolution/types.h>
|
||||
#include <revolution/esp.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -136,6 +137,26 @@ typedef struct DVDDriveInfo {
|
||||
/* 0x08 */ u8 padding[24];
|
||||
} DVDDriveInfo;
|
||||
|
||||
typedef struct DVDGamePartition {
|
||||
ESTicket ticket;
|
||||
u32 tmdSize;
|
||||
ESTitleMeta* tmd;
|
||||
u32 certBlobSize;
|
||||
void* certBlob;
|
||||
u8* h3Hashes;
|
||||
u8* encryptedArea;
|
||||
} DVDGamePartition;
|
||||
|
||||
typedef struct DVDPartitionInfo {
|
||||
DVDGamePartition* gamePartition;
|
||||
u32 type;
|
||||
} DVDPartitionInfo;
|
||||
|
||||
typedef struct DVDGameTOC {
|
||||
u32 numGamePartitions;
|
||||
DVDPartitionInfo* partitionInfos;
|
||||
} DVDGameTOC;
|
||||
|
||||
// DVD
|
||||
void DVDInit(void);
|
||||
int DVDReadAbsAsyncPrio(DVDCommandBlock* block, void* addr, s32 length, s32 offset, DVDCBCallback callback, s32 prio);
|
||||
@@ -229,6 +250,13 @@ u32 DVDLowGetCoverStatus(void);
|
||||
// DVD QUEUE
|
||||
void DVDDumpWaitingQueue(void);
|
||||
|
||||
|
||||
// unsorted revo
|
||||
BOOL DVDLowUnencryptedRead(void*, u32, u32, DVDLowCallback);
|
||||
BOOL DVDLowClosePartition(DVDLowCallback);
|
||||
BOOL DVDLowOpenPartitionWithTmdAndTicketView(const u32, const ESTicketView* const, const u32, const ESTitleMeta* const, const u32, const u8* const, DVDLowCallback);
|
||||
BOOL DVDLowOpenPartition(const u32, const ESTicket* const, const u32, const u8* const, ESTitleMeta*, DVDLowCallback);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
#ifndef ESP_H
|
||||
#define ESP_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <revolution/types.h>
|
||||
#include <revolution/private/iostypes.h>
|
||||
|
||||
typedef u32 ESId;
|
||||
typedef u32 ESContentId;
|
||||
typedef u64 ESTitleId;
|
||||
typedef u64 ESTicketId;
|
||||
typedef u8 ESVersion;
|
||||
typedef u16 ESTitleVersion;
|
||||
typedef ESTitleId ESSysVersion;
|
||||
typedef u32 ESTitleType;
|
||||
typedef u16 ESContentType;
|
||||
typedef u8 ESTmdReserved[62];
|
||||
typedef u8 ESTicketReserved[48];
|
||||
typedef u8 ESSysAccessMask[2];
|
||||
typedef u8 ESCidxMask[64];
|
||||
|
||||
#pragma pack(push, 4)
|
||||
|
||||
typedef struct {
|
||||
ESVersion version;
|
||||
ESSysVersion sysVersion;
|
||||
ESTitleId titleId;
|
||||
ESTitleType type;
|
||||
u16 groupId;
|
||||
ESTmdReserved reserved;
|
||||
ESTitleVersion titleVersion;
|
||||
u16 numContents;
|
||||
} ESTmdViewHeader;
|
||||
|
||||
typedef struct {
|
||||
ESContentId cid;
|
||||
u16 index;
|
||||
ESContentType type;
|
||||
u64 size;
|
||||
} ESCmdView;
|
||||
|
||||
typedef struct {
|
||||
u32 code;
|
||||
u32 limit;
|
||||
} ESLpEntry;
|
||||
|
||||
typedef struct {
|
||||
ESVersion version;
|
||||
ESTicketId ticketID;
|
||||
ESId devID;
|
||||
ESTitleId titleID;
|
||||
ESSysAccessMask sysAccessMask;
|
||||
u16 ticketVer;
|
||||
u32 accTitleID;
|
||||
u32 accTitleMask;
|
||||
u8 license;
|
||||
ESTicketReserved reserved;
|
||||
u8 audit;
|
||||
ESCidxMask cidxMask;
|
||||
ESLpEntry limits[8];
|
||||
} ESTicketView;
|
||||
|
||||
typedef struct {
|
||||
ESTmdViewHeader head;
|
||||
ESCmdView contents[512];
|
||||
} ESTmdView;
|
||||
|
||||
typedef struct {
|
||||
ESContentId cid;
|
||||
u16 index;
|
||||
ESContentType type;
|
||||
u64 size;
|
||||
IOSCHash hash;
|
||||
} ESContentMeta;
|
||||
|
||||
typedef struct {
|
||||
ESVersion version;
|
||||
ESVersion caCrlVersion;
|
||||
ESVersion signerCrlVersion;
|
||||
ESSysVersion sysVersion;
|
||||
ESTitleId titleId;
|
||||
ESTitleType type;
|
||||
u16 groupId;
|
||||
ESTmdReserved reserved;
|
||||
u32 accessRights;
|
||||
ESTitleVersion titleVersion;
|
||||
u16 numContents;
|
||||
u16 bootIndex;
|
||||
} ESTitleMetaHeader;
|
||||
|
||||
typedef struct {
|
||||
IOSCSigRsa2048 sig;
|
||||
ESTitleMetaHeader head;
|
||||
ESContentMeta contents[512];
|
||||
} ESTitleMeta;
|
||||
|
||||
typedef struct {
|
||||
IOSCSigRsa2048 sig;
|
||||
IOSCEccPublicKey serverPubKey;
|
||||
ESVersion version;
|
||||
ESVersion caCrlVersion;
|
||||
ESVersion signerCrlVersion;
|
||||
IOSCAesKey titleKey;
|
||||
ESTicketId ticketId;
|
||||
ESId deviceId;
|
||||
ESTitleId titleId;
|
||||
ESSysAccessMask sysAccessMask;
|
||||
u16 ticketVersion;
|
||||
u32 accessTitleId;
|
||||
u32 accessTitleMask;
|
||||
u8 licenseType;
|
||||
ESTicketReserved reserved;
|
||||
u8 audit;
|
||||
ESCidxMask cidxMask;
|
||||
ESLpEntry limits[8];
|
||||
} ESTicket;
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
s32 ESP_InitLib(void);
|
||||
s32 ESP_CloseLib(void);
|
||||
s32 ESP_LaunchTitle(u64, ESTicketView*);
|
||||
s32 ESP_GetTicketViews(ESTitleId, ESTicketView*, u32*);
|
||||
s32 ESP_DiGetTicketView(const void*, ESTicketView*);
|
||||
s32 ESP_DiGetTmd(ESTitleMeta*, u32*);
|
||||
s32 ESP_GetTmdView(ESTitleId, ESTmdView*, u32*);
|
||||
s32 ESP_GetDataDir(ESTitleId, char*);
|
||||
s32 ESP_GetTitleId(ESTitleId*);
|
||||
s32 ESP_GetConsumption(ESTicketId, ESLpEntry*, u32*);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // ESP_H
|
||||
@@ -8,19 +8,21 @@ volatile u16 __VIRegs[59] AT_ADDRESS(0xCC002000);
|
||||
volatile u32 __PIRegs[12] AT_ADDRESS(0xCC003000);
|
||||
volatile u16 __MEMRegs[64] AT_ADDRESS(0xCC004000);
|
||||
volatile u16 __DSPRegs[] AT_ADDRESS(0xCC005000);
|
||||
volatile u32 __DIRegs[] AT_ADDRESS(0xCC006000);
|
||||
volatile u32 __DIRegs[] AT_ADDRESS(0xCD006000);
|
||||
volatile u32 __SIRegs[0x100] AT_ADDRESS(0xCC006400);
|
||||
volatile u32 __EXIRegs[0x40] AT_ADDRESS(0xCC006800);
|
||||
volatile u32 __AIRegs[8] AT_ADDRESS(0xCC006C00);
|
||||
volatile u32 __EXIRegs[0x40] AT_ADDRESS(0xCD006800);
|
||||
volatile u32 __AIRegs[8] AT_ADDRESS(0xCD006C00);
|
||||
volatile u32 __IPCRegs[4] AT_ADDRESS(0xCD000000);
|
||||
#else
|
||||
#define __VIRegs ((volatile u16 *)0xCC002000)
|
||||
#define __PIRegs ((volatile u32 *)0xCC003000)
|
||||
#define __MEMRegs ((volatile u16 *)0xCC004000)
|
||||
#define __DSPRegs ((volatile u16 *)0xCC005000)
|
||||
#define __DIRegs ((volatile u32 *)0xCC006000)
|
||||
#define __DIRegs ((volatile u32 *)0xCD006000)
|
||||
#define __SIRegs ((volatile u32 *)0xCC006400)
|
||||
#define __EXIRegs ((volatile u32 *)0xCC006800)
|
||||
#define __AIRegs ((volatile u32 *)0xCC006C00)
|
||||
#define __EXIRegs ((volatile u32 *)0xCD006800)
|
||||
#define __AIRegs ((volatile u32 *)0xCD006C00)
|
||||
#define __IPCRegs ((volatile u32 *)0xCD000000)
|
||||
#endif
|
||||
|
||||
// Offsets for __VIRegs
|
||||
|
||||
@@ -0,0 +1,167 @@
|
||||
#ifndef _REVOLUTION_NAND_H_
|
||||
#define _REVOLUTION_NAND_H_
|
||||
|
||||
#include <revolution/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define NAND_RESULT_OK 0
|
||||
#define NAND_RESULT_ACCESS (-1)
|
||||
#define NAND_RESULT_ALLOC_FAILED (-2)
|
||||
#define NAND_RESULT_BUSY (-3)
|
||||
#define NAND_RESULT_CORRUPT (-4)
|
||||
#define NAND_RESULT_ECC_CRIT (-5)
|
||||
#define NAND_RESULT_EXISTS (-6)
|
||||
#define NAND_RESULT_INVALID (-8)
|
||||
#define NAND_RESULT_MAXBLOCKS (-9)
|
||||
#define NAND_RESULT_MAXFD (-10)
|
||||
#define NAND_RESULT_MAXFILES (-11)
|
||||
#define NAND_RESULT_NOEXISTS (-12)
|
||||
#define NAND_RESULT_NOTEMPTY (-13)
|
||||
#define NAND_RESULT_OPENFD (-14)
|
||||
#define NAND_RESULT_AUTHENTICATION (-15)
|
||||
#define NAND_RESULT_MAXDEPTH (-16)
|
||||
#define NAND_RESULT_UNKNOWN (-64)
|
||||
#define NAND_RESULT_FATAL_ERROR (-128)
|
||||
|
||||
#define NAND_MAX_PATH 64
|
||||
|
||||
#define NAND_CHECK_HOME_INSSPACE 0x00000001
|
||||
#define NAND_CHECK_HOME_INSINODE 0x00000002
|
||||
#define NAND_CHECK_SYS_INSSPACE 0x00000004
|
||||
#define NAND_CHECK_SYS_INSINODE 0x00000008
|
||||
|
||||
typedef enum {
|
||||
NAND_ACCESS_NONE,
|
||||
NAND_ACCESS_READ,
|
||||
NAND_ACCESS_WRITE,
|
||||
NAND_ACCESS_RW
|
||||
} NANDAccessType;
|
||||
|
||||
typedef enum {
|
||||
// Read/write by owner
|
||||
NAND_PERM_RUSR = (NAND_ACCESS_READ << 4),
|
||||
NAND_PERM_WUSR = (NAND_ACCESS_WRITE << 4),
|
||||
// Read/write by group
|
||||
NAND_PERM_RGRP = (NAND_ACCESS_READ << 2),
|
||||
NAND_PERM_WGRP = (NAND_ACCESS_WRITE << 2),
|
||||
// Read/write by other
|
||||
NAND_PERM_ROTH = (NAND_ACCESS_READ << 0),
|
||||
NAND_PERM_WOTH = (NAND_ACCESS_WRITE << 0),
|
||||
// Read/write by all
|
||||
NAND_PERM_RALL = NAND_PERM_RUSR | NAND_PERM_RGRP | NAND_PERM_ROTH,
|
||||
NAND_PERM_WALL = NAND_PERM_WUSR | NAND_PERM_WGRP | NAND_PERM_WOTH,
|
||||
NAND_PERM_RWALL = NAND_PERM_RALL | NAND_PERM_WALL
|
||||
} NANDPermission;
|
||||
|
||||
typedef struct NANDFileInfo {
|
||||
s32 fileDescriptor;
|
||||
s32 origFd;
|
||||
char origPath[NAND_MAX_PATH];
|
||||
char tmpPath[NAND_MAX_PATH];
|
||||
u8 accType;
|
||||
u8 stage;
|
||||
u8 mark;
|
||||
} NANDFileInfo;
|
||||
|
||||
typedef struct NANDCommandBlock {
|
||||
void* userData;
|
||||
void* callback;
|
||||
void* fileInfo;
|
||||
void* bytes;
|
||||
void* inodes;
|
||||
void* status;
|
||||
u32 ownerId;
|
||||
u16 groupId;
|
||||
u8 nextStage;
|
||||
u32 attr;
|
||||
u32 ownerAcc;
|
||||
u32 groupAcc;
|
||||
u32 othersAcc;
|
||||
u32 num;
|
||||
char absPath[NAND_MAX_PATH];
|
||||
u32* length;
|
||||
u32* pos;
|
||||
int state;
|
||||
void* copyBuf;
|
||||
u32 bufLength;
|
||||
u8* type;
|
||||
u32 uniqNo;
|
||||
u32 reqBlocks;
|
||||
u32 reqInodes;
|
||||
u32* answer;
|
||||
u32 homeBlocks;
|
||||
u32 homeInodes;
|
||||
u32 userBlocks;
|
||||
u32 userInodes;
|
||||
u32 workBlocks;
|
||||
u32 workInodes;
|
||||
const char* *dir;
|
||||
BOOL simpleFlag;
|
||||
} NANDCommandBlock;
|
||||
|
||||
typedef struct NANDStatus {
|
||||
u32 ownerId;
|
||||
u16 groupId;
|
||||
u8 attribute;
|
||||
u8 permission;
|
||||
} NANDStatus;
|
||||
|
||||
typedef struct {
|
||||
u32 signature;
|
||||
u32 flag;
|
||||
u16 iconSpeed;
|
||||
u8 reserved[22];
|
||||
u16 comment[2][32];
|
||||
u8 bannerTexture[192 * 64 * 2];
|
||||
u8 iconTexture[8][48 * 48 * 2];
|
||||
} NANDBanner;
|
||||
|
||||
typedef void (*NANDCallback)(s32, NANDCommandBlock*);
|
||||
typedef void (*NANDAsyncCallback)(s32 result, struct NANDCommandBlock* block);
|
||||
|
||||
s32 NANDInit(void);
|
||||
|
||||
s32 NANDCreate(const char*, u8, u8);
|
||||
s32 NANDPrivateCreate(const char*, u8, u8);
|
||||
|
||||
s32 NANDOpen(const char*, NANDFileInfo*, u8);
|
||||
s32 NANDPrivateOpen(const char*, NANDFileInfo*, u8);
|
||||
s32 NANDOpenAsync(const char*, NANDFileInfo*, u8, NANDCallback, NANDCommandBlock*);
|
||||
s32 NANDPrivateOpenAsync(const char*, NANDFileInfo*, const u8, NANDCallback, NANDCommandBlock*);
|
||||
|
||||
s32 NANDClose(NANDFileInfo*);
|
||||
s32 NANDCloseAsync(NANDFileInfo*, NANDCallback, NANDCommandBlock*);
|
||||
s32 NANDRead(NANDFileInfo*, void*, u32);
|
||||
s32 NANDReadAsync(NANDFileInfo*, void*, u32, NANDCallback, NANDCommandBlock*);
|
||||
|
||||
s32 NANDGetLength(NANDFileInfo*, u32*);
|
||||
|
||||
s32 NANDDelete(const char*);
|
||||
|
||||
s32 NANDMove(const char*, const char*);
|
||||
|
||||
s32 NANDCheck(u32, u32, u32*);
|
||||
|
||||
s32 NANDWrite(NANDFileInfo*, const void*, u32);
|
||||
s32 NANDWriteAsync(NANDFileInfo*, const void*, u32, NANDCallback, NANDCommandBlock*);
|
||||
|
||||
s32 NANDSeekAsync(NANDFileInfo*, s32, s32, NANDCallback, NANDCommandBlock*);
|
||||
|
||||
s32 NANDPrivateGetStatus(const char*, NANDStatus*);
|
||||
s32 NANDPrivateDelete(const char*);
|
||||
s32 NANDPrivateCreate(const char*, u8, u8);
|
||||
|
||||
s32 NANDGetHomeDir(char[NAND_MAX_PATH]);
|
||||
|
||||
s32 NANDGetStatus(const char*, NANDStatus*);
|
||||
|
||||
s32 NANDSecretGetUsage(const char*, u32*, u32*);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
+31
-11
@@ -42,6 +42,10 @@ typedef u32 OSTick;
|
||||
#include <revolution/os/OSSemaphore.h>
|
||||
#include <revolution/os/OSUtf.h>
|
||||
#include <revolution/os/OSTimer.h>
|
||||
#include <revolution/os/OSPlayTime.h>
|
||||
#include <revolution/os/OSStateFlags.h>
|
||||
#include <revolution/os/OSIpc.h>
|
||||
#include <revolution/os/OSNandbootInfo.h>
|
||||
|
||||
// private macro, maybe shouldn't be defined here?
|
||||
#define OFFSET(addr, align) (((u32)(addr) & ((align)-1)))
|
||||
@@ -96,11 +100,20 @@ void* OSGetArenaHi(void);
|
||||
void* OSGetArenaLo(void);
|
||||
void OSSetArenaHi(void* newHi);
|
||||
void OSSetArenaLo(void* newLo);
|
||||
|
||||
void OSSetMEM1ArenaHi(void* newHi);
|
||||
void OSSetMEM1ArenaLo(void* newLo);
|
||||
void OSSetMEM2ArenaHi(void* newHi);
|
||||
void OSSetMEM2ArenaLo(void* newLo);
|
||||
|
||||
void* OSGetMEM1ArenaLo(void);
|
||||
void* OSGetMEM1ArenaHi(void);
|
||||
void* OSGetMEM2ArenaLo(void);
|
||||
void* OSGetMEM2ArenaHi(void);
|
||||
|
||||
void* OSAllocFromMEM1ArenaLo(u32 size, u32 align);
|
||||
void* OSAllocFromMEM1ArenaHi(u32 size, u32 align);
|
||||
|
||||
u32 OSGetPhysicalMemSize(void);
|
||||
|
||||
void __OSPSInit(void);
|
||||
void __OSFPRInit(void);
|
||||
u32 __OSGetDIConfig(void);
|
||||
@@ -133,6 +146,16 @@ typedef struct OSBootInfo_s {
|
||||
u32 FSTMaxLength;
|
||||
} OSBootInfo;
|
||||
|
||||
typedef struct OSIOSRev {
|
||||
u8 reserved;
|
||||
u8 major;
|
||||
u8 minor;
|
||||
u8 micro;
|
||||
u8 month;
|
||||
u8 date;
|
||||
u16 year;
|
||||
} OSIOSRev;
|
||||
|
||||
typedef struct OSStopwatch {
|
||||
char* name;
|
||||
u32 hits;
|
||||
@@ -187,6 +210,8 @@ BOOL OSRestoreInterrupts(BOOL level);
|
||||
u32 OSGetSoundMode(void);
|
||||
void OSSetSoundMode(u32 mode);
|
||||
|
||||
u8 OSGetAppType(void);
|
||||
|
||||
__declspec(weak) void OSReport(const char* msg, ...);
|
||||
__declspec(weak) void OSVReport(const char* msg, va_list list);
|
||||
__declspec(weak) void OSPanic(const char* file, int line, const char* msg, ...);
|
||||
@@ -243,21 +268,16 @@ void* OSUncachedToCached(void* ucaddr);
|
||||
#define OSUncachedToCached(ucaddr) ((void*) ((u8*)(ucaddr) - (OS_BASE_UNCACHED - OS_BASE_CACHED)))
|
||||
#endif
|
||||
|
||||
#define OSIsMEM1Region(addr) (((u32)(addr) & 0x30000000) == 0x00000000)
|
||||
#define OSIsMEM2Region(addr) (((u32)(addr) & 0x30000000) == 0x10000000)
|
||||
|
||||
// unsorted externs
|
||||
extern OSTime __OSGetSystemTime(void);
|
||||
__declspec(weak) extern int __OSIsGcam;
|
||||
extern OSExecParams __OSRebootParams;
|
||||
extern OSTime __OSStartTime;
|
||||
extern int __OSInIPL;
|
||||
|
||||
// helper for assert line numbers in different revisions
|
||||
#if SDK_REVISION < 1
|
||||
#define LINE(l0, l1, l2) (l0)
|
||||
#elif SDK_REVISION < 2
|
||||
#define LINE(l0, l1, l2) (l1)
|
||||
#else
|
||||
#define LINE(l0, l1, l2) (l2)
|
||||
#endif
|
||||
extern BOOL __OSInReboot;
|
||||
|
||||
#ifdef DEBUG
|
||||
#define ASSERTLINE(line, cond) \
|
||||
|
||||
@@ -17,10 +17,10 @@ struct OSAlarm {
|
||||
OSAlarm* next;
|
||||
OSTime period;
|
||||
OSTime start;
|
||||
void* userData;
|
||||
};
|
||||
|
||||
BOOL OSCheckAlarmQueue(void);
|
||||
void OSInitAlarm(void);
|
||||
void OSCreateAlarm(OSAlarm* alarm);
|
||||
void OSSetAlarm(OSAlarm* alarm, OSTime tick, OSAlarmHandler handler);
|
||||
void OSSetAbsAlarm(OSAlarm* alarm, OSTime time, OSAlarmHandler handler);
|
||||
@@ -28,6 +28,8 @@ void OSSetPeriodicAlarm(OSAlarm* alarm, OSTime start, OSTime period, OSAlarmHand
|
||||
void OSCancelAlarm(OSAlarm *alarm);
|
||||
void OSSetAlarmTag(OSAlarm* alarm, u32 tag);
|
||||
void OSCancelAlarms(u32 tag);
|
||||
void OSSetAlarmUserData(OSAlarm* alarm, void* userData);
|
||||
void* OSGetAlarmUserData(const OSAlarm* alarm);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -38,61 +38,84 @@ typedef u32 OSInterruptMask;
|
||||
#define __OS_INTERRUPT_PI_VI 24
|
||||
#define __OS_INTERRUPT_PI_DEBUG 25
|
||||
#define __OS_INTERRUPT_PI_HSP 26
|
||||
#define __OS_INTERRUPT_PI_ACR 27
|
||||
#define __OS_INTERRUPT_MAX 32
|
||||
|
||||
#define OS_INTERRUPTMASK(interrupt) (0x80000000u >> (interrupt))
|
||||
|
||||
#define OS_INTERRUPTMASK_MEM_0 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_0)
|
||||
#define OS_INTERRUPTMASK_MEM_1 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_1)
|
||||
#define OS_INTERRUPTMASK_MEM_2 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_2)
|
||||
#define OS_INTERRUPTMASK_MEM_3 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_3)
|
||||
#define OS_INTERRUPTMASK_MEM_ADDRESS OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_ADDRESS)
|
||||
#define OS_INTERRUPTMASK_MEM_RESET \
|
||||
(OS_INTERRUPTMASK_MEM_0 | OS_INTERRUPTMASK_MEM_1 | OS_INTERRUPTMASK_MEM_2 | \
|
||||
OS_INTERRUPTMASK_MEM_3)
|
||||
#define OS_INTERRUPTMASK_MEM \
|
||||
(OS_INTERRUPTMASK_MEM_0 | OS_INTERRUPTMASK_MEM_1 | OS_INTERRUPTMASK_MEM_2 | \
|
||||
OS_INTERRUPTMASK_MEM_3 | OS_INTERRUPTMASK_MEM_ADDRESS)
|
||||
#define OS_INTERRUPTMASK_DSP_AI OS_INTERRUPTMASK(__OS_INTERRUPT_DSP_AI)
|
||||
#define OS_INTERRUPTMASK_DSP_ARAM OS_INTERRUPTMASK(__OS_INTERRUPT_DSP_ARAM)
|
||||
#define OS_INTERRUPTMASK_DSP_DSP OS_INTERRUPTMASK(__OS_INTERRUPT_DSP_DSP)
|
||||
#define OS_INTERRUPTMASK_DSP \
|
||||
(OS_INTERRUPTMASK_DSP_AI | OS_INTERRUPTMASK_DSP_ARAM | OS_INTERRUPTMASK_DSP_DSP)
|
||||
#define OS_INTERRUPTMASK_AI_AI OS_INTERRUPTMASK(__OS_INTERRUPT_AI_AI)
|
||||
#define OS_INTERRUPTMASK_AI (OS_INTERRUPTMASK_AI_AI)
|
||||
#define OS_INTERRUPTMASK_EXI_0_EXI OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_0_EXI)
|
||||
#define OS_INTERRUPTMASK_EXI_0_TC OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_0_TC)
|
||||
#define OS_INTERRUPTMASK_EXI_0_EXT OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_0_EXT)
|
||||
#define OS_INTERRUPTMASK_EXI_0 \
|
||||
(OS_INTERRUPTMASK_EXI_0_EXI | OS_INTERRUPTMASK_EXI_0_TC | OS_INTERRUPTMASK_EXI_0_EXT)
|
||||
#define OS_INTERRUPTMASK_EXI_1_EXI OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_1_EXI)
|
||||
#define OS_INTERRUPTMASK_EXI_1_TC OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_1_TC)
|
||||
#define OS_INTERRUPTMASK_EXI_1_EXT OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_1_EXT)
|
||||
#define OS_INTERRUPTMASK_EXI_1 \
|
||||
(OS_INTERRUPTMASK_EXI_1_EXI | OS_INTERRUPTMASK_EXI_1_TC | OS_INTERRUPTMASK_EXI_1_EXT)
|
||||
#define OS_INTERRUPTMASK_EXI_2_EXI OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_2_EXI)
|
||||
#define OS_INTERRUPTMASK_EXI_2_TC OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_2_TC)
|
||||
#define OS_INTERRUPTMASK_EXI_2 (OS_INTERRUPTMASK_EXI_2_EXI | OS_INTERRUPTMASK_EXI_2_TC)
|
||||
#define OS_INTERRUPTMASK_EXI \
|
||||
(OS_INTERRUPTMASK_EXI_0_EXI | OS_INTERRUPTMASK_EXI_0_TC | OS_INTERRUPTMASK_EXI_0_EXT | \
|
||||
OS_INTERRUPTMASK_EXI_1_EXI | OS_INTERRUPTMASK_EXI_1_TC | OS_INTERRUPTMASK_EXI_1_EXT | \
|
||||
OS_INTERRUPTMASK_EXI_2_EXI | OS_INTERRUPTMASK_EXI_2_TC)
|
||||
#define OS_INTERRUPTMASK_PI_PE_TOKEN OS_INTERRUPTMASK(__OS_INTERRUPT_PI_PE_TOKEN)
|
||||
#define OS_INTERRUPTMASK_PI_PE_FINISH OS_INTERRUPTMASK(__OS_INTERRUPT_PI_PE_FINISH)
|
||||
#define OS_INTERRUPTMASK_PI_PE (OS_INTERRUPTMASK_PI_PE_TOKEN | OS_INTERRUPTMASK_PI_PE_FINISH)
|
||||
#define OS_INTERRUPTMASK_PI_CP OS_INTERRUPTMASK(__OS_INTERRUPT_PI_CP)
|
||||
#define OS_INTERRUPTMASK_PI_SI OS_INTERRUPTMASK(__OS_INTERRUPT_PI_SI)
|
||||
#define OS_INTERRUPTMASK_PI_DI OS_INTERRUPTMASK(__OS_INTERRUPT_PI_DI)
|
||||
#define OS_INTERRUPTMASK_PI_RSW OS_INTERRUPTMASK(__OS_INTERRUPT_PI_RSW)
|
||||
#define OS_INTERRUPTMASK_PI_ERROR OS_INTERRUPTMASK(__OS_INTERRUPT_PI_ERROR)
|
||||
#define OS_INTERRUPTMASK_PI_VI OS_INTERRUPTMASK(__OS_INTERRUPT_PI_VI)
|
||||
#define OS_INTERRUPTMASK_PI_DEBUG OS_INTERRUPTMASK(__OS_INTERRUPT_PI_DEBUG)
|
||||
#define OS_INTERRUPTMASK_PI_HSP OS_INTERRUPTMASK(__OS_INTERRUPT_PI_HSP)
|
||||
#define OS_INTERRUPTMASK_PI \
|
||||
(OS_INTERRUPTMASK_PI_CP | OS_INTERRUPTMASK_PI_SI | OS_INTERRUPTMASK_PI_DI | \
|
||||
OS_INTERRUPTMASK_PI_RSW | OS_INTERRUPTMASK_PI_ERROR | OS_INTERRUPTMASK_PI_VI | \
|
||||
OS_INTERRUPTMASK_PI_PE_TOKEN | OS_INTERRUPTMASK_PI_PE_FINISH | OS_INTERRUPTMASK_PI_DEBUG | \
|
||||
OS_INTERRUPTMASK_PI_HSP)
|
||||
#define OS_INTERRUPTMASK_MEM_0 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_0)
|
||||
#define OS_INTERRUPTMASK_MEM_1 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_1)
|
||||
#define OS_INTERRUPTMASK_MEM_2 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_2)
|
||||
#define OS_INTERRUPTMASK_MEM_3 OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_3)
|
||||
#define OS_INTERRUPTMASK_MEM_ADDRESS OS_INTERRUPTMASK(__OS_INTERRUPT_MEM_ADDRESS)
|
||||
#define OS_INTERRUPTMASK_MEM_RESET (OS_INTERRUPTMASK_MEM_0 | \
|
||||
OS_INTERRUPTMASK_MEM_1 | \
|
||||
OS_INTERRUPTMASK_MEM_2 | \
|
||||
OS_INTERRUPTMASK_MEM_3)
|
||||
#define OS_INTERRUPTMASK_MEM (OS_INTERRUPTMASK_MEM_0 | \
|
||||
OS_INTERRUPTMASK_MEM_1 | \
|
||||
OS_INTERRUPTMASK_MEM_2 | \
|
||||
OS_INTERRUPTMASK_MEM_3 | \
|
||||
OS_INTERRUPTMASK_MEM_ADDRESS)
|
||||
#define OS_INTERRUPTMASK_DSP_AI OS_INTERRUPTMASK(__OS_INTERRUPT_DSP_AI)
|
||||
#define OS_INTERRUPTMASK_DSP_ARAM OS_INTERRUPTMASK(__OS_INTERRUPT_DSP_ARAM)
|
||||
#define OS_INTERRUPTMASK_DSP_DSP OS_INTERRUPTMASK(__OS_INTERRUPT_DSP_DSP)
|
||||
#define OS_INTERRUPTMASK_DSP (OS_INTERRUPTMASK_DSP_AI | \
|
||||
OS_INTERRUPTMASK_DSP_ARAM | \
|
||||
OS_INTERRUPTMASK_DSP_DSP)
|
||||
|
||||
#define OS_INTERRUPTMASK_AI_AI OS_INTERRUPTMASK(__OS_INTERRUPT_AI_AI)
|
||||
#define OS_INTERRUPTMASK_AI (OS_INTERRUPTMASK_AI_AI)
|
||||
|
||||
#define OS_INTERRUPTMASK_EXI_0_EXI OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_0_EXI)
|
||||
#define OS_INTERRUPTMASK_EXI_0_TC OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_0_TC)
|
||||
#define OS_INTERRUPTMASK_EXI_0_EXT OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_0_EXT)
|
||||
#define OS_INTERRUPTMASK_EXI_0 (OS_INTERRUPTMASK_EXI_0_EXI | \
|
||||
OS_INTERRUPTMASK_EXI_0_TC | \
|
||||
OS_INTERRUPTMASK_EXI_0_EXT)
|
||||
#define OS_INTERRUPTMASK_EXI_1_EXI OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_1_EXI)
|
||||
#define OS_INTERRUPTMASK_EXI_1_TC OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_1_TC)
|
||||
#define OS_INTERRUPTMASK_EXI_1_EXT OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_1_EXT)
|
||||
#define OS_INTERRUPTMASK_EXI_1 (OS_INTERRUPTMASK_EXI_1_EXI | \
|
||||
OS_INTERRUPTMASK_EXI_1_TC | \
|
||||
OS_INTERRUPTMASK_EXI_1_EXT)
|
||||
#define OS_INTERRUPTMASK_EXI_2_EXI OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_2_EXI)
|
||||
#define OS_INTERRUPTMASK_EXI_2_TC OS_INTERRUPTMASK(__OS_INTERRUPT_EXI_2_TC)
|
||||
#define OS_INTERRUPTMASK_EXI_2 (OS_INTERRUPTMASK_EXI_2_EXI | \
|
||||
OS_INTERRUPTMASK_EXI_2_TC)
|
||||
#define OS_INTERRUPTMASK_EXI (OS_INTERRUPTMASK_EXI_0_EXI | \
|
||||
OS_INTERRUPTMASK_EXI_0_TC | \
|
||||
OS_INTERRUPTMASK_EXI_0_EXT | \
|
||||
OS_INTERRUPTMASK_EXI_1_EXI | \
|
||||
OS_INTERRUPTMASK_EXI_1_TC | \
|
||||
OS_INTERRUPTMASK_EXI_1_EXT | \
|
||||
OS_INTERRUPTMASK_EXI_2_EXI | \
|
||||
OS_INTERRUPTMASK_EXI_2_TC)
|
||||
|
||||
#define OS_INTERRUPTMASK_PI_PE_TOKEN OS_INTERRUPTMASK(__OS_INTERRUPT_PI_PE_TOKEN)
|
||||
#define OS_INTERRUPTMASK_PI_PE_FINISH OS_INTERRUPTMASK(__OS_INTERRUPT_PI_PE_FINISH)
|
||||
#define OS_INTERRUPTMASK_PI_PE (OS_INTERRUPTMASK_PI_PE_TOKEN | \
|
||||
OS_INTERRUPTMASK_PI_PE_FINISH)
|
||||
#define OS_INTERRUPTMASK_PI_CP OS_INTERRUPTMASK(__OS_INTERRUPT_PI_CP)
|
||||
#define OS_INTERRUPTMASK_PI_SI OS_INTERRUPTMASK(__OS_INTERRUPT_PI_SI)
|
||||
#define OS_INTERRUPTMASK_PI_DI OS_INTERRUPTMASK(__OS_INTERRUPT_PI_DI)
|
||||
#define OS_INTERRUPTMASK_PI_RSW OS_INTERRUPTMASK(__OS_INTERRUPT_PI_RSW)
|
||||
#define OS_INTERRUPTMASK_PI_ERROR OS_INTERRUPTMASK(__OS_INTERRUPT_PI_ERROR)
|
||||
#define OS_INTERRUPTMASK_PI_VI OS_INTERRUPTMASK(__OS_INTERRUPT_PI_VI)
|
||||
#define OS_INTERRUPTMASK_PI_DEBUG OS_INTERRUPTMASK(__OS_INTERRUPT_PI_DEBUG)
|
||||
#define OS_INTERRUPTMASK_PI_HSP OS_INTERRUPTMASK(__OS_INTERRUPT_PI_HSP)
|
||||
#define OS_INTERRUPTMASK_PI_ACR OS_INTERRUPTMASK(__OS_INTERRUPT_PI_ACR)
|
||||
#define OS_INTERRUPTMASK_PI (OS_INTERRUPTMASK_PI_CP | \
|
||||
OS_INTERRUPTMASK_PI_SI | \
|
||||
OS_INTERRUPTMASK_PI_DI | \
|
||||
OS_INTERRUPTMASK_PI_RSW | \
|
||||
OS_INTERRUPTMASK_PI_ERROR | \
|
||||
OS_INTERRUPTMASK_PI_VI | \
|
||||
OS_INTERRUPTMASK_PI_PE_TOKEN | \
|
||||
OS_INTERRUPTMASK_PI_PE_FINISH | \
|
||||
OS_INTERRUPTMASK_PI_DEBUG | \
|
||||
OS_INTERRUPTMASK_PI_HSP | \
|
||||
OS_INTERRUPTMASK_PI_ACR )
|
||||
|
||||
typedef void (*__OSInterruptHandler)(__OSInterrupt interrupt, OSContext* context);
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
#ifndef _REVOLUTION_OSIPC_H_
|
||||
#define _REVOLUTION_OSIPC_H_
|
||||
|
||||
#include <revolution/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void* __OSGetIPCBufferHi(void);
|
||||
void* __OSGetIPCBufferLo(void);
|
||||
void __OSInitIPCBuffer(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif // _REVOLUTION_OSIPC_H_
|
||||
@@ -18,8 +18,10 @@ extern "C" {
|
||||
#define OS_PROTECT_CONTROL_RDWR (OS_PROTECT_CONTROL_READ | OS_PROTECT_CONTROL_WRITE)
|
||||
|
||||
void OSProtectRange(u32 chan, void* addr, u32 nBytes, u32 control);
|
||||
u32 OSGetPhysicalMemSize(void);
|
||||
u32 OSGetConsoleSimulatedMemSize(void);
|
||||
u32 OSGetPhysicalMem1Size(void);
|
||||
u32 OSGetPhysicalMem2Size(void);
|
||||
u32 OSGetConsoleSimulatedMem1Size(void);
|
||||
u32 OSGetConsoleSimulatedMem2Size(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -90,10 +90,10 @@ struct OSRel {
|
||||
u32 addend;
|
||||
};
|
||||
|
||||
#define R_REVOLUTION_NOP 201 // C9h current offset += OSRel.offset
|
||||
#define R_REVOLUTION_SECTION 202 // CAh current section = OSRel.section
|
||||
#define R_REVOLUTION_END 203 // CBh
|
||||
#define R_REVOLUTION_MRKREF 204 // CCh
|
||||
#define R_DOLPHIN_NOP 201 // C9h current offset += OSRel.offset
|
||||
#define R_DOLPHIN_SECTION 202 // CAh current section = OSRel.section
|
||||
#define R_DOLPHIN_END 203 // CBh
|
||||
#define R_DOLPHIN_MRKREF 204 // CCh
|
||||
|
||||
void OSSetStringTable(void* stringTable);
|
||||
BOOL OSLink(OSModuleInfo* newModule, void* bss);
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
#ifndef _REVOLUTION_OSNANDBOOT_H_
|
||||
#define _REVOLUTION_OSNANDBOOT_H_
|
||||
|
||||
#include <revolution/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
u32 CheckSum;
|
||||
u32 ArgOffset;
|
||||
u8 reserved[2];
|
||||
u8 LastAppType;
|
||||
u8 ReturnType;
|
||||
u32 ArgValue;
|
||||
u8 padding[8];
|
||||
u64 LastTitleId;
|
||||
u8 args[0x1000];
|
||||
} OSNandbootInfo;
|
||||
|
||||
typedef struct {
|
||||
u32 CheckSum;
|
||||
u32 ArgOffset;
|
||||
u8 reserved[2];
|
||||
u8 LastAppType;
|
||||
u8 ReturnType;
|
||||
u32 ArgValue;
|
||||
u8 padding[8];
|
||||
u64 LastTitleId;
|
||||
} OSNandbootInfoHeader;
|
||||
|
||||
BOOL __OSCreateNandbootInfo(void);
|
||||
BOOL __OSWriteNandbootInfo(OSNandbootInfo*);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // _REVOLUTION_OSNANDBOOT_H_
|
||||
@@ -0,0 +1,19 @@
|
||||
#ifndef OSPLAYRECORD_H
|
||||
#define OSPLAYRECORD_H
|
||||
|
||||
#include <revolution/os.h>
|
||||
|
||||
typedef struct {
|
||||
u32 checkSum;
|
||||
u16 titleName[2][21];
|
||||
OSTime playStartTime;
|
||||
OSTime playTime;
|
||||
char gameCode[4];
|
||||
char companyCode[2];
|
||||
char res[18];
|
||||
} OSPlayRecord;
|
||||
|
||||
void __OSStartPlayRecord(void);
|
||||
void __OSStopPlayRecord(void);
|
||||
|
||||
#endif // OSPLAYRECORD_H
|
||||
@@ -0,0 +1,25 @@
|
||||
#ifndef _REVOLUTION_OSPLAYTIME_H_
|
||||
#define _REVOLUTION_OSPLAYTIME_H_
|
||||
|
||||
#include <revolution/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef enum {
|
||||
OSPLAYTIME_PERMANENT = 0,
|
||||
OSPLAYTIME_LIMITED = 1,
|
||||
OSPLAYTIME_LIMITED_LAUNCH = 4,
|
||||
OSPLAYTIME_OTHER = 9
|
||||
} __OSPlayTimeType;
|
||||
|
||||
typedef void (*OSPlayTimeCallbackFunc)(void);
|
||||
|
||||
BOOL OSPlayTimeIsLimited(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -11,26 +11,30 @@ extern "C" {
|
||||
#define OS_RESET_HOTRESET 1
|
||||
#define OS_RESET_SHUTDOWN 2
|
||||
|
||||
typedef struct OSResetFunctionInfo OSResetFunctionInfo;
|
||||
typedef struct OSResetFunctionQueue {
|
||||
OSResetFunctionInfo* head;
|
||||
OSResetFunctionInfo* tail;
|
||||
} OSResetFunctionQueue;
|
||||
typedef struct OSShutdownFunctionInfo OSShutdownFunctionInfo;
|
||||
typedef struct OSShutdownFunctionQueue {
|
||||
OSShutdownFunctionInfo* head;
|
||||
OSShutdownFunctionInfo* tail;
|
||||
} OSShutdownFunctionQueue;
|
||||
|
||||
typedef BOOL (*OSResetFunction)(BOOL);
|
||||
typedef BOOL (*OSResetFunction)(BOOL, u32);
|
||||
|
||||
struct OSResetFunctionInfo {
|
||||
struct OSShutdownFunctionInfo {
|
||||
OSResetFunction func;
|
||||
u32 priority;
|
||||
OSResetFunctionInfo* next;
|
||||
OSResetFunctionInfo* prev;
|
||||
OSShutdownFunctionInfo* next;
|
||||
OSShutdownFunctionInfo* prev;
|
||||
};
|
||||
|
||||
void OSRegisterResetFunction(OSResetFunctionInfo* info);
|
||||
void OSUnregisterResetFunction(OSResetFunctionInfo* info);
|
||||
void OSRegisterShutdownFunction(OSShutdownFunctionInfo* info);
|
||||
void OSUnregisterShutdownFunction(OSShutdownFunctionInfo* info);
|
||||
void OSResetSystem(int reset, u32 resetCode, BOOL forceMenu);
|
||||
u32 OSGetResetCode();
|
||||
u32 OSSetBootDol(u32 dolOffset);
|
||||
void OSReturnToMenu(void);
|
||||
|
||||
#define OSIsRestart() \
|
||||
((OSGetResetCode() & 0x80000000) ? TRUE : FALSE)
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
typedef void (*OSResetCallback)(void);
|
||||
typedef void (*OSPowerCallback)(void);
|
||||
|
||||
OSResetCallback OSSetResetCallback(OSResetCallback callback);
|
||||
BOOL OSGetResetSwitchState(void);
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
#ifndef _REVOLUTION_OSSTATEFLAGS_H_
|
||||
#define _REVOLUTION_OSSTATEFLAGS_H_
|
||||
|
||||
#include <revolution/types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
u32 checkSum;
|
||||
u8 lastBootApp;
|
||||
u8 lastShutdown;
|
||||
u8 lastDiscState;
|
||||
u8 menuMode;
|
||||
u8 reserved[24];
|
||||
} OSStateFlags;
|
||||
|
||||
BOOL __OSWriteStateFlags(OSStateFlags*);
|
||||
BOOL __OSReadStateFlags(OSStateFlags*);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // OSSTATEFLAGS_H
|
||||
@@ -0,0 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include <revolution/private/iosrestypes.h>
|
||||
#include <revolution/private/iostypes.h>
|
||||
#include <revolution/types.h>
|
||||
|
||||
typedef IOSError (*IOSIpcCb) (IOSError, void *);
|
||||
|
||||
s32 IOS_Read(s32, void*, u32);
|
||||
@@ -0,0 +1,89 @@
|
||||
#pragma once
|
||||
|
||||
#include <revolution/types.h>
|
||||
|
||||
typedef u32 IOSUid;
|
||||
typedef u16 IOSGid;
|
||||
typedef u32 IOSResourceHandle;
|
||||
|
||||
#define IOS_ERROR_OK 0
|
||||
#define IOS_ERROR_ACCESS -1
|
||||
#define IOS_ERROR_EXISTS -2
|
||||
#define IOS_ERROR_INTR -3
|
||||
#define IOS_ERROR_INVALID -4
|
||||
#define IOS_ERROR_MAX -5
|
||||
#define IOS_ERROR_NOEXISTS -6
|
||||
#define IOS_ERROR_QEMPTY -7
|
||||
#define IOS_ERROR_QFULL -8
|
||||
#define IOS_ERROR_UNKNOWN -9
|
||||
#define IOS_ERROR_NOTREADY -10
|
||||
#define IOS_ERROR_ECC -11
|
||||
#define IOS_ERROR_ECC_CRIT -12
|
||||
#define IOS_ERROR_BADBLOCK -13
|
||||
|
||||
#define IOS_ERROR_INVALID_OBJTYPE -14
|
||||
#define IOS_ERROR_INVALID_RNG -15
|
||||
#define IOS_ERROR_INVALID_FLAG -16
|
||||
#define IOS_ERROR_INVALID_FORMAT -17
|
||||
#define IOS_ERROR_INVALID_VERSION -18
|
||||
#define IOS_ERROR_INVALID_SIGNER -19
|
||||
#define IOS_ERROR_FAIL_CHECKVALUE -20
|
||||
#define IOS_ERROR_FAIL_INTERNAL -21
|
||||
#define IOS_ERROR_FAIL_ALLOC -22
|
||||
#define IOS_ERROR_INVALID_SIZE -23
|
||||
|
||||
typedef struct {
|
||||
u8 *path;
|
||||
u32 flags;
|
||||
IOSUid uid;
|
||||
IOSGid gid;
|
||||
} IOSResourceOpen;
|
||||
|
||||
typedef struct {
|
||||
u8 *outPtr;
|
||||
u32 outLen;
|
||||
} IOSResourceRead;
|
||||
|
||||
typedef struct {
|
||||
u8 *inPtr;
|
||||
u32 inLen;
|
||||
} IOSResourceWrite;
|
||||
|
||||
typedef struct {
|
||||
s32 offset;
|
||||
u32 whence;
|
||||
} IOSResourceSeek;
|
||||
|
||||
typedef struct {
|
||||
u32 cmd;
|
||||
u8 *inPtr;
|
||||
u32 inLen;
|
||||
u8 *outPtr;
|
||||
u32 outLen;
|
||||
} IOSResourceIoctl;
|
||||
|
||||
typedef struct {
|
||||
u8 *base;
|
||||
u32 length;
|
||||
} IOSIoVector;
|
||||
|
||||
typedef struct {
|
||||
u32 cmd;
|
||||
u32 readCount;
|
||||
u32 writeCount;
|
||||
IOSIoVector *vector;
|
||||
} IOSResourceIoctlv;
|
||||
|
||||
typedef struct {
|
||||
u32 cmd;
|
||||
s32 status;
|
||||
IOSResourceHandle handle;
|
||||
union {
|
||||
IOSResourceOpen open;
|
||||
IOSResourceRead read;
|
||||
IOSResourceWrite write;
|
||||
IOSResourceSeek seek;
|
||||
IOSResourceIoctl ioctl;
|
||||
IOSResourceIoctlv ioctlv;
|
||||
} args;
|
||||
} IOSResourceRequest;
|
||||
@@ -0,0 +1,43 @@
|
||||
#pragma once
|
||||
|
||||
#include <revolution/types.h>
|
||||
|
||||
typedef s32 IOSError;
|
||||
typedef s32 IOSCid;
|
||||
typedef s32 IOSFd;
|
||||
typedef s32 IOSMessageQueueId;
|
||||
typedef s32 IOSMessage;
|
||||
typedef s32 IOSTimerId;
|
||||
typedef s32 IOSHeapId;
|
||||
typedef s32 IOSThreadId;
|
||||
typedef s32 IOSProcessId;
|
||||
typedef s32 IOSInterfaceId;
|
||||
typedef u32 IOSTime;
|
||||
typedef u32 IOSEvent;
|
||||
|
||||
typedef u8 IOSCName[64];
|
||||
typedef u8 IOSCSigDummy[60];
|
||||
typedef u8 IOSCHash[20];
|
||||
|
||||
typedef u8 CSLOSEccPublicKey[60];
|
||||
typedef u8 CSLOSRsaSig2048[256];
|
||||
|
||||
typedef u8 CSLOSAesKey[16];
|
||||
|
||||
typedef CSLOSEccPublicKey IOSCEccPublicKey;
|
||||
typedef CSLOSRsaSig2048 IOSCRsaSig2048;
|
||||
|
||||
typedef CSLOSAesKey IOSCAesKey;
|
||||
|
||||
typedef enum {
|
||||
IOSC_SIG_RSA4096 = 0x00010000,
|
||||
IOSC_SIG_RSA2048,
|
||||
IOSC_SIG_ECC
|
||||
} IOSCCertSigType;
|
||||
|
||||
typedef struct {
|
||||
IOSCCertSigType sigType;
|
||||
IOSCRsaSig2048 sig;
|
||||
IOSCSigDummy dummy;
|
||||
IOSCName issuer;
|
||||
} IOSCSigRsa2048;
|
||||
+122
-12
@@ -1,31 +1,141 @@
|
||||
#ifndef _REVOLUTION_SC_H_
|
||||
#define _REVOLUTION_SC_H_
|
||||
|
||||
#include <revolution/types.h>
|
||||
#include <revolution/os.h>
|
||||
#include <revolution/nand.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef u8 SCType;
|
||||
|
||||
typedef struct {
|
||||
u8 mode;
|
||||
u8 led;
|
||||
} SCIdleModeInfo;
|
||||
|
||||
typedef struct {
|
||||
union {
|
||||
u8 type_u8;
|
||||
s8 type_s8;
|
||||
u16 type_u16;
|
||||
s16 type_s16;
|
||||
u32 type_u32;
|
||||
s32 type_s32;
|
||||
u64 type_u64;
|
||||
s64 type_s64;
|
||||
u8 longPrecision64[sizeof(u64)];
|
||||
} integer;
|
||||
|
||||
SCType typeInteger;
|
||||
SCType typeByteArray;
|
||||
u32 nameLen;
|
||||
u32 dataSize;
|
||||
char* name;
|
||||
u8* data;
|
||||
u32 packedSize;
|
||||
} SCItem;
|
||||
|
||||
typedef void (*SCReloadConfFileCallback)(s32 result);
|
||||
typedef void (*SCFlushCallback)(u32 result);
|
||||
|
||||
typedef enum {
|
||||
SC_ITEM_ID_IPL_COUNTER_BIAS,
|
||||
SC_ITEM_ID_IPL_ASPECT_RATIO,
|
||||
SC_ITEM_ID_IPL_AUTORUN_MODE,
|
||||
SC_ITEM_ID_IPL_CONFIG_DONE,
|
||||
SC_ITEM_ID_IPL_CONFIG_DONE2,
|
||||
SC_ITEM_ID_IPL_DISPLAY_OFFSET_H,
|
||||
SC_ITEM_ID_IPL_EURGB60_MODE,
|
||||
SC_ITEM_ID_IPL_EULA,
|
||||
SC_ITEM_ID_IPL_FREE_CHANNEL_APP_COUNT,
|
||||
SC_ITEM_ID_IPL_IDLE_MODE,
|
||||
SC_ITEM_ID_IPL_INSTALLED_CHANNEL_APP_COUNT,
|
||||
SC_ITEM_ID_IPL_LANGUAGE,
|
||||
SC_ITEM_ID_IPL_OWNER_NICKNAME,
|
||||
SC_ITEM_ID_IPL_PARENTAL_CONTROL,
|
||||
SC_ITEM_ID_IPL_PROGRESSIVE_MODE,
|
||||
SC_ITEM_ID_IPL_SCREEN_SAVER_MODE,
|
||||
SC_ITEM_ID_IPL_SIMPLE_ADDRESS,
|
||||
SC_ITEM_ID_IPL_SOUND_MODE,
|
||||
SC_ITEM_ID_IPL_UPDATE_TYPE,
|
||||
SC_ITEM_ID_NET_CONFIG,
|
||||
SC_ITEM_ID_NET_CONTENT_RESTRICTIONS,
|
||||
SC_ITEM_ID_NET_PROFILE,
|
||||
SC_ITEM_ID_NET_WC_RESTRICTION,
|
||||
SC_ITEM_ID_NET_WC_FLAGS,
|
||||
SC_ITEM_ID_DEV_BOOT_MODE,
|
||||
SC_ITEM_ID_DEV_VIDEO_MODE,
|
||||
SC_ITEM_ID_DEV_COUNTRY_CODE,
|
||||
SC_ITEM_ID_DEV_DRIVESAVING_MODE,
|
||||
SC_ITEM_ID_BT_DEVICE_INFO,
|
||||
SC_ITEM_ID_BT_CMPDEV_INFO,
|
||||
SC_ITEM_ID_BT_DPD_SENSIBILITY,
|
||||
SC_ITEM_ID_BT_SPEAKER_VOLUME,
|
||||
SC_ITEM_ID_BT_MOTOR_MODE,
|
||||
SC_ITEM_ID_BT_SENSOR_BAR_POSITION,
|
||||
SC_ITEM_ID_DVD_CONFIG,
|
||||
SC_ITEM_ID_WWW_RESTRICTION,
|
||||
SC_ITEM_ID_MAX_PLUS1
|
||||
} SCItemID;
|
||||
|
||||
typedef struct {
|
||||
OSThreadQueue threadQueue;
|
||||
NANDFileInfo nandFileInfo;
|
||||
NANDCommandBlock nandCommandBlock;
|
||||
|
||||
union {
|
||||
u8 nandType;
|
||||
NANDStatus nandStatus;
|
||||
} u;
|
||||
|
||||
u8 nandStep;
|
||||
u8 nandNeedClose;
|
||||
u8 reloadFileCount;
|
||||
SCReloadConfFileCallback reloadCallback;
|
||||
s32 reloadResult;
|
||||
const char* reloadFileName[2];
|
||||
u8* reloadBufp[2];
|
||||
u32 reloadSizeExpected[2];
|
||||
u32 reloadedSize[2];
|
||||
SCFlushCallback flushCallback;
|
||||
u32 flushResult;
|
||||
u32 flushSize;
|
||||
} SCControl;
|
||||
|
||||
|
||||
|
||||
#define SC_LANG_JAPANESE 0u
|
||||
#define SC_LANG_ENGLISH 1u
|
||||
#define SC_LANG_GERMAN 2u
|
||||
#define SC_LANG_FRENCH 3u
|
||||
#define SC_LANG_SPANISH 4u
|
||||
#define SC_LANG_ITALIAN 5u
|
||||
#define SC_LANG_DUTCH 6u
|
||||
#define SC_LANG_SIMP_CHINESE 7u
|
||||
#define SC_LANG_TRAD_CHINESE 8u
|
||||
#define SC_LANG_KOREAN 9u
|
||||
|
||||
void SCInit(void);
|
||||
u32 SCCheckStatus(void);
|
||||
int SCReloadConfFileAsync(void* bufp, u32 bufSize, int);
|
||||
BOOL SCFindByteArrayItem(u8* data, u32, u32 itemID);
|
||||
BOOL SCFindIntegerItem(int* data, u32 itemID, u8 type);
|
||||
BOOL SCFindU8Item(u8* data, u32 itemID);
|
||||
BOOL SCFindS8Item(s8* data, u32 itemID);
|
||||
BOOL SCFindU32Item(u32* data, u32 itemID);
|
||||
s32 SCReloadConfFileAsync(u8* bufp, u32 bufSize, SCReloadConfFileCallback);
|
||||
BOOL SCFindByteArrayItem(void* data, u32, SCItemID itemID);
|
||||
BOOL SCFindIntegerItem(int* data, SCItemID itemID, u8 type);
|
||||
BOOL SCFindU8Item(u8* data, SCItemID itemID);
|
||||
BOOL SCFindS8Item(s8* data, SCItemID itemID);
|
||||
BOOL SCFindU32Item(u32* data, SCItemID itemID);
|
||||
u8 SCGetAspectRatio(void);
|
||||
u8 SCGetDisplayOffsetH(void);
|
||||
BOOL SCGetIdleMode(u8* data);
|
||||
s8 SCGetDisplayOffsetH(void);
|
||||
BOOL SCGetIdleMode(SCIdleModeInfo* data);
|
||||
u8 SCGetLanguage(void);
|
||||
u8 SCGetProgressiveMode(void);
|
||||
u8 SCGetScreenSaverMode(void);
|
||||
u8 SCGetSoundMode(void);
|
||||
u8 SCGetCounterBias(void);
|
||||
u32 SCGetCounterBias(void);
|
||||
BOOL SCGetProductAreaString(const char*, int);
|
||||
u32 SCGetProductArea(void);
|
||||
u32 SCGetProductGameRegion(void);
|
||||
s8 SCGetProductArea(void);
|
||||
s8 SCGetProductGameRegion(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user