diff --git a/src/emu/bus/ti99_peb/bwg.c b/src/emu/bus/ti99_peb/bwg.c index 8aabbedd5f5..0c3410867aa 100644 --- a/src/emu/bus/ti99_peb/bwg.c +++ b/src/emu/bus/ti99_peb/bwg.c @@ -594,12 +594,6 @@ void snug_bwg_device::device_config_complete() if (subdevice("3")!=NULL) m_floppy[3] = static_cast(subdevice("3")->first_subdevice()); } -static const mm58274c_interface bwg_mm58274c_interface = -{ - 1, /* mode 24*/ - 0 /* first day of week */ -}; - INPUT_PORTS_START( bwg_fdc ) PORT_START( "BWGDIP1" ) PORT_DIPNAME( 0x01, 0x00, "BwG step rate" ) @@ -634,7 +628,10 @@ MACHINE_CONFIG_FRAGMENT( bwg_fdc ) MCFG_WD1773x_ADD(FDC_TAG, XTAL_8MHz) MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(snug_bwg_device, fdc_irq_w)) MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(snug_bwg_device, fdc_drq_w)) - MCFG_MM58274C_ADD(CLOCK_TAG, bwg_mm58274c_interface) + + MCFG_DEVICE_ADD(CLOCK_TAG, MM58274C, 0) + MCFG_MM58274C_MODE24(1) // 24 hour + MCFG_MM58274C_DAY1(0) // sunday MCFG_FLOPPY_DRIVE_ADD("0", bwg_floppies, "525dd", snug_bwg_device::floppy_formats) MCFG_FLOPPY_DRIVE_ADD("1", bwg_floppies, "525dd", snug_bwg_device::floppy_formats) @@ -1115,12 +1112,6 @@ const wd17xx_interface bwgleg_wd17xx_interface = { PFLOPPY_0, PFLOPPY_1, PFLOPPY_2, PFLOPPY_3 } }; -static const mm58274c_interface floppyleg_mm58274c_interface = -{ - 1, /* mode 24*/ - 0 /* first day of week */ -}; - INPUT_PORTS_START( bwg_fdc_legacy ) PORT_START( "BWGDIP1" ) PORT_DIPNAME( 0x01, 0x00, "BwG step rate" ) @@ -1142,7 +1133,10 @@ INPUT_PORTS_END MACHINE_CONFIG_FRAGMENT( bwg_fdc_legacy ) MCFG_WD1773_ADD(FDCLEG_TAG, bwgleg_wd17xx_interface ) - MCFG_MM58274C_ADD(CLOCK_TAG, floppyleg_mm58274c_interface) + + MCFG_DEVICE_ADD(CLOCK_TAG, MM58274C, 0) + MCFG_MM58274C_MODE24(1) // 24 hour + MCFG_MM58274C_DAY1(0) // sunday MACHINE_CONFIG_END ROM_START( bwg_fdc_legacy ) diff --git a/src/emu/bus/ti99_peb/hfdc.c b/src/emu/bus/ti99_peb/hfdc.c index 305d8064ff7..3900856f20d 100644 --- a/src/emu/bus/ti99_peb/hfdc.c +++ b/src/emu/bus/ti99_peb/hfdc.c @@ -435,12 +435,6 @@ const smc92x4_interface ti99_smc92x4_interface = FALSE, /* do not use the full track layout */ }; -static const mm58274c_interface floppy_mm58274c_interface = -{ - 1, /* mode 24*/ - 0 /* first day of week */ -}; - MACHINE_CONFIG_FRAGMENT( ti99_hfdc ) MCFG_SMC92X4_ADD(FDC_TAG, ti99_smc92x4_interface ) MCFG_SMC92X4_INTRQ_CALLBACK(WRITELINE(myarc_hfdc_device, intrq_w)) @@ -449,7 +443,10 @@ MACHINE_CONFIG_FRAGMENT( ti99_hfdc ) MCFG_SMC92X4_AUXBUS_IN_CALLBACK(READ8(myarc_hfdc_device, auxbus_in)) MCFG_SMC92X4_DMA_IN_CALLBACK(READ8(myarc_hfdc_device, read_buffer)) MCFG_SMC92X4_DMA_OUT_CALLBACK(WRITE8(myarc_hfdc_device, write_buffer)) - MCFG_MM58274C_ADD(CLOCK_TAG, floppy_mm58274c_interface) + + MCFG_DEVICE_ADD(CLOCK_TAG, MM58274C, 0) + MCFG_MM58274C_MODE24(1) // 24 hour + MCFG_MM58274C_DAY1(0) // sunday MACHINE_CONFIG_END ROM_START( ti99_hfdc ) diff --git a/src/emu/machine/mm58274c.c b/src/emu/machine/mm58274c.c index 08c47847b73..9029ddfdf78 100644 --- a/src/emu/machine/mm58274c.c +++ b/src/emu/machine/mm58274c.c @@ -46,31 +46,13 @@ const device_type MM58274C = &device_creator; mm58274c_device::mm58274c_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, MM58274C, "National Semiconductor MM58274C", tag, owner, clock, "mm58274c", __FILE__) + : device_t(mconfig, MM58274C, "National Semiconductor MM58274C", tag, owner, clock, "mm58274c", __FILE__), + m_mode24(0), + m_day1(0) { } -//------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void mm58274c_device::device_config_complete() -{ - // inherit a copy of the static data - const mm58274c_interface *intf = reinterpret_cast(static_config()); - if (intf != NULL) - *static_cast(this) = *intf; - // or initialize to defaults if none provided - else - { - m_mode24 = 0; - m_day1 = 0; - } -} - //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- diff --git a/src/emu/machine/mm58274c.h b/src/emu/machine/mm58274c.h index 8f1a28b619f..d16246de97a 100644 --- a/src/emu/machine/mm58274c.h +++ b/src/emu/machine/mm58274c.h @@ -1,32 +1,19 @@ #ifndef __MM58274C_H__ #define __MM58274C_H__ - -/* - Initializes the clock chip. - day1 must be set to a value from 0 (sunday), 1 (monday) ... - to 6 (saturday) and is needed to correctly retrieve the day-of-week - from the host system clock. - */ - -struct mm58274c_interface -{ - int m_mode24; /* 24/12 mode */ - int m_day1; /* first day of week */ -}; - - /*************************************************************************** MACROS ***************************************************************************/ -class mm58274c_device : public device_t, - public mm58274c_interface +class mm58274c_device : public device_t { public: mm58274c_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); ~mm58274c_device() {} + static void set_mode24(device_t &device, int mode) { downcast(device).m_mode24 = mode; } + static void set_day1(device_t &device, int day) { downcast(device).m_day1 = day; } + DECLARE_READ8_MEMBER(read); DECLARE_WRITE8_MEMBER(write); @@ -35,12 +22,19 @@ public: protected: // device-level overrides - virtual void device_config_complete(); virtual void device_start(); virtual void device_reset(); private: // internal state + + // Initializion the clock chip: + // m_day1 must be set to a value from 0 (sunday), 1 (monday)... + // to 6 (saturday) and is needed to correctly retrieve the + // day-of-week from the host system clock. + int m_mode24; /* 24/12 mode */ + int m_day1; /* first day of week */ + attotime interrupt_period_table(int val); int m_status; /* status register (*read* from address 0 = control register) */ @@ -49,7 +43,6 @@ private: int m_clk_set; /* clock setting register */ int m_int_ctl; /* interrupt control register */ - int m_wday; /* day of the week (1-7 (1=day1 as set in init)) */ int m_years1; /* years (BCD: 0-99) */ int m_years2; @@ -80,4 +73,11 @@ extern const device_type MM58274C; MCFG_DEVICE_ADD(_tag, MM58274C, 0) \ MCFG_DEVICE_CONFIG(_intrf) +#define MCFG_MM58274C_MODE24(_mode) \ + mm58274c_device::set_mode24(*device, _mode); + +#define MCFG_MM58274C_DAY1(_day) \ + mm58274c_device::set_day1(*device, _day); + + #endif diff --git a/src/mess/drivers/compis.c b/src/mess/drivers/compis.c index b8dc3dff8ae..1c02da02310 100644 --- a/src/mess/drivers/compis.c +++ b/src/mess/drivers/compis.c @@ -624,17 +624,6 @@ static I8274_INTERFACE( mpsc_intf ) }; -//------------------------------------------------- -// mm58274c_interface rtc_intf -//------------------------------------------------- - -static const mm58274c_interface rtc_intf = -{ - 0, /* mode 24*/ - 1 /* first day of week */ -}; - - //------------------------------------------------- // cassette_interface compis_cassette_interface //------------------------------------------------- @@ -745,7 +734,11 @@ static MACHINE_CONFIG_START( compis, compis_state ) MCFG_COMPIS_KEYBOARD_OUT_TX_HANDLER(DEVWRITELINE(I8251A_TAG, i8251_device, write_rxd)) MCFG_I8274_ADD(I8274_TAG, XTAL_16MHz/4, mpsc_intf) - MCFG_MM58274C_ADD(MM58174A_TAG, rtc_intf) + + MCFG_DEVICE_ADD(MM58174A_TAG, MM58274C, 0) + MCFG_MM58274C_MODE24(0) // 12 hour + MCFG_MM58274C_DAY1(1) // monday + MCFG_CASSETTE_ADD(CASSETTE_TAG, compis_cassette_interface) MCFG_TIMER_DRIVER_ADD_PERIODIC("tape", compis_state, tape_tick, attotime::from_hz(44100)) diff --git a/src/mess/drivers/concept.c b/src/mess/drivers/concept.c index 5210831a241..30f01cb46dd 100644 --- a/src/mess/drivers/concept.c +++ b/src/mess/drivers/concept.c @@ -190,13 +190,6 @@ INPUT_PORTS_END /* init with simple, fixed, B/W palette */ /* Is the palette black on white or white on black??? */ -static const mm58274c_interface concept_mm58274c_interface = -{ - 0, /* mode 24*/ - 1 /* first day of week */ -}; - - SLOT_INTERFACE_START( concept_exp_devices ) SLOT_INTERFACE("fdc", CONCEPT_FDC) SLOT_INTERFACE("hdc", CONCEPT_HDC) @@ -227,7 +220,9 @@ static MACHINE_CONFIG_START( concept, concept_state ) /* no sound? */ /* rtc */ - MCFG_MM58274C_ADD("mm58274c", concept_mm58274c_interface) + MCFG_DEVICE_ADD("mm58274c", MM58274C, 0) + MCFG_MM58274C_MODE24(0) // 12 hour + MCFG_MM58274C_DAY1(1) // monday /* via */ MCFG_DEVICE_ADD("via6522_0", VIA6522, 1022750) diff --git a/src/mess/drivers/geneve.c b/src/mess/drivers/geneve.c index 5b9b5fcf17a..d5129939090 100644 --- a/src/mess/drivers/geneve.c +++ b/src/mess/drivers/geneve.c @@ -686,12 +686,6 @@ WRITE_LINE_MEMBER( geneve_state::dbin_line ) m_mapper->dbin_in(state); } -static const mm58274c_interface geneve_mm58274c_interface = -{ - 1, /* mode 24*/ - 0 /* first day of week */ -}; - DRIVER_INIT_MEMBER(geneve_state,geneve) { } @@ -754,7 +748,9 @@ static MACHINE_CONFIG_START( geneve_60hz, geneve_state ) MCFG_GENEVE_READY_HANDLER( WRITELINE(geneve_state, mapper_ready) ) // Clock - MCFG_MM58274C_ADD(GCLOCK_TAG, geneve_mm58274c_interface) + MCFG_DEVICE_ADD(GCLOCK_TAG, MM58274C, 0) + MCFG_MM58274C_MODE24(1) // 24 hour + MCFG_MM58274C_DAY1(0) // sunday // Peripheral expansion box (Geneve composition) MCFG_DEVICE_ADD( PERIBOX_TAG, PERIBOX_GEN, 0) diff --git a/src/mess/drivers/hunter2.c b/src/mess/drivers/hunter2.c index 4158df500a5..e1aeee9f008 100644 --- a/src/mess/drivers/hunter2.c +++ b/src/mess/drivers/hunter2.c @@ -344,17 +344,6 @@ PALETTE_INIT_MEMBER(hunter2_state, hunter2) palette.set_pen_color(1, rgb_t(92, 83, 88)); } -//------------------------------------------------- -// mm58274c_interface rtc_intf -//------------------------------------------------- - -// this is all guess -static const mm58274c_interface rtc_intf = -{ - 0, /* mode 24*/ - 1 /* first day of week */ -}; - WRITE_LINE_MEMBER(hunter2_state::timer0_out) { if(state == ASSERT_LINE) @@ -411,8 +400,12 @@ static MACHINE_CONFIG_START( hunter2, hunter2_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) /* Devices */ - MCFG_MM58274C_ADD("rtc", rtc_intf) - //MCFG_TIMER_DRIVER_ADD_PERIODIC("hunter_a", hunter2_state, a_timer, attotime::from_hz(61)) + MCFG_DEVICE_ADD("rtc", MM58274C, 0) + // this is all guess + MCFG_MM58274C_MODE24(0) // 12 hour + MCFG_MM58274C_DAY1(1) // monday + +//MCFG_TIMER_DRIVER_ADD_PERIODIC("hunter_a", hunter2_state, a_timer, attotime::from_hz(61)) MCFG_NSC810_ADD("iotimer",XTAL_4MHz,XTAL_4MHz) MCFG_NSC810_PORTA_READ(READ8(hunter2_state,port00_r)) diff --git a/src/mess/drivers/v6809.c b/src/mess/drivers/v6809.c index 2ba5d6c13a8..a5eb5d31e3e 100644 --- a/src/mess/drivers/v6809.c +++ b/src/mess/drivers/v6809.c @@ -316,17 +316,6 @@ static SLOT_INTERFACE_START( v6809_floppies ) SLOT_INTERFACE( "525dd", FLOPPY_525_DD ) SLOT_INTERFACE_END -//------------------------------------------------- -// mm58274c_interface rtc_intf -//------------------------------------------------- - -// this is all guess -static const mm58274c_interface rtc_intf = -{ - 0, /* mode 24*/ - 1 /* first day of week */ -}; - // *** Machine **** @@ -379,7 +368,11 @@ static MACHINE_CONFIG_START( v6809, v6809_state ) MCFG_DEVICE_ADD("acia_clock", CLOCK, 10) MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(v6809_state, write_acia_clock)) - MCFG_MM58274C_ADD("rtc", rtc_intf) + MCFG_DEVICE_ADD("rtc", MM58274C, 0) +// this is all guess + MCFG_MM58274C_MODE24(0) // 12 hour + MCFG_MM58274C_DAY1(1) // monday + MCFG_MB8876x_ADD("fdc", XTAL_16MHz / 16) MCFG_FLOPPY_DRIVE_ADD("fdc:0", v6809_floppies, "525dd", floppy_image_device::default_floppy_formats) MACHINE_CONFIG_END diff --git a/src/mess/drivers/wicat.c b/src/mess/drivers/wicat.c index 0e49a4d2cf0..aaaffa9cb82 100644 --- a/src/mess/drivers/wicat.c +++ b/src/mess/drivers/wicat.c @@ -747,12 +747,6 @@ I8275_DRAW_CHARACTER_MEMBER(wicat_state::wicat_display_pixels) } } -static mm58274c_interface wicat_rtc_intf = -{ - 0, // 12 hour - 1 // first day -}; - AM9517A_INTERFACE( wicat_videodma_intf ) { DEVCB_DRIVER_LINE_MEMBER(wicat_state,dma_hrq_w), // m_out_hreq_cb; @@ -776,7 +770,9 @@ static MACHINE_CONFIG_START( wicat, wicat_state ) MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(wicat_state, via_b_w)) MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("maincpu", M68K_IRQ_1)) - MCFG_MM58274C_ADD("rtc",wicat_rtc_intf) // actually an MM58174AN, but should be compatible + MCFG_DEVICE_ADD("rtc", MM58274C, 0) // actually an MM58174AN, but should be compatible + MCFG_MM58274C_MODE24(0) // 12 hour + MCFG_MM58274C_DAY1(1) // monday // internal terminal MCFG_DEVICE_ADD("uart0", MC2661, XTAL_5_0688MHz) // connected to terminal board