sdk-core
v2026.11.05
PS2 SDK - core tier (build-critical EE/IOP modules)
Toggle main menu visibility
Loading...
Searching...
No Matches
mmio.c
1
#include <
irx.h
>
2
#include <
stdio.h
>
3
4
IRX_ID(
"mmio"
, 1, 1);
5
6
stdio_IMPORTS_start
7
I_printf
8
stdio_IMPORTS_end
9
10
#define I_MASK 0xbf801074u
11
#define DPCR 0xbf8010f0u
12
#define DICR 0xbf8010f4u
13
14
static
unsigned
read_explicit(
unsigned
addr)
15
{
16
unsigned
v;
17
__asm__
volatile
(
18
".set push\n\t.set noreorder\n\t.set noat\n\t"
19
"move $1, %1\n\t"
20
"lw %0, 0($1)\n\tnop\n\t"
21
".set pop"
22
:
"=r"
(v)
23
:
"r"
(addr)
24
:
"$1"
,
"memory"
);
25
return
v;
26
}
27
28
#define CHECK(reg) \
29
do { \
30
unsigned folded = *(volatile unsigned *)(reg); \
31
unsigned plain = read_explicit(reg); \
32
if (folded != plain) \
33
bad++; \
34
} while (0)
35
36
int
_start(
int
argc,
char
*argv[])
37
{
38
int
bad = 0;
39
unsigned
mask;
40
41
(void)argc;
42
(void)argv;
43
44
CHECK(I_MASK);
45
CHECK(DPCR);
46
CHECK(DICR);
47
48
mask = *(
volatile
unsigned
*)I_MASK;
49
*(
volatile
unsigned
*)I_MASK = mask;
50
if
(*(
volatile
unsigned
*)I_MASK != mask)
51
bad++;
52
53
printf(
"mmio: %s\n"
, bad ?
"mismatch"
:
"ok"
);
54
return
bad ? 2 : 1;
55
}
irx.h
stdio.h
tests
iop-mmio
src
iop
mmio.c
Generated by
1.18.0