diff --git a/src/devices/bus/nes/bandai.cpp b/src/devices/bus/nes/bandai.cpp index 7d1027a39ae..ff87be980d5 100644 --- a/src/devices/bus/nes/bandai.cpp +++ b/src/devices/bus/nes/bandai.cpp @@ -34,8 +34,6 @@ #include "emu.h" #include "bandai.h" -#include "cpu/m6502/m6502.h" - #ifdef NES_PCB_DEBUG #define VERBOSE 1 #else @@ -303,7 +301,7 @@ void nes_fcg_device::device_timer(emu_timer &timer, device_timer_id id, int para if (!m_irq_count) { - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); + set_irq_line(ASSERT_LINE); m_irq_enable = 0; } } @@ -334,7 +332,7 @@ WRITE8_MEMBER(nes_fcg_device::fcg_write) break; case 0x0a: m_irq_enable = data & 0x01; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; case 0x0b: m_irq_count = (m_irq_count & 0xff00) | data; diff --git a/src/devices/bus/nes/bootleg.cpp b/src/devices/bus/nes/bootleg.cpp index ed62193f06c..49cccaa6a3b 100644 --- a/src/devices/bus/nes/bootleg.cpp +++ b/src/devices/bus/nes/bootleg.cpp @@ -21,7 +21,6 @@ #include "emu.h" #include "bootleg.h" -#include "cpu/m6502/m6502.h" #include "video/ppu2c0x.h" // this has to be included so that IRQ functions can access ppu2c0x_device::BOTTOM_VISIBLE_SCANLINE #include "screen.h" @@ -647,7 +646,7 @@ void nes_sc127_device::hblank_irq(int scanline, int vblank, int blanked) if (!blanked && (m_irq_count == 0)) { LOG_MMC(("irq fired, scanline: %d\n", scanline)); - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); m_irq_enable = 0; } } @@ -711,7 +710,7 @@ void nes_mbaby_device::device_timer(emu_timer &timer, device_timer_id id, int pa { if (id == TIMER_IRQ) { - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); irq_timer->adjust(attotime::never); } } @@ -803,7 +802,7 @@ void nes_smb3p_device::device_timer(emu_timer &timer, device_timer_id id, int pa { if (m_irq_count == 0xffff) { - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); m_irq_enable = 0; } else @@ -877,7 +876,7 @@ void nes_btl_dn_device::hblank_irq(int scanline, int vblank, int blanked ) return; m_irq_count = 0; - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); } WRITE8_MEMBER(nes_btl_dn_device::write_h) @@ -966,7 +965,7 @@ void nes_smb2j_device::device_timer(emu_timer &timer, device_timer_id id, int pa { if (m_irq_count == 0xfff) { - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); m_irq_enable = 0; m_irq_count = 0; } @@ -1048,7 +1047,7 @@ void nes_smb2ja_device::device_timer(emu_timer &timer, device_timer_id id, int p { if (m_irq_count == 0xfff) { - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); m_irq_enable = 0; m_irq_count = 0; } @@ -1105,7 +1104,7 @@ void nes_smb2jb_device::device_timer(emu_timer &timer, device_timer_id id, int p { if (m_irq_count == 0xfff) { - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); m_irq_enable = 0; m_irq_count = 0; } @@ -1349,7 +1348,7 @@ void nes_lh53_device::device_timer(emu_timer &timer, device_timer_id id, int par if (m_irq_count > 7560)//value from FCEUMM... { m_irq_count = 0; - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); + set_irq_line(ASSERT_LINE); } } } @@ -1386,7 +1385,7 @@ WRITE8_MEMBER(nes_lh53_device::write_h) m_irq_enable = BIT(data, 1); m_irq_count = 0; if (!m_irq_enable) - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; case 0x7000: m_reg = data & 0x0f; @@ -1591,7 +1590,7 @@ void nes_shuiguan_device::device_timer(emu_timer &timer, device_timer_id id, int m_irq_count &= 0xff; if (m_irq_enable && !m_irq_count) - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); } } diff --git a/src/devices/bus/nes/cony.cpp b/src/devices/bus/nes/cony.cpp index d0c61db0e9b..78c89a57141 100644 --- a/src/devices/bus/nes/cony.cpp +++ b/src/devices/bus/nes/cony.cpp @@ -19,8 +19,6 @@ #include "emu.h" #include "cony.h" -#include "cpu/m6502/m6502.h" - #ifdef NES_PCB_DEBUG #define VERBOSE 1 @@ -166,7 +164,7 @@ void nes_cony_device::device_timer(emu_timer &timer, device_timer_id id, int par { if (!m_irq_count) { - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); m_irq_enable = 0; m_irq_count = 0xffff; } diff --git a/src/devices/bus/nes/datach.cpp b/src/devices/bus/nes/datach.cpp index 1d8b22a87ba..8bf42e53a61 100644 --- a/src/devices/bus/nes/datach.cpp +++ b/src/devices/bus/nes/datach.cpp @@ -16,7 +16,6 @@ #include "emu.h" #include "datach.h" -#include "cpu/m6502/m6502.h" #ifdef NES_PCB_DEBUG #define VERBOSE 1 @@ -396,7 +395,7 @@ void nes_datach_device::device_timer(emu_timer &timer, device_timer_id id, int p if (!m_irq_count) { - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); + set_irq_line(ASSERT_LINE); m_irq_enable = 0; } } diff --git a/src/devices/bus/nes/disksys.cpp b/src/devices/bus/nes/disksys.cpp index 4b10af9d9ac..c2bf3f6d2a8 100644 --- a/src/devices/bus/nes/disksys.cpp +++ b/src/devices/bus/nes/disksys.cpp @@ -21,7 +21,6 @@ #include "emu.h" #include "disksys.h" -#include "cpu/m6502/m6502.h" #include "imagedev/flopdrv.h" #include "formats/nes_dsk.h" @@ -206,7 +205,7 @@ READ8_MEMBER(nes_disksys_device::read_m) void nes_disksys_device::hblank_irq(int scanline, int vblank, int blanked) { if (m_irq_transfer) - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); } WRITE8_MEMBER(nes_disksys_device::write_ex) @@ -372,7 +371,7 @@ void nes_disksys_device::device_timer(emu_timer &timer, device_timer_id id, int m_irq_count--; if (!m_irq_count) { - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); m_irq_enable = 0; m_fds_status0 |= 0x01; m_irq_count_latch = 0; // used in Kaettekita Mario Bros diff --git a/src/devices/bus/nes/event.cpp b/src/devices/bus/nes/event.cpp index 6fd85256f7e..41ebc976308 100644 --- a/src/devices/bus/nes/event.cpp +++ b/src/devices/bus/nes/event.cpp @@ -16,8 +16,6 @@ #include "emu.h" #include "event.h" -#include "cpu/m6502/m6502.h" - #ifdef NES_PCB_DEBUG #define VERBOSE 1 @@ -154,7 +152,7 @@ void nes_event_device::set_prg() if (m_reg[1] & 0x10) { m_timer_enabled = 1; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); } else { @@ -237,7 +235,7 @@ void nes_event_device::device_timer(emu_timer &timer, device_timer_id id, int pa m_timer_count--; if (!m_timer_count) { - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); event_timer->reset(); } } diff --git a/src/devices/bus/nes/ggenie.cpp b/src/devices/bus/nes/ggenie.cpp index 783121a2fe5..462c9c5da37 100644 --- a/src/devices/bus/nes/ggenie.cpp +++ b/src/devices/bus/nes/ggenie.cpp @@ -122,7 +122,7 @@ WRITE8_MEMBER(nes_ggenie_device::write_h) if (offset == 0 && data == 0) { m_gg_bypass = 1; - m_maincpu->set_pc(0xfffc); + reset_cpu(); } else { diff --git a/src/devices/bus/nes/henggedianzi.cpp b/src/devices/bus/nes/henggedianzi.cpp index 0ef0d2b8ab0..5d75850a0c8 100644 --- a/src/devices/bus/nes/henggedianzi.cpp +++ b/src/devices/bus/nes/henggedianzi.cpp @@ -22,8 +22,6 @@ #include "emu.h" #include "henggedianzi.h" -#include "cpu/m6502/m6502.h" - #ifdef NES_PCB_DEBUG #define VERBOSE 1 @@ -195,7 +193,7 @@ void nes_hengg_shjy3_device::hblank_irq(int scanline, int vblank, int blanked) { m_irq_count = m_irq_count_latch; m_irq_enable = m_irq_enable | ((m_irq_enable & 0x01) << 1); - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); } else m_irq_count++; diff --git a/src/devices/bus/nes/hosenkan.cpp b/src/devices/bus/nes/hosenkan.cpp index d143a8d4221..4200655897e 100644 --- a/src/devices/bus/nes/hosenkan.cpp +++ b/src/devices/bus/nes/hosenkan.cpp @@ -12,7 +12,6 @@ #include "emu.h" #include "hosenkan.h" -#include "cpu/m6502/m6502.h" #include "video/ppu2c0x.h" // this has to be included so that IRQ functions can access ppu2c0x_device::BOTTOM_VISIBLE_SCANLINE #include "screen.h" @@ -100,7 +99,7 @@ void nes_hosenkan_device::hblank_irq( int scanline, int vblank, int blanked ) if (m_irq_enable && !blanked && (m_irq_count == 0) && (prior_count || m_irq_clear)) { LOG_MMC(("irq fired, scanline: %d\n", scanline)); - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); } } m_irq_clear = 0; diff --git a/src/devices/bus/nes/irem.cpp b/src/devices/bus/nes/irem.cpp index 07ac824c5be..15ef687dbea 100644 --- a/src/devices/bus/nes/irem.cpp +++ b/src/devices/bus/nes/irem.cpp @@ -20,8 +20,6 @@ #include "emu.h" #include "irem.h" -#include "cpu/m6502/m6502.h" - #ifdef NES_PCB_DEBUG #define VERBOSE 1 #else @@ -294,7 +292,7 @@ void nes_h3001_device::device_timer(emu_timer &timer, device_timer_id id, int pa if (!m_irq_count) { - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); + set_irq_line(ASSERT_LINE); m_irq_enable = 0; } } @@ -317,12 +315,12 @@ WRITE8_MEMBER(nes_h3001_device::write_h) case 0x1003: m_irq_enable = data & 0x80; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; case 0x1004: m_irq_count = m_irq_count_latch; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; case 0x1005: diff --git a/src/devices/bus/nes/jaleco.cpp b/src/devices/bus/nes/jaleco.cpp index 7065b9b7139..2b837bf0658 100644 --- a/src/devices/bus/nes/jaleco.cpp +++ b/src/devices/bus/nes/jaleco.cpp @@ -21,7 +21,6 @@ #include "emu.h" #include "jaleco.h" -#include "cpu/m6502/m6502.h" #include "sound/samples.h" #include "speaker.h" @@ -435,7 +434,7 @@ void nes_ss88006_device::device_timer(emu_timer &timer, device_timer_id id, int { if (!(m_irq_count & 0x000f)) { - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); + set_irq_line(ASSERT_LINE); m_irq_count = (m_irq_count & 0xfff0) | 0x000f; } else @@ -445,7 +444,7 @@ void nes_ss88006_device::device_timer(emu_timer &timer, device_timer_id id, int { if (!(m_irq_count & 0x00ff)) { - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); + set_irq_line(ASSERT_LINE); m_irq_count = (m_irq_count & 0xff00) | 0x00ff; } else @@ -455,7 +454,7 @@ void nes_ss88006_device::device_timer(emu_timer &timer, device_timer_id id, int { if (!(m_irq_count & 0x0fff)) { - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); + set_irq_line(ASSERT_LINE); m_irq_count = (m_irq_count & 0xf000) | 0x0fff; } else @@ -465,7 +464,7 @@ void nes_ss88006_device::device_timer(emu_timer &timer, device_timer_id id, int { if (!m_irq_count) { - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); + set_irq_line(ASSERT_LINE); m_irq_count = 0xffff; } else @@ -537,12 +536,12 @@ WRITE8_MEMBER(nes_ss88006_device::ss88006_write) break; case 0x7000: m_irq_count = m_irq_count_latch; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; case 0x7001: m_irq_enable = data & 0x01; m_irq_mode = data & 0x0e; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; case 0x7002: diff --git a/src/devices/bus/nes/jy.cpp b/src/devices/bus/nes/jy.cpp index 00f43a1b2f7..33c1e6e6cac 100644 --- a/src/devices/bus/nes/jy.cpp +++ b/src/devices/bus/nes/jy.cpp @@ -21,7 +21,6 @@ #include "emu.h" #include "jy.h" -#include "cpu/m6502/m6502.h" #include "video/ppu2c0x.h" // this has to be included so that IRQ functions can access ppu2c0x_device::BOTTOM_VISIBLE_SCANLINE #ifdef NES_PCB_DEBUG @@ -221,7 +220,7 @@ void nes_jy_typea_device::irq_clock(int mode, int blanked) // if count wraps, check if IRQ is enabled if (fire && m_irq_enable && !blanked) - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); + set_irq_line(ASSERT_LINE); } } @@ -478,7 +477,7 @@ WRITE8_MEMBER(nes_jy_typea_device::write_h) m_irq_enable = 1; else { - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); m_irq_enable = 0; } break; @@ -493,7 +492,7 @@ WRITE8_MEMBER(nes_jy_typea_device::write_h) irq_timer->adjust(attotime::never); break; case 2: - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); m_irq_enable = 0; break; case 3: diff --git a/src/devices/bus/nes/kaiser.cpp b/src/devices/bus/nes/kaiser.cpp index 0d02aecdfd0..2e228782785 100644 --- a/src/devices/bus/nes/kaiser.cpp +++ b/src/devices/bus/nes/kaiser.cpp @@ -32,8 +32,6 @@ #include "emu.h" #include "kaiser.h" -#include "cpu/m6502/m6502.h" - #ifdef NES_PCB_DEBUG #define VERBOSE 1 @@ -375,7 +373,7 @@ void nes_ks7032_device::device_timer(emu_timer &timer, device_timer_id id, int p { m_irq_enable = 0; m_irq_count = 0; - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); } else m_irq_count++; @@ -491,7 +489,7 @@ void nes_ks7017_device::device_timer(emu_timer &timer, device_timer_id id, int p { if (!m_irq_count) { - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); m_irq_enable = 0; m_irq_status |= 0x01; } diff --git a/src/devices/bus/nes/konami.cpp b/src/devices/bus/nes/konami.cpp index 75b540b72f2..320ceb1eb9b 100644 --- a/src/devices/bus/nes/konami.cpp +++ b/src/devices/bus/nes/konami.cpp @@ -27,7 +27,6 @@ #include "emu.h" #include "konami.h" -#include "cpu/m6502/m6502.h" #include "speaker.h" @@ -366,7 +365,7 @@ void nes_konami_vrc3_device::device_timer(emu_timer &timer, device_timer_id id, { if ((m_irq_count & 0x00ff) == 0xff) { - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); + set_irq_line(ASSERT_LINE); m_irq_count = m_irq_count_latch; } else @@ -376,7 +375,7 @@ void nes_konami_vrc3_device::device_timer(emu_timer &timer, device_timer_id id, { if (m_irq_count == 0xffff) { - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); + set_irq_line(ASSERT_LINE); m_irq_count = m_irq_count_latch; } else @@ -410,11 +409,11 @@ WRITE8_MEMBER(nes_konami_vrc3_device::write_h) m_irq_enable_latch = data & 0x01; if (data & 0x02) m_irq_count = m_irq_count_latch; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; case 0x5000: m_irq_enable = m_irq_enable_latch; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; case 0x7000: prg16_89ab(data); @@ -438,7 +437,7 @@ void nes_konami_vrc4_device::irq_tick() if (m_irq_count == 0xff) { m_irq_count = m_irq_count_latch; - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); + set_irq_line(ASSERT_LINE); } else m_irq_count++; @@ -540,11 +539,11 @@ WRITE8_MEMBER(nes_konami_vrc4_device::write_h) m_irq_enable_latch = data & 0x01; if (data & 0x02) m_irq_count = m_irq_count_latch; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; case 0x300: m_irq_enable = m_irq_enable_latch; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; } break; @@ -616,11 +615,11 @@ WRITE8_MEMBER(nes_konami_vrc6_device::write_h) m_irq_enable_latch = data & 0x01; if (data & 0x02) m_irq_count = m_irq_count_latch; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; case 0x200: m_irq_enable = m_irq_enable_latch; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; default: logerror("VRC-6 write_h uncaught write, addr: %04x value: %02x\n", ((offset & 0x7000) | add_lines) + 0x8000, data); @@ -728,11 +727,11 @@ WRITE8_MEMBER(nes_konami_vrc7_device::write_h) m_irq_enable_latch = data & 0x01; if (data & 0x02) m_irq_count = m_irq_count_latch; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; case 0x7008: case 0x7010: case 0x7018: m_irq_enable = m_irq_enable_latch; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; default: diff --git a/src/devices/bus/nes/legacy.cpp b/src/devices/bus/nes/legacy.cpp index a89991776bc..d2b1c697296 100644 --- a/src/devices/bus/nes/legacy.cpp +++ b/src/devices/bus/nes/legacy.cpp @@ -18,8 +18,6 @@ #include "emu.h" #include "legacy.h" -#include "cpu/m6502/m6502.h" - #ifdef NES_PCB_DEBUG #define VERBOSE 1 @@ -166,7 +164,7 @@ void nes_ffe4_device::device_timer(emu_timer &timer, device_timer_id id, int par { if (m_irq_count == 0xffff) { - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); + set_irq_line(ASSERT_LINE); m_irq_count = 0; m_irq_enable = 0; } @@ -192,7 +190,7 @@ WRITE8_MEMBER(nes_ffe4_device::write_l) case 0x401: m_irq_enable = 0; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; case 0x402: m_irq_count = (m_irq_count & 0xff00) | data; @@ -274,7 +272,7 @@ WRITE8_MEMBER(nes_ffe8_device::write_l) case 0x401: m_irq_enable = 0; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; case 0x402: m_irq_count = (m_irq_count & 0xff00) | data; diff --git a/src/devices/bus/nes/mmc3.cpp b/src/devices/bus/nes/mmc3.cpp index febbdbac90f..f8497dbd42d 100644 --- a/src/devices/bus/nes/mmc3.cpp +++ b/src/devices/bus/nes/mmc3.cpp @@ -28,7 +28,6 @@ #include "emu.h" #include "mmc3.h" -#include "cpu/m6502/m6502.h" #include "video/ppu2c0x.h" // this has to be included so that IRQ functions can access ppu2c0x_device::BOTTOM_VISIBLE_SCANLINE #include "screen.h" @@ -202,7 +201,7 @@ void nes_txrom_device::hblank_irq(int scanline, int vblank, int blanked) if (m_irq_enable && !blanked && (m_irq_count == 0) && (prior_count || m_irq_clear /*|| !m_mmc3_alt_irq*/)) // according to blargg the latter should be present as well, but it breaks Rampart and Joe & Mac US: they probably use the alt irq! { LOG_MMC(("irq fired, scanline: %d\n", scanline)); - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); + set_irq_line(ASSERT_LINE); } } m_irq_clear = 0; @@ -301,7 +300,7 @@ WRITE8_MEMBER(nes_txrom_device::txrom_write) case 0x6000: m_irq_enable = 0; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; case 0x6001: diff --git a/src/devices/bus/nes/mmc5.cpp b/src/devices/bus/nes/mmc5.cpp index 327220fdcc5..bcecffd1ecb 100644 --- a/src/devices/bus/nes/mmc5.cpp +++ b/src/devices/bus/nes/mmc5.cpp @@ -18,7 +18,6 @@ #include "emu.h" #include "mmc5.h" -#include "cpu/m6502/m6502.h" #include "video/ppu2c0x.h" // this has to be included so that IRQ functions can access ppu2c0x_device::BOTTOM_VISIBLE_SCANLINE #include "sound/nes_apu.h" // temp hack to pass the additional sound regs to APU... @@ -237,7 +236,7 @@ void nes_exrom_device::hblank_irq(int scanline, int vblank, int blanked ) if (scanline == m_irq_count) { if (m_irq_enable) - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); + set_irq_line(ASSERT_LINE); m_irq_status = 0xff; } @@ -446,7 +445,7 @@ READ8_MEMBER(nes_exrom_device::read_l) case 0x1204: value = m_irq_status; m_irq_status &= ~0x80; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); return value; case 0x1205: diff --git a/src/devices/bus/nes/namcot.cpp b/src/devices/bus/nes/namcot.cpp index b9f594de75d..84b41996272 100644 --- a/src/devices/bus/nes/namcot.cpp +++ b/src/devices/bus/nes/namcot.cpp @@ -26,8 +26,6 @@ #include "namcot.h" #include "ui/uimain.h" -#include "cpu/m6502/m6502.h" - #ifdef NES_PCB_DEBUG #define VERBOSE 1 #else @@ -402,7 +400,7 @@ void nes_namcot340_device::device_timer(emu_timer &timer, device_timer_id id, in if (m_irq_enable) { if (m_irq_count == 0x7fff) // counter does not wrap to 0! - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); + set_irq_line(ASSERT_LINE); else m_irq_count++; } @@ -418,12 +416,12 @@ WRITE8_MEMBER(nes_namcot340_device::n340_lowrite) { case 0x1000: /* low byte of IRQ */ m_irq_count = (m_irq_count & 0x7f00) | data; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; case 0x1800: /* high byte of IRQ, IRQ enable in high bit */ m_irq_count = (m_irq_count & 0xff) | ((data & 0x7f) << 8); m_irq_enable = data & 0x80; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; } } @@ -437,10 +435,10 @@ READ8_MEMBER(nes_namcot340_device::n340_loread) { case 0x1000: return m_irq_count & 0xff; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); case 0x1800: return (m_irq_count >> 8) & 0xff; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); default: return 0x00; } diff --git a/src/devices/bus/nes/nes_slot.cpp b/src/devices/bus/nes/nes_slot.cpp index 5f6615c01fd..c3d036b8493 100644 --- a/src/devices/bus/nes/nes_slot.cpp +++ b/src/devices/bus/nes/nes_slot.cpp @@ -86,6 +86,8 @@ #include "hashfile.h" #include "nes_slot.h" +#include "cpu/m6502/m6502.h" + #define NES_BATTERY_SIZE 0x2000 @@ -566,6 +568,30 @@ void device_nes_cart_interface::set_nt_mirroring(int mirroring) } } +//------------------------------------------------- +// Interrupt helpers +//------------------------------------------------- + +DECLARE_WRITE_LINE_MEMBER(device_nes_cart_interface::set_irq_line) +{ + // use hold_irq_line for HOLD_LINE semantics (not recommended) + assert(state == ASSERT_LINE || state == CLEAR_LINE); + + m_maincpu->set_input_line(m6502_device::IRQ_LINE, state); +} + +void device_nes_cart_interface::hold_irq_line() +{ + // hack which requires the CPU object + m_maincpu->set_input_line(m6502_device::IRQ_LINE, HOLD_LINE); +} + +void device_nes_cart_interface::reset_cpu() +{ + // another hack + m_maincpu->set_pc(0xfffc); +} + //------------------------------------------------- // Other helpers //------------------------------------------------- diff --git a/src/devices/bus/nes/nes_slot.h b/src/devices/bus/nes/nes_slot.h index 6ae818c841d..b86dbfb1e41 100644 --- a/src/devices/bus/nes/nes_slot.h +++ b/src/devices/bus/nes/nes_slot.h @@ -204,19 +204,20 @@ public: void set_bus_conflict(bool val) { m_bus_conflict = val; } void set_open_bus(uint8_t val) { m_open_bus = val; } - uint8_t* get_prg_base() { return m_prg; } - uint8_t* get_prgram_base() { return &m_prgram[0]; } - uint8_t* get_vrom_base() { return m_vrom; } - uint8_t* get_vram_base() { return &m_vram[0]; } - uint8_t* get_battery_base() { return &m_battery[0]; } - uint8_t* get_mapper_sram_base() { return m_mapper_sram; } + uint8_t *get_prg_base() { return m_prg; } + uint8_t *get_prgram_base() { return &m_prgram[0]; } + uint8_t *get_vrom_base() { return m_vrom; } + uint8_t *get_vram_base() { return &m_vram[0]; } + uint8_t *get_ciram_base() { return m_ciram; } + uint8_t *get_battery_base() { return &m_battery[0]; } + uint8_t *get_mapper_sram_base() { return m_mapper_sram; } - uint32_t get_prg_size() { return m_prg_size; } - uint32_t get_prgram_size() { return m_prgram.size(); } - uint32_t get_vrom_size() { return m_vrom_size; } - uint32_t get_vram_size() { return m_vram.size(); } - uint32_t get_battery_size() { return m_battery.size(); } - uint32_t get_mapper_sram_size() { return m_mapper_sram_size; } + uint32_t get_prg_size() const { return m_prg_size; } + uint32_t get_prgram_size() const { return m_prgram.size(); } + uint32_t get_vrom_size() const { return m_vrom_size; } + uint32_t get_vram_size() const { return m_vram.size(); } + uint32_t get_battery_size() const { return m_battery.size(); } + uint32_t get_mapper_sram_size() const { return m_mapper_sram_size; } virtual void ppu_latch(offs_t offset) {} virtual void hblank_irq(int scanline, int vblank, int blanked) {} @@ -233,6 +234,10 @@ public: protected: device_nes_cart_interface(const machine_config &mconfig, device_t &device); + DECLARE_WRITE_LINE_MEMBER(set_irq_line); + void hold_irq_line(); + void reset_cpu(); + // internal state uint8_t *m_prg; uint8_t *m_vrom; @@ -243,10 +248,12 @@ protected: uint32_t m_prg_size; uint32_t m_vrom_size; +private: // HACK: to reduce tagmap lookups for PPU-related IRQs, we add a hook to the // main NES CPU here, even if it does not belong to this device. required_device m_maincpu; +protected: // these are specific of some boards but must be accessible from the driver // E.g. additional save ram for HKROM, X1-005 & X1-017 boards, or ExRAM for MMC5 uint8_t *m_mapper_sram; diff --git a/src/devices/bus/nes/pirate.cpp b/src/devices/bus/nes/pirate.cpp index b280b8281b7..1d2035a9b91 100644 --- a/src/devices/bus/nes/pirate.cpp +++ b/src/devices/bus/nes/pirate.cpp @@ -17,7 +17,6 @@ #include "emu.h" #include "pirate.h" -#include "cpu/m6502/m6502.h" #include "video/ppu2c0x.h" // this has to be included so that IRQ functions can access ppu2c0x_device::BOTTOM_VISIBLE_SCANLINE #include "screen.h" @@ -536,7 +535,7 @@ void nes_futuremedia_device::hblank_irq(int scanline, int vblank, int blanked) { m_irq_count--; if (!m_irq_count) - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); } } } @@ -784,7 +783,7 @@ void nes_t230_device::hblank_irq(int scanline, int vblank, int blanked) { m_irq_count = m_irq_count_latch; m_irq_enable = m_irq_enable_latch; - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); } } @@ -864,7 +863,7 @@ void nes_mk2_device::hblank_irq( int scanline, int vblank, int blanked ) if (m_irq_enable && !blanked && (m_irq_count == 0) && (prior_count || m_irq_clear)) { LOG_MMC(("irq fired, scanline: %d\n", scanline)); - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); } } m_irq_clear = 0; @@ -918,7 +917,7 @@ void nes_whero_device::hblank_irq(int scanline, int vblank, int blanked) { m_irq_count = m_irq_count_latch; m_irq_enable = m_irq_enable_latch; - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); } } @@ -1045,7 +1044,7 @@ void nes_tf1201_device::hblank_irq(int scanline, int vblank, int blanked) { m_irq_count++; if ((m_irq_count & 0xff) == 238) - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); } } @@ -1124,7 +1123,7 @@ void nes_cityfight_device::device_timer(emu_timer &timer, device_timer_id id, in { if (!m_irq_count) { - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); m_irq_count = 0xffff; } else diff --git a/src/devices/bus/nes/rcm.cpp b/src/devices/bus/nes/rcm.cpp index f1800712765..5c861922afb 100644 --- a/src/devices/bus/nes/rcm.cpp +++ b/src/devices/bus/nes/rcm.cpp @@ -23,7 +23,6 @@ #include "emu.h" #include "rcm.h" -#include "cpu/m6502/m6502.h" #ifdef NES_PCB_DEBUG @@ -276,7 +275,7 @@ void nes_3dblock_device::hblank_irq(int scanline, int vblank, int blanked) { m_irq_count--; if (!m_irq_count) - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); } } diff --git a/src/devices/bus/nes/somari.cpp b/src/devices/bus/nes/somari.cpp index b738ad671e8..f4a5c2e7f40 100644 --- a/src/devices/bus/nes/somari.cpp +++ b/src/devices/bus/nes/somari.cpp @@ -15,8 +15,6 @@ #include "emu.h" #include "somari.h" -#include "cpu/m6502/m6502.h" - #ifdef NES_PCB_DEBUG #define VERBOSE 1 @@ -236,7 +234,7 @@ WRITE8_MEMBER(nes_somari_device::mmc3_w) case 0x2001: break; case 0x4000: m_irq_count_latch = data; break; case 0x4001: m_irq_count = 0; break; - case 0x6000: m_irq_enable = 0; m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); break; + case 0x6000: m_irq_enable = 0; set_irq_line(CLEAR_LINE); break; case 0x6001: m_irq_enable = 1; break; } } diff --git a/src/devices/bus/nes/sunsoft.cpp b/src/devices/bus/nes/sunsoft.cpp index 2e4325ddc1a..cb1bbb70a89 100644 --- a/src/devices/bus/nes/sunsoft.cpp +++ b/src/devices/bus/nes/sunsoft.cpp @@ -24,7 +24,6 @@ #include "emu.h" #include "sunsoft.h" -#include "cpu/m6502/m6502.h" #include "sound/ay8910.h" #include "speaker.h" @@ -273,7 +272,7 @@ void nes_sunsoft_3_device::device_timer(emu_timer &timer, device_timer_id id, in { if (!m_irq_count) { - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); + set_irq_line(ASSERT_LINE); m_irq_count = 0xffff; m_irq_enable = 0; } @@ -312,7 +311,7 @@ WRITE8_MEMBER(nes_sunsoft_3_device::write_h) case 0x5800: m_irq_enable = BIT(data, 4); m_irq_toggle = 0; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; case 0x6800: switch (data & 3) @@ -468,7 +467,7 @@ void nes_sunsoft_fme7_device::device_timer(emu_timer &timer, device_timer_id id, { m_irq_count = 0xffff; if (m_irq_enable & 0x01) // bit0, trigger enable - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); + set_irq_line(ASSERT_LINE); } else m_irq_count--; @@ -517,7 +516,7 @@ WRITE8_MEMBER(nes_sunsoft_fme7_device::fme7_write) case 0x0d: m_irq_enable = data; if (!(m_irq_enable & 1)) - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; case 0x0e: m_irq_count = (m_irq_count & 0xff00) | data; diff --git a/src/devices/bus/nes/taito.cpp b/src/devices/bus/nes/taito.cpp index e0b6f836a1c..2868bfea1dc 100644 --- a/src/devices/bus/nes/taito.cpp +++ b/src/devices/bus/nes/taito.cpp @@ -24,7 +24,6 @@ #include "emu.h" #include "taito.h" -#include "cpu/m6502/m6502.h" #include "video/ppu2c0x.h" // this has to be included so that IRQ functions can access ppu2c0x_device::BOTTOM_VISIBLE_SCANLINE @@ -237,7 +236,7 @@ void nes_tc0190fmc_pal16r4_device::hblank_irq( int scanline, int vblank, int bla m_irq_count--; if (m_irq_enable && !blanked && (m_irq_count == 0) && prior_count) - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); + set_irq_line(ASSERT_LINE); } } @@ -270,7 +269,7 @@ WRITE8_MEMBER(nes_tc0190fmc_pal16r4_device::write_h) break; case 0x4003: m_irq_enable = 0; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; case 0x6000: set_nt_mirroring(BIT(data, 6) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT); diff --git a/src/devices/bus/nes/tengen.cpp b/src/devices/bus/nes/tengen.cpp index 532dd9010d6..9cef09434a0 100644 --- a/src/devices/bus/nes/tengen.cpp +++ b/src/devices/bus/nes/tengen.cpp @@ -21,7 +21,6 @@ #include "emu.h" #include "tengen.h" -#include "cpu/m6502/m6502.h" #include "video/ppu2c0x.h" // this has to be included so that IRQ functions can access ppu2c0x_device::BOTTOM_VISIBLE_SCANLINE @@ -176,7 +175,7 @@ inline void nes_tengen032_device::irq_clock(int blanked) m_irq_count--; if (m_irq_enable && !blanked && !m_irq_count) - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); + set_irq_line(ASSERT_LINE); } // we use the HBLANK IRQ latch from PPU for the scanline based IRQ mode @@ -305,7 +304,7 @@ WRITE8_MEMBER(nes_tengen032_device::tengen032_write) case 0x6000: m_irq_enable = 0; - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); + set_irq_line(CLEAR_LINE); break; case 0x6001: diff --git a/src/devices/bus/nes/waixing.cpp b/src/devices/bus/nes/waixing.cpp index 7e95102c029..791779f0a76 100644 --- a/src/devices/bus/nes/waixing.cpp +++ b/src/devices/bus/nes/waixing.cpp @@ -17,8 +17,6 @@ #include "emu.h" #include "waixing.h" -#include "cpu/m6502/m6502.h" - #ifdef NES_PCB_DEBUG #define VERBOSE 1 @@ -977,7 +975,7 @@ void nes_waixing_sgz_device::hblank_irq(int scanline, int vblank, int blanked) { m_irq_count = m_irq_count_latch; m_irq_enable = m_irq_enable_latch; - m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); + hold_irq_line(); } }