summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu
diff options
context:
space:
mode:
author jbu <pullmoll@t-online.de>2014-11-01 13:41:13 +0100
committer jbu <pullmoll@t-online.de>2014-11-01 13:41:13 +0100
commit3efeb980ac43372d31e43670a89f113d73fd0cad (patch)
tree652726e8a513ed7d2c76b91c8878686ee74874a6 /src/emu
parent4b2e3674ef6bd47defd8b26e4f358a534f9a9336 (diff)
Add zero() to (s)vga_device: zeroes all private variables but vtbls.
The vga.memory is resized to 0.
Diffstat (limited to 'src/emu')
-rw-r--r--src/emu/bus/isa/s3virge.c4
-rw-r--r--src/emu/bus/isa/trident.c4
-rw-r--r--src/emu/video/pc_vga.c24
-rw-r--r--src/emu/video/pc_vga.h3
4 files changed, 26 insertions, 9 deletions
diff --git a/src/emu/bus/isa/s3virge.c b/src/emu/bus/isa/s3virge.c
index e3162392831..fdd4c3b8ed7 100644
--- a/src/emu/bus/isa/s3virge.c
+++ b/src/emu/bus/isa/s3virge.c
@@ -45,9 +45,7 @@ s3virgedx_rev1_vga_device::s3virgedx_rev1_vga_device(const machine_config &mconf
void s3virge_vga_device::device_start()
{
- // FIXME: this kills the vptr of vga.memory
- memset(&vga, 0, sizeof(vga));
- memset(&svga, 0, sizeof(svga));
+ zero();
int x;
int i;
diff --git a/src/emu/bus/isa/trident.c b/src/emu/bus/isa/trident.c
index 2ac306a0d7d..0d8b2134808 100644
--- a/src/emu/bus/isa/trident.c
+++ b/src/emu/bus/isa/trident.c
@@ -155,9 +155,7 @@ void trident_vga_device::WRITEPIXEL(INT16 x,INT16 y, UINT32 data)
void trident_vga_device::device_start()
{
- // FIXME: this kill the vga.memory vptr
- memset(&vga, 0, sizeof(vga));
- memset(&svga, 0, sizeof(svga));
+ zero();
int i;
for (i = 0; i < 0x100; i++)
diff --git a/src/emu/video/pc_vga.c b/src/emu/video/pc_vga.c
index 54458c9338d..a7b6b935e62 100644
--- a/src/emu/video/pc_vga.c
+++ b/src/emu/video/pc_vga.c
@@ -198,6 +198,27 @@ mach8_device::mach8_device(const machine_config &mconfig, const char *tag, devic
{
}
+// zero everything, keep vtbls
+void vga_device::zero()
+{
+ memset(&vga.svga_intf, 0, sizeof(vga.svga_intf));
+ vga.memory.resize(0);
+ memset(vga.pens, 0, sizeof(vga.pens));
+ vga.miscellaneous_output = 0;
+ vga.feature_control = 0;
+ memset(&vga.sequencer, 0, sizeof(vga.sequencer));
+ memset(&vga.crtc, 0, sizeof(vga.crtc));
+ memset(&vga.gc, 0, sizeof(vga.gc));
+ memset(&vga.attribute, 0, sizeof(vga.attribute));
+ memset(&vga.dac, 0, sizeof(vga.dac));
+ memset(&vga.oak, 0, sizeof(vga.oak));
+}
+
+void svga_device::zero()
+{
+ vga_device::zero();
+ memset(&svga, 0, sizeof(svga));
+}
/* VBLANK callback, start address definitely updates AT vblank, not before. */
TIMER_CALLBACK_MEMBER(vga_device::vblank_timer_cb)
@@ -208,8 +229,7 @@ TIMER_CALLBACK_MEMBER(vga_device::vblank_timer_cb)
void vga_device::device_start()
{
- // FIXME: this kills the vga.memory vptr
- memset(&vga, 0, sizeof(vga));
+ zero();
int i;
for (i = 0; i < 0x100; i++)
diff --git a/src/emu/video/pc_vga.h b/src/emu/video/pc_vga.h
index 7869955ecde..be658c147d7 100644
--- a/src/emu/video/pc_vga.h
+++ b/src/emu/video/pc_vga.h
@@ -26,7 +26,7 @@ public:
vga_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
vga_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
-
+ virtual void zero();
virtual UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
virtual READ8_MEMBER(port_03b0_r);
@@ -205,6 +205,7 @@ public:
// construction/destruction
svga_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
+ virtual void zero();
virtual UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
protected:
void svga_vh_rgb8(bitmap_rgb32 &bitmap, const rectangle &cliprect);