mirror of
https://github.com/holub/mame
synced 2025-06-03 11:26:56 +03:00
nes_slot.cpp: Privatize m_maincpu member (nw)
This commit is contained in:
parent
9fa752a1a6
commit
734f51809e
@ -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;
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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++;
|
||||
|
@ -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;
|
||||
|
@ -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:
|
||||
|
@ -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:
|
||||
|
@ -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:
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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:
|
||||
|
@ -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;
|
||||
|
@ -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:
|
||||
|
@ -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:
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
//-------------------------------------------------
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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:
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user