From c86d1d1c9ae23abbba56eefbc00dfaeb366819ed Mon Sep 17 00:00:00 2001 From: cracyc Date: Sat, 4 Mar 2017 19:23:09 -0600 Subject: New not working ------------------ Ampro Computers Little Board/186 [Carl, Al Kossow] Out of WN Requires "Monitor Busy" IRQs from the 5380 to read the SCSI HDD. --- scripts/target/mame/mess.lua | 6 ++ src/mame/drivers/lb186.cpp | 155 +++++++++++++++++++++++++++++++++++++++++++ src/mame/mame.lst | 3 + src/mame/mess.flt | 1 + 4 files changed, 165 insertions(+) create mode 100644 src/mame/drivers/lb186.cpp diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index cbca0919f1a..551df68eabe 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -881,6 +881,7 @@ function linkProjects_mame_mess(_target, _subtarget) "altos", "ami", "amiga", + "ampro", "amstrad", "apf", "apollo", @@ -1343,6 +1344,11 @@ files { MAME_DIR .. "src/mame/includes/amiga.h", } +createMESSProjects(_target, _subtarget, "ampro") +files { + MAME_DIR .. "src/mame/drivers/lb186.cpp", +} + createMESSProjects(_target, _subtarget, "amstrad") files { MAME_DIR .. "src/mame/drivers/amstrad.cpp", diff --git a/src/mame/drivers/lb186.cpp b/src/mame/drivers/lb186.cpp new file mode 100644 index 00000000000..30a35f7bfb3 --- /dev/null +++ b/src/mame/drivers/lb186.cpp @@ -0,0 +1,155 @@ +// license:BSD-3-Clause +// copyright-holders:Carl + +#include "emu.h" +#include "cpu/i86/i186.h" +#include "machine/wd_fdc.h" +#include "machine/mc68681.h" +#include "bus/rs232/rs232.h" +#include "machine/nscsi_hd.h" +#include "machine/ncr5380n.h" + +class lb186_state : public driver_device +{ +public: + lb186_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_fdc(*this, "fdc"), + m_scsi(*this, "scsibus:7:ncr5380") + {} + + required_device m_maincpu; + required_device m_fdc; + required_device m_scsi; + + DECLARE_WRITE8_MEMBER(sio_out_w); + DECLARE_WRITE8_MEMBER(drive_sel_w); + DECLARE_READ8_MEMBER(scsi_dack_r); + DECLARE_WRITE8_MEMBER(scsi_dack_w); +}; + +WRITE8_MEMBER(lb186_state::scsi_dack_w) +{ + m_scsi->dma_w(data); +} + +READ8_MEMBER(lb186_state::scsi_dack_r) +{ + return m_scsi->dma_r(); +} + +WRITE8_MEMBER(lb186_state::sio_out_w) +{ + if(!BIT(data, 5)) + m_fdc->soft_reset(); + m_maincpu->tmrin1_w(BIT(data, 3) ? ASSERT_LINE : CLEAR_LINE); +} + +WRITE8_MEMBER(lb186_state::drive_sel_w) +{ + m_fdc->dden_w(BIT(data, 5)); + + floppy_image_device *floppy; + char devname[8]; + unsigned int drive = data & 0xf; + switch(drive) + { + case 0: + return; + case 1: + drive = 0; + break; + case 2: + drive = 1; + break; + case 4: + drive = 2; + break; + case 8: + drive = 3; + break; + default: + logerror("More than one drive enabled!\n"); + return; + } + + sprintf(devname, "%d", drive); + floppy = m_fdc->subdevice(devname)->get_device(); + m_fdc->set_floppy(floppy); + floppy->ss_w(BIT(data, 6)); +} + +static ADDRESS_MAP_START( lb186_map, AS_PROGRAM, 16, lb186_state ) + AM_RANGE(0x00000, 0x3ffff) AM_RAM // fixed 256k for now + AM_RANGE(0xfc000, 0xfffff) AM_ROM AM_REGION("bios", 0) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( lb186_io, AS_IO, 16, lb186_state ) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x1000, 0x101f) AM_DEVREADWRITE8("sc2681", mc68681_device, read, write, 0x00ff) + AM_RANGE(0x1080, 0x108f) AM_DEVREADWRITE8("scsibus:7:ncr5380", ncr5380n_device, read, write, 0x00ff) + AM_RANGE(0x1100, 0x1107) AM_DEVREADWRITE8("fdc", wd1772_t, read, write, 0x00ff) + AM_RANGE(0x1180, 0x1181) AM_READWRITE8(scsi_dack_r, scsi_dack_w, 0x00ff) + AM_RANGE(0x1200, 0x1201) AM_WRITE8(drive_sel_w, 0x00ff) +ADDRESS_MAP_END + +static SLOT_INTERFACE_START( lb186_floppies ) + SLOT_INTERFACE("525dd", FLOPPY_525_DD) + SLOT_INTERFACE("35dd", FLOPPY_35_DD) +SLOT_INTERFACE_END + +static MACHINE_CONFIG_FRAGMENT( ncr5380 ) + MCFG_DEVICE_CLOCK(10000000) + MCFG_NCR5380N_IRQ_HANDLER(DEVWRITELINE(":maincpu", i80186_cpu_device, int1_w)) + MCFG_NCR5380N_DRQ_HANDLER(DEVWRITELINE(":maincpu", i80186_cpu_device, drq0_w)) +MACHINE_CONFIG_END + +static SLOT_INTERFACE_START( scsi_devices ) + SLOT_INTERFACE("harddisk", NSCSI_HARDDISK) + SLOT_INTERFACE_INTERNAL("ncr5380", NCR5380N) +SLOT_INTERFACE_END + +static MACHINE_CONFIG_START( lb186, lb186_state ) + MCFG_CPU_ADD("maincpu", I80186, XTAL_16MHz / 2) + MCFG_CPU_PROGRAM_MAP(lb186_map) + MCFG_CPU_IO_MAP(lb186_io) + + MCFG_MC68681_ADD("sc2681", XTAL_3_6864MHz) + MCFG_MC68681_IRQ_CALLBACK(DEVWRITELINE("maincpu", i80186_cpu_device, int0_w)) + MCFG_MC68681_A_TX_CALLBACK(DEVWRITELINE("rs232_1", rs232_port_device, write_txd)) + MCFG_MC68681_B_TX_CALLBACK(DEVWRITELINE("rs232_2", rs232_port_device, write_txd)) + MCFG_MC68681_OUTPORT_CALLBACK(WRITE8(lb186_state, sio_out_w)) + + MCFG_RS232_PORT_ADD("rs232_1", default_rs232_devices, "terminal") + MCFG_RS232_RXD_HANDLER(DEVWRITELINE("sc2681", mc68681_device, rx_a_w)) + MCFG_RS232_PORT_ADD("rs232_2", default_rs232_devices, nullptr) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE("sc2681", mc68681_device, rx_b_w)) + + MCFG_WD1772_ADD("fdc", XTAL_16MHz/2) + MCFG_WD_FDC_INTRQ_CALLBACK(DEVWRITELINE("maincpu", i80186_cpu_device, int2_w)) + MCFG_WD_FDC_DRQ_CALLBACK(DEVWRITELINE("maincpu", i80186_cpu_device, drq0_w)) + MCFG_FLOPPY_DRIVE_ADD("fdc:0", lb186_floppies, "35dd", floppy_image_device::default_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD("fdc:1", lb186_floppies, nullptr, floppy_image_device::default_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD("fdc:2", lb186_floppies, nullptr, floppy_image_device::default_floppy_formats) + MCFG_FLOPPY_DRIVE_ADD("fdc:3", lb186_floppies, nullptr, floppy_image_device::default_floppy_formats) + + MCFG_NSCSI_BUS_ADD("scsibus") + MCFG_NSCSI_ADD("scsibus:0", scsi_devices, "harddisk", false) + MCFG_NSCSI_ADD("scsibus:1", scsi_devices, nullptr, false) + MCFG_NSCSI_ADD("scsibus:2", scsi_devices, nullptr, false) + MCFG_NSCSI_ADD("scsibus:3", scsi_devices, nullptr, false) + MCFG_NSCSI_ADD("scsibus:4", scsi_devices, nullptr, false) + MCFG_NSCSI_ADD("scsibus:5", scsi_devices, nullptr, false) + MCFG_NSCSI_ADD("scsibus:6", scsi_devices, nullptr, false) + MCFG_NSCSI_ADD("scsibus:7", scsi_devices, "ncr5380", true) + MCFG_DEVICE_CARD_MACHINE_CONFIG("ncr5380", ncr5380) +MACHINE_CONFIG_END + +ROM_START( lb186 ) + ROM_REGION(0x4000, "bios", 0) + ROM_LOAD16_BYTE("a75515_v3.35.rom", 0x0000, 0x2000, CRC(245824fb) SHA1(b39ed91d421513f5912fdbc290aaa3f1b7d4f1e0)) + ROM_LOAD16_BYTE("a75516_v3.35.rom", 0x0001, 0x2000, CRC(9d9a5e22) SHA1(070be31c622f50508e8cbdb797c79978b6a4b8f6)) +ROM_END + +COMP( 1983, lb186, 0, 0, lb186, 0, driver_device, 0, "Ampro Computers", "Little Board/186", MACHINE_NO_SOUND_HW | MACHINE_NOT_WORKING ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index f0545d0e2a5..41f28100984 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -17196,6 +17196,9 @@ bbonk // [1976?] lazercmd // [1976?] medlanes // [1977?] +@source:lb186.cpp +lb186 // Ampro Little Board/186 + @source:lbeach.cpp lbeach // (c) 1979 Olympia / Seletron diff --git a/src/mame/mess.flt b/src/mame/mess.flt index 4bf870195e8..b3db2ce23b2 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -301,6 +301,7 @@ kramermc.cpp kron.cpp kyocera.cpp laser3k.cpp +lb186.cpp lc80.cpp lcmate2.cpp leapster.cpp -- cgit v1.2.3