badlands.cpp: Added coin counters and freeze switch, moved sound related irq generation into audio CPU block (nw)
This commit is contained in:
parent
33d9488ef4
commit
475a46d9e6
@ -189,25 +189,23 @@ void badlands_state::update_interrupts()
|
|||||||
|
|
||||||
void badlands_state::scanline_update(screen_device &screen, int scanline)
|
void badlands_state::scanline_update(screen_device &screen, int scanline)
|
||||||
{
|
{
|
||||||
if (m_audiocpu != nullptr)
|
// sound CPU irq is scanline controlled, we update it below to make bootlegs happy
|
||||||
{
|
|
||||||
address_space &space = m_audiocpu->space(AS_PROGRAM);
|
|
||||||
|
|
||||||
/* sound IRQ is on 32V */
|
|
||||||
if (scanline & 32)
|
|
||||||
m_soundcomm->sound_irq_ack_r(space, 0);
|
|
||||||
else if (!(ioport("FE4000")->read() & 0x40))
|
|
||||||
m_soundcomm->sound_irq_gen(*m_audiocpu);
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
return;
|
TIMER_DEVICE_CALLBACK_MEMBER(badlands_state::sound_scanline)
|
||||||
|
{
|
||||||
|
int scanline = param;
|
||||||
|
//address_space &space = m_audiocpu->space(AS_PROGRAM);
|
||||||
|
|
||||||
|
// 32V
|
||||||
|
if ((scanline % 64) == 0 && scanline < 240)
|
||||||
|
m_soundcomm->sound_irq_gen(*m_audiocpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
MACHINE_START_MEMBER(badlands_state,badlands)
|
MACHINE_START_MEMBER(badlands_state,badlands)
|
||||||
{
|
{
|
||||||
atarigen_state::machine_start();
|
atarigen_state::machine_start();
|
||||||
|
|
||||||
save_item(NAME(m_pedal_value));
|
save_item(NAME(m_pedal_value));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,7 +215,7 @@ MACHINE_RESET_MEMBER(badlands_state,badlands)
|
|||||||
m_pedal_value[0] = m_pedal_value[1] = 0x80;
|
m_pedal_value[0] = m_pedal_value[1] = 0x80;
|
||||||
|
|
||||||
atarigen_state::machine_reset();
|
atarigen_state::machine_reset();
|
||||||
scanline_timer_reset(*m_screen, 32);
|
//scanline_timer_reset(*m_screen, 32);
|
||||||
|
|
||||||
membank("soundbank")->set_entry(0);
|
membank("soundbank")->set_entry(0);
|
||||||
}
|
}
|
||||||
@ -232,6 +230,7 @@ MACHINE_RESET_MEMBER(badlands_state,badlands)
|
|||||||
|
|
||||||
INTERRUPT_GEN_MEMBER(badlands_state::vblank_int)
|
INTERRUPT_GEN_MEMBER(badlands_state::vblank_int)
|
||||||
{
|
{
|
||||||
|
// TODO: remove this hack
|
||||||
int pedal_state = ioport("PEDALS")->read();
|
int pedal_state = ioport("PEDALS")->read();
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -274,7 +273,6 @@ READ16_MEMBER(badlands_state::pedal_1_r)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
*
|
*
|
||||||
* Audio I/O handlers
|
* Audio I/O handlers
|
||||||
@ -352,8 +350,8 @@ WRITE8_MEMBER(badlands_state::audio_io_w)
|
|||||||
case 0x204: /* WRIO */
|
case 0x204: /* WRIO */
|
||||||
/*
|
/*
|
||||||
0xc0 = bank address
|
0xc0 = bank address
|
||||||
0x20 = coin counter 2
|
0x20 = coin counter 1
|
||||||
0x10 = coin counter 1
|
0x10 = coin counter 2
|
||||||
0x08 = n/c
|
0x08 = n/c
|
||||||
0x04 = n/c
|
0x04 = n/c
|
||||||
0x02 = n/c
|
0x02 = n/c
|
||||||
@ -362,6 +360,8 @@ WRITE8_MEMBER(badlands_state::audio_io_w)
|
|||||||
|
|
||||||
/* update the bank */
|
/* update the bank */
|
||||||
membank("soundbank")->set_entry((data >> 6) & 3);
|
membank("soundbank")->set_entry((data >> 6) & 3);
|
||||||
|
machine().bookkeeping().coin_counter_w(0, data & 0x20);
|
||||||
|
machine().bookkeeping().coin_counter_w(1, data & 0x10);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -424,7 +424,7 @@ static INPUT_PORTS_START( badlands )
|
|||||||
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) // old steering wheels
|
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) // old steering wheels
|
||||||
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) // old gas pedals
|
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) // old gas pedals
|
||||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) // freeze-step
|
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) // freeze-step
|
||||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) // freeze
|
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Freeze") // freeze
|
||||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Start / Fire")
|
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Start / Fire")
|
||||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 Start / Fire")
|
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 Start / Fire")
|
||||||
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
|
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
|
||||||
@ -440,9 +440,9 @@ static INPUT_PORTS_START( badlands )
|
|||||||
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
|
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||||
|
|
||||||
PORT_START("AUDIO") /* audio port */
|
PORT_START("AUDIO") /* audio port */
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
|
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 )
|
||||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
|
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN1 )
|
||||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN3 )
|
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
|
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* self test */
|
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* self test */
|
||||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_ATARI_COMM_SOUND_TO_MAIN_READY("soundcomm") /* response buffer full */
|
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_ATARI_COMM_SOUND_TO_MAIN_READY("soundcomm") /* response buffer full */
|
||||||
@ -508,6 +508,7 @@ static MACHINE_CONFIG_START( badlands, badlands_state )
|
|||||||
|
|
||||||
MCFG_CPU_ADD("audiocpu", M6502, ATARI_CLOCK_14MHz/8)
|
MCFG_CPU_ADD("audiocpu", M6502, ATARI_CLOCK_14MHz/8)
|
||||||
MCFG_CPU_PROGRAM_MAP(audio_map)
|
MCFG_CPU_PROGRAM_MAP(audio_map)
|
||||||
|
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", badlands_state, sound_scanline, "screen", 0, 1)
|
||||||
|
|
||||||
MCFG_MACHINE_START_OVERRIDE(badlands_state,badlands)
|
MCFG_MACHINE_START_OVERRIDE(badlands_state,badlands)
|
||||||
MCFG_MACHINE_RESET_OVERRIDE(badlands_state,badlands)
|
MCFG_MACHINE_RESET_OVERRIDE(badlands_state,badlands)
|
||||||
@ -737,9 +738,8 @@ GFXDECODE_END
|
|||||||
MACHINE_RESET_MEMBER(badlands_state,badlandsb)
|
MACHINE_RESET_MEMBER(badlands_state,badlandsb)
|
||||||
{
|
{
|
||||||
// m_pedal_value[0] = m_pedal_value[1] = 0x80;
|
// m_pedal_value[0] = m_pedal_value[1] = 0x80;
|
||||||
|
|
||||||
atarigen_state::machine_reset();
|
atarigen_state::machine_reset();
|
||||||
scanline_timer_reset(*m_screen, 32);
|
// scanline_timer_reset(*m_screen, 32);
|
||||||
|
|
||||||
// memcpy(m_bank_base, &m_bank_source_data[0x0000], 0x1000);
|
// memcpy(m_bank_base, &m_bank_source_data[0x0000], 0x1000);
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,7 @@ public:
|
|||||||
DECLARE_MACHINE_RESET(badlandsb);
|
DECLARE_MACHINE_RESET(badlandsb);
|
||||||
uint32_t screen_update_badlands(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
uint32_t screen_update_badlands(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||||
INTERRUPT_GEN_MEMBER(vblank_int);
|
INTERRUPT_GEN_MEMBER(vblank_int);
|
||||||
|
TIMER_DEVICE_CALLBACK_MEMBER(sound_scanline);
|
||||||
DECLARE_WRITE16_MEMBER( badlands_pf_bank_w );
|
DECLARE_WRITE16_MEMBER( badlands_pf_bank_w );
|
||||||
DECLARE_READ8_MEMBER(bootleg_shared_r);
|
DECLARE_READ8_MEMBER(bootleg_shared_r);
|
||||||
DECLARE_WRITE8_MEMBER(bootleg_shared_w);
|
DECLARE_WRITE8_MEMBER(bootleg_shared_w);
|
||||||
|
Loading…
Reference in New Issue
Block a user