Skip to content

Commit c41a3dc

Browse files
committed
mcman: add virtual memory card variant
1 parent d4e9201 commit c41a3dc

File tree

8 files changed

+499
-84
lines changed

8 files changed

+499
-84
lines changed

iop/memorycard/mcman/Makefile

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,25 @@
1010

1111
IOP_INCS += -I$(PS2SDKSRC)/iop/system/sio2man/include
1212

13-
IOP_OBJS = main.o mcdev.o mcsio2.o ps2mc_fio.o ps1mc_fio.o imports.o exports.o
13+
IOP_OBJS = \
14+
main.o \
15+
mcdev.o \
16+
mciomanx_backing.o \
17+
mcsio2.o \
18+
ps2mc_fio.o \
19+
ps1mc_fio.o \
20+
imports.o \
21+
exports.o
1422

1523
# Build the newer version of the memory card module?
1624
MCMAN_BUILDING_XMCMAN ?= 1
1725

1826
# Read from the dev9 external flash ROM instead of the memory card?
1927
MCMAN_BUILDING_XFROMMAN ?= 0
2028

29+
# Read from a file on the filesystem insead of the memory card?
30+
MCMAN_BUILDING_VMCMAN ?= 0
31+
2132
ifneq (x$(MCMAN_BUILDING_XMCMAN),x0)
2233
IOP_CFLAGS += -DBUILDING_XMCMAN
2334
endif
@@ -27,6 +38,12 @@ IOP_CFLAGS += -DBUILDING_XFROMMAN
2738
IOP_INCS += -I$(PS2SDKSRC)/iop/dev9/extflash/include
2839
endif
2940

41+
ifneq (x$(MCMAN_BUILDING_VMCMAN),x0)
42+
IOP_CFLAGS += -DBUILDING_VMCMAN
43+
IOP_CFLAGS += -DIOMANX_OLD_NAME_COMPATIBILITY=0
44+
IOP_CFLAGS += -DIOMANX_OLD_NAME_ADDDELDRV=0
45+
endif
46+
3047
include $(PS2SDKSRC)/Defs.make
3148
include $(PS2SDKSRC)/iop/Rules.bin.make
3249
include $(PS2SDKSRC)/iop/Rules.make

iop/memorycard/mcman/src/imports.lst

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ I_sio_printf
1010
sior_IMPORTS_end
1111
#endif
1212

13+
#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
1314
#ifndef BUILDING_XFROMMAN
1415
#ifdef BUILDING_XMCMAN
1516
#ifndef SIO2MAN_V2
@@ -33,6 +34,7 @@ I_sio2_transfer
3334
sio2man_IMPORTS_end
3435
#endif
3536
#endif
37+
#endif
3638

3739
loadcore_IMPORTS_start
3840
I_RegisterLibraryEntries
@@ -65,7 +67,7 @@ I_SignalSema
6567
I_WaitSema
6668
thsemap_IMPORTS_end
6769

68-
#ifndef BUILDING_XFROMMAN
70+
#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
6971
timrman_IMPORTS_start
7072
I_AllocHardTimer
7173
I_ReferHardTimer
@@ -74,18 +76,30 @@ I_GetTimerCounter
7476
timrman_IMPORTS_end
7577
#endif
7678

77-
#ifndef BUILDING_XFROMMAN
79+
#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
7880
modload_IMPORTS_start
7981
I_SetCheckKelfPathCallback
8082
modload_IMPORTS_end
8183
#endif
8284

85+
#if defined(BUILDING_VMCMAN)
86+
iomanX_IMPORTS_start
87+
I_iomanX_AddDrv
88+
I_iomanX_DelDrv
89+
I_iomanX_open
90+
I_iomanX_close
91+
I_iomanX_lseek
92+
I_iomanX_read
93+
I_iomanX_write
94+
iomanX_IMPORTS_end
95+
#else
8396
ioman_IMPORTS_start
8497
I_AddDrv
8598
I_DelDrv
8699
ioman_IMPORTS_end
100+
#endif
87101

88-
#ifndef BUILDING_XFROMMAN
102+
#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
89103
secrman_IMPORTS_start
90104
I_SecrSetMcCommandHandler
91105
I_SecrSetMcDevIDHandler

