mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
forte2,pengadvb: get rid of irq trampoline
This commit is contained in:
parent
f67cb62dbc
commit
cde67e639a
@ -33,16 +33,18 @@ class forte2_state : public driver_device
|
||||
public:
|
||||
forte2_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu") { }
|
||||
m_maincpu(*this, "maincpu")
|
||||
{ }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
|
||||
UINT8 m_input_mask;
|
||||
|
||||
DECLARE_READ8_MEMBER(forte2_ay8910_read_input);
|
||||
DECLARE_WRITE8_MEMBER(forte2_ay8910_set_input_mask);
|
||||
DECLARE_WRITE_LINE_MEMBER(vdp_interrupt);
|
||||
DECLARE_DRIVER_INIT(pesadelo);
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
required_device<cpu_device> m_maincpu;
|
||||
};
|
||||
|
||||
|
||||
@ -78,7 +80,7 @@ INPUT_PORTS_END
|
||||
|
||||
READ8_MEMBER(forte2_state::forte2_ay8910_read_input)
|
||||
{
|
||||
return ioport("IN0")->read() | (m_input_mask&0x3f);
|
||||
return ioport("IN0")->read() | (m_input_mask & 0x3f);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(forte2_state::forte2_ay8910_set_input_mask)
|
||||
@ -87,11 +89,6 @@ WRITE8_MEMBER(forte2_state::forte2_ay8910_set_input_mask)
|
||||
m_input_mask = data;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(forte2_state::vdp_interrupt)
|
||||
{
|
||||
m_maincpu->set_input_line(0, (state ? HOLD_LINE : CLEAR_LINE));
|
||||
}
|
||||
|
||||
void forte2_state::machine_reset()
|
||||
{
|
||||
m_input_mask = 0xff;
|
||||
@ -112,15 +109,15 @@ static MACHINE_CONFIG_START( pesadelo, forte2_state )
|
||||
MCFG_CPU_IO_MAP(io_mem)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_DEVICE_ADD( "tms9928a", TMS9928A, XTAL_10_738635MHz / 2 )
|
||||
MCFG_DEVICE_ADD("tms9928a", TMS9928A, XTAL_10_738635MHz/2)
|
||||
MCFG_TMS9928A_VRAM_SIZE(0x4000)
|
||||
MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(forte2_state, vdp_interrupt))
|
||||
MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen" )
|
||||
MCFG_SCREEN_UPDATE_DEVICE( "tms9928a", tms9928a_device, screen_update )
|
||||
MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
|
||||
MCFG_TMS9928A_SCREEN_ADD_NTSC("screen")
|
||||
MCFG_SCREEN_UPDATE_DEVICE("tms9928a", tms9928a_device, screen_update)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
MCFG_SOUND_ADD("aysnd", AY8910, (float)XTAL_3_579545MHz/2)
|
||||
MCFG_SOUND_ADD("aysnd", AY8910, XTAL_3_579545MHz/2)
|
||||
MCFG_AY8910_PORT_A_READ_CB(READ8(forte2_state, forte2_ay8910_read_input))
|
||||
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(forte2_state, forte2_ay8910_set_input_mask))
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
@ -128,12 +125,11 @@ MACHINE_CONFIG_END
|
||||
|
||||
DRIVER_INIT_MEMBER(forte2_state,pesadelo)
|
||||
{
|
||||
int i;
|
||||
UINT8 *mem = memregion("maincpu")->base();
|
||||
int memsize = memregion("maincpu")->bytes();
|
||||
|
||||
// data swap
|
||||
for ( i = 0; i < memsize; i++ )
|
||||
for (int i = 0; i < memsize; i++)
|
||||
{
|
||||
mem[i] = BITSWAP8(mem[i],3,5,6,7,0,4,2,1);
|
||||
}
|
||||
@ -141,11 +137,10 @@ DRIVER_INIT_MEMBER(forte2_state,pesadelo)
|
||||
// address line swap
|
||||
dynamic_buffer buf(memsize);
|
||||
memcpy(&buf[0], mem, memsize);
|
||||
for ( i = 0; i < memsize; i++ )
|
||||
for (int i = 0; i < memsize; i++)
|
||||
{
|
||||
mem[BITSWAP16(i,11,9,8,13,14,15,12,7,6,5,4,3,2,1,0,10)] = buf[i];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ROM_START( pesadelo )
|
||||
|
@ -57,7 +57,6 @@ public:
|
||||
DECLARE_READ8_MEMBER(pengadvb_ppi_port_b_r);
|
||||
DECLARE_WRITE8_MEMBER(pengadvb_ppi_port_c_w);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(vdp_interrupt);
|
||||
DECLARE_DRIVER_INIT(pengadvb);
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
@ -189,14 +188,6 @@ WRITE8_MEMBER(pengadvb_state::pengadvb_ppi_port_c_w)
|
||||
m_kb_matrix_row = data & 0x0f;
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
|
||||
// TMS9928
|
||||
WRITE_LINE_MEMBER(pengadvb_state::vdp_interrupt)
|
||||
{
|
||||
m_maincpu->set_input_line(0, (state ? ASSERT_LINE : CLEAR_LINE));
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Machine config(s)
|
||||
@ -246,9 +237,9 @@ static MACHINE_CONFIG_START( pengadvb, pengadvb_state )
|
||||
MCFG_I8255_OUT_PORTC_CB(WRITE8(pengadvb_state, pengadvb_ppi_port_c_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_DEVICE_ADD("tms9128", TMS9128, XTAL_10_738635MHz / 2)
|
||||
MCFG_DEVICE_ADD("tms9128", TMS9128, XTAL_10_738635MHz/2)
|
||||
MCFG_TMS9928A_VRAM_SIZE(0x4000)
|
||||
MCFG_TMS9928A_OUT_INT_LINE_CB(WRITELINE(pengadvb_state, vdp_interrupt))
|
||||
MCFG_TMS9928A_OUT_INT_LINE_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
|
||||
MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen" )
|
||||
MCFG_SCREEN_UPDATE_DEVICE("tms9128", tms9128_device, screen_update)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user