trunk/src/emu/video/hd44352.c
| r28758 | r28759 | |
| 35 | 35 | //------------------------------------------------- |
| 36 | 36 | |
| 37 | 37 | hd44352_device::hd44352_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock): |
| 38 | | device_t(mconfig, HD44352, "hd44352", tag, owner, clock, "hd44352", __FILE__) |
| 38 | device_t(mconfig, HD44352, "hd44352", tag, owner, clock, "hd44352", __FILE__), |
| 39 | m_on_cb(*this) |
| 39 | 40 | { |
| 40 | 41 | } |
| 41 | 42 | |
| 42 | 43 | //------------------------------------------------- |
| 43 | | // device_config_complete - perform any |
| 44 | | // operations now that the configuration is |
| 45 | | // complete |
| 46 | | //------------------------------------------------- |
| 47 | | |
| 48 | | void hd44352_device::device_config_complete() |
| 49 | | { |
| 50 | | // inherit a copy of the static data |
| 51 | | const hd44352_interface *intf = reinterpret_cast<const hd44352_interface *>(static_config()); |
| 52 | | if (intf != NULL) |
| 53 | | *static_cast<hd44352_interface *>(this) = *intf; |
| 54 | | |
| 55 | | // or initialize to defaults if none provided |
| 56 | | else |
| 57 | | { |
| 58 | | memset(&m_on, 0, sizeof(m_on)); |
| 59 | | } |
| 60 | | } |
| 61 | | |
| 62 | | //------------------------------------------------- |
| 63 | 44 | // device_validity_check - perform validity checks |
| 64 | 45 | // on this device |
| 65 | 46 | //------------------------------------------------- |
| r28758 | r28759 | |
| 73 | 54 | |
| 74 | 55 | void hd44352_device::device_start() |
| 75 | 56 | { |
| 76 | | m_on.resolve(m_on_cb, *this); |
| 57 | m_on_cb.resolve_safe(); |
| 77 | 58 | |
| 78 | 59 | m_on_timer = timer_alloc(ON_TIMER); |
| 79 | 60 | m_on_timer->adjust(attotime::from_hz(m_clock/16384), 0, attotime::from_hz(m_clock/16384)); |
| r28758 | r28759 | |
| 140 | 121 | case ON_TIMER: |
| 141 | 122 | if (m_control_lines & 0x40) |
| 142 | 123 | { |
| 143 | | m_on(ASSERT_LINE); |
| 144 | | m_on(CLEAR_LINE); |
| 124 | m_on_cb(ASSERT_LINE); |
| 125 | m_on_cb(CLEAR_LINE); |
| 145 | 126 | } |
| 146 | 127 | break; |
| 147 | 128 | } |
trunk/src/emu/video/hd44352.h
| r28758 | r28759 | |
| 12 | 12 | #define __hd44352_H__ |
| 13 | 13 | |
| 14 | 14 | |
| 15 | | #define MCFG_HD44352_ADD( _tag, _clock, _config) \ |
| 16 | | MCFG_DEVICE_ADD( _tag, HD44352, _clock ) \ |
| 17 | | MCFG_DEVICE_CONFIG( _config ) |
| 15 | #define MCFG_HD44352_ON_CB(_devcb) \ |
| 16 | devcb = &hd44352_device::set_on_callback(*device, DEVCB2_##_devcb); |
| 18 | 17 | |
| 18 | |
| 19 | 19 | //************************************************************************** |
| 20 | 20 | // TYPE DEFINITIONS |
| 21 | 21 | //************************************************************************** |
| 22 | 22 | |
| 23 | | |
| 24 | | // ======================> hd44352_interface |
| 25 | | |
| 26 | | struct hd44352_interface |
| 27 | | { |
| 28 | | devcb_write_line m_on_cb; // ON line |
| 29 | | }; |
| 30 | | |
| 31 | 23 | // ======================> hd44352_device |
| 32 | 24 | |
| 33 | 25 | class hd44352_device : |
| 34 | | public device_t, |
| 35 | | public hd44352_interface |
| 26 | public device_t |
| 36 | 27 | { |
| 37 | 28 | public: |
| 38 | 29 | // construction/destruction |
| 39 | 30 | hd44352_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 40 | 31 | |
| 32 | template<class _Object> static devcb2_base &set_on_callback(device_t &device, _Object object) { return downcast<hd44352_device &>(device).m_on_cb.set_callback(object); } |
| 33 | |
| 41 | 34 | // device interface |
| 42 | 35 | UINT8 data_read(); |
| 43 | 36 | void data_write(UINT8 data); |
| r28758 | r28759 | |
| 50 | 43 | virtual void device_start(); |
| 51 | 44 | virtual void device_reset(); |
| 52 | 45 | virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); |
| 53 | | virtual void device_config_complete(); |
| 54 | 46 | virtual void device_validity_check(validity_checker &valid) const; |
| 55 | 47 | |
| 56 | 48 | private: |
| r28758 | r28759 | |
| 80 | 72 | UINT8 m_cursor_y; |
| 81 | 73 | UINT8 m_cursor_lcd; |
| 82 | 74 | |
| 83 | | devcb_resolved_write_line m_on; // ON line callback |
| 75 | devcb2_write_line m_on_cb; // ON line callback |
| 84 | 76 | }; |
| 85 | 77 | |
| 86 | 78 | // device type definition |
trunk/src/mess/drivers/pb1000.c
| r28758 | r28759 | |
| 500 | 500 | m_kb_timer->adjust(attotime::from_hz(192), 0, attotime::from_hz(192)); |
| 501 | 501 | } |
| 502 | 502 | |
| 503 | | static const hd44352_interface hd44352_pb1000_conf = |
| 504 | | { |
| 505 | | DEVCB_CPU_INPUT_LINE("maincpu", HD61700_ON_INT) |
| 506 | | }; |
| 507 | | |
| 508 | 503 | static MACHINE_CONFIG_START( pb1000, pb1000_state ) |
| 509 | 504 | /* basic machine hardware */ |
| 510 | 505 | MCFG_CPU_ADD("maincpu", HD61700, 910000) |
| r28758 | r28759 | |
| 525 | 520 | MCFG_PALETTE_INIT_OWNER(pb1000_state, pb1000) |
| 526 | 521 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", pb1000 ) |
| 527 | 522 | |
| 528 | | MCFG_HD44352_ADD("hd44352", 910000, hd44352_pb1000_conf) |
| 523 | MCFG_DEVICE_ADD("hd44352", HD44352, 910000) |
| 524 | MCFG_HD44352_ON_CB(INPUTLINE("maincpu", HD61700_ON_INT)) |
| 529 | 525 | |
| 530 | 526 | MCFG_NVRAM_ADD_0FILL("nvram1") |
| 531 | 527 | MCFG_NVRAM_ADD_0FILL("nvram2") |