mirror of
https://github.com/holub/mame
synced 2025-07-06 18:39:28 +03:00
video/gf7600gs: add basic legacy VGA control
This commit is contained in:
parent
40355ca7a5
commit
37c419f51a
@ -19,9 +19,22 @@ void geforce_7600gs_device::map3(address_map &map)
|
|||||||
|
|
||||||
geforce_7600gs_device::geforce_7600gs_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
geforce_7600gs_device::geforce_7600gs_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||||
: pci_device(mconfig, GEFORCE_7600GS, tag, owner, clock)
|
: pci_device(mconfig, GEFORCE_7600GS, tag, owner, clock)
|
||||||
|
, m_vga(*this, "vga")
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void geforce_7600gs_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(nvidia_nv3_vga_device::screen_update));
|
||||||
|
|
||||||
|
// TODO: very late superset (G73)
|
||||||
|
NVIDIA_NV3_VGA(config, m_vga, 0);
|
||||||
|
m_vga->set_screen("screen");
|
||||||
|
m_vga->set_vram_size(256*1024*1024);
|
||||||
|
}
|
||||||
|
|
||||||
void geforce_7600gs_device::device_start()
|
void geforce_7600gs_device::device_start()
|
||||||
{
|
{
|
||||||
pci_device::device_start();
|
pci_device::device_start();
|
||||||
@ -35,3 +48,38 @@ void geforce_7600gs_device::device_reset()
|
|||||||
{
|
{
|
||||||
pci_device::device_reset();
|
pci_device::device_reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void geforce_7600gs_device::legacy_memory_map(address_map &map)
|
||||||
|
{
|
||||||
|
map(0xa0000, 0xbffff).rw(FUNC(geforce_7600gs_device::vram_r), FUNC(geforce_7600gs_device::vram_w));
|
||||||
|
}
|
||||||
|
|
||||||
|
void geforce_7600gs_device::legacy_io_map(address_map &map)
|
||||||
|
{
|
||||||
|
map(0, 0x02f).m(m_vga, FUNC(nvidia_nv3_vga_device::io_map));
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t geforce_7600gs_device::vram_r(offs_t offset)
|
||||||
|
{
|
||||||
|
return downcast<nvidia_nv3_vga_device *>(m_vga.target())->mem_r(offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
void geforce_7600gs_device::vram_w(offs_t offset, uint8_t data)
|
||||||
|
{
|
||||||
|
downcast<nvidia_nv3_vga_device *>(m_vga.target())->mem_w(offset, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void geforce_7600gs_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 (BIT(command, 1))
|
||||||
|
{
|
||||||
|
memory_space->install_readwrite_handler(0xa0000, 0xbffff, read8sm_delegate(*this, FUNC(geforce_7600gs_device::vram_r)), write8sm_delegate(*this, FUNC(geforce_7600gs_device::vram_w)));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (BIT(command, 0))
|
||||||
|
{
|
||||||
|
io_space->install_device(0x03b0, 0x03df, *this, &geforce_7600gs_device::legacy_io_map);
|
||||||
|
//memory_space->install_rom(0xc0000, 0xcffff, (void *)expansion_rom);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -6,7 +6,9 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "machine/pci.h"
|
#include "machine/pci.h"
|
||||||
|
#include "video/pc_vga_nvidia.h"
|
||||||
|
|
||||||
|
// FIXME: PCIe x16
|
||||||
class geforce_7600gs_device : public pci_device {
|
class geforce_7600gs_device : public pci_device {
|
||||||
public:
|
public:
|
||||||
geforce_7600gs_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, uint32_t subdevice_id)
|
geforce_7600gs_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, uint32_t subdevice_id)
|
||||||
@ -16,14 +18,26 @@ public:
|
|||||||
}
|
}
|
||||||
geforce_7600gs_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
geforce_7600gs_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||||
|
|
||||||
|
void legacy_memory_map(address_map &map);
|
||||||
|
void legacy_io_map(address_map &map);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void device_start() override;
|
virtual void device_start() override;
|
||||||
virtual void device_reset() override;
|
virtual void device_reset() override;
|
||||||
|
virtual void device_add_mconfig(machine_config &config) 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;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void map1(address_map &map);
|
void map1(address_map &map);
|
||||||
void map2(address_map &map);
|
void map2(address_map &map);
|
||||||
void map3(address_map &map);
|
void map3(address_map &map);
|
||||||
|
|
||||||
|
required_device<nvidia_nv3_vga_device> m_vga;
|
||||||
|
|
||||||
|
u8 vram_r(offs_t offset);
|
||||||
|
void vram_w(offs_t offset, uint8_t data);
|
||||||
};
|
};
|
||||||
|
|
||||||
DECLARE_DEVICE_TYPE(GEFORCE_7600GS, geforce_7600gs_device)
|
DECLARE_DEVICE_TYPE(GEFORCE_7600GS, geforce_7600gs_device)
|
||||||
|
@ -2,12 +2,23 @@
|
|||||||
// copyright-holders:Olivier Galibert
|
// copyright-holders:Olivier Galibert
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
Sega Lindbergh skeleton driver
|
Sega Lindbergh
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
- tests area 0xd0000 - 0xd000f, wants an undumped ROM in there?
|
- tests area 0xd0000 - 0xd000f, wants an undumped ROM in there?
|
||||||
- Apparently there's no way to avoid a dead lock at 0xfd085, perhaps
|
- Pinpoint root cause of all of the following debug breakpoints
|
||||||
tied to the aforementioned?
|
https://github.com/mamedev/mame/files/8766682/lindbergh_megahack.txt
|
||||||
|
- bp fffffff0,1,{eip-=0x12 ;g} (spurious execution parse of below)
|
||||||
|
- bp f4f1c,1,{eip+=2;g}
|
||||||
|
- bp 78adb,1,{eip+=2;g}
|
||||||
|
- bp f6bb3,1,{eip+=2;g}
|
||||||
|
- bp 7518f,1,{eip+=2;g}
|
||||||
|
- bp e7a22,1,{eip+=3;g}
|
||||||
|
- bp e7abf,1,{eip+=3;g}
|
||||||
|
- bp 79068,1,{eip+=2;g}
|
||||||
|
- bp 78aed,1,{eip+=2;g}
|
||||||
|
- BIOS detects CPU as :), throws errors 0270 (RTC), CMOS bad (0251) and
|
||||||
|
PCI resource conflict on SATA.
|
||||||
|
|
||||||
***************************************************************************
|
***************************************************************************
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user