trunk/src/mess/includes/ob68k1a.h
| r21280 | r21281 | |
| 3 | 3 | #ifndef __OB68K1A__ |
| 4 | 4 | #define __OB68K1A__ |
| 5 | 5 | |
| 6 | #include "emu.h" |
| 7 | #include "cpu/m68000/m68000.h" |
| 8 | #include "machine/6821pia.h" |
| 9 | #include "machine/6840ptm.h" |
| 10 | #include "machine/6850acia.h" |
| 11 | #include "machine/com8116.h" |
| 6 | 12 | #include "machine/ram.h" |
| 13 | #include "machine/serial.h" |
| 7 | 14 | |
| 8 | 15 | #define MC68000L10_TAG "u50" |
| 9 | 16 | #define MC6821_0_TAG "u32" |
| r21280 | r21281 | |
| 12 | 19 | #define MC6850_0_TAG "u34" |
| 13 | 20 | #define MC6850_1_TAG "u26" |
| 14 | 21 | #define COM8116_TAG "u56" |
| 22 | #define RS232_A_TAG "rs232a" |
| 23 | #define RS232_B_TAG "rs232b" |
| 15 | 24 | |
| 16 | 25 | class ob68k1a_state : public driver_device |
| 17 | 26 | { |
| r21280 | r21281 | |
| 21 | 30 | m_maincpu(*this, MC68000L10_TAG), |
| 22 | 31 | m_dbrg(*this, COM8116_TAG), |
| 23 | 32 | m_acia0(*this, MC6850_0_TAG), |
| 33 | m_acia1(*this, MC6850_1_TAG), |
| 24 | 34 | m_pia0(*this, MC6821_0_TAG), |
| 25 | 35 | m_pia1(*this, MC6821_1_TAG), |
| 26 | | m_terminal(*this, TERMINAL_TAG), |
| 36 | m_rs232a(*this, RS232_A_TAG), |
| 37 | m_rs232b(*this, RS232_B_TAG), |
| 27 | 38 | m_ram(*this, RAM_TAG) |
| 28 | 39 | { } |
| 29 | 40 | |
| 30 | 41 | required_device<cpu_device> m_maincpu; |
| 31 | 42 | required_device<com8116_device> m_dbrg; |
| 32 | 43 | required_device<acia6850_device> m_acia0; |
| 44 | required_device<acia6850_device> m_acia1; |
| 33 | 45 | required_device<pia6821_device> m_pia0; |
| 34 | 46 | required_device<pia6821_device> m_pia1; |
| 35 | | required_device<serial_terminal_device> m_terminal; |
| 47 | required_device<rs232_port_device> m_rs232a; |
| 48 | required_device<rs232_port_device> m_rs232b; |
| 36 | 49 | required_device<ram_device> m_ram; |
| 37 | 50 | |
| 38 | 51 | virtual void machine_start(); |
| r21280 | r21281 | |
| 41 | 54 | DECLARE_WRITE8_MEMBER( com8116_w ); |
| 42 | 55 | DECLARE_READ8_MEMBER( pia_r ); |
| 43 | 56 | DECLARE_WRITE8_MEMBER( pia_w ); |
| 44 | | DECLARE_WRITE_LINE_MEMBER(rx_tx_0_w); |
| 45 | | DECLARE_WRITE_LINE_MEMBER(rx_tx_1_w); |
| 57 | DECLARE_WRITE_LINE_MEMBER( rx_tx_0_w ); |
| 58 | DECLARE_WRITE_LINE_MEMBER( rx_tx_1_w ); |
| 46 | 59 | }; |
| 47 | 60 | |
| 48 | 61 | #endif |
trunk/src/mess/drivers/ob68k1a.c
| r21280 | r21281 | |
| 59 | 59 | */ |
| 60 | 60 | |
| 61 | 61 | |
| 62 | | #include "emu.h" |
| 63 | | #include "cpu/m68000/m68000.h" |
| 64 | | #include "machine/ram.h" |
| 65 | | #include "machine/6821pia.h" |
| 66 | | #include "machine/6840ptm.h" |
| 67 | | #include "machine/6850acia.h" |
| 68 | | #include "machine/com8116.h" |
| 69 | | #include "machine/terminal.h" |
| 70 | 62 | #include "includes/ob68k1a.h" |
| 71 | 63 | |
| 72 | 64 | |
| r21280 | r21281 | |
| 82 | 74 | WRITE8_MEMBER( ob68k1a_state::com8116_w ) |
| 83 | 75 | { |
| 84 | 76 | m_dbrg->stt_w(space, 0, data & 0x0f); |
| 85 | | // m_dbrg->str_w(space, 0, data >> 4); // HACK for terminal |
| 77 | m_dbrg->str_w(space, 0, data >> 4); |
| 86 | 78 | } |
| 87 | 79 | |
| 88 | 80 | |
| r21280 | r21281 | |
| 221 | 213 | { |
| 222 | 214 | 9600*16, // HACK for terminal |
| 223 | 215 | 9600*16, // HACK for terminal |
| 224 | | DEVCB_DEVICE_LINE_MEMBER(TERMINAL_TAG, serial_terminal_device, tx_r), |
| 225 | | DEVCB_DEVICE_LINE_MEMBER(TERMINAL_TAG, serial_terminal_device, rx_w), |
| 216 | DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, rx), |
| 217 | DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, tx), |
| 226 | 218 | DEVCB_LINE_GND, // HACK for terminal |
| 227 | | DEVCB_NULL, |
| 219 | DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, rts_w), |
| 228 | 220 | DEVCB_LINE_GND, // HACK for terminal |
| 229 | 221 | DEVCB_NULL |
| 230 | 222 | }; |
| r21280 | r21281 | |
| 238 | 230 | { |
| 239 | 231 | 0, |
| 240 | 232 | 0, |
| 241 | | DEVCB_LINE_VCC, |
| 233 | DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, rx), |
| 234 | DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, tx), |
| 235 | DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, cts_r), |
| 236 | DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, rts_w), |
| 237 | DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, dcd_r), |
| 242 | 238 | DEVCB_NULL, |
| 243 | | DEVCB_NULL, |
| 244 | | DEVCB_NULL, |
| 245 | | DEVCB_NULL, |
| 246 | | DEVCB_NULL, |
| 247 | 239 | }; |
| 248 | 240 | |
| 249 | 241 | |
| r21280 | r21281 | |
| 251 | 243 | // COM8116_INTERFACE( dbrg_intf ) |
| 252 | 244 | //------------------------------------------------- |
| 253 | 245 | |
| 254 | | WRITE_LINE_MEMBER(ob68k1a_state::rx_tx_0_w) |
| 246 | WRITE_LINE_MEMBER( ob68k1a_state::rx_tx_0_w ) |
| 255 | 247 | { |
| 256 | | device_t *device = machine().device(MC6850_0_TAG); |
| 257 | | downcast<acia6850_device *>(device)->rx_clock_in(); |
| 258 | | downcast<acia6850_device *>(device)->tx_clock_in(); |
| 248 | m_acia0->rx_clock_in(); |
| 249 | m_acia0->tx_clock_in(); |
| 259 | 250 | } |
| 260 | 251 | |
| 261 | | WRITE_LINE_MEMBER(ob68k1a_state::rx_tx_1_w) |
| 252 | WRITE_LINE_MEMBER( ob68k1a_state::rx_tx_1_w ) |
| 262 | 253 | { |
| 263 | | device_t *device = machine().device(MC6850_1_TAG); |
| 264 | | downcast<acia6850_device *>(device)->rx_clock_in(); |
| 265 | | downcast<acia6850_device *>(device)->tx_clock_in(); |
| 254 | m_acia1->rx_clock_in(); |
| 255 | m_acia1->tx_clock_in(); |
| 266 | 256 | } |
| 267 | 257 | |
| 268 | 258 | static COM8116_INTERFACE( dbrg_intf ) |
| 269 | 259 | { |
| 270 | 260 | DEVCB_NULL, /* fX/4 output */ |
| 271 | | DEVCB_DRIVER_LINE_MEMBER(ob68k1a_state,rx_tx_0_w), |
| 272 | | DEVCB_DRIVER_LINE_MEMBER(ob68k1a_state,rx_tx_1_w), |
| 261 | DEVCB_DRIVER_LINE_MEMBER(ob68k1a_state, rx_tx_0_w), |
| 262 | DEVCB_DRIVER_LINE_MEMBER(ob68k1a_state, rx_tx_1_w), |
| 273 | 263 | { 101376, 67584, 46080, 37686, 33792, 16896, 8448, 4224, 2816, 2534, 2112, 1408, 1056, 704, 528, 264 }, /* receiver divisor ROM */ |
| 274 | 264 | { 101376, 67584, 46080, 37686, 33792, 16896, 8448, 4224, 2816, 2534, 2112, 1408, 1056, 704, 528, 264 }, /* transmitter divisor ROM */ |
| 275 | 265 | }; |
| 276 | 266 | |
| 277 | 267 | |
| 278 | 268 | //------------------------------------------------- |
| 279 | | // GENERIC_TERMINAL_INTERFACE( terminal_intf ) |
| 269 | // rs232_port_interface rs232a_intf |
| 280 | 270 | //------------------------------------------------- |
| 281 | 271 | |
| 282 | | static serial_terminal_interface terminal_intf = |
| 272 | static const rs232_port_interface rs232a_intf = |
| 283 | 273 | { |
| 274 | DEVCB_NULL, |
| 275 | DEVCB_NULL, |
| 276 | DEVCB_NULL, |
| 277 | DEVCB_NULL, |
| 284 | 278 | DEVCB_NULL |
| 285 | 279 | }; |
| 286 | 280 | |
| 287 | 281 | |
| 282 | //------------------------------------------------- |
| 283 | // rs232_port_interface rs232b_intf |
| 284 | //------------------------------------------------- |
| 288 | 285 | |
| 286 | static const rs232_port_interface rs232b_intf = |
| 287 | { |
| 288 | DEVCB_NULL, |
| 289 | DEVCB_NULL, |
| 290 | DEVCB_NULL, |
| 291 | DEVCB_NULL, |
| 292 | DEVCB_NULL |
| 293 | }; |
| 294 | |
| 295 | |
| 296 | |
| 289 | 297 | //************************************************************************** |
| 290 | 298 | // MACHINE INITIALIZATION |
| 291 | 299 | //************************************************************************** |
| r21280 | r21281 | |
| 317 | 325 | address_space &program = m_maincpu->space(AS_PROGRAM); |
| 318 | 326 | |
| 319 | 327 | // initialize COM8116 |
| 320 | | // m_dbrg->stt_w(program, 0, 0x01); |
| 321 | | // m_dbrg->str_w(program, 0, 0x01); |
| 328 | com8116_w(program, 0, 0xee); |
| 329 | // m_dbrg->stt_w(program, 0, 0x01); |
| 330 | // m_dbrg->str_w(program, 0, 0x01); |
| 322 | 331 | |
| 323 | 332 | // set reset vector |
| 324 | 333 | void *ram = program.get_write_ptr(0); |
| r21280 | r21281 | |
| 326 | 335 | |
| 327 | 336 | memcpy(ram, rom, 8); |
| 328 | 337 | |
| 329 | | machine().firstcpu->reset(); |
| 338 | m_maincpu->reset(); |
| 330 | 339 | } |
| 331 | 340 | |
| 332 | 341 | |
| r21280 | r21281 | |
| 351 | 360 | MCFG_ACIA6850_ADD(MC6850_0_TAG, acia0_intf) |
| 352 | 361 | MCFG_ACIA6850_ADD(MC6850_1_TAG, acia1_intf) |
| 353 | 362 | MCFG_COM8116_ADD(COM8116_TAG, XTAL_5_0688MHz, dbrg_intf) |
| 354 | | MCFG_SERIAL_TERMINAL_ADD(TERMINAL_TAG, terminal_intf, 9600) |
| 363 | MCFG_RS232_PORT_ADD(RS232_A_TAG, rs232a_intf, default_rs232_devices, "serial_terminal", NULL) |
| 364 | MCFG_RS232_PORT_ADD(RS232_B_TAG, rs232b_intf, default_rs232_devices, NULL, NULL) |
| 355 | 365 | |
| 356 | 366 | // internal ram |
| 357 | 367 | MCFG_RAM_ADD(RAM_TAG) |