nes_slot.cpp: Privatize m_maincpu member (nw)

This commit is contained in:
AJR 2018-05-13 23:28:04 -04:00
parent 9fa752a1a6
commit 734f51809e
27 changed files with 120 additions and 121 deletions

View File

@ -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;

View File

@ -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();
}
}

View File

@ -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;
}

View File

@ -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;
}
}

View File

@ -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

View File

@ -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();
}
}

View File

@ -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
{

View File

@ -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++;

View File

@ -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;

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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;
}

View File

@ -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:

View File

@ -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;

View File

@ -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:

View File

@ -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:

View File

@ -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;
}

View File

@ -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
//-------------------------------------------------

View File

@ -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<cpu_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;

View File

@ -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

View File

@ -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();
}
}

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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);

View File

@ -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:

View File

@ -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();
}
}