improve dendego controls

This commit is contained in:
Michaël Banaan Ananas 2012-07-11 10:10:27 +00:00
parent ac66a2a218
commit 5a1ec4d450
2 changed files with 17 additions and 40 deletions

View File

@ -823,8 +823,8 @@ WRITE32_MEMBER(taitojc_state::jc_meters_w)
{ {
switch (offset & 3) switch (offset & 3)
{ {
case 0: m_speed_meter = taitojc_odometer_table[(data >> 16) & 0xff]; break; case 0: m_speed_meter = dendego_odometer_table[(data >> 16) & 0xff]; break;
case 1: m_brake_meter = taitojc_brake_table[(data >> 16) & 0xff]; break; case 1: m_brake_meter = dendego_brake_table[(data >> 16) & 0xff]; break;
case 2: break; // unused? case 2: break; // unused?
case 3: break; // ? case 3: break; // ?
} }
@ -832,7 +832,10 @@ WRITE32_MEMBER(taitojc_state::jc_meters_w)
if(ioport("METER")->read_safe(0)) if(ioport("METER")->read_safe(0))
{ {
UINT8 mascon_lv = (ioport("MASCON")->read() & 0x70) >> 4; UINT8 btn = (ioport("BUTTONS")->read() & 0x77);
int mascon_lv;
for (mascon_lv = 0; mascon_lv < 6; mascon_lv++)
if (btn == dendego_mascon_table[mascon_lv]) break;
popmessage("%d %.02f km/h %.02f MPa",mascon_lv,m_speed_meter,m_brake_meter/10); popmessage("%d %.02f km/h %.02f MPa",mascon_lv,m_speed_meter,m_brake_meter/10);
} }
@ -1152,47 +1155,18 @@ static INPUT_PORTS_START( common )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, set_cs_line) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, set_cs_line)
INPUT_PORTS_END INPUT_PORTS_END
/* Mascon must always be in a defined state, Densha de Go 2 in particular returns black screen if the Mascon input is undefined
We convert the 6 lever "shifter" into a fake analog port for now. */
CUSTOM_INPUT_MEMBER(taitojc_state::mascon_state_r)
{
static const UINT8 mascon_table[6] = { 0x01, 0x10, 0x02, 0x20, 0x04, 0x40 };
UINT8 res = ioport("MASCON")->read();
int i;
//popmessage("%02x",res);
for(i=0;i<6;i++)
{
if((res & 0x70) == (0x10*i))
return mascon_table[i];
}
return mascon_table[5];
}
static INPUT_PORTS_START( dendego ) static INPUT_PORTS_START( dendego )
PORT_INCLUDE( common ) PORT_INCLUDE( common )
PORT_MODIFY("UNUSED") PORT_MODIFY("UNUSED")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Horn Button") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Horn Button")
PORT_MODIFY("BUTTONS") PORT_MODIFY("BUTTONS") // Throttle Lever at left, move down to speed up, 6 positions
/* TODO: fix this */ PORT_BIT( 0x77, 0x00, IPT_POSITIONAL_V ) PORT_POSITIONS(6) PORT_REMAP_TABLE(dendego_mascon_table) PORT_SENSITIVITY(8) PORT_KEYDELTA(1) PORT_CENTERDELTA(0) PORT_NAME("Throttle Lever")
PORT_BIT( 0x88, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x88, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x77, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, taitojc_state,mascon_state_r,NULL)
// PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Mascon 5") // Mascon 5
// PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Mascon 3") // Mascon 3
// PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Mascon 1") // Mascon 1
// PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Mascon 4") // Mascon 4
// PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Mascon 2") // Mascon 2
// PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Mascon 0") // Mascon 0
PORT_START("MASCON") PORT_START("ANALOG1") // Brake Lever at right, rotate handle right (anti clockwise) to increase pressure, 11 positions but not at constant intervals like the throttle lever
PORT_BIT( 0x7f, 0x00, IPT_POSITIONAL ) PORT_POSITIONS(0x60) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_CENTERDELTA(0) PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(20) PORT_KEYDELTA(5) PORT_CENTERDELTA(0) PORT_NAME("Brake Lever")
PORT_START("ANALOG1")
PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_NAME("Brake Lever")
PORT_START("METER") PORT_START("METER")
PORT_CONFNAME( 0x01, 0x01, "Show Meters" ) PORT_CONFNAME( 0x01, 0x01, "Show Meters" )

