Twilight Princess
Decompilation of The Legend of Zelda: Twilight Princess
Loading...
Searching...
No Matches
OSHardware.h
Go to the documentation of this file.
1
8#ifndef _RVL_SDK_OS_HARDWARE_H
9#define _RVL_SDK_OS_HARDWARE_H
10
11#include <revolution/dvd.h>
12#include <revolution/os.h>
15#include <revolution/types.h>
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20
21// Forward declarations
22typedef struct OSExecParams;
23
24// Derive offsets for use with OSAddress functions
25#define __DEF_ADDR_OFFSETS(name, addr) \
26 static const u32 OS_PHYS_##name = (addr) - 0x80000000; \
27 static const u32 OS_CACHED_##name = (addr); \
28 static const u32 OS_UNCACHED_##name = (addr) + (0xC0000000 - 0x80000000);
29
30// Define a global variable in *CACHED* MEM1.
31// Can be accessed directly or with OSAddress functions.
32#define OS_DEF_GLOBAL_VAR(type, name, addr) \
33 /* Memory-mapped value for direct access */ \
34 type OS_##name AT_ADDRESS(addr); \
35 __DEF_ADDR_OFFSETS(name, addr)
36
37// Define a global array in *CACHED* MEM1.
38// Can be accessed directly or with OSAddress functions.
39#define OS_DEF_GLOBAL_ARR(type, name, arr, addr) \
40 /* Memory-mapped value for direct access */ \
41 type OS_##name arr AT_ADDRESS(addr); \
42 __DEF_ADDR_OFFSETS(name, addr)
43
44// Define an global variable in the hardware-register range.
45#define OS_DEF_HW_REG(type, name, addr) \
46 /* Memory-mapped value for direct access */ \
47 type OS_##name AT_ADDRESS(addr);
48
49typedef enum {
51 OS_BOOT_MAGIC_JTAG = 0xE5207C22,
53
54typedef struct OSDebugInterface {
55 /* 0x0 */ int usingDebugger;
56 /* 0x4 */ u32 exceptionMask;
57 /* 0x8 */ void* exceptionHook;
58 /* 0xC */ void* exceptionHookLR;
60
61typedef struct OSBI2 {
64 /* 0x8 */ u32 argumentOfs;
65 /* 0xC */ u32 debugFlag;
66 /* 0x10 */ u32 trackLocation;
67 /* 0x14 */ u32 trackSize;
68 /* 0x18 */ u32 countryCode;
71 /* 0x24 */ u32 padSpec;
75
79// clang-format off
80OS_DEF_GLOBAL_VAR(OSBootInfo, BOOT_INFO, 0x80000000);
81OS_DEF_GLOBAL_VAR(OSDebugInterface, DEBUG_INTERFACE, 0x80000040);
82OS_DEF_GLOBAL_ARR(u8, DB_INTEGRATOR_HOOK, [0x24], 0x80000060);
83OS_DEF_GLOBAL_VAR(struct OSContext*, CURRENT_CONTEXT_PHYS, 0x800000C0);
84OS_DEF_GLOBAL_VAR(u32, PREV_INTR_MASK, 0x800000C4);
85OS_DEF_GLOBAL_VAR(u32, CURRENT_INTR_MASK, 0x800000C8);
86OS_DEF_GLOBAL_VAR(u32, TV_FORMAT, 0x800000CC);
87OS_DEF_GLOBAL_VAR(u32, ARAM_SIZE, 0x800000D0);
88OS_DEF_GLOBAL_VAR(struct OSContext*, CURRENT_CONTEXT, 0x800000D4);
89OS_DEF_GLOBAL_VAR(struct OSContext*, CURRENT_FPU_CONTEXT, 0x800000D8);
90OS_DEF_GLOBAL_VAR(OSThreadQueue, THREAD_QUEUE, 0x800000DC);
91OS_DEF_GLOBAL_VAR(OSThread*, CURRENT_THREAD, 0x800000E4);
92OS_DEF_GLOBAL_VAR(u32, DEBUG_MONITOR_SIZE, 0x800000E8);
93OS_DEF_GLOBAL_VAR(void*, DEBUG_MONITOR, 0x800000EC);
94OS_DEF_GLOBAL_VAR(u32, SIMULATED_MEM_SIZE, 0x800000F0);
95OS_DEF_GLOBAL_VAR(OSBI2*, DVD_BI2, 0x800000F4);
96OS_DEF_GLOBAL_VAR(u32, BUS_CLOCK_SPEED, 0x800000F8);
97OS_DEF_GLOBAL_VAR(u32, CPU_CLOCK_SPEED, 0x800000FC);
98// clang-format on
99
103// clang-format off
104OS_DEF_GLOBAL_ARR(void*, EXCEPTION_TABLE, [15], 0x80003000);
105OS_DEF_GLOBAL_VAR(void*, INTR_HANDLER_TABLE, 0x80003040);
106OS_DEF_GLOBAL_VAR(void*, FIRST_REL, 0x800030C8);
107OS_DEF_GLOBAL_VAR(void*, LAST_REL, 0x800030CC);
108OS_DEF_GLOBAL_VAR(void*, REL_NAME_TABLE, 0x800030D0);
109OS_DEF_GLOBAL_VAR(u32, DOL_TOTAL_TEXT_DATA, 0x800030D4);
110OS_DEF_GLOBAL_VAR(s64, SYSTEM_TIME, 0x800030D8);
111OS_DEF_GLOBAL_VAR(u8, PAD_FLAGS, 0x800030E3);
112OS_DEF_GLOBAL_VAR(u16, GC_PAD_3_BTN, 0x800030E4);
113OS_DEF_GLOBAL_VAR(volatile u16, DVD_DEVICE_CODE, 0x800030E6);
114OS_DEF_GLOBAL_VAR(u8, BI2_DEBUG_FLAG, 0x800030E8);
115OS_DEF_GLOBAL_VAR(u8, PAD_SPEC, 0x800030E9);
116OS_DEF_GLOBAL_VAR(struct OSExecParams*, DOL_EXEC_PARAMS, 0x800030F0);
117OS_DEF_GLOBAL_VAR(u32, PHYSICAL_MEM1_SIZE, 0x80003100);
118OS_DEF_GLOBAL_VAR(u32, SIMULATED_MEM1_SIZE, 0x80003104);
119OS_DEF_GLOBAL_VAR(void*, USABLE_MEM1_START, 0x8000310C);
120OS_DEF_GLOBAL_VAR(void*, USABLE_MEM1_END, 0x80003110);
121OS_DEF_GLOBAL_VAR(u32, PHYSICAL_MEM2_SIZE, 0x80003118);
122OS_DEF_GLOBAL_VAR(u32, SIMULATED_MEM2_SIZE, 0x8000311C);
123OS_DEF_GLOBAL_VAR(void*, ACCESSIBLE_MEM2_END, 0x80003120);
124OS_DEF_GLOBAL_VAR(void*, USABLE_MEM2_START, 0x80003124);
125OS_DEF_GLOBAL_VAR(void*, USABLE_MEM2_END, 0x80003128);
126OS_DEF_GLOBAL_VAR(void*, IPC_BUFFER_START, 0x80003130);
127OS_DEF_GLOBAL_VAR(void*, IPC_BUFFER_END, 0x80003134);
128OS_DEF_GLOBAL_VAR(u32, HOLLYWOOD_REV, 0x80003138);
129OS_DEF_GLOBAL_VAR(u32, IOS_VERSION, 0x80003140);
130OS_DEF_GLOBAL_VAR(u32, IOS_BUILD_DATE, 0x80003144);
131OS_DEF_GLOBAL_VAR(void*, IOS_HEAP_START, 0x80003148);
132OS_DEF_GLOBAL_VAR(void*, IOS_HEAP_END, 0x8000314C);
133OS_DEF_GLOBAL_VAR(u32, GDDR_VENDOR_CODE, 0x80003158);
134OS_DEF_GLOBAL_VAR(u8, BOOT_PROGRAM_TARGET, 0x8000315C);
135OS_DEF_GLOBAL_VAR(u8, APPLOADER_TARGET, 0x8000315D);
136OS_DEF_GLOBAL_VAR(int, MIOS_SHUTDOWN_FLAG, 0x80003164);
137OS_DEF_GLOBAL_VAR(u32, CURRENT_APP_NAME, 0x80003180);
138OS_DEF_GLOBAL_VAR(u8, CURRENT_APP_TYPE, 0x80003184);
139OS_DEF_GLOBAL_VAR(u32, MINIMUM_IOS_VERSION, 0x80003188);
140OS_DEF_GLOBAL_VAR(u32, NAND_TITLE_LAUNCH_CODE, 0x8000318C);
141OS_DEF_GLOBAL_VAR(u32, NAND_TITLE_RETURN_CODE, 0x80003190);
142OS_DEF_GLOBAL_VAR(u32, BOOT_PARTITION_TYPE, 0x80003194);
143OS_DEF_GLOBAL_VAR(u32, BOOT_PARTITION_OFFSET, 0x80003198);
144OS_DEF_GLOBAL_ARR(u8, NWC24_USER_ID_BUFFER, [32], 0x800031C0);
145OS_DEF_GLOBAL_VAR(u64, NWC24_USER_ID, 0x800031C0);
146OS_DEF_GLOBAL_ARR(u8, SC_PRDINFO, [0x100], 0x80003800);
147// clang-format on
148
152volatile u32 PI_HW_REGS[] AT_ADDRESS(0xCC003000);
166
167// INTSR - Interrupt Cause Register
168#define PI_INTSR_ERROR (1 << 0)
169#define PI_INTSR_RSW (1 << 1)
170#define PI_INTSR_DI (1 << 2)
171#define PI_INTSR_SI (1 << 3)
172#define PI_INTSR_EXI (1 << 4)
173#define PI_INTSR_AI (1 << 5)
174#define PI_INTSR_DSP (1 << 6)
175#define PI_INTSR_MEM (1 << 7)
176#define PI_INTSR_VI (1 << 8)
177#define PI_INTSR_PE_TOKEN (1 << 9)
178#define PI_INTSR_PE_FINISH (1 << 10)
179#define PI_INTSR_CP (1 << 11)
180#define PI_INTSR_DEBUG (1 << 12)
181#define PI_INTSR_HSP (1 << 13)
182#define PI_INTSR_ACR (1 << 14)
183#define PI_INTSR_RSWST (1 << 16)
184
185// INTMR - Interrupt Mask Register
186#define PI_INTMR_ERROR (1 << 0)
187#define PI_INTMR_RSW (1 << 1)
188#define PI_INTMR_DI (1 << 2)
189#define PI_INTMR_SI (1 << 3)
190#define PI_INTMR_EXI (1 << 4)
191#define PI_INTMR_AI (1 << 5)
192#define PI_INTMR_DSP (1 << 6)
193#define PI_INTMR_MEM (1 << 7)
194#define PI_INTMR_VI (1 << 8)
195#define PI_INTMR_PE_TOKEN (1 << 9)
196#define PI_INTMR_PE_FINISH (1 << 10)
197#define PI_INTMR_CP (1 << 11)
198#define PI_INTMR_DEBUG (1 << 12)
199#define PI_INTMR_HSP (1 << 13)
200#define PI_INTMR_ACR (1 << 14)
201
205volatile u16 MI_HW_REGS[] AT_ADDRESS(0xCC004000);
230
231// INTMR - Interrupt Mask Register
232#define MI_INTMR_MEM0 (1 << 0)
233#define MI_INTMR_MEM1 (1 << 1)
234#define MI_INTMR_MEM2 (1 << 2)
235#define MI_INTMR_MEM3 (1 << 3)
236#define MI_INTMR_ADDR (1 << 4)
237
238// INTSR - Interrupt Cause Register
239#define MI_INTSR_MEM0 (1 << 0)
240#define MI_INTSR_MEM1 (1 << 1)
241#define MI_INTSR_MEM2 (1 << 2)
242#define MI_INTSR_MEM3 (1 << 3)
243#define MI_INTSR_ADDR (1 << 4)
244
248// clang-format off
249OS_DEF_HW_REG(volatile unsigned long, DI_DMA_ADDR, 0xCD006014);
250OS_DEF_HW_REG(volatile unsigned long, DI_CONFIG, 0xCD006024);
251// clang-format on
252
256// clang-format off
257OS_DEF_HW_REG(volatile unsigned long, UNK_CD000034, 0xCD000034);
258OS_DEF_HW_REG(volatile unsigned long, UNK_CD800180, 0xCD800180);
259OS_DEF_HW_REG(volatile unsigned long, UNK_CD8001CC, 0xCD8001CC);
260OS_DEF_HW_REG(volatile unsigned long, UNK_CD8001D0, 0xCD8001D0);
261// clang-format on
262
263#ifdef __cplusplus
264}
265#endif
266
267#endif
struct OSBI2 OSBI2
struct OSDebugInterface OSDebugInterface
PIHwReg
Definition OSHardware.h:153
@ PI_REG_0x10
0xCC003010
Definition OSHardware.h:158
@ PI_INTMR
0xCC003004
Definition OSHardware.h:155
@ PI_REG_0xC
0xCC00300C
Definition OSHardware.h:157
@ PI_REG_0x20
0xCC003020
Definition OSHardware.h:162
@ PI_REG_0x1C
0xCC00301C
Definition OSHardware.h:161
@ PI_REG_0x18
0xCC003018
Definition OSHardware.h:160
@ PI_REG_0x14
0xCC003014
Definition OSHardware.h:159
@ PI_INTSR
0xCC003000
Definition OSHardware.h:154
@ PI_RESET
0xCC003024
Definition OSHardware.h:163
@ PI_REG_0x8
0xCC003008
Definition OSHardware.h:156
OS_DEF_GLOBAL_VAR(OSBootInfo, BOOT_INFO, 0x80000000)
OS_DEF_GLOBAL_ARR(u8, DB_INTEGRATOR_HOOK, [0x24], 0x80000060)
OS_DEF_HW_REG(volatile unsigned long, DI_DMA_ADDR, 0xCD006014)
MIHwReg
Definition OSHardware.h:206
@ MI_PAGE_MEM3_L
0xCC00400E
Definition OSHardware.h:214
@ MI_REG_0x20
0xCC004020
Definition OSHardware.h:223
@ MI_ADDRHI
0xCC004024
Definition OSHardware.h:225
@ MI_ADDRLO
0xCC004022
Definition OSHardware.h:224
@ MI_PAGE_MEM2_H
0xCC004008
Definition OSHardware.h:211
@ MI_PAGE_MEM0_L
0xCC004002
Definition OSHardware.h:208
@ MI_PAGE_MEM1_L
0xCC004006
Definition OSHardware.h:210
@ MI_PROT_MEM3
0xCC004016
Definition OSHardware.h:218
@ MI_PAGE_MEM3_H
0xCC00400C
Definition OSHardware.h:213
@ MI_REG_0x1A
0xCC00401A
Definition OSHardware.h:220
@ MI_REG_0x26
0xCC004026
Definition OSHardware.h:226
@ MI_PROT_MEM2
0xCC004014
Definition OSHardware.h:217
@ MI_PAGE_MEM0_H
0xCC004000
Definition OSHardware.h:207
@ MI_PROT_MEM1
0xCC004012
Definition OSHardware.h:216
@ MI_INTMR
0xCC00401C
Definition OSHardware.h:221
@ MI_PAGE_MEM2_L
0xCC00400A
Definition OSHardware.h:212
@ MI_REG_0x28
0xCC004028
Definition OSHardware.h:227
@ MI_INTSR
0xCC00401E
Definition OSHardware.h:222
@ MI_PAGE_MEM1_H
0xCC004004
Definition OSHardware.h:209
@ MI_PROT_MEM0
0xCC004010
Definition OSHardware.h:215
@ MI_REG_0x18
0xCC004018
Definition OSHardware.h:219
OSBootMagic
Definition OSHardware.h:49
@ OS_BOOT_MAGIC_BOOTROM
Definition OSHardware.h:50
@ OS_BOOT_MAGIC_JTAG
Definition OSHardware.h:51
volatile u32 PI_HW_REGS[] AT_ADDRESS(0xCC003000)
unsigned long u32
Definition types.h:12
signed long long int s64
Definition types.h:13
unsigned short int u16
Definition types.h:10
unsigned long long int u64
Definition types.h:14
unsigned char u8
Definition types.h:8
Definition OSHardware.h:61
u32 totalTextDataLimit
Definition OSHardware.h:72
u32 argumentOfs
Definition OSHardware.h:64
u32 simulatedMemSize
Definition OSHardware.h:63
u32 trackLocation
Definition OSHardware.h:66
u32 countryCode
Definition OSHardware.h:68
u32 padSpec
Definition OSHardware.h:71
u32 WORD_0x1C
Definition OSHardware.h:69
u32 lastInsert
Definition OSHardware.h:70
u32 trackSize
Definition OSHardware.h:67
u32 simulatedMem2Size
Definition OSHardware.h:73
u32 debugFlag
Definition OSHardware.h:65
u32 dbgMonitorSize
Definition OSHardware.h:62
Definition os.h:128
Definition OSContext.h:140
Definition OSHardware.h:54
int usingDebugger
Definition OSHardware.h:55
u32 exceptionMask
Definition OSHardware.h:56
void * exceptionHook
Definition OSHardware.h:57
void * exceptionHookLR
Definition OSHardware.h:58
Definition OSExec.h:13
Definition OSThread.h:22
Definition OSThread.h:42