badlands.cpp: Added coin counters and freeze switch, moved sound related irq generation into audio CPU block (nw)

This commit is contained in:
angelosa 2017-05-03 23:39:37 +02:00
parent 33d9488ef4
commit 475a46d9e6
2 changed files with 24 additions and 23 deletions

View File

@ -189,25 +189,23 @@ void badlands_state::update_interrupts()
void badlands_state::scanline_update(screen_device &screen, int scanline)
{
if (m_audiocpu != nullptr)
{
address_space &space = m_audiocpu->space(AS_PROGRAM);
// sound CPU irq is scanline controlled, we update it below to make bootlegs happy
}
/* 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)
{
atarigen_state::machine_start();
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;
atarigen_state::machine_reset();
scanline_timer_reset(*m_screen, 32);
//scanline_timer_reset(*m_screen, 32);
membank("soundbank")->set_entry(0);
}
@ -232,6 +230,7 @@ MACHINE_RESET_MEMBER(badlands_state,badlands)
INTERRUPT_GEN_MEMBER(badlands_state::vblank_int)
{
// TODO: remove this hack
int pedal_state = ioport("PEDALS")->read();
int i;
@ -274,7 +273,6 @@ READ16_MEMBER(badlands_state::pedal_1_r)
}
/*************************************
*
* Audio I/O handlers
@ -352,8 +350,8 @@ WRITE8_MEMBER(badlands_state::audio_io_w)
case 0x204: /* WRIO */
/*
0xc0 = bank address
0x20 = coin counter 2
0x10 = coin counter 1
0x20 = coin counter 1
0x10 = coin counter 2
0x08 = n/c
0x04 = n/c
0x02 = n/c
@ -362,6 +360,8 @@ WRITE8_MEMBER(badlands_state::audio_io_w)
/* update the bank */
membank("soundbank")->set_entry((data >> 6) & 3);
machine().bookkeeping().coin_counter_w(0, data & 0x20);
machine().bookkeeping().coin_counter_w(1, data & 0x10);
break;
}
}
@ -424,7 +424,7 @@ static INPUT_PORTS_START( badlands )
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) // old steering wheels
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) // old gas pedals
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( 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")
@ -440,9 +440,9 @@ static INPUT_PORTS_START( badlands )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("AUDIO") /* audio port */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN3 )
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x04, 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( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_ATARI_COMM_SOUND_TO_MAIN_READY("soundcomm") /* response buffer full */
@ -508,7 +508,8 @@ static MACHINE_CONFIG_START( badlands, badlands_state )
MCFG_CPU_ADD("audiocpu", M6502, ATARI_CLOCK_14MHz/8)
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_RESET_OVERRIDE(badlands_state,badlands)
@ -737,9 +738,8 @@ GFXDECODE_END
MACHINE_RESET_MEMBER(badlands_state,badlandsb)
{
// m_pedal_value[0] = m_pedal_value[1] = 0x80;
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);
}

View File

@ -47,6 +47,7 @@ public:
DECLARE_MACHINE_RESET(badlandsb);
uint32_t screen_update_badlands(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(vblank_int);
TIMER_DEVICE_CALLBACK_MEMBER(sound_scanline);
DECLARE_WRITE16_MEMBER( badlands_pf_bank_w );
DECLARE_READ8_MEMBER(bootleg_shared_r);
DECLARE_WRITE8_MEMBER(bootleg_shared_w);