Rename OS related functions, partial matches for OSFont

This commit is contained in:
Phillip Stephens 2024-10-20 18:04:07 -07:00
parent dcb0f4465b
commit cc524f13d4
7 changed files with 136 additions and 180 deletions

View File

@ -15764,11 +15764,11 @@ ConfigureVideo = .text:0x80380434; // type:function size:0xFC scope:global
OSFatal = .text:0x80380530; // type:function size:0xFC scope:global OSFatal = .text:0x80380530; // type:function size:0xFC scope:global
Halt = .text:0x8038062C; // type:function size:0x608 scope:global Halt = .text:0x8038062C; // type:function size:0x608 scope:global
GetFontCode = .text:0x80380C34; // type:function size:0x19C scope:global GetFontCode = .text:0x80380C34; // type:function size:0x19C scope:global
fn_80380DD0 = .text:0x80380DD0; // type:function size:0x174 Decode = .text:0x80380DD0; // type:function size:0x174
OSGetFontEncode = .text:0x80380F44; // type:function size:0x58 scope:global OSGetFontEncode = .text:0x80380F44; // type:function size:0x58 scope:global
fn_80380F9C = .text:0x80380F9C; // type:function size:0x8C ReadROM = .text:0x80380F9C; // type:function size:0x8C
fn_80381028 = .text:0x80381028; // type:function size:0x334 OSLoadFont = .text:0x80381028; // type:function size:0x334
fn_8038135C = .text:0x8038135C; // type:function size:0x304 OSGetFontTexel = .text:0x8038135C; // type:function size:0x304
OSDisableInterrupts = .text:0x80381660; // type:function size:0x14 scope:global OSDisableInterrupts = .text:0x80381660; // type:function size:0x14 scope:global
__RAS_OSDisableInterrupts_begin = .text:0x80381660; // type:label scope:global __RAS_OSDisableInterrupts_begin = .text:0x80381660; // type:label scope:global
__RAS_OSDisableInterrupts_end = .text:0x8038166C; // type:label scope:global __RAS_OSDisableInterrupts_end = .text:0x8038166C; // type:label scope:global
@ -19018,7 +19018,7 @@ DSPInitCode = .data:0x803F0FA8; // type:object size:0x80 scope:local
@86 = .data:0x803F16D4; // type:object size:0x35 scope:local data:string @86 = .data:0x803F16D4; // type:object size:0x35 scope:local data:string
@87 = .data:0x803F170C; // type:object size:0x40 scope:local @87 = .data:0x803F170C; // type:object size:0x40 scope:local
HankakuToCode = .data:0x803F1750; // type:object size:0x180 scope:global HankakuToCode = .data:0x803F1750; // type:object size:0x180 scope:global
Zenkaku2Code = .data:0x803F18D0; // type:object size:0x990 scope:global Zenkaku2Code = .data:0x803F18D0; // type:object size:0x98A scope:global
InterruptPrioTable = .data:0x803F2260; // type:object size:0x2C scope:local data:4byte InterruptPrioTable = .data:0x803F2260; // type:object size:0x2C scope:local data:4byte
@62 = .data:0x803F2290; // type:object size:0x25 scope:local data:string @62 = .data:0x803F2290; // type:object size:0x25 scope:local data:string
@167 = .data:0x803F22B8; // type:object size:0x27 scope:local data:string @167 = .data:0x803F22B8; // type:object size:0x27 scope:local data:string
@ -21443,7 +21443,7 @@ __OSArenaLo = .sdata:0x805A8B30; // type:object size:0x4 scope:global data:4byte
__OSFpscrEnableBits = .sdata:0x805A8B38; // type:object size:0x4 scope:global data:4byte __OSFpscrEnableBits = .sdata:0x805A8B38; // type:object size:0x4 scope:global data:4byte
@76 = .sdata:0x805A8B3C; // type:object size:0x2 scope:local data:string @76 = .sdata:0x805A8B3C; // type:object size:0x2 scope:local data:string
lbl_805A8B40 = .sdata:0x805A8B40; // type:object size:0x8 lbl_805A8B40 = .sdata:0x805A8B40; // type:object size:0x8
fontEncode$57 = .sdata:0x805A8B48; // type:object size:0x8 scope:local data:2byte fontEncode$57 = .sdata:0x805A8B48; // type:object size:0x2 scope:local data:2byte
SwitchThreadCallback = .sdata:0x805A8B50; // type:object size:0x4 scope:local data:4byte SwitchThreadCallback = .sdata:0x805A8B50; // type:object size:0x4 scope:local data:4byte
__PADVersion = .sdata:0x805A8B58; // type:object size:0x4 scope:global data:4byte __PADVersion = .sdata:0x805A8B58; // type:object size:0x4 scope:global data:4byte
ResettingChan = .sdata:0x805A8B5C; // type:object size:0x4 scope:local data:4byte ResettingChan = .sdata:0x805A8B5C; // type:object size:0x4 scope:local data:4byte
@ -22205,10 +22205,10 @@ __OSInIPL = .sbss:0x805A98A0; // type:object size:0x4 scope:global data:4byte
__OSStartTime = .sbss:0x805A98A8; // type:object size:0x8 scope:global align:8 data:4byte __OSStartTime = .sbss:0x805A98A8; // type:object size:0x8 scope:global align:8 data:4byte
AlarmQueue = .sbss:0x805A98B0; // type:object size:0x8 scope:local data:4byte AlarmQueue = .sbss:0x805A98B0; // type:object size:0x8 scope:local data:4byte
__OSArenaHi = .sbss:0x805A98B8; // type:object size:0x4 scope:global data:4byte __OSArenaHi = .sbss:0x805A98B8; // type:object size:0x4 scope:global data:4byte
lbl_805A98C0 = .sbss:0x805A98C0; // type:object size:0x4 data:4byte FontData = .sbss:0x805A98C0; // type:object size:0x4 data:4byte
lbl_805A98C4 = .sbss:0x805A98C4; // type:object size:0x4 data:4byte SheetImage = .sbss:0x805A98C4; // type:object size:0x4 data:4byte
lbl_805A98C8 = .sbss:0x805A98C8; // type:object size:0x4 data:4byte WidthTable = .sbss:0x805A98C8; // type:object size:0x4 data:4byte
lbl_805A98CC = .sbss:0x805A98CC; // type:object size:0x4 data:4byte CharsInSheet = .sbss:0x805A98CC; // type:object size:0x4 data:4byte
InterruptHandlerTable = .sbss:0x805A98D0; // type:object size:0x4 scope:local data:4byte InterruptHandlerTable = .sbss:0x805A98D0; // type:object size:0x4 scope:local data:4byte
__OSLastInterruptSrr0 = .sbss:0x805A98D4; // type:object size:0x4 scope:global data:4byte __OSLastInterruptSrr0 = .sbss:0x805A98D4; // type:object size:0x4 scope:global data:4byte
__OSLastInterrupt = .sbss:0x805A98D8; // type:object size:0x2 scope:global data:2byte __OSLastInterrupt = .sbss:0x805A98D8; // type:object size:0x2 scope:global data:2byte

