mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-08-13 17:03:47 -04:00
39cc86c260
subrepo: subdir: "soh" merged: "ba904bbd0" upstream: origin: "https://github.com/HarbourMasters/soh.git" branch: "master" commit: "ba904bbd0" git-subrepo: version: "0.4.1" origin: "???" commit: "???"
63 lines
1.8 KiB
C
63 lines
1.8 KiB
C
#include "global.h"
|
|
|
|
OSPiHandle __CartRomHandle;
|
|
|
|
OSPiHandle* osCartRomInit(void) {
|
|
register u32 a;
|
|
register s32 status;
|
|
register u32 prevInt;
|
|
register u32 lastLatency;
|
|
register u32 lastPageSize;
|
|
register u32 lastRelDuration;
|
|
register u32 lastPulse;
|
|
|
|
static u32 D_8000AF10 = 1;
|
|
|
|
__osPiGetAccess();
|
|
|
|
if (!D_8000AF10) {
|
|
__osPiRelAccess();
|
|
return &__CartRomHandle;
|
|
}
|
|
|
|
D_8000AF10 = 0;
|
|
__CartRomHandle.type = DEVICE_TYPE_CART;
|
|
__CartRomHandle.baseAddress = 0xB0000000;
|
|
__CartRomHandle.domain = PI_DOMAIN1;
|
|
__CartRomHandle.speed = 0;
|
|
bzero(&__CartRomHandle.transferInfo, sizeof(__OSTranxInfo));
|
|
|
|
while (status = HW_REG(PI_STATUS_REG, u32), status & (PI_STATUS_BUSY | PI_STATUS_IOBUSY)) {
|
|
;
|
|
}
|
|
|
|
lastLatency = HW_REG(PI_BSD_DOM1_LAT_REG, u32);
|
|
lastPageSize = HW_REG(PI_BSD_DOM1_PGS_REG, u32);
|
|
lastRelDuration = HW_REG(PI_BSD_DOM1_RLS_REG, u32);
|
|
lastPulse = HW_REG(PI_BSD_DOM1_PWD_REG, u32);
|
|
|
|
HW_REG(PI_BSD_DOM1_LAT_REG, u32) = 0xFF;
|
|
HW_REG(PI_BSD_DOM1_PGS_REG, u32) = 0;
|
|
HW_REG(PI_BSD_DOM1_RLS_REG, u32) = 3;
|
|
HW_REG(PI_BSD_DOM1_PWD_REG, u32) = 0xFF;
|
|
|
|
a = HW_REG(__CartRomHandle.baseAddress, u32);
|
|
__CartRomHandle.latency = a & 0xFF;
|
|
__CartRomHandle.pageSize = (a >> 0x10) & 0xF;
|
|
__CartRomHandle.relDuration = (a >> 0x14) & 0xF;
|
|
__CartRomHandle.pulse = (a >> 8) & 0xFF;
|
|
|
|
HW_REG(PI_BSD_DOM1_LAT_REG, u32) = lastLatency;
|
|
HW_REG(PI_BSD_DOM1_PGS_REG, u32) = lastPageSize;
|
|
HW_REG(PI_BSD_DOM1_RLS_REG, u32) = lastRelDuration;
|
|
HW_REG(PI_BSD_DOM1_PWD_REG, u32) = lastPulse;
|
|
|
|
prevInt = __osDisableInt();
|
|
__CartRomHandle.next = __osPiTable;
|
|
__osPiTable = &__CartRomHandle;
|
|
__osRestoreInt(prevInt);
|
|
__osPiRelAccess();
|
|
|
|
return &__CartRomHandle;
|
|
}
|