diff --git a/hash/sun_sparc.xml b/hash/sun_sparc.xml new file mode 100644 index 0000000000000..a5ef0218a1ecc --- /dev/null +++ b/hash/sun_sparc.xml @@ -0,0 +1,93 @@ + + + + + + + + Solaris 8 10-00 Media - SPARC Platform Edition for Sun Computer Systems + 2000 + Sun Microsystems + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sun Management Center 2.1.1 - February 2000 Revision A + 2000 + Sun Microsystems + + + + + + + + + + SunSolutions CD Volume 1 2000 + 2000 + Sun Microsystems + + + + + + + + + + Raptor GFX Open Windows for Solaris - Version 2.1 + 1999 + Tech Source Inc. + + + + + + + + diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index 2f3855e57c121..8f4ed7ba58843 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -5891,6 +5891,8 @@ if (BUSES["PCI"]~=null) then MAME_DIR .. "src/devices/bus/pci/opti82c861.h", MAME_DIR .. "src/devices/bus/pci/pdc20262.cpp", MAME_DIR .. "src/devices/bus/pci/pdc20262.h", + MAME_DIR .. "src/devices/bus/pci/permedia2.cpp", + MAME_DIR .. "src/devices/bus/pci/permedia2.h", MAME_DIR .. "src/devices/bus/pci/promotion.cpp", MAME_DIR .. "src/devices/bus/pci/promotion.h", MAME_DIR .. "src/devices/bus/pci/riva128.cpp", diff --git a/src/devices/bus/pci/pci_slot.cpp b/src/devices/bus/pci/pci_slot.cpp index ae9d42afc63e0..4c105169e97cd 100644 --- a/src/devices/bus/pci/pci_slot.cpp +++ b/src/devices/bus/pci/pci_slot.cpp @@ -19,6 +19,7 @@ #include "opti82c861.h" #include "oti_spitfire.h" #include "pdc20262.h" +#include "permedia2.h" #include "promotion.h" #include "riva128.h" #include "rivatnt.h" @@ -166,6 +167,8 @@ void pci_cards(device_slot_interface &device) // assume all natively with class code 03 void agp_cards(device_slot_interface &device) { + // 3Dlabs + device.option_add("permedia2", PERMEDIA2); // nVidia device.option_add("riva128", RIVA128); device.option_add("riva128zx", RIVA128ZX); diff --git a/src/devices/bus/pci/permedia2.cpp b/src/devices/bus/pci/permedia2.cpp new file mode 100644 index 0000000000000..8966953bc54fb --- /dev/null +++ b/src/devices/bus/pci/permedia2.cpp @@ -0,0 +1,166 @@ +// license:BSD-3-Clause +// copyright-holders: +/************************************************************************************************** + + +**************************************************************************************************/ + +#include "emu.h" +#include "permedia2.h" + +#define LOG_WARN (1U << 1) + +#define VERBOSE (LOG_GENERAL | LOG_WARN) +//#define LOG_OUTPUT_FUNC osd_printf_info +#include "logmacro.h" + +#define LOGWARN(...) LOGMASKED(LOG_WARN, __VA_ARGS__) + + +DEFINE_DEVICE_TYPE(PERMEDIA2, permedia2_device, "permedia2", "3Dlabs Permedia 2") + +permedia2_device::permedia2_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) + : pci_card_device(mconfig, type, tag, owner, clock) + , m_vga(*this, "vga") + , m_vga_rom(*this, "vga_rom") +{ + // TODO: can change class code + set_ids(0x104c3d07, 0x01, 0x030100, 0x104c3d07); +} + +permedia2_device::permedia2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : permedia2_device(mconfig, PERMEDIA2, tag, owner, clock) + +{ +} + +ROM_START( permedia2 ) + ROM_REGION32_LE( 0x20000, "vga_rom", ROMREGION_ERASEFF ) + // TODO: 4 other dumps available on VGALegacyMK3, separate Sun versions to own subclass + ROM_SYSTEM_BIOS( 0, "creative", "03/03/98 Creative Graphics Blaster Exxtreme" ) + ROMX_LOAD( "creative.vbi", 0x00000, 0x08000, CRC(3e622da7) SHA1(b06f89777badfdb7cd4c76b414ba19fcaed243c9), ROM_BIOS(0) ) + // Tech-Source Inc. Raptor GFX + ROM_SYSTEM_BIOS( 1, "sparc_1_60", "18/May/2000 (Rev 1.60) for Solaris SPARC" ) + ROMX_LOAD( "raptor160.u10", 0x00000, 0x20000, CRC(8d6706d5) SHA1(6df6719aa8f46176d837b1b05e90f7e541416b4c), ROM_BIOS(1) ) + // Tech-Source Inc. Raptor GFX // Half-size ROM? + ROM_SYSTEM_BIOS( 2, "sparc_1_11", "07/Jun/1999 (Rev 1.11) for Solaris SPARC" ) + ROMX_LOAD( "raptor111.bin", 0x00000, 0x10000, CRC(ee21d1f4) SHA1(04845a2e0938b9ecd88934c148e637e6f00e2578), ROM_BIOS(2) ) + // Tech-Source Inc. Raptor GFX + ROM_SYSTEM_BIOS( 3, "sparc_1_10", "15/Mar/1999 (Rev 1.10) for Solaris SPARC" ) + ROMX_LOAD( "raptor110.bin", 0x00000, 0x20000, CRC(6a6f4ba4) SHA1(89df1a7bc52693e34b79587c16f2c2efb30bd3f1), ROM_BIOS(3) ) + // Phoenix / 3DLabs generic BIOS for IBM PC Compatible systems + ROM_SYSTEM_BIOS( 4, "pc_99", "25/Feb/1999 for IBM PC Compatible" ) + ROMX_LOAD( "permed2pc.bin", 0x00000, 0x20000, CRC(6711ddf8) SHA1(9f02e4d1a64c42e4a17df8428d8cc9a72e78e0d5), ROM_BIOS(4) ) + +ROM_END + +const tiny_rom_entry *permedia2_device::device_rom_region() const +{ + return ROM_NAME(permedia2); +} + + +void permedia2_device::device_add_mconfig(machine_config &config) +{ + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480); + screen.set_screen_update(m_vga, FUNC(vga_device::screen_update)); + + // TODO: bump to TVP4020 core + VGA(config, m_vga, 0); + m_vga->set_screen("screen"); + // either 4 or 8MB + m_vga->set_vram_size(8*1024*1024); + +} + +void permedia2_device::device_start() +{ + pci_card_device::device_start(); + + add_map( 128*1024, M_MEM, FUNC(permedia2_device::control_map)); + add_map(8*1024*1024, M_MEM, FUNC(permedia2_device::aperture1_map)); + add_map(8*1024*1024, M_MEM, FUNC(permedia2_device::aperture2_map)); + + add_rom((u8 *)m_vga_rom->base(), 128*1024 ); + expansion_rom_base = 0xc0000; + + // INTA# + intr_pin = 1; +} + +void permedia2_device::device_reset() +{ + pci_card_device::device_reset(); + + // TODO: to be checked + command = 0x0000; + command_mask = 0x0027; + status = 0x0000; + + remap_cb(); +} + +u8 permedia2_device::capptr_r() +{ + return 0x40; +} + +void permedia2_device::config_map(address_map &map) +{ + pci_card_device::config_map(map); + map(0x40, 0x43).lr32(NAME([] { return 0x0010'0002; })); + // AGP 1x + SBA + 31 RQ + map(0x44, 0x47).lr32(NAME([] { return 0x1f00'0201; })); + +// map(0xf8, 0xf8) CFGIndirectAddress +// map(0xfc, 0xfc) CFGIndirectData +} + +void permedia2_device::control_map(address_map &map) +{ + +} + +void permedia2_device::aperture1_map(address_map &map) +{ + +} + +void permedia2_device::aperture2_map(address_map &map) +{ + +} + +void permedia2_device::legacy_memory_map(address_map &map) +{ + map(0xa0000, 0xbffff).rw(FUNC(permedia2_device::vram_r), FUNC(permedia2_device::vram_w)); +} + +void permedia2_device::legacy_io_map(address_map &map) +{ + map(0, 0x02f).m(m_vga, FUNC(vga_device::io_map)); +} + +uint8_t permedia2_device::vram_r(offs_t offset) +{ + return downcast(m_vga.target())->mem_r(offset); +} + +void permedia2_device::vram_w(offs_t offset, uint8_t data) +{ + downcast(m_vga.target())->mem_w(offset, data); +} + +void permedia2_device::map_extra(uint64_t memory_window_start, uint64_t memory_window_end, uint64_t memory_offset, address_space *memory_space, + uint64_t io_window_start, uint64_t io_window_end, uint64_t io_offset, address_space *io_space) +{ + if (command & 7) + { + memory_space->install_readwrite_handler(0xa0000, 0xbffff, read8sm_delegate(*this, FUNC(permedia2_device::vram_r)), write8sm_delegate(*this, FUNC(permedia2_device::vram_w))); + + io_space->install_device(0x03b0, 0x03df, *this, &permedia2_device::legacy_io_map); + //memory_space->install_rom(0xc0000, 0xcffff, (void *)expansion_rom); + } +} + diff --git a/src/devices/bus/pci/permedia2.h b/src/devices/bus/pci/permedia2.h new file mode 100644 index 0000000000000..be397bf6131c7 --- /dev/null +++ b/src/devices/bus/pci/permedia2.h @@ -0,0 +1,52 @@ +// license:BSD-3-Clause +// copyright-holders: + +#ifndef MAME_BUS_PCI_PERMEDIA2_H +#define MAME_BUS_PCI_PERMEDIA2_H + +#pragma once + +#include "pci_slot.h" + +#include "video/pc_vga.h" + +class permedia2_device : public pci_card_device +{ +public: + permedia2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + static constexpr feature_type unemulated_features() { return feature::GRAPHICS; } + + void legacy_memory_map(address_map &map) ATTR_COLD; + void legacy_io_map(address_map &map) ATTR_COLD; + +protected: + permedia2_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_add_mconfig(machine_config &config) override; + + virtual const tiny_rom_entry *device_rom_region() const override; + + virtual void map_extra(uint64_t memory_window_start, uint64_t memory_window_end, uint64_t memory_offset, address_space *memory_space, + uint64_t io_window_start, uint64_t io_window_end, uint64_t io_offset, address_space *io_space) override; + + virtual void config_map(address_map &map) override; + + virtual u8 capptr_r() override; +private: + required_device m_vga; + required_memory_region m_vga_rom; + + u8 vram_r(offs_t offset); + void vram_w(offs_t offset, uint8_t data); + + void control_map(address_map &map) ATTR_COLD; + void aperture1_map(address_map &map) ATTR_COLD; + void aperture2_map(address_map &map) ATTR_COLD; +}; + +DECLARE_DEVICE_TYPE(PERMEDIA2, permedia2_device) + +#endif // MAME_BUS_PCI_PERMEDIA2_H diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 6f9c077b69bbe..9f1df1c9f8978 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -44625,6 +44625,9 @@ sothello @source:success/tonton.cpp tonton +@source:sun/e250.cpp +e250 + @source:sun/sun1.cpp sun1 diff --git a/src/mame/sun/e250.cpp b/src/mame/sun/e250.cpp new file mode 100644 index 0000000000000..211d78b6ed899 --- /dev/null +++ b/src/mame/sun/e250.cpp @@ -0,0 +1,104 @@ +// license:BSD-3-Clause +// copyright-holders: + +/*********************************************************************************************************** +Skeleton driver for Sun Microsystems Enterprise 250 Server. + +Hardware info about Enterprise 250 Server: + -Dual 250, 300 or 400 MHz UltraSPARC II with onboard e-cache. + -1-MB external cache per processor with 250-MHz CPU or 2-MB per processor with 300 or 400 MHz CPU. + -16 DIMM slots, four banks of four slots. 128 MB to 2 GB total memory capacity. + -Four full-size slots compliant with PCI specification version 2.1: + One slot operating at 33- or 66-MHz, 32- or 64-bit data bus width, 3.3 volt + Three slots operating at 33 MHz, 32- or 64-bit data bus width, 5 volt + -One 40MB/sec, 68-pin, Ultra SCSI (SCSI-3), 2 channels (synchronous). + -Two RS-232D/RS423 serial ports (DB25). + +Main components found on its main PCB: + -LSI LSA0009 LSI53C876 PCI to Dual Channel SCSI Multifunction Controller. + -Sun Microsystems STP2223BGA (PN 100-4611-05) UPA to PCI Interface. + -Motorola XPC823ZT66B2 RISC Microprocessor, 32-Bit, 66MHz. + -SMSC LAN91C96 Non-PCI Single-Chip Ethernet Controller. + -Synergy SY100E11LEJC. + -Infineon SAB82532N 10 multiprotocol data communication controller with two symmetrical serial channels. + -Sun Microsystems STP2210QFP (PN 100-3988-01) Uniprocessor System Controller (USC). + -National Semiconductor ES0012BG DP83840AVCE-1. + -National Semiconductor NS0052AJ PC87332VLJ SuperI/O III. + -Sun Microsystems STP2003QFP (PN 100-4183-05) LAN Node Controller. + -Sun Microsystems STP2202ABGA (ON 100-4671-02). + -National Semiconductor ES00116AD DP83223V. + -Analog Devices ADM5180JP. + -Motorola MC12439. + +***********************************************************************************************************/ + +#include "emu.h" + +#include "cpu/powerpc/ppc.h" +#include "cpu/sparc/sparc.h" + +#include "machine/pci.h" + +#include "softlist_dev.h" + +#include "sun_fcnc_270_4373_07.h" +//#include "bus/pci/permedia2.h" + + +namespace { + +class e250_state : public driver_device +{ +public: + e250_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_subcpu(*this, "subcpu") + { } + + void e250(machine_config &config); + +private: + required_device m_maincpu; + required_device m_subcpu; +}; + + +static INPUT_PORTS_START(e250) +INPUT_PORTS_END + +void e250_state::e250(machine_config &config) +{ + SPARCV8(config, m_maincpu, 20'000'000); // Actually a UltraSPARC II 250, 300 or 400 MHz + //SPARCV8(config, m_maincpu, 20'000'000); // Actually a UltraSPARC II 250, 300 or 400 MHz (optional 2nd CPU) + + // For management console + MPC8240(config, m_subcpu, XTAL(66'000'000)); // Actually a Motorola XPC823ZT66B2 + + SOFTWARE_LIST(config, "sun_sparc").set_original("sun_sparc"); + + PCI_ROOT(config, "pci", 0); + + // PCI Cards + SUN_FCNC_270_4373_07(config, "sun_fcnc_270_4373_07"); // Sun Microsystems 270-4373-07 Gigabit Fiber Channel Network Card + //PERMEDIA2(config, "permedia2"); // Raptor GFX PCI Video Card +} + + +ROM_START(e250) + ROM_REGION(0x400000, "maincpu", 0) + ROM_LOAD( "525-1718-15_a30250_e28f008sa.u2703", 0x000000, 0x100000, CRC(293ac969) SHA1(88fa0c2607bd68bbb209fc8242efeaba60956daa) ) + + ROM_REGION(0x400000, "subcpu", 0) + ROM_LOAD( "525-1724-08_a29898_e28f008sa.u4401", 0x000000, 0x100000, CRC(567fcc56) SHA1(c6a26b34f61559ec49119eed258666318d551378) ) // VxWorks for management console + + ROM_REGION(0x021000, "nvram", 0) + ROM_LOAD( "525-1726-02_stm48t59y-70p10.u2706", 0x000000, 0x002000, CRC(adc6696f) SHA1(97e4d4709ba739e8adbe5298175d38e826c0321f) ) + + ROM_REGION(0x008000, "seeprom", 0) + ROM_LOAD( "24c02n.u4402", 0x000000, 0x000100, CRC(e98dd85c) SHA1(014e89081945a6c16e1498a2f10604ce64048ae6) ) // Seems to contain passwords +ROM_END + +} // anonymous namespace + +COMP( 1998, e250, 0, 0, e250, e250, e250_state, empty_init, "Sun Microsystems", "Enterprise 250", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) diff --git a/src/mame/sun/sun_fcnc_270_4373_07.cpp b/src/mame/sun/sun_fcnc_270_4373_07.cpp new file mode 100644 index 0000000000000..d8c9dc1aaf37a --- /dev/null +++ b/src/mame/sun/sun_fcnc_270_4373_07.cpp @@ -0,0 +1,42 @@ +// license:BSD-3-Clause +// copyright-holders: + +/******************************************************************************************* + + Skeleton device for Sun Microsystems 270-4373-07 Fiber Channel Network Card. + Main components: + -Agilent HDMP-1646A. + -125 MHz xtal. + -Sun Microsystems 100-5234-03 SME2005PBGAC. + -LT1587. + -Infineon V23826-K305-C13. + +*******************************************************************************************/ + +#include "emu.h" +#include "sun_fcnc_270_4373_07.h" + +DEFINE_DEVICE_TYPE(SUN_FCNC_270_4373_07, sun_fcnc_270_4373_07_device, "sun_fcnc_270_4373_07", "Sun Microsystems 270-4373-07 Gigabit Fiber Channel Network Card") + +sun_fcnc_270_4373_07_device::sun_fcnc_270_4373_07_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, SUN_FCNC_270_4373_07, tag, owner, clock) +{ +} + +void sun_fcnc_270_4373_07_device::device_start() +{ +} + +void sun_fcnc_270_4373_07_device::device_add_mconfig(machine_config &config) +{ +} + +ROM_START(sun_fcnc_270_4373_07) + ROM_REGION(0x10000, "bios", 0) + ROM_LOAD("517543-ee17c8_at29c512.u0901", 0x00000, 0x10000, CRC(d0797304) SHA1(b22046b8b574acf7818ebb00dc8d78c04c170ac0)) // 1.7.0, 22-Jun-1998 +ROM_END + +const tiny_rom_entry *sun_fcnc_270_4373_07_device::device_rom_region() const +{ + return ROM_NAME(sun_fcnc_270_4373_07); +} diff --git a/src/mame/sun/sun_fcnc_270_4373_07.h b/src/mame/sun/sun_fcnc_270_4373_07.h new file mode 100644 index 0000000000000..544585d98378d --- /dev/null +++ b/src/mame/sun/sun_fcnc_270_4373_07.h @@ -0,0 +1,23 @@ +// license:BSD-3-Clause +// copyright-holders: + +#ifndef MAME_SUN_SUN_FCNC_270_4373_07_H +#define MAME_SUN_SUN_FCNC_270_4373_07_H + +#pragma once + +class sun_fcnc_270_4373_07_device : public device_t +{ +public: + sun_fcnc_270_4373_07_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0); + void sun_fcnc_270_4373_07(machine_config &config) ATTR_COLD; + +protected: + virtual void device_start() override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; +}; + +DECLARE_DEVICE_TYPE(SUN_FCNC_270_4373_07, sun_fcnc_270_4373_07_device) + +#endif // MAME_SUN_SUN_FCNC_270_4373_07_H