Browse code

Update snes9x code from 1.53 to 1.6.0.

Notable differences from upstream:
* Did not use the same #include setup for the new byuu apu and instead chose to do things more traditionally, as the latter is also much easier to deal with in Visual Studio than just including .cpp files into other .cpp files...
* MSU1 support not included (I see no need for this in a plugin meant to be used for original SNES music).
* The dynamic rate control on the APU not included (I also see no need for it in this plugin).
* The extra resamplers I added in were removed as the original hermite resampler was folded into a single non-inhertiable resampler.
* Bits of cleanup.

Naram Qashat authored on 2021/04/19 21:20:36
Showing 1 changed files
... ...
@@ -1,189 +1,18 @@
1
-/***********************************************************************************
1
+/*****************************************************************************\
2 2
   Snes9x - Portable Super Nintendo Entertainment System (TM) emulator.
3
-
4
-  (c) Copyright 1996 - 2002  Gary Henderson (gary.henderson@ntlworld.com),
5
-                             Jerremy Koot (jkoot@snes9x.com)
6
-
7
-  (c) Copyright 2002 - 2004  Matthew Kendora
8
-
9
-  (c) Copyright 2002 - 2005  Peter Bortas (peter@bortas.org)
10
-
11
-  (c) Copyright 2004 - 2005  Joel Yliluoma (http://iki.fi/bisqwit/)
12
-
13
-  (c) Copyright 2001 - 2006  John Weidman (jweidman@slip.net)
14
-
15
-  (c) Copyright 2002 - 2006  funkyass (funkyass@spam.shaw.ca),
16
-                             Kris Bleakley (codeviolation@hotmail.com)
17
-
18
-  (c) Copyright 2002 - 2010  Brad Jorsch (anomie@users.sourceforge.net),
19
-                             Nach (n-a-c-h@users.sourceforge.net),
20
-
21
-  (c) Copyright 2002 - 2011  zones (kasumitokoduck@yahoo.com)
22
-
23
-  (c) Copyright 2006 - 2007  nitsuja
24
-
25
-  (c) Copyright 2009 - 2011  BearOso,
26
-                             OV2
27
-
28
-
29
-  BS-X C emulator code
30
-  (c) Copyright 2005 - 2006  Dreamer Nom,
31
-                             zones
32
-
33
-  C4 x86 assembler and some C emulation code
34
-  (c) Copyright 2000 - 2003  _Demo_ (_demo_@zsnes.com),
35
-                             Nach,
36
-                             zsKnight (zsknight@zsnes.com)
37
-
38
-  C4 C++ code
39
-  (c) Copyright 2003 - 2006  Brad Jorsch,
40
-                             Nach
41
-
42
-  DSP-1 emulator code
43
-  (c) Copyright 1998 - 2006  _Demo_,
44
-                             Andreas Naive (andreasnaive@gmail.com),
45
-                             Gary Henderson,
46
-                             Ivar (ivar@snes9x.com),
47
-                             John Weidman,
48
-                             Kris Bleakley,
49
-                             Matthew Kendora,
50
-                             Nach,
51
-                             neviksti (neviksti@hotmail.com)
52
-
53
-  DSP-2 emulator code
54
-  (c) Copyright 2003         John Weidman,
55
-                             Kris Bleakley,
56
-                             Lord Nightmare (lord_nightmare@users.sourceforge.net),
57
-                             Matthew Kendora,
58
-                             neviksti
59
-
60
-  DSP-3 emulator code
61
-  (c) Copyright 2003 - 2006  John Weidman,
62
-                             Kris Bleakley,
63
-                             Lancer,
64
-                             z80 gaiden
65
-
66
-  DSP-4 emulator code
67
-  (c) Copyright 2004 - 2006  Dreamer Nom,
68
-                             John Weidman,
69
-                             Kris Bleakley,
70
-                             Nach,
71
-                             z80 gaiden
72
-
73
-  OBC1 emulator code
74
-  (c) Copyright 2001 - 2004  zsKnight,
75
-                             pagefault (pagefault@zsnes.com),
76
-                             Kris Bleakley
77
-                             Ported from x86 assembler to C by sanmaiwashi
78
-
79
-  SPC7110 and RTC C++ emulator code used in 1.39-1.51
80
-  (c) Copyright 2002         Matthew Kendora with research by
81
-                             zsKnight,
82
-                             John Weidman,
83
-                             Dark Force
84
-
85
-  SPC7110 and RTC C++ emulator code used in 1.52+
86
-  (c) Copyright 2009         byuu,
87
-                             neviksti
88
-
89
-  S-DD1 C emulator code
90
-  (c) Copyright 2003         Brad Jorsch with research by
91
-                             Andreas Naive,
92
-                             John Weidman
93
-
94
-  S-RTC C emulator code
95
-  (c) Copyright 2001 - 2006  byuu,
96
-                             John Weidman
97
-
98
-  ST010 C++ emulator code
99
-  (c) Copyright 2003         Feather,
100
-                             John Weidman,
101
-                             Kris Bleakley,
102
-                             Matthew Kendora
103
-
104
-  Super FX x86 assembler emulator code
105
-  (c) Copyright 1998 - 2003  _Demo_,
106
-                             pagefault,
107
-                             zsKnight
108
-
109
-  Super FX C emulator code
110
-  (c) Copyright 1997 - 1999  Ivar,
111
-                             Gary Henderson,
112
-                             John Weidman
113
-
114
-  Sound emulator code used in 1.5-1.51
115
-  (c) Copyright 1998 - 2003  Brad Martin
116
-  (c) Copyright 1998 - 2006  Charles Bilyue'
117
-
118
-  Sound emulator code used in 1.52+
119
-  (c) Copyright 2004 - 2007  Shay Green (gblargg@gmail.com)
120
-
121
-  SH assembler code partly based on x86 assembler code
122
-  (c) Copyright 2002 - 2004  Marcus Comstedt (marcus@mc.pp.se)
123
-
124
-  2xSaI filter
125
-  (c) Copyright 1999 - 2001  Derek Liauw Kie Fa
126
-
127
-  HQ2x, HQ3x, HQ4x filters
128
-  (c) Copyright 2003         Maxim Stepin (maxim@hiend3d.com)
129
-
130
-  NTSC filter
131
-  (c) Copyright 2006 - 2007  Shay Green
132
-
133
-  GTK+ GUI code
134
-  (c) Copyright 2004 - 2011  BearOso
135
-
136
-  Win32 GUI code
137
-  (c) Copyright 2003 - 2006  blip,
138
-                             funkyass,
139
-                             Matthew Kendora,
140
-                             Nach,
141
-                             nitsuja
142
-  (c) Copyright 2009 - 2011  OV2
143
-
144
-  Mac OS GUI code
145
-  (c) Copyright 1998 - 2001  John Stiles
146
-  (c) Copyright 2001 - 2011  zones
147
-
148
-
149
-  Specific ports contains the works of other authors. See headers in
150
-  individual files.
151
-
152
-
153
-  Snes9x homepage: http://www.snes9x.com/
154
-
155
-  Permission to use, copy, modify and/or distribute Snes9x in both binary
156
-  and source form, for non-commercial purposes, is hereby granted without
157
-  fee, providing that this license information and copyright notice appear
158
-  with all copies and any derived work.
159
-
160
-  This software is provided 'as-is', without any express or implied
161
-  warranty. In no event shall the authors be held liable for any damages
162
-  arising from the use of this software or it's derivatives.
163
-
164
-  Snes9x is freeware for PERSONAL USE only. Commercial users should
165
-  seek permission of the copyright holders first. Commercial use includes,
166
-  but is not limited to, charging money for Snes9x or software derived from
167
-  Snes9x, including Snes9x or derivatives in commercial game bundles, and/or
168
-  using Snes9x as a promotion for your commercial product.
169
-
170
-  The copyright holders request that bug fixes and improvements to the code
171
-  should be forwarded to them so everyone can benefit from the modifications
172
-  in future versions.
173
-
174
-  Super NES and Super Nintendo Entertainment System are trademarks of
175
-  Nintendo Co., Limited and its subsidiary companies.
176
- ***********************************************************************************/
3
+                This file is licensed under the Snes9x License.
4
+   For further information, consult the LICENSE file in the root directory.
5
+\*****************************************************************************/
177 6
 
