Add video blanking in vgaonly mode. Used by Alien Carnage and others.
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3568
This commit is contained in:
parent
13ea835d96
commit
6be8956f46
6 changed files with 19 additions and 13 deletions
|
@ -262,7 +262,12 @@ typedef struct {
|
|||
Bit8u color_plane_enable;
|
||||
Bit8u color_select;
|
||||
Bit8u index;
|
||||
Bit8u enabled;
|
||||
Bit8u disabled; // Used for disabling the screen.
|
||||
// Bit0: screen disabled by attribute controller index
|
||||
// Bit1: screen disabled by sequencer index 1 bit 5
|
||||
// These are put together in one variable for performance reasons:
|
||||
// the line drawing function is called maybe 60*480=28800 times/s,
|
||||
// and we only need to check one variable for zero this way.
|
||||
} VGA_Attr;
|
||||
|
||||
typedef struct {
|
||||
|
|
|
@ -46,7 +46,7 @@ void VGA_ATTR_SetPalette(Bit8u index,Bit8u val) {
|
|||
Bitu read_p3c0(Bitu /*port*/,Bitu /*iolen*/) {
|
||||
// Wcharts, Win 3.11 & 95 SVGA
|
||||
Bitu retval = attr(index) & 0x1f;
|
||||
if (attr(enabled)) retval |= 0x20;
|
||||
if (!(attr(disabled) & 0x1)) retval |= 0x20;
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
@ -54,7 +54,8 @@ void write_p3c0(Bitu /*port*/,Bitu val,Bitu iolen) {
|
|||
if (!vga.internal.attrindex) {
|
||||
attr(index)=val & 0x1F;
|
||||
vga.internal.attrindex=true;
|
||||
attr(enabled)=val & 0x20;
|
||||
if (val & 0x20) attr(disabled) &= ~1;
|
||||
else attr(disabled) |= 1;
|
||||
/*
|
||||
0-4 Address of data register to write to port 3C0h or read from port 3C1h
|
||||
5 If set screen output is enabled and the palette can not be modified,
|
||||
|
@ -69,7 +70,7 @@ void write_p3c0(Bitu /*port*/,Bitu val,Bitu iolen) {
|
|||
case 0x04: case 0x05: case 0x06: case 0x07:
|
||||
case 0x08: case 0x09: case 0x0a: case 0x0b:
|
||||
case 0x0c: case 0x0d: case 0x0e: case 0x0f:
|
||||
if (!attr(enabled)) VGA_ATTR_SetPalette(attr(index),(Bit8u)val);
|
||||
if (attr(disabled) & 0x1) VGA_ATTR_SetPalette(attr(index),(Bit8u)val);
|
||||
/*
|
||||
0-5 Index into the 256 color DAC table. May be modified by 3C0h index
|
||||
10h and 14h.
|
||||
|
|
|
@ -637,15 +637,13 @@ static void VGA_ProcessSplit() {
|
|||
}
|
||||
|
||||
static void VGA_DrawSingleLine(Bitu /*blah*/) {
|
||||
if (vga.attr.enabled) {
|
||||
Bit8u * data=VGA_DrawLine( vga.draw.address, vga.draw.address_line );
|
||||
RENDER_DrawLine(data);
|
||||
} else {
|
||||
// else draw overscan color line
|
||||
// TODO: black line should be good enough for now
|
||||
// (DoWhackaDo)
|
||||
if (GCC_UNLIKELY(vga.attr.disabled)) {
|
||||
// draw blanked line (DoWhackaDo, Alien Carnage, TV sports Football)
|
||||
memset(TempLine, 0, sizeof(TempLine));
|
||||
RENDER_DrawLine(TempLine);
|
||||
} else {
|
||||
Bit8u * data=VGA_DrawLine( vga.draw.address, vga.draw.address_line );
|
||||
RENDER_DrawLine(data);
|
||||
}
|
||||
|
||||
vga.draw.address_line++;
|
||||
|
|
|
@ -522,7 +522,7 @@ Bitu read_herc_status(Bitu /*port*/,Bitu /*iolen*/) {
|
|||
void VGA_SetupOther(void) {
|
||||
Bitu i;
|
||||
memset( &vga.tandy, 0, sizeof( vga.tandy ));
|
||||
vga.attr.enabled = true;
|
||||
vga.attr.disabled = 0;
|
||||
vga.config.bytes_skip=0;
|
||||
|
||||
//Initialize values common for most machines, can be overwritten
|
||||
|
|
|
@ -355,7 +355,7 @@ Bitu SVGA_S3_ReadCRTC( Bitu reg, Bitu iolen) {
|
|||
switch (reg) {
|
||||
case 0x24: /* attribute controller index (read only) */
|
||||
case 0x26:
|
||||
return (vga.attr.enabled?0x20:0x00) | (vga.attr.index&0x1f);
|
||||
return ((vga.attr.disabled & 1)?0x00:0x20) | (vga.attr.index & 0x1f);
|
||||
case 0x2d: /* Extended Chip ID (high byte of PCI device ID) */
|
||||
return 0x88;
|
||||
case 0x2e: /* New Chip ID (low byte of PCI device ID) */
|
||||
|
|
|
@ -47,6 +47,8 @@ void write_p3c5(Bitu /*port*/,Bitu val,Bitu iolen) {
|
|||
} else {
|
||||
seq(clocking_mode)=val;
|
||||
}
|
||||
if (val & 0x20) vga.attr.disabled |= 0x2;
|
||||
else vga.attr.disabled &= ~0x2;
|
||||
}
|
||||
/* TODO Figure this out :)
|
||||
0 If set character clocks are 8 dots wide, else 9.
|
||||
|
|
Loading…
Add table
Reference in a new issue