mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
XaviX - improve inputs in e-kara, rad_rh (#4260)
* prepare for ekara inputs (nw) * something for rescue heroes (nw) * rad_rh tile addressing fixes (nw) * ekara input stuff (nw) * ekara and rad_rh input improvements (nw) * small hack to keep rad_bass happy until I figure out a few more things (nw) * extra note (nw) * bit more stable (nw)
This commit is contained in:
parent
9a98de1448
commit
ee2fcdf216
@ -7,14 +7,18 @@
|
||||
// #define VERBOSE 1
|
||||
#include "logmacro.h"
|
||||
|
||||
// 16 channel sound?
|
||||
|
||||
READ8_MEMBER(xavix_state::sound_75f0_r)
|
||||
{
|
||||
// something? (same as 75f1) 1 bit per channel, 8 channels
|
||||
LOG("%s: sound_75f0_r\n", machine().describe_context());
|
||||
return m_soundregs[0];
|
||||
}
|
||||
|
||||
READ8_MEMBER(xavix_state::sound_75f1_r)
|
||||
{
|
||||
// something? (same as 75f0) 1 bit per channel, 8 channels
|
||||
LOG("%s: sound_75f1_r\n", machine().describe_context());
|
||||
return m_soundregs[1];
|
||||
}
|
||||
@ -66,6 +70,8 @@ READ8_MEMBER(xavix_state::sound_75fd_r)
|
||||
|
||||
WRITE8_MEMBER(xavix_state::sound_75f0_w)
|
||||
{
|
||||
// something? (same as 75f1) 1 bit per channel, 8 channels
|
||||
|
||||
// expected to return data written
|
||||
m_soundregs[0] = data;
|
||||
LOG("%s: sound_75f0_w %02x\n", machine().describe_context(), data);
|
||||
@ -74,6 +80,8 @@ WRITE8_MEMBER(xavix_state::sound_75f0_w)
|
||||
|
||||
WRITE8_MEMBER(xavix_state::sound_75f1_w)
|
||||
{
|
||||
// something? (same as 75f0) 1 bit per channel, 8 channels
|
||||
|
||||
// expected to return data written
|
||||
m_soundregs[1] = data;
|
||||
LOG("%s: sound_75f1_w %02x\n", machine().describe_context(), data);
|
||||
@ -109,6 +117,8 @@ WRITE8_MEMBER(xavix_state::sound_75f9_w)
|
||||
|
||||
WRITE8_MEMBER(xavix_state::sound_75fa_w)
|
||||
{
|
||||
// timer? frequency? reg 0
|
||||
|
||||
// expected to return data written
|
||||
m_soundregs[10] = data;
|
||||
LOG("%s: sound_75fa_w %02x\n", machine().describe_context(), data);
|
||||
@ -116,6 +126,8 @@ WRITE8_MEMBER(xavix_state::sound_75fa_w)
|
||||
|
||||
WRITE8_MEMBER(xavix_state::sound_75fb_w)
|
||||
{
|
||||
// timer? frequency? reg 1
|
||||
|
||||
// expected to return data written
|
||||
m_soundregs[11] = data;
|
||||
LOG("%s: sound_75fb_w %02x\n", machine().describe_context(), data);
|
||||
@ -123,6 +135,8 @@ WRITE8_MEMBER(xavix_state::sound_75fb_w)
|
||||
|
||||
WRITE8_MEMBER(xavix_state::sound_75fc_w)
|
||||
{
|
||||
// timer? frequency? reg 2
|
||||
|
||||
// expected to return data written
|
||||
m_soundregs[12] = data;
|
||||
LOG("%s: sound_75fc_w %02x\n", machine().describe_context(), data);
|
||||
@ -130,15 +144,35 @@ WRITE8_MEMBER(xavix_state::sound_75fc_w)
|
||||
|
||||
WRITE8_MEMBER(xavix_state::sound_75fd_w)
|
||||
{
|
||||
// timer? frequency? reg 3
|
||||
|
||||
// expected to return data written
|
||||
m_soundregs[13] = data;
|
||||
LOG("%s: sound_75fd_w %02x\n", machine().describe_context(), data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(xavix_state::sound_75fe_w)
|
||||
READ8_MEMBER(xavix_state::sound_irqstatus_r)
|
||||
{
|
||||
m_soundregs[14] = data;
|
||||
LOG("%s: sound_75fe_w %02x\n", machine().describe_context(), data);
|
||||
// rad_rh checks this after doing something that looks like an irq ack
|
||||
// rad_bass does the same, but returning the wrong status bits causes it to corrupt memory and crash in certain situations, see code around 0037D5
|
||||
if (m_sound_irqstatus & 0x08) // hack for rad_rh
|
||||
return 0xf0 | m_sound_irqstatus;
|
||||
|
||||
return m_sound_irqstatus; // otherwise, keep rad_bass happy
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(xavix_state::sound_irqstatus_w)
|
||||
{
|
||||
// these look like irq ack bits, 4 sources?
|
||||
// related to sound_75fa_w , sound_75fb_w, sound_75fc_w, sound_75fd_w ?
|
||||
if (data & 0xf0)
|
||||
{
|
||||
m_sound_irqstatus &= ~data & 0xf0;
|
||||
}
|
||||
|
||||
m_sound_irqstatus = data & 0x0f; // look like IRQ enable flags - 4 sources? channels? timers?
|
||||
|
||||
LOG("%s: sound_irqstatus_w %02x\n", machine().describe_context(), data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(xavix_state::sound_75ff_w)
|
||||
@ -149,12 +183,16 @@ WRITE8_MEMBER(xavix_state::sound_75ff_w)
|
||||
|
||||
READ8_MEMBER(xavix_state::sound_75f4_r)
|
||||
{
|
||||
// status? 1 bit per channel, 8 channels?
|
||||
|
||||
// used with 75f0
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
READ8_MEMBER(xavix_state::sound_75f5_r)
|
||||
{
|
||||
// status? 1 bit per channel, 8 channels?
|
||||
|
||||
// used with 75f1
|
||||
return 0xff;
|
||||
}
|
||||
|
@ -339,7 +339,7 @@ void xavix_state::xavix_lowbus_map(address_map &map)
|
||||
map(0x75fb, 0x75fb).rw(FUNC(xavix_state::sound_75fb_r), FUNC(xavix_state::sound_75fb_w)); // r/w tested
|
||||
map(0x75fc, 0x75fc).rw(FUNC(xavix_state::sound_75fc_r), FUNC(xavix_state::sound_75fc_w)); // r/w tested
|
||||
map(0x75fd, 0x75fd).rw(FUNC(xavix_state::sound_75fd_r), FUNC(xavix_state::sound_75fd_w)); // r/w tested
|
||||
map(0x75fe, 0x75fe).w(FUNC(xavix_state::sound_75fe_w));
|
||||
map(0x75fe, 0x75fe).rw(FUNC(xavix_state::sound_irqstatus_r), FUNC(xavix_state::sound_irqstatus_w));
|
||||
// taitons1 written other 75xx operations
|
||||
map(0x75ff, 0x75ff).w(FUNC(xavix_state::sound_75ff_w));
|
||||
|
||||
@ -570,15 +570,18 @@ static INPUT_PORTS_START( rad_boxp )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_CUSTOM )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( rad_bass )
|
||||
static INPUT_PORTS_START( rad_bass ) // also an analog reel
|
||||
PORT_INCLUDE(xavix)
|
||||
|
||||
PORT_MODIFY("IN0")
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Menu") // pressing this ingame currently crashes it if read from sound_irqstatus_r is incorrect?
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Select")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Forward") // used to navigate menus
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Back")
|
||||
|
||||
PORT_MODIFY("IN1")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) // definitely the dpad, see map screen
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_NAME("Power Switch") // pressing this will turn the game off.
|
||||
@ -589,8 +592,26 @@ static INPUT_PORTS_START( ekara )
|
||||
PORT_INCLUDE(xavix)
|
||||
|
||||
PORT_MODIFY("IN1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) // multiplexed input
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) // multiplexed input
|
||||
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_NAME("Power Switch") // pressing this will turn the game off.
|
||||
|
||||
PORT_START("EXTRA0")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Echo")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Effects")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_NAME("Key Down")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_NAME("Key Up")
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("BGM Down")
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("BGM Up")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_NAME("Tempo Down")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_NAME("Tempo Up")
|
||||
|
||||
PORT_START("EXTRA1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Select")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Cancel")
|
||||
PORT_BIT( 0x3c, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
// no 40/80 due to multiplexer code
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( rad_bassp )
|
||||
@ -699,22 +720,21 @@ static INPUT_PORTS_START( rad_fb )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_NAME("Power Switch") // pressing this will turn the game off.
|
||||
INPUT_PORTS_END
|
||||
|
||||
CUSTOM_INPUT_MEMBER( xavix_state::rad_rh_in1_08_r )
|
||||
{
|
||||
// it's unclear what rad_rh wants here
|
||||
// it sits in loops waiting for this to toggle, but changing it can simply crash the code
|
||||
return 0; //machine().rand();
|
||||
}
|
||||
|
||||
|
||||
static INPUT_PORTS_START( rad_rh )
|
||||
PORT_INCLUDE(xavix)
|
||||
|
||||
PORT_MODIFY("IN0") // hold Button1+2 when resetting for a version number
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON2 )
|
||||
PORT_MODIFY("IN0") // hold Right+Button 3 when resetting for a version number
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Skip") // skips level, cheat or real input?
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Forward")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Back")
|
||||
|
||||
PORT_MODIFY("IN1")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, xavix_state,rad_rh_in1_08_r, (void *)0)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_POWER_OFF ) PORT_NAME("Power Switch") // pressing this will turn the game off.
|
||||
INPUT_PORTS_END
|
||||
|
||||
@ -805,7 +825,7 @@ MACHINE_CONFIG_START(xavix_state::xavix)
|
||||
// sound is PCM
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
MACHINE_CONFIG_START(xavix_state::xavix_i2c_24lc04)
|
||||
MACHINE_CONFIG_START(xavix_i2c_state::xavix_i2c_24lc04)
|
||||
xavix(config);
|
||||
|
||||
// according to http://ww1.microchip.com/downloads/en/devicedoc/21708k.pdf 'the master transmits up to 16 data bytes' however this breaks the Nostalgia games
|
||||
@ -813,7 +833,7 @@ MACHINE_CONFIG_START(xavix_state::xavix_i2c_24lc04)
|
||||
I2CMEM(config, "i2cmem", 0)/*.set_page_size(16)*/.set_data_size(0x200); // 24LC04 on Nostalgia games, 24C04 on others
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
MACHINE_CONFIG_START(xavix_state::xavix_i2c_24c08)
|
||||
MACHINE_CONFIG_START(xavix_i2c_state::xavix_i2c_24c08)
|
||||
xavix(config);
|
||||
|
||||
I2CMEM(config, "i2cmem", 0)/*.set_page_size(16)*/.set_data_size(0x400); // 24C08 (Excite Fishing DX)
|
||||
@ -844,13 +864,13 @@ MACHINE_CONFIG_START(xavix_state::xavix2000)
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
MACHINE_CONFIG_START(xavix_state::xavix2000_i2c_24c04)
|
||||
MACHINE_CONFIG_START(xavix_i2c_state::xavix2000_i2c_24c04)
|
||||
xavix2000(config);
|
||||
|
||||
I2CMEM(config, "i2cmem", 0).set_page_size(16).set_data_size(0x200); // 24C04
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
MACHINE_CONFIG_START(xavix_state::xavix2000_i2c_24c02)
|
||||
MACHINE_CONFIG_START(xavix_i2c_state::xavix2000_i2c_24c02)
|
||||
xavix2000(config);
|
||||
|
||||
I2CMEM(config, "i2cmem", 0).set_page_size(16).set_data_size(0x100); // 24C02
|
||||
@ -912,6 +932,12 @@ void xavix_state::init_xavix()
|
||||
m_rgn = memregion("bios")->base();
|
||||
}
|
||||
|
||||
void xavix_state::init_bass()
|
||||
{
|
||||
init_xavix();
|
||||
m_hack_timer_disable = true;
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Game driver(s)
|
||||
@ -1038,13 +1064,13 @@ ROM_END
|
||||
|
||||
/* XaviX hardware titles */
|
||||
|
||||
CONS( 2006, taitons1, 0, 0, xavix_i2c_24lc04, namcons2, xavix_state, init_xavix, "Bandai / SSD Company LTD / Taito", "Let's! TV Play Classic - Taito Nostalgia 1", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND )
|
||||
CONS( 2006, taitons1, 0, 0, xavix_i2c_24lc04, namcons2, xavix_i2c_state, init_xavix, "Bandai / SSD Company LTD / Taito", "Let's! TV Play Classic - Taito Nostalgia 1", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND )
|
||||
|
||||
CONS( 2006, taitons2, 0, 0, xavix_i2c_24lc04, namcons2, xavix_state, init_xavix, "Bandai / SSD Company LTD / Taito", "Let's! TV Play Classic - Taito Nostalgia 2", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND )
|
||||
CONS( 2006, taitons2, 0, 0, xavix_i2c_24lc04, namcons2, xavix_i2c_state, init_xavix, "Bandai / SSD Company LTD / Taito", "Let's! TV Play Classic - Taito Nostalgia 2", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND )
|
||||
|
||||
CONS( 2006, namcons1, 0, 0, xavix_i2c_24lc04, namcons2, xavix_state, init_xavix, "Bandai / SSD Company LTD / Namco", "Let's! TV Play Classic - Namco Nostalgia 1", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND )
|
||||
CONS( 2006, namcons1, 0, 0, xavix_i2c_24lc04, namcons2, xavix_i2c_state, init_xavix, "Bandai / SSD Company LTD / Namco", "Let's! TV Play Classic - Namco Nostalgia 1", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND )
|
||||
|
||||
CONS( 2006, namcons2, 0, 0, xavix_i2c_24lc04, namcons2, xavix_state, init_xavix, "Bandai / SSD Company LTD / Namco", "Let's! TV Play Classic - Namco Nostalgia 2", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND )
|
||||
CONS( 2006, namcons2, 0, 0, xavix_i2c_24lc04, namcons2, xavix_i2c_state, init_xavix, "Bandai / SSD Company LTD / Namco", "Let's! TV Play Classic - Namco Nostalgia 2", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND )
|
||||
|
||||
CONS( 2000, rad_ping, 0, 0, xavix, rad_ping, xavix_state, init_xavix, "Radica / SSD Company LTD / Simmer Technology", "Play TV Ping Pong", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND ) // "Simmer Technology" is also known as "Hummer Technology Co., Ltd"
|
||||
|
||||
@ -1059,8 +1085,8 @@ CONS( 200?, rad_crdnp, rad_crdn, 0, xavixp, rad_crdnp,xavix_state, init_xavix
|
||||
|
||||
CONS( 2002, rad_bb2, 0, 0, xavix, rad_bb2, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Baseball 2", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND ) // contains string "Radica RBB2 V1.0"
|
||||
|
||||
CONS( 2001, rad_bass, 0, 0, xavix, rad_bass, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Bass Fishin' (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND)
|
||||
CONS( 2001, rad_bassp, rad_bass, 0, xavixp, rad_bassp,xavix_state, init_xavix, "Radica / SSD Company LTD", "ConnecTV Bass Fishin' (PAL)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND)
|
||||
CONS( 2001, rad_bass, 0, 0, xavix, rad_bass, xavix_state, init_bass, "Radica / SSD Company LTD", "Play TV Bass Fishin' (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND)
|
||||
CONS( 2001, rad_bassp, rad_bass, 0, xavixp, rad_bassp,xavix_state, init_bass, "Radica / SSD Company LTD", "ConnecTV Bass Fishin' (PAL)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND)
|
||||
|
||||
// there is another 'Snowboarder' with a white coloured board, it appears to be a newer game closer to 'SSX Snowboarder' but without the SSX license.
|
||||
CONS( 2001, rad_snow, 0, 0, xavix, rad_snow, xavix_state, init_xavix, "Radica / SSD Company LTD", "Play TV Snowboarder (Blue) (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND)
|
||||
@ -1072,7 +1098,7 @@ CONS( 200?, rad_fb, 0, 0, xavix_madfb, rad_fb, xavix_madfb_stat
|
||||
|
||||
CONS( 200?, rad_rh, 0, 0, xavix, rad_rh, xavix_state, init_xavix, "Radioa / Fisher-Price / SSD Company LTD", "Play TV Rescue Heroes", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND)
|
||||
|
||||
CONS( 200?, epo_efdx, 0, 0, xavix_i2c_24c08, xavix, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Excite Fishing DX (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND)
|
||||
CONS( 200?, epo_efdx, 0, 0, xavix_i2c_24c08, xavix, xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Excite Fishing DX (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND)
|
||||
|
||||
CONS( 200?, has_wamg, 0, 0, xavix, xavix, xavix_state, init_xavix, "Hasbro / Milton Bradley / SSD Company LTD", "TV Wild Adventure Mini Golf", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND)
|
||||
|
||||
@ -1110,9 +1136,9 @@ ROM_START( drgqst )
|
||||
ROM_END
|
||||
|
||||
|
||||
CONS( 2004, xavtenni, 0, 0, xavix2000_i2c_24c04, xavix, xavix_state, init_xavix, "SSD Company LTD", "XaviX Tennis (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND )
|
||||
CONS( 2004, xavtenni, 0, 0, xavix2000_i2c_24c04, xavix, xavix_i2c_state, init_xavix, "SSD Company LTD", "XaviX Tennis (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND )
|
||||
|
||||
CONS( 2005, ttv_sw, 0, 0, xavix2000_i2c_24c02, xavix, xavix_state, init_xavix, "Tiger / SSD Company LTD", "Star Wars Saga Edition - Lightsaber Battle Game", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND )
|
||||
CONS( 2005, ttv_lotr, 0, 0, xavix2000_i2c_24c02, xavix, xavix_state, init_xavix, "Tiger / SSD Company LTD", "Lord Of The Rings - Warrior of Middle-Earth", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND )
|
||||
CONS( 2005, ttv_mx, 0, 0, xavix2000_i2c_24c04, ttv_mx, xavix_state, init_xavix, "Tiger / SSD Company LTD", "MX Dirt Rebel", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND )
|
||||
CONS( 2003, drgqst, 0, 0, xavix2000_i2c_24c02, xavix, xavix_state, init_xavix, "Square Enix / SSD Company LTD", "Kenshin Dragon Quest: Yomigaerishi Densetsu no Ken", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND )
|
||||
CONS( 2005, ttv_sw, 0, 0, xavix2000_i2c_24c02, xavix, xavix_i2c_state, init_xavix, "Tiger / SSD Company LTD", "Star Wars Saga Edition - Lightsaber Battle Game", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND )
|
||||
CONS( 2005, ttv_lotr, 0, 0, xavix2000_i2c_24c02, xavix, xavix_i2c_state, init_xavix, "Tiger / SSD Company LTD", "Lord Of The Rings - Warrior of Middle-Earth", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND )
|
||||
CONS( 2005, ttv_mx, 0, 0, xavix2000_i2c_24c04, ttv_mx, xavix_i2c_state, init_xavix, "Tiger / SSD Company LTD", "MX Dirt Rebel", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND )
|
||||
CONS( 2003, drgqst, 0, 0, xavix2000_i2c_24c02, xavix, xavix_i2c_state, init_xavix, "Square Enix / SSD Company LTD", "Kenshin Dragon Quest: Yomigaerishi Densetsu no Ken", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND )
|
||||
|
@ -22,6 +22,8 @@ class xavix_state : public driver_device
|
||||
public:
|
||||
xavix_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_in0(*this, "IN0"),
|
||||
m_in1(*this, "IN1"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_screen(*this, "screen"),
|
||||
m_mainram(*this, "mainram"),
|
||||
@ -41,33 +43,33 @@ public:
|
||||
m_posirq_y(*this, "posirq_y"),
|
||||
m_segment_regs(*this, "segment_regs"),
|
||||
m_palette(*this, "palette"),
|
||||
m_in0(*this, "IN0"),
|
||||
m_in1(*this, "IN1"),
|
||||
m_region(*this, "REGION"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_lowbus(*this, "lowbus"),
|
||||
m_i2cmem(*this, "i2cmem")
|
||||
m_hack_timer_disable(false)
|
||||
{ }
|
||||
|
||||
void xavix(machine_config &config);
|
||||
void xavixp(machine_config &config);
|
||||
void xavix2000(machine_config &config);
|
||||
|
||||
void xavix_i2c_24lc04(machine_config &config);
|
||||
void xavix_i2c_24c08(machine_config &config);
|
||||
|
||||
void xavix2000_i2c_24c04(machine_config &config);
|
||||
void xavix2000_i2c_24c02(machine_config &config);
|
||||
|
||||
void init_xavix();
|
||||
|
||||
DECLARE_CUSTOM_INPUT_MEMBER(rad_rh_in1_08_r);
|
||||
void init_bass();
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(ioevent_trg01);
|
||||
DECLARE_WRITE_LINE_MEMBER(ioevent_trg02);
|
||||
DECLARE_WRITE_LINE_MEMBER(ioevent_trg04);
|
||||
DECLARE_WRITE_LINE_MEMBER(ioevent_trg08);
|
||||
|
||||
protected:
|
||||
|
||||
virtual uint8_t read_io0(uint8_t direction);
|
||||
virtual uint8_t read_io1(uint8_t direction);
|
||||
virtual void write_io0(uint8_t data, uint8_t direction);
|
||||
virtual void write_io1(uint8_t data, uint8_t direction);
|
||||
required_ioport m_in0;
|
||||
required_ioport m_in1;
|
||||
|
||||
private:
|
||||
// screen updates
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
@ -76,7 +78,7 @@ private:
|
||||
|
||||
void xavix_lowbus_map(address_map &map);
|
||||
void xavix_extbus_map(address_map &map);
|
||||
void superxavix_lowbus_map(address_map &map);
|
||||
void superxavix_lowbus_map(address_map &map);
|
||||
|
||||
INTERRUPT_GEN_MEMBER(interrupt);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(scanline_cb);
|
||||
@ -128,14 +130,19 @@ void superxavix_lowbus_map(address_map &map);
|
||||
|
||||
DECLARE_READ8_MEMBER(io0_data_r);
|
||||
DECLARE_READ8_MEMBER(io1_data_r);
|
||||
DECLARE_READ8_MEMBER(io0_direction_r);
|
||||
DECLARE_READ8_MEMBER(io1_direction_r);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(io0_data_w);
|
||||
DECLARE_WRITE8_MEMBER(io1_data_w);
|
||||
|
||||
DECLARE_READ8_MEMBER(io0_direction_r);
|
||||
DECLARE_READ8_MEMBER(io1_direction_r);
|
||||
DECLARE_WRITE8_MEMBER(io0_direction_w);
|
||||
DECLARE_WRITE8_MEMBER(io1_direction_w);
|
||||
|
||||
uint8_t m_io0_data;
|
||||
uint8_t m_io1_data;
|
||||
uint8_t m_io0_direction;
|
||||
uint8_t m_io1_direction;
|
||||
|
||||
DECLARE_WRITE8_MEMBER(vector_enable_w);
|
||||
DECLARE_WRITE8_MEMBER(nmi_vector_lo_w);
|
||||
DECLARE_WRITE8_MEMBER(nmi_vector_hi_w);
|
||||
@ -189,8 +196,10 @@ void superxavix_lowbus_map(address_map &map);
|
||||
DECLARE_READ8_MEMBER(sound_75fd_r);
|
||||
DECLARE_WRITE8_MEMBER(sound_75fd_w);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(sound_75fe_w);
|
||||
DECLARE_READ8_MEMBER(sound_irqstatus_r);
|
||||
DECLARE_WRITE8_MEMBER(sound_irqstatus_w);
|
||||
DECLARE_WRITE8_MEMBER(sound_75ff_w);
|
||||
uint8_t m_sound_irqstatus;
|
||||
|
||||
DECLARE_READ8_MEMBER(timer_status_r);
|
||||
DECLARE_WRITE8_MEMBER(timer_control_w);
|
||||
@ -258,11 +267,6 @@ void superxavix_lowbus_map(address_map &map);
|
||||
uint8_t m_6ff0;
|
||||
uint8_t m_video_ctrl;
|
||||
|
||||
uint8_t m_io0_data;
|
||||
uint8_t m_io1_data;
|
||||
uint8_t m_io0_direction;
|
||||
uint8_t m_io1_direction;
|
||||
|
||||
uint8_t m_soundregs[0x10];
|
||||
|
||||
uint8_t m_timer_baseval;
|
||||
@ -299,8 +303,6 @@ void superxavix_lowbus_map(address_map &map);
|
||||
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
required_ioport m_in0;
|
||||
required_ioport m_in1;
|
||||
required_ioport m_region;
|
||||
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
@ -331,9 +333,32 @@ void superxavix_lowbus_map(address_map &map);
|
||||
|
||||
int get_current_address_byte();
|
||||
required_device<address_map_bank_device> m_lowbus;
|
||||
optional_device<i2cmem_device> m_i2cmem;
|
||||
|
||||
bool m_hack_timer_disable;
|
||||
};
|
||||
|
||||
class xavix_i2c_state : public xavix_state
|
||||
{
|
||||
public:
|
||||
xavix_i2c_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: xavix_state(mconfig, type, tag),
|
||||
m_i2cmem(*this, "i2cmem")
|
||||
{ }
|
||||
|
||||
void xavix_i2c_24lc04(machine_config &config);
|
||||
void xavix_i2c_24c08(machine_config &config);
|
||||
|
||||
void xavix2000_i2c_24c04(machine_config &config);
|
||||
void xavix2000_i2c_24c02(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual uint8_t read_io1(uint8_t direction) override;
|
||||
virtual void write_io1(uint8_t data, uint8_t direction) override;
|
||||
|
||||
required_device<i2cmem_device> m_i2cmem;
|
||||
};
|
||||
|
||||
|
||||
class xavix_mtrk_state : public xavix_state
|
||||
{
|
||||
public:
|
||||
@ -371,7 +396,13 @@ class xavix_ekara_state : public xavix_state
|
||||
public:
|
||||
xavix_ekara_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: xavix_state(mconfig, type, tag),
|
||||
m_cart(*this, "cartslot")
|
||||
m_cart(*this, "cartslot"),
|
||||
m_extra0(*this, "EXTRA0"),
|
||||
m_extra1(*this, "EXTRA1"),
|
||||
m_extraioselect(0),
|
||||
m_extraiowrite(0),
|
||||
m_extrainlatch0(0),
|
||||
m_extrainlatch1(0)
|
||||
{ }
|
||||
|
||||
void xavix_ekara(machine_config &config);
|
||||
@ -380,6 +411,20 @@ protected:
|
||||
required_device<generic_slot_device> m_cart;
|
||||
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(ekara_cart);
|
||||
//READ8_MEMBER(cart_r) { return m_cart->read_rom(space, offset); }
|
||||
|
||||
required_ioport m_extra0;
|
||||
required_ioport m_extra1;
|
||||
|
||||
virtual uint8_t read_io1(uint8_t direction) override;
|
||||
virtual void write_io0(uint8_t data, uint8_t direction) override;
|
||||
virtual void write_io1(uint8_t data, uint8_t direction) override;
|
||||
|
||||
uint8_t m_extraioselect;
|
||||
uint8_t m_extraiowrite;
|
||||
|
||||
uint8_t m_extrainlatch0;
|
||||
uint8_t m_extrainlatch1;
|
||||
|
||||
};
|
||||
|
||||
#endif // MAME_INCLUDES_XAVIX_H
|
||||
|
@ -359,28 +359,134 @@ WRITE8_MEMBER(xavix_state::dispctrl_posirq_y_w)
|
||||
m_interrupt_timer->adjust(m_screen->time_until_pos(m_posirq_y[0], m_posirq_x[0]), 0);
|
||||
}
|
||||
|
||||
/* Per Game IO port callbacks */
|
||||
|
||||
uint8_t xavix_state::read_io0(uint8_t direction)
|
||||
{
|
||||
// no special handling
|
||||
return m_in0->read();
|
||||
}
|
||||
|
||||
uint8_t xavix_state::read_io1(uint8_t direction)
|
||||
{
|
||||
// no special handling
|
||||
return m_in1->read();
|
||||
}
|
||||
|
||||
void xavix_state::write_io0(uint8_t data, uint8_t direction)
|
||||
{
|
||||
// no special handling
|
||||
}
|
||||
|
||||
void xavix_state::write_io1(uint8_t data, uint8_t direction)
|
||||
{
|
||||
// no special handling
|
||||
}
|
||||
|
||||
uint8_t xavix_i2c_state::read_io1(uint8_t direction)
|
||||
{
|
||||
uint8_t ret = m_in1->read();
|
||||
|
||||
if (!(direction & 0x08))
|
||||
{
|
||||
ret &= ~0x08;
|
||||
ret |= (m_i2cmem->read_sda() & 1) << 3;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void xavix_i2c_state::write_io1(uint8_t data, uint8_t direction)
|
||||
{
|
||||
if (direction & 0x08)
|
||||
{
|
||||
m_i2cmem->write_sda((data & 0x08) >> 3);
|
||||
}
|
||||
|
||||
if (direction & 0x10)
|
||||
{
|
||||
m_i2cmem->write_scl((data & 0x10) >> 4);
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t xavix_ekara_state::read_io1(uint8_t direction)
|
||||
{
|
||||
uint8_t ret = m_in1->read();
|
||||
ret &= 0xfc;
|
||||
ret |= m_extrainlatch0 << 0;
|
||||
ret |= m_extrainlatch1 << 1;
|
||||
return ret;
|
||||
}
|
||||
|
||||
void xavix_ekara_state::write_io0(uint8_t data, uint8_t direction)
|
||||
{
|
||||
// is bit 0x80 an enable for something else? LED? Microphone? it doesn't seem related to the multiplexing
|
||||
m_extraioselect = data & direction;
|
||||
}
|
||||
|
||||
void xavix_ekara_state::write_io1(uint8_t data, uint8_t direction)
|
||||
{
|
||||
uint8_t extraiowrite = data & direction;
|
||||
|
||||
if ((extraiowrite & 0x80) != (m_extraiowrite & 0x80))
|
||||
{
|
||||
if (extraiowrite & 0x80)
|
||||
{
|
||||
// clock out bits 0x0c using m_extraioselect (TODO) (probably the 7segs?)
|
||||
// also latch in bits for reading later?
|
||||
|
||||
switch (m_extraioselect & 0x7f)
|
||||
{
|
||||
case 0x01:
|
||||
m_extrainlatch0 = (m_extra0->read() & 0x01) >> 0;
|
||||
m_extrainlatch1 = (m_extra0->read() & 0x02) >> 1;
|
||||
break;
|
||||
case 0x02:
|
||||
m_extrainlatch0 = (m_extra0->read() & 0x04) >> 2;
|
||||
m_extrainlatch1 = (m_extra0->read() & 0x08) >> 3;
|
||||
break;
|
||||
case 0x04:
|
||||
m_extrainlatch0 = (m_extra0->read() & 0x10) >> 4;
|
||||
m_extrainlatch1 = (m_extra0->read() & 0x20) >> 5;
|
||||
break;
|
||||
case 0x08:
|
||||
m_extrainlatch0 = (m_extra0->read() & 0x40) >> 6;
|
||||
m_extrainlatch1 = (m_extra0->read() & 0x80) >> 7;
|
||||
break;
|
||||
case 0x10:
|
||||
m_extrainlatch0 = (m_extra1->read() & 0x01) >> 0;
|
||||
m_extrainlatch1 = (m_extra1->read() & 0x02) >> 1;
|
||||
break;
|
||||
case 0x20:
|
||||
m_extrainlatch0 = (m_extra1->read() & 0x04) >> 2;
|
||||
m_extrainlatch1 = (m_extra1->read() & 0x08) >> 3;
|
||||
break;
|
||||
case 0x40:
|
||||
m_extrainlatch0 = (m_extra1->read() & 0x10) >> 4;
|
||||
m_extrainlatch1 = (m_extra1->read() & 0x20) >> 5;
|
||||
break;
|
||||
default:
|
||||
LOG("latching inputs with invalid m_extraioselect value of %02x\n", m_extraioselect);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_extraiowrite = extraiowrite;
|
||||
}
|
||||
|
||||
/* General IO port handling */
|
||||
|
||||
READ8_MEMBER(xavix_state::io0_data_r)
|
||||
{
|
||||
uint8_t ret = m_in0->read() & ~m_io0_direction;
|
||||
uint8_t ret = read_io0(m_io0_direction) & ~m_io0_direction;
|
||||
ret |= m_io0_data & m_io0_direction;
|
||||
return ret;
|
||||
}
|
||||
|
||||
READ8_MEMBER(xavix_state::io1_data_r)
|
||||
{
|
||||
uint8_t ret = m_in1->read();
|
||||
|
||||
if (m_i2cmem)
|
||||
{
|
||||
if (!(m_io1_direction & 0x08))
|
||||
{
|
||||
ret &= ~0x08;
|
||||
ret |= (m_i2cmem->read_sda() & 1) << 3;
|
||||
}
|
||||
}
|
||||
|
||||
ret &= ~m_io1_direction;
|
||||
|
||||
uint8_t ret = read_io1(m_io1_direction) & ~m_io1_direction;
|
||||
ret |= m_io1_data & m_io1_direction;
|
||||
return ret;
|
||||
}
|
||||
@ -399,28 +505,18 @@ READ8_MEMBER(xavix_state::io1_direction_r)
|
||||
WRITE8_MEMBER(xavix_state::io0_data_w)
|
||||
{
|
||||
m_io0_data = data;
|
||||
write_io0(data, m_io0_direction);
|
||||
LOG("%s: io0_data_w %02x\n", machine().describe_context(), data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(xavix_state::io1_data_w)
|
||||
{
|
||||
m_io1_data = data;
|
||||
write_io1(data, m_io1_direction);
|
||||
LOG("%s: io1_data_w %02x\n", machine().describe_context(), data);
|
||||
|
||||
if (m_i2cmem)
|
||||
{
|
||||
if (m_io1_direction & 0x08)
|
||||
{
|
||||
m_i2cmem->write_sda((data & 0x08) >> 3);
|
||||
}
|
||||
|
||||
if (m_io1_direction & 0x10)
|
||||
{
|
||||
m_i2cmem->write_scl((data & 0x10) >> 4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(xavix_state::io0_direction_w)
|
||||
{
|
||||
m_io0_direction = data;
|
||||
@ -435,6 +531,8 @@ WRITE8_MEMBER(xavix_state::io1_direction_w)
|
||||
io1_data_w(space, 0, m_io1_data); // requires this for i2cmem to work, is it correct tho?
|
||||
}
|
||||
|
||||
/* Arena (Visible Area + hblank?) handling */
|
||||
|
||||
READ8_MEMBER(xavix_state::arena_start_r)
|
||||
{
|
||||
//LOG("%s: arena_start_r\n", machine().describe_context());
|
||||
@ -519,7 +617,15 @@ WRITE8_MEMBER(xavix_state::timer_control_w)
|
||||
// rad_fb / rad_madf don't set bit 0x40 (and doesn't seem to have a valid interrupt handler for timer, so probably means it generates no IRQ?)
|
||||
if (data & 0x01) // timer start?
|
||||
{
|
||||
m_freq_timer->adjust(attotime::from_usec(50000));
|
||||
// eka_bass will crash after a certain number of timer IRQs, needs investigation
|
||||
if (!m_hack_timer_disable)
|
||||
{
|
||||
// TODO: work out the proper calculation here
|
||||
// int divide = 1 << ((m_timer_freq&0x0f)+1);
|
||||
// uint32_t freq = m_maincpu->unscaled_clock()/2;
|
||||
// m_freq_timer->adjust(attotime::from_hz(freq / divide) * m_timer_baseval*20);
|
||||
m_freq_timer->adjust(attotime::from_usec(1000));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -555,7 +661,8 @@ WRITE8_MEMBER(xavix_state::timer_freq_w)
|
||||
|
||||
/* if master clock (MC) is XTAL(21'477'272) (NTSC master)
|
||||
|
||||
0x0 = MC / 2 = 10.738636 MHz
|
||||
divide value clock source
|
||||
0x0 = MC / 2 = 10.738636 MHz (10738636 Hz)
|
||||
0x1 = MC / 4 = 5.369318 MHz
|
||||
0x2 = MC / 8 = 2.684659 MHz
|
||||
0x3 = MC / 16 = 1.3423295 MHz
|
||||
@ -755,6 +862,8 @@ void xavix_state::machine_reset()
|
||||
|
||||
m_ioevent_enable = 0x00;
|
||||
m_ioevent_active = 0x00;
|
||||
|
||||
m_sound_irqstatus = 0x00;
|
||||
}
|
||||
|
||||
typedef device_delegate<uint8_t(int which, int half)> xavix_interrupt_vector_delegate;
|
||||
|
@ -583,28 +583,36 @@ void xavix_state::draw_sprites_line(screen_device &screen, bitmap_ind16 &bitmap,
|
||||
|
||||
xpos += 128 - 8;
|
||||
|
||||
// Everything except directdirect addressing (Addressing Mode 2) goes through the segment registers?
|
||||
if (alt_addressing != 0)
|
||||
{
|
||||
// tile based addressing takes into account tile size (and bpp?)
|
||||
if (alt_addressing == 1)
|
||||
tile = (tile * drawheight * drawwidth) / 2;
|
||||
|
||||
// 8-byte alignment Addressing Mode uses a fixed offset?
|
||||
if (alt_addressing == 2)
|
||||
tile = tile * 8;
|
||||
|
||||
int basereg = (tile & 0xf0000) >> 16;
|
||||
tile &= 0xffff;
|
||||
int gfxbase = (m_segment_regs[(basereg * 2) + 1] << 16) | (m_segment_regs[(basereg * 2)] << 8);
|
||||
tile += gfxbase;
|
||||
}
|
||||
|
||||
int bpp = 1;
|
||||
|
||||
bpp = (attr0 & 0x0e) >> 1;
|
||||
bpp += 1;
|
||||
|
||||
// Everything except directdirect addressing (Addressing Mode 2) goes through the segment registers?
|
||||
if (alt_addressing != 0)
|
||||
{
|
||||
int basereg = 0;
|
||||
|
||||
// tile based addressing takes into account tile size (and bpp?)
|
||||
if (alt_addressing == 1)
|
||||
{
|
||||
tile = (tile * drawheight * drawwidth * bpp) / 8;
|
||||
basereg = 0; // always uses segment register 0 in tile addressing mode?
|
||||
}
|
||||
else
|
||||
{
|
||||
// 8-byte alignment Addressing Mode uses a fixed offset?
|
||||
if (alt_addressing == 2)
|
||||
tile = tile * 8;
|
||||
|
||||
basereg = (tile & 0xf0000) >> 16;
|
||||
tile &= 0xffff;
|
||||
}
|
||||
|
||||
int gfxbase = (m_segment_regs[(basereg * 2) + 1] << 16) | (m_segment_regs[(basereg * 2)] << 8);
|
||||
tile += gfxbase;
|
||||
}
|
||||
|
||||
draw_tile_line(screen, bitmap, cliprect, tile, bpp, xpos + xpos_adjust, line, drawheight, drawwidth, flipx, flipy, pal, zval, drawline);
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user