6
6
Review Open PS2 Loader README & LICENSE files for further details.
7
7
*/
8
8
9
+ #include <cdvdman.h>
9
10
#include <stdio.h>
10
11
#include <loadcore.h>
11
- #include <ioman.h>
12
- #include "ioman_add.h"
13
- #include <io_common.h>
12
+ #include <iomanX.h>
14
13
#include <intrman.h>
14
+ #include <mcman.h>
15
15
#include <thsemap.h>
16
16
#include <sysclib.h>
17
17
#include <sysmem.h>
32
32
IRX_ID (MODNAME , 1 , 1 );
33
33
34
34
// driver ops protypes
35
- int genvmc_dummy (void );
36
- int genvmc_init (iop_device_t * dev );
37
- int genvmc_deinit (iop_device_t * dev );
38
- int genvmc_devctl (iop_file_t * f , const char * name , int cmd , void * args , u32 arglen , void * buf , u32 buflen );
35
+ static int genvmc_dummy (void );
36
+ static int genvmc_init (iop_device_t * dev );
37
+ static int genvmc_deinit (iop_device_t * dev );
38
+ static int genvmc_devctl (iop_file_t * f , const char * name , int cmd , void * args , unsigned int arglen , void * buf , unsigned int buflen );
39
39
40
40
// driver ops func tab
41
- void * genvmc_ops [ 27 ] = {
42
- ( void * ) genvmc_init ,
43
- ( void * ) genvmc_deinit ,
41
+ static iop_device_ops_t genvmc_ops = {
42
+ & genvmc_init ,
43
+ & genvmc_deinit ,
44
44
(void * )genvmc_dummy ,
45
45
(void * )genvmc_dummy ,
46
46
(void * )genvmc_dummy ,
@@ -62,64 +62,26 @@ void *genvmc_ops[27] = {
62
62
(void * )genvmc_dummy ,
63
63
(void * )genvmc_dummy ,
64
64
(void * )genvmc_dummy ,
65
- ( void * ) genvmc_devctl ,
65
+ & genvmc_devctl ,
66
66
(void * )genvmc_dummy ,
67
67
(void * )genvmc_dummy ,
68
68
(void * )genvmc_dummy };
69
69
70
70
// driver descriptor
71
- static iop_ext_device_t genvmc_dev = {
71
+ static iop_device_t genvmc_dev = {
72
72
"genvmc" ,
73
73
IOP_DT_FS | IOP_DT_FSEXT ,
74
74
1 ,
75
75
"genvmc" ,
76
- ( struct _iop_ext_device_ops * ) & genvmc_ops };
76
+ & genvmc_ops };
77
77
78
- // from cdvdman
79
- typedef struct
80
- {
81
- u8 stat ;
82
- u8 second ;
83
- u8 minute ;
84
- u8 hour ;
85
- u8 week ;
86
- u8 day ;
87
- u8 month ;
88
- u8 year ;
89
- } cd_clock_t ;
90
-
91
- int sceCdRC (cd_clock_t * rtc ); // #51
92
-
93
- int sceMcDetectCard (int port , int slot ); // #05
94
- int sceMcReadPage (int port , int slot , int page , char * mcbuffer ); // #18
95
- int sceMcGetCardType (int port , int slot ); // #39
96
-
97
-
98
- // mc file attributes
99
- #define SCE_STM_R 0x01
100
- #define SCE_STM_W 0x02
101
- #define SCE_STM_X 0x04
102
- #define SCE_STM_C 0x08
103
- #define SCE_STM_F 0x10
104
- #define SCE_STM_D 0x20
105
- #define sceMcFileAttrReadable SCE_STM_R
106
- #define sceMcFileAttrWriteable SCE_STM_W
107
- #define sceMcFileAttrExecutable SCE_STM_X
108
- #define sceMcFileAttrDupProhibit SCE_STM_C
109
- #define sceMcFileAttrFile SCE_STM_F
110
- #define sceMcFileAttrSubdir SCE_STM_D
111
- #define sceMcFileCreateDir 0x0040
112
- #define sceMcFileAttrClosed 0x0080
113
- #define sceMcFileCreateFile 0x0200
114
- #define sceMcFile0400 0x0400
115
- #define sceMcFileAttrPDAExec 0x0800
116
- #define sceMcFileAttrPS1 0x1000
117
- #define sceMcFileAttrHidden 0x2000
118
- #define sceMcFileAttrExists 0x8000
78
+ #define sceMcDetectCard McDetectCard
79
+ #define sceMcReadPage McReadPage
80
+ #define sceMcGetCardType McGetMcType
119
81
120
82
// SONY superblock magic & version
121
- static char SUPERBLOCK_MAGIC [] = "Sony PS2 Memory Card Format " ;
122
- static char SUPERBLOCK_VERSION [] = "1.2.0.0" ;
83
+ static const char SUPERBLOCK_MAGIC [] = "Sony PS2 Memory Card Format " ;
84
+ static const char SUPERBLOCK_VERSION [] = "1.2.0.0" ;
123
85
124
86
// superblock struct
125
87
typedef struct
@@ -155,32 +117,6 @@ typedef struct
155
117
int unknown5 ;
156
118
} MCDevInfo ;
157
119
158
- typedef struct _sceMcStDateTime
159
- {
160
- u8 Resv2 ;
161
- u8 Sec ;
162
- u8 Min ;
163
- u8 Hour ;
164
- u8 Day ;
165
- u8 Month ;
166
- u16 Year ;
167
- } sceMcStDateTime ;
168
-
169
- typedef struct
170
- { // size = 512
171
- u16 mode ; // 0
172
- u16 unused ; // 2
173
- u32 length ; // 4
174
- sceMcStDateTime created ; // 8
175
- u32 cluster ; // 16
176
- u32 dir_entry ; // 20
177
- sceMcStDateTime modified ; // 24
178
- u32 attr ; // 32
179
- u32 unused2 [7 ]; // 36
180
- char name [32 ]; // 64
181
- u8 unused3 [416 ]; // 96
182
- } McFsEntry ;
183
-
184
120
#define BLOCKKB 16
185
121
186
122
static MCDevInfo devinfo __attribute__((aligned (64 )));
@@ -220,7 +156,7 @@ static void long_multiply(u32 v1, u32 v2, u32 *HI, u32 *LO)
220
156
static int mc_getmcrtime (sceMcStDateTime * time )
221
157
{
222
158
register int retries ;
223
- cd_clock_t cdtime ;
159
+ sceCdCLOCK cdtime ;
224
160
225
161
retries = 64 ;
226
162
@@ -229,28 +165,28 @@ static int mc_getmcrtime(sceMcStDateTime *time)
229
165
break ;
230
166
} while (-- retries > 0 );
231
167
232
- if (cdtime .stat & 128 ) {
233
- * ((u16 * )& cdtime .month ) = 0x7d0 ;
234
- cdtime .day = 3 ;
235
- cdtime .week = 4 ;
236
- cdtime .hour = 0 ;
237
- cdtime .minute = 0 ;
238
- cdtime .second = 0 ;
239
- cdtime .stat = 0 ;
240
- }
241
-
242
- time -> Resv2 = 0 ;
243
- time -> Sec = ((((cdtime .second >> 4 ) << 2 ) + (cdtime .second >> 4 )) << 1 ) + (cdtime .second & 0xf );
244
- time -> Min = ((((cdtime .minute >> 4 ) << 2 ) + (cdtime .minute >> 4 )) << 1 ) + (cdtime .minute & 0xf );
245
- time -> Hour = ((((cdtime .hour >> 4 ) << 2 ) + (cdtime .hour >> 4 )) << 1 ) + (cdtime .hour & 0xf );
246
- time -> Day = ((((cdtime .day >> 4 ) << 2 ) + (cdtime .day >> 4 )) << 1 ) + (cdtime .day & 0xf );
247
-
248
- if ((cdtime .month & 0x10 ) != 0 )
249
- time -> Month = (cdtime .month & 0xf ) + 0xa ;
250
- else
251
- time -> Month = cdtime .month & 0xf ;
168
+ if (cdtime .stat & 0x80 ) {
169
+ time -> Year = 2000 ;
170
+ time -> Month = 3 ;
171
+ time -> Day = 4 ;
172
+ time -> Hour = 5 ;
173
+ time -> Min = 6 ;
174
+ time -> Sec = 7 ;
175
+ time -> Resv2 = 0 ;
176
+ } else {
177
+ time -> Resv2 = 0 ;
178
+ time -> Sec = btoi (cdtime .second );
179
+ time -> Min = btoi (cdtime .minute );
180
+ time -> Hour = btoi (cdtime .hour );
181
+ time -> Day = btoi (cdtime .day );
182
+
183
+ if ((cdtime .month & 0x10 ) != 0 ) //Keep only valid bits: 0x1f (for month values 1-12 in BCD)
184
+ time -> Month = (cdtime .month & 0xf ) + 0xa ;
185
+ else
186
+ time -> Month = cdtime .month & 0xf ;
252
187
253
- time -> Year = ((((cdtime .year >> 4 ) << 2 ) + (cdtime .year >> 4 )) << 1 ) + ((cdtime .year & 0xf ) | 0x7d0 );
188
+ time -> Year = btoi (cdtime .year ) + 2000 ;
189
+ }
254
190
255
191
return 0 ;
256
192
}
@@ -387,9 +323,9 @@ static int vmc_mcformat(char *filename, int size_kb, int blocksize, int *progres
387
323
// erase all clusters
388
324
strcpy (msg , "Erasing VMC clusters..." );
389
325
memset (cluster_buf , 0xff , sizeof (cluster_buf ));
390
- for (i = 0 ; i < mcdi -> clusters_per_card ; i += 16 ) {
326
+ for (i = 0 ; i < mcdi -> clusters_per_card ; i += BLOCKKB ) {
391
327
* progress = i / (mcdi -> clusters_per_card / 99 );
392
- r = mc_writecluster (genvmc_fh , i , cluster_buf , 16 );
328
+ r = mc_writecluster (genvmc_fh , i , cluster_buf , BLOCKKB );
393
329
if (r < 0 ) {
394
330
if (r == -2 ) // it's user abort
395
331
r = -1000 ;
@@ -588,13 +524,13 @@ static int vmc_mcformat(char *filename, int size_kb, int blocksize, int *progres
588
524
}
589
525
590
526
//--------------------------------------------------------------
591
- int genvmc_dummy (void )
527
+ static int genvmc_dummy (void )
592
528
{
593
529
return - EPERM ;
594
530
}
595
531
596
532
//--------------------------------------------------------------
597
- int genvmc_init (iop_device_t * dev )
533
+ static int genvmc_init (iop_device_t * dev )
598
534
{
599
535
genvmc_io_sema = CreateMutex (IOP_MUTEX_UNLOCKED );
600
536
genvmc_thread_sema = CreateMutex (IOP_MUTEX_UNLOCKED );
@@ -604,7 +540,7 @@ int genvmc_init(iop_device_t *dev)
604
540
}
605
541
606
542
//--------------------------------------------------------------
607
- int genvmc_deinit (iop_device_t * dev )
543
+ static int genvmc_deinit (iop_device_t * dev )
608
544
{
609
545
DeleteSema (genvmc_io_sema );
610
546
DeleteSema (genvmc_thread_sema );
@@ -714,7 +650,7 @@ static int vmc_status(statusVMCparam_t *param)
714
650
}
715
651
716
652
//--------------------------------------------------------------
717
- int genvmc_devctl (iop_file_t * f , const char * name , int cmd , void * args , u32 arglen , void * buf , u32 buflen )
653
+ static int genvmc_devctl (iop_file_t * f , const char * name , int cmd , void * args , unsigned int arglen , void * buf , unsigned int buflen )
718
654
{
719
655
register int r = 0 ;
720
656
@@ -768,15 +704,3 @@ int _start(int argc, char **argv)
768
704
return MODULE_RESIDENT_END ;
769
705
}
770
706
771
- //--------------------------------------------------------------
772
- // Extra import tables
773
-
774
- DECLARE_IMPORT_TABLE (cdvdman , 1 , 1 )
775
- DECLARE_IMPORT (51 , sceCdRC )
776
- END_IMPORT_TABLE
777
-
778
- DECLARE_IMPORT_TABLE (mcman , 1 , 1 )
779
- DECLARE_IMPORT (5 , sceMcDetectCard )
780
- DECLARE_IMPORT (18 , sceMcReadPage )
781
- DECLARE_IMPORT (39 , sceMcGetCardType )
782
- END_IMPORT_TABLE
0 commit comments