void __fastcall VgaModeProgramDac(unsigned __int8 *n981, char a2)
{
char n12; // al
int n1342177280; // esi
int v4; // esi
int v5; // ecx
int n6213; // ebx
int v7; // ecx
unsigned __int8 *n981_1; // esi
unsigned __int8 v10; // al
int n129; // ecx
unsigned __int8 v12; // dl
unsigned __int8 n0x20_1; // al
unsigned __int8 n0x20_2; // al
unsigned __int8 v15; // [esp+18h] [ebp-14h]
unsigned __int8 n0x20; // [esp+1Fh] [ebp-Dh]
unsigned __int8 v17; // [esp+20h] [ebp-Ch]
int n981_2; // [esp+28h] [ebp-4h] BYREF
n981_1 = n981;
if ( (a2 & 1) != 0 )
{
v10 = __inbyte(0x3C3u);
if ( (v10 & 1) == 0 )
{
__outbyte(0x3C3u, 1u);
__outbyte(0x3C2u, 0xE3u);
}
__outbyte(0x3D4u, 0x80u);
__outbyte(0x3D5u, 0xA8u);
n129 = 129;
v17 = -127;
n981_2 = 981;
do
{
__outbyte(0x3D4u, v17);
__outbyte(n981_2, 0);
v17 = ++n129;
}
while ( (unsigned __int16)n129 < 0x9Eu );
n981 = (unsigned __int8 *)&unk_FFE7752C;
n0x20 = n981_1[28];
if ( n0x20 >= 0x20u )
n981 = (unsigned __int8 *)&unk_FFE77834;
v12 = *n981;
n981_2 = 980;
do
{
v15 = n981[1];
__outbyte(n981_2, v12);
__outbyte(0x3D5u, v15);
n981 += 2;
v12 = *n981;
}
while ( *n981 != 0xFF );
if ( n0x20 == 64 )
{
__outbyte(0x3D4u, 0xBCu);
__outbyte(0x3D5u, 0x40u);
__outbyte(0x3D4u, 0xBDu);
__outbyte(0x3D5u, 0x38u);
__outbyte(0x3D4u, 0xBEu);
__outbyte(0x3D5u, 0x3Au);
__outbyte(0x3D4u, 0xBFu);
__outbyte(0x3D5u, 0x38u);
__outbyte(0x3D4u, 0xCFu);
__outbyte(0x3D5u, 0x70u);
__outbyte(0x3D4u, 0xB5u);
__outbyte(0x3D5u, 0xA8u);
__outbyte(0x3D4u, 0xBBu);
n981_2 = 981;
__outbyte(0x3D5u, 0x43u);
}
}
if ( (a2 & 2) != 0 )
{
n0x20_1 = n981_1[28];
if ( n0x20_1 < 0x40u )
{
if ( n0x20_1 < 0x20u )
PciRegClearBit((int)n981_1);
else
VgaModeColorConfig((int)n981_1);
}
else
{
VgaModeSetRefresh((int *)n981_1);
}
}
if ( (a2 & 4) != 0 )
{
n0x20_2 = n981_1[28];
if ( n0x20_2 < 0x30u )
{
if ( n0x20_2 < 0x20u )
VgaModeSetPlane((int *)n981_1);
else
VgaModeSetPlanes((int *)n981_1);
}
else
{
VgaModeProgramCrtcExt((int *)n981_1);
}
}
if ( (a2 & 8) != 0 )
{
n981_2 = (int)n981;
n12 = VgaCrtcRegAnd(0xD1u, 0xEu);
if ( n12 != 12 )
{
ImageDecodeBlock1(510533888, 3);
do
ImageDecodeBlock0(510533888, &n981_2);
while ( n981_2 != 3 );
ImageDecodeBlock0(510525444, &n981_2);
if ( (n981_2 & 3) != 0 )
{
if ( (n981_2 & 3) == 2 )
{
n1342177280 = 1342177280;
}
else if ( (n981_2 & 3) == 3 )
{
n1342177280 = 1610612736;
}
else
{
n1342177280 = 1207959552;
}
}
else
{
n1342177280 = 1140850688;
}
v4 = n1342177280 - 0x200000;
v5 = v4;
n6213 = 6213;
do
{
ImageDecodeBlock1(v5, *(_DWORD *)((char *)&unk_FFE7BA9C + v5 - v4));
v5 = v7 + 4;
--n6213;
}
while ( n6213 );
ImageDecodeBlock1(510533632, 378054824);
ImageDecodeBlock1(510533892, v4 + 0x80000000);
ImageDecodeBlock1(510533888, 1);
ImageDecodeBlock0(510533696, &n981_2);
ImageDecodeBlock1(510533696, n981_2 & 0xFFFFF1FF | 0x800);
LOBYTE(n981_2) = VgaCrtcRegAnd(0x99u, 0xFCu) | 2;
VgaSeqRegReadModifyWrite(0x3D4u, 0x99u, 0, n981_2);
}
}
}