178 7
 #pragma once
179 8
 
180 9
 #include <memory>
181 10
 #include <cstdint>
182 11
 
183
-const int32_t MEMMAP_BLOCK_SIZE = 0x1000;
184
-const size_t MEMMAP_NUM_BLOCKS = 0x1000000 / MEMMAP_BLOCK_SIZE;
185
-const uint32_t MEMMAP_SHIFT = 12;
186
-const uint32_t MEMMAP_MASK = MEMMAP_BLOCK_SIZE - 1;
12
+inline constexpr int32_t MEMMAP_BLOCK_SIZE = 0x1000;
13
+inline constexpr size_t MEMMAP_NUM_BLOCKS = 0x1000000 / MEMMAP_BLOCK_SIZE;
14
+inline constexpr uint32_t MEMMAP_SHIFT = 12;
15
+inline constexpr uint32_t MEMMAP_MASK = MEMMAP_BLOCK_SIZE - 1;
187 16
 
188 17
 struct CMemory
189 18
 {
... ...
@@ -245,6 +74,7 @@ struct CMemory
245 74
 
246 75
 	int ScoreHiROM(bool, int32_t romoff = 0);
247 76
 	int ScoreLoROM(bool, int32_t romoff = 0);
77
+	int First512BytesCountZeroes() const;
248 78
 	bool LoadROMSNSF(const uint8_t *, int32_t, const uint8_t *, int32_t);
249 79
 
250 80
 	char *Safe(const char *);
Browse code

Use #pragma once instead of include guards.

Naram Qashat authored on 2014/09/08 14:47:36
Showing 1 changed files
... ...
@@ -175,8 +175,7 @@
175 175
   Nintendo Co., Limited and its subsidiary companies.
176 176
  ***********************************************************************************/
177 177
 
178
-#ifndef _MEMMAP_H_
179
-#define _MEMMAP_H_
178
+#pragma once
180 179
 
181 180
 #include <memory>
182 181
 #include <cstdint>
... ...
@@ -296,5 +295,3 @@ enum s9xwriteorder_t
296 295
 };
