(nw) tie up some loose ends - in particular, allow watchdog timer to

take any tag-like for the screen tag rather than only C strings
This commit is contained in:
Vas Crabb 2018-09-16 20:33:06 +10:00
parent ce3deb056d
commit 127949063b
19 changed files with 52 additions and 52 deletions

View File

@ -29,7 +29,7 @@ watchdog_timer_device::watchdog_timer_device(const machine_config &mconfig, cons
: device_t(mconfig, WATCHDOG_TIMER, tag, owner, clock)
, m_vblank_count(0)
, m_time(attotime::zero)
, m_screen_tag(nullptr)
, m_screen(*this, finder_base::DUMMY_TAG)
{
}
@ -43,9 +43,10 @@ void watchdog_timer_device::device_validity_check(validity_checker &valid) const
{
if (m_vblank_count != 0)
{
screen_device *screen = dynamic_cast<screen_device *>(siblingdevice(m_screen_tag));
if (screen == nullptr)
osd_printf_error("Invalid screen tag specified\n");
if (m_screen.finder_tag() == finder_base::DUMMY_TAG)
osd_printf_error("VBLANK count set without setting screen tag\n");
else if (!m_screen)
osd_printf_error("Screen device %s not found\n", m_screen.finder_tag());
}
}
@ -64,9 +65,8 @@ void watchdog_timer_device::device_start()
if (m_vblank_count != 0)
{
// fetch the screen
screen_device *screen = siblingdevice<screen_device>(m_screen_tag);
if (screen != nullptr)
screen->register_vblank_callback(vblank_state_delegate(&watchdog_timer_device::watchdog_vblank, this));
if (m_screen)
m_screen->register_vblank_callback(vblank_state_delegate(&watchdog_timer_device::watchdog_vblank, this));
}
save_item(NAME(m_enabled));
save_item(NAME(m_counter));

View File

@ -1,11 +1,12 @@
// license:BSD-3-Clause
// copyright-holders:Aaron Giles
#ifndef MAME_MACHINE_WATCHDOG_H
#define MAME_MACHINE_WATCHDOG_H
#pragma once
#include <screen.h>
//**************************************************************************
// TYPE DEFINITIONS
@ -20,7 +21,7 @@ public:
watchdog_timer_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
// inline configuration helpers
void set_vblank_count(const char *screen_tag, int32_t count) { m_screen_tag = screen_tag; m_vblank_count = count; }
template <typename T> void set_vblank_count(T &&screen_tag, int32_t count) { m_screen.set_tag(std::forward<T>(screen_tag)); m_vblank_count = count; }
void set_time(attotime time) { m_time = time; }
// watchdog control
@ -49,13 +50,13 @@ private:
void watchdog_vblank(screen_device &screen, bool vblank_state);
// configuration data
int32_t m_vblank_count; // number of VBLANKs until resetting the machine
int32_t m_vblank_count; // number of VBLANKs until resetting the machine
attotime m_time; // length of time until resetting the machine
const char * m_screen_tag; // the tag of the screen this timer tracks
optional_device<screen_device> m_screen; // the tag of the screen this timer tracks
// internal state
bool m_enabled; // is the watchdog enabled?
int32_t m_counter; // counter for VBLANK tracking
int32_t m_counter; // counter for VBLANK tracking
emu_timer * m_timer; // timer for triggering reset
};

View File

@ -416,8 +416,8 @@ WRITE8_MEMBER(exidy_sh8253_sound_device::r6532_portb_w)
{
if (m_tms.found())
{
m_tms->rsq_w(data & 0x01);
m_tms->wsq_w((data >> 1) & 0x01);
m_tms->rsq_w(BIT(data, 0));
m_tms->wsq_w(BIT(data, 1));
}
}

View File

@ -1365,10 +1365,10 @@ READ8_MEMBER( cmi_state::fdc_r )
{
switch (m_fdc_addr)
{
case 0xc: { return m_wd1791->status_r() ^ 0xff; }
case 0xd: { return m_wd1791->track_r() ^ 0xff; }
case 0xe: { return m_wd1791->sector_r() ^ 0xff; }
case 0xf: { return m_wd1791->data_r() ^ 0xff; }
case 0xc: return m_wd1791->status_r() ^ 0xff;
case 0xd: return m_wd1791->track_r() ^ 0xff;
case 0xe: return m_wd1791->sector_r() ^ 0xff;
case 0xf: return m_wd1791->data_r() ^ 0xff;
default: return 0;
}
}

View File

@ -330,7 +330,7 @@ MACHINE_CONFIG_START(foodf_state::foodf)
X2212(config, "nvram").set_auto_save(true);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 8);
MCFG_TIMER_DRIVER_ADD(m_scan_timer, foodf_state, scanline_update_timer)

View File

