移植官方附加环节全部路径:帧差/隔行平滑/gray覆盖/Nx升采样(编译开关+按键测试)

- OFF_IMPL_230: 帧差调整 0x175a0 逐行移植(0x278 官方 NULL 时 no-op)
- OFF_IMPL_41FE8: 隔行平滑 0x184f0(2x)/0x18660(4x) 逐行翻译(4相位加权插值)
- OFF_IMPL_30: gray 覆盖路径——0x17c40 manual 逐行翻译(8x8窗口4x4采样
  对比度增强累积→gray);0x17770 auto 双边滤波结构移植(官方空间权重表
  在 .data 被裁剪无法提取,用标准高斯核近似,文档注明)
- OFF_IMPL_UPSCALE: Nx 升采样 4x/8x(2x 已验证模式推广,线性插值+边缘外推)
- 运行时按键切换:0=41fe8 模式、8=0x230、9=0x30 模式
- 验证:默认版无回归;全开版运行正常,41fe8=1 平滑生效(nuc std 250→95)
- 文档:csdk/README 开关说明、csdk/README 验证状态更新
This commit is contained in:
ZXCLI
2026-08-14 16:52:52 +08:00
parent 51c8ba9174
commit df6c6dd444
4 changed files with 1013 additions and 3 deletions
@@ -5238,3 +5238,646 @@ undefined8 FUN_18001c670(longlong param_1,uint *param_2,uint param_3)
==================================================================
### ADDR 180019b30 FUNC 180019b30 (816 bytes) name=FUN_180019b30
void FUN_180019b30(longlong param_1)
{
byte bVar1;
byte bVar2;
int iVar3;
ulonglong uVar4;
undefined1 uVar5;
int iVar6;
uint uVar7;
undefined1 *puVar8;
undefined1 *_Dst;
uint uVar9;
uint uVar10;
uint uVar11;
void *_Src;
byte *pbVar12;
byte *pbVar13;
byte *pbVar14;
uint uVar15;
byte *pbVar16;
uint local_res8;
_Src = *(void **)(param_1 + 0x2a0);
local_res8 = 0;
uVar9 = 0;
puVar8 = (undefined1 *)
(((ulonglong)(uint)((*(int *)(param_1 + 0x41fcc) + 3) * *(int *)(param_1 + 0x41fc8)) -
(ulonglong)(uint)((*(int *)(param_1 + 0x41fc0) + 8) * (*(int *)(param_1 + 0x41fc4) + 1))
) + *(longlong *)(param_1 + 0x220));
_Dst = puVar8;
if (*(int *)(param_1 + 0x41fc4) != 0) {
do {
memcpy(_Dst,_Src,(ulonglong)*(uint *)(param_1 + 0x41fc0));
iVar6 = (uint)*(byte *)((ulonglong)(*(int *)(param_1 + 0x41fc0) - 1) + (longlong)_Src) * 2 -
(uint)*(byte *)((ulonglong)(*(int *)(param_1 + 0x41fc0) - 2) + (longlong)_Src);
if (iVar6 < 0x100) {
uVar5 = (undefined1)iVar6;
if (iVar6 < 0) {
uVar5 = 0;
}
}
else {
uVar5 = 0xff;
}
uVar9 = uVar9 + 1;
_Dst[*(uint *)(param_1 + 0x41fc0)] = uVar5;
_Src = (void *)((longlong)_Src + (ulonglong)*(uint *)(param_1 + 0x41fc0));
_Dst = _Dst + (*(uint *)(param_1 + 0x41fc0) + 8);
} while (uVar9 < *(uint *)(param_1 + 0x41fc4));
}
uVar4 = (ulonglong)(*(int *)(param_1 + 0x41fc0) + 8);
pbVar12 = _Dst + -uVar4;
pbVar13 = pbVar12 + -uVar4;
for (iVar6 = *(int *)(param_1 + 0x41fc0) + 1; iVar6 != 0; iVar6 = iVar6 + -1) {
bVar1 = *pbVar12;
bVar2 = *pbVar13;
pbVar13 = pbVar13 + 1;
pbVar12 = pbVar12 + 1;
iVar3 = (uint)bVar1 * 2 - (uint)bVar2;
if (iVar3 < 0x100) {
uVar5 = (undefined1)iVar3;
if (iVar3 < 0) {
uVar5 = 0;
}
}
else {
uVar5 = 0xff;
}
*_Dst = uVar5;
_Dst = _Dst + 1;
}
if (*(int *)(param_1 + 0x41fc4) != 0) {
do {
iVar6 = *(int *)(param_1 + 0x41fc0);
pbVar13 = (byte *)((ulonglong)(*(int *)(param_1 + 0x41fc8) * local_res8 * 4) +
*(longlong *)(param_1 + 0x220));
pbVar12 = puVar8 + (iVar6 + 8) * local_res8;
if (iVar6 != 0) {
pbVar16 = pbVar13 + 2;
do {
bVar1 = *pbVar12;
uVar10 = (uint)bVar1;
uVar7 = (uint)pbVar12[1];
uVar15 = (uint)pbVar12[(ulonglong)*(uint *)(param_1 + 0x41fc0) + 8];
uVar11 = (uint)pbVar12[(ulonglong)*(uint *)(param_1 + 0x41fc0) + 9];
pbVar12 = pbVar12 + 1;
*pbVar13 = bVar1;
uVar9 = uVar10 * 3 + uVar15;
pbVar16[-1] = (byte)(uVar10 * 3 + uVar7 >> 2);
*pbVar16 = (byte)(uVar7 + uVar10 >> 1);
pbVar16[1] = (byte)(uVar7 * 3 + uVar10 >> 2);
pbVar14 = pbVar13 + *(uint *)(param_1 + 0x41fc8);
*pbVar14 = (byte)(uVar9 >> 2);
pbVar14[1] = (byte)(uVar11 + (uVar9 + uVar7) * 3 >> 4);
pbVar14[2] = (byte)(uVar11 + (uVar7 + uVar10) * 3 + uVar15 >> 3);
pbVar14[3] = (byte)(uVar15 + (uVar7 * 3 + uVar11 + uVar10) * 3 >> 4);
pbVar14 = pbVar13 + (uint)(*(int *)(param_1 + 0x41fc8) * 2);
*pbVar14 = (byte)(uVar15 + uVar10 >> 1);
pbVar14[1] = (byte)(uVar11 + (uVar15 + uVar10) * 3 + uVar7 >> 3);
pbVar14[2] = (byte)(uVar11 + uVar15 + uVar7 + uVar10 >> 2);
pbVar14[3] = (byte)(uVar15 + (uVar11 + uVar7) * 3 + uVar10 >> 3);
pbVar14 = pbVar13 + (uint)(*(int *)(param_1 + 0x41fc8) * 3);
*pbVar14 = (byte)(uVar15 * 3 + uVar10 >> 2);
pbVar13 = pbVar13 + 4;
pbVar16 = pbVar16 + 4;
pbVar14[1] = (byte)(uVar7 + (uVar15 * 3 + uVar11 + uVar10) * 3 >> 4);
pbVar14[2] = (byte)(uVar7 + (uVar11 + uVar15) * 3 + uVar10 >> 3);
iVar6 = iVar6 + -1;
pbVar14[3] = (byte)(uVar10 + (uVar15 + uVar11 * 3 + uVar7) * 3 >> 4);
} while (iVar6 != 0);
}
local_res8 = local_res8 + 1;
} while (local_res8 < *(uint *)(param_1 + 0x41fc4));
}
return;
}
==================================================================
### ADDR 180019e60 FUNC 180019e60 (2276 bytes) name=FUN_180019e60
void FUN_180019e60(longlong param_1)
{
uint uVar1;
uint uVar2;
int iVar3;
uint uVar4;
uint uVar5;
byte bVar6;
byte bVar7;
int iVar8;
ulonglong uVar9;
undefined1 uVar10;
int iVar11;
int iVar12;
int iVar13;
uint uVar14;
undefined1 *puVar15;
undefined1 *_Dst;
void *_Src;
uint uVar16;
uint uVar17;
uint uVar18;
uint uVar19;
byte *pbVar20;
byte *pbVar21;
int iVar22;
byte *pbVar23;
byte *pbVar24;
int iVar25;
int iVar26;
uint uVar27;
int iVar28;
uint uVar29;
int iVar30;
int local_90;
uint local_8c;
_Src = *(void **)(param_1 + 0x2a0);
local_8c = 0;
uVar16 = 0;
puVar15 = (undefined1 *)
(((ulonglong)(uint)((*(int *)(param_1 + 0x41fcc) + 3) * *(int *)(param_1 + 0x41fc8)) -
(ulonglong)
(uint)((*(int *)(param_1 + 0x41fc0) + 8) * (*(int *)(param_1 + 0x41fc4) + 1))) +
*(longlong *)(param_1 + 0x220));
_Dst = puVar15;
if (*(int *)(param_1 + 0x41fc4) != 0) {
do {
memcpy(_Dst,_Src,(ulonglong)*(uint *)(param_1 + 0x41fc0));
iVar11 = (uint)*(byte *)((ulonglong)(*(int *)(param_1 + 0x41fc0) - 1) + (longlong)_Src) * 2 -
(uint)*(byte *)((ulonglong)(*(int *)(param_1 + 0x41fc0) - 2) + (longlong)_Src);
if (iVar11 < 0x100) {
uVar10 = (undefined1)iVar11;
if (iVar11 < 0) {
uVar10 = 0;
}
}
else {
uVar10 = 0xff;
}
uVar16 = uVar16 + 1;
_Dst[*(uint *)(param_1 + 0x41fc0)] = uVar10;
_Src = (void *)((longlong)_Src + (ulonglong)*(uint *)(param_1 + 0x41fc0));
_Dst = _Dst + (*(uint *)(param_1 + 0x41fc0) + 8);
} while (uVar16 < *(uint *)(param_1 + 0x41fc4));
}
uVar9 = (ulonglong)(*(int *)(param_1 + 0x41fc0) + 8);
pbVar20 = _Dst + -uVar9;
pbVar23 = pbVar20 + -uVar9;
for (iVar11 = *(int *)(param_1 + 0x41fc0) + 1; iVar11 != 0; iVar11 = iVar11 + -1) {
bVar6 = *pbVar20;
bVar7 = *pbVar23;
pbVar23 = pbVar23 + 1;
pbVar20 = pbVar20 + 1;
iVar8 = (uint)bVar6 * 2 - (uint)bVar7;
if (iVar8 < 0x100) {
uVar10 = (undefined1)iVar8;
if (iVar8 < 0) {
uVar10 = 0;
}
}
else {
uVar10 = 0xff;
}
*_Dst = uVar10;
_Dst = _Dst + 1;
}
if (*(int *)(param_1 + 0x41fc4) != 0) {
do {
local_90 = *(int *)(param_1 + 0x41fc0);
pbVar20 = (byte *)((ulonglong)(*(int *)(param_1 + 0x41fc8) * local_8c * 8) +
*(longlong *)(param_1 + 0x220));
if (local_90 != 0) {
pbVar23 = pbVar20 + 6;
pbVar24 = puVar15 + (local_90 + 8) * local_8c;
do {
uVar14 = (uint)pbVar24[1];
uVar18 = (uint)*pbVar24;
uVar27 = (uint)pbVar24[(ulonglong)*(uint *)(param_1 + 0x41fc0) + 8];
uVar29 = (uint)pbVar24[(ulonglong)*(uint *)(param_1 + 0x41fc0) + 9];
uVar16 = uVar18 * 7 + uVar14;
iVar8 = uVar18 * 3;
uVar19 = uVar14 + uVar18;
uVar4 = iVar8 + uVar14;
*pbVar20 = *pbVar24;
pbVar23[-5] = (byte)(uVar16 >> 3);
pbVar23[-4] = (byte)(uVar4 >> 2);
pbVar23[-3] = (byte)(uVar18 * 0x28 + uVar14 * 0x18 >> 6);
pbVar23[-2] = (byte)(uVar19 >> 1);
pbVar23[-1] = (byte)(uVar18 * 0x18 + uVar14 * 0x28 >> 6);
uVar17 = uVar14 * 3 + uVar18;
*pbVar23 = (byte)(uVar17 >> 2);
uVar1 = uVar14 * 7 + uVar18;
pbVar23[1] = (byte)(uVar1 >> 3);
uVar2 = uVar18 * 7 + uVar27;
pbVar21 = pbVar20 + *(uint *)(param_1 + 0x41fc8);
iVar3 = uVar27 * 3;
*pbVar21 = (byte)(uVar2 >> 3);
pbVar21[1] = (byte)((uVar2 + uVar14) * 7 + uVar29 >> 6);
iVar11 = uVar14 * 7 + uVar29;
pbVar21[2] = (byte)(uVar4 * 7 + iVar3 + uVar29 >> 5);
iVar13 = uVar29 * 3;
pbVar21[3] = (byte)(iVar11 * 3 + uVar2 * 5 >> 6);
pbVar21[4] = (byte)(uVar19 * 7 + uVar29 + uVar27 >> 4);
uVar5 = iVar8 + uVar27;
pbVar21[5] = (byte)(iVar11 * 5 + uVar2 * 3 >> 6);
pbVar21[6] = (byte)(uVar17 * 7 + iVar13 + uVar27 >> 5);
pbVar21[7] = (byte)((uVar18 + iVar11) * 7 + uVar27 >> 6);
pbVar21 = pbVar20 + (uint)(*(int *)(param_1 + 0x41fc8) * 2);
*pbVar21 = (byte)(uVar5 >> 2);
iVar11 = uVar14 * 3 + uVar29;
pbVar21[1] = (byte)(uVar5 * 7 + uVar14 * 3 + uVar29 >> 5);
pbVar21[2] = (byte)(uVar29 + (uVar14 + uVar5) * 3 >> 4);
pbVar21[3] = (byte)(uVar5 * 10 + iVar11 * 6 >> 6);
pbVar21[4] = (byte)(uVar29 + uVar19 * 3 + uVar27 >> 3);
pbVar21[5] = (byte)(uVar5 * 6 + iVar11 * 10 >> 6);
pbVar21[6] = (byte)(uVar27 + (iVar11 + uVar18) * 3 >> 4);
pbVar21[7] = (byte)(iVar11 * 7 + iVar8 + uVar27 >> 5);
pbVar21 = pbVar20 + (uint)(*(int *)(param_1 + 0x41fc8) * 3);
iVar11 = uVar27 * 7 + uVar29;
*pbVar21 = (byte)(uVar18 * 0x28 + uVar27 * 0x18 >> 6);
iVar22 = (uVar29 + uVar18) * 0xf;
iVar30 = uVar29 + iVar3;
pbVar21[1] = (byte)(iVar11 * 3 + uVar16 * 5 >> 6);
iVar28 = uVar27 + uVar29;
iVar25 = (uVar27 + uVar14) * 0xf;
pbVar21[2] = (byte)(uVar4 * 10 + iVar30 * 6 >> 6);
iVar26 = iVar13 + uVar27;
pbVar21[3] = (byte)(uVar18 * 0x19 + iVar25 + uVar29 * 9 >> 6);
pbVar21[4] = (byte)(uVar19 * 0x14 + iVar28 * 0xc >> 6);
iVar8 = uVar29 * 7 + uVar27;
pbVar21[5] = (byte)(uVar27 * 9 + uVar14 * 0x19 + iVar22 >> 6);
pbVar21[6] = (byte)((uVar14 * 3 + uVar18) * 10 + iVar26 * 6 >> 6);
pbVar21[7] = (byte)(iVar8 * 3 + uVar1 * 5 >> 6);
pbVar21 = pbVar20 + (uint)(*(int *)(param_1 + 0x41fc8) << 2);
uVar19 = uVar27 + uVar18;
*pbVar21 = (byte)(uVar19 >> 1);
pbVar21[1] = (byte)(uVar19 * 7 + uVar29 + uVar14 >> 4);
iVar12 = uVar29 + uVar14;
pbVar21[2] = (byte)(uVar29 + uVar19 * 3 + uVar14 >> 3);
pbVar21[3] = (byte)(uVar19 * 0x14 + iVar12 * 0xc >> 6);
pbVar21[4] = (byte)(iVar28 + uVar14 + uVar18 >> 2);
pbVar21[5] = (byte)(uVar19 * 0xc + iVar12 * 0x14 >> 6);
pbVar21[6] = (byte)(uVar27 + iVar12 * 3 + uVar18 >> 3);
pbVar21[7] = (byte)(iVar12 * 7 + uVar27 + uVar18 >> 4);
pbVar21 = pbVar20 + (uint)(*(int *)(param_1 + 0x41fc8) * 5);
*pbVar21 = (byte)(uVar18 * 0x18 + uVar27 * 0x28 >> 6);
pbVar21[1] = (byte)(iVar11 * 5 + uVar16 * 3 >> 6);
pbVar21[2] = (byte)((uVar18 * 3 + uVar14) * 6 + iVar30 * 10 >> 6);
uVar16 = uVar18 + iVar3;
pbVar21[3] = (byte)(uVar14 * 9 + iVar22 + uVar27 * 0x19 >> 6);
pbVar21[4] = (byte)((uVar14 + uVar18) * 0xc + iVar28 * 0x14 >> 6);
pbVar21[5] = (byte)(uVar18 * 9 + uVar29 * 0x19 + iVar25 >> 6);
pbVar21[6] = (byte)((uVar14 * 3 + uVar18) * 6 + iVar26 * 10 >> 6);
pbVar21[7] = (byte)(iVar8 * 5 + uVar1 * 3 >> 6);
pbVar21 = pbVar20 + (uint)(*(int *)(param_1 + 0x41fc8) * 6);
*pbVar21 = (byte)(uVar16 >> 2);
pbVar21[1] = (byte)(uVar16 * 7 + iVar13 + uVar14 >> 5);
iVar13 = iVar13 + uVar14;
pbVar21[2] = (byte)(uVar14 + (iVar30 + uVar18) * 3 >> 4);
pbVar21[3] = (byte)(uVar16 * 10 + iVar13 * 6 >> 6);
pbVar21[4] = (byte)(uVar14 + iVar28 * 3 + uVar18 >> 3);
pbVar21[5] = (byte)(uVar16 * 6 + iVar13 * 10 >> 6);
pbVar21[6] = (byte)(uVar18 + (iVar26 + uVar14) * 3 >> 4);
pbVar21[7] = (byte)(iVar13 * 7 + iVar3 + uVar18 >> 5);
iVar3 = uVar29 * 7 + uVar14;
pbVar21 = pbVar20 + (uint)(*(int *)(param_1 + 0x41fc8) * 7);
uVar16 = uVar18 + uVar27 * 7;
*pbVar21 = (byte)(uVar16 >> 3);
pbVar21[1] = (byte)((iVar11 + uVar18) * 7 + uVar14 >> 6);
pbVar21[2] = (byte)(iVar30 * 7 + uVar18 * 3 + uVar14 >> 5);
pbVar21[3] = (byte)(iVar3 * 3 + uVar16 * 5 >> 6);
pbVar21[4] = (byte)(iVar28 * 7 + uVar14 + uVar18 >> 4);
pbVar21[5] = (byte)(iVar3 * 5 + uVar16 * 3 >> 6);
pbVar20 = pbVar20 + 8;
pbVar23 = pbVar23 + 8;
local_90 = local_90 + -1;
pbVar21[6] = (byte)(iVar26 * 7 + uVar14 * 3 + uVar18 >> 5);
pbVar21[7] = (byte)((iVar8 + uVar14) * 7 + uVar18 >> 6);
pbVar24 = pbVar24 + 1;
} while (local_90 != 0);
}
local_8c = local_8c + 1;
} while (local_8c < *(uint *)(param_1 + 0x41fc4));
}
return;
}
==================================================================
### ADDR 1800191b0 FUNC 1800191b0 (1423 bytes) name=FUN_1800191b0
/* WARNING: Type propagation algorithm not settling */
byte * FUN_1800191b0(longlong param_1)
{
int iVar1;
byte bVar2;
byte bVar3;
byte bVar4;
byte bVar5;
byte bVar6;
byte bVar7;
uint uVar8;
byte *pbVar9;
ulonglong uVar10;
undefined1 uVar11;
int iVar12;
int iVar13;
undefined1 *puVar14;
undefined1 *_Dst;
uint uVar15;
uint uVar16;
uint uVar17;
byte *pbVar18;
int iVar19;
byte *pbVar20;
int iVar21;
byte *pbVar22;
byte *pbVar23;
uint uVar24;
uint uVar25;
uint uVar26;
uint uVar27;
uint local_res10;
uint local_res18;
uint local_res20;
pbVar18 = *(byte **)(param_1 + 0x2a0);
uVar8 = *(int *)(param_1 + 0x41fc0) + 8;
pbVar9 = (byte *)(ulonglong)uVar8;
local_res18 = 0;
uVar15 = 0;
puVar14 = (undefined1 *)
(((ulonglong)(uint)((*(int *)(param_1 + 0x41fcc) + 3) * *(int *)(param_1 + 0x41fc8)) -
(ulonglong)((*(int *)(param_1 + 0x41fc4) + 1) * uVar8)) +
*(longlong *)(param_1 + 0x220));
_Dst = puVar14;
if (*(int *)(param_1 + 0x41fc4) != 0) {
do {
memcpy(_Dst,pbVar18,(ulonglong)*(uint *)(param_1 + 0x41fc0));
iVar12 = (uint)pbVar18[*(int *)(param_1 + 0x41fc0) - 1] * 2 -
(uint)pbVar18[*(int *)(param_1 + 0x41fc0) - 2];
if (iVar12 < 0x100) {
uVar11 = (undefined1)iVar12;
if (iVar12 < 0) {
uVar11 = 0;
}
}
else {
uVar11 = 0xff;
}
uVar15 = uVar15 + 1;
_Dst[*(uint *)(param_1 + 0x41fc0)] = uVar11;
pbVar9 = (byte *)(ulonglong)*(uint *)(param_1 + 0x41fc0);
pbVar18 = pbVar18 + (longlong)pbVar9;
_Dst = _Dst + (*(uint *)(param_1 + 0x41fc0) + 8);
} while (uVar15 < *(uint *)(param_1 + 0x41fc4));
}
uVar10 = (ulonglong)(*(int *)(param_1 + 0x41fc0) + 8);
pbVar18 = _Dst + -uVar10;
pbVar20 = pbVar18 + -uVar10;
for (iVar12 = *(int *)(param_1 + 0x41fc0) + 1; iVar12 != 0; iVar12 = iVar12 + -1) {
bVar2 = *pbVar18;
bVar3 = *pbVar20;
pbVar20 = pbVar20 + 1;
pbVar18 = pbVar18 + 1;
uVar8 = (uint)bVar2 * 2 - (uint)bVar3;
if ((int)uVar8 < 0x100) {
pbVar9 = (byte *)(ulonglong)uVar8;
if ((int)uVar8 < 0) {
pbVar9 = (byte *)0x0;
}
}
else {
pbVar9 = (byte *)0xff;
}
*_Dst = (char)pbVar9;
_Dst = _Dst + 1;
}
if (*(int *)(param_1 + 0x41fc4) != 0) {
uVar10 = 0;
local_res20 = 0;
do {
local_res10 = *(uint *)(param_1 + 0x41fc0);
pbVar20 = puVar14 + (local_res10 + 8) * local_res18;
pbVar9 = (byte *)((ulonglong)local_res10 * 0xaaaaaaab & 0xffffffff);
pbVar18 = (byte *)((ulonglong)(uint)((int)(uVar10 / 3) * *(int *)(param_1 + 0x41fc8)) +
*(longlong *)(param_1 + 0x220));
local_res10 = local_res10 / 3;
if (local_res10 != 0) {
pbVar9 = pbVar20 + 2;
pbVar23 = pbVar18 + 3;
do {
bVar2 = pbVar9[-1];
bVar3 = *pbVar9;
bVar4 = pbVar9[1];
bVar5 = *pbVar20;
uVar10 = (ulonglong)*(uint *)(param_1 + 0x41fc0);
iVar19 = (uint)bVar3 + (uint)bVar2 * 4;
bVar6 = pbVar20[uVar10 + 10];
bVar7 = pbVar20[uVar10 + 9];
uVar27 = (uint)bVar7;
uVar26 = (uint)pbVar20[uVar10 + 8];
iVar13 = (uint)bVar5 * 0x19a;
uVar8 = (uint)pbVar20[uVar10 + 0xb];
iVar21 = (uint)bVar2 + (uint)bVar3 * 4;
*pbVar18 = bVar5 / 1;
uVar15 = (uint)bVar6;
pbVar23[-2] = (byte)((uint)bVar2 * 0x267 + iVar13 >> 10);
pbVar23[-1] = (byte)((uint)(iVar19 * 0xcd) >> 10);
*pbVar23 = (byte)((uint)(iVar21 * 0xcd) >> 10);
pbVar23[1] = (byte)((uint)bVar3 * 0x267 + (uint)bVar4 * 0x19a >> 10);
pbVar22 = pbVar18 + *(uint *)(param_1 + 0x41fc8);
iVar12 = (uint)bVar7 * 4;
*pbVar22 = (byte)(uVar26 * 0x267 + iVar13 >> 10);
iVar1 = (uint)bVar6 * 4;
pbVar22[1] = (byte)((uVar26 + bVar2) * 0xf6 + uVar27 * 0x171 + (uint)bVar5 * 0xa4 >> 10);
pbVar22[2] = (byte)((iVar12 + (uint)bVar6) * 0x7b + iVar19 * 0x52 >> 10);
pbVar22[3] = (byte)((iVar1 + uVar27) * 0x7b + iVar21 * 0x52 >> 10);
pbVar22[4] = (byte)((uVar8 + bVar3) * 0xf6 + uVar15 * 0x171 + (uint)bVar4 * 0xa4 >> 10);
pbVar22 = pbVar20 + (*(int *)(param_1 + 0x41fc0) * 2 + 0x10);
uVar25 = (uint)pbVar22[2];
uVar17 = (uint)*pbVar22;
uVar16 = (uint)pbVar22[1];
uVar24 = (uint)pbVar22[3];
iVar12 = iVar12 + uVar16;
pbVar22 = pbVar18 + (uint)(*(int *)(param_1 + 0x41fc8) * 2);
iVar13 = uVar17 + uVar26 * 4;
*pbVar22 = (byte)((uint)(iVar13 * 0xcd) >> 10);
iVar1 = iVar1 + uVar25;
pbVar22[1] = (byte)((uint)(iVar12 * 0x7b + iVar13 * 0x52) >> 10);
pbVar22[2] = (byte)((uVar25 + (iVar12 + uVar15) * 4) * 0x29 >> 10);
iVar12 = uVar26 + uVar17 * 4;
pbVar22[3] = (byte)((uVar16 + (iVar1 + uVar27) * 4) * 0x29 >> 10);
pbVar22[4] = (byte)((uVar24 + uVar8 * 4) * 0x52 + iVar1 * 0x7b >> 10);
iVar13 = uVar16 * 4 + uVar25;
pbVar22 = pbVar18 + (uint)(*(int *)(param_1 + 0x41fc8) * 3);
*pbVar22 = (byte)((uint)(iVar12 * 0xcd) >> 10);
iVar1 = uVar25 * 4 + uVar16;
pbVar22[1] = (byte)((uVar16 * 4 + uVar27) * 0x7b + iVar12 * 0x52 >> 10);
pbVar22[2] = (byte)((uVar15 + (iVar13 + uVar27) * 4) * 0x29 >> 10);
pbVar22[3] = (byte)((uVar27 + (iVar1 + uVar15) * 4) * 0x29 >> 10);
pbVar22[4] = (byte)((uVar8 + uVar24 * 4) * 0x52 + (uVar25 * 4 + uVar15) * 0x7b >> 10);
pbVar22 = pbVar20 + (*(int *)(param_1 + 0x41fc0) * 3 + 0x18);
bVar2 = *pbVar22;
uVar8 = (uint)pbVar22[1];
uVar15 = (uint)pbVar22[2];
bVar3 = pbVar22[3];
pbVar20 = pbVar20 + 3;
pbVar22 = pbVar18 + (uint)(*(int *)(param_1 + 0x41fc8) << 2);
*pbVar22 = (byte)((uint)bVar2 * 0x19a + uVar17 * 0x267 >> 10);
pbVar22[1] = (byte)((uVar8 + uVar17) * 0xf6 + uVar16 * 0x171 + (uint)bVar2 * 0xa4 >> 10);
pbVar22[2] = (byte)((uVar15 + uVar8 * 4) * 0x52 + iVar13 * 0x7b >> 10);
pbVar22[3] = (byte)((uVar8 + uVar15 * 4) * 0x52 + iVar1 * 0x7b >> 10);
pbVar18 = pbVar18 + 5;
pbVar22[4] = (byte)((uVar15 + uVar24) * 0xf6 + uVar25 * 0x171 + (uint)bVar3 * 0xa4 >> 10);
pbVar9 = pbVar9 + 3;
pbVar23 = pbVar23 + 5;
local_res10 = local_res10 - 1;
} while (local_res10 != 0);
}
local_res18 = local_res18 + 3;
local_res20 = local_res20 + 0xf;
uVar10 = (ulonglong)local_res20;
} while (local_res18 < *(uint *)(param_1 + 0x41fc4));
}
return pbVar9;
}
==================================================================
### ADDR 18001a750 FUNC 18001a750 (841 bytes) name=FUN_18001a750
void FUN_18001a750(longlong param_1)
{
uint uVar1;
uint uVar2;
uint uVar3;
uint uVar4;
int iVar5;
float fVar6;
float fVar7;
undefined1 uVar8;
uint uVar9;
longlong lVar10;
uint uVar11;
uint uVar12;
ulonglong uVar13;
uint uVar14;
int iVar15;
ulonglong uVar16;
ulonglong uVar17;
int iVar18;
float fVar19;
float fVar20;
float fVar21;
float fVar22;
float fVar23;
fVar7 = DAT_18005e704;
fVar6 = DAT_18005e700;
uVar1 = *(uint *)(param_1 + 0x41fc8);
uVar2 = *(uint *)(param_1 + 0x41fc0);
uVar3 = *(uint *)(param_1 + 0x41fc4);
uVar4 = *(uint *)(param_1 + 0x41fcc);
uVar17 = 0;
if (uVar1 != 0) {
fVar23 = (float)uVar2 - DAT_18005e700;
do {
iVar18 = (int)uVar17;
fVar22 = (float)uVar17 * ((float)uVar2 / (float)uVar1);
if (fVar23 < fVar22) {
fVar22 = fVar23;
}
uVar11 = 0;
uVar13 = (ulonglong)fVar22;
if (uVar4 != 0) {
iVar5 = (int)uVar13;
uVar12 = iVar5 + 1;
fVar21 = (float)uVar3 - fVar6;
do {
fVar20 = (float)uVar11 * ((float)uVar3 / (float)uVar4);
if (fVar21 < fVar20) {
fVar20 = fVar21;
}
uVar16 = (ulonglong)fVar20;
iVar15 = (int)uVar16;
if ((uVar12 < uVar2) && (iVar15 + 1U < uVar3)) {
lVar10 = *(longlong *)(param_1 + 0x2a0);
uVar14 = iVar15 * uVar2 + iVar5;
fVar19 = fVar22 - (float)(uVar13 & 0xffffffff);
fVar20 = fVar20 - (float)(uVar16 & 0xffffffff);
lVar10 = (longlong)
(((float)*(byte *)((ulonglong)(uVar14 + uVar2) + lVar10) * (fVar6 - fVar19) +
(float)*(byte *)((ulonglong)(uVar14 + 1 + uVar2) + lVar10) * fVar19) * fVar20
+ ((float)*(byte *)((ulonglong)(uVar14 + 1) + lVar10) * fVar19 +
(float)*(byte *)((ulonglong)uVar14 + lVar10) * (fVar6 - fVar19)) *
(fVar6 - fVar20) + fVar7);
uVar8 = (undefined1)lVar10;
if (0xff < (uint)lVar10) {
uVar8 = 0xff;
}
*(undefined1 *)(uVar17 + *(longlong *)(param_1 + 0x220)) = uVar8;
}
else {
uVar14 = iVar15 + 1;
if ((uVar14 == uVar3) && (uVar12 < uVar2)) {
uVar14 = iVar15 * uVar2 + iVar5;
uVar9 = (uint)*(byte *)((ulonglong)uVar14 + *(longlong *)(param_1 + 0x2a0));
lVar10 = (longlong)
((float)(int)(*(byte *)((ulonglong)(uVar14 + 1) +
*(longlong *)(param_1 + 0x2a0)) - uVar9) *
(fVar22 - (float)(uVar13 & 0xffffffff)) + (float)uVar9 + fVar7);
uVar8 = (undefined1)lVar10;
if (0xff < (uint)lVar10) {
uVar8 = 0xff;
}
*(undefined1 *)(uVar17 + *(longlong *)(param_1 + 0x220)) = uVar8;
}
else if ((uVar12 == uVar2) && (uVar14 < uVar3)) {
uVar9 = (uint)*(byte *)((ulonglong)(iVar15 * uVar2 + iVar5) +
*(longlong *)(param_1 + 0x2a0));
lVar10 = (longlong)
((float)(int)(*(byte *)((ulonglong)(uVar14 * uVar2 + iVar5) +
*(longlong *)(param_1 + 0x2a0)) - uVar9) *
(fVar20 - (float)(uVar16 & 0xffffffff)) + (float)uVar9 + fVar7);
uVar8 = (undefined1)lVar10;
if (0xff < (uint)lVar10) {
uVar8 = 0xff;
}
*(undefined1 *)(uVar17 + *(longlong *)(param_1 + 0x220)) = uVar8;
}
else {
*(undefined1 *)(uVar17 + *(longlong *)(param_1 + 0x220)) =
*(undefined1 *)
((ulonglong)(iVar15 * uVar2 + iVar5) + *(longlong *)(param_1 + 0x2a0));
}
}
uVar11 = uVar11 + 1;
uVar17 = (ulonglong)((int)uVar17 + uVar1);
} while (uVar11 < uVar4);
}
uVar11 = iVar18 + 1;
uVar17 = (ulonglong)uVar11;
} while (uVar11 < uVar1);
}
return;
}
==================================================================