iop/memorycard/mcman/src/irx_imports.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,13 @@
2222
#include <fls.h>
2323
#endif
2424
#include <intrman.h>
25+
#ifdef BUILDING_VMCMAN
26+
#include <iomanX.h>
27+
#else
2528
#include <ioman.h>
29+
#endif
2630
#include <loadcore.h>
27-
#ifndef BUILDING_XFROMMAN
31+
#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
2832
#include <modload.h>
2933
#include <secrman.h>
3034
#ifdef BUILDING_XMCMAN
@@ -42,7 +46,7 @@
4246
#endif
4347
#include <stdio.h>
4448
#include <sysclib.h>
45-
#ifndef BUILDING_XFROMMAN
49+
#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
4650
#include <timrman.h>
4751
#endif
4852
#include <thbase.h>

iop/memorycard/mcman/src/main.c

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,17 @@ int mcman_wr_block = -1;
2828
int mcman_wr_flag3 = -10;
2929
int mcman_curdircluster = -1;
3030

31-
#ifndef BUILDING_XFROMMAN
31+
#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
3232
int timer_ID;
3333
#endif
3434
int PS1CardFlag = 1;
3535

3636
union mcman_pagebuf mcman_pagebuf;
3737
union mcman_PS1PDApagebuf mcman_PS1PDApagebuf;
3838

39-
#ifndef BUILDING_XFROMMAN
39+
#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
4040
extern struct irx_export_table _exp_mcman;
41-
#endif
42-
#ifdef BUILDING_XFROMMAN
41+
#elif defined(BUILDING_XFROMMAN)
4342
extern struct irx_export_table _exp_xfromman;
4443
#endif
4544

@@ -155,11 +154,10 @@ int MCMAN_ENTRYPOINT(int argc, char *argv[])
155154
DPRINTF("_start...\n");
156155

157156
DPRINTF("registering exports...\n");
158-
#ifndef BUILDING_XFROMMAN
157+
#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
159158
if (RegisterLibraryEntries(&_exp_mcman) != 0)
160159
return MODULE_NO_RESIDENT_END;
161-
#endif
162-
#ifdef BUILDING_XFROMMAN
160+
#elif defined(BUILDING_XFROMMAN)
163161
if (RegisterLibraryEntries(&_exp_xfromman) != 0)
164162
return MODULE_NO_RESIDENT_END;
165163
#endif
@@ -180,7 +178,7 @@ int MCMAN_ENTRYPOINT(int argc, char *argv[])
180178
DPRINTF("initdev...\n");
181179
mcman_initdev();
182180

183-
#ifndef BUILDING_XFROMMAN
181+
#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
184182
timer_ID = ReferHardTimer(1, 32, 0, 0x6309);
185183

186184
if (timer_ID != -150)
@@ -421,7 +419,7 @@ int mcman_detectcard(int port, int slot)
421419
DPRINTF("mcman_detectcard port%d slot%d\n", port, slot);
422420
mcdi = (MCDevInfo *)&mcman_devinfos[port][slot];
423421

