nes: CPU clock (well, phase 2 clock) also received by cartridge slot (nw)

This commit is contained in:
AJR 2018-05-13 12:51:03 -04:00
parent 48b45768a0
commit 5b316c6d23
21 changed files with 47 additions and 49 deletions

View File

@ -126,7 +126,7 @@ void nes_fcg_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_irq_enable));
save_item(NAME(m_irq_count));
@ -147,7 +147,7 @@ void nes_lz93d50_24c01_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_irq_enable));
save_item(NAME(m_irq_count));
@ -170,7 +170,7 @@ void nes_fjump2_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_reg));
}

View File

@ -214,7 +214,7 @@ void nes_mbaby_device::device_start()
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->reset();
timer_freq = machine().device<cpu_device>("maincpu")->cycles_to_attotime(24576);
timer_freq = clocks_to_attotime(24576);
save_item(NAME(m_irq_enable));
save_item(NAME(m_latch));
@ -249,7 +249,7 @@ void nes_smb3p_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_irq_enable));
save_item(NAME(m_irq_count));
@ -303,7 +303,7 @@ void nes_smb2j_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_irq_enable));
save_item(NAME(m_irq_count));
@ -326,7 +326,7 @@ void nes_smb2ja_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_irq_enable));
save_item(NAME(m_irq_count));
@ -349,7 +349,7 @@ void nes_smb2jb_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_irq_enable));
save_item(NAME(m_irq_count));
@ -435,7 +435,7 @@ void nes_lh53_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_irq_enable));
save_item(NAME(m_irq_count));
@ -516,7 +516,7 @@ void nes_shuiguan_device::device_start()
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
// always running and checking for IRQ every 114 cycles? or resetting every frame?
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(114));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(114));
save_item(NAME(m_irq_enable));
save_item(NAME(m_irq_count));

View File

@ -67,7 +67,7 @@ void nes_cony_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_irq_enable));
save_item(NAME(m_irq_count));
@ -103,7 +103,7 @@ void nes_yoko_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_irq_enable));
save_item(NAME(m_irq_count));

View File

@ -233,8 +233,8 @@ void nes_datach_device::device_start()
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
serial_timer = timer_alloc(TIMER_SERIAL);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
serial_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1000));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
serial_timer->adjust(attotime::zero, 0, clocks_to_attotime(1000));
save_item(NAME(m_irq_enable));
save_item(NAME(m_irq_count));

View File

@ -117,7 +117,7 @@ void nes_disksys_device::device_start()
m_disk->floppy_install_unload_proc(nes_disksys_device::unload_proc);
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_fds_motor_on));
save_item(NAME(m_fds_door_closed));

View File

@ -52,7 +52,7 @@ void nes_event_device::device_start()
common_start();
event_timer = timer_alloc(TIMER_EVENT);
event_timer->adjust(attotime::never);
timer_freq = machine().device<cpu_device>("maincpu")->cycles_to_attotime(1);
timer_freq = clocks_to_attotime(1);
save_item(NAME(m_latch));
save_item(NAME(m_count));

View File

@ -259,6 +259,6 @@ READ8_MEMBER(nes_ggenie_device::nt_r)
//-------------------------------------------------
MACHINE_CONFIG_START(nes_ggenie_device::device_add_mconfig)
MCFG_NES_CARTRIDGE_ADD("gg_slot", nes_cart, nullptr)
MCFG_NES_CARTRIDGE_ADD("gg_slot", DERIVED_CLOCK(1, 1), nes_cart, nullptr)
MCFG_NES_CARTRIDGE_NOT_MANDATORY
MACHINE_CONFIG_END

View File

@ -130,7 +130,7 @@ void nes_h3001_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_irq_enable));
save_item(NAME(m_irq_count));

View File

@ -210,7 +210,7 @@ void nes_ss88006_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_mmc_prg_bank));
save_item(NAME(m_mmc_vrom_bank));

View File

@ -76,7 +76,7 @@ void nes_jy_typea_device::device_start()
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->reset();
timer_freq = machine().device<cpu_device>("maincpu")->cycles_to_attotime(1);
timer_freq = clocks_to_attotime(1);
save_item(NAME(m_mul));
save_item(NAME(m_latch));

View File

@ -150,7 +150,7 @@ void nes_ks7032_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_latch));
save_item(NAME(m_irq_enable));
@ -176,7 +176,7 @@ void nes_ks7017_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_latch));
save_item(NAME(m_irq_enable));

View File

@ -126,7 +126,7 @@ void nes_konami_vrc3_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_irq_mode));
save_item(NAME(m_irq_enable));
@ -154,7 +154,7 @@ void nes_konami_vrc4_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_irq_mode));
save_item(NAME(m_irq_prescale));
@ -195,7 +195,7 @@ void nes_konami_vrc7_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_irq_mode));
save_item(NAME(m_irq_prescale));

View File

@ -78,7 +78,7 @@ void nes_ffe4_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_exram));
save_item(NAME(m_exram_enabled));

View File

@ -145,7 +145,7 @@ void nes_namcot340_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_irq_enable));
save_item(NAME(m_irq_count));
@ -171,7 +171,7 @@ void nes_namcot175_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_irq_enable));
save_item(NAME(m_irq_count));
@ -199,7 +199,7 @@ void nes_namcot163_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_irq_enable));
save_item(NAME(m_irq_count));

View File

