1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
// license:BSD-3-Clause
// copyright-holders:Olivier Galibert
#include "emu.h"
#include "gf7600gs.h"
DEFINE_DEVICE_TYPE(GEFORCE_7600GS, geforce_7600gs_device, "geforce_7600gs", "NVIDIA GeForce 7600GS")
void geforce_7600gs_device::map1(address_map &map)
{
}
void geforce_7600gs_device::map2(address_map &map)
{
}
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)
: 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");
// FIXME: shared RAM
m_vga->set_vram_size(256*1024*1024);
}
void geforce_7600gs_device::device_start()
{
pci_device::device_start();
add_map( 16*1024*1024, M_MEM, FUNC(geforce_7600gs_device::map1));
add_map(256*1024*1024, M_MEM, FUNC(geforce_7600gs_device::map2));
add_map( 16*1024*1024, M_MEM, FUNC(geforce_7600gs_device::map3));
add_rom_from_region();
}
void geforce_7600gs_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);
}
}
|