424-
#ifndef BUILDING_XFROMMAN
422+
#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
425423
if ((mcdi->cardtype == sceMcTypeNoCard) || (mcdi->cardtype == sceMcTypePS2)) {
426424
r = mcman_probePS2Card2(port, slot);
427425
if (r < -9) {
@@ -471,8 +469,7 @@ int mcman_detectcard(int port, int slot)
471469
return sceMcResSucceed;
472470
}
473471
}
474-
#endif
475-
#ifdef BUILDING_XFROMMAN
472+
#else
476473
r = mcman_probePS2Card2(port, slot);
477474
if (r >= -9) {
478475
mcdi->cardtype = sceMcTypePS2;
@@ -498,7 +495,7 @@ int McDetectCard2(int port, int slot) // Export #21 XMCMAN only
498495

499496
mcdi = (MCDevInfo *)&mcman_devinfos[port][slot];
500497

501-
#ifndef BUILDING_XFROMMAN
498+
#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
502499
if ((mcdi->cardtype == sceMcTypeNoCard) || (mcdi->cardtype == sceMcTypePS2)) {
503500
r = mcman_probePS2Card(port, slot);
504501
if (r < -9) {
@@ -548,8 +545,7 @@ int McDetectCard2(int port, int slot) // Export #21 XMCMAN only
548545
return sceMcResSucceed;
549546
}
550547
}
551-
#endif
552-
#ifdef BUILDING_XFROMMAN
548+
#else
553549
r = mcman_probePS2Card(port, slot);
554550
if (r >= -9) {
555551
mcdi->cardtype = sceMcTypePS2;
@@ -2480,7 +2476,7 @@ int mcman_setPS1devinfos(int port, int slot)
24802476
if (r < 0)
24812477
return -14;
24822478

2483-
#ifndef BUILDING_XFROMMAN
2479+
#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
24842480
if (mcman_sio2outbufs_PS1PDA[1] != 0)
24852481
return -15;
24862482
#endif

iop/memorycard/mcman/src/mcdev.c

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,11 @@ static MC_IO_OPS_T mcman_mcops = {
9595

9696
// driver descriptor
9797
static MC_IO_DEV_T mcman_mcdev = {
98-
#ifndef BUILDING_XFROMMAN
98+
#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
9999
"mc",
100-
#endif
101-
#ifdef BUILDING_XFROMMAN
100+
#elif defined(BUILDING_VMCMAN)
101+
"vmc",
102+
#elif defined(BUILDING_XFROMMAN)
102103
"xfrom",
103104
#endif
104105
IOP_DT_FS
@@ -107,10 +108,11 @@ static MC_IO_DEV_T mcman_mcdev = {
107108
#endif
108109
,
109110
1,
110-
#ifndef BUILDING_XFROMMAN
111+
#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
111112
"Memory Card",
112-
#endif
113-
#ifdef BUILDING_XFROMMAN
113+
#elif defined(BUILDING_VMCMAN)
114+
"Virtual Memory Card",
115+
#elif defined(BUILDING_XFROMMAN)
114116
"External flash rom",
115117
#endif
116118
&mcman_mcops,
@@ -213,12 +215,14 @@ int mcman_modloadcb(const char *filename, int *port, int *slot)
213215
//--------------------------------------------------------------
214216
void mcman_unit2card(u32 unit)
215217
{
216-
#ifndef BUILDING_XFROMMAN
217-
mcman_mc_port = unit & 1;
218-
mcman_mc_slot = (unit >> 1) & (MCMAN_MAXSLOT - 1);
219-
#endif
220-
#ifdef BUILDING_XFROMMAN
221-
(void)unit;
218+
#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
219+
mcman_mc_port = unit & 1;
220+
mcman_mc_slot = (unit >> 1) & (MCMAN_MAXSLOT - 1);
221+
#elif defined(BUILDING_VMCMAN)
222+
mcman_mc_port = 0;
223+
mcman_mc_slot = unit & (MCMAN_MAXSLOT - 1);
224+
#elif defined(BUILDING_XFROMMAN)
225+
(void)unit;
222226
mcman_mc_port = 0;
223227
mcman_mc_slot = 0;
224228
#endif
@@ -252,7 +256,7 @@ int mcman_initdev(void)
252256
{
253257
iop_sema_t smp;
254258

255-
#ifndef BUILDING_XFROMMAN
259+
#if !defined(BUILDING_XFROMMAN) && !defined(BUILDING_VMCMAN)
256260
SetCheckKelfPathCallback(mcman_modloadcb);
257261
#endif
258262

@@ -644,7 +648,11 @@ int mc_mount(MC_IO_FIL_T *f, const char *fsname, const char *devname, int flag,
644648

645649
WaitSema(mcman_io_sema);
646650
mcman_unit2card(f->unit);
651+
#if defined(BUILDING_VMCMAN)
652+
r = mcman_iomanx_backing_mount(mcman_mc_port, mcman_mc_slot, devname);
653+
#else
647654
r = 0;
655+
#endif
648656
SignalSema(mcman_io_sema);
649657
return r;
650658
}
@@ -658,7 +666,11 @@ int mc_umount(MC_IO_FIL_T *f, const char *fsname)
658666

659667
WaitSema(mcman_io_sema);
660668
mcman_unit2card(f->unit);
669+
#if defined(BUILDING_VMCMAN)
670+
r = mcman_iomanx_backing_umount(mcman_mc_port, mcman_mc_slot);
671+
#else
661672
r = 0;
673+
#endif
662674
SignalSema(mcman_io_sema);
663675
return r;
664676
}

0 commit comments

Comments
 (0)