summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/isa/svga_s3.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/isa/svga_s3.cpp')
-rw-r--r--src/devices/bus/isa/svga_s3.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/devices/bus/isa/svga_s3.cpp b/src/devices/bus/isa/svga_s3.cpp
index ddac8fc77c1..26225d06215 100644
--- a/src/devices/bus/isa/svga_s3.cpp
+++ b/src/devices/bus/isa/svga_s3.cpp
@@ -150,6 +150,17 @@ void isa16_s3virge_device::device_add_mconfig(machine_config &config)
screen.set_screen_update(m_vga, FUNC(s3virge_vga_device::screen_update));
S3VIRGE(config, m_vga, 0).set_screen("screen");
+ m_vga->linear_config_changed().set(FUNC(isa16_s3virge_device::linear_config_changed_w));
+}
+
+//-------------------------------------------------
+// linear_config_changed_w - callback to indicate
+// enabling, disabling, or changig of the linear
+// framebuffer configuration.
+//-------------------------------------------------
+
+WRITE_LINE_MEMBER(isa16_s3virge_device::linear_config_changed_w)
+{
}
//-------------------------------------------------
@@ -229,6 +240,33 @@ void isa16_s3virgedx_device::device_add_mconfig(machine_config &config)
screen.set_screen_update(m_vga, FUNC(s3virgedx_vga_device::screen_update));
S3VIRGEDX(config, m_vga, 0).set_screen("screen");
+ m_vga->linear_config_changed().set(FUNC(isa16_s3virgedx_device::linear_config_changed_w));
+}
+
+//-------------------------------------------------
+// linear_config_changed_w - callback to indicate
+// enabling, disabling, or changig of the linear
+// framebuffer configuration.
+//-------------------------------------------------
+
+WRITE_LINE_MEMBER(isa16_s3virgedx_device::linear_config_changed_w)
+{
+ const bool old = m_lfb_enable;
+ m_lfb_enable = state;
+ if (state)
+ {
+ if (old)
+ {
+ m_isa->unmap_readwrite(m_lfb_start, m_lfb_end);
+ }
+ m_lfb_start = m_vga->get_linear_address();
+ m_lfb_end = m_lfb_start + m_vga->get_linear_address_size_full() - 1;
+ m_isa->install_memory(m_lfb_start, m_lfb_end, read8_delegate(*m_vga, FUNC(s3virge_vga_device::fb_r)), write8_delegate(*m_vga, FUNC(s3virge_vga_device::fb_w)));
+ }
+ else
+ {
+ m_isa->unmap_readwrite(m_lfb_start, m_lfb_end);
+ }
}
//-------------------------------------------------
@@ -271,6 +309,10 @@ void isa16_s3virgedx_device::device_start()
m_isa->install_device(0x03d0, 0x03df, read8_delegate(*m_vga, FUNC(s3virge_vga_device::port_03d0_r)), write8_delegate(*m_vga, FUNC(s3virge_vga_device::port_03d0_w)));
m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(*m_vga, FUNC(s3virge_vga_device::mem_r)), write8_delegate(*m_vga, FUNC(s3virge_vga_device::mem_w)));
+
+ save_item(NAME(m_lfb_enable));
+ save_item(NAME(m_lfb_start));
+ save_item(NAME(m_lfb_end));
}
//-------------------------------------------------
@@ -279,6 +321,9 @@ void isa16_s3virgedx_device::device_start()
void isa16_s3virgedx_device::device_reset()
{
+ m_lfb_enable = m_vga->is_linear_address_active();
+ m_lfb_start = m_vga->get_linear_address();
+ m_lfb_end = m_lfb_start + m_vga->get_linear_address_size_full() - 1;
}
@@ -309,6 +354,17 @@ void isa16_stealth3d2kpro_device::device_add_mconfig(machine_config &config)
screen.set_screen_update(m_vga, FUNC(s3virgedx_rev1_vga_device::screen_update));
S3VIRGEDX1(config, m_vga, 0).set_screen("screen");
+ m_vga->linear_config_changed().set(FUNC(isa16_stealth3d2kpro_device::linear_config_changed_w));
+}
+
+//-------------------------------------------------
+// linear_config_changed_w - callback to indicate
+// enabling, disabling, or changig of the linear
+// framebuffer configuration.
+//-------------------------------------------------
+
+WRITE_LINE_MEMBER(isa16_stealth3d2kpro_device::linear_config_changed_w)
+{
}
//-------------------------------------------------