trunk/src/emu/machine/rp5c15.c
| r28709 | r28710 | |
| 130 | 130 | { |
| 131 | 131 | if (LOG) logerror("RP5C15 '%s' Alarm %u\n", tag(), alarm); |
| 132 | 132 | |
| 133 | | m_out_alarm_func(alarm); |
| 133 | m_out_alarm_cb(alarm); |
| 134 | 134 | m_alarm = alarm; |
| 135 | 135 | } |
| 136 | 136 | } |
| r28709 | r28710 | |
| 188 | 188 | rp5c15_device::rp5c15_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 189 | 189 | : device_t(mconfig, RP5C15, "RP5C15", tag, owner, clock, "rp5c15", __FILE__), |
| 190 | 190 | device_rtc_interface(mconfig, *this), |
| 191 | m_out_alarm_cb(*this), |
| 192 | m_out_clkout_cb(*this), |
| 191 | 193 | m_alarm(1), |
| 192 | 194 | m_alarm_on(1), |
| 193 | 195 | m_1hz(1), |
| r28709 | r28710 | |
| 196 | 198 | { |
| 197 | 199 | } |
| 198 | 200 | |
| 199 | | |
| 200 | 201 | //------------------------------------------------- |
| 201 | | // device_config_complete - perform any |
| 202 | | // operations now that the configuration is |
| 203 | | // complete |
| 204 | | //------------------------------------------------- |
| 205 | | |
| 206 | | void rp5c15_device::device_config_complete() |
| 207 | | { |
| 208 | | // inherit a copy of the static data |
| 209 | | const rp5c15_interface *intf = reinterpret_cast<const rp5c15_interface *>(static_config()); |
| 210 | | if (intf != NULL) |
| 211 | | *static_cast<rp5c15_interface *>(this) = *intf; |
| 212 | | |
| 213 | | // or initialize to defaults if none provided |
| 214 | | else |
| 215 | | { |
| 216 | | memset(&m_out_alarm_cb, 0, sizeof(m_out_alarm_cb)); |
| 217 | | memset(&m_out_clkout_cb, 0, sizeof(m_out_clkout_cb)); |
| 218 | | } |
| 219 | | } |
| 220 | | |
| 221 | | |
| 222 | | //------------------------------------------------- |
| 223 | 202 | // device_start - device-specific startup |
| 224 | 203 | //------------------------------------------------- |
| 225 | 204 | |
| 226 | 205 | void rp5c15_device::device_start() |
| 227 | 206 | { |
| 228 | 207 | // resolve callbacks |
| 229 | | m_out_alarm_func.resolve(m_out_alarm_cb, *this); |
| 230 | | m_out_clkout_func.resolve(m_out_clkout_cb, *this); |
| 208 | m_out_alarm_cb.resolve_safe(); |
| 209 | m_out_clkout_cb.resolve_safe(); |
| 231 | 210 | |
| 232 | 211 | // allocate timers |
| 233 | 212 | m_clock_timer = timer_alloc(TIMER_CLOCK); |
| r28709 | r28710 | |
| 296 | 275 | |
| 297 | 276 | case TIMER_CLKOUT: |
| 298 | 277 | m_clkout = !m_clkout; |
| 299 | | m_out_clkout_func(m_clkout); |
| 278 | m_out_clkout_cb(m_clkout); |
| 300 | 279 | break; |
| 301 | 280 | } |
| 302 | 281 | } |
trunk/src/emu/machine/rp5c15.h
| r28709 | r28710 | |
| 34 | 34 | // INTERFACE CONFIGURATION MACROS |
| 35 | 35 | //************************************************************************** |
| 36 | 36 | |
| 37 | | #define MCFG_RP5C15_ADD(_tag, _clock, _config) \ |
| 38 | | MCFG_DEVICE_ADD((_tag), RP5C15, _clock) \ |
| 39 | | MCFG_DEVICE_CONFIG(_config) |
| 37 | #define MCFG_RP5C15_OUT_ALARM_CB(_devcb) \ |
| 38 | devcb = &rp5c15_device::set_out_alarm_callback(*device, DEVCB2_##_devcb); |
| 40 | 39 | |
| 40 | #define MCFG_RP5C15_OUT_CLKOUT_CB(_devcb) \ |
| 41 | devcb = &rp5c15_device::set_out_clkout_callback(*device, DEVCB2_##_devcb); |
| 41 | 42 | |
| 42 | | #define RP5C15_INTERFACE(name) \ |
| 43 | | const rp5c15_interface (name) = |
| 44 | | |
| 45 | | |
| 46 | | |
| 47 | 43 | //************************************************************************** |
| 48 | 44 | // TYPE DEFINITIONS |
| 49 | 45 | //************************************************************************** |
| 50 | 46 | |
| 51 | | // ======================> rp5c15_interface |
| 52 | | |
| 53 | | struct rp5c15_interface |
| 54 | | { |
| 55 | | devcb_write_line m_out_alarm_cb; |
| 56 | | devcb_write_line m_out_clkout_cb; |
| 57 | | }; |
| 58 | | |
| 59 | | |
| 60 | | |
| 61 | 47 | // ======================> rp5c15_device |
| 62 | 48 | |
| 63 | 49 | class rp5c15_device : public device_t, |
| 64 | | public device_rtc_interface, |
| 65 | | public rp5c15_interface |
| 50 | public device_rtc_interface |
| 66 | 51 | { |
| 67 | 52 | public: |
| 68 | 53 | // construction/destruction |
| 69 | 54 | rp5c15_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 55 | |
| 56 | template<class _Object> static devcb2_base &set_out_alarm_callback(device_t &device, _Object object) { return downcast<rp5c15_device &>(device).m_out_alarm_cb.set_callback(object); } |
| 57 | template<class _Object> static devcb2_base &set_out_clkout_callback(device_t &device, _Object object) { return downcast<rp5c15_device &>(device).m_out_clkout_cb.set_callback(object); } |
| 70 | 58 | |
| 71 | 59 | DECLARE_READ8_MEMBER( read ); |
| 72 | 60 | DECLARE_WRITE8_MEMBER( write ); |
| r28709 | r28710 | |
| 74 | 62 | |
| 75 | 63 | protected: |
| 76 | 64 | // device-level overrides |
| 77 | | virtual void device_config_complete(); |
| 78 | 65 | virtual void device_start(); |
| 79 | 66 | virtual void device_reset(); |
| 80 | 67 | virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); |
| r28709 | r28710 | |
| 93 | 80 | static const device_timer_id TIMER_16HZ = 1; |
| 94 | 81 | static const device_timer_id TIMER_CLKOUT = 2; |
| 95 | 82 | |
| 96 | | devcb_resolved_write_line m_out_alarm_func; |
| 97 | | devcb_resolved_write_line m_out_clkout_func; |
| 83 | devcb2_write_line m_out_alarm_cb; |
| 84 | devcb2_write_line m_out_clkout_cb; |
| 98 | 85 | |
| 99 | 86 | UINT8 m_reg[2][13]; // clock registers |
| 100 | 87 | UINT8 m_ram[13]; // RAM |
trunk/src/mess/drivers/atarist.c
| r28709 | r28710 | |
| 1876 | 1876 | } |
| 1877 | 1877 | |
| 1878 | 1878 | |
| 1879 | | //------------------------------------------------- |
| 1880 | | // RP5C15_INTERFACE( rtc_intf ) |
| 1881 | | //------------------------------------------------- |
| 1882 | | |
| 1883 | | static RP5C15_INTERFACE( rtc_intf ) |
| 1884 | | { |
| 1885 | | DEVCB_NULL, |
| 1886 | | DEVCB_NULL |
| 1887 | | }; |
| 1888 | | |
| 1889 | | |
| 1890 | 1879 | //************************************************************************** |
| 1891 | 1880 | // MACHINE INITIALIZATION |
| 1892 | 1881 | //************************************************************************** |
| r28709 | r28710 | |
| 2216 | 2205 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) |
| 2217 | 2206 | |
| 2218 | 2207 | // devices |
| 2219 | | MCFG_RP5C15_ADD(RP5C15_TAG, XTAL_32_768kHz, rtc_intf) |
| 2208 | MCFG_DEVICE_ADD(RP5C15_TAG, RP5C15, XTAL_32_768kHz) |
| 2220 | 2209 | |
| 2221 | 2210 | MCFG_WD1772x_ADD(WD1772_TAG, Y2/4) |
| 2222 | 2211 | MCFG_WD_FDC_INTRQ_CALLBACK(DEVWRITELINE(MC68901_TAG, mc68901_device, i5_w)) MCFG_DEVCB_INVERT |
| r28709 | r28710 | |
| 2377 | 2366 | static MACHINE_CONFIG_DERIVED( megaste, ste ) |
| 2378 | 2367 | MCFG_CPU_MODIFY(M68000_TAG) |
| 2379 | 2368 | MCFG_CPU_PROGRAM_MAP(megaste_map) |
| 2380 | | MCFG_RP5C15_ADD(RP5C15_TAG, XTAL_32_768kHz, rtc_intf) |
| 2369 | MCFG_DEVICE_ADD(RP5C15_TAG, RP5C15, XTAL_32_768kHz) |
| 2381 | 2370 | MCFG_DEVICE_ADD(Z8530_TAG, SCC8530, Y2/4) |
| 2382 | 2371 | |
| 2383 | 2372 | /* internal ram */ |
trunk/src/mess/drivers/mz2500.c
| r28709 | r28710 | |
| 2090 | 2090 | // m_maincpu->set_input_line_and_vector(0, HOLD_LINE,drvm_irq_vector[3]); |
| 2091 | 2091 | } |
| 2092 | 2092 | |
| 2093 | | static RP5C15_INTERFACE( rtc_intf ) |
| 2094 | | { |
| 2095 | | DEVCB_DRIVER_LINE_MEMBER(mz2500_state,mz2500_rtc_alarm_irq), |
| 2096 | | DEVCB_NULL |
| 2097 | | }; |
| 2098 | | |
| 2099 | 2093 | static Z80SIO_INTERFACE( mz2500_sio_intf ) |
| 2100 | 2094 | { |
| 2101 | 2095 | 0, 0, 0, 0, |
| r28709 | r28710 | |
| 2131 | 2125 | MCFG_I8255_ADD( "i8255_0", ppi8255_intf ) |
| 2132 | 2126 | MCFG_Z80PIO_ADD( "z80pio_1", 6000000, mz2500_pio1_intf ) |
| 2133 | 2127 | MCFG_Z80SIO0_ADD( "z80sio", 6000000, mz2500_sio_intf ) |
| 2134 | | MCFG_RP5C15_ADD(RP5C15_TAG, XTAL_32_768kHz, rtc_intf) |
| 2135 | | |
| 2128 | MCFG_DEVICE_ADD(RP5C15_TAG, RP5C15, XTAL_32_768kHz) |
| 2129 | MCFG_RP5C15_OUT_ALARM_CB(WRITELINE(mz2500_state, mz2500_rtc_alarm_irq)) |
| 2130 | |
| 2136 | 2131 | MCFG_DEVICE_ADD("pit", PIT8253, 0) |
| 2137 | 2132 | MCFG_PIT8253_CLK0(31250) |
| 2138 | 2133 | MCFG_PIT8253_OUT0_HANDLER(WRITELINE(mz2500_state, pit8253_clk0_irq)) |
trunk/src/mess/drivers/lcmate2.c
| r28709 | r28710 | |
| 221 | 221 | GFXDECODE_END |
| 222 | 222 | |
| 223 | 223 | |
| 224 | | static RP5C15_INTERFACE( rtc_intf ) |
| 225 | | { |
| 226 | | DEVCB_NULL, |
| 227 | | DEVCB_NULL |
| 228 | | }; |
| 229 | | |
| 230 | 224 | static MACHINE_CONFIG_START( lcmate2, lcmate2_state ) |
| 231 | 225 | /* basic machine hardware */ |
| 232 | 226 | MCFG_CPU_ADD("maincpu", Z80, XTAL_3_579545MHz) // confirmed |
| r28709 | r28710 | |
| 258 | 252 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) |
| 259 | 253 | |
| 260 | 254 | /* Devices */ |
| 261 | | MCFG_RP5C15_ADD("rtc", XTAL_32_768kHz, rtc_intf) |
| 255 | MCFG_DEVICE_ADD("rtc", RP5C15, XTAL_32_768kHz) |
| 262 | 256 | MACHINE_CONFIG_END |
| 263 | 257 | |
| 264 | 258 | /* ROM definition */ |
trunk/src/mess/drivers/x68k.c
| r28709 | r28710 | |
| 1444 | 1444 | OUTPUT_10BITS, |
| 1445 | 1445 | }; |
| 1446 | 1446 | |
| 1447 | | static RP5C15_INTERFACE( rtc_intf ) |
| 1448 | | { |
| 1449 | | DEVCB_DEVICE_LINE_MEMBER(MC68901_TAG, mc68901_device, i0_w), |
| 1450 | | DEVCB_NULL |
| 1451 | | }; |
| 1452 | | |
| 1453 | 1447 | static INPUT_PORTS_START( x68000 ) |
| 1454 | 1448 | PORT_START("ctrltype") |
| 1455 | 1449 | PORT_CONFNAME(0x0f, 0x00, "Joystick Port 1") |
| r28709 | r28710 | |
| 1925 | 1919 | |
| 1926 | 1920 | MCFG_DEVICE_ADD( "scc", SCC8530, 5000000 ) |
| 1927 | 1921 | |
| 1928 | | MCFG_RP5C15_ADD(RP5C15_TAG, XTAL_32_768kHz, rtc_intf) |
| 1922 | MCFG_DEVICE_ADD(RP5C15_TAG, RP5C15, XTAL_32_768kHz) |
| 1923 | MCFG_RP5C15_OUT_ALARM_CB(DEVWRITELINE(MC68901_TAG, mc68901_device, i0_w)) |
| 1929 | 1924 | |
| 1930 | 1925 | /* video hardware */ |
| 1931 | 1926 | MCFG_SCREEN_ADD("screen", RASTER) |