View File

@ -115,7 +115,6 @@ public:
DECLARE_READ32_MEMBER(taitojc_char_r); DECLARE_READ32_MEMBER(taitojc_char_r);
DECLARE_WRITE32_MEMBER(taitojc_tile_w); DECLARE_WRITE32_MEMBER(taitojc_tile_w);
DECLARE_WRITE32_MEMBER(taitojc_char_w); DECLARE_WRITE32_MEMBER(taitojc_char_w);
DECLARE_CUSTOM_INPUT_MEMBER(mascon_state_r);
}; };
@ -127,7 +126,8 @@ void taitojc_render_polygons(running_machine &machine, UINT16 *polygon_fifo, int
VIDEO_START(taitojc); VIDEO_START(taitojc);
SCREEN_UPDATE_IND16(taitojc); SCREEN_UPDATE_IND16(taitojc);
const double taitojc_odometer_table[0x100] = // lookup tables for densha de go analog controls/meters
const double dendego_odometer_table[0x100] =
{ {
0.0, 0.3, 0.7, 1.0, 1.4, 1.7, 2.1, 2.4, 2.8, 3.1, 3.4, 3.8, 4.1, 4.5, 4.8, 5.2, 0.0, 0.3, 0.7, 1.0, 1.4, 1.7, 2.1, 2.4, 2.8, 3.1, 3.4, 3.8, 4.1, 4.5, 4.8, 5.2,
5.5, 5.9, 6.2, 6.6, 6.9, 7.2, 7.6, 7.9, 8.3, 8.6, 9.0, 9.3, 9.7, 10.0, 10.5, 11.1, 5.5, 5.9, 6.2, 6.6, 6.9, 7.2, 7.6, 7.9, 8.3, 8.6, 9.0, 9.3, 9.7, 10.0, 10.5, 11.1,
@ -147,7 +147,7 @@ const double taitojc_odometer_table[0x100] =
125.3, 125.6, 125.9, 126.2, 126.6, 126.9, 127.2, 127.5, 127.8, 128.1, 128.4, 128.8, 129.1, 129.4, 129.7, 130.0, 125.3, 125.6, 125.9, 126.2, 126.6, 126.9, 127.2, 127.5, 127.8, 128.1, 128.4, 128.8, 129.1, 129.4, 129.7, 130.0,
}; };
const double taitojc_brake_table[0x100] = const double dendego_brake_table[0x100] =
{ {
0.00, 0.00, 0.00, 0.00, 0.05, 0.10, 0.14, 0.19, 0.24, 0.29, 0.33, 0.38, 0.43, 0.48, 0.52, 0.57, 0.00, 0.00, 0.00, 0.00, 0.05, 0.10, 0.14, 0.19, 0.24, 0.29, 0.33, 0.38, 0.43, 0.48, 0.52, 0.57,
0.62, 0.67, 0.71, 0.76, 0.81, 0.86, 0.90, 0.95, 1.00, 1.06, 1.12, 1.19, 1.25, 1.31, 1.38, 1.44, 0.62, 0.67, 0.71, 0.76, 0.81, 0.86, 0.90, 0.95, 1.00, 1.06, 1.12, 1.19, 1.25, 1.31, 1.38, 1.44,
@ -166,3 +166,6 @@ const double taitojc_brake_table[0x100] =
14.71, 14.79, 14.86, 14.93, 15.00, 15.04, 15.07, 15.11, 15.15, 15.19, 15.22, 15.26, 15.30, 15.33, 15.37, 15.41, 14.71, 14.79, 14.86, 14.93, 15.00, 15.04, 15.07, 15.11, 15.15, 15.19, 15.22, 15.26, 15.30, 15.33, 15.37, 15.41,
15.44, 15.48, 15.52, 15.56, 15.59, 15.63, 15.67, 15.70, 15.74, 15.78, 15.81, 15.85, 15.89, 15.93, 15.96, 16.00, 15.44, 15.48, 15.52, 15.56, 15.59, 15.63, 15.67, 15.70, 15.74, 15.78, 15.81, 15.85, 15.89, 15.93, 15.96, 16.00,
}; };
// Mascon must always be in a defined state, Densha de Go 2 in particular returns black screen if the Mascon input is undefined
const ioport_value dendego_mascon_table[] = { 0x76, 0x67, 0x75, 0x57, 0x73, 0x37 };