mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-23 06:34:18 -04:00
rename part1
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
#ifndef JKRHEAP_H
|
||||
#define JKRHEAP_H
|
||||
|
||||
#include "dolphin/OS/OSMutex.h"
|
||||
#include "dolphin/os/OSMutex.h"
|
||||
#include "JSystem/JKernel/JKRDisposer.h"
|
||||
|
||||
#include "types.h"
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
#ifndef _DOLPHIN_OS
|
||||
#define _DOLPHIN_OS
|
||||
|
||||
#include "types.h"
|
||||
#include "dolphin/OS/OSContext.h"
|
||||
#include "va_args.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void OSPanic(const char *file, int line, const char *message, ...);
|
||||
void OSReport(const char*, ...);
|
||||
void OSVReport(const char* format, va_list list);
|
||||
|
||||
#define OSErrorLine(line, ...) \
|
||||
OSPanic(__FILE__, line, __VA_ARGS__)
|
||||
|
||||
asm BOOL OSDisableInterrupts(void);
|
||||
asm BOOL OSEnableInterrupts(void);
|
||||
asm BOOL OSRestoreInterrupts(BOOL level);
|
||||
|
||||
void __RAS_OSDisableInterrupts_begin(void);
|
||||
void __RAS_OSDisableInterrupts_end(void);
|
||||
|
||||
typedef void (*OSExceptionHandler)(u8, OSContext*);
|
||||
OSExceptionHandler __OSSetExceptionHandler(u8, OSExceptionHandler);
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
#endif
|
||||
#ifndef _DOLPHIN_OS
|
||||
#define _DOLPHIN_OS
|
||||
|
||||
#include "types.h"
|
||||
#include "dolphin/os/OSContext.h"
|
||||
#include "va_args.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void OSPanic(const char *file, int line, const char *message, ...);
|
||||
void OSReport(const char*, ...);
|
||||
void OSVReport(const char* format, va_list list);
|
||||
|
||||
#define OSErrorLine(line, ...) \
|
||||
OSPanic(__FILE__, line, __VA_ARGS__)
|
||||
|
||||
asm BOOL OSDisableInterrupts(void);
|
||||
asm BOOL OSEnableInterrupts(void);
|
||||
asm BOOL OSRestoreInterrupts(BOOL level);
|
||||
|
||||
void __RAS_OSDisableInterrupts_begin(void);
|
||||
void __RAS_OSDisableInterrupts_end(void);
|
||||
|
||||
typedef void (*OSExceptionHandler)(u8, OSContext*);
|
||||
OSExceptionHandler __OSSetExceptionHandler(u8, OSExceptionHandler);
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
#endif
|
||||
@@ -1,18 +1,18 @@
|
||||
#ifndef OS_ARENA_H
|
||||
#define OS_ARENA_H
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"{
|
||||
#endif
|
||||
|
||||
void* OSGetArenaHi(void);
|
||||
void* OSGetArenaLo(void);
|
||||
|
||||
void OSSetArenaHi(void*);
|
||||
void OSSetArenaLo(void*);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#ifndef OS_ARENA_H
|
||||
#define OS_ARENA_H
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"{
|
||||
#endif
|
||||
|
||||
void* OSGetArenaHi(void);
|
||||
void* OSGetArenaLo(void);
|
||||
|
||||
void OSSetArenaHi(void*);
|
||||
void OSSetArenaLo(void*);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -1,30 +1,30 @@
|
||||
#ifndef OS_CACHE_H
|
||||
#define OS_CACHE_H
|
||||
#include "types.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
asm void DCEnable(void);
|
||||
asm void DCInvalidateRange(void*, u32);
|
||||
asm void DCFlushRange(void*, u32);
|
||||
asm void DCStoreRange(void*, u32);
|
||||
asm void DCFlushRangeNoSync(void*, u32);
|
||||
asm void DCStoreRangeNoSync(void*, u32);
|
||||
asm void DCZeroRange(void*, u32);
|
||||
asm void DCTouchRange(void*, u32 len);
|
||||
asm void ICInvalidateRange(void*, u32);
|
||||
asm void ICFlashInvalidate(void);
|
||||
asm void ICEnable(void);
|
||||
asm void LCDisable(void);
|
||||
|
||||
//void L2GlobalInvalidate(void);
|
||||
|
||||
//void DMAErrorHandler(u8, struct OSContext*, u32, u32, ...);
|
||||
|
||||
//void __OSCacheInit(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
#ifndef OS_CACHE_H
|
||||
#define OS_CACHE_H
|
||||
#include "types.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
asm void DCEnable(void);
|
||||
asm void DCInvalidateRange(void*, u32);
|
||||
asm void DCFlushRange(void*, u32);
|
||||
asm void DCStoreRange(void*, u32);
|
||||
asm void DCFlushRangeNoSync(void*, u32);
|
||||
asm void DCStoreRangeNoSync(void*, u32);
|
||||
asm void DCZeroRange(void*, u32);
|
||||
asm void DCTouchRange(void*, u32 len);
|
||||
asm void ICInvalidateRange(void*, u32);
|
||||
asm void ICFlashInvalidate(void);
|
||||
asm void ICEnable(void);
|
||||
asm void LCDisable(void);
|
||||
|
||||
//void L2GlobalInvalidate(void);
|
||||
|
||||
//void DMAErrorHandler(u8, struct OSContext*, u32, u32, ...);
|
||||
|
||||
//void __OSCacheInit(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -1,45 +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 mode;
|
||||
u16 state;
|
||||
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;
|
||||
|
||||
void OSSaveFPUContext(OSContext*);
|
||||
void OSSetCurrentContext(OSContext*);
|
||||
OSContext* OSGetCurrentContext(void);
|
||||
BOOL OSSaveContext(OSContext*);
|
||||
void OSLoadContext(OSContext*);
|
||||
void* OSGetStackPointer(void);
|
||||
void OSClearContext(OSContext*);
|
||||
void OSInitContext(register OSContext*, register u32 srr, register u32 sp);
|
||||
void OSDumpContext(const OSContext*);
|
||||
|
||||
void __OSContextInit(void);
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
#endif
|
||||
#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 mode;
|
||||
u16 state;
|
||||
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;
|
||||
|
||||
void OSSaveFPUContext(OSContext*);
|
||||
void OSSetCurrentContext(OSContext*);
|
||||
OSContext* OSGetCurrentContext(void);
|
||||
BOOL OSSaveContext(OSContext*);
|
||||
void OSLoadContext(OSContext*);
|
||||
void* OSGetStackPointer(void);
|
||||
void OSClearContext(OSContext*);
|
||||
void OSInitContext(register OSContext*, register u32 srr, register u32 sp);
|
||||
void OSDumpContext(const OSContext*);
|
||||
|
||||
void __OSContextInit(void);
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
#endif
|
||||
@@ -1,17 +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
|
||||
#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
|
||||
@@ -6,7 +6,7 @@ extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#include "dolphin/OS/OSThread.h"
|
||||
#include "dolphin/os/OSThread.h"
|
||||
|
||||
struct OSMutex
|
||||
{
|
||||
@@ -1,14 +1,14 @@
|
||||
#ifndef OS_TIME_H
|
||||
#define OS_TIME_H
|
||||
#include "types.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef s64 OSTime;
|
||||
OSTime OSGetTime(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#ifndef OS_TIME_H
|
||||
#define OS_TIME_H
|
||||
#include "types.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef s64 OSTime;
|
||||
OSTime OSGetTime(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -2,8 +2,8 @@
|
||||
#define BATCONFIG_H
|
||||
|
||||
#include "types.h"
|
||||
#include "dolphin/OS/OSMemory.h"
|
||||
#include "dolphin/OS/os.h"
|
||||
#include "dolphin/os/OSMemory.h"
|
||||
#include "dolphin/os.h"
|
||||
|
||||
asm void Config24MB();
|
||||
asm void Config48MB();
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
#define LIBULTRA_H
|
||||
|
||||
#include "types.h"
|
||||
#include "dolphin/OS/OSTime.h"
|
||||
#include "dolphin/OS/OSCache.h"
|
||||
#include "dolphin/os/OSTime.h"
|
||||
#include "dolphin/os/OSCache.h"
|
||||
|
||||
int bcmp (void *v1, void *v2, u32 size);
|
||||
void bcopy(void *dst, void *src, size_t n);
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#include "dolphin/OS/os.h"
|
||||
#include "dolphin/os.h"
|
||||
//#include "JSystem/JUT/JUTAssertion.h"
|
||||
//#include "JSystem/JUT/JUTDbPrint.h"
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
#include "JSystem/JUT/JUTAssertion.h"
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "dolphin/OS/os.h"
|
||||
#include "dolphin/OS/OSArena.h"
|
||||
#include "dolphin/OS/OSAlloc.h"
|
||||
#include "dolphin/OS/OSMemory.h"
|
||||
#include "dolphin/OS/OSUtil.h"
|
||||
#include "dolphin/OS/OSAddress.h"
|
||||
#include "dolphin/os.h"
|
||||
#include "dolphin/os/OSArena.h"
|
||||
#include "dolphin/os/OSAlloc.h"
|
||||
#include "dolphin/os/OSMemory.h"
|
||||
#include "dolphin/os/OSUtil.h"
|
||||
#include "dolphin/os/OSAddress.h"
|
||||
|
||||
JKRHeap *JKRHeap::sSystemHeap;
|
||||
JKRHeap *JKRHeap::sCurrentHeap;
|
||||
|
||||
@@ -1,171 +1,171 @@
|
||||
#include "dolphin/OS/OSAlarm.h"
|
||||
#include "dolphin/OS/OSTime.h"
|
||||
#include "dolphin/OS/OSContext.h"
|
||||
|
||||
static void DecrementerExceptionHandler(u8, OSContext*);
|
||||
|
||||
void OSInitAlarm(void){
|
||||
|
||||
if (__OSGetExceptionHandler(8) |= DecrementerExceptionHandler){
|
||||
AlarmQueue.tail = 0;
|
||||
AlarmQueue.head = 0;
|
||||
__OSSetExceptionHandler(8, DecrementerExceptionHandler);
|
||||
}
|
||||
}
|
||||
void OSCreateAlarm(OSAlarm* alarm){
|
||||
alarm->handler = NULL;
|
||||
}
|
||||
|
||||
static void InsertAlarm(OSAlarm* alarm, OSTime fire, OSAlarmHandler handler){
|
||||
OSAlarm* next;
|
||||
OSAlarm* prev;
|
||||
|
||||
if (0 < alarm->period) {
|
||||
OSTime time = __OSGetSystemTime();
|
||||
|
||||
fire = alarm->start;
|
||||
if (alarm->start < time) {
|
||||
fire += alarm->period * ((time - alarm->start) / alarm->period + 1);
|
||||
}
|
||||
}
|
||||
|
||||
alarm->handler = handler;
|
||||
alarm->fire = fire;
|
||||
|
||||
for (next = AlarmQueue.head; next; next = next->next){
|
||||
if (next->fire <= fire) {
|
||||
continue;
|
||||
}
|
||||
alarm->prev = next->prev;
|
||||
next->prev = alarm;
|
||||
alarm->next = next;
|
||||
prev = alarm->prev;
|
||||
if (prev) {
|
||||
prev->next = alarm;
|
||||
}
|
||||
else{
|
||||
AlarmQueue.head = alarm;
|
||||
SetTimer(alarm);
|
||||
}
|
||||
return;
|
||||
}
|
||||
alarm->next = 0;
|
||||
prev = AlarmQueue.tail;
|
||||
AlarmQueue.tail = alarm;
|
||||
alarm->prev = prev;
|
||||
if (prev) {
|
||||
prev->next = alarm;
|
||||
}
|
||||
else {
|
||||
AlarmQueue.head = AlarmQueue.tail = alarm;
|
||||
SetTimer(alarm);
|
||||
}
|
||||
}
|
||||
|
||||
void OSSetAlarm(OSAlarm* alarm, OSTime tick, OSAlarmHandler handler){
|
||||
u32 res = OSDisableInterrupts();
|
||||
alarm->period = 0;
|
||||
InsertAlarm(alarm, __OSGetSystemTime() + tick, handler);
|
||||
OSRestoreInterrupts(res);
|
||||
}
|
||||
|
||||
void OSCancelAlarm(OSAlarm* alarm){
|
||||
OSAlarm* next;
|
||||
BOOL res;
|
||||
|
||||
res = OSDisableInterrupts();
|
||||
|
||||
if(alarm->handler == 0) {
|
||||
OSRestoreInterrupts(res);
|
||||
return;
|
||||
}
|
||||
|
||||
next = alarm->next;
|
||||
if (next == 0) {
|
||||
AlarmQueue.tail = alarm->prev;
|
||||
}
|
||||
else {
|
||||
AlarmQueue.head = next;
|
||||
if (next) {
|
||||
SetTimer(next)
|
||||
}
|
||||
}
|
||||
alarm->handler = 0;
|
||||
|
||||
OSRestoreInterrupts(res);
|
||||
}
|
||||
|
||||
static void DecrementerExceptionCallback(register OSException exc, register OSContext* ctx){
|
||||
OSAlarmHandler handler;
|
||||
OSTime time;
|
||||
OSContext excctx;
|
||||
OSAlarm* alarm;
|
||||
OSAlarm* next;
|
||||
|
||||
time = __OSGetSystemTime();
|
||||
alarm = AlarmQueue.head;
|
||||
if (alarm == NULL){
|
||||
OSLoadContext(ctx);
|
||||
}
|
||||
|
||||
if (time < alarm->fire) {
|
||||
SetTimer(alarm);
|
||||
OSLoadContext(ctx);
|
||||
}
|
||||
next = alarm->next;
|
||||
AlarmQueue.head = next;
|
||||
if (next == NULL) {
|
||||
AlarmQueue.tail = NULL;
|
||||
}
|
||||
else {
|
||||
next->prev = NULL;
|
||||
}
|
||||
handler = alarm->handler;
|
||||
alarm->handler = NULL;
|
||||
|
||||
if (0 < alarm->period) {
|
||||
InsertAlarm(alarm, 0, handler);
|
||||
}
|
||||
if (AlarmQueue.head) {
|
||||
SetTimer(AlarmQueue.head);
|
||||
}
|
||||
|
||||
OSDisableScheduler();
|
||||
OSClearContext(&excctx);
|
||||
OSSetCurrentContext(&excctx);
|
||||
|
||||
handler(alarm, ctx);
|
||||
|
||||
OSClearContext(&excctx);
|
||||
OSSetCurrentContext(ctx);
|
||||
OSEnableScheduler();
|
||||
|
||||
__OSReschedule();
|
||||
OSLoadContext(ctx);
|
||||
}
|
||||
|
||||
static asm void DecrementerExceptionHandler(register u8 type, register OSContext* ctx){
|
||||
nofralloc
|
||||
stw r0, ctx->gprs[0]
|
||||
stw r1, ctx->gprs[1]
|
||||
stw r2, ctx->gprs[2]
|
||||
stmw r6, ctx->gprs[6]
|
||||
|
||||
mfspr r0, 0x391
|
||||
stw r0, ctx->gqrs[1]
|
||||
mfspr r0, 0x392
|
||||
stw r0, ctx->gqrs[2]
|
||||
mfspr r0, 0x393
|
||||
stw r0, ctx->gqrs[3]
|
||||
mfspr r0, 0x394
|
||||
stw r0, ctx->gqrs[4]
|
||||
mfspr r0, 0x395
|
||||
stw r0, ctx->gqrs[5]
|
||||
mfspr r0, 0x396
|
||||
stw r0, ctx->gqrs[6]
|
||||
mfspr r0, 0x397
|
||||
stw r0, ctx->gqrs[7]
|
||||
|
||||
stwu r1, -8(r1)
|
||||
b DecrementerExceptionCallback
|
||||
#include "dolphin/os/OSAlarm.h"
|
||||
#include "dolphin/os/OSTime.h"
|
||||
#include "dolphin/os/OSContext.h"
|
||||
|
||||
static void DecrementerExceptionHandler(u8, OSContext*);
|
||||
|
||||
void OSInitAlarm(void){
|
||||
|
||||
if (__OSGetExceptionHandler(8) |= DecrementerExceptionHandler){
|
||||
AlarmQueue.tail = 0;
|
||||
AlarmQueue.head = 0;
|
||||
__OSSetExceptionHandler(8, DecrementerExceptionHandler);
|
||||
}
|
||||
}
|
||||
void OSCreateAlarm(OSAlarm* alarm){
|
||||
alarm->handler = NULL;
|
||||
}
|
||||
|
||||
static void InsertAlarm(OSAlarm* alarm, OSTime fire, OSAlarmHandler handler){
|
||||
OSAlarm* next;
|
||||
OSAlarm* prev;
|
||||
|
||||
if (0 < alarm->period) {
|
||||
OSTime time = __OSGetSystemTime();
|
||||
|
||||
fire = alarm->start;
|
||||
if (alarm->start < time) {
|
||||
fire += alarm->period * ((time - alarm->start) / alarm->period + 1);
|
||||
}
|
||||
}
|
||||
|
||||
alarm->handler = handler;
|
||||
alarm->fire = fire;
|
||||
|
||||
for (next = AlarmQueue.head; next; next = next->next){
|
||||
if (next->fire <= fire) {
|
||||
continue;
|
||||
}
|
||||
alarm->prev = next->prev;
|
||||
next->prev = alarm;
|
||||
alarm->next = next;
|
||||
prev = alarm->prev;
|
||||
if (prev) {
|
||||
prev->next = alarm;
|
||||
}
|
||||
else{
|
||||
AlarmQueue.head = alarm;
|
||||
SetTimer(alarm);
|
||||
}
|
||||
return;
|
||||
}
|
||||
alarm->next = 0;
|
||||
prev = AlarmQueue.tail;
|
||||
AlarmQueue.tail = alarm;
|
||||
alarm->prev = prev;
|
||||
if (prev) {
|
||||
prev->next = alarm;
|
||||
}
|
||||
else {
|
||||
AlarmQueue.head = AlarmQueue.tail = alarm;
|
||||
SetTimer(alarm);
|
||||
}
|
||||
}
|
||||
|
||||
void OSSetAlarm(OSAlarm* alarm, OSTime tick, OSAlarmHandler handler){
|
||||
u32 res = OSDisableInterrupts();
|
||||
alarm->period = 0;
|
||||
InsertAlarm(alarm, __OSGetSystemTime() + tick, handler);
|
||||
OSRestoreInterrupts(res);
|
||||
}
|
||||
|
||||
void OSCancelAlarm(OSAlarm* alarm){
|
||||
OSAlarm* next;
|
||||
BOOL res;
|
||||
|
||||
res = OSDisableInterrupts();
|
||||
|
||||
if(alarm->handler == 0) {
|
||||
OSRestoreInterrupts(res);
|
||||
return;
|
||||
}
|
||||
|
||||
next = alarm->next;
|
||||
if (next == 0) {
|
||||
AlarmQueue.tail = alarm->prev;
|
||||
}
|
||||
else {
|
||||
AlarmQueue.head = next;
|
||||
if (next) {
|
||||
SetTimer(next)
|
||||
}
|
||||
}
|
||||
alarm->handler = 0;
|
||||
|
||||
OSRestoreInterrupts(res);
|
||||
}
|
||||
|
||||
static void DecrementerExceptionCallback(register OSException exc, register OSContext* ctx){
|
||||
OSAlarmHandler handler;
|
||||
OSTime time;
|
||||
OSContext excctx;
|
||||
OSAlarm* alarm;
|
||||
OSAlarm* next;
|
||||
|
||||
time = __OSGetSystemTime();
|
||||
alarm = AlarmQueue.head;
|
||||
if (alarm == NULL){
|
||||
OSLoadContext(ctx);
|
||||
}
|
||||
|
||||
if (time < alarm->fire) {
|
||||
SetTimer(alarm);
|
||||
OSLoadContext(ctx);
|
||||
}
|
||||
next = alarm->next;
|
||||
AlarmQueue.head = next;
|
||||
if (next == NULL) {
|
||||
AlarmQueue.tail = NULL;
|
||||
}
|
||||
else {
|
||||
next->prev = NULL;
|
||||
}
|
||||
handler = alarm->handler;
|
||||
alarm->handler = NULL;
|
||||
|
||||
if (0 < alarm->period) {
|
||||
InsertAlarm(alarm, 0, handler);
|
||||
}
|
||||
if (AlarmQueue.head) {
|
||||
SetTimer(AlarmQueue.head);
|
||||
}
|
||||
|
||||
OSDisableScheduler();
|
||||
OSClearContext(&excctx);
|
||||
OSSetCurrentContext(&excctx);
|
||||
|
||||
handler(alarm, ctx);
|
||||
|
||||
OSClearContext(&excctx);
|
||||
OSSetCurrentContext(ctx);
|
||||
OSEnableScheduler();
|
||||
|
||||
__OSReschedule();
|
||||
OSLoadContext(ctx);
|
||||
}
|
||||
|
||||
static asm void DecrementerExceptionHandler(register u8 type, register OSContext* ctx){
|
||||
nofralloc
|
||||
stw r0, ctx->gprs[0]
|
||||
stw r1, ctx->gprs[1]
|
||||
stw r2, ctx->gprs[2]
|
||||
stmw r6, ctx->gprs[6]
|
||||
|
||||
mfspr r0, 0x391
|
||||
stw r0, ctx->gqrs[1]
|
||||
mfspr r0, 0x392
|
||||
stw r0, ctx->gqrs[2]
|
||||
mfspr r0, 0x393
|
||||
stw r0, ctx->gqrs[3]
|
||||
mfspr r0, 0x394
|
||||
stw r0, ctx->gqrs[4]
|
||||
mfspr r0, 0x395
|
||||
stw r0, ctx->gqrs[5]
|
||||
mfspr r0, 0x396
|
||||
stw r0, ctx->gqrs[6]
|
||||
mfspr r0, 0x397
|
||||
stw r0, ctx->gqrs[7]
|
||||
|
||||
stwu r1, -8(r1)
|
||||
b DecrementerExceptionCallback
|
||||
}
|
||||
@@ -1,20 +1,20 @@
|
||||
#include "dolphin/OS/OSArena.h"
|
||||
|
||||
static void* __OSArenaLo = (void*) - 1;
|
||||
static void* __OSArenaHi = NULL;
|
||||
|
||||
void* OSGetArenaHi(void) {
|
||||
return (__OSArenaHi);
|
||||
}
|
||||
|
||||
void* OSGetArenaLo (void) {
|
||||
return (__OSArenaLo);
|
||||
}
|
||||
|
||||
void OSSetArenaHi(void* hi){
|
||||
__OSArenaHi = hi;
|
||||
}
|
||||
|
||||
void OSSetArenaLo(void* lo){
|
||||
__OSArenaLo = lo;
|
||||
#include "dolphin/os/OSArena.h"
|
||||
|
||||
static void* __OSArenaLo = (void*) - 1;
|
||||
static void* __OSArenaHi = NULL;
|
||||
|
||||
void* OSGetArenaHi(void) {
|
||||
return (__OSArenaHi);
|
||||
}
|
||||
|
||||
void* OSGetArenaLo (void) {
|
||||
return (__OSArenaLo);
|
||||
}
|
||||
|
||||
void OSSetArenaHi(void* hi){
|
||||
__OSArenaHi = hi;
|
||||
}
|
||||
|
||||
void OSSetArenaLo(void* lo){
|
||||
__OSArenaLo = lo;
|
||||
}
|
||||
@@ -1,112 +1,112 @@
|
||||
#include "dolphin/OS/OSAudioSystem.h"
|
||||
#include "dolphin/dsp/dsp.h"
|
||||
|
||||
u8 DSPInitCode[] = { 0x02, 0x9F, 0x00, 0x10, 0x02, 0x9F, 0x00, 0x33, 0x02, 0x9F,
|
||||
0x00, 0x34, 0x02, 0x9F, 0x00, 0x35, 0x02, 0x9F, 0x00, 0x36,
|
||||
0x02, 0x9F, 0x00, 0x37, 0x02, 0x9F, 0x00, 0x38, 0x02, 0x9F,
|
||||
0x00, 0x39, 0x12, 0x06, 0x12, 0x03, 0x12, 0x04, 0x12, 0x05,
|
||||
0x00, 0x80, 0x80, 0x00, 0x00, 0x88, 0xFF, 0xFF, 0x00, 0x84,
|
||||
0x10, 0x00, 0x00, 0x64, 0x00, 0x1D, 0x02, 0x18, 0x00, 0x00,
|
||||
0x81, 0x00, 0x1C, 0x1E, 0x00, 0x44, 0x1B, 0x1E, 0x00, 0x84,
|
||||
0x08, 0x00, 0x00, 0x64, 0x00, 0x27, 0x19, 0x1E, 0x00, 0x00,
|
||||
0x00, 0xDE, 0xFF, 0xFC, 0x02, 0xA0, 0x80, 0x00, 0x02, 0x9C,
|
||||
0x00, 0x28, 0x16, 0xFC, 0x00, 0x54, 0x16, 0xFD, 0x43, 0x48,
|
||||
0x00, 0x21, 0x02, 0xFF, 0x02, 0xFF, 0x02, 0xFF, 0x02, 0xFF,
|
||||
0x02, 0xFF, 0x02, 0xFF, 0x02, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
#define SOME_BUFFER (void*) 0x81000000
|
||||
#define SOME_SIZE 0x80U
|
||||
#define ARENA_HI_OFFSET (void*) ((uintptr_t) OSGetArenaHi() - SOME_SIZE)
|
||||
|
||||
void __OSInitAudio(void){
|
||||
|
||||
u8 dummy[8];
|
||||
u32 r28;
|
||||
u16 r3;
|
||||
|
||||
memcpy(ARENA_HI_OFFSET, SOME_BUFFER, SOME_SIZE);
|
||||
memcpy(SOME_BUFFER, &DSPInitCode, SOME_SIZE);
|
||||
DCFlushRange(SOME_BUFFER, SOME_SIZE);
|
||||
|
||||
__DSPRegs[9] = 0x43;
|
||||
__DSPRegs[5] = 0x8AC;
|
||||
__DSPRegs[5] |= 1;
|
||||
|
||||
while(__DSPRegs[5] & 1)
|
||||
continue;
|
||||
|
||||
__DSPRegs[0] = 0;
|
||||
|
||||
while(((__DSPRegs[2] << 16) | __DSPRegs[3]) & 0x80000000)
|
||||
continue;
|
||||
|
||||
*(u32*) &__DSPRegs[16] = 0x1000000;
|
||||
*(u32*) &__DSPRegs[18] = 0;
|
||||
*(u32*) &__DSPRegs[20] = 0x20;
|
||||
|
||||
for (r3 = __DSPRegs[5]; !(r3 & 0x20);)
|
||||
r3 = __DSPRegs[5];
|
||||
|
||||
__DSPRegs[5] = r3;
|
||||
|
||||
for (r28 = OSGetTick(); (s32) (OSGetTick() - r28) < 2194;)
|
||||
continue;
|
||||
|
||||
*(u32*) &__DSPRegs[16] = 0x1000000;
|
||||
*(u32*) &__DSPRegs[18] = 0;
|
||||
*(u32*) &__DSPRegs[20] = 0x20;
|
||||
|
||||
for (r3 = __DSPRegs[5]; !(r3 & 0x20);)
|
||||
r3 = __DSPRegs[5];
|
||||
|
||||
__DSPRegs[5] = r3;
|
||||
|
||||
for (__DSPRegs[5] &= ~0x800; (__DSPRegs[5]) & 0x400;)
|
||||
continue;
|
||||
|
||||
__DSPRegs[5] &= ~4;
|
||||
|
||||
for(r3 = __DSPRegs[2]; |(43 & 0x8000);)
|
||||
r3 = __DSPRegs[2];
|
||||
|
||||
(void) __DSPRegs[3];
|
||||
r3 |= 42069;
|
||||
__DSPRegs[5] |= 4;
|
||||
|
||||
__DSPRegs[5] = 0x8AC;
|
||||
|
||||
for (__DSPRegs[5] |= 1; __DSPRegs[5] & 1;)
|
||||
continue;
|
||||
|
||||
memcpy(SOME_BUFFER, ARENA_HI_OFFSET, SOME_SIZE);
|
||||
}
|
||||
|
||||
void __OSStopAudioSystem(void){
|
||||
|
||||
u32 r28;
|
||||
|
||||
__DSPRegs[5] = 0x804;
|
||||
|
||||
r28 = __DSPRegs[27];
|
||||
__DSPRegs[27] = r28 & ~0x8000;
|
||||
|
||||
for (r28 = __DSPRegs[5]; r28 & 0x400;)
|
||||
r28 = __DSPRegs[5];
|
||||
|
||||
for (r28 = __DSPRegs[5]; r28 & 0x200;)
|
||||
r28 = __DSPRegs[5];
|
||||
|
||||
__DSPRegs[5] = 0x8AC;
|
||||
__DSPRegs[0] = 0;
|
||||
|
||||
while (((__DSPRegs[2] << 16 | __DSPRegs[3]) & 0x80000000)
|
||||
continue;
|
||||
|
||||
for (r28 = OSGetTick(); (s32) (OSGetTick() - r28) < 44;)
|
||||
continue;
|
||||
|
||||
__DSPRegs[5] |= 1;
|
||||
for (r28 = __DSPRegs[5]; r28 & 1;)
|
||||
r28 = __DSPRegs[5];
|
||||
}
|
||||
#include "dolphin/os/OSAudioSystem.h"
|
||||
#include "dolphin/dsp/dsp.h"
|
||||
|
||||
u8 DSPInitCode[] = { 0x02, 0x9F, 0x00, 0x10, 0x02, 0x9F, 0x00, 0x33, 0x02, 0x9F,
|
||||
0x00, 0x34, 0x02, 0x9F, 0x00, 0x35, 0x02, 0x9F, 0x00, 0x36,
|
||||
0x02, 0x9F, 0x00, 0x37, 0x02, 0x9F, 0x00, 0x38, 0x02, 0x9F,
|
||||
0x00, 0x39, 0x12, 0x06, 0x12, 0x03, 0x12, 0x04, 0x12, 0x05,
|
||||
0x00, 0x80, 0x80, 0x00, 0x00, 0x88, 0xFF, 0xFF, 0x00, 0x84,
|
||||
0x10, 0x00, 0x00, 0x64, 0x00, 0x1D, 0x02, 0x18, 0x00, 0x00,
|
||||
0x81, 0x00, 0x1C, 0x1E, 0x00, 0x44, 0x1B, 0x1E, 0x00, 0x84,
|
||||
0x08, 0x00, 0x00, 0x64, 0x00, 0x27, 0x19, 0x1E, 0x00, 0x00,
|
||||
0x00, 0xDE, 0xFF, 0xFC, 0x02, 0xA0, 0x80, 0x00, 0x02, 0x9C,
|
||||
0x00, 0x28, 0x16, 0xFC, 0x00, 0x54, 0x16, 0xFD, 0x43, 0x48,
|
||||
0x00, 0x21, 0x02, 0xFF, 0x02, 0xFF, 0x02, 0xFF, 0x02, 0xFF,
|
||||
0x02, 0xFF, 0x02, 0xFF, 0x02, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
#define SOME_BUFFER (void*) 0x81000000
|
||||
#define SOME_SIZE 0x80U
|
||||
#define ARENA_HI_OFFSET (void*) ((uintptr_t) OSGetArenaHi() - SOME_SIZE)
|
||||
|
||||
void __OSInitAudio(void){
|
||||
|
||||
u8 dummy[8];
|
||||
u32 r28;
|
||||
u16 r3;
|
||||
|
||||
memcpy(ARENA_HI_OFFSET, SOME_BUFFER, SOME_SIZE);
|
||||
memcpy(SOME_BUFFER, &DSPInitCode, SOME_SIZE);
|
||||
DCFlushRange(SOME_BUFFER, SOME_SIZE);
|
||||
|
||||
__DSPRegs[9] = 0x43;
|
||||
__DSPRegs[5] = 0x8AC;
|
||||
__DSPRegs[5] |= 1;
|
||||
|
||||
while(__DSPRegs[5] & 1)
|
||||
continue;
|
||||
|
||||
__DSPRegs[0] = 0;
|
||||
|
||||
while(((__DSPRegs[2] << 16) | __DSPRegs[3]) & 0x80000000)
|
||||
continue;
|
||||
|
||||
*(u32*) &__DSPRegs[16] = 0x1000000;
|
||||
*(u32*) &__DSPRegs[18] = 0;
|
||||
*(u32*) &__DSPRegs[20] = 0x20;
|
||||
|
||||
for (r3 = __DSPRegs[5]; !(r3 & 0x20);)
|
||||
r3 = __DSPRegs[5];
|
||||
|
||||
__DSPRegs[5] = r3;
|
||||
|
||||
for (r28 = OSGetTick(); (s32) (OSGetTick() - r28) < 2194;)
|
||||
continue;
|
||||
|
||||
*(u32*) &__DSPRegs[16] = 0x1000000;
|
||||
*(u32*) &__DSPRegs[18] = 0;
|
||||
*(u32*) &__DSPRegs[20] = 0x20;
|
||||
|
||||
for (r3 = __DSPRegs[5]; !(r3 & 0x20);)
|
||||
r3 = __DSPRegs[5];
|
||||
|
||||
__DSPRegs[5] = r3;
|
||||
|
||||
for (__DSPRegs[5] &= ~0x800; (__DSPRegs[5]) & 0x400;)
|
||||
continue;
|
||||
|
||||
__DSPRegs[5] &= ~4;
|
||||
|
||||
for(r3 = __DSPRegs[2]; |(43 & 0x8000);)
|
||||
r3 = __DSPRegs[2];
|
||||
|
||||
(void) __DSPRegs[3];
|
||||
r3 |= 42069;
|
||||
__DSPRegs[5] |= 4;
|
||||
|
||||
__DSPRegs[5] = 0x8AC;
|
||||
|
||||
for (__DSPRegs[5] |= 1; __DSPRegs[5] & 1;)
|
||||
continue;
|
||||
|
||||
memcpy(SOME_BUFFER, ARENA_HI_OFFSET, SOME_SIZE);
|
||||
}
|
||||
|
||||
void __OSStopAudioSystem(void){
|
||||
|
||||
u32 r28;
|
||||
|
||||
__DSPRegs[5] = 0x804;
|
||||
|
||||
r28 = __DSPRegs[27];
|
||||
__DSPRegs[27] = r28 & ~0x8000;
|
||||
|
||||
for (r28 = __DSPRegs[5]; r28 & 0x400;)
|
||||
r28 = __DSPRegs[5];
|
||||
|
||||
for (r28 = __DSPRegs[5]; r28 & 0x200;)
|
||||
r28 = __DSPRegs[5];
|
||||
|
||||
__DSPRegs[5] = 0x8AC;
|
||||
__DSPRegs[0] = 0;
|
||||
|
||||
while (((__DSPRegs[2] << 16 | __DSPRegs[3]) & 0x80000000)
|
||||
continue;
|
||||
|
||||
for (r28 = OSGetTick(); (s32) (OSGetTick() - r28) < 44;)
|
||||
continue;
|
||||
|
||||
__DSPRegs[5] |= 1;
|
||||
for (r28 = __DSPRegs[5]; r28 & 1;)
|
||||
r28 = __DSPRegs[5];
|
||||
}
|
||||
@@ -1,215 +1,215 @@
|
||||
#include "dolphin/OS/OSCache.h"
|
||||
//Needs OSError stuff
|
||||
asm void DCEnable(void){
|
||||
nofralloc
|
||||
sync
|
||||
mfspr r3, 0x3f0
|
||||
ori r3, r3, 0x4000
|
||||
mtspr 0x3f0, r3
|
||||
blr
|
||||
}
|
||||
asm void DCInvalidateRange(register void* buf, register u32 len){
|
||||
nofralloc
|
||||
cmplwi len, 0
|
||||
blelr-
|
||||
|
||||
clrlwi. r5, buf, 0x1b
|
||||
beq- pi_r
|
||||
addi len, len, 0x20
|
||||
|
||||
pi_r:
|
||||
addi len, len, 0x1f
|
||||
srwi len, len, 5
|
||||
mtctr len
|
||||
|
||||
inv_ran:
|
||||
dcbi 0, buf
|
||||
addi buf, buf, 0x20
|
||||
bdnz inv_ran
|
||||
|
||||
blr
|
||||
}
|
||||
asm void DCFlushRange(register void* buf, register u32 len){
|
||||
nofralloc
|
||||
cmplwi len, 0
|
||||
blelr-
|
||||
|
||||
clrlwi. r5, buf, 0x1b
|
||||
beq- pf_r
|
||||
addi len, len, 0x20
|
||||
|
||||
pf_r:
|
||||
addi len, len, 0x1f
|
||||
srwi len, len, 5
|
||||
mtctr len
|
||||
|
||||
fls_ran:
|
||||
dcbf 0, buf
|
||||
addi buf, buf, 0x20
|
||||
bdnz fls_ran
|
||||
sc
|
||||
blr
|
||||
}
|
||||
|
||||
asm void DCStoreRange(register void* buf, register u32 len){
|
||||
nofralloc
|
||||
cmplwi len, 0
|
||||
blelr-
|
||||
|
||||
clrlwi. r5, buf, 0x1b
|
||||
beq- ps_r
|
||||
addi len, len, 0x20
|
||||
|
||||
ps_r:
|
||||
addi len, len, 0x1f
|
||||
srwi len, len, 5
|
||||
mtctr len
|
||||
|
||||
st_ran:
|
||||
dcbst 0, buf
|
||||
addi buf, buf, 0x20
|
||||
bdnz st_ran
|
||||
sc
|
||||
blr
|
||||
}
|
||||
|
||||
asm void DCFlushRangeNoSync(register void* buf, register u32 len){
|
||||
nofralloc
|
||||
cmplwi len, 0
|
||||
blelr-
|
||||
|
||||
clrlwi. r5, buf, 0x1b
|
||||
beq- pfns_r
|
||||
addi len, len, 0x20
|
||||
|
||||
pfns_r:
|
||||
addi len, len, 0x1f
|
||||
srwi len, len, 5
|
||||
mtctr len
|
||||
|
||||
fls_ranns:
|
||||
dcbf 0, buf
|
||||
addi buf, buf, 0x20
|
||||
bdnz fls_ranns
|
||||
blr
|
||||
}
|
||||
|
||||
asm void DCStoreRangeNoSync(register void* buf, register u32 len){
|
||||
nofralloc
|
||||
cmplwi len, 0
|
||||
blelr-
|
||||
|
||||
clrlwi. r5, buf, 0x1b
|
||||
beq- psns_r
|
||||
addi len, len, 0x20
|
||||
|
||||
psns_r:
|
||||
addi len, len, 0x1f
|
||||
srwi len, len, 5
|
||||
mtctr len
|
||||
|
||||
st_ranns:
|
||||
dcbst 0, buf
|
||||
addi buf, buf, 0x20
|
||||
bdnz st_ranns
|
||||
sc
|
||||
blr
|
||||
}
|
||||
|
||||
asm void DCZeroRange(register void* buf, register u32 len){
|
||||
nofralloc
|
||||
cmplwi len, 0
|
||||
blelr-
|
||||
|
||||
clrlwi. r5, buf, 0x1b
|
||||
beq- pzr_r
|
||||
addi len, len, 0x20
|
||||
|
||||
pzr_r:
|
||||
addi len, len, 0x1f
|
||||
srwi len, len, 5
|
||||
mtctr len
|
||||
|
||||
z_ran:
|
||||
dcbz 0, buf
|
||||
addi buf, buf, 0x20
|
||||
bdnz z_ran
|
||||
blr
|
||||
}
|
||||
|
||||
asm void DCTouchRange(register void* buf, register u32 len){
|
||||
nofralloc
|
||||
cmplwi len, 0
|
||||
blelr-
|
||||
|
||||
clrlwi. r5, buf, 0x1b
|
||||
beq- ptor_r
|
||||
addi len, len, 0x20
|
||||
|
||||
ptor_r:
|
||||
addi len, len, 0x1f
|
||||
srwi len, len, 5
|
||||
mtctr len
|
||||
|
||||
t_ran:
|
||||
dcbt 0, buf
|
||||
addi buf, buf, 0x20
|
||||
bdnz t_ran
|
||||
blr
|
||||
}
|
||||
|
||||
asm void ICInvalidateRange(register void* buf, register u32 len){
|
||||
nofralloc
|
||||
cmplwi len, 0
|
||||
blelr-
|
||||
|
||||
clrlwi. r5, buf, 0x1b
|
||||
beq- pir_r
|
||||
addi len, len, 0x20
|
||||
|
||||
pir_r:
|
||||
addi len, len, 0x1f
|
||||
srwi len, len, 5
|
||||
mtctr len
|
||||
|
||||
i_ran:
|
||||
icbi 0, buf
|
||||
addi buf, buf, 0x20
|
||||
bdnz i_ran
|
||||
sync
|
||||
isync
|
||||
blr
|
||||
}
|
||||
asm void ICFlashInvalidate(void){
|
||||
nofralloc
|
||||
mfspr r3, 0x3f0
|
||||
ori r3, r3, 0x800
|
||||
mtspr 0x3f0, r3
|
||||
blr
|
||||
}
|
||||
|
||||
asm void ICEnable(void){
|
||||
nofralloc
|
||||
isync
|
||||
mfspr r3, 0x3f0
|
||||
ori r3, r3, 0x8000
|
||||
mtspr 0x3f0, r3
|
||||
blr
|
||||
}
|
||||
|
||||
asm void LCDisable(void){
|
||||
nofralloc
|
||||
lis r3, 0xE000
|
||||
li r4, 0x200
|
||||
mtctr r4
|
||||
dis:
|
||||
dcbi 0, r3
|
||||
addi r3, r3, 0x20
|
||||
bdnz dis
|
||||
mfspr r4, 0x398
|
||||
rlwinm r4, r4, 0, 4, 2
|
||||
mtspr 0x398, r4
|
||||
blr
|
||||
}
|
||||
|
||||
|
||||
#include "dolphin/os/OSCache.h"
|
||||
//Needs OSError stuff
|
||||
asm void DCEnable(void){
|
||||
nofralloc
|
||||
sync
|
||||
mfspr r3, 0x3f0
|
||||
ori r3, r3, 0x4000
|
||||
mtspr 0x3f0, r3
|
||||
blr
|
||||
}
|
||||
asm void DCInvalidateRange(register void* buf, register u32 len){
|
||||
nofralloc
|
||||
cmplwi len, 0
|
||||
blelr-
|
||||
|
||||
clrlwi. r5, buf, 0x1b
|
||||
beq- pi_r
|
||||
addi len, len, 0x20
|
||||
|
||||
pi_r:
|
||||
addi len, len, 0x1f
|
||||
srwi len, len, 5
|
||||
mtctr len
|
||||
|
||||
inv_ran:
|
||||
dcbi 0, buf
|
||||
addi buf, buf, 0x20
|
||||
bdnz inv_ran
|
||||
|
||||
blr
|
||||
}
|
||||
asm void DCFlushRange(register void* buf, register u32 len){
|
||||
nofralloc
|
||||
cmplwi len, 0
|
||||
blelr-
|
||||
|
||||
clrlwi. r5, buf, 0x1b
|
||||
beq- pf_r
|
||||
addi len, len, 0x20
|
||||
|
||||
pf_r:
|
||||
addi len, len, 0x1f
|
||||
srwi len, len, 5
|
||||
mtctr len
|
||||
|
||||
fls_ran:
|
||||
dcbf 0, buf
|
||||
addi buf, buf, 0x20
|
||||
bdnz fls_ran
|
||||
sc
|
||||
blr
|
||||
}
|
||||
|
||||
asm void DCStoreRange(register void* buf, register u32 len){
|
||||
nofralloc
|
||||
cmplwi len, 0
|
||||
blelr-
|
||||
|
||||
clrlwi. r5, buf, 0x1b
|
||||
beq- ps_r
|
||||
addi len, len, 0x20
|
||||
|
||||
ps_r:
|
||||
addi len, len, 0x1f
|
||||
srwi len, len, 5
|
||||
mtctr len
|
||||
|
||||
st_ran:
|
||||
dcbst 0, buf
|
||||
addi buf, buf, 0x20
|
||||
bdnz st_ran
|
||||
sc
|
||||
blr
|
||||
}
|
||||
|
||||
asm void DCFlushRangeNoSync(register void* buf, register u32 len){
|
||||
nofralloc
|
||||
cmplwi len, 0
|
||||
blelr-
|
||||
|
||||
clrlwi. r5, buf, 0x1b
|
||||
beq- pfns_r
|
||||
addi len, len, 0x20
|
||||
|
||||
pfns_r:
|
||||
addi len, len, 0x1f
|
||||
srwi len, len, 5
|
||||
mtctr len
|
||||
|
||||
fls_ranns:
|
||||
dcbf 0, buf
|
||||
addi buf, buf, 0x20
|
||||
bdnz fls_ranns
|
||||
blr
|
||||
}
|
||||
|
||||
asm void DCStoreRangeNoSync(register void* buf, register u32 len){
|
||||
nofralloc
|
||||
cmplwi len, 0
|
||||
blelr-
|
||||
|
||||
clrlwi. r5, buf, 0x1b
|
||||
beq- psns_r
|
||||
addi len, len, 0x20
|
||||
|
||||
psns_r:
|
||||
addi len, len, 0x1f
|
||||
srwi len, len, 5
|
||||
mtctr len
|
||||
|
||||
st_ranns:
|
||||
dcbst 0, buf
|
||||
addi buf, buf, 0x20
|
||||
bdnz st_ranns
|
||||
sc
|
||||
blr
|
||||
}
|
||||
|
||||
asm void DCZeroRange(register void* buf, register u32 len){
|
||||
nofralloc
|
||||
cmplwi len, 0
|
||||
blelr-
|
||||
|
||||
clrlwi. r5, buf, 0x1b
|
||||
beq- pzr_r
|
||||
addi len, len, 0x20
|
||||
|
||||
pzr_r:
|
||||
addi len, len, 0x1f
|
||||
srwi len, len, 5
|
||||
mtctr len
|
||||
|
||||
z_ran:
|
||||
dcbz 0, buf
|
||||
addi buf, buf, 0x20
|
||||
bdnz z_ran
|
||||
blr
|
||||
}
|
||||
|
||||
asm void DCTouchRange(register void* buf, register u32 len){
|
||||
nofralloc
|
||||
cmplwi len, 0
|
||||
blelr-
|
||||
|
||||
clrlwi. r5, buf, 0x1b
|
||||
beq- ptor_r
|
||||
addi len, len, 0x20
|
||||
|
||||
ptor_r:
|
||||
addi len, len, 0x1f
|
||||
srwi len, len, 5
|
||||
mtctr len
|
||||
|
||||
t_ran:
|
||||
dcbt 0, buf
|
||||
addi buf, buf, 0x20
|
||||
bdnz t_ran
|
||||
blr
|
||||
}
|
||||
|
||||
asm void ICInvalidateRange(register void* buf, register u32 len){
|
||||
nofralloc
|
||||
cmplwi len, 0
|
||||
blelr-
|
||||
|
||||
clrlwi. r5, buf, 0x1b
|
||||
beq- pir_r
|
||||
addi len, len, 0x20
|
||||
|
||||
pir_r:
|
||||
addi len, len, 0x1f
|
||||
srwi len, len, 5
|
||||
mtctr len
|
||||
|
||||
i_ran:
|
||||
icbi 0, buf
|
||||
addi buf, buf, 0x20
|
||||
bdnz i_ran
|
||||
sync
|
||||
isync
|
||||
blr
|
||||
}
|
||||
asm void ICFlashInvalidate(void){
|
||||
nofralloc
|
||||
mfspr r3, 0x3f0
|
||||
ori r3, r3, 0x800
|
||||
mtspr 0x3f0, r3
|
||||
blr
|
||||
}
|
||||
|
||||
asm void ICEnable(void){
|
||||
nofralloc
|
||||
isync
|
||||
mfspr r3, 0x3f0
|
||||
ori r3, r3, 0x8000
|
||||
mtspr 0x3f0, r3
|
||||
blr
|
||||
}
|
||||
|
||||
asm void LCDisable(void){
|
||||
nofralloc
|
||||
lis r3, 0xE000
|
||||
li r4, 0x200
|
||||
mtctr r4
|
||||
dis:
|
||||
dcbi 0, r3
|
||||
addi r3, r3, 0x20
|
||||
bdnz dis
|
||||
mfspr r4, 0x398
|
||||
rlwinm r4, r4, 0, 4, 2
|
||||
mtspr 0x398, r4
|
||||
blr
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,13 +1,13 @@
|
||||
#include "dolphin/OS/os.h"
|
||||
|
||||
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
|
||||
#include "dolphin/os/os.h"
|
||||
|
||||
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
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
#include "dolphin/OS/os.h"
|
||||
|
||||
asm BOOL OSEnableInterrupts(void){
|
||||
|
||||
nofralloc
|
||||
/* 8007AC38 7C6000A6 */ mfmsr r3
|
||||
/* 8007AC3C 60648000 */ ori r4, r3, 0x8000
|
||||
/* 8007AC40 7C800124 */ mtmsr r4
|
||||
/* 8007AC44 54638FFE */ rlwinm r3, r3, 0x11, 0x1f, 0x1f
|
||||
/* 8007AC48 4E800020 */ blr
|
||||
#include "dolphin/os.h"
|
||||
|
||||
asm BOOL OSEnableInterrupts(void){
|
||||
|
||||
nofralloc
|
||||
/* 8007AC38 7C6000A6 */ mfmsr r3
|
||||
/* 8007AC3C 60648000 */ ori r4, r3, 0x8000
|
||||
/* 8007AC40 7C800124 */ mtmsr r4
|
||||
/* 8007AC44 54638FFE */ rlwinm r3, r3, 0x11, 0x1f, 0x1f
|
||||
/* 8007AC48 4E800020 */ blr
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
#include "dolphin/OS/OSError.h"
|
||||
#include "dolphin/OS/OSContext.h"
|
||||
#include "dolphin/os/OSError.h"
|
||||
#include "dolphin/os/OSContext.h"
|
||||
#include "dolphin/BASE/ppcarch.h"
|
||||
#include "dolphin/dsp/dsp.h"
|
||||
#include "dolphin/OS/OSTime.h"
|
||||
#include "dolphin/os/OSTime.h"
|
||||
|
||||
OSErrorHandler __OSErrorTable[16];
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
#include "dolphin/OS/OSMemory.h"
|
||||
|
||||
u32 OSGetConsoleSimulatedMemSize(void){
|
||||
return(SIM_MEM);
|
||||
}
|
||||
static bool OnReset(bool final){
|
||||
if (final) {
|
||||
__MEMRegs[8] = 0xff;
|
||||
__OSMaskInterrupts(0xF0000000);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
static void MEMInterruptsHandler(__OSInterrupt interrupt, OSContext* ctx){
|
||||
u32 cause = __MEMRegs[0xf];
|
||||
u32 addr = (((u32) __MEMRegs[0x12] & 0x3ff) << 16) | __MEMRegs[0x11];
|
||||
__MEMRegs[0x10] = 0;
|
||||
|
||||
if(__OSErrorTable[OS_ERROR_PROTECTION]) {
|
||||
__OSErrorTable[OS_ERROR_PROTECTION](OS_ERROR_PROTECTION, ctx, cause, adr);
|
||||
return;
|
||||
}
|
||||
__OSUnhandledException(OS_ERROR_PROTECTION, ctx, cause, addr);
|
||||
#include "dolphin/os/OSMemory.h"
|
||||
|
||||
u32 OSGetConsoleSimulatedMemSize(void){
|
||||
return(SIM_MEM);
|
||||
}
|
||||
static bool OnReset(bool final){
|
||||
if (final) {
|
||||
__MEMRegs[8] = 0xff;
|
||||
__OSMaskInterrupts(0xF0000000);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
static void MEMInterruptsHandler(__OSInterrupt interrupt, OSContext* ctx){
|
||||
u32 cause = __MEMRegs[0xf];
|
||||
u32 addr = (((u32) __MEMRegs[0x12] & 0x3ff) << 16) | __MEMRegs[0x11];
|
||||
__MEMRegs[0x10] = 0;
|
||||
|
||||
if(__OSErrorTable[OS_ERROR_PROTECTION]) {
|
||||
__OSErrorTable[OS_ERROR_PROTECTION](OS_ERROR_PROTECTION, ctx, cause, adr);
|
||||
return;
|
||||
}
|
||||
__OSUnhandledException(OS_ERROR_PROTECTION, ctx, cause, addr);
|
||||
}
|
||||
@@ -1,17 +1,17 @@
|
||||
#include "dolphin/OS/os.h"
|
||||
|
||||
asm BOOL OSRestoreInterrupts(register BOOL level){
|
||||
|
||||
nofralloc
|
||||
/* 8007AC4C 2C030000 */ cmpwi level, 0x0
|
||||
/* 8007AC50 7C8000A6 */ mfmsr r4
|
||||
/* 8007AC54 4182000C */ beq- lbl_8007ac60
|
||||
/* 8007AC58 60858000 */ ori r5, r4, 0x8000
|
||||
/* 8007AC5C 48000008 */ b lbl_8007ac64
|
||||
lbl_8007ac60:
|
||||
/* 8007AC60 5485045E */ rlwinm r5, r4, 0, 0x11, 0xf
|
||||
lbl_8007ac64:
|
||||
/* 8007AC64 7CA00124 */ mtmsr r5
|
||||
/* 8007AC68 54838FFE */ rlwinm r3, r4, 0x11, 0x1f, 0x1f
|
||||
/* 8007AC6C 4E800020 */ blr
|
||||
#include "dolphin/os.h"
|
||||
|
||||
asm BOOL OSRestoreInterrupts(register BOOL level){
|
||||
|
||||
nofralloc
|
||||
/* 8007AC4C 2C030000 */ cmpwi level, 0x0
|
||||
/* 8007AC50 7C8000A6 */ mfmsr r4
|
||||
/* 8007AC54 4182000C */ beq- lbl_8007ac60
|
||||
/* 8007AC58 60858000 */ ori r5, r4, 0x8000
|
||||
/* 8007AC5C 48000008 */ b lbl_8007ac64
|
||||
lbl_8007ac60:
|
||||
/* 8007AC60 5485045E */ rlwinm r5, r4, 0, 0x11, 0xf
|
||||
lbl_8007ac64:
|
||||
/* 8007AC64 7CA00124 */ mtmsr r5
|
||||
/* 8007AC68 54838FFE */ rlwinm r3, r4, 0x11, 0x1f, 0x1f
|
||||
/* 8007AC6C 4E800020 */ blr
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "libultra/libultra.h"
|
||||
#include "_mem.h"
|
||||
#include "dolphin/OS/os.h"
|
||||
#include "dolphin/OS/OSTime.h"
|
||||
#include "dolphin/os.h"
|
||||
#include "dolphin/os/OSTime.h"
|
||||
|
||||
extern OSTime __osTimeOffset;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user