mirror of
https://github.com/holub/mame
synced 2025-06-30 07:58:56 +03:00
jollyjgr.cpp, mirax.cpp, pachifev.cpp, ron.cpp, marineb.cpp: MCFG_CPU_VBLANK_INT line callback replacement (nw)
This commit is contained in:
parent
5cf9db8e6c
commit
f88926de9d
@ -168,7 +168,7 @@ public:
|
||||
DECLARE_PALETTE_INIT(jollyjgr);
|
||||
uint32_t screen_update_jollyjgr(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
uint32_t screen_update_fspider(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
INTERRUPT_GEN_MEMBER(jollyjgr_interrupt);
|
||||
DECLARE_WRITE_LINE_MEMBER(vblank_irq);
|
||||
void draw_bitmap( bitmap_rgb32 &bitmap );
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
@ -226,6 +226,8 @@ WRITE8_MEMBER(jollyjgr_state::jollyjgr_misc_w)
|
||||
m_bg_tilemap->set_flip((m_flip_x ? TILEMAP_FLIPX : 0) | (m_flip_y ? TILEMAP_FLIPY : 0));
|
||||
|
||||
m_nmi_enable = data & 0x80;
|
||||
if (!m_nmi_enable)
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(jollyjgr_state::jollyjgr_coin_lookout_w)
|
||||
@ -651,10 +653,10 @@ GFXDECODE_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
INTERRUPT_GEN_MEMBER(jollyjgr_state::jollyjgr_interrupt)
|
||||
WRITE_LINE_MEMBER(jollyjgr_state::vblank_irq)
|
||||
{
|
||||
if(m_nmi_enable)
|
||||
device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
|
||||
if (state && m_nmi_enable)
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
|
||||
}
|
||||
|
||||
|
||||
@ -670,6 +672,7 @@ void jollyjgr_state::machine_start()
|
||||
void jollyjgr_state::machine_reset()
|
||||
{
|
||||
m_nmi_enable = 0;
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
|
||||
m_flip_x = 0;
|
||||
m_flip_y = 0;
|
||||
m_bitmap_disable = 0;
|
||||
@ -680,7 +683,6 @@ MACHINE_CONFIG_START(jollyjgr_state::jollyjgr)
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", Z80, XTAL(18'000'000)/6) /* 3MHz verified */
|
||||
MCFG_CPU_PROGRAM_MAP(jollyjgr_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", jollyjgr_state, jollyjgr_interrupt)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -689,6 +691,7 @@ MACHINE_CONFIG_START(jollyjgr_state::jollyjgr)
|
||||
MCFG_SCREEN_SIZE(256, 256)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(jollyjgr_state, screen_update_jollyjgr)
|
||||
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(jollyjgr_state, vblank_irq))
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", jollyjgr)
|
||||
MCFG_PALETTE_ADD("palette", 32) // tilemap and sprites
|
||||
|
@ -58,11 +58,21 @@ void marineb_state::machine_reset()
|
||||
|
||||
void marineb_state::machine_start()
|
||||
{
|
||||
save_item(NAME(m_irq_mask));
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(marineb_state::irq_mask_w)
|
||||
{
|
||||
m_irq_mask = state;
|
||||
if (!m_irq_mask)
|
||||
m_maincpu->set_input_line(0, CLEAR_LINE);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(marineb_state::nmi_mask_w)
|
||||
{
|
||||
m_irq_mask = state;
|
||||
if (!m_irq_mask)
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
|
||||
}
|
||||
|
||||
void marineb_state::marineb_map(address_map &map)
|
||||
@ -516,16 +526,16 @@ static GFXDECODE_START( hopprobo )
|
||||
GFXDECODE_ENTRY( "gfx2", 0x0000, marineb_big_spritelayout, 0, 64 )
|
||||
GFXDECODE_END
|
||||
|
||||
INTERRUPT_GEN_MEMBER(marineb_state::marineb_vblank_irq)
|
||||
WRITE_LINE_MEMBER(marineb_state::marineb_vblank_irq)
|
||||
{
|
||||
if(m_irq_mask)
|
||||
device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
|
||||
if (state && m_irq_mask)
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
|
||||
}
|
||||
|
||||
INTERRUPT_GEN_MEMBER(marineb_state::wanted_vblank_irq)
|
||||
WRITE_LINE_MEMBER(marineb_state::wanted_vblank_irq)
|
||||
{
|
||||
if(m_irq_mask)
|
||||
device.execute().set_input_line(0, HOLD_LINE);
|
||||
if (state && m_irq_mask)
|
||||
m_maincpu->set_input_line(0, HOLD_LINE);
|
||||
}
|
||||
|
||||
|
||||
@ -535,10 +545,9 @@ MACHINE_CONFIG_START(marineb_state::marineb)
|
||||
MCFG_CPU_ADD("maincpu", Z80, CPU_CLOCK) /* 3 MHz? */
|
||||
MCFG_CPU_PROGRAM_MAP(marineb_map)
|
||||
MCFG_CPU_IO_MAP(marineb_io_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", marineb_state, marineb_vblank_irq)
|
||||
|
||||
MCFG_DEVICE_ADD("outlatch", LS259, 0)
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(marineb_state, irq_mask_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(marineb_state, nmi_mask_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(marineb_state, flipscreen_y_w))
|
||||
MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(marineb_state, flipscreen_x_w))
|
||||
|
||||
@ -550,6 +559,7 @@ MACHINE_CONFIG_START(marineb_state::marineb)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(marineb_state, screen_update_marineb)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(marineb_state, marineb_vblank_irq))
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", marineb)
|
||||
MCFG_PALETTE_ADD("palette", 256)
|
||||
@ -606,12 +616,15 @@ MACHINE_CONFIG_START(marineb_state::wanted)
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_IO_MAP(wanted_io_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", marineb_state, wanted_vblank_irq)
|
||||
|
||||
MCFG_DEVICE_MODIFY("outlatch")
|
||||
MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(marineb_state, irq_mask_w))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_GFXDECODE_MODIFY("gfxdecode", wanted)
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_UPDATE_DRIVER(marineb_state, screen_update_springer)
|
||||
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(marineb_state, wanted_vblank_irq))
|
||||
|
||||
// sound hardware (PSG type verified only for bcruzm12)
|
||||
MCFG_SOUND_REPLACE("ay1", AY8912, SOUND_CLOCK)
|
||||
|
@ -158,7 +158,7 @@ public:
|
||||
void draw_tilemap(bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t draw_flag);
|
||||
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
INTERRUPT_GEN_MEMBER(vblank_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(vblank_irq);
|
||||
void mirax(machine_config &config);
|
||||
void mirax_main_map(address_map &map);
|
||||
void mirax_sound_map(address_map &map);
|
||||
@ -472,16 +472,15 @@ static GFXDECODE_START( mirax )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
INTERRUPT_GEN_MEMBER(mirax_state::vblank_irq)
|
||||
WRITE_LINE_MEMBER(mirax_state::vblank_irq)
|
||||
{
|
||||
if (m_nmi_mask)
|
||||
device.execute().set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
|
||||
if (state && m_nmi_mask)
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
|
||||
}
|
||||
|
||||
MACHINE_CONFIG_START(mirax_state::mirax)
|
||||
MCFG_CPU_ADD("maincpu", Z80, 12000000/4) // ceramic potted module, encrypted z80
|
||||
MCFG_CPU_PROGRAM_MAP(mirax_main_map)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", mirax_state, vblank_irq)
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", Z80, 12000000/4)
|
||||
MCFG_CPU_PROGRAM_MAP(mirax_sound_map)
|
||||
@ -504,6 +503,7 @@ MACHINE_CONFIG_START(mirax_state::mirax)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(mirax_state, screen_update)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(mirax_state, vblank_irq))
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 0x40)
|
||||
MCFG_PALETTE_INIT_OWNER(mirax_state, mirax)
|
||||
|
@ -111,7 +111,7 @@ public:
|
||||
DECLARE_READ8_MEMBER(controls_r);
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
INTERRUPT_GEN_MEMBER(pachifev_vblank_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(vblank_w);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
void pachifev(machine_config &config);
|
||||
void pachifev_cru(address_map &map);
|
||||
@ -306,15 +306,16 @@ void pachifev_state::machine_reset()
|
||||
}
|
||||
|
||||
|
||||
INTERRUPT_GEN_MEMBER(pachifev_state::pachifev_vblank_irq)
|
||||
WRITE_LINE_MEMBER(pachifev_state::vblank_w)
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
static const char *const inname[2] = { "PLUNGER_P1", "PLUNGER_P2" };
|
||||
|
||||
/* I wish I had found a better way to handle cocktail inputs, but I can't find a way to access internal RAM */
|
||||
/* (bit 5 of 0xf0aa : 0 = player 1 and 1 = player 2 - bit 6 of 0xf0aa : 0 = upright and 1 = cocktail). */
|
||||
/* All I found is that in main RAM, 0xe00f.b determines the player : 0x00 = player 1 and 0x01 = player 2. */
|
||||
address_space &ramspace = device.memory().space(AS_PROGRAM);
|
||||
address_space &ramspace = m_maincpu->space(AS_PROGRAM);
|
||||
uint8_t player = 0;
|
||||
|
||||
if ((ramspace.read_byte(0xe00f) == 0x01) && ((ioport("DSW1")->read() & 0x08) == 0x00))
|
||||
@ -350,13 +351,13 @@ MACHINE_CONFIG_START(pachifev_state::pachifev)
|
||||
|
||||
// CPU TMS9995, standard variant; no line connections
|
||||
MCFG_TMS99xx_ADD("maincpu", TMS9995, XTAL(12'000'000), pachifev_map, pachifev_cru)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", pachifev_state, pachifev_vblank_irq)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_DEVICE_ADD( "tms9928a", TMS9928A, XTAL(10'738'635) / 2 )
|
||||
MCFG_TMS9928A_VRAM_SIZE(0x4000)
|
||||
MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen" )
|
||||
MCFG_SCREEN_UPDATE_DEVICE( "tms9928a", tms9928a_device, screen_update )
|
||||
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(pachifev_state, vblank_w))
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -53,7 +53,7 @@ public:
|
||||
// screen updates
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
DECLARE_PALETTE_INIT(ron);
|
||||
INTERRUPT_GEN_MEMBER(vblank_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(vblank_irq);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(output_w);
|
||||
DECLARE_READ8_MEMBER(p1_mux_r);
|
||||
@ -143,6 +143,8 @@ uint32_t ron_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap,
|
||||
WRITE8_MEMBER(ron_state::output_w)
|
||||
{
|
||||
m_nmi_enable = (data & 0x10) == 0x10;
|
||||
if (!m_nmi_enable)
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
|
||||
|
||||
if(data & 0xef)
|
||||
printf("%02x\n",data);
|
||||
@ -427,10 +429,10 @@ PALETTE_INIT_MEMBER(ron_state, ron)
|
||||
}
|
||||
|
||||
|
||||
INTERRUPT_GEN_MEMBER( ron_state::vblank_irq )
|
||||
WRITE_LINE_MEMBER(ron_state::vblank_irq)
|
||||
{
|
||||
if (m_nmi_enable)
|
||||
device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
|
||||
if (state && m_nmi_enable)
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
|
||||
}
|
||||
|
||||
READ8_MEMBER(ron_state::audio_cmd_r)
|
||||
@ -487,7 +489,6 @@ MACHINE_CONFIG_START(ron_state::ron)
|
||||
MCFG_CPU_ADD("maincpu", Z80, MAIN_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(ron_map)
|
||||
MCFG_CPU_IO_MAP(ron_io)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", ron_state, vblank_irq)
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", I8035, SOUND_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(ron_audio_map)
|
||||
@ -503,6 +504,7 @@ MACHINE_CONFIG_START(ron_state::ron)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(ron_state, screen_update)
|
||||
MCFG_SCREEN_RAW_PARAMS(VIDEO_CLOCK, 320, 0, 256, 264, 0, 240)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(ron_state, vblank_irq))
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", ron)
|
||||
|
||||
|
@ -31,8 +31,9 @@ public:
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
uint8_t m_irq_mask;
|
||||
bool m_irq_mask;
|
||||
DECLARE_WRITE_LINE_MEMBER(irq_mask_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(nmi_mask_w);
|
||||
DECLARE_WRITE8_MEMBER(marineb_videoram_w);
|
||||
DECLARE_WRITE8_MEMBER(marineb_colorram_w);
|
||||
DECLARE_WRITE8_MEMBER(marineb_column_scroll_w);
|
||||
@ -50,8 +51,8 @@ public:
|
||||
uint32_t screen_update_springer(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
uint32_t screen_update_hoccer(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
uint32_t screen_update_hopprobo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
INTERRUPT_GEN_MEMBER(marineb_vblank_irq);
|
||||
INTERRUPT_GEN_MEMBER(wanted_vblank_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(marineb_vblank_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(wanted_vblank_irq);
|
||||
void set_tilemap_scrolly( int cols );
|
||||
void springer(machine_config &config);
|
||||
void wanted(machine_config &config);
|
||||
|
Loading…
Reference in New Issue
Block a user