@ -1650,7 +1650,7 @@ MACHINE_CONFIG_START(bosco_state::bosco)
//m_videolatch->q_out_cb<7>().set("50xx_2", FUNC(namco_50xx_device::reset_w));
//m_videolatch->q_out_cb<7>().append("52xx", FUNC(namco_52xx_device, reset_w));
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 8);
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
/* synchronization of the CPUs */
@ -1722,7 +1722,7 @@ MACHINE_CONFIG_START(galaga_state::galaga)
// Q0-Q5 to 05XX for starfield control
m_videolatch->q_out_cb<7>().set(FUNC(galaga_state::flip_screen_w));
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 8);
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame - an high value to ensure proper */
/* synchronization of the CPUs */
@ -1825,7 +1825,7 @@ MACHINE_CONFIG_START(xevious_state::xevious)
MCFG_NAMCO_06XX_WRITE_2_CB(WRITE8("50xx", namco_50xx_device, write))
MCFG_NAMCO_06XX_WRITE_3_CB(WRITE8("54xx", namco_54xx_device, write))
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 8);
MCFG_QUANTUM_TIME(attotime::from_hz(60000)) /* 1000 CPU slices per frame - an high value to ensure proper */
/* synchronization of the CPUs */

View File

@ -1776,10 +1776,10 @@ MACHINE_CONFIG_START(gottlieb_state::gottlieb_core)
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 16);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 16);
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_ADD(m_screen, RASTER)
MCFG_SCREEN_RAW_PARAMS(SYSTEM_CLOCK/4, GOTTLIEB_VIDEO_HCOUNT, 0, GOTTLIEB_VIDEO_HBLANK, GOTTLIEB_VIDEO_VCOUNT, 0, GOTTLIEB_VIDEO_VBLANK)
MCFG_SCREEN_UPDATE_DRIVER(gottlieb_state, screen_update_gottlieb)

View File

@ -755,7 +755,7 @@ MACHINE_CONFIG_START(grchamp_state::grchamp)
MCFG_DEVICE_PROGRAM_MAP(sound_map)
MCFG_DEVICE_PERIODIC_INT_DRIVER(grchamp_state, irq0_line_hold, (double)SOUND_CLOCK/4/16/16/10/16)
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count(m_screen, 8);
MCFG_QUANTUM_TIME(attotime::from_hz(6000))
/* video hardware */
@ -763,7 +763,7 @@ MACHINE_CONFIG_START(grchamp_state::grchamp)
MCFG_PALETTE_ADD("palette", 32)
MCFG_PALETTE_INIT_OWNER(grchamp_state, grchamp)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_ADD(m_screen, RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE)
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
MCFG_SCREEN_UPDATE_DRIVER(grchamp_state, screen_update)

View File

@ -194,7 +194,7 @@ void m79152pc_state::screen_draw_line(bitmap_ind16 &bitmap, unsigned y)
for (u16 x = ma; x < ma + 80; x++)
{
// BIT(attr, 3) should probably be blinking
// BIT(attr, 1) may be used for high-intensity text (
// BIT(attr, 1) may be used for high-intensity text
u8 chr = m_videoram[x];
u8 attr = m_attributes[x];
u8 gfx = m_chargen[(chr << 4) | (BIT(attr, 2) && ra == 15 ? 3 : ra)];

View File

@ -1092,7 +1092,7 @@ MACHINE_CONFIG_START(mcr3_state::mcrmono)
m_ctc->intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
m_ctc->zc_callback<0>().set(m_ctc, FUNC(z80ctc_device::trg1));
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 16);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 16);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
@ -1101,7 +1101,7 @@ MACHINE_CONFIG_START(mcr3_state::mcrmono)
SPEAKER(config, "rspeaker").front_right();
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_ADD(m_screen, RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
MCFG_SCREEN_REFRESH_RATE(30)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)

View File

@ -1157,12 +1157,12 @@ MACHINE_CONFIG_START(missile_state::missile)
MCFG_DEVICE_ADD("maincpu", M6502, MASTER_CLOCK/8)
MCFG_DEVICE_PROGRAM_MAP(main_map)
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count(m_screen, 8);
/* video hardware */
MCFG_PALETTE_ADD("palette", 8)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_ADD(m_screen, RASTER)
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
MCFG_SCREEN_UPDATE_DRIVER(missile_state, screen_update_missile)
MCFG_SCREEN_PALETTE("palette")

View File

@ -897,7 +897,7 @@ MACHINE_CONFIG_START(polepos_state::polepos)
MCFG_NAMCO_06XX_WRITE_2_CB(WRITE8("52xx", namco_52xx_device, write))
MCFG_NAMCO_06XX_WRITE_3_CB(WRITE8("54xx", namco_54xx_device, write))
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 16); // 128V clocks the same as VBLANK
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 16); // 128V clocks the same as VBLANK
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* some interleaving */
@ -1006,7 +1006,7 @@ MACHINE_CONFIG_START(polepos_state::topracern)
MCFG_NAMCO_06XX_READ_0_CB(READ8("51xx", namco_51xx_device, read))
MCFG_NAMCO_06XX_WRITE_0_CB(WRITE8("51xx", namco_51xx_device, write))
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 16); // 128V clocks the same as VBLANK
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 16); // 128V clocks the same as VBLANK
MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* some interleaving */

View File

