@ -1,7 +1,7 @@
|
||||
About
|
||||
---------
|
||||
|
||||
Genesis Plus GX is an open-source & portable Sega Mega Drive / Genesis emulator, now also emulating SG-1000, Master System, Game Gear and Sega/Mega CD hardware.
|
||||
Genesis Plus GX is an open-source emulator focused on accuracy and portability, now emulating SG-1000, Master System, Game Gear, Mega Drive / Genesis and Sega / Mega CD hardware. Initially ported and designed to be running on Gamecube / Wii consoles through libogc / devkitPPC, it is also available for many other platforms through various frontends.
|
||||
|
||||
The source code is based on Genesis Plus 1.3, originally developped by Charles MacDonald (http://cgfm2.emuviews.com).
|
||||
It has been heavily modified, with respect to initial goals and design, in order to improve accuracy of emulation, implementing new features and adding support for extra peripherals, cartridge & systems hardware.
|
||||
@ -21,7 +21,10 @@ see http://code.google.com/p/genplus-gx/wiki/GettingStarted
|
||||
|
||||
(*) libretro / Retroarch (Multi Platform) port:
|
||||
|
||||
see http://forum.themaister.net/
|
||||
see http://www.libretro.com/forums/index.php
|
||||
|
||||
|
||||
Current builds are available for download from https://github.com/ekeeke/Genesis-Plus-GX/tree/master/builds
|
||||
|
||||
|
||||
Features
|
||||
|
BIN
builds/genesis_plus_gx_libretro.dll
Normal file
BIN
builds/genplus_cube.dol
Normal file
After Width: | Height: | Size: 3.7 MiB |
BIN
builds/genplus_wii.dol
Normal file
After Width: | Height: | Size: 3.8 MiB |
@ -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/)
|
||||
@ -419,7 +419,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 */
|
||||
|
@ -77,151 +77,151 @@ typedef struct
|
||||
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 */
|
||||
{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) */
|
||||
{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 using 2KB external RAM (volatile) */
|
||||
{0x092F29D6, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_2K, SYSTEM_SG, REGION_JAPAN_NTSC}, /* The Castle (J) */
|
||||
{0xAF4F14BC, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_2K, SYSTEM_SG, REGION_JAPAN_NTSC}, /* Othello (J) */
|
||||
{0x1D1A0CA3, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_2K, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Othello (TW) */
|
||||
{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_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Bomberman Special [DahJee] (TW) */
|
||||
{0x223397A1, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* King's Valley (TW) */
|
||||
{0x281D2888, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Knightmare (TW) */
|
||||
{0x306D5F78, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Rally-X [DahJee] (TW) */
|
||||
{0x29E047CC, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Road Fighter (TW) */
|
||||
{0x5CBD1163, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Tank Battalion (TW) */
|
||||
{0x2E7166D5, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* The Legend of Kage (TW) */
|
||||
{0xC550B4F0, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* TwinBee (TW) */
|
||||
{0xFC87463C, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT1, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Yie Ar Kung-Fu II (TW) */
|
||||
{0x69FC1494, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT2, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Bomberman Special (TW) */
|
||||
{0xFFC4EE3F, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT2, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Magical Kid Wiz (TW) */
|
||||
{0x2E366CCF, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT2, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* The Castle (TW) */
|
||||
{0xAAAC12CF, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT2, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Rally-X (TW) */
|
||||
{0xD2EDD329, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_RAM_8K_EXT2, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Road Fighter (TW) */
|
||||
{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_MS_GAMEPAD, MAPPER_NONE, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Circus Charlie (KR) */
|
||||
{0x77DB4704, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_NONE, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Q*Bert */
|
||||
{0xC5A67B95, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_NONE, SYSTEM_SGII, REGION_JAPAN_NTSC}, /* Othello Multivision BIOS */
|
||||
{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 Japanese Master System I/O chip (315-5297) */
|
||||
{0xBD1CC7DF, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Super Tetris (KR) */
|
||||
{0x6D309AC5, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS, REGION_JAPAN_NTSC}, /* Power Boggle Boggle (KR) */
|
||||
{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 */
|
||||
@ -254,84 +254,88 @@ static const rominfo_t game_list[] =
|
||||
{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_MS4PLAY, MAPPER_NONE, SYSTEM_SMS2, REGION_USA}, /* BOom (v1.0) */
|
||||
{0x143AB50B, 0, 0, SYSTEM_MS4PLAY, 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 */
|
||||
@ -373,9 +377,6 @@ void sms_cart_init(void)
|
||||
/* 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);
|
||||
|
||||
@ -408,8 +409,18 @@ void sms_cart_init(void)
|
||||
/* 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;
|
||||
@ -467,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;
|
||||
|
@ -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 ms4play_1_read(void)
|
||||
{
|
||||
return gamepad_read(flipflop[0].Counter);
|
||||
}
|
||||
|
||||
unsigned char ms4play_2_read(void)
|
||||
{
|
||||
return gamepad_read(flipflop[1].Counter + 4);
|
||||
}
|
||||
|
||||
void ms4play_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 ms4play_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 ms4play_1_read(void);
|
||||
extern unsigned char ms4play_2_read(void);
|
||||
extern void ms4play_1_write(unsigned char data, unsigned char mask);
|
||||
extern void ms4play_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_MS4PLAY:
|
||||
{
|
||||
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_MS4PLAY:
|
||||
{
|
||||
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_MS4PLAY (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:
|
||||
|
@ -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_MS4PLAY:
|
||||
{
|
||||
port[0].data_w = ms4play_1_write;
|
||||
port[0].data_r = ms4play_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_MS4PLAY:
|
||||
{
|
||||
port[1].data_w = ms4play_2_write;
|
||||
port[1].data_r = ms4play_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:
|
||||
|
@ -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:
|
||||
|
21
gx/config.c
@ -3,7 +3,7 @@
|
||||
*
|
||||
* Genesis Plus GX configuration file support
|
||||
*
|
||||
* Copyright Eke-Eke (2007-2013)
|
||||
* Copyright Eke-Eke (2007-2014)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
@ -164,6 +164,13 @@ void config_default(void)
|
||||
config.gamma = VI_GM_1_0 / 10.0;
|
||||
#endif
|
||||
|
||||
/* NTSC filter options */
|
||||
config.ntsc_sharpness = 0.0;
|
||||
config.ntsc_resolution = 0.0;
|
||||
config.ntsc_artifacts = 0.0;
|
||||
config.ntsc_fringing = 0.0;
|
||||
config.ntsc_bleed = 0.0;
|
||||
|
||||
/* controllers options */
|
||||
config.gun_cursor[0] = 1;
|
||||
config.gun_cursor[1] = 1;
|
||||
@ -178,13 +185,13 @@ void config_default(void)
|
||||
config.autocheat = 0;
|
||||
#ifdef HW_RVL
|
||||
config.s_auto = 1;
|
||||
config.autosleep = 1;
|
||||
#else
|
||||
config.s_auto = 0;
|
||||
config.v_prog = 1;
|
||||
#endif
|
||||
config.s_default = 1;
|
||||
config.s_device = 0;
|
||||
config.l_device = 0;
|
||||
config.bg_overlay = 0;
|
||||
config.screen_w = 658;
|
||||
config.bgm_volume = 100.0;
|
||||
@ -192,6 +199,9 @@ void config_default(void)
|
||||
|
||||
/* default ROM directories */
|
||||
#ifdef HW_RVL
|
||||
char dir[16];
|
||||
getcwd(dir, 16);
|
||||
config.l_device = strstr(dir, "sd") ? TYPE_SD : TYPE_USB;
|
||||
sprintf (config.lastdir[0][TYPE_SD], "sd:%s/roms/", DEFAULT_PATH);
|
||||
sprintf (config.lastdir[1][TYPE_SD], "sd:%s/roms/", DEFAULT_PATH);
|
||||
sprintf (config.lastdir[2][TYPE_SD], "sd:%s/roms/", DEFAULT_PATH);
|
||||
@ -208,6 +218,7 @@ void config_default(void)
|
||||
sprintf (config.lastdir[3][TYPE_DVD], "dvd:%s/roms/", DEFAULT_PATH);
|
||||
sprintf (config.lastdir[4][TYPE_DVD], "dvd:%s/roms/", DEFAULT_PATH);
|
||||
#else
|
||||
config.l_device = TYPE_SD;
|
||||
sprintf (config.lastdir[0][TYPE_SD], "%s/roms/", DEFAULT_PATH);
|
||||
sprintf (config.lastdir[1][TYPE_SD], "%s/roms/", DEFAULT_PATH);
|
||||
sprintf (config.lastdir[2][TYPE_SD], "%s/roms/", DEFAULT_PATH);
|
||||
@ -250,7 +261,7 @@ void config_default(void)
|
||||
{
|
||||
/* switch menu video mode to interlaced */
|
||||
vmode->viTVMode = (vmode->viTVMode & ~3) | VI_INTERLACE;
|
||||
VIDEO_Configure (vmode);
|
||||
VIDEO_Configure(vmode);
|
||||
VIDEO_Flush();
|
||||
VIDEO_WaitVSync();
|
||||
VIDEO_WaitVSync();
|
||||
@ -266,7 +277,7 @@ void config_default(void)
|
||||
}
|
||||
|
||||
/* default emulated inputs */
|
||||
input.system[0] = SYSTEM_MD_GAMEPAD;
|
||||
input.system[1] = (config.input[1].device != -1) ? SYSTEM_MD_GAMEPAD : NO_SYSTEM;
|
||||
input.system[0] = SYSTEM_GAMEPAD;
|
||||
input.system[1] = (config.input[1].device != -1) ? SYSTEM_GAMEPAD : NO_SYSTEM;
|
||||
input_init();
|
||||
}
|
||||
|
@ -3,7 +3,7 @@
|
||||
*
|
||||
* Genesis Plus GX configuration file support
|
||||
*
|
||||
* Copyright Eke-Eke (2007-2013)
|
||||
* Copyright Eke-Eke (2007-2014)
|
||||
*
|
||||
* Redistribution and use of this code or any derivative works are permitted
|
||||
* provided that the following conditions are met:
|
||||
@ -97,6 +97,7 @@ typedef struct
|
||||
uint16 pad_keymap[4][MAX_KEYS+1];
|
||||
#ifdef HW_RVL
|
||||
uint32 wpad_keymap[4*3][MAX_KEYS];
|
||||
uint8 autosleep;
|
||||
#endif
|
||||
uint8 autoload;
|
||||
uint8 autocheat;
|
||||
@ -111,6 +112,11 @@ typedef struct
|
||||
float bgm_volume;
|
||||
float sfx_volume;
|
||||
char lastdir[FILETYPE_MAX][TYPE_RECENT][MAXPATHLEN];
|
||||
float ntsc_sharpness;
|
||||
float ntsc_resolution;
|
||||
float ntsc_artifacts;
|
||||
float ntsc_fringing;
|
||||
float ntsc_bleed;
|
||||
} t_config;
|
||||
|
||||
/* Global data */
|
||||
|
322
gx/gui/menu.c
@ -97,8 +97,7 @@ extern const u8 Button_delete_over_png[];
|
||||
|
||||
/* Controller Settings */
|
||||
extern const u8 Ctrl_4wayplay_png[];
|
||||
extern const u8 Ctrl_gamepad_md_png[];
|
||||
extern const u8 Ctrl_gamepad_ms_png[];
|
||||
extern const u8 Ctrl_gamepad_png[];
|
||||
extern const u8 Ctrl_justifiers_png[];
|
||||
extern const u8 Ctrl_menacer_png[];
|
||||
extern const u8 Ctrl_mouse_png[];
|
||||
@ -109,6 +108,9 @@ extern const u8 Ctrl_paddle_png[];
|
||||
extern const u8 Ctrl_sportspad_png[];
|
||||
extern const u8 Ctrl_none_png[];
|
||||
extern const u8 Ctrl_teamplayer_png[];
|
||||
extern const u8 Ctrl_ms4play_png[];
|
||||
extern const u8 Ctrl_pad_auto_png[];
|
||||
extern const u8 Ctrl_pad2b_png[];
|
||||
extern const u8 Ctrl_pad3b_png[];
|
||||
extern const u8 Ctrl_pad6b_png[];
|
||||
extern const u8 Ctrl_config_png[];
|
||||
@ -370,9 +372,9 @@ static gui_item items_system[10] =
|
||||
|
||||
/* Video options */
|
||||
#ifdef HW_RVL
|
||||
static gui_item items_video[13] =
|
||||
static gui_item items_video[18] =
|
||||
#else
|
||||
static gui_item items_video[11] =
|
||||
static gui_item items_video[16] =
|
||||
#endif
|
||||
{
|
||||
{NULL,NULL,"Display: PROGRESSIVE", "Select video mode", 56,132,276,48},
|
||||
@ -385,6 +387,11 @@ static gui_item items_video[11] =
|
||||
{NULL,NULL,"VI Gamma Correction: 1.0", "Adjust video hardware gamma correction", 56,132,276,48},
|
||||
#endif
|
||||
{NULL,NULL,"NTSC Filter: COMPOSITE", "Enable/disable NTSC software filtering", 56,132,276,48},
|
||||
{NULL,NULL,"NTSC Sharpness: 0.0", "Adjust edge contrast enhancement/blurring", 56,132,276,48},
|
||||
{NULL,NULL,"NTSC Resolution: 0.0", "Adjust image resolution", 56,132,276,48},
|
||||
{NULL,NULL,"NTSC Artifacts: 0.0", "Adjust artifacts caused by color changes", 56,132,276,48},
|
||||
{NULL,NULL,"NTSC Color Bleed: 0.0", "Adjust color resolution reduction", 56,132,276,48},
|
||||
{NULL,NULL,"NTSC Color Fringing: 0.0", "Adjust artifacts caused by brightness changes", 56,132,276,48},
|
||||
{NULL,NULL,"Borders: OFF", "Enable/disable overscan emulation", 56,132,276,48},
|
||||
{NULL,NULL,"GG screen: ORIGINAL", "Enable/disable Game Gear extended screen", 56,132,276,48},
|
||||
{NULL,NULL,"Aspect: ORIGINAL (4:3)", "Select display aspect ratio", 56,132,276,48},
|
||||
@ -393,7 +400,11 @@ static gui_item items_video[11] =
|
||||
};
|
||||
|
||||
/* Menu options */
|
||||
#ifdef HW_RVL
|
||||
static gui_item items_prefs[12] =
|
||||
#else
|
||||
static gui_item items_prefs[11] =
|
||||
#endif
|
||||
{
|
||||
{NULL,NULL,"Auto ROM Load: OFF", "Enable/disable automatic ROM loading on startup", 56,132,276,48},
|
||||
{NULL,NULL,"Auto Cheats: OFF", "Enable/disable automatic cheats activation", 56,132,276,48},
|
||||
@ -406,6 +417,9 @@ static gui_item items_prefs[11] =
|
||||
{NULL,NULL,"Screen Width: 658", "Adjust menu screen width in pixels", 56,132,276,48},
|
||||
{NULL,NULL,"Show CD Leds: OFF", "Enable/disable CD leds display", 56,132,276,48},
|
||||
{NULL,NULL,"Show FPS: OFF", "Enable/disable FPS counter", 56,132,276,48},
|
||||
#ifdef HW_RVL
|
||||
{NULL,NULL,"Wiimote Timeout: OFF","Enable/disable Wii remote automatic shutodwn", 56,132,276,48},
|
||||
#endif
|
||||
};
|
||||
|
||||
/* Save Manager */
|
||||
@ -614,7 +628,7 @@ static gui_menu menu_prefs =
|
||||
{
|
||||
"Menu Settings",
|
||||
0,0,
|
||||
11,4,6,0,
|
||||
12,4,6,0,
|
||||
items_prefs,
|
||||
buttons_list,
|
||||
bg_list,
|
||||
@ -683,6 +697,12 @@ static void prefmenu ()
|
||||
sprintf (items[8].text, "Screen Width: %d", config.screen_w);
|
||||
sprintf (items[9].text, "Show CD Leds: %s", config.cd_leds ? "ON":"OFF");
|
||||
sprintf (items[10].text, "Show FPS: %s", config.fps ? "ON":"OFF");
|
||||
#ifdef HW_RVL
|
||||
sprintf (items[11].text, "Wiimote Timeout: %s", config.autosleep ? "5min":"30min");
|
||||
m->max_items = 12;
|
||||
#else
|
||||
m->max_items = 11;
|
||||
#endif
|
||||
|
||||
GUI_InitMenu(m);
|
||||
GUI_SlideMenuTitle(m,strlen("Menu "));
|
||||
@ -777,6 +797,14 @@ static void prefmenu ()
|
||||
sprintf (items[10].text, "Show FPS: %s", config.fps ? "ON":"OFF");
|
||||
break;
|
||||
|
||||
#ifdef HW_RVL
|
||||
case 11: /*** Wii remote auto switch-off ***/
|
||||
config.autosleep ^= 1;
|
||||
sprintf (items[11].text, "Wiimote Timeout: %s", config.autosleep ? "5min":"30min");
|
||||
WPAD_SetIdleTimeout(config.autosleep ? 300 : 1800);
|
||||
break;
|
||||
#endif
|
||||
|
||||
case -1:
|
||||
quit = 1;
|
||||
break;
|
||||
@ -1480,6 +1508,7 @@ static void videomenu ()
|
||||
int reinit = 0;
|
||||
gui_menu *m = &menu_video;
|
||||
gui_item *items = m->items;
|
||||
int ntsc_offset = 0;
|
||||
|
||||
if (config.render == 1)
|
||||
sprintf (items[0].text,"Display: INTERLACED");
|
||||
@ -1514,39 +1543,59 @@ static void videomenu ()
|
||||
sprintf (items[VI_OFFSET].text, "NTSC Filter: S-VIDEO");
|
||||
else if (config.ntsc == 3)
|
||||
sprintf (items[VI_OFFSET].text, "NTSC Filter: RGB");
|
||||
else if (config.ntsc == 4)
|
||||
{
|
||||
sprintf (items[VI_OFFSET].text, "NTSC Filter: MANUAL");
|
||||
sprintf(items[VI_OFFSET+1].text, "NTSC Sharpness: %1.2f", config.ntsc_sharpness);
|
||||
sprintf(items[VI_OFFSET+2].text, "NTSC Resolution: %1.2f", config.ntsc_resolution);
|
||||
sprintf(items[VI_OFFSET+3].text, "NTSC Artifacts: %1.2f", config.ntsc_artifacts);
|
||||
sprintf(items[VI_OFFSET+4].text, "NTSC Color Bleed: %1.2f", config.ntsc_bleed);
|
||||
sprintf(items[VI_OFFSET+5].text, "NTSC Color Fringing: %1.2f", config.ntsc_fringing);
|
||||
strcpy(items[VI_OFFSET+1].comment, "Adjust edge contrast enhancement/blurring");
|
||||
strcpy(items[VI_OFFSET+2].comment, "Adjust image resolution");
|
||||
strcpy(items[VI_OFFSET+3].comment, "Adjust artifacts caused by color changes");
|
||||
strcpy(items[VI_OFFSET+4].comment, "Adjust color resolution reduction");
|
||||
strcpy(items[VI_OFFSET+5].comment, "Adjust artifacts caused by brightness changes");
|
||||
ntsc_offset = 5;
|
||||
}
|
||||
else
|
||||
sprintf (items[VI_OFFSET].text, "NTSC Filter: OFF");
|
||||
|
||||
if (config.overscan == 3)
|
||||
sprintf (items[VI_OFFSET+1].text, "Borders: FULL");
|
||||
else if (config.overscan == 2)
|
||||
sprintf (items[VI_OFFSET+1].text, "Borders: H ONLY");
|
||||
else if (config.overscan == 1)
|
||||
sprintf (items[VI_OFFSET+1].text, "Borders: V ONLY");
|
||||
else
|
||||
sprintf (items[VI_OFFSET+1].text, "Borders: NONE");
|
||||
strcpy(items[VI_OFFSET+1+ntsc_offset].comment, "Enable/disable overscan emulation");
|
||||
strcpy(items[VI_OFFSET+2+ntsc_offset].comment, "Enable/disable Game Gear extended screen");
|
||||
strcpy(items[VI_OFFSET+3+ntsc_offset].comment, "Select display aspect ratio");
|
||||
strcpy(items[VI_OFFSET+4+ntsc_offset].comment, "Adjust display position");
|
||||
strcpy(items[VI_OFFSET+5+ntsc_offset].comment, "Adjust display scaling");
|
||||
|
||||
sprintf(items[VI_OFFSET+2].text, "GG Screen: %s", config.gg_extra ? "EXTENDED":"ORIGINAL");
|
||||
if (config.overscan == 3)
|
||||
sprintf (items[VI_OFFSET+1+ntsc_offset].text, "Borders: FULL");
|
||||
else if (config.overscan == 2)
|
||||
sprintf (items[VI_OFFSET+1+ntsc_offset].text, "Borders: H ONLY");
|
||||
else if (config.overscan == 1)
|
||||
sprintf (items[VI_OFFSET+1+ntsc_offset].text, "Borders: V ONLY");
|
||||
else
|
||||
sprintf (items[VI_OFFSET+1+ntsc_offset].text, "Borders: NONE");
|
||||
|
||||
sprintf(items[VI_OFFSET+2+ntsc_offset].text, "GG Screen: %s", config.gg_extra ? "EXTENDED":"ORIGINAL");
|
||||
|
||||
if (config.aspect == 1)
|
||||
sprintf (items[VI_OFFSET+3].text,"Aspect: ORIGINAL (4:3)");
|
||||
sprintf (items[VI_OFFSET+3+ntsc_offset].text,"Aspect: ORIGINAL (4:3)");
|
||||
else if (config.aspect == 2)
|
||||
sprintf (items[VI_OFFSET+3].text, "Aspect: ORIGINAL (16:9)");
|
||||
sprintf (items[VI_OFFSET+3+ntsc_offset].text, "Aspect: ORIGINAL (16:9)");
|
||||
else
|
||||
sprintf (items[VI_OFFSET+3].text, "Aspect: SCALED");
|
||||
{
|
||||
sprintf (items[VI_OFFSET+3+ntsc_offset].text, "Aspect: SCALED");
|
||||
}
|
||||
|
||||
sprintf (items[VI_OFFSET+4].text, "Screen Position: (%s%02d,%s%02d)",
|
||||
sprintf (items[VI_OFFSET+4+ntsc_offset].text, "Screen Position: (%s%02d,%s%02d)",
|
||||
(config.xshift < 0) ? "":"+", config.xshift,
|
||||
(config.yshift < 0) ? "":"+", config.yshift);
|
||||
|
||||
sprintf (items[VI_OFFSET+5].text, "Screen Scaling: (%s%02d,%s%02d)",
|
||||
sprintf (items[VI_OFFSET+5+ntsc_offset].text, "Screen Scaling: (%s%02d,%s%02d)",
|
||||
(config.xscale < 0) ? "":"+", config.xscale,
|
||||
(config.yscale < 0) ? "":"+", config.yscale);
|
||||
|
||||
if (config.aspect)
|
||||
m->max_items = VI_OFFSET+5;
|
||||
else
|
||||
m->max_items = VI_OFFSET+6;
|
||||
m->max_items = VI_OFFSET + 5 + ntsc_offset + (config.aspect == 0);
|
||||
|
||||
GUI_InitMenu(m);
|
||||
GUI_SlideMenuTitle(m,strlen("Video "));
|
||||
@ -1555,6 +1604,11 @@ static void videomenu ()
|
||||
{
|
||||
ret = GUI_RunMenu(m);
|
||||
|
||||
if (ret > VI_OFFSET)
|
||||
{
|
||||
ret += (5 - ntsc_offset);
|
||||
}
|
||||
|
||||
switch (ret)
|
||||
{
|
||||
case 0: /*** rendering ***/
|
||||
@ -1643,64 +1697,135 @@ static void videomenu ()
|
||||
#endif
|
||||
|
||||
case VI_OFFSET: /*** NTSC filter ***/
|
||||
config.ntsc = (config.ntsc + 1) & 3;
|
||||
config.ntsc = (config.ntsc + 1) % 5;
|
||||
if (config.ntsc == 1)
|
||||
{
|
||||
sprintf (items[VI_OFFSET].text, "NTSC Filter: COMPOSITE");
|
||||
}
|
||||
else if (config.ntsc == 2)
|
||||
{
|
||||
sprintf (items[VI_OFFSET].text, "NTSC Filter: S-VIDEO");
|
||||
}
|
||||
else if (config.ntsc == 3)
|
||||
{
|
||||
sprintf (items[VI_OFFSET].text, "NTSC Filter: RGB");
|
||||
}
|
||||
else if (config.ntsc == 4)
|
||||
{
|
||||
sprintf (items[VI_OFFSET].text, "NTSC Filter: MANUAL");
|
||||
strcpy(items[VI_OFFSET+5+1].text, items[VI_OFFSET+1].text);
|
||||
strcpy(items[VI_OFFSET+5+2].text, items[VI_OFFSET+2].text);
|
||||
strcpy(items[VI_OFFSET+5+3].text, items[VI_OFFSET+3].text);
|
||||
strcpy(items[VI_OFFSET+5+4].text, items[VI_OFFSET+4].text);
|
||||
strcpy(items[VI_OFFSET+5+5].text, items[VI_OFFSET+5].text);
|
||||
strcpy(items[VI_OFFSET+5+1].comment, items[VI_OFFSET+1].comment);
|
||||
strcpy(items[VI_OFFSET+5+2].comment, items[VI_OFFSET+2].comment);
|
||||
strcpy(items[VI_OFFSET+5+3].comment, items[VI_OFFSET+3].comment);
|
||||
strcpy(items[VI_OFFSET+5+4].comment, items[VI_OFFSET+4].comment);
|
||||
strcpy(items[VI_OFFSET+5+5].comment, items[VI_OFFSET+5].comment);
|
||||
sprintf(items[VI_OFFSET+1].text, "NTSC Sharpness: %1.1f", config.ntsc_sharpness);
|
||||
sprintf(items[VI_OFFSET+2].text, "NTSC Resolution: %1.1f", config.ntsc_resolution);
|
||||
sprintf(items[VI_OFFSET+3].text, "NTSC Artifacts: %1.1f", config.ntsc_artifacts);
|
||||
sprintf(items[VI_OFFSET+4].text, "NTSC Color Bleed: %1.1f", config.ntsc_bleed);
|
||||
sprintf(items[VI_OFFSET+5].text, "NTSC Color Fringing: %1.1f", config.ntsc_fringing);
|
||||
strcpy(items[VI_OFFSET+1].comment, "Adjust edge contrast enhancement/blurring");
|
||||
strcpy(items[VI_OFFSET+2].comment, "Adjust image resolution");
|
||||
strcpy(items[VI_OFFSET+3].comment, "Adjust artifacts caused by color changes");
|
||||
strcpy(items[VI_OFFSET+4].comment, "Adjust color resolution reduction");
|
||||
strcpy(items[VI_OFFSET+5].comment, "Adjust artifacts caused by brightness changes");
|
||||
ntsc_offset = 5;
|
||||
m->max_items = VI_OFFSET + 10 + (config.aspect == 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf (items[VI_OFFSET].text, "NTSC Filter: OFF");
|
||||
strcpy(items[VI_OFFSET+1].text, items[VI_OFFSET+5+1].text);
|
||||
strcpy(items[VI_OFFSET+2].text, items[VI_OFFSET+5+2].text);
|
||||
strcpy(items[VI_OFFSET+3].text, items[VI_OFFSET+5+3].text);
|
||||
strcpy(items[VI_OFFSET+4].text, items[VI_OFFSET+5+4].text);
|
||||
strcpy(items[VI_OFFSET+5].text, items[VI_OFFSET+5+5].text);
|
||||
strcpy(items[VI_OFFSET+1].comment, items[VI_OFFSET+5+1].comment);
|
||||
strcpy(items[VI_OFFSET+2].comment, items[VI_OFFSET+5+2].comment);
|
||||
strcpy(items[VI_OFFSET+3].comment, items[VI_OFFSET+5+3].comment);
|
||||
strcpy(items[VI_OFFSET+4].comment, items[VI_OFFSET+5+4].comment);
|
||||
strcpy(items[VI_OFFSET+5].comment, items[VI_OFFSET+5+5].comment);
|
||||
ntsc_offset = 0;
|
||||
m->max_items = VI_OFFSET + 5 + (config.aspect == 0);
|
||||
}
|
||||
break;
|
||||
|
||||
case VI_OFFSET+1: /*** overscan emulation ***/
|
||||
case VI_OFFSET+1: /*** NTSC Sharpness ***/
|
||||
GUI_OptionBox(m,update_bgm,"NTSC Sharpness",(void *)&config.ntsc_sharpness,0.01,-1.0,1.0,0);
|
||||
sprintf(items[VI_OFFSET+1].text, "NTSC Sharpness: %1.2f", config.ntsc_sharpness);
|
||||
break;
|
||||
|
||||
case VI_OFFSET+2: /*** NTSC Resolution ***/
|
||||
GUI_OptionBox(m,update_bgm,"NTSC Resolution",(void *)&config.ntsc_resolution,0.01,0.0,1.0,0);
|
||||
sprintf(items[VI_OFFSET+2].text, "NTSC Resolution: %1.2f", config.ntsc_resolution);
|
||||
break;
|
||||
|
||||
case VI_OFFSET+3: /*** NTSC Artifacts ***/
|
||||
GUI_OptionBox(m,update_bgm,"NTSC Artifacts",(void *)&config.ntsc_artifacts,0.01,-1.0,0.0,0);
|
||||
sprintf(items[VI_OFFSET+3].text, "NTSC Artifacts: %1.2f", config.ntsc_artifacts);
|
||||
break;
|
||||
|
||||
case VI_OFFSET+4: /*** NTSC Color Bleed ***/
|
||||
GUI_OptionBox(m,update_bgm,"NTSC Color Bleed",(void *)&config.ntsc_bleed,0.01,-1.0,1.0,0);
|
||||
sprintf(items[VI_OFFSET+4].text, "NTSC Color Bleed: %1.2f", config.ntsc_bleed);
|
||||
break;
|
||||
|
||||
case VI_OFFSET+5: /*** NTSC Color Fringing ***/
|
||||
GUI_OptionBox(m,update_bgm,"NTSC Color Fringing",(void *)&config.ntsc_fringing,0.01,-1.0,1.0,0);
|
||||
sprintf(items[VI_OFFSET+5].text, "NTSC Color Fringing: %1.2f", config.ntsc_fringing);
|
||||
break;
|
||||
|
||||
case VI_OFFSET+6: /*** overscan emulation ***/
|
||||
config.overscan = (config.overscan + 1) & 3;
|
||||
if (config.overscan == 3)
|
||||
sprintf (items[VI_OFFSET+1].text, "Borders: FULL");
|
||||
sprintf (items[VI_OFFSET+ntsc_offset+1].text, "Borders: FULL");
|
||||
else if (config.overscan == 2)
|
||||
sprintf (items[VI_OFFSET+1].text, "Borders: H ONLY");
|
||||
sprintf (items[VI_OFFSET+ntsc_offset+1].text, "Borders: H ONLY");
|
||||
else if (config.overscan == 1)
|
||||
sprintf (items[VI_OFFSET+1].text, "Borders: V ONLY");
|
||||
sprintf (items[VI_OFFSET+ntsc_offset+1].text, "Borders: V ONLY");
|
||||
else
|
||||
sprintf (items[VI_OFFSET+1].text, "Borders: NONE");
|
||||
sprintf (items[VI_OFFSET+ntsc_offset+1].text, "Borders: NONE");
|
||||
break;
|
||||
|
||||
case VI_OFFSET+2: /*** Game Gear extended screen */
|
||||
case VI_OFFSET+7: /*** Game Gear extended screen */
|
||||
config.gg_extra ^= 1;
|
||||
sprintf(items[VI_OFFSET+2].text, "GG Screen: %s", config.gg_extra ? "EXTENDED":"ORIGINAL");
|
||||
sprintf(items[VI_OFFSET+ntsc_offset+2].text, "GG Screen: %s", config.gg_extra ? "EXTENDED":"ORIGINAL");
|
||||
break;
|
||||
|
||||
case VI_OFFSET+3: /*** aspect ratio ***/
|
||||
case VI_OFFSET+8: /*** aspect ratio ***/
|
||||
config.aspect = (config.aspect + 1) % 3;
|
||||
if (config.aspect == 1)
|
||||
sprintf (items[VI_OFFSET+3].text,"Aspect: ORIGINAL (4:3)");
|
||||
sprintf (items[VI_OFFSET+ntsc_offset+3].text,"Aspect: ORIGINAL (4:3)");
|
||||
else if (config.aspect == 2)
|
||||
sprintf (items[VI_OFFSET+3].text, "Aspect: ORIGINAL (16:9)");
|
||||
sprintf (items[VI_OFFSET+ntsc_offset+3].text, "Aspect: ORIGINAL (16:9)");
|
||||
else
|
||||
sprintf (items[VI_OFFSET+3].text, "Aspect: SCALED");
|
||||
sprintf (items[VI_OFFSET+ntsc_offset+3].text, "Aspect: SCALED");
|
||||
|
||||
if (config.aspect)
|
||||
{
|
||||
/* disable items */
|
||||
m->max_items = VI_OFFSET+5;
|
||||
m->max_items = VI_OFFSET + ntsc_offset + 5;
|
||||
|
||||
/* reset menu selection */
|
||||
if (m->offset > VI_OFFSET)
|
||||
if (m->selected < 2)
|
||||
{
|
||||
m->offset = VI_OFFSET;
|
||||
m->selected = 3;
|
||||
m->offset = VI_OFFSET + ntsc_offset + 1;
|
||||
m->selected = 2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* enable items */
|
||||
m->max_items = VI_OFFSET+6;
|
||||
m->max_items = VI_OFFSET + ntsc_offset + 6;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case VI_OFFSET+4: /*** screen position ***/
|
||||
case VI_OFFSET+9: /*** screen position ***/
|
||||
if (system_hw)
|
||||
{
|
||||
state[0] = m->arrows[0]->state;
|
||||
@ -1718,7 +1843,7 @@ static void videomenu ()
|
||||
m->arrows[1]->state = state[1];
|
||||
m->screenshot = 0;
|
||||
strcpy(m->title,"Video Settings");
|
||||
sprintf (items[VI_OFFSET+4].text, "Screen Position: (%s%02d,%s%02d)",
|
||||
sprintf (items[VI_OFFSET+ntsc_offset+4].text, "Screen Position: (%s%02d,%s%02d)",
|
||||
(config.xshift < 0) ? "":"+", config.xshift,
|
||||
(config.yshift < 0) ? "":"+", config.yshift);
|
||||
}
|
||||
@ -1728,7 +1853,7 @@ static void videomenu ()
|
||||
}
|
||||
break;
|
||||
|
||||
case VI_OFFSET+5: /*** screen scaling ***/
|
||||
case VI_OFFSET+10: /*** screen scaling ***/
|
||||
if (system_hw)
|
||||
{
|
||||
state[0] = m->arrows[0]->state;
|
||||
@ -1746,7 +1871,7 @@ static void videomenu ()
|
||||
m->arrows[1]->state = state[1];
|
||||
m->screenshot = 0;
|
||||
strcpy(m->title,"Video Settings");
|
||||
sprintf (items[VI_OFFSET+5].text, "Screen Scaling: (%s%02d,%s%02d)",
|
||||
sprintf (items[VI_OFFSET+ntsc_offset+5].text, "Screen Scaling: (%s%02d,%s%02d)",
|
||||
(config.xscale < 0) ? "":"+", config.xscale,
|
||||
(config.yscale < 0) ? "":"+", config.yscale);
|
||||
}
|
||||
@ -1921,66 +2046,73 @@ static void ctrlmenu(void)
|
||||
int update = 0;
|
||||
gui_item *items = NULL;
|
||||
u8 *special = NULL;
|
||||
u32 exp;
|
||||
u8 type = 0;
|
||||
u32 exp, index = 0;
|
||||
|
||||
/* System devices */
|
||||
gui_item items_sys[2][13] =
|
||||
{
|
||||
{
|
||||
{NULL,Ctrl_none_png ,"","Select Port 1 device",110,130,48,72},
|
||||
{NULL,Ctrl_gamepad_md_png ,"","Select Port 1 device", 85,117,96,84},
|
||||
{NULL,Ctrl_gamepad_png ,"","Select Port 1 device",100,109,68,92},
|
||||
{NULL,Ctrl_mouse_png ,"","Select Port 1 device", 97,113,64,88},
|
||||
{NULL,Ctrl_menacer_png ,"","Select Port 1 device", 94,113,80,88},
|
||||
{NULL,Ctrl_justifiers_png ,"","Select Port 1 device", 88,117,80,84},
|
||||
{NULL,Ctrl_xe_a1p_png ,"","Select Port 1 device", 98,118,72,84},
|
||||
{NULL,Ctrl_activator_png ,"","Select Port 1 device", 94,121,72,80},
|
||||
{NULL,Ctrl_gamepad_ms_png ,"","Select Port 1 device", 91,125,84,76},
|
||||
{NULL,Ctrl_lightphaser_png,"","Select Port 1 device", 89,109,88,92},
|
||||
{NULL,Ctrl_paddle_png ,"","Select Port 1 device", 86,117,96,84},
|
||||
{NULL,Ctrl_sportspad_png ,"","Select Port 1 device", 95,117,76,84},
|
||||
{NULL,Ctrl_ms4play_png ,"","Select Port 1 device", 94,100,80,100},
|
||||
{NULL,Ctrl_teamplayer_png ,"","Select Port 1 device", 94,109,80,92},
|
||||
{NULL,Ctrl_4wayplay_png ,"","Select Port 1 device", 98,110,72,92}
|
||||
},
|
||||
{
|
||||
{NULL,Ctrl_none_png ,"","Select Port 2 device",110,300,48,72},
|
||||
{NULL,Ctrl_gamepad_md_png ,"","Select Port 2 device", 85,287,96,84},
|
||||
{NULL,Ctrl_gamepad_png ,"","Select Port 2 device",100,279,68,92},
|
||||
{NULL,Ctrl_mouse_png ,"","Select Port 2 device", 97,283,64,88},
|
||||
{NULL,Ctrl_menacer_png ,"","Select Port 2 device", 94,283,80,88},
|
||||
{NULL,Ctrl_justifiers_png ,"","Select Port 2 device", 88,287,80,84},
|
||||
{NULL,Ctrl_xe_a1p_png ,"","Select Port 2 device", 98,288,72,84},
|
||||
{NULL,Ctrl_activator_png ,"","Select Port 2 device", 94,291,72,80},
|
||||
{NULL,Ctrl_gamepad_ms_png ,"","Select Port 2 device", 91,295,84,76},
|
||||
{NULL,Ctrl_lightphaser_png,"","Select Port 2 device", 89,279,88,92},
|
||||
{NULL,Ctrl_paddle_png ,"","Select Port 2 device", 86,287,96,84},
|
||||
{NULL,Ctrl_sportspad_png ,"","Select Port 2 device", 95,287,76,84},
|
||||
{NULL,Ctrl_ms4play_png ,"","Select Port 1 device", 94,270,80,100},
|
||||
{NULL,Ctrl_teamplayer_png ,"","Select Port 2 device", 94,279,80,92},
|
||||
{NULL,Ctrl_4wayplay_png ,"","Select Port 2 device", 98,280,72,92}
|
||||
}
|
||||
};
|
||||
|
||||
/* Specific controller options */
|
||||
gui_item items_special[4][2] =
|
||||
gui_item items_special[4][4] =
|
||||
{
|
||||
{
|
||||
/* Gamepad option */
|
||||
{NULL,Ctrl_pad3b_png,"Pad\nType","Use 3-buttons Pad",528,180,44,28},
|
||||
{NULL,Ctrl_pad6b_png,"Pad\nType","Use 6-buttons Pad",528,180,44,28}
|
||||
{NULL,Ctrl_pad6b_png,"Pad\nType","Use 6-buttons Pad",528,180,44,28},
|
||||
{NULL,Ctrl_pad2b_png,"Pad\nType","Use 2-buttons Pad",528,180,44,28},
|
||||
{NULL,Ctrl_pad_auto_png,"Pad\nType","Auto-detect Pad type",528,180,44,28},
|
||||
},
|
||||
{
|
||||
/* Mouse option */
|
||||
{NULL,ctrl_option_off_png,"Invert\nMouse","Enable/Disable Y-Axis inversion",534,180,24,24},
|
||||
{NULL,ctrl_option_on_png ,"Invert\nMouse","Enable/Disable Y-Axis inversion",534,180,24,24},
|
||||
{NULL,NULL,"","",0,0,0,0},
|
||||
{NULL,NULL,"","",0,0,0,0},
|
||||
},
|
||||
{
|
||||
/* Gun option */
|
||||
{NULL,ctrl_option_off_png,"Show\nCursor","Enable/Disable Lightgun cursor",534,180,24,24},
|
||||
{NULL,ctrl_option_on_png ,"Show\nCursor","Enable/Disable Lightgun cursor",534,180,24,24},
|
||||
{NULL,NULL,"","",0,0,0,0},
|
||||
{NULL,NULL,"","",0,0,0,0},
|
||||
},
|
||||
{
|
||||
/* no option */
|
||||
{NULL,NULL,"No Option","",436,180,160,52},
|
||||
{NULL,NULL,"","",0,0,0,0},
|
||||
{NULL,NULL,"","",0,0,0,0},
|
||||
{NULL,NULL,"","",0,0,0,0},
|
||||
}
|
||||
};
|
||||
|
||||
@ -2018,6 +2150,8 @@ static void ctrlmenu(void)
|
||||
}
|
||||
items_special[0][0].texture = gxTextureOpenPNG(items_special[0][0].data,0);
|
||||
items_special[0][1].texture = gxTextureOpenPNG(items_special[0][1].data,0);
|
||||
items_special[0][2].texture = gxTextureOpenPNG(items_special[0][2].data,0);
|
||||
items_special[0][3].texture = gxTextureOpenPNG(items_special[0][3].data,0);
|
||||
items_special[2][0].texture = items_special[1][0].texture = gxTextureOpenPNG(items_special[1][0].data,0);
|
||||
items_special[2][1].texture = items_special[1][1].texture = gxTextureOpenPNG(items_special[1][1].data,0);
|
||||
items_device[0].texture = items_special[1][0].texture;
|
||||
@ -2098,7 +2232,7 @@ static void ctrlmenu(void)
|
||||
if (input.system[0] > SYSTEM_WAYPLAY)
|
||||
{
|
||||
input.system[0] = NO_SYSTEM;
|
||||
input.system[1] = SYSTEM_MD_GAMEPAD;
|
||||
input.system[1] = SYSTEM_GAMEPAD;
|
||||
}
|
||||
|
||||
/* reset I/O ports */
|
||||
@ -2148,12 +2282,7 @@ static void ctrlmenu(void)
|
||||
/* fixed configurations */
|
||||
if (system_hw)
|
||||
{
|
||||
if (cart.special & HW_J_CART)
|
||||
{
|
||||
GUI_WaitPrompt("Error","J-CART detected !");
|
||||
break;
|
||||
}
|
||||
else if (cart.special & HW_TEREBI_OEKAKI)
|
||||
if (cart.special & HW_TEREBI_OEKAKI)
|
||||
{
|
||||
GUI_WaitPrompt("Error","Terebi Oekaki detected !");
|
||||
break;
|
||||
@ -2177,13 +2306,13 @@ static void ctrlmenu(void)
|
||||
/* allow only one gun type */
|
||||
if ((input.system[0] == SYSTEM_LIGHTPHASER) && (input.system[1] == SYSTEM_MENACER))
|
||||
{
|
||||
input.system[1] += 3;
|
||||
input.system[1]++;
|
||||
}
|
||||
|
||||
/* allow only one gun type */
|
||||
if ((input.system[0] == SYSTEM_LIGHTPHASER) && (input.system[1] == SYSTEM_JUSTIFIER))
|
||||
{
|
||||
input.system[1] += 2;
|
||||
input.system[1]++;
|
||||
}
|
||||
|
||||
/* 4-wayplay uses both ports */
|
||||
@ -2196,7 +2325,7 @@ static void ctrlmenu(void)
|
||||
if (input.system[1] > SYSTEM_WAYPLAY)
|
||||
{
|
||||
input.system[1] = NO_SYSTEM;
|
||||
input.system[0] = SYSTEM_MD_GAMEPAD;
|
||||
input.system[0] = SYSTEM_GAMEPAD;
|
||||
}
|
||||
|
||||
/* reset I/O ports */
|
||||
@ -2262,10 +2391,13 @@ static void ctrlmenu(void)
|
||||
}
|
||||
}
|
||||
|
||||
/* save device index */
|
||||
index = m->selected - 2;
|
||||
|
||||
/* update player index */
|
||||
old_player = player;
|
||||
player = 0;
|
||||
for (i=0; i<(m->selected-2); i++)
|
||||
for (i=0; i<index; i++)
|
||||
{
|
||||
if (input.dev[i] != NO_DEVICE) player ++;
|
||||
}
|
||||
@ -2299,17 +2431,24 @@ static void ctrlmenu(void)
|
||||
m->buttons[9].shift[3] = 1;
|
||||
}
|
||||
|
||||
/* emulated device type */
|
||||
type = input.dev[m->selected - 2];
|
||||
|
||||
/* retrieve current player informations */
|
||||
switch (type)
|
||||
switch (input.dev[index])
|
||||
{
|
||||
case DEVICE_PAD2B:
|
||||
case DEVICE_PAD3B:
|
||||
case DEVICE_PAD6B:
|
||||
{
|
||||
items = items_special[0];
|
||||
special = &config.input[player].padtype;
|
||||
if (input.system[index/4] == SYSTEM_MS4PLAY)
|
||||
{
|
||||
/* force 2-buttons pad */
|
||||
items = items_special[3];
|
||||
special = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
items = items_special[0];
|
||||
special = &config.input[player].padtype;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@ -2323,16 +2462,15 @@ static void ctrlmenu(void)
|
||||
case DEVICE_LIGHTGUN:
|
||||
{
|
||||
items = items_special[2];
|
||||
|
||||
if ((input.system[1] == SYSTEM_MENACER) || (input.system[1] == SYSTEM_JUSTIFIER))
|
||||
{
|
||||
/* Menacer & Justifiers affected to devices 4 & 5 */
|
||||
special = &config.gun_cursor[m->selected & 1];
|
||||
/* Menacer & Justifiers affected to entries 4 & 5 */
|
||||
special = &config.gun_cursor[index & 1];
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Lightphasers affected to devices 0 & 4 */
|
||||
special = &config.gun_cursor[m->selected >> 2];
|
||||
/* Lightphasers affected to entries 0 & 4 */
|
||||
special = &config.gun_cursor[index / 4];
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -2364,11 +2502,11 @@ static void ctrlmenu(void)
|
||||
GUI_DrawMenuFX(m, 20, 0);
|
||||
|
||||
/* some devices require analog sticks */
|
||||
if ((type == DEVICE_XE_A1P) && ((config.input[player].device == -1) || (config.input[player].device == 1)))
|
||||
if ((input.dev[index] == DEVICE_XE_A1P) && ((config.input[player].device == -1) || (config.input[player].device == 1)))
|
||||
{
|
||||
GUI_WaitPrompt("Warning","One Analog Stick required !");
|
||||
}
|
||||
else if ((type == DEVICE_ACTIVATOR) && ((config.input[player].device != 0) && (config.input[player].device != 3)))
|
||||
else if ((input.dev[index] == DEVICE_ACTIVATOR) && ((config.input[player].device != 0) && (config.input[player].device != 3)))
|
||||
{
|
||||
GUI_WaitPrompt("Warning","Two Analog Sticks required !");
|
||||
}
|
||||
@ -2389,18 +2527,20 @@ static void ctrlmenu(void)
|
||||
{
|
||||
if (special)
|
||||
{
|
||||
/* switch option */
|
||||
*special ^= 1;
|
||||
|
||||
/* specific case: controller type */
|
||||
if (type < 2)
|
||||
if (input.dev[index] < 0x03)
|
||||
{
|
||||
/* re-initialize emulated device */
|
||||
input_init();
|
||||
input_reset();
|
||||
/* switch pad type */
|
||||
*special = (*special + 1) & 0x03;
|
||||
|
||||
/* update emulated device type */
|
||||
type = *special;
|
||||
/* reinitialize emulated device(s) */
|
||||
io_init();
|
||||
input_reset();
|
||||
}
|
||||
else
|
||||
{
|
||||
/* switch option */
|
||||
*special ^= 1;
|
||||
}
|
||||
|
||||
/* update menu items */
|
||||
@ -2556,7 +2696,15 @@ static void ctrlmenu(void)
|
||||
if (config.input[player].device >= 0)
|
||||
{
|
||||
GUI_MsgBoxOpen("Keys Configuration", "",0);
|
||||
gx_input_Config(config.input[player].port, config.input[player].device, type);
|
||||
if ((*special == 3) && !system_hw)
|
||||
{
|
||||
/* no auto-detected pad type, use 6-buttons key mapping as default */
|
||||
gx_input_Config(config.input[player].port, config.input[player].device, DEVICE_PAD6B);
|
||||
}
|
||||
else
|
||||
{
|
||||
gx_input_Config(config.input[player].port, config.input[player].device, input.dev[index]);
|
||||
}
|
||||
GUI_MsgBoxClose();
|
||||
}
|
||||
break;
|
||||
@ -2687,6 +2835,8 @@ static void ctrlmenu(void)
|
||||
}
|
||||
gxTextureClose(&items_special[0][0].texture);
|
||||
gxTextureClose(&items_special[0][1].texture);
|
||||
gxTextureClose(&items_special[0][2].texture);
|
||||
gxTextureClose(&items_special[0][3].texture);
|
||||
gxTextureClose(&items_special[1][0].texture);
|
||||
gxTextureClose(&items_special[1][1].texture);
|
||||
gxTextureClose(&items_device[1].texture);
|
||||
|
122
gx/gx_input.c
@ -233,37 +233,40 @@ static void pad_update(s8 chan, u8 i)
|
||||
return;
|
||||
}
|
||||
|
||||
/* Default menu key (right analog stick if not needed by emulated device) */
|
||||
if ((input.dev[i] < DEVICE_XE_A1P) && (PAD_SubStickX(chan) > ANALOG_SENSITIVITY))
|
||||
{
|
||||
ConfigRequested = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Emulated device */
|
||||
switch (input.dev[i])
|
||||
{
|
||||
case DEVICE_PAD6B:
|
||||
{
|
||||
/* Extra buttons */
|
||||
/* X,Y,Z,MODE buttons */
|
||||
if (p & pad_keymap[KEY_BUTTONX]) input.pad[i] |= INPUT_X;
|
||||
if (p & pad_keymap[KEY_BUTTONY]) input.pad[i] |= INPUT_Y;
|
||||
if (p & pad_keymap[KEY_BUTTONZ]) input.pad[i] |= INPUT_Z;
|
||||
if (p & pad_keymap[KEY_MODE]) input.pad[i] |= INPUT_MODE;
|
||||
|
||||
/* default inputs are checked below */
|
||||
}
|
||||
|
||||
case DEVICE_PAD3B:
|
||||
{
|
||||
/* Default menu key (right analog stick) */
|
||||
if (PAD_SubStickX(chan) > ANALOG_SENSITIVITY)
|
||||
{
|
||||
ConfigRequested = 1;
|
||||
return;
|
||||
}
|
||||
/* A button */
|
||||
if (p & pad_keymap[KEY_BUTTONA]) input.pad[i] |= INPUT_A;
|
||||
}
|
||||
|
||||
case DEVICE_PAD2B:
|
||||
{
|
||||
/* D-PAD */
|
||||
if ((p & PAD_BUTTON_UP) || (y > ANALOG_SENSITIVITY)) input.pad[i] |= INPUT_UP;
|
||||
else if ((p & PAD_BUTTON_DOWN) || (y < -ANALOG_SENSITIVITY)) input.pad[i] |= INPUT_DOWN;
|
||||
if ((p & PAD_BUTTON_LEFT) || (x < -ANALOG_SENSITIVITY)) input.pad[i] |= INPUT_LEFT;
|
||||
else if ((p & PAD_BUTTON_RIGHT) || (x > ANALOG_SENSITIVITY)) input.pad[i] |= INPUT_RIGHT;
|
||||
|
||||
/* Buttons */
|
||||
if (p & pad_keymap[KEY_BUTTONA]) input.pad[i] |= INPUT_A;
|
||||
/* default buttons */
|
||||
if (p & pad_keymap[KEY_BUTTONB]) input.pad[i] |= INPUT_B;
|
||||
if (p & pad_keymap[KEY_BUTTONC]) input.pad[i] |= INPUT_C;
|
||||
if (p & pad_keymap[KEY_START]) input.pad[i] |= INPUT_START;
|
||||
@ -308,19 +311,10 @@ static void pad_update(s8 chan, u8 i)
|
||||
{
|
||||
/* Y analog position [0-255] */
|
||||
input.analog[i][1] = y ? (127 - y) : (128 - y);
|
||||
|
||||
/* default inputs are checked below */
|
||||
}
|
||||
}
|
||||
|
||||
case DEVICE_PADDLE:
|
||||
{
|
||||
/* Default menu key (right analog stick) */
|
||||
if (PAD_SubStickX(chan) > ANALOG_SENSITIVITY)
|
||||
{
|
||||
ConfigRequested = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
/* X analog position [0-255] */
|
||||
input.analog[i][0] = (x + 128);
|
||||
|
||||
@ -332,38 +326,8 @@ static void pad_update(s8 chan, u8 i)
|
||||
break;
|
||||
}
|
||||
|
||||
case DEVICE_PAD2B:
|
||||
{
|
||||
/* Default menu key (right analog stick) */
|
||||
if (PAD_SubStickX(chan) > ANALOG_SENSITIVITY)
|
||||
{
|
||||
ConfigRequested = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
/* D-PAD */
|
||||
if ((p & PAD_BUTTON_UP) || (y > ANALOG_SENSITIVITY)) input.pad[i] |= INPUT_UP;
|
||||
else if ((p & PAD_BUTTON_DOWN) || (y < -ANALOG_SENSITIVITY)) input.pad[i] |= INPUT_DOWN;
|
||||
if ((p & PAD_BUTTON_LEFT) || (x < -ANALOG_SENSITIVITY)) input.pad[i] |= INPUT_LEFT;
|
||||
else if ((p & PAD_BUTTON_RIGHT) || (x > ANALOG_SENSITIVITY)) input.pad[i] |= INPUT_RIGHT;
|
||||
|
||||
/* Buttons */
|
||||
if (p & pad_keymap[KEY_BUTTONB]) input.pad[i] |= INPUT_BUTTON1;
|
||||
if (p & pad_keymap[KEY_BUTTONC]) input.pad[i] |= INPUT_BUTTON2;
|
||||
if (p & pad_keymap[KEY_START]) input.pad[i] |= INPUT_START;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case DEVICE_LIGHTGUN:
|
||||
{
|
||||
/* Default menu key (right analog stick) */
|
||||
if (PAD_SubStickX(chan) > ANALOG_SENSITIVITY)
|
||||
{
|
||||
ConfigRequested = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Gun screen position (x,y) */
|
||||
input.analog[i][0] += x / ANALOG_SENSITIVITY;
|
||||
input.analog[i][1] -= y / ANALOG_SENSITIVITY;
|
||||
@ -385,13 +349,6 @@ static void pad_update(s8 chan, u8 i)
|
||||
|
||||
case DEVICE_MOUSE:
|
||||
{
|
||||
/* Default menu key (right analog stick) */
|
||||
if (PAD_SubStickX(chan) > ANALOG_SENSITIVITY)
|
||||
{
|
||||
ConfigRequested = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Mouse relative movement (-255,255) */
|
||||
input.analog[i][0] = (x / ANALOG_SENSITIVITY) * 2;
|
||||
input.analog[i][1] = (y / ANALOG_SENSITIVITY) * 2;
|
||||
@ -413,13 +370,6 @@ static void pad_update(s8 chan, u8 i)
|
||||
|
||||
case DEVICE_PICO:
|
||||
{
|
||||
/* Default menu key (right analog stick) */
|
||||
if (PAD_SubStickX(chan) > ANALOG_SENSITIVITY)
|
||||
{
|
||||
ConfigRequested = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
/* D-PAD */
|
||||
if (p & PAD_BUTTON_UP) input.pad[0] |= INPUT_UP;
|
||||
else if (p & PAD_BUTTON_DOWN) input.pad[0] |= INPUT_DOWN;
|
||||
@ -450,13 +400,6 @@ static void pad_update(s8 chan, u8 i)
|
||||
|
||||
case DEVICE_TEREBI:
|
||||
{
|
||||
/* Default menu key (right analog stick) */
|
||||
if (PAD_SubStickX(chan) > ANALOG_SENSITIVITY)
|
||||
{
|
||||
ConfigRequested = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
/* PEN screen position (x,y) */
|
||||
input.analog[0][0] += x / ANALOG_SENSITIVITY;
|
||||
input.analog[0][1] -= y / ANALOG_SENSITIVITY;
|
||||
@ -763,7 +706,7 @@ static void wpad_update(s8 chan, u8 i, u32 exp)
|
||||
{
|
||||
case DEVICE_PAD6B:
|
||||
{
|
||||
/* Extra buttons */
|
||||
/* X,Y,Z,MODE buttons */
|
||||
if (p & wpad_keymap[KEY_BUTTONX]) input.pad[i] |= INPUT_X;
|
||||
if (p & wpad_keymap[KEY_BUTTONY]) input.pad[i] |= INPUT_Y;
|
||||
if (p & wpad_keymap[KEY_BUTTONZ]) input.pad[i] |= INPUT_Z;
|
||||
@ -772,14 +715,19 @@ static void wpad_update(s8 chan, u8 i, u32 exp)
|
||||
|
||||
case DEVICE_PAD3B:
|
||||
{
|
||||
/* D- PAD */
|
||||
/* A button */
|
||||
if (p & wpad_keymap[KEY_BUTTONA]) input.pad[i] |= INPUT_A;
|
||||
}
|
||||
|
||||
case DEVICE_PAD2B:
|
||||
{
|
||||
/* D-PAD */
|
||||
if ((p & wpad_dirmap[exp][PAD_UP]) || (y > ANALOG_SENSITIVITY)) input.pad[i] |= INPUT_UP;
|
||||
else if ((p & wpad_dirmap[exp][PAD_DOWN]) || (y < -ANALOG_SENSITIVITY)) input.pad[i] |= INPUT_DOWN;
|
||||
if ((p & wpad_dirmap[exp][PAD_LEFT]) || (x < -ANALOG_SENSITIVITY)) input.pad[i] |= INPUT_LEFT;
|
||||
else if ((p & wpad_dirmap[exp][PAD_RIGHT]) || (x > ANALOG_SENSITIVITY)) input.pad[i] |= INPUT_RIGHT;
|
||||
|
||||
/* Buttons */
|
||||
if (p & wpad_keymap[KEY_BUTTONA]) input.pad[i] |= INPUT_A;
|
||||
/* default buttons */
|
||||
if (p & wpad_keymap[KEY_BUTTONB]) input.pad[i] |= INPUT_B;
|
||||
if (p & wpad_keymap[KEY_BUTTONC]) input.pad[i] |= INPUT_C;
|
||||
if (p & wpad_keymap[KEY_START]) input.pad[i] |= INPUT_START;
|
||||
@ -791,7 +739,7 @@ static void wpad_update(s8 chan, u8 i, u32 exp)
|
||||
{
|
||||
/* Left Stick analog position [0-255] */
|
||||
input.analog[i][0] = (x + 128);
|
||||
input.analog[i][1] = y ? (127 - y) : (128 - y);
|
||||
input.analog[i][1] = y ? (127 - y) : 128;
|
||||
|
||||
/* Right Stick analog position [0-255] */
|
||||
if (exp == WPAD_EXP_CLASSIC)
|
||||
@ -886,22 +834,6 @@ static void wpad_update(s8 chan, u8 i, u32 exp)
|
||||
break;
|
||||
}
|
||||
|
||||
case DEVICE_PAD2B:
|
||||
{
|
||||
/* D-PAD */
|
||||
if ((p & wpad_dirmap[exp][PAD_UP]) || (y > ANALOG_SENSITIVITY)) input.pad[i] |= INPUT_UP;
|
||||
else if ((p & wpad_dirmap[exp][PAD_DOWN]) || (y < -ANALOG_SENSITIVITY)) input.pad[i] |= INPUT_DOWN;
|
||||
if ((p & wpad_dirmap[exp][PAD_LEFT]) || (x < -ANALOG_SENSITIVITY)) input.pad[i] |= INPUT_LEFT;
|
||||
else if ((p & wpad_dirmap[exp][PAD_RIGHT]) || (x > ANALOG_SENSITIVITY)) input.pad[i] |= INPUT_RIGHT;
|
||||
|
||||
/* Buttons */
|
||||
if (p & wpad_keymap[KEY_BUTTONB]) input.pad[i] |= INPUT_BUTTON1;
|
||||
if (p & wpad_keymap[KEY_BUTTONC]) input.pad[i] |= INPUT_BUTTON2;
|
||||
if (p & wpad_keymap[KEY_START]) input.pad[i] |= INPUT_START;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case DEVICE_LIGHTGUN:
|
||||
{
|
||||
/* Gun screen position (x,y) */
|
||||
@ -1126,7 +1058,7 @@ void gx_input_Init(void)
|
||||
PAD_Init();
|
||||
#ifdef HW_RVL
|
||||
WPAD_Init();
|
||||
WPAD_SetIdleTimeout(60);
|
||||
WPAD_SetIdleTimeout(config.autosleep ? 300 : 1800);
|
||||
WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR);
|
||||
WPAD_SetVRes(WPAD_CHAN_ALL,640,480);
|
||||
#endif
|
||||
@ -1261,7 +1193,7 @@ void gx_input_SetDefault(void)
|
||||
{
|
||||
config.input[i].device = -1;
|
||||
config.input[i].port = i%4;
|
||||
config.input[i].padtype = 0;
|
||||
config.input[i].padtype = DEVICE_PAD2B | DEVICE_PAD3B | DEVICE_PAD6B; /* autodetected */
|
||||
}
|
||||
|
||||
#ifdef HW_RVL
|
||||
|
@ -1557,17 +1557,37 @@ void gx_video_Start(void)
|
||||
switch (config.ntsc)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
sms_ntsc_init(sms_ntsc, &sms_ntsc_composite);
|
||||
md_ntsc_init(md_ntsc, &md_ntsc_composite);
|
||||
break;
|
||||
}
|
||||
|
||||
case 2:
|
||||
{
|
||||
sms_ntsc_init(sms_ntsc, &sms_ntsc_svideo);
|
||||
md_ntsc_init(md_ntsc, &md_ntsc_svideo);
|
||||
break;
|
||||
}
|
||||
|
||||
case 3:
|
||||
{
|
||||
sms_ntsc_init(sms_ntsc, &sms_ntsc_rgb);
|
||||
md_ntsc_init(md_ntsc, &md_ntsc_rgb);
|
||||
}
|
||||
|
||||
case 4:
|
||||
{
|
||||
md_ntsc_setup_t ntsc_custom = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
ntsc_custom.sharpness = config.ntsc_sharpness;
|
||||
ntsc_custom.resolution = config.ntsc_resolution;
|
||||
ntsc_custom.artifacts = config.ntsc_artifacts;
|
||||
ntsc_custom.fringing = config.ntsc_fringing;
|
||||
ntsc_custom.bleed = config.ntsc_bleed;
|
||||
sms_ntsc_init(sms_ntsc, (sms_ntsc_setup_t *)&ntsc_custom);
|
||||
md_ntsc_init(md_ntsc, &ntsc_custom);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1630,6 +1650,7 @@ void gx_video_Start(void)
|
||||
}
|
||||
|
||||
/* GX emulation rendering */
|
||||
gxClearScreen((GXColor)BLACK);
|
||||
gxResetRendering(0);
|
||||
|
||||
/* resynchronize emulation with VSYNC */
|
||||
|
BIN
gx/images/Ctrl_gamepad.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 4.2 KiB |
BIN
gx/images/Ctrl_ms4play.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
gx/images/Ctrl_pad2b.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
gx/images/Ctrl_pad_auto.png
Normal file
After Width: | Height: | Size: 534 B |
@ -443,10 +443,13 @@ static void extract_directory(char *buf, const char *path, size_t size)
|
||||
buf[0] = '\0';
|
||||
}
|
||||
|
||||
static void update_viewport(void)
|
||||
static bool update_viewport(void)
|
||||
{
|
||||
vwidth = bitmap.viewport.w + (bitmap.viewport.x * 2);
|
||||
vheight = bitmap.viewport.h + (bitmap.viewport.y * 2);
|
||||
int ow = vwidth;
|
||||
int oh = vheight;
|
||||
|
||||
vwidth = bitmap.viewport.w + (bitmap.viewport.x * 2);
|
||||
vheight = bitmap.viewport.h + (bitmap.viewport.y * 2);
|
||||
|
||||
if (config.ntsc)
|
||||
{
|
||||
@ -460,6 +463,8 @@ static void update_viewport(void)
|
||||
{
|
||||
vheight = vheight * 2;
|
||||
}
|
||||
|
||||
return ((ow != vwidth) || (oh != vheight));
|
||||
}
|
||||
|
||||
static void check_variables(void)
|
||||
@ -712,8 +717,8 @@ static void configure_controls(void)
|
||||
int i;
|
||||
struct retro_variable var;
|
||||
|
||||
input.system[0] = SYSTEM_MD_GAMEPAD;
|
||||
input.system[1] = SYSTEM_MD_GAMEPAD;
|
||||
input.system[0] = SYSTEM_GAMEPAD;
|
||||
input.system[1] = SYSTEM_GAMEPAD;
|
||||
|
||||
var.key = "padtype";
|
||||
environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var);
|
||||
@ -726,15 +731,9 @@ static void configure_controls(void)
|
||||
else if (!strcmp(var.value, "2-buttons"))
|
||||
for(i = 0; i < MAX_INPUTS; i++)
|
||||
config.input[i].padtype = DEVICE_PAD2B;
|
||||
else if ((system_hw & SYSTEM_PBC) != SYSTEM_MD)
|
||||
for(i = 0; i < MAX_INPUTS; i++)
|
||||
config.input[i].padtype = DEVICE_PAD2B;
|
||||
else if (rominfo.peripherals & 2)
|
||||
for(i = 0; i < MAX_INPUTS; i++)
|
||||
config.input[i].padtype = DEVICE_PAD6B;
|
||||
else
|
||||
for(i = 0; i < MAX_INPUTS; i++)
|
||||
config.input[i].padtype = DEVICE_PAD3B;
|
||||
config.input[i].padtype = DEVICE_PAD2B | DEVICE_PAD3B | DEVICE_PAD6B;
|
||||
|
||||
var.key = "multitap";
|
||||
environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var);
|
||||
@ -746,6 +745,8 @@ static void configure_controls(void)
|
||||
input.system[1] = SYSTEM_TEAMPLAYER;
|
||||
else if (!strcmp(var.value, "teamplayer 1&2"))
|
||||
input.system[0] = input.system[1] = SYSTEM_TEAMPLAYER;
|
||||
else if (!strcmp(var.value, "master system 4p"))
|
||||
input.system[0] = SYSTEM_MS4PLAY;
|
||||
|
||||
var.key = "portb";
|
||||
environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var);
|
||||
@ -769,7 +770,7 @@ void retro_set_environment(retro_environment_t cb)
|
||||
{ "addr_error", "68k address error; enabled|disabled" },
|
||||
{ "lock_on", "Cartridge lock-on; disabled|game genie|action replay (pro)|sonic & knuckles" },
|
||||
{ "padtype", "Gamepad type; auto|6-buttons|3-buttons|2-buttons" },
|
||||
{ "multitap", "Multi Tap; disabled|4-wayplay|teamplayer (port 1)|teamplayer (port 2)|teamplayer (both)" },
|
||||
{ "multitap", "Multi Tap; disabled|4-wayplay|teamplayer (port 1)|teamplayer (port 2)|teamplayer (both)|master system 4p" },
|
||||
{ "portb", "Control Port 2; enabled|disabled" },
|
||||
{ "ym2413", "Master System FM; auto|disabled|enabled" },
|
||||
{ "dac_bits", "YM2612 DAC quantization; disabled|enabled" },
|
||||
@ -1004,11 +1005,13 @@ void retro_run(void)
|
||||
|
||||
if (bitmap.viewport.changed & 1)
|
||||
{
|
||||
struct retro_system_av_info info;
|
||||
bitmap.viewport.changed &= ~1;
|
||||
update_viewport();
|
||||
retro_get_system_av_info(&info);
|
||||
environ_cb(RETRO_ENVIRONMENT_SET_SYSTEM_AV_INFO, &info);
|
||||
if (update_viewport())
|
||||
{
|
||||
struct retro_system_av_info info;
|
||||
retro_get_system_av_info(&info);
|
||||
environ_cb(RETRO_ENVIRONMENT_SET_SYSTEM_AV_INFO, &info);
|
||||
}
|
||||
}
|
||||
|
||||
video_cb(bitmap.data, vwidth, vheight, 720 * 2);
|
||||
|
@ -40,13 +40,14 @@ void set_config_defaults(void)
|
||||
config.render = 0; /* 1 = double resolution output (only when interlaced mode 2 is enabled) */
|
||||
|
||||
/* controllers options */
|
||||
input.system[0] = SYSTEM_MD_GAMEPAD;
|
||||
input.system[1] = SYSTEM_MD_GAMEPAD;
|
||||
input.system[0] = SYSTEM_GAMEPAD;
|
||||
input.system[1] = SYSTEM_GAMEPAD;
|
||||
config.gun_cursor[0] = 1;
|
||||
config.gun_cursor[1] = 1;
|
||||
config.invert_mouse = 0;
|
||||
for (i=0;i<MAX_INPUTS;i++)
|
||||
{
|
||||
config.input[i].padtype = DEVICE_PAD3B;
|
||||
/* autodetected control pad type */
|
||||
config.input[i].padtype = DEVICE_PAD2B | DEVICE_PAD3B | DEVICE_PAD6B;
|
||||
}
|
||||
}
|
||||
|