PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
iopmain.c
1/*
2# _____ ___ ____ ___ ____
3# ____| | ____| | | |____|
4# | ___| |____ ___| ____| | \ PS2DEV Open Source Project.
5#-----------------------------------------------------------------------
6# Copyright ps2dev - http://www.ps2dev.org
7# Licenced under Academic Free License version 2.0
8# Review ps2sdk README & LICENSE files for further details.
9*/
10
11#include <irx_imports.h>
12
13// Text section hash:
14// a9e8a86ab5829f75b845b3e232aca4c9
15// Known titles:
16// NM00012
17// NM00016
18// NM00020
19// NM00025
20// Path strings: /home/ha/setrtc/iop/
21
22typedef union acValue_stru
23{
24 sceCdCLOCK rtc;
25 u8 id[8];
26} acValue;
27
28typedef struct acData_stru
29{
30 int ret;
31 acValue data;
32} acData;
33
34static acData buffer;
35static SifRpcDataQueue_t qd;
36static SifRpcServerData_t sd;
37
38static int start_thread(void (*func)(void *), int size, int attr, int prio, void *argp)
39{
40 iop_thread_t thread_param;
41 int thid;
42 int r;
43
44 thread_param.attr = attr;
45 thread_param.thread = func;
46 thread_param.priority = prio;
47 thread_param.stacksize = size;
48 thread_param.option = 0;
49 thid = CreateThread(&thread_param);
50 if ( thid <= 0 )
51 {
52 printf("CreateThread (%d)\n", thid);
53 return -1;
54 }
55 r = StartThread(thid, argp);
56 if ( r )
57 {
58 printf("StartThread (%d)\n", r);
59 DeleteThread(thid);
60 return -1;
61 }
62 return 0;
63}
64
65static void *sce_actest(unsigned int fno, void *data, int size)
66{
67 int ret;
68 acData *datat;
69
70 (void)size;
71 datat = (acData *)data;
72 switch ( fno )
73 {
74 case 1:
75 {
76 ret = sceCdReadClock(&(datat->data.rtc));
77 break;
78 }
79 case 2:
80 {
81 ret = sceCdWriteClock(&(datat->data.rtc));
82 break;
83 }
84 case 3:
85 {
86 ret = sceCdRI(datat->data.id, (u32 *)&(datat->ret));
87 break;
88 }
89 case 4:
90 {
91 ret = sceCdWI(datat->data.id, (u32 *)&(datat->ret));
92 break;
93 }
94 default:
95 {
96 printf("sce_hddtest: unrecognized code %x\n", fno);
97 ret = -1;
98 break;
99 }
100 }
101 *(u32 *)data = ret;
102 return data;
103}
104
105void sce_hddtest_loop(void *arg)
106{
107 (void)arg;
108 sceSifInitRpc(0);
109 sceSifSetRpcQueue(&qd, GetThreadId());
110 sceSifRegisterRpc(&sd, 0xFFFF, (SifRpcFunc_t)sce_actest, &buffer, 0, 0, &qd);
111 sceSifRpcLoop(&qd);
112}
113
114int _start(int argc, char **argv)
115{
116 (void)argc;
117 (void)argv;
118
119 return start_thread(sce_hddtest_loop, 0x1000, 0x2000000, 32, 0) < 0;
120}
int sceCdReadClock(sceCdCLOCK *clock)
Definition cdvdman.c:5821
int sceCdWI(const u8 *buffer, u32 *result)
int sceCdRI(u8 *buffer, u32 *result)
Definition cdvdman.c:5681
int sceCdWriteClock(sceCdCLOCK *clock)