297 296
 
298 297
 #include "getset.h"
299
-
300
-#endif
Browse code

[SNSF] Massive code cleanup, as well as removing as much unused code/variables as possible.

Naram Qashat authored on 2013/05/23 06:02:16
Showing 1 changed files
... ...
@@ -175,192 +175,112 @@
175 175
   Nintendo Co., Limited and its subsidiary companies.
176 176
  ***********************************************************************************/
177 177
 
178
-
179 178
 #ifndef _MEMMAP_H_
180 179
 #define _MEMMAP_H_
181 180
 
182
-#define MEMMAP_BLOCK_SIZE	(0x1000)
183
-#define MEMMAP_NUM_BLOCKS	(0x1000000 / MEMMAP_BLOCK_SIZE)
184
-#define MEMMAP_SHIFT		(12)
185
-#define MEMMAP_MASK			(MEMMAP_BLOCK_SIZE - 1)
181
+#include <memory>
182
+#include <cstdint>
183
+
184
+const int32_t MEMMAP_BLOCK_SIZE = 0x1000;
185
+const size_t MEMMAP_NUM_BLOCKS = 0x1000000 / MEMMAP_BLOCK_SIZE;
186
+const uint32_t MEMMAP_SHIFT = 12;
187
+const uint32_t MEMMAP_MASK = MEMMAP_BLOCK_SIZE - 1;
186 188
 
187 189
 struct CMemory
