Newer
Older
AMI-Aptio-BIOS-Reversed / PurleyPlatPkg / Platform / Pei / EarlyVideoPei / EarlyVideoPei.c
@Ajax Dong Ajax Dong 2 days ago 4 KB Full restructure
/*
 * EarlyVideoPei - aggregate decompiled source
 * Source: Auto-generated from IDA Pro decompilation
 *
 * This file preserves the compact aggregate view.  Prefer the split
 * one-function-per-file sources for focused review.
 *
 * Decompiled from port 13408
 */

#include "EarlyVideoPei.h"

/* InternalCopyMem at 0xffe6be6c */
char *InternalCopyMem(char *dst, char *src, unsigned int count)
{
  unsigned int count_1; // edx
  char *dst_1; // edi
  char *src_1; // esi

  count_1 = count; /* 0xffe6be76 */
  if ( src < dst && &src[count - 1] >= dst ) /* 0xffe6be84 */
  {
    src_1 = &src[count - 1]; /* 0xffe6be98 */
    dst_1 = &dst[count - 1]; /* 0xffe6be9a */
  }
  else
  {
    count_1 = count & 3; /* 0xffe6be88 */
    qmemcpy(dst, src, 4 * (count >> 2)); /* 0xffe6be91 */
    src_1 = &src[4 * (count >> 2)]; /* 0xffe6be91 */
    dst_1 = &dst[4 * (count >> 2)]; /* 0xffe6be91 */
  }

  qmemcpy(dst_1, src_1, count_1); /* 0xffe6bea1 */
  return dst; /* 0xffe6bea8 */
}

/* InternalSetMem at 0xffe6beac */
void *InternalSetMem(void *buf, unsigned int count, char value)
{
  memset(buf, value, count); /* 0xffe6beb9 */
  return buf; /* 0xffe6bebf */
}

/* InitMultiple at 0xffe6beec */
int InitMultiple(int a1, int a2, int a3, int a4)
{
  do /* 0xffe6bf05 */
  {
    *(_DWORD *)(a1 + 8 * a2 - 8) = a3; /* 0xffe6befd */
    *(_DWORD *)(a1 + 8 * a2-- - 4) = a4; /* 0xffe6bf01 */
  }
  while ( a2 ); /* 0xffe6bf05 */
  return a1; /* 0xffe6bf09 */
}

/* InternalSetMem32 at 0xffe6bf0c */
void *InternalSetMem32(void *buf, unsigned int count, int value)
{
  memset32(buf, value, count); /* 0xffe6bf19 */
  return buf; /* 0xffe6bf1f */
}

/* ModuleEntryPoint at 0xffe6bf2c */
EFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
  JUMPOUT(0xFFE6BFD6); /* 0xffe6bfd6 */
}

/* VgaSeqRegReadModifyWrite at 0xffe6c162 */
unsigned __int8 VgaSeqRegReadModifyWrite(unsigned __int16 a1, unsigned __int8 a2, char a3, char a4)
{
  unsigned __int8 v4; // al
  unsigned __int8 result; // al
  unsigned __int16 v6; // [esp+0h] [ebp-8h]

  __outbyte(a1, a2); /* 0xffe6c177 */
  v6 = a1 + 1; /* 0xffe6c179 */
  v4 = __inbyte(a1 + 1); /* 0xffe6c180 */
  result = a4 | a3 & v4; /* 0xffe6c184 */
  __outbyte(v6, result); /* 0xffe6c191 */
  return result; /* 0xffe6c192 */
}

/* VgaCrtcRegAnd at 0xffe6c196 */
int __usercall VgaCrtcRegAnd@<eax>(unsigned __int8 a1@<dl>, unsigned __int8 a2)
{
  unsigned __int8 v2; // al

  __outbyte(0x3D4u, a1); /* 0xffe6c1ac */
  v2 = __inbyte(0x3D5u); /* 0xffe6c1b8 */
  return a2 & v2; /* 0xffe6c1c2 */
}

/* VgaCrtcRegReadModifyWrite at 0xffe6c1c6 */
unsigned int VgaCrtcRegReadModifyWrite(unsigned __int8 a1, char a2, char a3, char a4, unsigned __int8 a5)
{
  unsigned __int32 v6; // eax
  unsigned int result; // eax
  _DWORD v8[4]; // [esp+4h] [ebp-20h]
  _DWORD v9[4]; // [esp+14h] [ebp-10h]

  v9[0] = 0; /* 0xffe6c1cc */
  v8[0] = -256; /* 0xffe6c1e4 */
  v8[1] = -65281; /* 0xffe6c206 */
  v8[2] = -16711681; /* 0xffe6c20f */
  v8[3] = 0xFFFFFF; /* 0xffe6c21c */
  v9[1] = 8; /* 0xffe6c223 */
  v9[2] = 16; /* 0xffe6c22a */
  v9[3] = 24; /* 0xffe6c231 */
  __outdword(0xCF8u, a4 & 0xFC | ((a3 & 7 | (8 * (a2 & 0x1F | (32 * (a1 | 0xFFFF8000))))) << 8)); /* 0xffe6c23f */
  v6 = __indword(0xCFCu); /* 0xffe6c244 */
  result = v6 & v8[a4 & 3] | (a5 << v9[a4 & 3]); /* 0xffe6c25e */
  __outdword(0xCFCu, result); /* 0xffe6c261 */
  return result; /* 0xffe6c262 */
}

/* PciCfgWrite at 0xffe6c267 */
unsigned int PciCfgWrite(unsigned __int8 a1, char a2, char a3, unsigned __int8 a4, unsigned __int16 a5)
{
  int v5; // esi
  unsigned __int32 v6; // eax
  unsigned int result; // eax
  _DWORD v8[2]; // [esp+4h] [ebp-10h]
  _DWORD v9[2]; // [esp+Ch] [ebp-8h]

  v9[0] = 0; /* 0xffe6c26d */
  v8[0] = -65536; /* 0xffe6c285 */
  v8[1] = 0xFFFF; /* 0xffe6c29d */
  v5 = a4 >> 1; /* 0xffe6c2ae */
  v9[1] = 16; /* 0xffe6c2b2 */
  __outdword(0xCF8u, a4 & 0xFC | ((a3 & 7 | (8 * (a2 & 0x1F | (32 * (a1 | 0xFFFF8000))))) << 8)); /* 0xffe6c2c6 */
  v6 = __indword(0xCFCu); /* 0xffe6c2cb */
  result = v6 & v8[v5 & 1] | (a5 << v9[v5 & 1]); /* 0xffe6c2e5 */
  __outdword(0xCFCu, result); /* 0xffe6c2e8 */
  return result; /* 0xffe6c2e9 */
}

/* PciCfgRead16 at 0xffe6c2ee */
unsigned int PciCfgRead16(unsigned __int8 a1, char i, char a3, char n16, unsigned int a5)
{
  unsigned int result; // eax

  __outdword(0xCF8u, n16 & 0xFC | ((a3 & 7 | (8 * (i & 0x1F | (32 * (a1 | 0xFFFF8000))))) << 8)); /* 0xffe6c329 */
  result = a5; /* 0xffe6c32e */
  __outdword(0xCFCu, a5); /* 0xffe6c331 */
  return result; /* 0xffe6c332 */
}