Skip to content

Commit 66b1d3c

Browse files
committed
some tweaks on togleable features
1 parent f6e4010 commit 66b1d3c

File tree

4 files changed

+71
-11
lines changed

4 files changed

+71
-11
lines changed

.vscode/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"files.associations": {
33
"*.make": "makefile",
4-
"libds34bt.h": "c"
4+
"libds34bt.h": "c",
5+
"typeinfo": "c"
56
}
67
}

ARCADE_README.MD

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# wLaunchELF 4.43x_isr_coh
2+
3+
This special version of wLaunchELF has a few extra features
4+
5+
- Execution of ELF files without the need for .ELF extension (eg: `mc0:*LOAD` files used by most arcade games)
6+
- Execution of IRX files with or without the .IRX extension
7+
8+
## Important notes
9+
10+
### System 2x6 Video display init
11+
12+
if your wLaunchELF for arcade will be installed as `boot.bin` on a system2x6 you will need a method to initialize the JVS Video display (otherwise, nothing will come out of your VGA Outputs). here you have a [standalone IRX module](https://github.com/user-attachments/files/19588377/SYSTEM2x6_VIDEO_INIT.zip) that can do that
13+
14+
wLaunchELF will look for it in these path, following this order:
15+
16+
- `./ACJVLOAD.IRX`
17+
- `mc0:/ACJVLOAD.IRX`
18+
- `mmce0:/COH/ACJVLOAD.IRX`
19+
- `mc1:/ACJVLOAD.IRX`
20+
- `mass0:/ACJVLOAD.IRX`
21+
- `mass1:/ACJVLOAD.IRX`
22+
23+
if the module is successfully executed, when the UI pops in you will see `JVS INIT` on top
24+
25+
### Arcade WatchDog
26+
27+
Arcade PS2s will reset themselves if they spend between 3 and 5 minuts (depending on model) without authenticating the security dongle
28+
29+
By default, wLaunchELF will not deal with this. as it involves making the access to `mc0:` rather unstable
30+
31+
To keep the watchdog happy, please create a file called `watchdog.opt`, wich must be located on one of these locations:
32+
33+
- `mc0:/watchdog.opt`
34+
- `mmce0:/watchdog.opt`
35+
- `mc1:/watchdog.opt`
36+
- `mass:/watchdog.opt`
37+
- `host:/watchdog.opt`
38+
39+
what this will do is just execute the `rom0:DAEMON` module. this module setups a thread that calls the card authentification routine on the mc0 directly, every minute. keeping the watchdog happy
40+
41+
if the module is successfully executed, when the UI pops in you will see `watch OK` on top (else `watch NG`)
42+
43+
### IOP Boot List
44+
45+
If your setup needs wLaunchELF to load a specific set of IRX modules, create a file called `IOPBOOT.CNF` wich has to be placed on the root of any of the memory cards
46+
47+
the format is the following:
48+
49+
```ini
50+
# example of custom IOP Boot list. these modules are executed in order before program UI is ready
51+
# NAME = PATH
52+
ACUART = mc0:acuart.irx
53+
ACTTY = mc0:actty.irx
54+
LED = rom:LED
55+
WHATEVER = mc1:FOO.IRX
56+
```
57+
58+
the name is used to print on screen in case some error POPS in when launching the associated module

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ It features:
2323
2424
- `BOOT`: Base filename, means nothing
2525
- `UNC`: Executable is Uncompressed
26-
- `COH`: Special version for PS2 `COH-H` Models (Namco System 246/256 specifically)
26+
- `COH`: Special version for PS2 `COH-H` Models (Namco System 246/256 and konami python1 specifically)
2727
- `NO_NETWORK`: Network features are disabled and network IRX drivers stripped away, with the purpose of making app smaller
2828
- `XFROM`: Support for accessing the [PSX-DESR](https://upload.wikimedia.org/wikipedia/commons/f/fa/Console_psx.jpg) internal flash memory.
2929
- `EXFAT`: Support for accessing EXFAT filesystems from BDM devices (USB & MX4SIO)

src/main.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2147,7 +2147,7 @@ static void Execute(char *pathin)
21472147
#endif
21482148
#ifdef MMCE
21492149
} else if (!strncmp(path, "mmce", 4)) {
2150-
if ((t = checkELFheader(path)) <= 0)
2150+
if ((t = checkELFheader(path, TYPE_ELF)) <= 0)
21512151
goto ELFnotFound;
21522152
strcpy(fullpath, path);
21532153
goto ELFchecked;
@@ -2832,9 +2832,9 @@ int main(int argc, char *argv[])
28322832
sprintf(mainMsg, "%s", LNG(Loaded_Config));
28332833

28342834
#ifdef SUPPORT_SYSTEM_2X6
2835-
#define ACJV_PATHCNT 5
2835+
#define ACJV_PATHCNT 6
28362836
int id, ret;
2837-
const char* ACJVPATHS[ACJV_PATHCNT] = {"./ACJVLOAD.IRX", "mc0:/ACJVLOAD.IRX", "mc1:/ACJVLOAD.IRX", "mass0:/ACJVLOAD.IRX", "mass1:/ACJVLOAD.IRX"};
2837+
const char* ACJVPATHS[ACJV_PATHCNT] = {"./ACJVLOAD.IRX", "mc0:/ACJVLOAD.IRX", "mmce0:/COH/ACJVLOAD.IRX", "mc1:/ACJVLOAD.IRX", "mass0:/ACJVLOAD.IRX", "mass1:/ACJVLOAD.IRX"};
28382838
for (i=0;i<ACJV_PATHCNT;i++) {
28392839
id = SifLoadStartModule(ACJVPATHS[i], 0, NULL, &ret);
28402840
DPRINTF(" [%s]: ID=%d, ret=%d\n", ACJVPATHS[i], id, ret);
@@ -2843,12 +2843,12 @@ int main(int argc, char *argv[])
28432843
break;
28442844
}
28452845
}
2846-
sprintf(mainMsg + strlen(mainMsg), (i == -1) ? " | ACJVLOAD loaded" : " | ACJVLOAD not found");
2846+
sprintf(mainMsg + strlen(mainMsg), " | JVS INIT");
28472847
if (
28482848
#ifdef LOAD_DAEMON
28492849
1
28502850
#else
2851-
exists("mass:/watchdog.opt") || exists("mc0:/watchdog.opt") || exists("mc1:/watchdog.opt") || exists("host:/watchdog.opt")
2851+
exists("mc0:/watchdog.opt") || exists("mmce0:/watchdog.opt") || exists("mc1:/watchdog.opt") || exists("mass:/watchdog.opt") || exists("host:/watchdog.opt")
28522852
#endif
28532853
) {
28542854
DPRINTF("Starting watchdog\n");
@@ -2859,18 +2859,19 @@ int main(int argc, char *argv[])
28592859

28602860
{
28612861
int var_cnt;
2862-
char *RAM_p, *CNF_p, *name, *value;
2863-
if ((RAM_p = preloadCNF("mc1:IOPBOOT.CNF"))) {
2862+
char *RAM_p = preloadCNF("mc0:IOPBOOT.CNF"), *CNF_p, *name, *value;
2863+
if (!RAM_p) RAM_p = preloadCNF("mc1:IOPBOOT.CNF");
2864+
if (RAM_p) {
28642865
CNF_p = RAM_p;
28652866
for (var_cnt = 0; get_CNF_string(&CNF_p, &name, &value); var_cnt++) {
28662867
id = SifLoadStartModule(value, 0, NULL, &ret);
28672868
printf("%s:%s %d %d\n", name, value, id, ret);
2868-
if (ret != 0 || id < 0) {drawMsg(value); sleep(2);}
2869+
if (ret != 0 || id < 0) {drawMsg(name); sleep(2);}
28692870
// ((i & 3) != 0)
28702871
}
28712872
free(RAM_p);
2873+
sprintf(mainMsg + strlen(mainMsg)," | IOPLS OK");
28722874
}
2873-
sprintf(mainMsg + strlen(mainMsg), (RAM_p) ? " | IOPLS OK" : " | IOPLS NG");
28742875
}
28752876
#endif
28762877

0 commit comments

Comments
 (0)