1 /*****************************************************************************
2 ** $Source: /cygdrive/d/Private/_SVNROOT/bluemsx/blueMSX/Src/Media/MediaDb.h,v $
3 **
4 ** $Revision: 1.51 $
5 **
6 ** $Date: 2009-04-30 03:53:28 $
7 **
8 ** More info: http://www.bluemsx.com
9 **
10 ** Copyright (C) 2003-2006 Daniel Vik
11 **
12 ** This program is free software; you can redistribute it and/or modify
13 ** it under the terms of the GNU General Public License as published by
14 ** the Free Software Foundation; either version 2 of the License, or
15 ** (at your option) any later version.
16 **
17 ** This program is distributed in the hope that it will be useful,
18 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
19 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20 ** GNU General Public License for more details.
21 **
22 ** You should have received a copy of the GNU General Public License
23 ** along with this program; if not, write to the Free Software
24 ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 **
26 ******************************************************************************
27 */
28 #ifndef MEDIA_DB_H
29 #define MEDIA_DB_H
30 
31 typedef int RomType;
32 enum  {
33     ROM_UNKNOWN     = 0,
34     ROM_STANDARD    = 1,
35     ROM_MSXDOS2     = 2,
36     ROM_KONAMI5     = 3,
37     ROM_KONAMI4     = 4,
38     ROM_ASCII8      = 5,
39     ROM_ASCII16     = 6,
40     ROM_GAMEMASTER2 = 7,
41     ROM_ASCII8SRAM  = 8,
42     ROM_ASCII16SRAM = 9,
43     ROM_RTYPE       = 10,
44     ROM_CROSSBLAIM  = 11,
45     ROM_HARRYFOX    = 12,
46     ROM_KOREAN80    = 13,
47     ROM_KOREAN126   = 14,
48     ROM_SCCEXTENDED = 15,
49     ROM_FMPAC       = 16,
50     ROM_KONAMI4NF   = 17,
51     ROM_ASCII16NF   = 18,
52     ROM_PLAIN       = 19,
53     ROM_NORMAL      = 20,
54     ROM_DISKPATCH   = 21,
55     RAM_MAPPER      = 22,
56     RAM_NORMAL      = 23,
57     ROM_KANJI       = 24,
58     ROM_HOLYQURAN   = 25,
59     SRAM_MATSUCHITA = 26,
60     ROM_PANASONIC16 = 27,
61     ROM_BUNSETU     = 28,
62     ROM_JISYO       = 29,
63     ROM_KANJI12     = 30,
64     ROM_NATIONAL    = 31,
65     SRAM_S1985      = 32,
66     ROM_F4DEVICE    = 33,
67     ROM_F4INVERTED  = 34,
68     ROM_KOEI        = 38,
69     ROM_BASIC       = 39,
70     ROM_HALNOTE     = 40,
71     ROM_LODERUNNER  = 41,
72     ROM_0x4000      = 42,
73     ROM_PAC         = 43,
74     ROM_MEGARAM     = 44,
75     ROM_MEGARAM128  = 45,
76     ROM_MEGARAM256  = 46,
77     ROM_MEGARAM512  = 47,
78     ROM_MEGARAM768  = 48,
79     ROM_MEGARAM2M   = 49,
80     ROM_MSXAUDIO    = 50,
81     ROM_KOREAN90    = 51,
82     ROM_SNATCHER    = 52,
83     ROM_SDSNATCHER  = 53,
84     ROM_SCCMIRRORED = 54,
85     ROM_SCC         = 55,
86     ROM_SCCPLUS     = 56,
87     ROM_TC8566AF    = 57,
88     ROM_S1990       = 58,
89     ROM_TURBORTIMER = 59,
90     ROM_TURBORPCM   = 60,
91     ROM_KONAMISYNTH = 61,
92     ROM_MAJUTSUSHI  = 62,
93     ROM_MICROSOL    = 63,
94     ROM_NATIONALFDC = 64,
95     ROM_PHILIPSFDC  = 65,
96     ROM_CASPATCH    = 66,
97     ROM_SVI738FDC   = 67,
98     ROM_PANASONIC32 = 68,
99     ROM_EXTRAM      = 69,
100     ROM_EXTRAM512KB = 70,
101     ROM_EXTRAM1MB   = 71,
102     ROM_EXTRAM2MB   = 72,
103     ROM_EXTRAM4MB   = 73,
104     ROM_SVI328CART  = 74,
105     ROM_SVI328FDC   = 75,
106     ROM_COLECO      = 76,
107     ROM_SONYHBI55   = 77,
108     ROM_MSXMUSIC    = 78,
109     ROM_MOONSOUND   = 79,
110     ROM_MSXAUDIODEV = 80,
111     ROM_V9958       = 81,
112     ROM_SVI328COL80 = 82,
113     ROM_SVI328PRN   = 83,
114     ROM_MSXPRN      = 84,
115     ROM_SVI328RS232 = 85,
116     ROM_0xC000      = 86,
117     ROM_FMPAK       = 87,
118     ROM_MSXMIDI     = 88,
119     ROM_MSXRS232    = 89,
120     ROM_TURBORIO    = 90,
121     ROM_KONAMKBDMAS = 91,
122     ROM_GAMEREADER  = 92,
123     RAM_1KB_MIRRORED= 93,
124     ROM_SG1000      = 94,
125     ROM_SG1000CASTLE= 95,
126     ROM_SUNRISEIDE  = 96,
127     ROM_GIDE        = 97,
128     ROM_BEERIDE     = 98,
129     ROM_KONWORDPRO  = 99,
130     ROM_MICROSOL80  = 100,
131     ROM_NMS8280DIGI = 101,
132     ROM_SONYHBIV1   = 102,
133     ROM_SVI727COL80 = 103,
134     ROM_FMDAS       = 104,
135     ROM_YAMAHASFG05 = 105,
136     ROM_YAMAHASFG01 = 106,
137     ROM_SF7000IPL   = 107,
138     ROM_SC3000      = 108,
139     ROM_PLAYBALL    = 109,
140     ROM_OBSONET     = 110,
141     RAM_2KB_MIRRORED= 111,
142     ROM_SEGABASIC   = 112,
143     ROM_CVMEGACART  = 113,
144     ROM_DUMAS       = 114,
145     SRAM_MEGASCSI   = 115,
146     SRAM_MEGASCSI128= 116,
147     SRAM_MEGASCSI256= 117,
148     SRAM_MEGASCSI512= 118,
149     SRAM_MEGASCSI1MB= 119,
150     SRAM_ESERAM     = 120,
151     SRAM_ESERAM128  = 121,
152     SRAM_ESERAM256  = 122,
153     SRAM_ESERAM512  = 123,
154     SRAM_ESERAM1MB  = 124,
155     SRAM_ESESCC     = 125,
156     SRAM_ESESCC128  = 126,
157     SRAM_ESESCC256  = 127,
158     SRAM_ESESCC512  = 128,
159     SRAM_WAVESCSI   = 129,
160     SRAM_WAVESCSI128= 130,
161     SRAM_WAVESCSI256= 131,
162     SRAM_WAVESCSI512= 132,
163     SRAM_WAVESCSI1MB= 133,
164     ROM_NOWIND      = 134,
165     ROM_GOUDASCSI   = 135,
166     ROM_MANBOW2     = 136,
167     ROM_MEGAFLSHSCC = 137,
168     ROM_FORTEII     = 138,
169     ROM_PANASONIC8  = 139,
170     ROM_FSA1FMMODEM = 140,
171     ROM_DRAM        = 141,
172     ROM_PANASONICWX16=142,
173     ROM_TC8566AF_TR = 143,
174     ROM_MATRAINK    = 144,
175     ROM_NETTOUYAKYUU= 145,
176     ROM_YAMAHANET   = 146,
177     ROM_JOYREXPSG   = 147,
178     ROM_OPCODEPSG   = 148,
179     ROM_EXTRAM16KB  = 149,
180     ROM_EXTRAM32KB  = 150,
181     ROM_EXTRAM48KB  = 151,
182     ROM_EXTRAM64KB  = 152,
183     ROM_NMS1210     = 153,
184     ROM_ARC         = 154,
185     ROM_OPCODEBIOS  = 155,
186     ROM_OPCODESLOT  = 156,
187     ROM_OPCODESAVE  = 157,
188     ROM_OPCODEMEGA  = 158,
189     SRAM_MATSUCHITA_INV = 159,
190     ROM_SVI328RSIDE = 160,
191     ROM_ACTIVISIONPCB_2K = 161,
192     ROM_SVI707FDC   = 162,
193     ROM_MANBOW2_V2  = 163,
194     ROM_HAMARAJANIGHT = 164,
195     ROM_MEGAFLSHSCCPLUS = 165,
196     ROM_DOOLY       = 166,
197     ROM_SG1000_RAMEXPANDER_A = 167,
198     ROM_SG1000_RAMEXPANDER_B = 168,
199     ROM_MSXMIDI_EXTERNAL     = 169,
200     ROM_MUPACK               = 170,
201     ROM_ACTIVISIONPCB_256K = 171,
202     ROM_ACTIVISIONPCB = 172,
203     ROM_ACTIVISIONPCB_16K = 173,
204     ROM_MAXROMID    = 173
205 };
206 
207 typedef struct MediaType MediaType;
208 typedef struct MediaDb MediaDb;
209 
210 void mediaDbAddFromXmlFile(MediaDb* mediaDb, const char* fileName,
211                            const char* rootTag, const char* elemTag);
212 
213 MediaType* mediaDbLookup(MediaDb* mediaDb, const void *buffer, int size);
214 
215 
216 void mediaDbLoad(const char* directory);
217 
218 void mediaDbCreateRomdb();
219 void mediaDbCreateDiskdb();
220 void mediaDbCreateCasdb();
221 
222 
223 MediaType* mediaDbLookupRom(const void *buffer, int size);
224 MediaType* mediaDbGuessRom(const void *buffer, int size);
225 MediaType* mediaDbLookupDisk(const void *buffer, int size);
226 MediaType* mediaDbLookupCas(const void *buffer, int size);
227 
228 RomType     mediaDbGetRomType(MediaType* mediaType);
229 const char* mediaDbGetTitle(MediaType* mediaType);
230 const char* mediaDbGetYear(MediaType* mediaType);
231 const char* mediaDbGetCompany(MediaType* mediaType);
232 const char* mediaDbGetRemark(MediaType* mediaType);
233 const char* mediaDbGetPrettyString(MediaType* mediaType);
234 
235 void mediaDbSetDefaultRomType(RomType romType);
236 RomType mediaDbStringToType(const char* romName);
237 const char* romTypeToString(RomType romType);
238 const char* romTypeToShortString(RomType romType);
239 
240 int romTypeIsRom(RomType romType);
241 int romTypeIsMegaRom(RomType romType);
242 int romTypeIsMegaRam(RomType romType);
243 int romTypeIsFmPac(RomType romType);
244 
245 #endif /*MEDIA_DB_H*/
246