merge x6502 code FCEUX
[fceu.git] / ines.h
CommitLineData
d97315ac 1/* FCE Ultra - NES/Famicom Emulator\r
2 *\r
3 * Copyright notice for this file:\r
4 * Copyright (C) 1998 Bero\r
5 * Copyright (C) 2002 Xodnizel\r
6 *\r
7 * This program is free software; you can redistribute it and/or modify\r
8 * it under the terms of the GNU General Public License as published by\r
9 * the Free Software Foundation; either version 2 of the License, or\r
10 * (at your option) any later version.\r
11 *\r
12 * This program is distributed in the hope that it will be useful,\r
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
15 * GNU General Public License for more details.\r
16 *\r
17 * You should have received a copy of the GNU General Public License\r
18 * along with this program; if not, write to the Free Software\r
386f5371 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\r
d97315ac 20 */\r
21\r
386f5371 22#ifndef _INES_H_\r
23#define _INES_H_\r
24#include <stdlib.h>\r
25#include <string.h>\r
d97315ac 26#include "cart.h"\r
27#ifdef INESPRIV\r
28\r
29void iNESStateRestore(int version);\r
30extern uint32 iNESGameCRC32;\r
31\r
d97315ac 32extern uint32 VROM_size;\r
33extern uint32 ROM_size;\r
34\r
35extern void (*MapStateRestore)(int version);\r
36extern void (*MapClose)(void);\r
37extern void (*MapperReset)(void);\r
38\r
39/* This order is necessary */\r
40#define WRAM (GameMemBlock)\r
41#define sizeofWRAM 8192\r
42\r
43#define MapperExRAM (GameMemBlock+sizeofWRAM)\r
44#define sizeofMapperExRAM 32768\r
45/* for the MMC5 code to work properly. It might be fixed later... */\r
46\r
47#define CHRRAM (GameMemBlock+sizeofWRAM+sizeofMapperExRAM)\r
48#define sizeofCHRRAM 8192\r
49\r
50#define ExtraNTARAM (GameMemBlock+sizeofWRAM+sizeofMapperExRAM+sizeofCHRRAM)\r
51#define sizeofExtraNTARAM 2048\r
52\r
53#define PRGBankList (ExtraNTARAM+sizeofExtraNTARAM)\r
54\r
55#define mapbyte1 (PRGBankList+4)\r
56#define mapbyte2 (mapbyte1+8)\r
57#define mapbyte3 (mapbyte2+8)\r
58#define mapbyte4 (mapbyte3+8)\r
59extern uint16 iNESCHRBankList[8];\r
60extern int32 iNESIRQLatch,iNESIRQCount;\r
61extern uint8 iNESMirroring;\r
62extern uint8 iNESIRQa;\r
63\r
64#define IRQa iNESIRQa\r
65#define Mirroring iNESMirroring\r
66#define IRQCount iNESIRQCount\r
67#define IRQLatch iNESIRQLatch\r
68#define CHRBankList iNESCHRBankList\r
69#else\r
70#endif\r
71\r
386f5371 72#if 0\r
73struct TMasterRomInfo\r
74{\r
75 uint64 md5lower;\r
76 const char* params;\r
77};\r
78\r
79class TMasterRomInfoParams : public std::map<std::string,std::string> \r
80{\r
81public:\r
82 bool ContainsKey(const std::string& key) { return find(key) != end(); }\r
83};\r
84#endif\r
85\r
86//mbg merge 6/29/06\r
87extern uint8 *ROM;\r
88extern uint8 *VROM;\r
89extern uint32 VROM_size;\r
90extern uint32 ROM_size;\r
91extern int iNesSave(); //bbit Edited: line added\r
92extern int iNesSaveAs(char* name);\r
93extern char LoadedRomFName[2048]; //bbit Edited: line added\r
94//extern const TMasterRomInfo* MasterRomInfo;\r
95//extern TMasterRomInfoParams MasterRomInfoParams;\r
96\r
97//mbg merge 7/19/06 changed to c++ decl format\r
98struct iNES_HEADER {\r
e2d0dd92 99 char ID[4]; /*NES^Z*/\r
100 uint8 ROM_size;\r
101 uint8 VROM_size;\r
102 uint8 ROM_type;\r
103 uint8 ROM_type2;\r
104 uint8 reserve[8];\r
386f5371 105};\r
106\r
107extern struct iNES_HEADER head; //for mappers usage\r
d97315ac 108\r
386f5371 109void VRAM_BANK1(uint32 A, uint8 V);\r
110void VRAM_BANK4(uint32 A,uint32 V);\r
d97315ac 111\r
386f5371 112void VROM_BANK1(uint32 A,uint32 V);\r
113void VROM_BANK2(uint32 A,uint32 V);\r
114void VROM_BANK4(uint32 A, uint32 V);\r
115void VROM_BANK8(uint32 V);\r
116void ROM_BANK8(uint32 A, uint32 V);\r
117void ROM_BANK16(uint32 A, uint32 V);\r
118void ROM_BANK32(uint32 V);\r
d97315ac 119\r
120extern uint8 vmask;\r
121extern uint32 vmask1;\r
122extern uint32 vmask2;\r
123extern uint32 vmask4;\r
124extern uint32 pmask8;\r
125extern uint8 pmask16;\r
126extern uint8 pmask32;\r
127\r
386f5371 128void onemir(uint8 V);\r
129void MIRROR_SET2(uint8 V);\r
130void MIRROR_SET(uint8 V);\r
d97315ac 131\r
132void Mapper0_init(void);\r
133void Mapper1_init(void);\r
134//void Mapper2_init(void);\r
135//void Mapper3_init(void);\r
136void Mapper6_init(void);\r
e2d0dd92 137//void Mapper7_init(void);\r
43725da7 138//void Mapper8_init(void);\r
d97315ac 139void Mapper9_init(void);\r
140void Mapper10_init(void);\r
e2d0dd92 141//void Mapper11_init(void);\r
d97315ac 142void Mapper12_init(void);\r
143//void Mapper13_init(void);\r
144void Mapper14_init(void);\r
386f5371 145//void Mapper15_init(void);\r
146//void Mapper16_init(void);\r
43725da7 147//void Mapper17_init(void);\r
148//void Mapper18_init(void);\r
d97315ac 149void Mapper19_init(void);\r
150void Mapper20_init(void);\r
151void Mapper21_init(void);\r
152void Mapper22_init(void);\r
386f5371 153//void Mapper23_init(void);\r
d97315ac 154void Mapper24_init(void);\r
155void Mapper25_init(void);\r
156void Mapper26_init(void);\r
157void Mapper27_init(void);\r
158void Mapper28_init(void);\r
159void Mapper29_init(void);\r
160void Mapper30_init(void);\r
161void Mapper31_init(void);\r
162void Mapper32_init(void);\r
163void Mapper33_init(void);\r
43725da7 164//void Mapper34_init(void);\r
d97315ac 165void Mapper35_init(void);\r
166void Mapper36_init(void);\r
e2d0dd92 167//void Mapper37_init(void);\r
386f5371 168//void Mapper38_init(void);\r
169//void Mapper39_init(void);\r
d97315ac 170void Mapper40_init(void);\r
171void Mapper41_init(void);\r
172void Mapper42_init(void);\r
386f5371 173//void Mapper43_init(void);\r
d97315ac 174void Mapper44_init(void);\r
175void Mapper45_init(void);\r
176void Mapper46_init(void);\r
177void Mapper47_init(void);\r
178void Mapper48_init(void);\r
179void Mapper49_init(void);\r
180void Mapper50_init(void);\r
181void Mapper51_init(void);\r
182void Mapper53_init(void);\r
183void Mapper54_init(void);\r
184void Mapper55_init(void);\r
185void Mapper56_init(void);\r
d97315ac 186void Mapper59_init(void);\r
187void Mapper60_init(void);\r
188void Mapper61_init(void);\r
189void Mapper62_init(void);\r
190void Mapper63_init(void);\r
191void Mapper64_init(void);\r
192void Mapper65_init(void);\r
e2d0dd92 193//void Mapper66_init(void);\r
d97315ac 194void Mapper67_init(void);\r
386f5371 195//void Mapper68_init(void);\r
d97315ac 196void Mapper69_init(void);\r
e2d0dd92 197//void Mapper70_init(void);\r
d97315ac 198void Mapper71_init(void);\r
199void Mapper72_init(void);\r
200void Mapper73_init(void);\r
201void Mapper74_init(void);\r
202void Mapper75_init(void);\r
203void Mapper76_init(void);\r
204void Mapper77_init(void);\r
e2d0dd92 205//void Mapper78_init(void);\r
d97315ac 206void Mapper79_init(void);\r
207void Mapper80_init(void);\r
208void Mapper81_init(void);\r
43725da7 209//void Mapper82_init(void);\r
d97315ac 210void Mapper83_init(void);\r
211void Mapper84_init(void);\r
212void Mapper85_init(void);\r
43725da7 213//void Mapper86_init(void);\r
e2d0dd92 214//void Mapper87_init(void);\r
d97315ac 215void Mapper88_init(void);\r
43725da7 216//void Mapper89_init(void);\r
217//void Mapper91_init(void);\r
218//void Mapper92_init(void);\r
e2d0dd92 219//void Mapper93_init(void);\r
220//void Mapper94_init(void);\r
43725da7 221//void Mapper96_init(void);\r
222//void Mapper97_init(void);\r
d97315ac 223void Mapper98_init(void);\r
43725da7 224//void Mapper99_init(void);\r
d97315ac 225void Mapper100_init(void);\r
386f5371 226//void Mapper101_init(void);\r
227//void Mapper103_init(void);\r
d97315ac 228void Mapper104_init(void);\r
386f5371 229//void Mapper106_init(void);\r
e2d0dd92 230//void Mapper107_init(void);\r
386f5371 231//void Mapper108_init(void);\r
d97315ac 232void Mapper109_init(void);\r
233void Mapper110_init(void);\r
43725da7 234//void Mapper111_init(void);\r
386f5371 235//void Mapper113_init(void);\r
d97315ac 236void Mapper115_init(void);\r
43725da7 237//void Mapper116_init(void);\r
e2d0dd92 238//void Mapper117_init(void);\r
386f5371 239//void Mapper120_init(void);\r
240//void Mapper121_init(void);\r
d97315ac 241void Mapper122_init(void);\r
242void Mapper123_init(void);\r
243void Mapper124_init(void);\r
244void Mapper126_init(void);\r
245void Mapper127_init(void);\r
246void Mapper128_init(void);\r
247void Mapper129_init(void);\r
248void Mapper130_init(void);\r
249void Mapper131_init(void);\r
250void Mapper132_init(void);\r
386f5371 251//void Mapper134_init(void);\r
d97315ac 252void Mapper135_init(void);\r
253void Mapper136_init(void);\r
254void Mapper137_init(void);\r
d97315ac 255void Mapper139_init(void);\r
e2d0dd92 256//void Mapper140_init(void);\r
d97315ac 257void Mapper141_init(void);\r
386f5371 258//void Mapper142_init(void);\r
d97315ac 259void Mapper143_init(void);\r
e2d0dd92 260//void Mapper144_init(void);\r
d97315ac 261void Mapper150_init(void);\r
43725da7 262//void Mapper151_init(void);\r
e2d0dd92 263//void Mapper152_init(void);\r
386f5371 264//void Mapper153_init(void);\r
d97315ac 265void Mapper154_init(void);\r
43725da7 266//void Mapper156_init(void);\r
267//void Mapper157_init(void);\r
386f5371 268//void Mapper158_init(void);\r
43725da7 269//void Mapper159_init(void);\r
d97315ac 270void Mapper160_init(void);\r
271void Mapper161_init(void);\r
272void Mapper162_init(void);\r
273void Mapper166_init(void);\r
274void Mapper167_init(void);\r
275void Mapper168_init(void);\r
386f5371 276//void Mapper169_init(void);\r
d97315ac 277void Mapper170_init(void);\r
386f5371 278//void Mapper171_init(void);\r
279//void Mapper172_init(void);\r
280//void Mapper173_init(void);\r
d97315ac 281void Mapper174_init(void);\r
282void Mapper175_init(void);\r
283void Mapper176_init(void);\r
386f5371 284//void Mapper177_init(void);\r
285//void Mapper178_init(void);\r
286//void Mapper179_init(void);\r
43725da7 287void Mapper180_init(void);\r
e2d0dd92 288//void Mapper181_init(void);\r
386f5371 289//void Mapper184_init(void);\r
e2d0dd92 290//void Mapper185_init(void);\r
291//void Mapper189_init(void);\r
292//void Mapper192_init(void);\r
43725da7 293//void Mapper193_init(void);\r
e2d0dd92 294//void Mapper194_init(void);\r
386f5371 295//void Mapper195_init(void);\r
296//void Mapper196_init(void);\r
297//void Mapper197_init(void);\r
e2d0dd92 298//void Mapper198_init(void);\r
d97315ac 299void Mapper199_init(void);\r
386f5371 300//void Mapper200_init(void);\r
d97315ac 301void Mapper201_init(void);\r
302void Mapper202_init(void);\r
303void Mapper203_init(void);\r
304void Mapper204_init(void);\r
305void Mapper207_init(void);\r
e2d0dd92 306//void Mapper211_init(void);\r
d97315ac 307void Mapper212_init(void);\r
308void Mapper213_init(void);\r
309void Mapper214_init(void);\r
e2d0dd92 310//void Mapper218_init(void);\r
d97315ac 311void Mapper219_init(void);\r
e2d0dd92 312//void Mapper220_init(void);\r
d97315ac 313void Mapper221_init(void);\r
e2d0dd92 314//void Mapper222_init(void);\r
d97315ac 315void Mapper223_init(void);\r
316void Mapper224_init(void);\r
43725da7 317//void Mapper225_init(void);\r
386f5371 318//void Mapper226_init(void);\r
d97315ac 319void Mapper227_init(void);\r
320void Mapper228_init(void);\r
321void Mapper229_init(void);\r
322void Mapper230_init(void);\r
323void Mapper231_init(void);\r
324void Mapper232_init(void);\r
43725da7 325//void Mapper233_init(void);\r
d97315ac 326void Mapper234_init(void);\r
e2d0dd92 327//void Mapper235_init(void);\r
d97315ac 328void Mapper236_init(void);\r
329void Mapper237_init(void);\r
330void Mapper238_init(void);\r
331void Mapper239_init(void);\r
332void Mapper240_init(void);\r
333void Mapper241_init(void);\r
334void Mapper242_init(void);\r
335void Mapper244_init(void);\r
336void Mapper245_init(void);\r
337void Mapper246_init(void);\r
338void Mapper247_init(void);\r
339void Mapper249_init(void);\r
340void Mapper251_init(void);\r
341void Mapper252_init(void);\r
386f5371 342//void Mapper253_init(void);\r
d97315ac 343void Mapper255_init(void);\r
344\r
345void NSFVRC6_Init(void);\r
346void NSFMMC5_Init(void);\r
347void NSFAY_Init(void);\r
348void NSFN106_Init(void);\r
349void NSFVRC7_Init(void);\r
350void Mapper19_ESI(void);\r
351\r
352void Mapper1_Init(CartInfo *);\r
353void Mapper4_Init(CartInfo *);\r
354void Mapper5_Init(CartInfo *);\r
43725da7 355void Mapper8_Init(CartInfo *);\r
e2d0dd92 356void Mapper11_Init(CartInfo *);\r
d97315ac 357void Mapper12_Init(CartInfo *);\r
386f5371 358void Mapper15_Init(CartInfo *);\r
359void Mapper16_Init(CartInfo *);\r
43725da7 360void Mapper17_Init(CartInfo *);\r
361void Mapper18_Init(CartInfo *);\r
d97315ac 362void Mapper19_Init(CartInfo *);\r
386f5371 363void Mapper23_Init(CartInfo *);\r
43725da7 364void Mapper34_Init(CartInfo *);\r
386f5371 365void Mapper36_Init(CartInfo *);\r
e2d0dd92 366void Mapper37_Init(CartInfo *);\r
386f5371 367void Mapper38_Init(CartInfo *);\r
368void Mapper43_Init(CartInfo *);\r
d97315ac 369void Mapper44_Init(CartInfo *);\r
370void Mapper45_Init(CartInfo *);\r
371void Mapper47_Init(CartInfo *);\r
372void Mapper49_Init(CartInfo *);\r
373void Mapper52_Init(CartInfo *);\r
e2d0dd92 374void Mapper57_Init(CartInfo *);\r
386f5371 375//void Mapper58_Init(CartInfo *);\r
376void Mapper68_Init(CartInfo *);\r
e2d0dd92 377void Mapper70_Init(CartInfo *);\r
d97315ac 378void Mapper74_Init(CartInfo *);\r
e2d0dd92 379void Mapper78_Init(CartInfo *);\r
43725da7 380void Mapper82_Init(CartInfo *);\r
381void Mapper83_Init(CartInfo *);\r
382void Mapper86_Init(CartInfo *);\r
e2d0dd92 383void Mapper87_Init(CartInfo *);\r
384void Mapper88_Init(CartInfo *);\r
43725da7 385void Mapper89_Init(CartInfo *);\r
d97315ac 386void Mapper90_Init(CartInfo *);\r
43725da7 387void Mapper91_Init(CartInfo *);\r
388void Mapper92_Init(CartInfo *);\r
e2d0dd92 389void Mapper93_Init(CartInfo *);\r
390void Mapper94_Init(CartInfo *);\r
d97315ac 391void Mapper95_Init(CartInfo *);\r
43725da7 392void Mapper96_Init(CartInfo *);\r
393void Mapper97_Init(CartInfo *);\r
394void Mapper99_Init(CartInfo *);\r
386f5371 395void Mapper101_Init(CartInfo *);\r
396void Mapper103_Init(CartInfo *);\r
d97315ac 397void Mapper105_Init(CartInfo *);\r
386f5371 398void Mapper106_Init(CartInfo *);\r
e2d0dd92 399void Mapper107_Init(CartInfo *);\r
386f5371 400void Mapper108_Init(CartInfo *);\r
d97315ac 401void Mapper112_Init(CartInfo *);\r
386f5371 402void Mapper113_Init(CartInfo *);\r
d97315ac 403void Mapper114_Init(CartInfo *);\r
404void Mapper115_Init(CartInfo *);\r
e2d0dd92 405void Mapper117_Init(CartInfo *);\r
d97315ac 406void Mapper119_Init(CartInfo *);\r
386f5371 407void Mapper120_Init(CartInfo *);\r
408void Mapper121_Init(CartInfo *);\r
d97315ac 409void Mapper125_Init(CartInfo *);\r
386f5371 410void Mapper134_Init(CartInfo *);\r
e2d0dd92 411void Mapper140_Init(CartInfo *);\r
412void Mapper144_Init(CartInfo *);\r
43725da7 413void Mapper151_Init(CartInfo *);\r
e2d0dd92 414void Mapper152_Init(CartInfo *);\r
386f5371 415void Mapper153_Init(CartInfo *);\r
e2d0dd92 416void Mapper154_Init(CartInfo *);\r
d97315ac 417void Mapper155_Init(CartInfo *);\r
386f5371 418void Mapper156_Init(CartInfo *);\r
43725da7 419void Mapper157_Init(CartInfo *);\r
d97315ac 420void Mapper163_Init(CartInfo *);\r
421void Mapper164_Init(CartInfo *);\r
422void Mapper165_Init(CartInfo *);\r
43725da7 423void Mapper168_Init(CartInfo *);\r
424void Mapper170_Init(CartInfo *);\r
386f5371 425void Mapper171_Init(CartInfo *);\r
426void Mapper172_Init(CartInfo *);\r
427void Mapper173_Init(CartInfo *);\r
428void Mapper175_Init(CartInfo *);\r
386f5371 429void Mapper177_Init(CartInfo *);\r
430void Mapper178_Init(CartInfo *);\r
431void Mapper180_Init(CartInfo *);\r
e2d0dd92 432void Mapper181_Init(CartInfo *);\r
d97315ac 433void Mapper183_Init(CartInfo *);\r
386f5371 434void Mapper184_Init(CartInfo *);\r
e2d0dd92 435void Mapper185_Init(CartInfo *);\r
d97315ac 436void Mapper186_Init(CartInfo *);\r
437void Mapper187_Init(CartInfo *);\r
438void Mapper188_Init(CartInfo *);\r
e2d0dd92 439void Mapper189_Init(CartInfo *);\r
d97315ac 440void Mapper191_Init(CartInfo *);\r
e2d0dd92 441void Mapper192_Init(CartInfo *);\r
43725da7 442void Mapper193_Init(CartInfo *);\r
e2d0dd92 443void Mapper194_Init(CartInfo *);\r
386f5371 444void Mapper195_Init(CartInfo *);\r
445void Mapper196_Init(CartInfo *);\r
446void Mapper197_Init(CartInfo *);\r
e2d0dd92 447void Mapper198_Init(CartInfo *);\r
448void Mapper199_Init(CartInfo *);\r
386f5371 449void Mapper200_Init(CartInfo *);\r
d97315ac 450void Mapper205_Init(CartInfo *);\r
451void Mapper208_Init(CartInfo *);\r
452void Mapper209_Init(CartInfo *);\r
453void Mapper210_Init(CartInfo *);\r
e2d0dd92 454void Mapper211_Init(CartInfo *);\r
d97315ac 455void Mapper216_Init(CartInfo *);\r
e2d0dd92 456void Mapper220_Init(CartInfo *);\r
457void Mapper222_Init(CartInfo *);\r
43725da7 458void Mapper225_Init(CartInfo *);\r
386f5371 459void Mapper226_Init(CartInfo *);\r
e2d0dd92 460void Mapper235_Init(CartInfo *);\r
461void Mapper236_Init(CartInfo *);\r
462void Mapper237_Init(CartInfo *);\r
386f5371 463void Mapper240_Init(CartInfo *);\r
d97315ac 464void Mapper245_Init(CartInfo *);\r
465void Mapper249_Init(CartInfo *);\r
466void Mapper250_Init(CartInfo *);\r
386f5371 467void Mapper253_Init(CartInfo *);\r
d97315ac 468void Mapper254_Init(CartInfo *);\r
386f5371 469\r
470#endif\r