View File

@ -15779,9 +15779,9 @@ ConfigureVideo = .text:0x80380610; // type:function size:0xFC scope:global
OSFatal = .text:0x8038070C; // type:function size:0xFC scope:global OSFatal = .text:0x8038070C; // type:function size:0xFC scope:global
Halt = .text:0x80380808; // type:function size:0x608 scope:global Halt = .text:0x80380808; // type:function size:0x608 scope:global
GetFontCode = .text:0x80380E10; // type:function size:0x19C scope:global GetFontCode = .text:0x80380E10; // type:function size:0x19C scope:global
fn_80380DD0 = .text:0x80380FAC; // type:function size:0x174 scope:global Decode = .text:0x80380FAC; // type:function size:0x174 scope:global
OSGetFontEncode = .text:0x80381120; // type:function size:0x58 scope:global OSGetFontEncode = .text:0x80381120; // type:function size:0x58 scope:global
fn_80380F9C = .text:0x80381178; // type:function size:0x8C scope:global ReadROM = .text:0x80381178; // type:function size:0x8C scope:global
fn_80381028 = .text:0x80381204; // type:function size:0x334 scope:global fn_80381028 = .text:0x80381204; // type:function size:0x334 scope:global
fn_8038135C = .text:0x80381538; // type:function size:0x304 scope:global fn_8038135C = .text:0x80381538; // type:function size:0x304 scope:global
OSDisableInterrupts = .text:0x8038183C; // type:function size:0x14 scope:global OSDisableInterrupts = .text:0x8038183C; // type:function size:0x14 scope:global
@ -19056,7 +19056,7 @@ DSPInitCode = .data:0x803F1188; // type:object size:0x80 scope:local
@86 = .data:0x803F18B4; // type:object size:0x35 scope:local data:string @86 = .data:0x803F18B4; // type:object size:0x35 scope:local data:string
@87 = .data:0x803F18EC; // type:object size:0x40 scope:local @87 = .data:0x803F18EC; // type:object size:0x40 scope:local
HankakuToCode = .data:0x803F1930; // type:object size:0x180 scope:global HankakuToCode = .data:0x803F1930; // type:object size:0x180 scope:global
Zenkaku2Code = .data:0x803F1AB0; // type:object size:0x990 scope:global Zenkaku2Code = .data:0x803F1AB0; // type:object size:0x98a scope:global
InterruptPrioTable = .data:0x803F2440; // type:object size:0x2C scope:local data:4byte InterruptPrioTable = .data:0x803F2440; // type:object size:0x2C scope:local data:4byte
@62 = .data:0x803F2470; // type:object size:0x25 scope:local data:string @62 = .data:0x803F2470; // type:object size:0x25 scope:local data:string
@167 = .data:0x803F2498; // type:object size:0x27 scope:local data:string @167 = .data:0x803F2498; // type:object size:0x27 scope:local data:string
@ -21478,7 +21478,7 @@ __OSVersion = .sdata:0x805A8D08; // type:object size:0x4 scope:local data:4byte
__OSArenaLo = .sdata:0x805A8D10; // type:object size:0x4 scope:global data:4byte __OSArenaLo = .sdata:0x805A8D10; // type:object size:0x4 scope:global data:4byte
__OSFpscrEnableBits = .sdata:0x805A8D18; // type:object size:0x4 scope:global data:4byte __OSFpscrEnableBits = .sdata:0x805A8D18; // type:object size:0x4 scope:global data:4byte
@76 = .sdata:0x805A8D1C; // type:object size:0x2 scope:local data:string @76 = .sdata:0x805A8D1C; // type:object size:0x2 scope:local data:string
lbl_805A8B40 = .sdata:0x805A8D20; // type:object size:0x8 scope:global fontEncode$57 = .sdata:0x805A8D20; // type:object size:0x8 scope:global
lbl_805A8B48 = .sdata:0x805A8D28; // type:object size:0x8 scope:global data:2byte lbl_805A8B48 = .sdata:0x805A8D28; // type:object size:0x8 scope:global data:2byte
SwitchThreadCallback = .sdata:0x805A8D30; // type:object size:0x4 scope:local data:4byte SwitchThreadCallback = .sdata:0x805A8D30; // type:object size:0x4 scope:local data:4byte
__PADVersion = .sdata:0x805A8D38; // type:object size:0x4 scope:global data:4byte __PADVersion = .sdata:0x805A8D38; // type:object size:0x4 scope:global data:4byte
@ -22241,10 +22241,10 @@ __OSInIPL = .sbss:0x805A9A80; // type:object size:0x4 scope:global data:4byte
__OSStartTime = .sbss:0x805A9A88; // type:object size:0x8 scope:global data:4byte __OSStartTime = .sbss:0x805A9A88; // type:object size:0x8 scope:global data:4byte
AlarmQueue = .sbss:0x805A9A90; // type:object size:0x8 scope:local data:4byte AlarmQueue = .sbss:0x805A9A90; // type:object size:0x8 scope:local data:4byte
__OSArenaHi = .sbss:0x805A9A98; // type:object size:0x4 scope:global data:4byte __OSArenaHi = .sbss:0x805A9A98; // type:object size:0x4 scope:global data:4byte
lbl_805A98C0 = .sbss:0x805A9AA0; // type:object size:0x4 scope:local data:4byte FontData = .sbss:0x805A9AA0; // type:object size:0x4 scope:local data:4byte
lbl_805A98C4 = .sbss:0x805A9AA4; // type:object size:0x4 scope:local data:4byte SheetImage = .sbss:0x805A9AA4; // type:object size:0x4 scope:local data:4byte
lbl_805A98C8 = .sbss:0x805A9AA8; // type:object size:0x4 scope:local data:4byte WidthDable = .sbss:0x805A9AA8; // type:object size:0x4 scope:local data:4byte
lbl_805A98CC = .sbss:0x805A9AAC; // type:object size:0x4 scope:local data:4byte CharsInSheet = .sbss:0x805A9AAC; // type:object size:0x4 scope:local data:4byte
InterruptHandlerTable = .sbss:0x805A9AB0; // type:object size:0x4 scope:local data:4byte InterruptHandlerTable = .sbss:0x805A9AB0; // type:object size:0x4 scope:local data:4byte
__OSLastInterruptSrr0 = .sbss:0x805A9AB4; // type:object size:0x4 scope:global data:4byte __OSLastInterruptSrr0 = .sbss:0x805A9AB4; // type:object size:0x4 scope:global data:4byte
__OSLastInterrupt = .sbss:0x805A9AB8; // type:object size:0x2 scope:global data:2byte __OSLastInterrupt = .sbss:0x805A9AB8; // type:object size:0x2 scope:global data:2byte

