From 07467e8e7cd19a7ea156b8a0a0ee2b3be7cd2e17 Mon Sep 17 00:00:00 2001 From: Peter Veenstra Date: Mon, 11 Jul 2005 19:10:16 +0000 Subject: [PATCH] Add patch 1235272 by kippesoep. "Fixes for Tandy graphics artefacts" Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@2235 --- src/ints/int10.h | 3 +++ src/ints/int10_modes.cpp | 1 + src/ints/int10_pal.cpp | 53 +++++++++++++++++++++++++++++----------- 3 files changed, 43 insertions(+), 14 deletions(-) diff --git a/src/ints/int10.h b/src/ints/int10.h index 4c861b17..2db43333 100644 --- a/src/ints/int10.h +++ b/src/ints/int10.h @@ -78,6 +78,9 @@ #define VGAREG_MDA_WRITE_FEATURE_CTL 0x3ba #define VGAREG_VGA_WRITE_FEATURE_CTL 0x3da #define VGAREG_ACTL_RESET 0x3da +#define VGAREG_TDY_RESET 0x3da +#define VGAREG_TDY_ADDRESS 0x3da +#define VGAREG_TDY_DATA 0x3de #define VGAREG_MDA_MODECTL 0x3b8 #define VGAREG_CGA_MODECTL 0x3d8 diff --git a/src/ints/int10_modes.cpp b/src/ints/int10_modes.cpp index e06ad413..7b8d79ec 100644 --- a/src/ints/int10_modes.cpp +++ b/src/ints/int10_modes.cpp @@ -172,6 +172,7 @@ static void FinishSetMode(bool clearmem) { switch (CurMode->type) { case M_CGA4: case M_CGA2: + case M_TANDY16: for (i=0;i<16*1024;i++) { real_writew(0xb800,i*2,0x0000); } diff --git a/src/ints/int10_pal.cpp b/src/ints/int10_pal.cpp index 0dda63f3..10635e80 100644 --- a/src/ints/int10_pal.cpp +++ b/src/ints/int10_pal.cpp @@ -24,12 +24,21 @@ #define ACTL_MAX_REG 0x14 void INT10_SetSinglePaletteRegister(Bit8u reg,Bit8u val) { - if(reg<=ACTL_MAX_REG) { - IO_Read(VGAREG_ACTL_RESET); - IO_Write(VGAREG_ACTL_ADDRESS,reg); - IO_Write(VGAREG_ACTL_WRITE_DATA,val); + switch (machine) { + case MCH_TANDY: + IO_Read(VGAREG_TDY_RESET); + IO_Write(VGAREG_TDY_ADDRESS,reg+0x10); + IO_Write(VGAREG_TDY_DATA,val); + break; + case MCH_VGA: + if(reg<=ACTL_MAX_REG) { + IO_Read(VGAREG_ACTL_RESET); + IO_Write(VGAREG_ACTL_ADDRESS,reg); + IO_Write(VGAREG_ACTL_WRITE_DATA,val); + } + IO_Write(VGAREG_ACTL_ADDRESS,32); //Enable output and protect palette + break; } - IO_Write(VGAREG_ACTL_ADDRESS,32); //Enable output and protect palette } @@ -41,17 +50,33 @@ void INT10_SetOverscanBorderColor(Bit8u val) { } void INT10_SetAllPaletteRegisters(PhysPt data) { - IO_Read(VGAREG_ACTL_RESET); - // First the colors - for(Bit8u i=0;i<0x10;i++) { - IO_Write(VGAREG_ACTL_ADDRESS,i); + switch (machine) { + case MCH_TANDY: + IO_Read(VGAREG_TDY_RESET); + // First the colors + for(Bit8u i=0;i<0x10;i++) { + IO_Write(VGAREG_TDY_ADDRESS,i+0x10); + IO_Write(VGAREG_TDY_DATA,mem_readb(data)); + data++; + } + // Then the border + IO_Write(VGAREG_TDY_ADDRESS,0x02); + IO_Write(VGAREG_TDY_DATA,mem_readb(data)); + break; + case MCH_VGA: + IO_Read(VGAREG_ACTL_RESET); + // First the colors + for(Bit8u i=0;i<0x10;i++) { + IO_Write(VGAREG_ACTL_ADDRESS,i); + IO_Write(VGAREG_ACTL_WRITE_DATA,mem_readb(data)); + data++; + } + // Then the border + IO_Write(VGAREG_ACTL_ADDRESS,0x11); IO_Write(VGAREG_ACTL_WRITE_DATA,mem_readb(data)); - data++; + IO_Write(VGAREG_ACTL_ADDRESS,32); //Enable output and protect palette + break; } - // Then the border - IO_Write(VGAREG_ACTL_ADDRESS,0x11); - IO_Write(VGAREG_ACTL_WRITE_DATA,mem_readb(data)); - IO_Write(VGAREG_ACTL_ADDRESS,32); //Enable output and protect palette } void INT10_ToggleBlinkingBit(Bit8u state) {