From fbf356023c7ac277949e238d789c6ceddc4091c9 Mon Sep 17 00:00:00 2001 From: angelosa Date: Sun, 25 Jun 2023 05:25:28 +0200 Subject: [PATCH] Add nVidia Riva TNT (NV4) misc/ez2d.cpp: repair ez2d2m BIOS from OEM image inside HDD New systems marked not working ------------------------------ Asus CUBX [The Retro Web] --- scripts/src/video.lua | 12 +++++++ src/devices/video/riva128.cpp | 9 +++-- src/devices/video/riva128.h | 7 ++-- src/devices/video/rivatnt.cpp | 67 +++++++++++++++++++++++++++++++++++ src/devices/video/rivatnt.h | 25 +++++++++++++ src/mame/mame.lst | 1 + src/mame/misc/ez2d.cpp | 30 ++++++++++++---- 7 files changed, 140 insertions(+), 11 deletions(-) create mode 100644 src/devices/video/rivatnt.cpp create mode 100644 src/devices/video/rivatnt.h diff --git a/scripts/src/video.lua b/scripts/src/video.lua index eed692d1b99..2010bb4d532 100644 --- a/scripts/src/video.lua +++ b/scripts/src/video.lua @@ -293,6 +293,18 @@ if (VIDEOS["RIVA128"]~=null) then } end +-------------------------------------------------- +-- +--@src/devices/video/rivatnt.h,VIDEOS["RIVATNT"] = true +-------------------------------------------------- + +if (VIDEOS["RIVATNT"]~=null) then + files { + MAME_DIR .. "src/devices/video/rivatnt.cpp", + MAME_DIR .. "src/devices/video/rivatnt.h", + } +end + -------------------------------------------------- -- --@src/devices/video/gf4500.h,VIDEOS["GF4500"] = true diff --git a/src/devices/video/riva128.cpp b/src/devices/video/riva128.cpp index ed8f4cb7744..748c24f5124 100644 --- a/src/devices/video/riva128.cpp +++ b/src/devices/video/riva128.cpp @@ -30,8 +30,8 @@ References: DEFINE_DEVICE_TYPE(RIVA128, riva128_device, "riva128", "SGS-Thompson/nVidia Riva 128 (NV3)") -riva128_device::riva128_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : pci_device(mconfig, RIVA128, tag, owner, clock) +riva128_device::riva128_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) + : pci_device(mconfig, type, tag, owner, clock) , m_svga(*this, "svga") , m_vga_rom(*this, "vga_rom") { @@ -42,6 +42,11 @@ riva128_device::riva128_device(const machine_config &mconfig, const char *tag, d set_ids_agp(0x12d20018, 0x00, 0x10921092); } +riva128_device::riva128_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : riva128_device(mconfig, RIVA128, tag, owner, clock) +{ +} + ROM_START( riva128 ) ROM_REGION32_LE( 0x8000, "vga_rom", ROMREGION_ERASEFF ) ROM_SYSTEM_BIOS( 0, "diamond", "Diamond Viper V330 1.62-CO 01/14/98" ) diff --git a/src/devices/video/riva128.h b/src/devices/video/riva128.h index 9ec1424263a..2d5f8080b9c 100644 --- a/src/devices/video/riva128.h +++ b/src/devices/video/riva128.h @@ -18,6 +18,8 @@ public: void legacy_io_map(address_map &map); protected: + riva128_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; @@ -32,10 +34,12 @@ protected: virtual void mmio_map(address_map &map); virtual void vram_aperture_map(address_map &map); virtual void indirect_io_map(address_map &map); -private: + required_device m_svga; required_memory_region m_vga_rom; + bool m_vga_legacy_enable = false; +private: u8 vram_r(offs_t offset); void vram_w(offs_t offset, uint8_t data); u32 vga_3b0_r(offs_t offset, uint32_t mem_mask = ~0); @@ -48,7 +52,6 @@ private: u32 unmap_log_r(offs_t offset, u32 mem_mask = ~0); void unmap_log_w(offs_t offset, u32 data, u32 mem_mask = ~0); - bool m_vga_legacy_enable = false; u32 m_main_scratchpad_id = 0; }; diff --git a/src/devices/video/rivatnt.cpp b/src/devices/video/rivatnt.cpp new file mode 100644 index 00000000000..5bf1c3f5e4e --- /dev/null +++ b/src/devices/video/rivatnt.cpp @@ -0,0 +1,67 @@ +// license:BSD-3-Clause +// copyright-holders: Angelo Salese +/************************************************************************************************** + +nVidia NV4 TNT + +**************************************************************************************************/ + +#include "emu.h" +#include "rivatnt.h" + +#define LOG_WARN (1U << 1) +#define LOG_TODO (1U << 2) // log unimplemented registers + +#define VERBOSE (LOG_GENERAL | LOG_WARN | LOG_TODO) +//#define LOG_OUTPUT_FUNC osd_printf_info +#include "logmacro.h" + +#define LOGWARN(...) LOGMASKED(LOG_WARN, __VA_ARGS__) +#define LOGTODO(...) LOGMASKED(LOG_TODO, __VA_ARGS__) + + +DEFINE_DEVICE_TYPE(RIVATNT, rivatnt_device, "rivatnt", "nVidia Riva TNT (NV4)") + +rivatnt_device::rivatnt_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : riva128_device(mconfig, RIVATNT, tag, owner, clock) +{ + // device ID 0x10de nVidia + // TODO: revision (A5 for Creative card) + // 0x11021016 for Creative Graphics Blaster RIVATNT + // 0x1092xxxx for Diamond Viper V550 + // 0x10b427xx for STB + set_ids_agp(0x10de0020, 0x00, 0x10de0020); +} + +ROM_START( rivatnt ) + ROM_REGION32_LE( 0x8800, "vga_rom", ROMREGION_ERASEFF ) + ROM_SYSTEM_BIOS( 0, "creative", "Creative Graphics Blaster RIVA TNT (V2.04.6.18)" ) + ROMX_LOAD( "nv4_creative.rom", 0x0000, 0x8000, CRC(fe527a82) SHA1(2bb22bbaa7d2b61bce403f3163197abef85abdaa), ROM_BIOS(0) ) + ROM_SYSTEM_BIOS( 1, "stb", "STB Velocity 4400 (ver. 1.01)" ) + ROMX_LOAD( "nv4_stb_velocity.rom", 0x0000, 0x8000, CRC(d5251dc9) SHA1(eac26ac45e1cdcf020041586fb4216fd8166c2da), ROM_BIOS(1) ) + ROM_SYSTEM_BIOS( 2, "diamondb", "Diamond Viper V550 (Rev B, v1.95e)" ) + ROMX_LOAD( "nv4_diamond_revb.rom", 0x0000, 0x8800, CRC(8d860d99) SHA1(12b183cacc29cf8229da1b84b5f640f2f0722828), ROM_BIOS(2) ) + ROM_SYSTEM_BIOS( 3, "diamonda", "Diamond Viper V550 (Rev A, v1.93e)" ) + ROMX_LOAD( "nv4_diamond_reva.rom", 0x0000, 0x8800, CRC(333ca8e3) SHA1(602ba5812e608bb7275336e9abab4b822f7b1b98), ROM_BIOS(3) ) +ROM_END + +const tiny_rom_entry *rivatnt_device::device_rom_region() const +{ + return ROM_NAME(rivatnt); +} + +// NV4 removes the indirect_io_map from NV3 +void rivatnt_device::device_start() +{ + pci_device::device_start(); + + add_map( 16*1024*1024, M_MEM, FUNC(rivatnt_device::mmio_map)); + add_map(128*1024*1024, M_MEM, FUNC(rivatnt_device::vram_aperture_map)); + + add_rom((u8 *)m_vga_rom->base(), 0x8000); + expansion_rom_base = 0xc0000; + + // INTA# + intr_pin = 1; + save_item(NAME(m_vga_legacy_enable)); +} diff --git a/src/devices/video/rivatnt.h b/src/devices/video/rivatnt.h new file mode 100644 index 00000000000..139fbac85b5 --- /dev/null +++ b/src/devices/video/rivatnt.h @@ -0,0 +1,25 @@ +// license:BSD-3-Clause +// copyright-holders: Angelo Salese + +#ifndef MAME_VIDEO_RIVATNT_H +#define MAME_VIDEO_RIVATNT_H + +#pragma once + +#include "machine/pci.h" +#include "video/pc_vga_nvidia.h" +#include "riva128.h" + +class rivatnt_device : public riva128_device +{ +public: + rivatnt_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + virtual const tiny_rom_entry *device_rom_region() const override; + virtual void device_start() override; +}; + +DECLARE_DEVICE_TYPE(RIVATNT, rivatnt_device) + +#endif diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 0672fa5dd63..a9b81aabca6 100755 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -29472,6 +29472,7 @@ strlink // Strong Link (Ukraine) strlinka // @source:misc/ez2d.cpp +asuscubx // 2000/2001 ASUS ez2d2m // 2001 Amuse World @source:misc/falgas_m89.cpp diff --git a/src/mame/misc/ez2d.cpp b/src/mame/misc/ez2d.cpp index 6e954b85682..60cb1fcc9c1 100644 --- a/src/mame/misc/ez2d.cpp +++ b/src/mame/misc/ez2d.cpp @@ -73,7 +73,7 @@ Ez2DJ series: #include "machine/i82371eb_ide.h" #include "machine/i82371eb_acpi.h" #include "machine/i82371eb_usb.h" -#include "video/riva128.h" +#include "video/rivatnt.h" #include "bus/isa/isa_cards.h" //#include "bus/rs232/hlemouse.h" //#include "bus/rs232/null_modem.h" @@ -93,6 +93,7 @@ public: m_maincpu(*this, "maincpu") { } + void cubx(machine_config &config); void ez2d(machine_config &config); private: @@ -140,7 +141,7 @@ void ez2d_state::winbond_superio_config(device_t *device) // fdc.nrts2().set(":serport1", FUNC(rs232_port_device::write_rts)); } -void ez2d_state::ez2d(machine_config &config) +void ez2d_state::cubx(machine_config &config) { // actually a Celeron at 533 MHz PENTIUM2(config, m_maincpu, 90'000'000); @@ -188,9 +189,14 @@ void ez2d_state::ez2d(machine_config &config) serport1.cts_handler().set("board4:w83977tf", FUNC(fdc37c93x_device::ncts2_w)); #endif - // TODO: Riva TNT2 - RIVA128(config, "pci:01.0:00.0", 0); + RIVATNT(config, "pci:01.0:00.0", 0); +} +void ez2d_state::ez2d(machine_config &config) +{ + ez2d_state::cubx(config); + + // TODO: Riva TNT2 // TODO: Sound Blaster Live CT4830 } @@ -200,10 +206,18 @@ void ez2d_state::ez2d(machine_config &config) ***************************************************************************/ +ROM_START( asuscubx ) + ROM_REGION32_LE(0x40000, "pci:07.0", 0) + ROM_LOAD("cubx1007.awd", 0x00000, 0x40000, CRC(42a35507) SHA1(4e428e8419e533424d9564b290e2d7f4931744ff) ) +ROM_END + ROM_START( ez2d2m ) ROM_REGION32_LE(0x40000, "pci:07.0", 0) - ROM_LOAD("ez2dancer2ndmove_motherboard_v29c51002t_award_bios", 0x00000, 0x40000, BAD_DUMP CRC(02a5e84b) SHA1(94b341d268ce9d42597c68bc98c3b8b62e137205) ) // 29f020 -// ROM_LOAD("cubx1007.awd", 0x00000, 0x40000, CRC(42a35507) SHA1(4e428e8419e533424d9564b290e2d7f4931744ff) ) + ROM_SYSTEM_BIOS( 0, "1006cu", "OEM" ) + // From HDD "C:\Install\Bios1006" + ROMX_LOAD("1006cu.awd", 0x00000, 0x40000, CRC(086c320a) SHA1(4b4c07e594602c467e678187f80e3a5c1445bd30), ROM_BIOS(0) ) + ROM_SYSTEM_BIOS( 1, "award", "Award (unknown rev)" ) + ROMX_LOAD("ez2dancer2ndmove_motherboard_v29c51002t_award_bios", 0x00000, 0x40000, BAD_DUMP CRC(02a5e84b) SHA1(94b341d268ce9d42597c68bc98c3b8b62e137205), ROM_BIOS(1) ) // 29f020 ROM_REGION( 0x10000, "vbios", 0 ) // nVidia TNT2 Model 64 video BIOS (not from provided dump) @@ -217,4 +231,6 @@ ROM_END } // anonymous namespace -GAME( 2001, ez2d2m, 0, ez2d, ez2d, ez2d_state, empty_init, ROT0, "Amuse World", "Ez2dancer 2nd Move", MACHINE_IS_SKELETON ) +COMP( 2000, asuscubx, 0, 0, cubx, 0, ez2d_state, empty_init, "ASUS", "CUBX", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) + +GAME( 2001, ez2d2m, 0, ez2d, ez2d, ez2d_state, empty_init, ROT0, "Amuse World", "Ez2dancer 2nd Move", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )