mirror of
https://github.com/izzy2lost/Diddy-Kong-Racing.git
synced 2026-06-19 01:16:26 -07:00
c: osPiRawStartDma
This commit is contained in:
@@ -8,26 +8,26 @@
|
||||
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/func_800D2470.s")
|
||||
|
||||
#define PI_Q_BUF_LEN 1
|
||||
extern u32 D_800E4800;//__osPiAccessQueueEnabled
|
||||
extern u32 __osPiAccessQueueEnabled;//__osPiAccessQueueEnabled
|
||||
extern OSMesg D_8012D1E0[PI_Q_BUF_LEN];//piAccessBuf
|
||||
extern OSMesgQueue D_8012D1E8; //__osPiAccessQueue
|
||||
extern OSMesgQueue piAccessQueue; //__osPiAccessQueue
|
||||
void __osPiCreateAccessQueue(void)
|
||||
{
|
||||
|
||||
D_800E4800 = 1;
|
||||
osCreateMesgQueue(&D_8012D1E8, D_8012D1E0, PI_Q_BUF_LEN);
|
||||
osSendMesg(&D_8012D1E8, NULL, OS_MESG_NOBLOCK);
|
||||
__osPiAccessQueueEnabled = 1;
|
||||
osCreateMesgQueue(&piAccessQueue, D_8012D1E0, PI_Q_BUF_LEN);
|
||||
osSendMesg(&piAccessQueue, NULL, OS_MESG_NOBLOCK);
|
||||
}
|
||||
|
||||
void __osPiGetAccess(void)
|
||||
{
|
||||
OSMesg dummyMesg;
|
||||
if (!D_800E4800)
|
||||
if (!__osPiAccessQueueEnabled)
|
||||
__osPiCreateAccessQueue();
|
||||
osRecvMesg(&D_8012D1E8, &dummyMesg, OS_MESG_BLOCK);
|
||||
osRecvMesg(&piAccessQueue, &dummyMesg, OS_MESG_BLOCK);
|
||||
}
|
||||
|
||||
void __osPiRelAccess(void)
|
||||
{
|
||||
osSendMesg(&D_8012D1E8, NULL, OS_MESG_NOBLOCK);
|
||||
osSendMesg(&piAccessQueue, NULL, OS_MESG_NOBLOCK);
|
||||
}
|
||||
@@ -4,12 +4,39 @@
|
||||
#include "types.h"
|
||||
#include "macros.h"
|
||||
#include "libultra_internal.h"
|
||||
#include "hardware.h"
|
||||
|
||||
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/__osDisableInt.s")
|
||||
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/__osRestoreInt.s")
|
||||
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/D_800D25A0.s")
|
||||
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/D_800D2680.s")
|
||||
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/D_800D2760.s")
|
||||
|
||||
s32 osPiRawStartDma(s32 direction, u32 devAddr, void *dramAddr, u32 size)
|
||||
{
|
||||
register int status;
|
||||
status = HW_REG(PI_STATUS_REG, u32);
|
||||
while (status & (PI_STATUS_BUSY | PI_STATUS_IOBUSY | PI_STATUS_ERROR)) {
|
||||
status = HW_REG(PI_STATUS_REG, u32);
|
||||
}
|
||||
|
||||
HW_REG(PI_DRAM_ADDR_REG, void *) = (void *) osVirtualToPhysical(dramAddr);
|
||||
|
||||
HW_REG(PI_CART_ADDR_REG, void *) = (void *) (((uintptr_t) osRomBase | devAddr) & 0x1fffffff);
|
||||
|
||||
switch (direction) {
|
||||
case OS_READ:
|
||||
HW_REG(PI_WR_LEN_REG, u32) = size - 1;
|
||||
break;
|
||||
case OS_WRITE:
|
||||
HW_REG(PI_RD_LEN_REG, u32) = size - 1;
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/osEPiRawStartDma.s")
|
||||
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/__osDevMgrMain.s")
|
||||
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/__osViInit.s")
|
||||
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3160/func_800D2C60.s")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user