trunk/src/mame/drivers/icecold.c
| r29450 | r29451 | |
| 327 | 327 | } |
| 328 | 328 | } |
| 329 | 329 | |
| 330 | | static I8279_INTERFACE( icecold_i8279_intf ) |
| 331 | | { |
| 332 | | DEVCB_DEVICE_LINE_MEMBER("pia0", pia6821_device, cb1_w), // irq |
| 333 | | DEVCB_DRIVER_MEMBER(icecold_state, scanlines_w), // scan SL lines |
| 334 | | DEVCB_DRIVER_MEMBER(icecold_state, digit_w), // display A&B |
| 335 | | DEVCB_NULL, // BD |
| 336 | | DEVCB_DRIVER_MEMBER(icecold_state, kbd_r), // kbd RL lines |
| 337 | | DEVCB_NULL, // Shift key |
| 338 | | DEVCB_NULL // Ctrl-Strobe line |
| 339 | | }; |
| 340 | | |
| 341 | 330 | static const ay8910_interface icecold_ay8910_0_intf = |
| 342 | 331 | { |
| 343 | 332 | AY8910_LEGACY_OUTPUT, |
| r29450 | r29451 | |
| 382 | 371 | MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("maincpu", m6809_device, irq_line)) |
| 383 | 372 | MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("maincpu", m6809_device, irq_line)) |
| 384 | 373 | |
| 385 | | MCFG_I8279_ADD("i8279", XTAL_6MHz/4, icecold_i8279_intf) |
| 386 | | |
| 374 | MCFG_DEVICE_ADD("i8279", I8279, XTAL_6MHz/4) |
| 375 | MCFG_I8279_OUT_IRQ_CB(DEVWRITELINE("pia0", pia6821_device, cb1_w)) // irq |
| 376 | MCFG_I8279_OUT_SL_CB(WRITE8(icecold_state, scanlines_w)) // scan SL lines |
| 377 | MCFG_I8279_OUT_DISP_CB(WRITE8(icecold_state, digit_w)) // display A&B |
| 378 | MCFG_I8279_IN_RL_CB(READ8(icecold_state, kbd_r)) // kbd RL lines |
| 379 | |
| 387 | 380 | // 30Hz signal from CH-C of ay0 |
| 388 | 381 | MCFG_TIMER_DRIVER_ADD_PERIODIC("sint_timer", icecold_state, icecold_sint_timer, attotime::from_hz(30)) |
| 389 | 382 | |
trunk/src/mame/drivers/turbo.c
| r29450 | r29451 | |
| 454 | 454 | output_set_digit_value(m_i8279_scanlines * 2 + 1, ls48_map[(data>>4) & 0x0f]); |
| 455 | 455 | } |
| 456 | 456 | |
| 457 | | |
| 458 | | static I8279_INTERFACE( turbo_i8279_intf ) |
| 459 | | { |
| 460 | | DEVCB_NULL, // irq |
| 461 | | DEVCB_DRIVER_MEMBER(turbo_state, scanlines_w), // scan SL lines |
| 462 | | DEVCB_DRIVER_MEMBER(turbo_state, digit_w), // display A&B |
| 463 | | DEVCB_NULL, // BD |
| 464 | | DEVCB_INPUT_PORT("DSW1"), // kbd RL lines |
| 465 | | DEVCB_NULL, // Shift key |
| 466 | | DEVCB_NULL // Ctrl-Strobe line |
| 467 | | }; |
| 468 | | |
| 469 | | |
| 470 | | |
| 471 | 457 | /************************************* |
| 472 | 458 | * |
| 473 | 459 | * Misc Turbo inputs/outputs |
| r29450 | r29451 | |
| 936 | 922 | MCFG_I8255_ADD( "i8255_2", turbo_8255_intf_2 ) |
| 937 | 923 | MCFG_I8255_ADD( "i8255_3", turbo_8255_intf_3 ) |
| 938 | 924 | |
| 939 | | MCFG_I8279_ADD("i8279", MASTER_CLOCK/4, turbo_i8279_intf) // unknown clock |
| 940 | | |
| 925 | MCFG_DEVICE_ADD("i8279", I8279, MASTER_CLOCK/4) // unknown clock |
| 926 | MCFG_I8279_OUT_SL_CB(WRITE8(turbo_state, scanlines_w)) // scan SL lines |
| 927 | MCFG_I8279_OUT_DISP_CB(WRITE8(turbo_state, digit_w)) // display A&B |
| 928 | MCFG_I8279_IN_RL_CB(IOPORT("DSW1")) // kbd RL lines |
| 929 | |
| 941 | 930 | /* video hardware */ |
| 942 | 931 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", turbo) |
| 943 | 932 | MCFG_PALETTE_ADD("palette", 256) |
| r29450 | r29451 | |
| 966 | 955 | MCFG_I8255_ADD( "i8255_0", subroc3d_8255_intf_0 ) |
| 967 | 956 | MCFG_I8255_ADD( "i8255_1", subroc3d_8255_intf_1 ) |
| 968 | 957 | |
| 969 | | MCFG_I8279_ADD("i8279", MASTER_CLOCK/4, turbo_i8279_intf) // unknown clock |
| 958 | MCFG_DEVICE_ADD("i8279", I8279, MASTER_CLOCK/4) // unknown clock |
| 959 | MCFG_I8279_OUT_SL_CB(WRITE8(turbo_state, scanlines_w)) // scan SL lines |
| 960 | MCFG_I8279_OUT_DISP_CB(WRITE8(turbo_state, digit_w)) // display A&B |
| 961 | MCFG_I8279_IN_RL_CB(IOPORT("DSW1")) // kbd RL lines |
| 970 | 962 | |
| 971 | 963 | /* video hardware */ |
| 972 | 964 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", turbo) |
| r29450 | r29451 | |
| 1003 | 995 | MCFG_I8255_ADD( "i8255_0", buckrog_8255_intf_0 ) |
| 1004 | 996 | MCFG_I8255_ADD( "i8255_1", buckrog_8255_intf_1 ) |
| 1005 | 997 | |
| 1006 | | MCFG_I8279_ADD("i8279", MASTER_CLOCK/4, turbo_i8279_intf) // unknown clock |
| 998 | MCFG_DEVICE_ADD("i8279", I8279, MASTER_CLOCK/4) // unknown clock |
| 999 | MCFG_I8279_OUT_SL_CB(WRITE8(turbo_state, scanlines_w)) // scan SL lines |
| 1000 | MCFG_I8279_OUT_DISP_CB(WRITE8(turbo_state, digit_w)) // display A&B |
| 1001 | MCFG_I8279_IN_RL_CB(IOPORT("DSW1")) // kbd RL lines |
| 1007 | 1002 | |
| 1008 | 1003 | /* video hardware */ |
| 1009 | 1004 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", turbo) |
trunk/src/emu/machine/i8279.c
| r29450 | r29451 | |
| 88 | 88 | //------------------------------------------------- |
| 89 | 89 | |
| 90 | 90 | i8279_device::i8279_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 91 | | : device_t(mconfig, I8279, "8279 KDC", tag, owner, clock, "i8279", __FILE__) |
| 91 | : device_t(mconfig, I8279, "8279 KDC", tag, owner, clock, "i8279", __FILE__), |
| 92 | m_out_irq_cb(*this), |
| 93 | m_out_sl_cb(*this), |
| 94 | m_out_disp_cb(*this), |
| 95 | m_out_bd_cb(*this), |
| 96 | m_in_rl_cb(*this), |
| 97 | m_in_shift_cb(*this), |
| 98 | m_in_ctrl_cb(*this) |
| 92 | 99 | { |
| 93 | 100 | } |
| 94 | 101 | |
| 95 | 102 | //------------------------------------------------- |
| 96 | | // device_config_complete - perform any |
| 97 | | // operations now that the configuration is |
| 98 | | // complete |
| 99 | | //------------------------------------------------- |
| 100 | | |
| 101 | | void i8279_device::device_config_complete() |
| 102 | | { |
| 103 | | // inherit a copy of the static data |
| 104 | | const i8279_interface *intf = reinterpret_cast<const i8279_interface *>(static_config()); |
| 105 | | if (intf != NULL) |
| 106 | | { |
| 107 | | *static_cast<i8279_interface *>(this) = *intf; |
| 108 | | } |
| 109 | | |
| 110 | | // or initialize to defaults if none provided |
| 111 | | else |
| 112 | | { |
| 113 | | memset(&m_out_irq_cb, 0, sizeof(m_out_irq_cb)); |
| 114 | | memset(&m_out_sl_cb, 0, sizeof(m_out_sl_cb)); |
| 115 | | memset(&m_out_disp_cb, 0, sizeof(m_out_disp_cb)); |
| 116 | | memset(&m_out_bd_cb, 0, sizeof(m_out_bd_cb)); |
| 117 | | memset(&m_in_rl_cb, 0, sizeof(m_in_rl_cb)); |
| 118 | | memset(&m_in_shift_cb, 0, sizeof(m_in_shift_cb)); |
| 119 | | memset(&m_in_ctrl_cb, 0, sizeof(m_in_ctrl_cb)); |
| 120 | | } |
| 121 | | } |
| 122 | | |
| 123 | | |
| 124 | | //------------------------------------------------- |
| 125 | 103 | // device_start - device-specific startup |
| 126 | 104 | //------------------------------------------------- |
| 127 | 105 | |
| 128 | 106 | void i8279_device::device_start() |
| 129 | 107 | { |
| 130 | 108 | /* resolve callbacks */ |
| 131 | | m_out_irq_func.resolve(m_out_irq_cb, *this); |
| 132 | | m_out_sl_func.resolve(m_out_sl_cb, *this); |
| 133 | | m_out_disp_func.resolve(m_out_disp_cb, *this); |
| 134 | | m_out_bd_func.resolve(m_out_bd_cb, *this); |
| 135 | | m_in_rl_func.resolve(m_in_rl_cb, *this); |
| 136 | | m_in_shift_func.resolve(m_in_shift_cb, *this); |
| 137 | | m_in_ctrl_func.resolve(m_in_ctrl_cb, *this); |
| 109 | m_out_irq_cb.resolve(); |
| 110 | m_out_sl_cb.resolve(); |
| 111 | m_out_disp_cb.resolve(); |
| 112 | m_out_bd_cb.resolve(); |
| 113 | m_in_rl_cb.resolve(); |
| 114 | m_in_shift_cb.resolve(); |
| 115 | m_in_ctrl_cb.resolve(); |
| 138 | 116 | m_clock = clock(); |
| 139 | | m_timer = machine().scheduler().timer_alloc(FUNC(timerproc_callback), (void *)this); |
| 117 | m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(i8279_device::timerproc_callback), this)); |
| 140 | 118 | } |
| 141 | 119 | |
| 142 | 120 | |
| r29450 | r29451 | |
| 218 | 196 | |
| 219 | 197 | void i8279_device::set_irq(bool state) |
| 220 | 198 | { |
| 221 | | if ( !m_out_irq_func.isnull() ) |
| 222 | | m_out_irq_func( state ); |
| 199 | if ( !m_out_irq_cb.isnull() ) |
| 200 | m_out_irq_cb( state ); |
| 223 | 201 | } |
| 224 | 202 | |
| 225 | 203 | |
| r29450 | r29451 | |
| 267 | 245 | } |
| 268 | 246 | |
| 269 | 247 | |
| 270 | | TIMER_CALLBACK( i8279_device::timerproc_callback ) |
| 248 | TIMER_CALLBACK_MEMBER( i8279_device::timerproc_callback ) |
| 271 | 249 | { |
| 272 | | reinterpret_cast<i8279_device*>(ptr)->timer_mainloop(); |
| 250 | timer_mainloop(); |
| 273 | 251 | } |
| 274 | 252 | |
| 275 | 253 | |
| r29450 | r29451 | |
| 295 | 273 | // type 3 = strobed |
| 296 | 274 | |
| 297 | 275 | // Get shift keys |
| 298 | | if ( !m_in_shift_func.isnull() ) |
| 299 | | shift_key = m_in_shift_func(); |
| 276 | if ( !m_in_shift_cb.isnull() ) |
| 277 | shift_key = m_in_shift_cb(); |
| 300 | 278 | |
| 301 | | if ( !m_in_ctrl_func.isnull() ) |
| 302 | | ctrl_key = m_in_ctrl_func(); |
| 279 | if ( !m_in_ctrl_cb.isnull() ) |
| 280 | ctrl_key = m_in_ctrl_cb(); |
| 303 | 281 | |
| 304 | 282 | if (ctrl_key && !m_ctrl_key) |
| 305 | 283 | strobe_pulse = 1; // low-to-high is a strobe |
| r29450 | r29451 | |
| 308 | 286 | |
| 309 | 287 | // Read a row of keys |
| 310 | 288 | |
| 311 | | if ( !m_in_rl_func.isnull() ) |
| 289 | if ( !m_in_rl_cb.isnull() ) |
| 312 | 290 | { |
| 313 | | UINT8 rl = m_in_rl_func(0); |
| 291 | UINT8 rl = m_in_rl_cb(0); |
| 314 | 292 | |
| 315 | 293 | // see if key still down from last time |
| 316 | 294 | UINT16 key_down = (m_scanner << 8) | rl; |
| r29450 | r29451 | |
| 367 | 345 | |
| 368 | 346 | m_scanner &= scanner_mask; // 4-bit port |
| 369 | 347 | |
| 370 | | if ( !m_out_sl_func.isnull() ) |
| 371 | | m_out_sl_func(0, m_scanner); |
| 348 | if ( !m_out_sl_cb.isnull() ) |
| 349 | m_out_sl_cb((offs_t)0, m_scanner); |
| 372 | 350 | |
| 373 | 351 | // output a digit |
| 374 | 352 | |
| 375 | | if ( !m_out_disp_func.isnull() ) |
| 376 | | m_out_disp_func(0, m_d_ram[m_scanner] ); |
| 353 | if ( !m_out_disp_cb.isnull() ) |
| 354 | m_out_disp_cb((offs_t)0, m_d_ram[m_scanner] ); |
| 377 | 355 | } |
| 378 | 356 | |
| 379 | 357 | |
trunk/src/emu/machine/i8279.h
| r29450 | r29451 | |
| 44 | 44 | DEVICE CONFIGURATION MACROS |
| 45 | 45 | ***************************************************************************/ |
| 46 | 46 | |
| 47 | | #define MCFG_I8279_ADD(_tag, _clock, _config) \ |
| 48 | | MCFG_DEVICE_ADD(_tag, I8279, _clock) \ |
| 49 | | MCFG_DEVICE_CONFIG(_config) |
| 47 | #define MCFG_I8279_OUT_IRQ_CB(_devcb) \ |
| 48 | devcb = &i8279_device::set_out_irq_callback(*device, DEVCB2_##_devcb); |
| 50 | 49 | |
| 51 | | #define I8279_INTERFACE(_name) \ |
| 52 | | const i8279_interface (_name) = |
| 50 | #define MCFG_I8279_OUT_SL_CB(_devcb) \ |
| 51 | devcb = &i8279_device::set_out_sl_callback(*device, DEVCB2_##_devcb); |
| 53 | 52 | |
| 53 | #define MCFG_I8279_OUT_DISP_CB(_devcb) \ |
| 54 | devcb = &i8279_device::set_out_disp_callback(*device, DEVCB2_##_devcb); |
| 54 | 55 | |
| 55 | | /*************************************************************************** |
| 56 | | TYPE DEFINITIONS |
| 57 | | ***************************************************************************/ |
| 56 | #define MCFG_I8279_OUT_BD_CB(_devcb) \ |
| 57 | devcb = &i8279_device::set_out_bd_callback(*device, DEVCB2_##_devcb); |
| 58 | 58 | |
| 59 | #define MCFG_I8279_IN_RL_CB(_devcb) \ |
| 60 | devcb = &i8279_device::set_in_rl_callback(*device, DEVCB2_##_devcb); |
| 59 | 61 | |
| 60 | | // ======================> i8279_interface |
| 62 | #define MCFG_I8279_IN_SHIFT_CB(_devcb) \ |
| 63 | devcb = &i8279_device::set_in_shift_callback(*device, DEVCB2_##_devcb); |
| 61 | 64 | |
| 62 | | struct i8279_interface |
| 63 | | { |
| 64 | | devcb_write_line m_out_irq_cb; // IRQ |
| 65 | | devcb_write8 m_out_sl_cb; // Scanlines SL0-3 |
| 66 | | devcb_write8 m_out_disp_cb; // B0-3,A0-3 |
| 67 | | devcb_write_line m_out_bd_cb; // BD |
| 68 | | devcb_read8 m_in_rl_cb; // kbd readlines RL0-7 |
| 69 | | devcb_read_line m_in_shift_cb; // Shift key |
| 70 | | devcb_read_line m_in_ctrl_cb; // Ctrl-Strobe line |
| 71 | | }; |
| 65 | #define MCFG_I8279_IN_CTRL_CB(_devcb) \ |
| 66 | devcb = &i8279_device::set_in_ctrl_callback(*device, DEVCB2_##_devcb); |
| 72 | 67 | |
| 68 | /*************************************************************************** |
| 69 | TYPE DEFINITIONS |
| 70 | ***************************************************************************/ |
| 73 | 71 | |
| 74 | | |
| 75 | 72 | // ======================> i8279_device |
| 76 | 73 | |
| 77 | | class i8279_device : public device_t, public i8279_interface |
| 74 | class i8279_device : public device_t |
| 78 | 75 | { |
| 79 | 76 | public: |
| 80 | 77 | // construction/destruction |
| 81 | 78 | i8279_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 82 | 79 | |
| 80 | template<class _Object> static devcb2_base &set_out_irq_callback(device_t &device, _Object object) { return downcast<i8279_device &>(device).m_out_irq_cb.set_callback(object); } |
| 81 | template<class _Object> static devcb2_base &set_out_sl_callback(device_t &device, _Object object) { return downcast<i8279_device &>(device).m_out_sl_cb.set_callback(object); } |
| 82 | template<class _Object> static devcb2_base &set_out_disp_callback(device_t &device, _Object object) { return downcast<i8279_device &>(device).m_out_disp_cb.set_callback(object); } |
| 83 | template<class _Object> static devcb2_base &set_out_bd_callback(device_t &device, _Object object) { return downcast<i8279_device &>(device).m_out_bd_cb.set_callback(object); } |
| 84 | template<class _Object> static devcb2_base &set_in_rl_callback(device_t &device, _Object object) { return downcast<i8279_device &>(device).m_in_rl_cb.set_callback(object); } |
| 85 | template<class _Object> static devcb2_base &set_in_shift_callback(device_t &device, _Object object) { return downcast<i8279_device &>(device).m_in_shift_cb.set_callback(object); } |
| 86 | template<class _Object> static devcb2_base &set_in_ctrl_callback(device_t &device, _Object object) { return downcast<i8279_device &>(device).m_in_ctrl_cb.set_callback(object); } |
| 87 | |
| 83 | 88 | // read & write handlers |
| 84 | 89 | DECLARE_READ8_MEMBER(status_r); |
| 85 | 90 | DECLARE_READ8_MEMBER(data_r); |
| r29450 | r29451 | |
| 89 | 94 | |
| 90 | 95 | protected: |
| 91 | 96 | // device-level overrides |
| 92 | | virtual void device_config_complete(); |
| 93 | 97 | virtual void device_start(); |
| 94 | 98 | virtual void device_reset(); |
| 95 | 99 | virtual void device_post_load() { } |
| 96 | 100 | virtual void device_clock_changed() { } |
| 97 | 101 | |
| 98 | | static TIMER_CALLBACK( timerproc_callback ); |
| 102 | TIMER_CALLBACK_MEMBER( timerproc_callback ); |
| 99 | 103 | |
| 100 | 104 | private: |
| 101 | 105 | |
| r29450 | r29451 | |
| 107 | 111 | void set_irq(bool state); |
| 108 | 112 | void set_display_mode(UINT8 data); |
| 109 | 113 | |
| 110 | | devcb_resolved_write_line m_out_irq_func; |
| 111 | | devcb_resolved_write8 m_out_sl_func; |
| 112 | | devcb_resolved_write8 m_out_disp_func; |
| 113 | | devcb_resolved_write_line m_out_bd_func; |
| 114 | | devcb_resolved_read8 m_in_rl_func; |
| 115 | | devcb_resolved_read_line m_in_shift_func; |
| 116 | | devcb_resolved_read_line m_in_ctrl_func; |
| 114 | devcb2_write_line m_out_irq_cb; // IRQ |
| 115 | devcb2_write8 m_out_sl_cb; // Scanlines SL0-3 |
| 116 | devcb2_write8 m_out_disp_cb; // B0-3,A0-3 |
| 117 | devcb2_write_line m_out_bd_cb; // BD |
| 118 | devcb2_read8 m_in_rl_cb; // kbd readlines RL0-7 |
| 119 | devcb2_read_line m_in_shift_cb; // Shift key |
| 120 | devcb2_read_line m_in_ctrl_cb; // Ctrl-Strobe line |
| 117 | 121 | |
| 118 | 122 | emu_timer *m_timer; |
| 119 | 123 | |
trunk/src/mess/drivers/sdk86.c
| r29450 | r29451 | |
| 137 | 137 | m_usart->write_rxc(state); |
| 138 | 138 | } |
| 139 | 139 | |
| 140 | | static I8279_INTERFACE( sdk86_intf ) |
| 141 | | { |
| 142 | | DEVCB_NULL, // irq |
| 143 | | DEVCB_DRIVER_MEMBER(sdk86_state, scanlines_w), // scan SL lines |
| 144 | | DEVCB_DRIVER_MEMBER(sdk86_state, digit_w), // display A&B |
| 145 | | DEVCB_NULL, // BD |
| 146 | | DEVCB_DRIVER_MEMBER(sdk86_state, kbd_r), // kbd RL lines |
| 147 | | DEVCB_LINE_GND, // Shift key |
| 148 | | DEVCB_LINE_GND |
| 149 | | }; |
| 150 | | |
| 151 | 140 | static DEVICE_INPUT_DEFAULTS_START( terminal ) |
| 152 | 141 | DEVICE_INPUT_DEFAULTS( "TERM_TXBAUD", 0xff, 0x05 ) // 4800 |
| 153 | 142 | DEVICE_INPUT_DEFAULTS( "TERM_RXBAUD", 0xff, 0x05 ) // 4800 |
| r29450 | r29451 | |
| 180 | 169 | MCFG_DEVICE_ADD("usart_clock", CLOCK, 307200) |
| 181 | 170 | MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(sdk86_state, write_usart_clock)) |
| 182 | 171 | |
| 183 | | MCFG_I8279_ADD("i8279", 2500000, sdk86_intf) // based on divider |
| 172 | MCFG_DEVICE_ADD("i8279", I8279, 2500000) // based on divider |
| 173 | MCFG_I8279_OUT_SL_CB(WRITE8(sdk86_state, scanlines_w)) // scan SL lines |
| 174 | MCFG_I8279_OUT_DISP_CB(WRITE8(sdk86_state, digit_w)) // display A&B |
| 175 | MCFG_I8279_IN_RL_CB(READ8(sdk86_state, kbd_r)) // kbd RL lines |
| 176 | MCFG_I8279_IN_SHIFT_CB(GND) // Shift key |
| 177 | MCFG_I8279_IN_CTRL_CB(GND) |
| 184 | 178 | |
| 185 | 179 | MACHINE_CONFIG_END |
| 186 | 180 | |
trunk/src/mess/drivers/selz80.c
| r29450 | r29451 | |
| 153 | 153 | return data; |
| 154 | 154 | } |
| 155 | 155 | |
| 156 | | static I8279_INTERFACE( selz80_intf ) |
| 157 | | { |
| 158 | | DEVCB_NULL, // irq |
| 159 | | DEVCB_DRIVER_MEMBER(selz80_state, scanlines_w), // scan SL lines |
| 160 | | DEVCB_DRIVER_MEMBER(selz80_state, digit_w), // display A&B |
| 161 | | DEVCB_NULL, // BD |
| 162 | | DEVCB_DRIVER_MEMBER(selz80_state, kbd_r), // kbd RL lines |
| 163 | | DEVCB_LINE_VCC, // Shift key |
| 164 | | DEVCB_LINE_VCC |
| 165 | | }; |
| 166 | | |
| 167 | 156 | static MACHINE_CONFIG_START( selz80, selz80_state ) |
| 168 | 157 | /* basic machine hardware */ |
| 169 | 158 | MCFG_CPU_ADD("maincpu",Z80, XTAL_4MHz) |
| r29450 | r29451 | |
| 174 | 163 | MCFG_DEFAULT_LAYOUT(layout_selz80) |
| 175 | 164 | |
| 176 | 165 | /* Devices */ |
| 177 | | MCFG_I8279_ADD("i8279", 2500000, selz80_intf) // based on divider |
| 166 | MCFG_DEVICE_ADD("i8279", I8279, 2500000) // based on divider |
| 167 | MCFG_I8279_OUT_SL_CB(WRITE8(selz80_state, scanlines_w)) // scan SL lines |
| 168 | MCFG_I8279_OUT_DISP_CB(WRITE8(selz80_state, digit_w)) // display A&B |
| 169 | MCFG_I8279_IN_RL_CB(READ8(selz80_state, kbd_r)) // kbd RL lines |
| 170 | MCFG_I8279_IN_SHIFT_CB(VCC) // Shift key |
| 171 | MCFG_I8279_IN_CTRL_CB(VCC) |
| 178 | 172 | MACHINE_CONFIG_END |
| 179 | 173 | |
| 180 | 174 | static MACHINE_CONFIG_DERIVED( dagz80, selz80 ) |
trunk/src/mess/drivers/mmd1.c
| r29450 | r29451 | |
| 410 | 410 | return data; |
| 411 | 411 | } |
| 412 | 412 | |
| 413 | | |
| 414 | | static I8279_INTERFACE( mmd2_intf ) |
| 415 | | { |
| 416 | | DEVCB_NULL, // irq |
| 417 | | DEVCB_DRIVER_MEMBER(mmd1_state, mmd2_scanlines_w), // scan SL lines |
| 418 | | DEVCB_DRIVER_MEMBER(mmd1_state, mmd2_digit_w), // display A&B |
| 419 | | DEVCB_NULL, // BD |
| 420 | | DEVCB_DRIVER_MEMBER(mmd1_state, mmd2_kbd_r), // kbd RL lines |
| 421 | | DEVCB_LINE_VCC, // Shift key |
| 422 | | DEVCB_LINE_VCC |
| 423 | | }; |
| 424 | | |
| 425 | 413 | WRITE8_MEMBER( mmd1_state::mmd2_status_callback ) |
| 426 | 414 | { |
| 427 | 415 | // operate the HALT LED |
| r29450 | r29451 | |
| 513 | 501 | MCFG_DEFAULT_LAYOUT(layout_mmd2) |
| 514 | 502 | |
| 515 | 503 | /* Devices */ |
| 516 | | MCFG_I8279_ADD("i8279", 400000, mmd2_intf) // based on divider |
| 504 | MCFG_DEVICE_ADD("i8279", I8279, 400000) // based on divider |
| 505 | MCFG_I8279_OUT_SL_CB(WRITE8(mmd1_state, mmd2_scanlines_w)) // scan SL lines |
| 506 | MCFG_I8279_OUT_DISP_CB(WRITE8(mmd1_state, mmd2_digit_w)) // display A&B |
| 507 | MCFG_I8279_IN_RL_CB(READ8(mmd1_state, mmd2_kbd_r)) // kbd RL lines |
| 508 | MCFG_I8279_IN_SHIFT_CB(VCC) // Shift key |
| 509 | MCFG_I8279_IN_CTRL_CB(VCC) |
| 510 | |
| 517 | 511 | MACHINE_CONFIG_END |
| 518 | 512 | |
| 519 | 513 | /* ROM definition */ |
trunk/src/mess/drivers/sdk85.c
| r29450 | r29451 | |
| 114 | 114 | return data; |
| 115 | 115 | } |
| 116 | 116 | |
| 117 | | static I8279_INTERFACE( sdk85_intf ) |
| 118 | | { |
| 119 | | DEVCB_CPU_INPUT_LINE("maincpu", I8085_RST55_LINE), // irq |
| 120 | | DEVCB_DRIVER_MEMBER(sdk85_state, scanlines_w), // scan SL lines |
| 121 | | DEVCB_DRIVER_MEMBER(sdk85_state, digit_w), // display A&B |
| 122 | | DEVCB_NULL, // BD |
| 123 | | DEVCB_DRIVER_MEMBER(sdk85_state, kbd_r), // kbd RL lines |
| 124 | | DEVCB_LINE_VCC, // Shift key |
| 125 | | DEVCB_LINE_VCC |
| 126 | | }; |
| 127 | | |
| 128 | 117 | static MACHINE_CONFIG_START( sdk85, sdk85_state ) |
| 129 | 118 | /* basic machine hardware */ |
| 130 | 119 | MCFG_CPU_ADD("maincpu", I8085A, XTAL_2MHz) |
| r29450 | r29451 | |
| 135 | 124 | MCFG_DEFAULT_LAYOUT(layout_sdk85) |
| 136 | 125 | |
| 137 | 126 | /* Devices */ |
| 138 | | MCFG_I8279_ADD("i8279", 3100000, sdk85_intf) // based on divider |
| 127 | MCFG_DEVICE_ADD("i8279", I8279, 3100000) // based on divider |
| 128 | MCFG_I8279_OUT_IRQ_CB(INPUTLINE("maincpu", I8085_RST55_LINE)) // irq |
| 129 | MCFG_I8279_OUT_SL_CB(WRITE8(sdk85_state, scanlines_w)) // scan SL lines |
| 130 | MCFG_I8279_OUT_DISP_CB(WRITE8(sdk85_state, digit_w)) // display A&B |
| 131 | MCFG_I8279_IN_RL_CB(READ8(sdk85_state, kbd_r)) // kbd RL lines |
| 132 | MCFG_I8279_IN_SHIFT_CB(VCC) // Shift key |
| 133 | MCFG_I8279_IN_CTRL_CB(VCC) |
| 139 | 134 | MACHINE_CONFIG_END |
| 140 | 135 | |
| 141 | 136 | /* ROM definition */ |