summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/pci/geforce.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/pci/geforce.cpp')
-rw-r--r--src/devices/bus/pci/geforce.cpp114
1 files changed, 114 insertions, 0 deletions
diff --git a/src/devices/bus/pci/geforce.cpp b/src/devices/bus/pci/geforce.cpp
new file mode 100644
index 00000000000..d420d881547
--- /dev/null
+++ b/src/devices/bus/pci/geforce.cpp
@@ -0,0 +1,114 @@
+// license:BSD-3-Clause
+// copyright-holders: Angelo Salese
+/**************************************************************************************************
+
+nVidia NV10 "Celsius"
+a.k.a. first gen GeForce
+
+TODO:
+- Compared to NV5 VGA controller extensively writes to extended register $40;
+- All "elsa" BIOSes prompt user to "buy the card", copy protection related to EDID?
+- geforce256 DDR "creative" BIOS draws garbage for RAM detection during POST;
+
+**************************************************************************************************/
+
+#include "emu.h"
+#include "geforce.h"
+
+DEFINE_DEVICE_TYPE(GEFORCE256, geforce256_device, "geforce256", "nVidia GeForce 256 SDR (NV10)")
+DEFINE_DEVICE_TYPE(GEFORCE256_DDR, geforce256_ddr_device, "geforce256ddr", "nVidia GeForce 256 DDR (NV10)")
+//DEFINE_DEVICE_TYPE(GEFORCE256_ULTRA, geforce256_ultra_device, "geforce256ultra", "nVidia GeForce 256 Ultra (NV10)")
+DEFINE_DEVICE_TYPE(QUADRO, quadro_device, "quadro", "nVidia Quadro (NV10)")
+
+geforce256_device::geforce256_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : rivatnt2_device(mconfig, type, tag, owner, clock)
+{
+}
+
+geforce256_device::geforce256_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : geforce256_device(mconfig, GEFORCE256, tag, owner, clock)
+{
+ // 0x0100 GeForce 256 SDR
+ // 0x0101 ^ DDR
+ // 0x0102 ^ Ultra
+ // 0x0103 Quadro
+ // ELSA Synergy Force subvendor id
+ set_ids_agp(0x10de0100, 0x00, 0x10480c48);
+}
+
+
+ROM_START( geforce256 )
+ ROM_REGION32_LE( 0x10000, "vga_rom", ROMREGION_ERASEFF )
+ ROM_SYSTEM_BIOS( 0, "elsa", "ELSA Synergy Force (Ver 7.03.00 01/11/00)" )
+ ROMX_LOAD( "nv10.bin", 0x0000, 0xac00, BAD_DUMP CRC(3525816d) SHA1(6fef6773dd1b18148890f8c3d45f988e5e06b50d), ROM_BIOS(0) )
+ROM_END
+
+const tiny_rom_entry *geforce256_device::device_rom_region() const
+{
+ return ROM_NAME(geforce256);
+}
+
+void geforce256_device::device_start()
+{
+ pci_device::device_start();
+
+ add_map( 16*1024*1024, M_MEM, FUNC(geforce256_device::mmio_map));
+ add_map(128*1024*1024, M_MEM, FUNC(geforce256_device::vram_aperture_map));
+
+ add_rom((u8 *)m_vga_rom->base(), 0x10000);
+ expansion_rom_base = 0xc0000;
+
+ // INTA#
+ intr_pin = 1;
+ save_item(NAME(m_vga_legacy_enable));
+}
+
+/********************************************/
+
+geforce256_ddr_device::geforce256_ddr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : geforce256_device(mconfig, GEFORCE256_DDR, tag, owner, clock)
+{
+ // device ID 0x10de nVidia
+ // TODO: Rev A6
+ set_ids_agp(0x10de0101, 0x00, 0x10de0101);
+}
+
+ROM_START( geforce256_ddr )
+ ROM_REGION32_LE( 0x10000, "vga_rom", ROMREGION_ERASEFF )
+ ROM_SYSTEM_BIOS( 0, "creative", "Creative GeForce CT6971 AGP (Ver 2.10.4.02.04)" )
+ ROMX_LOAD( "creative.rom", 0x000000, 0x009800, CRC(fd956e0b) SHA1(aaac61e99193221280c5913cf3ca503e5b5ea408), ROM_BIOS(0) )
+ROM_END
+
+const tiny_rom_entry *geforce256_ddr_device::device_rom_region() const
+{
+ return ROM_NAME(geforce256_ddr);
+}
+
+/********************************************/
+
+// TODO: GeForce 256 Ultra
+// set_ids_agp(0x10de0102, 0x00, 0x10de0102);
+
+/********************************************/
+
+quadro_device::quadro_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : geforce256_device(mconfig, QUADRO, tag, owner, clock)
+{
+ // device ID 0x10de nVidia
+ set_ids_agp(0x10de0103, 0x00, 0x10de0103);
+}
+
+ROM_START( quadro )
+ ROM_REGION32_LE( 0x10000, "vga_rom", ROMREGION_ERASEFF )
+ // NB: difference between these two is type of RAM used (SDR vs. DDR) and
+ // interface type (AGP x4 vs. Pro)
+ ROM_SYSTEM_BIOS( 0, "elsa", "Elsa GLoria II (Ver 7.02.02)" )
+ ROMX_LOAD( "elsagloriaii.bin", 0x000000, 0x00ac00, CRC(78a6fbad) SHA1(5517fefc314bd34de7839fb8077aeb252689595d), ROM_BIOS(0) )
+ ROM_SYSTEM_BIOS( 1, "elsapro", "Elsa GLoria II Pro (Ver 7.02.00)" )
+ ROMX_LOAD( "elsagloriaiipro.bin", 0x000000, 0x00ac00, CRC(b4ef6426) SHA1(006b72eb2bcb549686e4e39f8ca17972435178e4), ROM_BIOS(1) )
+ROM_END
+
+const tiny_rom_entry *quadro_device::device_rom_region() const
+{
+ return ROM_NAME(quadro);
+}