blob: 7f2eb11057770333bda6e06dd307884250c4481f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
#include "PRinternal/macros.h"
#include "PR/os_version.h"
#include "PR/os_internal.h"
#include "PR/R4300.h"
#include "PR/rcp.h"
#include "PRinternal/piint.h"
#if BUILD_VERSION >= VERSION_J
OSPiHandle __CartRomHandle ALIGNED(0x8);
OSPiHandle* osCartRomInit(void) {
u32 value = 0;
u32 saveMask;
static int first = 1;
register u32 stat;
u32 latency;
u32 pulse;
u32 pageSize;
u32 relDuration;
__osPiGetAccess();
if (!first) {
__osPiRelAccess();
return &__CartRomHandle;
}
first = 0;
__CartRomHandle.type = DEVICE_TYPE_CART;
__CartRomHandle.baseAddress = PHYS_TO_K1(PI_DOM1_ADDR2);
__CartRomHandle.domain = PI_DOMAIN1;
__CartRomHandle.speed = 0;
bzero(&__CartRomHandle.transferInfo, sizeof(__OSTranxInfo));
WAIT_ON_IOBUSY(stat);
latency = IO_READ(PI_BSD_DOM1_LAT_REG);
pageSize = IO_READ(PI_BSD_DOM1_PGS_REG);
relDuration = IO_READ(PI_BSD_DOM1_RLS_REG);
pulse = IO_READ(PI_BSD_DOM1_PWD_REG);
IO_WRITE(PI_BSD_DOM1_LAT_REG, 0xFF);
IO_WRITE(PI_BSD_DOM1_PGS_REG, 0);
IO_WRITE(PI_BSD_DOM1_RLS_REG, 3);
IO_WRITE(PI_BSD_DOM1_PWD_REG, 0xFF);
value = IO_READ(__CartRomHandle.baseAddress);
__CartRomHandle.latency = value & 0xFF;
__CartRomHandle.pageSize = (value >> 0x10) & 0xF;
__CartRomHandle.relDuration = (value >> 0x14) & 0xF;
__CartRomHandle.pulse = (value >> 8) & 0xFF;
IO_WRITE(PI_BSD_DOM1_LAT_REG, latency);
IO_WRITE(PI_BSD_DOM1_PGS_REG, pageSize);
IO_WRITE(PI_BSD_DOM1_RLS_REG, relDuration);
IO_WRITE(PI_BSD_DOM1_PWD_REG, pulse);
saveMask = __osDisableInt();
__CartRomHandle.next = __osPiTable;
__osPiTable = &__CartRomHandle;
__osRestoreInt(saveMask);
__osPiRelAccess();
return &__CartRomHandle;
}
#else
OSPiHandle CartRomHandle ALIGNED(0x8);
OSPiHandle* osCartRomInit(void) {
u32 domain = 0;
u32 saveMask;
if (CartRomHandle.baseAddress == PHYS_TO_K1(PI_DOM1_ADDR2))
return &CartRomHandle;
CartRomHandle.type = DEVICE_TYPE_CART;
CartRomHandle.baseAddress = PHYS_TO_K1(PI_DOM1_ADDR2);
osPiRawReadIo(NULL, &domain);
CartRomHandle.latency = domain & 0xff;
CartRomHandle.pulse = (domain >> 8) & 0xff;
CartRomHandle.pageSize = (domain >> 0x10) & 0xf;
CartRomHandle.relDuration = (domain >> 0x14) & 0xf;
CartRomHandle.domain = PI_DOMAIN1;
CartRomHandle.speed = 0;
bzero(&CartRomHandle.transferInfo, sizeof(__OSTranxInfo));
saveMask = __osDisableInt();
CartRomHandle.next = __osPiTable;
__osPiTable = &CartRomHandle;
__osRestoreInt(saveMask);
return &CartRomHandle;
}
#endif
|