int __cdecl VgaDisplayModeSwitch(__int16 a1, int a2, __int16 n273, _BYTE *a4)
{
int result; // eax
int n8_1; // ebp
int v7; // ecx
unsigned __int16 v8; // ax
int v9; // ebx
unsigned __int16 v10; // si
int v11; // ebx
unsigned int v12; // eax
unsigned int v13; // edx
int v14; // ecx
unsigned __int16 v15; // ax
int v16; // esi
unsigned __int16 v17; // bx
unsigned int v18; // eax
unsigned int v19; // edx
int v20; // ecx
int v21; // [esp+10h] [ebp-20h]
int v22; // [esp+14h] [ebp-1Ch]
int v23; // [esp+18h] [ebp-18h]
_BYTE *v24; // [esp+24h] [ebp-Ch]
_BYTE *v25; // [esp+28h] [ebp-8h]
_BYTE *v26; // [esp+2Ch] [ebp-4h]
int n8; // [esp+38h] [ebp+8h]
_BYTE *v28; // [esp+40h] [ebp+10h]
result = (unsigned __int16)a1;
n8_1 = 0;
v23 = 0;
v7 = *(_DWORD *)(a4 + 26);
v28 = (_BYTE *)v7;
if ( n273 == 290 )
{
v8 = (unsigned __int16)(a2 + 15) >> 4;
LABEL_3:
v9 = v8;
result = (unsigned __int16)a1;
goto LABEL_7;
}
if ( n273 == 273 )
{
v8 = (unsigned __int16)(a2 + 7) >> 3;
goto LABEL_3;
}
v9 = a2;
LABEL_7:
v21 = v9;
if ( (_WORD)v9 )
{
n8 = 8;
do
{
v10 = 0;
v22 = 0;
if ( n273 == 290 )
{
if ( (unsigned __int16)(result + 15) >> 4 )
{
v11 = (unsigned __int16)(result + 15) >> 4;
v24 = (_BYTE *)(v7 + 256);
v25 = (_BYTE *)(v7 + 512);
v26 = (_BYTE *)(v7 + 768);
do
{
VgaDisplayProgram(v7, 290, (int)a4);
VgaDisplaySetStartAddr(v10, n8_1, v28, (int)a4);
VgaDisplaySetStartAddr(v10 + 8, n8_1, v24, (int)a4);
VgaDisplaySetStartAddr(v22, n8, v25, (int)a4);
VgaDisplaySetStartAddr(v10 + 8, n8, v26, (int)a4);
v10 = v22 + 16;
v12 = *((unsigned __int16 *)a4 + 40);
v13 = v23 + 1;
v22 += 16;
++v23;
if ( (_WORD)v12 )
{
if ( !(v13 % v12) )
{
v14 = *(_DWORD *)a4;
if ( **(_BYTE **)a4 == 0xFF && (*(_BYTE *)(v14 + 1) & 0xF8) == 0xD0 )
{
*((_WORD *)a4 + 2) = 8;
*(_DWORD *)(a4 + 74) = 0;
*((_WORD *)a4 + 39) = 0;
*(_DWORD *)a4 = v14 + 2;
}
}
}
v7 = (int)v28;
v11 += 0xFFFF;
}
while ( (_WORD)v11 );
v9 = v21;
}
n8_1 += 16;
n8 += 16;
}
else if ( n273 == 273 )
{
v15 = (unsigned __int16)(result + 7) >> 3;
v16 = v15;
if ( v15 )
{
v17 = 0;
do
{
VgaDisplayProgram(v7, 273, (int)a4);
VgaDisplaySetStartAddr(v17, n8_1, v28, (int)a4);
v18 = *((unsigned __int16 *)a4 + 40);
v17 += 8;
v19 = ++v23;
if ( (_WORD)v18 )
{
if ( !(v19 % v18) )
{
v20 = *(_DWORD *)a4;
if ( **(_BYTE **)a4 == 0xFF && (*(_BYTE *)(v20 + 1) & 0xF8) == 0xD0 )
{
*((_WORD *)a4 + 2) = 8;
*(_DWORD *)(a4 + 74) = 0;
*((_WORD *)a4 + 39) = 0;
*(_DWORD *)a4 = v20 + 2;
}
}
}
v7 = (int)v28;
v16 += 0xFFFF;
}
while ( (_WORD)v16 );
v9 = v21;
}
n8_1 += 8;
n8 += 8;
}
result = (unsigned __int16)a1;
v9 += 0xFFFF;
v21 = v9;
}
while ( (_WORD)v9 );
}
return result;
}