dol stuff

This commit is contained in:
Prakxo
2023-01-09 08:50:19 +01:00
parent 594e904145
commit 70983ac31a
15 changed files with 435 additions and 48 deletions
+13 -7
View File
@@ -4,16 +4,22 @@ libultra/gfxprint/gfxprint_locate8x8.c:
.text: [0x8005B210, 0x8005B238]
libforest/ReconfigBATs.c:
.text: [0x8005adac, 0x8005aed4]
# OS/OSDisableInterrupts.c:
# .text: [0x8007ac24, 0x8007ac38]
OS/OSEnableInterrupts.c:
.text: [0x8007ac38, 0x8007ac4c]
OS/OSRestoreInterrupts.c:
.text: [0x8007ac4c, 0x8007ac70]
BASE/ppcarch.c:
.text: [0x8007867c, 0x800786e8]
OS/OSArena.c:
.text: [0x8007988c, 0x800798ac]
.sdata: [0x80218178, 0x80218180]
.sbss: [0x802188f8, 0x80218900]
# OS/OSCache.c:
# .text: [0x80079b40, 0x80079d30]
# OS/OSDisableInterrupts.c:
# .text: [0x8007ac24, 0x8007ac38]
OS/OSEnableInterrupts.c:
.text: [0x8007ac38, 0x8007ac4c]
OS/OSRestoreInterrupts.c:
.text: [0x8007ac4c, 0x8007ac70]
MSL_C/rand.c:
.text: [0x8009f46c, 0x8009f494]
.sdata: [0x80218260, 0x80218268]
libultra/ultra.c:
.text: [0x8005d01c, 0x8005d090]
+1 -1
View File
@@ -7,7 +7,7 @@ zurumode/zerucheck_key_check.c:
zurumode/zurumode_cleanup.c:
.text: [0x8040efc4, 0x8040f008]
# zurumode/zurumode_update.c:
# .text: [0x8040EDA8 , 0x8040ee74] Has C++ functions but was matched with C?? Won't really bother at the moment with this one.
# .text: [0x8040EDA8 , 0x8040ee74] Won't really bother at the moment with this one.
m_random_field/mRF_MakePerfectBit.c:
.text: [0x8050B1AC, 0x8050B1D4]
m_random_field/mRF_GetRandomStepMode.c:
+1
View File
@@ -1,6 +1,7 @@
#ifndef OS_CACHE_H
#define OS_CACHE_H
#include "types.h"
#include "dolphin/OSContext.h"
#ifdef __cplusplus
extern "C" {
#endif
+45
View File
@@ -0,0 +1,45 @@
#ifndef OS_CONTEXT_H
#define OS_CONTEXT_H
#include "types.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct OSContext{
u32 gprs[32];
u32 cr;
u32 lr;
u32 ctr;
u32 xer;
f64 fprs[32];
u32 fpscr_tmp;
u32 fpscr;
u32 srr0;
u32 srr1;
u16 SHORT_0x1A0;
u16 SHORT_0x1A2;
u32 gqrs[8];
char UNK_0x1C4;
f64 psfs[32];
} OSContext;
OSContext* OS_CURRENT_CONTEXT_PHYS : 0x800000C0;
OSContext* OS_CURRENT_CONTEXT : 0x800000D4;
OSContext* OS_CURRENT_FPU_CONTEXT : 0x800000D8;
asm void OSSaveFPUContext(OSContext*);
asm void OSSetCurrentContext(OSContext*);
OSContext* OSGetCurrentContext(void);
asm BOOL OSSaveContext(OSContext*);
asm void OSLoadContext(OSContext*);
asm void* OSGetStackPointer(void);
void OSClearContext(OSContext*);
asm void OSInitContext(OSContext*);
void OSDumpContext(OSContext*);
void __OSContextInit(void);
#ifdef __cplusplus
}
#endif
#endif
+10
View File
@@ -1,7 +1,17 @@
#ifndef OS_MEMORY_H
#define OS_MEMORY_H
#include "types.h"
#ifdef __cplusplus
extern "C" {
#endif
#define SIM_MEM *(u32 *)0x800000f0
static asm void Config24MB();
static asm void Config48MB();
u32 OSGetConsoleSimulatedMemSize(void);
#ifdef __cplusplus
}
#endif
#endif
+13
View File
@@ -0,0 +1,13 @@
#ifndef OS_TIME_H
#define OS_TIME_H
#include "types.h"
#ifdef __cplusplus
extern "C" {
#endif
asm s32 OSGetTime(void);
#ifdef __cplusplus
}
#endif
#endif
+4
View File
@@ -12,6 +12,10 @@ void OSReport(const char*, ...);
asm BOOL OSDisableInterrupts(void);
asm BOOL OSEnableInterrupts(void);
asm BOOL OSRestoreInterrupts(BOOL level);
void __RAS_OSDisableInterrupts_begin(void);
void __RAS_OSDisableInterrupts_end(void);
#ifdef __cplusplus
}
#endif
+11 -3
View File
@@ -1,10 +1,18 @@
#ifndef LIBULTRA_H
#define LIBULTRA_H
#include "types.h"
void bcmp (const void *v1, const void *v2, u32 size);
void bcopy(const void *dst, void *src, size_t n);
#include "dolphin/OSTime.h"
#include "dolphin/OSCache.h"
int bcmp (void *v1, void *v2, u32 size);
void bcopy(void *dst, void *src, size_t n);
void bzero(void *ptr, size_t size);
void osSyncPrintf(const char* fmt, ...);
void osWritebackDCache(void* vaddr, u32 nbytes);
u32 osGetCount(void);
extern s32 osAppNMIBuffer[15];
extern void * memcpy(void * dst, const void * src, size_t n);
extern void * memset(void * dst, int val, size_t n);
extern void __fill_mem(void * dst, int val, unsigned long n);
#endif
+8
View File
@@ -0,0 +1,8 @@
#ifndef RAND_H
#define RAND_H
#include "types.h"
void srand (u32 seeed);
int rand(void);
#endif
+12
View File
@@ -0,0 +1,12 @@
#include "rand.h"
static u32 next = 1;
void srand(u32 seed){
next = seed;
}
int rand(){
next = next * 1103515245 + 12345;
return ((next >> 16) & 0x7fff);
}
+37 -37
View File
@@ -2,7 +2,7 @@
//Needs OSError stuff
asm void DCEnable(void){
nofralloc
sync 0
sync
mfspr r3, 0x3f0
ori r3, r3, 0x4000
mtspr 0x3f0, r3
@@ -10,42 +10,42 @@ asm void DCEnable(void){
}
asm void DCInvalidateRange(register void* buf, register u32 len){
nofralloc
cmplw len, 0
cmplwi len, 0
blelr-
clrlwi. r5, buf, 0x1b
beq- pi_r
addi len, len 0x20
addi len, len, 0x20
pi_r:
addi len, len 0x1f
addi len, len, 0x1f
srwi len, len, 5
mtctr len
inv_ran:
dcbi 0, buf
addi buf, buf 0x20
addi buf, buf, 0x20
bdnz inv_ran
blr
}
asm void DCFlushRange(register void* buf, register u32 len){
nofralloc
cmplw len, 0
cmplwi len, 0
blelr-
clrlwi. r5, buf, 0x1b
beq- pf_r
addi len, len 0x20
addi len, len, 0x20
pf_r:
addi len, len 0x1f
addi len, len, 0x1f
srwi len, len, 5
mtctr len
fls_ran:
dcbf 0, buf
addi buf, buf 0x20
addi buf, buf, 0x20
bdnz fls_ran
sc
blr
@@ -53,21 +53,21 @@ fls_ran:
asm void DCStoreRange(register void* buf, register u32 len){
nofralloc
cmplw len, 0
cmplwi len, 0
blelr-
clrlwi. r5, buf, 0x1b
beq- ps_r
addi len, len 0x20
addi len, len, 0x20
ps_r:
addi len, len 0x1f
addi len, len, 0x1f
srwi len, len, 5
mtctr len
st_ran:
dcbst 0, buf
addi buf, buf 0x20
addi buf, buf, 0x20
bdnz st_ran
sc
blr
@@ -75,42 +75,42 @@ st_ran:
asm void DCFlushRangeNoSync(register void* buf, register u32 len){
nofralloc
cmplw len, 0
cmplwi len, 0
blelr-
clrlwi. r5, buf, 0x1b
beq- pf_r
addi len, len 0x20
beq- pfns_r
addi len, len, 0x20
pfns_r:
addi len, len 0x1f
addi len, len, 0x1f
srwi len, len, 5
mtctr len
fls_ranns:
dcbf 0, buf
addi buf, buf 0x20
addi buf, buf, 0x20
bdnz fls_ranns
blr
}
asm void DCStoreRangeNoSync(register void* buf, register u32 len){
nofralloc
cmplw len, 0
cmplwi len, 0
blelr-
clrlwi. r5, buf, 0x1b
beq- psns_r
addi len, len 0x20
addi len, len, 0x20
psns_r:
addi len, len 0x1f
addi len, len, 0x1f
srwi len, len, 5
mtctr len
st_ranns:
dcbst 0, buf
addi buf, buf 0x20
addi buf, buf, 0x20
bdnz st_ranns
sc
blr
@@ -118,65 +118,65 @@ st_ranns:
asm void DCZeroRange(register void* buf, register u32 len){
nofralloc
cmplw len, 0
cmplwi len, 0
blelr-
clrlwi. r5, buf, 0x1b
beq- pzr_r
addi len, len 0x20
addi len, len, 0x20
pzr_r:
addi len, len 0x1f
addi len, len, 0x1f
srwi len, len, 5
mtctr len
z_ran:
dcbz 0, buf
addi buf, buf 0x20
addi buf, buf, 0x20
bdnz z_ran
blr
}
asm void DCTouchRange(register void* buf, register u32 len){
nofralloc
cmplw len, 0
cmplwi len, 0
blelr-
clrlwi. r5, buf, 0x1b
beq- ptor_r
addi len, len 0x20
addi len, len, 0x20
ptor_r:
addi len, len 0x1f
addi len, len, 0x1f
srwi len, len, 5
mtctr len
t_ran:
dcbt 0, buf
addi buf, buf 0x20
addi buf, buf, 0x20
bdnz t_ran
blr
}
asm void ICInvalidateRange(register void* buf, register u32 len){
nofralloc
cmplw len, 0
cmplwi len, 0
blelr-
clrlwi. r5, buf, 0x1b
beq- pir_r
addi len, len 0x20
addi len, len, 0x20
pir_r:
addi len, len 0x1f
addi len, len, 0x1f
srwi len, len, 5
mtctr len
i_ran:
icbi 0, buf
addi buf, buf 0x20
addi buf, buf, 0x20
bdnz i_ran
sync 0
sync
isync
blr
}
@@ -197,14 +197,14 @@ asm void ICEnable(void){
blr
}
asm void ICDisable(void){
asm void LCDisable(void){
nofralloc
lis r3, 0xE000
li r4, 0x200
mtctr r4
dis:
dcbi 0, r3
addi r3, r3 0x20
addi r3, r3, 0x20
bdnz dis
mfspr r4, 0x398
rlwinm r4, r4, 0, 4, 2
+249
View File
@@ -0,0 +1,249 @@
#include "dolphin/OSContext.h"
static asm void __OSLoadFPUContext(int unused, register OSContext* ctx){
nofralloc
lhz r5, ctx->SHORT_0x1A2
clrlwi. r5, r5, 0x1f
beq exit
lfd f0, ctx->fpscr_temp
mtfs f0
mfspr r5, 0x398
rlwinm. r5, r5, 3, 0x1f, 0x1f
beq load_fprs
psq_l f0, 0x1C8(ctx), 0, 0
psq_l f1, 0x1D0(ctx), 0, 0
psq_l f2, 0x1D8(ctx), 0, 0
psq_l f3, 0x1E0(ctx), 0, 0
psq_l f4, 0x1E8(ctx), 0, 0
psq_l f5, 0x1F0(ctx), 0, 0
psq_l f6, 0x1F8(ctx), 0, 0
psq_l f7, 0x200(ctx), 0, 0
psq_l f8, 0x208(ctx), 0, 0
psq_l f9, 0x210(ctx), 0, 0
psq_l f10, 0x218(ctx), 0, 0
psq_l f11, 0x220(ctx), 0, 0
psq_l f12, 0x228(ctx), 0, 0
psq_l f13, 0x230(ctx), 0, 0
psq_l f14, 0x238(ctx), 0, 0
psq_l f15, 0x240(ctx), 0, 0
psq_l f16, 0x248(ctx), 0, 0
psq_l f17, 0x250(ctx), 0, 0
psq_l f18, 0x258(ctx), 0, 0
psq_l f19, 0x260(ctx), 0, 0
psq_l f20, 0x268(ctx), 0, 0
psq_l f21, 0x270(ctx), 0, 0
psq_l f22, 0x278(ctx), 0, 0
psq_l f23, 0x280(ctx), 0, 0
psq_l f24, 0x288(ctx), 0, 0
psq_l f25, 0x290(ctx), 0, 0
psq_l f26, 0x298(ctx), 0, 0
psq_l f27, 0x2A0(ctx), 0, 0
psq_l f28, 0x2A8(ctx), 0, 0
psq_l f29, 0x2B0(ctx), 0, 0
psq_l f30, 0x2B8(ctx), 0, 0
psq_l f31, 0x2C0(ctx), 0, 0
load_fprs:
lfd f0, ctx->fprs[0]
lfd f1, ctx->fprs[1]
lfd f2, ctx->fprs[2]
lfd f3, ctx->fprs[3]
lfd f4, ctx->fprs[4]
lfd f5, ctx->fprs[5]
lfd f6, ctx->fprs[6]
lfd f7, ctx->fprs[7]
lfd f8, ctx->fprs[8]
lfd f9, ctx->fprs[9]
lfd f10, ctx->fprs[10]
lfd f11, ctx->fprs[11]
lfd f12, ctx->fprs[12]
lfd f13, ctx->fprs[13]
lfd f14, ctx->fprs[14]
lfd f15, ctx->fprs[15]
lfd f16, ctx->fprs[16]
lfd f17, ctx->fprs[17]
lfd f18, ctx->fprs[18]
lfd f19, ctx->fprs[19]
lfd f20, ctx->fprs[20]
lfd f21, ctx->fprs[21]
lfd f22, ctx->fprs[22]
lfd f23, ctx->fprs[23]
lfd f24, ctx->fprs[24]
lfd f25, ctx->fprs[25]
lfd f26, ctx->fprs[26]
lfd f27, ctx->fprs[27]
lfd f28, ctx->fprs[28]
lfd f29, ctx->fprs[29]
lfd f30, ctx->fprs[30]
lfd f31, ctx->fprs[31]
exit:
blr
}
static asm void __OSSaveFPUContext( int unused, int unused1, register OSContext* ctx){
nofralloc
lhz r3, ctx->SHORT_0x1A2
ori r3, r3, 1
sth r3, ctx->SHORT_0x1A2
stfd f0, ctx->fprs[0]
stfd f1, ctx->fprs[1]
stfd f2, ctx->fprs[2]
stfd f3, ctx->fprs[3]
stfd f4, ctx->fprs[4]
stfd f5, ctx->fprs[5]
stfd f6, ctx->fprs[6]
stfd f7, ctx->fprs[7]
stfd f8, ctx->fprs[8]
stfd f9, ctx->fprs[9]
stfd f10, ctx->fprs[10]
stfd f11, ctx->fprs[11]
stfd f12, ctx->fprs[12]
stfd f13, ctx->fprs[13]
stfd f14, ctx->fprs[14]
stfd f15, ctx->fprs[15]
stfd f16, ctx->fprs[16]
stfd f17, ctx->fprs[17]
stfd f18, ctx->fprs[18]
stfd f19, ctx->fprs[19]
stfd f20, ctx->fprs[20]
stfd f21, ctx->fprs[21]
stfd f22, ctx->fprs[22]
stfd f23, ctx->fprs[23]
stfd f24, ctx->fprs[24]
stfd f25, ctx->fprs[25]
stfd f26, ctx->fprs[26]
stfd f27, ctx->fprs[27]
stfd f28, ctx->fprs[28]
stfd f29, ctx->fprs[29]
stfd f30, ctx->fprs[30]
stfd f31, ctx->fprs[31]
mffs f0
stfd f0, ctx->fpscr_tmp
lfd f0, ctx->fprs[0]
mfspr r3, 0x398
rlwinm. r3, r3, 3, 0x1f, 0x1f
beq exit
psq_st f0, 0x1C8(ctx), 0, 0
psq_st f1, 0x1D0(ctx), 0, 0
psq_st f2, 0x1D8(ctx), 0, 0
psq_st f3, 0x1E0(ctx), 0, 0
psq_st f4, 0x1E8(ctx), 0, 0
psq_st f5, 0x1F0(ctx), 0, 0
psq_st f6, 0x1F8(ctx), 0, 0
psq_st f7, 0x200(ctx), 0, 0
psq_st f8, 0x208(ctx), 0, 0
psq_st f9, 0x210(ctx), 0, 0
psq_st f10, 0x218(ctx), 0, 0
psq_st f11, 0x220(ctx), 0, 0
psq_st f12, 0x228(ctx), 0, 0
psq_st f13, 0x230(ctx), 0, 0
psq_st f14, 0x238(ctx), 0, 0
psq_st f15, 0x240(ctx), 0, 0
psq_st f16, 0x248(ctx), 0, 0
psq_st f17, 0x250(ctx), 0, 0
psq_st f18, 0x258(ctx), 0, 0
psq_st f19, 0x260(ctx), 0, 0
psq_st f20, 0x268(ctx), 0, 0
psq_st f21, 0x270(ctx), 0, 0
psq_st f22, 0x278(ctx), 0, 0
psq_st f23, 0x280(ctx), 0, 0
psq_st f24, 0x288(ctx), 0, 0
psq_st f25, 0x290(ctx), 0, 0
psq_st f26, 0x298(ctx), 0, 0
psq_st f27, 0x2A0(ctx), 0, 0
psq_st f28, 0x2A8(ctx), 0, 0
psq_st f29, 0x2B0(ctx), 0, 0
psq_st f30, 0x2B8(ctx), 0, 0
psq_st f31, 0x2C0(ctx), 0, 0
exit:
blr
}
asm void OSSetCurrentContext(register OSContext* ctx){
nofralloc
lis r4, 0x8000
stw ctx, OS_GET_CURRENT_CONTEXT@l(r4)
clrlwi r5, ctx, 2
stw r5, OS_CURRENT_CONTEXT_PHYS@l(r4)
lwz r5, OS_CURRENT_FPU_CONTEXT@l(r4)
cmpw r5, ctx
bne not_cur_fpu_ctx
lwz r6, ctx->srr1
ori r6, r6, 0x2000
stw r6, ctx->srr1
mfmsr r6
ori r6, r6, 2
mtmsr r6
blr
not_cur_fpu_ctx:
lwz r6, ctx->srr1
rlwinm r6, r6, 0, 0x13, 0x11
stw r6, ctx->srr1
mfmsr r6
rlwinm r6, r6, 0, 0x13, 0x11
ori r6, r6, 2
mtmsr r6
isync
blr
}
OSContext* OSGetCurrentContext(void) {
return(OS_CURRENT_CONTEXT)
}
asm BOOL OSSaveContext(register OSContext* ctx){
nofralloc
stmw r13, ctx->gprs[13]
mfspr r0, 0x391
stw r3, ctx->gqrs[1]
mfspr r0, 0x392
stw r3, ctx->gqrs[2]
mfspr r0, 0x393
stw r3, ctx->gqrs[3]
mfpsr r0, 0x394
stw r3, ctx->gqrs[4]
mfspr r0, 0x395
stw r3, ctx->gqrs[5]
mfpsr r0, 0x396
stw r3, ctx->gqrs[6]
mfspr r0, 0x397
stw r3, ctx->gqrs[7]
mfcr r0
stw r3, ctx->cr
mflr r0
stw r3, ctx->lr
stw r3, ctx->srr0
mfmsr r0
stw r3, ctx->srr1
mfctr r0
stw r3, ctx->ctr
mfxer r0
stw r3, ctx->xer
stw r1, ctx->gprs[1]
stw r2, ctx->gprs[2]
li r0, 1
li r0, 0x0c(r3)
li r3, 0
blr
}
/* asm void OSLoadContext(register OSContext* ctx){
nofralloc
} */
+3
View File
@@ -2,9 +2,12 @@
asm BOOL OSDisableInterrupts(void){
nofralloc
entry __RAS_OSDisableInterrupts_begin
mfmsr r3
rlwinm r4, r3, 0, 17, 15
mtmsr r4
entry __RAS_OSDisableInterrupts_end
rlwinm r3, r3, 17, 31, 31
blr
}
+5
View File
@@ -0,0 +1,5 @@
#include "dolphin/OSMemory.h"
u32 OSGetConsoleSimulatedMemSize(void){
return(SIM_MEM);
}
+23
View File
@@ -0,0 +1,23 @@
#include "libultra/libultra.h"
void bcopy(void* __src, void* __dst, size_t __n) {
memmove(__dst, __src, __n);
}
int bcmp(void* __s1, void* __s2, size_t __n) {
return memcmp(__s1, __s2, __n);
}
void bzero(void* __s, size_t __n) {
memset(__s, 0, __n);
}
/* void osWritebackDCache(void* buf, u32 len){
DCStoreRange();
}
*/
/* s32 osGetCount(void){
return OSGetTick();
}
*/