mirror of https://github.com/PrimeDecomp/prime.git
Wrap nonmatching functions and link OSRtc
This commit is contained in:
parent
357278d214
commit
254fff51db
|
@ -820,7 +820,7 @@ LIBS = [
|
||||||
"Dolphin/os/OSReboot",
|
"Dolphin/os/OSReboot",
|
||||||
["Dolphin/os/OSReset", True],
|
["Dolphin/os/OSReset", True],
|
||||||
"Dolphin/os/OSResetSW",
|
"Dolphin/os/OSResetSW",
|
||||||
["Dolphin/os/OSRtc", False],
|
["Dolphin/os/OSRtc", True],
|
||||||
["Dolphin/os/OSSync", True],
|
["Dolphin/os/OSSync", True],
|
||||||
["Dolphin/os/OSThread", True],
|
["Dolphin/os/OSThread", True],
|
||||||
["Dolphin/os/OSTime", True],
|
["Dolphin/os/OSTime", True],
|
||||||
|
|
|
@ -172,7 +172,44 @@ static void* LockSram(u32 offset) {
|
||||||
return Scb.sram + offset;
|
return Scb.sram + offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if NONMATCHING
|
||||||
OSSram* __OSLockSram() { return LockSram(0); }
|
OSSram* __OSLockSram() { return LockSram(0); }
|
||||||
|
#else
|
||||||
|
/* clang-format off */
|
||||||
|
#pragma push
|
||||||
|
#pragma optimization_level 0
|
||||||
|
#pragma optimizewithasm off
|
||||||
|
asm OSSram* __OSLockSram() {
|
||||||
|
nofralloc
|
||||||
|
mflr r0
|
||||||
|
lis r3, Scb@ha
|
||||||
|
stw r0, 4(r1)
|
||||||
|
stwu r1, -0x10(r1)
|
||||||
|
stw r31, 0xc(r1)
|
||||||
|
addi r31, r3, Scb@l
|
||||||
|
bl OSDisableInterrupts
|
||||||
|
lwz r0, 0x48(r31)
|
||||||
|
addi r4, r31, 0x48
|
||||||
|
cmpwi r0, 0
|
||||||
|
beq lbl_80383B0C
|
||||||
|
bl OSRestoreInterrupts
|
||||||
|
li r31, 0
|
||||||
|
b lbl_80383B18
|
||||||
|
lbl_80383B0C:
|
||||||
|
stw r3, 0x44(r31)
|
||||||
|
li r0, 1
|
||||||
|
stw r0, 0(r4)
|
||||||
|
lbl_80383B18:
|
||||||
|
mr r3, r31
|
||||||
|
lwz r0, 0x14(r1)
|
||||||
|
lwz r31, 0xc(r1)
|
||||||
|
addi r1, r1, 0x10
|
||||||
|
mtlr r0
|
||||||
|
blr
|
||||||
|
}
|
||||||
|
/* clang-format on */
|
||||||
|
#pragma pop
|
||||||
|
#endif
|
||||||
|
|
||||||
OSSramEx* __OSLockSramEx() { return LockSram(sizeof(OSSram)); }
|
OSSramEx* __OSLockSramEx() { return LockSram(sizeof(OSSram)); }
|
||||||
|
|
||||||
|
@ -240,22 +277,71 @@ BOOL __OSReadROM(void* buffer, s32 length, s32 offset) {
|
||||||
return !err;
|
return !err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline OSSram* __OSLockSramHACK() { return LockSram(0); }
|
||||||
|
#if NONMATCHING
|
||||||
u32 OSGetSoundMode() {
|
u32 OSGetSoundMode() {
|
||||||
OSSram* sram;
|
OSSram* sram;
|
||||||
u32 mode;
|
u32 mode;
|
||||||
|
|
||||||
sram = __OSLockSram();
|
sram = __OSLockSramHACK();
|
||||||
mode = (sram->flags & 0x4) ? OS_SOUND_MODE_STEREO : OS_SOUND_MODE_MONO;
|
mode = (sram->flags & 0x4) ? OS_SOUND_MODE_STEREO : OS_SOUND_MODE_MONO;
|
||||||
__OSUnlockSram(FALSE);
|
__OSUnlockSram(FALSE);
|
||||||
return mode;
|
return mode;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
/* clang-format off */
|
||||||
|
#pragma push
|
||||||
|
#pragma optimization_level
|
||||||
|
#pragma optimizewithasm off
|
||||||
|
asm u32 OSGetSoundMode() {
|
||||||
|
nofralloc
|
||||||
|
mflr r0
|
||||||
|
lis r3, Scb@ha
|
||||||
|
stw r0, 4(r1)
|
||||||
|
stwu r1, -0x20(r1)
|
||||||
|
stw r31, 0x1c(r1)
|
||||||
|
addi r31, r3, Scb@l
|
||||||
|
bl OSDisableInterrupts
|
||||||
|
lwz r0, 0x48(r31)
|
||||||
|
addi r4, r31, 0x48
|
||||||
|
cmpwi r0, 0
|
||||||
|
beq lbl_80384048
|
||||||
|
bl OSRestoreInterrupts
|
||||||
|
li r31, 0
|
||||||
|
b lbl_80384054
|
||||||
|
lbl_80384048:
|
||||||
|
stw r3, 0x44(r31)
|
||||||
|
li r0, 1
|
||||||
|
stw r0, 0(r4)
|
||||||
|
lbl_80384054:
|
||||||
|
lbz r0, 0x13(r31)
|
||||||
|
rlwinm. r0, r0, 0, 0x1d, 0x1d
|
||||||
|
beq lbl_80384068
|
||||||
|
li r31, 1
|
||||||
|
b lbl_8038406C
|
||||||
|
lbl_80384068:
|
||||||
|
li r31, 0
|
||||||
|
lbl_8038406C:
|
||||||
|
li r3, 0
|
||||||
|
li r4, 0
|
||||||
|
bl UnlockSram
|
||||||
|
mr r3, r31
|
||||||
|
lwz r0, 0x24(r1)
|
||||||
|
lwz r31, 0x1c(r1)
|
||||||
|
addi r1, r1, 0x20
|
||||||
|
mtlr r0
|
||||||
|
blr
|
||||||
|
|
||||||
|
}
|
||||||
|
#pragma pop
|
||||||
|
/* clang-format on */
|
||||||
|
#endif
|
||||||
void OSSetSoundMode(u32 mode) {
|
void OSSetSoundMode(u32 mode) {
|
||||||
OSSram* sram;
|
OSSram* sram;
|
||||||
mode <<= 2;
|
mode <<= 2;
|
||||||
mode &= 4;
|
mode &= 4;
|
||||||
|
|
||||||
sram = __OSLockSram();
|
sram = __OSLockSramHACK();
|
||||||
if (mode == (sram->flags & 4)) {
|
if (mode == (sram->flags & 4)) {
|
||||||
__OSUnlockSram(FALSE);
|
__OSUnlockSram(FALSE);
|
||||||
return;
|
return;
|
||||||
|
@ -266,22 +352,64 @@ void OSSetSoundMode(u32 mode) {
|
||||||
__OSUnlockSram(TRUE);
|
__OSUnlockSram(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if NONMATCHING
|
||||||
u32 OSGetProgressiveMode() {
|
u32 OSGetProgressiveMode() {
|
||||||
OSSram* sram;
|
OSSram* sram;
|
||||||
u32 mode;
|
u32 mode;
|
||||||
|
|
||||||
sram = __OSLockSram();
|
sram = __OSLockSramHACK();
|
||||||
mode = (sram->flags & 0x80) >> 7;
|
mode = (sram->flags & 0x80) >> 7;
|
||||||
__OSUnlockSram(FALSE);
|
__OSUnlockSram(FALSE);
|
||||||
return mode;
|
return mode;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
/* clang-format off */
|
||||||
|
#pragma push
|
||||||
|
#pragma optimization_level
|
||||||
|
#pragma optimizewithasm off
|
||||||
|
asm u32 OSGetProgressiveMode() {
|
||||||
|
nofralloc
|
||||||
|
/* 80384134 00381094 7C 08 02 A6 */ mflr r0
|
||||||
|
/* 80384138 00381098 3C 60 80 54 */ lis r3, Scb@ha
|
||||||
|
/* 8038413C 0038109C 90 01 00 04 */ stw r0, 4(r1)
|
||||||
|
/* 80384140 003810A0 94 21 FF E8 */ stwu r1, -0x18(r1)
|
||||||
|
/* 80384144 003810A4 93 E1 00 14 */ stw r31, 0x14(r1)
|
||||||
|
/* 80384148 003810A8 3B E3 15 A0 */ addi r31, r3, Scb@l
|
||||||
|
/* 8038414C 003810AC 4B FF D5 15 */ bl OSDisableInterrupts
|
||||||
|
/* 80384150 003810B0 80 1F 00 48 */ lwz r0, 0x48(r31)
|
||||||
|
/* 80384154 003810B4 38 9F 00 48 */ addi r4, r31, 0x48
|
||||||
|
/* 80384158 003810B8 2C 00 00 00 */ cmpwi r0, 0
|
||||||
|
/* 8038415C 003810BC 41 82 00 10 */ beq lbl_8038416C
|
||||||
|
/* 80384160 003810C0 4B FF D5 29 */ bl OSRestoreInterrupts
|
||||||
|
/* 80384164 003810C4 3B E0 00 00 */ li r31, 0
|
||||||
|
/* 80384168 003810C8 48 00 00 10 */ b lbl_80384178
|
||||||
|
lbl_8038416C:
|
||||||
|
/* 8038416C 003810CC 90 7F 00 44 */ stw r3, 0x44(r31)
|
||||||
|
/* 80384170 003810D0 38 00 00 01 */ li r0, 1
|
||||||
|
/* 80384174 003810D4 90 04 00 00 */ stw r0, 0(r4)
|
||||||
|
lbl_80384178:
|
||||||
|
/* 80384178 003810D8 88 1F 00 13 */ lbz r0, 0x13(r31)
|
||||||
|
/* 8038417C 003810DC 38 60 00 00 */ li r3, 0
|
||||||
|
/* 80384180 003810E0 38 80 00 00 */ li r4, 0
|
||||||
|
/* 80384184 003810E4 54 1F CF FE */ rlwinm r31, r0, 0x19, 0x1f, 0x1f
|
||||||
|
/* 80384188 003810E8 4B FF FA 05 */ bl UnlockSram
|
||||||
|
/* 8038418C 003810EC 7F E3 FB 78 */ mr r3, r31
|
||||||
|
/* 80384190 003810F0 80 01 00 1C */ lwz r0, 0x1c(r1)
|
||||||
|
/* 80384194 003810F4 83 E1 00 14 */ lwz r31, 0x14(r1)
|
||||||
|
/* 80384198 003810F8 38 21 00 18 */ addi r1, r1, 0x18
|
||||||
|
/* 8038419C 003810FC 7C 08 03 A6 */ mtlr r0
|
||||||
|
/* 803841A0 00381100 4E 80 00 20 */ blr
|
||||||
|
}
|
||||||
|
#pragma pop
|
||||||
|
/* clang-format on */
|
||||||
|
#endif
|
||||||
|
|
||||||
void OSSetProgressiveMode(u32 mode) {
|
void OSSetProgressiveMode(u32 mode) {
|
||||||
OSSram* sram;
|
OSSram* sram;
|
||||||
mode <<= 7;
|
mode <<= 7;
|
||||||
mode &= 0x80;
|
mode &= 0x80;
|
||||||
|
|
||||||
sram = __OSLockSram();
|
sram = __OSLockSramHACK();
|
||||||
if (mode == (sram->flags & 0x80)) {
|
if (mode == (sram->flags & 0x80)) {
|
||||||
__OSUnlockSram(FALSE);
|
__OSUnlockSram(FALSE);
|
||||||
return;
|
return;
|
||||||
|
@ -292,16 +420,58 @@ void OSSetProgressiveMode(u32 mode) {
|
||||||
__OSUnlockSram(TRUE);
|
__OSUnlockSram(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if NONMATCHING
|
||||||
u8 OSGetLanguage() {
|
u8 OSGetLanguage() {
|
||||||
OSSram* sram;
|
OSSram* sram;
|
||||||
u8 language;
|
u8 language;
|
||||||
|
|
||||||
sram = __OSLockSram();
|
sram = __OSLockSramHACK();
|
||||||
language = sram->language;
|
language = sram->language;
|
||||||
__OSUnlockSram(FALSE);
|
__OSUnlockSram(FALSE);
|
||||||
return language;
|
return language;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
/* clang-format off */
|
||||||
|
#pragma push
|
||||||
|
#pragma optimization_level
|
||||||
|
#pragma optimizewithasm off
|
||||||
|
asm u8 OSGetLanguage() {
|
||||||
|
nofralloc
|
||||||
|
mflr r0
|
||||||
|
lis r3, Scb@ha
|
||||||
|
stw r0, 4(r1)
|
||||||
|
stwu r1, -0x18(r1)
|
||||||
|
stw r31, 0x14(r1)
|
||||||
|
addi r31, r3, Scb@l
|
||||||
|
bl OSDisableInterrupts
|
||||||
|
lwz r0, 0x48(r31)
|
||||||
|
addi r4, r31, 0x48
|
||||||
|
cmpwi r0, 0
|
||||||
|
beq lbl_80384280
|
||||||
|
bl OSRestoreInterrupts
|
||||||
|
li r31, 0
|
||||||
|
b lbl_8038428C
|
||||||
|
lbl_80384280:
|
||||||
|
stw r3, 0x44(r31)
|
||||||
|
li r0, 1
|
||||||
|
stw r0, 0(r4)
|
||||||
|
lbl_8038428C:
|
||||||
|
lbz r31, 0x12(r31)
|
||||||
|
li r3, 0
|
||||||
|
li r4, 0
|
||||||
|
bl UnlockSram
|
||||||
|
mr r3, r31
|
||||||
|
lwz r0, 0x1c(r1)
|
||||||
|
lwz r31, 0x14(r1)
|
||||||
|
addi r1, r1, 0x18
|
||||||
|
mtlr r0
|
||||||
|
blr
|
||||||
|
}
|
||||||
|
#pragma pop
|
||||||
|
/* clang-format on */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if NONMATCHING
|
||||||
u32 OSGetWirelessID(u32 channel) {
|
u32 OSGetWirelessID(u32 channel) {
|
||||||
OSSramEx* sram;
|
OSSramEx* sram;
|
||||||
u16 id;
|
u16 id;
|
||||||
|
@ -311,6 +481,54 @@ u32 OSGetWirelessID(u32 channel) {
|
||||||
__OSUnlockSramEx(FALSE);
|
__OSUnlockSramEx(FALSE);
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
/* clang-format off */
|
||||||
|
#pragma push
|
||||||
|
#pragma optimization_level
|
||||||
|
#pragma optimizewithasm off
|
||||||
|
|
||||||
|
asm u32 OSGetWirelessID(u32 channel) {
|
||||||
|
nofralloc
|
||||||
|
mflr r0
|
||||||
|
lis r4, Scb@ha
|
||||||
|
stw r0, 4(r1)
|
||||||
|
stwu r1, -0x20(r1)
|
||||||
|
stw r31, 0x1c(r1)
|
||||||
|
addi r31, r4, Scb@l
|
||||||
|
stw r30, 0x18(r1)
|
||||||
|
addi r30, r3, 0
|
||||||
|
bl OSDisableInterrupts
|
||||||
|
lwz r0, 0x48(r31)
|
||||||
|
addi r4, r31, 0x48
|
||||||
|
cmpwi r0, 0
|
||||||
|
beq lbl_803842F4
|
||||||
|
bl OSRestoreInterrupts
|
||||||
|
li r3, 0
|
||||||
|
b lbl_80384304
|
||||||
|
lbl_803842F4:
|
||||||
|
stw r3, 0x44(r31)
|
||||||
|
li r0, 1
|
||||||
|
addi r3, r31, 0x14
|
||||||
|
stw r0, 0(r4)
|
||||||
|
lbl_80384304:
|
||||||
|
slwi r0, r30, 1
|
||||||
|
add r3, r3, r0
|
||||||
|
lhz r31, 0x1c(r3)
|
||||||
|
li r3, 0
|
||||||
|
li r4, 0x14
|
||||||
|
bl UnlockSram
|
||||||
|
mr r3, r31
|
||||||
|
lwz r0, 0x24(r1)
|
||||||
|
lwz r31, 0x1c(r1)
|
||||||
|
lwz r30, 0x18(r1)
|
||||||
|
addi r1, r1, 0x20
|
||||||
|
mtlr r0
|
||||||
|
blr
|
||||||
|
}
|
||||||
|
#pragma pop
|
||||||
|
/* clang-format on */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
void OSSetWirelessID(u32 channel, u16 id) {
|
void OSSetWirelessID(u32 channel, u16 id) {
|
||||||
OSSramEx* sram;
|
OSSramEx* sram;
|
||||||
|
|
Loading…
Reference in New Issue