diff options
author | Robbbert <robbbert@users.noreply.github.com> | 2013-09-03 12:38:25 +0000 |
---|---|---|
committer | Robbbert <robbbert@users.noreply.github.com> | 2013-09-03 12:38:25 +0000 |
commit | 1cd195bd435e14dac4822a274b05fe1aa0bf399b (patch) | |
tree | 49be559b144d70072fc2efb880595362f8c5a6b1 /src/mess/drivers/ampro.c | |
parent | 11a4c2cfbe76c202de94630e21d5aa7dc28813c2 (diff) |
(MESS) ampro : Connected up ctc, dart, and rs232.
Diffstat (limited to 'src/mess/drivers/ampro.c')
-rw-r--r-- | src/mess/drivers/ampro.c | 111 |
1 files changed, 65 insertions, 46 deletions
diff --git a/src/mess/drivers/ampro.c b/src/mess/drivers/ampro.c index e3c0b334c73..7bf2f948fd8 100644 --- a/src/mess/drivers/ampro.c +++ b/src/mess/drivers/ampro.c @@ -16,6 +16,11 @@ of a hard drive of up to 88MB. Status: The system will start up into the monitor, as long as no disk has been mounted. +ToDo: +- Fix fdc so that command 0xc0 works. +- (maybe) add scsi interface +- Add printer + ****************************************************************************/ #include "emu.h" @@ -24,7 +29,7 @@ Status: The system will start up into the monitor, as long as no disk #include "machine/z80ctc.h" #include "machine/z80dart.h" #include "machine/terminal.h" -//#include "machine/serial.h" +#include "machine/serial.h" #include "machine/wd_fdc.h" @@ -34,37 +39,29 @@ public: ampro_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") - , m_terminal(*this, TERMINAL_TAG) + , m_dart(*this, "z80dart") + , m_ctc (*this, "z80ctc") , m_fdc (*this, "fdc") , m_floppy0(*this, "fdc:0") { } DECLARE_DRIVER_INIT(ampro); DECLARE_MACHINE_RESET(ampro); - DECLARE_READ8_MEMBER(port80_r); - DECLARE_READ8_MEMBER(port84_r); + TIMER_DEVICE_CALLBACK_MEMBER(ctc_tick); + DECLARE_WRITE_LINE_MEMBER(ctc_z0_w); DECLARE_WRITE8_MEMBER(port00_w); + DECLARE_READ8_MEMBER(io_r); + DECLARE_WRITE8_MEMBER(io_w); DECLARE_WRITE8_MEMBER(kbd_put); private: UINT8 m_term_data; required_device<cpu_device> m_maincpu; - required_device<generic_terminal_device> m_terminal; + required_device<z80dart_device> m_dart; + required_device<z80ctc_device> m_ctc; required_device<wd1772_t> m_fdc; required_device<floppy_connector> m_floppy0; }; -READ8_MEMBER( ampro_state::port80_r ) -{ - UINT8 ret = m_term_data; - m_term_data = 0; - return ret; -} - -READ8_MEMBER( ampro_state::port84_r ) -{ - return (m_term_data) ? 5 : 4; -} - /* d0..d3 Drive select 0-3 (we only emulate 1 drive) d4 Side select 0=side0 @@ -86,6 +83,22 @@ WRITE8_MEMBER( ampro_state::port00_w ) } } +READ8_MEMBER( ampro_state::io_r ) +{ + if (offset < 0x40) + return m_ctc->read(offset>>4); + else + return m_dart->ba_cd_r(space, offset>>2); +} + +WRITE8_MEMBER( ampro_state::io_w ) +{ + if (offset < 0x40) + m_ctc->write(offset>>4, data); + else + m_dart->ba_cd_w(space, offset>>2, data); +} + static ADDRESS_MAP_START(ampro_mem, AS_PROGRAM, 8, ampro_state) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0x0fff) AM_READ_BANK("bankr0") AM_WRITE_BANK("bankw0") @@ -101,10 +114,7 @@ static ADDRESS_MAP_START(ampro_io, AS_IO, 8, ampro_state) //AM_RANGE(0x20, 0x27) AM_READWRITE() // scsi chip //AM_RANGE(0x28, 0x28) AM_WRITE(port28_w) // scsi control //AM_RANGE(0x29, 0x29) AM_READ(port29_r) // ID port - //AM_RANGE(0x40, 0x7f) AM_READWRITE(ctc device) - //AM_RANGE(0x80, 0x8f) AM_READWRITE(dart device) - AM_RANGE(0x80, 0x80) AM_READ(port80_r) AM_DEVWRITE(TERMINAL_TAG, generic_terminal_device, write) - AM_RANGE(0x84, 0x84) AM_READ(port84_r) + AM_RANGE(0x40, 0x8f) AM_READWRITE(io_r,io_w) AM_RANGE(0xc0, 0xc3) AM_DEVWRITE("fdc", wd1772_t, write) AM_RANGE(0xc4, 0xc7) AM_DEVREAD("fdc", wd1772_t, read) ADDRESS_MAP_END @@ -120,21 +130,19 @@ static Z80DART_INTERFACE( dart_intf ) { 0, 0, 0, 0, - // console#3 - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, + DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, rx), + DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, tx), + DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, dtr_w), + DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, rts_w), DEVCB_NULL, DEVCB_NULL, - // printer - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, + DEVCB_NULL, // ChB in data + DEVCB_NULL, // out data + DEVCB_NULL, // DTR + DEVCB_NULL, // RTS + DEVCB_NULL, // WRDY + DEVCB_NULL, // SYNC DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), DEVCB_NULL, @@ -143,24 +151,38 @@ static Z80DART_INTERFACE( dart_intf ) DEVCB_NULL }; +// Baud rate generator. All inputs are 2MHz. +TIMER_DEVICE_CALLBACK_MEMBER( ampro_state::ctc_tick ) +{ + m_ctc->trg0(1); + m_ctc->trg0(0); + m_ctc->trg1(1); + m_ctc->trg1(0); +} + +WRITE_LINE_MEMBER( ampro_state::ctc_z0_w ) +{ + m_dart->rxca_w(state); + m_dart->txca_w(state); +} + static Z80CTC_INTERFACE( ctc_intf ) { DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0), // interrupt callback - DEVCB_NULL,//DEVCB_DEVICE_LINE_MEMBER("z80sio", z80dart_device, rxtxcb_w), /* ZC/TO0 callback - SIO Ch B */ - DEVCB_NULL,//DEVCB_DRIVER_LINE_MEMBER(altos5_state, ctc_z1_w), /* ZC/TO1 callback - Z80DART Ch A, SIO Ch A */ - DEVCB_NULL//DEVCB_DEVICE_LINE_MEMBER("z80dart", z80dart_device, rxtxcb_w), /* ZC/TO2 callback - Z80DART Ch B */ + DEVCB_DRIVER_LINE_MEMBER(ampro_state, ctc_z0_w), /* ZC/TO0 callback - Z80DART Ch A, SIO Ch A */ + DEVCB_DEVICE_LINE_MEMBER("z80dart", z80dart_device, rxtxcb_w), /* ZC/TO1 callback - SIO Ch B */ + DEVCB_NULL /* ZC/TO2 callback */ }; -#if 0 static const rs232_port_interface rs232_intf = { DEVCB_NULL, - DEVCB_NULL,//DEVCB_DEVICE_LINE_MEMBER("z80sio", z80dart_device, dcdb_w), DEVCB_NULL, - DEVCB_NULL,//DEVCB_DEVICE_LINE_MEMBER("z80sio", z80dart_device, rib_w), - DEVCB_NULL //DEVCB_DEVICE_LINE_MEMBER("z80sio", z80dart_device, ctsb_w) + DEVCB_NULL, + DEVCB_NULL, + DEVCB_NULL }; -#endif + static SLOT_INTERFACE_START( ampro_floppies ) SLOT_INTERFACE( "525dd", FLOPPY_525_DD ) SLOT_INTERFACE_END @@ -202,14 +224,11 @@ static MACHINE_CONFIG_START( ampro, ampro_state ) MCFG_CPU_CONFIG(daisy_chain_intf) MCFG_MACHINE_RESET_OVERRIDE(ampro_state, ampro) - /* video hardware */ - MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf) - /* Devices */ MCFG_Z80CTC_ADD( "z80ctc", XTAL_16MHz / 4, ctc_intf ) MCFG_Z80DART_ADD("z80dart", XTAL_16MHz / 4, dart_intf ) - //MCFG_RS232_PORT_ADD("rs232", rs232_intf, default_rs232_devices, "serial_terminal") - //MCFG_TIMER_DRIVER_ADD_PERIODIC("ctc_tick", altos5_state, ctc_tick, attotime::from_hz(XTAL_16MHz / 4)) + MCFG_RS232_PORT_ADD("rs232", rs232_intf, default_rs232_devices, "serial_terminal") + MCFG_TIMER_DRIVER_ADD_PERIODIC("ctc_tick", ampro_state, ctc_tick, attotime::from_hz(XTAL_16MHz / 8)) MCFG_WD1772x_ADD("fdc", XTAL_16MHz / 16) MCFG_FLOPPY_DRIVE_ADD("fdc:0", ampro_floppies, "525dd", floppy_image_device::default_floppy_formats) MACHINE_CONFIG_END |