Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 599dc3eee0 | |||
| e6d281c9aa | |||
| 806a2b3580 | |||
| f32a177e71 | |||
| 816e76e4f1 |
+39
-11
@@ -39,6 +39,7 @@
|
||||
int16_t pad[2][12];
|
||||
NSString *romName;
|
||||
double sampleRate;
|
||||
NSMutableDictionary *cheatList;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -105,21 +106,20 @@ static int16_t input_state_callback(unsigned port, unsigned device, unsigned ind
|
||||
|
||||
static bool environment_callback(unsigned cmd, void *data)
|
||||
{
|
||||
GET_CURRENT_AND_RETURN(false);
|
||||
|
||||
switch(cmd)
|
||||
{
|
||||
case RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY :
|
||||
{
|
||||
// FIXME: Build a path in a more appropriate place
|
||||
NSString *appSupportPath = [NSString pathWithComponents:@[
|
||||
[NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject],
|
||||
@"OpenEmu", @"BIOS"]];
|
||||
NSString *biosPath = current.biosDirectoryPath;
|
||||
|
||||
*(const char **)data = [appSupportPath UTF8String];
|
||||
NSLog(@"Environ SYSTEM_DIRECTORY: \"%@\".\n", appSupportPath);
|
||||
*(const char **)data = [biosPath UTF8String];
|
||||
//NSLog(@"Environ SYSTEM_DIRECTORY: \"%@\".\n", biosPath);
|
||||
break;
|
||||
}
|
||||
default :
|
||||
NSLog(@"Environ UNSUPPORTED (#%u).\n", cmd);
|
||||
//NSLog(@"Environ UNSUPPORTED (#%u).\n", cmd);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -205,6 +205,7 @@ static void writeSaveFile(const char* path, int type)
|
||||
if((self = [super init]))
|
||||
{
|
||||
videoBuffer = (uint16_t*)malloc(720 * 576 * 2);
|
||||
cheatList = [[NSMutableDictionary alloc] init];
|
||||
}
|
||||
|
||||
_current = self;
|
||||
@@ -430,13 +431,40 @@ static void writeSaveFile(const char* path, int type)
|
||||
block(YES, nil);
|
||||
}
|
||||
|
||||
#pragma mark - Cheats
|
||||
|
||||
- (void)setCheat:(NSString *)code setType:(NSString *)type setEnabled:(BOOL)enabled
|
||||
{
|
||||
NSArray *multipleCodes = [[NSArray alloc] init];
|
||||
multipleCodes = [code componentsSeparatedByString:@"+"];
|
||||
// Sanitize
|
||||
code = [code stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
|
||||
|
||||
for (NSString *singleCode in multipleCodes) {
|
||||
retro_cheat_set(nil, enabled, [singleCode UTF8String]);
|
||||
// Genesis Plus GX expects cheats UPPERCASE
|
||||
code = [code uppercaseString];
|
||||
|
||||
// Remove any spaces
|
||||
code = [code stringByReplacingOccurrencesOfString:@" " withString:@""];
|
||||
|
||||
if (enabled)
|
||||
[cheatList setValue:@YES forKey:code];
|
||||
else
|
||||
[cheatList removeObjectForKey:code];
|
||||
|
||||
retro_cheat_reset();
|
||||
|
||||
NSArray *multipleCodes = [[NSArray alloc] init];
|
||||
|
||||
// Apply enabled cheats found in dictionary
|
||||
for (id key in cheatList)
|
||||
{
|
||||
if ([[cheatList valueForKey:key] isEqual:@YES])
|
||||
{
|
||||
// Handle multi-line cheats
|
||||
multipleCodes = [key componentsSeparatedByString:@"+"];
|
||||
|
||||
for (NSString *singleCode in multipleCodes) {
|
||||
retro_cheat_set(0, enabled, [singleCode UTF8String]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.7.4.1</string>
|
||||
<string>1.7.4.2</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>OEGameCoreController</string>
|
||||
<key>OEGameCoreClass</key>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Genesis Plus
|
||||
* Mega Drive cartridge hardware support
|
||||
*
|
||||
* Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Many cartridge protections were initially documented by Haze
|
||||
* (http://haze.mameworld.info/)
|
||||
@@ -292,14 +292,6 @@ void md_cart_init(void)
|
||||
while (cart.romsize > size)
|
||||
size <<= 1;
|
||||
|
||||
/* total ROM size is not a factor of 2 */
|
||||
/* TODO: handle all possible ROM configurations using cartridge database */
|
||||
if ((size < MAXROMSIZE) && (cart.romsize < size))
|
||||
{
|
||||
/* ROM is padded up to 2^k bytes */
|
||||
memset(cart.rom + cart.romsize, 0xff, size - cart.romsize);
|
||||
}
|
||||
|
||||
/* Sonic & Knuckles */
|
||||
if (strstr(rominfo.international,"SONIC & KNUCKLES"))
|
||||
{
|
||||
@@ -307,6 +299,22 @@ void md_cart_init(void)
|
||||
size = 0x400000;
|
||||
}
|
||||
|
||||
/* total ROM size is not a factor of 2 */
|
||||
/* TODO: handle all possible ROM configurations using cartridge database */
|
||||
if (cart.romsize < size)
|
||||
{
|
||||
if (size < MAXROMSIZE)
|
||||
{
|
||||
/* ROM is padded up to 2^k bytes */
|
||||
memset(cart.rom + cart.romsize, 0xff, size - cart.romsize);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* ROM is padded up to max ROM size */
|
||||
memset(cart.rom + cart.romsize, 0xff, MAXROMSIZE - cart.romsize);
|
||||
}
|
||||
}
|
||||
|
||||
/* ROM is mirrored each 2^k bytes */
|
||||
cart.mask = size - 1;
|
||||
|
||||
@@ -419,7 +427,7 @@ void md_cart_init(void)
|
||||
if (input.system[1] != SYSTEM_WAYPLAY)
|
||||
{
|
||||
old_system[1] = input.system[1];
|
||||
input.system[1] = SYSTEM_MD_GAMEPAD;
|
||||
input.system[1] = SYSTEM_GAMEPAD;
|
||||
}
|
||||
|
||||
/* extra connectors mapped at $38xxxx or $3Fxxxx */
|
||||
|
||||
+271
-265
@@ -2,7 +2,7 @@
|
||||
* Genesis Plus
|
||||
* SG-1000, Master System & Game Gear cartridge hardware support
|
||||
*
|
||||
* Copyright (C) 2007-2012 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
@@ -42,8 +42,9 @@
|
||||
|
||||
#define MAPPER_NONE (0x00)
|
||||
#define MAPPER_TEREBI (0x01)
|
||||
#define MAPPER_RAM_8K_EXT1 (0x02)
|
||||
#define MAPPER_RAM_8K_EXT2 (0x03)
|
||||
#define MAPPER_RAM_2K (0x02)
|
||||
#define MAPPER_RAM_8K_EXT1 (0x03)
|
||||
#define MAPPER_RAM_8K_EXT2 (0x04)
|
||||
#define MAPPER_SEGA (0x10)
|
||||
#define MAPPER_SEGA_X (0x11)
|
||||
#define MAPPER_93C46 (0x12)
|
||||
@@ -55,8 +56,6 @@
|
||||
#define MAPPER_MSX (0x21)
|
||||
#define MAPPER_MSX_NEMESIS (0x22)
|
||||
|
||||
#define GAME_DATABASE_CNT (211)
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32 crc;
|
||||
@@ -75,147 +74,154 @@ typedef struct
|
||||
uint8 pages;
|
||||
} romhw_t;
|
||||
|
||||
static const rominfo_t game_list[GAME_DATABASE_CNT] =
|
||||
static const rominfo_t game_list[] =
|
||||
{
|
||||
/* program requiring Mega Drive VDP (Mode 5) */
|
||||
{0x47FA618D, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_PBC, REGION_USA}, /* Charles MacDonald's Mode 5 Demo Program */
|
||||
{0x47FA618D, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_PBC, REGION_USA}, /* Charles MacDonald's Mode 5 Demo Program */
|
||||
|
||||
/* game requiring SEGA mapper */
|
||||
{0xFF67359B, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* DataStorm (homebrew) */
|
||||
{0xFF67359B, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* DataStorm (homebrew) */
|
||||
|
||||
/* games requiring 315-5124 VDP (Mark-III, Master System I) */
|
||||
{0x32759751, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Y's (J) */
|
||||
{0x32759751, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Y's (J) */
|
||||
|
||||
/* games requiring Sega 315-5235 mapper without bank shifting */
|
||||
{0x23BAC434, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA_X, SYSTEM_GG, REGION_USA}, /* Shining Force Gaiden - Final Conflict (JP) [T-Eng] */
|
||||
{0x23BAC434, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA_X, SYSTEM_GG, REGION_USA}, /* Shining Force Gaiden - Final Conflict (JP) [T-Eng] */
|
||||
|
||||
/* games using various Korean mappers */
|
||||
{0x17AB6883, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_NONE, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* FA Tetris (KR) */
|
||||
{0x61E8806F, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_NONE, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Flash Point (KR) */
|
||||
{0x445525E2, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Penguin Adventure (KR) */
|
||||
{0x83F0EEDE, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Street Master (KR) */
|
||||
{0xA05258F5, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Won-Si-In (KR) */
|
||||
{0x06965ED9, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* F-1 Spirit - The way to Formula-1 (KR) */
|
||||
{0x77EFE84A, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Cyborg Z (KR) */
|
||||
{0xF89AF3CC, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Knightmare II - The Maze of Galious (KR) */
|
||||
{0x9195C34C, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Boy 3 (KR) */
|
||||
{0xE316C06D, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_MSX_NEMESIS, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Nemesis (KR) */
|
||||
{0x0A77FA5E, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Nemesis 2 (KR) */
|
||||
{0xA67F2A5C, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_MULTI, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* 4-Pak All Action (KR) */
|
||||
{0x89B79E77, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_KOREA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Dodgeball King (KR) */
|
||||
{0x18FB98A3, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_KOREA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Jang Pung 3 (KR) */
|
||||
{0x97D03541, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_KOREA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Sangokushi 3 (KR) */
|
||||
{0x67C2F0FF, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_KOREA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Boy 2 (KR) */
|
||||
{0x192949D5, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_KOREA_8K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Janggun-ui Adeul (KR) */
|
||||
{0x9FA727A0, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_KOREA_16K, SYSTEM_GGMS, REGION_USA}, /* Street Hero [Proto 0] [SMS-GG] (US) */
|
||||
{0xFB481971, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_KOREA_16K, SYSTEM_GGMS, REGION_USA}, /* Street Hero [Proto 1] [SMS-GG] (US) */
|
||||
{0x445525E2, 0, 0, SYSTEM_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Penguin Adventure (KR) */
|
||||
{0x83F0EEDE, 0, 0, SYSTEM_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Street Master (KR) */
|
||||
{0xA05258F5, 0, 0, SYSTEM_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Won-Si-In (KR) */
|
||||
{0x06965ED9, 0, 0, SYSTEM_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* F-1 Spirit - The way to Formula-1 (KR) */
|
||||
{0x77EFE84A, 0, 0, SYSTEM_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Cyborg Z (KR) */
|
||||
{0xF89AF3CC, 0, 0, SYSTEM_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Knightmare II - The Maze of Galious (KR) */
|
||||
{0x9195C34C, 0, 0, SYSTEM_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Boy 3 (KR) */
|
||||
{0xE316C06D, 0, 0, SYSTEM_GAMEPAD, MAPPER_MSX_NEMESIS, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Nemesis (KR) */
|
||||
{0x0A77FA5E, 0, 0, SYSTEM_GAMEPAD, MAPPER_MSX, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Nemesis 2 (KR) */
|
||||
{0xA67F2A5C, 0, 0, SYSTEM_GAMEPAD, MAPPER_MULTI, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* 4-Pak All Action (KR) */
|
||||
{0x89B79E77, 0, 0, SYSTEM_GAMEPAD, MAPPER_KOREA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Dodgeball King (KR) */
|
||||
{0x18FB98A3, 0, 0, SYSTEM_GAMEPAD, MAPPER_KOREA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Jang Pung 3 (KR) */
|
||||
{0x97D03541, 0, 0, SYSTEM_GAMEPAD, MAPPER_KOREA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Sangokushi 3 (KR) */
|
||||
{0x192949D5, 0, 0, SYSTEM_GAMEPAD, MAPPER_KOREA_8K, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Janggun-ui Adeul (KR) */
|
||||
{0x9FA727A0, 0, 0, SYSTEM_GAMEPAD, MAPPER_KOREA_16K, SYSTEM_GGMS, REGION_USA}, /* Street Hero [Proto 0] [SMS-GG] (US) */
|
||||
{0xFB481971, 0, 0, SYSTEM_GAMEPAD, MAPPER_KOREA_16K, SYSTEM_GGMS, REGION_USA}, /* Street Hero [Proto 1] [SMS-GG] (US) */
|
||||
|
||||
/* games using Codemaster mapper */
|
||||
{0x29822980, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_SMS2, REGION_EUROPE}, /* Cosmic Spacehead */
|
||||
{0x8813514B, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_SMS2, REGION_EUROPE}, /* Excellent Dizzy Collection, The [Proto] */
|
||||
{0xB9664AE1, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_SMS2, REGION_EUROPE}, /* Fantastic Dizzy */
|
||||
{0xA577CE46, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_SMS2, REGION_EUROPE}, /* Micro Machines */
|
||||
{0xEA5C3A6F, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_SMS2, REGION_USA}, /* Dinobasher - Starring Bignose the Caveman [Proto] */
|
||||
{0xAA140C9C, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_GGMS, REGION_USA}, /* Excellent Dizzy Collection, The [SMS-GG] */
|
||||
{0xC888222B, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_GGMS, REGION_USA}, /* Fantastic Dizzy [SMS-GG] */
|
||||
{0x76C5BDFB, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_GGMS, REGION_USA}, /* Jang Pung 2 [SMS-GG] */
|
||||
{0x6CAA625B, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* Cosmic Spacehead [GG]*/
|
||||
{0x152F0DCC, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* Drop Zone" */
|
||||
{0x5E53C7F7, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* Ernie Els Golf */
|
||||
{0xD9A7F170, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* Man Overboard! */
|
||||
{0xF7C524F6, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* Micro Machines [GG] */
|
||||
{0xDBE8895C, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* Micro Machines 2 - Turbo Tournament */
|
||||
{0xC1756BEE, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* Pete Sampras Tennis */
|
||||
{0x72981057, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* CJ Elephant Fugitive */
|
||||
{0x29822980, 0, 0, SYSTEM_GAMEPAD, MAPPER_CODIES, SYSTEM_SMS2, REGION_EUROPE}, /* Cosmic Spacehead */
|
||||
{0x8813514B, 0, 0, SYSTEM_GAMEPAD, MAPPER_CODIES, SYSTEM_SMS2, REGION_EUROPE}, /* Excellent Dizzy Collection, The [Proto] */
|
||||
{0xB9664AE1, 0, 0, SYSTEM_GAMEPAD, MAPPER_CODIES, SYSTEM_SMS2, REGION_EUROPE}, /* Fantastic Dizzy */
|
||||
{0xA577CE46, 0, 0, SYSTEM_GAMEPAD, MAPPER_CODIES, SYSTEM_SMS2, REGION_EUROPE}, /* Micro Machines */
|
||||
{0xEA5C3A6F, 0, 0, SYSTEM_GAMEPAD, MAPPER_CODIES, SYSTEM_SMS2, REGION_USA}, /* Dinobasher - Starring Bignose the Caveman [Proto] */
|
||||
{0xAA140C9C, 0, 0, SYSTEM_GAMEPAD, MAPPER_CODIES, SYSTEM_GGMS, REGION_USA}, /* Excellent Dizzy Collection, The [SMS-GG] */
|
||||
{0xC888222B, 0, 0, SYSTEM_GAMEPAD, MAPPER_CODIES, SYSTEM_GGMS, REGION_USA}, /* Fantastic Dizzy [SMS-GG] */
|
||||
{0x76C5BDFB, 0, 0, SYSTEM_GAMEPAD, MAPPER_CODIES, SYSTEM_GGMS, REGION_USA}, /* Jang Pung 2 [SMS-GG] */
|
||||
{0x6CAA625B, 0, 0, SYSTEM_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* Cosmic Spacehead [GG]*/
|
||||
{0x152F0DCC, 0, 0, SYSTEM_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* Drop Zone */
|
||||
{0x5E53C7F7, 0, 0, SYSTEM_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* Ernie Els Golf */
|
||||
{0xD9A7F170, 0, 0, SYSTEM_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* Man Overboard! */
|
||||
{0xF7C524F6, 0, 0, SYSTEM_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* Micro Machines [GG] */
|
||||
{0xDBE8895C, 0, 0, SYSTEM_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* Micro Machines 2 - Turbo Tournament */
|
||||
{0xC1756BEE, 0, 0, SYSTEM_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* Pete Sampras Tennis */
|
||||
{0x72981057, 0, 0, SYSTEM_GAMEPAD, MAPPER_CODIES, SYSTEM_GG, REGION_USA}, /* CJ Elephant Fugitive */
|
||||
|
||||
/* games using serial EEPROM */
|
||||
{0x36EBCD6D, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_93C46, SYSTEM_GG, REGION_USA}, /* Majors Pro Baseball */
|
||||
{0x3D8D0DD6, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_93C46, SYSTEM_GG, REGION_USA}, /* World Series Baseball [v0] */
|
||||
{0xBB38CFD7, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_93C46, SYSTEM_GG, REGION_USA}, /* World Series Baseball [v1] */
|
||||
{0x578A8A38, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_93C46, SYSTEM_GG, REGION_USA}, /* World Series Baseball '95 */
|
||||
{0x36EBCD6D, 0, 0, SYSTEM_GAMEPAD, MAPPER_93C46, SYSTEM_GG, REGION_USA}, /* Majors Pro Baseball */
|
||||
{0x3D8D0DD6, 0, 0, SYSTEM_GAMEPAD, MAPPER_93C46, SYSTEM_GG, REGION_USA}, /* World Series Baseball [v0] */
|
||||
{0xBB38CFD7, 0, 0, SYSTEM_GAMEPAD, MAPPER_93C46, SYSTEM_GG, REGION_USA}, /* World Series Baseball [v1] */
|
||||
{0x578A8A38, 0, 0, SYSTEM_GAMEPAD, MAPPER_93C46, SYSTEM_GG, REGION_USA}, /* World Series Baseball '95 */
|
||||
|
||||
/* games using Terebi Oekaki graphic board */
|
||||
{0xDD4A661B, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_TEREBI, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Terebi Oekaki */
|
||||
{0xDD4A661B, 0, 0, SYSTEM_GAMEPAD, MAPPER_TEREBI, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Terebi Oekaki */
|
||||
|
||||
/* games requiring 8K RAM extension adapter */
|
||||
{0xCE5648C3, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Bomberman Special [DahJee] (TW) */
|
||||
{0x223397A1, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SG, REGION_JAPAN_NTSC}, /* King's Valley (TW) */
|
||||
{0x281D2888, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Knightmare (TW) */
|
||||
{0x306D5F78, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Rally-X [DahJee] (TW) */
|
||||
{0x29E047CC, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Road Fighter (TW) */
|
||||
{0x5CBD1163, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Tank Battalion (TW) */
|
||||
{0x2E7166D5, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SG, REGION_JAPAN_NTSC}, /* The Legend of Kage (TW) */
|
||||
{0xC550B4F0, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SG, REGION_JAPAN_NTSC}, /* TwinBee (TW) */
|
||||
{0xFC87463C, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Yie Ar Kung-Fu II (TW) */
|
||||
{0x69FC1494, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT2, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Bomberman Special (TW) */
|
||||
{0xFFC4EE3F, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT2, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Magical Kid Wiz (TW) */
|
||||
{0x2E366CCF, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT2, SYSTEM_SG, REGION_JAPAN_NTSC}, /* The Castle (TW) */
|
||||
{0xAAAC12CF, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT2, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Rally-X (TW) */
|
||||
{0xD2EDD329, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT2, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Road Fighter (TW) */
|
||||
/* games using 2KB external RAM (volatile) */
|
||||
{0x092F29D6, 0, 0, SYSTEM_GAMEPAD, MAPPER_RAM_2K, SYSTEM_SG, REGION_JAPAN_NTSC}, /* The Castle (J) */
|
||||
{0xAF4F14BC, 0, 0, SYSTEM_GAMEPAD, MAPPER_RAM_2K, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Othello (J) */
|
||||
{0x1D1A0CA3, 0, 0, SYSTEM_GAMEPAD, MAPPER_RAM_2K, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Othello (TW) */
|
||||
|
||||
/* games requiring SG-1000 II 8K RAM extension adapter */
|
||||
{0xCE5648C3, 0, 0, SYSTEM_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Bomberman Special [DahJee] (TW) */
|
||||
{0x223397A1, 0, 0, SYSTEM_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* King's Valley (TW) */
|
||||
{0x281D2888, 0, 0, SYSTEM_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Knightmare (TW) */
|
||||
{0x306D5F78, 0, 0, SYSTEM_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Rally-X [DahJee] (TW) */
|
||||
{0x29E047CC, 0, 0, SYSTEM_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Road Fighter (TW) */
|
||||
{0x5CBD1163, 0, 0, SYSTEM_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Tank Battalion (TW) */
|
||||
{0x2E7166D5, 0, 0, SYSTEM_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* The Legend of Kage (TW) */
|
||||
{0xC550B4F0, 0, 0, SYSTEM_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* TwinBee (TW) */
|
||||
{0xFC87463C, 0, 0, SYSTEM_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Yie Ar Kung-Fu II (TW) */
|
||||
{0x69FC1494, 0, 0, SYSTEM_GAMEPAD, MAPPER_RAM_8K_EXT2, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Bomberman Special (TW) */
|
||||
{0xFFC4EE3F, 0, 0, SYSTEM_GAMEPAD, MAPPER_RAM_8K_EXT2, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Magical Kid Wiz (TW) */
|
||||
{0x2E366CCF, 0, 0, SYSTEM_GAMEPAD, MAPPER_RAM_8K_EXT2, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* The Castle (TW) */
|
||||
{0xAAAC12CF, 0, 0, SYSTEM_GAMEPAD, MAPPER_RAM_8K_EXT2, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Rally-X (TW) */
|
||||
{0xD2EDD329, 0, 0, SYSTEM_GAMEPAD, MAPPER_RAM_8K_EXT2, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Road Fighter (TW) */
|
||||
|
||||
/* games requiring 2K internal RAM (SG-1000 II clone hardware) */
|
||||
{0x7F7F009D, 0, 0, SYSTEM_GAMEPAD, MAPPER_NONE, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Circus Charlie (KR) */
|
||||
{0x77DB4704, 0, 0, SYSTEM_GAMEPAD, MAPPER_NONE, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Q*Bert */
|
||||
{0xC5A67B95, 0, 0, SYSTEM_GAMEPAD, MAPPER_NONE, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Othello Multivision BIOS */
|
||||
|
||||
/* games requiring Japanese region setting */
|
||||
{0x71DEBA5A, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GG, REGION_JAPAN_NTSC}, /* Pop Breaker */
|
||||
{0xC9DD4E5F, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Woody Pop (Super Arkanoid) */
|
||||
{0x71DEBA5A, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_GG, REGION_JAPAN_NTSC}, /* Pop Breaker */
|
||||
{0xC9DD4E5F, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Woody Pop (Super Arkanoid) */
|
||||
|
||||
/* games requiring Mark-III hardware (no Memory Control port) */
|
||||
{0xBD1CC7DF, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_MARKIII, REGION_JAPAN_NTSC}, /* Super Tetris (KR) */
|
||||
{0x6D309AC5, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_MARKIII, REGION_JAPAN_NTSC}, /* Power Boggle Boggle (KR) */
|
||||
/* games requiring Japanese Master System I/O chip (315-5297) */
|
||||
{0xBD1CC7DF, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Tetris (KR) */
|
||||
{0x6D309AC5, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Power Boggle Boggle (KR) */
|
||||
|
||||
/* games requiring random RAM pattern initialization */
|
||||
{0x08BF3DE3, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_NONE, SYSTEM_MARKIII, REGION_JAPAN_NTSC}, /* Alibaba and 40 Thieves (KR) */
|
||||
{0x643B6B76, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_NONE, SYSTEM_MARKIII, REGION_JAPAN_NTSC}, /* Block Hole (KR) */
|
||||
{0x08BF3DE3, 0, 0, SYSTEM_GAMEPAD, MAPPER_NONE, SYSTEM_MARKIII, REGION_JAPAN_NTSC}, /* Alibaba and 40 Thieves (KR) */
|
||||
{0x643B6B76, 0, 0, SYSTEM_GAMEPAD, MAPPER_NONE, SYSTEM_MARKIII, REGION_JAPAN_NTSC}, /* Block Hole (KR) */
|
||||
|
||||
/* games requiring PAL timings */
|
||||
{0x72420F38, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Addams Familly */
|
||||
{0x2D48C1D3, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Back to the Future Part III */
|
||||
{0x1CBB7BF1, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Battlemaniacs (BR) */
|
||||
{0x1B10A951, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Bram Stoker's Dracula */
|
||||
{0xC0E25D62, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* California Games II */
|
||||
{0x45C50294, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Jogos de Verao II (BR) */
|
||||
{0xC9DBF936, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Home Alone */
|
||||
{0x0047B615, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Predator2 */
|
||||
{0xF42E145C, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Quest for the Shaven Yak Starring Ren Hoek & Stimpy (BR) */
|
||||
{0x9F951756, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* RoboCop 3 */
|
||||
{0xF8176918, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Sensible Soccer */
|
||||
{0x1575581D, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Shadow of the Beast */
|
||||
{0x96B3F29E, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Sonic Blast (BR) */
|
||||
{0x5B3B922C, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Sonic the Hedgehog 2 [V0] */
|
||||
{0xD6F2BFCA, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Sonic the Hedgehog 2 [V1] */
|
||||
{0xCA1D3752, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Space Harrier [50 Hz] */
|
||||
{0x85CFC9C9, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Taito Chase H.Q. */
|
||||
{0x332A847D, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* NBA Jam [Proto] */
|
||||
{0x72420F38, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Addams Familly */
|
||||
{0x2D48C1D3, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Back to the Future Part III */
|
||||
{0x1CBB7BF1, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Battlemaniacs (BR) */
|
||||
{0x1B10A951, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Bram Stoker's Dracula */
|
||||
{0xC0E25D62, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* California Games II */
|
||||
{0x45C50294, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Jogos de Verao II (BR) */
|
||||
{0xC9DBF936, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Home Alone */
|
||||
{0x0047B615, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Predator2 */
|
||||
{0xF42E145C, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Quest for the Shaven Yak Starring Ren Hoek & Stimpy (BR) */
|
||||
{0x9F951756, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* RoboCop 3 */
|
||||
{0xF8176918, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Sensible Soccer */
|
||||
{0x1575581D, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Shadow of the Beast */
|
||||
{0x96B3F29E, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Sonic Blast (BR) */
|
||||
{0x5B3B922C, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Sonic the Hedgehog 2 [V0] */
|
||||
{0xD6F2BFCA, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Sonic the Hedgehog 2 [V1] */
|
||||
{0xCA1D3752, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Space Harrier [50 Hz] */
|
||||
{0x85CFC9C9, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Taito Chase H.Q. */
|
||||
{0x332A847D, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* NBA Jam [Proto] */
|
||||
|
||||
/* games running in Game Gear MS compatibility mode */
|
||||
{0x59840FD6, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Castle of Illusion - Starring Mickey Mouse [SMS-GG] */
|
||||
{0x9C76FB3A, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Rastan Saga [SMS-GG] */
|
||||
{0xC8381DEF, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Taito Chase H.Q [SMS-GG] */
|
||||
{0xDA8E95A9, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* WWF Wrestlemania Steel Cage Challenge [SMS-GG] */
|
||||
{0x1D93246E, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Olympic Gold [A][SMS-GG] */
|
||||
{0xA2F9C7AF, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Olympic Gold [B][SMS-GG] */
|
||||
{0x01EAB89D, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Out Run Europa [SMS-GG] */
|
||||
{0xF037EC00, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Out Run Europa (US) [SMS-GG] */
|
||||
{0xE5F789B9, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Predator 2 [SMS-GG] */
|
||||
{0x311D2863, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Prince of Persia [A][SMS-GG] */
|
||||
{0x45F058D6, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Prince of Persia [B][SMS-GG] */
|
||||
{0x56201996, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* R.C. Grand Prix [SMS-GG] */
|
||||
{0x10DBBEF4, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Super Kick Off [SMS-GG] */
|
||||
{0x9942B69B, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_JAPAN_NTSC}, /* Castle of Illusion - Starring Mickey Mouse (J) [SMS-GG] */
|
||||
{0x7BB81E3D, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_JAPAN_NTSC}, /* Taito Chase H.Q (J) [SMS-GG] */
|
||||
{0x6F8E46CF, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_JAPAN_NTSC}, /* Alex Kidd in Miracle World (TW) [SMS-GG] */
|
||||
{0x3382D73F, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_JAPAN_NTSC}, /* Olympic Gold (TW) [SMS-GG] */
|
||||
{0x59840FD6, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Castle of Illusion - Starring Mickey Mouse [SMS-GG] */
|
||||
{0x9C76FB3A, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Rastan Saga [SMS-GG] */
|
||||
{0xC8381DEF, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Taito Chase H.Q [SMS-GG] */
|
||||
{0xDA8E95A9, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* WWF Wrestlemania Steel Cage Challenge [SMS-GG] */
|
||||
{0x1D93246E, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Olympic Gold [A][SMS-GG] */
|
||||
{0xA2F9C7AF, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Olympic Gold [B][SMS-GG] */
|
||||
{0x01EAB89D, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Out Run Europa [SMS-GG] */
|
||||
{0xF037EC00, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Out Run Europa (US) [SMS-GG] */
|
||||
{0xE5F789B9, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Predator 2 [SMS-GG] */
|
||||
{0x311D2863, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Prince of Persia [A][SMS-GG] */
|
||||
{0x45F058D6, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Prince of Persia [B][SMS-GG] */
|
||||
{0x56201996, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* R.C. Grand Prix [SMS-GG] */
|
||||
{0x10DBBEF4, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_USA}, /* Super Kick Off [SMS-GG] */
|
||||
{0x9942B69B, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_JAPAN_NTSC}, /* Castle of Illusion - Starring Mickey Mouse (J) [SMS-GG] */
|
||||
{0x7BB81E3D, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_JAPAN_NTSC}, /* Taito Chase H.Q (J) [SMS-GG] */
|
||||
{0x6F8E46CF, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_JAPAN_NTSC}, /* Alex Kidd in Miracle World (TW) [SMS-GG] */
|
||||
{0x3382D73F, 0, 0, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_GGMS, REGION_JAPAN_NTSC}, /* Olympic Gold (TW) [SMS-GG] */
|
||||
|
||||
/* games requiring 3-D Glasses */
|
||||
{0x6BD5C2BF, 1, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Space Harrier 3-D */
|
||||
{0x8ECD201C, 1, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Blade Eagle 3-D */
|
||||
{0xFBF96C81, 1, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Blade Eagle 3-D (BR) */
|
||||
{0x58D5FC48, 1, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Blade Eagle 3-D [Proto] */
|
||||
{0x31B8040B, 1, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Maze Hunter 3-D */
|
||||
{0xABD48AD2, 1, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Poseidon Wars 3-D */
|
||||
{0xA3EF13CB, 1, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Zaxxon 3-D */
|
||||
{0xBBA74147, 1, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Zaxxon 3-D [Proto] */
|
||||
{0xD6F43DDA, 1, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Out Run 3-D */
|
||||
{0x871562b0, 1, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Maze Walker */
|
||||
{0x156948f9, 1, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Space Harrier 3-D (J) */
|
||||
{0x6BD5C2BF, 1, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Space Harrier 3-D */
|
||||
{0x8ECD201C, 1, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Blade Eagle 3-D */
|
||||
{0xFBF96C81, 1, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Blade Eagle 3-D (BR) */
|
||||
{0x58D5FC48, 1, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Blade Eagle 3-D [Proto] */
|
||||
{0x31B8040B, 1, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Maze Hunter 3-D */
|
||||
{0xABD48AD2, 1, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Poseidon Wars 3-D */
|
||||
{0xA3EF13CB, 1, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Zaxxon 3-D */
|
||||
{0xBBA74147, 1, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Zaxxon 3-D [Proto] */
|
||||
{0xD6F43DDA, 1, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Out Run 3-D */
|
||||
{0x871562b0, 1, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Maze Walker */
|
||||
{0x156948f9, 1, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Space Harrier 3-D (J) */
|
||||
|
||||
/* games requiring 3-D Glasses & Sega Light Phaser */
|
||||
{0xFBE5CFBB, 1, 0, SYSTEM_LIGHTPHASER, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Missile Defense 3D */
|
||||
@@ -248,84 +254,88 @@ static const rominfo_t game_list[GAME_DATABASE_CNT] =
|
||||
{0xE42E4998, 0, 0, SYSTEM_SPORTSPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Sports Pad Football */
|
||||
{0x41C948BF, 0, 0, SYSTEM_SPORTSPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Sports Pad Soccer */
|
||||
|
||||
/* games requiring homemade multitap */
|
||||
{0xFAB6F52F, 0, 0, SYSTEM_MASTERTAP, MAPPER_NONE, SYSTEM_SMS2, REGION_USA}, /* BOom (v1.0) */
|
||||
{0x143AB50B, 0, 0, SYSTEM_MASTERTAP, MAPPER_NONE, SYSTEM_SMS2, REGION_USA}, /* BOom (v1.1) */
|
||||
|
||||
/* games supporting YM2413 FM */
|
||||
{0x1C951F8E, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* After Burner */
|
||||
{0xC13896D5, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Alex Kidd: The Lost Stars */
|
||||
{0x5CBFE997, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Alien Syndrome */
|
||||
{0xBBA2FE98, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Altered Beast */
|
||||
{0xFF614EB3, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Aztec Adventure */
|
||||
{0x3084CF11, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Bomber Raid */
|
||||
{0xAC6009A7, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* California Games */
|
||||
{0xA4852757, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Captain Silver */
|
||||
{0xB81F6FA5, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Captain Silver (U) */
|
||||
{0x3CFF6E80, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Casino Games */
|
||||
{0xE7F62E6D, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Cloud Master */
|
||||
{0x908E7524, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Cyborg Hunter */
|
||||
{0xA55D89F3, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Double Dragon */
|
||||
{0xB8B141F9, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Fantasy Zone II */
|
||||
{0xD29889AD, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Fantasy Zone: The Maze */
|
||||
{0xA4AC35D8, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Galaxy Force */
|
||||
{0x6C827520, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Galaxy Force (U) */
|
||||
{0x1890F407, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Game Box Série Esportes Radicais (BR) */
|
||||
{0xB746A6F5, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Global Defense */
|
||||
{0x91A0FC4E, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Global Defense [Proto] */
|
||||
{0x48651325, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Golfamania */
|
||||
{0x5DABFDC3, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Golfamania [Proto] */
|
||||
{0xA51376FE, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Golvellius - Valley of Doom */
|
||||
{0x98E4AE4A, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Great Golf */
|
||||
{0x516ED32E, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Kenseiden */
|
||||
{0xE8511B08, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Lord of The Sword */
|
||||
{0x0E333B6E, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Miracle Warriors - Seal of The Dark Lord */
|
||||
{0x301A59AA, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Miracle Warriors - Seal of The Dark Lord [Proto] */
|
||||
{0x01D67C0B, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Mônica no Castelo do Dragão (BR) */
|
||||
{0x5589D8D2, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Out Run */
|
||||
{0xE030E66C, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Parlour Games */
|
||||
{0xF97E9875, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Penguin Land */
|
||||
{0x4077EFD9, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Power Strike */
|
||||
{0xBB54B6B0, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* R-Type */
|
||||
{0x42FC47EE, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Rampage */
|
||||
{0xC547EB1B, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Rastan */
|
||||
{0x9A8B28EC, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Scramble Spirits */
|
||||
{0xAAB67EC3, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Shanghai */
|
||||
{0x0C6FAC4E, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Shinobi */
|
||||
{0x4752CAE7, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* SpellCaster */
|
||||
{0x1A390B93, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Tennis Ace */
|
||||
{0xAE920E4B, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Thunder Blade */
|
||||
{0x51BD14BE, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Time Soldiers */
|
||||
{0x22CCA9BB, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Turma da Mônica em: O Resgate (BR) */
|
||||
{0xB52D60C8, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Ultima IV */
|
||||
{0xDE9F8517, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Ultima IV [Proto] */
|
||||
{0xDFB0B161, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Vigilante */
|
||||
{0x679E1676, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Wonder Boy III: The Dragon's Trap */
|
||||
{0x8CBEF0C1, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Wonder Boy in Monster Land */
|
||||
{0x2F2E3BC9, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Zillion II - The Tri Formation */
|
||||
{0x48D44A13, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_NONE, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* BIOS (J) */
|
||||
{0xD8C4165B, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Aleste */
|
||||
{0x4CC11DF9, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Alien Syndrome (J) */
|
||||
{0xE421E466, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Chouon Senshi Borgman */
|
||||
{0x2BCDB8FA, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Doki Doki Penguin Land - Uchuu-Daibouken */
|
||||
{0x56BD2455, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Doki Doki Penguin Land - Uchuu-Daibouken [Proto] */
|
||||
{0xC722FB42, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Fantasy Zone II (J) */
|
||||
{0x7ABC70E9, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Family Games (Party Games) */
|
||||
{0x6586BD1F, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Masters Golf */
|
||||
{0x4847BC91, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Masters Golf [Proto] */
|
||||
{0xB9FDF6D9, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Haja no Fuuin */
|
||||
{0x955A009E, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Hoshi wo Sagashite */
|
||||
{0x05EA5353, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Kenseiden (J) */
|
||||
{0xD11D32E4, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Kujakuou */
|
||||
{0xAA7D6F45, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Lord of Sword */
|
||||
{0xBF0411AD, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Maou Golvellius */
|
||||
{0x21A21352, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Maou Golvellius [Proto] */
|
||||
{0x5B5F9106, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Nekyuu Kousien */
|
||||
{0xBEA27D5C, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Opa Opa */
|
||||
{0x6605D36A, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Phantasy Star (J) */
|
||||
{0xE1FFF1BB, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Shinobi (J) */
|
||||
{0x11645549, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Solomon no Kagi - Oujo Rihita no Namida */
|
||||
{0x7E0EF8CB, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Racing */
|
||||
{0xB1DA6A30, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Wonder Boy Monster World */
|
||||
{0x8132AB2C, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Tensai Bakabon */
|
||||
{0xC0CE19B1, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Thunder Blade (J) */
|
||||
{0x07301F83, 0, 1, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_PBC, REGION_JAPAN_NTSC} /* Phantasy Star [Megadrive] (J) */
|
||||
{0x1C951F8E, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* After Burner */
|
||||
{0xC13896D5, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Alex Kidd: The Lost Stars */
|
||||
{0x5CBFE997, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Alien Syndrome */
|
||||
{0xBBA2FE98, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Altered Beast */
|
||||
{0xFF614EB3, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Aztec Adventure */
|
||||
{0x3084CF11, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Bomber Raid */
|
||||
{0xAC6009A7, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* California Games */
|
||||
{0xA4852757, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Captain Silver */
|
||||
{0xB81F6FA5, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Captain Silver (U) */
|
||||
{0x3CFF6E80, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Casino Games */
|
||||
{0xE7F62E6D, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Cloud Master */
|
||||
{0x908E7524, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Cyborg Hunter */
|
||||
{0xA55D89F3, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Double Dragon */
|
||||
{0xB8B141F9, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Fantasy Zone II */
|
||||
{0xD29889AD, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Fantasy Zone: The Maze */
|
||||
{0xA4AC35D8, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Galaxy Force */
|
||||
{0x6C827520, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Galaxy Force (U) */
|
||||
{0x1890F407, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Game Box Série Esportes Radicais (BR) */
|
||||
{0xB746A6F5, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Global Defense */
|
||||
{0x91A0FC4E, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Global Defense [Proto] */
|
||||
{0x48651325, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Golfamania */
|
||||
{0x5DABFDC3, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Golfamania [Proto] */
|
||||
{0xA51376FE, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Golvellius - Valley of Doom */
|
||||
{0x98E4AE4A, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Great Golf */
|
||||
{0x516ED32E, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Kenseiden */
|
||||
{0xE8511B08, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Lord of The Sword */
|
||||
{0x0E333B6E, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Miracle Warriors - Seal of The Dark Lord */
|
||||
{0x301A59AA, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Miracle Warriors - Seal of The Dark Lord [Proto] */
|
||||
{0x01D67C0B, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Mônica no Castelo do Dragão (BR) */
|
||||
{0x5589D8D2, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Out Run */
|
||||
{0xE030E66C, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Parlour Games */
|
||||
{0xF97E9875, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Penguin Land */
|
||||
{0x4077EFD9, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Power Strike */
|
||||
{0xBB54B6B0, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* R-Type */
|
||||
{0x42FC47EE, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Rampage */
|
||||
{0xC547EB1B, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Rastan */
|
||||
{0x9A8B28EC, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Scramble Spirits */
|
||||
{0xAAB67EC3, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Shanghai */
|
||||
{0x0C6FAC4E, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Shinobi */
|
||||
{0x4752CAE7, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* SpellCaster */
|
||||
{0x1A390B93, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Tennis Ace */
|
||||
{0xAE920E4B, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Thunder Blade */
|
||||
{0x51BD14BE, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Time Soldiers */
|
||||
{0x22CCA9BB, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Turma da Mônica em: O Resgate (BR) */
|
||||
{0xB52D60C8, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Ultima IV */
|
||||
{0xDE9F8517, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Ultima IV [Proto] */
|
||||
{0xDFB0B161, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Vigilante */
|
||||
{0x679E1676, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Wonder Boy III: The Dragon's Trap */
|
||||
{0x8CBEF0C1, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Wonder Boy in Monster Land */
|
||||
{0x2F2E3BC9, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Zillion II - The Tri Formation */
|
||||
{0x48D44A13, 0, 1, SYSTEM_GAMEPAD, MAPPER_NONE, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* BIOS (J) */
|
||||
{0xD8C4165B, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Aleste */
|
||||
{0x4CC11DF9, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Alien Syndrome (J) */
|
||||
{0xE421E466, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Chouon Senshi Borgman */
|
||||
{0x2BCDB8FA, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Doki Doki Penguin Land - Uchuu-Daibouken */
|
||||
{0x56BD2455, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Doki Doki Penguin Land - Uchuu-Daibouken [Proto] */
|
||||
{0xC722FB42, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Fantasy Zone II (J) */
|
||||
{0x7ABC70E9, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Family Games (Party Games) */
|
||||
{0x6586BD1F, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Masters Golf */
|
||||
{0x4847BC91, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Masters Golf [Proto] */
|
||||
{0xB9FDF6D9, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Haja no Fuuin */
|
||||
{0x955A009E, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Hoshi wo Sagashite */
|
||||
{0x05EA5353, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Kenseiden (J) */
|
||||
{0xD11D32E4, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Kujakuou */
|
||||
{0xAA7D6F45, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Lord of Sword */
|
||||
{0xBF0411AD, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Maou Golvellius */
|
||||
{0x21A21352, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Maou Golvellius [Proto] */
|
||||
{0x5B5F9106, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Nekyuu Kousien */
|
||||
{0xBEA27D5C, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Opa Opa */
|
||||
{0x6605D36A, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Phantasy Star (J) */
|
||||
{0xE1FFF1BB, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Shinobi (J) */
|
||||
{0x11645549, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Solomon no Kagi - Oujo Rihita no Namida */
|
||||
{0x7E0EF8CB, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Racing */
|
||||
{0xB1DA6A30, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Wonder Boy Monster World */
|
||||
{0x8132AB2C, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Tensai Bakabon */
|
||||
{0xC0CE19B1, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Thunder Blade (J) */
|
||||
{0x07301F83, 0, 1, SYSTEM_GAMEPAD, MAPPER_SEGA, SYSTEM_PBC, REGION_JAPAN_NTSC} /* Phantasy Star [Megadrive] (J) */
|
||||
};
|
||||
|
||||
/* Cartridge & BIOS ROM hardware */
|
||||
@@ -362,14 +372,11 @@ static unsigned char read_mapper_default(unsigned int address);
|
||||
|
||||
void sms_cart_init(void)
|
||||
{
|
||||
int i;
|
||||
int i = sizeof(game_list) / sizeof(rominfo_t) - 1;
|
||||
|
||||
/* game CRC */
|
||||
uint32 crc = crc32(0, cart.rom, cart.romsize);
|
||||
|
||||
/* use Master System controller by default */
|
||||
uint8 device = SYSTEM_MS_GAMEPAD;
|
||||
|
||||
/* unmapped memory return $FF on read (mapped to unused cartridge areas $510000-$5103FF & $510400-$5107FF) */
|
||||
memset(cart.rom + 0x510000, 0xFF, 0x800);
|
||||
|
||||
@@ -395,15 +402,25 @@ void sms_cart_init(void)
|
||||
}
|
||||
|
||||
/* auto-detect game settings */
|
||||
for (i=0; i<GAME_DATABASE_CNT; i++)
|
||||
do
|
||||
{
|
||||
if (crc == game_list[i].crc)
|
||||
{
|
||||
/* auto-detect cartridge mapper */
|
||||
cart_rom.mapper = game_list[i].mapper;
|
||||
|
||||
/* save current input settings */
|
||||
if (old_system[0] == -1)
|
||||
{
|
||||
old_system[0] = input.system[0];
|
||||
}
|
||||
if (old_system[1] == -1)
|
||||
{
|
||||
old_system[1] = input.system[1];
|
||||
}
|
||||
|
||||
/* auto-detect required peripherals */
|
||||
device = game_list[i].peripheral;
|
||||
input.system[0] = input.system[1] = game_list[i].peripheral;
|
||||
|
||||
/* auto-detect 3D glasses support */
|
||||
cart.special = game_list[i].g_3d;
|
||||
@@ -421,9 +438,10 @@ void sms_cart_init(void)
|
||||
}
|
||||
|
||||
/* game found, leave loop */
|
||||
i = GAME_DATABASE_CNT;
|
||||
break;
|
||||
}
|
||||
}
|
||||
while (i--);
|
||||
|
||||
/* ROM paging */
|
||||
if (cart_rom.mapper < MAPPER_SEGA)
|
||||
@@ -460,25 +478,11 @@ void sms_cart_init(void)
|
||||
/* enable cartridge backup memory by default */
|
||||
sram.on = 1;
|
||||
|
||||
/* save current settings */
|
||||
if (old_system[0] == -1)
|
||||
{
|
||||
old_system[0] = input.system[0];
|
||||
}
|
||||
if (old_system[1] == -1)
|
||||
{
|
||||
old_system[1] = input.system[1];
|
||||
}
|
||||
|
||||
/* force port A & port B configuration */
|
||||
input.system[0] = device;
|
||||
input.system[1] = SYSTEM_MS_GAMEPAD;
|
||||
|
||||
/* default gun offset */
|
||||
/* default gun offset for Light Phaser */
|
||||
input.x_offset = 20;
|
||||
input.y_offset = 0;
|
||||
|
||||
/* SpaceGun & Gangster Town use different gun offset */
|
||||
/* SpaceGun & Gangster Town use specific gun offset */
|
||||
if ((crc == 0x5359762D) || (crc == 0x5FC74D2A))
|
||||
{
|
||||
input.x_offset = 16;
|
||||
@@ -666,7 +670,7 @@ void sms_cart_switch(uint8 mode)
|
||||
|
||||
int sms_cart_region_detect(void)
|
||||
{
|
||||
int i;
|
||||
int i = sizeof(game_list) / sizeof(rominfo_t) - 1;
|
||||
|
||||
/* compute CRC */
|
||||
uint32 crc = crc32(0, cart.rom, cart.romsize);
|
||||
@@ -678,13 +682,14 @@ int sms_cart_region_detect(void)
|
||||
}
|
||||
|
||||
/* game database */
|
||||
for (i=0; i<GAME_DATABASE_CNT; i++)
|
||||
do
|
||||
{
|
||||
if (crc == game_list[i].crc)
|
||||
{
|
||||
return game_list[i].region;
|
||||
}
|
||||
}
|
||||
while(i--);
|
||||
|
||||
/* Mark-III hardware */
|
||||
if (system_hw == SYSTEM_MARKIII)
|
||||
@@ -715,32 +720,40 @@ static void mapper_reset(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* reset internal RAM mapping */
|
||||
if (system_hw == SYSTEM_SG)
|
||||
/* reset $C000-$FFFF mapping */
|
||||
if (cart_rom.mapper == MAPPER_RAM_8K_EXT2)
|
||||
{
|
||||
/* 8k RAM extension adapter (type B) */
|
||||
if (cart_rom.mapper == MAPPER_RAM_8K_EXT2)
|
||||
for (i = 0x30; i < 0x40; i++)
|
||||
{
|
||||
/* $C000-$FFFF mapped to 8k external RAM (mirrored) */
|
||||
for (i = 0x30; i < 0x40; i++)
|
||||
{
|
||||
z80_readmap[i] = z80_writemap[i] = &work_ram[(i & 0x07) << 10];
|
||||
}
|
||||
z80_readmap[i] = z80_writemap[i] = &work_ram[(i & 0x07) << 10];
|
||||
}
|
||||
else
|
||||
}
|
||||
else if (system_hw == SYSTEM_SGII)
|
||||
{
|
||||
/* SG-1000 II clone hardware with 2KB internal RAM */
|
||||
for (i = 0x30; i < 0x40; i++)
|
||||
{
|
||||
/* $C000-$FFFF mapped to 2k mirrored RAM */
|
||||
for (i = 0x30; i < 0x40; i++)
|
||||
{
|
||||
z80_readmap[i] = z80_writemap[i] = &work_ram[(i & 0x01) << 10];
|
||||
}
|
||||
/* $C000-$FFFF mapped to 2k internal RAM (mirrored) */
|
||||
z80_readmap[i] = z80_writemap[i] = &work_ram[(i & 0x01) << 10];
|
||||
}
|
||||
}
|
||||
else if (system_hw == SYSTEM_SG)
|
||||
{
|
||||
/* default SG-1000 hardware has only 1KB internal RAM */
|
||||
for (i = 0x30; i < 0x40; i++)
|
||||
{
|
||||
/* $C000-$FFFF mapped to 1k internal RAM (mirrored) */
|
||||
z80_readmap[i] = z80_writemap[i] = &work_ram[0];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* $C000-$FFFF mapped to 8k internal RAM (mirrored) */
|
||||
/* Mark III / Master System / Game Gear hardware */
|
||||
for (i = 0x30; i < 0x40; i++)
|
||||
{
|
||||
/* $C000-$FFFF mapped to 8k internal RAM (mirrored) */
|
||||
z80_readmap[i] = z80_writemap[i] = &work_ram[(i & 0x07) << 10];
|
||||
}
|
||||
}
|
||||
@@ -761,54 +774,45 @@ static void mapper_reset(void)
|
||||
return;
|
||||
}
|
||||
|
||||
/* reset default $0000-$BFFF mapping */
|
||||
if (slot.mapper < MAPPER_SEGA)
|
||||
/* reset $0000-$BFFF mapping */
|
||||
for (i = 0x00; i < 0x30; i++)
|
||||
{
|
||||
/* $0000-$BFFF mapped to ROM (48k) */
|
||||
for (i = 0x00; i < 0x30; i++)
|
||||
{
|
||||
z80_readmap[i] = &slot.rom[i << 10];
|
||||
z80_writemap[i] = cart.rom + 0x510000; /* unused area */
|
||||
}
|
||||
|
||||
/* cartridge extra RAM enabled by default with 32K ROM */
|
||||
if (slot.pages <= 0x20)
|
||||
{
|
||||
/* $8000-$BFFF mapped to 8k external RAM (mirrored) */
|
||||
for (i = 0x20; i < 0x30; i++)
|
||||
{
|
||||
z80_readmap[i] = z80_writemap[i] = &work_ram[0x2000 + ((i & 0x07) << 10)];
|
||||
}
|
||||
}
|
||||
/* by default, $0000-$BFFF is mapped to cartridge ROM (first 48k) */
|
||||
z80_readmap[i] = &slot.rom[i << 10];
|
||||
z80_writemap[i] = cart.rom + 0x510000; /* unused area */
|
||||
}
|
||||
|
||||
/* reset cartridge hardware mapping */
|
||||
if (slot.mapper == MAPPER_RAM_8K_EXT1)
|
||||
{
|
||||
/* 8k RAM extension adapter (type A) */
|
||||
if (slot.mapper == MAPPER_RAM_8K_EXT1)
|
||||
for (i = 0x08; i < 0x10; i++)
|
||||
{
|
||||
/* $2000-$3FFF mapped to 8k external RAM */
|
||||
for (i = 0x08; i < 0x10; i++)
|
||||
{
|
||||
z80_readmap[i] = z80_writemap[i] = &work_ram[0x2000 + ((i & 0x07) << 10)];
|
||||
}
|
||||
z80_readmap[i] = z80_writemap[i] = &work_ram[0x2000 + ((i & 0x07) << 10)];
|
||||
}
|
||||
}
|
||||
else
|
||||
else if (slot.mapper == MAPPER_RAM_2K)
|
||||
{
|
||||
/* $0000-$BFFF mapped to ROM by default */
|
||||
for (i = 0x00; i < 0x30; i++)
|
||||
/* 2k on-board RAM (The Castle, Othello) */
|
||||
for (i = 0x20; i < 0x30; i++)
|
||||
{
|
||||
z80_readmap[i] = &slot.rom[i << 10];
|
||||
z80_writemap[i] = cart.rom + 0x510000; /* unused area */
|
||||
/* $8000-$BFFF mapped to 2k external RAM (mirrored) */
|
||||
z80_readmap[i] = z80_writemap[i] = &work_ram[0x2000 + ((i & 0x07) << 10)];
|
||||
}
|
||||
|
||||
/* reset default ROM paging */
|
||||
}
|
||||
else if (slot.mapper >= MAPPER_SEGA)
|
||||
{
|
||||
/* reset ROM paging hardware */
|
||||
if (slot.mapper & MAPPER_KOREA_8K)
|
||||
{
|
||||
/* 8k pages */
|
||||
mapper_8k_w(0,slot.fcr[0]);
|
||||
mapper_8k_w(1,slot.fcr[1]);
|
||||
mapper_8k_w(2,slot.fcr[2]);
|
||||
mapper_8k_w(3,slot.fcr[3]);
|
||||
|
||||
/* Nemesis special case */
|
||||
/* "Nemesis" mapper specific */
|
||||
if (slot.mapper == MAPPER_MSX_NEMESIS)
|
||||
{
|
||||
/* first 8k page is mapped to last 8k ROM bank */
|
||||
@@ -820,6 +824,7 @@ static void mapper_reset(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
/* 16k pages */
|
||||
mapper_16k_w(0,slot.fcr[0]);
|
||||
mapper_16k_w(1,slot.fcr[1]);
|
||||
mapper_16k_w(2,slot.fcr[2]);
|
||||
@@ -831,6 +836,7 @@ static void mapper_reset(void)
|
||||
switch (slot.mapper)
|
||||
{
|
||||
case MAPPER_NONE:
|
||||
case MAPPER_RAM_2K:
|
||||
case MAPPER_RAM_8K_EXT1:
|
||||
case MAPPER_RAM_8K_EXT2:
|
||||
z80_readmem = read_mapper_default;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Genesis Plus
|
||||
* SG-1000, Master System & Game Gear cartridge hardware support
|
||||
*
|
||||
* Copyright (C) 2007-2012 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
|
||||
@@ -1201,8 +1201,8 @@ void scd_reset(int hard)
|
||||
scd.dmna = 0;
|
||||
|
||||
/* H-INT default vector */
|
||||
*(uint16 *)(m68k.memory_map[0].base + 0x70) = 0x00FF;
|
||||
*(uint16 *)(m68k.memory_map[0].base + 0x72) = 0xFFFF;
|
||||
*(uint16 *)(m68k.memory_map[scd.cartridge.boot].base + 0x70) = 0x00FF;
|
||||
*(uint16 *)(m68k.memory_map[scd.cartridge.boot].base + 0x72) = 0xFFFF;
|
||||
|
||||
/* Power ON initial values (MAIN-CPU side) */
|
||||
scd.regs[0x00>>1].w = 0x0002;
|
||||
@@ -1405,7 +1405,7 @@ int scd_context_save(uint8 *state)
|
||||
save_param(&s68k.poll, sizeof(s68k.poll));
|
||||
|
||||
/* H-INT default vector */
|
||||
tmp16 = *(uint16 *)(m68k.memory_map[0].base + 0x72);
|
||||
tmp16 = *(uint16 *)(m68k.memory_map[scd.cartridge.boot].base + 0x72);
|
||||
save_param(&tmp16, 2);
|
||||
|
||||
/* SUB-CPU internal state */
|
||||
@@ -1606,7 +1606,7 @@ int scd_context_load(uint8 *state)
|
||||
|
||||
/* H-INT default vector */
|
||||
load_param(&tmp16, 2);
|
||||
*(uint16 *)(m68k.memory_map[0].base + 0x72) = tmp16;
|
||||
*(uint16 *)(m68k.memory_map[scd.cartridge.boot].base + 0x72) = tmp16;
|
||||
|
||||
/* SUB-CPU internal state */
|
||||
load_param(&s68k.cycles, sizeof(s68k.cycles));
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* Support for SG-1000, Mark-III, Master System, Game Gear, Mega Drive & Mega CD hardware
|
||||
*
|
||||
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code)
|
||||
* Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
@@ -196,7 +196,7 @@ void gen_init(void)
|
||||
break;
|
||||
}
|
||||
|
||||
/* Master SYstem hardware */
|
||||
/* Master System hardware */
|
||||
case SYSTEM_SMS:
|
||||
case SYSTEM_SMS2:
|
||||
{
|
||||
@@ -215,6 +215,7 @@ void gen_init(void)
|
||||
|
||||
/* SG-1000 hardware */
|
||||
case SYSTEM_SG:
|
||||
case SYSTEM_SGII:
|
||||
{
|
||||
z80_writeport = z80_sg_port_w;
|
||||
z80_readport = z80_sg_port_r;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* Support for SG-1000, Mark-III, Master System, Game Gear, Mega Drive & Mega CD hardware
|
||||
*
|
||||
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code)
|
||||
* Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/***************************************************************************************
|
||||
* Genesis Plus
|
||||
* 3-Buttons & 6-Buttons pad support
|
||||
* Support for J-CART & 4-Way Play adapters
|
||||
* 2-Buttons, 3-Buttons & 6-Buttons controller support
|
||||
* Additional support for J-Cart, 4-Way Play & homemade Master System multitap
|
||||
*
|
||||
* Copyright (C) 2007-2011 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
@@ -47,7 +47,13 @@ static struct
|
||||
uint8 Timeout;
|
||||
} gamepad[MAX_DEVICES];
|
||||
|
||||
static uint8 pad_index;
|
||||
static struct
|
||||
{
|
||||
uint8 Latch;
|
||||
uint8 Counter;
|
||||
} flipflop[2];
|
||||
|
||||
static uint8 latch;
|
||||
|
||||
|
||||
void gamepad_reset(int port)
|
||||
@@ -57,8 +63,12 @@ void gamepad_reset(int port)
|
||||
gamepad[port].Counter = 0;
|
||||
gamepad[port].Timeout = 0;
|
||||
|
||||
/* reset pad index (4-WayPlay) */
|
||||
pad_index = 0;
|
||||
/* reset 4-WayPlay latch */
|
||||
latch = 0;
|
||||
|
||||
/* reset Master System multitap flip-flop */
|
||||
flipflop[port>>2].Latch = 0;
|
||||
flipflop[port>>2].Counter = 0;
|
||||
}
|
||||
|
||||
void gamepad_refresh(int port)
|
||||
@@ -192,13 +202,15 @@ void gamepad_2_write(unsigned char data, unsigned char mask)
|
||||
|
||||
unsigned char wayplay_1_read(void)
|
||||
{
|
||||
if (pad_index < 4)
|
||||
/* check if TH on port B is HIGH */
|
||||
if (latch & 0x04)
|
||||
{
|
||||
return gamepad_read(pad_index);
|
||||
/* 4-WayPlay detection : xxxxx00 */
|
||||
return 0x7c;
|
||||
}
|
||||
|
||||
/* multitap detection */
|
||||
return 0x70;
|
||||
/* TR & TL on port B select controller # (0-3) */
|
||||
return gamepad_read(latch);
|
||||
}
|
||||
|
||||
unsigned char wayplay_2_read(void)
|
||||
@@ -208,18 +220,14 @@ unsigned char wayplay_2_read(void)
|
||||
|
||||
void wayplay_1_write(unsigned char data, unsigned char mask)
|
||||
{
|
||||
if (pad_index < 4)
|
||||
{
|
||||
gamepad_write(pad_index, data, mask);
|
||||
}
|
||||
/* TR & TL on port B select controller # (0-3) */
|
||||
gamepad_write(latch & 0x03, data, mask);
|
||||
}
|
||||
|
||||
void wayplay_2_write(unsigned char data, unsigned char mask)
|
||||
{
|
||||
if ((mask & 0x70) == 0x70)
|
||||
{
|
||||
pad_index = (data & 0x70) >> 4;
|
||||
}
|
||||
/* latch TH, TR & TL state on port B */
|
||||
latch = ((data & mask) >> 4) & 0x07;
|
||||
}
|
||||
|
||||
|
||||
@@ -239,3 +247,48 @@ void jcart_write(unsigned int address, unsigned int data)
|
||||
gamepad_write(6, (data & 1) << 6, 0x40);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
/* Master System multitap ports handler (original design by Furrtek) */
|
||||
/* cf. http://www.smspower.org/uploads/Homebrew/BOoM-SMS-sms4p_2.png */
|
||||
/*--------------------------------------------------------------------------*/
|
||||
unsigned char mastertap_1_read(void)
|
||||
{
|
||||
return gamepad_read(flipflop[0].Counter);
|
||||
}
|
||||
|
||||
unsigned char mastertap_2_read(void)
|
||||
{
|
||||
return gamepad_read(flipflop[1].Counter + 4);
|
||||
}
|
||||
|
||||
void mastertap_1_write(unsigned char data, unsigned char mask)
|
||||
{
|
||||
/* update bits set as output only */
|
||||
data = (flipflop[0].Latch & ~mask) | (data & mask);
|
||||
|
||||
/* check TH 1->0 transitions */
|
||||
if ((flipflop[0].Latch & 0x40) && !(data & 0x40))
|
||||
{
|
||||
flipflop[0].Counter = (flipflop[0].Counter + 1) & 0x03;
|
||||
}
|
||||
|
||||
/* update internal state */
|
||||
flipflop[0].Latch = data;
|
||||
}
|
||||
|
||||
void mastertap_2_write(unsigned char data, unsigned char mask)
|
||||
{
|
||||
/* update bits set as output only */
|
||||
data = (flipflop[1].Latch & ~mask) | (data & mask);
|
||||
|
||||
/* check TH=1 to TH=0 transition */
|
||||
if ((flipflop[1].Latch & 0x40) && !(data & 0x40))
|
||||
{
|
||||
flipflop[1].Counter = (flipflop[1].Counter + 1) & 0x03;
|
||||
}
|
||||
|
||||
/* update internal state */
|
||||
flipflop[1].Latch = data;
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/***************************************************************************************
|
||||
* Genesis Plus
|
||||
* 3-Buttons & 6-Buttons pad support
|
||||
* Support for J-CART & 4-Way Play adapters
|
||||
* 2-Buttons, 3-Buttons & 6-Buttons controller support
|
||||
* Additional support for J-Cart, 4-Way Play & homemade Master System multitap
|
||||
*
|
||||
* Copyright (C) 2007-2011 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
@@ -53,5 +53,9 @@ extern void wayplay_1_write(unsigned char data, unsigned char mask);
|
||||
extern void wayplay_2_write(unsigned char data, unsigned char mask);
|
||||
extern unsigned int jcart_read(unsigned int address);
|
||||
extern void jcart_write(unsigned int address, unsigned int data);
|
||||
extern unsigned char mastertap_1_read(void);
|
||||
extern unsigned char mastertap_2_read(void);
|
||||
extern void mastertap_1_write(unsigned char data, unsigned char mask);
|
||||
extern void mastertap_2_write(unsigned char data, unsigned char mask);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Input peripherals support
|
||||
*
|
||||
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code)
|
||||
* Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
@@ -54,7 +54,7 @@ int old_system[2] = {-1,-1};
|
||||
|
||||
void input_init(void)
|
||||
{
|
||||
int i;
|
||||
int i, padtype;
|
||||
int player = 0;
|
||||
|
||||
for (i=0; i<MAX_DEVICES; i++)
|
||||
@@ -77,18 +77,31 @@ void input_init(void)
|
||||
return;
|
||||
}
|
||||
|
||||
/* default gamepad type */
|
||||
if (romtype & SYSTEM_MD)
|
||||
{
|
||||
/* 3-buttons or 6-buttons */
|
||||
padtype = (rominfo.peripherals & 2) ? DEVICE_PAD6B : DEVICE_PAD3B;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* 2-buttons */
|
||||
padtype = DEVICE_PAD2B;
|
||||
}
|
||||
|
||||
switch (input.system[0])
|
||||
{
|
||||
case SYSTEM_MS_GAMEPAD:
|
||||
case SYSTEM_GAMEPAD:
|
||||
{
|
||||
input.dev[0] = DEVICE_PAD2B;
|
||||
player++;
|
||||
break;
|
||||
}
|
||||
|
||||
case SYSTEM_MD_GAMEPAD:
|
||||
{
|
||||
input.dev[0] = config.input[player].padtype;
|
||||
/* 2-buttons, 3-buttons or 6-buttons control pad */
|
||||
if (config.input[player].padtype != (DEVICE_PAD2B | DEVICE_PAD3B | DEVICE_PAD6B))
|
||||
{
|
||||
input.dev[0] = config.input[player].padtype;
|
||||
}
|
||||
else
|
||||
{
|
||||
input.dev[0] = padtype;
|
||||
}
|
||||
player++;
|
||||
break;
|
||||
}
|
||||
@@ -120,7 +133,15 @@ void input_init(void)
|
||||
{
|
||||
if (player < MAX_INPUTS)
|
||||
{
|
||||
input.dev[i] = config.input[player].padtype;
|
||||
/* only allow 3-buttons or 6-buttons control pad */
|
||||
if (config.input[player].padtype != (DEVICE_PAD2B | DEVICE_PAD3B | DEVICE_PAD6B))
|
||||
{
|
||||
input.dev[i] = config.input[player].padtype & DEVICE_PAD6B;
|
||||
}
|
||||
else
|
||||
{
|
||||
input.dev[i] = padtype & DEVICE_PAD6B;
|
||||
}
|
||||
player++;
|
||||
}
|
||||
}
|
||||
@@ -133,7 +154,15 @@ void input_init(void)
|
||||
{
|
||||
if (player < MAX_INPUTS)
|
||||
{
|
||||
input.dev[i] = config.input[player].padtype;
|
||||
/* only allow 3-buttons or 6-buttons control pad */
|
||||
if (config.input[player].padtype != (DEVICE_PAD2B | DEVICE_PAD3B | DEVICE_PAD6B))
|
||||
{
|
||||
input.dev[i] = config.input[player].padtype & DEVICE_PAD6B;
|
||||
}
|
||||
else
|
||||
{
|
||||
input.dev[i] = padtype & DEVICE_PAD6B;
|
||||
}
|
||||
player++;
|
||||
}
|
||||
}
|
||||
@@ -141,6 +170,19 @@ void input_init(void)
|
||||
break;
|
||||
}
|
||||
|
||||
case SYSTEM_MASTERTAP:
|
||||
{
|
||||
for (i=0; i<4; i++)
|
||||
{
|
||||
if (player < MAX_INPUTS)
|
||||
{
|
||||
input.dev[i] = DEVICE_PAD2B;
|
||||
player++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case SYSTEM_LIGHTPHASER:
|
||||
{
|
||||
input.dev[0] = DEVICE_LIGHTGUN;
|
||||
@@ -170,16 +212,16 @@ void input_init(void)
|
||||
|
||||
switch (input.system[1])
|
||||
{
|
||||
case SYSTEM_MS_GAMEPAD:
|
||||
case SYSTEM_GAMEPAD:
|
||||
{
|
||||
input.dev[4] = DEVICE_PAD2B;
|
||||
player++;
|
||||
break;
|
||||
}
|
||||
|
||||
case SYSTEM_MD_GAMEPAD:
|
||||
{
|
||||
input.dev[4] = config.input[player].padtype;
|
||||
if (config.input[player].padtype != (DEVICE_PAD2B | DEVICE_PAD3B | DEVICE_PAD6B))
|
||||
{
|
||||
input.dev[4] = config.input[player].padtype;
|
||||
}
|
||||
else
|
||||
{
|
||||
input.dev[4] = padtype;
|
||||
}
|
||||
player++;
|
||||
break;
|
||||
}
|
||||
@@ -231,7 +273,15 @@ void input_init(void)
|
||||
{
|
||||
if (player < MAX_INPUTS)
|
||||
{
|
||||
input.dev[i] = config.input[player].padtype;
|
||||
/* only allow 3-buttons or 6-buttons control pad */
|
||||
if (config.input[player].padtype != (DEVICE_PAD2B | DEVICE_PAD3B | DEVICE_PAD6B))
|
||||
{
|
||||
input.dev[i] = config.input[player].padtype & DEVICE_PAD6B;
|
||||
}
|
||||
else
|
||||
{
|
||||
input.dev[i] = padtype & DEVICE_PAD6B;
|
||||
}
|
||||
player++;
|
||||
}
|
||||
}
|
||||
@@ -239,6 +289,19 @@ void input_init(void)
|
||||
break;
|
||||
}
|
||||
|
||||
case SYSTEM_MASTERTAP:
|
||||
{
|
||||
for (i=4; i<8; i++)
|
||||
{
|
||||
if (player < MAX_INPUTS)
|
||||
{
|
||||
input.dev[i] = DEVICE_PAD2B;
|
||||
player++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case SYSTEM_LIGHTPHASER:
|
||||
{
|
||||
input.dev[4] = DEVICE_LIGHTGUN;
|
||||
@@ -269,7 +332,15 @@ void input_init(void)
|
||||
{
|
||||
if (player < MAX_INPUTS)
|
||||
{
|
||||
input.dev[i] = config.input[player].padtype;
|
||||
/* only allow 3-buttons or 6-buttons control pad */
|
||||
if (config.input[player].padtype != (DEVICE_PAD2B | DEVICE_PAD3B | DEVICE_PAD6B))
|
||||
{
|
||||
input.dev[i] = config.input[player].padtype & DEVICE_PAD6B;
|
||||
}
|
||||
else
|
||||
{
|
||||
input.dev[i] = padtype & DEVICE_PAD6B;
|
||||
}
|
||||
player ++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Input peripherals support
|
||||
*
|
||||
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code)
|
||||
* Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
@@ -45,16 +45,16 @@
|
||||
|
||||
/* Ports configuration */
|
||||
#define NO_SYSTEM (0) /* unconnected port*/
|
||||
#define SYSTEM_MD_GAMEPAD (1) /* single 3-buttons or 6-buttons Control Pad */
|
||||
#define SYSTEM_GAMEPAD (1) /* 2-buttons, 3-buttons or 6-buttons Control Pad */
|
||||
#define SYSTEM_MOUSE (2) /* Sega Mouse */
|
||||
#define SYSTEM_MENACER (3) /* Sega Menacer (port B only) */
|
||||
#define SYSTEM_JUSTIFIER (4) /* Konami Justifiers (port B only) */
|
||||
#define SYSTEM_XE_A1P (5) /* XE-A1P analog controller (port A only) */
|
||||
#define SYSTEM_ACTIVATOR (6) /* Sega Activator */
|
||||
#define SYSTEM_MS_GAMEPAD (7) /* single 2-buttons Control Pad (Master System) */
|
||||
#define SYSTEM_LIGHTPHASER (8) /* Sega Light Phaser (Master System) */
|
||||
#define SYSTEM_PADDLE (9) /* Sega Paddle Control (Master System) */
|
||||
#define SYSTEM_SPORTSPAD (10) /* Sega Sports Pad (Master System) */
|
||||
#define SYSTEM_LIGHTPHASER (7) /* Sega Light Phaser (Master System) */
|
||||
#define SYSTEM_PADDLE (8) /* Sega Paddle Control (Master System) */
|
||||
#define SYSTEM_SPORTSPAD (9) /* Sega Sports Pad (Master System) */
|
||||
#define SYSTEM_MASTERTAP (10) /* Multi Tap -- Master System homemade */
|
||||
#define SYSTEM_TEAMPLAYER (11) /* Multi Tap -- Sega TeamPlayer */
|
||||
#define SYSTEM_WAYPLAY (12) /* Multi Tap -- EA 4-Way Play (use both ports) */
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Genesis Plus
|
||||
* Team Player support
|
||||
*
|
||||
* Copyright (C) 2007-2011 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
@@ -87,18 +87,20 @@ INLINE unsigned int teamplayer_read(int port)
|
||||
/* acquisition sequence */
|
||||
switch (counter)
|
||||
{
|
||||
case 0: /* initial state: TH = 1, TR = 1 -> RLDU = 0011 */
|
||||
case 0: /* initial state: xxx0011 */
|
||||
{
|
||||
return 0x73;
|
||||
/* TL should match TR */
|
||||
return ((teamplayer[port].State & 0x20) >> 1) | 0x03;
|
||||
}
|
||||
|
||||
case 1: /* start request: TH = 0, TR = 1 -> RLDU = 1111 */
|
||||
case 1: /* start request: xxx1111 */
|
||||
{
|
||||
return 0x3F;
|
||||
/* TL should match TR */
|
||||
return ((teamplayer[port].State & 0x20) >> 1) | 0x0F;
|
||||
}
|
||||
|
||||
case 2:
|
||||
case 3: /* ack request: TH=0, TR=0/1 -> RLDU = 0000 */
|
||||
case 3: /* ack request: xxx0000 */
|
||||
{
|
||||
/* TL should match TR */
|
||||
return ((teamplayer[port].State & 0x20) >> 1);
|
||||
@@ -107,7 +109,7 @@ INLINE unsigned int teamplayer_read(int port)
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 7: /* PAD type */
|
||||
case 7: /* PAD type: xxx0000 (3B), xxx0001 (6B) or xxx1111 (NC)*/
|
||||
{
|
||||
unsigned int retval = input.dev[(port << 2) + (counter - 4)];
|
||||
|
||||
@@ -115,7 +117,7 @@ INLINE unsigned int teamplayer_read(int port)
|
||||
return (((teamplayer[port].State & 0x20) >> 1) | retval);
|
||||
}
|
||||
|
||||
default: /* PAD status */
|
||||
default: /* PAD status: xxxRLDU -> xxxSACB -> xxxMXYZ */
|
||||
{
|
||||
unsigned int retval = 0x0F;
|
||||
|
||||
@@ -136,23 +138,22 @@ INLINE void teamplayer_write(int port, unsigned char data, unsigned char mask)
|
||||
/* update bits set as output only */
|
||||
unsigned int state = (teamplayer[port].State & ~mask) | (data & mask);
|
||||
|
||||
/* TH & TR handshaking */
|
||||
if ((teamplayer[port].State ^ state) & 0x60)
|
||||
/* check if TH is HIGH */
|
||||
if (state & 0x40)
|
||||
{
|
||||
if (state & 0x40)
|
||||
{
|
||||
/* TH high -> reset counter */
|
||||
teamplayer[port].Counter = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* increment counter */
|
||||
teamplayer[port].Counter++;
|
||||
}
|
||||
|
||||
/* update internal state */
|
||||
teamplayer[port].State = state;
|
||||
/* reset counter */
|
||||
teamplayer[port].Counter = 0;
|
||||
}
|
||||
|
||||
/* TH & TR handshaking */
|
||||
else if ((teamplayer[port].State ^ state) & 0x60)
|
||||
{
|
||||
/* increment counter */
|
||||
teamplayer[port].Counter++;
|
||||
}
|
||||
|
||||
/* update internal state */
|
||||
teamplayer[port].State = state;
|
||||
}
|
||||
|
||||
unsigned char teamplayer_1_read(void)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Genesis Plus
|
||||
* Team Player support
|
||||
*
|
||||
* Copyright (C) 2007-2011 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
|
||||
+19
-19
@@ -5,7 +5,7 @@
|
||||
* Support for Master System (315-5216, 315-5237 & 315-5297), Game Gear & Mega Drive I/O chips
|
||||
*
|
||||
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code)
|
||||
* Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
@@ -80,16 +80,9 @@ void io_init(void)
|
||||
/* Initialize IO Ports handlers & connected peripherals */
|
||||
switch (input.system[0])
|
||||
{
|
||||
case SYSTEM_MS_GAMEPAD:
|
||||
case SYSTEM_GAMEPAD:
|
||||
{
|
||||
port[0].data_w = dummy_write;
|
||||
port[0].data_r = gamepad_1_read;
|
||||
break;
|
||||
}
|
||||
|
||||
case SYSTEM_MD_GAMEPAD:
|
||||
{
|
||||
port[0].data_w = gamepad_1_write;
|
||||
port[0].data_w = (input.dev[0] == DEVICE_PAD2B) ? dummy_write : gamepad_1_write;
|
||||
port[0].data_r = gamepad_1_read;
|
||||
break;
|
||||
}
|
||||
@@ -129,6 +122,13 @@ void io_init(void)
|
||||
break;
|
||||
}
|
||||
|
||||
case SYSTEM_MASTERTAP:
|
||||
{
|
||||
port[0].data_w = mastertap_1_write;
|
||||
port[0].data_r = mastertap_1_read;
|
||||
break;
|
||||
}
|
||||
|
||||
case SYSTEM_LIGHTPHASER:
|
||||
{
|
||||
port[0].data_w = dummy_write;
|
||||
@@ -160,16 +160,9 @@ void io_init(void)
|
||||
|
||||
switch (input.system[1])
|
||||
{
|
||||
case SYSTEM_MS_GAMEPAD:
|
||||
case SYSTEM_GAMEPAD:
|
||||
{
|
||||
port[1].data_w = dummy_write;
|
||||
port[1].data_r = gamepad_2_read;
|
||||
break;
|
||||
}
|
||||
|
||||
case SYSTEM_MD_GAMEPAD:
|
||||
{
|
||||
port[1].data_w = gamepad_2_write;
|
||||
port[1].data_w = (input.dev[4] == DEVICE_PAD2B) ? dummy_write : gamepad_2_write;
|
||||
port[1].data_r = gamepad_2_read;
|
||||
break;
|
||||
}
|
||||
@@ -223,6 +216,13 @@ void io_init(void)
|
||||
break;
|
||||
}
|
||||
|
||||
case SYSTEM_MASTERTAP:
|
||||
{
|
||||
port[1].data_w = mastertap_2_write;
|
||||
port[1].data_r = mastertap_2_read;
|
||||
break;
|
||||
}
|
||||
|
||||
case SYSTEM_LIGHTPHASER:
|
||||
{
|
||||
port[1].data_w = dummy_write;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* Support for Master System (315-5216, 315-5237 & 315-5297), Game Gear & Mega Drive I/O chips
|
||||
*
|
||||
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code)
|
||||
* Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
|
||||
+15
-15
@@ -3,7 +3,7 @@
|
||||
* ROM Loading Support
|
||||
*
|
||||
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code)
|
||||
* Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
@@ -682,9 +682,6 @@ int load_rom(char *filename)
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Save auto-detected system hardware */
|
||||
romtype = system_hw;
|
||||
|
||||
/* PICO ROM */
|
||||
if (strstr(rominfo.consoletype, "SEGA PICO") != NULL)
|
||||
{
|
||||
@@ -692,8 +689,11 @@ int load_rom(char *filename)
|
||||
system_hw = SYSTEM_PICO;
|
||||
}
|
||||
|
||||
/* Save auto-detected system hardware */
|
||||
romtype = system_hw;
|
||||
|
||||
/* CD BOOTROM */
|
||||
else if (strstr(rominfo.ROMType, "BR") != NULL)
|
||||
if (strstr(rominfo.ROMType, "BR") != NULL)
|
||||
{
|
||||
/* enable CD hardware */
|
||||
system_hw = SYSTEM_MCD;
|
||||
@@ -717,7 +717,7 @@ int load_rom(char *filename)
|
||||
(strstr(rominfo.product,"T-5740") != NULL))
|
||||
{
|
||||
/* check if console hardware is set to AUTO */
|
||||
if (config.system == 0x00)
|
||||
if (!config.system)
|
||||
{
|
||||
/* auto-enable CD hardware */
|
||||
system_hw = SYSTEM_MCD;
|
||||
@@ -790,7 +790,7 @@ int load_rom(char *filename)
|
||||
}
|
||||
|
||||
/* force MENACER configuration */
|
||||
input.system[0] = SYSTEM_MD_GAMEPAD;
|
||||
input.system[0] = SYSTEM_GAMEPAD;
|
||||
input.system[1] = SYSTEM_MENACER;
|
||||
input.x_offset = 82;
|
||||
input.y_offset = 0;
|
||||
@@ -808,7 +808,7 @@ int load_rom(char *filename)
|
||||
}
|
||||
|
||||
/* force MENACER configuration */
|
||||
input.system[0] = SYSTEM_MD_GAMEPAD;
|
||||
input.system[0] = SYSTEM_GAMEPAD;
|
||||
input.system[1] = SYSTEM_MENACER;
|
||||
input.x_offset = 133;
|
||||
input.y_offset = -8;
|
||||
@@ -826,7 +826,7 @@ int load_rom(char *filename)
|
||||
}
|
||||
|
||||
/* force MENACER configuration */
|
||||
input.system[0] = SYSTEM_MD_GAMEPAD;
|
||||
input.system[0] = SYSTEM_GAMEPAD;
|
||||
input.system[1] = SYSTEM_MENACER;
|
||||
input.x_offset = 68;
|
||||
input.y_offset = -24;
|
||||
@@ -844,7 +844,7 @@ int load_rom(char *filename)
|
||||
}
|
||||
|
||||
/* force MENACER configuration */
|
||||
input.system[0] = SYSTEM_MD_GAMEPAD;
|
||||
input.system[0] = SYSTEM_GAMEPAD;
|
||||
input.system[1] = SYSTEM_MENACER;
|
||||
input.x_offset = 64;
|
||||
input.y_offset = -8;
|
||||
@@ -862,7 +862,7 @@ int load_rom(char *filename)
|
||||
}
|
||||
|
||||
/* force MENACER configuration */
|
||||
input.system[0] = SYSTEM_MD_GAMEPAD;
|
||||
input.system[0] = SYSTEM_GAMEPAD;
|
||||
input.system[1] = SYSTEM_MENACER;
|
||||
input.x_offset = 61;
|
||||
input.y_offset = 0;
|
||||
@@ -880,7 +880,7 @@ int load_rom(char *filename)
|
||||
}
|
||||
|
||||
/* force MENACER configuration */
|
||||
input.system[0] = SYSTEM_MD_GAMEPAD;
|
||||
input.system[0] = SYSTEM_GAMEPAD;
|
||||
input.system[1] = SYSTEM_MENACER;
|
||||
input.x_offset = 70;
|
||||
input.y_offset = 18;
|
||||
@@ -898,7 +898,7 @@ int load_rom(char *filename)
|
||||
}
|
||||
|
||||
/* force MENACER configuration */
|
||||
input.system[0] = SYSTEM_MD_GAMEPAD;
|
||||
input.system[0] = SYSTEM_GAMEPAD;
|
||||
input.system[1] = SYSTEM_MENACER;
|
||||
input.x_offset = 49;
|
||||
input.y_offset = 0;
|
||||
@@ -916,7 +916,7 @@ int load_rom(char *filename)
|
||||
}
|
||||
|
||||
/* force MENACER configuration */
|
||||
input.system[0] = SYSTEM_MD_GAMEPAD;
|
||||
input.system[0] = SYSTEM_GAMEPAD;
|
||||
input.system[1] = SYSTEM_MENACER;
|
||||
input.x_offset = 60;
|
||||
input.y_offset = 30;
|
||||
@@ -935,7 +935,7 @@ int load_rom(char *filename)
|
||||
}
|
||||
|
||||
/* force JUSTIFIER configuration */
|
||||
input.system[0] = SYSTEM_MD_GAMEPAD;
|
||||
input.system[0] = SYSTEM_GAMEPAD;
|
||||
input.system[1] = SYSTEM_JUSTIFIER;
|
||||
input.x_offset = (strstr(rominfo.international,"GUN FIGHTERS") != NULL) ? 24 : 0;
|
||||
input.y_offset = 0;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* ROM Loading Support
|
||||
*
|
||||
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code)
|
||||
* Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
|
||||
@@ -482,7 +482,7 @@ unsigned int ctrl_io_read_word(unsigned int address)
|
||||
/* H-INT vector (word access only ?) */
|
||||
if (index == 0x06)
|
||||
{
|
||||
return *(uint16 *)(m68k.memory_map[0].base + 0x72);
|
||||
return *(uint16 *)(m68k.memory_map[scd.cartridge.boot].base + 0x72);
|
||||
}
|
||||
|
||||
/* Stopwatch counter (word read access only ?) */
|
||||
@@ -940,7 +940,7 @@ void ctrl_io_write_word(unsigned int address, unsigned int data)
|
||||
|
||||
case 0x06: /* H-INT vector (word access only ?) */
|
||||
{
|
||||
*(uint16 *)(m68k.memory_map[0].base + 0x72) = data;
|
||||
*(uint16 *)(m68k.memory_map[scd.cartridge.boot].base + 0x72) = data;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -948,7 +948,7 @@ void ctrl_io_write_word(unsigned int address, unsigned int data)
|
||||
{
|
||||
m68k_poll_sync(1<<0x0e);
|
||||
|
||||
/* D8-D15 ignored -> only MAIN-CPU flags are updated (Mortal Kombat) */
|
||||
/* D8-D15 ignored -> only MAIN-CPU flags are updated (Mortal Kombat) */
|
||||
scd.regs[0x0e>>1].byte.h = data & 0xff;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* Support for SG-1000, Mark-III, Master System, Game Gear & Mega Drive ports access
|
||||
*
|
||||
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code)
|
||||
* Copyright (C) 2007-2011 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
@@ -430,6 +430,13 @@ void z80_ms_port_w(unsigned int port, unsigned char data)
|
||||
case 0x00:
|
||||
case 0x01:
|
||||
{
|
||||
/* full address range is decoded by 315-5297 I/O chip (fixes Super Tetris / Power Boggle Boggle) */
|
||||
if ((region_code == REGION_JAPAN_NTSC) && ((port & 0xFE) != 0x3E))
|
||||
{
|
||||
z80_unused_port_w(port & 0xFF, data);
|
||||
return;
|
||||
}
|
||||
|
||||
io_z80_write(port & 1, data, Z80.cycles + SMS_CYCLE_OFFSET);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* Support for SG-1000, Mark-III, Master System, Game Gear & Mega Drive ports access
|
||||
*
|
||||
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code)
|
||||
* Copyright (C) 2007-2011 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Genesis Plus
|
||||
* Savestate support
|
||||
*
|
||||
* Copyright (C) 2007-2012 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
@@ -121,7 +121,7 @@ int state_load(unsigned char *state)
|
||||
}
|
||||
else
|
||||
{
|
||||
SN76489_Init(snd.blips[0][0], snd.blips[0][1], (system_hw < SYSTEM_MARKIII) ? SN_DISCRETE : SN_INTEGRATED);
|
||||
SN76489_Init(snd.blips[0][0], snd.blips[0][1], (system_hw == SYSTEM_SG) ? SN_DISCRETE : SN_INTEGRATED);
|
||||
SN76489_Config(0, config.psg_preamp, config.psgBoostNoise, io_reg[6]);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Genesis Plus
|
||||
* Savestate support
|
||||
*
|
||||
* Copyright (C) 2007-2012 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* Support for "Genesis", "Genesis + CD" & "Master System" modes
|
||||
*
|
||||
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code)
|
||||
* Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
@@ -111,7 +111,7 @@ int audio_init(int samplerate, double framerate)
|
||||
blip_set_rates(snd.blips[0][1], mclk, samplerate);
|
||||
|
||||
/* Initialize PSG core */
|
||||
SN76489_Init(snd.blips[0][0], snd.blips[0][1], (system_hw < SYSTEM_MARKIII) ? SN_DISCRETE : SN_INTEGRATED);
|
||||
SN76489_Init(snd.blips[0][0], snd.blips[0][1], (system_hw == SYSTEM_SG) ? SN_DISCRETE : SN_INTEGRATED);
|
||||
|
||||
/* Mega CD sound hardware */
|
||||
if (system_hw == SYSTEM_MCD)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* Support for "Genesis", "Genesis + CD" & "Master System" modes
|
||||
*
|
||||
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code)
|
||||
* Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
@@ -46,7 +46,8 @@
|
||||
|
||||
/* Supported hardware models */
|
||||
#define SYSTEM_SG 0x10
|
||||
#define SYSTEM_MARKIII 0x11
|
||||
#define SYSTEM_SGII 0x11
|
||||
#define SYSTEM_MARKIII 0x12
|
||||
#define SYSTEM_SMS 0x20
|
||||
#define SYSTEM_SMS2 0x21
|
||||
#define SYSTEM_GG 0x40
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
#ifndef _V_BLOCK_
|
||||
#define _V_BLOCK_
|
||||
|
||||
//extern void _vorbis_block_ripcord(vorbis_block *vb);
|
||||
//extern void *_vorbis_block_alloc(vorbis_block *vb,long bytes);
|
||||
extern void _vorbis_block_ripcord(vorbis_block *vb);
|
||||
extern void *_vorbis_block_alloc(vorbis_block *vb,long bytes);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#include "asm_arm.h"
|
||||
#include <stdlib.h> /* for abs() */
|
||||
|
||||
#ifdef GEKKO
|
||||
#if defined(GEKKO) && !defined(__LIBRETRO__)
|
||||
#include <gctypes.h>
|
||||
#endif
|
||||
|
||||
@@ -37,16 +37,6 @@
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#if BYTE_ORDER==LITTLE_ENDIAN
|
||||
union magic {
|
||||
struct {
|
||||
ogg_int32_t lo;
|
||||
ogg_int32_t hi;
|
||||
} halves;
|
||||
ogg_int64_t whole;
|
||||
};
|
||||
#endif
|
||||
|
||||
#if BYTE_ORDER==BIG_ENDIAN
|
||||
union magic {
|
||||
struct {
|
||||
@@ -55,6 +45,14 @@ union magic {
|
||||
} halves;
|
||||
ogg_int64_t whole;
|
||||
};
|
||||
#elif BYTE_ORDER==LITTLE_ENDIAN
|
||||
union magic {
|
||||
struct {
|
||||
ogg_int32_t lo;
|
||||
ogg_int32_t hi;
|
||||
} halves;
|
||||
ogg_int64_t whole;
|
||||
};
|
||||
#endif
|
||||
|
||||
STIN ogg_int32_t MULT32(ogg_int32_t x, ogg_int32_t y) {
|
||||
|
||||
@@ -41,9 +41,11 @@
|
||||
# define rint(x) (floor((x)+0.5f))
|
||||
# define NO_FLOAT_MATH_LIB
|
||||
# define FAST_HYPOT(a, b) sqrt((a)*(a) + (b)*(b))
|
||||
#ifndef _XBOX360
|
||||
# define LITTLE_ENDIAN 1
|
||||
# define BYTE_ORDER LITTLE_ENDIAN
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_ALLOCA_H
|
||||
# include <alloca.h>
|
||||
|
||||
@@ -32,7 +32,11 @@
|
||||
#define _ogg_realloc realloc
|
||||
#define _ogg_free free
|
||||
|
||||
#if defined(_WIN32) && defined(__LIBRETRO__)
|
||||
#include <stdint.h>
|
||||
#else
|
||||
#include <inttypes.h>
|
||||
#endif
|
||||
|
||||
typedef int64_t ogg_int64_t;
|
||||
typedef int32_t ogg_int32_t;
|
||||
|
||||
+47
-17
@@ -2,10 +2,10 @@
|
||||
* Genesis Plus
|
||||
* Video Display Processor (68k & Z80 CPU interface)
|
||||
*
|
||||
* Support for SG-1000, Master System (315-5124 & 315-5246), Game Gear & Mega Drive VDP
|
||||
* Support for SG-1000 (TMS99xx & 315-5066), Master System (315-5124 & 315-5246), Game Gear & Mega Drive VDP
|
||||
*
|
||||
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code)
|
||||
* Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
@@ -322,8 +322,9 @@ void vdp_reset(void)
|
||||
switch (system_hw)
|
||||
{
|
||||
case SYSTEM_SG:
|
||||
case SYSTEM_SGII:
|
||||
{
|
||||
/* SG-1000 VDP (TMS99xx) */
|
||||
/* SG-1000 (TMS99xx) or SG-1000 II (315-5066) VDP */
|
||||
vdp_z80_data_w = vdp_z80_data_w_sg;
|
||||
vdp_z80_data_r = vdp_z80_data_r_m4;
|
||||
break;
|
||||
@@ -358,19 +359,23 @@ void vdp_reset(void)
|
||||
}
|
||||
|
||||
/* SG-1000 specific */
|
||||
if (system_hw == SYSTEM_SG)
|
||||
if (system_hw & SYSTEM_SG)
|
||||
{
|
||||
/* 16k address decoding by default (Magical Kid Wiz) */
|
||||
vdp_reg_w(1, 0x80, 0);
|
||||
|
||||
/* no H-INT on TMS99xx */
|
||||
vdp_reg_w(10, 0xFF, 0);
|
||||
}
|
||||
|
||||
/* Game Gear specific */
|
||||
else if (system_hw & SYSTEM_GG)
|
||||
{
|
||||
/* H-INT disabled on startup (fixes Terminator 2: Judgement Day) */
|
||||
vdp_reg_w(10, 0xFF, 0);
|
||||
}
|
||||
|
||||
/* Master System specific */
|
||||
else if ((system_hw & SYSTEM_SMS) && (!(config.bios & 1) || !(system_bios & SYSTEM_SMS)))
|
||||
{
|
||||
/* force registers initialization (only if Master System BIOS is disabled or not loaded) */
|
||||
/* force registers initialization (normally done by BOOT ROM on all Master System models) */
|
||||
vdp_reg_w(0 , 0x36, 0);
|
||||
vdp_reg_w(1 , 0x80, 0);
|
||||
vdp_reg_w(2 , 0xFF, 0);
|
||||
@@ -389,7 +394,7 @@ void vdp_reset(void)
|
||||
/* Mega Drive specific */
|
||||
else if (((system_hw == SYSTEM_MD) || (system_hw == SYSTEM_MCD)) && (config.bios & 1) && !(system_bios & SYSTEM_MD))
|
||||
{
|
||||
/* force registers initialization (only if TMSS model is emulated and BOOT ROM is not loaded) */
|
||||
/* force registers initialization (normally done by BOOT ROM, only on Mega Drive model with TMSS) */
|
||||
vdp_reg_w(0 , 0x04, 0);
|
||||
vdp_reg_w(1 , 0x04, 0);
|
||||
vdp_reg_w(10, 0xFF, 0);
|
||||
@@ -445,7 +450,7 @@ int vdp_context_load(uint8 *state, uint8 version)
|
||||
/* restore VDP registers */
|
||||
if (system_hw < SYSTEM_MD)
|
||||
{
|
||||
if (system_hw > SYSTEM_SG)
|
||||
if (system_hw >= SYSTEM_MARKIII)
|
||||
{
|
||||
for (i=0;i<0x10;i++)
|
||||
{
|
||||
@@ -1632,6 +1637,37 @@ static void vdp_reg_w(unsigned int r, unsigned int d, unsigned int cycles)
|
||||
r = d ^ reg[1];
|
||||
reg[1] = d;
|
||||
|
||||
/* 4K/16K address decoding */
|
||||
if (r & 0x80)
|
||||
{
|
||||
/* original TMS99xx hardware only (fixes Magical Kid Wiz) */
|
||||
if (system_hw == SYSTEM_SG)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* make temporary copy of 16KB VRAM */
|
||||
memcpy(vram + 0x4000, vram, 0x4000);
|
||||
|
||||
/* re-arrange 16KB VRAM address decoding */
|
||||
if (d & 0x80)
|
||||
{
|
||||
/* 4K->16K address decoding */
|
||||
for (i=0; i<0x4000; i+=2)
|
||||
{
|
||||
*(uint16 *)(vram + ((i & 0x203F) | ((i << 6) & 0x1000) | ((i >> 1) & 0xFC0))) = *(uint16 *)(vram + 0x4000 + i);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* 16K->4K address decoding */
|
||||
for (i=0; i<0x4000; i+=2)
|
||||
{
|
||||
*(uint16 *)(vram + ((i & 0x203F) | ((i >> 6) & 0x40) | ((i << 1) & 0x1F80))) = *(uint16 *)(vram + 0x4000 + i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Display status (modified during active display) */
|
||||
if ((r & 0x40) && (v_counter < bitmap.viewport.h))
|
||||
{
|
||||
@@ -2762,7 +2798,7 @@ static unsigned int vdp_z80_data_r_m4(void)
|
||||
/* Process next read */
|
||||
fifo[0] = vram[addr & 0x3FFF];
|
||||
|
||||
/* Increment address register (TODO: check how address is incremented in Mode 4) */
|
||||
/* Increment address register (TODO: check how address is incremented with Mega Drive VDP in Mode 4) */
|
||||
addr += (reg[15] + 1);
|
||||
|
||||
/* Return data */
|
||||
@@ -2978,12 +3014,6 @@ static void vdp_z80_data_w_sg(unsigned int data)
|
||||
/* Clear pending flag */
|
||||
pending = 0;
|
||||
|
||||
/* 4K address decoding (cf. tms9918a.txt) */
|
||||
if (!(reg[1] & 0x80))
|
||||
{
|
||||
index = (index & 0x203F) | ((index >> 6) & 0x40) | ((index << 1) & 0x1F80);
|
||||
}
|
||||
|
||||
/* VRAM write */
|
||||
vram[index] = data;
|
||||
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
* Genesis Plus
|
||||
* Video Display Processor (68k & Z80 CPU interface)
|
||||
*
|
||||
* Support for SG-1000, Master System (315-5124 & 315-5246), Game Gear & Mega Drive VDP
|
||||
* Support for SG-1000 (TMS99xx & 315-5066), Master System (315-5124 & 315-5246), Game Gear & Mega Drive VDP
|
||||
*
|
||||
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code)
|
||||
* Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/***************************************************************************************
|
||||
* Genesis Plus
|
||||
* Video Display Processor (Modes 0, 1, 2, 3, 4 & 5 rendering)
|
||||
* Video Display Processor (video output rendering)
|
||||
*
|
||||
* Support for SG-1000, Master System (315-5124 & 315-5246), Game Gear & Mega Drive VDP
|
||||
* Support for all TMS99xx modes, Mode 4 & Mode 5 rendering
|
||||
*
|
||||
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Charles Mac Donald (original code)
|
||||
* Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX)
|
||||
* Copyright (C) 2007-2014 Eke-Eke (Genesis Plus GX)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
@@ -1023,6 +1023,7 @@ void color_update_m4(int index, unsigned int data)
|
||||
}
|
||||
|
||||
case SYSTEM_SG:
|
||||
case SYSTEM_SGII:
|
||||
{
|
||||
/* Fixed TMS99xx palette */
|
||||
if (index & 0x0F)
|
||||
@@ -1142,8 +1143,7 @@ void color_update_m5(int index, unsigned int data)
|
||||
/* Graphics I */
|
||||
void render_bg_m0(int line)
|
||||
{
|
||||
uint8 color, pattern;
|
||||
uint16 name;
|
||||
uint8 color, name, pattern;
|
||||
|
||||
uint8 *lb = &linebuf[0][0x20];
|
||||
uint8 *nt = &vram[((reg[2] << 10) & 0x3C00) + ((line & 0xF8) << 2)];
|
||||
@@ -1190,7 +1190,7 @@ void render_bg_m1(int line)
|
||||
|
||||
do
|
||||
{
|
||||
pattern = pg[*nt++];
|
||||
pattern = pg[*nt++ << 3];
|
||||
|
||||
*lb++ = 0x10 | ((color >> (((pattern >> 7) & 1) << 2)) & 0x0F);
|
||||
*lb++ = 0x10 | ((color >> (((pattern >> 6) & 1) << 2)) & 0x0F);
|
||||
@@ -1298,8 +1298,6 @@ void render_bg_m2(int line)
|
||||
void render_bg_m3(int line)
|
||||
{
|
||||
uint8 color;
|
||||
uint16 name;
|
||||
|
||||
uint8 *lb = &linebuf[0][0x20];
|
||||
uint8 *nt = &vram[((reg[2] << 10) & 0x3C00) + ((line & 0xF8) << 2)];
|
||||
uint8 *pg = &vram[((reg[4] << 11) & 0x3800) + ((line >> 2) & 7)];
|
||||
@@ -1309,8 +1307,7 @@ void render_bg_m3(int line)
|
||||
|
||||
do
|
||||
{
|
||||
name = *nt++;
|
||||
color = pg[name << 3];
|
||||
color = pg[*nt++ << 3];
|
||||
|
||||
*lb++ = 0x10 | ((color >> 4) & 0x0F);
|
||||
*lb++ = 0x10 | ((color >> 4) & 0x0F);
|
||||
@@ -1328,7 +1325,6 @@ void render_bg_m3(int line)
|
||||
void render_bg_m3x(int line)
|
||||
{
|
||||
uint8 color;
|
||||
uint16 name;
|
||||
uint8 *pg;
|
||||
|
||||
uint8 *lb = &linebuf[0][0x20];
|
||||
@@ -1349,8 +1345,7 @@ void render_bg_m3x(int line)
|
||||
|
||||
do
|
||||
{
|
||||
name = *nt++;
|
||||
color = pg[name << 3];
|
||||
color = pg[*nt++ << 3];
|
||||
|
||||
*lb++ = 0x10 | ((color >> 4) & 0x0F);
|
||||
*lb++ = 0x10 | ((color >> 4) & 0x0F);
|
||||
@@ -3817,44 +3812,50 @@ void parse_satb_m5(int line)
|
||||
|
||||
do
|
||||
{
|
||||
/* Read Y position & size from internal SAT */
|
||||
/* Read Y position from internal SAT cache */
|
||||
ypos = (q[link] >> im2_flag) & 0x1FF;
|
||||
size = q[link + 1] >> 8;
|
||||
|
||||
/* Sprite height */
|
||||
height = 8 + ((size & 3) << 3);
|
||||
|
||||
/* Y range */
|
||||
ypos = line - ypos;
|
||||
|
||||
/* Sprite is visble on this line ? */
|
||||
if ((ypos >= 0) && (ypos < height))
|
||||
/* Check if sprite Y position has been reached */
|
||||
if (line >= ypos)
|
||||
{
|
||||
/* Sprite overflow */
|
||||
if (count == max)
|
||||
/* Read sprite size from internal SAT cache */
|
||||
size = q[link + 1] >> 8;
|
||||
|
||||
/* Sprite height */
|
||||
height = 8 + ((size & 3) << 3);
|
||||
|
||||
/* Y range */
|
||||
ypos = line - ypos;
|
||||
|
||||
/* Check if sprite is visible on current line */
|
||||
if (ypos < height)
|
||||
{
|
||||
status |= 0x40;
|
||||
break;
|
||||
/* Sprite overflow */
|
||||
if (count == max)
|
||||
{
|
||||
status |= 0x40;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Update sprite list (only name, attribute & xpos are parsed from VRAM) */
|
||||
object_info->attr = p[link + 2];
|
||||
object_info->xpos = p[link + 3] & 0x1ff;
|
||||
object_info->ypos = ypos;
|
||||
object_info->size = size & 0x0f;
|
||||
|
||||
/* Increment Sprite count */
|
||||
++count;
|
||||
|
||||
/* Next sprite entry */
|
||||
object_info++;
|
||||
}
|
||||
|
||||
/* Update sprite list (only name, attribute & xpos are parsed from VRAM) */
|
||||
object_info->attr = p[link + 2];
|
||||
object_info->xpos = p[link + 3] & 0x1ff;
|
||||
object_info->ypos = ypos;
|
||||
object_info->size = size & 0x0f;
|
||||
|
||||
/* Increment Sprite count */
|
||||
++count;
|
||||
|
||||
/* Next sprite entry */
|
||||
object_info++;
|
||||
}
|
||||
|
||||
/* Read link data from internal SAT */
|
||||
/* Read link data from internal SAT cache */
|
||||
link = (q[link + 1] & 0x7F) << 2;
|
||||
|
||||
/* Last sprite */
|
||||
if (link == 0) break;
|
||||
/* Stop parsing if link data points to first entry (#0) or after the last entry (#64 in H32 mode, #80 in H40 mode) */
|
||||
if ((link == 0) || (link >= bitmap.viewport.w)) break;
|
||||
}
|
||||
while (--total);
|
||||
|
||||
@@ -4109,7 +4110,7 @@ void render_line(int line)
|
||||
/* Left-most column blanking */
|
||||
if (reg[0] & 0x20)
|
||||
{
|
||||
if (system_hw > SYSTEM_SG)
|
||||
if (system_hw > SYSTEM_SGII)
|
||||
{
|
||||
memset(&linebuf[0][0x20], 0x40, 8);
|
||||
}
|
||||
@@ -4122,8 +4123,11 @@ void render_line(int line)
|
||||
}
|
||||
|
||||
/* Horizontal borders */
|
||||
memset(&linebuf[0][0x20 - bitmap.viewport.x], 0x40, bitmap.viewport.x);
|
||||
memset(&linebuf[0][0x20 + bitmap.viewport.w], 0x40, bitmap.viewport.x);
|
||||
if (bitmap.viewport.x > 0)
|
||||
{
|
||||
memset(&linebuf[0][0x20 - bitmap.viewport.x], 0x40, bitmap.viewport.x);
|
||||
memset(&linebuf[0][0x20 + bitmap.viewport.w], 0x40, bitmap.viewport.x);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/***************************************************************************************
|
||||
* Genesis Plus
|
||||
* Video Display Processor (Modes 0, 1, 2, 3, 4 & 5 rendering)
|
||||
* Video Display Processor (video output rendering)
|
||||
*
|
||||
* Support for SG-1000, Master System (315-5124 & 315-5246), Game Gear & Mega Drive VDP
|
||||
* Support for all TMS99xx modes, Mode 4 & Mode 5 rendering
|
||||
*
|
||||
* Copyright (C) 1998-2007 Charles Mac Donald (original code)
|
||||
* Copyright (C) 2007-2013 Eke-Eke (Genesis Plus GX)
|
||||
|
||||
+38
-9
@@ -292,13 +292,13 @@ static void configure_controls(void)
|
||||
{
|
||||
config.input[i].padtype = DEVICE_PAD6B;
|
||||
}
|
||||
input.system[0] = SYSTEM_MD_GAMEPAD;
|
||||
input.system[1] = SYSTEM_MD_GAMEPAD;
|
||||
input.system[0] = SYSTEM_GAMEPAD;
|
||||
input.system[1] = SYSTEM_GAMEPAD;
|
||||
break;
|
||||
case SYSTEM_GG:
|
||||
case SYSTEM_SMS:
|
||||
input.system[0] = SYSTEM_MS_GAMEPAD;
|
||||
input.system[1] = SYSTEM_MS_GAMEPAD;
|
||||
input.system[0] = SYSTEM_GAMEPAD;
|
||||
input.system[1] = SYSTEM_GAMEPAD;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -772,6 +772,26 @@ static void clear_cheats(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void remove_cheats(void)
|
||||
{
|
||||
int i = maxcheats;
|
||||
while (i > 0)
|
||||
{
|
||||
if (cheatlist[i-1].enable)
|
||||
{
|
||||
cheatlist[i-1].text[0] = 0;
|
||||
cheatlist[i-1].code[0] = 0;
|
||||
cheatlist[i-1].address = 0;
|
||||
cheatlist[i-1].data = 0;
|
||||
cheatlist[i-1].enable = 0;
|
||||
|
||||
maxcheats--;
|
||||
}
|
||||
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* RAMCheatUpdate
|
||||
*
|
||||
@@ -850,9 +870,20 @@ bool retro_unserialize(const void *data, size_t size)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void retro_cheat_reset(void) {}
|
||||
void retro_cheat_reset(void)
|
||||
{
|
||||
/* clear existing ROM patches */
|
||||
clear_cheats();
|
||||
|
||||
/* remove cheats from the list */
|
||||
remove_cheats();
|
||||
}
|
||||
|
||||
void retro_cheat_set(unsigned index, bool enabled, const char *code)
|
||||
{
|
||||
/* clear existing ROM patches */
|
||||
clear_cheats();
|
||||
|
||||
/* interpret code and give it an index */
|
||||
decode_cheat((char *)code, maxcheats);
|
||||
|
||||
@@ -1112,8 +1143,7 @@ void osd_input_update(void)
|
||||
|
||||
switch (input.system[0])
|
||||
{
|
||||
case SYSTEM_MS_GAMEPAD:
|
||||
case SYSTEM_MD_GAMEPAD:
|
||||
case SYSTEM_GAMEPAD:
|
||||
if(input.dev[0] != NO_DEVICE)
|
||||
{
|
||||
for (j = 0; j < sizeof(binds) / sizeof(binds[0]); j++)
|
||||
@@ -1148,8 +1178,7 @@ void osd_input_update(void)
|
||||
|
||||
switch (input.system[1])
|
||||
{
|
||||
case SYSTEM_MS_GAMEPAD:
|
||||
case SYSTEM_MD_GAMEPAD:
|
||||
case SYSTEM_GAMEPAD:
|
||||
if(input.dev[4] != NO_DEVICE)
|
||||
{
|
||||
for (j = 0; j < sizeof(binds) / sizeof(binds[0]); j++)
|
||||
|
||||
Reference in New Issue
Block a user