mirror of
https://github.com/holub/mame
synced 2025-10-06 17:08:28 +03:00
(MESS) gamegear: fixed detection of SMS games (via adapter) and added
support for connecting a SMS pad to the unit (via Gear2Gear port + adapter) to play 2players games. [Enik Land] out of whatsnew: needless to say, we are not yet in the position to use the Gear2Gear port to link two gamegear units, so don't ask ;-)
This commit is contained in:
parent
075a8929c6
commit
9f95c4fb8f
@ -1252,6 +1252,17 @@ BUSOBJS += $(BUSOBJ)/gameboy/rom.o
|
|||||||
BUSOBJS += $(BUSOBJ)/gameboy/mbc.o
|
BUSOBJS += $(BUSOBJ)/gameboy/mbc.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
#-------------------------------------------------
|
||||||
|
#
|
||||||
|
#@src/emu/bus/gamegear/gear2gear.h,BUSES += GAMEGEAR
|
||||||
|
#-------------------------------------------------
|
||||||
|
|
||||||
|
ifneq ($(filter GAMEGEAR,$(BUSES)),)
|
||||||
|
OBJDIRS += $(BUSOBJ)/gamegear
|
||||||
|
BUSOBJS += $(BUSOBJ)/gamegear/gear2gear.o
|
||||||
|
BUSOBJS += $(BUSOBJ)/gamegear/smsctrladp.o
|
||||||
|
endif
|
||||||
|
|
||||||
#-------------------------------------------------
|
#-------------------------------------------------
|
||||||
#
|
#
|
||||||
#@src/emu/bus/gba/gba_slot.h,BUSES += GBA
|
#@src/emu/bus/gba/gba_slot.h,BUSES += GBA
|
||||||
|
@ -29,7 +29,7 @@ const device_type SMS_MULTITAP = &device_creator<sms_multitap_device>;
|
|||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
sms_multitap_device::sms_multitap_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
sms_multitap_device::sms_multitap_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||||
device_t(mconfig, SMS_MULTITAP, "Furrtek's Multitap", tag, owner, clock, "sms_multitap", __FILE__),
|
device_t(mconfig, SMS_MULTITAP, "Multitap", tag, owner, clock, "sms_multitap", __FILE__),
|
||||||
device_sms_control_port_interface(mconfig, *this),
|
device_sms_control_port_interface(mconfig, *this),
|
||||||
m_subctrl1_port(*this, "ctrl1"),
|
m_subctrl1_port(*this, "ctrl1"),
|
||||||
m_subctrl2_port(*this, "ctrl2"),
|
m_subctrl2_port(*this, "ctrl2"),
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
|
|
||||||
Sega Master System "Sports Pad" (japanese model) emulation
|
Sega Master System "Sports Pad" (Japanese model) emulation
|
||||||
|
|
||||||
Copyright MESS Team.
|
Copyright MESS Team.
|
||||||
Visit http://mamedev.org for licensing and usage restrictions.
|
Visit http://mamedev.org for licensing and usage restrictions.
|
||||||
|
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
|
|
||||||
// The japanese Sports Pad controller is only required to play the cartridge
|
// The Japanese Sports Pad controller is only required to play the cartridge
|
||||||
// Sports Pad Soccer, released in Japan. It uses a different mode than the
|
// Sports Pad Soccer, released in Japan. It uses a different mode than the
|
||||||
// used by the US model, due to missing output lines on Sega Mark III
|
// used by the US model, due to missing output lines on Sega Mark III
|
||||||
// controller ports.
|
// controller ports.
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
|
|
||||||
Sega Master System "Sports Pad" (japanese model) emulation
|
Sega Master System "Sports Pad" (Japanese model) emulation
|
||||||
|
|
||||||
Copyright MESS Team.
|
Copyright MESS Team.
|
||||||
Visit http://mamedev.org for licensing and usage restrictions.
|
Visit http://mamedev.org for licensing and usage restrictions.
|
||||||
|
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
|
|
||||||
// The japanese Sports Pad controller is only required to play the cartridge
|
// The Japanese Sports Pad controller is only required to play the cartridge
|
||||||
// Sports Pad Soccer, released in Japan. It uses a different mode than the
|
// Sports Pad Soccer, released in Japan. It uses a different mode than the
|
||||||
// used by the US model, due to missing output lines on Sega Mark III
|
// used by the US model, due to missing output lines on Sega Mark III
|
||||||
// controller ports.
|
// controller ports.
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
To do:
|
To do:
|
||||||
|
|
||||||
- SIO interface for Game Gear (needs netplay, I guess)
|
- SIO interface for Game Gear (needs netplay, I guess)
|
||||||
- Gear to Gear Port SMS Controller Adaptor
|
|
||||||
- Sega Demo Unit II (kiosk expansion device)
|
- Sega Demo Unit II (kiosk expansion device)
|
||||||
- SMS Disk System (floppy disk drive expansion device) - unreleased
|
- SMS Disk System (floppy disk drive expansion device) - unreleased
|
||||||
- Rapid button of Japanese Master System
|
- Rapid button of Japanese Master System
|
||||||
@ -24,7 +23,7 @@
|
|||||||
- Software compatibility flags, by region and/or BIOS
|
- Software compatibility flags, by region and/or BIOS
|
||||||
- Emulate SRAM cartridges? (for use with Bock's dump tool)
|
- Emulate SRAM cartridges? (for use with Bock's dump tool)
|
||||||
- Support for other DE-9 compatible controllers, like the Mega Drive 6-Button
|
- Support for other DE-9 compatible controllers, like the Mega Drive 6-Button
|
||||||
that has software support (at least a test tool made by Charles MacDonald)
|
that has homebrew software support
|
||||||
|
|
||||||
The Game Gear SIO hardware is not emulated but has some
|
The Game Gear SIO hardware is not emulated but has some
|
||||||
placeholders in 'machine/sms.c'
|
placeholders in 'machine/sms.c'
|
||||||
@ -47,6 +46,29 @@
|
|||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
General compatibility issues on real hardware (not emulation bugs):
|
||||||
|
|
||||||
|
- Some ROMs have issues or don't work when running on a console of different
|
||||||
|
region;
|
||||||
|
- Many Japanese/Korean or homebrew ROMs don't have the signature required by
|
||||||
|
BIOSes of consoles sold overseas;
|
||||||
|
- Paddle games need to detect the system region as Japanese to work with the
|
||||||
|
Paddle controller;
|
||||||
|
- Few games of the ones with FM support need to detect the system region as
|
||||||
|
Japanese to play FM sound;
|
||||||
|
- The Light Phaser gun doesn't work with the Japanese SMS;
|
||||||
|
- There are reports about Light Phaser working on the second Korean console
|
||||||
|
version, and a Korean advert shows support on the first version (Gam*Boy I,
|
||||||
|
although based on Japanese SMS);
|
||||||
|
- The Korean SMS versions have Japanese-format cartridge slot, but only on the
|
||||||
|
first (Gam*Boy I) the region is detected as Japanese;
|
||||||
|
- Some SMS ROMs don't run when are plugged-in to SMS expansion slot, through
|
||||||
|
the gender adapter;
|
||||||
|
- Some SMS ROMs don't run when are plugged-in to a Game Gear, through the
|
||||||
|
Master Gear adapter;
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
Sega Master System II
|
Sega Master System II
|
||||||
Sega 1990
|
Sega 1990
|
||||||
|
|
||||||
@ -338,10 +360,10 @@ static ADDRESS_MAP_START( gg_io, AS_IO, 8, sms_state )
|
|||||||
AM_RANGE(0x40, 0x7f) AM_DEVWRITE("gamegear", gamegear_device, write)
|
AM_RANGE(0x40, 0x7f) AM_DEVWRITE("gamegear", gamegear_device, write)
|
||||||
AM_RANGE(0x80, 0x80) AM_MIRROR(0x3e) AM_DEVREADWRITE("sms_vdp", sega315_5124_device, vram_read, vram_write)
|
AM_RANGE(0x80, 0x80) AM_MIRROR(0x3e) AM_DEVREADWRITE("sms_vdp", sega315_5124_device, vram_read, vram_write)
|
||||||
AM_RANGE(0x81, 0x81) AM_MIRROR(0x3e) AM_DEVREADWRITE("sms_vdp", sega315_5124_device, register_read, register_write)
|
AM_RANGE(0x81, 0x81) AM_MIRROR(0x3e) AM_DEVREADWRITE("sms_vdp", sega315_5124_device, register_read, register_write)
|
||||||
AM_RANGE(0xc0, 0xc0) AM_READ_PORT("GG_PORT_DC")
|
AM_RANGE(0xc0, 0xc0) AM_READ(sms_input_port_dc_r)
|
||||||
AM_RANGE(0xc1, 0xc1) AM_READ_PORT("GG_PORT_DD")
|
AM_RANGE(0xc1, 0xc1) AM_READ(sms_input_port_dd_r)
|
||||||
AM_RANGE(0xdc, 0xdc) AM_READ_PORT("GG_PORT_DC")
|
AM_RANGE(0xdc, 0xdc) AM_READ(sms_input_port_dc_r)
|
||||||
AM_RANGE(0xdd, 0xdd) AM_READ_PORT("GG_PORT_DD")
|
AM_RANGE(0xdd, 0xdd) AM_READ(sms_input_port_dd_r)
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
@ -439,9 +461,6 @@ static INPUT_PORTS_START( gg )
|
|||||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
|
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
|
||||||
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
|
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||||
|
|
||||||
PORT_START("GG_PORT_DD")
|
|
||||||
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
|
|
||||||
|
|
||||||
PORT_START("START")
|
PORT_START("START")
|
||||||
PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNUSED )
|
PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START ) PORT_NAME("Start") /* Game Gear START */
|
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START ) PORT_NAME("Start") /* Game Gear START */
|
||||||
@ -785,6 +804,10 @@ static MACHINE_CONFIG_START( gamegear, sms_state )
|
|||||||
MCFG_GG_CARTRIDGE_ADD("slot", gg_cart, NULL)
|
MCFG_GG_CARTRIDGE_ADD("slot", gg_cart, NULL)
|
||||||
|
|
||||||
MCFG_SOFTWARE_LIST_ADD("cart_list", "gamegear")
|
MCFG_SOFTWARE_LIST_ADD("cart_list", "gamegear")
|
||||||
|
|
||||||
|
MCFG_GG_GEAR2GEAR_PORT_ADD("gear2gear", gg_gear2gear_port_devices, NULL)
|
||||||
|
MCFG_GG_GEAR2GEAR_PORT_TH_INPUT_HANDLER(WRITELINE(sms_state, sms_ctrl2_th_input)) // not verified
|
||||||
|
//MCFG_GG_GEAR2GEAR_PORT_PIXEL_HANDLER(READ32(sms_state, sms_pixel_color)) // only for GG-TV mod
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
@ -963,6 +986,10 @@ ROM_END
|
|||||||
- Sega Mark III Soft Desk 10
|
- Sega Mark III Soft Desk 10
|
||||||
- Sega Shooting Zone
|
- Sega Shooting Zone
|
||||||
|
|
||||||
|
The SMS Store Display Unit is labeled PD-W UNIT. Pictures found on Internet
|
||||||
|
show cartridges with a label where a not-for-sale message is written along
|
||||||
|
the information that it is for use on the Product Display-Working Unit.
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#define CONTROL1_TAG "ctrl1"
|
#define CONTROL1_TAG "ctrl1"
|
||||||
#define CONTROL2_TAG "ctrl2"
|
#define CONTROL2_TAG "ctrl2"
|
||||||
|
|
||||||
|
#include "bus/gamegear/gear2gear.h"
|
||||||
#include "bus/sms_ctrl/smsctrl.h"
|
#include "bus/sms_ctrl/smsctrl.h"
|
||||||
#include "bus/sms_exp/smsexp.h"
|
#include "bus/sms_exp/smsexp.h"
|
||||||
#include "bus/sega8/sega8_slot.h"
|
#include "bus/sega8/sega8_slot.h"
|
||||||
@ -36,6 +37,8 @@ public:
|
|||||||
m_region_maincpu(*this, "maincpu"),
|
m_region_maincpu(*this, "maincpu"),
|
||||||
m_port_ctrl1(*this, CONTROL1_TAG),
|
m_port_ctrl1(*this, CONTROL1_TAG),
|
||||||
m_port_ctrl2(*this, CONTROL2_TAG),
|
m_port_ctrl2(*this, CONTROL2_TAG),
|
||||||
|
m_port_gear2gear(*this, "gear2gear"),
|
||||||
|
m_port_gg_dc(*this, "GG_PORT_DC"),
|
||||||
m_port_pause(*this, "PAUSE"),
|
m_port_pause(*this, "PAUSE"),
|
||||||
m_port_reset(*this, "RESET"),
|
m_port_reset(*this, "RESET"),
|
||||||
m_port_start(*this, "START"),
|
m_port_start(*this, "START"),
|
||||||
@ -63,6 +66,8 @@ public:
|
|||||||
required_memory_region m_region_maincpu;
|
required_memory_region m_region_maincpu;
|
||||||
optional_device<sms_control_port_device> m_port_ctrl1;
|
optional_device<sms_control_port_device> m_port_ctrl1;
|
||||||
optional_device<sms_control_port_device> m_port_ctrl2;
|
optional_device<sms_control_port_device> m_port_ctrl2;
|
||||||
|
optional_device<gg_gear2gear_port_device> m_port_gear2gear;
|
||||||
|
optional_ioport m_port_gg_dc;
|
||||||
optional_ioport m_port_pause;
|
optional_ioport m_port_pause;
|
||||||
optional_ioport m_port_reset;
|
optional_ioport m_port_reset;
|
||||||
optional_ioport m_port_start;
|
optional_ioport m_port_start;
|
||||||
@ -195,7 +200,7 @@ protected:
|
|||||||
void setup_media_slots();
|
void setup_media_slots();
|
||||||
void setup_enabled_slots();
|
void setup_enabled_slots();
|
||||||
void lphaser_hcount_latch();
|
void lphaser_hcount_latch();
|
||||||
void sms_get_inputs(address_space &space);
|
void sms_get_inputs();
|
||||||
};
|
};
|
||||||
|
|
||||||
class smssdisp_state : public sms_state
|
class smssdisp_state : public sms_state
|
||||||
|
@ -45,6 +45,9 @@ WRITE_LINE_MEMBER(sms_state::sms_ctrl1_th_input)
|
|||||||
|
|
||||||
WRITE_LINE_MEMBER(sms_state::sms_ctrl2_th_input)
|
WRITE_LINE_MEMBER(sms_state::sms_ctrl2_th_input)
|
||||||
{
|
{
|
||||||
|
if (m_is_gamegear && (!m_cartslot->exists() || !m_cartslot->m_cart->get_sms_mode()))
|
||||||
|
return;
|
||||||
|
|
||||||
// Check if TH of controller port 2 is set to input (1)
|
// Check if TH of controller port 2 is set to input (1)
|
||||||
if (m_io_ctrl_reg & 0x08)
|
if (m_io_ctrl_reg & 0x08)
|
||||||
{
|
{
|
||||||
@ -63,9 +66,10 @@ WRITE_LINE_MEMBER(sms_state::sms_ctrl2_th_input)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void sms_state::sms_get_inputs( address_space &space )
|
void sms_state::sms_get_inputs()
|
||||||
{
|
{
|
||||||
UINT8 data1, data2;
|
UINT8 data1 = 0xff;
|
||||||
|
UINT8 data2 = 0xff;
|
||||||
|
|
||||||
m_port_dc_reg = 0xff;
|
m_port_dc_reg = 0xff;
|
||||||
m_port_dd_reg = 0xff;
|
m_port_dd_reg = 0xff;
|
||||||
@ -74,12 +78,28 @@ void sms_state::sms_get_inputs( address_space &space )
|
|||||||
// physical pins numbering. For register bits whose order differs,
|
// physical pins numbering. For register bits whose order differs,
|
||||||
// it's necessary move the equivalent controller bits to match.
|
// it's necessary move the equivalent controller bits to match.
|
||||||
|
|
||||||
data1 = m_port_ctrl1->port_r();
|
if (m_is_gamegear)
|
||||||
m_port_dc_reg &= ~0x0f | data1; // Up, Down, Left, Right
|
{
|
||||||
m_port_dc_reg &= ~0x10 | (data1 >> 1); // TL (Button 1)
|
data1 = m_port_gg_dc->read();
|
||||||
m_port_dc_reg &= ~0x20 | (data1 >> 2); // TR (Button 2)
|
m_port_dc_reg &= ~0x03f | data1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
data1 = m_port_ctrl1->port_r();
|
||||||
|
m_port_dc_reg &= ~0x0f | data1; // Up, Down, Left, Right
|
||||||
|
m_port_dc_reg &= ~0x10 | (data1 >> 1); // TL (Button 1)
|
||||||
|
m_port_dc_reg &= ~0x20 | (data1 >> 2); // TR (Button 2)
|
||||||
|
}
|
||||||
|
|
||||||
data2 = m_port_ctrl2->port_r();
|
if (m_is_gamegear)
|
||||||
|
{
|
||||||
|
if (m_cartslot->exists() && m_cartslot->m_cart->get_sms_mode())
|
||||||
|
data2 = m_port_gear2gear->port_r();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
data2 = m_port_ctrl2->port_r();
|
||||||
|
}
|
||||||
m_port_dc_reg &= ~0xc0 | (data2 << 6); // Up, Down
|
m_port_dc_reg &= ~0xc0 | (data2 << 6); // Up, Down
|
||||||
m_port_dd_reg &= ~0x03 | (data2 >> 2); // Left, Right
|
m_port_dd_reg &= ~0x03 | (data2 >> 2); // Left, Right
|
||||||
m_port_dd_reg &= ~0x04 | (data2 >> 3); // TL (Button 1)
|
m_port_dd_reg &= ~0x04 | (data2 >> 3); // TL (Button 1)
|
||||||
@ -116,7 +136,7 @@ READ8_MEMBER(sms_state::sms_fm_detect_r)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sms_get_inputs(space);
|
sms_get_inputs();
|
||||||
return m_port_dc_reg;
|
return m_port_dc_reg;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -129,6 +149,12 @@ WRITE8_MEMBER(sms_state::sms_io_control_w)
|
|||||||
UINT8 ctrl1_port_data = 0xff;
|
UINT8 ctrl1_port_data = 0xff;
|
||||||
UINT8 ctrl2_port_data = 0xff;
|
UINT8 ctrl2_port_data = 0xff;
|
||||||
|
|
||||||
|
if (m_is_gamegear && (!m_cartslot->exists() || !m_cartslot->m_cart->get_sms_mode()))
|
||||||
|
{
|
||||||
|
m_io_ctrl_reg = data;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Controller Port 1:
|
// Controller Port 1:
|
||||||
|
|
||||||
// check if TR or TH are set to output (0).
|
// check if TR or TH are set to output (0).
|
||||||
@ -171,12 +197,16 @@ WRITE8_MEMBER(sms_state::sms_io_control_w)
|
|||||||
}
|
}
|
||||||
if (!m_is_gamegear)
|
if (!m_is_gamegear)
|
||||||
m_port_ctrl2->port_w(ctrl2_port_data);
|
m_port_ctrl2->port_w(ctrl2_port_data);
|
||||||
|
else
|
||||||
|
m_port_gear2gear->port_w(ctrl2_port_data); // not verified
|
||||||
}
|
}
|
||||||
// check if TH is set to input (1).
|
// check if TH is set to input (1).
|
||||||
if (data & 0x08)
|
if (data & 0x08)
|
||||||
{
|
{
|
||||||
if (!m_is_gamegear)
|
if (!m_is_gamegear)
|
||||||
ctrl2_port_data &= ~0x40 | m_port_ctrl2->port_r();
|
ctrl2_port_data &= ~0x40 | m_port_ctrl2->port_r();
|
||||||
|
else
|
||||||
|
ctrl2_port_data &= ~0x40 | m_port_gear2gear->port_r(); // not verified
|
||||||
|
|
||||||
// check if TH input level is high (1) and was output/low (0)
|
// check if TH input level is high (1) and was output/low (0)
|
||||||
if ((ctrl2_port_data & 0x40) && !(m_io_ctrl_reg & 0x88))
|
if ((ctrl2_port_data & 0x40) && !(m_io_ctrl_reg & 0x88))
|
||||||
@ -232,17 +262,17 @@ READ8_MEMBER(sms_state::sms_input_port_dc_r)
|
|||||||
{
|
{
|
||||||
if (m_is_mark_iii)
|
if (m_is_mark_iii)
|
||||||
{
|
{
|
||||||
sms_get_inputs(space);
|
sms_get_inputs();
|
||||||
return m_port_dc_reg;
|
return m_port_dc_reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_mem_ctrl_reg & IO_CHIP)
|
if (!m_is_gamegear && (m_mem_ctrl_reg & IO_CHIP))
|
||||||
{
|
{
|
||||||
return 0xff;
|
return 0xff;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sms_get_inputs(space);
|
sms_get_inputs();
|
||||||
|
|
||||||
// Check if TR of controller port 1 is set to output (0)
|
// Check if TR of controller port 1 is set to output (0)
|
||||||
if (!(m_io_ctrl_reg & 0x01))
|
if (!(m_io_ctrl_reg & 0x01))
|
||||||
@ -260,14 +290,14 @@ READ8_MEMBER(sms_state::sms_input_port_dd_r)
|
|||||||
{
|
{
|
||||||
if (m_is_mark_iii)
|
if (m_is_mark_iii)
|
||||||
{
|
{
|
||||||
sms_get_inputs(space);
|
sms_get_inputs();
|
||||||
return m_port_dd_reg;
|
return m_port_dd_reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_mem_ctrl_reg & IO_CHIP)
|
if (!m_is_gamegear && (m_mem_ctrl_reg & IO_CHIP))
|
||||||
return 0xff;
|
return 0xff;
|
||||||
|
|
||||||
sms_get_inputs(space);
|
sms_get_inputs();
|
||||||
|
|
||||||
// Check if TR of controller port 2 is set to output (0)
|
// Check if TR of controller port 2 is set to output (0)
|
||||||
if (!(m_io_ctrl_reg & 0x04))
|
if (!(m_io_ctrl_reg & 0x04))
|
||||||
@ -276,12 +306,13 @@ READ8_MEMBER(sms_state::sms_input_port_dd_r)
|
|||||||
m_port_dd_reg &= ~0x08 | ((m_io_ctrl_reg & 0x40) >> 3);
|
m_port_dd_reg &= ~0x08 | ((m_io_ctrl_reg & 0x40) >> 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_is_smsj)
|
if (m_is_smsj || (m_is_gamegear && m_is_gg_region_japan))
|
||||||
{
|
{
|
||||||
// For Japanese Master System, set upper 4 bits with TH/TR
|
// For Japanese Master System, set upper 4 bits with TH/TR
|
||||||
// direction bits of IO control register, according to Enri's
|
// direction bits of IO control register, according to Enri's
|
||||||
// docs (http://www43.tok2.com/home/cmpslv/Sms/EnrSms.htm).
|
// docs (http://www43.tok2.com/home/cmpslv/Sms/EnrSms.htm).
|
||||||
// This makes the console incapable of using the Light Phaser.
|
// This makes the console incapable of using the Light Phaser.
|
||||||
|
// Assume the same for a Japanese Game Gear.
|
||||||
m_port_dd_reg &= ~0x10 | ((m_io_ctrl_reg & 0x01) << 4);
|
m_port_dd_reg &= ~0x10 | ((m_io_ctrl_reg & 0x01) << 4);
|
||||||
m_port_dd_reg &= ~0x20 | ((m_io_ctrl_reg & 0x04) << 3);
|
m_port_dd_reg &= ~0x20 | ((m_io_ctrl_reg & 0x04) << 3);
|
||||||
m_port_dd_reg &= ~0x40 | ((m_io_ctrl_reg & 0x02) << 5);
|
m_port_dd_reg &= ~0x40 | ((m_io_ctrl_reg & 0x02) << 5);
|
||||||
|
@ -595,6 +595,7 @@ BUSES += ECONET
|
|||||||
BUSES += EP64
|
BUSES += EP64
|
||||||
BUSES += EPSON_SIO
|
BUSES += EPSON_SIO
|
||||||
BUSES += GAMEBOY
|
BUSES += GAMEBOY
|
||||||
|
BUSES += GAMEGEAR
|
||||||
BUSES += GBA
|
BUSES += GBA
|
||||||
BUSES += GENERIC
|
BUSES += GENERIC
|
||||||
BUSES += IEEE488
|
BUSES += IEEE488
|
||||||
|
Loading…
Reference in New Issue
Block a user