From 54210e8222743aea364a9187f9257d9f08ee6309 Mon Sep 17 00:00:00 2001 From: EkeEke Date: Tue, 1 Apr 2014 20:36:16 +0200 Subject: [PATCH] [Core/IO] added gamepad type auto-detection --- core/cart_hw/md_cart.c | 4 +- core/cart_hw/sms_cart.c | 413 +++++++++++++++++----------------- core/input_hw/input.c | 93 ++++++-- core/input_hw/input.h | 14 +- core/loadrom.c | 30 +-- core/loadrom.h | 2 +- gx/config.c | 6 +- gx/gui/menu.c | 103 +++++---- gx/gx_input.c | 120 +++------- gx/images/Ctrl_gamepad.png | Bin 0 -> 4427 bytes gx/images/Ctrl_gamepad_md.png | Bin 4938 -> 0 bytes gx/images/Ctrl_gamepad_ms.png | Bin 4286 -> 0 bytes gx/images/Ctrl_pad2b.png | Bin 0 -> 1201 bytes gx/images/Ctrl_pad_auto.png | Bin 0 -> 534 bytes libretro/libretro.c | 12 +- sdl/config.c | 7 +- 16 files changed, 392 insertions(+), 412 deletions(-) create mode 100644 gx/images/Ctrl_gamepad.png delete mode 100644 gx/images/Ctrl_gamepad_md.png delete mode 100644 gx/images/Ctrl_gamepad_ms.png create mode 100644 gx/images/Ctrl_pad2b.png create mode 100644 gx/images/Ctrl_pad_auto.png diff --git a/core/cart_hw/md_cart.c b/core/cart_hw/md_cart.c index c7ddf58..dc19bba 100644 --- a/core/cart_hw/md_cart.c +++ b/core/cart_hw/md_cart.c @@ -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 */ diff --git a/core/cart_hw/sms_cart.c b/core/cart_hw/sms_cart.c index e244bd5..cee3905 100644 --- a/core/cart_hw/sms_cart.c +++ b/core/cart_hw/sms_cart.c @@ -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 */ @@ -255,83 +255,83 @@ static const rominfo_t game_list[] = {0x41C948BF, 0, 0, SYSTEM_SPORTSPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_USA}, /* Sports Pad Soccer */ /* 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 +373,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 +405,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 +474,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; diff --git a/core/input_hw/input.c b/core/input_hw/input.c index ce82634..f318008 100644 --- a/core/input_hw/input.c +++ b/core/input_hw/input.c @@ -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; iviTVMode = (vmode->viTVMode & ~3) | VI_INTERLACE; - VIDEO_Configure (vmode); + VIDEO_Configure(vmode); VIDEO_Flush(); VIDEO_WaitVSync(); VIDEO_WaitVSync(); @@ -273,7 +273,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(); } diff --git a/gx/gui/menu.c b/gx/gui/menu.c index 3442dd4..2f88420 100644 --- a/gx/gui/menu.c +++ b/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,8 @@ 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_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[]; @@ -2024,21 +2025,19 @@ 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] = + gui_item items_sys[2][12] = { { {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}, @@ -2047,13 +2046,12 @@ static void ctrlmenu(void) }, { {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}, @@ -2063,27 +2061,35 @@ static void ctrlmenu(void) }; /* 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}, } }; @@ -2115,12 +2121,14 @@ static void ctrlmenu(void) button_player_none_data.texture[0] = gxTextureOpenPNG(button_player_none_data.image[0],0); /* initialize custom images */ - for (i=0; i<13; i++) + for (i=0; i<12; i++) { items_sys[1][i].texture = items_sys[0][i].texture = gxTextureOpenPNG(items_sys[0][i].data,0); } 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; @@ -2201,7 +2209,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 */ @@ -2251,12 +2259,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; @@ -2280,13 +2283,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 */ @@ -2299,7 +2302,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 */ @@ -2365,10 +2368,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; ibuttons[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: { @@ -2426,16 +2430,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; } @@ -2467,11 +2470,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 !"); } @@ -2492,18 +2495,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 */ @@ -2659,7 +2664,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; @@ -2790,6 +2803,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); diff --git a/gx/gx_input.c b/gx/gx_input.c index b175cb2..d216c37 100644 --- a/gx/gx_input.c +++ b/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) */ @@ -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 diff --git a/gx/images/Ctrl_gamepad.png b/gx/images/Ctrl_gamepad.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e8a2a77a2f671cf282ba0d60fc8a435b7f3db7 GIT binary patch literal 4427 zcmb_gXHydj(@mj--dn&V2qH-DLO@yoL+7F((xpq47CH%nZ~>{(5hN($r8kk9C?HL0 zRJtG{y-FZ-U!MQ)?#%Aa**P<3KkUqz*?-MU^qJ_P^Z)>W34Is!&s9fVr7eW!s!rx` z{0~qCYNPK#t|AiRl6Zyb{O?)^0ssu`|4ZP+eDwL%5D}#NAjrbcEePWj;0iEyat`qG zadq)@Lg;x0xMKVQyaEx%585+s314x!|Hst{aCHju^z%jB^Yn2A$jD2}DoM*Kh~14I z003A^&?v2Yp+(z8QR(wm)_oe7-TC?U_5nBLVZ(Qx?VedCMh@c+KnGP{`euZI5Phtr zwE%Jr+jQUj(k$y1a~YV#t^YDbMz{jO?F0UVSQM6|PCiG_Vy@=u0$FMo`LjZh*>R@FvT+;bmRe>N1=MbZZsFE9##c0QQV zHy0(y*~tHnDBDC2r>eDbgt8w8INvLLs*osEVM8b}-4OQ|up>e~zP>oh zCR(Bg_;AuBgOtw!F97ZgoXDLCE)ft^cD{L)jp5eZ? z{RBWWn&sHNypgCS25!gRN}uYKK%SqnFRKxlCG0BxImp&C3rLBS7oBO;sB@3;rg(+e z)$Kk`v@6joKYHj`2MixJz1m|^=;n;`WZ1~Tlb+1Oair8FZ~@dsS7lov$B;t<_#>3K zLU5d%F6C07HwOL%RMkb;5j%-b78h`?4EJ9PPP}r$aO^EWiqu-U@<+uMe-Z777LXLm z-ajcKhb}m5Q|V_3?NmkTXn3e%9SzffI8FoAwZ!UAb$n-Ul8U3v1Ikfb`$^(lxTsxfJhX8L@MAr(s!YBiH5ZPd>}`@$6tVpQHd)0 z87Jq$d!R?tT*Pl7t^Jo9M6dy0hG}#M8@mre1MZsx6s1D&2a?xb!ZpUNe)2OJPHVqBtQ5i`nBT zv`;H7^1`TJNh5~F)jk9Kb%F><(9kbX|FIoOeIfHoF}sG<`&6;YJ5SD5M0!$90e&Fg z`T#@7p8Qc1|D$va@iwT98rL9cdZKrlo(m)}opT2yJ#hYvITK zzR)yk{Q-^o6f~P$6ba0qbN~_*;F=GOf3{bp!%&_O&vVX4sDa|=GlA}(T*$@BAuour z=AYJN*g7q=E*(vS{?hkkM)lug==WA*2A-sJ#yNE`1!wlj>f;=!qM<6=fuPs?zu|t( zn@_a;IVq~&u~TAgVn%W=>72)>^X2lxFke!|KxN+r-2}ARwwn{F9c0zhfEt?Wf7KP5 zW#XUxnPttI%izIcZX*H@1(nPC1Fi`^4tgSU-hwoseKZK=EF^ja-NU5b5`rBX zp@&=1?Olv2v=yd4$VynE>&o) zd~u`!I-eZz^@8|r?Y2*!KULDxMV

bb0Ums577Cp>T8e=YSGjlScTl*s}B`SN=l{ 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 WZ;LHrmM(8u0AqcNTTQx%$NvX{eMt@g diff --git a/gx/images/Ctrl_gamepad_ms.png b/gx/images/Ctrl_gamepad_ms.png deleted file mode 100644 index 4428f41bec6149c6cf9dcd8bbd020e23eb7ab611..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 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 UnwYYS{{w)YmXT&H*dgx!0Oe41$p8QV diff --git a/gx/images/Ctrl_pad2b.png b/gx/images/Ctrl_pad2b.png new file mode 100644 index 0000000000000000000000000000000000000000..1d5883e817d00e886d4ba0373c9ce1c4c3fcf8fb GIT binary patch literal 1201 zcmV;i1Wx;jP)2GNrXvYaBxWM@l1EIsB=_zh6u#M0wkBzs-CJ_x6VEHukDm`=KnNC|2BYsIxYcU z^hiL;Ip>tpE#N(%10Dj$z(g_)FaTNa8=wcqzzR6m+CDG`e$%;)&h$Eu-aT)^Ue@mw zu$Io1aC`=w0<=<`fwzD+bt%C2z#i}=a76Kj6<-5pz-{0e;2kM^RmT3Jvj&!_-gK5H zJ%eWNHJZIX0X_ge2lm<^ypV+nc%+M0QgB_&t;Aj{rE>wf7Z@GFg&q-5AJ%My&zO`^ zII{;_rFgS#ft*qriK(OwC@#ssO9Gs=-%H_2tR8EgiH*kroLP*Z4D?9``JClEPlapT z>hM?$Cu*4Vl<;^1_+82-dIo{)Wc}A-q6Kb9m)Y~hX5AqXy%67Hhz!#IHt>l7C$TdR zfHyMYWdR#elcS}COGinLDR8I@?gy~DEDdZE62m0MxQEZ~>uG_;3{Ulps1>1;5yx7y zVfM&cN@hBHrnR2~7+(s-ODB>!)*TJ-n)ZJLu24Lfsa{_J-w03BO1PtDwJ+vuI@qm;!)_g<&O{h{_B$nd!^*no+#InX;T60AC>Rt4AFBTB5DYOR+iT(2AH zGRr>!-%;Y%Ko%lkF5_KFuTm?`oLXLyTmxh`fKGzZoo>&s1K;Z4p%k46^os&}qDyW7 z@AK!9wE>ot4tP_Z8B@w(()#njE7Z=oq>;u?VnRT)Qiof3_YZT!dJix)Xs@8IN=5$`Nf^Yt+kQxnE)*%bE>_u_8v=_ z%TYrKf%sQJY{gH@6Pc2HCo*D8iEn$@ciq+gk@k86c7pjLx7pY}{q5lIfsWG7V<|hJ zB-JUktL31#(Vo39rZ$uFpsSbcT5DJQ+m+#g4*6gV5s&C@GZw$R)|y>och3%Nx8H`s zvdM_w8dGYmUr>^Fjgqbdz5qT1ZUxH?(9OdgFt*j$^Am+#e;lzRXtUakq0^FfisonxEX)W8#?vBV7 z;XUoV|J|SB(cr(5G2GJ;)7d$QjU-b9`j_*s0TH3>i P00000NkvXXu0mjf^z1Cj literal 0 HcmV?d00001 diff --git a/gx/images/Ctrl_pad_auto.png b/gx/images/Ctrl_pad_auto.png new file mode 100644 index 0000000000000000000000000000000000000000..8ac41cd3b68735e01ac514dd0dbaa7f23d22ae9f GIT binary patch literal 534 zcmV+x0_pvUP)|+p-XW#|EJ;J5uSs}-(9Ita- zMBd$StE$Ifz1Q<9u^j2KJ#2#9x%k@J_1Q1lLQ$yJa5sYU?>d>#D-d4dI2^{N~0_A`<(N z4o!M1KSJv&@J>}XMyTX+?8Ht5i$i#B(!Jp^xTSSDho^$ceVTLN)X0HTBL_~695^+8 Y07J);hIC*V%m4rY07*qoM6N<$f+9QM0RR91 literal 0 HcmV?d00001 diff --git a/libretro/libretro.c b/libretro/libretro.c index 087861f..a10cb96 100644 --- a/libretro/libretro.c +++ b/libretro/libretro.c @@ -712,8 +712,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 +726,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); diff --git a/sdl/config.c b/sdl/config.c index 408cac5..00ae20c 100644 --- a/sdl/config.c +++ b/sdl/config.c @@ -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