View File

@ -151,7 +151,7 @@ if not config.non_matching:
# Tool versions # Tool versions
config.binutils_tag = "2.42-1" config.binutils_tag = "2.42-1"
config.compilers_tag = "20240706" config.compilers_tag = "20240706"
config.dtk_tag = "v1.1.2" config.dtk_tag = "v1.1.4"
config.objdiff_tag = "v2.3.2" config.objdiff_tag = "v2.3.2"
config.sjiswrap_tag = "v1.1.1" config.sjiswrap_tag = "v1.1.1"
config.wibo_tag = "0.6.11" config.wibo_tag = "0.6.11"

View File

@ -99,7 +99,7 @@ BOOL DVDCancelAllAsync(DVDCBCallback callback);
s32 DVDCancelAll(void); s32 DVDCancelAll(void);
BOOL DVDPrepareStreamAsync(DVDFileInfo* fInfo, u32 length, u32 offset, DVDCallback callback); BOOL DVDPrepareStreamAsync(DVDFileInfo* fInfo, u32 length, u32 offset, DVDCallback callback);
s32 DVDPrepareStream(DVDFileInfo* fInfo, u32 length, u32 offset); s32 DVDPrepareStream(DVDFileInfo* fInfo, u32 length, u32 offset);
BOOL DVDSetAutoInvalidation(BOOL autoInval);
BOOL DVDCancelStreamAsync(DVDCommandBlock* block, DVDCBCallback callback); BOOL DVDCancelStreamAsync(DVDCommandBlock* block, DVDCBCallback callback);
s32 DVDCancelStream(DVDCommandBlock* block); s32 DVDCancelStream(DVDCommandBlock* block);

View File

@ -1,15 +1,27 @@
#ifndef _DOLPHIN_HW_REGS #ifndef _DOLPHIN_HW_REGS_H_
#define _DOLPHIN_HW_REGS #define _DOLPHIN_HW_REGS_H_
#include "types.h"
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __MWERKS__ #ifdef __MWERKS__
volatile u16 __VIRegs[59] : 0xCC002000;
volatile u32 __PIRegs[12] : 0xCC003000;
volatile u16 __MEMRegs[64] : 0xCC004000;
volatile u16 __DSPRegs[] : 0xCC005000;
volatile u32 __DIRegs[] : 0xCC006000;
volatile u32 __SIRegs[0x100] : 0xCC006400;
volatile u32 __EXIRegs[0x40] : 0xCC006800;
volatile u32 __AIRegs[8] : 0xCC006C00;
#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 __SIRegs ((volatile u32 *)0xCC006400)
#define __EXIRegs ((volatile u32 *)0xCC006800)
#define __AIRegs ((volatile u32 *)0xCC006C00)
#endif
vu16 __VIRegs[59] : 0xCC002000; // Offsets for __VIRegs
// offsets for __VIRegs[i] // offsets for __VIRegs[i]
#define VI_VERT_TIMING (0) #define VI_VERT_TIMING (0)
@ -75,55 +87,6 @@ vu16 __VIRegs[59] : 0xCC002000;
#define VI_WIDTH (56) #define VI_WIDTH (56)
vu32 __PIRegs[12] : 0xCC003000;
// offsets for __PIRegs[i]
#define PI_INTRPT_SRC (0) // interrupt cause
#define PI_INTRPT_MASK (1) // interrupt mask
#define PI_FIFO_START (3) // FIFO base start
#define PI_FIFO_END (4) // FIFO base end
#define PI_FIFO_PTR (5) // FIFO current write pointer
#define PI_RESETCODE (9) // reset code, used by OSReset
// PI Interrupt causes.
#define PI_INTRPT_ERR (0x1) // GP runtime error
#define PI_INTRPT_RSW (0x2) // reset switch
#define PI_INTRPT_DVD (0x4) // DVD/DI interrupt
#define PI_INTRPT_SI (0x8) // serial/controller interrupt
#define PI_INTRPT_EXI (0x10) // external mem interrupt
#define PI_INTRPT_AI (0x20) // audio streaming interrupt
#define PI_INTRPT_DSP (0x40) // digital signal proc interrupt
#define PI_INTRPT_MEM (0x80) // memory interface interrupt
#define PI_INTRPT_VI (0x100) // video interface interrupt
#define PI_INTRPT_PE_TOKEN (0x200) // pixel engine token
#define PI_INTRPT_PE_FINISH (0x400) // pixel engine finish
#define PI_INTRPT_CP (0x800) // command FIFO
#define PI_INTRPT_DEBUG (0x1000) // external debugger
#define PI_INTRPT_HSP (0x2000) // high speed port
#define PI_INTRPT_RSWST (0x10000) // reset switch state (1 when pressed)
vu16 __MEMRegs[64] : 0xCC004000;
// offsets for __MEMRegs[i]
#define MEM_PROT_1 (0) // protected region 1
#define MEM_PROT_2 (2) // protected region 1
#define MEM_PROT_3 (4) // protected region 1
#define MEM_PROT_4 (6) // protected region 1
#define MEM_PROT_TYPE (8) // protection type
#define MEM_INTRPT_MASK (14) // interrupt mask
#define MEM_INTRPT_SRC (15) // interrupt cause
#define MEM_INTRPT_FLAG (16) // set when interrupt happens
#define MEM_INTRPT_ADDR_LO (17) // address that caused interrupt
#define MEM_INTRPT_ADDR_HI (18) // address that caused interrupt
#define MEM_UNK_FLAG (20) // unknown memory flag, set in __OSInitMemoryProtection
vu16 __DSPRegs[32] : 0xCC005000;
// offsets for __DSPRegs[i] // offsets for __DSPRegs[i]
#define DSP_MAILBOX_IN_HI (0) #define DSP_MAILBOX_IN_HI (0)
#define DSP_MAILBOX_IN_LO (1) #define DSP_MAILBOX_IN_LO (1)
@ -146,92 +109,6 @@ vu16 __DSPRegs[32] : 0xCC005000;
#define DSP_DMA_CONTROL_LEN (27) #define DSP_DMA_CONTROL_LEN (27)
#define DSP_DMA_BYTES_LEFT (29) #define DSP_DMA_BYTES_LEFT (29)
#define DSP_DMA_START_FLAG (0x8000) // set to start DSP
vu32 __DIRegs[16] : 0xCC006000;
// offsets for __DIRegs[i]
#define DI_STATUS (0)
#define DI_COVER_STATUS (1) // cover status - 0=normal, 1=interrupt/open
#define DI_CMD_BUF_0 (2) // command buffer 0
#define DI_CMD_BUF_1 (3) // command buffer 1
#define DI_CMD_BUF_2 (4) // command buffer 2
#define DI_DMA_MEM_ADDR (5) // DMA address
#define DI_DMA_LENGTH (6) // transfer length address
#define DI_CONTROL (7)
#define DI_MM_BUF (8) // Main memory buffer
#define DI_CONFIG (9)
vu32 __SIRegs[64] : 0xCC006400;
// offsets for __SIRegs[i]
// Channel 0/Joy-channel 1
#define SI_CHAN_0_BUF (0) // output buffer
#define SI_CHAN_0_BTN_1 (1) // button 1
#define SI_CHAN_0_BTN_2 (2) // button 2
// Channel 1/Joy-channel 2
#define SI_CHAN_1_BUF (3) // output buffer
#define SI_CHAN_1_BTN_1 (4) // button 1
#define SI_CHAN_1_BTN_2 (5) // button 2
// Channel 2/Joy-channel 3
#define SI_CHAN_2_BUF (6) // output buffer
#define SI_CHAN_2_BTN_1 (7) // button 1
#define SI_CHAN_2_BTN_2 (8) // button 2
// Channel 3/Joy-channel 4
#define SI_CHAN_3_BUF (9) // output buffer
#define SI_CHAN_3_BTN_1 (10) // button 1
#define SI_CHAN_3_BTN_2 (11) // button 2
#define SI_POLL (12)
#define SI_CC_STAT (13) // communication control status
#define SI_STAT (14)
#define SI_EXI_LOCK (15) // exi clock lock
#define SI_IO_BUFFER (32) // start of buffer (32 to 63)
vu32 __EXIRegs[16] : 0xCC006800;
// offsets for __EXIRegs[i]
// Channel 0
#define EXI_CHAN_0_STAT (0) // parameters/status
#define EXI_CHAN_0_DMA_ADDR (1) // DMA start address
#define EXI_CHAN_0_LEN (2) // DMA transfer length
#define EXI_CHAN_0_CONTROL (3) // control register
#define EXI_CHAN_0_IMM (4) // immediate data
// Channel 1
#define EXI_CHAN_1_STAT (5) // parameters/status
#define EXI_CHAN_1_DMA_ADDR (6) // DMA start address
#define EXI_CHAN_1_LEN (7) // DMA transfer length
#define EXI_CHAN_1_CONTROL (8) // control register
#define EXI_CHAN_1_IMM (9) // immediate data
// Channel 2
#define EXI_CHAN_2_STAT (10) // parameters/status
#define EXI_CHAN_2_DMA_ADDR (11) // DMA start address
#define EXI_CHAN_2_LEN (12) // DMA transfer length
#define EXI_CHAN_2_CONTROL (13) // control register
#define EXI_CHAN_2_IMM (14) // immediate data
vu32 __AIRegs[8] : 0xCC006C00;
// offsets for __AIRegs[i]
#define AI_CONTROL (0) // control
#define AI_VOLUME (1) // volume
#define AI_SAMPLE_COUNTER (2) // number of stereo samples output
#define AI_INTRPT_TIMING (3) // interrupt timing
#else
#define __VIRegs ((vu16*)0xCC002000)
#define __PIRegs ((vu32*)0xCC003000)
#define __MEMRegs ((vu16*)0xCC004000)
#define __DSPRegs ((vu16*)0xCC005000)
#define __DIRegs ((vu32*)0xCC006000)
#define __SIRegs ((vu32*)0xCC006400)
#define __EXIRegs ((vu32*)0xCC006800)
#define __AIRegs ((vu32*)0xCC006C00)
#endif #endif
#ifdef __cplusplus
}
#endif
#endif // _DOLPHIN_HW_REGS

View File

@ -1,7 +1,7 @@
#ifndef _DOLPHIN_OSFONT #ifndef _DOLPHIN_OSFONT_H_
#define _DOLPHIN_OSFONT #define _DOLPHIN_OSFONT_H_
#include <types.h> #include <dolphin/types.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
@ -9,20 +9,47 @@ extern "C" {
#define OS_FONT_ENCODE_ANSI 0u #define OS_FONT_ENCODE_ANSI 0u
#define OS_FONT_ENCODE_SJIS 1u #define OS_FONT_ENCODE_SJIS 1u
#define OS_FONT_ENCODE_UTF8 3u // UTF-8 [RFC 3629] #define OS_FONT_SIZE_ANSI (288 + 131072) // 9 sheets
#define OS_FONT_ENCODE_UTF16 4u // UTF-16BE [RFC 2781] #define OS_FONT_SIZE_SJIS (3840 + 1179648) // 1 sheet
#define OS_FONT_ENCODE_UTF32 5u // UTF-32 #define OS_FONT_ROM_SIZE_ANSI 0x03000
#define OS_FONT_ENCODE_MAX 5u #define OS_FONT_ROM_SIZE_SJIS 0x4D000
#define OS_FONT_ENCODE_VOID 0xffffu
#define OS_FONT_PROPORTIONAL FALSE typedef struct OSFontHeader
#define OS_FONT_FIXED TRUE {
/*0x00*/ u16 fontType;
u16 firstChar;
u16 lastChar;
u16 invalChar;
/*0x08*/ u16 ascent;
u16 descent;
u16 width;
u16 leading;
/*0x10*/ u16 cellWidth;
u16 cellHeight;
/*0x14*/ u32 sheetSize;
/*0x18*/ u16 sheetFormat;
u16 sheetColumn;
u16 sheetRow;
u16 sheetWidth;
/*0x20*/ u16 sheetHeight;
u16 widthTable;
u32 sheetImage;
u32 sheetFullSize;
u8 c0;
u8 c1;
u8 c2;
u8 c3;
} OSFontHeader;
u16 OSGetFontEncode(void); u16 OSGetFontEncode(void);
u16 OSSetFontEncode(u16 encode); BOOL OSInitFont(OSFontHeader *fontData);
u32 OSLoadFont(OSFontHeader *fontData, void *temp);
char *OSGetFontTexture(char *string, void **image, s32 *x, s32 *y, s32 *width);
char *OSGetFontWidth(char *string, s32 *width);
char *OSGetFontTexel(char *string, void *image, s32 pos, s32 stride, s32 *width);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif // _DOLPHIN_OSFONT #endif

