int __cdecl MmioCfgRead(int a1, int a2, unsigned int a3, unsigned __int32 a4, int a5, int a6)
{
unsigned __int32 v6; // esi
unsigned __int32 v8; // ebx
unsigned __int32 v9; // edi
int v10; // ecx
char i_1; // dl
char v12; // bp
unsigned __int32 v13; // ecx
bool v14; // zf
int v15; // ecx
int v16; // ecx
char i_3; // dl
char v18; // al
unsigned __int8 v19; // cl
char i_2; // [esp+5h] [ebp-13h]
char i; // [esp+6h] [ebp-12h]
unsigned __int8 v22; // [esp+6h] [ebp-12h]
unsigned __int8 v23; // [esp+7h] [ebp-11h]
char n16; // [esp+8h] [ebp-10h]
char v25; // [esp+10h] [ebp-8h]
unsigned __int32 v26; // [esp+14h] [ebp-4h] BYREF
v6 = a4;
if ( (a4 & 0xFFFFF) != 0 || (a5 & 0xFFFFF) != 0 || (a6 & 0xFFF) != 0 || (a6 & 0xFFF0000) != 0 )
return -2147483641;
n16 = 16;
v8 = a3 >> 8;
v9 = (unsigned __int16)a6;
v10 = 3 * (unsigned __int8)a3;
i_1 = *(_BYTE *)(v10 + a2 - 2);
v12 = *(_BYTE *)(v10 + a2 - 1);
for ( i = i_1; ; i_1 = i )
{
PciCfgRead16(v8, i_1, v12, n16, 0xFFFFFFFF);
PciCfgReadModifyWrite(v8, i, v12, n16, &v26);
if ( !v26 )
goto LABEL_20;
v13 = ~(v26 & 0xFFFFFFF0);
if ( (v26 & 1) != 0 )
{
if ( (v13 & v9) != 0 )
v9 = v26 & 0xFFFFFFF0 & (~(v26 & 0xFFFFFFF0) + v9 + 1);
v8 = v9 | v26 & 0xF;
v9 += v13 + 1;
}
else
{
if ( (v13 & v6) != 0 )
v6 = v26 & 0xFFFFFFF0 & (~(v26 & 0xFFFFFFF0) + v6 + 1);
v8 = v6 | v26 & 0xF;
v6 += v13 + 1;
}
v26 = v8;
if ( v6 > a4 + a5 || v9 > (unsigned __int16)a6 + (unsigned int)HIWORD(a6) )
return -2147483641;
PciCfgRead16(BYTE1(a3), i, v12, n16, v8);
if ( (v8 & 1) != 0 )
{
LABEL_20:
LOBYTE(v8) = BYTE1(a3);
}
else
{
v14 = (v8 & 6) == 4;
LOBYTE(v8) = BYTE1(a3);
if ( v14 )
{
n16 += 4;
PciCfgRead16(BYTE1(a3), i, v12, n16, 0);
}
}
n16 += 4;
if ( (unsigned __int8)n16 >= 0x28u )
break;
}
v23 = 0;
if ( (unsigned __int8)a3 - 1 > 0 )
{
v15 = 0;
do
{
v16 = 3 * v15;
i_3 = *(_BYTE *)(v16 + a2 + 1);
v18 = *(_BYTE *)(v16 + a2 + 2);
v19 = *(_BYTE *)(v16 + a2);
v25 = v18;
v22 = v19;
i_2 = i_3;
if ( v6 <= a4 )
{
PciCfgWrite(v19, i_3, v18, 0x20u, 0xFFF0u);
PciCfgWrite(v22, i_2, v25, 0x22u, 0);
}
else
{
PciCfgWrite(v19, i_3, v18, 0x20u, HIWORD(a4) & 0xFFF0);
PciCfgWrite(v22, i_2, v25, 0x22u, HIWORD(v6) & 0xFFF0);
}
if ( v9 <= (unsigned __int16)a6 )
{
VgaCrtcRegReadModifyWrite(v22, i_2, v25, 28, 0xF0u);
VgaCrtcRegReadModifyWrite(v22, i_2, v25, 29, 0);
PciCfgWrite(v22, i_2, v25, 0x30u, 0xFFu);
}
else
{
VgaCrtcRegReadModifyWrite(v22, i_2, v25, 28, BYTE1(a6) & 0xF0);
VgaCrtcRegReadModifyWrite(v22, i_2, v25, 29, BYTE1(v9) & 0xF0);
PciCfgWrite(v22, i_2, v25, 0x30u, 0);
}
PciCfgWrite(v22, i_2, v25, 0x32u, 0);
PciCfgWrite(v22, i_2, v25, 0x24u, 0xFFF0u);
PciCfgWrite(v22, i_2, v25, 0x26u, 0);
PciCfgRead16(v22, i_2, v25, 40, 0xFFFFFFFF);
PciCfgRead16(v22, i_2, v25, 44, 0);
v15 = ++v23;
}
while ( v23 < (unsigned __int8)a3 - 1 );
}
return 0;
}