void FUN_0040207c(uint param_1)

{
  byte bVar1;
  int iVar2;
  int iVar3;
  ushort *puVar4;
  
  iVar3 = (int)((param_1 - 1) * 0x1000000) >> 0x18;
  puVar4 = (ushort *)(&DAT_00404f20 + iVar3 * 2);
  for (; -1 < iVar3; iVar3 = (iVar3 + -1) * 0x1000000 >> 0x18) {
    iVar2 = (DAT_004152f6 - 1) * 0x1000000;
    if ((param_1 >> 0x10 & (uint)*puVar4) != 0) {
      DAT_00415540 = (&DAT_00404f20)[(char)DAT_004152f6 * 2] | DAT_00415540;
    }
    DAT_004152f6 = (byte)((uint)iVar2 >> 0x18);
    if (iVar2 >> 0x18 < 0) {
      bVar1 = DAT_00415540;
      if (DAT_00415540 == 0xff) {
        fputc(0xff,DAT_0041857c);
        bVar1 = 0;
      }
      fputc((int)bVar1,DAT_0041857c);
      DAT_004152f6 = 7;
      DAT_00415540 = 0;
    }
    puVar4 = puVar4 + -1;
  }
  return;
}