View File

@ -1,6 +1,8 @@
#include "dolphin/dvd.h"
#include "dolphin/os.h" #include "dolphin/os.h"
#include "dolphin/os/OSBootInfo.h" #include "dolphin/os/OSBootInfo.h"
#include "dolphin/dvd.h" #include "dolphin/os/OSContext.h"
#include "dolphin/os/OSInterrupt.h"
typedef struct ApploaderHeader { typedef struct ApploaderHeader {
// total size: 0x20 // total size: 0x20
@ -11,6 +13,17 @@ typedef struct ApploaderHeader {
u32 reserved2; // offset 0x1C, size 0x4 u32 reserved2; // offset 0x1C, size 0x4
} ApploaderHeader; } ApploaderHeader;
struct {
// total size: 0x1C
int valid; // offset 0x0, size 0x4
unsigned long restartCode; // offset 0x4, size 0x4
unsigned long bootDol; // offset 0x8, size 0x4
void* regionStart; // offset 0xC, size 0x4
void* regionEnd; // offset 0x10, size 0x4
int argsUseDefault; // offset 0x14, size 0x4
void* argsAddr; // offset 0x18, size 0x4
} __OSRebootParams; // size: 0x1C, address: 0x0
static ApploaderHeader Header; static ApploaderHeader Header;
extern void* __OSSavedRegionStart; extern void* __OSSavedRegionStart;
@ -19,12 +32,22 @@ extern void* __OSSavedRegionEnd;
static void* SaveStart = NULL; static void* SaveStart = NULL;
static void* SaveEnd = NULL; static void* SaveEnd = NULL;
volatile u8 DAT_800030e2 : 0x800030e2;
extern u32 BOOT_REGION_START AT_ADDRESS(0x812FDFF0); //(*(u32 *)0x812fdff0) extern u32 BOOT_REGION_START AT_ADDRESS(0x812FDFF0); //(*(u32 *)0x812fdff0)
extern u32 BOOT_REGION_END AT_ADDRESS(0x812FDFEC); //(*(u32 *)0x812fdfec) extern u32 BOOT_REGION_END AT_ADDRESS(0x812FDFEC); //(*(u32 *)0x812fdfec)
extern u32 UNK_HOT_RESET1 AT_ADDRESS(0x817ffff8);
extern u32 UNK_HOT_RESET2 AT_ADDRESS(0x817ffffc);
extern u32 __OSIsGcam; extern u32 __OSIsGcam;
static BOOL Prepared = FALSE; static BOOL Prepared = FALSE;
extern void __DVDPrepareResetAsync(DVDCBCallback callback);
extern BOOL DVDCheckDisk(void);
extern BOOL DVDReadAbsAsyncForBS(DVDCommandBlock* block, void* addr, s32 length, s32 offset,
DVDCBCallback callback);
asm void Run() { asm void Run() {
// clang-format off // clang-format off
nofralloc nofralloc
@ -37,10 +60,39 @@ asm void Run() {
static void Callback() { Prepared = TRUE; } static void Callback() { Prepared = TRUE; }
void ReadApploader(OSTime time1, OSTime time2) { void ReadApploader(OSTime time1, OSTime time2) {}
}
void __OSReboot(u32 resetCode, u32 bootDol) { void __OSReboot(u32 resetCode, u32 bootDol) {
// Local variables
OSContext exceptionContext; // r1+0x18
char* argvToPass; // r1+0x10
DVDCommandBlock headerCommand;
ApploaderHeader* header = &Header;
OSDisableInterrupts();
UNK_HOT_RESET1 = 0;
UNK_HOT_RESET2 = 0;
DAT_800030e2 = 1;
__OSSavedRegionStart = SaveStart;
__OSSavedRegionEnd = SaveEnd;
OSClearContext(&exceptionContext);
OSSetCurrentContext(&exceptionContext);
DVDInit();
DVDSetAutoInvalidation(TRUE);
__DVDPrepareResetAsync(Callback);
if (DVDCheckDisk() == FALSE) {
__OSDoHotReset(UNK_HOT_RESET2);
}
__OSMaskInterrupts(OS_INTERRUPTMASK_PI);
__OSUnmaskInterrupts(0x400);
OSEnableInterrupts();
do {
} while (Prepared == 0);
DVDReadAbsAsyncForBS(&headerCommand, header, sizeof(ApploaderHeader), 0x2440, NULL);
} }
void OSSetSaveRegion(void* start, void* end) { void OSSetSaveRegion(void* start, void* end) {