mirror of
https://github.com/holub/mame
synced 2025-04-22 08:22:15 +03:00
pci/oti_spitfire: fix BAR2 IO flag, add revision register
This commit is contained in:
parent
863e5496e2
commit
f4c8b1225b
@ -72,7 +72,7 @@ void oti64111_pci_device::device_start()
|
||||
|
||||
add_map( 256, M_MEM, FUNC(oti64111_pci_device::mmio_map));
|
||||
add_map(8*1024*1024, M_MEM, FUNC(oti64111_pci_device::vram_aperture_map));
|
||||
add_map( 256, M_MEM, FUNC(oti64111_pci_device::extio_map));
|
||||
add_map( 256, M_IO, FUNC(oti64111_pci_device::extio_map));
|
||||
|
||||
add_rom((u8 *)m_vga_rom->base(), 0x8000);
|
||||
expansion_rom_base = 0xc0000;
|
||||
@ -100,6 +100,7 @@ void oti64111_pci_device::config_map(address_map &map)
|
||||
|
||||
void oti64111_pci_device::mmio_map(address_map &map)
|
||||
{
|
||||
map(0x00, 0x7f).rw(m_svga, FUNC(oak_oti111_vga_device::xga_read), FUNC(oak_oti111_vga_device::xga_write));
|
||||
}
|
||||
|
||||
void oti64111_pci_device::vram_aperture_map(address_map &map)
|
||||
@ -109,6 +110,7 @@ void oti64111_pci_device::vram_aperture_map(address_map &map)
|
||||
|
||||
void oti64111_pci_device::extio_map(address_map &map)
|
||||
{
|
||||
map(0x00e0, 0x00ef).m(m_svga, FUNC(oak_oti111_vga_device::ramdac_mmio_map));
|
||||
}
|
||||
|
||||
void oti64111_pci_device::legacy_io_map(address_map &map)
|
||||
|
@ -1082,7 +1082,7 @@ void vga_device::sequencer_map(address_map &map)
|
||||
NAME([this] (offs_t offset) {
|
||||
const u8 res = vga.sequencer.data[offset];
|
||||
if (!machine().side_effects_disabled())
|
||||
LOG("Reading unmapped sequencer read register [%02x] -> %02x (SVGA?)\n", offset, res);
|
||||
LOGREGS("Reading unmapped sequencer read register [%02x] -> %02x (SVGA?)\n", offset, res);
|
||||
return res;
|
||||
})
|
||||
);
|
||||
|
@ -57,28 +57,41 @@ void oak_oti111_vga_device::device_reset()
|
||||
void oak_oti111_vga_device::io_3bx_3dx_map(address_map &map)
|
||||
{
|
||||
svga_device::io_3bx_3dx_map(map);
|
||||
map(0x0e, 0x0e).lrw8(
|
||||
NAME([this] (offs_t offset) {
|
||||
return m_oak_idx;
|
||||
}),
|
||||
NAME([this] (offs_t offset, u8 data) {
|
||||
m_oak_idx = data;
|
||||
})
|
||||
);
|
||||
map(0x0f, 0x0f).lrw8(
|
||||
NAME([this] (offs_t offset) {
|
||||
return space(EXT_REG).read_byte(m_oak_idx);
|
||||
}),
|
||||
NAME([this] (offs_t offset, u8 data) {
|
||||
space(EXT_REG).write_byte(m_oak_idx, data);
|
||||
})
|
||||
);
|
||||
map(0x0e, 0x0e).rw(FUNC(oak_oti111_vga_device::oak_index_r), FUNC(oak_oti111_vga_device::oak_index_w));
|
||||
map(0x0f, 0x0f).rw(FUNC(oak_oti111_vga_device::oak_data_r), FUNC(oak_oti111_vga_device::oak_data_w));
|
||||
}
|
||||
|
||||
u8 oak_oti111_vga_device::oak_index_r(offs_t offset)
|
||||
{
|
||||
return m_oak_idx;
|
||||
}
|
||||
|
||||
void oak_oti111_vga_device::oak_index_w(offs_t offset, u8 data)
|
||||
{
|
||||
m_oak_idx = data;
|
||||
}
|
||||
|
||||
u8 oak_oti111_vga_device::oak_data_r(offs_t offset)
|
||||
{
|
||||
return space(EXT_REG).read_byte(m_oak_idx);
|
||||
}
|
||||
|
||||
void oak_oti111_vga_device::oak_data_w(offs_t offset, u8 data)
|
||||
{
|
||||
space(EXT_REG).write_byte(m_oak_idx, data);
|
||||
}
|
||||
|
||||
void oak_oti111_vga_device::oak_map(address_map &map)
|
||||
{
|
||||
// (undocumented) Revision ID
|
||||
// win98se tests 0x06 / 0x07 / 0x0a / 0x0b paths, failing in case it doesn't find a valid value.
|
||||
// 64111 BIOS wants it to be == 6 at POST, printing 64107 in case it isn't
|
||||
map(0x00, 0x00).lr8(
|
||||
NAME([this] (offs_t offset) {
|
||||
//machine().debug_break();
|
||||
return 0x06;
|
||||
})
|
||||
);
|
||||
// status, set by BIOS for memory size
|
||||
map(0x02, 0x02).lrw8(
|
||||
NAME([this] (offs_t offset) {
|
||||
@ -286,7 +299,8 @@ void oak_oti111_vga_device::xga_write(offs_t offset, u8 data)
|
||||
void oak_oti111_vga_device::ramdac_mmio_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
// TODO: 0x04, 0x05 alt accesses for CRTC?
|
||||
map(0x04, 0x04).rw(FUNC(oak_oti111_vga_device::oak_index_r), FUNC(oak_oti111_vga_device::oak_index_w));
|
||||
map(0x05, 0x05).rw(FUNC(oak_oti111_vga_device::oak_data_r), FUNC(oak_oti111_vga_device::oak_data_w));
|
||||
map(0x06, 0x06).rw(FUNC(oak_oti111_vga_device::ramdac_mask_r), FUNC(oak_oti111_vga_device::ramdac_mask_w));
|
||||
map(0x07, 0x07).rw(FUNC(oak_oti111_vga_device::ramdac_state_r), FUNC(oak_oti111_vga_device::ramdac_read_index_w));
|
||||
map(0x08, 0x08).rw(FUNC(oak_oti111_vga_device::ramdac_write_index_r), FUNC(oak_oti111_vga_device::ramdac_write_index_w));
|
||||
|
@ -17,8 +17,8 @@ public:
|
||||
u8 xga_read(offs_t offset);
|
||||
void xga_write(offs_t offset, u8 data);
|
||||
|
||||
// $xxe0-$xxef in EXTIO
|
||||
void ramdac_mmio_map(address_map &map);
|
||||
void oak_map(address_map &map);
|
||||
|
||||
virtual uint8_t mem_r(offs_t offset) override;
|
||||
virtual void mem_w(offs_t offset, uint8_t data) override;
|
||||
@ -38,6 +38,13 @@ private:
|
||||
|
||||
required_device<xga_copro_device> m_xga;
|
||||
|
||||
void oak_map(address_map &map);
|
||||
|
||||
u8 oak_index_r(offs_t offset);
|
||||
void oak_index_w(offs_t offset, u8 data);
|
||||
u8 oak_data_r(offs_t offset);
|
||||
void oak_data_w(offs_t offset, u8 data);
|
||||
|
||||
u8 m_oak_idx = 0;
|
||||
|
||||
u8 m_memory_size = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user