188 190
 {
189
-	enum
190
-	{ MAX_ROM_SIZE = 0x800000 };
191
-
192
-	enum file_formats
193
-	{ FILE_ZIP, FILE_JMA, FILE_DEFAULT };
191
+	enum { MAX_ROM_SIZE = 0x800000 };
194 192
 
195 193
 	enum
196
-	{ NOPE, YEAH, BIGFIRST, SMALLFIRST };
194
+	{
195
+		NOPE,
196
+		YEAH,
197
+		BIGFIRST,
198
+		SMALLFIRST
199
+	};
197 200
 
198 201
 	enum
199
-	{ MAP_TYPE_I_O, MAP_TYPE_ROM, MAP_TYPE_RAM };
202
+	{
203
+		MAP_TYPE_I_O,
204
+		MAP_TYPE_RAM
205
+	};
200 206
 
201 207
 	enum
202 208
 	{
203 209
 		MAP_CPU,
204 210
 		MAP_PPU,
205 211
 		MAP_LOROM_SRAM,
206
-		MAP_LOROM_SRAM_B,
207 212
 		MAP_HIROM_SRAM,
208
-		MAP_DSP,
209 213
 		MAP_SA1RAM,
210
-		MAP_BWRAM,
211
-		MAP_BWRAM_BITMAP,
212
-		MAP_BWRAM_BITMAP2,
213
-		MAP_SPC7110_ROM,
214
-		MAP_SPC7110_DRAM,
215 214
 		MAP_RONLY_SRAM,
216
-		MAP_C4,
217
-		MAP_OBC_RAM,
218
-		MAP_SETA_DSP,
219
-		MAP_SETA_RISC,
220
-		MAP_BSX,
221 215
 		MAP_NONE,
222 216
 		MAP_LAST
223 217
 	};
224 218
 
225
-	uint8_t	NSRTHeader[32];
226
-	int32_t	HeaderCount;
227
-
228
-	uint8_t	*RAM;
229
-	uint8_t	*ROM;
230
-	uint8_t	*SRAM;
231
-	uint8_t	*VRAM;
232
-	uint8_t	*FillRAM;
233
-	uint8_t	*BWRAM;
234
-	uint8_t	*C4RAM;
235
-	uint8_t	*OBC1RAM;
236
-	uint8_t	*BSRAM;
237
-	uint8_t	*BIOSROM;
238
-
239
-	uint8_t	*Map[MEMMAP_NUM_BLOCKS];
240
-	uint8_t	*WriteMap[MEMMAP_NUM_BLOCKS];
241
-	uint8_t	BlockIsRAM[MEMMAP_NUM_BLOCKS];
242
-	uint8_t	BlockIsROM[MEMMAP_NUM_BLOCKS];
243
-	uint8_t	ExtendedFormat;
244
-
245
-	char	ROMFilename[PATH_MAX + 1];
246
-	char	ROMName[ROM_NAME_LEN];
247
-	char	RawROMName[ROM_NAME_LEN];
248
-	char	ROMId[5];
249
-	int32_t	CompanyId;
250
-	uint8_t	ROMRegion;
251
-	uint8_t	ROMSpeed;
252
-	uint8_t	ROMType;
253
-	uint8_t	ROMSize;
254
-	uint32_t	ROMChecksum;
255
-	uint32_t	ROMComplementChecksum;
256
-	uint32_t	ROMCRC32;
257
-	int32_t	ROMFramesPerSecond;
258
-
259
-	bool	HiROM;
260
-	bool	LoROM;
261
-	uint8_t	SRAMSize;
262
-	uint32_t	SRAMMask;
263
-	uint32_t	CalculatedSize;
264
-	uint32_t	CalculatedChecksum;
265
-
266
-	// ports can assign this to perform some custom action upon loading a ROM (such as adjusting controls)
267
-	void	(*PostRomInitFunc)();
268
-
269
-	bool	Init();
270
-	void	Deinit();
271
-
272
-	int		ScoreHiROM (bool, int32_t romoff = 0);
273
-	int		ScoreLoROM (bool, int32_t romoff = 0);
274
-	//uint32_t	HeaderRemove (uint32_t, int32_t &, uint8_t *);
275
-	//uint32_t	FileLoader (uint8_t *, const char *, int32_t);
276
-	/*bool	LoadROM (const char *);
277
-	bool	LoadMultiCart (const char *, const char *);
278
-	bool	LoadSufamiTurbo (const char *, const char *);
279
-	bool	LoadSameGame (const char *, const char *);
280
-	bool	LoadSRAM (const char *);
281
-	bool	SaveSRAM (const char *);
282
-	void	ClearSRAM (bool onlyNonSavedSRAM = 0);
283
-	bool	LoadSRTC();
284
-	bool	SaveSRTC();*/
285
-	bool LoadROMSNSF(const unsigned char *, int32_t, const unsigned char *, int32_t);
286
-
287
-	char *	Safe (const char *);
288
-	char *	SafeANK (const char *);
289
-	void	ParseSNESHeader (uint8_t *);
290
-	void	InitROM();
291
-
292
-	uint32_t	map_mirror (uint32_t, uint32_t);
293
-	void	map_lorom (uint32_t, uint32_t, uint32_t, uint32_t, uint32_t);
294
-	void	map_hirom (uint32_t, uint32_t, uint32_t, uint32_t, uint32_t);
295
-	void	map_lorom_offset (uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t);
296
-	void	map_hirom_offset (uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t);
297
-	void	map_space (uint32_t, uint32_t, uint32_t, uint32_t, uint8_t *);
298
-	void	map_index (uint32_t, uint32_t, uint32_t, uint32_t, int, int);
299
-	void	map_System();
300
-	void	map_WRAM();
301
-	void	map_LoROMSRAM();
302
-	void	map_HiROMSRAM();
303
-	//void	map_DSP();
304
-	//void	map_C4();
305
-	//void	map_OBC1();
306
-	//void	map_SetaRISC();
307
-	//void	map_SetaDSP();
308
-	void	map_WriteProtectROM();
309
-	void	Map_Initialize();
310
-	void	Map_LoROMMap();
311
-	void	Map_NoMAD1LoROMMap();
312
-	void	Map_JumboLoROMMap();
313
-	void	Map_ROM24MBSLoROMMap();
314
-	void	Map_SRAM512KLoROMMap();
315
-	//void	Map_SufamiTurboLoROMMap();
316
-	//void	Map_SufamiTurboPseudoLoROMMap();
317
-	//void	Map_SuperFXLoROMMap();
318
-	//void	Map_SetaDSPLoROMMap();
319
-	void	Map_SDD1LoROMMap();
320
-	//void	Map_SA1LoROMMap();
321
-	void	Map_HiROMMap();
322
-	void	Map_ExtendedHiROMMap();
323
-	//void	Map_SameGameHiROMMap();
324
-	//void	Map_SPC7110HiROMMap();
325
-
326
-	uint16_t	checksum_calc_sum (uint8_t *, uint32_t);
327
-	uint16_t	checksum_mirror_sum (uint8_t *, uint32_t &, uint32_t mask = 0x800000);
328
-	void	Checksum_Calculate();
329
-
330
-	bool	match_na (const char *);
331
-	bool	match_nn (const char *);
332
-	//bool	match_nc (const char *);
333
-	bool	match_id (const char *);
334
-	void	ApplyROMFixes();
335
-	//void	CheckForAnyPatch (const char *, bool, int32_t &);
336
-
337
-	//void	MakeRomInfoText (char *);
338
-
339
-	//const char *	MapType();
340
-	//const char *	StaticRAMSize();
341
-	//const char *	Size();
342
-	//const char *	Revision();
343
-	//const char *	KartContents();
344
-	//const char *	Country();
345
-	//const char *	PublishingCompany();
346
-};
347
-
348
-struct SMulti
349
-{
350
-	int		cartType;
351
-	int32_t	cartSizeA, cartSizeB;
352
-	int32_t	sramSizeA, sramSizeB;
353
-	uint32_t	sramMaskA, sramMaskB;
354
-	uint32_t	cartOffsetA, cartOffsetB;
355
-	uint8_t	*sramA, *sramB;
356
-	char	fileNameA[PATH_MAX + 1], fileNameB[PATH_MAX + 1];
219
+	std::unique_ptr<uint8_t[]> RAM;
220
+	std::unique_ptr<uint8_t[]> RealROM;
221
+	uint8_t *ROM;
222
+	std::unique_ptr<uint8_t[]> SRAM;
223
+	std::unique_ptr<uint8_t[]> VRAM;
224
+	uint8_t *FillRAM;
225
+
226
+	uint8_t *Map[MEMMAP_NUM_BLOCKS];
227
+	uint8_t *WriteMap[MEMMAP_NUM_BLOCKS];
228
+	uint8_t BlockIsRAM[MEMMAP_NUM_BLOCKS];
229
+	uint8_t BlockIsROM[MEMMAP_NUM_BLOCKS];
230
+	uint8_t ExtendedFormat;
231
+
232
+	char ROMName[ROM_NAME_LEN];
233
+	char ROMId[5];
234
+	uint8_t ROMRegion;
235
+	uint8_t ROMSpeed;
236
+	uint8_t ROMType;
237
+
238
+	bool HiROM;
239
+	bool LoROM;
240
+	uint8_t SRAMSize;
241
+	uint32_t SRAMMask;
242
+	uint32_t CalculatedSize;
243
+
244
+	bool Init();
245
+	void Deinit();
246
+
247
+	int ScoreHiROM(bool, int32_t romoff = 0);
248
+	int ScoreLoROM(bool, int32_t romoff = 0);
249
+	bool LoadROMSNSF(const uint8_t *, int32_t, const uint8_t *, int32_t);
250
+
251
+	char *Safe(const char *);
252
+	void ParseSNESHeader(uint8_t *);
253
+	void InitROM();
254
+
255
+	uint32_t map_mirror(uint32_t, uint32_t);
256
+	void map_lorom(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t);
257
+	void map_hirom(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t);
258
+	void map_lorom_offset(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t);
259
+	void map_hirom_offset(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t);
260
+	void map_space(uint32_t, uint32_t, uint32_t, uint32_t, uint8_t *);
261
+	void map_index(uint32_t, uint32_t, uint32_t, uint32_t, int, int);
262
+	void map_System();
263
+	void map_WRAM();
264
+	void map_LoROMSRAM();
265
+	void map_HiROMSRAM();
266
+	void map_WriteProtectROM();
267
+	void Map_Initialize();
268
+	void Map_LoROMMap();
269
+	void Map_NoMAD1LoROMMap();
270
+	void Map_JumboLoROMMap();
271
+	void Map_ROM24MBSLoROMMap();
272
+	void Map_SRAM512KLoROMMap();
273
+	void Map_SDD1LoROMMap();
274
+	void Map_HiROMMap();
275
+	void Map_ExtendedHiROMMap();
276
+
277
+	bool match_na(const char *);
278
+	bool match_nn(const char *);
279
+	bool match_id(const char *);
280
+	void ApplyROMFixes();
357 281
 };
