sdk-core v2026.11.05
PS2 SDK - core tier (build-critical EE/IOP modules)
Loading...
Searching...
No Matches
mmio.c
1#include <irx.h>
2#include <stdio.h>
3
4IRX_ID("mmio", 1, 1);
5
6stdio_IMPORTS_start
7I_printf
8stdio_IMPORTS_end
9
10#define I_MASK 0xbf801074u
11#define DPCR 0xbf8010f0u
12#define DICR 0xbf8010f4u
13
14static 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
36int _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}