trunk/src/mess/includes/super6.h
| r19069 | r19070 | |
| 3 | 3 | #ifndef __SUPER6__ |
| 4 | 4 | #define __SUPER6__ |
| 5 | 5 | |
| 6 | | |
| 7 | 6 | #include "emu.h" |
| 8 | 7 | #include "cpu/z80/z80.h" |
| 9 | 8 | #include "cpu/z80/z80daisy.h" |
| 10 | | #include "formats/basicdsk.h" |
| 9 | #include "formats/hxcmfm_dsk.h" |
| 10 | #include "formats/imd_dsk.h" |
| 11 | #include "formats/mfi_dsk.h" |
| 11 | 12 | #include "imagedev/flopdrv.h" |
| 12 | 13 | #include "machine/com8116.h" |
| 13 | 14 | #include "machine/z80ctc.h" |
| r19069 | r19070 | |
| 16 | 17 | #include "machine/z80pio.h" |
| 17 | 18 | #include "machine/ram.h" |
| 18 | 19 | #include "machine/terminal.h" |
| 19 | | #include "machine/wd17xx.h" |
| 20 | #include "machine/wd1772.h" |
| 20 | 21 | |
| 21 | 22 | #define Z80_TAG "u30" |
| 22 | 23 | #define Z80CTC_TAG "u20" |
| r19069 | r19070 | |
| 41 | 42 | m_fdc(*this, WD2793_TAG), |
| 42 | 43 | m_brg(*this, BR1945_TAG), |
| 43 | 44 | m_ram(*this, RAM_TAG), |
| 44 | | m_floppy0(*this, FLOPPY_0), |
| 45 | | m_floppy1(*this, FLOPPY_1), |
| 45 | m_floppy0(*this, WD2793_TAG":0"), |
| 46 | m_floppy1(*this, WD2793_TAG":1"), |
| 46 | 47 | m_terminal(*this, TERMINAL_TAG) |
| 47 | 48 | { } |
| 48 | 49 | |
| r19069 | r19070 | |
| 51 | 52 | required_device<z80dart_device> m_dart; |
| 52 | 53 | required_device<z80dma_device> m_dma; |
| 53 | 54 | required_device<z80pio_device> m_pio; |
| 54 | | required_device<device_t> m_fdc; |
| 55 | required_device<wd2793_t> m_fdc; |
| 55 | 56 | required_device<com8116_device> m_brg; |
| 56 | 57 | required_device<ram_device> m_ram; |
| 57 | | required_device<device_t> m_floppy0; |
| 58 | | required_device<device_t> m_floppy1; |
| 58 | required_device<floppy_connector> m_floppy0; |
| 59 | required_device<floppy_connector> m_floppy1; |
| 59 | 60 | required_device<serial_terminal_device> m_terminal; |
| 60 | 61 | |
| 61 | 62 | virtual void machine_start(); |
| r19069 | r19070 | |
| 68 | 69 | DECLARE_WRITE8_MEMBER( bank1_w ); |
| 69 | 70 | DECLARE_WRITE8_MEMBER( baud_w ); |
| 70 | 71 | DECLARE_WRITE_LINE_MEMBER( fr_w ); |
| 71 | | DECLARE_WRITE_LINE_MEMBER( intrq_w ); |
| 72 | | DECLARE_WRITE_LINE_MEMBER( drq_w ); |
| 72 | void fdc_intrq_w(bool state); |
| 73 | void fdc_drq_w(bool state); |
| 74 | static const floppy_format_type floppy_formats[]; |
| 73 | 75 | |
| 74 | 76 | void bankswitch(); |
| 75 | 77 | |
trunk/src/mess/drivers/super6.c
| r19069 | r19070 | |
| 1 | 1 | /* |
| 2 | 2 | |
| 3 | | ADC Super Six SBC |
| 4 | | |
| 5 | | Skeleton driver |
| 6 | | |
| 7 | | */ |
| 8 | | |
| 9 | | /* |
| 10 | | |
| 11 | 3 | TODO: |
| 12 | 4 | |
| 13 | 5 | - floppy (cannot be implemented currently since this is another case of halting the cpu mid-instruction) |
| r19069 | r19070 | |
| 199 | 191 | |
| 200 | 192 | m_maincpu->set_input_line(Z80_INPUT_LINE_WAIT, ASSERT_LINE); |
| 201 | 193 | |
| 202 | | return !wd17xx_intrq_r(m_fdc) << 7; |
| 194 | return !m_fdc->intrq_r() << 7; |
| 203 | 195 | } |
| 204 | 196 | |
| 205 | 197 | |
| r19069 | r19070 | |
| 225 | 217 | */ |
| 226 | 218 | |
| 227 | 219 | // disk drive select |
| 228 | | wd17xx_set_drive(m_fdc, data & 0x03); |
| 229 | | floppy_mon_w(m_floppy0, 0); |
| 230 | | floppy_mon_w(m_floppy1, 0); |
| 220 | floppy_image_device *m_floppy = NULL; |
| 231 | 221 | |
| 222 | if (BIT(data, 0)) m_floppy = m_floppy0->get_device(); |
| 223 | if (BIT(data, 1)) m_floppy = m_floppy1->get_device(); |
| 224 | |
| 225 | m_fdc->set_floppy(m_floppy); |
| 226 | if (m_floppy) m_floppy->mon_w(0); |
| 227 | |
| 232 | 228 | // head select |
| 233 | | wd17xx_set_side(m_fdc, BIT(data, 2)); |
| 229 | if (m_floppy) m_floppy->ss_w(BIT(data, 2)); |
| 234 | 230 | |
| 235 | 231 | // disk density |
| 236 | | wd17xx_dden_w(m_fdc, !BIT(data, 3)); |
| 232 | m_fdc->dden_w(!BIT(data, 3)); |
| 237 | 233 | } |
| 238 | 234 | |
| 239 | 235 | |
| r19069 | r19070 | |
| 285 | 281 | AM_RANGE(0x00, 0x03) AM_DEVREADWRITE_LEGACY(Z80DART_TAG, z80dart_ba_cd_r, z80dart_ba_cd_w) |
| 286 | 282 | AM_RANGE(0x04, 0x07) AM_DEVREADWRITE(Z80PIO_TAG, z80pio_device, read, write) |
| 287 | 283 | AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE(Z80CTC_TAG, z80ctc_device, read, write) |
| 288 | | AM_RANGE(0x0c, 0x0f) AM_DEVREADWRITE_LEGACY(WD2793_TAG, wd17xx_r, wd17xx_w) |
| 284 | AM_RANGE(0x0c, 0x0f) AM_DEVREADWRITE(WD2793_TAG, wd2793_t, read, write) |
| 289 | 285 | AM_RANGE(0x10, 0x10) AM_MIRROR(0x03) AM_DEVREADWRITE_LEGACY(Z80DMA_TAG, z80dma_r, z80dma_w) |
| 290 | 286 | AM_RANGE(0x14, 0x14) AM_READWRITE(fdc_r, fdc_w) |
| 291 | 287 | AM_RANGE(0x15, 0x15) AM_READ_PORT("J7") AM_WRITE(s100_w) |
| r19069 | r19070 | |
| 349 | 345 | // Z80CTC_INTERFACE( ctc_intf ) |
| 350 | 346 | //------------------------------------------------- |
| 351 | 347 | |
| 352 | | TIMER_DEVICE_CALLBACK_MEMBER(super6_state::ctc_tick) |
| 348 | TIMER_DEVICE_CALLBACK_MEMBER( super6_state::ctc_tick ) |
| 353 | 349 | { |
| 354 | 350 | m_ctc->trg0(1); |
| 355 | 351 | m_ctc->trg0(0); |
| r19069 | r19070 | |
| 448 | 444 | |
| 449 | 445 | |
| 450 | 446 | //------------------------------------------------- |
| 451 | | // floppy_interface super6_floppy_interface |
| 447 | // floppy_format_type floppy_formats |
| 452 | 448 | //------------------------------------------------- |
| 453 | 449 | |
| 454 | | static const floppy_interface super6_floppy_interface = |
| 455 | | { |
| 456 | | DEVCB_NULL, |
| 457 | | DEVCB_NULL, |
| 458 | | DEVCB_NULL, |
| 459 | | DEVCB_NULL, |
| 460 | | DEVCB_NULL, |
| 461 | | FLOPPY_STANDARD_5_25_DSHD, |
| 462 | | LEGACY_FLOPPY_OPTIONS_NAME(default), |
| 463 | | "floppy_5_25", |
| 450 | const floppy_format_type super6_state::floppy_formats[] = { |
| 451 | FLOPPY_IMD_FORMAT, |
| 452 | FLOPPY_MFM_FORMAT, |
| 453 | FLOPPY_MFI_FORMAT, |
| 464 | 454 | NULL |
| 465 | 455 | }; |
| 466 | 456 | |
| 457 | static SLOT_INTERFACE_START( super6_floppies ) |
| 458 | SLOT_INTERFACE( "525dd", FLOPPY_525_DD ) |
| 459 | SLOT_INTERFACE_END |
| 467 | 460 | |
| 468 | | //------------------------------------------------- |
| 469 | | // wd17xx_interface fdc_intf |
| 470 | | //------------------------------------------------- |
| 471 | | |
| 472 | | WRITE_LINE_MEMBER( super6_state::intrq_w ) |
| 461 | void super6_state::fdc_intrq_w(bool state) |
| 473 | 462 | { |
| 474 | 463 | if (state) m_maincpu->set_input_line(Z80_INPUT_LINE_WAIT, CLEAR_LINE); |
| 475 | 464 | |
| 476 | 465 | m_ctc->trg3(!state); |
| 477 | 466 | } |
| 478 | 467 | |
| 479 | | WRITE_LINE_MEMBER( super6_state::drq_w ) |
| 468 | void super6_state::fdc_drq_w(bool state) |
| 480 | 469 | { |
| 481 | 470 | if (state) m_maincpu->set_input_line(Z80_INPUT_LINE_WAIT, CLEAR_LINE); |
| 482 | 471 | |
| 483 | 472 | m_dma->rdy_w(state); |
| 484 | 473 | } |
| 485 | 474 | |
| 486 | | static const wd17xx_interface fdc_intf = |
| 487 | | { |
| 488 | | DEVCB_NULL, |
| 489 | | DEVCB_DRIVER_LINE_MEMBER(super6_state, intrq_w), |
| 490 | | DEVCB_DRIVER_LINE_MEMBER(super6_state, drq_w), |
| 491 | | { FLOPPY_0, FLOPPY_1, NULL, NULL } |
| 492 | | }; |
| 493 | 475 | |
| 494 | | |
| 495 | 476 | //------------------------------------------------- |
| 496 | 477 | // z80_daisy_config super6_daisy_chain |
| 497 | 478 | //------------------------------------------------- |
| r19069 | r19070 | |
| 509 | 490 | // GENERIC_TERMINAL_INTERFACE( terminal_intf ) |
| 510 | 491 | //------------------------------------------------- |
| 511 | 492 | |
| 512 | | WRITE8_MEMBER(super6_state::dummy_w) |
| 493 | WRITE8_MEMBER( super6_state::dummy_w ) |
| 513 | 494 | { |
| 514 | 495 | // handled in Z80DART_INTERFACE |
| 515 | 496 | } |
| 516 | 497 | |
| 517 | 498 | static GENERIC_TERMINAL_INTERFACE( terminal_intf ) |
| 518 | 499 | { |
| 519 | | DEVCB_DRIVER_MEMBER(super6_state,dummy_w) |
| 500 | DEVCB_DRIVER_MEMBER(super6_state, dummy_w) |
| 520 | 501 | }; |
| 521 | 502 | |
| 522 | 503 | |
| r19069 | r19070 | |
| 531 | 512 | |
| 532 | 513 | void super6_state::machine_start() |
| 533 | 514 | { |
| 515 | // floppy callbacks |
| 516 | m_fdc->setup_intrq_cb(wd2793_t::line_cb(FUNC(super6_state::fdc_intrq_w), this)); |
| 517 | m_fdc->setup_drq_cb(wd2793_t::line_cb(FUNC(super6_state::fdc_drq_w), this)); |
| 518 | |
| 534 | 519 | // state saving |
| 535 | 520 | save_item(NAME(m_s100)); |
| 536 | 521 | save_item(NAME(m_bank0)); |
| r19069 | r19070 | |
| 572 | 557 | MCFG_Z80DART_ADD(Z80DART_TAG, XTAL_24MHz/4, dart_intf) |
| 573 | 558 | MCFG_Z80DMA_ADD(Z80DMA_TAG, XTAL_24MHz/6, dma_intf) |
| 574 | 559 | MCFG_Z80PIO_ADD(Z80PIO_TAG, XTAL_24MHz/4, pio_intf) |
| 575 | | MCFG_WD2793_ADD(WD2793_TAG, fdc_intf) |
| 560 | MCFG_WD2793x_ADD(WD2793_TAG, 1000000) |
| 576 | 561 | MCFG_COM8116_ADD(BR1945_TAG, XTAL_5_0688MHz, brg_intf) |
| 577 | | MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(super6_floppy_interface) |
| 562 | MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":0", super6_floppies, "525dd", NULL, super6_state::floppy_formats) |
| 563 | MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":1", super6_floppies, NULL, NULL, super6_state::floppy_formats) |
| 578 | 564 | MCFG_SERIAL_TERMINAL_ADD(TERMINAL_TAG, terminal_intf, 4800) |
| 579 | 565 | |
| 580 | 566 | // internal ram |
| r19069 | r19070 | |
| 597 | 583 | |
| 598 | 584 | ROM_START( super6 ) |
| 599 | 585 | ROM_REGION( 0x800, Z80_TAG, 0 ) |
| 600 | | ROM_LOAD( "digitex monitor 1.2a 6oct1983.u29", 0x000, 0x800, CRC(a4c33ce4) SHA1(46dde43ea51d295f2b3202c2d0e1883bde1a8da7) ) |
| 586 | ROM_DEFAULT_BIOS( "v36" ) |
| 587 | ROM_SYSTEM_BIOS( 0, "v36", "ADC S6 v3.6" ) |
| 588 | ROMX_LOAD( "adcs6_v3.6.u29", 0x000, 0x800, CRC(386fd22a) SHA1(9c177990aa180ab93be9c4641e92ae934627e661), ROM_BIOS(1) ) |
| 589 | ROM_SYSTEM_BIOS( 1, "v12", "Digitex Monitor v1.2a" ) |
| 590 | ROMX_LOAD( "digitex monitor 1.2a 6oct1983.u29", 0x000, 0x800, CRC(a4c33ce4) SHA1(46dde43ea51d295f2b3202c2d0e1883bde1a8da7), ROM_BIOS(2) ) |
| 601 | 591 | |
| 602 | 592 | ROM_REGION( 0x800, "plds", 0 ) |
| 603 | 593 | ROM_LOAD( "pal16l8.u16", 0x000, 0x800, NO_DUMP ) |