@ -347,7 +347,7 @@ MACHINE_CONFIG_START(rampart_state::rampart)
EEPROM_2816(config, "eeprom").lock_after_write(true);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 8);
/* video hardware */
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_rampart)
@ -358,7 +358,7 @@ MACHINE_CONFIG_START(rampart_state::rampart)
MCFG_ATARI_MOTION_OBJECTS_ADD("mob", "screen", rampart_state::s_mob_config)
MCFG_ATARI_MOTION_OBJECTS_GFXDECODE("gfxdecode")
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_ADD(m_screen, RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
/* note: these parameters are from published specs, not derived */
/* the board uses an SOS-2 chip to generate video signals */

View File

@ -573,12 +573,12 @@ MACHINE_CONFIG_START(sbrkout_state::sbrkout)
// coin counter activity as stated in Atari bulletin B-0054 (which recommends tying it to the
// CPU reset line instead).
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 8);
/* video hardware */
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_sbrkout)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_ADD(m_screen, RASTER)
MCFG_SCREEN_RAW_PARAMS(MAIN_CLOCK/2, 384, 0, 256, 262, 0, 224)
MCFG_SCREEN_UPDATE_DRIVER(sbrkout_state, screen_update_sbrkout)
MCFG_SCREEN_PALETTE("palette")

View File

@ -497,10 +497,10 @@ MACHINE_CONFIG_START(sprint2_state::sprint2)
MCFG_DEVICE_PROGRAM_MAP(sprint2_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", sprint2_state, sprint2)
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count(m_screen, 8);
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_ADD(m_screen, RASTER)
MCFG_SCREEN_RAW_PARAMS(12.096_MHz_XTAL, 768, 0, 512, 262, 0, 224)
MCFG_SCREEN_UPDATE_DRIVER(sprint2_state, screen_update_sprint2)
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, sprint2_state, screen_vblank_sprint2))

View File

@ -385,10 +385,10 @@ MACHINE_CONFIG_START(sprint4_state::sprint4)
MCFG_DEVICE_ADD("maincpu", M6502, PIXEL_CLOCK / 8)
MCFG_DEVICE_PROGRAM_MAP(sprint4_cpu_map)
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count(m_screen, 8);
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_ADD(m_screen, RASTER)
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, 0, 256, VTOTAL, 0, 224)
MCFG_SCREEN_UPDATE_DRIVER(sprint4_state, screen_update)
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, sprint4_state, screen_vblank))

View File

@ -254,12 +254,11 @@ READ16_MEMBER(tecmosys_state::unk880000_r)
switch( offset )
{
case 0:
if ( m_screen->vpos() >= 240) return 0;
else return 1;
case 0:
return (m_screen->vpos() >= 240) ? 0 : 1;
default:
return 0;
default:
return 0;
}
}
@ -459,7 +458,7 @@ MACHINE_CONFIG_START(tecmosys_state::tecmosys)
MCFG_DEVICE_PROGRAM_MAP(main_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", tecmosys_state, irq1_line_hold)
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 400); // guess
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count(m_screen, 400); // guess
MCFG_DEVICE_ADD("audiocpu", Z80, XTAL(16'000'000)/2 )
MCFG_DEVICE_PROGRAM_MAP(sound_map)
@ -469,7 +468,7 @@ MACHINE_CONFIG_START(tecmosys_state::tecmosys)
EEPROM_93C46_16BIT(config, "eeprom", eeprom_serial_streaming::ENABLE);
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_ADD(m_screen, RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK)
MCFG_SCREEN_REFRESH_RATE(57.4458)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(3000))

View File

@ -211,7 +211,7 @@ MACHINE_CONFIG_START(toobin_state::toobin)
EEPROM_2804(config, "eeprom").lock_after_write(true);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, "watchdog").set_vblank_count(m_screen, 8);
/* video hardware */
MCFG_TILEMAP_ADD_STANDARD("playfield", "gfxdecode", 4, toobin_state, get_playfield_tile_info, 8,8, SCAN_ROWS, 128,64)
@ -219,7 +219,7 @@ MACHINE_CONFIG_START(toobin_state::toobin)
MCFG_ATARI_MOTION_OBJECTS_ADD("mob", "screen", toobin_state::s_mob_config)
MCFG_ATARI_MOTION_OBJECTS_GFXDECODE("gfxdecode")
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_ADD(m_screen, RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/2, 640, 0, 512, 416, 0, 384)
MCFG_SCREEN_UPDATE_DRIVER(toobin_state, screen_update)

View File

@ -302,10 +302,10 @@ MACHINE_CONFIG_START(ultratnk_state::ultratnk)
latch.q_out_cb<6>().set("discrete", FUNC(discrete_device::write_line<ULTRATNK_FIRE_EN_2>));
latch.q_out_cb<7>().set("discrete", FUNC(discrete_device::write_line<ULTRATNK_FIRE_EN_1>));
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 8);
WATCHDOG_TIMER(config, m_watchdog).set_vblank_count(m_screen, 8);
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_ADD(m_screen, RASTER)
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, 0, 256, VTOTAL, 0, 224)
MCFG_SCREEN_UPDATE_DRIVER(ultratnk_state, screen_update)
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, ultratnk_state, screen_vblank))