summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Robbbert <Robbbert@users.noreply.github.com>2016-07-30 00:40:18 +1000
committer Robbbert <Robbbert@users.noreply.github.com>2016-07-30 00:40:18 +1000
commit4bee2c4f1f76dbea55bf03b9e3f4f95860ed8411 (patch)
tree38bc2e97dedf3ed101e66ca592ffe9ea8d643347
parent9171fa4d8f509b559f0a22ea6d4dc69a5da93e37 (diff)
DMAX8000: Added more devices (nw)
-rw-r--r--src/mame/drivers/dmax8000.cpp186
1 files changed, 99 insertions, 87 deletions
diff --git a/src/mame/drivers/dmax8000.cpp b/src/mame/drivers/dmax8000.cpp
index 66a107f7305..ccac1b46b78 100644
--- a/src/mame/drivers/dmax8000.cpp
+++ b/src/mame/drivers/dmax8000.cpp
@@ -13,9 +13,12 @@ There were a bunch of optional extras such as 256kB RAM, numeric coprocessor, RT
ToDo:
-- Everything... there are partial schematics, but there's still a lot of guesswork.
-
+- Parallel port
+- Centronics port
+- AUX serial port
+- FDC/FDD/HD setup - no schematics available of this section, so guessing...
+What there is of the schematic shows no sign of a daisy chain or associated interrupts.
****************************************************************************************************************/
@@ -27,7 +30,9 @@ ToDo:
#include "machine/z80pio.h"
#include "machine/z80dart.h"
#include "machine/z80ctc.h"
-#include "machine/terminal.h"
+#include "machine/mm58274c.h"
+#include "bus/rs232/rs232.h"
+#include "machine/clock.h"
@@ -37,43 +42,66 @@ public:
dmax8000_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
- , m_terminal(*this, "terminal")
+ , m_dart1(*this, "dart1")
+ , m_dart2(*this, "dart2")
+ , m_ctc (*this, "ctc")
, m_fdc(*this, "fdc")
+ , m_floppy0(*this, "fdc:0")
{
}
DECLARE_DRIVER_INIT(dmax8000);
DECLARE_MACHINE_RESET(dmax8000);
- DECLARE_READ8_MEMBER(port80_r);
- DECLARE_READ8_MEMBER(port81_r);
+ DECLARE_WRITE8_MEMBER(port0c_w);
+ DECLARE_WRITE8_MEMBER(port0d_w);
+ DECLARE_WRITE8_MEMBER(port14_w);
DECLARE_WRITE8_MEMBER(port40_w);
- DECLARE_WRITE8_MEMBER(kbd_put);
DECLARE_WRITE_LINE_MEMBER(ctc_z0_w);
- DECLARE_WRITE_LINE_MEMBER(ctc_z1_w);
- DECLARE_WRITE_LINE_MEMBER(ctc_z2_w);
+ WRITE_LINE_MEMBER(fdc_drq_w);
+ WRITE_LINE_MEMBER(clock_w);
+
private:
- UINT8 m_term_data;
required_device<cpu_device> m_maincpu;
- required_device<generic_terminal_device> m_terminal;
+ required_device<z80dart_device> m_dart1;
+ required_device<z80dart_device> m_dart2;
+ required_device<z80ctc_device> m_ctc;
required_device<fd1793_t> m_fdc;
+ required_device<floppy_connector> m_floppy0;
};
-WRITE8_MEMBER( dmax8000_state::port40_w )
+WRITE_LINE_MEMBER( dmax8000_state::fdc_drq_w )
{
- membank("bankr0")->set_entry(BIT(data, 0));
+ if (state) printf("DRQ ");
+}
+
+WRITE8_MEMBER( dmax8000_state::port0c_w )
+{
+ printf("Port0c=%X\n", data);
+ m_fdc->dden_w(BIT(data, 6));
+ floppy_image_device *floppy = nullptr;
+ if (BIT(data, 0)) floppy = m_floppy0->get_device();
+ m_fdc->set_floppy(floppy);
+ if (floppy)
+ {
+ floppy->mon_w(0);
+ floppy->ss_w(0); // no idea
+ }
+}
+
+WRITE8_MEMBER( dmax8000_state::port0d_w )
+{
+ printf("Port0d=%X\n", data);
}
-READ8_MEMBER( dmax8000_state::port80_r )
+WRITE8_MEMBER( dmax8000_state::port14_w )
{
- UINT8 ret = m_term_data;
- m_term_data = 0;
- return ret;
+ printf("Port14=%X\n", data);
}
-READ8_MEMBER( dmax8000_state::port81_r )
+WRITE8_MEMBER( dmax8000_state::port40_w )
{
- return (m_term_data) ? 13 : 12;
+ membank("bankr0")->set_entry(BIT(data, 0));
}
static ADDRESS_MAP_START(dmax8000_mem, AS_PROGRAM, 8, dmax8000_state)
@@ -85,58 +113,29 @@ static ADDRESS_MAP_START(dmax8000_io, AS_IO, 8, dmax8000_state)
ADDRESS_MAP_GLOBAL_MASK(0xff)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("fdc", fd1793_t, read, write)
- //AM_RANGE(0x04, 0x07) AM_DEVREADWRITE("dart1", z80dart_device, ba_cd_r, ba_cd_w)
+ AM_RANGE(0x04, 0x07) AM_DEVREADWRITE("dart1", z80dart_device, ba_cd_r, ba_cd_w)
AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE("ctc", z80ctc_device, read, write)
- AM_RANGE(0x0c, 0x0f) AM_DEVREADWRITE("pio1", z80pio_device, read, write)
- AM_RANGE(0x10, 0x13) AM_DEVREADWRITE("pio2", z80pio_device, read, write)
- //AM_RANGE(0x14, 0x17) AM_WRITE(port14_r)
- //AM_RANGE(0x18, 0x19) AM_MIRROR(2) AM_DEVREADWRITE("am9512", am9512_device, read, write) // optional numeric coprocessor
+ AM_RANGE(0x0c, 0x0f) AM_DEVREADWRITE("pio1", z80pio_device, read, write) // fdd controls
+ AM_RANGE(0x10, 0x13) AM_DEVREADWRITE("pio2", z80pio_device, read, write) // centronics & parallel ports
+ AM_RANGE(0x14, 0x17) AM_WRITE(port14_w) // control lines for the centronics & parallel ports
+ //AM_RANGE(0x18, 0x19) AM_MIRROR(2) AM_DEVREADWRITE("am9511", am9512_device, read, write) // optional numeric coprocessor
//AM_RANGE(0x1c, 0x1d) AM_MIRROR(2) // optional hard disk controller (1C=status, 1D=data)
AM_RANGE(0x20, 0x23) AM_DEVREADWRITE("dart2", z80dart_device, ba_cd_r, ba_cd_w)
AM_RANGE(0x40, 0x40) AM_WRITE(port40_w) // memory bank control
//AM_RANGE(0x60, 0x67) // optional IEEE488 GPIB
- //AM_RANGE(0x70, 0x7f) AM_DEVREADWRITE("rtc", mm58274c_device, read, write) // optional RTC
- AM_RANGE(0x04, 0x04) AM_READ(port80_r) AM_DEVWRITE("terminal", generic_terminal_device, write)
- AM_RANGE(0x05, 0x05) AM_READ(port81_r)
+ AM_RANGE(0x70, 0x7f) AM_DEVREADWRITE("rtc", mm58274c_device, read, write) // optional RTC
ADDRESS_MAP_END
/* Input ports */
static INPUT_PORTS_START( dmax8000 )
INPUT_PORTS_END
-/* Z80 Daisy Chain */
-
-// order unknown
-static const z80_daisy_config daisy_chain[] =
-{
- { "pio1" },
- { "pio2" },
- { "dart1" },
- { "dart2" },
- { "ctc" },
- { nullptr }
-};
-
-/* Z80-CTC Interface */
-
-WRITE_LINE_MEMBER( dmax8000_state::ctc_z0_w )
-{
-// guess this generates clock for z80dart
-}
-
-WRITE_LINE_MEMBER( dmax8000_state::ctc_z1_w )
-{
-}
-
-WRITE_LINE_MEMBER( dmax8000_state::ctc_z2_w )
-{
-}
-
-/* after the first 4 bytes have been read from ROM, switch the ram back in */
MACHINE_RESET_MEMBER( dmax8000_state, dmax8000 )
{
membank("bankr0")->set_entry(0); // point at rom
membank("bankw0")->set_entry(0); // always write to ram
+ m_maincpu->reset();
+ m_maincpu->set_input_line_vector(0, 0xee); // fdc vector
}
DRIVER_INIT_MEMBER( dmax8000_state, dmax8000 )
@@ -148,56 +147,69 @@ DRIVER_INIT_MEMBER( dmax8000_state, dmax8000 )
membank("bankw0")->configure_entry(0, &main[0x0000]);
}
-static SLOT_INTERFACE_START( floppies )
- SLOT_INTERFACE( "drive0", FLOPPY_8_DSDD )
-SLOT_INTERFACE_END
+// Baud rate generator. All inputs are 2MHz.
+DECLARE_WRITE_LINE_MEMBER( dmax8000_state::clock_w )
+{
+ m_ctc->trg0(state);
+ m_ctc->trg1(state);
+ m_ctc->trg2(state);
+}
-WRITE8_MEMBER( dmax8000_state::kbd_put )
+WRITE_LINE_MEMBER( dmax8000_state::ctc_z0_w )
{
- m_term_data = data;
+ m_dart1->rxca_w(state);
+ m_dart1->txca_w(state);
+ m_dart2->rxca_w(state);
+ m_dart2->txca_w(state);
}
+static SLOT_INTERFACE_START( floppies )
+ SLOT_INTERFACE( "drive0", FLOPPY_8_DSDD )
+SLOT_INTERFACE_END
+
static MACHINE_CONFIG_START( dmax8000, dmax8000_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_4MHz ) // no idea what crystal is used, but 4MHz clock is confirmed
MCFG_CPU_PROGRAM_MAP(dmax8000_mem)
MCFG_CPU_IO_MAP(dmax8000_io)
- MCFG_Z80_DAISY_CHAIN(daisy_chain)
MCFG_MACHINE_RESET_OVERRIDE(dmax8000_state, dmax8000)
- MCFG_DEVICE_ADD("terminal", GENERIC_TERMINAL, 0)
- MCFG_GENERIC_TERMINAL_KEYBOARD_CB(WRITE8(dmax8000_state, kbd_put))
+ MCFG_DEVICE_ADD("ctc_clock", CLOCK, XTAL_4MHz / 2) // 2MHz
+ MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(dmax8000_state, clock_w))
MCFG_DEVICE_ADD("ctc", Z80CTC, XTAL_4MHz)
- MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
MCFG_Z80CTC_ZC0_CB(WRITELINE(dmax8000_state, ctc_z0_w))
- MCFG_Z80CTC_ZC1_CB(WRITELINE(dmax8000_state, ctc_z1_w))
- MCFG_Z80CTC_ZC2_CB(WRITELINE(dmax8000_state, ctc_z2_w))
-
- MCFG_Z80DART_ADD("dart1", XTAL_4MHz, 0, 0, 0, 0 )
- //MCFG_Z80DART_OUT_TXDA_CB(DEVWRITELINE("rs232", rs232_port_device, write_txd))
- //MCFG_Z80DART_OUT_DTRA_CB(DEVWRITELINE("rs232", rs232_port_device, write_dtr))
- //MCFG_Z80DART_OUT_RTSA_CB(DEVWRITELINE("rs232", rs232_port_device, write_rts))
- MCFG_Z80DART_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
- //MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal")
- //MCFG_RS232_RXD_HANDLER(DEVWRITELINE("uart", z80dart_device, write_rxd))
- //MCFG_RS232_DSR_HANDLER(DEVWRITELINE("uart", z80dart_device, write_dsr))
- //MCFG_RS232_CTS_HANDLER(DEVWRITELINE("uart", z80dart_device, write_cts))
- //MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("terminal", dmax8000 )
-
- MCFG_Z80DART_ADD("dart2", XTAL_4MHz, 0, 0, 0, 0 )
- MCFG_Z80DART_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
+ MCFG_Z80CTC_ZC1_CB(DEVWRITELINE("dart2", z80dart_device, rxtxcb_w))
+ MCFG_Z80CTC_ZC2_CB(DEVWRITELINE("dart1", z80dart_device, rxtxcb_w))
+
+ MCFG_Z80DART_ADD("dart1", XTAL_4MHz, 0, 0, 0, 0 ) // A = terminal; B = aux
+ MCFG_Z80DART_OUT_TXDA_CB(DEVWRITELINE("rs232", rs232_port_device, write_txd))
+ MCFG_Z80DART_OUT_DTRA_CB(DEVWRITELINE("rs232", rs232_port_device, write_dtr))
+ MCFG_Z80DART_OUT_RTSA_CB(DEVWRITELINE("rs232", rs232_port_device, write_rts))
+ MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal")
+ MCFG_RS232_RXD_HANDLER(DEVWRITELINE("dart1", z80dart_device, rxa_w))
+ MCFG_RS232_DCD_HANDLER(DEVWRITELINE("dart1", z80dart_device, dcda_w))
+ MCFG_RS232_RI_HANDLER(DEVWRITELINE("dart1", z80dart_device, ria_w))
+ MCFG_RS232_CTS_HANDLER(DEVWRITELINE("dart1", z80dart_device, ctsa_w))
+
+ MCFG_Z80DART_ADD("dart2", XTAL_4MHz, 0, 0, 0, 0 ) // RS232 ports
MCFG_DEVICE_ADD("pio1", Z80PIO, XTAL_4MHz)
- MCFG_Z80PIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
+ MCFG_Z80PIO_OUT_PA_CB(WRITE8(dmax8000_state, port0c_w))
+ MCFG_Z80PIO_OUT_PB_CB(WRITE8(dmax8000_state, port0d_w))
+
MCFG_DEVICE_ADD("pio2", Z80PIO, XTAL_4MHz)
- MCFG_Z80PIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
- MCFG_FD1793_ADD("fdc", XTAL_2MHz)
- //MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(dmax8000_state, fdc_intrq_w))
- //MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(dmax8000_state, fdc_drq_w))
+ MCFG_FD1793_ADD("fdc", XTAL_2MHz) // no idea
+ MCFG_WD_FDC_INTRQ_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
+ MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(dmax8000_state, fdc_drq_w))
MCFG_FLOPPY_DRIVE_ADD("fdc:0", floppies, "drive0", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_SOUND(true)
+
+ MCFG_DEVICE_ADD("rtc", MM58274C, 0) // MM58174
+ // this is all guess
+ MCFG_MM58274C_MODE24(0) // 12 hour
+ MCFG_MM58274C_DAY1(1) // monday
MACHINE_CONFIG_END
@@ -211,4 +223,4 @@ ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
-COMP( 1981, dmax8000, 0, 0, dmax8000, dmax8000, dmax8000_state, dmax8000, "Datamax", "Datamax 8000", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
+COMP( 1981, dmax8000, 0, 0, dmax8000, dmax8000, dmax8000_state, dmax8000, "Datamax", "Datamax 8000", MACHINE_NOT_WORKING )