trunk/src/mess/drivers/excali64.c
| r242265 | r242266 | |
| 11 | 11 | ****************************************************************************/ |
| 12 | 12 | |
| 13 | 13 | #include "emu.h" |
| 14 | | //#include "bus/rs232/rs232.h" |
| 15 | 14 | #include "cpu/z80/z80.h" |
| 16 | | //#include "machine/6850acia.h" |
| 15 | #include "machine/i8251.h" |
| 16 | #include "bus/rs232/rs232.h" |
| 17 | 17 | //#include "machine/clock.h" |
| 18 | #include "machine/pit8253.h" |
| 19 | #include "machine/i8255.h" |
| 18 | 20 | //#include "bus/centronics/ctronics.h" |
| 21 | #include "imagedev/cassette.h" |
| 22 | #include "sound/wave.h" |
| 23 | #include "sound/speaker.h" |
| 19 | 24 | |
| 20 | 25 | |
| 21 | 26 | class excali64_state : public driver_device |
| r242265 | r242266 | |
| 24 | 29 | excali64_state(const machine_config &mconfig, device_type type, const char *tag) |
| 25 | 30 | : driver_device(mconfig, type, tag) |
| 26 | 31 | , m_maincpu(*this, "maincpu") |
| 32 | , m_cass(*this, "cassette") |
| 27 | 33 | { } |
| 28 | 34 | |
| 35 | DECLARE_READ8_MEMBER(ppic_r); |
| 36 | DECLARE_WRITE8_MEMBER(ppic_w); |
| 37 | DECLARE_READ8_MEMBER(port50_r); |
| 38 | DECLARE_WRITE8_MEMBER(port70_w); |
| 39 | |
| 29 | 40 | private: |
| 41 | UINT8 m_sys_status; |
| 30 | 42 | required_device<cpu_device> m_maincpu; |
| 43 | required_device<cassette_image_device> m_cass; |
| 31 | 44 | }; |
| 32 | 45 | |
| 33 | 46 | static ADDRESS_MAP_START(excali64_mem, AS_PROGRAM, 8, excali64_state) |
| r242265 | r242266 | |
| 36 | 49 | ADDRESS_MAP_END |
| 37 | 50 | |
| 38 | 51 | static ADDRESS_MAP_START(excali64_io, AS_IO, 8, excali64_state) |
| 39 | | ADDRESS_MAP_GLOBAL_MASK(0x7f) |
| 52 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 53 | AM_RANGE(0x10, 0x10) AM_MIRROR(0x0e) AM_DEVREADWRITE("uart",i8251_device, data_r, data_w) |
| 54 | AM_RANGE(0x11, 0x11) AM_MIRROR(0x0e) AM_DEVREADWRITE("uart", i8251_device, status_r, control_w) |
| 55 | AM_RANGE(0x20, 0x23) AM_MIRROR(0x0c) AM_DEVREADWRITE("pit", pit8253_device, read, write) |
| 56 | AM_RANGE(0x60, 0x63) AM_MIRROR(0x0c) AM_DEVREADWRITE("ppi", i8255_device, read, write) |
| 40 | 57 | ADDRESS_MAP_END |
| 41 | 58 | |
| 42 | 59 | |
| r242265 | r242266 | |
| 44 | 61 | static INPUT_PORTS_START( excali64 ) |
| 45 | 62 | INPUT_PORTS_END |
| 46 | 63 | |
| 64 | READ8_MEMBER( excali64_state::ppic_r ) |
| 65 | { |
| 66 | UINT8 data = 0xf7; |
| 67 | data |= (m_cass->input() > 0.1) << 3; |
| 68 | return data; |
| 69 | } |
| 47 | 70 | |
| 71 | /* |
| 72 | d0 : /rom ; screen |
| 73 | d1 : ram on |
| 74 | d2 : /low ; high res |
| 75 | d3 : dispen |
| 76 | d4 : vsync |
| 77 | */ |
| 78 | READ8_MEMBER( excali64_state::port50_r ) |
| 79 | { |
| 80 | UINT8 data = m_sys_status & 7; |
| 81 | return data; |
| 82 | } |
| 83 | |
| 84 | WRITE8_MEMBER( excali64_state::ppic_w ) |
| 85 | { |
| 86 | m_cass->output(BIT(data, 7) ? -1.0 : +1.0); |
| 87 | } |
| 88 | |
| 89 | /* |
| 90 | d0,1,2 : same as port50 |
| 91 | d7 : 2nd col |
| 92 | */ |
| 93 | WRITE8_MEMBER( excali64_state::port70_w ) |
| 94 | { |
| 95 | m_sys_status = data; |
| 96 | } |
| 97 | |
| 48 | 98 | static MACHINE_CONFIG_START( excali64, excali64_state ) |
| 49 | 99 | /* basic machine hardware */ |
| 50 | 100 | MCFG_CPU_ADD("maincpu", Z80, XTAL_16MHz / 4) |
| 51 | 101 | MCFG_CPU_PROGRAM_MAP(excali64_mem) |
| 52 | 102 | MCFG_CPU_IO_MAP(excali64_io) |
| 53 | 103 | |
| 54 | | //MCFG_DEVICE_ADD("acia", ACIA6850, 0) |
| 55 | | //MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_txd)) |
| 56 | | //MCFG_ACIA6850_RTS_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_rts)) |
| 104 | MCFG_DEVICE_ADD("uart", I8251, 0) |
| 105 | //MCFG_I8251_TXD_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_txd)) |
| 106 | //MCFG_I8251_RTS_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_rts)) |
| 57 | 107 | |
| 58 | | //MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal") |
| 59 | | //MCFG_RS232_RXD_HANDLER(DEVWRITELINE("acia", acia6850_device, write_rxd)) |
| 60 | | //MCFG_RS232_CTS_HANDLER(DEVWRITELINE("acia", acia6850_device, write_cts)) |
| 108 | MCFG_DEVICE_ADD("pit", PIT8253, 0) |
| 109 | MCFG_PIT8253_CLK0(XTAL_16MHz / 8) /* Timer 0: tone gen for speaker */ |
| 110 | MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("speaker", speaker_sound_device, level_w)) |
| 111 | MCFG_PIT8253_CLK1(XTAL_16MHz / 8) /* Timer 1: baud rate gen for 8251 */ |
| 112 | //MCFG_PIT8253_OUT1_HANDLER(WRITELINE(excali64_state, write_uart_clock)) |
| 113 | //MCFG_PIT8253_CLK2(XTAL_16MHz / 8) /* Timer 2: not used */ |
| 61 | 114 | |
| 115 | MCFG_DEVICE_ADD("ppi", I8255A, 0 ) |
| 116 | //MCFG_I8255_IN_PORTA_CB(READ8(excali64_state, ppia_r)) |
| 117 | //MCFG_I8255_OUT_PORTA_CB(WRITE8(excali64_state, ppia_w)) |
| 118 | //MCFG_I8255_IN_PORTB_CB(READ8(excali64_state, ppib_r)) |
| 119 | //MCFG_I8255_OUT_PORTB_CB(WRITE8(excali64_state, ppib_w)) |
| 120 | MCFG_I8255_IN_PORTC_CB(READ8(excali64_state, ppic_r)) |
| 121 | MCFG_I8255_OUT_PORTC_CB(WRITE8(excali64_state, ppic_w)) |
| 122 | |
| 62 | 123 | //MCFG_DEVICE_ADD("acia_clock", CLOCK, 153600) |
| 63 | 124 | //MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(excali64_state, write_acia_clock)) |
| 64 | | MACHINE_CONFIG_END |
| 65 | 125 | |
| 126 | /* sound hardware */ |
| 127 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 128 | MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) |
| 129 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) |
| 130 | MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette") |
| 131 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) |
| 132 | |
| 133 | /* Devices */ |
| 134 | MCFG_CASSETTE_ADD( "cassette" ) |
| 135 | MACHINE_CONFIG_END |
| 136 | |
| 66 | 137 | /* ROM definition */ |
| 67 | 138 | ROM_START( excali64 ) |
| 68 | 139 | ROM_REGION(0x10000, "maincpu", 0) |