mirror of
https://github.com/holub/mame
synced 2025-05-28 08:33:05 +03:00
cobra.cpp: fix some input issues (nw)
This commit is contained in:
parent
f3f2fdd50a
commit
66ac95eb05
@ -495,15 +495,18 @@ class cobra_jvs : public jvs_device
|
||||
public:
|
||||
cobra_jvs(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(coin_1_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(coin_2_w);
|
||||
|
||||
//DECLARE_WRITE_LINE_MEMBER(coin_1_w);
|
||||
//DECLARE_WRITE_LINE_MEMBER(coin_2_w);
|
||||
static void static_set_main_board(device_t &device, bool enable);
|
||||
void increase_coin_counter(uint8_t which);
|
||||
|
||||
protected:
|
||||
virtual bool switches(uint8_t *&buf, uint8_t count_players, uint8_t bytes_per_switch) override;
|
||||
virtual bool coin_counters(uint8_t *&buf, uint8_t count) override;
|
||||
virtual void function_list(uint8_t *&buf) override;
|
||||
|
||||
private:
|
||||
bool is_main_board;
|
||||
int m_coin_counter[2];
|
||||
optional_ioport m_test_port;
|
||||
optional_ioport_array<2> m_player_ports;
|
||||
@ -520,6 +523,13 @@ cobra_jvs::cobra_jvs(const machine_config &mconfig, const char *tag, device_t *o
|
||||
m_coin_counter[1] = 0;
|
||||
}
|
||||
|
||||
void cobra_jvs::static_set_main_board(device_t &device, bool enable)
|
||||
{
|
||||
cobra_jvs &jvsdev = downcast<cobra_jvs &>(device);
|
||||
jvsdev.is_main_board = enable;
|
||||
}
|
||||
|
||||
#if 0
|
||||
WRITE_LINE_MEMBER(cobra_jvs::coin_1_w)
|
||||
{
|
||||
if(state)
|
||||
@ -531,20 +541,42 @@ WRITE_LINE_MEMBER(cobra_jvs::coin_2_w)
|
||||
if(state)
|
||||
m_coin_counter[1]++;
|
||||
}
|
||||
#endif
|
||||
|
||||
void cobra_jvs::function_list(uint8_t *&buf)
|
||||
void cobra_jvs::increase_coin_counter(uint8_t which)
|
||||
{
|
||||
m_coin_counter[which]++;
|
||||
}
|
||||
|
||||
// TODO: this certainly isn't correct, all three JVS points to the same capabilities!
|
||||
void cobra_jvs::function_list(uint8_t *&buf)
|
||||
{
|
||||
if(this->is_main_board == false)
|
||||
return;
|
||||
|
||||
// SW input - 2 players, 13 bits
|
||||
*buf++ = 0x01; *buf++ = 2; *buf++ = 13; *buf++ = 0;
|
||||
*buf++ = 0x01;
|
||||
*buf++ = 2;
|
||||
*buf++ = 13;
|
||||
*buf++ = 0;
|
||||
|
||||
// Coin input - 2 slots
|
||||
*buf++ = 0x02; *buf++ = 2; *buf++ = 0; *buf++ = 0;
|
||||
|
||||
*buf++ = 0x02;
|
||||
*buf++ = 2;
|
||||
*buf++ = 0;
|
||||
*buf++ = 0;
|
||||
|
||||
// Analog input - 8 channels
|
||||
*buf++ = 0x03; *buf++ = 8; *buf++ = 16; *buf++ = 0;
|
||||
*buf++ = 0x03;
|
||||
*buf++ = 8;
|
||||
*buf++ = 16;
|
||||
*buf++ = 0;
|
||||
|
||||
// Driver out - 6 channels
|
||||
*buf++ = 0x12; *buf++ = 6; *buf++ = 0; *buf++ = 0;
|
||||
*buf++ = 0x12;
|
||||
*buf++ = 6;
|
||||
*buf++ = 0;
|
||||
*buf++ = 0;
|
||||
}
|
||||
|
||||
bool cobra_jvs::switches(uint8_t *&buf, uint8_t count_players, uint8_t bytes_per_switch)
|
||||
@ -553,6 +585,9 @@ bool cobra_jvs::switches(uint8_t *&buf, uint8_t count_players, uint8_t bytes_per
|
||||
printf("jvs switch read: num players %d, bytes %d\n", count_players, bytes_per_switch);
|
||||
#endif
|
||||
|
||||
if(this->is_main_board == false)
|
||||
return false;
|
||||
|
||||
if (count_players > 2 || bytes_per_switch > 2)
|
||||
return false;
|
||||
|
||||
@ -574,10 +609,15 @@ bool cobra_jvs::coin_counters(uint8_t *&buf, uint8_t count)
|
||||
#if LOG_JVS
|
||||
printf("jvs coin counter read: count %d\n", count);
|
||||
#endif
|
||||
|
||||
|
||||
if(this->is_main_board == false)
|
||||
return false;
|
||||
|
||||
//printf("recv %04x\n",m_coin_counter[0]);
|
||||
|
||||
if (count > 2)
|
||||
return false;
|
||||
|
||||
|
||||
*buf++ = m_coin_counter[0] >> 8; *buf++ = m_coin_counter[0];
|
||||
|
||||
if(count > 1)
|
||||
@ -656,6 +696,9 @@ public:
|
||||
m_gfxcpu(*this, "gfxcpu"),
|
||||
m_gfx_pagetable(*this, "pagetable"),
|
||||
m_k001604(*this, "k001604"),
|
||||
m_jvs1(*this, "cobra_jvs1"),
|
||||
m_jvs2(*this, "cobra_jvs2"),
|
||||
m_jvs3(*this, "cobra_jvs3"),
|
||||
m_ata(*this, "ata"),
|
||||
m_screen(*this, "screen"),
|
||||
m_palette(*this, "palette"),
|
||||
@ -672,6 +715,9 @@ public:
|
||||
required_device<ppc_device> m_gfxcpu;
|
||||
required_shared_ptr<uint64_t> m_gfx_pagetable;
|
||||
required_device<k001604_device> m_k001604;
|
||||
required_device<cobra_jvs> m_jvs1;
|
||||
required_device<cobra_jvs> m_jvs2;
|
||||
required_device<cobra_jvs> m_jvs3;
|
||||
required_device<ata_interface_device> m_ata;
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<palette_device> m_palette;
|
||||
@ -788,6 +834,7 @@ public:
|
||||
DECLARE_DRIVER_INIT(racjamdx);
|
||||
DECLARE_DRIVER_INIT(bujutsu);
|
||||
DECLARE_DRIVER_INIT(cobra);
|
||||
DECLARE_INPUT_CHANGED_MEMBER(coin_inserted);
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
virtual void video_start() override;
|
||||
@ -3152,6 +3199,17 @@ ADDRESS_MAP_END
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
INPUT_CHANGED_MEMBER(cobra_state::coin_inserted)
|
||||
{
|
||||
if(newval)
|
||||
{
|
||||
uint8_t coin_chute = (uint8_t)(uintptr_t)param & 1;
|
||||
m_jvs1->increase_coin_counter(coin_chute);
|
||||
m_jvs2->increase_coin_counter(coin_chute);
|
||||
m_jvs3->increase_coin_counter(coin_chute);
|
||||
}
|
||||
}
|
||||
|
||||
INPUT_PORTS_START( cobra )
|
||||
PORT_START("TEST")
|
||||
PORT_SERVICE_NO_TOGGLE( 0x80, IP_ACTIVE_HIGH) /* Test Button */
|
||||
@ -3165,43 +3223,43 @@ INPUT_PORTS_START( cobra )
|
||||
|
||||
PORT_START("P1")
|
||||
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START1 )
|
||||
PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("P1 Service") PORT_CODE(KEYCODE_7)
|
||||
PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_SERVICE1 )
|
||||
PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
|
||||
PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Punch")
|
||||
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("P1 Kick")
|
||||
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Guard")
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
|
||||
PORT_START("P2")
|
||||
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START2 )
|
||||
PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("P2 Service") PORT_CODE(KEYCODE_8)
|
||||
PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_SERVICE2 )
|
||||
PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
|
||||
PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 Punch")
|
||||
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("P2 Kick")
|
||||
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 Guard")
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
|
||||
PORT_START("COINS")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_COIN1) PORT_WRITE_LINE_DEVICE_MEMBER("cobra_jvs1", cobra_jvs, coin_1_w)
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_COIN2) PORT_WRITE_LINE_DEVICE_MEMBER("cobra_jvs1", cobra_jvs, coin_2_w)
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_COIN1) PORT_CHANGED_MEMBER(DEVICE_SELF, cobra_state,coin_inserted, 0)//PORT_WRITE_LINE_DEVICE_MEMBER("cobra_jvs1", cobra_jvs, coin_1_w)
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_COIN2) PORT_CHANGED_MEMBER(DEVICE_SELF, cobra_state,coin_inserted, 1) //PORT_WRITE_LINE_DEVICE_MEMBER("cobra_jvs1", cobra_jvs, coin_2_w)
|
||||
INPUT_PORTS_END
|
||||
|
||||
WRITE_LINE_MEMBER(cobra_state::ide_interrupt)
|
||||
@ -3316,9 +3374,11 @@ static MACHINE_CONFIG_START( cobra, cobra_state )
|
||||
|
||||
MCFG_DEVICE_ADD("cobra_jvs_host", COBRA_JVS_HOST, 4000000)
|
||||
MCFG_JVS_DEVICE_ADD("cobra_jvs1", COBRA_JVS, "cobra_jvs_host")
|
||||
cobra_jvs::static_set_main_board(*device, true);
|
||||
MCFG_JVS_DEVICE_ADD("cobra_jvs2", COBRA_JVS, "cobra_jvs_host")
|
||||
cobra_jvs::static_set_main_board(*device, true);
|
||||
MCFG_JVS_DEVICE_ADD("cobra_jvs3", COBRA_JVS, "cobra_jvs_host")
|
||||
|
||||
cobra_jvs::static_set_main_board(*device, true);
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
/*****************************************************************************/
|
||||
@ -3596,5 +3656,5 @@ ROM_END
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
GAME( 1997, bujutsu, 0, cobra, cobra, cobra_state, bujutsu, ROT0, "Konami", "Fighting Bujutsu", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
|
||||
GAME( 1997, racjamdx, 0, cobra, cobra, cobra_state, racjamdx, ROT0, "Konami", "Racing Jam DX", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
|
||||
GAME( 1997, bujutsu, 0, cobra, cobra, cobra_state, bujutsu, ROT0, "Konami", "Fighting Bujutsu", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
|
||||
GAME( 1997, racjamdx, 0, cobra, cobra, cobra_state, racjamdx, ROT0, "Konami", "Racing Jam DX", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
|
||||
|
Loading…
Reference in New Issue
Block a user