trunk/src/mess/drivers/excali64.c
| r242542 | r242543 | |
| 25 | 25 | - The schematic shows the audio counter connected to 2MHz, but this produces |
| 26 | 26 | sounds that are too high. Connected to 1MHz for now. |
| 27 | 27 | - Serial |
| 28 | | - Parallel / Centronics |
| 29 | | - Need more software |
| 30 | 28 | - Pasting can sometimes drop a character. |
| 31 | 29 | |
| 32 | 30 | ****************************************************************************/ |
| r242542 | r242543 | |
| 42 | 40 | //#include "machine/clock.h" |
| 43 | 41 | #include "machine/pit8253.h" |
| 44 | 42 | #include "machine/i8255.h" |
| 45 | | //#include "bus/centronics/ctronics.h" |
| 43 | #include "bus/centronics/ctronics.h" |
| 46 | 44 | #include "imagedev/cassette.h" |
| 47 | 45 | #include "sound/wave.h" |
| 48 | 46 | #include "sound/speaker.h" |
| r242542 | r242543 | |
| 70 | 68 | , m_io_keyboard(*this, "KEY") |
| 71 | 69 | , m_dma(*this, "dma") |
| 72 | 70 | , m_u12(*this, "u12") |
| 71 | , m_centronics(*this, "centronics") |
| 73 | 72 | , m_fdc(*this, "fdc") |
| 74 | 73 | #if NEWFDC |
| 75 | 74 | , m_floppy0(*this, "fdc:0") |
| r242542 | r242543 | |
| 90 | 89 | #if NEWFDC |
| 91 | 90 | DECLARE_FLOPPY_FORMATS(floppy_formats); |
| 92 | 91 | #endif |
| 92 | DECLARE_WRITE_LINE_MEMBER(cent_busy_w); |
| 93 | 93 | DECLARE_WRITE_LINE_MEMBER(busreq_w); |
| 94 | 94 | DECLARE_READ8_MEMBER(memory_read_byte); |
| 95 | 95 | DECLARE_WRITE8_MEMBER(memory_write_byte); |
| r242542 | r242543 | |
| 111 | 111 | bool m_crtc_vs; |
| 112 | 112 | bool m_crtc_hs; |
| 113 | 113 | bool m_motor; |
| 114 | bool m_centronics_busy; |
| 114 | 115 | required_device<cpu_device> m_maincpu; |
| 115 | 116 | required_device<cassette_image_device> m_cass; |
| 116 | 117 | required_device<mc6845_device> m_crtc; |
| 117 | 118 | required_ioport_array<8> m_io_keyboard; |
| 118 | 119 | required_device<z80dma_device> m_dma; |
| 119 | 120 | required_device<ttl74123_device> m_u12; |
| 121 | required_device<centronics_device> m_centronics; |
| 120 | 122 | #if NEWFDC |
| 121 | 123 | required_device<wd2793_t> m_fdc; |
| 122 | 124 | required_device<floppy_connector> m_floppy0; |
| r242542 | r242543 | |
| 239 | 241 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7 &") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&') |
| 240 | 242 | INPUT_PORTS_END |
| 241 | 243 | |
| 244 | WRITE_LINE_MEMBER( excali64_state::cent_busy_w ) |
| 245 | { |
| 246 | m_centronics_busy = state; |
| 247 | } |
| 248 | |
| 242 | 249 | #if NEWFDC |
| 243 | 250 | FLOPPY_FORMATS_MEMBER( excali64_state::floppy_formats ) |
| 244 | 251 | FLOPPY_EXCALI64_FORMAT |
| r242542 | r242543 | |
| 365 | 372 | |
| 366 | 373 | READ8_MEMBER( excali64_state::ppic_r ) |
| 367 | 374 | { |
| 368 | | UINT8 data = 0xf7; |
| 375 | UINT8 data = 0xf4; // READY line must be low to print |
| 376 | data |= (UINT8)m_centronics_busy; |
| 369 | 377 | data |= (m_cass->input() > 0.1) << 3; |
| 370 | 378 | return data; |
| 371 | 379 | } |
| r242542 | r242543 | |
| 373 | 381 | WRITE8_MEMBER( excali64_state::ppic_w ) |
| 374 | 382 | { |
| 375 | 383 | m_cass->output(BIT(data, 7) ? -1.0 : +1.0); |
| 384 | m_centronics->write_strobe(BIT(data, 4)); |
| 376 | 385 | } |
| 377 | 386 | |
| 378 | 387 | READ8_MEMBER( excali64_state::port00_r ) |
| r242542 | r242543 | |
| 607 | 616 | MCFG_DEVICE_ADD("pit", PIT8253, 0) |
| 608 | 617 | MCFG_PIT8253_CLK0(XTAL_16MHz / 16) /* Timer 0: tone gen for speaker */ |
| 609 | 618 | MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("speaker", speaker_sound_device, level_w)) |
| 610 | | MCFG_PIT8253_CLK1(XTAL_16MHz / 8) /* Timer 1: baud rate gen for 8251 */ |
| 619 | //MCFG_PIT8253_CLK1(XTAL_16MHz / 16) /* Timer 1: baud rate gen for 8251 */ |
| 611 | 620 | //MCFG_PIT8253_OUT1_HANDLER(WRITELINE(excali64_state, write_uart_clock)) |
| 612 | | //MCFG_PIT8253_CLK2(XTAL_16MHz / 8) /* Timer 2: not used */ |
| 621 | //MCFG_PIT8253_CLK2(XTAL_16MHz / 16) /* Timer 2: not used */ |
| 613 | 622 | |
| 614 | 623 | MCFG_DEVICE_ADD("ppi", I8255A, 0 ) |
| 615 | | //MCFG_I8255_IN_PORTA_CB(READ8(excali64_state, ppia_r)) |
| 616 | | //MCFG_I8255_OUT_PORTA_CB(WRITE8(excali64_state, ppia_w)) // parallel port |
| 617 | | //MCFG_I8255_IN_PORTB_CB(READ8(excali64_state, ppib_r)) |
| 624 | MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("cent_data_out", output_latch_device, write)) // parallel port |
| 618 | 625 | MCFG_I8255_OUT_PORTB_CB(WRITE8(excali64_state, ppib_w)) |
| 619 | 626 | MCFG_I8255_IN_PORTC_CB(READ8(excali64_state, ppic_r)) |
| 620 | 627 | MCFG_I8255_OUT_PORTC_CB(WRITE8(excali64_state, ppic_w)) |
| r242542 | r242543 | |
| 672 | 679 | MCFG_TTL74123_B_PIN_VALUE(1) /* B pin - driven by port e4 bit 5 */ |
| 673 | 680 | MCFG_TTL74123_CLEAR_PIN_VALUE(1) /* Clear pin - pulled high */ |
| 674 | 681 | MCFG_TTL74123_OUTPUT_CHANGED_CB(WRITE8(excali64_state, motor_w)) |
| 682 | |
| 683 | MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer") |
| 684 | MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics") |
| 685 | MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(excali64_state, cent_busy_w)) |
| 675 | 686 | MACHINE_CONFIG_END |
| 676 | 687 | |
| 677 | 688 | /* ROM definition */ |
| r242542 | r242543 | |
| 696 | 707 | /* Driver */ |
| 697 | 708 | |
| 698 | 709 | /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ |
| 699 | | COMP( 1984, excali64, 0, 0, excali64, excali64, driver_device, 0, "BGR Computers", "Excalibur 64", GAME_NOT_WORKING ) |
| 710 | COMP( 1984, excali64, 0, 0, excali64, excali64, driver_device, 0, "BGR Computers", "Excalibur 64", 0 ) |