186 lines
7.8 KiB
C
186 lines
7.8 KiB
C
/*
|
|
mgd.h - Multi Game Doctor/Hunter support for uCON64
|
|
|
|
Copyright (c) 1999 - 2001 NoisyB <noisyb@gmx.net>
|
|
Copyright (c) 2002 - 2004 dbjh
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*/
|
|
#ifndef MGD_H
|
|
#define MGD_H
|
|
|
|
extern const st_getopt2_t mgd_usage[];
|
|
|
|
/*
|
|
The MGD2 only accepts certain filenames, and these filenames
|
|
must be specified in an index file, "MULTI-GD", otherwise the
|
|
MGD2 will not recognize the file. In the case of multiple games
|
|
being stored in a single disk, simply enter its corresponding
|
|
MULTI-GD index into the "MULTI-GD" file.
|
|
|
|
Thanks to acem77 for the (verified) list below.
|
|
|
|
Super Famicom:
|
|
|
|
game size # of files names MULTI-GD
|
|
================================================================
|
|
1M 1 SF1XXX#.048 SF1XXX#
|
|
2M 1 SF2XXX#.048 SF2XXX#
|
|
4M 1 SF4XXX#.048 SF4XXX#
|
|
4M 2 SF4XXXxA.078 SF4XXXxA
|
|
SF4XXXxB.078 SF4XXXxB
|
|
8M 1 SF8XXX#.058 SF8XXX#
|
|
2 SF8XXXxA.078 SF8XXXxA
|
|
SF8XXXxB.078 SF8XXXxB
|
|
10M 1 SF10XXX#.078 SF10XXX#
|
|
2 SF10XXX#.078 SF10XXX#
|
|
SF10XXX#.078 SF10XXX#
|
|
12M 1 SF12XXX#.078 SF12XXX#
|
|
2 SF12XXX#A.078 SF12XXX#B
|
|
SF12XXX#B.078 SF12XXX#A
|
|
16M 1 SF16XXX#.078 SF16XXX#
|
|
16M 2 SF16XXX#A.078 SF16XXX#A
|
|
SF16XXX#B.078 SF16XXX#B
|
|
20M 1 SF20XXX#.078 SF20XXX#
|
|
3 SF20XXX#A.078 SF20XXX#A
|
|
SF20XXX#B.078 SF20XXX#B
|
|
SF20XXX#C.078 SF20XXX#C
|
|
24M 1 SF24XXX#.078 SF24XXX#
|
|
24M 3 SF24XXX#A.078 SF24XXX#A
|
|
SF24XXX#B.078 SF24XXX#B
|
|
SF24XXX#C.078 SF24XXX#C
|
|
32M 1 SF32XXX#.078 SF32XXX#
|
|
32M 4 SF32XXX#A.078 SF32XXX#A
|
|
SF32XXX#B.078 SF32XXX#B
|
|
SF32XXX#C.078 SF32XXX#C
|
|
SF32XXX#D.078 SF32XXX#D
|
|
|
|
Mega Drive:
|
|
|
|
game size # of files names MULTI-GD
|
|
================================================================
|
|
1M 1 MD1XXX#.000 MD1XXX#
|
|
2M 1 MD2XXX#.000 MD2XXX#
|
|
4M 1 MD4XXX#.000 MD4XXX#
|
|
8M 1 MD8XXX#.008 MD8XXX#
|
|
16M 2 MD16XXX#A.018 MD16XXX#A
|
|
MD16XXX#B.018 MD16XXX#B
|
|
20M 3 MD20XXX#A.038 MD20XXX#A
|
|
MD20XXX#B.038 MD20XXX#B
|
|
MD20XXX#C.038 MD20XXX#C
|
|
24M 3 MD24XXX#A.038 MD24XXX#A
|
|
MD24XXX#B.038 MD24XXX#B
|
|
MD24XXX#C.038 MD24XXX#C
|
|
32M 4 MD32XXX#A.038 MD32XXX#A
|
|
MD32XXX#B.038 MD32XXX#B
|
|
MD32XXX#C.038 MD32XXX#C
|
|
MD32XXX#D.038 MD32XXX#D
|
|
|
|
PC-Engine:
|
|
|
|
game size # of files names MULTI-GD
|
|
================================================================
|
|
1M 1 PC1XXX#.040 PC1XXX#
|
|
2M 1 PC2XXX#.040 PC2XXX#
|
|
3M 1 PC3XXX#.030 PC2XXX#
|
|
4M 1 PC4XXX#.048 PC4XXX#
|
|
6M 1 PC6XXX#.058 PC6XXX#
|
|
8M 1 PC8XXX#.058 PC8XXX#
|
|
|
|
Sega Master System:
|
|
|
|
game size # of files names MULTI-GD
|
|
================================================================
|
|
less than 1M 1 GG0XXX#.060 GG0XXX#
|
|
1M 1 GG1XXX#.060 GG1XXX#
|
|
2M 1 GG2XXX#.060/70 GG2XXX#
|
|
3M 1 GG3XXX#.078 GG2XXX#
|
|
4M 1 GG4XXX#.078/68 GG4XXX#
|
|
6M 1 GG6XXX#.078 GG6XXX#
|
|
8M 1 GG8XXX#.078 GG8XXX#
|
|
|
|
Game Gear:
|
|
|
|
game size # of files names MULTI-GD
|
|
================================================================
|
|
less than 1M 1 GG0XXX#.040 GG0XXX#
|
|
1M 1 GG1XXX#.040 GG1XXX#
|
|
2M 1 GG2XXX#.050/40 GG2XXX#
|
|
3M 1 GG3XXX#.048 GG2XXX#
|
|
4M 1 GG4XXX#.058/48 GG4XXX#
|
|
6M 1 GG6XXX#.078 GG6XXX#
|
|
8M 1 GG8XXX#.078 GG8XXX#
|
|
|
|
Game Boy:
|
|
|
|
game size # of files names MULTI-GD
|
|
================================================================
|
|
less than 1M 1 GB0XXX#.040 GB0XXX#
|
|
1M 1 GB1XXX#.040 GB1XXX#
|
|
2M 1 GB2XXX#.040/60 GB2XXX#
|
|
3M 1 GB3XXX#.030 GB2XXX#
|
|
4M 1 GB4XXX#.048 GB4XXX#
|
|
6M 1 GB6XXX#.058 GB6XXX#
|
|
8M 1 GB8XXX#.058 GB8XXX#
|
|
|
|
|
|
Contrary to popular belief the Game Doctor SF3/SF6/SF7 *does*
|
|
use a 512 byte header like the SWC, but it also accepts
|
|
headerless files.
|
|
A header is necessary when things like SRAM size must be made
|
|
known to the Game Doctor. The Game Doctor also uses specially
|
|
designed filenames to distinguish between multi files.
|
|
|
|
Usually, the filename is in the format of: SFXXYYYZ.078
|
|
|
|
Where SF means Super Famicom, XX refers to the size of the
|
|
image in Mbit. If the size is only one character (i.e. 2, 4 or
|
|
8 Mbit) then no leading "0" is inserted.
|
|
|
|
YYY refers to a catalogue number in Hong Kong shops
|
|
identifying the game title. (0 is Super Mario World, 1 is F-
|
|
Zero, etc). I was told that the Game Doctor copier produces a
|
|
random number when backing up games.
|
|
|
|
Z indicates a multi file. Like XX, if it isn't used it's
|
|
ignored.
|
|
|
|
A would indicate the first file, B the second, etc. I am told
|
|
078 is not needed, but is placed on the end of the filename by
|
|
systems in Asia.
|
|
|
|
e.g. The first 8 Mbit file of Donkey Kong Country (assuming it
|
|
is cat. no. 475) would look like: SF32475A.078
|
|
*/
|
|
|
|
#ifdef USE_PARALLEL
|
|
#endif // USE_PARALLEL
|
|
|
|
// the following four functions are used by non-transfer code in genesis.c
|
|
extern void mgd_interleave (unsigned char **buffer, int size);
|
|
extern void mgd_deinterleave (unsigned char **buffer, int data_size,
|
|
int buffer_size);
|
|
extern int fread_mgd (void *buffer, size_t size, size_t number, FILE *fh);
|
|
extern int q_fread_mgd (void *buffer, size_t start, size_t len,
|
|
const char *filename);
|
|
extern void mgd_make_name (const char *filename, int console, int size,
|
|
char *name);
|
|
extern void mgd_write_index_file (void *ptr, int n_names);
|
|
|
|
#define MGD_HEADER_START 0
|
|
#define MGD_HEADER_LEN 512
|
|
#endif // MGD_H
|