Skip to content

Commit

Permalink
pc_vga: add palette configuration to save state
Browse files Browse the repository at this point in the history
  • Loading branch information
moralrecordings committed Mar 23, 2017
1 parent f6f689d commit 1e5fda7
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 14 deletions.
32 changes: 20 additions & 12 deletions src/devices/video/pc_vga.cpp
Expand Up @@ -335,6 +335,14 @@ void vga_device::device_start()
save_item(NAME(vga.attribute.pel_shift));
save_item(NAME(vga.attribute.pel_shift_latch));

save_item(NAME(vga.dac.read_index));
save_item(NAME(vga.dac.write_index));
save_item(NAME(vga.dac.mask));
save_item(NAME(vga.dac.read));
save_item(NAME(vga.dac.state));
save_item(NAME(vga.dac.color));
save_item(NAME(vga.dac.dirty));

m_vblank_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(vga_device::vblank_timer_cb),this));
}

Expand Down Expand Up @@ -924,9 +932,9 @@ uint8_t vga_device::pc_vga_choosevideomode()
for (i=0; i<256;i++)
{
/* TODO: color shifters? */
m_palette->set_pen_color(i, (vga.dac.color[i & vga.dac.mask].red & 0x3f) << 2,
(vga.dac.color[i & vga.dac.mask].green & 0x3f) << 2,
(vga.dac.color[i & vga.dac.mask].blue & 0x3f) << 2);
m_palette->set_pen_color(i, (vga.dac.color[3*(i & vga.dac.mask)] & 0x3f) << 2,
(vga.dac.color[3*(i & vga.dac.mask) + 1] & 0x3f) << 2,
(vga.dac.color[3*(i & vga.dac.mask) + 2] & 0x3f) << 2);
}
vga.dac.dirty = 0;
}
Expand Down Expand Up @@ -985,9 +993,9 @@ uint8_t svga_device::pc_vga_choosevideomode()
for (i=0; i<256;i++)
{
/* TODO: color shifters? */
m_palette->set_pen_color(i, (vga.dac.color[i & vga.dac.mask].red & 0x3f) << 2,
(vga.dac.color[i & vga.dac.mask].green & 0x3f) << 2,
(vga.dac.color[i & vga.dac.mask].blue & 0x3f) << 2);
m_palette->set_pen_color(i, (vga.dac.color[3*(i & vga.dac.mask)] & 0x3f) << 2,
(vga.dac.color[3*(i & vga.dac.mask) + 1] & 0x3f) << 2,
(vga.dac.color[3*(i & vga.dac.mask) + 2] & 0x3f) << 2);
}
vga.dac.dirty = 0;
}
Expand Down Expand Up @@ -1802,13 +1810,13 @@ READ8_MEMBER(vga_device::port_03c0_r)
switch (vga.dac.state++)
{
case 0:
data = vga.dac.color[vga.dac.read_index].red;
data = vga.dac.color[3*vga.dac.read_index];
break;
case 1:
data = vga.dac.color[vga.dac.read_index].green;
data = vga.dac.color[3*vga.dac.read_index + 1];
break;
case 2:
data = vga.dac.color[vga.dac.read_index].blue;
data = vga.dac.color[3*vga.dac.read_index + 2];
break;
}

Expand Down Expand Up @@ -1990,13 +1998,13 @@ WRITE8_MEMBER(vga_device::port_03c0_w)
{
switch (vga.dac.state++) {
case 0:
vga.dac.color[vga.dac.write_index].red=data;
vga.dac.color[3*vga.dac.write_index]=data;
break;
case 1:
vga.dac.color[vga.dac.write_index].green=data;
vga.dac.color[3*vga.dac.write_index + 1]=data;
break;
case 2:
vga.dac.color[vga.dac.write_index].blue=data;
vga.dac.color[3*vga.dac.write_index + 2]=data;
break;
}
vga.dac.dirty=1;
Expand Down
3 changes: 1 addition & 2 deletions src/devices/video/pc_vga.h
Expand Up @@ -215,12 +215,11 @@ class vga_device : public device_t
uint8_t pel_shift_latch;
} attribute;


struct {
uint8_t read_index, write_index, mask;
int read;
int state;
struct { uint8_t red, green, blue; } color[0x100];
uint8_t color[0x300]; /* flat RGB triplets */
int dirty;
} dac;

Expand Down

1 comment on commit 1e5fda7

@cuavas
Copy link
Member

@cuavas cuavas commented on 1e5fda7 Mar 23, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The switch statements in the port 03c0 handlers are now unnecessary - you can just add vga.dac.state to the offset. This kind of thing should be caught in review before merging.

Please sign in to comment.