diff --git a/src/ints/int10.cpp b/src/ints/int10.cpp index 63d8ceca..3315d909 100644 --- a/src/ints/int10.cpp +++ b/src/ints/int10.cpp @@ -177,6 +177,9 @@ static Bitu INT10_Handler(void) { case 0x19: /* undocumented - GET PEL MASK */ INT10_GetPelMask(reg_bl); break; + case 0x1A: /* GET VIDEO DAC COLOR PAGE */ + INT10_GetDACPage(®_bl,®_bh); + break; default: LOG(LOG_INT10,LOG_ERROR)("Function 10:Unhandled EGA/VGA Palette Function %2X",reg_al); } @@ -475,5 +478,3 @@ void INT10_Init(Section* sec) { INT10_SetupVESA(); INT10_SetVideoMode(machine==MCH_HERC ? 0x7 : 0x3); }; - - diff --git a/src/ints/int10.h b/src/ints/int10.h index 0b3eefc3..d64fcfce 100644 --- a/src/ints/int10.h +++ b/src/ints/int10.h @@ -173,6 +173,7 @@ void INT10_GetSingleDacRegister(Bit8u index,Bit8u * red,Bit8u * green,Bit8u * bl void INT10_SetDACBlock(Bit16u index,Bit16u count,PhysPt data); void INT10_GetDACBlock(Bit16u index,Bit16u count,PhysPt data); void INT10_SelectDACPage(Bit8u function,Bit8u mode); +void INT10_GetDACPage(Bit8u* mode,Bit8u* page); void INT10_SetPelMask(Bit8u mask); void INT10_GetPelMask(Bit8u & mask); @@ -194,5 +195,3 @@ Bit8u VESA_GetPalette(PhysPt data,Bitu index,Bitu count); /* Sup Groups */ void INT10_SetupRomMemory(void); void INT10_SetupVESA(void); - - diff --git a/src/ints/int10_pal.cpp b/src/ints/int10_pal.cpp index 06c90622..456af7ed 100644 --- a/src/ints/int10_pal.cpp +++ b/src/ints/int10_pal.cpp @@ -147,6 +147,21 @@ void INT10_SelectDACPage(Bit8u function,Bit8u mode) { IO_Write(VGAREG_ACTL_ADDRESS,32); //Enable output and protect palette } +void INT10_GetDACPage(Bit8u* mode,Bit8u* page) { + IO_Read(VGAREG_ACTL_RESET); + IO_Write(VGAREG_ACTL_ADDRESS,0x10); + Bit8u reg10=IO_Read(VGAREG_ACTL_READ_DATA); + *mode=(reg10&0x80)?0x01:0x00; + IO_Write(VGAREG_ACTL_ADDRESS,0x14); + *page=IO_Read(VGAREG_ACTL_READ_DATA); + if(*mode) { + *page&=0xf; + } else { + *page&=0xc; + *page>>=2; + } +} + void INT10_SetPelMask(Bit8u mask) { IO_Write(VGAREG_PEL_MASK,mask); } @@ -168,4 +183,3 @@ void INT10_SetColorSelect(Bit8u val) { real_writeb(BIOSMEM_SEG,BIOSMEM_CURRENT_PAL,temp); IO_Write(0x3d9,temp); } -