diff options
author | arbee <rb6502@users.noreply.github.com> | 2018-09-18 23:42:12 -0400 |
---|---|---|
committer | arbee <rb6502@users.noreply.github.com> | 2018-09-18 23:42:12 -0400 |
commit | d267335ec759117d15a5963db25e075f63e5b46d (patch) | |
tree | 0c6bc01d920dbe9dfec25aa8c7bfa5433e2ee5a6 | |
parent | 75481df57e9a6fac1675353b841b736ade1a833b (diff) |
sun3: start adding SCSI and Ethernet chips (nw)
-rw-r--r-- | src/mame/drivers/sun3.cpp | 67 |
1 files changed, 66 insertions, 1 deletions
diff --git a/src/mame/drivers/sun3.cpp b/src/mame/drivers/sun3.cpp index 9d9c7ea59a4..4ee1b29217d 100644 --- a/src/mame/drivers/sun3.cpp +++ b/src/mame/drivers/sun3.cpp @@ -187,6 +187,10 @@ fefc34a - start of mem_size, which queries ECC registers for each memory board #include "machine/timekpr.h" #include "machine/timer.h" #include "machine/z80scc.h" +#include "machine/am79c90.h" +#include "machine/ncr5380n.h" +#include "machine/nscsi_cd.h" +#include "machine/nscsi_hd.h" #include "bus/rs232/rs232.h" #include "bus/sunkbd/sunkbd.h" @@ -227,6 +231,8 @@ public: m_maincpu(*this, "maincpu"), m_scc1(*this, SCC1_TAG), m_scc2(*this, SCC2_TAG), + m_scsibus(*this, "scsibus"), + m_scsi(*this, "scsibus:7:ncr5380"), m_p_ram(*this, "p_ram"), m_bw2_vram(*this, "bw2_vram"), m_type0space(*this, "type0"), @@ -235,7 +241,8 @@ public: m_type3space(*this, "type3"), m_rom(*this, "user1"), m_idprom(*this, "idprom"), - m_ram(*this, RAM_TAG) + m_ram(*this, RAM_TAG), + m_lance(*this, "lance") { } void sun3(machine_config &config); @@ -244,10 +251,15 @@ public: void sun3200(machine_config &config); void sun3_50(machine_config &config); + void ncr5380(device_t *device); + private: required_device<m68020_device> m_maincpu; required_device<z80scc_device> m_scc1; required_device<z80scc_device> m_scc2; + required_device<nscsi_bus_device> m_scsibus; + required_device<ncr5380n_device> m_scsi; + virtual void machine_start() override; virtual void machine_reset() override; @@ -256,6 +268,7 @@ private: optional_device<address_map_bank_device> m_type0space, m_type1space, m_type2space, m_type3space; required_memory_region m_rom, m_idprom; required_device<ram_device> m_ram; + required_device<am79c90_device> m_lance; DECLARE_READ32_MEMBER( tl_mmu_r ); DECLARE_WRITE32_MEMBER( tl_mmu_w ); @@ -297,6 +310,27 @@ private: uint32_t m_cache_tags[0x4000], m_cache_data[0x4000]; }; +static void sun_cdrom(device_t *device) +{ + downcast<nscsi_cdrom_device &>(*device).set_block_size(512); +} + +void sun3_state::ncr5380(device_t *device) +{ + devcb_base *devcb; + (void)devcb; + MCFG_DEVICE_CLOCK(10000000) +// MCFG_NCR5380N_DRQ_HANDLER(WRITELINE(*this, sun3_state, drq_w)) +} + +static void scsi_devices(device_slot_interface &device) +{ + device.option_add("cdrom", NSCSI_CDROM); + device.option_add("harddisk", NSCSI_HARDDISK); + device.option_add_internal("ncr5380", NCR5380N); + device.set_option_machine_config("cdrom", sun_cdrom); +} + READ32_MEMBER( sun3_state::ram_r ) { if (m_ecc[0] == 0x10c00000) @@ -752,6 +786,8 @@ void sun3_state::vmetype1space_map(address_map &map) map(0x00080000, 0x0008000f).rw(FUNC(sun3_state::parity_r), FUNC(sun3_state::parity_w)); map(0x000a0000, 0x000a0003).rw(FUNC(sun3_state::irqctrl_r), FUNC(sun3_state::irqctrl_w)); map(0x00100000, 0x0010ffff).rom().region("user1", 0); + map(0x00120000, 0x00120003).rw(m_lance, FUNC(am79c90_device::regs_r), FUNC(am79c90_device::regs_w)); + map(0x00140000, 0x14000007).rw(m_scsi, FUNC(ncr5380n_device::read), FUNC(ncr5380n_device::write)).umask32(0xffffffff); map(0x001e0000, 0x001e00ff).rw(FUNC(sun3_state::ecc_r), FUNC(sun3_state::ecc_w)); } @@ -1006,6 +1042,7 @@ MACHINE_CONFIG_START(sun3_state::sun3) m_scc1->out_txdb_callback().set(MOUSE_TAG, FUNC(sun_mouse_port_device::write_txd)); SUNKBD_PORT(config, KEYBOARD_TAG, default_sun_keyboard_devices, "type3hle").rxd_handler().set(m_scc1, FUNC(z80scc_device::rxa_w)); + SUNMOUSE_PORT(config, MOUSE_TAG, default_sun_mouse_devices, "hle1200").rxd_handler().set(m_scc1, FUNC(z80scc_device::rxb_w)); SCC8530N(config, m_scc2, 4.9152_MHz_XTAL); @@ -1021,6 +1058,19 @@ MACHINE_CONFIG_START(sun3_state::sun3) MCFG_RS232_RXD_HANDLER(WRITELINE(m_scc2, z80scc_device, rxb_w)) MCFG_RS232_DCD_HANDLER(WRITELINE(m_scc2, z80scc_device, dcdb_w)) MCFG_RS232_CTS_HANDLER(WRITELINE(m_scc2, z80scc_device, ctsb_w)) + + AM79C90(config, m_lance, 10'000'000); // clock is a guess + + MCFG_NSCSI_BUS_ADD("scsibus") + MCFG_NSCSI_ADD("scsibus:0", scsi_devices, nullptr, false) + MCFG_NSCSI_ADD("scsibus:1", scsi_devices, "harddisk", 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, "cdrom", false) + MCFG_NSCSI_ADD("scsibus:7", scsi_devices, "ncr5380", true) + MCFG_SLOT_OPTION_MACHINE_CONFIG("ncr5380", [this] (device_t *device) { ncr5380(device); }) MACHINE_CONFIG_END // Sun 3/60 @@ -1039,6 +1089,7 @@ MACHINE_CONFIG_END // Sun 3/E MACHINE_CONFIG_START(sun3_state::sun3e) sun3(config); + MCFG_DEVICE_REPLACE("maincpu", M68020, 20000000) MCFG_DEVICE_PROGRAM_MAP(sun3_mem) MACHINE_CONFIG_END @@ -1063,6 +1114,8 @@ MACHINE_CONFIG_START(sun3_state::sun3_50) MCFG_DEVICE_ADD("maincpu", M68020, 15700000) MCFG_DEVICE_PROGRAM_MAP(sun3_mem) + AM79C90(config, m_lance, 10'000'000); // clock is a guess + MCFG_SCREEN_ADD("bwtwo", RASTER) MCFG_SCREEN_UPDATE_DRIVER(sun3_state, bw2_350_update) MCFG_SCREEN_SIZE(1600,1100) @@ -1092,6 +1145,7 @@ MACHINE_CONFIG_START(sun3_state::sun3_50) m_scc1->out_txdb_callback().set(MOUSE_TAG, FUNC(sun_mouse_port_device::write_txd)); SUNKBD_PORT(config, KEYBOARD_TAG, default_sun_keyboard_devices, "type3hle").rxd_handler().set(m_scc1, FUNC(z80scc_device::rxa_w)); + SUNMOUSE_PORT(config, MOUSE_TAG, default_sun_mouse_devices, "hle1200").rxd_handler().set(m_scc1, FUNC(z80scc_device::rxb_w)); SCC8530N(config, m_scc2, 4.9152_MHz_XTAL); @@ -1107,6 +1161,17 @@ MACHINE_CONFIG_START(sun3_state::sun3_50) MCFG_RS232_RXD_HANDLER(WRITELINE(m_scc2, z80scc_device, rxb_w)) MCFG_RS232_DCD_HANDLER(WRITELINE(m_scc2, z80scc_device, dcdb_w)) MCFG_RS232_CTS_HANDLER(WRITELINE(m_scc2, z80scc_device, ctsb_w)) + + MCFG_NSCSI_BUS_ADD("scsibus") + MCFG_NSCSI_ADD("scsibus:0", scsi_devices, nullptr, false) + MCFG_NSCSI_ADD("scsibus:1", scsi_devices, "harddisk", 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, "cdrom", false) + MCFG_NSCSI_ADD("scsibus:7", scsi_devices, "ncr5380", true) + MCFG_SLOT_OPTION_MACHINE_CONFIG("ncr5380", [this] (device_t *device) { ncr5380(device); }) MACHINE_CONFIG_END /* ROM definition */ |