trunk/src/emu/machine/com8116.c
| r23591 | r23592 | |
| 7 | 7 | |
| 8 | 8 | **********************************************************************/ |
| 9 | 9 | |
| 10 | | #include "emu.h" |
| 11 | 10 | #include "com8116.h" |
| 12 | 11 | |
| 13 | 12 | |
| r23591 | r23592 | |
| 21 | 20 | |
| 22 | 21 | |
| 23 | 22 | //************************************************************************** |
| 24 | | // LIVE DEVICE |
| 23 | // DEVICE DEFINITIONS |
| 25 | 24 | //************************************************************************** |
| 26 | 25 | |
| 27 | 26 | // device type definition |
| 28 | 27 | const device_type COM8116 = &device_creator<com8116_device>; |
| 29 | 28 | |
| 30 | | //------------------------------------------------- |
| 31 | | // com8116_device - constructor |
| 32 | | //------------------------------------------------- |
| 33 | 29 | |
| 34 | | com8116_device::com8116_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 35 | | : device_t(mconfig, COM8116, "COM8116", tag, owner, clock) |
| 36 | | { |
| 37 | | } |
| 30 | const int com8116_device::divisors_16X_5_0688MHz[] = |
| 31 | { 6336, 4224, 2880, 2355, 2112, 1056, 528, 264, 176, 158, 132, 88, 66, 44, 33, 16 }; |
| 38 | 32 | |
| 33 | const int com8116_device::divisors_16X_4_9152MHz[] = |
| 34 | { 6144, 4096, 2793, 2284, 2048, 1024, 512, 256, 171, 154, 128, 85, 64, 43, 32, 16 }; |
| 39 | 35 | |
| 36 | const int com8116_device::divisors_32X_5_0688MHz[] = |
| 37 | { 3168, 2112, 1440, 1177, 1056, 792, 528, 264, 132, 88, 66, 44, 33, 22, 16, 8 }; |
| 38 | |
| 39 | |
| 40 | |
| 41 | //************************************************************************** |
| 42 | // LIVE DEVICE |
| 43 | //************************************************************************** |
| 44 | |
| 40 | 45 | //------------------------------------------------- |
| 41 | | // device_config_complete - perform any |
| 42 | | // operations now that the configuration is |
| 43 | | // complete |
| 46 | // com8116_device - constructor |
| 44 | 47 | //------------------------------------------------- |
| 45 | 48 | |
| 46 | | void com8116_device::device_config_complete() |
| 49 | com8116_device::com8116_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 50 | : device_t(mconfig, COM8116, "COM8116", tag, owner, clock), |
| 51 | m_write_fx4(*this), |
| 52 | m_write_fr(*this), |
| 53 | m_write_ft(*this) |
| 47 | 54 | { |
| 48 | | // inherit a copy of the static data |
| 49 | | const com8116_interface *intf = reinterpret_cast<const com8116_interface *>(static_config()); |
| 50 | | if (intf != NULL) |
| 51 | | *static_cast<com8116_interface *>(this) = *intf; |
| 52 | | |
| 53 | | // or initialize to defaults if none provided |
| 54 | | else |
| 55 | | { |
| 56 | | memset(&m_out_fx4_cb, 0, sizeof(m_out_fx4_cb)); |
| 57 | | memset(&m_out_fr_cb, 0, sizeof(m_out_fr_cb)); |
| 58 | | memset(&m_out_ft_cb, 0, sizeof(m_out_ft_cb)); |
| 59 | | } |
| 60 | 55 | } |
| 61 | 56 | |
| 62 | 57 | |
| r23591 | r23592 | |
| 67 | 62 | void com8116_device::device_start() |
| 68 | 63 | { |
| 69 | 64 | // resolve callbacks |
| 70 | | m_out_fx4_func.resolve(m_out_fx4_cb, *this); |
| 71 | | m_out_fr_func.resolve(m_out_fr_cb, *this); |
| 72 | | m_out_ft_func.resolve(m_out_ft_cb, *this); |
| 65 | m_write_fx4.resolve_safe(); |
| 66 | m_write_fr.resolve_safe(); |
| 67 | m_write_ft.resolve_safe(); |
| 73 | 68 | |
| 74 | 69 | // allocate timers |
| 75 | 70 | m_fx4_timer = timer_alloc(TIMER_FX4); |
| 76 | | m_fx4_timer->adjust(attotime::zero, 0, attotime::from_hz(clock() / 4)); |
| 71 | m_fx4_timer->adjust(attotime::from_hz(clock() / 4), 0, attotime::from_hz(clock() / 4)); |
| 77 | 72 | m_fr_timer = timer_alloc(TIMER_FR); |
| 78 | 73 | m_ft_timer = timer_alloc(TIMER_FT); |
| 79 | 74 | |
| 75 | m_fr_divisors = divisors_16X_5_0688MHz; |
| 76 | m_ft_divisors = divisors_16X_5_0688MHz; |
| 77 | |
| 80 | 78 | // register for state saving |
| 81 | 79 | save_item(NAME(m_fr)); |
| 82 | 80 | save_item(NAME(m_ft)); |
| r23591 | r23592 | |
| 103 | 101 | switch (id) |
| 104 | 102 | { |
| 105 | 103 | case TIMER_FX4: |
| 106 | | m_out_fx4_func(1); |
| 104 | m_write_fx4(1); |
| 107 | 105 | break; |
| 108 | 106 | |
| 109 | 107 | case TIMER_FR: |
| 110 | | m_out_fr_func(1); |
| 108 | m_write_fr(1); |
| 111 | 109 | break; |
| 112 | 110 | |
| 113 | 111 | case TIMER_FT: |
| 114 | | m_out_ft_func(1); |
| 112 | m_write_ft(1); |
| 115 | 113 | break; |
| 116 | 114 | } |
| 117 | 115 | } |
trunk/src/emu/machine/com8116.h
| r23591 | r23592 | |
| 19 | 19 | |
| 20 | 20 | **********************************************************************/ |
| 21 | 21 | |
| 22 | | |
| 23 | 22 | #pragma once |
| 24 | 23 | |
| 25 | 24 | #ifndef __COM8116__ |
| r23591 | r23592 | |
| 33 | 32 | // INTERFACE CONFIGURATION MACROS |
| 34 | 33 | ///************************************************************************* |
| 35 | 34 | |
| 36 | | #define MCFG_COM8116_ADD(_tag, _clock, _config) \ |
| 37 | | MCFG_DEVICE_ADD(_tag, COM8116, _clock) \ |
| 38 | | MCFG_DEVICE_CONFIG(_config) |
| 35 | #define MCFG_COM8116_ADD(_tag, _clock, _fx4, _fr, _ft) \ |
| 36 | MCFG_DEVICE_ADD(_tag, COM8116, _clock) \ |
| 37 | downcast<com8116_device *>(device)->set_fx4_callback(DEVCB2_##_fx4); \ |
| 38 | downcast<com8116_device *>(device)->set_fr_callback(DEVCB2_##_fr); \ |
| 39 | downcast<com8116_device *>(device)->set_ft_callback(DEVCB2_##_ft); |
| 39 | 40 | |
| 40 | 41 | |
| 41 | | #define COM8116_INTERFACE(name) \ |
| 42 | | const com8116_interface (name) = |
| 43 | 42 | |
| 44 | | |
| 45 | | #define COM8116_DIVISORS_16X_5_0688MHz \ |
| 46 | | { 6336, 4224, 2880, 2355, 2112, 1056, 528, 264, 176, 158, 132, 88, 66, 44, 33, 16 } |
| 47 | | |
| 48 | | #define COM8116_DIVISORS_16X_4_9152MHz \ |
| 49 | | { 6144, 4096, 2793, 2284, 2048, 1024, 512, 256, 171, 154, 128, 85, 64, 43, 32, 16 } |
| 50 | | |
| 51 | | #define COM8116_DIVISORS_32X_5_0688MHz \ |
| 52 | | { 3168, 2112, 1440, 1177, 1056, 792, 528, 264, 132, 88, 66, 44, 33, 22, 16, 8 } |
| 53 | | |
| 54 | | |
| 55 | | |
| 56 | 43 | ///************************************************************************* |
| 57 | 44 | // TYPE DEFINITIONS |
| 58 | 45 | ///************************************************************************* |
| 59 | 46 | |
| 60 | | // ======================> com8116_interface |
| 61 | | |
| 62 | | struct com8116_interface |
| 63 | | { |
| 64 | | devcb_write_line m_out_fx4_cb; |
| 65 | | devcb_write_line m_out_fr_cb; |
| 66 | | devcb_write_line m_out_ft_cb; |
| 67 | | |
| 68 | | // receiver divisor ROM (19-bit) |
| 69 | | UINT32 m_fr_divisors[16]; |
| 70 | | |
| 71 | | // transmitter divisor ROM (19-bit) |
| 72 | | UINT32 m_ft_divisors[16]; |
| 73 | | }; |
| 74 | | |
| 75 | | |
| 76 | 47 | // ======================> com8116_device |
| 77 | 48 | |
| 78 | | class com8116_device : public device_t, |
| 79 | | public com8116_interface |
| 49 | class com8116_device : public device_t |
| 80 | 50 | { |
| 81 | 51 | public: |
| 82 | 52 | // construction/destruction |
| 83 | 53 | com8116_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 84 | 54 | |
| 55 | template<class _fx4> void set_fx4_callback(_fx4 fx4) { m_write_fx4.set_callback(fx4); } |
| 56 | template<class _fr> void set_fr_callback(_fr fr) { m_write_fr.set_callback(fr); } |
| 57 | template<class _ft> void set_ft_callback(_ft ft) { m_write_ft.set_callback(ft); } |
| 58 | |
| 85 | 59 | void str_w(UINT8 data); |
| 86 | 60 | DECLARE_WRITE8_MEMBER( str_w ); |
| 87 | 61 | void stt_w(UINT8 data); |
| 88 | 62 | DECLARE_WRITE8_MEMBER( stt_w ); |
| 89 | 63 | |
| 64 | static const int divisors_16X_5_0688MHz[]; |
| 65 | static const int divisors_16X_4_9152MHz[]; |
| 66 | static const int divisors_32X_5_0688MHz[]; |
| 67 | |
| 90 | 68 | protected: |
| 91 | 69 | // device-level overrides |
| 92 | | virtual void device_config_complete(); |
| 93 | 70 | virtual void device_start(); |
| 94 | 71 | virtual void device_reset(); |
| 95 | 72 | virtual void device_timer(emu_timer &timer, device_timer_id id, int m_param, void *ptr); |
| 96 | 73 | |
| 97 | 74 | private: |
| 98 | | static const device_timer_id TIMER_FX4 = 0; |
| 99 | | static const device_timer_id TIMER_FR = 1; |
| 100 | | static const device_timer_id TIMER_FT = 2; |
| 75 | enum |
| 76 | { |
| 77 | TIMER_FX4, |
| 78 | TIMER_FR, |
| 79 | TIMER_FT |
| 80 | }; |
| 101 | 81 | |
| 102 | | devcb_resolved_write_line m_out_fx4_func; |
| 103 | | devcb_resolved_write_line m_out_fr_func; |
| 104 | | devcb_resolved_write_line m_out_ft_func; |
| 82 | devcb2_write_line m_write_fx4; |
| 83 | devcb2_write_line m_write_fr; |
| 84 | devcb2_write_line m_write_ft; |
| 105 | 85 | |
| 106 | 86 | int m_fr; // receiver frequency |
| 107 | 87 | int m_ft; // transmitter frequency |
| 108 | 88 | |
| 89 | const int *m_fr_divisors; |
| 90 | const int *m_ft_divisors; |
| 91 | |
| 109 | 92 | // timers |
| 110 | 93 | emu_timer *m_fx4_timer; |
| 111 | 94 | emu_timer *m_fr_timer; |
trunk/src/mess/drivers/xerox820.c
| r23591 | r23592 | |
| 502 | 502 | m_sio->txca_w(state); |
| 503 | 503 | } |
| 504 | 504 | |
| 505 | | WRITE_LINE_MEMBER( xerox820_state::ft_w ) |
| 506 | | { |
| 507 | | m_sio->rxtxcb_w(state); |
| 508 | | } |
| 509 | | |
| 510 | | static COM8116_INTERFACE( com8116_intf ) |
| 511 | | { |
| 512 | | DEVCB_NULL, /* fX/4 output */ |
| 513 | | DEVCB_DRIVER_LINE_MEMBER(xerox820_state, fr_w), |
| 514 | | DEVCB_DRIVER_LINE_MEMBER(xerox820_state, ft_w), |
| 515 | | COM8116_DIVISORS_16X_5_0688MHz, // receiver |
| 516 | | COM8116_DIVISORS_16X_5_0688MHz // transmitter |
| 517 | | }; |
| 518 | | |
| 519 | 505 | WRITE8_MEMBER( xerox820_state::kbd_w ) |
| 520 | 506 | { |
| 521 | 507 | m_keydata = ~data; |
| r23591 | r23592 | |
| 738 | 724 | MCFG_FD1771x_ADD(FD1771_TAG, XTAL_20MHz/20) |
| 739 | 725 | MCFG_FLOPPY_DRIVE_ADD(FD1771_TAG":0", xerox820_floppies, "sa400", floppy_image_device::default_floppy_formats) |
| 740 | 726 | MCFG_FLOPPY_DRIVE_ADD(FD1771_TAG":1", xerox820_floppies, "sa400", floppy_image_device::default_floppy_formats) |
| 741 | | MCFG_COM8116_ADD(COM8116_TAG, XTAL_5_0688MHz, com8116_intf) |
| 727 | MCFG_COM8116_ADD(COM8116_TAG, XTAL_5_0688MHz, NULL, WRITELINE(xerox820_state, fr_w), DEVWRITELINE(Z80SIO_TAG, z80dart_device, rxtxcb_w)) |
| 742 | 728 | MCFG_RS232_PORT_ADD(RS232_A_TAG, rs232a_intf, default_rs232_devices, NULL) |
| 743 | 729 | MCFG_RS232_PORT_ADD(RS232_B_TAG, rs232b_intf, default_rs232_devices, NULL) |
| 744 | 730 | MCFG_ASCII_KEYBOARD_ADD(KEYBOARD_TAG, keyboard_intf) |
| r23591 | r23592 | |
| 786 | 772 | MCFG_FD1797x_ADD(FD1797_TAG, XTAL_16MHz/8) |
| 787 | 773 | MCFG_FLOPPY_DRIVE_ADD(FD1797_TAG":0", xerox820_floppies, "sa450", floppy_image_device::default_floppy_formats) |
| 788 | 774 | MCFG_FLOPPY_DRIVE_ADD(FD1797_TAG":1", xerox820_floppies, "sa450", floppy_image_device::default_floppy_formats) |
| 789 | | MCFG_COM8116_ADD(COM8116_TAG, XTAL_5_0688MHz, com8116_intf) |
| 775 | MCFG_COM8116_ADD(COM8116_TAG, XTAL_5_0688MHz, NULL, WRITELINE(xerox820_state, fr_w), DEVWRITELINE(Z80SIO_TAG, z80dart_device, rxtxcb_w)) |
| 790 | 776 | MCFG_RS232_PORT_ADD(RS232_A_TAG, rs232a_intf, default_rs232_devices, NULL) |
| 791 | 777 | MCFG_RS232_PORT_ADD(RS232_B_TAG, rs232b_intf, default_rs232_devices, NULL) |
| 792 | 778 | MCFG_ASCII_KEYBOARD_ADD(KEYBOARD_TAG, keyboard_intf) |
trunk/src/mess/drivers/ob68k1a.c
| r23591 | r23592 | |
| 255 | 255 | m_acia1->tx_clock_in(); |
| 256 | 256 | } |
| 257 | 257 | |
| 258 | | static COM8116_INTERFACE( dbrg_intf ) |
| 259 | | { |
| 260 | | DEVCB_NULL, /* fX/4 output */ |
| 261 | | DEVCB_DRIVER_LINE_MEMBER(ob68k1a_state, rx_tx_0_w), |
| 262 | | DEVCB_DRIVER_LINE_MEMBER(ob68k1a_state, rx_tx_1_w), |
| 263 | | COM8116_DIVISORS_16X_5_0688MHz, // receiver |
| 264 | | COM8116_DIVISORS_16X_5_0688MHz // transmitter |
| 265 | | }; |
| 266 | 258 | |
| 267 | | |
| 268 | 259 | //------------------------------------------------- |
| 269 | 260 | // rs232_port_interface rs232a_intf |
| 270 | 261 | //------------------------------------------------- |
| r23591 | r23592 | |
| 356 | 347 | MCFG_PTM6840_ADD(MC6840_TAG, ptm_intf) |
| 357 | 348 | MCFG_ACIA6850_ADD(MC6850_0_TAG, acia0_intf) |
| 358 | 349 | MCFG_ACIA6850_ADD(MC6850_1_TAG, acia1_intf) |
| 359 | | MCFG_COM8116_ADD(COM8116_TAG, XTAL_5_0688MHz, dbrg_intf) |
| 350 | MCFG_COM8116_ADD(COM8116_TAG, XTAL_5_0688MHz, NULL, WRITELINE(ob68k1a_state, rx_tx_0_w), WRITELINE(ob68k1a_state, rx_tx_1_w)) |
| 360 | 351 | MCFG_RS232_PORT_ADD(RS232_A_TAG, rs232a_intf, default_rs232_devices, "serial_terminal") |
| 361 | 352 | MCFG_RS232_PORT_ADD(RS232_B_TAG, rs232b_intf, default_rs232_devices, NULL) |
| 362 | 353 | |
trunk/src/mess/drivers/vt100.c
| r23591 | r23592 | |
| 428 | 428 | DEVCB_NULL |
| 429 | 429 | }; |
| 430 | 430 | |
| 431 | | static COM8116_INTERFACE( dbrg_intf ) |
| 432 | | { |
| 433 | | DEVCB_NULL, |
| 434 | | DEVCB_DEVICE_LINE_MEMBER("i8251", i8251_device, rxc_w), |
| 435 | | DEVCB_DEVICE_LINE_MEMBER("i8251", i8251_device, txc_w), |
| 436 | | COM8116_DIVISORS_16X_5_0688MHz, // receiver |
| 437 | | COM8116_DIVISORS_16X_5_0688MHz // transmitter |
| 438 | | }; |
| 439 | | |
| 440 | 431 | static MACHINE_CONFIG_START( vt100, vt100_state ) |
| 441 | 432 | /* basic machine hardware */ |
| 442 | 433 | MCFG_CPU_ADD("maincpu",I8080, XTAL_24_8832MHz / 9) |
| r23591 | r23592 | |
| 465 | 456 | /* i8251 uart */ |
| 466 | 457 | MCFG_I8251_ADD("i8251", i8251_intf) |
| 467 | 458 | MCFG_RS232_PORT_ADD(RS232_TAG, rs232_intf, default_rs232_devices, NULL) |
| 468 | | MCFG_COM8116_ADD(COM5016T_TAG, XTAL_5_0688MHz, dbrg_intf) |
| 459 | MCFG_COM8116_ADD(COM5016T_TAG, XTAL_5_0688MHz, NULL, DEVWRITELINE("i8251", i8251_device, rxc_w), DEVWRITELINE("i8251", i8251_device, txc_w)) |
| 469 | 460 | |
| 470 | 461 | |
| 471 | 462 | /* audio hardware */ |
trunk/src/mess/drivers/superslave.c
| r23591 | r23592 | |
| 265 | 265 | m_dart1->rxtxcb_w(state); |
| 266 | 266 | } |
| 267 | 267 | |
| 268 | | static COM8116_INTERFACE( dbrg_intf ) |
| 269 | | { |
| 270 | | DEVCB_NULL, |
| 271 | | DEVCB_DRIVER_LINE_MEMBER(superslave_state, fr_w), |
| 272 | | DEVCB_DRIVER_LINE_MEMBER(superslave_state, ft_w), |
| 273 | | COM8116_DIVISORS_16X_5_0688MHz, // receiver |
| 274 | | COM8116_DIVISORS_16X_5_0688MHz // transmitter |
| 275 | | }; |
| 276 | 268 | |
| 277 | | |
| 278 | 269 | //------------------------------------------------- |
| 279 | 270 | // Z80DART_INTERFACE( dart0_intf ) |
| 280 | 271 | //------------------------------------------------- |
| r23591 | r23592 | |
| 466 | 457 | MCFG_Z80DART_ADD(Z80DART_0_TAG, XTAL_8MHz/2, dart0_intf) |
| 467 | 458 | MCFG_Z80DART_ADD(Z80DART_1_TAG, XTAL_8MHz/2, dart1_intf) |
| 468 | 459 | MCFG_Z80PIO_ADD(Z80PIO_TAG, XTAL_8MHz/2, pio_intf) |
| 469 | | MCFG_COM8116_ADD(BR1941_TAG, XTAL_5_0688MHz, dbrg_intf) |
| 460 | MCFG_COM8116_ADD(BR1941_TAG, XTAL_5_0688MHz, NULL, WRITELINE(superslave_state, fr_w), WRITELINE(superslave_state, ft_w)) |
| 470 | 461 | MCFG_RS232_PORT_ADD(RS232_A_TAG, rs232a_intf, default_rs232_devices, "serial_terminal") |
| 471 | 462 | MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("serial_terminal", terminal) |
| 472 | 463 | MCFG_RS232_PORT_ADD(RS232_B_TAG, rs232b_intf, default_rs232_devices, NULL) |
trunk/src/mess/drivers/kaypro.c
| r23591 | r23592 | |
| 170 | 170 | // downcast<z80sio_device *>(device)->tx_clock_in(); |
| 171 | 171 | //} |
| 172 | 172 | |
| 173 | | static COM8116_INTERFACE( kayproii_brg_intf ) |
| 174 | | { |
| 175 | | DEVCB_NULL, /* fX/4 output */ |
| 176 | | DEVCB_NULL, // DEVCB_DEVICE_LINE("z80sio", rx_tx_a_w), z80sio implementation has no clock pin |
| 177 | | DEVCB_NULL, // DEVCB_DEVICE_LINE("z80sio", rx_tx_b_w), |
| 178 | | COM8116_DIVISORS_16X_5_0688MHz, // receiver |
| 179 | | COM8116_DIVISORS_16X_5_0688MHz // transmitter |
| 180 | | }; |
| 181 | 173 | |
| 182 | | static COM8116_INTERFACE( kaypro2x_brg_intf ) |
| 183 | | { |
| 184 | | DEVCB_NULL, /* fX/4 output */ |
| 185 | | DEVCB_NULL,//DEVCB_DEVICE_LINE("z80sio", rx_tx_a_w), |
| 186 | | DEVCB_NULL,//DEVCB_DEVICE_LINE("z80sio_2x", rx_tx_a_w), |
| 187 | | COM8116_DIVISORS_16X_5_0688MHz, // receiver |
| 188 | | COM8116_DIVISORS_16X_5_0688MHz // transmitter |
| 189 | | }; |
| 190 | 174 | |
| 191 | | |
| 192 | 175 | /*********************************************************** |
| 193 | 176 | |
| 194 | 177 | Machine Driver |
| r23591 | r23592 | |
| 270 | 253 | MCFG_QUICKLOAD_ADD("quickload", kaypro_state, kayproii, "com,cpm", 3) |
| 271 | 254 | MCFG_FD1793_ADD("wd1793", kaypro_wd1793_interface ) |
| 272 | 255 | MCFG_CENTRONICS_PRINTER_ADD("centronics", standard_centronics) |
| 273 | | MCFG_COM8116_ADD("brg", XTAL_5_0688MHz, kayproii_brg_intf) // WD1943, SMC8116 |
| 256 | MCFG_COM8116_ADD("brg", XTAL_5_0688MHz, NULL, NULL, NULL) // WD1943, SMC8116 |
| 274 | 257 | MCFG_Z80PIO_ADD( "z80pio_g", 2500000, kayproii_pio_g_intf ) |
| 275 | 258 | MCFG_Z80PIO_ADD( "z80pio_s", 2500000, kayproii_pio_s_intf ) |
| 276 | 259 | MCFG_Z80SIO_ADD( "z80sio", 4800, kaypro_sio_intf ) /* start at 300 baud */ |
| r23591 | r23592 | |
| 316 | 299 | MCFG_QUICKLOAD_ADD("quickload", kaypro_state, kaypro2x, "com,cpm", 3) |
| 317 | 300 | MCFG_FD1793_ADD("wd1793", kaypro_wd1793_interface ) |
| 318 | 301 | MCFG_CENTRONICS_PRINTER_ADD("centronics", standard_centronics) |
| 319 | | MCFG_COM8116_ADD("brg", XTAL_5_0688MHz, kaypro2x_brg_intf) // WD1943, SMC8116 |
| 302 | MCFG_COM8116_ADD("brg", XTAL_5_0688MHz, NULL, NULL, NULL) // WD1943, SMC8116 |
| 320 | 303 | MCFG_Z80SIO_ADD( "z80sio", 4800, kaypro_sio_intf ) |
| 321 | 304 | MCFG_Z80SIO_ADD( "z80sio_2x", 4800, kaypro_sio_intf ) /* extra sio for modem and printer */ |
| 322 | 305 | |
trunk/src/mess/drivers/super6.c
| r23591 | r23592 | |
| 455 | 455 | m_ctc->trg1(state); |
| 456 | 456 | } |
| 457 | 457 | |
| 458 | | static COM8116_INTERFACE( brg_intf ) |
| 459 | | { |
| 460 | | DEVCB_NULL, |
| 461 | | DEVCB_DRIVER_LINE_MEMBER(super6_state, fr_w), |
| 462 | | DEVCB_DEVICE_LINE_MEMBER(Z80DART_TAG, z80dart_device, rxtxcb_w), |
| 463 | | COM8116_DIVISORS_16X_5_0688MHz, // receiver |
| 464 | | COM8116_DIVISORS_16X_5_0688MHz // transmitter |
| 465 | | }; |
| 466 | 458 | |
| 467 | | |
| 468 | 459 | //------------------------------------------------- |
| 469 | 460 | // floppy_format_type floppy_formats |
| 470 | 461 | //------------------------------------------------- |
| r23591 | r23592 | |
| 596 | 587 | MCFG_Z80DMA_ADD(Z80DMA_TAG, XTAL_24MHz/6, dma_intf) |
| 597 | 588 | MCFG_Z80PIO_ADD(Z80PIO_TAG, XTAL_24MHz/4, pio_intf) |
| 598 | 589 | MCFG_WD2793x_ADD(WD2793_TAG, 1000000) |
| 599 | | MCFG_COM8116_ADD(BR1945_TAG, XTAL_5_0688MHz, brg_intf) |
| 590 | MCFG_COM8116_ADD(BR1945_TAG, XTAL_5_0688MHz, NULL, WRITELINE(super6_state, fr_w), DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w)) |
| 600 | 591 | MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":0", super6_floppies, "525dd", floppy_image_device::default_floppy_formats) |
| 601 | 592 | MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":1", super6_floppies, NULL, floppy_image_device::default_floppy_formats) |
| 602 | 593 | MCFG_RS232_PORT_ADD(RS232_A_TAG, rs232b_intf, default_rs232_devices, "serial_terminal") |
trunk/src/mess/drivers/softbox.c
| r23591 | r23592 | |
| 4 | 4 | |
| 5 | 5 | http://mikenaberezny.com/hardware/pet-cbm/sse-softbox-z80-computer/ |
| 6 | 6 | |
| 7 | |
| 8 | Using the Corvus hard disk |
| 9 | -------------------------- |
| 10 | |
| 11 | The SoftBox distribution disk (softbox-distrib.d80) is configured for |
| 12 | a CBM 8050 as CP/M drives A/B and a 10MB Corvus hard disk as drives C/D. |
| 13 | |
| 14 | Use the CHDMAN utility to create a 10MB hard disk image for the Corvus: |
| 15 | |
| 16 | $ chdman createhd -o /path/to/corvus10mb.chd -chs 358,3,20 -ss 512 |
| 17 | |
| 18 | Start the SoftBox emulator with the floppy and hard disk images mounted: |
| 19 | |
| 20 | $ mess softbox -flop1 /path/to/softbox-distrib.d80 \ |
| 21 | -hard1 /path/to/corvus10mb.chd |
| 22 | |
| 23 | Before the Corvus can be used under CP/M, it must be prepared |
| 24 | by running DIAG.COM and FORMAT.COM. |
| 25 | |
| 26 | DIAG.COM |
| 27 | |
| 28 | Enter "diag" (no arguments) at the CP/M prompt to run the Corvus diagnostics |
| 29 | program. This program will perform the Corvus low-level format. |
| 30 | |
| 31 | Select option 6 (Update Controller Code) at the menu. |
| 32 | Enter "corvb184.fmt" when prompted for the filename. |
| 33 | Enter "y" at the confirmation prompts. |
| 34 | Enter "1" for the Corvus drive number (two prompts). |
| 35 | After formatting is complete, it will return to the menu. |
| 36 | |
| 37 | Select option 3 (Read Controller Code Version #) at the menu. |
| 38 | Enter "1" for the Corvus drive number. |
| 39 | It should report "V18.4AP" and then return to the menu. |
| 40 | |
| 41 | Select option 9 to return to CP/M. |
| 42 | |
| 43 | FORMAT.COM |
| 44 | |
| 45 | Enter "format" (no arguments) at the CP/M prompt to run the SoftBox disk |
| 46 | format program. This program will perform the CP/M filesystem format. |
| 47 | |
| 48 | Enter drive letter "c" at the prompt. |
| 49 | Enter "y" to confirm the format. |
| 50 | After formatting is complete, it will prompt for a drive letter again. |
| 51 | |
| 52 | Enter drive letter "d" at the prompt. |
| 53 | Enter "y" to confirm the format. |
| 54 | After formatting is complete, it will prompt for a drive letter again. |
| 55 | |
| 56 | Press RETURN to return to CP/M. |
| 57 | |
| 58 | STAT.COM |
| 59 | |
| 60 | After all steps are completed, drives C and D should be usable from |
| 61 | CP/M. Each drive is one half of the Corvus 10MB disk. Running the |
| 62 | command "stat c: dsk:" should show 4712 kilobyte drive capacity. |
| 63 | Drive D should show the same information. |
| 64 | |
| 65 | |
| 66 | Using other Corvus hard disk sizes |
| 67 | ---------------------------------- |
| 68 | |
| 69 | The SoftBox supports 5, 10, and 20 MB hard disks. The distribution disk |
| 70 | is configured for 10 MB as explained above. To use other sizes, make |
| 71 | a new image with CHDMAN. See the top of src/mess/includes/corvushd.h |
| 72 | for the parameters for the other drives. |
| 73 | |
| 74 | After the image has been created and the SoftBox emulator started with |
| 75 | it mounted, the SoftBox BIOS needs to be told what size Corvus hard |
| 76 | disk is attached. Use the NEWSYS.COM utility to reconfigure the drive |
| 77 | size. When NEWSYS prompts for a source drive, enter "a" (the drive letter |
| 78 | of the CP/M distribution disk). Use option "d" (Disk drive assignment) |
| 79 | to reconfigure the Corvus size. After the change has been made, use option |
| 80 | "s" (Save new system) to write the configuration to the floppy (drive A) and |
| 81 | option "e" (Execute new system) to restart CP/M with the configuration. |
| 82 | DIAG.COM and FORMAT.COM can then be used to format the hard disk. |
| 83 | |
| 7 | 84 | */ |
| 8 | 85 | |
| 9 | 86 | #include "includes/softbox.h" |
| r23591 | r23592 | |
| 247 | 324 | |
| 248 | 325 | |
| 249 | 326 | //------------------------------------------------- |
| 250 | | // COM8116_INTERFACE( dbrg_intf ) |
| 251 | | //------------------------------------------------- |
| 252 | | |
| 253 | | static COM8116_INTERFACE( dbrg_intf ) |
| 254 | | { |
| 255 | | DEVCB_NULL, // fX/4 |
| 256 | | DEVCB_DEVICE_LINE_MEMBER(I8251_TAG, i8251_device, rxc_w), |
| 257 | | DEVCB_DEVICE_LINE_MEMBER(I8251_TAG, i8251_device, txc_w), |
| 258 | | COM8116_DIVISORS_16X_5_0688MHz, // receiver |
| 259 | | COM8116_DIVISORS_16X_5_0688MHz // transmitter |
| 260 | | }; |
| 261 | | |
| 262 | | |
| 263 | | //------------------------------------------------- |
| 264 | 327 | // rs232_port_interface rs232_intf |
| 265 | 328 | //------------------------------------------------- |
| 266 | 329 | |
| r23591 | r23592 | |
| 313 | 376 | MCFG_I8251_ADD(I8251_TAG, usart_intf) |
| 314 | 377 | MCFG_I8255A_ADD(I8255_0_TAG, ppi0_intf) |
| 315 | 378 | MCFG_I8255A_ADD(I8255_1_TAG, ppi1_intf) |
| 316 | | MCFG_COM8116_ADD(COM8116_TAG, XTAL_5_0688MHz, dbrg_intf) |
| 379 | MCFG_COM8116_ADD(COM8116_TAG, XTAL_5_0688MHz, NULL, DEVWRITELINE(I8251_TAG, i8251_device, rxc_w), DEVWRITELINE(I8251_TAG, i8251_device, txc_w)) |
| 317 | 380 | MCFG_CBM_IEEE488_ADD("c8050") |
| 318 | 381 | MCFG_HARDDISK_ADD("harddisk1") |
| 319 | 382 | MCFG_RS232_PORT_ADD(RS232_TAG, rs232_intf, default_rs232_devices, "serial_terminal") |
trunk/src/mess/drivers/xor100.c
| r23591 | r23592 | |
| 367 | 367 | m_uart_b->receive_clock(); |
| 368 | 368 | } |
| 369 | 369 | |
| 370 | | static COM8116_INTERFACE( com5016_intf ) |
| 371 | | { |
| 372 | | DEVCB_NULL, /* fX/4 output */ |
| 373 | | DEVCB_DRIVER_LINE_MEMBER(xor100_state, com5016_fr_w), /* fR output */ |
| 374 | | DEVCB_DRIVER_LINE_MEMBER(xor100_state, com5016_ft_w), /* fT output */ |
| 375 | | COM8116_DIVISORS_16X_5_0688MHz, // receiver |
| 376 | | COM8116_DIVISORS_16X_5_0688MHz // transmitter |
| 377 | | }; |
| 378 | | |
| 379 | 370 | /* Printer 8251A Interface */ |
| 380 | 371 | |
| 381 | 372 | static const i8251_interface printer_8251_intf = |
| r23591 | r23592 | |
| 604 | 595 | MCFG_I8251_ADD(I8251_B_TAG, /*XTAL_8MHz/2,*/ terminal_8251_intf) |
| 605 | 596 | MCFG_I8255A_ADD(I8255A_TAG, printer_8255_intf) |
| 606 | 597 | MCFG_Z80CTC_ADD(Z80CTC_TAG, XTAL_8MHz/2, ctc_intf) |
| 607 | | MCFG_COM8116_ADD(COM5016_TAG, XTAL_5_0688MHz, com5016_intf) |
| 598 | MCFG_COM8116_ADD(COM5016_TAG, XTAL_5_0688MHz, NULL, WRITELINE(xor100_state, com5016_fr_w), WRITELINE(xor100_state, com5016_ft_w)) |
| 608 | 599 | MCFG_FD1795x_ADD(WD1795_TAG, XTAL_8MHz/4) |
| 609 | 600 | MCFG_FLOPPY_DRIVE_ADD(WD1795_TAG":0", xor100_floppies, "8ssdd", floppy_image_device::default_floppy_formats) |
| 610 | 601 | MCFG_FLOPPY_DRIVE_ADD(WD1795_TAG":1", xor100_floppies, "8ssdd", floppy_image_device::default_floppy_formats) |
trunk/src/mess/drivers/vk100.c
| r23591 | r23592 | |
| 1031 | 1031 | DEVCB_NULL |
| 1032 | 1032 | }; |
| 1033 | 1033 | |
| 1034 | | static COM8116_INTERFACE( dbrg_intf ) |
| 1035 | | { |
| 1036 | | DEVCB_NULL, |
| 1037 | | DEVCB_DEVICE_LINE_MEMBER("i8251", i8251_device, rxc_w), |
| 1038 | | DEVCB_DEVICE_LINE_MEMBER("i8251", i8251_device, txc_w), |
| 1039 | | COM8116_DIVISORS_16X_5_0688MHz, // receiver |
| 1040 | | COM8116_DIVISORS_16X_5_0688MHz // transmitter |
| 1041 | | }; |
| 1042 | | |
| 1043 | 1034 | static MACHINE_CONFIG_START( vk100, vk100_state ) |
| 1044 | 1035 | /* basic machine hardware */ |
| 1045 | 1036 | MCFG_CPU_ADD("maincpu", I8085A, XTAL_5_0688MHz) |
| r23591 | r23592 | |
| 1056 | 1047 | /* i8251 uart */ |
| 1057 | 1048 | MCFG_I8251_ADD("i8251", i8251_intf) |
| 1058 | 1049 | MCFG_RS232_PORT_ADD(RS232_TAG, rs232_intf, default_rs232_devices, NULL) |
| 1059 | | MCFG_COM8116_ADD(COM5016T_TAG, XTAL_5_0688MHz, dbrg_intf) |
| 1050 | MCFG_COM8116_ADD(COM5016T_TAG, XTAL_5_0688MHz, NULL, DEVWRITELINE("i8251", i8251_device, rxc_w), DEVWRITELINE("i8251", i8251_device, txc_w)) |
| 1060 | 1051 | |
| 1061 | 1052 | MCFG_DEFAULT_LAYOUT( layout_vk100 ) |
| 1062 | 1053 | |
trunk/src/mess/machine/s100_dj2db.c
| r23591 | r23592 | |
| 64 | 64 | // COM8116_INTERFACE( brg_intf ) |
| 65 | 65 | //------------------------------------------------- |
| 66 | 66 | |
| 67 | | static COM8116_INTERFACE( brg_intf ) |
| 67 | WRITE_LINE_MEMBER( s100_dj2db_device::fr_w ) |
| 68 | 68 | { |
| 69 | | DEVCB_NULL, |
| 70 | | DEVCB_NULL, // S1602 RRC/TRC |
| 71 | | DEVCB_NULL, |
| 72 | | COM8116_DIVISORS_16X_5_0688MHz, // receiver |
| 73 | | COM8116_DIVISORS_16X_5_0688MHz // transmitter |
| 74 | | }; |
| 69 | // S1602 RRC/TRC |
| 70 | } |
| 75 | 71 | |
| 76 | 72 | |
| 77 | 73 | //------------------------------------------------- |
| r23591 | r23592 | |
| 111 | 107 | //------------------------------------------------- |
| 112 | 108 | |
| 113 | 109 | static MACHINE_CONFIG_FRAGMENT( s100_dj2db ) |
| 114 | | MCFG_COM8116_ADD(BR1941_TAG, XTAL_5_0688MHz, brg_intf) |
| 110 | MCFG_COM8116_ADD(BR1941_TAG, XTAL_5_0688MHz, NULL, DEVWRITELINE(DEVICE_SELF_OWNER, s100_dj2db_device, fr_w), NULL) |
| 115 | 111 | MCFG_MB8866x_ADD(MB8866_TAG, XTAL_10MHz/5) |
| 116 | 112 | |
| 117 | 113 | MCFG_FLOPPY_DRIVE_ADD(MB8866_TAG":0", s100_dj2db_floppies, "8dsdd", floppy_image_device::default_floppy_formats) |
trunk/src/mess/machine/softbox.c
| r23591 | r23592 | |
| 248 | 248 | |
| 249 | 249 | |
| 250 | 250 | //------------------------------------------------- |
| 251 | | // COM8116_INTERFACE( dbrg_intf ) |
| 252 | | //------------------------------------------------- |
| 253 | | |
| 254 | | static COM8116_INTERFACE( dbrg_intf ) |
| 255 | | { |
| 256 | | DEVCB_NULL, // fX/4 |
| 257 | | DEVCB_DEVICE_LINE_MEMBER(I8251_TAG, i8251_device, rxc_w), |
| 258 | | DEVCB_DEVICE_LINE_MEMBER(I8251_TAG, i8251_device, txc_w), |
| 259 | | COM8116_DIVISORS_16X_5_0688MHz, // receiver |
| 260 | | COM8116_DIVISORS_16X_5_0688MHz // transmitter |
| 261 | | }; |
| 262 | | |
| 263 | | |
| 264 | | //------------------------------------------------- |
| 265 | 251 | // rs232_port_interface rs232_intf |
| 266 | 252 | //------------------------------------------------- |
| 267 | 253 | |
| r23591 | r23592 | |
| 289 | 275 | MCFG_I8251_ADD(I8251_TAG, usart_intf) |
| 290 | 276 | MCFG_I8255A_ADD(I8255_0_TAG, ppi0_intf) |
| 291 | 277 | MCFG_I8255A_ADD(I8255_1_TAG, ppi1_intf) |
| 292 | | MCFG_COM8116_ADD(COM8116_TAG, XTAL_5_0688MHz, dbrg_intf) |
| 278 | MCFG_COM8116_ADD(COM8116_TAG, XTAL_5_0688MHz, NULL, DEVWRITELINE(I8251_TAG, i8251_device, rxc_w), DEVWRITELINE(I8251_TAG, i8251_device, txc_w)) |
| 293 | 279 | MCFG_HARDDISK_ADD("harddisk1") |
| 294 | 280 | MCFG_RS232_PORT_ADD(RS232_TAG, rs232_intf, default_rs232_devices, NULL) |
| 295 | 281 | MACHINE_CONFIG_END |