358 282
 
359
-extern CMemory	Memory;
360
-extern SMulti	Multi;
361
-
362
-void S9xAutoSaveSRAM();
363
-bool LoadZip(const char *, int32_t *, int32_t *, uint8_t *);
283
+extern CMemory Memory;
364 284
 
365 285
 enum s9xwrap_t
366 286
 {
Browse code

Import actual code.

Naram Qashat authored on 2013/03/26 02:41:19
Showing 1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,380 @@
1
+/***********************************************************************************
2
+  Snes9x - Portable Super Nintendo Entertainment System (TM) emulator.
3
+
4
+  (c) Copyright 1996 - 2002  Gary Henderson (gary.henderson@ntlworld.com),
5
+                             Jerremy Koot (jkoot@snes9x.com)
6
+
7
+  (c) Copyright 2002 - 2004  Matthew Kendora
8
+
9
+  (c) Copyright 2002 - 2005  Peter Bortas (peter@bortas.org)
10
+
11
+  (c) Copyright 2004 - 2005  Joel Yliluoma (http://iki.fi/bisqwit/)
12
+
13
+  (c) Copyright 2001 - 2006  John Weidman (jweidman@slip.net)
14
+
15
+  (c) Copyright 2002 - 2006  funkyass (funkyass@spam.shaw.ca),
16
+                             Kris Bleakley (codeviolation@hotmail.com)
17
+
18
+  (c) Copyright 2002 - 2010  Brad Jorsch (anomie@users.sourceforge.net),
19
+                             Nach (n-a-c-h@users.sourceforge.net),
20
+
21
+  (c) Copyright 2002 - 2011  zones (kasumitokoduck@yahoo.com)
22
+
23
+  (c) Copyright 2006 - 2007  nitsuja
24
+
25
+  (c) Copyright 2009 - 2011  BearOso,
26
+                             OV2
27
+
28
+
29
+  BS-X C emulator code
30
+  (c) Copyright 2005 - 2006  Dreamer Nom,
31
+                             zones
32
+
33
+  C4 x86 assembler and some C emulation code
34
+  (c) Copyright 2000 - 2003  _Demo_ (_demo_@zsnes.com),
35
+                             Nach,
36
+                             zsKnight (zsknight@zsnes.com)
37
+
38
+  C4 C++ code
39
+  (c) Copyright 2003 - 2006  Brad Jorsch,
40
+                             Nach
41
+
42
+  DSP-1 emulator code
43
+  (c) Copyright 1998 - 2006  _Demo_,
44
+                             Andreas Naive (andreasnaive@gmail.com),
45
+                             Gary Henderson,
46
+                             Ivar (ivar@snes9x.com),
47
+                             John Weidman,
48
+                             Kris Bleakley,
49
+                             Matthew Kendora,
50
+                             Nach,
51
+                             neviksti (neviksti@hotmail.com)
52
+
53
+  DSP-2 emulator code
54
+  (c) Copyright 2003         John Weidman,
55
+                             Kris Bleakley,
56
+                             Lord Nightmare (lord_nightmare@users.sourceforge.net),
57
+                             Matthew Kendora,
58
+                             neviksti
59
+
60
+  DSP-3 emulator code
61
+  (c) Copyright 2003 - 2006  John Weidman,
62
+                             Kris Bleakley,
63
+                             Lancer,
64
+                             z80 gaiden
65
+
66
+  DSP-4 emulator code
67
+  (c) Copyright 2004 - 2006  Dreamer Nom,
68
+                             John Weidman,
69
+                             Kris Bleakley,
70
+                             Nach,
71
+                             z80 gaiden
72
+
73
+  OBC1 emulator code
74
+  (c) Copyright 2001 - 2004  zsKnight,
75
+                             pagefault (pagefault@zsnes.com),
76
+                             Kris Bleakley
77
+                             Ported from x86 assembler to C by sanmaiwashi
78
+
79
+  SPC7110 and RTC C++ emulator code used in 1.39-1.51
80
+  (c) Copyright 2002         Matthew Kendora with research by
81
+                             zsKnight,
82
+                             John Weidman,
83
+                             Dark Force
84
+
85
+  SPC7110 and RTC C++ emulator code used in 1.52+
86
+  (c) Copyright 2009         byuu,
87
+                             neviksti
88
+
89
+  S-DD1 C emulator code
90
+  (c) Copyright 2003         Brad Jorsch with research by
91
+                             Andreas Naive,
92
+                             John Weidman
93
+
94
+  S-RTC C emulator code
95
+  (c) Copyright 2001 - 2006  byuu,
96
+                             John Weidman
97
+
98
+  ST010 C++ emulator code
99
+  (c) Copyright 2003         Feather,
100
+                             John Weidman,
101
+                             Kris Bleakley,
102
+                             Matthew Kendora
103
+
104
+  Super FX x86 assembler emulator code
105
+  (c) Copyright 1998 - 2003  _Demo_,
106
+                             pagefault,
107
+                             zsKnight
108
+
109
+  Super FX C emulator code
110
+  (c) Copyright 1997 - 1999  Ivar,
111
+                             Gary Henderson,
112
+                             John Weidman
113
+
114
+  Sound emulator code used in 1.5-1.51
115
+  (c) Copyright 1998 - 2003  Brad Martin
116
+  (c) Copyright 1998 - 2006  Charles Bilyue'
117
+
118
+  Sound emulator code used in 1.52+
119
+  (c) Copyright 2004 - 2007  Shay Green (gblargg@gmail.com)
120
+
121
+  SH assembler code partly based on x86 assembler code
122
+  (c) Copyright 2002 - 2004  Marcus Comstedt (marcus@mc.pp.se)
123
+
124
+  2xSaI filter
125
+  (c) Copyright 1999 - 2001  Derek Liauw Kie Fa
126
+
127
+  HQ2x, HQ3x, HQ4x filters
128
+  (c) Copyright 2003         Maxim Stepin (maxim@hiend3d.com)
129
+
130
+  NTSC filter
131
+  (c) Copyright 2006 - 2007  Shay Green
132
+
133
+  GTK+ GUI code
134
+  (c) Copyright 2004 - 2011  BearOso
135
+
136
+  Win32 GUI code
137
+  (c) Copyright 2003 - 2006  blip,
138
+                             funkyass,
139
+                             Matthew Kendora,
140
+                             Nach,
141
+                             nitsuja
142
+  (c) Copyright 2009 - 2011  OV2
143
+
144
+  Mac OS GUI code
145
+  (c) Copyright 1998 - 2001  John Stiles
146
+  (c) Copyright 2001 - 2011  zones
147
+
148
+
149
+  Specific ports contains the works of other authors. See headers in
150
+  individual files.
151
+
152
+
153
+  Snes9x homepage: http://www.snes9x.com/
154
+
155
+  Permission to use, copy, modify and/or distribute Snes9x in both binary
156
+  and source form, for non-commercial purposes, is hereby granted without
157
+  fee, providing that this license information and copyright notice appear
158
+  with all copies and any derived work.
159
+
160
+  This software is provided 'as-is', without any express or implied
161
+  warranty. In no event shall the authors be held liable for any damages
162
+  arising from the use of this software or it's derivatives.
163
+
164
+  Snes9x is freeware for PERSONAL USE only. Commercial users should
165
+  seek permission of the copyright holders first. Commercial use includes,
166
+  but is not limited to, charging money for Snes9x or software derived from
167
+  Snes9x, including Snes9x or derivatives in commercial game bundles, and/or
168
+  using Snes9x as a promotion for your commercial product.
169
+
170
+  The copyright holders request that bug fixes and improvements to the code
171
+  should be forwarded to them so everyone can benefit from the modifications
172
+  in future versions.
173
+
174
+  Super NES and Super Nintendo Entertainment System are trademarks of
175
+  Nintendo Co., Limited and its subsidiary companies.
176
+ ***********************************************************************************/
177
+
178
+
179
+#ifndef _MEMMAP_H_
180
+#define _MEMMAP_H_
181
+
182
+#define MEMMAP_BLOCK_SIZE	(0x1000)
183
+#define MEMMAP_NUM_BLOCKS	(0x1000000 / MEMMAP_BLOCK_SIZE)
184
+#define MEMMAP_SHIFT		(12)
185
+#define MEMMAP_MASK			(MEMMAP_BLOCK_SIZE - 1)
186
+
187
+struct CMemory
188
+{
189
+	enum
190
+	{ MAX_ROM_SIZE = 0x800000 };
191
+
192
+	enum file_formats
193
+	{ FILE_ZIP, FILE_JMA, FILE_DEFAULT };
194
+
195
+	enum
196
+	{ NOPE, YEAH, BIGFIRST, SMALLFIRST };
197
+
198
+	enum
199
+	{ MAP_TYPE_I_O, MAP_TYPE_ROM, MAP_TYPE_RAM };
200
+
201
+	enum
202
+	{
203
+		MAP_CPU,
204
+		MAP_PPU,
205
+		MAP_LOROM_SRAM,
206
+		MAP_LOROM_SRAM_B,
207
+		MAP_HIROM_SRAM,
208
+		MAP_DSP,
209
+		MAP_SA1RAM,
210
+		MAP_BWRAM,
211
+		MAP_BWRAM_BITMAP,
212
+		MAP_BWRAM_BITMAP2,
213
+		MAP_SPC7110_ROM,
214
+		MAP_SPC7110_DRAM,
215
+		MAP_RONLY_SRAM,
216
+		MAP_C4,
217
+		MAP_OBC_RAM,
218
+		MAP_SETA_DSP,
219
+		MAP_SETA_RISC,
220
+		MAP_BSX,
221
+		MAP_NONE,
222
+		MAP_LAST
223
+	};
224
+
225
+	uint8_t	NSRTHeader[32];
226
+	int32_t	HeaderCount;
227
+
228
+	uint8_t	*RAM;
229
+	uint8_t	*ROM;
230
+	uint8_t	*SRAM;
231
+	uint8_t	*VRAM;
232
+	uint8_t	*FillRAM;
233
+	uint8_t	*BWRAM;
234
+	uint8_t	*C4RAM;
235
+	uint8_t	*OBC1RAM;
236
+	uint8_t	*BSRAM;
237
+	uint8_t	*BIOSROM;
238
+
239
+	uint8_t	*Map[MEMMAP_NUM_BLOCKS];
240
+	uint8_t	*WriteMap[MEMMAP_NUM_BLOCKS];
241
+	uint8_t	BlockIsRAM[MEMMAP_NUM_BLOCKS];
242
+	uint8_t	BlockIsROM[MEMMAP_NUM_BLOCKS];
243
+	uint8_t	ExtendedFormat;
244
+
245
+	char	ROMFilename[PATH_MAX + 1];
246
+	char	ROMName[ROM_NAME_LEN];
247
+	char	RawROMName[ROM_NAME_LEN];
248
+	char	ROMId[5];
249
+	int32_t	CompanyId;
250
+	uint8_t	ROMRegion;
251
+	uint8_t	ROMSpeed;
252
+	uint8_t	ROMType;
253
+	uint8_t	ROMSize;
254
+	uint32_t	ROMChecksum;
255
+	uint32_t	ROMComplementChecksum;
256
+	uint32_t	ROMCRC32;
257
+	int32_t	ROMFramesPerSecond;
258
+
259
+	bool	HiROM;
260
+	bool	LoROM;
261
+	uint8_t	SRAMSize;
262
+	uint32_t	SRAMMask;
263
+	uint32_t	CalculatedSize;
264
+	uint32_t	CalculatedChecksum;
265
+
266
+	// ports can assign this to perform some custom action upon loading a ROM (such as adjusting controls)
267
+	void	(*PostRomInitFunc)();
268
+
269
+	bool	Init();
270
+	void	Deinit();
271
+
272
+	int		ScoreHiROM (bool, int32_t romoff = 0);
273
+	int		ScoreLoROM (bool, int32_t romoff = 0);
274
+	//uint32_t	HeaderRemove (uint32_t, int32_t &, uint8_t *);
275
+	//uint32_t	FileLoader (uint8_t *, const char *, int32_t);
276
+	/*bool	LoadROM (const char *);
277
+	bool	LoadMultiCart (const char *, const char *);
278
+	bool	LoadSufamiTurbo (const char *, const char *);
279
+	bool	LoadSameGame (const char *, const char *);
280
+	bool	LoadSRAM (const char *);
281
+	bool	SaveSRAM (const char *);
282
+	void	ClearSRAM (bool onlyNonSavedSRAM = 0);
283
+	bool	LoadSRTC();
284
+	bool	SaveSRTC();*/
285
+	bool LoadROMSNSF(const unsigned char *, int32_t, const unsigned char *, int32_t);
286
+
287
+	char *	Safe (const char *);
288
+	char *	SafeANK (const char *);
289
+	void	ParseSNESHeader (uint8_t *);
290
+	void	InitROM();
291
+
292
+	uint32_t	map_mirror (uint32_t, uint32_t);
293
+	void	map_lorom (uint32_t, uint32_t, uint32_t, uint32_t, uint32_t);
294
+	void	map_hirom (uint32_t, uint32_t, uint32_t, uint32_t, uint32_t);
295
+	void	map_lorom_offset (uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t);
296
+	void	map_hirom_offset (uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t);
297
+	void	map_space (uint32_t, uint32_t, uint32_t, uint32_t, uint8_t *);
298
+	void	map_index (uint32_t, uint32_t, uint32_t, uint32_t, int, int);
299
+	void	map_System();
300
+	void	map_WRAM();
301
+	void	map_LoROMSRAM();
302
+	void	map_HiROMSRAM();
303
+	//void	map_DSP();
304
+	//void	map_C4();
305
+	//void	map_OBC1();
306
+	//void	map_SetaRISC();
307
+	//void	map_SetaDSP();
308
+	void	map_WriteProtectROM();
309
+	void	Map_Initialize();
310
+	void	Map_LoROMMap();
311
+	void	Map_NoMAD1LoROMMap();
312
+	void	Map_JumboLoROMMap();
313
+	void	Map_ROM24MBSLoROMMap();
314
+	void	Map_SRAM512KLoROMMap();
315
+	//void	Map_SufamiTurboLoROMMap();
316
+	//void	Map_SufamiTurboPseudoLoROMMap();
317
+	//void	Map_SuperFXLoROMMap();
318
+	//void	Map_SetaDSPLoROMMap();
319
+	void	Map_SDD1LoROMMap();
320
+	//void	Map_SA1LoROMMap();
321
+	void	Map_HiROMMap();
322
+	void	Map_ExtendedHiROMMap();
323
+	//void	Map_SameGameHiROMMap();
324
+	//void	Map_SPC7110HiROMMap();
325
+
326
+	uint16_t	checksum_calc_sum (uint8_t *, uint32_t);
327
+	uint16_t	checksum_mirror_sum (uint8_t *, uint32_t &, uint32_t mask = 0x800000);
328
+	void	Checksum_Calculate();
329
+
330
+	bool	match_na (const char *);
331
+	bool	match_nn (const char *);
332
+	//bool	match_nc (const char *);
333
+	bool	match_id (const char *);
334
+	void	ApplyROMFixes();
335
+	//void	CheckForAnyPatch (const char *, bool, int32_t &);
336
+
337
+	//void	MakeRomInfoText (char *);
338
+
339
+	//const char *	MapType();
340
+	//const char *	StaticRAMSize();
341
+	//const char *	Size();
342
+	//const char *	Revision();
343
+	//const char *	KartContents();
344
+	//const char *	Country();
345
+	//const char *	PublishingCompany();
346
+};
347
+
348
+struct SMulti
349
+{
350
+	int		cartType;
351
+	int32_t	cartSizeA, cartSizeB;
352
+	int32_t	sramSizeA, sramSizeB;
353
+	uint32_t	sramMaskA, sramMaskB;
354
+	uint32_t	cartOffsetA, cartOffsetB;
355
+	uint8_t	*sramA, *sramB;
356
+	char	fileNameA[PATH_MAX + 1], fileNameB[PATH_MAX + 1];
357
+};
358
+
359
+extern CMemory	Memory;
360
+extern SMulti	Multi;
361
+
362
+void S9xAutoSaveSRAM();
363
+bool LoadZip(const char *, int32_t *, int32_t *, uint8_t *);
364
+
365
+enum s9xwrap_t
366
+{
367
+	WRAP_NONE,
368
+	WRAP_BANK,
369
+	WRAP_PAGE
370
+};
371
+
372
+enum s9xwriteorder_t
373
+{
374
+	WRITE_01,
375
+	WRITE_10
376
+};
377
+
378
+#include "getset.h"
379
+
380
+#endif