@ -111,7 +111,9 @@ device_nes_cart_interface::device_nes_cart_interface(const machine_config &mconf
, m_ciram(nullptr)
, m_prg_size(0)
, m_vrom_size(0)
, m_maincpu(nullptr)
// 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.
, m_maincpu(*this, ":maincpu")
, m_mapper_sram(nullptr)
, m_mapper_sram_size(0)
, m_ce_mask(0)
@ -671,10 +673,6 @@ WRITE8_MEMBER(device_nes_cart_interface::write_h)
void device_nes_cart_interface::pcb_start(running_machine &machine, uint8_t *ciram_ptr, bool cart_mounted)
{
// 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.
m_maincpu = machine.device<cpu_device>("maincpu");
if (cart_mounted) // disksys expansion can arrive here without the memory banks!
{
// Setup PRG

View File

@ -245,7 +245,7 @@ protected:
// 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.
cpu_device *m_maincpu;
required_device<cpu_device> m_maincpu;
// 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
@ -414,18 +414,12 @@ DECLARE_DEVICE_TYPE(NES_CART_SLOT, nes_cart_slot_device)
#define NESSLOT_CHRROM_REGION_TAG ":cart:chr_rom"
#define MCFG_NES_CARTRIDGE_ADD(_tag, _slot_intf, _def_slot) \
MCFG_DEVICE_ADD(_tag, NES_CART_SLOT, 0) \
#define MCFG_NES_CARTRIDGE_ADD(_tag, _clock, _slot_intf, _def_slot) \
MCFG_DEVICE_ADD(_tag, NES_CART_SLOT, _clock) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
#define MCFG_NES_CARTRIDGE_NOT_MANDATORY \
static_cast<nes_cart_slot_device *>(device)->set_must_be_loaded(false);
// Hacky configuration to add a slot with fixed disksys interface
#define MCFG_DISKSYS_ADD(_tag, _slot_intf, _def_slot) \
MCFG_DEVICE_ADD(_tag, NES_CART_SLOT, 0) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, true) \
MCFG_NES_CARTRIDGE_NOT_MANDATORY
#endif // MAME_BUS_NES_NES_SLOT_H

View File

@ -383,7 +383,7 @@ void nes_cityfight_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_prg_reg));
save_item(NAME(m_prg_mode));

View File

@ -124,7 +124,7 @@ void nes_sunsoft_3_device::device_start()
{
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_irq_enable));
save_item(NAME(m_irq_toggle));
@ -170,7 +170,7 @@ void nes_sunsoft_fme7_device::device_start()
irq_timer = timer_alloc(TIMER_IRQ);
// this has to be hardcoded because some some scanline code only suits NTSC... it will be fixed with PPU rewrite
irq_timer->adjust(attotime::zero, 0, attotime::from_hz((21477272.724 / 12)));
// irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
// irq_timer->adjust(attotime::zero, 0, clocks_to_attotime(1));
save_item(NAME(m_wram_bank));
save_item(NAME(m_latch));

View File

@ -169,7 +169,7 @@ void nes_sunsoft_dcs_device::device_start()
common_start();
ntb_enable_timer = timer_alloc(TIMER_PROTECT);
ntb_enable_timer->reset();
timer_freq = machine().device<cpu_device>("maincpu")->cycles_to_attotime(107520);
timer_freq = clocks_to_attotime(107520);
save_item(NAME(m_latch1));
save_item(NAME(m_latch2));

View File

@ -83,7 +83,7 @@ void nes_tengen032_device::device_start()
common_start();
irq_timer = timer_alloc(TIMER_IRQ);
irq_timer->reset();
timer_freq = machine().device<cpu_device>("maincpu")->cycles_to_attotime(4);
timer_freq = clocks_to_attotime(4);
save_item(NAME(m_mmc_prg_bank));
save_item(NAME(m_mmc_vrom_bank));

View File

@ -79,7 +79,7 @@ MACHINE_CONFIG_START(nes_state::nes)
MCFG_NES_CONTROL_PORT_ADD("ctrl2", nes_control_port2_devices, "joypad")
MCFG_NESCTRL_BRIGHTPIXEL_CB(nes_state, bright_pixel)
MCFG_NES_CARTRIDGE_ADD("nes_slot", nes_cart, nullptr)
MCFG_NES_CARTRIDGE_ADD("nes_slot", NTSC_APU_CLOCK, nes_cart, nullptr)
MCFG_SOFTWARE_LIST_ADD("cart_list", "nes")
MCFG_SOFTWARE_LIST_ADD("ade_list", "nes_ade") // Camerica/Codemasters Aladdin Deck Enhancer mini-carts
MCFG_SOFTWARE_LIST_ADD("ntb_list", "nes_ntbrom") // Sunsoft Nantettate! Baseball mini-carts
@ -99,6 +99,9 @@ MACHINE_CONFIG_START(nes_state::nespal)
MCFG_PPU2C0X_CPU("maincpu")
MCFG_PPU2C0X_INT_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
MCFG_DEVICE_MODIFY("nes_slot")
MCFG_DEVICE_CLOCK(PAL_APU_CLOCK)
/* video hardware */
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_REFRESH_RATE(50.0070)
@ -132,6 +135,9 @@ MACHINE_CONFIG_START(nes_state::nespalc)
MCFG_PPU2C0X_CPU("maincpu")
MCFG_PPU2C0X_INT_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
MCFG_DEVICE_MODIFY("nes_slot")
MCFG_DEVICE_CLOCK(PALC_APU_CLOCK)
/* video hardware */
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_REFRESH_RATE(50.0070)