PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
xparam.c
1#include "irx_imports.h"
2#include <tamtypes.h>
3#include <iop_regs.h>
4#include <stdint.h>
5#include "xparam.h"
6
7#define MODNAME "xparam"
8#define MAJOR 1
9#define MINOR 0
10
11IRX_ID(MODNAME, MAJOR, MINOR)
12
13#define XPARAM_PARAM_ADDR *((uint32_t *)0xFFFE01A0)
14#define XPARAM_VALUE_ADDR *((uint32_t *)0xFFFE01A4)
15
16void SetDummyXparamValue(void)
17{
18 XPARAM_PARAM_ADDR = 0xFFFFFFFF;
19 XPARAM_VALUE_ADDR = 0;
20}
21void CheckGameID(const char* ID);
22int _start(int argc, char **argv)
23{
24 int i1;
25 int i2;
26 char **z;
27 char **x;
28 if (IOP_CPU_TYPE == IOP_TYPE_POWERPC) { //used to be a function. simplify it
29 SetDummyXparamValue();
30 if (1 < argc) {
31 if (argc < 3) {
32 CheckGameID(argv[1]);
33 }
34 else if (3 < argc) {
35 z = argv + 2;
36 i1 = 2;
37 do {
38 XPARAM_PARAM_ADDR = strtol(*z, 0, 10);
39 x = z + 1;
40 z = z + 2;
41 XPARAM_VALUE_ADDR = strtol(*x, 0, 10);
42 i2 = i1 + 3;
43 i1 = i1 + 2;
44 } while (i2 < argc);
45 }
46 }
47 }
48 return MODULE_NO_RESIDENT_END; //always NO_RESIDENT_END
49}
50
51//used to return int but retval was never used
52void CheckGameID(const char *ID)
53{
54 int f=0; //have we found the entry?
55 for (unsigned int i = 0; i < GET_XPARAM_DB_SIZE(); i++)
56 {
57 if (!strcmp(XPARAMS[i].name, ID)) {
58 f = 1;
59 XPARAM_PARAM_ADDR = XPARAMS[i].param;
60 XPARAM_VALUE_ADDR = XPARAMS[i].value;
61 } else if (f) break; //comparison failed but f is true. so there are no more consecutive entries for the same game
62 }
63}