/* asd reference (asd2) -- named functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf * functions: 1551 total in build, 1465 named, 86 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 1439, "FUZZY": 0, "MNEM": 0, "ambiguous": 109, "cmd_protos": 0, "comments": 1002, "dispatch_conflict": 0, "none": 3, "protos": 1434, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same * function lines up across versions. See the .index.json sidecar for * name -> address. * * CAUTION on ported names: a name is only an identity claim at tier=EXACT. * At tier=MNEM/FUZZY the bytes differ from the reference, so any ADDRESS or * CONTENT HASH embedded in the name (e.g. *_4025F8, gcp_lib__*) still * refers to the REFERENCE build and does not describe this one. */ /* ==== asd_align_map_range [tier=EXACT size=204] ==== */ // Computes a 4096-aligned [base, base+len) window with 64-bit overflow checks before // handing it to the kernel mapping path (SVC 0x6C). Rejects unaligned/overflowing ranges // with status 2. int __fastcall asd_align_map_range(unsigned int a1, unsigned int a2, unsigned int a3) { unsigned __int64 v5; // kr08_8 unsigned int v6; // r9 int result; // r0 unsigned int v8; // r3 unsigned int v9; // r2 int v11; // r3 _DWORD v15[6]; // [sp+0h] [bp-1Ch] BYREF unsigned __int8 v16; // [sp+1Bh] [bp-1h] v5 = __PAIR64__(a1, a2) + a3 - 1; v6 = (__PAIR64__(a1, a2) + a3 + 4095) >> 32; result = 2; if ( __PAIR64__(~a1, ~a2) >= a3 && __PAIR64__(dword_D11800, WORD2(v5) & 0x800) >= __PAIR64__(HIDWORD(v5) >> 12, 1) ) { v8 = (a2 + a3 + 4095) & 0xFFFFF000; if ( (v8 | v6) != 0 ) { result = 2; v9 = v8 - (a2 & 0xFFFFF000); _CF = __PAIR64__(v6, v8) >= __PAIR64__(a1, a2 & 0xFFFFF000); v11 = (__PAIR64__(v6, v8) - __PAIR64__(a1, a2 & 0xFFFFF000)) >> 32; if ( _CF && v11 == 0 ) { v15[5] = v9; v15[2] = v9; v15[1] = 1; v15[3] = a2 & 0xFFFFF000; v15[4] = a1; v16 = -1; __asm { SVC 0x8B } if ( v15 == (_DWORD *)-4 ) { v15[0] = 0; __asm { SVC 0x6D ; 'm' } } if ( v16 != 255 ) __asm { SVC 0x6C ; 'l' } return 1; } } } return result; } /* ==== asd_alloc_handles [tier=EXACT size=54] ==== */ // Allocates the module's two kernel handles with SVC 0x5D, storing them in // dword_D1F000 and dword_D1F004 (the handles asd_rpc_dispatch binds/releases with // SVC 0x5E / 0x5F). Returns 6 if either allocation wraps to -1. int __fastcall asd_alloc_handles(int a1) { int *v1; // r1 int v6; // r0 int v7; // r0 int v8; // r0 int v9; // r0 int result; // r0 v1 = off_D02514; __asm { SVC 0x5D ; ']' } *off_D02514 = a1; v6 = a1 + 1; if ( v6 == 0 ) return 6; __asm { SVC 0x5D ; ']' } v1[1] = v6; v7 = v6 + 1; if ( v7 == 0 ) return 6; __asm { SVC 0x5D ; ']' } v1[2] = v7; v8 = v7 + 1; if ( v8 == 0 ) return 6; __asm { SVC 0x5D ; ']' } v1[3] = v8; v9 = v8 + 1; if ( v9 == 0 ) return 6; __asm { SVC 0x5D ; ']' } v1[4] = v9; _ZF = v9 == -1; result = 0; if ( _ZF ) return 6; return result; } /* ==== asd_asic26_dio_disable [tier=EXACT size=18] ==== */ // Reads the SoC platform id (SVC 0x8D) and runs asd_dio_disable_all only on ASIC 26. int __fastcall asd_asic26_dio_disable(int a1) { __asm { SVC 0x8D } if ( a1 == 26 ) return asd_dio_disable_all(a1: 26); else return 0; } /* ==== asd_asic26_stream_op [tier=EXACT size=18] ==== */ // Reads the SoC platform id (SVC 0x8D) and tail-calls the stream operation at 0xD17DFC // only on ASIC 26. int __fastcall asd_asic26_stream_op(int a1, unsigned __int8 *a2, _BYTE *a3) { __asm { SVC 0x8D } if ( a1 == 26 ) JUMPOUT(0xD17DFC); return 0; } /* ==== asd_asic5592_call_D0BE70 [tier=EXACT size=74] ==== */ // ASIC-gated call to sub_D0BE70 admitting only device 5592 revision 147. int __fastcall asd_asic5592_call_D0BE70(int a1, _WORD *a2, _WORD *a3, _WORD *a4) { int v8; // r4 bool v9; // zf _DWORD v11[8]; // [sp+4h] [bp-20h] BYREF v8 = asd_asic_family_lookup(a1: (int)v11); if ( asd_asic_family_lookup(a1: (int)v11) == 0 ) { v9 = v11[0] == 5592; if ( v11[0] == 5592 ) v9 = v11[1] == 147; if ( v9 ) return asd_read_link_pair(a1, a2, a3, a4); else return 7; } return v8; } /* ==== asd_asic_family_lookup [tier=EXACT size=74] ==== */ // Large switch over dword_D330A4 (ASIC/revision id) mapping it to a family code; // default result 7. int __fastcall asd_asic_family_lookup(int a1) { int result; // r0 result = 7; switch ( *((_DWORD *)off_D14D68 + 19) ) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 0xB: case 0xC: case 0xE: case 0xF: case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: case 0x1A: case 0x1B: case 0x1C: case 0x1D: case 0x1E: case 0x1F: case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x28: case 0x29: case 0x2A: case 0x2B: (*((void (__fastcall **)(_DWORD, int))off_D14D68 + 24))(a1: *((_DWORD *)off_D14D68 + 19), a2: a1);// jumptable 00D14C94 cases 1-9,11,12,14-38,40-43 result = 0; break; default: return result; // switch jump } return result; // jumptable 00D14C94 default case, cases 10,13,39 } /* ==== asd_aux_idle_check [tier=EXACT size=52] ==== */ // True when idx <= 1, the feature-14 level check passes, and bit0 of the AUX status // register (asd_reg_read_14160) is clear. BOOL __fastcall asd_aux_idle_check(unsigned int a1) { return a1 <= 1 && asd_feature_level_check(a1: 14, a2: a1) != 0 && (sub_D14160() & 1) == 0; } /* ==== asd_aux_op_D1891C [tier=EXACT size=48] ==== */ // Bounded (idx < dword_D33300) and feature-14 gated dispatch to sub_D1891C using the // per-link register at byte_D42661[4*idx+151]. int __fastcall asd_aux_op_D1891C(unsigned int a1, int a2) { if ( *((_DWORD *)off_D18B04 + 2) > a1 && asd_feature_level_check(a1: 14, a2: a1) != 0 ) return asd_dio_write_verify(a1: *(_DWORD *)(dword_D18B08 + 4 * a1 + 64), a2, a3: a1); else return 2; } /* ==== asd_aux_ops_init [tier=EXACT size=56] ==== */ // Wrapper that invokes asd_build_aux_ops. int __fastcall asd_aux_ops_init(int a1) { int *v1; // r4 int v3; // r1 int (__fastcall **v4)(); // r4 int result; // r0 v1 = (int *)off_D19238; bzero_core(result: (_DWORD *)off_D19238 + 1, a2: 0x54u); *v1 = a1; if ( !asd_feature_enabled(a1: 14) && !asd_feature_enabled(a1: 16) ) return 0; v3 = *v1; v4 = (int (__fastcall **)())(v1 + 1); result = asd_build_aux_ops(a1: v4, a2: v3); if ( result == 0 && *v4 != nullptr ) return (*v4)(); return result; } /* ==== asd_aux_transfer_block [tier=EXACT size=218] ==== */ // Feature-14 gated, bounds a1 < dword_D33300. Multi-register AUX/DDC transfer helper. int __fastcall asd_aux_transfer_block(unsigned int a1, unsigned __int8 *a2) { int v4; // r1 int result; // r0 int v6; // r8 int v7; // r9 int v8; // r1 int v9; // r10 int v10; // r7 int v11; // r11 unsigned int *v12; // r6 int v13; // r5 int v14; // [sp+4h] [bp-18h] int v15; // [sp+8h] [bp-14h] int v16; // [sp+Ch] [bp-10h] int v17; // [sp+10h] [bp-Ch] int v18; // [sp+14h] [bp-8h] int v19; // [sp+18h] [bp-4h] if ( *((_DWORD *)off_D18B04 + 2) <= a1 ) return 2; v4 = asd_feature_level_check(a1: 14, a2: a1); result = 2; if ( a2 != nullptr && v4 != 0 ) { v6 = a2[5]; v7 = a2[9]; v8 = *a2 | (a2[1] << 8) | ((a2[2] | (a2[3] << 8)) << 16); v9 = a2[4]; v10 = a2[6]; v11 = a2[7]; v12 = (unsigned int *)(dword_D18B08 + 4 * a1); v19 = a2[8]; v18 = a2[10]; v17 = a2[11]; v16 = a2[12]; v15 = a2[14]; v14 = a2[15]; v13 = a2[13]; result = asd_dio_write_verify(a1: v12[18], a2: v8, a3: a1); if ( result == 0 ) { result = asd_dio_write_verify(a1: v12[20], a2: v9 | (v6 << 8) | ((v10 | (v11 << 8)) << 16), a3: a1); if ( result == 0 ) { result = asd_dio_write_verify(a1: v12[22], a2: v19 | (v7 << 8) | ((v18 | (v17 << 8)) << 16), a3: a1); if ( result == 0 ) return asd_dio_write_verify(a1: v12[24], a2: v16 | (v13 << 8) | ((v15 | (v14 << 8)) << 16), a3: a1); } } } return result; } /* ==== asd_aux_transfer_block_cfg0 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_aux_transfer_block. One of 0 near-identical siblings. int __fastcall asd_aux_transfer_block_cfg0(unsigned int a1, int a2, unsigned __int8 *a3) { return asd_aux_transfer_block(a1, a2: a3); } /* ==== asd_aux_transfer_block_cfg1 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_aux_transfer_block. One of 0 near-identical siblings. int __fastcall asd_aux_transfer_block_cfg1(unsigned int a1, int a2, unsigned __int8 *a3) { return asd_aux_transfer_block(a1, a2: a3); } /* ==== asd_aux_transfer_block_cfg2 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_aux_transfer_block. One of 0 near-identical siblings. int __fastcall asd_aux_transfer_block_cfg2(unsigned int a1, int a2, unsigned __int8 *a3) { return asd_aux_transfer_block(a1, a2: a3); } /* ==== asd_aux_transfer_block_cfg3 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_aux_transfer_block. One of 0 near-identical siblings. int __fastcall asd_aux_transfer_block_cfg3(unsigned int a1, int a2, unsigned __int8 *a3) { return asd_aux_transfer_block(a1, a2: a3); } /* ==== asd_aux_write_block [tier=EXACT size=206] ==== */ // Feature-14 gated. Writes a command word (0x1000100) then packs a2[0..3] into a DIO // register at byte_D42661[4*a1+127]; emits a block from a3/a4. int __fastcall asd_aux_write_block(unsigned int a1, unsigned __int8 *a2, _BYTE *a3, int a4) { char *v5; // r5 int result; // r0 void (__fastcall *v7)(unsigned int); // r6 unsigned int v8; // r4 int i; // r0 char v10; // t1 _BYTE *v11; // [sp+0h] [bp-8h] int v12; // [sp+4h] [bp-4h] v11 = a3; v12 = a4; v5 = a3; result = asd_feature_level_check(a1: 14, a2: a1); if ( result != 0 ) { v7 = (void (__fastcall *)(unsigned int))off_D18400; v8 = *(_DWORD *)(dword_D185E8 + 4 * a1 + 40); off_D18400(a1: v8); v7(a1: v8); v7(a1: v8); v7(a1: v8); v7(a1: v8); v11 = nullptr; v12 = 0; for ( i = 7; i != -1; --i ) { v10 = *v5++; *((_BYTE *)&v11 + i) = v10; } v7(a1: v8); v7(a1: v8); v7(a1: v8); v7(a1: v8); return ((unsigned int (__fastcall *)(unsigned int))v7)(a1: v8); } return result; } /* ==== asd_bounded_dispatch_D1922C [tier=EXACT size=14] ==== */ // Bounds a1 <= 5 then tail-calls sub_D1922C(a2). int __fastcall asd_bounded_dispatch_D1922C(unsigned int a1, int a2) { if ( a1 > 5 ) return 2; else return asd_opt_cb_D49824(); } /* ==== asd_build_aux_ops [tier=EXACT size=884] ==== */ // Third ops-struct builder (884 bytes): switch on a2 selecting AUX/DIO handler sets // (j_sub_D17C48 / j_sub_D17D20 / sub_D16E38 ...). Called from sub_D191A8. int __fastcall asd_build_aux_ops(int (__fastcall **a1)(), int a2) { int result; // r0 int (__fastcall **v4)(); // r0 unsigned int v5; // r1 int (__fastcall *v6)(); // r2 int (__fastcall *v7)(); // r2 int (__fastcall *v8)(); // r5 int (__fastcall *v9)(); // r7 int (__fastcall *v10)(); // r12 int (__fastcall *v11)(); // r3 int (__fastcall *v12)(); // r6 int (__fastcall *v13)(); // r12 int (__fastcall *v14)(); // r2 int (__fastcall *v15)(); // r3 int (__fastcall *v16)(); // r5 int (__fastcall *v17)(); // r6 int (__fastcall *v18)(); // r7 int (__fastcall *v19)(); // r1 int (__fastcall *v20)(); // r0 int (__fastcall *v21)(); // r1 int (__fastcall *v22)(); // r2 int (__fastcall *v23)(); // r3 int (__fastcall *v24)(); // r5 int (__fastcall *v25)(); // r6 int (__fastcall *v26)(); // r2 int (__fastcall *v27)(); // r2 int (__fastcall *v28)(); // r5 int (__fastcall *v29)(); // r7 int (__fastcall *v30)(); // r12 int (__fastcall *v31)(); // r3 int (__fastcall *v32)(); // r6 int (__fastcall *v33)(); // r1 int (__fastcall *v34)(); // r3 int (__fastcall *v35)(); // r2 int (__fastcall *v36)(); // r2 int (__fastcall *v37)(); // r5 int (__fastcall *v38)(); // r7 int (__fastcall *v39)(); // r1 int (__fastcall *v40)(); // r3 int (__fastcall *v41)(); // r6 int (__fastcall *v42)(); // lr int (__fastcall *v43)(); // r3 int (__fastcall *v44)(); // r5 int (__fastcall *v45)(); // r6 int (__fastcall *v46)(); // r7 int (__fastcall *v47)(); // r1 int (__fastcall *v48)(); // r2 int (__fastcall *v49)(); // r2 int (__fastcall *v50)(); // r2 int (__fastcall *v51)(); // r5 int (__fastcall *v52)(); // r7 int (__fastcall *v53)(); // r1 int (__fastcall *v54)(); // r3 int (__fastcall *v55)(); // r6 int (__fastcall *v56)(); // r1 int (__fastcall *v57)(); // r3 int (__fastcall *v58)(); // r2 int (__fastcall *v59)(); // r2 int (__fastcall *v60)(); // r5 int (__fastcall *v61)(); // r7 int (__fastcall *v62)(); // r12 int (__fastcall *v63)(); // r3 int (__fastcall *v64)(); // r6 int (__fastcall *v65)(); // r1 int (__fastcall *v66)(); // r3 int (__fastcall *v67)(); // r2 int (__fastcall *v68)(); // r2 int (__fastcall *v69)(); // r5 int (__fastcall *v70)(); // r7 int (__fastcall *v71)(); // r1 int (__fastcall *v72)(); // r3 int (__fastcall *v73)(); // r6 int (__fastcall *v74)(); // r2 int (__fastcall *v75)(); // r2 int (__fastcall *v76)(); // r5 int (__fastcall *v77)(); // r7 int (__fastcall *v78)(); // r12 int (__fastcall *v79)(); // r3 int (__fastcall *v80)(); // r6 int (__fastcall *v81)(); // r0 int (__fastcall *v82)(); // r2 int (__fastcall *v83)(); // r5 int (__fastcall *v84)(); // r1 int (__fastcall *v85)(); // r3 result = 7; // switch 43 cases switch ( a2 ) { case 1: case 4: case 5: case 6: case 8: case 11: case 14: case 19: v4 = a1; // jumptable 00D18B72 cases 1,4-6,8,11,14,19 v5 = 84; goto LABEL_14; case 2: case 3: case 7: v20 = (int (__fastcall *)())off_D19028; // jumptable 00D18B72 cases 2,3,7 v21 = (int (__fastcall *)())off_D1902C; v22 = (int (__fastcall *)())off_D19030; v23 = (int (__fastcall *)())off_D19034; v24 = (int (__fastcall *)())off_D19038; v25 = (int (__fastcall *)())off_D1903C; goto LABEL_13; case 9: case 16: v20 = (int (__fastcall *)())off_D19010; // jumptable 00D18B72 cases 9,16 v21 = (int (__fastcall *)())off_D19014; v22 = (int (__fastcall *)())off_D19018; v23 = (int (__fastcall *)())off_D1901C; v24 = (int (__fastcall *)())off_D19020; v25 = (int (__fastcall *)())off_D19024; goto LABEL_13; case 12: case 15: v20 = (int (__fastcall *)())off_D1913C; // jumptable 00D18B72 cases 12,15 v21 = (int (__fastcall *)())off_D19140; v22 = (int (__fastcall *)())off_D19144; v23 = (int (__fastcall *)())off_D19148; v24 = (int (__fastcall *)())off_D1914C; v25 = (int (__fastcall *)())off_D19150; goto LABEL_13; case 17: v20 = (int (__fastcall *)())off_D19124; // jumptable 00D18B72 case 17 v21 = (int (__fastcall *)())off_D19128; v22 = (int (__fastcall *)())off_D1912C; v23 = (int (__fastcall *)())off_D19130; v24 = (int (__fastcall *)())off_D19134; v25 = (int (__fastcall *)())off_D19138; goto LABEL_13; case 18: case 21: case 23: case 28: v20 = (int (__fastcall *)())off_D18FF8; // jumptable 00D18B72 cases 18,21,23,28 v21 = (int (__fastcall *)())off_D18FFC; v22 = (int (__fastcall *)())off_D19000; v23 = (int (__fastcall *)())off_D19004; v24 = (int (__fastcall *)())off_D19008; v25 = (int (__fastcall *)())off_D1900C; LABEL_13: *a1 = v25; a1[1] = v24; a1[2] = v23; a1[3] = v22; a1[4] = v21; v5 = 60; a1[5] = v20; v4 = a1 + 6; goto LABEL_14; case 20: case 25: v33 = (int (__fastcall *)())off_D190DC; // jumptable 00D18B72 cases 20,25 v34 = (int (__fastcall *)())off_D190E4; v35 = (int (__fastcall *)())off_D190E0; a1[16] = (int (__fastcall *)())off_D190E8; a1[17] = v34; a1[18] = v35; a1[19] = v33; v36 = (int (__fastcall *)())off_D190F0; v37 = (int (__fastcall *)())off_D190F8; v38 = (int (__fastcall *)())off_D19100; a1[20] = (int (__fastcall *)())off_D190D8; result = 0; v39 = (int (__fastcall *)())off_D190EC; v40 = (int (__fastcall *)())off_D190F4; v41 = (int (__fastcall *)())off_D190FC; a1[8] = nullptr; a1[9] = v38; a1[10] = v41; a1[11] = v37; a1[12] = v40; a1[13] = v36; a1[14] = v39; a1[15] = nullptr; v13 = (int (__fastcall *)())off_D19104; v42 = (int (__fastcall *)())off_D19108; v43 = (int (__fastcall *)())off_D1910C; v44 = (int (__fastcall *)())off_D19110; v45 = (int (__fastcall *)())off_D19114; v46 = (int (__fastcall *)())off_D19118; v47 = (int (__fastcall *)())off_D1911C; v48 = (int (__fastcall *)())off_D19120; goto LABEL_16; case 22: case 27: v49 = (int (__fastcall *)())off_D18FC0; // jumptable 00D18B72 cases 22,27 result = 0; a1[16] = (int (__fastcall *)())off_D18FC4; a1[17] = nullptr; a1[18] = nullptr; a1[19] = v49; v50 = (int (__fastcall *)())off_D18FCC; v51 = (int (__fastcall *)())off_D18FD4; v52 = (int (__fastcall *)())off_D18F58; a1[20] = (int (__fastcall *)())off_D18FBC; v53 = (int (__fastcall *)())off_D18FC8; v54 = (int (__fastcall *)())off_D18FD0; v55 = (int (__fastcall *)())off_D18FD8; a1[8] = nullptr; a1[9] = v52; a1[10] = v55; a1[11] = v51; a1[12] = v54; a1[13] = v50; a1[14] = v53; a1[15] = nullptr; v13 = (int (__fastcall *)())off_D18FDC; v14 = (int (__fastcall *)())off_D18FE0; v15 = (int (__fastcall *)())off_D18FE4; v16 = (int (__fastcall *)())off_D18FE8; v17 = (int (__fastcall *)())off_D18FEC; v18 = (int (__fastcall *)())off_D18FF0; v19 = (int (__fastcall *)())off_D18FF4; goto LABEL_18; case 24: v65 = (int (__fastcall *)())off_D19090; // jumptable 00D18B72 case 24 v66 = (int (__fastcall *)())off_D19098; v67 = (int (__fastcall *)())off_D19094; a1[16] = (int (__fastcall *)())off_D1909C; a1[17] = v66; a1[18] = v67; a1[19] = v65; v68 = (int (__fastcall *)())off_D190A4; v69 = (int (__fastcall *)())off_D190AC; v70 = (int (__fastcall *)())off_D190B4; a1[20] = (int (__fastcall *)())off_D1908C; result = 0; v71 = (int (__fastcall *)())off_D190A0; v72 = (int (__fastcall *)())off_D190A8; v73 = (int (__fastcall *)())off_D190B0; a1[8] = nullptr; a1[9] = v70; a1[10] = v73; a1[11] = v69; a1[12] = v72; a1[13] = v68; a1[14] = v71; a1[15] = nullptr; v13 = (int (__fastcall *)())off_D190B8; v42 = (int (__fastcall *)())off_D190BC; v43 = (int (__fastcall *)())off_D190C0; v44 = (int (__fastcall *)())off_D190C4; v45 = (int (__fastcall *)())off_D190C8; v46 = (int (__fastcall *)())off_D190CC; v47 = (int (__fastcall *)())off_D190D0; v48 = (int (__fastcall *)())off_D190D4; goto LABEL_16; case 26: case 32: case 33: case 34: case 35: case 40: case 42: case 43: v6 = (int (__fastcall *)())off_D18F80; // jumptable 00D18B72 cases 26,32-35,40,42,43 result = 0; a1[16] = (int (__fastcall *)())off_D18F84; a1[17] = nullptr; a1[18] = nullptr; a1[19] = v6; v7 = (int (__fastcall *)())off_D18F8C; v8 = (int (__fastcall *)())off_D18F94; v9 = (int (__fastcall *)())off_D18F58; a1[20] = (int (__fastcall *)())off_D18F7C; v10 = (int (__fastcall *)())off_D18F88; v11 = (int (__fastcall *)())off_D18F90; v12 = (int (__fastcall *)())off_D18F98; a1[8] = (int (__fastcall *)())off_D18F9C; a1[9] = v9; a1[10] = v12; a1[11] = v8; a1[12] = v11; a1[13] = v7; a1[14] = v10; a1[15] = nullptr; v13 = (int (__fastcall *)())off_D18FA0; v14 = (int (__fastcall *)())off_D18FA4; v15 = (int (__fastcall *)())off_D18FA8; v16 = (int (__fastcall *)())off_D18FAC; v17 = (int (__fastcall *)())off_D18FB0; v18 = (int (__fastcall *)())off_D18FB4; v19 = (int (__fastcall *)())off_D18FB8; goto LABEL_18; case 29: case 30: v56 = (int (__fastcall *)())off_D19044; // jumptable 00D18B72 cases 29,30 v57 = (int (__fastcall *)())off_D1904C; v58 = (int (__fastcall *)())off_D19048; a1[16] = (int (__fastcall *)())off_D19050; a1[17] = v57; a1[18] = v58; a1[19] = v56; v59 = (int (__fastcall *)())off_D19058; v60 = (int (__fastcall *)())off_D19060; v61 = (int (__fastcall *)())off_D19068; a1[20] = (int (__fastcall *)())off_D19040; result = 0; v62 = (int (__fastcall *)())off_D19054; v63 = (int (__fastcall *)())off_D1905C; v64 = (int (__fastcall *)())off_D19064; a1[8] = (int (__fastcall *)())off_D18F9C; a1[9] = v61; a1[10] = v64; a1[11] = v60; a1[12] = v63; a1[13] = v59; a1[14] = v62; a1[15] = nullptr; v13 = (int (__fastcall *)())off_D1906C; v42 = (int (__fastcall *)())off_D19070; v43 = (int (__fastcall *)())off_D19074; v44 = (int (__fastcall *)())off_D19078; v45 = (int (__fastcall *)())off_D1907C; v46 = (int (__fastcall *)())off_D19080; v47 = (int (__fastcall *)())off_D19084; v48 = (int (__fastcall *)())off_D19088; LABEL_16: *a1 = v48; a1[1] = v47; a1[2] = v46; a1[3] = v45; a1[4] = v44; a1[5] = v43; a1[6] = v42; goto LABEL_19; case 31: v74 = (int (__fastcall *)())off_D18F3C; // jumptable 00D18B72 case 31 result = 0; a1[16] = (int (__fastcall *)())off_D18F40; a1[17] = nullptr; a1[18] = nullptr; a1[19] = v74; v75 = (int (__fastcall *)())off_D18F48; v76 = (int (__fastcall *)())off_D18F50; v77 = (int (__fastcall *)())off_D18F58; a1[20] = (int (__fastcall *)())off_D18F38; v78 = (int (__fastcall *)())off_D18F44; v79 = (int (__fastcall *)())off_D18F4C; v80 = (int (__fastcall *)())off_D18F54; a1[8] = (int (__fastcall *)())off_D18F5C; a1[9] = v77; a1[10] = v80; a1[11] = v76; a1[12] = v79; a1[13] = v75; a1[14] = v78; a1[15] = nullptr; v13 = (int (__fastcall *)())off_D18F60; v14 = (int (__fastcall *)())off_D18F64; v15 = (int (__fastcall *)())off_D18F68; v16 = (int (__fastcall *)())off_D18F6C; v17 = (int (__fastcall *)())off_D18F70; v18 = (int (__fastcall *)())off_D18F74; v19 = (int (__fastcall *)())off_D18F78; goto LABEL_18; case 36: case 37: case 41: v26 = (int (__fastcall *)())off_D18EF8; // jumptable 00D18B72 cases 36,37,41 result = 0; a1[16] = (int (__fastcall *)())off_D18EFC; a1[17] = nullptr; a1[18] = nullptr; a1[19] = v26; v27 = (int (__fastcall *)())off_D18F04; v28 = (int (__fastcall *)())off_D18F0C; v29 = (int (__fastcall *)())off_D18F14; a1[20] = (int (__fastcall *)())off_D18EF4; v30 = (int (__fastcall *)())off_D18F00; v31 = (int (__fastcall *)())off_D18F08; v32 = (int (__fastcall *)())off_D18F10; a1[8] = (int (__fastcall *)())off_D18F18; a1[9] = v29; a1[10] = v32; a1[11] = v28; a1[12] = v31; a1[13] = v27; a1[14] = v30; a1[15] = nullptr; v13 = (int (__fastcall *)())off_D18F1C; v14 = (int (__fastcall *)())off_D18F20; v15 = (int (__fastcall *)())off_D18F24; v16 = (int (__fastcall *)())off_D18F28; v17 = (int (__fastcall *)())off_D18F2C; v18 = (int (__fastcall *)())off_D18F30; v19 = (int (__fastcall *)())off_D18F34; LABEL_18: *a1 = v19; a1[1] = v18; a1[2] = v17; a1[3] = v16; a1[4] = v15; a1[5] = v14; a1[6] = nullptr; LABEL_19: a1[7] = v13; break; case 38: v81 = (int (__fastcall *)())dword_D18ED8; // jumptable 00D18B72 case 38 v82 = (int (__fastcall *)())dword_D18EE0; v83 = (int (__fastcall *)())dword_D18EE8; v84 = (int (__fastcall *)())dword_D18EDC; v85 = (int (__fastcall *)())dword_D18EE4; *a1 = (int (__fastcall *)())off_D18EEC; a1[1] = v83; a1[2] = v85; a1[3] = v82; a1[4] = v84; a1[5] = v81; bzero_core(result: a1 + 6, a2: 0x24u); v5 = 20; a1[15] = (int (__fastcall *)())off_D18EF0; v4 = a1 + 16; LABEL_14: bzero_core(result: v4, a2: v5); result = 0; break; // jumptable 00D18B72 default case, cases 10,13,39 default: return result; // switch jump } return result; } /* ==== asd_build_caps_blob [tier=EXACT size=88] ==== */ // Builds a 0x108-byte capability blob: commands 20 and 25 use asd_check_link_budget's // path (sub_D15E8C), command 24 uses sub_D15EE4. int __fastcall asd_build_caps_blob(int a1) { int result; // r0 _DWORD v7[66]; // [sp+0h] [bp-108h] BYREF bzero_core(result: v7, a2: 0x108u); result = 2; // switch 11 cases switch ( a1 ) { case 20: case 25: result = asd_check_link_budget(a1: v7); // jumptable 00D15286 cases 20,25 goto LABEL_5; case 24: result = asd_build_caps_blob_24(a1: v7); // jumptable 00D15286 case 24 goto LABEL_5; case 29: case 30: result = asd_get_lane_count(a1: v7, a2: a1);// jumptable 00D15286 cases 29,30 LABEL_5: if ( result == 0 ) { __asm { SVC 0xB4 } result = 35; } break; default: return result; // switch jump } return result; // jumptable 00D15286 default case, cases 21-23,26-28 } /* ==== asd_build_caps_blob_24 [tier=EXACT size=120] ==== */ // Builds the command-24 capability blob: emits 4 / 8 plus a fixed table of register // descriptors (0x51AD4, 0x251AD4, 0x3516D4, ... stepping by 0x100000). int __fastcall asd_build_caps_blob_24(_DWORD *a1) { int v1; // r1 int v2; // r6 _DWORD *v3; // r4 int v4; // r5 _DWORD v6[8]; // [sp+0h] [bp-40h] _DWORD v7[8]; // [sp+20h] [bp-20h] *a1 = 4; a1[1] = 8; v6[7] = dword_D15F5C; v6[5] = dword_D15F60; v6[3] = dword_D15F64; v6[1] = dword_D15F68; v7[6] = dword_D161B8; v7[7] = dword_D161B8 + 4096; v6[6] = dword_D161B8 + 4; v7[5] = dword_D161B4 + 4096; v6[4] = dword_D161B4 + 4; v7[3] = dword_D16278 + 4096; v7[4] = dword_D161B4; v6[2] = dword_D16278 + 4; v7[2] = dword_D16278; v6[0] = dword_D16270 + 4; v1 = 0; v7[0] = dword_D16270; v7[1] = dword_D16270 + 4096; while ( v1 != 8 ) { v2 = v6[v1]; v3 = &a1[2 * v1]; v4 = v7[v1++]; v3[2] = v4; v3[3] = v2; } return 0; } /* ==== asd_build_hw_ops [tier=EXACT size=732] ==== */ // Builds the display hardware operations struct (the runtime vtable ASD calls through). // Switch-per-ASIC-variant: each case stores a set of function pointers at fixed offsets // in the struct at R4. Slots seen: +0x68..+0xE8. This is the registration site for the // indirect-call targets that static call-graph analysis cannot reach. int __fastcall asd_build_hw_ops(_DWORD *a1, int a2) { void *v3; // r12 void *v4; // r6 void *v5; // r5 void *v6; // r7 void *v7; // r3 void *v8; // lr void *v9; // r1 void *v10; // r1 int *v11; // r8 void *v12; // r2 int *v13; // r0 int *v14; // r9 int *v15; // r10 void *v16; // r11 int *v17; // r1 void *v18; // r2 void *v19; // r3 void *v20; // r0 void *v21; // r0 void *v22; // r2 void *v23; // r1 int *v24; // r0 void *v25; // r0 void *v26; // r1 void *v27; // r12 int *v28; // r5 void *v29; // r6 void *v30; // r7 void *v31; // r2 void *v32; // r0 int *v33; // r1 void *v34; // r12 void *v35; // r6 void *v36; // r5 void *v37; // lr void *v38; // r7 void *v39; // r3 void *v40; // r1 void *v41; // r8 void *v42; // r5 int *v43; // r0 int *v44; // r9 int v45; // r10 void *v46; // r2 void *v47; // r11 void *v48; // r3 void *v49; // r0 int *v50; // r3 void *v51; // r6 void *v52; // r7 void *v53; // r2 void *v54; // r1 void *v55; // r0 __int64 v56; // r0 void *v57; // r0 void *v58; // r2 void *v59; // lr void *v60; // r5 void *v61; // r7 void *v62; // r1 int *v63; // r2 void *v64; // r12 int *v65; // r6 void *v66; // r0 void *v67; // r3 void *v68; // r2 void *v69; // r2 void *v70; // r5 void *v71; // r7 void *v72; // lr void *v73; // r6 void *v74; // r0 void *v75; // r1 int *v76; // r2 _DWORD *v77; // r6 int i; // r7 void (__fastcall *v79)(__int16 *); // r1 _DWORD *v80; // r5 int j; // r6 void (__fastcall *v82)(__int16 *); // r1 __int16 v84; // [sp+0h] [bp-4h] BYREF __int16 v85; // [sp+2h] [bp-2h] BYREF v85 = 0; v84 = 0; // switch 8 cases switch ( a2 ) { case 5: v3 = off_D02238; // jumptable 00D01E60 case 5 v4 = off_D0224C; v5 = off_D02260; v6 = off_D0225C; v7 = off_D02244; v8 = off_D02248; v9 = off_D02254; a1[26] = off_D02240; a1[27] = v3; a1[28] = v7; a1[29] = v4; a1[30] = v9; a1[31] = v5; v10 = off_D02270; a1[32] = off_D02268; a1[33] = v6; a1[34] = v10; v11 = (int *)off_D02250; v12 = off_D0223C; a1[8] = off_D02274; *a1 = v12; a1[1] = v8; v13 = (int *)off_D0226C; v14 = (int *)off_D02258; v15 = (int *)off_D026F8; a1[2] = v11; a1[3] = v14; a1[4] = v15; v16 = off_D02264; v17 = (int *)off_D02278; a1[5] = v13; a1[6] = v17; a1[7] = v16; a1[35] = off_D0227C; a1[9] = off_D02280; a1[36] = off_D02204; a1[10] = off_D02208; a1[11] = off_D02284; a1[37] = off_D02288; v18 = off_D0229C; v19 = off_D022A0; a1[12] = off_D0228C; a1[38] = off_D02290; v20 = off_D02294; a1[53] = off_D02298; a1[54] = v19; a1[43] = v20; a1[44] = v18; v21 = off_D022A4; v22 = off_D022AC; a1[45] = off_D028DC; a1[57] = v22; a1[58] = v21; v23 = off_D022A8; v24 = (int *)off_D022B0; goto LABEL_7; case 6: *a1 = off_D021AC; // jumptable 00D01E60 case 6 a1[26] = off_D021B0; v25 = off_D021A8; v26 = off_D0216C; v27 = off_D021B4; goto LABEL_5; case 8: *a1 = off_D02164; // jumptable 00D01E60 case 8 a1[26] = off_D02168; v25 = off_D02160; v26 = off_D0216C; v27 = off_D02170; LABEL_5: a1[53] = v25; a1[54] = v26; v28 = (int *)off_D02178; v29 = off_D0217C; v30 = off_D02180; v31 = off_D02184; v32 = off_D02188; v33 = (int *)off_D0218C; a1[55] = off_D02174; a1[56] = v29; a1[57] = v31; a1[44] = v27; a1[45] = v28; a1[46] = v30; a1[47] = v32; a1[48] = v33; goto LABEL_10; case 10: v34 = off_D021B8; // jumptable 00D01E60 case 10 v35 = off_D021CC; v36 = off_D021E0; v37 = off_D021C8; v38 = off_D021DC; v39 = off_D021C4; v40 = off_D021D4; a1[26] = off_D021C0; a1[27] = v34; a1[28] = v39; a1[29] = v35; a1[30] = v40; a1[31] = v36; v41 = off_D021D0; v42 = off_D021BC; a1[32] = off_D021E8; a1[33] = v38; *a1 = v42; a1[1] = v37; v43 = (int *)off_D021EC; v44 = (int *)off_D021D8; v45 = off_D02728; a1[2] = v41; a1[3] = v44; a1[4] = v45; v46 = off_D021F4; v47 = off_D021E4; v48 = off_D021F8; a1[5] = v43; a1[6] = v48; a1[7] = v47; v49 = off_D021FC; v50 = (int *)off_D02200; v51 = off_D02208; v52 = off_D0220C; a1[8] = v46; a1[9] = v50; a1[10] = v51; a1[11] = v52; v53 = off_D02210; a1[34] = off_D021F0; a1[35] = v49; v54 = off_D02220; a1[36] = off_D02204; a1[37] = v53; v55 = off_D02214; a1[53] = v54; HIDWORD(v56) = off_D02224; a1[13] = v55; a1[39] = off_D02218; LODWORD(v56) = off_D0221C; *(_QWORD *)(a1 + 43) = v56; LODWORD(v56) = off_D02228; v23 = off_D0222C; a1[57] = off_D02230; a1[58] = v56; v24 = (int *)off_D02234; LABEL_7: a1[48] = v24; a1[49] = v23; goto LABEL_10; case 11: a1[32] = off_D02190; *a1 = off_D02194; a1[26] = off_D02198; v57 = off_D0219C; a1[6] = off_D021A0; v58 = off_D0216C; v59 = off_D021A4; v60 = off_D02174; v61 = off_D0217C; a1[53] = v57; // jumptable 00D01E60 case 11 a1[54] = v58; a1[55] = v60; a1[56] = v61; v62 = off_D02180; v63 = (int *)off_D0218C; v64 = off_D02134; v65 = (int *)off_D02178; v66 = off_D02188; a1[57] = off_D02184; a1[43] = v64; a1[44] = v59; a1[45] = v65; a1[46] = v62; a1[47] = v66; a1[48] = v63; goto LABEL_10; case 12: a1[32] = off_D02124; // jumptable 00D01E60 case 12 v67 = off_D02154; *a1 = off_D02128; v68 = off_D02138; a1[26] = off_D0212C; a1[6] = v68; v69 = off_D0213C; a1[53] = off_D02130; a1[54] = v67; v70 = off_D02144; v71 = off_D0214C; a1[55] = v69; a1[56] = v70; a1[57] = v71; v72 = off_D02140; v73 = off_D02148; v74 = off_D02158; v75 = off_D02150; v76 = (int *)off_D0215C; a1[43] = off_D02134; a1[44] = v72; a1[45] = v76; a1[46] = v73; a1[47] = v75; a1[48] = v74; LABEL_10: v77 = a1 + 26; for ( i = 0; i != 17; ++i ) { v79 = (void (__fastcall *)(__int16 *))v77[i]; if ( v79 != nullptr ) { v79(a1: &v85); *((_WORD *)v77 + i - 18) = v85; } } v80 = a1 + 53; for ( j = 0; j != 6; ++j ) { v82 = (void (__fastcall *)(__int16 *))v80[j]; if ( v82 != nullptr ) { v82(a1: &v84); *((_WORD *)v80 + j - 6) = v84; } } break; default: return 0; // switch jump } return 0; // jumptable 00D01E60 default case, cases 7,9 } /* ==== asd_build_link_map [tier=EXACT size=322] ==== */ // Builds the link/connector map, bounding both unk_D4234C and qword_D42350 to 0x40 (the // 64-entry link table) and reading the topology word at 0xD42354. int __fastcall asd_build_link_map(int *a1, int a2, int a3, int a4) { _DWORD *v4; // r10 int result; // r0 unsigned int v7; // r2 unsigned int v8; // r1 bool v9; // cc unsigned int v10; // r0 _DWORD *v11; // r6 int *v12; // r7 int v13; // r8 unsigned __int8 v14; // r5 unsigned int v15; // r0 int v16; // r1 unsigned int v17; // r2 int v18; // r1 int v19; // r1 unsigned int v20; // r2 int v21; // r0 unsigned __int8 v22; // r5 unsigned int v23; // r0 int v24; // r1 unsigned int v25; // r2 int v26; // r1 int v27; // r1 unsigned int v28; // r2 int v29; // r0 unsigned __int8 v30; // r5 unsigned int v31; // r0 int v32; // r1 unsigned int v33; // r2 int v34; // r1 int v35; // r1 unsigned int v36; // r2 int v37; // r0 if ( a1 == nullptr ) return 2; v4 = off_D0A55C; result = 2; v7 = *((_DWORD *)off_D0A55C + 3); if ( v7 <= 0x40 ) { v8 = *((_DWORD *)off_D0A55C + 4); v9 = v8 > 0x40; if ( v8 <= 0x40 ) { a4 = *((_DWORD *)off_D0A55C + 5); v9 = (unsigned int)a4 > 0x40; } if ( !v9 ) { v10 = v8 + v7 + a4; if ( v10 > 0x20 ) { return 1; } else { v11 = off_D09964; v12 = a1 + 2; v13 = 2 * v10; v14 = 0; while ( v7 > v14 ) { v15 = asd_lookup_by_class(a1: 0, a2: v14); v16 = v11[61]; ++v14; v17 = v16 + v15; if ( v15 > ~v16 ) v17 = 0; v18 = 4 * v17; if ( v17 >> 30 != 0 ) v18 = 0; *(v12 - 1) = v18; v19 = v11[62]; v20 = v19 + v15; if ( v15 > ~v19 ) v20 = 0; v21 = 4 * v20; if ( v20 >> 30 != 0 ) v21 = 0; *v12 = v21; v12 += 2; v7 = v4[3]; } v22 = 0; while ( v4[4] > (unsigned int)v22 ) { v23 = asd_lookup_by_class(a1: 1, a2: v22); v24 = v11[69]; ++v22; v25 = v24 + v23; if ( v23 > ~v24 ) v25 = 0; v26 = 4 * v25; if ( v25 >> 30 != 0 ) v26 = 0; *(v12 - 1) = v26; v27 = v11[70]; v28 = v27 + v23; if ( v23 > ~v27 ) v28 = 0; v29 = 4 * v28; if ( v28 >> 30 != 0 ) v29 = 0; *v12 = v29; v12 += 2; } v30 = 0; while ( v4[5] > (unsigned int)v30 ) { v31 = asd_lookup_by_class(a1: 2, a2: v30); v32 = v11[77]; ++v30; v33 = v32 + v31; if ( v31 > ~v32 ) v33 = 0; v34 = 4 * v33; if ( v33 >> 30 != 0 ) v34 = 0; *(v12 - 1) = v34; v35 = v11[78]; v36 = v35 + v31; if ( v31 > ~v35 ) v36 = 0; v37 = 4 * v36; if ( v36 >> 30 != 0 ) v37 = 0; *v12 = v37; v12 += 2; } *a1 = v13; return 0; } } } return result; } /* ==== asd_build_link_map_full [tier=EXACT size=674] ==== */ // Larger sibling of asd_build_link_map producing the full per-link descriptor set. int __fastcall asd_build_link_map_full(unsigned int *a1) { unsigned int v1; // r4 _DWORD *v2; // r12 int v3; // r1 unsigned int v4; // r6 unsigned int v5; // r3 bool v6; // cc unsigned int v7; // r1 unsigned int *v9; // r0 _DWORD *v10; // r1 unsigned __int8 v11; // r5 unsigned int v12; // r3 int v13; // r2 unsigned int v14; // r6 int v15; // r2 unsigned int v16; // r7 int v17; // r2 int v18; // r2 unsigned int v19; // r7 int v20; // r2 int v21; // r2 unsigned int v22; // r7 int v23; // r2 int v24; // r2 unsigned int v25; // r7 int v26; // r2 int v27; // r2 unsigned int v28; // r7 int v29; // r2 int v30; // r2 unsigned int v31; // r7 int v32; // r2 unsigned __int8 v33; // r5 unsigned int v34; // r6 int v35; // r2 int v36; // r2 unsigned int v37; // r7 int v38; // r2 int v39; // r2 unsigned int v40; // r7 int v41; // r2 int v42; // r2 unsigned int v43; // r7 int v44; // r2 int v45; // r2 unsigned int v46; // r7 int v47; // r2 int v48; // r2 unsigned int v49; // r7 int v50; // r2 int v51; // r2 unsigned int v52; // r7 int v53; // r2 unsigned __int8 v54; // r5 int v55; // r2 unsigned int v56; // r6 int v57; // r2 unsigned int v58; // r7 int v59; // r2 int v60; // r2 unsigned int v61; // r7 int v62; // r2 int v63; // r2 unsigned int v64; // r7 int v65; // r2 int v66; // r2 unsigned int v67; // r7 int v68; // r2 int v69; // r2 unsigned int v70; // r7 int v71; // r2 int v72; // r2 unsigned int v73; // r7 int v74; // r2 if ( a1 == nullptr ) return 2; v2 = off_D0A230; v3 = 2; v4 = *((_DWORD *)off_D0A230 + 3); if ( v4 <= 0x40 ) { v5 = *((_DWORD *)off_D0A230 + 4); v6 = v5 > 0x40; if ( v5 <= 0x40 ) { v1 = *((_DWORD *)off_D0A230 + 5); v6 = v1 > 0x40; } if ( !v6 ) { v7 = 6 * (v5 + v4 + v1); if ( v7 > 0x40 ) return 2; *a1 = v7; v9 = a1 + 3; v10 = off_D096DC; v11 = 0; v12 = 0; while ( v4 > v11 ) { if ( v12 > 0x3A ) return 2; v13 = v2[20]; if ( v13 != 0 ) v14 = *(_DWORD *)(v13 + 4 * v11); else v14 = 0; v15 = v10[61]; ++v11; v12 += 6; v16 = v15 + v14; if ( v14 > ~v15 ) v16 = 0; v17 = 4 * v16; if ( v16 >> 30 != 0 ) v17 = 0; *(v9 - 2) = v17; v18 = v10[62]; v19 = v18 + v14; if ( v14 > ~v18 ) v19 = 0; v20 = 4 * v19; if ( v19 >> 30 != 0 ) v20 = 0; *(v9 - 1) = v20; v21 = v10[63]; v22 = v21 + v14; if ( v14 > ~v21 ) v22 = 0; v23 = 4 * v22; if ( v22 >> 30 != 0 ) v23 = 0; *v9 = v23; v24 = v10[64]; v25 = v24 + v14; if ( v14 > ~v24 ) v25 = 0; v26 = 4 * v25; if ( v25 >> 30 != 0 ) v26 = 0; v9[1] = v26; v27 = v10[65]; v28 = v27 + v14; if ( v14 > ~v27 ) v28 = 0; v29 = 4 * v28; if ( v28 >> 30 != 0 ) v29 = 0; v9[2] = v29; v30 = v10[66]; v31 = v30 + v14; if ( v14 > ~v30 ) v31 = 0; v32 = 4 * v31; if ( v31 >> 30 != 0 ) v32 = 0; v9[3] = v32; v9 += 6; v4 = v2[3]; } v33 = 0; while ( v2[4] > (unsigned int)v33 ) { if ( v12 > 0x3A ) return 2; v34 = 0; if ( v2[2] > (unsigned int)v33 ) { v35 = v2[22]; if ( v35 != 0 ) v34 = *(_DWORD *)(v35 + 4 * v33); } v36 = v10[69]; ++v33; v12 += 6; v37 = v36 + v34; if ( v34 > ~v36 ) v37 = 0; v38 = 4 * v37; if ( v37 >> 30 != 0 ) v38 = 0; *(v9 - 2) = v38; v39 = v10[70]; v40 = v39 + v34; if ( v34 > ~v39 ) v40 = 0; v41 = 4 * v40; if ( v40 >> 30 != 0 ) v41 = 0; *(v9 - 1) = v41; v42 = v10[71]; v43 = v42 + v34; if ( v34 > ~v42 ) v43 = 0; v44 = 4 * v43; if ( v43 >> 30 != 0 ) v44 = 0; *v9 = v44; v45 = v10[72]; v46 = v45 + v34; if ( v34 > ~v45 ) v46 = 0; v47 = 4 * v46; if ( v46 >> 30 != 0 ) v47 = 0; v9[1] = v47; v48 = v10[73]; v49 = v48 + v34; if ( v34 > ~v48 ) v49 = 0; v50 = 4 * v49; if ( v49 >> 30 != 0 ) v50 = 0; v9[2] = v50; v51 = v10[74]; v52 = v51 + v34; if ( v34 > ~v51 ) v52 = 0; v53 = 4 * v52; if ( v52 >> 30 != 0 ) v53 = 0; v9[3] = v53; v9 += 6; } v54 = 0; while ( v2[5] > (unsigned int)v54 ) { if ( v12 > 0x3A ) return 2; v55 = v2[24]; if ( v55 != 0 ) v56 = *(_DWORD *)(v55 + 4 * v54); else v56 = 0; v57 = v10[77]; ++v54; v12 += 6; v58 = v57 + v56; if ( v56 > ~v57 ) v58 = 0; v59 = 4 * v58; if ( v58 >> 30 != 0 ) v59 = 0; *(v9 - 2) = v59; v60 = v10[78]; v61 = v60 + v56; if ( v56 > ~v60 ) v61 = 0; v62 = 4 * v61; if ( v61 >> 30 != 0 ) v62 = 0; *(v9 - 1) = v62; v63 = v10[79]; v64 = v63 + v56; if ( v56 > ~v63 ) v64 = 0; v65 = 4 * v64; if ( v64 >> 30 != 0 ) v65 = 0; *v9 = v65; v66 = v10[80]; v67 = v66 + v56; if ( v56 > ~v66 ) v67 = 0; v68 = 4 * v67; if ( v67 >> 30 != 0 ) v68 = 0; v9[1] = v68; v69 = v10[81]; v70 = v69 + v56; if ( v56 > ~v69 ) v70 = 0; v71 = 4 * v70; if ( v70 >> 30 != 0 ) v71 = 0; v9[2] = v71; v72 = v10[82]; v73 = v72 + v56; if ( v56 > ~v72 ) v73 = 0; v74 = 4 * v73; if ( v73 >> 30 != 0 ) v74 = 0; v9[3] = v74; v9 += 6; } return 0; } } return v3; } /* ==== asd_build_link_ops [tier=EXACT size=6950] ==== */ // LARGE per-ASIC vtable builder (6950 bytes): switch on a2 (ASIC/IP variant) filling ~30 // function-pointer slots a1[0..29+]. Most slots are filled with the B.W veneers // (j_sub_*), which is why those veneers exist - they are vtable entries reached through // this struct, not dead code. Called from sub_D102B8. int __fastcall asd_build_link_ops(int (__fastcall **a1)(int a1, int a2, int a3, int a4), int a2, int a3, int a4) { int v5; // r5 int (__fastcall *v6)(int, int, int, int); // r12 int (__fastcall *v7)(int, int, int, int); // r1 int (__fastcall *v8)(int, int, int, int); // r6 int (__fastcall *v9)(int, int, int, int); // r3 int (__fastcall *v10)(int, int, int, int); // r7 int (__fastcall *v11)(int, int, int, int); // r0 int (__fastcall *v12)(int, int, int, int); // r7 int (__fastcall *v13)(int, int, int, int); // r0 int (__fastcall *v14)(int, int, int, int); // r7 int (__fastcall *v15)(int, int, int, int); // r0 int (__fastcall *v16)(int, int, int, int); // r7 int (__fastcall *v17)(int, int, int, int); // r0 int (__fastcall *v18)(int, int, int, int); // r7 int (__fastcall *v19)(int, int, int, int); // r2 int (__fastcall *v20)(int, int, int, int); // r5 int (__fastcall *v21)(int, int, int, int); // r0 int (__fastcall *v22)(int, int, int, int); // r7 int (__fastcall *v23)(int, int, int, int); // r1 int (__fastcall *v24)(int, int, int, int); // r3 int (__fastcall *v25)(int, int, int, int); // r0 int (__fastcall *v26)(int, int, int, int); // r0 int (__fastcall *v27)(int, int, int, int); // r1 int (__fastcall *v28)(int, int, int, int); // r2 int (__fastcall *v29)(int, int, int, int); // r3 int (__fastcall *v30)(int, int, int, int); // r12 int (__fastcall *v31)(int, int, int, int); // r1 int (__fastcall *v32)(int, int, int, int); // r6 int (__fastcall *v33)(int, int, int, int); // r3 int (__fastcall *v34)(int, int, int, int); // r7 int (__fastcall *v35)(int, int, int, int); // r0 int (__fastcall *v36)(int, int, int, int); // r6 int (__fastcall *v37)(int, int, int, int); // r0 int (__fastcall *v38)(int, int, int, int); // r6 int (__fastcall *v39)(int, int, int, int); // r0 int (__fastcall *v40)(int, int, int, int); // r2 int (__fastcall *v41)(int, int, int, int); // r6 int (__fastcall *v42)(int, int, int, int); // r0 int (__fastcall *v43)(int, int, int, int); // r1 int (__fastcall *v44)(int, int, int, int); // r1 int (__fastcall *v45)(int, int, int, int); // r2 int (__fastcall *v46)(int, int, int, int); // r3 int (__fastcall *v47)(int, int, int, int); // r6 int (__fastcall *v48)(int, int, int, int); // r7 int (__fastcall **v49)(int, int, int, int); // r0 unsigned int v50; // r1 int (__fastcall *v51)(int, int, int, int); // r12 int (__fastcall *v52)(int, int, int, int); // r1 int (__fastcall *v53)(int, int, int, int); // r6 int (__fastcall *v54)(int, int, int, int); // r3 int (__fastcall *v55)(int, int, int, int); // r7 int (__fastcall *v56)(int, int, int, int); // r0 int (__fastcall *v57)(int, int, int, int); // r6 int (__fastcall *v58)(int, int, int, int); // r0 int (__fastcall *v59)(int, int, int, int); // r6 int (__fastcall *v60)(int, int, int, int); // r0 int (__fastcall *v61)(int, int, int, int); // r2 int (__fastcall *v62)(int, int, int, int); // r6 int (__fastcall *v63)(int, int, int, int); // r0 int (__fastcall *v64)(int, int, int, int); // r1 int (__fastcall *v65)(int, int, int, int); // r0 int (__fastcall *v66)(int, int, int, int); // r1 int (__fastcall *v67)(int, int, int, int); // r2 int (__fastcall *v68)(int, int, int, int); // r3 int (__fastcall *v69)(int, int, int, int); // r12 int (__fastcall *v70)(int, int, int, int); // r1 int (__fastcall *v71)(int, int, int, int); // r6 int (__fastcall *v72)(int, int, int, int); // r3 int (__fastcall *v73)(int, int, int, int); // r7 int (__fastcall *v74)(int, int, int, int); // r0 int (__fastcall *v75)(int, int, int, int); // r7 int (__fastcall *v76)(int, int, int, int); // r0 int (__fastcall *v77)(int, int, int, int); // r7 int (__fastcall *v78)(int, int, int, int); // r0 int (__fastcall *v79)(int, int, int, int); // r7 int (__fastcall *v80)(int, int, int, int); // r0 int (__fastcall *v81)(int, int, int, int); // r7 int (__fastcall *v82)(int, int, int, int); // r2 int (__fastcall *v83)(int, int, int, int); // r5 int (__fastcall *v84)(int, int, int, int); // r0 int (__fastcall *v85)(int, int, int, int); // r7 int (__fastcall *v86)(int, int, int, int); // r1 int (__fastcall *v87)(int, int, int, int); // r3 int (__fastcall *v88)(int, int, int, int); // r0 int (__fastcall **v89)(int, int, int, int); // r0 unsigned int v90; // r1 int (__fastcall *v91)(int, int, int, int); // r12 int (__fastcall *v92)(int, int, int, int); // r1 int (__fastcall *v93)(int, int, int, int); // r6 int (__fastcall *v94)(int, int, int, int); // r3 int (__fastcall *v95)(int, int, int, int); // r7 int (__fastcall *v96)(int, int, int, int); // r0 int (__fastcall *v97)(int, int, int, int); // r7 int (__fastcall *v98)(int, int, int, int); // r0 int (__fastcall *v99)(int, int, int, int); // r7 int (__fastcall *v100)(int, int, int, int); // r0 int (__fastcall *v101)(int, int, int, int); // r7 int (__fastcall *v102)(int, int, int, int); // r0 int (__fastcall *v103)(int, int, int, int); // r7 int (__fastcall *v104)(int, int, int, int); // r2 int (__fastcall *v105)(int, int, int, int); // r5 int (__fastcall *v106)(int, int, int, int); // r0 int (__fastcall *v107)(int, int, int, int); // r7 int (__fastcall *v108)(int, int, int, int); // r1 int (__fastcall *v109)(int, int, int, int); // r3 int (__fastcall *v110)(int, int, int, int); // r0 int (__fastcall *v111)(int, int, int, int); // r1 int (__fastcall *v112)(int, int, int, int); // r0 int (__fastcall *v113)(int, int, int, int); // r1 int (__fastcall *v114)(int, int, int, int); // r2 int (__fastcall *v115)(int, int, int, int); // r3 int (__fastcall *v116)(int, int, int, int); // r6 int (__fastcall *v117)(int, int, int, int); // r12 int (__fastcall *v118)(int, int, int, int); // r1 int (__fastcall *v119)(int, int, int, int); // r6 int (__fastcall *v120)(int, int, int, int); // r3 int (__fastcall *v121)(int, int, int, int); // r7 int (__fastcall *v122)(int, int, int, int); // r0 int (__fastcall *v123)(int, int, int, int); // r6 int (__fastcall *v124)(int, int, int, int); // r0 int (__fastcall *v125)(int, int, int, int); // r6 int (__fastcall *v126)(int, int, int, int); // r0 int (__fastcall *v127)(int, int, int, int); // r2 int (__fastcall *v128)(int, int, int, int); // r6 int (__fastcall *v129)(int, int, int, int); // r0 int (__fastcall *v130)(int, int, int, int); // r1 int (__fastcall *v131)(int, int, int, int); // r12 int (__fastcall *v132)(int, int, int, int); // r1 int (__fastcall *v133)(int, int, int, int); // r6 int (__fastcall *v134)(int, int, int, int); // r3 int (__fastcall *v135)(int, int, int, int); // r7 int (__fastcall *v136)(int, int, int, int); // r0 int (__fastcall *v137)(int, int, int, int); // r6 int (__fastcall *v138)(int, int, int, int); // r0 int (__fastcall *v139)(int, int, int, int); // r6 int (__fastcall *v140)(int, int, int, int); // r0 int (__fastcall *v141)(int, int, int, int); // r2 int (__fastcall *v142)(int, int, int, int); // r6 int (__fastcall *v143)(int, int, int, int); // r0 int (__fastcall *v144)(int, int, int, int); // r1 int (__fastcall *v145)(int, int, int, int); // r1 int (__fastcall *v146)(int, int, int, int); // r2 int (__fastcall *v147)(int, int, int, int); // r3 int (__fastcall *v148)(int, int, int, int); // r6 int (__fastcall *v149)(int, int, int, int); // r7 int (__fastcall *v150)(int, int, int, int); // r12 int (__fastcall *v151)(int, int, int, int); // lr int (__fastcall *v152)(int, int, int, int); // r12 int (__fastcall *v153)(int, int, int, int); // r1 int (__fastcall *v154)(int, int, int, int); // r6 int (__fastcall *v155)(int, int, int, int); // r3 int (__fastcall *v156)(int, int, int, int); // r7 int (__fastcall *v157)(int, int, int, int); // r0 int (__fastcall *v158)(int, int, int, int); // r6 int (__fastcall *v159)(int, int, int, int); // r0 int (__fastcall *v160)(int, int, int, int); // r6 int (__fastcall *v161)(int, int, int, int); // r0 int (__fastcall *v162)(int, int, int, int); // r2 int (__fastcall *v163)(int, int, int, int); // r6 int (__fastcall *v164)(int, int, int, int); // r0 int (__fastcall *v165)(int, int, int, int); // r1 int (__fastcall *v166)(int, int, int, int); // r12 int (__fastcall *v167)(int, int, int, int); // r1 int (__fastcall *v168)(int, int, int, int); // r6 int (__fastcall *v169)(int, int, int, int); // r3 int (__fastcall *v170)(int, int, int, int); // r7 int (__fastcall *v171)(int, int, int, int); // r0 int (__fastcall *v172)(int, int, int, int); // r6 int (__fastcall *v173)(int, int, int, int); // r0 int (__fastcall *v174)(int, int, int, int); // r6 int (__fastcall *v175)(int, int, int, int); // r0 int (__fastcall *v176)(int, int, int, int); // r2 int (__fastcall *v177)(int, int, int, int); // r6 int (__fastcall *v178)(int, int, int, int); // r7 int (__fastcall *v179)(int, int, int, int); // r0 int (__fastcall *v180)(int, int, int, int); // r1 int (__fastcall *v181)(int, int, int, int); // r1 int (__fastcall *v182)(int, int, int, int); // r2 int (__fastcall *v183)(int, int, int, int); // r3 int (__fastcall *v184)(int, int, int, int); // r0 int (__fastcall *v185)(int, int, int, int); // r12 int (__fastcall *v186)(int, int, int, int); // r1 int (__fastcall *v187)(int, int, int, int); // r6 int (__fastcall *v188)(int, int, int, int); // r3 int (__fastcall *v189)(int, int, int, int); // r7 int (__fastcall *v190)(int, int, int, int); // r0 int (__fastcall *v191)(int, int, int, int); // r6 int (__fastcall *v192)(int, int, int, int); // r0 int (__fastcall *v193)(int, int, int, int); // r6 int (__fastcall *v194)(int, int, int, int); // r0 int (__fastcall *v195)(int, int, int, int); // r2 int (__fastcall *v196)(int, int, int, int); // r6 int (__fastcall *v197)(int, int, int, int); // r0 int (__fastcall *v198)(int, int, int, int); // r1 int (__fastcall *v199)(int, int, int, int); // r12 int (__fastcall *v200)(int, int, int, int); // r1 int (__fastcall *v201)(int, int, int, int); // r6 int (__fastcall *v202)(int, int, int, int); // r3 int (__fastcall *v203)(int, int, int, int); // r7 int (__fastcall *v204)(int, int, int, int); // r0 int (__fastcall *v205)(int, int, int, int); // r6 int (__fastcall *v206)(int, int, int, int); // r0 int (__fastcall *v207)(int, int, int, int); // r6 int (__fastcall *v208)(int, int, int, int); // r0 int (__fastcall *v209)(int, int, int, int); // r2 int (__fastcall *v210)(int, int, int, int); // r6 int (__fastcall *v211)(int, int, int, int); // r7 int (__fastcall *v212)(int, int, int, int); // r0 int (__fastcall *v213)(int, int, int, int); // r1 int (__fastcall *v214)(int, int, int, int); // r12 int (__fastcall *v215)(int, int, int, int); // r1 int (__fastcall *v216)(int, int, int, int); // r6 int (__fastcall *v217)(int, int, int, int); // r3 int (__fastcall *v218)(int, int, int, int); // r7 int (__fastcall *v219)(int, int, int, int); // r0 int (__fastcall *v220)(int, int, int, int); // r7 int (__fastcall *v221)(int, int, int, int); // r0 int (__fastcall *v222)(int, int, int, int); // r7 int (__fastcall *v223)(int, int, int, int); // r0 int (__fastcall *v224)(int, int, int, int); // r7 int (__fastcall *v225)(int, int, int, int); // r0 int (__fastcall *v226)(int, int, int, int); // r7 int (__fastcall *v227)(int, int, int, int); // r2 int (__fastcall *v228)(int, int, int, int); // r5 int (__fastcall *v229)(int, int, int, int); // r0 int (__fastcall *v230)(int, int, int, int); // r7 int (__fastcall *v231)(int, int, int, int); // r1 int (__fastcall *v232)(int, int, int, int); // r3 int (__fastcall *v233)(int, int, int, int); // r0 int (__fastcall *v234)(int, int, int, int); // r1 int (__fastcall *v235)(int, int, int, int); // r1 int (__fastcall *v236)(int, int, int, int); // r3 int (__fastcall *v237)(int, int, int, int); // r0 int (__fastcall *v238)(int, int, int, int); // r2 int (__fastcall *v239)(int, int, int, int); // r6 int (__fastcall *v240)(int, int, int, int); // r12 int (__fastcall *v241)(int, int, int, int); // r1 int (__fastcall *v242)(int, int, int, int); // r6 int (__fastcall *v243)(int, int, int, int); // r3 int (__fastcall *v244)(int, int, int, int); // r7 int (__fastcall *v245)(int, int, int, int); // r0 int (__fastcall *v246)(int, int, int, int); // r6 int (__fastcall *v247)(int, int, int, int); // r0 int (__fastcall *v248)(int, int, int, int); // r6 int (__fastcall *v249)(int, int, int, int); // r0 int (__fastcall *v250)(int, int, int, int); // r2 int (__fastcall *v251)(int, int, int, int); // r6 int (__fastcall *v252)(int, int, int, int); // r0 int (__fastcall *v253)(int, int, int, int); // r1 int (__fastcall *v254)(int, int, int, int); // r12 int (__fastcall *v255)(int, int, int, int); // r1 int (__fastcall *v256)(int, int, int, int); // r6 int (__fastcall *v257)(int, int, int, int); // r3 int (__fastcall *v258)(int, int, int, int); // r7 int (__fastcall *v259)(int, int, int, int); // r0 int (__fastcall *v260)(int, int, int, int); // r6 int (__fastcall *v261)(int, int, int, int); // r0 int (__fastcall *v262)(int, int, int, int); // r6 int (__fastcall *v263)(int, int, int, int); // r0 int (__fastcall *v264)(int, int, int, int); // r2 int (__fastcall *v265)(int, int, int, int); // r6 int (__fastcall *v266)(int, int, int, int); // r0 int (__fastcall *v267)(int, int, int, int); // r1 int (__fastcall *v268)(int, int, int, int); // r12 int (__fastcall *v269)(int, int, int, int); // r1 int (__fastcall *v270)(int, int, int, int); // r6 int (__fastcall *v271)(int, int, int, int); // r3 int (__fastcall *v272)(int, int, int, int); // r7 int (__fastcall *v273)(int, int, int, int); // r0 int (__fastcall *v274)(int, int, int, int); // r6 int (__fastcall *v275)(int, int, int, int); // r0 int (__fastcall *v276)(int, int, int, int); // r6 int (__fastcall *v277)(int, int, int, int); // r0 int (__fastcall *v278)(int, int, int, int); // r2 int (__fastcall *v279)(int, int, int, int); // r6 int (__fastcall *v280)(int, int, int, int); // r0 int (__fastcall *v281)(int, int, int, int); // r1 int (__fastcall *v282)(int, int, int, int); // r12 int (__fastcall *v283)(int, int, int, int); // r1 int (__fastcall *v284)(int, int, int, int); // r6 int (__fastcall *v285)(int, int, int, int); // r3 int (__fastcall *v286)(int, int, int, int); // r7 int (__fastcall *v287)(int, int, int, int); // r0 int (__fastcall *v288)(int, int, int, int); // r6 int (__fastcall *v289)(int, int, int, int); // r0 int (__fastcall *v290)(int, int, int, int); // r6 int (__fastcall *v291)(int, int, int, int); // r0 int (__fastcall *v292)(int, int, int, int); // r2 int (__fastcall *v293)(int, int, int, int); // r6 int (__fastcall *v294)(int, int, int, int); // r0 int (__fastcall *v295)(int, int, int, int); // r1 int (__fastcall *v296)(int, int, int, int); // r12 int (__fastcall *v297)(int, int, int, int); // r1 int (__fastcall *v298)(int, int, int, int); // r6 int (__fastcall *v299)(int, int, int, int); // r3 int (__fastcall *v300)(int, int, int, int); // r7 int (__fastcall *v301)(int, int, int, int); // r0 int (__fastcall *v302)(int, int, int, int); // r6 int (__fastcall *v303)(int, int, int, int); // r0 int (__fastcall *v304)(int, int, int, int); // r6 int (__fastcall *v305)(int, int, int, int); // r0 int (__fastcall *v306)(int, int, int, int); // r2 int (__fastcall *v307)(int, int, int, int); // r6 int (__fastcall *v308)(int, int, int, int); // r0 int (__fastcall *v309)(int, int, int, int); // r1 int (__fastcall *v311)(int, int, int, int); // r12 int (__fastcall *v312)(int, int, int, int); // r1 int (__fastcall *v313)(int, int, int, int); // r6 int (__fastcall *v314)(int, int, int, int); // r3 int (__fastcall *v315)(int, int, int, int); // r7 int (__fastcall *v316)(int, int, int, int); // r0 int (__fastcall *v317)(int, int, int, int); // r6 int (__fastcall *v318)(int, int, int, int); // r0 int (__fastcall *v319)(int, int, int, int); // r6 int (__fastcall *v320)(int, int, int, int); // r0 int (__fastcall *v321)(int, int, int, int); // r2 int (__fastcall *v322)(int, int, int, int); // r6 int (__fastcall *v323)(int, int, int, int); // r7 int (__fastcall *v324)(int, int, int, int); // r0 int (__fastcall *v325)(int, int, int, int); // r1 int (__fastcall *v326)(int, int, int, int); // r1 int (__fastcall *v327)(int, int, int, int); // r2 int (__fastcall *v328)(int, int, int, int); // r3 int (__fastcall *v329)(int, int, int, int); // r12 int (__fastcall *v330)(int, int, int, int); // r1 int (__fastcall *v331)(int, int, int, int); // r6 int (__fastcall *v332)(int, int, int, int); // r3 int (__fastcall *v333)(int, int, int, int); // r7 int (__fastcall *v334)(int, int, int, int); // r0 int (__fastcall *v335)(int, int, int, int); // r7 int (__fastcall *v336)(int, int, int, int); // r0 int (__fastcall *v337)(int, int, int, int); // r7 int (__fastcall *v338)(int, int, int, int); // r0 int (__fastcall *v339)(int, int, int, int); // r7 int (__fastcall *v340)(int, int, int, int); // r0 int (__fastcall *v341)(int, int, int, int); // r7 int (__fastcall *v342)(int, int, int, int); // r2 int (__fastcall *v343)(int, int, int, int); // r5 int (__fastcall *v344)(int, int, int, int); // r0 int (__fastcall *v345)(int, int, int, int); // r7 int (__fastcall *v346)(int, int, int, int); // r1 int (__fastcall *v347)(int, int, int, int); // r3 int (__fastcall *v348)(int, int, int, int); // r0 int (__fastcall *v349)(int, int, int, int); // r1 int (__fastcall *v350)(int, int, int, int); // r12 int (__fastcall *v351)(int, int, int, int); // r1 int (__fastcall *v352)(int, int, int, int); // r6 int (__fastcall *v353)(int, int, int, int); // r3 int (__fastcall *v354)(int, int, int, int); // r7 int (__fastcall *v355)(int, int, int, int); // r0 int (__fastcall *v356)(int, int, int, int); // r7 int (__fastcall *v357)(int, int, int, int); // r0 int (__fastcall *v358)(int, int, int, int); // r7 int (__fastcall *v359)(int, int, int, int); // r0 int (__fastcall *v360)(int, int, int, int); // r7 int (__fastcall *v361)(int, int, int, int); // r0 int (__fastcall *v362)(int, int, int, int); // r7 int (__fastcall *v363)(int, int, int, int); // r2 int (__fastcall *v364)(int, int, int, int); // r5 int (__fastcall *v365)(int, int, int, int); // r0 int (__fastcall *v366)(int, int, int, int); // r7 int (__fastcall *v367)(int, int, int, int); // r1 int (__fastcall *v368)(int, int, int, int); // r3 int (__fastcall *v369)(int, int, int, int); // r0 __int64 v370; // r0 int (__fastcall *v371)(int, int, int, int); // r12 int (__fastcall *v372)(int, int, int, int); // r1 int (__fastcall *v373)(int, int, int, int); // r6 int (__fastcall *v374)(int, int, int, int); // r3 int (__fastcall *v375)(int, int, int, int); // r7 int (__fastcall *v376)(int, int, int, int); // r0 int (__fastcall *v377)(int, int, int, int); // r6 int (__fastcall *v378)(int, int, int, int); // r0 int (__fastcall *v379)(int, int, int, int); // r6 int (__fastcall *v380)(int, int, int, int); // r0 int (__fastcall *v381)(int, int, int, int); // r2 int (__fastcall *v382)(int, int, int, int); // r6 int (__fastcall *v383)(int, int, int, int); // r0 int (__fastcall *v384)(int, int, int, int); // r1 int (__fastcall *v385)(int, int, int, int); // r12 int (__fastcall *v386)(int, int, int, int); // r1 int (__fastcall *v387)(int, int, int, int); // r6 int (__fastcall *v388)(int, int, int, int); // r3 int (__fastcall *v389)(int, int, int, int); // r7 int (__fastcall *v390)(int, int, int, int); // r0 int (__fastcall *v391)(int, int, int, int); // r6 int (__fastcall *v392)(int, int, int, int); // r0 int (__fastcall *v393)(int, int, int, int); // r6 int (__fastcall *v394)(int, int, int, int); // r0 int (__fastcall *v395)(int, int, int, int); // r2 int (__fastcall *v396)(int, int, int, int); // r6 int (__fastcall *v397)(int, int, int, int); // r0 int (__fastcall *v398)(int, int, int, int); // r1 int v399; // [sp+0h] [bp-4h] BYREF v399 = a4; v5 = 7; // switch 43 cases switch ( a2 ) { case 1: case 4: a1[13] = (int (__fastcall *)(int, int, int, int))off_D0E558;// jumptable 00D0D2BA cases 1,4 a1[12] = (int (__fastcall *)(int, int, int, int))off_D0E55C; v117 = (int (__fastcall *)(int, int, int, int))off_D0E564; v118 = (int (__fastcall *)(int, int, int, int))off_D0E568; v119 = (int (__fastcall *)(int, int, int, int))off_D0E56C; a1[8] = (int (__fastcall *)(int, int, int, int))off_D0E560; v120 = (int (__fastcall *)(int, int, int, int))off_D0E570; v121 = (int (__fastcall *)(int, int, int, int))off_D0E578; v122 = (int (__fastcall *)(int, int, int, int))off_D0E57C; *a1 = (int (__fastcall *)(int, int, int, int))off_D0E574; a1[1] = v118; a1[2] = v122; a1[3] = v117; a1[4] = v121; a1[5] = v119; v123 = (int (__fastcall *)(int, int, int, int))off_D0E584; a1[6] = (int (__fastcall *)(int, int, int, int))off_D0E580; a1[7] = v120; v5 = 0; a1[15] = v123; a1[14] = (int (__fastcall *)(int, int, int, int))off_D0E588; a1[11] = (int (__fastcall *)(int, int, int, int))off_D0E58C; a1[29] = (int (__fastcall *)(int, int, int, int))off_D0E590; a1[28] = (int (__fastcall *)(int, int, int, int))off_D0E594; v124 = (int (__fastcall *)(int, int, int, int))off_D0E59C; a1[26] = (int (__fastcall *)(int, int, int, int))off_D0E598; v125 = (int (__fastcall *)(int, int, int, int))off_D0E5A0; a1[24] = v124; v126 = (int (__fastcall *)(int, int, int, int))off_D0E5A4; a1[25] = v125; v127 = (int (__fastcall *)(int, int, int, int))off_D0E5A8; v128 = (int (__fastcall *)(int, int, int, int))off_D0E5AC; a1[10] = v126; a1[9] = (int (__fastcall *)(int, int, int, int))off_D0E5B0; v129 = (int (__fastcall *)(int, int, int, int))off_D0E5B8; v130 = (int (__fastcall *)(int, int, int, int))off_D0E5BC; a1[16] = (int (__fastcall *)(int, int, int, int))off_D0E5B4; a1[17] = nullptr; a1[18] = nullptr; a1[19] = v127; a1[20] = v130; a1[21] = v128; a1[22] = v129; a1[23] = nullptr; a1[27] = (int (__fastcall *)(int, int, int, int))off_D0E5C0; a1[30] = (int (__fastcall *)(int, int, int, int))off_D0E5C4; a1[31] = (int (__fastcall *)(int, int, int, int))off_D0E5C8; v65 = (int (__fastcall *)(int, int, int, int))off_D0E5CC; v66 = (int (__fastcall *)(int, int, int, int))off_D0E5D0; v67 = (int (__fastcall *)(int, int, int, int))off_D0E5D4; v68 = (int (__fastcall *)(int, int, int, int))off_D0E5D8; goto LABEL_24; case 2: case 3: case 7: a1[13] = (int (__fastcall *)(int, int, int, int))off_D0E318;// jumptable 00D0D2BA cases 2,3,7 a1[12] = (int (__fastcall *)(int, int, int, int))off_D0E31C; v30 = (int (__fastcall *)(int, int, int, int))off_D0E324; v31 = (int (__fastcall *)(int, int, int, int))off_D0E328; v32 = (int (__fastcall *)(int, int, int, int))off_D0E32C; a1[8] = (int (__fastcall *)(int, int, int, int))off_D0E320; v33 = (int (__fastcall *)(int, int, int, int))off_D0E330; v34 = (int (__fastcall *)(int, int, int, int))off_D0E338; v35 = (int (__fastcall *)(int, int, int, int))off_D0E33C; *a1 = (int (__fastcall *)(int, int, int, int))off_D0E334; a1[1] = v31; a1[2] = v35; a1[3] = v30; a1[4] = v34; a1[5] = v32; v36 = (int (__fastcall *)(int, int, int, int))off_D0E344; a1[6] = (int (__fastcall *)(int, int, int, int))off_D0E340; a1[7] = v33; v5 = 0; a1[15] = v36; a1[14] = (int (__fastcall *)(int, int, int, int))off_D0E348; a1[11] = (int (__fastcall *)(int, int, int, int))off_D0E34C; a1[29] = (int (__fastcall *)(int, int, int, int))off_D0E350; a1[28] = (int (__fastcall *)(int, int, int, int))off_D0E354; v37 = (int (__fastcall *)(int, int, int, int))off_D0E35C; a1[26] = (int (__fastcall *)(int, int, int, int))off_D0E358; v38 = (int (__fastcall *)(int, int, int, int))off_D0E360; a1[24] = v37; v39 = (int (__fastcall *)(int, int, int, int))off_D0E364; a1[25] = v38; v40 = (int (__fastcall *)(int, int, int, int))off_D0E368; v41 = (int (__fastcall *)(int, int, int, int))off_D0E36C; a1[10] = v39; a1[9] = (int (__fastcall *)(int, int, int, int))off_D0E370; v42 = (int (__fastcall *)(int, int, int, int))off_D0E378; v43 = (int (__fastcall *)(int, int, int, int))off_D0E37C; a1[16] = (int (__fastcall *)(int, int, int, int))off_D0E374; a1[17] = nullptr; a1[18] = nullptr; a1[19] = v40; a1[20] = v43; a1[21] = v41; a1[22] = v42; a1[23] = nullptr; a1[27] = (int (__fastcall *)(int, int, int, int))off_D0E380; a1[30] = (int (__fastcall *)(int, int, int, int))off_D0E384; a1[31] = (int (__fastcall *)(int, int, int, int))off_D0E388; v44 = (int (__fastcall *)(int, int, int, int))off_D0E390; v45 = (int (__fastcall *)(int, int, int, int))off_D0E394; v46 = (int (__fastcall *)(int, int, int, int))off_D0E398; v47 = (int (__fastcall *)(int, int, int, int))off_D0E39C; v48 = (int (__fastcall *)(int, int, int, int))off_D0E3A0; a1[32] = (int (__fastcall *)(int, int, int, int))off_D0E38C; a1[33] = v44; a1[34] = v45; a1[35] = v46; a1[36] = v47; a1[37] = v48; v49 = a1 + 38; v50 = 32; goto LABEL_25; case 5: a1[13] = (int (__fastcall *)(int, int, int, int))off_D0E92C;// jumptable 00D0D2BA case 5 a1[12] = (int (__fastcall *)(int, int, int, int))off_D0E930; v240 = (int (__fastcall *)(int, int, int, int))off_D0E938; v241 = (int (__fastcall *)(int, int, int, int))off_D0E93C; v242 = (int (__fastcall *)(int, int, int, int))off_D0E940; a1[8] = (int (__fastcall *)(int, int, int, int))off_D0E934; v243 = (int (__fastcall *)(int, int, int, int))off_D0E944; v244 = (int (__fastcall *)(int, int, int, int))off_D0E94C; v245 = (int (__fastcall *)(int, int, int, int))off_D0E950; *a1 = (int (__fastcall *)(int, int, int, int))off_D0E948; a1[1] = v241; a1[2] = v245; a1[3] = v240; a1[4] = v244; a1[5] = v242; v246 = (int (__fastcall *)(int, int, int, int))off_D0E958; a1[6] = (int (__fastcall *)(int, int, int, int))off_D0E954; a1[7] = v243; v5 = 0; a1[15] = v246; a1[14] = (int (__fastcall *)(int, int, int, int))off_D0E95C; a1[11] = (int (__fastcall *)(int, int, int, int))off_D0E960; a1[30] = (int (__fastcall *)(int, int, int, int))off_D0E964; a1[29] = (int (__fastcall *)(int, int, int, int))off_D0E968; a1[28] = (int (__fastcall *)(int, int, int, int))off_D0E96C; v247 = (int (__fastcall *)(int, int, int, int))off_D0E974; a1[26] = (int (__fastcall *)(int, int, int, int))off_D0E970; v248 = (int (__fastcall *)(int, int, int, int))off_D0E978; a1[24] = v247; v249 = (int (__fastcall *)(int, int, int, int))off_D0E97C; a1[25] = v248; v250 = (int (__fastcall *)(int, int, int, int))off_D0E980; v251 = (int (__fastcall *)(int, int, int, int))off_D0E984; a1[10] = v249; a1[9] = (int (__fastcall *)(int, int, int, int))off_D0E988; v252 = (int (__fastcall *)(int, int, int, int))off_D0E990; v253 = (int (__fastcall *)(int, int, int, int))off_D0E994; a1[16] = (int (__fastcall *)(int, int, int, int))off_D0E98C; a1[17] = nullptr; a1[18] = nullptr; a1[19] = v250; a1[20] = v253; a1[21] = v251; a1[22] = v252; a1[23] = nullptr; a1[27] = (int (__fastcall *)(int, int, int, int))off_D0E998; a1[31] = (int (__fastcall *)(int, int, int, int))off_D0E99C; v65 = (int (__fastcall *)(int, int, int, int))off_D0E9A0; v66 = (int (__fastcall *)(int, int, int, int))off_D0E9A4; v67 = (int (__fastcall *)(int, int, int, int))off_D0E9A8; v68 = (int (__fastcall *)(int, int, int, int))off_D0E9AC; goto LABEL_24; case 6: case 8: case 11: a1[13] = (int (__fastcall *)(int, int, int, int))off_D0E3A4;// jumptable 00D0D2BA cases 6,8,11 a1[12] = (int (__fastcall *)(int, int, int, int))off_D0E3A8; v51 = (int (__fastcall *)(int, int, int, int))off_D0E3B0; v52 = (int (__fastcall *)(int, int, int, int))off_D0E3B4; v53 = (int (__fastcall *)(int, int, int, int))off_D0E3B8; a1[8] = (int (__fastcall *)(int, int, int, int))off_D0E3AC; v54 = (int (__fastcall *)(int, int, int, int))off_D0E3BC; v55 = (int (__fastcall *)(int, int, int, int))off_D0E3C4; v56 = (int (__fastcall *)(int, int, int, int))off_D0E3C8; *a1 = (int (__fastcall *)(int, int, int, int))off_D0E3C0; a1[1] = v52; a1[2] = v56; a1[3] = v51; a1[4] = v55; a1[5] = v53; v57 = (int (__fastcall *)(int, int, int, int))off_D0E3D0; a1[6] = (int (__fastcall *)(int, int, int, int))off_D0E3CC; a1[7] = v54; v5 = 0; a1[15] = v57; a1[14] = (int (__fastcall *)(int, int, int, int))off_D0E3D4; a1[11] = (int (__fastcall *)(int, int, int, int))off_D0E3D8; a1[29] = (int (__fastcall *)(int, int, int, int))off_D0E3DC; a1[28] = (int (__fastcall *)(int, int, int, int))off_D0E3E0; v58 = (int (__fastcall *)(int, int, int, int))off_D0E3E8; a1[26] = (int (__fastcall *)(int, int, int, int))off_D0E3E4; v59 = (int (__fastcall *)(int, int, int, int))off_D0E3EC; a1[24] = v58; v60 = (int (__fastcall *)(int, int, int, int))off_D0E3F0; a1[25] = v59; v61 = (int (__fastcall *)(int, int, int, int))off_D0E3F4; v62 = (int (__fastcall *)(int, int, int, int))off_D0E3F8; a1[10] = v60; a1[9] = (int (__fastcall *)(int, int, int, int))off_D0E3FC; v63 = (int (__fastcall *)(int, int, int, int))off_D0E404; v64 = (int (__fastcall *)(int, int, int, int))off_D0E408; a1[16] = (int (__fastcall *)(int, int, int, int))off_D0E400; a1[17] = nullptr; a1[18] = nullptr; a1[19] = v61; a1[20] = v64; a1[21] = v62; a1[22] = v63; a1[23] = nullptr; a1[27] = (int (__fastcall *)(int, int, int, int))off_D0E40C; a1[30] = (int (__fastcall *)(int, int, int, int))off_D0E410; a1[31] = (int (__fastcall *)(int, int, int, int))off_D0E414; v65 = (int (__fastcall *)(int, int, int, int))off_D0E418; v66 = (int (__fastcall *)(int, int, int, int))off_D0E41C; v67 = (int (__fastcall *)(int, int, int, int))off_D0E420; v68 = (int (__fastcall *)(int, int, int, int))off_D0E424; goto LABEL_24; case 9: case 16: a1[13] = (int (__fastcall *)(int, int, int, int))off_D0E5DC;// jumptable 00D0D2BA cases 9,16 a1[12] = (int (__fastcall *)(int, int, int, int))off_D0E5E0; v131 = (int (__fastcall *)(int, int, int, int))off_D0E5E8; v132 = (int (__fastcall *)(int, int, int, int))off_D0E5EC; v133 = (int (__fastcall *)(int, int, int, int))off_D0E5F0; a1[8] = (int (__fastcall *)(int, int, int, int))off_D0E5E4; v134 = (int (__fastcall *)(int, int, int, int))off_D0E5F4; v135 = (int (__fastcall *)(int, int, int, int))off_D0E5FC; v136 = (int (__fastcall *)(int, int, int, int))off_D0E600; *a1 = (int (__fastcall *)(int, int, int, int))off_D0E5F8; a1[1] = v132; a1[2] = v136; a1[3] = v131; a1[4] = v135; a1[5] = v133; v137 = (int (__fastcall *)(int, int, int, int))off_D0E608; a1[6] = (int (__fastcall *)(int, int, int, int))off_D0E604; a1[7] = v134; v5 = 0; a1[15] = v137; a1[14] = (int (__fastcall *)(int, int, int, int))off_D0E60C; a1[11] = (int (__fastcall *)(int, int, int, int))off_D0E610; a1[29] = (int (__fastcall *)(int, int, int, int))off_D0E614; a1[28] = (int (__fastcall *)(int, int, int, int))off_D0E618; v138 = (int (__fastcall *)(int, int, int, int))off_D0E620; a1[26] = (int (__fastcall *)(int, int, int, int))off_D0E61C; v139 = (int (__fastcall *)(int, int, int, int))off_D0E624; a1[24] = v138; v140 = (int (__fastcall *)(int, int, int, int))off_D0E628; a1[25] = v139; v141 = (int (__fastcall *)(int, int, int, int))off_D0E62C; v142 = (int (__fastcall *)(int, int, int, int))off_D0E630; a1[10] = v140; a1[9] = (int (__fastcall *)(int, int, int, int))off_D0E634; v143 = (int (__fastcall *)(int, int, int, int))off_D0E63C; v144 = (int (__fastcall *)(int, int, int, int))off_D0E640; a1[16] = (int (__fastcall *)(int, int, int, int))off_D0E638; a1[17] = nullptr; a1[18] = nullptr; a1[19] = v141; a1[20] = v144; a1[21] = v142; a1[22] = v143; a1[23] = nullptr; a1[27] = (int (__fastcall *)(int, int, int, int))off_D0E644; a1[30] = (int (__fastcall *)(int, int, int, int))off_D0E648; a1[31] = (int (__fastcall *)(int, int, int, int))off_D0E64C; v145 = (int (__fastcall *)(int, int, int, int))off_D0E654; a1[32] = (int (__fastcall *)(int, int, int, int))off_D0E650; v49 = a1 + 40; v146 = (int (__fastcall *)(int, int, int, int))off_D0E658; v147 = (int (__fastcall *)(int, int, int, int))off_D0E65C; v148 = (int (__fastcall *)(int, int, int, int))off_D0E660; v149 = (int (__fastcall *)(int, int, int, int))off_D0E664; v150 = (int (__fastcall *)(int, int, int, int))off_D0E668; v151 = (int (__fastcall *)(int, int, int, int))off_D0E66C; a1[33] = v145; v50 = 24; a1[34] = v146; a1[35] = v147; a1[36] = v148; a1[37] = v149; a1[38] = v150; a1[39] = v151; goto LABEL_25; case 12: case 15: a1[13] = (int (__fastcall *)(int, int, int, int))off_D0E670;// jumptable 00D0D2BA cases 12,15 a1[12] = (int (__fastcall *)(int, int, int, int))off_D0E674; v152 = (int (__fastcall *)(int, int, int, int))off_D0E67C; v153 = (int (__fastcall *)(int, int, int, int))off_D0E680; v154 = (int (__fastcall *)(int, int, int, int))off_D0E684; a1[8] = (int (__fastcall *)(int, int, int, int))off_D0E678; v155 = (int (__fastcall *)(int, int, int, int))off_D0E688; v156 = (int (__fastcall *)(int, int, int, int))off_D0E690; v157 = (int (__fastcall *)(int, int, int, int))off_D0E694; *a1 = (int (__fastcall *)(int, int, int, int))off_D0E68C; a1[1] = v153; a1[2] = v157; a1[3] = v152; a1[4] = v156; a1[5] = v154; v158 = (int (__fastcall *)(int, int, int, int))off_D0E69C; a1[6] = (int (__fastcall *)(int, int, int, int))off_D0E698; a1[7] = v155; v5 = 0; a1[15] = v158; a1[14] = (int (__fastcall *)(int, int, int, int))off_D0E6A0; a1[11] = (int (__fastcall *)(int, int, int, int))off_D0E6A4; a1[29] = (int (__fastcall *)(int, int, int, int))off_D0E6A8; a1[28] = (int (__fastcall *)(int, int, int, int))off_D0E6AC; v159 = (int (__fastcall *)(int, int, int, int))off_D0E6B4; a1[26] = (int (__fastcall *)(int, int, int, int))off_D0E6B0; v160 = (int (__fastcall *)(int, int, int, int))off_D0E6B8; a1[24] = v159; v161 = (int (__fastcall *)(int, int, int, int))off_D0E6BC; a1[25] = v160; v162 = (int (__fastcall *)(int, int, int, int))off_D0E6C0; v163 = (int (__fastcall *)(int, int, int, int))off_D0E6C4; a1[10] = v161; a1[9] = (int (__fastcall *)(int, int, int, int))off_D0E6C8; v164 = (int (__fastcall *)(int, int, int, int))off_D0E6D0; v165 = (int (__fastcall *)(int, int, int, int))off_D0E6D4; a1[16] = (int (__fastcall *)(int, int, int, int))off_D0E6CC; a1[17] = nullptr; a1[18] = nullptr; a1[19] = v162; a1[20] = v165; a1[21] = v163; a1[22] = v164; a1[23] = nullptr; a1[27] = (int (__fastcall *)(int, int, int, int))off_D0E6D8; a1[30] = (int (__fastcall *)(int, int, int, int))off_D0E6DC; a1[31] = (int (__fastcall *)(int, int, int, int))off_D0E6E0; v65 = (int (__fastcall *)(int, int, int, int))off_D0E6E4; v66 = (int (__fastcall *)(int, int, int, int))off_D0E6E8; v67 = (int (__fastcall *)(int, int, int, int))off_D0E6EC; v68 = (int (__fastcall *)(int, int, int, int))off_D0E6F0; goto LABEL_24; case 14: a1[13] = (int (__fastcall *)(int, int, int, int))off_D0E9B0;// jumptable 00D0D2BA case 14 a1[12] = (int (__fastcall *)(int, int, int, int))off_D0E9B4; v254 = (int (__fastcall *)(int, int, int, int))off_D0E9BC; v255 = (int (__fastcall *)(int, int, int, int))off_D0E9C0; v256 = (int (__fastcall *)(int, int, int, int))off_D0E9C4; a1[8] = (int (__fastcall *)(int, int, int, int))off_D0E9B8; v257 = (int (__fastcall *)(int, int, int, int))off_D0E9C8; v258 = (int (__fastcall *)(int, int, int, int))off_D0E9D0; v259 = (int (__fastcall *)(int, int, int, int))off_D0E9D4; *a1 = (int (__fastcall *)(int, int, int, int))off_D0E9CC; a1[1] = v255; a1[2] = v259; a1[3] = v254; a1[4] = v258; a1[5] = v256; v260 = (int (__fastcall *)(int, int, int, int))off_D0E9DC; a1[6] = (int (__fastcall *)(int, int, int, int))off_D0E9D8; a1[7] = v257; v5 = 0; a1[15] = v260; a1[14] = (int (__fastcall *)(int, int, int, int))off_D0E9E0; a1[11] = (int (__fastcall *)(int, int, int, int))off_D0E9E4; a1[29] = (int (__fastcall *)(int, int, int, int))off_D0E9E8; a1[28] = (int (__fastcall *)(int, int, int, int))off_D0E9EC; v261 = (int (__fastcall *)(int, int, int, int))off_D0E9F4; a1[26] = (int (__fastcall *)(int, int, int, int))off_D0E9F0; v262 = (int (__fastcall *)(int, int, int, int))off_D0E9F8; a1[24] = v261; v263 = (int (__fastcall *)(int, int, int, int))off_D0E9FC; a1[25] = v262; v264 = (int (__fastcall *)(int, int, int, int))off_D0EA00; v265 = (int (__fastcall *)(int, int, int, int))off_D0EA04; a1[10] = v263; a1[9] = (int (__fastcall *)(int, int, int, int))off_D0EA08; v266 = (int (__fastcall *)(int, int, int, int))off_D0EA10; v267 = (int (__fastcall *)(int, int, int, int))off_D0EA14; a1[16] = (int (__fastcall *)(int, int, int, int))off_D0EA0C; a1[17] = nullptr; a1[18] = nullptr; a1[19] = v264; a1[20] = v267; a1[21] = v265; a1[22] = v266; a1[23] = nullptr; a1[27] = (int (__fastcall *)(int, int, int, int))off_D0EA18; a1[30] = (int (__fastcall *)(int, int, int, int))off_D0EA1C; a1[31] = (int (__fastcall *)(int, int, int, int))off_D0EA20; v65 = (int (__fastcall *)(int, int, int, int))off_D0EA24; v66 = (int (__fastcall *)(int, int, int, int))off_D0EA28; v67 = (int (__fastcall *)(int, int, int, int))off_D0EA2C; v68 = (int (__fastcall *)(int, int, int, int))off_D0EA30; goto LABEL_24; case 17: a1[13] = (int (__fastcall *)(int, int, int, int))off_D0EA34;// jumptable 00D0D2BA case 17 a1[12] = (int (__fastcall *)(int, int, int, int))off_D0EA38; v268 = (int (__fastcall *)(int, int, int, int))off_D0EA40; v269 = (int (__fastcall *)(int, int, int, int))off_D0EA44; v270 = (int (__fastcall *)(int, int, int, int))off_D0EA48; a1[8] = (int (__fastcall *)(int, int, int, int))off_D0EA3C; v271 = (int (__fastcall *)(int, int, int, int))off_D0EA4C; v272 = (int (__fastcall *)(int, int, int, int))off_D0EA54; v273 = (int (__fastcall *)(int, int, int, int))off_D0EA58; *a1 = (int (__fastcall *)(int, int, int, int))off_D0EA50; a1[1] = v269; a1[2] = v273; a1[3] = v268; a1[4] = v272; a1[5] = v270; v274 = (int (__fastcall *)(int, int, int, int))off_D0EA60; a1[6] = (int (__fastcall *)(int, int, int, int))off_D0EA5C; a1[7] = v271; v5 = 0; a1[15] = v274; a1[14] = (int (__fastcall *)(int, int, int, int))off_D0EA64; a1[11] = (int (__fastcall *)(int, int, int, int))off_D0EA68; a1[29] = (int (__fastcall *)(int, int, int, int))off_D0EA6C; a1[28] = (int (__fastcall *)(int, int, int, int))off_D0EA70; v275 = (int (__fastcall *)(int, int, int, int))off_D0EA78; a1[26] = (int (__fastcall *)(int, int, int, int))off_D0EA74; v276 = (int (__fastcall *)(int, int, int, int))off_D0EA7C; a1[24] = v275; v277 = (int (__fastcall *)(int, int, int, int))off_D0EA80; a1[25] = v276; v278 = (int (__fastcall *)(int, int, int, int))off_D0EA84; v279 = (int (__fastcall *)(int, int, int, int))off_D0EA88; a1[10] = v277; a1[9] = (int (__fastcall *)(int, int, int, int))off_D0EA8C; v280 = (int (__fastcall *)(int, int, int, int))off_D0EA94; v281 = (int (__fastcall *)(int, int, int, int))off_D0EA98; a1[16] = (int (__fastcall *)(int, int, int, int))off_D0EA90; a1[17] = nullptr; a1[18] = nullptr; a1[19] = v278; a1[20] = v281; a1[21] = v279; a1[22] = v280; a1[23] = nullptr; a1[27] = (int (__fastcall *)(int, int, int, int))off_D0EA9C; a1[30] = (int (__fastcall *)(int, int, int, int))off_D0EAA0; a1[31] = (int (__fastcall *)(int, int, int, int))off_D0EAA4; v65 = (int (__fastcall *)(int, int, int, int))off_D0EAA8; v66 = (int (__fastcall *)(int, int, int, int))off_D0EAAC; v67 = (int (__fastcall *)(int, int, int, int))off_D0EAB0; v68 = (int (__fastcall *)(int, int, int, int))off_D0EAB4; goto LABEL_24; case 18: v399 = 2; // jumptable 00D0D2BA case 18 if ( asd_set_unk_D33328_cfg1() != 0 || j_sub_D10800_0(a1: &v399) != 0 ) return 7; if ( v399 == 2 ) { a1[13] = (int (__fastcall *)(int, int, int, int))off_D0EF8C; a1[12] = (int (__fastcall *)(int, int, int, int))off_D0EF90; v385 = (int (__fastcall *)(int, int, int, int))off_D0EF80; v386 = (int (__fastcall *)(int, int, int, int))off_D0EF84; v387 = (int (__fastcall *)(int, int, int, int))off_D0EFA0; a1[8] = (int (__fastcall *)(int, int, int, int))off_D0EF94; v388 = (int (__fastcall *)(int, int, int, int))off_D0EF98; v389 = (int (__fastcall *)(int, int, int, int))off_D0EFA4; v390 = (int (__fastcall *)(int, int, int, int))off_D0EFA8; *a1 = (int (__fastcall *)(int, int, int, int))off_D0EF88; a1[1] = v386; a1[2] = v390; a1[3] = v385; a1[4] = v389; a1[5] = v387; v391 = (int (__fastcall *)(int, int, int, int))off_D0EFC8; a1[6] = (int (__fastcall *)(int, int, int, int))off_D0EF9C; a1[7] = v388; v5 = 0; a1[15] = v391; a1[14] = (int (__fastcall *)(int, int, int, int))off_D0EFCC; a1[11] = (int (__fastcall *)(int, int, int, int))off_D0EFD0; a1[29] = (int (__fastcall *)(int, int, int, int))off_D0EFD4; a1[28] = (int (__fastcall *)(int, int, int, int))off_D0EFD8; v392 = (int (__fastcall *)(int, int, int, int))off_D0EFAC; a1[26] = (int (__fastcall *)(int, int, int, int))off_D0EFDC; v393 = (int (__fastcall *)(int, int, int, int))off_D0EFE0; a1[24] = v392; v394 = (int (__fastcall *)(int, int, int, int))off_D0EFB0; a1[25] = v393; v395 = (int (__fastcall *)(int, int, int, int))off_D0EFC0; v396 = (int (__fastcall *)(int, int, int, int))off_D0EFE4; a1[10] = v394; a1[9] = (int (__fastcall *)(int, int, int, int))off_D0EFB4; v397 = (int (__fastcall *)(int, int, int, int))off_D0EFB8; v398 = (int (__fastcall *)(int, int, int, int))off_D0EFBC; a1[16] = (int (__fastcall *)(int, int, int, int))off_D0EFC4; a1[17] = nullptr; a1[18] = nullptr; a1[19] = v395; a1[20] = v398; a1[21] = v396; a1[22] = v397; a1[23] = nullptr; a1[27] = (int (__fastcall *)(int, int, int, int))off_D0EFE8; a1[30] = (int (__fastcall *)(int, int, int, int))off_D0EFEC; a1[31] = (int (__fastcall *)(int, int, int, int))off_D0EFF0; v65 = (int (__fastcall *)(int, int, int, int))off_D0EFF4; v66 = (int (__fastcall *)(int, int, int, int))off_D0EFF8; v67 = (int (__fastcall *)(int, int, int, int))off_D0EFFC; v68 = (int (__fastcall *)(int, int, int, int))off_D0F000; } else { if ( v399 != 1 ) return 7; a1[13] = (int (__fastcall *)(int, int, int, int))off_D0F010; a1[12] = (int (__fastcall *)(int, int, int, int))off_D0F014; v371 = (int (__fastcall *)(int, int, int, int))off_D0F004; v372 = (int (__fastcall *)(int, int, int, int))off_D0F008; v373 = (int (__fastcall *)(int, int, int, int))off_D0F024; a1[8] = (int (__fastcall *)(int, int, int, int))off_D0F018; v374 = (int (__fastcall *)(int, int, int, int))off_D0F01C; v375 = (int (__fastcall *)(int, int, int, int))off_D0F028; v376 = (int (__fastcall *)(int, int, int, int))off_D0F02C; *a1 = (int (__fastcall *)(int, int, int, int))off_D0F00C; a1[1] = v372; a1[2] = v376; a1[3] = v371; a1[4] = v375; a1[5] = v373; v377 = (int (__fastcall *)(int, int, int, int))off_D0F04C; a1[6] = (int (__fastcall *)(int, int, int, int))off_D0F020; a1[7] = v374; v5 = 0; a1[15] = v377; a1[14] = (int (__fastcall *)(int, int, int, int))off_D0F050; a1[11] = (int (__fastcall *)(int, int, int, int))off_D0F054; a1[29] = (int (__fastcall *)(int, int, int, int))off_D0F058; a1[28] = (int (__fastcall *)(int, int, int, int))off_D0F05C; v378 = (int (__fastcall *)(int, int, int, int))off_D0F030; a1[26] = (int (__fastcall *)(int, int, int, int))off_D0F060; v379 = (int (__fastcall *)(int, int, int, int))off_D0F064; a1[24] = v378; v380 = (int (__fastcall *)(int, int, int, int))off_D0F034; a1[25] = v379; v381 = (int (__fastcall *)(int, int, int, int))off_D0F044; v382 = (int (__fastcall *)(int, int, int, int))off_D0F068; a1[10] = v380; a1[9] = (int (__fastcall *)(int, int, int, int))off_D0F038; v383 = (int (__fastcall *)(int, int, int, int))off_D0F03C; v384 = (int (__fastcall *)(int, int, int, int))off_D0F040; a1[16] = (int (__fastcall *)(int, int, int, int))off_D0F048; a1[17] = nullptr; a1[18] = nullptr; a1[19] = v381; a1[20] = v384; a1[21] = v382; a1[22] = v383; a1[23] = nullptr; a1[27] = (int (__fastcall *)(int, int, int, int))off_D0F06C; a1[30] = (int (__fastcall *)(int, int, int, int))off_D0F070; a1[31] = (int (__fastcall *)(int, int, int, int))off_D0F074; v65 = (int (__fastcall *)(int, int, int, int))off_D0F078; v66 = (int (__fastcall *)(int, int, int, int))off_D0F07C; v67 = (int (__fastcall *)(int, int, int, int))off_D0F080; v68 = (int (__fastcall *)(int, int, int, int))off_D0F084; } LABEL_24: a1[32] = v65; v49 = a1 + 36; a1[33] = v66; v50 = 40; a1[34] = v67; a1[35] = v68; LABEL_25: bzero_core(result: v49, a2: v50); return v5; // jumptable 00D0D2BA default case, cases 10,13,39 case 19: a1[13] = (int (__fastcall *)(int, int, int, int))off_D0EAB8;// jumptable 00D0D2BA case 19 a1[12] = (int (__fastcall *)(int, int, int, int))off_D0EABC; v282 = (int (__fastcall *)(int, int, int, int))off_D0EAC4; v283 = (int (__fastcall *)(int, int, int, int))off_D0EAC8; v284 = (int (__fastcall *)(int, int, int, int))off_D0EACC; a1[8] = (int (__fastcall *)(int, int, int, int))off_D0EAC0; v285 = (int (__fastcall *)(int, int, int, int))off_D0EAD0; v286 = (int (__fastcall *)(int, int, int, int))off_D0EAD8; v287 = (int (__fastcall *)(int, int, int, int))off_D0EADC; *a1 = (int (__fastcall *)(int, int, int, int))off_D0EAD4; a1[1] = v283; a1[2] = v287; a1[3] = v282; a1[4] = v286; a1[5] = v284; v288 = (int (__fastcall *)(int, int, int, int))off_D0EAE4; a1[6] = (int (__fastcall *)(int, int, int, int))off_D0EAE0; a1[7] = v285; v5 = 0; a1[15] = v288; a1[14] = (int (__fastcall *)(int, int, int, int))off_D0EAE8; a1[11] = (int (__fastcall *)(int, int, int, int))off_D0EAEC; a1[29] = (int (__fastcall *)(int, int, int, int))off_D0EAF0; a1[28] = (int (__fastcall *)(int, int, int, int))off_D0EAF4; v289 = (int (__fastcall *)(int, int, int, int))off_D0EAFC; a1[26] = (int (__fastcall *)(int, int, int, int))off_D0EAF8; v290 = (int (__fastcall *)(int, int, int, int))off_D0EB00; a1[24] = v289; v291 = (int (__fastcall *)(int, int, int, int))off_D0EB04; a1[25] = v290; v292 = (int (__fastcall *)(int, int, int, int))off_D0EB08; v293 = (int (__fastcall *)(int, int, int, int))off_D0EB0C; a1[10] = v291; a1[9] = (int (__fastcall *)(int, int, int, int))off_D0EB10; v294 = (int (__fastcall *)(int, int, int, int))off_D0EB18; v295 = (int (__fastcall *)(int, int, int, int))off_D0EB1C; a1[16] = (int (__fastcall *)(int, int, int, int))off_D0EB14; a1[17] = nullptr; a1[18] = nullptr; a1[19] = v292; a1[20] = v295; a1[21] = v293; a1[22] = v294; a1[23] = nullptr; a1[27] = (int (__fastcall *)(int, int, int, int))off_D0EB20; a1[30] = (int (__fastcall *)(int, int, int, int))off_D0EB24; a1[31] = (int (__fastcall *)(int, int, int, int))off_D0EB28; v65 = (int (__fastcall *)(int, int, int, int))off_D0EB2C; v66 = (int (__fastcall *)(int, int, int, int))off_D0EB30; v67 = (int (__fastcall *)(int, int, int, int))off_D0EB34; v68 = (int (__fastcall *)(int, int, int, int))off_D0EB38; goto LABEL_24; case 20: case 25: a1[13] = (int (__fastcall *)(int, int, int, int))off_D0E6F4;// jumptable 00D0D2BA cases 20,25 a1[12] = (int (__fastcall *)(int, int, int, int))off_D0E6F8; v166 = (int (__fastcall *)(int, int, int, int))off_D0E700; v167 = (int (__fastcall *)(int, int, int, int))off_D0E704; v168 = (int (__fastcall *)(int, int, int, int))off_D0E708; a1[8] = (int (__fastcall *)(int, int, int, int))off_D0E6FC; v169 = (int (__fastcall *)(int, int, int, int))off_D0E70C; v170 = (int (__fastcall *)(int, int, int, int))off_D0E714; v171 = (int (__fastcall *)(int, int, int, int))off_D0E718; *a1 = (int (__fastcall *)(int, int, int, int))off_D0E710; a1[1] = v167; a1[2] = v171; a1[3] = v166; a1[4] = v170; a1[5] = v168; v172 = (int (__fastcall *)(int, int, int, int))off_D0E720; a1[6] = (int (__fastcall *)(int, int, int, int))off_D0E71C; a1[7] = v169; v5 = 0; a1[15] = v172; a1[14] = (int (__fastcall *)(int, int, int, int))off_D0E724; a1[11] = (int (__fastcall *)(int, int, int, int))off_D0E728; a1[29] = (int (__fastcall *)(int, int, int, int))off_D0E72C; a1[28] = (int (__fastcall *)(int, int, int, int))off_D0E730; v173 = (int (__fastcall *)(int, int, int, int))off_D0E738; a1[26] = (int (__fastcall *)(int, int, int, int))off_D0E734; v174 = (int (__fastcall *)(int, int, int, int))off_D0E73C; a1[24] = v173; v175 = (int (__fastcall *)(int, int, int, int))off_D0E740; a1[25] = v174; v176 = (int (__fastcall *)(int, int, int, int))off_D0E744; v177 = (int (__fastcall *)(int, int, int, int))off_D0E748; v178 = (int (__fastcall *)(int, int, int, int))off_D0E74C; a1[10] = v175; a1[9] = (int (__fastcall *)(int, int, int, int))off_D0E750; v179 = (int (__fastcall *)(int, int, int, int))off_D0E758; v180 = (int (__fastcall *)(int, int, int, int))off_D0E75C; a1[16] = (int (__fastcall *)(int, int, int, int))off_D0E754; a1[17] = nullptr; a1[18] = nullptr; a1[19] = v176; a1[20] = v180; a1[21] = v178; a1[22] = v179; a1[23] = v177; a1[27] = (int (__fastcall *)(int, int, int, int))off_D0E760; a1[30] = (int (__fastcall *)(int, int, int, int))off_D0E764; a1[31] = (int (__fastcall *)(int, int, int, int))off_D0E768; v181 = (int (__fastcall *)(int, int, int, int))off_D0E770; v182 = (int (__fastcall *)(int, int, int, int))off_D0E774; v183 = (int (__fastcall *)(int, int, int, int))off_D0E778; a1[32] = (int (__fastcall *)(int, int, int, int))off_D0E76C; a1[33] = v181; a1[34] = v182; a1[35] = v183; a1[36] = nullptr; v184 = (int (__fastcall *)(int, int, int, int))off_D0E77C; a1[37] = nullptr; a1[38] = nullptr; a1[39] = nullptr; goto LABEL_28; case 21: case 28: a1[13] = (int (__fastcall *)(int, int, int, int))off_D0E780;// jumptable 00D0D2BA cases 21,28 a1[12] = (int (__fastcall *)(int, int, int, int))off_D0E784; v185 = (int (__fastcall *)(int, int, int, int))off_D0E78C; v186 = (int (__fastcall *)(int, int, int, int))off_D0E790; v187 = (int (__fastcall *)(int, int, int, int))off_D0E794; a1[8] = (int (__fastcall *)(int, int, int, int))off_D0E788; v188 = (int (__fastcall *)(int, int, int, int))off_D0E798; v189 = (int (__fastcall *)(int, int, int, int))off_D0E7A0; v190 = (int (__fastcall *)(int, int, int, int))off_D0E7A4; *a1 = (int (__fastcall *)(int, int, int, int))off_D0E79C; a1[1] = v186; a1[2] = v190; a1[3] = v185; a1[4] = v189; a1[5] = v187; v191 = (int (__fastcall *)(int, int, int, int))off_D0E7AC; a1[6] = (int (__fastcall *)(int, int, int, int))off_D0E7A8; a1[7] = v188; v5 = 0; a1[15] = v191; a1[14] = (int (__fastcall *)(int, int, int, int))off_D0E7B0; a1[11] = (int (__fastcall *)(int, int, int, int))off_D0E7B4; a1[29] = (int (__fastcall *)(int, int, int, int))off_D0E7B8; a1[28] = (int (__fastcall *)(int, int, int, int))off_D0E7BC; v192 = (int (__fastcall *)(int, int, int, int))off_D0E7C4; a1[26] = (int (__fastcall *)(int, int, int, int))off_D0E7C0; v193 = (int (__fastcall *)(int, int, int, int))off_D0E7C8; a1[24] = v192; v194 = (int (__fastcall *)(int, int, int, int))off_D0E7CC; a1[25] = v193; v195 = (int (__fastcall *)(int, int, int, int))off_D0E7D0; v196 = (int (__fastcall *)(int, int, int, int))off_D0E7D4; a1[10] = v194; a1[9] = (int (__fastcall *)(int, int, int, int))off_D0E7D8; v197 = (int (__fastcall *)(int, int, int, int))off_D0E7E0; v198 = (int (__fastcall *)(int, int, int, int))off_D0E7E4; a1[16] = (int (__fastcall *)(int, int, int, int))off_D0E7DC; a1[17] = nullptr; a1[18] = nullptr; a1[19] = v195; a1[20] = v198; a1[21] = v196; a1[22] = v197; a1[23] = nullptr; a1[27] = (int (__fastcall *)(int, int, int, int))off_D0E7E8; a1[30] = (int (__fastcall *)(int, int, int, int))off_D0E7EC; a1[31] = (int (__fastcall *)(int, int, int, int))off_D0E7F0; v65 = (int (__fastcall *)(int, int, int, int))off_D0E7F4; v66 = (int (__fastcall *)(int, int, int, int))off_D0E7F8; v67 = (int (__fastcall *)(int, int, int, int))off_D0E7FC; v68 = (int (__fastcall *)(int, int, int, int))off_D0E800; goto LABEL_24; case 22: case 27: a1[13] = (int (__fastcall *)(int, int, int, int))off_D0E804;// jumptable 00D0D2BA cases 22,27 a1[12] = (int (__fastcall *)(int, int, int, int))off_D0E808; v199 = (int (__fastcall *)(int, int, int, int))off_D0E810; v200 = (int (__fastcall *)(int, int, int, int))off_D0E814; v201 = (int (__fastcall *)(int, int, int, int))off_D0E818; a1[8] = (int (__fastcall *)(int, int, int, int))off_D0E80C; v202 = (int (__fastcall *)(int, int, int, int))off_D0E81C; v203 = (int (__fastcall *)(int, int, int, int))off_D0E824; v204 = (int (__fastcall *)(int, int, int, int))off_D0E828; *a1 = (int (__fastcall *)(int, int, int, int))off_D0E820; a1[1] = v200; a1[2] = v204; a1[3] = v199; a1[4] = v203; a1[5] = v201; v205 = (int (__fastcall *)(int, int, int, int))off_D0E830; a1[6] = (int (__fastcall *)(int, int, int, int))off_D0E82C; a1[7] = v202; v5 = 0; a1[15] = v205; a1[14] = (int (__fastcall *)(int, int, int, int))off_D0E834; a1[11] = (int (__fastcall *)(int, int, int, int))off_D0E838; a1[29] = (int (__fastcall *)(int, int, int, int))off_D0E83C; a1[28] = (int (__fastcall *)(int, int, int, int))off_D0E840; v206 = (int (__fastcall *)(int, int, int, int))off_D0E848; a1[26] = (int (__fastcall *)(int, int, int, int))off_D0E844; v207 = (int (__fastcall *)(int, int, int, int))off_D0E84C; a1[24] = v206; v208 = (int (__fastcall *)(int, int, int, int))off_D0E850; a1[25] = v207; v209 = (int (__fastcall *)(int, int, int, int))off_D0E854; v210 = (int (__fastcall *)(int, int, int, int))off_D0E858; v211 = (int (__fastcall *)(int, int, int, int))off_D0E85C; a1[10] = v208; a1[9] = (int (__fastcall *)(int, int, int, int))off_D0E860; v212 = (int (__fastcall *)(int, int, int, int))off_D0E868; v213 = (int (__fastcall *)(int, int, int, int))off_D0E86C; a1[16] = (int (__fastcall *)(int, int, int, int))off_D0E864; a1[17] = nullptr; a1[18] = nullptr; a1[19] = v209; a1[20] = v213; a1[21] = v211; a1[22] = v212; a1[23] = v210; a1[27] = (int (__fastcall *)(int, int, int, int))off_D0E870; a1[30] = (int (__fastcall *)(int, int, int, int))off_D0E874; a1[31] = (int (__fastcall *)(int, int, int, int))off_D0E878; v65 = (int (__fastcall *)(int, int, int, int))off_D0E87C; v66 = (int (__fastcall *)(int, int, int, int))off_D0E880; v67 = (int (__fastcall *)(int, int, int, int))off_D0E884; v68 = (int (__fastcall *)(int, int, int, int))off_D0E888; goto LABEL_24; case 23: a1[13] = (int (__fastcall *)(int, int, int, int))off_D0EF08;// jumptable 00D0D2BA case 23 a1[12] = (int (__fastcall *)(int, int, int, int))off_D0EF0C; v296 = (int (__fastcall *)(int, int, int, int))off_D0EEFC; v297 = (int (__fastcall *)(int, int, int, int))off_D0EF00; v298 = (int (__fastcall *)(int, int, int, int))off_D0EF1C; a1[8] = (int (__fastcall *)(int, int, int, int))off_D0EF10; v299 = (int (__fastcall *)(int, int, int, int))off_D0EF14; v300 = (int (__fastcall *)(int, int, int, int))off_D0EF20; v301 = (int (__fastcall *)(int, int, int, int))off_D0EF24; *a1 = (int (__fastcall *)(int, int, int, int))off_D0EF04; a1[1] = v297; a1[2] = v301; a1[3] = v296; a1[4] = v300; a1[5] = v298; v302 = (int (__fastcall *)(int, int, int, int))off_D0EF44; a1[6] = (int (__fastcall *)(int, int, int, int))off_D0EF18; a1[7] = v299; v5 = 0; a1[15] = v302; a1[14] = (int (__fastcall *)(int, int, int, int))off_D0EF48; a1[11] = (int (__fastcall *)(int, int, int, int))off_D0EF4C; a1[29] = (int (__fastcall *)(int, int, int, int))off_D0EF50; a1[28] = (int (__fastcall *)(int, int, int, int))off_D0EF54; v303 = (int (__fastcall *)(int, int, int, int))off_D0EF28; a1[26] = (int (__fastcall *)(int, int, int, int))off_D0EF58; v304 = (int (__fastcall *)(int, int, int, int))off_D0EF5C; a1[24] = v303; v305 = (int (__fastcall *)(int, int, int, int))off_D0EF2C; a1[25] = v304; v306 = (int (__fastcall *)(int, int, int, int))off_D0EF3C; v307 = (int (__fastcall *)(int, int, int, int))off_D0EF60; a1[10] = v305; a1[9] = (int (__fastcall *)(int, int, int, int))off_D0EF30; v308 = (int (__fastcall *)(int, int, int, int))off_D0EF34; v309 = (int (__fastcall *)(int, int, int, int))off_D0EF38; a1[16] = (int (__fastcall *)(int, int, int, int))off_D0EF40; a1[17] = nullptr; a1[18] = nullptr; a1[19] = v306; a1[20] = v309; a1[21] = v307; a1[22] = v308; a1[23] = nullptr; a1[27] = (int (__fastcall *)(int, int, int, int))off_D0EF64; a1[30] = (int (__fastcall *)(int, int, int, int))off_D0EF68; a1[31] = (int (__fastcall *)(int, int, int, int))off_D0EF6C; v65 = (int (__fastcall *)(int, int, int, int))off_D0EF70; v66 = (int (__fastcall *)(int, int, int, int))off_D0EF74; v67 = (int (__fastcall *)(int, int, int, int))off_D0EF78; v68 = (int (__fastcall *)(int, int, int, int))off_D0EF7C; goto LABEL_24; case 24: a1[13] = (int (__fastcall *)(int, int, int, int))off_D0F094;// jumptable 00D0D2BA case 24 a1[12] = (int (__fastcall *)(int, int, int, int))off_D0F098; v311 = (int (__fastcall *)(int, int, int, int))off_D0F088; v312 = (int (__fastcall *)(int, int, int, int))off_D0F08C; v313 = (int (__fastcall *)(int, int, int, int))off_D0F0A8; a1[8] = (int (__fastcall *)(int, int, int, int))off_D0F09C; v314 = (int (__fastcall *)(int, int, int, int))off_D0F0A0; v315 = (int (__fastcall *)(int, int, int, int))off_D0F0AC; v316 = (int (__fastcall *)(int, int, int, int))off_D0F0B0; *a1 = (int (__fastcall *)(int, int, int, int))off_D0F090; a1[1] = v312; a1[2] = v316; a1[3] = v311; a1[4] = v315; a1[5] = v313; v317 = (int (__fastcall *)(int, int, int, int))off_D0F0D0; a1[6] = (int (__fastcall *)(int, int, int, int))off_D0F0A4; a1[7] = v314; v5 = 0; a1[15] = v317; a1[14] = (int (__fastcall *)(int, int, int, int))off_D0F0D4; a1[11] = (int (__fastcall *)(int, int, int, int))off_D0F0D8; a1[29] = (int (__fastcall *)(int, int, int, int))off_D0F0DC; a1[28] = (int (__fastcall *)(int, int, int, int))off_D0F0E0; v318 = (int (__fastcall *)(int, int, int, int))off_D0F0B4; a1[26] = (int (__fastcall *)(int, int, int, int))off_D0F0E4; v319 = (int (__fastcall *)(int, int, int, int))off_D0F0E8; a1[24] = v318; v320 = (int (__fastcall *)(int, int, int, int))off_D0F0B8; a1[25] = v319; v321 = (int (__fastcall *)(int, int, int, int))off_D0F0C8; v322 = (int (__fastcall *)(int, int, int, int))off_D0F0EC; v323 = (int (__fastcall *)(int, int, int, int))off_D0F0F0; a1[10] = v320; a1[9] = (int (__fastcall *)(int, int, int, int))off_D0F0BC; v324 = (int (__fastcall *)(int, int, int, int))off_D0F0C0; v325 = (int (__fastcall *)(int, int, int, int))off_D0F0C4; a1[16] = (int (__fastcall *)(int, int, int, int))off_D0F0CC; a1[17] = nullptr; a1[18] = nullptr; a1[19] = v321; a1[20] = v325; a1[21] = v323; a1[22] = v324; a1[23] = v322; a1[27] = (int (__fastcall *)(int, int, int, int))off_D0F0F4; a1[30] = (int (__fastcall *)(int, int, int, int))off_D0F0F8; a1[31] = (int (__fastcall *)(int, int, int, int))off_D0F0FC; v326 = (int (__fastcall *)(int, int, int, int))off_D0F104; v327 = (int (__fastcall *)(int, int, int, int))off_D0F108; v328 = (int (__fastcall *)(int, int, int, int))off_D0F10C; a1[32] = (int (__fastcall *)(int, int, int, int))off_D0F100; a1[33] = v326; a1[34] = v327; a1[35] = v328; a1[36] = nullptr; a1[37] = nullptr; a1[38] = nullptr; a1[39] = nullptr; v184 = (int (__fastcall *)(int, int, int, int))off_D0F110; LABEL_28: a1[40] = v184; v49 = a1 + 41; v50 = 20; goto LABEL_25; case 26: case 32: case 34: case 35: case 43: a1[13] = (int (__fastcall *)(int, int, int, int))off_D0E288;// jumptable 00D0D2BA cases 26,32,34,35,43 a1[12] = (int (__fastcall *)(int, int, int, int))off_D0E28C; v6 = (int (__fastcall *)(int, int, int, int))off_D0E294; v7 = (int (__fastcall *)(int, int, int, int))off_D0E298; v8 = (int (__fastcall *)(int, int, int, int))off_D0E29C; a1[8] = (int (__fastcall *)(int, int, int, int))off_D0E290; v9 = (int (__fastcall *)(int, int, int, int))off_D0E2A0; v10 = (int (__fastcall *)(int, int, int, int))off_D0E2A8; v11 = (int (__fastcall *)(int, int, int, int))off_D0E2AC; *a1 = (int (__fastcall *)(int, int, int, int))off_D0E2A4; a1[1] = v7; a1[2] = v11; a1[3] = v6; a1[4] = v10; a1[5] = v8; v12 = (int (__fastcall *)(int, int, int, int))off_D0E2B4; a1[6] = (int (__fastcall *)(int, int, int, int))off_D0E2B0; a1[7] = v9; a1[15] = v12; a1[14] = (int (__fastcall *)(int, int, int, int))off_D0E2B8; v13 = (int (__fastcall *)(int, int, int, int))off_D0E2C0; a1[11] = (int (__fastcall *)(int, int, int, int))off_D0E2BC; v14 = (int (__fastcall *)(int, int, int, int))off_D0E2C4; a1[24] = v13; v15 = (int (__fastcall *)(int, int, int, int))off_D0E2C8; a1[29] = v14; v16 = (int (__fastcall *)(int, int, int, int))off_D0E2CC; a1[10] = v15; v17 = (int (__fastcall *)(int, int, int, int))off_D0E2D0; a1[28] = v16; v18 = (int (__fastcall *)(int, int, int, int))off_D0E2D4; a1[9] = v17; a1[26] = v18; v19 = (int (__fastcall *)(int, int, int, int))off_D0E2DC; v20 = (int (__fastcall *)(int, int, int, int))off_D0E2E0; v21 = (int (__fastcall *)(int, int, int, int))off_D0E2E4; a1[25] = (int (__fastcall *)(int, int, int, int))off_D0E2D8; v22 = (int (__fastcall *)(int, int, int, int))off_D0E2E8; v23 = (int (__fastcall *)(int, int, int, int))off_D0E2F0; v24 = (int (__fastcall *)(int, int, int, int))off_D0E2F4; a1[16] = (int (__fastcall *)(int, int, int, int))off_D0E2EC; a1[17] = v20; a1[18] = v24; a1[19] = v19; a1[20] = v23; a1[21] = v21; v25 = (int (__fastcall *)(int, int, int, int))off_D0E2FC; a1[22] = (int (__fastcall *)(int, int, int, int))off_D0E2F8; a1[23] = v22; a1[27] = v25; a1[30] = (int (__fastcall *)(int, int, int, int))off_D0E300; a1[31] = (int (__fastcall *)(int, int, int, int))off_D0E304; v26 = (int (__fastcall *)(int, int, int, int))off_D0E308; v27 = (int (__fastcall *)(int, int, int, int))off_D0E30C; v28 = (int (__fastcall *)(int, int, int, int))off_D0E310; v29 = (int (__fastcall *)(int, int, int, int))off_D0E314; goto LABEL_6; case 29: case 30: a1[13] = (int (__fastcall *)(int, int, int, int))off_D0E88C;// jumptable 00D0D2BA cases 29,30 a1[12] = (int (__fastcall *)(int, int, int, int))off_D0E890; v214 = (int (__fastcall *)(int, int, int, int))off_D0E898; v215 = (int (__fastcall *)(int, int, int, int))off_D0E89C; v216 = (int (__fastcall *)(int, int, int, int))off_D0E8A0; a1[8] = (int (__fastcall *)(int, int, int, int))off_D0E894; v217 = (int (__fastcall *)(int, int, int, int))off_D0E8A4; v218 = (int (__fastcall *)(int, int, int, int))off_D0E8AC; v219 = (int (__fastcall *)(int, int, int, int))off_D0E8B0; *a1 = (int (__fastcall *)(int, int, int, int))off_D0E8A8; a1[1] = v215; a1[2] = v219; a1[3] = v214; a1[4] = v218; a1[5] = v216; v220 = (int (__fastcall *)(int, int, int, int))off_D0E8B8; a1[6] = (int (__fastcall *)(int, int, int, int))off_D0E8B4; a1[7] = v217; a1[15] = v220; a1[14] = (int (__fastcall *)(int, int, int, int))off_D0E8BC; v221 = (int (__fastcall *)(int, int, int, int))off_D0E8C4; a1[11] = (int (__fastcall *)(int, int, int, int))off_D0E8C0; v222 = (int (__fastcall *)(int, int, int, int))off_D0E8C8; a1[24] = v221; v223 = (int (__fastcall *)(int, int, int, int))off_D0E8CC; a1[29] = v222; v224 = (int (__fastcall *)(int, int, int, int))off_D0E8D0; a1[10] = v223; v225 = (int (__fastcall *)(int, int, int, int))off_D0E8D4; a1[28] = v224; v226 = (int (__fastcall *)(int, int, int, int))off_D0E8D8; a1[9] = v225; a1[26] = v226; v227 = (int (__fastcall *)(int, int, int, int))off_D0E8E0; v228 = (int (__fastcall *)(int, int, int, int))off_D0E8E4; v229 = (int (__fastcall *)(int, int, int, int))off_D0E8E8; a1[25] = (int (__fastcall *)(int, int, int, int))off_D0E8DC; v230 = (int (__fastcall *)(int, int, int, int))off_D0E8EC; v231 = (int (__fastcall *)(int, int, int, int))off_D0E8F4; v232 = (int (__fastcall *)(int, int, int, int))off_D0E8F8; a1[16] = (int (__fastcall *)(int, int, int, int))off_D0E8F0; a1[17] = v228; v5 = 0; a1[18] = v232; a1[19] = v227; a1[20] = v231; a1[21] = v229; v233 = (int (__fastcall *)(int, int, int, int))off_D0E900; a1[22] = (int (__fastcall *)(int, int, int, int))off_D0E8FC; a1[23] = v230; a1[27] = v233; a1[30] = (int (__fastcall *)(int, int, int, int))off_D0E904; a1[31] = (int (__fastcall *)(int, int, int, int))off_D0E908; v234 = (int (__fastcall *)(int, int, int, int))off_D0E910; a1[32] = (int (__fastcall *)(int, int, int, int))off_D0E90C; a1[33] = v234; a1[34] = nullptr; v235 = (int (__fastcall *)(int, int, int, int))off_D0E914; v236 = (int (__fastcall *)(int, int, int, int))off_D0E918; a1[35] = (int (__fastcall *)(int, int, int, int))off_D0E91C; a1[36] = nullptr; v237 = (int (__fastcall *)(int, int, int, int))off_D0E920; v238 = (int (__fastcall *)(int, int, int, int))off_D0E924; v239 = (int (__fastcall *)(int, int, int, int))off_D0E928; a1[37] = nullptr; a1[38] = nullptr; a1[39] = nullptr; a1[40] = v239; a1[41] = v236; a1[42] = v238; a1[43] = v235; a1[44] = v237; a1[45] = nullptr; return v5; case 31: a1[13] = (int (__fastcall *)(int, int, int, int))off_D0EE68;// jumptable 00D0D2BA case 31 a1[12] = (int (__fastcall *)(int, int, int, int))off_D0EE6C; v329 = (int (__fastcall *)(int, int, int, int))off_D0EE5C; v330 = (int (__fastcall *)(int, int, int, int))off_D0EE60; v331 = (int (__fastcall *)(int, int, int, int))off_D0EE7C; a1[8] = (int (__fastcall *)(int, int, int, int))off_D0EE70; v332 = (int (__fastcall *)(int, int, int, int))off_D0EE74; v333 = (int (__fastcall *)(int, int, int, int))off_D0EE80; v334 = (int (__fastcall *)(int, int, int, int))off_D0EE84; *a1 = (int (__fastcall *)(int, int, int, int))off_D0EE64; a1[1] = v330; a1[2] = v334; a1[3] = v329; a1[4] = v333; a1[5] = v331; v335 = (int (__fastcall *)(int, int, int, int))off_D0EEAC; a1[6] = (int (__fastcall *)(int, int, int, int))off_D0EE78; a1[7] = v332; a1[15] = v335; a1[14] = (int (__fastcall *)(int, int, int, int))off_D0EEB0; v336 = (int (__fastcall *)(int, int, int, int))off_D0EE88; a1[11] = (int (__fastcall *)(int, int, int, int))off_D0EEB4; v337 = (int (__fastcall *)(int, int, int, int))off_D0EEB8; a1[24] = v336; v338 = (int (__fastcall *)(int, int, int, int))off_D0EE8C; a1[29] = v337; v339 = (int (__fastcall *)(int, int, int, int))off_D0EEBC; a1[10] = v338; v340 = (int (__fastcall *)(int, int, int, int))off_D0EE90; a1[28] = v339; v341 = (int (__fastcall *)(int, int, int, int))off_D0EEC0; a1[9] = v340; a1[26] = v341; v342 = (int (__fastcall *)(int, int, int, int))off_D0EE9C; v343 = (int (__fastcall *)(int, int, int, int))off_D0EEA4; v344 = (int (__fastcall *)(int, int, int, int))off_D0EECC; a1[25] = (int (__fastcall *)(int, int, int, int))off_D0EEC4; v345 = (int (__fastcall *)(int, int, int, int))off_D0EEC8; v346 = (int (__fastcall *)(int, int, int, int))off_D0EE98; v347 = (int (__fastcall *)(int, int, int, int))off_D0EEA0; a1[16] = (int (__fastcall *)(int, int, int, int))off_D0EEA8; a1[17] = v343; v5 = 0; a1[18] = v347; a1[19] = v342; a1[20] = v346; a1[21] = v344; v348 = (int (__fastcall *)(int, int, int, int))off_D0EED0; a1[22] = (int (__fastcall *)(int, int, int, int))off_D0EE94; a1[23] = v345; a1[27] = v348; a1[30] = (int (__fastcall *)(int, int, int, int))off_D0EED4; a1[31] = (int (__fastcall *)(int, int, int, int))off_D0EED8; v349 = (int (__fastcall *)(int, int, int, int))off_D0EEE0; a1[32] = (int (__fastcall *)(int, int, int, int))off_D0EEDC; a1[33] = v349; a1[34] = nullptr; a1[35] = (int (__fastcall *)(int, int, int, int))off_D0EEE4; bzero_core(result: a1 + 36, a2: 0x14u); v112 = (int (__fastcall *)(int, int, int, int))off_D0EEE8; v113 = (int (__fastcall *)(int, int, int, int))off_D0EEEC; v114 = (int (__fastcall *)(int, int, int, int))off_D0EEF0; v115 = (int (__fastcall *)(int, int, int, int))off_D0EEF4; v116 = (int (__fastcall *)(int, int, int, int))off_D0EEF8; goto LABEL_30; case 33: case 40: case 42: a1[13] = (int (__fastcall *)(int, int, int, int))off_D0E428;// jumptable 00D0D2BA cases 33,40,42 a1[12] = (int (__fastcall *)(int, int, int, int))off_D0E42C; v69 = (int (__fastcall *)(int, int, int, int))off_D0E434; v70 = (int (__fastcall *)(int, int, int, int))off_D0E438; v71 = (int (__fastcall *)(int, int, int, int))off_D0E43C; a1[8] = (int (__fastcall *)(int, int, int, int))off_D0E430; v72 = (int (__fastcall *)(int, int, int, int))off_D0E440; v73 = (int (__fastcall *)(int, int, int, int))off_D0E448; v74 = (int (__fastcall *)(int, int, int, int))off_D0E44C; *a1 = (int (__fastcall *)(int, int, int, int))off_D0E444; a1[1] = v70; a1[2] = v74; a1[3] = v69; a1[4] = v73; a1[5] = v71; v75 = (int (__fastcall *)(int, int, int, int))off_D0E454; a1[6] = (int (__fastcall *)(int, int, int, int))off_D0E450; a1[7] = v72; a1[15] = v75; a1[14] = (int (__fastcall *)(int, int, int, int))off_D0E458; v76 = (int (__fastcall *)(int, int, int, int))off_D0E460; a1[11] = (int (__fastcall *)(int, int, int, int))off_D0E45C; v77 = (int (__fastcall *)(int, int, int, int))off_D0E464; a1[24] = v76; v78 = (int (__fastcall *)(int, int, int, int))off_D0E468; a1[29] = v77; v79 = (int (__fastcall *)(int, int, int, int))off_D0E46C; a1[10] = v78; v80 = (int (__fastcall *)(int, int, int, int))off_D0E470; a1[28] = v79; v81 = (int (__fastcall *)(int, int, int, int))off_D0E474; a1[9] = v80; a1[26] = v81; v82 = (int (__fastcall *)(int, int, int, int))off_D0E47C; v83 = (int (__fastcall *)(int, int, int, int))off_D0E480; v84 = (int (__fastcall *)(int, int, int, int))off_D0E484; a1[25] = (int (__fastcall *)(int, int, int, int))off_D0E478; v85 = (int (__fastcall *)(int, int, int, int))off_D0E488; v86 = (int (__fastcall *)(int, int, int, int))off_D0E490; v87 = (int (__fastcall *)(int, int, int, int))off_D0E494; a1[16] = (int (__fastcall *)(int, int, int, int))off_D0E48C; a1[17] = v83; a1[18] = v87; a1[19] = v82; a1[20] = v86; a1[21] = v84; v88 = (int (__fastcall *)(int, int, int, int))off_D0E49C; a1[22] = (int (__fastcall *)(int, int, int, int))off_D0E498; a1[23] = v85; a1[27] = v88; a1[30] = (int (__fastcall *)(int, int, int, int))off_D0E4A0; a1[31] = (int (__fastcall *)(int, int, int, int))off_D0E4A4; v26 = (int (__fastcall *)(int, int, int, int))off_D0E4A8; v27 = (int (__fastcall *)(int, int, int, int))off_D0E4AC; v28 = (int (__fastcall *)(int, int, int, int))off_D0E4B0; v29 = (int (__fastcall *)(int, int, int, int))off_D0E4B4; LABEL_6: a1[32] = v26; v89 = a1 + 36; a1[33] = v27; v90 = 40; a1[34] = v28; a1[35] = v29; goto LABEL_7; case 36: case 37: case 41: a1[13] = (int (__fastcall *)(int, int, int, int))off_D0E4B8;// jumptable 00D0D2BA cases 36,37,41 a1[12] = (int (__fastcall *)(int, int, int, int))off_D0E4BC; v91 = (int (__fastcall *)(int, int, int, int))off_D0E4C4; v92 = (int (__fastcall *)(int, int, int, int))off_D0E4C8; v93 = (int (__fastcall *)(int, int, int, int))off_D0E4CC; a1[8] = (int (__fastcall *)(int, int, int, int))off_D0E4C0; v94 = (int (__fastcall *)(int, int, int, int))off_D0E4D0; v95 = (int (__fastcall *)(int, int, int, int))off_D0E4D8; v96 = (int (__fastcall *)(int, int, int, int))off_D0E4DC; *a1 = (int (__fastcall *)(int, int, int, int))off_D0E4D4; a1[1] = v92; a1[2] = v96; a1[3] = v91; a1[4] = v95; a1[5] = v93; v97 = (int (__fastcall *)(int, int, int, int))off_D0E4E4; a1[6] = (int (__fastcall *)(int, int, int, int))off_D0E4E0; a1[7] = v94; a1[15] = v97; a1[14] = (int (__fastcall *)(int, int, int, int))off_D0E4E8; v98 = (int (__fastcall *)(int, int, int, int))off_D0E4F0; a1[11] = (int (__fastcall *)(int, int, int, int))off_D0E4EC; v99 = (int (__fastcall *)(int, int, int, int))off_D0E4F4; a1[24] = v98; v100 = (int (__fastcall *)(int, int, int, int))off_D0E4F8; a1[29] = v99; v101 = (int (__fastcall *)(int, int, int, int))off_D0E4FC; a1[10] = v100; v102 = (int (__fastcall *)(int, int, int, int))off_D0E500; a1[28] = v101; v103 = (int (__fastcall *)(int, int, int, int))off_D0E504; a1[9] = v102; a1[26] = v103; v104 = (int (__fastcall *)(int, int, int, int))off_D0E50C; v105 = (int (__fastcall *)(int, int, int, int))off_D0E510; v106 = (int (__fastcall *)(int, int, int, int))off_D0E514; a1[25] = (int (__fastcall *)(int, int, int, int))off_D0E508; v107 = (int (__fastcall *)(int, int, int, int))off_D0E518; v108 = (int (__fastcall *)(int, int, int, int))off_D0E520; v109 = (int (__fastcall *)(int, int, int, int))off_D0E524; a1[16] = (int (__fastcall *)(int, int, int, int))off_D0E51C; a1[17] = v105; v5 = 0; a1[18] = v109; a1[19] = v104; a1[20] = v108; a1[21] = v106; v110 = (int (__fastcall *)(int, int, int, int))off_D0E52C; a1[22] = (int (__fastcall *)(int, int, int, int))off_D0E528; a1[23] = v107; a1[27] = v110; a1[30] = (int (__fastcall *)(int, int, int, int))off_D0E530; a1[31] = (int (__fastcall *)(int, int, int, int))off_D0E534; v111 = (int (__fastcall *)(int, int, int, int))off_D0E53C; a1[32] = (int (__fastcall *)(int, int, int, int))off_D0E538; a1[33] = v111; a1[34] = nullptr; a1[35] = (int (__fastcall *)(int, int, int, int))off_D0E540; bzero_core(result: a1 + 36, a2: 0x14u); v112 = (int (__fastcall *)(int, int, int, int))off_D0E544; v113 = (int (__fastcall *)(int, int, int, int))off_D0E548; v114 = (int (__fastcall *)(int, int, int, int))off_D0E54C; v115 = (int (__fastcall *)(int, int, int, int))off_D0E550; v116 = (int (__fastcall *)(int, int, int, int))off_D0E554; LABEL_30: a1[41] = v116; a1[42] = v115; a1[43] = v114; a1[44] = v113; a1[45] = v112; return v5; case 38: a1[13] = (int (__fastcall *)(int, int, int, int))off_D0EDE0;// jumptable 00D0D2BA case 38 a1[12] = (int (__fastcall *)(int, int, int, int))off_D0EDE4; v350 = (int (__fastcall *)(int, int, int, int))off_D0EDD4; v351 = (int (__fastcall *)(int, int, int, int))off_D0EDD8; v352 = (int (__fastcall *)(int, int, int, int))off_D0EDF4; a1[8] = (int (__fastcall *)(int, int, int, int))off_D0EDE8; v353 = (int (__fastcall *)(int, int, int, int))off_D0EDEC; v354 = (int (__fastcall *)(int, int, int, int))off_D0EDF8; v355 = (int (__fastcall *)(int, int, int, int))off_D0EDFC; *a1 = (int (__fastcall *)(int, int, int, int))off_D0EDDC; a1[1] = v351; a1[2] = v355; a1[3] = v350; a1[4] = v354; a1[5] = v352; v356 = (int (__fastcall *)(int, int, int, int))off_D0EE24; a1[6] = (int (__fastcall *)(int, int, int, int))off_D0EDF0; a1[7] = v353; a1[15] = v356; a1[14] = (int (__fastcall *)(int, int, int, int))off_D0EE28; v357 = (int (__fastcall *)(int, int, int, int))off_D0EE00; a1[11] = (int (__fastcall *)(int, int, int, int))off_D0EE2C; v358 = (int (__fastcall *)(int, int, int, int))off_D0EE30; a1[24] = v357; v359 = (int (__fastcall *)(int, int, int, int))off_D0EE04; a1[29] = v358; v360 = (int (__fastcall *)(int, int, int, int))off_D0EE34; a1[10] = v359; v361 = (int (__fastcall *)(int, int, int, int))off_D0EE08; a1[28] = v360; v362 = (int (__fastcall *)(int, int, int, int))off_D0EE38; a1[9] = v361; a1[26] = v362; v363 = (int (__fastcall *)(int, int, int, int))off_D0EE14; v364 = (int (__fastcall *)(int, int, int, int))off_D0EE1C; v365 = (int (__fastcall *)(int, int, int, int))off_D0EE44; a1[25] = (int (__fastcall *)(int, int, int, int))off_D0EE3C; v366 = (int (__fastcall *)(int, int, int, int))off_D0EE40; v367 = (int (__fastcall *)(int, int, int, int))off_D0EE10; v368 = (int (__fastcall *)(int, int, int, int))off_D0EE18; a1[16] = (int (__fastcall *)(int, int, int, int))off_D0EE20; a1[17] = v364; a1[18] = v368; a1[19] = v363; a1[20] = v367; a1[21] = v365; v369 = (int (__fastcall *)(int, int, int, int))off_D0EE48; a1[22] = (int (__fastcall *)(int, int, int, int))off_D0EE0C; a1[23] = v366; a1[27] = v369; HIDWORD(v370) = off_D0EE58; a1[30] = (int (__fastcall *)(int, int, int, int))off_D0EE4C; a1[31] = (int (__fastcall *)(int, int, int, int))off_D0EE50; LODWORD(v370) = off_D0EE54; *((_QWORD *)a1 + 16) = v370; v89 = a1 + 34; v90 = 48; LABEL_7: bzero_core(result: v89, a2: v90); return 0; default: return v5; // switch jump } } /* ==== asd_build_reg_addr_table [tier=EXACT size=236] ==== */ // Fills a 16-entry table of register block addresses (0x251AD0, 0x351AD0, 0x451AD0, ... // stepping by 0x100000) used to resolve per-instance register bases. int __fastcall asd_build_reg_addr_table(int a1, int a2, int a3, int *a4) { unsigned int v8; // r4 int v9; // r5 _QWORD *v10; // r6 int result; // r0 __int64 *v12; // r7 __int64 v13; // r0 _DWORD v14[16]; // [sp+4h] [bp+0h] BYREF _DWORD v15[16]; // [sp+44h] [bp+40h] BYREF v15[15] = dword_D10DF4 + 4096; v15[14] = dword_D10DF4; v15[13] = dword_D10DF8 + 4096; v15[12] = dword_D10DF8; v15[11] = dword_D10DFC + 4096; v15[10] = dword_D10DFC; v15[9] = dword_D10E00 + 4096; v15[6] = dword_D10E04; v15[7] = dword_D10E04 + 4096; v15[4] = dword_D10E08; v15[5] = dword_D10E08 + 4096; v15[2] = dword_D10E0C; v15[3] = dword_D10E0C + 4096; v15[0] = dword_D10E10; v15[1] = dword_D10E10 + 4096; v14[15] = dword_D10E14; v14[14] = dword_D10DF4 + 4; v14[13] = dword_D10E18; v14[12] = dword_D10DF8 + 4; v14[11] = dword_D10E1C; v14[10] = dword_D10DFC + 4; v14[9] = dword_D10E20; v14[8] = dword_D10E00 + 4; v14[7] = dword_D10E24; v14[6] = dword_D10E04 + 4; v8 = 0; v14[5] = dword_D10E28; v14[4] = dword_D10E08 + 4; v9 = 0; v14[3] = dword_D10E2C; v14[2] = dword_D10E0C + 4; v10 = v15; v14[1] = dword_D10E30; result = dword_D10E10 + 4; v12 = (__int64 *)v14; v15[8] = dword_D10E00; v14[0] = dword_D10E10 + 4; while ( a1 != v8 ) { result = asd_feature_level_check(a1: 0, a2: v8); if ( result != 0 ) { if ( v9 < 0 ) break; *(_QWORD *)(a2 + 8 * v9) = *v10; v13 = *v12; *(_DWORD *)(a3 + 8 * v9) = *(_DWORD *)v12; result = a3 + 8 * v9++; *(_DWORD *)(result + 4) = HIDWORD(v13); } ++v12; ++v10; ++v8; } *a4 = v9; return result; } /* ==== asd_build_reg_addr_table_v2 [tier=EXACT size=346] ==== */ // Fills a 24-entry table of register block base addresses (0x33000000-class values // stepping by 0x2000000) used to resolve per-instance register bases. unsigned int __fastcall asd_build_reg_addr_table_v2(int a1, int a2) { unsigned int *v2; // r11 _DWORD *v3; // r8 unsigned int v4; // r6 unsigned int v5; // r7 _DWORD *v6; // r9 unsigned int result; // r0 int v8; // r3 int v9; // r4 int v10; // r5 _DWORD *v11; // r0 int v12; // r3 int v13; // r4 int v14; // r5 _DWORD *v15; // r0 _DWORD v18[24]; // [sp+Ch] [bp-C0h] BYREF _DWORD v19[24]; // [sp+6Ch] [bp-60h] BYREF v19[22] = dword_D10CA4; v19[23] = dword_D10CA4 + 4096; v19[21] = dword_D10CA8 + 4096; v19[20] = dword_D10CA8; v19[19] = dword_D10CAC + 4096; v19[6] = dword_D10CC4; v19[17] = dword_D10CB0 + 4096; v2 = (unsigned int *)off_D10D04; v19[15] = dword_D10CB4 + 4096; v19[18] = dword_D10CAC; v19[13] = dword_D10CB8 + 4096; v19[10] = dword_D10CBC; v19[11] = dword_D10CBC + 4096; v19[8] = dword_D10CC0; v19[9] = dword_D10CC0 + 4096; v19[7] = dword_D10CC4 + 4096; v19[4] = dword_D10CC8; v19[5] = dword_D10CC8 + 4096; v19[2] = dword_D10CCC; v19[3] = dword_D10CCC + 4096; v19[1] = dword_D10CD0 + 4096; v18[23] = dword_D10CD4; v18[22] = dword_D10CA4 + 4; v18[21] = dword_D10CD8; v18[20] = dword_D10CA8 + 4; v3 = v19; v18[19] = dword_D10CDC; v18[18] = dword_D10CAC + 4; v18[17] = dword_D10CE0; v18[16] = dword_D10CB0 + 4; v18[15] = dword_D10CE4; v18[14] = dword_D10CB4 + 4; v18[13] = dword_D10CE8; v18[12] = dword_D10CB8 + 4; v18[11] = dword_D10CEC; v18[10] = dword_D10CBC + 4; v4 = 0; v18[9] = dword_D10CF0; v18[8] = dword_D10CC0 + 4; v5 = 0; v18[7] = dword_D10CF4; v18[6] = dword_D10CC4 + 4; v18[5] = dword_D10CF8; v18[4] = dword_D10CC8 + 4; v18[3] = dword_D10CFC; v6 = v18; v18[2] = dword_D10CCC + 4; v18[1] = dword_D10D00; v19[16] = dword_D10CB0; v19[14] = dword_D10CB4; v19[12] = dword_D10CB8; v19[0] = dword_D10CD0; v18[0] = dword_D10CD0 + 4; while ( 1 ) { result = *v2; if ( *v2 >= 6 ) result = 6; if ( v4 >= result ) break; result = asd_test_bit(a1: v2[1], a2: v4); if ( result != 0 ) { if ( v5 >> 30 != 0 ) return result; v8 = v3[1]; v9 = v3[2]; v10 = v3[3]; v11 = (_DWORD *)(a1 + 16 * v5); *v11 = *v3; v11[1] = v8; v11[2] = v9; v11[3] = v10; v12 = v6[1]; v13 = v6[2]; v14 = v6[3]; v15 = (_DWORD *)(a2 + 16 * v5++); *v15 = *v6; v15[1] = v12; v15[2] = v13; v15[3] = v14; } v6 += 4; v3 += 4; ++v4; } return result; } /* ==== asd_bzero_core_cfg0 [tier=EXACT size=44] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls bzero_core. One of 0 near-identical siblings. int __fastcall asd_bzero_core_cfg0() { _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF bzero_core(result: v5, a2: 0x20u); __asm { SVC 0xF2 } return 1; } /* ==== asd_bzero_core_cfg1 [tier=EXACT size=50] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls bzero_core. One of 0 near-identical siblings. int __fastcall asd_bzero_core_cfg1() { _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF bzero_core(result: v5, a2: 0x20u); __asm { SVC 0xF2 } return 1; } /* ==== asd_bzero_core_cfg2 [tier=EXACT size=40] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls bzero_core. One of 0 near-identical siblings. int __fastcall asd_bzero_core_cfg2() { _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF bzero_core(result: v5, a2: 0x20u); __asm { SVC 0xF2 } return 1; } /* ==== asd_bzero_core_cfg3 [tier=EXACT size=56] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls bzero_core. One of 0 near-identical siblings. int __fastcall asd_bzero_core_cfg3() { _DWORD *v0; // r5 int result; // r0 _DWORD v6[12]; // [sp+8h] [bp-78h] BYREF v0 = off_D01C08; result = *(_DWORD *)off_D01C08; if ( *(_DWORD *)off_D01C08 == 0 ) { bzero_core(result: v6, a2: 0x20u); __asm { SVC 0xF2 } *v0 = 1; return 1; } return result; } /* ==== asd_call_D17BC4_if_zero [tier=EXACT size=14] ==== */ // Calls sub_D17BC4(0) when the argument is zero, else returns false. BOOL __fastcall asd_call_D17BC4_if_zero(int a1) { bool v1; // zf BOOL result; // r0 v1 = a1 == 0; result = false; if ( v1 ) return asd_aux_idle_check(a1: 0); return result; } /* ==== asd_cfg_132byte_blob [tier=EXACT size=76] ==== */ // Accepts a 132-byte payload for command 20, 24 or 25 (anything else returns 7, // wrong length returns 36). int __fastcall asd_cfg_132byte_blob(int a1, unsigned int *a2, int a3) { int result; // r0 void *v6; // r1 unsigned int *v7; // r0 unsigned int v8; // r2 result = 36; if ( a2 == nullptr || a3 != 132 ) return result; if ( a1 == 25 ) goto LABEL_7; if ( a1 != 24 ) { if ( a1 != 20 ) return 7; LABEL_7: v6 = off_D14604; v7 = a2; v8 = 8; goto LABEL_9; } v6 = (void *)off_D14600; v7 = a2; v8 = 5; LABEL_9: result = asd_copy_dword_list(a1: v7, a2: (int)v6, a3: v8); if ( result == 0 ) { if ( *a2 != 0 ) __asm { SVC 0xB4 } return 36; } return result; } /* ==== asd_cfg_D12268_a [tier=EXACT size=36] ==== */ // Per-instance config wrapper: loads register offsets 13552/13592/13600 and calls sub_D12268. int __fastcall asd_cfg_D12268_a() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[2] = 13600; var4[1] = 13592; var4[0] = 13552; return sub_D12268(a1: &vars8, a2: var4); } /* ==== asd_cfg_D12268_b [tier=EXACT size=36] ==== */ // Per-instance config wrapper: loads register offsets 13572/13624/13632 and calls sub_D12268. int __fastcall asd_cfg_D12268_b() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[2] = 13632; var4[1] = 13624; var4[0] = 13572; return sub_D12268(a1: &vars8, a2: var4); } /* ==== asd_cfg_type_2_3 [tier=EXACT size=72] ==== */ // Prepares a 0x2C-byte descriptor (word 2 = 0x1000000, high half of word 0 = 4) for // type 2 (index 0) or type 3 (index 1). int __fastcall asd_cfg_type_2_3(int a1) { int result; // r0 _DWORD v7[12]; // [sp+0h] [bp-30h] BYREF bzero_core(result: v7, a2: 0x2Cu); v7[2] = 0x1000000; HIWORD(v7[0]) = 4; if ( a1 != 2 && a1 != 3 ) return 2; result = asd_opt_cb_D49828(); if ( result == 0 ) { __asm { SVC 0xB4 } return 35; } return result; } /* ==== asd_check_fw_version [tier=EXACT size=82] ==== */ // Firmware/ASIC version gate: reads two descriptors and accepts only when the middle byte // is 0x11 and the version is 0x0B09xxxx with low byte > 0x24, or 0x0B10xxxx with low byte // > 4. Returns 3 if either descriptor read fails. int __fastcall asd_check_fw_version() { int vars0; // [sp+0h] [bp+0h] int vars4; // [sp+4h] [bp+4h] vars0 = 0; vars4 = 0; if ( asd_srm_sub_1A54() != 0 || asd_bzero_core_cfg0() != 0 ) return 3; else return 7; } /* ==== asd_check_link_budget [tier=EXACT size=84] ==== */ // Compares the number of set bits in unk_D4288C (capped at 6) against dword_D42888; // returns 1 when the count exceeds the available budget. int __fastcall asd_check_link_budget(_DWORD *a1) { unsigned int *v2; // r5 unsigned int v3; // r6 int v4; // r1 unsigned int v5; // r0 int v7; // r0 _QWORD *v8; // r1 __int64 *v9; // r2 _BYTE *v10; // r3 __int64 v11; // r4 _BYTE v12[96]; // [sp+0h] [bp-C0h] BYREF _BYTE v13[96]; // [sp+60h] [bp-60h] BYREF asd_build_reg_addr_table_v2(a1: (int)v13, a2: (int)v12); v2 = (unsigned int *)off_D15EE0; v3 = 6; v4 = *(_DWORD *)off_D15EE0; if ( *(_DWORD *)off_D15EE0 >= 6u ) v4 = 6; v5 = asd_count_bits_below(a1: *((_DWORD *)off_D15EE0 + 1), a2: v4); if ( *v2 < 6 ) v3 = *v2; if ( v5 > v3 ) return 1; v7 = 4 * v5; *a1 = 4; a1[1] = v7; v8 = a1 + 2; v9 = (__int64 *)v13; v10 = v12; while ( v7 != 0 ) { v11 = *v9; v10 += 4; --v7; v9 = (__int64 *)((char *)v9 + 4); *v8++ = v11; } return 0; } /* ==== asd_checksum_verify [tier=EXACT size=40] ==== */ // Sums a3 bytes starting at a1+a2 with overflow detection and compares the low 16 bits // against a4. Returns true on match. BOOL __fastcall asd_checksum_verify(int a1, unsigned int a2, int a3, int a4) { unsigned int v4; // r4 int v5; // r2 unsigned int v6; // r5 v4 = a3 + a2; v5 = 0; while ( 1 ) { if ( a2 >= v4 ) return (unsigned __int16)v5 == a4; v6 = *(unsigned __int8 *)(a1 + a2); if ( ~v5 < v6 ) break; v5 += v6; ++a2; } return false; } /* ==== asd_clear_link_outputs [tier=EXACT size=262] ==== */ // Zeroes the caller's two output descriptors before a link query fills them. int __fastcall asd_clear_link_outputs(struct asd_link_cfg *a1, _BYTE *a2, _BYTE *a3) { _BYTE *v5; // r1 unsigned int field14; // r8 int *v7; // r9 int v9; // r5 a2[5] = 0; a2[3] = 0; a2[2] = 0; a2[1] = 0; *a2 = 0; a2[4] = 0; v5 = a2 + 4; v5[3] = 0; v5[2] = 0; a3[4] = 0; a3[5] = 0; a3[2] = 0; a3[3] = 0; *a3 = 0; a3[1] = 0; a3[6] = 0; a3[7] = 0; if ( a1 == nullptr ) return 2; field14 = a1->field14; if ( *((_DWORD *)off_D081BC + 3) <= field14 ) return 2; v7 = (int *)off_D08BC4; if ( (asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D08BC4 + 9), a3: a1->field14) & 0x100) == 0 ) return 1; *(_DWORD *)a2 = asd_reg_read_13B74(a1: 0, a2: v7[21], a3: field14); if ( (asd_reg_read_13B74(a1: 0, a2: v7[9], a3: field14) & 0x200) == 0 ) return 1; v9 = 0; *((_DWORD *)a2 + 1) = asd_reg_read_13B74(a1: 0, a2: v7[22], a3: field14); if ( a1->field40 == 2 ) { if ( (asd_reg_read_13B74(a1: 0, a2: v7[13], a3: field14) & 0x100) != 0 ) { *(_DWORD *)a3 = asd_reg_read_13B74(a1: 0, a2: v7[35], a3: field14); if ( (asd_reg_read_13B74(a1: 0, a2: v7[13], a3: field14) & 0x200) != 0 ) { v9 = 0; *((_DWORD *)a3 + 1) = asd_reg_read_13B74(a1: 0, a2: v7[36], a3: field14); return v9; } } return 1; } return v9; } /* ==== asd_compute_dram_window [tier=EXACT size=748] ==== */ // Uses the runtime provider callbacks unk_D447B0 / unk_D447B4 to obtain a base and a // 16-byte-granule count, validates the 64-bit product against a 28-bit limit, and derives // the aligned DRAM window. int __fastcall asd_compute_dram_window() { void (__fastcall **v0)(__int64 *); // r7 void (__fastcall *v1)(unsigned int *, int); // r2 __int64 v2; // r0 unsigned int v3; // r4 unsigned int v4; // r2 unsigned __int64 v5; // kr08_8 __int64 v7; // [sp+20h] [bp-Ch] BYREF unsigned int v8; // [sp+28h] [bp-4h] BYREF v0 = (void (__fastcall **)(__int64 *))off_D11AF0; v1 = *((void (__fastcall **)(unsigned int *, int))off_D11AF0 + 2); if ( v1 != nullptr && *((_DWORD *)off_D11AF0 + 3) != 0 ) { v8 = 0; v7 = 0; v1(a1: &v8, a2: 1); v0[3](a1: &v7); if ( 16 * v7 != 0 && v7 != 0 && ((HIDWORD(v7) != (HIDWORD(v7) & 0xFFFFFFF)) | __CFADD__((unsigned int)v7 >> 28, 16 * HIDWORD(v7))) == 0 ) { v2 = 16 * v7 + v8; if ( __PAIR64__(~(unsigned int)(v7 >> 28), ~(16 * (int)v7)) >= v8 ) { v3 = (_DWORD)v2 << 20; v4 = v2 >> 12; if ( (((16 * v7 + (unsigned __int64)v8) >> 32 != (((16 * v7 + (unsigned __int64)v8) >> 32) & 0xFFF)) | __CFADD__((16 * (_DWORD)v7 + v8) >> 12, (16 * v7 + (unsigned __int64)v8) >> 32 << 20)) != 0 ) { v4 = 0; v3 = 0; } if ( v2 != 0 ) { v5 = __PAIR64__(v4, v3) - 0x10000; if ( __PAIR64__(v4, v3) < 0x10000 ) v5 = 0; if ( (v4 | v3) != 0 ) asd_align_map_range(a1: HIDWORD(v5), a2: v5, a3: 0x1000u); } } } } return 1; } /* ==== asd_connector_enable [tier=EXACT size=52] ==== */ // Requires the link register bit31 set (else status 8), then sets bit0 of the connector // register via asd_reg_write_19600. int __fastcall asd_connector_enable(unsigned int a1) { _DWORD *v1; // r5 __int16 v3; // r2 __int16 _13D24; // r0 v1 = off_D070A0; if ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D070A0 + 4), a3: a1) << 31 == 0 ) return 8; _13D24 = asd_reg_read_13D24(a1: v1[43], a2: a1, a3: v3); asd_reg_write_19600(a1: v1[43], a2: a1, a3: _13D24 | 1); return 0; } /* ==== asd_connector_enable_v2 [tier=EXACT size=100] ==== */ // Bounds the connector index to 8; requires the link register bit31 set (else 8), then // enables the connector via asd_reg_write_19600. int __fastcall asd_connector_enable_v2(unsigned int a1) { _DWORD *v2; // r5 __int16 v4; // r2 __int16 _13D24; // r0 __int16 v6; // r2 int v7; // r6 int v8; // r0 if ( a1 > 8 ) return 5; v2 = off_D0714C; if ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0714C + 4), a3: a1) << 31 == 0 ) return 8; _13D24 = asd_reg_read_13D24(a1: v2[43], a2: a1, a3: v4); asd_reg_write_19600(a1: v2[43], a2: a1, a3: _13D24 | 1); v7 = -19; do { v8 = asd_reg_read_13D24(a1: v2[43], a2: a1, a3: v6) & 1; if ( v7 == 0 ) break; ++v7; } while ( v8 == 0 ); if ( v8 == 0 ) return 8; *(_BYTE *)(3 * a1 + dword_D06EC8 + 1) = 1; return 0; } /* ==== asd_connector_enable_wait [tier=EXACT size=118] ==== */ // Bounds the link to 0x3F; clears dword_D428EC[24*idx] and returns 8 when the link // register bit31 is clear, otherwise enables the connector and polls for readiness. int __fastcall asd_connector_enable_wait(unsigned int a1) { _DWORD *v2; // r5 __int16 v4; // r2 __int16 _13D24; // r0 __int16 v6; // r2 int v7; // r6 int v8; // r0 if ( a1 > 0x3F ) return 5; v2 = off_D070A0; if ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D070A0 + 4), a3: a1) << 31 == 0 ) { *(_DWORD *)(dword_D06D90 + 96 * a1 + 92) = 0; return 8; } _13D24 = asd_reg_read_13D24(a1: v2[43], a2: a1, a3: v4); asd_reg_write_19600(a1: v2[43], a2: a1, a3: _13D24 | 1); v7 = -19; do { v8 = asd_reg_read_13D24(a1: v2[43], a2: a1, a3: v6) & 1; if ( v7 == 0 ) break; ++v7; } while ( v8 == 0 ); if ( v8 == 0 ) return 8; *(_DWORD *)(dword_D06D90 + 96 * a1 + 92) = 1; return 0; } /* ==== asd_connector_program_seq [tier=EXACT size=140] ==== */ // Bounds the connector to 8, writes the fixed constants 6857218 / 283092 / 1066123 / // 8173405 to registers unk_D425FC..08, then sets the 0x21 field in unk_D425F8 and polls. int __fastcall asd_connector_program_seq(unsigned int a1) { int result; // r0 int *v2; // r5 void (__fastcall *v4)(int, unsigned int, __int16); // r6 __int16 v5; // r2 __int16 _13CDC; // r0 __int16 v7; // r2 int v8; // r6 int v9; // r0 int v10; // r1 if ( a1 > 8 ) return 5; v2 = (int *)off_D0720C; v4 = (void (__fastcall *)(int, unsigned int, __int16))off_D06EB8; off_D06EB8(a1: *((_DWORD *)off_D0720C + 129), a2: a1, a3: *(_DWORD *)&dword_D06EB4); v4(a1: v2[130], a2: a1, a3: dword_D06EBC); v4(a1: v2[131], a2: a1, a3: dword_D06EC0); v4(a1: v2[132], a2: a1, a3: dword_D06EC4); _13CDC = asd_reg_read_13CDC(a1: v2[128], a2: a1, a3: v5); v4(a1: v2[128], a2: a1, a3: _13CDC & 0xFFCE | 0x21); v8 = -19; while ( 1 ) { v9 = asd_reg_read_13CDC(a1: v2[128], a2: a1, a3: v7); v10 = v9 & 0x30; if ( v9 << 31 != 0 ) break; result = 8; if ( v8 != 0 ) { ++v8; if ( v10 != 32 ) continue; } return result; } if ( v10 != 32 ) return 8; *(_BYTE *)(3 * a1 + dword_D06EC8 + 2) = 1; return 0; } /* ==== asd_connector_state_check [tier=EXACT size=50] ==== */ // Bounds a1 <= 8 (9 connectors), reads a display register, returns 19 when bit0 is clear // and byte_D42661[3*a1] is zero. int __fastcall asd_connector_state_check(unsigned int a1, int a2, __int16 a3) { int result; // r0 bool v5; // zf if ( a1 > 8 ) return 5; v5 = asd_reg_read_13D24(a1: *((_DWORD *)off_D06FF0 + 43), a2: a1, a3) << 31 == 0; result = 0; if ( v5 && *(_BYTE *)(3 * a1 + dword_D06EC8 + 1) == 0 ) return 19; return result; } /* ==== asd_copy_dword_list [tier=EXACT size=46] ==== */ // Copies up to 0x20 dwords from a2 into a1[1..], storing the count in a1[0]. // Rejects counts above 0x20 with status 36. int __fastcall asd_copy_dword_list(unsigned int *a1, int a2, unsigned int a3) { int v3; // r3 unsigned int v4; // r4 v3 = 36; if ( a1 != nullptr && a2 != 0 && a3 <= 0x20 ) { v4 = 0; *a1 = a3; while ( v4 < a3 ) { a1[v4 + 1] = *(_DWORD *)(a2 + 4 * v4); ++v4; a3 = *a1; } return 0; } return v3; } /* ==== asd_count_bits_below [tier=EXACT size=44] ==== */ // Counts set bits of a1 at positions [0, a2), saturating at -1. int __fastcall asd_count_bits_below(unsigned int a1, int a2) { int result; // r0 unsigned int i; // r3 result = 0; for ( i = 0; a2 != i; ++i ) result += (i < 0x20) & (a1 >> i) & (result != -1); return result; } /* ==== asd_crypto_setup_key [tier=EXACT size=198] ==== */ // Builds a GP transient key object from a 16-byte caller key: gp_object_allocate -> // gp_populate_transient_object -> gp_operation_allocate -> gp_set_operation_key. BOOL __fastcall asd_crypto_setup_key(int a1, int *a2, int a3, int a4) { int *v4; // r7 int v5; // r6 _BYTE v7[16]; // [sp+20h] [bp-14h] BYREF int v8; // [sp+30h] [bp-4h] v4 = off_D14A3C; v5 = 2; v8 = *off_D14A3C; if ( a1 != 0 && a2 != nullptr && a3 != 0 ) { sub_D01058(a1: v7, a2, a3: 16); if ( gp_object_allocate() == 0 && gp_populate_transient_object() == 0 && gp_operation_allocate() == 0 && gp_set_operation_key() == 0 ) { goto LABEL_12; } gp_operation_set_key(); v5 = 1; } while ( *v4 != v8 ) { ((void (__fastcall *)(int))loc_D1987C)(a1: *v4 - v8); LABEL_12: gp_operation_set_key(); v5 = gp_cipher_update() != 0; } return v5; } /* ==== asd_ddc_aux_transact [tier=EXACT size=328] ==== */ // Shared target of opcodes 0x18D-0x19F and 0x1AB-0x1BF (incl. 0x18E, // the HDCP-side disp_hdcp1_read_status). Generic DDC/AUX transaction: (link, addr, u8 len, buf). int __fastcall asd_ddc_aux_transact(unsigned int a1, unsigned int a2, int a3, unsigned int a4) { int result; // r0 int v9; // r8 int v10; // r6 unsigned int v11; // r1 unsigned __int8 v12; // r11 unsigned __int8 v13; // r9 int v14; // r0 int v15; // r0 int v16; // r0 int v17; // r1 unsigned int v18; // [sp+4h] [bp-8h] int v19; // [sp+8h] [bp-4h] if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3F ) return 5; result = 2; if ( (char)a3 >= 1 && a2 != 0 && a4 != 0 ) { if ( asd_validate_ptr(a1: a2, a2: 0x280u) != 0 && asd_validate_ptr(a1: a4, a2: 0x10u) != 0 ) { v9 = dword_D10108; v10 = 0; v11 = *(_DWORD *)(dword_D0F4BC + 7300); v12 = 0; v13 = 0; v19 = 0; while ( a3 << 24 != 0 ) { if ( v11 << 31 == 0 ) { v18 = v11; sub_D01058(a1: 5 * v10 + v9 + 7317, a2: 5 * v12 + a2, a3: 5); --a3; v14 = 1 << (v13 & 0x1F); *(_DWORD *)(v9 + 4 * (unsigned __int8)v19 + 7300) |= v14; *(_DWORD *)(a4 + 4 * (unsigned __int8)v19) |= v14; ++*(_BYTE *)(v9 + 7316); *(_DWORD *)(v9 + 4 * v10 + 6788) = a1; v15 = v12 + 1; v11 = v18; ++v12; if ( (unsigned __int8)v15 != v15 ) v12 = -1; } v16 = v13 + 1; ++v10; ++v13; if ( (unsigned __int8)v16 != v16 ) v13 = -1; if ( v10 << 27 != 0 ) { v11 >>= 1; } else { v17 = v19; v13 = 0; if ( (unsigned __int8)v19 < 3u ) v17 = v19 + 1; v19 = v17; v11 = *(_DWORD *)(dword_D0F568 + 4 * (unsigned __int8)v17 + 7300); } result = 0; if ( v10 == 128 ) return result; } return 0; } else { return 2; } } return result; } /* ==== asd_dio_apply_mask [tier=EXACT size=78] ==== */ // Feature-14 gated. Reads a DIO register, applies unk_D33304 as a set/clear mask // depending on a2, and writes it back to up to two register addresses. int __fastcall asd_dio_apply_mask(unsigned int a1, int a2) { int result; // r0 unsigned int *v4; // r6 unsigned int v5; // r0 result = asd_feature_level_check(a1: 14, a2: a1); if ( result != 0 ) { v4 = (unsigned int *)(dword_D18514 + 4 * a1 + 32); sub_D1417E(); asd_reg_write_1981C(a1: *v4); v5 = *(v4 - 2); if ( v5 != 0 ) asd_reg_write_1981C(a1: v5); return sub_D1417E(); } return result; } /* ==== asd_dio_current_instance_op [tier=EXACT size=82] ==== */ // Operates on the DIO instance recorded at off_D17FF8+0x10, bounded by the instance count // at off_D17FF8+8 and the feature-14 level check; returns 10 when out of range. int __fastcall asd_dio_current_instance_op(int a1) { int result; // r0 unsigned int v2; // r1 bool v3; // cc if ( a1 == 0 || *(_DWORD *)(a1 + 64) != 6 ) return 2; result = 10; v2 = *(_DWORD *)(loc_D17FF8 + 16); v3 = v2 > 0x7FFFFFFF; if ( v2 != 0x7FFFFFFF ) v3 = *(_DWORD *)(loc_D17FF8 + 8) > v2; if ( v3 ) { if ( asd_feature_level_check(a1: 14, a2: v2) != 0 ) { if ( sysdrv_dram_window_describe() != 0 ) return 18; else return asd_stream_slot_update(a1: 0, a2: 0, a3: 0, a4: 1); } else { return 10; } } return result; } /* ==== asd_dio_desc_D330D0 [tier=EXACT size=90] ==== */ // Builds a 5-pointer DIO descriptor over the dword_D330D0 block with the fixed // {0,1,1,0} selector pattern. int __fastcall asd_dio_desc_D330D0() { int v0; // r2 int v1; // r3 int v3[11]; // [sp+0h] [bp-100h] BYREF int v4[43]; // [sp+2Ch] [bp-D4h] BYREF int v5[4]; // [sp+D8h] [bp-28h] BYREF char v6; // [sp+E8h] [bp-18h] int *v7; // [sp+ECh] [bp-14h] int *v8; // [sp+F0h] [bp-10h] int *v9; // [sp+F4h] [bp-Ch] int *v10; // [sp+F8h] [bp-8h] int *v11; // [sp+FCh] [bp-4h] v6 = 1; v5[2] = 1; v5[3] = 0; v5[0] = 0; v5[1] = 1; v10 = (int *)off_D16EA0; v11 = &(*off_D16EA0)[3]; v9 = &(*off_D16EA0)[2]; v8 = &(*off_D16EA0)[1]; v7 = &(*off_D16EA0)[4]; bzero_core(result: v3, a2: 0x20u); v3[9] = 0; v3[10] = 32451; v3[8] = 32450; bzero_core(result: v4, a2: 0xACu); return asd_store_link_config(a1: v5, a2: v3, a3: v0, a4: v1); } /* ==== asd_dio_desc_D330F8 [tier=EXACT size=98] ==== */ // Builds a 5-pointer DIO descriptor over the dword_D330F8 block. int __fastcall asd_dio_desc_D330F8() { int v0; // r2 int v1; // r3 int v3[11]; // [sp+0h] [bp-100h] BYREF int v4[43]; // [sp+2Ch] [bp-D4h] BYREF int v5[4]; // [sp+D8h] [bp-28h] BYREF char v6; // [sp+E8h] [bp-18h] int *v7; // [sp+ECh] [bp-14h] int *v8; // [sp+F0h] [bp-10h] int *v9; // [sp+F4h] [bp-Ch] int *v10; // [sp+F8h] [bp-8h] int *v11; // [sp+FCh] [bp-4h] v6 = 1; v5[2] = 1; v5[3] = 0; v5[0] = 0; v5[1] = 1; v10 = (int *)off_D16F7C; v11 = &(*off_D16F7C)[3]; v9 = &(*off_D16F7C)[2]; v8 = &(*off_D16F7C)[1]; v7 = &(*off_D16F7C)[4]; bzero_core(result: v3, a2: 0x18u); v3[9] = 0; v3[10] = 32259; v3[7] = 0; v3[8] = 32258; v3[6] = 32280; bzero_core(result: v4, a2: 0xACu); return asd_store_link_config(a1: v5, a2: v3, a3: v0, a4: v1); } /* ==== asd_dio_desc_D33120 [tier=EXACT size=98] ==== */ // Builds a 5-pointer DIO descriptor over the block at 0xD33120 (13840672). int __fastcall asd_dio_desc_D33120() { int v0; // r2 int v1; // r3 int v3[11]; // [sp+0h] [bp-100h] BYREF int v4[43]; // [sp+2Ch] [bp-D4h] BYREF int v5[4]; // [sp+D8h] [bp-28h] BYREF char v6; // [sp+E8h] [bp-18h] int v7; // [sp+ECh] [bp-14h] int v8; // [sp+F0h] [bp-10h] int v9; // [sp+F4h] [bp-Ch] int v10; // [sp+F8h] [bp-8h] int v11; // [sp+FCh] [bp-4h] v6 = 1; v5[2] = 1; v5[3] = 0; v5[0] = 0; v5[1] = 1; v10 = dword_D17070; v11 = dword_D17070 + 12; v9 = dword_D17070 + 8; v8 = dword_D17070 + 4; v7 = dword_D17070 + 16; bzero_core(result: v3, a2: 0x18u); v3[9] = 0; v3[10] = 32259; v3[7] = 0; v3[8] = 32258; v3[6] = 32280; bzero_core(result: v4, a2: 0xACu); return asd_store_link_config(a1: v5, a2: v3, a3: v0, a4: v1); } /* ==== asd_dio_desc_D33148 [tier=EXACT size=98] ==== */ // Builds a 5-pointer DIO descriptor over the block at 0xD33148 (13840712). int __fastcall asd_dio_desc_D33148() { int v0; // r2 int v1; // r3 int v3[11]; // [sp+0h] [bp-100h] BYREF int v4[43]; // [sp+2Ch] [bp-D4h] BYREF int v5[4]; // [sp+D8h] [bp-28h] BYREF char v6; // [sp+E8h] [bp-18h] int v7; // [sp+ECh] [bp-14h] int v8; // [sp+F0h] [bp-10h] int v9; // [sp+F4h] [bp-Ch] int v10; // [sp+F8h] [bp-8h] int v11; // [sp+FCh] [bp-4h] v6 = 1; v5[2] = 1; v5[3] = 0; v5[0] = 0; v5[1] = 1; v10 = dword_D170F0; v11 = dword_D170F0 + 12; v9 = dword_D170F0 + 8; v8 = dword_D170F0 + 4; v7 = dword_D170F0 + 16; bzero_core(result: v3, a2: 0x18u); v3[9] = 0; v3[10] = 32259; v3[7] = 0; v3[8] = 32258; v3[6] = 32280; bzero_core(result: v4, a2: 0xACu); return asd_store_link_config(a1: v5, a2: v3, a3: v0, a4: v1); } /* ==== asd_dio_desc_D33158 [tier=EXACT size=326] ==== */ // DIO descriptor builder over the block at 0xD33158 (13840792). int __fastcall asd_dio_desc_D33158() { int v1[54]; // [sp+0h] [bp-100h] BYREF int v2[4]; // [sp+D8h] [bp-28h] BYREF char v3; // [sp+E8h] [bp-18h] int v4; // [sp+ECh] [bp-14h] int v5; // [sp+F0h] [bp-10h] int v6; // [sp+F4h] [bp-Ch] int v7; // [sp+F8h] [bp-8h] int v8; // [sp+FCh] [bp-4h] v3 = 1; v2[2] = 1; v2[3] = 0x7FFFFFFF; v7 = dword_D172EC; v8 = dword_D172EC + 20; v6 = dword_D172EC + 12; v4 = dword_D172EC + 28; v1[10] = 32267; v1[8] = 32266; v1[6] = 32280; v1[4] = 32288; v1[2] = 32287; v2[1] = 2; v1[0] = 32258; memset(&v1[12], 0, 16); v1[24] = 34756; v1[22] = 34755; v1[20] = 34754; v1[18] = 34753; v1[16] = 34752; v5 = dword_D172EC + 4; v1[11] = dword_D172F0 + 9; v1[9] = dword_D172F0 + 8; v1[7] = dword_D172F0 + 22; v1[5] = dword_D172F0 + 30; v1[3] = dword_D172F0 + 29; v1[17] = dword_D172F4; v1[25] = dword_D172F4 + 4; v1[23] = dword_D172F4 + 3; v1[19] = dword_D172F4 + 1; v1[1] = dword_D172F0; v1[21] = dword_D172F4 + 2; memset(&v1[26], 0, 16); v1[30] = 32392; v1[31] = dword_D172F0 + 134; v1[32] = 32393; v1[33] = dword_D172F0 + 135; v1[34] = 32394; v1[35] = dword_D172F0 + 136; v1[36] = 32395; v1[37] = dword_D172F0 + 137; memset(&v1[38], 0, 16); v2[0] = 0; v1[42] = 32396; v1[43] = dword_D172F0 + 138; v1[44] = 32397; v1[45] = dword_D172F0 + 139; v1[46] = 32398; v1[47] = dword_D172F0 + 140; v1[48] = 32399; v1[49] = dword_D172F0 + 141; v1[50] = 32400; v1[51] = dword_D172F0 + 142; v1[52] = 32401; v1[53] = dword_D172F0 + 143; return asd_store_link_config(a1: v2, a2: v1, a3: dword_D172F0 + 137, a4: dword_D172F4 + 2); } /* ==== asd_dio_desc_D33170 [tier=EXACT size=98] ==== */ // Builds a 5-pointer DIO descriptor over the block at 0xD33170 (13840752). int __fastcall asd_dio_desc_D33170() { int v0; // r2 int v1; // r3 int v3[11]; // [sp+0h] [bp-100h] BYREF int v4[43]; // [sp+2Ch] [bp-D4h] BYREF int v5[4]; // [sp+D8h] [bp-28h] BYREF char v6; // [sp+E8h] [bp-18h] int v7; // [sp+ECh] [bp-14h] int v8; // [sp+F0h] [bp-10h] int v9; // [sp+F4h] [bp-Ch] int v10; // [sp+F8h] [bp-8h] int v11; // [sp+FCh] [bp-4h] v6 = 1; v5[2] = 1; v5[3] = 0; v5[0] = 0; v5[1] = 1; v10 = dword_D17170; v11 = dword_D17170 + 12; v9 = dword_D17170 + 8; v8 = dword_D17170 + 4; v7 = dword_D17170 + 16; bzero_core(result: v3, a2: 0x18u); v3[9] = 0; v3[10] = 32259; v3[7] = 0; v3[8] = 32258; v3[6] = 32280; bzero_core(result: v4, a2: 0xACu); return asd_store_link_config(a1: v5, a2: v3, a3: v0, a4: v1); } /* ==== asd_dio_desc_D33174 [tier=EXACT size=304] ==== */ // DIO descriptor builder over the block at 0xD33174 (13840868). int __fastcall asd_dio_desc_D33174() { int v0; // r3 int v2[54]; // [sp+0h] [bp-100h] BYREF int v3[4]; // [sp+D8h] [bp-28h] BYREF char v4; // [sp+E8h] [bp-18h] int v5; // [sp+ECh] [bp-14h] int v6; // [sp+F0h] [bp-10h] int v7; // [sp+F4h] [bp-Ch] int v8; // [sp+F8h] [bp-8h] int v9; // [sp+FCh] [bp-4h] v3[3] = 0x7FFFFFFF; v4 = 1; v3[1] = 1; v3[2] = 1; v9 = dword_D17464 + 12; v7 = dword_D17464 + 8; v8 = dword_D17464; v5 = dword_D17464 + 16; v2[11] = 11; v2[10] = 32267; v2[9] = 10; v2[8] = 32266; v2[7] = 24; v2[6] = 32280; v2[5] = 32; v2[4] = 32288; v2[3] = 31; v2[2] = 32287; v2[1] = 2; v2[0] = 32258; memset(&v2[12], 0, 16); v2[25] = 2500; v2[24] = 34756; v2[23] = 2499; v2[22] = 34755; v2[21] = 2498; v2[20] = 34754; v2[19] = 2497; v2[18] = 34753; v2[17] = 2496; v2[16] = 34752; memset(&v2[26], 0, 16); v2[30] = 32392; v2[31] = 136; v2[32] = 32393; v2[33] = 137; v2[34] = 32394; v2[35] = 138; v2[36] = 32395; v2[37] = 139; memset(&v2[38], 0, 16); v3[0] = 0; v2[42] = 32396; v2[43] = 140; v2[44] = 32397; v2[45] = 141; v2[46] = 32398; v2[47] = 142; v2[48] = 32399; v2[49] = 143; v2[50] = 32400; v2[51] = 144; v2[52] = 32401; v2[53] = 145; v6 = dword_D17464 + 4; return asd_store_link_config(a1: v3, a2: v2, a3: dword_D17464 + 4, a4: v0); } /* ==== asd_dio_desc_D3319C [tier=EXACT size=304] ==== */ // DIO descriptor builder over the block at 0xD3319C (13840908). int __fastcall asd_dio_desc_D3319C() { int v0; // r3 int v2[54]; // [sp+0h] [bp-100h] BYREF int v3[4]; // [sp+D8h] [bp-28h] BYREF char v4; // [sp+E8h] [bp-18h] int v5; // [sp+ECh] [bp-14h] int v6; // [sp+F0h] [bp-10h] int v7; // [sp+F4h] [bp-Ch] int v8; // [sp+F8h] [bp-8h] int v9; // [sp+FCh] [bp-4h] v3[3] = 0x7FFFFFFF; v4 = 1; v3[1] = 1; v3[2] = 1; v9 = dword_D175E0 + 12; v7 = dword_D175E0 + 8; v8 = dword_D175E0; v5 = dword_D175E0 + 16; v2[11] = 11; v2[10] = 32267; v2[9] = 10; v2[8] = 32266; v2[7] = 24; v2[6] = 32280; v2[5] = 32; v2[4] = 32288; v2[3] = 31; v2[2] = 32287; v2[1] = 2; v2[0] = 32258; memset(&v2[12], 0, 16); v2[25] = 2500; v2[24] = 34756; v2[23] = 2499; v2[22] = 34755; v2[21] = 2498; v2[20] = 34754; v2[19] = 2497; v2[18] = 34753; v2[17] = 2496; v2[16] = 34752; memset(&v2[26], 0, 16); v2[30] = 32392; v2[31] = 136; v2[32] = 32393; v2[33] = 137; v2[34] = 32394; v2[35] = 138; v2[36] = 32395; v2[37] = 139; memset(&v2[38], 0, 16); v3[0] = 0; v2[42] = 32396; v2[43] = 140; v2[44] = 32397; v2[45] = 141; v2[46] = 32398; v2[47] = 142; v2[48] = 32399; v2[49] = 143; v2[50] = 32400; v2[51] = 144; v2[52] = 32401; v2[53] = 145; v6 = dword_D175E0 + 4; return asd_store_link_config(a1: v3, a2: v2, a3: dword_D175E0 + 4, a4: v0); } /* ==== asd_dio_desc_D331B4 [tier=EXACT size=256] ==== */ // Builds a DIO descriptor with the {1,1,1,0x7FFFFFFF} selector over the block at // 0xD331B4 (13840948). int __fastcall asd_dio_desc_D331B4() { int v0; // r2 int v1; // r3 int v3[54]; // [sp+0h] [bp-100h] BYREF int v4[4]; // [sp+D8h] [bp-28h] BYREF char v5; // [sp+E8h] [bp-18h] int v6; // [sp+ECh] [bp-14h] int v7; // [sp+F0h] [bp-10h] int v8; // [sp+F4h] [bp-Ch] int v9; // [sp+F8h] [bp-8h] int v10; // [sp+FCh] [bp-4h] v5 = 1; v4[2] = 1; v4[3] = 0x7FFFFFFF; v4[0] = 1; v4[1] = 1; v9 = dword_D17720; v10 = dword_D17720 + 12; v8 = dword_D17720 + 8; v7 = dword_D17720 + 4; v6 = dword_D17720 + 16; memset(&v3[39], 0, 12); v3[38] = 205520896; memset(&v3[27], 0, 12); memset(&v3[13], 0, 12); v3[53] = 0; v3[51] = 0; v3[52] = 32401; v3[49] = 0; v3[50] = 32400; v3[47] = 0; v3[48] = 32399; v3[45] = 0; v3[46] = 32398; v3[43] = 0; v3[44] = 32397; v3[42] = 32396; v3[37] = 0; v3[35] = 0; v3[36] = 32395; v3[33] = 0; v3[34] = 32394; v3[31] = 0; v3[32] = 32393; v3[30] = 32392; v3[25] = 0; v3[23] = 0; v3[24] = 34756; v3[21] = 0; v3[22] = 34755; v3[19] = 0; v3[20] = 34754; v3[17] = 0; v3[18] = 34753; v3[16] = 34752; memset(&v3[9], 0, 12); v3[7] = 0; v3[8] = 32266; v3[5] = 0; v3[6] = 32280; v3[3] = 0; v3[4] = 32288; v3[1] = 0; v3[2] = 32287; v3[0] = 32258; v3[26] = dword_D17724; v3[12] = dword_D17724 + 4; return asd_store_link_config(a1: v4, a2: v3, a3: v0, a4: v1); } /* ==== asd_dio_desc_D331DC [tier=EXACT size=334] ==== */ // DIO descriptor builder over the block at 0xD331DC (13840988). int __fastcall asd_dio_desc_D331DC() { int v0; // r3 int v2[54]; // [sp+0h] [bp-100h] BYREF int v3[4]; // [sp+D8h] [bp-28h] BYREF char v4; // [sp+E8h] [bp-18h] int v5; // [sp+ECh] [bp-14h] int v6; // [sp+F0h] [bp-10h] int v7; // [sp+F4h] [bp-Ch] int v8; // [sp+F8h] [bp-8h] int v9; // [sp+FCh] [bp-4h] v4 = 1; v3[2] = 1; v3[3] = 0x7FFFFFFF; v3[0] = 1; v3[1] = 2; v8 = dword_D178B4; v9 = dword_D178B4 + 20; v7 = dword_D178B4 + 12; v6 = dword_D178B4 + 4; v5 = dword_D178B4 + 28; v2[41] = 0; v2[39] = 0; v2[40] = 222298112; v2[38] = 201326592; v2[29] = 0; v2[27] = 0; v2[15] = 0; v2[13] = 0; v2[14] = dword_D178B8; v2[52] = 32401; v2[50] = 32400; v2[48] = 32399; v2[46] = 32398; v2[44] = 32397; v2[42] = 32396; v2[36] = 32395; v2[34] = 32394; v2[32] = 32393; v2[30] = 32392; v2[24] = 34756; v2[22] = 34755; v2[20] = 34754; v2[18] = 34753; v2[16] = 34752; v2[10] = 0; v2[11] = 0; v2[8] = 32266; v2[6] = 32280; v2[4] = 32288; v2[2] = 32287; v2[1] = 131074; v2[0] = 32258; v2[26] = dword_D178BC; v2[12] = dword_D178BC + 4; v2[28] = dword_D178BC + 20971520; v2[53] = dword_D178C0 + 135; v2[51] = dword_D178C0 + 134; v2[49] = dword_D178C0 + 133; v2[47] = dword_D178C0 + 132; v2[45] = dword_D178C0 + 131; v2[43] = dword_D178C0 + 130; v2[37] = dword_D178C0 + 129; v2[35] = dword_D178C0 + 128; v2[33] = dword_D178C0 + 127; v2[31] = dword_D178C0 + 126; v2[17] = dword_D178C4; v2[25] = dword_D178C4 + 4; v2[23] = dword_D178C4 + 3; v2[19] = dword_D178C4 + 1; v2[7] = dword_D178C0 + 14; v2[9] = dword_D178C0; v2[3] = dword_D178C0 + 21; v2[5] = dword_D178C0 + 22; v2[21] = dword_D178C4 + 2; return asd_store_link_config(a1: v3, a2: v2, a3: dword_D178C4 + 2, a4: v0); } /* ==== asd_dio_desc_D33228 [tier=EXACT size=254] ==== */ // Builds a DIO descriptor with the {1,1,1,0x7FFFFFFF} selector over the block at // 0xD33228 (13841064). int __fastcall asd_dio_desc_D33228() { int v0; // r2 int v1; // r3 int v3[11]; // [sp+0h] [bp-100h] BYREF _DWORD v4[14]; // [sp+2Ch] [bp-D4h] BYREF _DWORD v5[12]; // [sp+64h] [bp-9Ch] BYREF int v6[17]; // [sp+94h] [bp-6Ch] BYREF int v7[4]; // [sp+D8h] [bp-28h] BYREF char v8; // [sp+E8h] [bp-18h] int v9; // [sp+ECh] [bp-14h] int v10; // [sp+F0h] [bp-10h] int v11; // [sp+F4h] [bp-Ch] int v12; // [sp+F8h] [bp-8h] int v13; // [sp+FCh] [bp-4h] v8 = 1; v7[3] = 0x7FFFFFFF; v7[1] = 1; v7[2] = 1; v12 = dword_D17A10; v13 = dword_D17A10 + 12; v11 = dword_D17A10 + 8; v9 = dword_D17A10 + 16; v3[9] = 0; v3[10] = 32267; v3[7] = 0; v3[8] = 32266; v3[5] = 0; v3[6] = 32280; v3[3] = 0; v3[4] = 32288; v3[1] = 0; v3[2] = 32287; v3[0] = 32258; v10 = dword_D17A10 + 4; v7[0] = 0; bzero_core(result: v4, a2: 0x14u); v4[12] = 0; v4[13] = 34756; v4[10] = 0; v4[11] = 34755; v4[8] = 0; v4[9] = 34754; v4[6] = 0; v4[7] = 34753; v4[5] = 34752; bzero_core(result: v5, a2: 0x14u); v5[10] = 0; v5[11] = 32395; v5[8] = 0; v5[9] = 32394; v5[6] = 0; v5[7] = 32393; v5[5] = 32392; bzero_core(result: v6, a2: 0x14u); v6[16] = 0; v6[14] = 0; v6[15] = 32401; v6[12] = 0; v6[13] = 32400; v6[10] = 0; v6[11] = 32399; v6[8] = 0; v6[9] = 32398; v6[6] = 0; v6[7] = 32397; v6[5] = 32396; return asd_store_link_config(a1: v7, a2: v3, a3: v0, a4: v1); } /* ==== asd_dio_desc_D33250 [tier=EXACT size=256] ==== */ // Builds a DIO descriptor with the {1,1,1,0x7FFFFFFF} selector over the block at // 0xD33250 (13841104). int __fastcall asd_dio_desc_D33250() { int v0; // r2 int v1; // r3 int v3[54]; // [sp+0h] [bp-100h] BYREF int v4[4]; // [sp+D8h] [bp-28h] BYREF char v5; // [sp+E8h] [bp-18h] int v6; // [sp+ECh] [bp-14h] int v7; // [sp+F0h] [bp-10h] int v8; // [sp+F4h] [bp-Ch] int v9; // [sp+F8h] [bp-8h] int v10; // [sp+FCh] [bp-4h] v5 = 1; v4[2] = 1; v4[3] = 0x7FFFFFFF; v4[0] = 1; v4[1] = 1; v9 = dword_D17B50; v10 = dword_D17B50 + 12; v8 = dword_D17B50 + 8; v7 = dword_D17B50 + 4; v6 = dword_D17B50 + 16; memset(&v3[39], 0, 12); v3[38] = 205520896; memset(&v3[27], 0, 12); memset(&v3[13], 0, 12); v3[53] = 0; v3[51] = 0; v3[52] = 32401; v3[49] = 0; v3[50] = 32400; v3[47] = 0; v3[48] = 32399; v3[45] = 0; v3[46] = 32398; v3[43] = 0; v3[44] = 32397; v3[42] = 32396; v3[37] = 0; v3[35] = 0; v3[36] = 32395; v3[33] = 0; v3[34] = 32394; v3[31] = 0; v3[32] = 32393; v3[30] = 32392; v3[25] = 0; v3[23] = 0; v3[24] = 34756; v3[21] = 0; v3[22] = 34755; v3[19] = 0; v3[20] = 34754; v3[17] = 0; v3[18] = 34753; v3[16] = 34752; memset(&v3[9], 0, 12); v3[7] = 0; v3[8] = 32266; v3[5] = 0; v3[6] = 32280; v3[3] = 0; v3[4] = 32288; v3[1] = 0; v3[2] = 32287; v3[0] = 32258; v3[26] = dword_D17B54; v3[12] = dword_D17B54 + 4; return asd_store_link_config(a1: v4, a2: v3, a3: v0, a4: v1); } /* ==== asd_dio_disable_all [tier=EXACT size=74] ==== */ // Walks the *(off_D17FF8+8) DIO instances, and for each that passes the feature-14 level // check clears its state byte, runs asd_dio_write_clear_seq on the register at // byte_D42661[4*i+127], and reapplies the mask via asd_dio_apply_mask. int __fastcall asd_dio_disable_all(int a1) { int v1; // r7 unsigned __int8 i; // r5 if ( a1 == 0 ) return 2; v1 = dword_D17D14; for ( i = 0; *(_DWORD *)(loc_D17FF8 + 8) > (unsigned int)i; ++i ) { if ( asd_feature_level_check(a1: 14, a2: i) != 0 ) { *(_BYTE *)(*(_DWORD *)(loc_D17FF8 + 36) + i) = 0; asd_dio_write_clear_seq(a1: *(_DWORD *)(v1 + 4 * i + 40)); asd_dio_apply_mask(a1: i, a2: *(unsigned __int8 *)(*(_DWORD *)(loc_D17FF8 + 36) + i)); } } return 0; } /* ==== asd_dio_enable_all [tier=EXACT size=128] ==== */ // Companion to asd_dio_disable_all: walks the *(off_D17FF8+8) DIO instances and, for each // that passes the feature-14 check and asd_link_callback_ok, clears the state byte and // emits asd_dio_write_clear_seq on its register. int __fastcall asd_dio_enable_all(int a1) { int v1; // r8 unsigned __int8 i; // r7 _BYTE *v3; // r0 if ( a1 == 0 ) return 2; v1 = dword_D18B08; for ( i = 0; *(_DWORD *)(loc_D17FF8 + 8) > (unsigned int)i; ++i ) { if ( asd_feature_level_check(a1: 14, a2: i) != 0 ) { *(_BYTE *)(*(_DWORD *)(loc_D17FF8 + 36) + i) = 0; if ( asd_link_callback_ok(a1: i) ) { asd_dio_write_clear_seq(a1: *(_DWORD *)(v1 + 4 * i + 40)); asd_dio_apply_mask(a1: i, a2: *(unsigned __int8 *)(*(_DWORD *)(loc_D17FF8 + 36) + i)); } asd_hdcp1_sub_1144(result: (_BYTE *)(*(_DWORD *)(loc_D17FF8 + 24) + 24 * i), a2: 0x10u); v3 = (_BYTE *)(*(_DWORD *)(loc_D17FF8 + 24) + 24 * i); v3[16] = 0; v3 += 16; v3[4] = 0; v3 += 4; v3[3] = 0; v3[2] = 0; v3[1] = 0; *(v3 - 1) = 0; *(v3 - 2) = 0; *(v3 - 3) = 0; } } return 0; } /* ==== asd_dio_entry_present [tier=EXACT size=26] ==== */ // Returns true when idx <= 3 and the 5-dword unk_D42610 table entry for that index is // non-zero. BOOL __fastcall asd_dio_entry_present(unsigned int a1) { return a1 <= 3 && *((_DWORD *)off_D157D8 + 5 * a1) != 0; } /* ==== asd_dio_idle_check [tier=EXACT size=48] ==== */ // True when idx < dword_D33300, the feature-14 level check passes, and the DIO status // register's low 2 bits are clear. BOOL __fastcall asd_dio_idle_check(unsigned int a1) { return *((_DWORD *)off_D1897C + 2) > a1 && asd_feature_level_check(a1: 14, a2: a1) != 0 && (sub_D1417E() & 3) == 0; } /* ==== asd_dio_program_regs [tier=EXACT size=88] ==== */ // Feature-14 gated per-instance DIO programming: writes dword_D3307C/80/84/88/... into the // instance's register slots 42, 44, 46, 48, 50, ... int __fastcall asd_dio_program_regs(unsigned int a1) { _DWORD *v2; // r4 void (__fastcall *v3)(unsigned int); // r5 if ( *((_DWORD *)off_D18B04 + 2) <= a1 || asd_feature_level_check(a1: 14, a2: a1) == 0 ) return 2; v2 = (_DWORD *)(dword_D18B08 + 4 * a1); v3 = (void (__fastcall *)(unsigned int))off_D18B0C; off_D18B0C(a1: v2[42], a2: *off_D18824); v3(a1: v2[44]); v3(a1: v2[46]); v3(a1: v2[48]); v3(a1: v2[50]); v3(a1: v2[52]); return 0; } /* ==== asd_dio_read_block [tier=EXACT size=116] ==== */ // Feature-14 gated, bounds a2 < dword_D33300. Reads a block through the per-link register // at byte_D42661[4*a2+151]. int __fastcall asd_dio_read_block(struct asd_link_caps *a1, unsigned int a2) { int v4; // r1 int result; // r0 _DWORD *v6; // r1 unsigned int v7; // r2 unsigned int v8; // r3 unsigned int v9; // r2 unsigned int v10; // r3 unsigned int v11; // r2 unsigned int v12; // r3 unsigned int v13; // r2 unsigned int v14; // r3 unsigned int v15; // r1 unsigned int v16; // r2 if ( *((_DWORD *)off_D18658 + 2) <= a2 ) return 2; v4 = asd_feature_level_check(a1: 14, a2); result = 2; if ( a1 != nullptr && v4 != 0 ) { v6 = (_DWORD *)(dword_D1865C + 4 * a2); result = 0; v7 = v6[16]; v8 = 4 * v7; if ( v7 >> 30 != 0 ) v8 = 0; a1->field04 = v8; v9 = v6[18]; v10 = 4 * v9; if ( v9 >> 30 != 0 ) v10 = 0; a1->field0C = v10; v11 = v6[20]; v12 = 4 * v11; if ( v11 >> 30 != 0 ) v12 = 0; a1->field10 = v12; v13 = v6[22]; v14 = 4 * v13; if ( v13 >> 30 != 0 ) v14 = 0; a1->field14 = v14; v15 = v6[24]; LOWORD(a1->unk00) = 4; v16 = 4 * v15; if ( v15 >> 30 != 0 ) v16 = 0; a1->field18 = v16; } return result; } /* ==== asd_dio_read_block10 [tier=EXACT size=124] ==== */ // Feature-14 gated block read (10 words) through the per-link register at // byte_D42661[4*idx+127]. int __fastcall asd_dio_read_block10(_DWORD *a1, unsigned int a2) { int v4; // r1 int result; // r0 unsigned int v6; // r1 int v7; // r0 bool v8; // zf int v9; // r1 int v10; // r0 int v11; // r3 int i; // r2 if ( *((_DWORD *)off_D18658 + 2) <= a2 ) return 2; v4 = asd_feature_level_check(a1: 14, a2); result = 2; if ( a1 != nullptr && v4 != 0 ) { *a1 = 10; v6 = *(_DWORD *)(dword_D1865C + 4 * a2 + 40); v7 = 4 * v6; v8 = v6 >> 30 == 0; v9 = 1; if ( !v8 ) v7 = 0; while ( v9 != 11 ) a1[2 * v9++] = v7; v10 = dword_D183FC; v11 = 0; a1[3] = dword_D183FC; while ( v11 != 4 ) a1[2 * v11++ + 5] = 0; a1[13] = v10 + 16; for ( i = 0; i != 4; ++i ) a1[2 * i + 15] = 0; return 0; } return result; } /* ==== asd_dio_read_pair [tier=EXACT size=106] ==== */ // Feature-14 gated: reads the DIO status register and splits it into the caller's two // outputs. int __fastcall asd_dio_read_pair(unsigned int a1, char *a2, _BYTE *a3) { int v5; // r0 int v6; // r5 int v7; // r8 int v8; // r0 unsigned int v9; // r0 char v10; // r1 unsigned int v11; // r1 if ( *((_DWORD *)off_D1897C + 2) <= a1 ) return 0; v5 = asd_feature_level_check(a1: 14, a2: a1); v6 = 0; if ( a3 != nullptr && a2 != nullptr && v5 != 0 ) { v6 = 0; *a2 = 0; *a3 = 0; v7 = sub_D1417E(); v8 = sub_D1417E(); if ( v7 != v8 ) { v9 = v8 ^ v7; v10 = v9; if ( (_WORD)v9 != 0 ) v10 = 1; *a2 = v10; v11 = HIWORD(v9); v6 = 1; if ( HIWORD(v9) != 0 ) LOBYTE(v11) = 1; *a3 = v11; } } return v6; } /* ==== asd_dio_set_pair [tier=EXACT size=78] ==== */ // Feature-14 gated per-instance DIO write: composes a 32-bit value from two reads of // asd_reg_read_1417E and stores it into the instance's register pair. int __fastcall asd_dio_set_pair(unsigned int a1, int a2, int a3) { unsigned int v4; // r7 if ( *(_DWORD *)(loc_D17EB0 + 8) <= a1 || asd_feature_level_check(a1: 14, a2: a1) == 0 ) return 2; v4 = dword_D17D14 + 4 * a1; sub_D1417E(); sub_D1417E(); asd_reg_write_1981C(a1: *(_DWORD *)(v4 + 16)); return 0; } /* ==== asd_dio_write_clear_seq [tier=EXACT size=74] ==== */ // Emits a fixed 10-word clear sequence to a DIO register: 0x1000100, four zeroes, // 0x1000110, then four more zeroes. int __fastcall asd_dio_write_clear_seq(unsigned int a1) { void (__fastcall *v2)(unsigned int); // r6 v2 = (void (__fastcall *)(unsigned int))off_D18400; off_D18400(a1); v2(a1); v2(a1); v2(a1); v2(a1); v2(a1); v2(a1); v2(a1); v2(a1); return ((unsigned int (__fastcall *)(unsigned int))v2)(a1); } /* ==== asd_dio_write_packed [tier=EXACT size=158] ==== */ // Feature-14 gated: packs the caller's byte array into 32-bit words and writes them to the // per-link registers at byte_D42661[4*idx+207]... int __fastcall asd_dio_write_packed(unsigned int a1, unsigned __int8 *a2) { int v4; // r1 int result; // r0 _DWORD *v6; // r6 void (__fastcall *v7)(unsigned int); // r5 if ( *((_DWORD *)off_D18B04 + 2) <= a1 ) return 2; v4 = asd_feature_level_check(a1: 14, a2: a1); result = 2; if ( a2 != nullptr && v4 != 0 ) { v6 = (_DWORD *)(dword_D18B08 + 4 * a1); v7 = (void (__fastcall *)(unsigned int))off_D18B0C; off_D18B0C(a1: v6[30], a2: *a2 | (a2[1] << 8) | ((a2[2] | (a2[3] << 8)) << 16)); v7(a1: v6[32]); v7(a1: v6[34]); v7(a1: v6[36]); return 0; } return result; } /* ==== asd_dio_write_verify [tier=EXACT size=96] ==== */ // Feature-14 gated DIO register write with verification: rejects with 38 if the status // register's bit30 is set, writes, re-reads, and on mismatch waits (SVC 0x56) and retries // once before reporting the difference. int __fastcall asd_dio_write_verify(unsigned int a1, int a2, unsigned int a3) { int result; // r0 if ( *((_DWORD *)off_D18B04 + 2) <= a3 || asd_feature_level_check(a1: 14, a2: a3) == 0 ) return 2; if ( sub_D1417E() << 30 != 0 ) return 38; asd_reg_write_1981C(a1); if ( sub_D1417E() == a2 ) return 0; __asm { SVC 0x56 ; 'V' } asd_reg_write_1981C(a1); result = sub_D1417E() - a2; if ( result != 0 ) return 38; return result; } /* ==== asd_dispatch [tier=DISPATCH size=842] ==== */ /* decompile failed: call analysis failed */ /* ==== asd_encoder_enable_seq [tier=EXACT size=1072] ==== */ // Per-signal-type (switch on ctx+40) display encoder bring-up sequence: DIO register // read-modify-writes via asd_reg_* with SVC 0x56 (kernel wait) between steps. // sub_D08BD0 is a near-identical sibling for another variant. int __fastcall asd_encoder_enable_seq(struct asd_link_cfg *a1, char *a2, char *a3) { unsigned int field28; // r10 __int64 v5; // kr00_8 int *v8; // r7 __int16 v9; // r2 unsigned int v10; // r6 __int16 v11; // r2 __int16 _139E4; // r0 __int16 v13; // r2 int v14; // r0 __int16 _13974; // r0 int v20; // r6 int *v21; // r7 __int16 v22; // r2 unsigned int v23; // r6 __int16 v24; // r2 __int16 v25; // r0 __int16 v26; // r2 int v27; // r0 __int16 v28; // r0 int _13B74; // r0 void (__fastcall *v30)(int, int, unsigned int); // r4 _DWORD *v31; // r7 void (__fastcall *v32)(int, int, unsigned int); // r4 __int16 v33; // r2 unsigned int v34; // r6 __int16 v35; // r2 __int16 v36; // r0 __int16 v37; // r2 int v38; // r0 __int16 _13BF8; // r0 unsigned int field40; // r0 _DWORD *v41; // r4 int v42; // r1 _DWORD *v43; // r7 _DWORD *v44; // r4 int v45; // r0 _DWORD *v46; // r7 _DWORD *v47; // r5 unsigned int v48; // r7 int v49; // r0 _DWORD *v50; // r4 _DWORD *v51; // r5 int v52; // r0 _DWORD *v53; // r4 unsigned int v54; // r7 _DWORD *v55; // r8 int v56; // r0 _DWORD *v57; // r5 unsigned int v58; // r7 if ( a1 == nullptr ) return 2; field28 = a1->field28; v5 = *(_QWORD *)&a1->field14; switch ( field28 ) { case 0x10u: v8 = (int *)off_D092EC; if ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D092EC + 4), a3: v5) << 31 != 0 ) { v10 = asd_reg_read_13974(a1: v8[100], a2: HIDWORD(v5), a3: v9) & 7; _139E4 = asd_reg_read_139E4(a1: v8[99], a2: v10, a3: v11); asd_reg_write_19394(a1: v8[99], a2: v10, a3: _139E4 | 0x80); v14 = v8[103]; if ( v14 != 0 ) { _13974 = asd_reg_read_13974(a1: v14, a2: v10, a3: v13); asd_reg_write_19328(a1: v8[103], a2: v10, a3: _13974 | 1); } asd_reg_read_13B74(a1: 0, a2: v8[41], a3: v5); asd_reg_write_1946C(a1: 0, a2: v8[41], a3: v5); asd_reg_read_13B74(a1: 0, a2: v8[60], a3: v5); if ( a1->field40 == 3 ) asd_reg_write_1946C(a1: 0, a2: v8[60], a3: v5); asd_reg_write_1946C(a1: 0, a2: v8[60], a3: v5); __asm { SVC 0x56 ; 'V' } asd_reg_write_1946C(a1: 0, a2: v8[60], a3: v5); break; } return 8; case 0x30u: v31 = off_D0889C; if ( asd_reg_read_13BF8(a1: *((_DWORD *)off_D0889C + 105), a2: HIDWORD(v5), (__int16)a3) << 31 == 0 ) return 8; v32 = (void (__fastcall *)(int, int, unsigned int))off_D088A0; off_D088A0(a1: 2, a2: v31[76], a3: v5, a4: 16); v32(a1: 2, a2: v31[76], a3: v5); __asm { SVC 0x56 ; 'V' } v32(a1: 2, a2: v31[76], a3: v5); v34 = asd_reg_read_13BF8(a1: v31[106], a2: HIDWORD(v5), a3: v33) & 7; v36 = asd_reg_read_139E4(a1: v31[99], a2: v34, a3: v35); asd_reg_write_19394(a1: v31[99], a2: v34, a3: v36 | 0x80); v38 = v31[107]; if ( v38 != 0 ) { _13BF8 = asd_reg_read_13BF8(a1: v38, a2: v34, a3: v37); asd_reg_write_19524(a1: v31[107], a2: v34, a3: _13BF8 | 1); } break; case 0x20u: v21 = (int *)off_D0889C; if ( asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_D0889C + 86), a3: v5) << 31 == 0 ) return 8; v23 = asd_reg_read_13974(a1: v21[101], a2: HIDWORD(v5), a3: v22) & 7; v25 = asd_reg_read_139E4(a1: v21[99], a2: v23, a3: v24); asd_reg_write_19394(a1: v21[99], a2: v23, a3: v25 | 0x80); v27 = v21[104]; if ( v27 != 0 ) { v28 = asd_reg_read_13974(a1: v27, a2: 0, a3: v26); asd_reg_write_19328(a1: v21[104], a2: 0, a3: v28 | 1); } _13B74 = asd_reg_read_13B74(a1: 1, a2: v21[68], a3: v5); v30 = (void (__fastcall *)(int, int, unsigned int))off_D088A0; off_D088A0(a1: 1, a2: v21[68], a3: v5, a4: _13B74 | 0x10); __asm { SVC 0x56 ; 'V' } v30(a1: 1, a2: v21[68], a3: v5); asd_reg_read_13B74(a1: 1, a2: v21[88], a3: v5); v30(a1: 1, a2: v21[88], a3: v5); break; default: break; } v20 = ((int (__fastcall *)(struct asd_link_cfg *, char *, char *))loc_D0974C)(a1, a2, a3); field40 = a1->field40; if ( field40 - 1 >= 3 ) { if ( field40 == 4 ) { v46 = off_D0889C; asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0889C + 60), a3: v5); asd_reg_read_13B74(a1: 0, a2: v46[48], a3: v5); asd_reg_write_1946C(a1: 0, a2: v46[48], a3: v5); v42 = v46[60]; } else { if ( field40 != 5 ) return 1; if ( field28 != 16 ) goto LABEL_32; v43 = off_D0889C; asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0889C + 60), a3: v5); asd_reg_read_13B74(a1: 0, a2: v43[48], a3: v5); asd_reg_write_1946C(a1: 0, a2: v43[60], a3: v5); v42 = v43[48]; } goto LABEL_30; } if ( field28 == 16 ) { v41 = off_D0889C; asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0889C + 42), a3: v5); v42 = v41[42]; LABEL_30: v45 = 0; goto LABEL_31; } if ( field28 == 32 ) { v44 = off_D0889C; asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_D0889C + 87), a3: v5); v42 = v44[87]; v45 = 1; LABEL_31: asd_reg_write_1946C(a1: v45, a2: v42, a3: v5); } LABEL_32: if ( v20 == 0 ) { switch ( field28 ) { case 0x10u: v47 = off_D0889C; v48 = 0; asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0889C + 60), a3: v5); asd_reg_write_1946C(a1: 0, a2: v47[60], a3: v5); v49 = asd_reg_read_13B74(a1: 0, a2: v47[60], a3: v5); v50 = off_D088A4; v20 = 0; while ( (v49 & 0x10000000) == 0 && v50[12] > v48 ) { __asm { SVC 0x56 ; 'V' } v49 = asd_reg_read_13B74(a1: 0, a2: v47[60], a3: v5); ++v48; } break; case 0x30u: v55 = off_D09748; asd_reg_read_13B74(a1: 2, a2: *((_DWORD *)off_D09748 + 76), a3: v5); asd_reg_write_1946C(a1: 2, a2: v55[76], a3: v5); v56 = asd_reg_read_13B74(a1: 2, a2: v55[76], a3: v5); v57 = off_D088A4; v58 = 0; v20 = 0; while ( (v56 & 0x10000000) == 0 && v57[12] > v58 ) { __asm { SVC 0x56 ; 'V' } v56 = asd_reg_read_13B74(a1: 2, a2: v55[76], a3: v5); ++v58; } break; case 0x20u: v51 = off_D08BC4; asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_D08BC4 + 68), a3: v5); asd_reg_write_1946C(a1: 1, a2: v51[68], a3: v5); v52 = asd_reg_read_13B74(a1: 1, a2: v51[68], a3: v5); v53 = off_D088A4; v54 = 0; v20 = 0; while ( (v52 & 0x10000000) == 0 && v53[12] > v54 ) { __asm { SVC 0x56 ; 'V' } v52 = asd_reg_read_13B74(a1: 1, a2: v51[68], a3: v5); ++v54; } break; default: return 0; } } return v20; } /* ==== asd_encoder_enable_seq_v2 [tier=EXACT size=1068] ==== */ // Near-identical sibling of asd_encoder_enable_seq for another ASIC variant. int __fastcall asd_encoder_enable_seq_v2(struct asd_link_cfg *a1, int a2, __int16 a3) { unsigned int field28; // r10 __int64 v4; // kr00_8 int *v6; // r7 __int16 v7; // r2 unsigned int v8; // r6 __int16 v9; // r2 __int16 _139E4; // r0 __int16 v11; // r2 int v12; // r0 __int16 _13B04; // r0 int v18; // r6 int *v19; // r7 __int16 v20; // r2 unsigned int v21; // r6 __int16 v22; // r2 __int16 v23; // r0 __int16 v24; // r2 int v25; // r0 __int16 v26; // r0 int _13B74; // r0 void (__fastcall *v28)(int, int, unsigned int); // r4 _DWORD *v29; // r7 void (__fastcall *v30)(int, int, unsigned int); // r4 __int16 v31; // r2 unsigned int v32; // r6 __int16 v33; // r2 __int16 v34; // r0 __int16 v35; // r2 int v36; // r0 __int16 _13BF8; // r0 unsigned int field40; // r0 _DWORD *v39; // r4 int v40; // r1 _DWORD *v41; // r7 _DWORD *v42; // r4 int v43; // r0 _DWORD *v44; // r7 _DWORD *v45; // r5 unsigned int v46; // r7 int v47; // r0 _DWORD *v48; // r4 _DWORD *v49; // r5 int v50; // r0 _DWORD *v51; // r4 unsigned int v52; // r7 _DWORD *v53; // r8 int v54; // r0 _DWORD *v55; // r5 unsigned int v56; // r7 if ( a1 == nullptr ) return 2; field28 = a1->field28; v4 = *(_QWORD *)&a1->field14; switch ( field28 ) { case 0x10u: v6 = (int *)off_D09B78; if ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D09B78 + 4), a3: v4) << 31 != 0 ) { v8 = asd_reg_read_13B04(a1: v6[5], a2: HIDWORD(v4), a3: v7) & 7; _139E4 = asd_reg_read_139E4(a1: v6[99], a2: v8, a3: v9); asd_reg_write_19394(a1: v6[99], a2: v8, a3: _139E4 | 0x80); v12 = v6[108]; if ( v12 != 0 ) { _13B04 = asd_reg_read_13B04(a1: v12, a2: v8, a3: v11); asd_reg_write_19400(a1: v6[108], a2: v8, a3: _13B04 | 1); } asd_reg_read_13B74(a1: 0, a2: v6[41], a3: v4); asd_reg_write_1946C(a1: 0, a2: v6[41], a3: v4); asd_reg_read_13B74(a1: 0, a2: v6[60], a3: v4); if ( a1->field40 == 3 ) asd_reg_write_1946C(a1: 0, a2: v6[60], a3: v4); asd_reg_write_1946C(a1: 0, a2: v6[60], a3: v4); __asm { SVC 0x56 ; 'V' } asd_reg_write_1946C(a1: 0, a2: v6[60], a3: v4); break; } return 8; case 0x30u: v29 = off_D08FFC; if ( asd_reg_read_13BF8(a1: *((_DWORD *)off_D08FFC + 105), a2: HIDWORD(v4), a3) << 31 == 0 ) return 8; v30 = (void (__fastcall *)(int, int, unsigned int))off_D09000; off_D09000(a1: 2, a2: v29[76], a3: v4, a4: 16); v30(a1: 2, a2: v29[76], a3: v4); __asm { SVC 0x56 ; 'V' } v30(a1: 2, a2: v29[76], a3: v4); v32 = asd_reg_read_13BF8(a1: v29[106], a2: HIDWORD(v4), a3: v31) & 7; v34 = asd_reg_read_139E4(a1: v29[99], a2: v32, a3: v33); asd_reg_write_19394(a1: v29[99], a2: v32, a3: v34 | 0x80); v36 = v29[110]; if ( v36 != 0 ) { _13BF8 = asd_reg_read_13BF8(a1: v36, a2: v32, a3: v35); asd_reg_write_19524(a1: v29[110], a2: v32, a3: _13BF8 | 1); } break; case 0x20u: v19 = (int *)off_D08FFC; if ( asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_D08FFC + 86), a3: v4) << 31 == 0 ) return 8; v21 = asd_reg_read_13B04(a1: v19[102], a2: HIDWORD(v4), a3: v20) & 7; v23 = asd_reg_read_139E4(a1: v19[99], a2: v21, a3: v22); asd_reg_write_19394(a1: v19[99], a2: v21, a3: v23 | 0x80); v25 = v19[109]; if ( v25 != 0 ) { v26 = asd_reg_read_13B04(a1: v25, a2: 0, a3: v24); asd_reg_write_19400(a1: v19[109], a2: 0, a3: v26 | 1); } _13B74 = asd_reg_read_13B74(a1: 1, a2: v19[68], a3: v4); v28 = (void (__fastcall *)(int, int, unsigned int))off_D09000; off_D09000(a1: 1, a2: v19[68], a3: v4, a4: _13B74 | 0x10); __asm { SVC 0x56 ; 'V' } v28(a1: 1, a2: v19[68], a3: v4); asd_reg_read_13B74(a1: 1, a2: v19[88], a3: v4); v28(a1: 1, a2: v19[88], a3: v4); break; default: break; } v18 = sub_D097F8(); field40 = a1->field40; if ( field40 - 1 >= 3 ) { if ( field40 == 4 ) { v44 = off_D09250; asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D09250 + 60), a3: v4); asd_reg_read_13B74(a1: 0, a2: v44[48], a3: v4); asd_reg_write_1946C(a1: 0, a2: v44[48], a3: v4); v40 = v44[60]; } else { if ( field40 != 5 ) return 1; if ( field28 != 16 ) goto LABEL_32; v41 = off_D08FFC; asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D08FFC + 60), a3: v4); asd_reg_read_13B74(a1: 0, a2: v41[48], a3: v4); asd_reg_write_1946C(a1: 0, a2: v41[60], a3: v4); v40 = v41[48]; } goto LABEL_30; } if ( field28 == 16 ) { v39 = off_D08FFC; asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D08FFC + 42), a3: v4); v40 = v39[42]; LABEL_30: v43 = 0; goto LABEL_31; } if ( field28 == 32 ) { v42 = off_D09250; asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_D09250 + 87), a3: v4); v40 = v42[87]; v43 = 1; LABEL_31: asd_reg_write_1946C(a1: v43, a2: v40, a3: v4); } LABEL_32: if ( v18 == 0 ) { switch ( field28 ) { case 0x10u: v45 = off_D09250; v46 = 0; asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D09250 + 60), a3: v4); asd_reg_write_1946C(a1: 0, a2: v45[60], a3: v4); v47 = asd_reg_read_13B74(a1: 0, a2: v45[60], a3: v4); v48 = off_D09004; v18 = 0; while ( (v47 & 0x10000000) == 0 && v48[12] > v46 ) { __asm { SVC 0x56 ; 'V' } v47 = asd_reg_read_13B74(a1: 0, a2: v45[60], a3: v4); ++v46; } break; case 0x30u: v53 = off_D09F14; asd_reg_read_13B74(a1: 2, a2: *((_DWORD *)off_D09F14 + 76), a3: v4); asd_reg_write_1946C(a1: 2, a2: v53[76], a3: v4); v54 = asd_reg_read_13B74(a1: 2, a2: v53[76], a3: v4); v55 = off_D09004; v56 = 0; v18 = 0; while ( (v54 & 0x10000000) == 0 && v55[12] > v56 ) { __asm { SVC 0x56 ; 'V' } v54 = asd_reg_read_13B74(a1: 2, a2: v53[76], a3: v4); ++v56; } break; case 0x20u: v49 = off_D092EC; asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_D092EC + 68), a3: v4); asd_reg_write_1946C(a1: 1, a2: v49[68], a3: v4); v50 = asd_reg_read_13B74(a1: 1, a2: v49[68], a3: v4); v51 = off_D09004; v52 = 0; v18 = 0; while ( (v50 & 0x10000000) == 0 && v51[12] > v52 ) { __asm { SVC 0x56 ; 'V' } v50 = asd_reg_read_13B74(a1: 1, a2: v49[68], a3: v4); ++v52; } break; default: return 0; } } return v18; } /* ==== asd_encoder_enable_seq_v3 [tier=EXACT size=796] ==== */ // Third form of the encoder bring-up sequence: per-signal-type switch resolving the lane // via unk_D42588 and driving the unk_D42408 register group. int __fastcall asd_encoder_enable_seq_v3(struct asd_link_cfg *a1, int a2, __int16 a3) { unsigned int field28; // r8 __int64 v5; // kr00_8 int *v6; // r7 __int16 v7; // r2 unsigned int v8; // r6 __int16 v9; // r2 __int16 _139E4; // r0 __int16 v11; // r2 int v12; // r0 __int16 _13974; // r0 int *v19; // r7 __int16 v20; // r2 unsigned int v21; // r6 __int16 v22; // r2 __int16 v23; // r0 __int16 v24; // r2 int v25; // r0 __int16 v26; // r0 int _13B74; // r0 void (__fastcall *v28)(int, int, unsigned int); // r9 _DWORD *v29; // r7 void (__fastcall *v30)(int, int, unsigned int); // r9 __int16 v31; // r2 unsigned int v32; // r6 __int16 v33; // r2 __int16 v34; // r0 __int16 v35; // r2 int v36; // r0 __int16 _13BF8; // r0 unsigned int field40; // r0 _DWORD *v39; // r6 int v40; // r1 _DWORD *v41; // r8 _DWORD *v42; // r6 int v43; // r0 _DWORD *v44; // r7 if ( a1 == nullptr ) return 2; field28 = a1->field28; v5 = *(_QWORD *)&a1->field14; switch ( field28 ) { case 0x10u: v6 = (int *)off_D08BC4; if ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D08BC4 + 4), a3: v5) << 31 != 0 ) { v8 = asd_reg_read_13974(a1: v6[100], a2: HIDWORD(v5), a3: v7) & 7; _139E4 = asd_reg_read_139E4(a1: v6[99], a2: v8, a3: v9); asd_reg_write_19394(a1: v6[99], a2: v8, a3: _139E4 | 0x80); v12 = v6[103]; if ( v12 != 0 ) { _13974 = asd_reg_read_13974(a1: v12, a2: v8, a3: v11); asd_reg_write_19328(a1: v6[103], a2: v8, a3: _13974 | 1); } asd_reg_read_13B74(a1: 0, a2: v6[41], a3: v5); asd_reg_write_1946C(a1: 0, a2: v6[41], a3: v5); asd_reg_read_13B74(a1: 0, a2: v6[60], a3: v5); if ( a1->field40 == 3 ) asd_reg_write_1946C(a1: 0, a2: v6[60], a3: v5); asd_reg_write_1946C(a1: 0, a2: v6[60], a3: v5); __asm { SVC 0x56 ; 'V' } asd_reg_write_1946C(a1: 0, a2: v6[60], a3: v5); break; } return 8; case 0x30u: v29 = off_D08BC4; if ( asd_reg_read_13BF8(a1: *((_DWORD *)off_D08BC4 + 105), a2: HIDWORD(v5), a3) << 31 == 0 ) return 8; v30 = (void (__fastcall *)(int, int, unsigned int))off_D09000; off_D09000(a1: 2, a2: v29[76], a3: v5, a4: 16); v30(a1: 2, a2: v29[76], a3: v5); __asm { SVC 0x56 ; 'V' } v30(a1: 2, a2: v29[76], a3: v5); v32 = asd_reg_read_13BF8(a1: v29[106], a2: HIDWORD(v5), a3: v31) & 7; v34 = asd_reg_read_139E4(a1: v29[99], a2: v32, a3: v33); asd_reg_write_19394(a1: v29[99], a2: v32, a3: v34 | 0x80); v36 = v29[107]; if ( v36 != 0 ) { _13BF8 = asd_reg_read_13BF8(a1: v36, a2: v32, a3: v35); asd_reg_write_19524(a1: v29[107], a2: v32, a3: _13BF8 | 1); } break; case 0x20u: v19 = (int *)off_D08BC4; if ( asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_D08BC4 + 86), a3: v5) << 31 == 0 ) return 8; v21 = asd_reg_read_13974(a1: v19[101], a2: HIDWORD(v5), a3: v20) & 7; v23 = asd_reg_read_139E4(a1: v19[99], a2: v21, a3: v22); asd_reg_write_19394(a1: v19[99], a2: v21, a3: v23 | 0x80); v25 = v19[104]; if ( v25 != 0 ) { v26 = asd_reg_read_13974(a1: v25, a2: 0, a3: v24); asd_reg_write_19328(a1: v19[104], a2: 0, a3: v26 | 1); } _13B74 = asd_reg_read_13B74(a1: 1, a2: v19[68], a3: v5); v28 = (void (__fastcall *)(int, int, unsigned int))off_D09000; off_D09000(a1: 1, a2: v19[68], a3: v5, a4: _13B74 | 0x10); __asm { SVC 0x56 ; 'V' } v28(a1: 1, a2: v19[68], a3: v5); asd_reg_read_13B74(a1: 1, a2: v19[88], a3: v5); v28(a1: 1, a2: v19[88], a3: v5); break; default: break; } field40 = a1->field40; if ( field40 - 1 < 3 ) { if ( field28 == 16 ) { v39 = off_D08BC4; asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D08BC4 + 42), a3: v5); v40 = v39[42]; LABEL_30: v43 = 0; goto LABEL_31; } if ( field28 == 32 ) { v42 = off_D08BC4; asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_D08BC4 + 87), a3: v5); v40 = v42[87]; v43 = 1; LABEL_31: asd_reg_write_1946C(a1: v43, a2: v40, a3: v5); return 7; } return 7; } if ( field40 == 4 ) { v44 = off_D08BC4; asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D08BC4 + 60), a3: v5); asd_reg_read_13B74(a1: 0, a2: v44[48], a3: v5); asd_reg_write_1946C(a1: 0, a2: v44[48], a3: v5); v40 = v44[60]; goto LABEL_30; } if ( field40 == 5 ) { if ( field28 == 16 ) { v41 = off_D09964; asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D09964 + 60), a3: v5); asd_reg_read_13B74(a1: 0, a2: v41[48], a3: v5); asd_reg_write_1946C(a1: 0, a2: v41[60], a3: v5); v40 = v41[48]; goto LABEL_30; } return 7; } return 1; } /* ==== asd_encoder_query [tier=EXACT size=186] ==== */ // Switch on the descriptor's signal type (48 / 16): validates the encoder state and // reports the encoder/connector pairing. int __fastcall asd_encoder_query(_DWORD *a1, int a2, __int16 a3) { unsigned int v4; // r5 int v5; // r0 int v6; // r1 __int16 v7; // r2 unsigned int v9; // r6 int _13BF8; // r0 int v11; // r0 if ( a1 == nullptr ) return 2; v4 = a1[5]; v5 = a1[10]; switch ( v5 ) { case 48: v9 = a1[6]; if ( a1[8] != 0 && asd_encoder_state_check(a1: v4, a2, a3) == 0 ) { v11 = a1[19]; goto LABEL_29; } _13BF8 = asd_reg_read_13BF8(a1: *((_DWORD *)off_D07504 + 105), a2: v9, a3); break; case 32: _13BF8 = asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_D07504 + 84), a3: v4); break; case 16: switch ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D07504 + 3), a3: v4) & 7 ) { case 0: if ( a1[8] != 0 && asd_connector_state_check(a1: v4, a2: v6, a3: v7) == 0 )// jumptable 00D07176 case 0 { if ( a1[19] != 4 ) return 17; } else if ( a1[19] != 3 ) { return 17; } v11 = a1[16]; break; case 1: case 4: case 6: case 7: return 0; // switch 8 cases case 2: if ( a1[16] == 1 && a1[19] == 1 ) return 0; // jumptable 00D07176 case 2 return 17; case 3: if ( a1[16] == 3 && a1[19] == 2 ) return 0; // jumptable 00D07176 case 3 return 17; case 5: if ( a1[16] == 5 && a1[19] == 3 ) return 0; // jumptable 00D07176 case 5 return 17; } LABEL_29: if ( v11 == 4 ) return 0; // jumptable 00D07176 cases 1,4,6,7 return 17; default: return 2; } if ( _13BF8 << 31 == 0 ) return 17; return 0; } /* ==== asd_encoder_state_check [tier=EXACT size=48] ==== */ // Reads a display register for index a1 and requires (val & 0x31) == 0x21; otherwise // returns 19 unless byte_D42661[3*a1+1] is set. int __fastcall asd_encoder_state_check(unsigned int a1, int a2, __int16 a3) { int result; // r0 if ( (asd_reg_read_13CDC(a1: *((_DWORD *)off_D0714C + 128), a2: a1, a3) & 0x31) == 0x21 ) return 0; result = 0; if ( *(_BYTE *)(3 * a1 + dword_D06EC8 + 2) == 0 ) return 19; return result; } /* ==== asd_event_dispatch [tier=EXACT size=550] ==== */ // Event handler invoked from asd_event_loop with dword_D1F008. Prepares a 0x100-byte // request buffer and a 0x18-byte reply, rejects an uninitialised dword_D1F00C (-1) with // status 2 after tracing, and routes the decoded event. unsigned int __fastcall asd_event_dispatch() { char *v0; // r10 char *v4; // r9 int v5; // r4 int v6; // r5 int v7; // r6 int v8; // r7 int *v9; // r7 int v10; // r0 int v11; // r1 unsigned int v12; // r5 int v13; // r0 void (__fastcall *v14)(int, int, int, int); // r4 int v15; // r3 int v16; // r3 unsigned int v17; // r0 unsigned int v18; // r1 int v19; // r2 int v20; // r3 int v21; // r4 int v22; // r6 void (__fastcall *v23)(int, int, int, int); // r4 int v24; // r3 int v25; // r3 int v27; // r0 unsigned int v28; // r4 unsigned int v29; // r5 unsigned int v30; // r1 unsigned int *v31; // r5 unsigned int v32; // r7 int v33; // r0 unsigned int v34; // r1 unsigned int v36; // r1 int v39; // r0 int v40; // [sp+4h] [bp-138h] BYREF int v41; // [sp+8h] [bp-134h] BYREF unsigned int v42; // [sp+Ch] [bp-130h] BYREF int v43; // [sp+10h] [bp-12Ch] BYREF int v44; // [sp+14h] [bp-128h] BYREF int v45; // [sp+18h] [bp-124h] BYREF unsigned int v46; // [sp+1Ch] [bp-120h] int v47; // [sp+20h] [bp-11Ch] int v48; // [sp+24h] [bp-118h] int v49; // [sp+28h] [bp-114h] int v50; // [sp+2Ch] [bp-110h] unsigned int v51; // [sp+34h] [bp-108h] BYREF unsigned int v52[64]; // [sp+38h] [bp-104h] BYREF unsigned int v53; // [sp+138h] [bp-4h] BYREF v53 = 0; bzero_core(result: v52, a2: 0x100u); v51 = 0; bzero_core(result: &v45, a2: 0x18u); if ( *off_D15AEC != -1 ) { v0 = off_D15BC4; __asm { SVC 0x5E ; '^' } v4 = off_D15BC4 + 36; v5 = *((_DWORD *)off_D15BC4 + 11); v6 = *((_DWORD *)off_D15BC4 + 12); v7 = *((_DWORD *)off_D15BC4 + 13); v8 = *((_DWORD *)off_D15BC4 + 14); v46 = *((_DWORD *)off_D15BC4 + 10); v47 = v5; v48 = v6; v49 = v7; v50 = v8; v9 = off_D15AEC; __asm { SVC 0x5F ; '_' } v45 = 0; if ( asd_svc_sub_2794() ) { v10 = asd_link_check_C930(a1: &v53); if ( v10 == 15 ) { v17 = (unsigned __int8)*v0; v12 = 15; if ( v17 >= 6 ) v45 = 2; else *v0 = v17 + 1; } else { v12 = v10; if ( v10 != 0 ) { *v0 = 0; } else { *v0 = 0; if ( v53 - 1 >= 0x3F ) { v13 = 1; v12 = 5; LABEL_9: v45 = v13; goto LABEL_14; } v27 = asd_op_304(a1: v53 - 1, a2: v11); if ( v27 != 0 ) { v12 = v27; v13 = 4; goto LABEL_9; } v28 = v46; v29 = v46 + 1; udiv32(a1: v46 + 1, a2: 0x3E8u); if ( v30 != 0 ) v30 = v29; v46 = v30; if ( v29 >= v28 ) { v31 = v52; v32 = 0; v49 = 0; v50 = 0; v47 = 0; v48 = 0; while ( 1 ) { if ( v32 >= v53 ) { v12 = 0; goto LABEL_61; } if ( asd_feature_enabled_cfg0(a1: v32, a2: v31) != 0 ) break; if ( asd_topo_sub_11238(a1: *v31, a2: &v40) != 0 || asd_resolve_link_parent(a1: *v31, a2: &v51) != 0 ) { v39 = 16; v12 = 33; goto LABEL_60; } if ( asd_link_sub_113A0(a1: *v31, a2: &v44, a3: &v43, a4: &v42, a5: &v41) != 0 ) { v41 = 0; // switch 6 cases v42 = 0; } v33 = 2; switch ( v40 ) { case 0: goto LABEL_54; // switch jump case 1: case 2: case 3: goto LABEL_37; case 4: v33 = 3; // jumptable 00D15A44 case 4 goto LABEL_37; case 5: v33 = 4; // jumptable 00D15A44 case 5 goto LABEL_37; default: v33 = 5; // jumptable 00D15A44 default case LABEL_37: v34 = *(&v45 + v33); // jumptable 00D15A44 cases 1-3 if ( v34 == 0 ) { _R1 = v51 << 16; __asm { UXTB16.W R1, R1 } v36 = (_R1 & 0xF0FFFFFF | ((v41 & 0xF) << 24)) + (unsigned __int16)((_WORD)v42 << 8) + 0x80000000; goto LABEL_53; } if ( v41 == 2 ) { if ( (v34 & 0xF000000) == 0x1000000 ) goto LABEL_41; } else if ( v41 == 0 && (v34 & 0xF000000) != 0 ) { LABEL_41: v34 = v34 & 0xF0FFFFFF | ((v41 & 0xF) << 24); *(&v45 + v33) = v34; } _ZF = v51 == 4; if ( v51 != 4 ) _ZF = v51 == 0; if ( _ZF && (v34 & 0xFF0000) != 0 || BYTE2(v34) > v51 && BYTE2(v34) != 4 ) { v34 = v34 & 0xFF00FFFF | ((unsigned __int8)v51 << 16); *(&v45 + v33) = v34; } if ( BYTE1(v34) > v42 ) { v36 = v34 & 0xFFFF00FF | ((unsigned __int8)v42 << 8); LABEL_53: *(&v45 + v33) = v36; } LABEL_54: ++v31; // jumptable 00D15A44 case 0 ++v32; break; } } v39 = 1; v12 = 5; LABEL_60: v45 = v39; LABEL_61: v9 = off_D15AEC; } else { v12 = 2; } } } LABEL_14: if ( *v9 == -1 ) { v12 = 2; } else { __asm { SVC 0x5E ; '^' } v18 = v46; v19 = v47; v20 = v48; v21 = v49; v22 = v50; *(_DWORD *)v4 = v45; *((_DWORD *)v4 + 1) = v18; *((_DWORD *)v4 + 2) = v19; *((_DWORD *)v4 + 3) = v20; *((_DWORD *)v4 + 4) = v21; *((_DWORD *)v4 + 5) = v22; __asm { SVC 0x5F ; '_' } if ( v12 == 0 ) return 0; } v23 = (void (__fastcall *)(int, int, int, int))off_D15AF4; off_D15AF4(a1: 227, a2: 1, a3: 61440); v23(a1: 227, a2: 1, a3: HIWORD(v12), a4: v24); v23(a1: 227, a2: 1, a3: (unsigned __int16)v12, a4: v25); return v12; } v13 = 4; v12 = 8; goto LABEL_9; } v14 = (void (__fastcall *)(int, int, int, int))off_D15AF4; off_D15AF4(a1: 227, a2: 1, a3: 61440); v14(a1: 227, a2: 1, a3: 0, a4: v15); v12 = 2; v14(a1: 227, a2: 1, a3: 2, a4: v16); return v12; } /* ==== asd_event_loop [tier=EXACT size=32] ==== */ // ASD service loop: blocks on SVC 0x56 (wait), binds the caller handle with two // SVC 0x5E, dispatches via sub_D158C4(dword_D1F008), then releases with two SVC 0x5F. // Never returns - this is the module's main message pump. void __noreturn asd_event_loop() { while ( 1 ) { __asm { SVC 0x56 ; 'V' } __asm { SVC 0x5E ; '^' } __asm { SVC 0x5E ; '^' } asd_event_dispatch(); __asm { SVC 0x5F ; '_' } __asm { SVC 0x5F ; '_' } } } /* ==== asd_feature15_call_D44124 [tier=EXACT size=58] ==== */ // Feature-15 gated, pointer-validated dispatch to the runtime callback unk_D44124; // returns 8 when the feature is off and 7 when no callback is installed. int __fastcall asd_feature15_call_D44124(int a1, unsigned int a2) { int (__fastcall *v4)(int, unsigned int); // r2 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a2 == 0 || asd_validate_ptr(a1: a2, a2: 4u) == 0 ) return 2; v4 = *(int (__fastcall **)(int, unsigned int))(dword_D10618 + 6292); if ( v4 != nullptr ) return v4(a1, a2); else return 7; } /* ==== asd_feature15_query2 [tier=EXACT size=106] ==== */ // Feature-15 gated query validating three 2-byte caller pointers before use. int __fastcall asd_feature15_query2(int a1, unsigned int a2, unsigned int a3, unsigned int a4) { int v8; // r7 int (__fastcall *v9)(int, unsigned int, unsigned int, unsigned int); // r12 if ( !asd_feature_enabled(a1: 15) ) return 8; v8 = 2; if ( a2 != 0 && a3 != 0 && a4 != 0 ) { v8 = 2; if ( asd_validate_ptr(a1: a2, a2: 2u) != 0 ) { v8 = 2; if ( asd_validate_ptr(a1: a3, a2: 2u) != 0 ) { v8 = 2; if ( asd_validate_ptr(a1: a4, a2: 2u) != 0 ) { v9 = *(int (__fastcall **)(int, unsigned int, unsigned int, unsigned int))(dword_D10714 + 6296); if ( v9 != nullptr ) return v9(a1, a2, a3, a4); return 7; } } } } return v8; } /* ==== asd_feature15_query3 [tier=EXACT size=110] ==== */ // Feature-15 gated query validating three 2-byte caller pointers (four-argument form). int __fastcall asd_feature15_query3(int a1, int a2, unsigned int a3, unsigned int a4, unsigned int a5) { int v9; // r6 int (__fastcall *v10)(int, int, unsigned int, unsigned int); // r12 if ( !asd_feature_enabled(a1: 15) ) return 8; v9 = 2; if ( a3 != 0 && a4 != 0 && a5 != 0 ) { v9 = 2; if ( asd_validate_ptr(a1: a3, a2: 2u) != 0 ) { v9 = 2; if ( asd_validate_ptr(a1: a4, a2: 2u) != 0 ) { v9 = 2; if ( asd_validate_ptr(a1: a5, a2: 2u) != 0 ) { v10 = *(int (__fastcall **)(int, int, unsigned int, unsigned int))(dword_D10714 + 6300); if ( v10 != nullptr ) return v10(a1, a2, a3, a4); return 7; } } } } return v9; } /* ==== asd_feature15_query4 [tier=EXACT size=134] ==== */ // Feature-15 gated query validating four 2-byte caller pointers before use. int __fastcall asd_feature15_query4( int a1, int a2, int a3, unsigned int a4, unsigned int a5, unsigned int a6, unsigned int a7) { int v11; // r5 int (__fastcall *v12)(int, int, int, unsigned int); // r12 if ( !asd_feature_enabled(a1: 15) ) return 8; v11 = 2; if ( a4 != 0 && a5 != 0 && a6 != 0 && a7 != 0 ) { v11 = 2; if ( asd_validate_ptr(a1: a4, a2: 2u) != 0 ) { v11 = 2; if ( asd_validate_ptr(a1: a5, a2: 2u) != 0 ) { v11 = 2; if ( asd_validate_ptr(a1: a6, a2: 2u) != 0 ) { v11 = 2; if ( asd_validate_ptr(a1: a7, a2: 2u) != 0 ) { v12 = *(int (__fastcall **)(int, int, int, unsigned int))(dword_D10714 + 6304); if ( v12 != nullptr ) return v12(a1, a2, a3, a4); return 7; } } } } } return v11; } /* ==== asd_feature15_query_D44134 [tier=EXACT size=66] ==== */ // Feature-15 gated query through the runtime callback unk_D44134 into a 0x104-byte // buffer, followed by SVC 0xB4; returns 35 on the success path. int __fastcall asd_feature15_query_D44134() { int (__fastcall *v0)(_DWORD *); // r1 int result; // r0 _DWORD v6[66]; // [sp+0h] [bp-108h] BYREF bzero_core(result: v6, a2: 0x104u); if ( !asd_feature_enabled(a1: 15) ) return 8; v0 = *(int (__fastcall **)(_DWORD *))(dword_D10330 + 6308); if ( v0 == nullptr ) return 7; result = v0(a1: v6); if ( result == 0 ) { __asm { SVC 0xB4 } return 35; } return result; } /* ==== asd_feature_block_init [tier=EXACT size=58] ==== */ // Initialises the 0x2C-byte feature block at dword_D447A8 (the table asd_feature_enabled // and asd_feature_level_check read), records the provider in unk_D447AC, then calls // sub_D115E4 and probes dword_D447BC. int __fastcall asd_feature_block_init(int a1) { char *v1; // r4 __int64 v3; // r0 int result; // r0 int (*v5)(void); // r1 int v6; // r0 v1 = (char *)off_D11730; bzero_core(result: off_D11730, a2: 0x2Cu); LODWORD(v3) = v1 + 8; HIDWORD(v3) = a1; *((_DWORD *)v1 + 1) = a1; result = asd_feature_provider_select(a1: v3); if ( result == 0 ) { v5 = *((int (**)(void))v1 + 5); if ( v5 != nullptr ) { v6 = v5(); if ( v6 == 3 ) { return 1; } else if ( v6 == 2 ) { return asd_compute_dram_window(); } else { return 7; } } } return result; } /* ==== asd_feature_enabled [tier=EXACT size=64] ==== */ // Feature gate, 51 call sites. If the feature block (dword_D447A8) is absent it returns // true (open). Otherwise selects a per-feature flag: id 0, 6, 14, 15, 16 map to // unk_D447C8/C4/C0/CC/D0; any other id returns false. BOOL __fastcall asd_feature_enabled(int a1) { char *v1; // r0 if ( *(_BYTE *)off_D11730 == 0 ) return true; if ( a1 != 0 ) { switch ( a1 ) { case 16: v1 = (char *)off_D11730 + 40; break; case 14: v1 = (char *)off_D11730 + 24; break; case 15: v1 = (char *)off_D11730 + 36; break; case 6: v1 = (char *)off_D11730 + 28; break; default: return false; } } else { v1 = (char *)off_D11730 + 32; } return *(_DWORD *)v1 != 0; } /* ==== asd_feature_enabled_cfg0 [tier=EXACT size=64] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_feature_enabled. One of 0 near-identical siblings. int __fastcall asd_feature_enabled_cfg0(int a1, _DWORD *a2) { int v4; // r1 int v5; // r0 int v6; // r2 if ( !asd_feature_enabled(a1: 15) ) return 8; v4 = dword_D1139C; *a2 = 64; v5 = 0; v6 = 0; while ( 1 ) { if ( v5 == 6144 ) return 1; if ( *(_DWORD *)(v4 + v5 + 4) == 1 ) break; LABEL_7: v5 += 96; } if ( v6 != a1 ) { ++v6; goto LABEL_7; } *a2 = *(_DWORD *)(v4 + v5); return 0; } /* ==== asd_feature_level_check [tier=EXACT size=66] ==== */ // Two-argument form of the feature gate: (feature_id, level<=9). Returns 1 when the // feature block is absent, else delegates to sub_D02730(flagword, level). int __fastcall asd_feature_level_check(int a1, unsigned int a2) { unsigned int v2; // r0 if ( *(_BYTE *)off_D11730 == 0 ) return 1; if ( a2 <= 9 ) { switch ( a1 ) { case 0: v2 = *((_DWORD *)off_D11730 + 8); return asd_test_bit(a1: v2, a2); case 6: v2 = *((_DWORD *)off_D11730 + 7); return asd_test_bit(a1: v2, a2); case 16: v2 = *((_DWORD *)off_D11730 + 10); return asd_test_bit(a1: v2, a2); case 15: v2 = *((_DWORD *)off_D11730 + 9); return asd_test_bit(a1: v2, a2); case 14: v2 = *((_DWORD *)off_D11730 + 6); return asd_test_bit(a1: v2, a2); default: break; } } return 0; } /* ==== asd_feature_provider_select [tier=EXACT size=110] ==== */ // Switch over the provider id (high half of the packed argument, cases 1..6+) selecting the // feature-table provider; default status 7. Called from asd_feature_block_init. int __fastcall asd_feature_provider_select(__int64 a1) { _DWORD *v1; // r2 void *v2; // r3 void *v3; // r3 v1 = (_DWORD *)a1; // switch 43 cases LODWORD(a1) = 7; switch ( HIDWORD(a1) ) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 0xB: case 0xC: case 0xE: case 0xF: case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: case 0x1A: case 0x1B: case 0x1C: case 0x1F: case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x28: case 0x29: case 0x2A: case 0x2B: *v1 = 0; v1[1] = 0; v1[2] = 0; v1[3] = 0; LODWORD(a1) = 0; // jumptable 00D115F0 cases 1-9,11,12,14-28,31-37,40-43 break; case 0x1D: case 0x1E: HIDWORD(a1) = off_D11664; // jumptable 00D115F0 cases 29,30 LODWORD(a1) = 0; v2 = off_D11668; *v1 = off_D1166C; v1[1] = v2; *((_QWORD *)v1 + 1) = a1; break; case 0x26: a1 = qword_D11654; // jumptable 00D115F0 case 38 v3 = off_D1165C; *v1 = off_D11660; v1[1] = v3; v1[2] = HIDWORD(a1); v1[3] = a1; LODWORD(a1) = 0; break; default: return a1; // switch jump } return a1; } /* ==== asd_find_active_pipe [tier=EXACT size=160] ==== */ // Scans the four pipe registers dword_D424BC/C0/C4/C8 for one whose lane field matches the // caller's selector with the 0x7F00 and 0x10 bits set. int __fastcall asd_find_active_pipe(int a1) { _DWORD *v1; // r4 __int64 v2; // kr00_8 int (__fastcall *v3)(int, int, unsigned int); // r5 __int16 v4; // r6 __int16 v5; // r10 __int16 v6; // r9 __int16 v7; // r0 int v8; // r1 if ( a1 == 0 ) return 2; v1 = off_D09E9C; v2 = *(_QWORD *)(a1 + 20); v3 = off_D09C9C; v4 = off_D09C9C(a1: 2, a2: *((_DWORD *)off_D09E9C + 49), a3: v2); v5 = v3(a1: 2, a2: v1[50], a3: v2); v6 = v3(a1: 2, a2: v1[51], a3: v2); v7 = v3(a1: 2, a2: v1[52], a3: v2); if ( (v4 & 0x7F00) != 0 && (v4 & 7) == HIDWORD(v2) && (v4 & 0x10) != 0 || (v5 & 0x7F00) != 0 && (v5 & 7) == HIDWORD(v2) && (v5 & 0x10) != 0 ) { return 0; } v8 = 0; if ( (v6 & 0x7F00) == 0 || (v6 & 7) != HIDWORD(v2) || (v6 & 0x10) == 0 ) { if ( (v7 & 0x10) == 0 ) v8 = 10; if ( (v7 & 7) != HIDWORD(v2) ) v8 = 10; if ( (v7 & 0x7F00) == 0 ) return 10; } return v8; } /* ==== asd_foreach_dio_entry [tier=EXACT size=60] ==== */ // Walks the four 20-byte entries of the byte_D42614 table, calling sub_D15412 for each // entry whose preceding dword is non-zero; reports 27 if any call fails. int __fastcall asd_foreach_dio_entry(unsigned int a1) { int v2; // r5 unsigned int v3; // r7 char *v4; // r6 v2 = 0; v3 = 0; v4 = (char *)off_D157D8 + 4; while ( v3 != 4 ) { if ( *((_DWORD *)v4 - 1) != 0 && asd_link_call_D49810_D49814(a1, a2: v3, a3: (int)v4) != 0 ) v2 = 27; v4 += 20; ++v3; } if ( v2 != 0 ) return v2; else return asd_link_notify_D49810(a1); } /* ==== asd_foreach_dio_entry_v2 [tier=EXACT size=88] ==== */ // Walks the four 20-byte byte_D42614 entries, invoking asd_svc_sub_110EC with a 0x10-byte // record from dword_D1E350; reports 27 if any call fails. int __fastcall asd_foreach_dio_entry_v2() { int v0; // r4 int **v1; // r6 unsigned int v2; // r7 unsigned __int8 *v3; // r5 unsigned int v4; // r0 _DWORD *v6; // r0 v0 = 0; v1 = off_D157AC; v2 = 0; v3 = (unsigned __int8 *)off_D157D8 + 4; while ( v2 != 4 ) { if ( *((_DWORD *)v3 - 1) != 0 && asd_svc_sub_110EC(a1: v2, a2: v3, a3: 0x10u, a4: v1) != 0 ) v0 = 27; v3 += 20; ++v2; } if ( v0 == 0 ) { v4 = *((_DWORD *)off_D15AF0 + 19) - 20; if ( v4 > 0x17 || ((1 << v4) & dword_D157B0) == 0 ) { v6 = off_D157B4; *(_DWORD *)off_D157B4 = dword_D157B8; *v6 = 50331648; } } return v0; } /* ==== asd_foreach_dio_entry_v3 [tier=EXACT size=112] ==== */ // Walks the four 20-byte byte_D42614 entries, running GP crypto op 0x35 then dispatching // either asd_link_op_if_supported (when the ASIC id is in the 20..43 / 0xF7FEF5 set) or // asd_svc_sub_110EC. int __fastcall asd_foreach_dio_entry_v3() { int v0; // r4 char *v1; // r9 unsigned __int8 *v2; // r5 int **v3; // r8 unsigned int v4; // r7 int v5; // r11 unsigned int v6; // r0 int v7; // r0 int v8; // r6 v0 = 0; v1 = off_D14D68; v2 = (unsigned __int8 *)(dword_D142B0 + 4); v3 = off_D142B8; v4 = 0; v5 = dword_D142B4; while ( v4 != 4 ) { gp_crypto_op_0x35(); v6 = *((_DWORD *)v1 + 19) - 20; if ( v6 <= 0x17 && ((1 << v6) & v5) != 0 ) v7 = asd_link_op_if_supported(a1: v4, a2: (int)v2); else v7 = asd_svc_sub_110EC(a1: v4, a2: v2, a3: 0x10u, a4: v3); v8 = v7; bzero_core(result: (_DWORD *)v2 - 1, a2: 0x14u); if ( v8 != 0 ) v0 = 27; v2 += 20; ++v4; } return v0; } /* ==== asd_foreach_link_D15412 [tier=EXACT size=42] ==== */ // Iterates the two link instances, running sub_D15412(i, a1, a2) on each that passes the // feature-14 level check; stops at the first non-zero result. int __fastcall asd_foreach_link_D15412(unsigned int a1, int a2) { unsigned int i; // r6 int result; // r0 for ( i = 0; i != 2; ++i ) { if ( asd_feature_level_check(a1: 14, a2: i) != 0 ) { result = asd_link_call_D49810_D49814(a1: i, a2: a1, a3: a2); if ( result != 0 ) return result; } } return 0; } /* ==== asd_foreach_link_D15650 [tier=EXACT size=38] ==== */ // Iterates the two link instances, running sub_D15650(i, a1) on each that passes the // feature-14 level check; stops at the first non-zero result. int __fastcall asd_foreach_link_D15650(int a1) { unsigned int i; // r5 int result; // r0 for ( i = 0; i != 2; ++i ) { if ( asd_feature_level_check(a1: 14, a2: i) != 0 ) { result = asd_link_call_D49818(a1: i, a2: a1); if ( result != 0 ) return result; } } return 0; } /* ==== asd_foreach_link_active [tier=EXACT size=66] ==== */ // Feature-15 gated walk of the 64-entry x 96-byte link table based at 0xD42650: // for each entry with +0x04 non-zero and +0x08 == 1, invokes the optional callback // asd_opt_cb_D497F8. int __fastcall asd_foreach_link_active() { int v0; // r5 int i; // r4 void (*v2)(void); // r1 void (*v3)(void); // r0 if ( asd_feature_enabled(a1: 15) ) { v0 = dword_D10714; for ( i = 0; i != 6144; i += 96 ) { if ( *(_DWORD *)(v0 + i + 4) != 0 ) { if ( *(_DWORD *)(v0 + i + 8) == 1 ) { asd_opt_cb_D497F8(); } else { v2 = *(void (**)(void))(v0 + 6272); if ( v2 != nullptr ) v2(); v3 = *(void (**)(void))(v0 + 6220); if ( v3 != nullptr ) v3(); } } } } return 0; } /* ==== asd_foreach_link_cb_D49824 [tier=EXACT size=44] ==== */ // Bounds a1 <= 5 then walks dword_D26CA8 links, invoking the optional runtime callback // asd_opt_cb_D49824 for each link that asd_link_callback_ok accepts. int __fastcall asd_foreach_link_cb_D49824(unsigned int a1) { int *v1; // r5 unsigned int i; // r4 int result; // r0 if ( a1 > 5 ) return 2; v1 = off_D15C08; for ( i = 0; i < *v1; ++i ) { if ( asd_link_callback_ok(a1: i) ) { result = asd_opt_cb_D49824(); if ( result != 0 ) return result; } } return 0; } /* ==== asd_full_reset [tier=EXACT size=20] ==== */ // Clears dword_D33054, performs the global HDCP reset, then re-walks the active links. int __fastcall asd_full_reset() { *((_DWORD *)off_D147C0 + 1) = 0; asd_hdcp_reset_all(); return asd_foreach_link_active(); } /* ==== asd_fw_version_gated_stream_op [tier=EXACT size=30] ==== */ // Runs the firmware/ASIC version gate and, on success, tail-calls the stream operation at // 0xD17DFC. int __fastcall asd_fw_version_gated_stream_op(int a1, unsigned __int8 *a2, _BYTE *a3) { int result; // r0 result = asd_check_fw_version(); if ( result == 0 ) JUMPOUT(0xD17DFC); return result; } /* ==== asd_get_D49800 [tier=EXACT size=6] ==== */ // Accessor: returns the global unk_D49800. int __fastcall asd_get_D49800() { return *((_DWORD *)off_D18B60 + 8); } /* ==== asd_get_D49810 [tier=EXACT size=6] ==== */ // Accessor: returns the global unk_D49810. int __fastcall asd_get_D49810() { return *((_DWORD *)off_D18B60 + 12); } /* ==== asd_get_D49814 [tier=EXACT size=6] ==== */ // Accessor: returns the global unk_D49814. int __fastcall asd_get_D49814() { return *((_DWORD *)off_D18B60 + 13); } /* ==== asd_get_D49818 [tier=EXACT size=6] ==== */ // Accessor: returns the global unk_D49818. int __fastcall asd_get_D49818() { return *((_DWORD *)off_D18B60 + 14); } /* ==== asd_get_connector_ids_a [tier=EXACT size=144] ==== */ // Returns two connector ids (defaulting to 255) resolved from the descriptor fields, // reading register unk_D425EC when the selector is 1. int __fastcall asd_get_connector_ids_a(_DWORD *a1, int *a2, int *a3) { _DWORD *v5; // r1 int v6; // r1 int v8; // r8 int v9; // r7 unsigned int _140AC; // r0 int result; // r0 int v12; // r2 int v13; // r0 __int64 v14; // r0 int v15; // r0 *a2 = 255; v5 = off_D06FEC; *a3 = 255; if ( v5[7] <= a1[11] ) return 2; v6 = a1[13]; v8 = a1[10]; v9 = a1[5]; if ( v6 == 1 ) { _140AC = asd_reg_read_140AC(a1: *((_DWORD *)off_D072C4 + 125), a2: a1[14], (__int16)a3); v6 = a1[13]; } else { _140AC = 0; } v12 = _140AC & 3; *a2 = v12; if ( v6 == 2 ) return 0; if ( v12 == 2 ) { v13 = (_140AC >> 8) & 7; *a3 = v13; LODWORD(v14) = v13 ^ v9; HIDWORD(v14) = v8 ^ 0x30; return 2 * (v14 != 0); } if ( v12 == 1 ) { v15 = (_140AC >> 4) & 7; *a3 = v15; LODWORD(v14) = v15 ^ v9; HIDWORD(v14) = v8 ^ 0x20; return 2 * (v14 != 0); } if ( (_140AC & 3) != 0 ) return 31; result = v8 - 16; if ( v8 != 16 ) return 31; return result; } /* ==== asd_get_connector_ids_b [tier=EXACT size=144] ==== */ // Sibling of asd_get_connector_ids_a using register unk_D425F4. int __fastcall asd_get_connector_ids_b(_DWORD *a1, int *a2, int *a3) { _DWORD *v5; // r1 int v6; // r1 int v8; // r8 int v9; // r7 unsigned int _140AC; // r0 int result; // r0 int v12; // r2 int v13; // r0 __int64 v14; // r0 int v15; // r0 *a2 = 255; v5 = off_D072EC; *a3 = 255; if ( v5[7] <= a1[11] ) return 2; v6 = a1[13]; v8 = a1[10]; v9 = a1[5]; if ( v6 == 1 ) { _140AC = asd_reg_read_140AC(a1: *((_DWORD *)off_D07360 + 127), a2: a1[14], (__int16)a3); v6 = a1[13]; } else { _140AC = 0; } v12 = _140AC & 3; *a2 = v12; if ( v6 == 2 ) return 0; if ( v12 == 2 ) { v13 = (_140AC >> 8) & 7; *a3 = v13; LODWORD(v14) = v13 ^ v9; HIDWORD(v14) = v8 ^ 0x30; return 2 * (v14 != 0); } if ( v12 == 1 ) { v15 = (_140AC >> 4) & 7; *a3 = v15; LODWORD(v14) = v15 ^ v9; HIDWORD(v14) = v8 ^ 0x20; return 2 * (v14 != 0); } if ( (_140AC & 3) != 0 ) return 31; result = v8 - 16; if ( v8 != 16 ) return 31; return result; } /* ==== asd_get_key_words [tier=EXACT size=152] ==== */ // Maps a signal/key class (e.g. 48) to a word count plus the register constants held in // unk_D4252C/30/34... int __fastcall asd_get_key_words(int a1, _DWORD *a2) { int result; // r0 _DWORD *v4; // r2 int v5; // r2 _DWORD *v6; // r2 int v7; // r0 _DWORD *v8; // r0 if ( a2 == nullptr ) return 2; result = 2; switch ( a1 ) { case 48: v6 = off_D09594; *a2 = 2; a2[1] = v6[77]; a2[2] = v6[78]; a2[3] = v6[79]; a2[4] = v6[80]; a2[5] = v6[81]; v7 = v6[82]; LABEL_9: a2[6] = v7; return 0; case 32: v8 = off_D09594; a2[1] = *((_DWORD *)off_D09594 + 69); a2[2] = v8[70]; a2[3] = v8[71]; a2[4] = v8[72]; a2[5] = v8[73]; *a2 = 1; v7 = v8[74]; goto LABEL_9; case 16: v4 = off_D09594; a2[1] = *((_DWORD *)off_D09594 + 61); a2[2] = v4[62]; a2[3] = v4[63]; a2[4] = v4[64]; a2[5] = v4[65]; v5 = v4[66]; *a2 = 0; a2[6] = v5; return 0; default: break; } return result; } /* ==== asd_get_lane_count [tier=EXACT size=88] ==== */ // Maps mode 29 -> 4 and mode 30 -> 8 (else 0), queries sub_D10D08, and returns 4 plus // twice the resulting lane count. int __fastcall asd_get_lane_count(_DWORD *a1, int a2) { int v3; // r0 int v4; // r0 _QWORD *v5; // r1 __int64 *v6; // r2 _BYTE *v7; // r3 __int64 v8; // r4 int v10; // [sp+4h] [bp-84h] BYREF _BYTE v11[64]; // [sp+8h] [bp-80h] BYREF _BYTE v12[64]; // [sp+48h] [bp-40h] BYREF v10 = 0; v3 = 8 * (a2 == 30); if ( a2 == 29 ) v3 = 4; asd_build_reg_addr_table(a1: v3, a2: (int)v12, a3: (int)v11, a4: &v10); if ( v10 < 0 ) return 2; v4 = 2 * v10; *a1 = 4; a1[1] = v4; v5 = a1 + 2; v6 = (__int64 *)v12; v7 = v11; while ( v4 != 0 ) { v8 = *v6; v7 += 4; --v4; v6 = (__int64 *)((char *)v6 + 4); *v5++ = v8; } return 0; } /* ==== asd_get_link_caps [tier=EXACT size=98] ==== */ // Feature-15 gated, link bounded to 0x3F and required active. Consults the runtime // callbacks dword_D44118 (presence, status 17) and dword_D44138 before falling back to // the cached value at unk_D428D0[24*idx]. int __fastcall asd_get_link_caps(unsigned int a1, _DWORD *a2) { int v4; // r7 _DWORD *v5; // r6 int (__fastcall *v6)(unsigned int); // r1 int (__fastcall *v8)(unsigned int, _DWORD *); // r2 *a2 = 0; if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3F ) return 5; v4 = dword_D115E0; v5 = (_DWORD *)(dword_D115E0 + 96 * a1); if ( v5[1] != 1 ) return 5; if ( v5[2] == 0 ) { v6 = *(int (__fastcall **)(unsigned int))(dword_D115E0 + 6280); if ( v6 != nullptr && v6(a1: dword_D115E0 + 96 * a1) != 0 ) return 17; } v8 = *(int (__fastcall **)(unsigned int, _DWORD *))(v4 + 6312); if ( v8 != nullptr && v5[8] != 0 ) return v8(a1, a2); *a2 = v5[16]; return 0; } /* ==== asd_get_link_caps_full [tier=EXACT size=696] ==== */ // Fills the caller's capability struct from the unk_D42344/D4234C/qword_D42350 globals // after zeroing a 0x24-byte scratch descriptor. int __fastcall asd_get_link_caps_full(struct asd_link_caps *a1) { _DWORD *v2; // r4 int v3; // r11 int *v4; // r9 unsigned int v5; // r5 unsigned int v6; // r6 unsigned int v7; // r0 __int64 v8; // r2 int v9; // r1 int _13B74; // r0 __int16 v11; // r7 int v12; // r1 __int16 v13; // r2 char v14; // r0 char *v15; // r1 bool v16; // zf int v17; // r0 unsigned int v18; // r0 unsigned int *v19; // r0 int v20; // r1 struct asd_link_caps *field0C; // r2 unsigned int v22; // r6 int v23; // r3 int v24; // r0 unsigned int *v25; // r1 unsigned int v26; // r5 unsigned int v27; // r6 char *v28; // r0 int *v29; // r7 int v30; // r0 int v31; // r1 __int16 v32; // r2 unsigned int **p_field18; // r6 unsigned int i; // r5 unsigned int v35; // r0 __int16 v36; // r2 int v37; // r0 int v38; // r1 __int16 v39; // r2 __int16 v40; // r2 int v41; // r0 int v42; // r1 __int16 v43; // r2 __int16 v44; // r2 unsigned int v45; // r0 int v46; // r5 struct asd_link_caps **v47; // r1 unsigned int v48; // r11 unsigned int v49; // r6 unsigned int p_field20; // r0 __int16 v51; // r2 int v52; // r7 unsigned int *v53; // r1 unsigned int *v54; // r12 _DWORD *v55; // lr unsigned int *v56; // r3 _DWORD v58[9]; // [sp+8h] [bp-24h] BYREF bzero_core(result: v58, a2: 0x24u); if ( a1 == nullptr ) return 2; v2 = off_D0B818; v3 = 0; v4 = (int *)off_D0BFB4; v5 = 0; v6 = 0; v7 = *((_DWORD *)off_D0B818 + 3); v8 = *((_QWORD *)off_D0B818 + 2); a1->unk00 = *((_DWORD *)off_D0B818 + 1); a1->field04 = v7; *(_QWORD *)&a1->field08 = v8; a1->field10 = v2[6]; a1->field14 = v2[7]; a1->field18 = v2[8]; v9 = v2[9]; a1->field1C = v9; while ( v6 < v7 ) { if ( asd_reg_read_11B00(a1: v7, a2: v9, a3: v8) == 0 ) return 44; _13B74 = asd_reg_read_13B74(a1: 0, a2: v4[1], a3: v6); v11 = _13B74; if ( asd_reg_read_11B00(a1: _13B74, a2: v12, a3: v13) == 0 ) return 44; v14 = asd_reg_read_13B74(a1: 0, a2: *v4, a3: v6); v15 = (char *)a1 + 8 * v6; v16 = v5 == 8; *((_DWORD *)v15 + 8) = (v11 & 0x800) != 0; *((_DWORD *)v15 + 9) = v14 & 7; if ( v5 <= 8 ) v16 = (v11 & 0x800) == 0; if ( v16 ) v58[v5++] = v6; v17 = asd_opt_cb_D423E4(a1: v6); if ( v17 != 0 ) { if ( asd_reg_read_11B00(a1: v17, a2: v9, a3: v8) == 0 ) return 44; v18 = asd_reg_read_13B74(a1: 0, a2: v4[2], a3: v6); v9 = (int)a1 + 4 * v6; *(_DWORD *)(v9 + 104) = (v18 >> 8) & 0x7F; if ( *(unsigned __int8 *)v2 << 31 == 0 ) { if ( asd_reg_read_11B00(a1: 0, a2: v9, a3: v8) == 0 ) return 44; if ( asd_link_status_query(a1: v6) == 0 ) { v19 = &a1->unk00 + v3; v9 = 1; v19[89] = 1; v19[90] = v6; } } } v3 += 3; v7 = v2[3]; ++v6; } v20 = 0; LOWORD(field0C) = 1; while ( v20 != v5 ) { v22 = 0; v23 = ~(1 << (v58[v20] & 0x1F)); while ( v22 < v2[3] ) *(&a1[2].field18 + v22++) &= v23; ++v20; } v24 = v2[7]; v25 = v2 + 4; v26 = v2[3]; if ( v24 == 0 ) v25 = v2 + 2; v27 = *v25; if ( v24 != 0 ) v26 = 0; v28 = (char *)a1 + 24 * v26; v29 = (int *)(v28 + 140); while ( v26 < v27 ) { if ( asd_reg_read_11BE4(a1: (int)v28, a2: (int)v25, a3: (__int16)field0C) == 0 ) return 44; v30 = asd_reg_read_13B74(a1: 1, a2: v4[84], a3: v26) & 1; *v29 = v30; if ( asd_reg_read_11BE4(a1: v30, a2: v31, a3: v32) == 0 ) return 44; v28 = (char *)(asd_reg_read_13B74(a1: 1, a2: v4[85], a3: v26) & 7); v29[1] = (int)v28; v29[2] = v26; v29 += 6; ++v26; } p_field18 = (unsigned int **)&a1[11].field18; for ( i = 0; ; ++i ) { v35 = v2[6]; if ( i >= v35 ) break; if ( asd_reg_read_11BE4(a1: v35, a2: (int)v25, a3: (__int16)field0C) == 0 ) return 44; v37 = asd_reg_read_13BF8(a1: v4[105], a2: i, a3: v36) & 1; *p_field18 = (unsigned int *)v37; if ( asd_reg_read_11BE4(a1: v37, a2: v38, a3: v39) == 0 ) return 44; v41 = asd_reg_read_13BF8(a1: v4[55], a2: i, a3: v40) & 7; p_field18[1] = (unsigned int *)v41; if ( asd_reg_read_11BE4(a1: v41, a2: v42, a3: v43) == 0 ) return 44; v45 = asd_reg_read_13C68(a1: v4[56], a2: i, a3: v44) & 7; p_field18[2] = (unsigned int *)v45; if ( v45 >= a1->field0C ) return 2; v25 = *p_field18; p_field18 += 3; if ( v25 == (unsigned int *)1 ) { v25 = (unsigned int *)(1 << i); *(&a1[14].field0C + 4 * v45) = 1 << i; } } v46 = 2; v47 = (struct asd_link_caps **)v2[9]; v48 = v2[7] - (_DWORD)v47; if ( v48 <= 5 ) { v49 = 0; p_field20 = (unsigned int)&a1[11].field20; while ( v49 != v48 ) { if ( asd_reg_read_11B00(a1: p_field20, a2: (int)v47, a3: (__int16)field0C) == 0 ) return 44; p_field20 = asd_reg_read_140AC(a1: v4[127], a2: v49, a3: v51); v47 = (struct asd_link_caps **)(p_field20 & 3); if ( v47 == (struct asd_link_caps **)2 ) { p_field20 = (p_field20 >> 8) & 7; v52 = v2[6]; v53 = &a1->unk00 + 4 * p_field20; v54 = v53 + 144; v55 = v53 + 146; v56 = v53 + 145; v47 = (struct asd_link_caps **)&a1[11].field20; while ( v52 != 0 ) { field0C = *v47; if ( *v47 == (struct asd_link_caps *)p_field20 ) { field0C = (struct asd_link_caps *)a1->field0C; if ( p_field20 >= (unsigned int)field0C ) return 2; *v55 = 2; *v56 = v49; *v54 = p_field20; } v47 += 3; --v52; } } else if ( v47 == (struct asd_link_caps **)1 ) { p_field20 = (p_field20 >> 4) & 7; v47 = (struct asd_link_caps **)v2[4]; field0C = a1 + 4; while ( v47 != nullptr ) { v47 = (struct asd_link_caps **)((char *)v47 - 1); if ( field0C[-1].field1C == p_field20 ) { field0C[-1].field20 = v49; field0C[-1].field24 = p_field20; field0C->unk00 = 1; } field0C = (struct asd_link_caps *)((char *)field0C + 24); } } ++v49; } return 0; } return v46; } /* ==== asd_get_link_caps_full_v2 [tier=EXACT size=764] ==== */ // Link capability fill variant: copies unk_D42344 / unk_D4234C / qword_D42350 and the // per-link descriptors into the caller's struct. int __fastcall asd_get_link_caps_full_v2(struct asd_link_caps *a1) { _DWORD *v2; // r7 int v3; // r4 int *v4; // r8 unsigned int v5; // r5 unsigned int v6; // r6 unsigned int v7; // r0 __int64 v8; // r2 int _13B74; // r0 char *v10; // r2 bool v11; // zf int (__fastcall *v12)(unsigned int); // r1 char *v13; // r0 int v14; // r1 unsigned int field0C; // r2 unsigned int v16; // r4 int v17; // r3 int v18; // r0 unsigned int *v19; // r1 unsigned int v20; // r5 unsigned int v21; // r4 int *v22; // r6 unsigned int **p_field18; // r4 unsigned int i; // r5 __int16 v25; // r2 __int16 v26; // r2 unsigned int v27; // r0 char _13AC4; // r0 int v29; // r11 unsigned int j; // r9 unsigned int _140AC; // r0 unsigned int v32; // r1 int v33; // r0 struct asd_link_caps *v34; // r3 unsigned int v35; // r1 unsigned int v36; // r0 int v37; // r5 unsigned int *p_field20; // r6 unsigned int *v39; // r4 unsigned int *v40; // r12 _DWORD *v41; // r3 unsigned int *v42; // r4 unsigned int *p_field24; // r4 unsigned int k; // r5 unsigned int _13D9C; // r0 unsigned int v46; // r1 BOOL v48; // [sp+Ch] [bp-30h] BOOL v49; // [sp+10h] [bp-2Ch] unsigned int v50; // [sp+14h] [bp-28h] _DWORD v51[9]; // [sp+18h] [bp-24h] BYREF bzero_core(result: v51, a2: 0x24u); if ( a1 == nullptr ) return 2; v2 = off_D0B240; v3 = 0; v4 = (int *)off_D0BF24; v5 = 0; v6 = 0; v7 = *((_DWORD *)off_D0B240 + 3); v8 = *((_QWORD *)off_D0B240 + 2); a1->unk00 = *((_DWORD *)off_D0B240 + 1); a1->field04 = v7; *(_QWORD *)&a1->field08 = v8; a1->field10 = v2[6]; a1->field14 = v2[7]; a1->field18 = v2[8]; a1->field1C = v2[9]; while ( v6 < v7 ) { _13B74 = asd_reg_read_13B74(a1: 0, a2: *v4, a3: v6); v10 = (char *)a1 + 8 * v6; v11 = v5 == 8; *((_DWORD *)v10 + 9) = _13B74 & 7; *((_DWORD *)v10 + 8) = (_13B74 & 0x1000000) != 0; if ( v5 <= 8 ) v11 = (_13B74 & 0x1000000) == 0; if ( v11 ) v51[v5++] = v6; v12 = (int (__fastcall *)(unsigned int))v2[41]; if ( v12 == nullptr || v12(a1: v6) != 0 ) { *(&a1[2].field18 + v6) = ((unsigned int)asd_reg_read_13B74(a1: 0, a2: v4[2], a3: v6) >> 8) & 0x7F; if ( *(unsigned __int8 *)v2 << 31 == 0 && asd_link_ready_check(a1: v6) == 0 ) { v13 = (char *)a1 + 2 * v3; *((_DWORD *)v13 + 89) = 1; *((_DWORD *)v13 + 90) = v6; } } v3 += 6; v7 = v2[3]; ++v6; } v14 = 0; LOWORD(field0C) = 1; while ( v14 != v5 ) { v16 = 0; v17 = ~(1 << (v51[v14] & 0x1F)); while ( v16 < v2[3] ) *(&a1[2].field18 + v16++) &= v17; ++v14; } v18 = v2[7]; v19 = v2 + 4; v20 = v2[3]; if ( v18 == 0 ) v19 = v2 + 2; v21 = *v19; if ( v18 != 0 ) v20 = 0; v22 = (int *)(&a1[3].field14 + 6 * v20); while ( v20 < v21 ) { *v22 = asd_reg_read_13B74(a1: 1, a2: v4[84], a3: v20) & 1; v22[1] = asd_reg_read_13B74(a1: 1, a2: v4[85], a3: v20) & 7; v22[2] = v20; v22 += 6; ++v20; } p_field18 = (unsigned int **)&a1[11].field18; for ( i = 0; i < v2[6]; ++i ) { *p_field18 = (unsigned int *)(asd_reg_read_13BF8(a1: v4[105], a2: i, a3: field0C) & 1); p_field18[1] = (unsigned int *)(asd_reg_read_13BF8(a1: v4[55], a2: i, a3: v25) & 7); v27 = asd_reg_read_13C68(a1: v4[56], a2: i, a3: v26) & 7; p_field18[2] = (unsigned int *)v27; if ( v27 >= a1->field0C ) return 2; v19 = *p_field18; p_field18 += 3; if ( v19 == (unsigned int *)1 ) { v19 = (unsigned int *)(1 << (i & 0x1F)); *(&a1[14].field0C + 4 * v27) = (unsigned int)v19; } } if ( a1->field1C != 0 ) { _13AC4 = asd_reg_read_13AC4(a1: v4[112], a2: (int)v19, a3: field0C); v48 = (_13AC4 & 8) != 0; v49 = (_13AC4 & 4) != 0; } else { v49 = false; v48 = false; } v29 = 2; v50 = v2[7] - v2[9]; if ( v50 <= 5 ) { for ( j = 0; j != v50; ++j ) { _140AC = asd_reg_read_140AC(a1: v4[125], a2: j, a3: field0C); if ( (_140AC & 3) == 2 ) { LOWORD(field0C) = j + 3; v35 = j; if ( (j ^ 3 | !v48) == 0 ) v35 = j + 3; if ( (j ^ 2 | !v49) == 0 ) v35 = j + 3; v36 = (_140AC >> 8) & 7; v37 = v2[6]; p_field20 = &a1[11].field20; v39 = &a1->unk00 + 4 * v36; v40 = v39 + 144; v41 = v39 + 146; v42 = v39 + 145; while ( v37 != 0 ) { field0C = *p_field20; if ( *p_field20 == v36 ) { field0C = a1->field0C; if ( v36 >= field0C ) return 2; *v41 = 2; *v42 = v35; *v40 = v36; } p_field20 += 3; --v37; } } else if ( (_140AC & 3) == 1 ) { v32 = j; if ( (j ^ 3 | !v48) == 0 ) v32 = j + 3; if ( (j ^ 2 | !v49) == 0 ) v32 = j + 3; v33 = (_140AC >> 4) & 7; field0C = v2[4]; v34 = a1 + 4; while ( field0C != 0 ) { --field0C; if ( v34[-1].field1C == v33 ) { v34[-1].field20 = v32; v34[-1].field24 = v33; v34->unk00 = 1; } v34 = (struct asd_link_caps *)((char *)v34 + 24); } } } p_field24 = &a1[17].field24; for ( k = 0; k < v2[8]; ++k ) { _13D9C = asd_reg_read_13D9C(a1: v4[111], a2: k, a3: field0C); v46 = (_13D9C >> 8) & 0xF; field0C = a1->field04; if ( field0C < v46 ) return 2; *p_field24 = _13D9C & 1; p_field24[1] = v46; p_field24[2] = k; p_field24 += 3; } return 0; } return v29; } /* ==== asd_get_link_caps_full_v3 [tier=EXACT size=784] ==== */ // Link capability fill variant (third ASIC form). int __fastcall asd_get_link_caps_full_v3(struct asd_link_caps *a1) { _DWORD *v2; // r4 int v3; // r5 int *v4; // r9 unsigned int v5; // r11 unsigned int v6; // r6 unsigned int v7; // r0 __int64 v8; // r2 int v9; // r1 int v10; // r0 int _13B74; // r0 __int16 v12; // r7 int v13; // r1 __int16 v14; // r2 char v15; // r0 char *v16; // r1 bool v17; // zf int v18; // r0 unsigned int v19; // r0 char *v20; // r0 int v21; // r1 struct asd_link_caps *field0C; // r2 unsigned int v23; // r5 int v24; // r3 int v25; // r0 unsigned int *v26; // r1 unsigned int v27; // r5 unsigned int v28; // r6 char *v29; // r0 int *v30; // r7 int v31; // r0 int v32; // r1 __int16 v33; // r2 unsigned int **p_field18; // r6 unsigned int i; // r5 unsigned int v36; // r0 __int16 v37; // r2 int v38; // r0 int v39; // r1 __int16 v40; // r2 __int16 v41; // r2 int v42; // r0 int v43; // r1 __int16 v44; // r2 __int16 v45; // r2 unsigned int v46; // r0 int v47; // r5 struct asd_link_caps **v48; // r1 unsigned int v49; // r11 unsigned int v50; // r6 unsigned int p_field20; // r0 __int16 v52; // r2 int v53; // r7 unsigned int *v54; // r1 unsigned int *v55; // r12 _DWORD *v56; // lr unsigned int *v57; // r3 unsigned int *p_field24; // r6 unsigned int j; // r5 unsigned int v60; // r0 __int16 v61; // r2 unsigned int _13D9C; // r0 _DWORD v64[9]; // [sp+8h] [bp-24h] BYREF bzero_core(result: v64, a2: 0x24u); if ( a1 == nullptr ) return 2; v2 = off_D0B558; v3 = 0; v4 = (int *)off_D0BFB4; v5 = 0; v6 = 0; v7 = *((_DWORD *)off_D0B558 + 3); v8 = *((_QWORD *)off_D0B558 + 2); a1->unk00 = *((_DWORD *)off_D0B558 + 1); a1->field04 = v7; *(_QWORD *)&a1->field08 = v8; a1->field10 = v2[6]; a1->field14 = v2[7]; a1->field18 = v2[8]; v9 = v2[9]; a1->field1C = v9; while ( v6 < v7 ) { v10 = *(_DWORD *)(dword_D0B55C + 8 * v3 + 92); if ( v10 == 1 ) { v10 = asd_reg_read_13D24(a1: v4[43], a2: v6, a3: v8) << 31; if ( v10 == 0 ) return 44; } if ( asd_reg_read_11B00(a1: v10, a2: v9, a3: v8) == 0 ) return 44; _13B74 = asd_reg_read_13B74(a1: 0, a2: v4[1], a3: v6); v12 = _13B74; if ( asd_reg_read_11B00(a1: _13B74, a2: v13, a3: v14) == 0 ) return 44; v15 = asd_reg_read_13B74(a1: 0, a2: *v4, a3: v6); v16 = (char *)a1 + 8 * v6; v17 = v5 == 8; *((_DWORD *)v16 + 8) = (v12 & 0x800) != 0; *((_DWORD *)v16 + 9) = v15 & 7; if ( v5 <= 8 ) v17 = (v12 & 0x800) == 0; if ( v17 ) v64[v5++] = v6; v18 = asd_opt_cb_D423E4(a1: v6); if ( v18 != 0 ) { if ( asd_reg_read_11B00(a1: v18, a2: v9, a3: v8) == 0 ) return 44; v19 = asd_reg_read_13B74(a1: 0, a2: v4[2], a3: v6); v9 = (int)a1 + 4 * v6; *(_DWORD *)(v9 + 104) = (v19 >> 8) & 0x7F; if ( *(unsigned __int8 *)v2 << 31 == 0 ) { if ( asd_reg_read_11B00(a1: 0, a2: v9, a3: v8) == 0 ) return 44; if ( asd_link_status_query(a1: v6) == 0 ) { v20 = (char *)a1 + v3; v9 = 1; *((_DWORD *)v20 + 89) = 1; *((_DWORD *)v20 + 90) = v6; } } } v3 += 12; v7 = v2[3]; ++v6; } v21 = 0; LOWORD(field0C) = 1; while ( v21 != v5 ) { v23 = 0; v24 = ~(1 << (v64[v21] & 0x1F)); while ( v23 < v2[3] ) *(&a1[2].field18 + v23++) &= v24; ++v21; } v25 = v2[7]; v26 = v2 + 4; v27 = v2[3]; if ( v25 == 0 ) v26 = v2 + 2; v28 = *v26; if ( v25 != 0 ) v27 = 0; v29 = (char *)a1 + 24 * v27; v30 = (int *)(v29 + 140); while ( v27 < v28 ) { if ( asd_reg_read_11BE4(a1: (int)v29, a2: (int)v26, a3: (__int16)field0C) == 0 ) return 44; v31 = asd_reg_read_13B74(a1: 1, a2: v4[84], a3: v27) & 1; *v30 = v31; if ( asd_reg_read_11BE4(a1: v31, a2: v32, a3: v33) == 0 ) return 44; v29 = (char *)(asd_reg_read_13B74(a1: 1, a2: v4[85], a3: v27) & 7); v30[1] = (int)v29; v30[2] = v27; v30 += 6; ++v27; } p_field18 = (unsigned int **)&a1[11].field18; for ( i = 0; ; ++i ) { v36 = v2[6]; if ( i >= v36 ) break; if ( asd_reg_read_11BE4(a1: v36, a2: (int)v26, a3: (__int16)field0C) == 0 ) return 44; v38 = asd_reg_read_13BF8(a1: v4[105], a2: i, a3: v37) & 1; *p_field18 = (unsigned int *)v38; if ( asd_reg_read_11BE4(a1: v38, a2: v39, a3: v40) == 0 ) return 44; v42 = asd_reg_read_13BF8(a1: v4[55], a2: i, a3: v41) & 7; p_field18[1] = (unsigned int *)v42; if ( asd_reg_read_11BE4(a1: v42, a2: v43, a3: v44) == 0 ) return 44; v46 = asd_reg_read_13C68(a1: v4[56], a2: i, a3: v45) & 7; p_field18[2] = (unsigned int *)v46; if ( v46 >= a1->field0C ) return 2; v26 = *p_field18; p_field18 += 3; if ( v26 == (unsigned int *)1 ) { v26 = (unsigned int *)(1 << i); *(&a1[14].field0C + 4 * v46) = 1 << i; } } v47 = 2; v48 = (struct asd_link_caps **)v2[9]; v49 = v2[7] - (_DWORD)v48; if ( v49 <= 5 ) { v50 = 0; p_field20 = (unsigned int)&a1[11].field20; while ( v50 != v49 ) { if ( asd_reg_read_11B00(a1: p_field20, a2: (int)v48, a3: (__int16)field0C) == 0 ) return 44; p_field20 = asd_reg_read_140AC(a1: v4[125], a2: v50, a3: v52); v48 = (struct asd_link_caps **)(p_field20 & 3); if ( v48 == (struct asd_link_caps **)2 ) { p_field20 = (p_field20 >> 8) & 7; v53 = v2[6]; v54 = &a1->unk00 + 4 * p_field20; v55 = v54 + 144; v56 = v54 + 146; v57 = v54 + 145; v48 = (struct asd_link_caps **)&a1[11].field20; while ( v53 != 0 ) { field0C = *v48; if ( *v48 == (struct asd_link_caps *)p_field20 ) { field0C = (struct asd_link_caps *)a1->field0C; if ( p_field20 >= (unsigned int)field0C ) return 2; *v56 = 2; *v57 = v50; *v55 = p_field20; } v48 += 3; --v53; } } else if ( v48 == (struct asd_link_caps **)1 ) { p_field20 = (p_field20 >> 4) & 7; v48 = (struct asd_link_caps **)v2[4]; field0C = a1 + 4; while ( v48 != nullptr ) { v48 = (struct asd_link_caps **)((char *)v48 - 1); if ( field0C[-1].field1C == p_field20 ) { field0C[-1].field20 = v50; field0C[-1].field24 = p_field20; field0C->unk00 = 1; } field0C = (struct asd_link_caps *)((char *)field0C + 24); } } ++v50; } p_field24 = &a1[17].field24; for ( j = 0; ; ++j ) { v60 = v2[8]; if ( j >= v60 ) break; if ( asd_reg_read_11B00(a1: v60, a2: (int)v48, a3: (__int16)field0C) == 0 ) return 44; _13D9C = asd_reg_read_13D9C(a1: v4[111], a2: j, a3: v61); v48 = (struct asd_link_caps **)((_13D9C >> 8) & 0xF); field0C = (struct asd_link_caps *)a1->field04; if ( field0C < (struct asd_link_caps *)v48 ) return 2; *p_field24 = _13D9C & 1; p_field24[1] = (unsigned int)v48; p_field24[2] = j; p_field24 += 3; } return 0; } return v47; } /* ==== asd_get_link_caps_full_v4 [tier=EXACT size=754] ==== */ // Link capability fill variant (fourth ASIC form). int __fastcall asd_get_link_caps_full_v4(struct asd_link_caps *a1) { _DWORD *v2; // r4 int v3; // r11 int *v4; // r9 unsigned int v5; // r5 unsigned int v6; // r6 unsigned int v7; // r0 __int64 v8; // r2 int v9; // r1 int _13B74; // r0 __int16 v11; // r7 int v12; // r1 __int16 v13; // r2 char v14; // r0 char *v15; // r1 bool v16; // zf int v17; // r0 unsigned int v18; // r0 unsigned int *v19; // r0 int v20; // r1 struct asd_link_caps *field0C; // r2 unsigned int v22; // r6 int v23; // r3 int v24; // r0 unsigned int *v25; // r1 unsigned int v26; // r5 unsigned int v27; // r6 char *v28; // r0 int *v29; // r7 int v30; // r0 int v31; // r1 __int16 v32; // r2 unsigned int **p_field18; // r6 unsigned int i; // r5 unsigned int v35; // r0 __int16 v36; // r2 int v37; // r0 int v38; // r1 __int16 v39; // r2 __int16 v40; // r2 int v41; // r0 int v42; // r1 __int16 v43; // r2 __int16 v44; // r2 unsigned int v45; // r0 int v46; // r5 struct asd_link_caps **v47; // r1 unsigned int v48; // r11 unsigned int v49; // r6 unsigned int p_field20; // r0 __int16 v51; // r2 int v52; // r7 unsigned int *v53; // r1 unsigned int *v54; // r12 _DWORD *v55; // lr unsigned int *v56; // r3 unsigned int *p_field24; // r6 unsigned int j; // r5 unsigned int v59; // r0 __int16 v60; // r2 unsigned int _13D9C; // r0 _DWORD v63[9]; // [sp+8h] [bp-24h] BYREF bzero_core(result: v63, a2: 0x24u); if ( a1 == nullptr ) return 2; v2 = off_D0BB10; v3 = 0; v4 = (int *)off_D0BFB4; v5 = 0; v6 = 0; v7 = *((_DWORD *)off_D0BB10 + 3); v8 = *((_QWORD *)off_D0BB10 + 2); a1->unk00 = *((_DWORD *)off_D0BB10 + 1); a1->field04 = v7; *(_QWORD *)&a1->field08 = v8; a1->field10 = v2[6]; a1->field14 = v2[7]; a1->field18 = v2[8]; v9 = v2[9]; a1->field1C = v9; while ( v6 < v7 ) { if ( asd_reg_read_11B00(a1: v7, a2: v9, a3: v8) == 0 ) return 44; _13B74 = asd_reg_read_13B74(a1: 0, a2: v4[1], a3: v6); v11 = _13B74; if ( asd_reg_read_11B00(a1: _13B74, a2: v12, a3: v13) == 0 ) return 44; v14 = asd_reg_read_13B74(a1: 0, a2: *v4, a3: v6); v15 = (char *)a1 + 8 * v6; v16 = v5 == 8; *((_DWORD *)v15 + 8) = (v11 & 0x800) != 0; *((_DWORD *)v15 + 9) = v14 & 7; if ( v5 <= 8 ) v16 = (v11 & 0x800) == 0; if ( v16 ) v63[v5++] = v6; v17 = asd_opt_cb_D423E4(a1: v6); if ( v17 != 0 ) { if ( asd_reg_read_11B00(a1: v17, a2: v9, a3: v8) == 0 ) return 44; v18 = asd_reg_read_13B74(a1: 0, a2: v4[2], a3: v6); v9 = (int)a1 + 4 * v6; *(_DWORD *)(v9 + 104) = (v18 >> 8) & 0x7F; if ( *(unsigned __int8 *)v2 << 31 == 0 ) { if ( asd_reg_read_11B00(a1: 0, a2: v9, a3: v8) == 0 ) return 44; if ( asd_link_status_query(a1: v6) == 0 ) { v19 = &a1->unk00 + v3; v9 = 1; v19[89] = 1; v19[90] = v6; } } } v3 += 3; v7 = v2[3]; ++v6; } v20 = 0; LOWORD(field0C) = 1; while ( v20 != v5 ) { v22 = 0; v23 = ~(1 << (v63[v20] & 0x1F)); while ( v22 < v2[3] ) *(&a1[2].field18 + v22++) &= v23; ++v20; } v24 = v2[7]; v25 = v2 + 4; v26 = v2[3]; if ( v24 == 0 ) v25 = v2 + 2; v27 = *v25; if ( v24 != 0 ) v26 = 0; v28 = (char *)a1 + 24 * v26; v29 = (int *)(v28 + 140); while ( v26 < v27 ) { if ( asd_reg_read_11BE4(a1: (int)v28, a2: (int)v25, a3: (__int16)field0C) == 0 ) return 44; v30 = asd_reg_read_13B74(a1: 1, a2: v4[84], a3: v26) & 1; *v29 = v30; if ( asd_reg_read_11BE4(a1: v30, a2: v31, a3: v32) == 0 ) return 44; v28 = (char *)(asd_reg_read_13B74(a1: 1, a2: v4[85], a3: v26) & 7); v29[1] = (int)v28; v29[2] = v26; v29 += 6; ++v26; } p_field18 = (unsigned int **)&a1[11].field18; for ( i = 0; ; ++i ) { v35 = v2[6]; if ( i >= v35 ) break; if ( asd_reg_read_11BE4(a1: v35, a2: (int)v25, a3: (__int16)field0C) == 0 ) return 44; v37 = asd_reg_read_13BF8(a1: v4[105], a2: i, a3: v36) & 1; *p_field18 = (unsigned int *)v37; if ( asd_reg_read_11BE4(a1: v37, a2: v38, a3: v39) == 0 ) return 44; v41 = asd_reg_read_13BF8(a1: v4[55], a2: i, a3: v40) & 7; p_field18[1] = (unsigned int *)v41; if ( asd_reg_read_11BE4(a1: v41, a2: v42, a3: v43) == 0 ) return 44; v45 = asd_reg_read_13C68(a1: v4[56], a2: i, a3: v44) & 7; p_field18[2] = (unsigned int *)v45; if ( v45 >= a1->field0C ) return 2; v25 = *p_field18; p_field18 += 3; if ( v25 == (unsigned int *)1 ) { v25 = (unsigned int *)(1 << i); *(&a1[14].field0C + 4 * v45) = 1 << i; } } v46 = 2; v47 = (struct asd_link_caps **)v2[9]; v48 = v2[7] - (_DWORD)v47; if ( v48 <= 5 ) { v49 = 0; p_field20 = (unsigned int)&a1[11].field20; while ( v49 != v48 ) { if ( asd_reg_read_11B00(a1: p_field20, a2: (int)v47, a3: (__int16)field0C) == 0 ) return 44; p_field20 = asd_reg_read_140AC(a1: v4[125], a2: v49, a3: v51); v47 = (struct asd_link_caps **)(p_field20 & 3); if ( v47 == (struct asd_link_caps **)2 ) { p_field20 = (p_field20 >> 8) & 7; v52 = v2[6]; v53 = &a1->unk00 + 4 * p_field20; v54 = v53 + 144; v55 = v53 + 146; v56 = v53 + 145; v47 = (struct asd_link_caps **)&a1[11].field20; while ( v52 != 0 ) { field0C = *v47; if ( *v47 == (struct asd_link_caps *)p_field20 ) { field0C = (struct asd_link_caps *)a1->field0C; if ( p_field20 >= (unsigned int)field0C ) return 2; *v55 = 2; *v56 = v49; *v54 = p_field20; } v47 += 3; --v52; } } else if ( v47 == (struct asd_link_caps **)1 ) { p_field20 = (p_field20 >> 4) & 7; v47 = (struct asd_link_caps **)v2[4]; field0C = a1 + 4; while ( v47 != nullptr ) { v47 = (struct asd_link_caps **)((char *)v47 - 1); if ( field0C[-1].field1C == p_field20 ) { field0C[-1].field20 = v49; field0C[-1].field24 = p_field20; field0C->unk00 = 1; } field0C = (struct asd_link_caps *)((char *)field0C + 24); } } ++v49; } p_field24 = &a1[17].field24; for ( j = 0; ; ++j ) { v59 = v2[8]; if ( j >= v59 ) break; if ( asd_reg_read_11B00(a1: v59, a2: (int)v47, a3: (__int16)field0C) == 0 ) return 44; _13D9C = asd_reg_read_13D9C(a1: v4[111], a2: j, a3: v60); v47 = (struct asd_link_caps **)((_13D9C >> 8) & 0xF); field0C = (struct asd_link_caps *)a1->field04; if ( field0C < (struct asd_link_caps *)v47 ) return 2; *p_field24 = _13D9C & 1; p_field24[1] = (unsigned int)v47; p_field24[2] = j; p_field24 += 3; } return 0; } return v46; } /* ==== asd_get_link_caps_full_v5 [tier=EXACT size=754] ==== */ // Link capability fill variant (fifth ASIC form). int __fastcall asd_get_link_caps_full_v5(struct asd_link_caps *a1) { _DWORD *v2; // r4 int v3; // r11 int *v4; // r9 unsigned int v5; // r5 unsigned int v6; // r6 unsigned int v7; // r0 __int64 v8; // r2 int v9; // r1 int _13B74; // r0 __int16 v11; // r7 int v12; // r1 __int16 v13; // r2 char v14; // r0 char *v15; // r1 bool v16; // zf int v17; // r0 unsigned int v18; // r0 unsigned int *v19; // r0 int v20; // r1 struct asd_link_caps *field0C; // r2 unsigned int v22; // r6 int v23; // r3 int v24; // r0 unsigned int *v25; // r1 unsigned int v26; // r5 unsigned int v27; // r6 char *v28; // r0 int *v29; // r7 int v30; // r0 int v31; // r1 __int16 v32; // r2 unsigned int **p_field18; // r6 unsigned int i; // r5 unsigned int v35; // r0 __int16 v36; // r2 int v37; // r0 int v38; // r1 __int16 v39; // r2 __int16 v40; // r2 int v41; // r0 int v42; // r1 __int16 v43; // r2 __int16 v44; // r2 unsigned int v45; // r0 int v46; // r5 struct asd_link_caps **v47; // r1 unsigned int v48; // r11 unsigned int v49; // r6 unsigned int p_field20; // r0 __int16 v51; // r2 int v52; // r7 unsigned int *v53; // r1 unsigned int *v54; // r12 _DWORD *v55; // lr unsigned int *v56; // r3 unsigned int *p_field24; // r6 unsigned int j; // r5 unsigned int v59; // r0 __int16 v60; // r2 unsigned int _13D9C; // r0 _DWORD v63[9]; // [sp+8h] [bp-24h] BYREF bzero_core(result: v63, a2: 0x24u); if ( a1 == nullptr ) return 2; v2 = off_D0BE6C; v3 = 0; v4 = (int *)off_D0BFB4; v5 = 0; v6 = 0; v7 = *((_DWORD *)off_D0BE6C + 3); v8 = *((_QWORD *)off_D0BE6C + 2); a1->unk00 = *((_DWORD *)off_D0BE6C + 1); a1->field04 = v7; *(_QWORD *)&a1->field08 = v8; a1->field10 = v2[6]; a1->field14 = v2[7]; a1->field18 = v2[8]; v9 = v2[9]; a1->field1C = v9; while ( v6 < v7 ) { if ( asd_reg_read_11B00(a1: v7, a2: v9, a3: v8) == 0 ) return 44; _13B74 = asd_reg_read_13B74(a1: 0, a2: v4[1], a3: v6); v11 = _13B74; if ( asd_reg_read_11B00(a1: _13B74, a2: v12, a3: v13) == 0 ) return 44; v14 = asd_reg_read_13B74(a1: 0, a2: *v4, a3: v6); v15 = (char *)a1 + 8 * v6; v16 = v5 == 8; *((_DWORD *)v15 + 8) = (v11 & 0x800) != 0; *((_DWORD *)v15 + 9) = v14 & 7; if ( v5 <= 8 ) v16 = (v11 & 0x800) == 0; if ( v16 ) v63[v5++] = v6; v17 = asd_opt_cb_D423E4(a1: v6); if ( v17 != 0 ) { if ( asd_reg_read_11B00(a1: v17, a2: v9, a3: v8) == 0 ) return 44; v18 = asd_reg_read_13B74(a1: 0, a2: v4[2], a3: v6); v9 = (int)a1 + 4 * v6; *(_DWORD *)(v9 + 104) = (v18 >> 8) & 0x7F; if ( *(unsigned __int8 *)v2 << 31 == 0 ) { if ( asd_reg_read_11B00(a1: 0, a2: v9, a3: v8) == 0 ) return 44; if ( asd_reg_read_13B74_cfg1(a1: v6) == 0 ) { v19 = &a1->unk00 + v3; v9 = 1; v19[89] = 1; v19[90] = v6; } } } v3 += 3; v7 = v2[3]; ++v6; } v20 = 0; LOWORD(field0C) = 1; while ( v20 != v5 ) { v22 = 0; v23 = ~(1 << (v63[v20] & 0x1F)); while ( v22 < v2[3] ) *(&a1[2].field18 + v22++) &= v23; ++v20; } v24 = v2[7]; v25 = v2 + 4; v26 = v2[3]; if ( v24 == 0 ) v25 = v2 + 2; v27 = *v25; if ( v24 != 0 ) v26 = 0; v28 = (char *)a1 + 24 * v26; v29 = (int *)(v28 + 140); while ( v26 < v27 ) { if ( asd_reg_read_11BE4(a1: (int)v28, a2: (int)v25, a3: (__int16)field0C) == 0 ) return 44; v30 = asd_reg_read_13B74(a1: 1, a2: v4[84], a3: v26) & 1; *v29 = v30; if ( asd_reg_read_11BE4(a1: v30, a2: v31, a3: v32) == 0 ) return 44; v28 = (char *)(asd_reg_read_13B74(a1: 1, a2: v4[85], a3: v26) & 7); v29[1] = (int)v28; v29[2] = v26; v29 += 6; ++v26; } p_field18 = (unsigned int **)&a1[11].field18; for ( i = 0; ; ++i ) { v35 = v2[6]; if ( i >= v35 ) break; if ( asd_reg_read_11BE4(a1: v35, a2: (int)v25, a3: (__int16)field0C) == 0 ) return 44; v37 = asd_reg_read_13BF8(a1: v4[105], a2: i, a3: v36) & 1; *p_field18 = (unsigned int *)v37; if ( asd_reg_read_11BE4(a1: v37, a2: v38, a3: v39) == 0 ) return 44; v41 = asd_reg_read_13BF8(a1: v4[55], a2: i, a3: v40) & 7; p_field18[1] = (unsigned int *)v41; if ( asd_reg_read_11BE4(a1: v41, a2: v42, a3: v43) == 0 ) return 44; v45 = asd_reg_read_13C68(a1: v4[56], a2: i, a3: v44) & 7; p_field18[2] = (unsigned int *)v45; if ( v45 >= a1->field0C ) return 2; v25 = *p_field18; p_field18 += 3; if ( v25 == (unsigned int *)1 ) { v25 = (unsigned int *)(1 << i); *(&a1[14].field0C + 4 * v45) = 1 << i; } } v46 = 2; v47 = (struct asd_link_caps **)v2[9]; v48 = v2[7] - (_DWORD)v47; if ( v48 <= 5 ) { v49 = 0; p_field20 = (unsigned int)&a1[11].field20; while ( v49 != v48 ) { if ( asd_reg_read_11B00(a1: p_field20, a2: (int)v47, a3: (__int16)field0C) == 0 ) return 44; p_field20 = asd_reg_read_140AC(a1: v4[127], a2: v49, a3: v51); v47 = (struct asd_link_caps **)(p_field20 & 3); if ( v47 == (struct asd_link_caps **)2 ) { p_field20 = (p_field20 >> 8) & 7; v52 = v2[6]; v53 = &a1->unk00 + 4 * p_field20; v54 = v53 + 144; v55 = v53 + 146; v56 = v53 + 145; v47 = (struct asd_link_caps **)&a1[11].field20; while ( v52 != 0 ) { field0C = *v47; if ( *v47 == (struct asd_link_caps *)p_field20 ) { field0C = (struct asd_link_caps *)a1->field0C; if ( p_field20 >= (unsigned int)field0C ) return 2; *v55 = 2; *v56 = v49; *v54 = p_field20; } v47 += 3; --v52; } } else if ( v47 == (struct asd_link_caps **)1 ) { p_field20 = (p_field20 >> 4) & 7; v47 = (struct asd_link_caps **)v2[4]; field0C = a1 + 4; while ( v47 != nullptr ) { v47 = (struct asd_link_caps **)((char *)v47 - 1); if ( field0C[-1].field1C == p_field20 ) { field0C[-1].field20 = v49; field0C[-1].field24 = p_field20; field0C->unk00 = 1; } field0C = (struct asd_link_caps *)((char *)field0C + 24); } } ++v49; } p_field24 = &a1[17].field24; for ( j = 0; ; ++j ) { v59 = v2[8]; if ( j >= v59 ) break; if ( asd_reg_read_11B00(a1: v59, a2: (int)v47, a3: (__int16)field0C) == 0 ) return 44; _13D9C = asd_reg_read_13D9C(a1: v4[111], a2: j, a3: v60); v47 = (struct asd_link_caps **)((_13D9C >> 8) & 0xF); field0C = (struct asd_link_caps *)a1->field04; if ( field0C < (struct asd_link_caps *)v47 ) return 2; *p_field24 = _13D9C & 1; p_field24[1] = (unsigned int)v47; p_field24[2] = j; p_field24 += 3; } return 0; } return v46; } /* ==== asd_get_link_info [tier=EXACT size=72] ==== */ // Feature-15 gated, link index bounded to 0x3F, caller pointer validated for 8 bytes. // Reports 64 and a status word, provided unk_D42894[24*idx] == 1. int __fastcall asd_get_link_info(unsigned int a1, unsigned int *a2) { int result; // r0 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3F ) return 5; if ( asd_validate_ptr(a1: (unsigned int)a2, a2: 8u) == 0 ) return 2; result = 0; *a2 = 64; a2[1] = 0; if ( *(_DWORD *)(dword_D0D268 + 96 * a1 + 4) != 1 ) return 1; *a2 = a1; a2[1] = 0; return result; } /* ==== asd_get_link_reg_offsets [tier=EXACT size=76] ==== */ // Feature-14 gated, bounds a2 < dword_D33300. Returns 4 and three register offsets // (x4) read from byte_D42661 at +207/+215/+223 for the link. int __fastcall asd_get_link_reg_offsets(_DWORD *a1, unsigned int a2) { int v4; // r1 int result; // r0 _DWORD *v6; // r0 if ( *((_DWORD *)off_D1881C + 2) <= a2 ) return 2; v4 = asd_feature_level_check(a1: 14, a2); result = 2; if ( a1 != nullptr && v4 != 0 ) { *a1 = 4; v6 = (_DWORD *)(dword_D18820 + 4 * a2); a1[1] = 4 * v6[30]; a1[2] = 4 * v6[32]; a1[3] = 4 * v6[34]; a1[4] = 4 * v6[36]; return 0; } return result; } /* ==== asd_get_link_state [tier=EXACT size=84] ==== */ // Feature-15 gated, link index bounded to 0x3F and required active. Returns the link's // state word, preferring the runtime callback dword_D4413C[1] when installed. int __fastcall asd_get_link_state(unsigned int a1, _DWORD *a2) { int v4; // r2 _DWORD *v5; // r1 int (__fastcall *v6)(unsigned int, _DWORD *); // r2 *a2 = 0; if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3F ) return 5; v4 = dword_D115E0; v5 = (_DWORD *)(dword_D115E0 + 96 * a1); if ( v5[1] != 1 ) return 5; *a2 = v5[17]; v6 = *(int (__fastcall **)(unsigned int, _DWORD *))(v4 + 6320); if ( v6 != nullptr && v5[8] != 0 ) return v6(a1, a2); *a2 = v5[17]; return 0; } /* ==== asd_get_link_status [tier=EXACT size=78] ==== */ // HDCP opcode 0x161 (disp_get_link_status). int __fastcall asd_get_link_status(unsigned int a1, int *a2, _DWORD *a3, _DWORD *a4, _DWORD *a5) { if ( asd_validate_ptr(a1: (unsigned int)a2, a2: 4u) != 0 && asd_validate_ptr(a1: (unsigned int)a3, a2: 4u) != 0 && asd_validate_ptr(a1: (unsigned int)a4, a2: 4u) != 0 && asd_validate_ptr(a1: (unsigned int)a5, a2: 4u) != 0 ) { return asd_link_sub_113A0(a1, a2, a3, a4, a5); } else { return 2; } } /* ==== asd_get_off_D17FF8_field8 [tier=EXACT size=16] ==== */ // Returns the dword at off_D17FF8+8 through the caller's pointer. int __fastcall asd_get_off_D17FF8_field8(_DWORD *a1) { if ( a1 == nullptr ) return 2; *a1 = *(_DWORD *)(loc_D17FF8 + 8); return 0; } /* ==== asd_get_pair_D49838 [tier=EXACT size=18] ==== */ // Returns *unk_D49838 through the caller's pointer (paired with asd_set_pair_D49838). int __fastcall asd_get_pair_D49838(_DWORD *a1) { if ( a1 == nullptr ) return 2; *a1 = **(_DWORD **)off_D12150; return 0; } /* ==== asd_get_pipe_count [tier=EXACT size=166] ==== */ // Returns dword_D33028 (the configured pipe count) through the caller's pointer. int __fastcall asd_get_pipe_count(_DWORD *a1) { if ( a1 == nullptr ) return 2; *a1 = off_D129AC[2]; return 0; } /* ==== asd_get_platform_info [tier=EXACT size=236] ==== */ // Issues SVC 0x8D (read soc_platform_id) then calls a callback obtained from // sub_D12C4C(&fp, 2), returning its result through a1/a2. int __fastcall asd_get_platform_info(int *a1, _BYTE *a2, void (__fastcall *a3)(int *)) { int result; // r0 void (__fastcall *v10)(int *); // [sp+0h] [bp-8h] BYREF int v11; // [sp+4h] [bp-4h] BYREF v10 = a3; v11 = 0; result = 2; if ( a1 != nullptr && a2 != nullptr ) { // switch jump __asm { SVC 0x8D } v11 = 2; // jumptable 00D14AC8 case 2 v10 = nullptr; if ( asd_get_reg_read_fn(a1: &v10, a2: 2) != 0 || v10 == nullptr ) { return 1; } else { v10(a1: &v11); *a1 = v11; result = 0; *a2 = 1; } } return result; // jumptable 00D14AC8 cases 6-19,28,30-34,38-42,44,46-48,50,52 } /* ==== asd_get_reg_read_fn [tier=EXACT size=14] ==== */ // Returns the register-read function pointer (asd_reg_read_10744) when the // requested class is 2, else status 7. int __fastcall asd_get_reg_read_fn(_DWORD *a1, int a2) { if ( a2 != 2 ) return 7; *a1 = off_D12C5C; return 0; } /* ==== asd_get_signal_reg [tier=EXACT size=84] ==== */ // Selects the register block for the link's signal type (switch on ctx+40, e.g. type 16) // and indexes it by ctx+20. int __fastcall asd_get_signal_reg(int a1) { int v1; // r1 unsigned int v3; // r5 int *v4; // r7 int v5; // r6 if ( a1 == 0 ) return 2; v1 = *(_DWORD *)(a1 + 40); v3 = *(_DWORD *)(a1 + 20); switch ( v1 ) { case 16: v4 = (int *)((char *)off_D08468 + 240); v5 = 0; goto LABEL_9; case 48: v4 = (int *)((char *)off_D08468 + 304); v5 = 2; goto LABEL_9; case 32: v4 = (int *)((char *)off_D08468 + 272); v5 = 1; LABEL_9: asd_reg_read_13B74(a1: v5, a2: *v4, a3: v3); asd_reg_write_1946C(a1: v5, a2: *v4, a3: v3); break; default: break; } return asd_wait_signal16_idle(a1); } /* ==== asd_get_stream_key_v2 [tier=EXACT size=216] ==== */ // Sibling of asd_get_stream_key: requires ctx+64 == 6, queries asd_op_304(6,0), and on // success runs GP crypto op 0x35 and returns 16 bytes. int __fastcall asd_get_stream_key_v2(int a1, int *a2, unsigned __int8 *a3) { int *v5; // r7 int v6; // r6 int v7; // r3 int v8; // r12 int v9; // r5 int v10; // r1 int v11; // lr int v12; // r0 int v13; // r2 unsigned __int8 v14; // r4 _DWORD v16[5]; // [sp+0h] [bp-18h] BYREF int v17; // [sp+14h] [bp-4h] v17 = *loc_D13728; memset(v16, 0, 16); if ( a1 == 0 || *(_DWORD *)(a1 + 64) != 6 ) { v6 = 2; goto LABEL_12; } if ( asd_op_304(a1: 6, a2: 0) != 0 ) { gp_crypto_op_0x35(); sub_D01058(a1: a2, a2: v16, a3: 16); } v5 = off_D129AC; v6 = 1; if ( *((_BYTE *)off_D129AC + 40) != 0 ) goto LABEL_12; sub_D01058(a1: off_D129AC + 4, a2, a3: 16); v7 = a3[5]; v8 = a3[4]; v9 = *a3; v10 = a3[1]; v11 = a3[6]; v12 = a3[7]; v13 = a3[2] | (a3[3] << 8); v14 = 0; *((_BYTE *)v5 + 40) = 1; v5[8] = v9 | (v10 << 8) | (v13 << 16); v5[9] = v8 | (v7 << 8) | ((v11 | (v12 << 8)) << 16); while ( v5[2] > (unsigned int)v14 ) { if ( *(_BYTE *)(v5[3] + 60 * v14 + 56) != 0 ) asd_reg_rw_15E66(); ++v14; } while ( 1 ) { v6 = 0; LABEL_12: if ( *loc_D13728 == v17 ) break; ((void (__fastcall *)(int))loc_D1987C)(a1: *loc_D13728 - v17); } return v6; } /* ==== asd_guard_sigtype1 [tier=EXACT size=18] ==== */ // Rejects (status 2) when ctx+20 or ctx+44 equals signal type 1, otherwise runs // sub_D09F18. Sibling of asd_guard_sigtype3. int __fastcall asd_guard_sigtype1(int a1, int a2, int a3, int a4) { int v4; // r1 bool v5; // zf v4 = *(_DWORD *)(a1 + 20); v5 = v4 == 1; if ( v4 != 1 ) { v4 = *(_DWORD *)(a1 + 44); v5 = v4 == 1; } if ( v5 ) return 2; else return asd_program_link_by_signal((struct asd_link_cfg *)a1, a2: v4, a3, a4); } /* ==== asd_guard_sigtype3 [tier=EXACT size=18] ==== */ // Rejects (status 2) when ctx+20 or ctx+44 equals signal type 3, otherwise runs // sub_D09F18. Sibling of asd_guard_sigtype1. int __fastcall asd_guard_sigtype3(int a1, int a2, int a3, int a4) { int v4; // r1 bool v5; // zf v4 = *(_DWORD *)(a1 + 20); v5 = v4 == 3; if ( v4 != 3 ) { v4 = *(_DWORD *)(a1 + 44); v5 = v4 == 3; } if ( v5 ) return 2; else return asd_program_link_by_signal((struct asd_link_cfg *)a1, a2: v4, a3, a4); } /* ==== asd_guarded_call_D0BE70 [tier=EXACT size=50] ==== */ // Gated call: requires asd_asic_family_lookup to succeed and asd_is_supported_asic to // accept the (device, revision) pair, else returns 7. int __fastcall asd_guarded_call_D0BE70(int a1, _WORD *a2, _WORD *a3, _WORD *a4) { int result; // r0 __int64 v9[4]; // [sp+4h] [bp-20h] BYREF result = asd_asic_family_lookup(a1: (int)v9); if ( result == 0 ) { if ( asd_is_supported_asic(a1: v9[0]) ) return asd_read_link_pair(a1, a2, a3, a4); else return 7; } return result; } /* ==== asd_guarded_call_D0BEC4 [tier=EXACT size=54] ==== */ // ASIC-gated call to sub_D0BEC4 (family lookup + supported-ASIC whitelist, else 7). int __fastcall asd_guarded_call_D0BEC4(int a1, int a2, _WORD *a3, _WORD *a4, _WORD *a5) { int result; // r0 __int64 v10[4]; // [sp+4h] [bp-20h] BYREF result = asd_asic_family_lookup(a1: (int)v10); if ( result == 0 ) { if ( asd_is_supported_asic(a1: v10[0]) ) return asd_read_link_pair_idx(a1, a2, a3, a4, a5); else return 7; } return result; } /* ==== asd_guarded_call_D0BF28 [tier=EXACT size=62] ==== */ // ASIC-gated call to sub_D0BF28 (family lookup + supported-ASIC whitelist, else 7). int __fastcall asd_guarded_call_D0BF28(int a1, int a2, int a3, _WORD *a4, _WORD *a5, _WORD *a6, _WORD *a7) { int result; // r0 __int64 v12[4]; // [sp+Ch] [bp-20h] BYREF result = asd_asic_family_lookup(a1: (int)v12); if ( result == 0 ) { if ( asd_is_supported_asic(a1: v12[0]) ) return asd_read_link_multi(a1, a2, a3, a4, a5, a6, a7); else return 7; } return result; } /* ==== asd_guarded_reg_read_BE08 [tier=EXACT size=42] ==== */ // Gated register read: requires asd_asic_family_lookup to succeed and // asd_is_supported_asic to accept the (device, revision) pair, else returns 7. int __fastcall asd_guarded_reg_read_BE08(unsigned int a1, _DWORD *a2) { int result; // r0 __int64 v5[4]; // [sp+0h] [bp-20h] BYREF result = asd_asic_family_lookup(a1: (int)v5); if ( result == 0 ) { if ( asd_is_supported_asic(a1: v5[0]) ) return asd_reg_read_BE08(a1, a2); else return 7; } return result; } /* ==== asd_hdcp1_compute_ri [tier=EXACT size=90] ==== */ // HDCP opcode 0x185. int __fastcall asd_hdcp1_compute_ri(unsigned int a1, unsigned int a2, unsigned int a3) { int result; // r0 int (__fastcall *v7)(unsigned int, unsigned int, unsigned int); // r3 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3E ) return 5; if ( asd_validate_ptr(a1: a2, a2: 5u) == 0 || asd_validate_ptr(a1: a3, a2: 5u) == 0 ) return 2; result = 5; if ( *(_DWORD *)(dword_D0FBE8 + 96 * a1 + 4) == 1 ) { v7 = *(int (__fastcall **)(unsigned int, unsigned int, unsigned int))(dword_D0FBE8 + 6176); if ( v7 != nullptr ) return v7(a1: dword_D0FBE8 + 96 * a1, a2, a3); } return result; } /* ==== asd_hdcp1_disable [tier=EXACT size=276] ==== */ // HDCP opcode 0x189. int __fastcall asd_hdcp1_disable(unsigned int a1) { _DWORD *v2; // r10 _DWORD *v3; // r9 _DWORD *v4; // r4 int v5; // r7 int v6; // r5 _DWORD *v7; // r6 int v8; // r0 bool v9; // zf void (__fastcall *v10)(_DWORD *, _DWORD, int); // r3 int (__fastcall *v11)(_DWORD *, _DWORD, int); // r3 void (__fastcall *v13)(unsigned int, _DWORD, int); // r3 int (__fastcall *v14)(_DWORD *, _DWORD, int); // r3 int (__fastcall *v15)(_DWORD *); // r1 void (__fastcall *v16)(_DWORD *, _DWORD, int); // r3 int (__fastcall *v17)(_DWORD *); // r1 int (*v18)(void); // r0 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3E ) return 5; v2 = (_DWORD *)dword_D102B4; v3 = (_DWORD *)(dword_D102B4 + 96 * a1); if ( v3[1] != 1 ) return 5; if ( v3[16] != 5 ) { LABEL_24: v6 = 0; goto LABEL_25; } if ( v3[15] != a1 ) { v13 = *(void (__fastcall **)(unsigned int, _DWORD, int))(dword_D102B4 + 6232); if ( v13 != nullptr ) v13(a1: dword_D102B4 + 96 * a1, a2: 0, a3: 1); v14 = (int (__fastcall *)(_DWORD *, _DWORD, int))v2[1556]; if ( v14 != nullptr ) { v6 = v14(a1: v3, a2: 0, a3: 1); goto LABEL_25; } goto LABEL_24; } v4 = v3 + 5; v5 = 0; v6 = 0; while ( v5 != 1512 ) { v7 = &v2[v5]; if ( v2[v5 + 1] == 1 ) { v8 = v7[5]; v9 = *v4 == v8; if ( *v4 == v8 ) v9 = v7[16] == 5; if ( v9 ) { v10 = (void (__fastcall *)(_DWORD *, _DWORD, int))v2[1558]; if ( v10 != nullptr ) v10(a1: &v2[v5], a2: 0, a3: 1); v11 = (int (__fastcall *)(_DWORD *, _DWORD, int))v2[1556]; if ( v11 != nullptr ) v6 = v11(a1: &v2[v5], a2: 0, a3: 1); } } v5 += 24; } LABEL_25: v15 = (int (__fastcall *)(_DWORD *))v2[1557]; if ( v15 != nullptr && (v3[16] != 5 || v15(a1: v3) == 0) ) { v16 = (void (__fastcall *)(_DWORD *, _DWORD, int))v2[1558]; if ( v16 != nullptr ) { v16(a1: v3, a2: 0, a3: 1); v17 = (int (__fastcall *)(_DWORD *))v2[1563]; if ( v17 != nullptr ) v6 = v17(a1: v3); } } if ( v6 != 0 ) return v6; v18 = (int (*)(void))v2[1560]; if ( v18 == nullptr ) return v6; return v18(); } /* ==== asd_hdcp1_enable_encryption [tier=EXACT size=164] ==== */ // HDCP opcode 0x187. int __fastcall asd_hdcp1_enable_encryption(unsigned int a1) { int v2; // r5 unsigned int v3; // r4 int (__fastcall *v4)(unsigned int); // r1 int result; // r0 int (*v6)(void); // r1 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3E ) return 5; v2 = dword_D0F760; v3 = dword_D0F760 + 96 * a1; if ( *(_DWORD *)(v3 + 4) != 1 ) return 5; v4 = *(int (__fastcall **)(unsigned int))(dword_D0F760 + 6188); result = 9; if ( v4 != nullptr && *(_DWORD *)(dword_D0F760 + 6244) != 0 && *(_DWORD *)(dword_D0F760 + 6248) != 0 && *(_DWORD *)(dword_D0F760 + 6232) != 0 ) { if ( v4(a1: v3) != 0 ) { return 9; } else if ( ((*(int (__fastcall **)(unsigned int))(v2 + 6244))(a1: v3) == 0 || (result = (*(int (__fastcall **)(unsigned int))(v2 + 6248))(a1: v3)) == 0) && (*(_DWORD *)(v3 + 64) == 5 || (result = (*(int (__fastcall **)(unsigned int, int, int))(v2 + 6232))(a1: v3, a2: 1, a3: 1)) == 0) ) { result = (*(int (__fastcall **)(unsigned int))(v2 + 6244))(a1: v3); if ( result == 0 ) { v6 = *(int (**)(void))(v2 + 6240); if ( v6 != nullptr ) return v6(); } } } return result; } /* ==== asd_hdcp1_enable_stream_enc [tier=EXACT size=166] ==== */ // HDCP opcode 0x188. int __fastcall asd_hdcp1_enable_stream_enc(unsigned int a1) { _DWORD *v2; // r6 _DWORD *v3; // r4 int v4; // r5 int (__fastcall *v5)(_DWORD *); // r1 int result; // r0 int (__fastcall *v7)(int); // r1 int (__fastcall *v8)(int); // r1 int (__fastcall *v9)(_DWORD *, int, int); // r3 int (__fastcall *v10)(_DWORD *, int, int); // r3 int (*v11)(void); // r1 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 <= 0x3E ) { v2 = (_DWORD *)dword_D0F8A4; v3 = (_DWORD *)(dword_D0F8A4 + 96 * a1); if ( v3[1] == 1 ) { if ( v3[16] != 5 ) return 7; v4 = dword_D0F8A4 + 96 * v3[15]; if ( *(_DWORD *)(v4 + 4) == 1 ) { v5 = *(int (__fastcall **)(_DWORD *))(dword_D0F8A4 + 6236); if ( v5 != nullptr ) { result = v5(a1: v3); if ( result == 0 ) return 16; } else { result = 9; } v7 = (int (__fastcall *)(int))v2[1561]; if ( v7 != nullptr ) { result = v7(a1: v4); if ( result == 0 ) { v8 = (int (__fastcall *)(int))v2[1547]; if ( v8 != nullptr ) result = v8(a1: v4); } if ( result == 0 ) { v9 = (int (__fastcall *)(_DWORD *, int, int))v2[1556]; if ( v9 != nullptr ) result = v9(a1: v3, a2: 1, a3: 1); } if ( result == 0 ) { v10 = (int (__fastcall *)(_DWORD *, int, int))v2[1558]; if ( v10 != nullptr ) result = v10(a1: v3, a2: 1, a3: 1); } if ( result == 0 ) { v11 = (int (*)(void))v2[1560]; if ( v11 != nullptr ) return v11(); } } return result; } } } return 5; } /* ==== asd_hdcp1_init [tier=EXACT size=216] ==== */ // HDCP opcode 0x180. int __fastcall asd_hdcp1_init(unsigned int a1) { int v2; // r6 unsigned int v3; // r9 int v4; // r12 int v5; // r2 _DWORD *v6; // r1 int v7; // r3 _DWORD *v8; // r0 int v9; // r7 bool v10; // zf int result; // r0 int (*v12)(void); // r0 _DWORD *v13; // r1 int v14; // r0 int (__fastcall *v15)(unsigned int); // r1 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3E ) return 5; v2 = dword_D0F95C; v3 = dword_D0F95C + 96 * a1; if ( *(_DWORD *)(v3 + 4) != 1 ) return 5; v4 = *(_DWORD *)(v3 + 64); if ( v4 == 5 ) { v5 = *(_DWORD *)v3; v6 = (_DWORD *)(v3 + 20); v7 = 0; *(_DWORD *)(v3 + 60) = a1; while ( v7 != 6048 ) { if ( v5 != 0 ) { v8 = (_DWORD *)(v2 + v7); v9 = *(_DWORD *)(v2 + v7 + 20); v10 = *v6 == v9; if ( *v6 == v9 ) v10 = v8[1] == 1; if ( v10 && v8[16] == 5 ) v8[15] = a1; } --v5; v7 += 96; } } if ( *(unsigned __int8 *)(v3 + 68) << 31 == 0 ) goto LABEL_18; v12 = *(int (**)(void))(v2 + 6216); if ( v12 != nullptr ) { result = v12(); if ( result != 0 ) goto LABEL_21; v4 = *(_DWORD *)(v3 + 64); } if ( (unsigned int)(v4 - 1) >= 3 ) { if ( (unsigned int)(v4 - 4) > 1 ) { LABEL_18: result = 7; LABEL_21: v13 = (_DWORD *)(v3 + 88); LABEL_22: *v13 = 0; return result; } v14 = 6160; } else { v14 = 6156; } v15 = *(int (__fastcall **)(unsigned int))(v2 + v14); if ( v15 != nullptr ) { result = v15(a1: v3); v13 = (_DWORD *)(v3 + 88); if ( result != 0 ) goto LABEL_22; } else { v13 = (_DWORD *)(v3 + 88); } *v13 = 1; *(_DWORD *)(v3 + 72) = 1; return 0; } /* ==== asd_hdcp1_op_18B [tier=EXACT size=80] ==== */ // HDCP opcode 0x18B. int __fastcall asd_hdcp1_op_18B(unsigned int a1) { unsigned int v2; // r0 int v3; // r2 int (*v4)(void); // r2 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3E ) return 5; v2 = dword_D0F644 + 96 * a1; if ( *(_DWORD *)(v2 + 4) != 1 ) return 5; v3 = *(_DWORD *)(v2 + 64); if ( (unsigned int)(v3 - 1) < 3 ) { v4 = *(int (**)(void))(dword_D0F644 + 6192); if ( v4 != nullptr ) return v4(); } else if ( (unsigned int)(v3 - 4) >= 2 ) { return 7; } return 0; } /* ==== asd_hdcp1_read_bksv [tier=EXACT size=90] ==== */ // HDCP opcode 0x183. int __fastcall asd_hdcp1_read_bksv(unsigned int a1, unsigned int a2, unsigned int a3) { int result; // r0 int (__fastcall *v7)(unsigned int, unsigned int, unsigned int); // r3 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3E ) return 5; if ( asd_validate_ptr(a1: a2, a2: 8u) == 0 || asd_validate_ptr(a1: a3, a2: 8u) == 0 ) return 2; result = 5; if ( *(_DWORD *)(dword_D0FA18 + 96 * a1 + 4) == 1 ) { v7 = *(int (__fastcall **)(unsigned int, unsigned int, unsigned int))(dword_D0FA18 + 6164); if ( v7 != nullptr ) return v7(a1: dword_D0FA18 + 96 * a1, a2, a3); } return result; } /* ==== asd_hdcp1_read_caps [tier=EXACT size=90] ==== */ // HDCP opcode 0x182. int __fastcall asd_hdcp1_read_caps(unsigned int a1, unsigned int a2, unsigned int a3) { int result; // r0 int (__fastcall *v7)(unsigned int, unsigned int, unsigned int); // r3 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3E ) return 5; if ( asd_validate_ptr(a1: a2, a2: 1u) == 0 || asd_validate_ptr(a1: a3, a2: 1u) == 0 ) return 2; result = 5; if ( *(_DWORD *)(dword_D0FA18 + 96 * a1 + 4) == 1 ) { v7 = *(int (__fastcall **)(unsigned int, unsigned int, unsigned int))(dword_D0FA18 + 6172); if ( v7 != nullptr ) return v7(a1: dword_D0FA18 + 96 * a1, a2, a3); } return result; } /* ==== asd_hdcp1_read_ri [tier=EXACT size=88] ==== */ // HDCP opcode 0x186. int __fastcall asd_hdcp1_read_ri(unsigned int a1, int a2, int a3) { _DWORD *v6; // r6 int (__fastcall *v7)(_DWORD *, int, int); // r3 int result; // r0 int v9; // r1 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3E ) return 5; v6 = (_DWORD *)(dword_D0F6A4 + 96 * a1); if ( v6[1] != 1 ) return 5; v7 = *(int (__fastcall **)(_DWORD *, int, int))(dword_D0F6A4 + 6184); if ( v7 != nullptr && (result = v7(a1: v6, a2, a3)) != 0 ) { v6[22] = 0; } else { if ( v6[20] == 1 ) v9 = 3; else v9 = 2; v6[22] = v9; return 0; } return result; } /* ==== asd_hdcp1_setup [tier=EXACT size=90] ==== */ // HDCP opcode 0x184. int __fastcall asd_hdcp1_setup(unsigned int a1, unsigned int a2, unsigned int a3) { int result; // r0 int (__fastcall *v7)(unsigned int, unsigned int, unsigned int); // r3 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3E ) return 5; if ( asd_validate_ptr(a1: a2, a2: 5u) == 0 || asd_validate_ptr(a1: a3, a2: 5u) == 0 ) return 2; result = 5; if ( *(_DWORD *)(dword_D0FA18 + 96 * a1 + 4) == 1 ) { v7 = *(int (__fastcall **)(unsigned int, unsigned int, unsigned int))(dword_D0FA18 + 6168); if ( v7 != nullptr ) return v7(a1: dword_D0FA18 + 96 * a1, a2, a3); } return result; } /* ==== asd_hdcp1_sub_1144 [tier=EXACT size=68] ==== */ // Reachability-derived label: called only from the 'hdcp1' RPC subsystem // (BFS over direct calls + tail calls from the named 0xhdcp1 handlers). // Behaviour not individually identified. _BYTE *__fastcall asd_hdcp1_sub_1144(_BYTE *result, unsigned int a2) { int v2; // r12 _BYTE *v3; // r0 if ( a2 >= 4 ) { if ( ((unsigned __int8)result & 3) != 0 ) { v2 = 4 - ((unsigned __int8)result & 3); if ( v2 != 2 ) *result++ = 0; if ( v2 >= 2 ) *(_WORD *)result = 0; } JUMPOUT(0xD0118C); } if ( __CFSHL__(a2, 31) ) { *result = 0; v3 = result + 1; *v3 = 0; result = v3 + 1; } if ( (a2 & 1) != 0 ) *result++ = 0; return result; } /* ==== asd_hdcp1_teardown [tier=EXACT size=220] ==== */ // HDCP opcode 0x18F. int __fastcall asd_hdcp1_teardown(unsigned int a1) { int v2; // r3 int v3; // r5 unsigned __int8 v4; // r6 unsigned __int8 v5; // r8 unsigned int v6; // r9 _DWORD *v7; // r10 unsigned int v8; // r11 int v9; // r2 int v10; // r0 char v11; // r2 int v12; // r7 char v13; // r1 char v14; // r0 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 == 0 || asd_validate_ptr(a1, a2: 0x10u) == 0 ) return 2; v2 = dword_D0FB78; v3 = 0; v4 = 0; v5 = 0; while ( v3 != 4 ) { v6 = *(_DWORD *)(a1 + 4 * v3); v7 = (_DWORD *)(v2 + 4 * v3 + 7300); v8 = v6; do { if ( v8 == 0 ) break; if ( v6 << 31 != 0 ) { v9 = 1 << (v5 & 0x1F); v10 = ~v9; if ( (*v7 & v9) != 0 ) { v11 = *(_BYTE *)(v2 + 7316); *v7 &= v10; *(_BYTE *)(v2 + 7316) = v11 - 1; } v12 = v2; *(_DWORD *)(a1 + 4 * v3) &= v10; asd_hdcp1_sub_1144(result: (_BYTE *)(5 * v4 + v2 + 7317), a2: 5u); v2 = v12; v8 &= v8 - 1; } v6 >>= 1; v13 = v5 + 1; v14 = v4 + 1; if ( (unsigned __int8)(v5 + 1) != v5 + 1 ) v13 = -1; v5 = v14 & 0x1F; if ( ((v4 + 1) & 0x1F) != 0 ) v5 = v13; ++v4; } while ( v14 > -1 ); ++v3; } return 0; } /* ==== asd_hdcp1_verify_v [tier=EXACT size=182] ==== */ // HDCP opcode 0x18C. int __fastcall asd_hdcp1_verify_v(unsigned int a1, unsigned int a2, unsigned int a3, unsigned int a4) { int result; // r0 int v9; // r8 unsigned int v10; // r6 int (__fastcall *v11)(unsigned int, unsigned int); // r2 int (__fastcall *v12)(unsigned int, unsigned int, unsigned int); // r3 _DWORD *v17; // r1 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3E ) return 5; if ( a3 - 1 > 0x27A || asd_validate_ptr(a1: a2, a2: a3) == 0 || asd_validate_ptr(a1: a4, a2: 0x14u) == 0 ) return 2; v9 = dword_D10714; v10 = dword_D10714 + 96 * a1; if ( *(_DWORD *)(v10 + 4) != 1 ) return 5; v11 = *(int (__fastcall **)(unsigned int, unsigned int))(dword_D10714 + 6204); if ( v11 != nullptr ) result = v11(a1: v10, a2: a4); else result = 0; if ( result == 0 ) { v12 = *(int (__fastcall **)(unsigned int, unsigned int, unsigned int))(v9 + 6208); if ( v12 != nullptr ) result = v12(a1: v10, a2, a3); } if ( result == 0 && *(_DWORD *)(v9 + 6212) != 0 ) { __asm { SVC 0x56 ; 'V' } result = (*(int (__fastcall **)(unsigned int))(v9 + 6212))(a1: v10); v17 = (_DWORD *)(v10 + 88); if ( result != 0 ) { *v17 = 0; } else { *v17 = 3; return 0; } } return result; } /* ==== asd_hdcp1_write_an [tier=EXACT size=100] ==== */ // HDCP opcode 0x181. int __fastcall asd_hdcp1_write_an(unsigned int a1, int a2) { unsigned int v4; // r5 int (__fastcall *v5)(unsigned int, int); // r2 int result; // r0 int v7; // r0 int *v8; // r0 int v9; // r1 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3E ) return 5; v4 = dword_D0FBE8 + 96 * a1; if ( *(_DWORD *)(v4 + 4) != 1 ) return 5; v5 = *(int (__fastcall **)(unsigned int, int))(dword_D0FBE8 + 6180); if ( v5 == nullptr || (result = v5(a1: v4, a2)) == 0 ) { v7 = *(_DWORD *)(v4 + 64); if ( (unsigned int)(v7 - 1) >= 3 ) { if ( (unsigned int)(v7 - 4) > 1 ) return 0; v8 = (int *)(v4 + 80); if ( (a2 & 2) == 0 ) goto LABEL_8; } else { v8 = (int *)(v4 + 80); if ( (a2 & 0x40) == 0 ) { LABEL_8: v9 = 1; LABEL_14: *v8 = v9; return 0; } } v9 = 2; goto LABEL_14; } return result; } /* ==== asd_hdcp1_write_v [tier=EXACT size=86] ==== */ // HDCP opcode 0x18A. int __fastcall asd_hdcp1_write_v(unsigned int a1) { unsigned int v2; // r0 int v3; // r2 int v4; // r2 int (*v6)(void); // r2 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3E ) return 5; v2 = dword_D0FBE8 + 96 * a1; if ( *(_DWORD *)(v2 + 4) != 1 ) return 5; v3 = *(_DWORD *)(v2 + 64); if ( (unsigned int)(v3 - 1) >= 3 ) { if ( (unsigned int)(v3 - 4) > 1 ) return 7; v4 = 6196; } else { v4 = 6200; } v6 = *(int (**)(void))(dword_D0FBE8 + v4); if ( v6 != nullptr ) return v6(); else return 0; } /* ==== asd_hdcp2_disable [tier=EXACT size=304] ==== */ // HDCP opcode 0x1A2. int __fastcall asd_hdcp2_disable(unsigned int a1) { int v2; // r7 _DWORD *v3; // r4 int v5; // r5 void (__fastcall *v6)(unsigned int, _DWORD, _DWORD); // r3 _DWORD *v7; // r10 _DWORD *v8; // r11 int v9; // r9 int v10; // r6 int v11; // r0 bool v12; // zf int (__fastcall *v13)(_DWORD *); // r1 void (__fastcall *v14)(_DWORD *, _DWORD, _DWORD); // r3 int (*v15)(void); // r0 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3F ) return 5; v2 = dword_D0FF78; v3 = (_DWORD *)(dword_D0FF78 + 96 * a1); if ( v3[1] != 1 ) return 5; if ( v3[2] == 1 ) return asd_opt_cb_D497F0(); v5 = 0; if ( v3[16] == 5 ) { v6 = *(void (__fastcall **)(unsigned int, _DWORD, _DWORD))(dword_D0FF78 + 6232); if ( v6 != nullptr && *(_DWORD *)(dword_D0FF78 + 6224) != 0 ) { if ( v3[15] == a1 ) { v7 = v3 + 21; v8 = v3 + 5; v9 = 0; v5 = 0; while ( v9 != 6048 ) { v10 = v2 + v9; if ( *(_DWORD *)(v2 + v9 + 4) == 1 ) { v11 = *(_DWORD *)(v10 + 20); v12 = *v8 == v11; if ( *v8 == v11 ) v12 = *(_DWORD *)(v10 + 64) == 5; if ( v12 ) { (*(void (__fastcall **)(int, _DWORD, _DWORD))(v2 + 6232))(a1: v2 + v9, a2: 0, a3: *v7); v5 = (*(int (__fastcall **)(int, _DWORD, _DWORD))(v2 + 6224))(a1: v2 + v9, a2: 0, a3: *v7); } } v9 += 96; } } else { v6(a1: dword_D0FF78 + 96 * a1, a2: 0, a3: v3[21]); v5 = (*(int (__fastcall **)(_DWORD *, _DWORD, _DWORD))(v2 + 6224))(a1: v3, a2: 0, a3: v3[21]); } } } v13 = *(int (__fastcall **)(_DWORD *))(v2 + 6228); if ( v13 != nullptr ) { v14 = *(void (__fastcall **)(_DWORD *, _DWORD, _DWORD))(v2 + 6232); if ( v14 != nullptr && *(_DWORD *)(v2 + 6264) != 0 ) { if ( v3[16] != 5 ) { LABEL_28: v14(a1: v3, a2: 0, a3: v3[21]); v5 = (*(int (__fastcall **)(_DWORD *))(v2 + 6264))(a1: v3); goto LABEL_29; } if ( v13(a1: v3) == 0 ) { v14 = *(void (__fastcall **)(_DWORD *, _DWORD, _DWORD))(v2 + 6232); goto LABEL_28; } } } LABEL_29: if ( v5 != 0 ) return v5; v15 = *(int (**)(void))(v2 + 6240); if ( v15 == nullptr ) return v5; return v15(); } /* ==== asd_hdcp2_enable_stream_enc [tier=EXACT size=148] ==== */ // HDCP opcode 0x1A6. int __fastcall asd_hdcp2_enable_stream_enc(unsigned int a1) { _DWORD *v2; // r6 _DWORD *v3; // r4 int v4; // r5 int (__fastcall *v5)(_DWORD *); // r1 int result; // r0 int (__fastcall *v7)(int); // r1 int (__fastcall *v8)(_DWORD *, int, _DWORD); // r3 int (__fastcall *v9)(_DWORD *, int, _DWORD); // r3 int (*v10)(void); // r1 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 <= 0x3E ) { v2 = (_DWORD *)dword_D10108; v3 = (_DWORD *)(dword_D10108 + 96 * a1); if ( v3[1] == 1 ) { if ( v3[16] != 5 ) return 7; v4 = dword_D10108 + 96 * v3[15]; if ( *(_DWORD *)(v4 + 4) == 1 ) { v5 = *(int (__fastcall **)(_DWORD *))(dword_D10108 + 6236); if ( v5 == nullptr ) return 16; result = v5(a1: v3); if ( result == 0 ) return 16; v7 = (int (__fastcall *)(int))v2[1564]; if ( v7 != nullptr ) { result = v7(a1: v4); if ( result == 0 ) { v8 = (int (__fastcall *)(_DWORD *, int, _DWORD))v2[1556]; if ( v8 != nullptr ) result = v8(a1: v3, a2: 1, a3: *(_DWORD *)(v4 + 84)); } if ( result == 0 ) { v9 = (int (__fastcall *)(_DWORD *, int, _DWORD))v2[1558]; if ( v9 != nullptr ) result = v9(a1: v3, a2: 1, a3: *(_DWORD *)(v4 + 84)); } if ( result == 0 ) { v10 = (int (*)(void))v2[1560]; if ( v10 != nullptr ) return v10(); } } return result; } } } return 5; } /* ==== asd_hdcp2_init [tier=EXACT size=176] ==== */ // HDCP opcode 0x1A0. int __fastcall asd_hdcp2_init(unsigned int a1) { int v2; // r8 _DWORD *v3; // r5 int (*v4)(void); // r0 int result; // r0 _DWORD *v6; // r1 int v7; // r0 int v8; // r2 _DWORD *v9; // r3 int v10; // r7 bool v11; // zf int v12; // r1 _DWORD *v13; // r0 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3F ) return 5; v2 = dword_D10714; v3 = (_DWORD *)(dword_D10714 + 96 * a1); if ( v3[1] != 1 ) return 5; if ( v3[2] != 0 || (v4 = *(int (**)(void))(dword_D10714 + 6216)) == nullptr || (result = v4()) == 0 ) { if ( v3[16] == 5 ) { v6 = v3 + 5; v7 = *(_DWORD *)(v2 + 96 * a1); v8 = 0; v3[15] = a1; while ( v8 != 6048 ) { if ( v7 != 0 ) { v9 = (_DWORD *)(v2 + v8); v10 = *(_DWORD *)(v2 + v8 + 20); v11 = *v6 == v10; if ( *v6 == v10 ) v11 = v9[1] == 1; if ( v11 && v9[16] == 5 ) v9[15] = a1; } --v7; v8 += 96; } } v12 = v3[17]; if ( (v12 & 2) != 0 ) { v3[18] = 2; v3[22] = 1; } else { v13 = v3 + 22; if ( (v12 & 4) == 0 ) { *v13 = 0; return 7; } *v13 = 1; v3[18] = 4; } return 0; } return result; } /* ==== asd_hdcp2_msg_state [tier=EXACT size=246] ==== */ // HDCP opcode 0x1A1. int __fastcall asd_hdcp2_msg_state(unsigned int a1, unsigned int a2, unsigned int a3, unsigned int a4) { int result; // r0 _DWORD *v8; // r8 _DWORD *v9; // r6 int (__fastcall *v10)(_DWORD *); // r1 int (*v11)(void); // r1 unsigned int v12; // [sp+4h] [bp-4h] BYREF v12 = a4; if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3F ) return 5; if ( asd_validate_ptr(a1: a2, a2: 0x10u) == 0 || asd_validate_ptr(a1: a3, a2: 8u) == 0 ) return 2; v8 = (_DWORD *)dword_D10714; v9 = (_DWORD *)(dword_D10714 + 96 * a1); if ( v9[1] != 1 ) return 5; if ( v9[2] == 1 ) { if ( asd_opt_cb_D497F4() == 10 ) return asd_hdcp2_sub_19178(); else return 0; } else { v12 = 0; result = asd_hdcp2_sub_10154(a1, a2: &v12); if ( result == 0 && v12 == 3 ) { v10 = (int (__fastcall *)(_DWORD *))v8[1564]; result = 0; if ( v10 != nullptr && v8[1558] != 0 && v8[1565] != 0 && (v10(a1: v9) == 0 || (result = ((int (__fastcall *)(_DWORD *, unsigned int, unsigned int))v8[1565])(a1: v9, a2, a3)) == 0) && (v9[16] == 5 || (result = ((int (__fastcall *)(_DWORD *, int, _DWORD))v8[1558])(a1: v9, a2: 1, a3: v9[21])) == 0) ) { result = ((int (__fastcall *)(_DWORD *))v8[1564])(a1: v9); if ( result == 0 ) { v11 = (int (*)(void))v8[1560]; if ( v11 != nullptr ) return v11(); } } } } return result; } /* ==== asd_hdcp2_op_1A9 [tier=EXACT size=176] ==== */ // HDCP opcode 0x1A9. int __fastcall asd_hdcp2_op_1A9(unsigned int a1, _BYTE *a2) { int result; // r0 int v5; // r9 int v6; // r4 unsigned __int8 v7; // r8 unsigned int v8; // r6 int v9; // r7 int v10; // r0 if ( !asd_feature_enabled(a1: 15) ) return 8; result = 2; if ( a1 != 0 && a2 != nullptr ) { if ( asd_validate_ptr(a1, a2: 0xA0u) != 0 && asd_validate_ptr(a1: (unsigned int)a2, a2: 1u) != 0 ) { v5 = dword_D0D268; v6 = 0; v7 = 0; v8 = *(_DWORD *)(dword_D0D268 + 6780); v9 = *(unsigned __int8 *)(dword_D0D268 + 6784); do { if ( v9 << 24 == 0 ) break; if ( v8 << 31 != 0 ) { sub_D01058(a1: 5 * v7 + a1, a2: 5 * v6 + v5 + 6332, a3: 5); v10 = ++v7; if ( (unsigned __int8)v10 != v10 ) v7 = -1; } ++v6; --v9; v8 >>= 1; } while ( v6 != 32 ); *a2 = *(_BYTE *)(v5 + 6784); return 0; } else { return 2; } } return result; } /* ==== asd_hdcp2_op_1AA [tier=EXACT size=300] ==== */ // HDCP opcode 0x1AA. int __fastcall asd_hdcp2_op_1AA(int *a1, int a2) { int *v2; // r7 int v5; // r5 int *v6; // r4 int v7; // r1 unsigned int v8; // r2 int v9; // r3 int v10; // r0 int v11; // r5 int v12; // r8 int v13; // r11 char *v14; // r7 int v15; // r10 bool v16; // zf int *v17; // r10 int v18; // r4 int result; // r0 int v20; // r5 int v21; // [sp+4h] [bp-B0h] int v22[40]; // [sp+10h] [bp-A4h] BYREF int v23; // [sp+B0h] [bp-4h] v2 = off_D10614; v23 = *off_D10614; bzero_core(result: v22, a2: 0xA0u); if ( !asd_feature_enabled(a1: 15) ) { result = 8; goto LABEL_20; } if ( a1 == nullptr || a2 == 0 || (unsigned int)((v5 = *(unsigned __int8 *)(dword_D10714 + 6785)) + a2) > 0x20 || asd_validate_ptr((unsigned int)a1, a2: 0xA0u) == 0 ) { result = 2; goto LABEL_20; } v6 = v22; sub_D01058(a1: v22, a2: a1, a3: 160); if ( v5 == 0 ) goto LABEL_22; v10 = v5 + 1; v11 = 0; v12 = 1; v21 = v10; while ( v11 != a2 ) { v13 = v21; v14 = (char *)v6 + 5 * v11; v7 = 6492; v10 = dword_D10714 + 6492; v8 = (unsigned __int8)v14[3]; v9 = (unsigned __int8)v14[4]; while ( --v13 != 0 ) { v15 = v10 + 5; v16 = ((int (*)(void))loc_D01000)() == 0; v10 = v15; if ( v16 ) goto LABEL_16; } if ( v12 != 0 ) { v17 = v6; v18 = dword_D10714; sub_D01058(a1: 5 * *(unsigned __int8 *)(dword_D10714 + 6785) + dword_D10714 + 6492, a2: v14, a3: 5); v10 = *(unsigned __int8 *)(v18 + 6785) + 1; *(_BYTE *)(v18 + 6785) = v10; v6 = v17; goto LABEL_17; } LABEL_16: v12 = 0; LABEL_17: ++v11; } while ( 1 ) { result = asd_hdcp2_sub_C7F0(a1: v10, a2: v7, a3: v8, a4: v9); v2 = off_D10614; LABEL_20: if ( *v2 == v23 ) break; ((void (__fastcall *)(int, int))loc_D1987C)(a1: result, a2: *v2 - v23); LABEL_22: v20 = dword_D10714; memcpy_aligned(result: (int *)(dword_D10714 + 6492), a2: v22, a3: 5 * a2, a4: v9); v10 = 6785; v7 = *(unsigned __int8 *)(v20 + 6785) + a2; *(_BYTE *)(v20 + 6785) = v7; } return result; } /* ==== asd_hdcp2_set_caps [tier=EXACT size=48] ==== */ // HDCP opcode 0x1A3. int __fastcall asd_hdcp2_set_caps(unsigned int a1, int a2) { unsigned int v4; // r0 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3F ) return 5; v4 = dword_D1049C + 96 * a1; if ( *(_DWORD *)(v4 + 4) != 1 ) return 5; *(_DWORD *)(v4 + 84) = a2; return 0; } /* ==== asd_hdcp2_set_receiver_id [tier=EXACT size=48] ==== */ // HDCP opcode 0x1A4. int __fastcall asd_hdcp2_set_receiver_id(unsigned int a1, int a2) { unsigned int v4; // r0 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3F ) return 5; v4 = dword_D1049C + 96 * a1; if ( *(_DWORD *)(v4 + 4) != 1 ) return 5; *(_DWORD *)(v4 + 80) = a2; return 0; } /* ==== asd_hdcp2_set_topology [tier=EXACT size=344] ==== */ // HDCP opcode 0x1A7. int __fastcall asd_hdcp2_set_topology(unsigned int a1, int *a2, int a3, unsigned int *a4) { int *v4; // r4 int result; // r0 int v10; // r8 unsigned int v11; // r11 unsigned int v12; // r2 int v13; // r8 unsigned __int8 v14; // r1 unsigned __int8 v15; // r10 unsigned int *v16; // r4 int *v17; // r0 int v18; // r0 int v19; // r0 unsigned __int8 v20; // [sp+4h] [bp-A8h] _DWORD v21[40]; // [sp+8h] [bp-A4h] BYREF int v22; // [sp+A8h] [bp-4h] v4 = off_D0FB74; v22 = *off_D0FB74; bzero_core(result: v21, a2: 0xA0u); if ( !asd_feature_enabled(a1: 15) ) { result = 8; goto LABEL_5; } if ( a1 > 0x3F ) { result = 5; goto LABEL_5; } while ( 2 ) { result = 2; if ( a3 == 0 || a2 == nullptr || a4 == nullptr ) goto LABEL_5; v10 = dword_D10714; if ( (unsigned int)*(unsigned __int8 *)(dword_D10714 + 6784) + a3 > 0x20 || asd_validate_ptr(a1: (unsigned int)a2, a2: 0xA0u) == 0 || asd_validate_ptr(a1: (unsigned int)a4, a2: 4u) == 0 ) { result = 2; goto LABEL_5; } v11 = *(_DWORD *)(v10 + 6780); sub_D01058(a1: v21, a2, a3: 160); v13 = 0; v14 = 0; v15 = 0; while ( 1 ) { if ( a3 << 24 == 0 ) { result = 0; goto LABEL_5; } if ( v11 << 31 == 0 ) break; LABEL_19: v19 = v15 + 1; ++v13; v11 >>= 1; ++v15; if ( (unsigned __int8)v19 != v19 ) v15 = -1; result = 0; if ( v13 == 32 ) goto LABEL_5; } v20 = v14; v16 = (_DWORD *)((char *)v21 + 5 * v14); v17 = (int *)asd_hdcp2_sub_FB7C(a1: v16, a2: (int)v21, a3: v12, a4: 1u); if ( v17 == nullptr ) { a2 = (int *)dword_D0FEA8; sub_D01058(a1: 5 * v13 + dword_D0FEA8 + 6332, a2: v16, a3: 5); v18 = 1 << (v15 & 0x1F); v4 = off_D0FB74; --a3; a2[1695] |= v18; v12 = 6784; ++*((_BYTE *)a2 + 6784); *a4 |= v18; a2[v13 + 1663] = a1; v14 = v20 + 1; if ( (unsigned __int8)(v20 + 1) != v20 + 1 ) v14 = -1; goto LABEL_19; } v4 = off_D0FB74; a2 = v17; if ( v17 != (int *)23 || (result = asd_hdcp2_teardown(a1: a4)) == 0 ) result = (int)a2; LABEL_5: if ( *v4 != v22 ) { ((void (__fastcall *)(int, int))loc_D1987C)(a1: result, a2: *v4 - v22); continue; } return result; } } /* ==== asd_hdcp2_stream_manage [tier=EXACT size=136] ==== */ // HDCP opcode 0x1A5. int __fastcall asd_hdcp2_stream_manage(unsigned int a1, unsigned int a2) { unsigned int v4; // r1 _DWORD *v5; // r1 _DWORD *v6; // r2 unsigned int v7; // r0 unsigned int v8; // r3 int v10; // r5 bool v11; // zf bool v12; // cf if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 <= 0x3F ) { if ( asd_validate_ptr(a1: a2, a2: 0x20u) == 0 ) return 2; v4 = dword_D102B4 + 96 * a1; if ( *(_DWORD *)(v4 + 4) == 1 ) { if ( *(_DWORD *)(v4 + 64) == 5 ) { v5 = (_DWORD *)(v4 + 20); v6 = (_DWORD *)(dword_D102B4 + 64); v7 = 0; v8 = 0; *(_DWORD *)a2 = 0; while ( 1 ) { v12 = v7 >= 9; if ( v7 <= 9 ) v12 = v8 >= 0x3F; if ( v12 ) break; if ( *(v6 - 15) == 1 ) { v10 = *(v6 - 11); v11 = *v5 == v10; if ( *v5 == v10 ) v11 = *v6 == 5; if ( v11 ) *(_BYTE *)(a2 + v7++ + 4) = *(v6 - 9); } v6 += 24; ++v8; } *(_DWORD *)a2 = v7; return 0; } else { *(_DWORD *)a2 = 1; *(_BYTE *)(a2 + 4) = 0; return 0; } } } return 5; } /* ==== asd_hdcp2_sub_10154 [tier=EXACT size=222] ==== */ // Reachability-derived label: called only from the 'hdcp2' RPC subsystem // (BFS over direct calls + tail calls from the named 0xhdcp2 handlers). // Behaviour not individually identified. int __fastcall asd_hdcp2_sub_10154(unsigned int a1, unsigned int *a2) { int (__fastcall *v4)(_DWORD *); // r6 _DWORD *v5; // r1 int v6; // r3 unsigned int v7; // r2 int result; // r0 unsigned int v9; // r5 int v10; // r0 unsigned int *v11; // r0 unsigned int v12; // r0 int (__fastcall *v13)(_DWORD *); // r5 _DWORD *v14; // r0 int (__fastcall *v15)(_DWORD *); // r12 bool v16; // zf int v17; // r0 _DWORD *v18; // r0 int v19; // r0 _DWORD *v20; // r0 *a2 = 0; if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3F ) return 5; v4 = (int (__fastcall *)(_DWORD *))dword_D104E4; v5 = (_DWORD *)(dword_D104E4 + 96 * a1); if ( v5[1] != 1 ) return 5; v6 = v5[16]; if ( v6 == 5 ) { a1 = v5[15]; v7 = dword_D104E4 + 96 * a1; if ( *(_DWORD *)(v7 + 4) != 1 ) return 5; } else { v7 = 0; } v9 = dword_D104E4 + 96 * a1; v10 = *(_DWORD *)(v9 + 72); if ( v10 == 2 ) { if ( v6 == 5 ) v12 = *(_DWORD *)(v7 + 88); else v12 = v5[22]; goto LABEL_25; } if ( v10 != 1 ) return 7; v11 = v5 + 22; if ( v6 == 5 ) v11 = (unsigned int *)(v7 + 88); v12 = *v11; if ( v12 < 2 ) goto LABEL_25; if ( v12 != 3 ) { if ( v12 != 2 ) return 0; v13 = *(int (__fastcall **)(_DWORD *))(dword_D104E4 + 6188); if ( v13 == nullptr ) return 0; v14 = v6 == 5 ? (_DWORD *)v7 : v5; if ( v13(a1: v14) != 0 ) return 0; v12 = 2; goto LABEL_25; } v15 = *(int (__fastcall **)(_DWORD *))(dword_D104E4 + 6212); result = 0; v16 = v15 == nullptr; if ( v15 != nullptr ) { v4 = *(int (__fastcall **)(_DWORD *))(dword_D104E4 + 6188); v16 = v4 == nullptr; } if ( !v16 ) { v17 = *(_DWORD *)(v9 + 80); if ( v6 == 5 ) { if ( v17 == 2 ) { v18 = (_DWORD *)v7; LABEL_37: v19 = v15(a1: v18); LABEL_41: if ( v19 != 0 ) return 0; v12 = 3; LABEL_25: *a2 = v12; return 0; } v20 = (_DWORD *)v7; } else { if ( v17 == 2 ) { v18 = v5; goto LABEL_37; } v20 = v5; } v19 = v4(a1: v20); goto LABEL_41; } return result; } /* ==== asd_hdcp2_sub_19178 [tier=EXACT size=12] ==== */ // Reachability-derived label: called only from the 'hdcp2' RPC subsystem // (BFS over direct calls + tail calls from the named 0xhdcp2 handlers). // Behaviour not individually identified. int __fastcall asd_hdcp2_sub_19178() { int (*v0)(void); // r3 v0 = *((int (**)(void))off_D19238 + 3); if ( v0 != nullptr ) return v0(); else return 1; } /* ==== asd_hdcp2_sub_C7F0 [tier=EXACT size=314] ==== */ // Reachability-derived label: called only from the 'hdcp2' RPC subsystem // (BFS over direct calls + tail calls from the named 0xhdcp2 handlers). // Behaviour not individually identified. int __fastcall asd_hdcp2_sub_C7F0(int a1, int a2, unsigned int a3, int a4) { int v4; // r7 unsigned int i; // r6 _BYTE *v6; // r0 int v7; // r9 char v8; // r1 char v9; // r1 char v10; // r2 char v11; // r3 int v12; // r5 int v13; // r10 unsigned int v14; // r11 int v15; // r8 unsigned int v16; // r0 int v17; // r5 int v18; // r12 int v19; // lr unsigned int v20; // r9 unsigned __int8 v21; // r0 int v22; // r3 unsigned int v23; // r1 int v24; // r2 _DWORD v26[2]; // [sp+4h] [bp-8h] BYREF v26[0] = a3; v26[1] = a4; if ( !asd_feature_enabled(a1: 15) ) return 8; v4 = dword_D0C92C; for ( i = 0; i < *(unsigned __int8 *)(v4 + 6785); ++i ) { v6 = (_BYTE *)(5 * i + v4); v7 = 0; v8 = v6[6492]; v6 += 6492; LOBYTE(v26[0]) = v8; v9 = v6[1]; v10 = v6[2]; v11 = v6[3]; LOBYTE(v26[1]) = v6[4]; v12 = v4 + 6332; v13 = *(unsigned __int8 *)(v4 + 6784); v14 = *(_DWORD *)(v4 + 6780); BYTE1(v26[0]) = v9; BYTE2(v26[0]) = v10; HIBYTE(v26[0]) = v11; while ( v13 << 24 != 0 ) { if ( v14 << 31 != 0 ) { if ( ((int (__fastcall *)(int, _DWORD *, int))loc_D01000)(a1: v12, a2: v26, a3: 5) == 0 ) { v15 = v4 + 4 * v7; v16 = *(_DWORD *)(v15 + 6652); if ( *(_DWORD *)(v4 + 96 * v16 + 88) != 0 ) { v17 = 0; asd_link_reset(a1: v16, a2: 0); asd_hdcp2_disable(a1: *(_DWORD *)(v15 + 6652)); v18 = *(_DWORD *)(v15 + 6652); v19 = *(unsigned __int8 *)(v4 + 6784); v20 = *(_DWORD *)(v4 + 6780); v21 = 0; v22 = v19; v23 = v20; do { if ( v22 << 24 == 0 ) break; if ( v23 << 31 != 0 ) { if ( v18 == *(_DWORD *)(v4 + 4 * v17 + 6652) ) { *(_BYTE *)(v4 + 6784) = --v19; v20 &= ~(1 << (v21 & 0x1F)); *(_DWORD *)(v4 + 6780) = v20; } --v22; } ++v17; v24 = v21 + 1; v23 >>= 1; ++v21; if ( (unsigned __int8)v24 != v24 ) v21 = -1; } while ( v17 != 32 ); break; } } --v13; } ++v7; v12 += 5; v14 >>= 1; if ( v7 == 32 ) break; } } return 0; } /* ==== asd_hdcp2_sub_FB7C [tier=EXACT size=106] ==== */ // Reachability-derived label: called only from the 'hdcp2' RPC subsystem // (BFS over direct calls + tail calls from the named 0xhdcp2 handlers). // Behaviour not individually identified. int __fastcall asd_hdcp2_sub_FB7C(unsigned int *a1, int a2, unsigned int a3, unsigned int a4) { unsigned int v5; // r6 _BYTE *v7; // r7 _DWORD v8[2]; // [sp+4h] [bp-8h] BYREF v8[0] = a3; v8[1] = a4; if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 == nullptr ) return 2; v5 = *(unsigned __int8 *)(dword_D0FF78 + 6785); if ( v5 > 0x20 ) return 2; v7 = (_BYTE *)(dword_D0FF78 + 6496); while ( v5 != 0 ) { v8[0] = *((_DWORD *)v7 - 1); LOBYTE(v8[1]) = *v7; v7 += 5; --v5; if ( ((int (__fastcall *)(unsigned int *, _DWORD *, int))loc_D01000)(a1, a2: v8, a3: 5) == 0 ) return 23; } return 0; } /* ==== asd_hdcp2_teardown [tier=EXACT size=124] ==== */ // HDCP opcode 0x1A8. int __fastcall asd_hdcp2_teardown(unsigned int *a1) { unsigned int v2; // r3 int v3; // r0 int v4; // r2 unsigned int v5; // r7 unsigned int v6; // r6 int v7; // r1 int v8; // r5 int v9; // r5 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 == nullptr || asd_validate_ptr((unsigned int)a1, a2: 4u) == 0 ) return 2; v2 = *a1; v3 = 0; v4 = dword_D10410; v5 = *a1; v6 = *a1; do { if ( v6 == 0 ) break; if ( v5 << 31 != 0 ) { v7 = *(_DWORD *)(v4 + 6780); v8 = 1 << v3; if ( (v7 & (1 << v3)) != 0 ) { *(_DWORD *)(v4 + 6780) = v7 & ~v8; v9 = ~v8; v2 = *a1; --*(_BYTE *)(v4 + 6784); } else { v9 = ~v8; } v2 &= v9; v6 &= v6 - 1; *a1 = v2; } ++v3; v5 >>= 1; } while ( v3 != 32 ); return 0; } /* ==== asd_hdcp_reset_all [tier=EXACT size=204] ==== */ // Global HDCP reset: runs asd_foreach_dio_entry_v3 then asd_reset_hdcp_link_state, and // finally applies the per-ASIC fixup register write selected by dword_D330A4. int __fastcall asd_hdcp_reset_all() { int v0; // r5 int v1; // r4 v0 = *((_DWORD *)off_D15BC4 + 19); v1 = asd_foreach_dio_entry_v3(); if ( v1 == 0 ) v1 = asd_reset_hdcp_link_state(); // switch 42 cases switch ( v0 ) { case 2: asd_reg_write_16330(); // jumptable 00D157F8 case 2 break; case 3: asd_reg_write_16384(); // jumptable 00D157F8 case 3 break; case 6: asd_reg_write_163C8(); // jumptable 00D157F8 case 6 break; case 8: asd_reg_write_164B4(); // jumptable 00D157F8 case 8 break; case 9: case 16: j_sub_D027F0(); // jumptable 00D157F8 cases 9,16 break; case 12: asd_reg_write_166AC(); // jumptable 00D157F8 case 12 break; case 14: asd_reg_rw_15FF0(); // jumptable 00D157F8 case 14 break; case 15: asd_reg_write_16788(); // jumptable 00D157F8 case 15 break; case 17: case 19: asd_reg_write_1683C(); // jumptable 00D157F8 cases 17,19 break; case 18: asd_reg_rw_16100(); // jumptable 00D157F8 case 18 break; case 20: case 25: asd_reg_write_16554(); // jumptable 00D157F8 cases 20,25 break; case 21: case 28: sub_D168D4(); // jumptable 00D157F8 cases 21,28 break; case 22: case 27: asd_reg_rw_161BC(); // jumptable 00D157F8 cases 22,27 break; case 23: asd_reg_rw_160A4(); // jumptable 00D157F8 case 23 break; case 24: asd_reg_write_165BC(); // jumptable 00D157F8 case 24 break; case 26: case 34: case 43: asd_reg_read_16290(); // jumptable 00D157F8 cases 26,34,43 break; case 29: case 30: asd_reg_write_1663C(a1: v0); // jumptable 00D157F8 cases 29,30 break; case 31: asd_reg_read_15FC4(); // jumptable 00D157F8 case 31 break; case 32: case 35: asd_reg_read_162F0(); // jumptable 00D157F8 cases 32,35 break; case 33: case 40: case 42: asd_reg_read_162C0(); // jumptable 00D157F8 cases 33,40,42 break; case 36: case 37: case 41: asd_reg_read_15FD8(); // jumptable 00D157F8 cases 36,37,41 break; default: return v1; // switch jump } return v1; } /* ==== asd_hdcp_version_select [tier=EXACT size=62] ==== */ // Maps the caller's HDCP SRM type (8 -> index 0, 9 -> index 1, anything else status 2) // and prepares a 0x104-byte working buffer. int __fastcall asd_hdcp_version_select(int a1) { int result; // r0 _DWORD v7[66]; // [sp+0h] [bp-108h] BYREF bzero_core(result: v7, a2: 0x104u); if ( a1 != 8 && a1 != 9 ) return 2; result = asd_opt_cb_D4982C(); if ( result == 0 ) { __asm { SVC 0xB4 } return 35; } return result; } /* ==== asd_hw_init [tier=EXACT size=86] ==== */ // Core hardware init: clears the 0x3C-byte block at dword_D33094, records the ASIC id in // dword_D330A4, resolves a handler table through sub_D14D88(&off_D330A8, asic), then // runs the off_D330A8 / off_D330B0 init callbacks in order. int __fastcall asd_hw_init(int a1, int a2) { struct asd_link_caps *v2; // r6 int result; // r0 int (*unk00)(void); // r1 int (*field08)(void); // r1 v2 = (struct asd_link_caps *)off_D155C4; bzero_core(result: (_DWORD *)off_D155C4 + 15, a2: 0x3Cu); v2[1].field24 = a1; if ( a2 == 0 ) return 0; result = asd_resolve_asic_handlers(a1: v2 + 2, a2: a1); if ( result == 0 ) { unk00 = (int (*)(void))v2[2].unk00; if ( unk00 != nullptr ) result = unk00(); } if ( result == 0 ) { field08 = (int (*)(void))v2[2].field08; if ( field08 != nullptr ) result = field08(); } if ( result == 0 ) { if ( asd_state_not_1() ) { result = 0; } else { result = ((int (*)(void))loc_D0C0A0)(); if ( result == 0 ) result = asd_mmio_3250000_rmw(); } } v2->field04 = 0; v2->field08 = 0; v2->field0C = 0; v2->field10 = 0; return result; } /* ==== asd_hw_ops_init [tier=EXACT size=30] ==== */ // Zeroes the 0xEC-byte asd_hw_ops struct at 0xD4279C, records the ASIC variant in // asd_asic_variant (0xD42798), then calls asd_build_hw_ops. Reached from // asd_task_ctl_2 (RPC opcode 0xFFFF0002), i.e. ASD initialisation. int __fastcall asd_hw_ops_init(int a1) { int *v1; // r6 _DWORD *v3; // r5 v1 = (int *)off_D024D4; v3 = (_DWORD *)((char *)off_D024D4 + 4); bzero_core(result: (_DWORD *)off_D024D4 + 1, a2: 0xECu); *v1 = a1; return asd_build_hw_ops(a1: v3, a2: a1); } /* ==== asd_hwop_068_v0 [tier=EXACT size=56] ==== */ // Display hardware-ops callback, installed by asd_build_hw_ops at struct // offset +0x068 (variant 0). Invoked indirectly through that struct. int __fastcall asd_hwop_068_v0(_WORD *a1) { int *v1; // r2 int v2; // r0 char *v3; // r1 char *v4; // r3 int v5; // r4 unsigned int v6; // r4 int v7; // r5 int v8; // r6 v1 = (int *)off_D16D04; *a1 = 224; v2 = 0; v3 = (char *)off_D16CC0; while ( v2 != 2688 ) { v4 = &v3[v2]; v5 = (unsigned __int8)v3[v2 + 4]; if ( v5 != 255 ) { v6 = v1[v5]; v7 = *((_DWORD *)v4 + 2); v8 = 4 * (v6 + v7); if ( v6 > ~v7 ) v8 = 0; *((_DWORD *)v4 + 2) = v8; } v2 += 12; } return 0; } /* ==== asd_hwop_068_v1 [tier=EXACT size=56] ==== */ // Display hardware-ops callback, installed by asd_build_hw_ops at struct // offset +0x068 (variant 1). Invoked indirectly through that struct. int __fastcall asd_hwop_068_v1(_WORD *a1) { int *v1; // r2 int v2; // r0 char *v3; // r1 char *v4; // r3 int v5; // r4 unsigned int v6; // r4 int v7; // r5 int v8; // r6 v1 = (int *)off_D16D84; *a1 = 112; v2 = 0; v3 = (char *)off_D16D40; while ( v2 != 1344 ) { v4 = &v3[v2]; v5 = (unsigned __int8)v3[v2 + 4]; if ( v5 != 255 ) { v6 = v1[v5]; v7 = *((_DWORD *)v4 + 2); v8 = 4 * (v6 + v7); if ( v6 > ~v7 ) v8 = 0; *((_DWORD *)v4 + 2) = v8; } v2 += 12; } return 0; } /* ==== asd_hwop_068_v2 [tier=EXACT size=56] ==== */ // Display hardware-ops callback, installed by asd_build_hw_ops at struct // offset +0x068 (variant 2). Invoked indirectly through that struct. int __fastcall asd_hwop_068_v2(_WORD *a1) { int v1; // r1 int *v2; // r2 int *v3; // r0 int v4; // r3 unsigned int v5; // r3 int v6; // r5 v1 = 876; v2 = (int *)off_D16C00; *a1 = 876; v3 = (int *)((char *)off_D16BBC + 8); while ( v1 != 0 ) { v4 = *((unsigned __int8 *)v3 - 4); if ( v4 != 255 ) { v5 = v2[v4]; v6 = 4 * (v5 + *v3); if ( v5 > ~*v3 ) v6 = 0; *v3 = v6; } v3 += 3; --v1; } return 0; } /* ==== asd_hwop_068_v3 [tier=EXACT size=58] ==== */ // Display hardware-ops callback, installed by asd_build_hw_ops at struct // offset +0x068 (variant 3). Invoked indirectly through that struct. int __fastcall asd_hwop_068_v3(_WORD *a1) { int *v1; // r2 int v2; // r0 char *v3; // r1 char *v4; // r3 int v5; // r4 unsigned int v6; // r4 int v7; // r5 int v8; // r6 v1 = (int *)off_D16C84; *a1 = 320; v2 = 0; v3 = (char *)off_D16C40; while ( v2 != 3840 ) { v4 = &v3[v2]; v5 = (unsigned __int8)v3[v2 + 4]; if ( v5 != 255 ) { v6 = v1[v5]; v7 = *((_DWORD *)v4 + 2); v8 = 4 * (v6 + v7); if ( v6 > ~v7 ) v8 = 0; *((_DWORD *)v4 + 2) = v8; } v2 += 12; } return 0; } /* ==== asd_hwop_068_v4 [tier=EXACT size=56] ==== */ // Display hardware-ops callback, installed by asd_build_hw_ops at struct // offset +0x068 (variant 4). Invoked indirectly through that struct. int __fastcall asd_hwop_068_v4(_WORD *a1) { int *v1; // r2 int v2; // r0 char *v3; // r1 char *v4; // r3 int v5; // r4 unsigned int v6; // r4 int v7; // r5 int v8; // r6 v1 = (int *)off_D16E04; *a1 = 48; v2 = 0; v3 = (char *)off_D16DC0; while ( v2 != 576 ) { v4 = &v3[v2]; v5 = (unsigned __int8)v3[v2 + 4]; if ( v5 != 255 ) { v6 = v1[v5]; v7 = *((_DWORD *)v4 + 2); v8 = 4 * (v6 + v7); if ( v6 > ~v7 ) v8 = 0; *((_DWORD *)v4 + 2) = v8; } v2 += 12; } return 0; } /* ==== asd_hwop_068_v4_0 [tier=EXACT size=56] ==== */ // Display hardware-ops callback: installed by asd_build_hw_ops into the ops // struct (asd_hw_ops @0xD4279C, 0xEC bytes) at offset +0x068, ASIC variant 4. // Invoked indirectly through that struct. int __fastcall asd_hwop_068_v4_0(_WORD *a1) { int v1; // r1 int *v2; // r2 int *v3; // r0 int v4; // r3 unsigned int v5; // r3 int v6; // r5 v1 = 1244; v2 = (int *)off_D16B80; *a1 = 1244; v3 = (int *)((char *)off_D16B3C + 8); while ( v1 != 0 ) { v4 = *((unsigned __int8 *)v3 - 4); if ( v4 != 255 ) { v5 = v2[v4]; v6 = 4 * (v5 + *v3); if ( v5 > ~*v3 ) v6 = 0; *v3 = v6; } v3 += 3; --v1; } return 0; } /* ==== asd_hwop_06C_v0 [tier=EXACT size=88] ==== */ // Display hardware-ops callback: installed by asd_build_hw_ops into the ops // struct (asd_hw_ops @0xD4279C, 0xEC bytes) at offset +0x06C, ASIC variant 0. // Invoked indirectly through that struct. int __fastcall asd_hwop_06C_v0(_WORD *a1) { int *v1; // r2 unsigned int v2; // r0 char *v3; // r1 int *v4; // r3 char *v5; // r4 int v6; // r5 unsigned int v7; // r5 int v8; // r6 int v9; // r7 int v10; // r5 int v11; // r6 unsigned int v12; // r5 int v13; // r7 v1 = (int *)off_D14388; *a1 = 8; v2 = 0; v3 = (char *)off_D14340; v4 = (int *)off_D14344; while ( v2 <= 7 ) { v5 = &v3[12 * v2]; v6 = (unsigned __int8)v5[4]; if ( v6 != 255 ) { v7 = v1[v6]; ++v2; v8 = *((_DWORD *)v5 + 2); v9 = 4 * (v7 + v8); if ( v7 > ~v8 ) v9 = 0; v10 = (unsigned __int8)v5[16]; v11 = *((_DWORD *)v5 + 5); *((_DWORD *)v5 + 2) = v9; v12 = v4[v10]; v13 = 4 * (v12 + v11); if ( v12 > ~v11 ) v13 = 0; *((_DWORD *)v5 + 5) = v13; } v2 += 2; } return 0; } /* ==== asd_hwop_06C_v1 [tier=EXACT size=354] ==== */ // Display hardware-ops callback: installed by asd_build_hw_ops into the ops // struct (asd_hw_ops @0xD4279C, 0xEC bytes) at offset +0x06C, ASIC variant 1. // Invoked indirectly through that struct. int __fastcall asd_hwop_06C_v1(_WORD *a1) { int *v1; // r12 unsigned int v2; // r0 char *v3; // r1 int *v4; // lr int *v5; // r8 int *v6; // r9 int *v7; // r10 int *v8; // r11 int *v9; // r2 int *v10; // r3 char *v11; // r4 int v12; // r6 unsigned int v13; // r5 int v14; // r6 int v15; // r7 char *v16; // r4 int v17; // r6 unsigned int v18; // r5 int v19; // r7 char *v20; // r4 int v21; // r6 unsigned int v22; // r5 int v23; // r7 char *v24; // r4 int v25; // r6 unsigned int v26; // r5 int v27; // r7 char *v28; // r4 int v29; // r6 unsigned int v30; // r5 int v31; // r7 char *v32; // r4 int v33; // r6 unsigned int v34; // r5 int v35; // r7 char *v36; // r4 int v37; // r6 unsigned int v38; // r5 int v39; // r7 int v40; // r4 char *v41; // r4 int v42; // r6 unsigned int v43; // r5 int v44; // r7 v1 = (int *)off_D14550; *a1 = 32; v2 = 0; v3 = (char *)off_D144F0; v4 = (int *)off_D144F4[0]; v5 = (int *)off_D144F8[0]; v6 = (int *)off_D144FC[0]; v7 = (int *)off_D14500[0]; v8 = (int *)off_D14504[0]; v9 = (int *)off_D14508[0]; v10 = (int *)off_D1450C; LABEL_2: v11 = &v3[12 * v2]; while ( v2 <= 0x18 ) { v12 = (unsigned __int8)v11[4]; if ( v12 != 255 ) { v13 = v1[v12]; v14 = *((_DWORD *)v11 + 2); v15 = 4 * (v13 + v14); if ( v13 > ~v14 ) v15 = 0; *((_DWORD *)v11 + 2) = v15; v16 = &v3[12 * (v2 | 1)]; v17 = *((_DWORD *)v16 + 2); v18 = v4[(unsigned __int8)v16[4]]; v19 = 4 * (v18 + v17); if ( v18 > ~v17 ) v19 = 0; *((_DWORD *)v16 + 2) = v19; v20 = &v3[12 * (v2 | 2)]; v21 = *((_DWORD *)v20 + 2); v22 = v5[(unsigned __int8)v20[4]]; v23 = 4 * (v22 + v21); if ( v22 > ~v21 ) v23 = 0; *((_DWORD *)v20 + 2) = v23; v24 = &v3[12 * (v2 | 3)]; v25 = *((_DWORD *)v24 + 2); v26 = v6[(unsigned __int8)v24[4]]; v27 = 4 * (v26 + v25); if ( v26 > ~v25 ) v27 = 0; *((_DWORD *)v24 + 2) = v27; v28 = &v3[12 * (v2 | 4)]; v29 = *((_DWORD *)v28 + 2); v30 = v7[(unsigned __int8)v28[4]]; v31 = 4 * (v30 + v29); if ( v30 > ~v29 ) v31 = 0; *((_DWORD *)v28 + 2) = v31; v32 = &v3[12 * (v2 | 5)]; v33 = *((_DWORD *)v32 + 2); v34 = v8[(unsigned __int8)v32[4]]; v35 = 4 * (v34 + v33); if ( v34 > ~v33 ) v35 = 0; *((_DWORD *)v32 + 2) = v35; v36 = &v3[12 * (v2 | 6)]; v37 = *((_DWORD *)v36 + 2); v38 = v9[(unsigned __int8)v36[4]]; v39 = 4 * (v38 + v37); if ( v38 > ~v37 ) v39 = 0; *((_DWORD *)v36 + 2) = v39; v40 = v2 | 7; v2 += 8; v41 = &v3[12 * v40]; v42 = *((_DWORD *)v41 + 2); v43 = v10[(unsigned __int8)v41[4]]; v44 = 4 * (v43 + v42); if ( v43 > ~v42 ) v44 = 0; *((_DWORD *)v41 + 2) = v44; goto LABEL_2; } } return 2 * (v2 < 0x20); } /* ==== asd_hwop_070_v0 [tier=EXACT size=58] ==== */ // Display hardware-ops callback, installed by asd_build_hw_ops at struct // offset +0x070 (variant 0). Invoked indirectly through that struct. int __fastcall asd_hwop_070_v0(_WORD *a1) { int *v1; // r2 int v2; // r0 char *v3; // r1 char *v4; // r3 int v5; // r4 unsigned int v6; // r4 int v7; // r5 int v8; // r6 v1 = (int *)off_D10954; *a1 = 119; v2 = dword_D1094C; v3 = (char *)off_D10950; while ( v2 != 0 ) { v4 = &v3[v2]; v5 = (unsigned __int8)v3[v2 + 1432]; if ( v5 != 255 ) { v6 = v1[v5]; v7 = *((_DWORD *)v4 + 359); v8 = 4 * (v6 + v7); if ( v6 > ~v7 ) v8 = 0; *((_DWORD *)v4 + 359) = v8; } v2 += 12; } return 0; } /* ==== asd_hwop_070_v1 [tier=EXACT size=56] ==== */ // Display hardware-ops callback: installed by asd_build_hw_ops into the ops // struct (asd_hw_ops @0xD4279C, 0xEC bytes) at offset +0x070, ASIC variant 1. // Invoked indirectly through that struct. int __fastcall asd_hwop_070_v1(_WORD *a1) { int *v1; // r2 int v2; // r0 int *v3; // r1 int *v4; // r3 int v5; // r4 unsigned int v6; // r4 int v7; // r5 int v8; // r6 v1 = (int *)off_D1090C; *a1 = 108; v2 = 0; v3 = (int *)off_D10908; while ( v2 != 324 ) { v4 = &v3[v2]; v5 = LOBYTE(v3[v2 + 1]); if ( v5 != 255 ) { v6 = v1[v5]; v7 = v4[2]; v8 = 4 * (v6 + v7); if ( v6 > ~v7 ) v8 = 0; v4[2] = v8; } v2 += 3; } return 0; } /* ==== asd_hwop_074_v0 [tier=EXACT size=58] ==== */ // Display hardware-ops callback, installed by asd_build_hw_ops at struct // offset +0x074 (variant 0). Invoked indirectly through that struct. int __fastcall asd_hwop_074_v0(_WORD *a1) { int *v1; // r2 int v2; // r0 int *v3; // r1 char *v4; // r3 int v5; // r4 unsigned int v6; // r4 int v7; // r5 int v8; // r6 v1 = (int *)off_D11DC8; *a1 = 215; v2 = dword_D11DC0; v3 = (int *)off_D11DC4; while ( v2 != 0 ) { v4 = (char *)v3 + v2; v5 = *((unsigned __int8 *)v3 + v2 + 2584); if ( v5 != 255 ) { v6 = v1[v5]; v7 = *((_DWORD *)v4 + 647); v8 = 4 * (v6 + v7); if ( v6 > ~v7 ) v8 = 0; *((_DWORD *)v4 + 647) = v8; } v2 += 12; } return 0; } /* ==== asd_hwop_074_v1 [tier=EXACT size=56] ==== */ // Display hardware-ops callback: installed by asd_build_hw_ops into the ops // struct (asd_hw_ops @0xD4279C, 0xEC bytes) at offset +0x074, ASIC variant 1. // Invoked indirectly through that struct. int __fastcall asd_hwop_074_v1(_WORD *a1) { int *v1; // r2 int v2; // r0 int *v3; // r1 int *v4; // r3 int v5; // r4 unsigned int v6; // r4 int v7; // r5 int v8; // r6 v1 = (int *)off_D11D80; *a1 = 43; v2 = 0; v3 = (int *)off_D11D7C; while ( v2 != 129 ) { v4 = &v3[v2]; v5 = LOBYTE(v3[v2 + 1]); if ( v5 != 255 ) { v6 = v1[v5]; v7 = v4[2]; v8 = 4 * (v6 + v7); if ( v6 > ~v7 ) v8 = 0; v4[2] = v8; } v2 += 3; } return 0; } /* ==== asd_hwop_078_v0 [tier=EXACT size=40] ==== */ // Display hardware-ops callback, installed by asd_build_hw_ops at struct // offset +0x078 (variant 0). Invoked indirectly through that struct. int __fastcall asd_hwop_078_v0(_WORD *a1) { int v1; // r1 unsigned int v2; // r1 int v3; // r2 int v4; // r3 *a1 = 1; v1 = *(unsigned __int8 *)(off_D02728 + 4); if ( v1 != 255 ) { v2 = (*off_D0272C)[v1]; v3 = *(_DWORD *)(off_D02728 + 8); v4 = 4 * (v2 + v3); if ( v2 > ~v3 ) v4 = 0; *(_DWORD *)(off_D02728 + 8) = v4; } return 0; } /* ==== asd_hwop_07C_v0 [tier=EXACT size=54] ==== */ // Display hardware-ops callback, installed by asd_build_hw_ops at struct // offset +0x07C (variant 0). Invoked indirectly through that struct. int __fastcall asd_hwop_07C_v0(_WORD *a1) { int *v1; // r2 int v2; // r0 int *v3; // r1 int *v4; // r3 int v5; // r4 unsigned int v6; // r4 int v7; // r5 int v8; // r6 v1 = (int *)off_D110E4; *a1 = 4; v2 = 0; v3 = (int *)off_D110E0; while ( v2 != 12 ) { v4 = &v3[v2]; v5 = LOBYTE(v3[v2 + 1]); if ( v5 != 255 ) { v6 = v1[v5]; v7 = v4[2]; v8 = 4 * (v6 + v7); if ( v6 > ~v7 ) v8 = 0; v4[2] = v8; } v2 += 3; } return 0; } /* ==== asd_hwop_07C_v1 [tier=EXACT size=54] ==== */ // Display hardware-ops callback: installed by asd_build_hw_ops into the ops // struct (asd_hw_ops @0xD4279C, 0xEC bytes) at offset +0x07C, ASIC variant 1. // Invoked indirectly through that struct. int __fastcall asd_hwop_07C_v1(_WORD *a1) { int *v1; // r2 int v2; // r0 int *v3; // r1 int *v4; // r3 int v5; // r4 unsigned int v6; // r4 int v7; // r5 int v8; // r6 v1 = (int *)off_D110A4; *a1 = 3; v2 = 0; v3 = (int *)off_D110A0; while ( v2 != 9 ) { v4 = &v3[v2]; v5 = LOBYTE(v3[v2 + 1]); if ( v5 != 255 ) { v6 = v1[v5]; v7 = v4[2]; v8 = 4 * (v6 + v7); if ( v6 > ~v7 ) v8 = 0; v4[2] = v8; } v2 += 3; } return 0; } /* ==== asd_hwop_080_v0 [tier=EXACT size=56] ==== */ // Display hardware-ops callback, installed by asd_build_hw_ops at struct // offset +0x080 (variant 0). Invoked indirectly through that struct. int __fastcall asd_hwop_080_v0(_WORD *a1) { int v1; // r1 int *v2; // r2 int *v3; // r0 int v4; // r3 unsigned int v5; // r3 int v6; // r5 v1 = 898; v2 = (int *)off_D0C5DC; *a1 = 898; v3 = (int *)((char *)off_D0C5D8 + 8); while ( v1 != 0 ) { v4 = *((unsigned __int8 *)v3 - 4); if ( v4 != 255 ) { v5 = v2[v4]; v6 = 4 * (v5 + *v3); if ( v5 > ~*v3 ) v6 = 0; *v3 = v6; } v3 += 3; --v1; } return 0; } /* ==== asd_hwop_080_v1 [tier=EXACT size=54] ==== */ // Display hardware-ops callback, installed by asd_build_hw_ops at struct // offset +0x080 (variant 1). Invoked indirectly through that struct. int __fastcall asd_hwop_080_v1(_WORD *a1) { int *v1; // r2 int v2; // r0 int *v3; // r1 int *v4; // r3 int v5; // r4 unsigned int v6; // r4 int v7; // r5 int v8; // r6 v1 = (int *)off_D0C55C; *a1 = 7; v2 = 0; v3 = (int *)off_D0C558; while ( v2 != 21 ) { v4 = &v3[v2]; v5 = LOBYTE(v3[v2 + 1]); if ( v5 != 255 ) { v6 = v1[v5]; v7 = v4[2]; v8 = 4 * (v6 + v7); if ( v6 > ~v7 ) v8 = 0; v4[2] = v8; } v2 += 3; } return 0; } /* ==== asd_hwop_080_v2 [tier=EXACT size=54] ==== */ // Display hardware-ops callback, installed by asd_build_hw_ops at struct // offset +0x080 (variant 2). Invoked indirectly through that struct. int __fastcall asd_hwop_080_v2(_WORD *a1) { int *v1; // r2 int v2; // r0 char *v3; // r1 char *v4; // r3 int v5; // r4 unsigned int v6; // r4 int v7; // r5 int v8; // r6 v1 = (int *)off_D0C61C; *a1 = 6; v2 = 0; v3 = (char *)off_D0C618; while ( v2 != 72 ) { v4 = &v3[v2]; v5 = (unsigned __int8)v3[v2 + 4]; if ( v5 != 255 ) { v6 = v1[v5]; v7 = *((_DWORD *)v4 + 2); v8 = 4 * (v6 + v7); if ( v6 > ~v7 ) v8 = 0; *((_DWORD *)v4 + 2) = v8; } v2 += 12; } return 0; } /* ==== asd_hwop_080_v3 [tier=EXACT size=56] ==== */ // Display hardware-ops callback: installed by asd_build_hw_ops into the ops // struct (asd_hw_ops @0xD4279C, 0xEC bytes) at offset +0x080, ASIC variant 3. // Invoked indirectly through that struct. int __fastcall asd_hwop_080_v3(_WORD *a1) { int v1; // r1 int *v2; // r2 int *v3; // r0 int v4; // r3 unsigned int v5; // r3 int v6; // r5 v1 = 890; v2 = (int *)off_D0C59C; *a1 = 890; v3 = &(*off_D0C598)[2]; while ( v1 != 0 ) { v4 = *((unsigned __int8 *)v3 - 4); if ( v4 != 255 ) { v5 = v2[v4]; v6 = 4 * (v5 + *v3); if ( v5 > ~*v3 ) v6 = 0; *v3 = v6; } v3 += 3; --v1; } return 0; } /* ==== asd_hwop_084_v0 [tier=EXACT size=56] ==== */ // Display hardware-ops callback, installed by asd_build_hw_ops at struct // offset +0x084 (variant 0). Invoked indirectly through that struct. int __fastcall asd_hwop_084_v0(_WORD *a1) { _DWORD *v1; // r2 int v2; // r0 char *v3; // r1 char *v4; // r3 int v5; // r4 unsigned int v6; // r4 int v7; // r5 int v8; // r6 v1 = off_D12604; *a1 = 154; v2 = 0; v3 = (char *)off_D12600; while ( v2 != 1848 ) { v4 = &v3[v2]; v5 = (unsigned __int8)v3[v2 + 4]; if ( v5 != 255 ) { v6 = v1[v5]; v7 = *((_DWORD *)v4 + 2); v8 = 4 * (v6 + v7); if ( v6 > ~v7 ) v8 = 0; *((_DWORD *)v4 + 2) = v8; } v2 += 12; } return 0; } /* ==== asd_hwop_084_v1 [tier=EXACT size=58] ==== */ // Display hardware-ops callback: installed by asd_build_hw_ops into the ops // struct (asd_hw_ops @0xD4279C, 0xEC bytes) at offset +0x084, ASIC variant 1. // Invoked indirectly through that struct. int __fastcall asd_hwop_084_v1(_WORD *a1) { _DWORD *v1; // r2 int v2; // r0 char *v3; // r1 char *v4; // r3 int v5; // r4 unsigned int v6; // r4 int v7; // r5 int v8; // r6 v1 = off_D12598; *a1 = 105; v2 = dword_D12590; v3 = (char *)off_D12594; while ( v2 != 0 ) { v4 = &v3[v2]; v5 = (unsigned __int8)v3[v2 + 1264]; if ( v5 != 255 ) { v6 = v1[v5]; v7 = *((_DWORD *)v4 + 317); v8 = 4 * (v6 + v7); if ( v6 > ~v7 ) v8 = 0; *((_DWORD *)v4 + 317) = v8; } v2 += 12; } return 0; } /* ==== asd_hwop_090_v0 [tier=EXACT size=54] ==== */ // Display hardware-ops callback, installed by asd_build_hw_ops at struct // offset +0x090 (variant 0). Invoked indirectly through that struct. int __fastcall asd_hwop_090_v0(_WORD *a1) { int *v1; // r2 int v2; // r0 char *v3; // r1 char *v4; // r3 int v5; // r4 unsigned int v6; // r4 int v7; // r5 int v8; // r6 v1 = (int *)off_D107B4; *a1 = 19; v2 = 0; v3 = (char *)off_D107B0; while ( v2 != 228 ) { v4 = &v3[v2]; v5 = (unsigned __int8)v3[v2 + 4]; if ( v5 != 255 ) { v6 = v1[v5]; v7 = *((_DWORD *)v4 + 2); v8 = 4 * (v6 + v7); if ( v6 > ~v7 ) v8 = 0; *((_DWORD *)v4 + 2) = v8; } v2 += 12; } return 0; } /* ==== asd_hwop_094_v0 [tier=EXACT size=8] ==== */ // Display hardware-ops callback, installed by asd_build_hw_ops at struct // offset +0x094 (variant 0). Invoked indirectly through that struct. int __fastcall asd_hwop_094_v0(_WORD *a1) { *a1 = 24; return 0; } /* ==== asd_hwop_094_v1 [tier=EXACT size=10] ==== */ // Display hardware-ops callback: installed by asd_build_hw_ops into the ops // struct (asd_hw_ops @0xD4279C, 0xEC bytes) at offset +0x094, ASIC variant 1. // Invoked indirectly through that struct. int __fastcall asd_hwop_094_v1(_WORD *a1) { *a1 = 338; return 0; } /* ==== asd_hwop_098_v0 [tier=EXACT size=8] ==== */ // Display hardware-ops callback: installed by asd_build_hw_ops into the ops // struct (asd_hw_ops @0xD4279C, 0xEC bytes) at offset +0x098, ASIC variant 0. // Invoked indirectly through that struct. int __fastcall asd_hwop_098_v0(_WORD *a1) { *a1 = 51; return 0; } /* ==== asd_hwop_0AC_v0 [tier=EXACT size=32] ==== */ // Display hardware-ops callback, installed by asd_build_hw_ops at struct // offset +0x0AC (variant 0). Invoked indirectly through that struct. int __fastcall asd_hwop_0AC_v0(char *a1, int a2, int a3, int a4) { _DWORD vars0[5]; // [sp+4h] [bp+0h] BYREF vars0[0] = dword_D15DEC; vars0[1] = dword_D15DEC + 12; vars0[2] = dword_D15DEC + 16; return asd_reg_rw_15E14(a1: (int)vars0, a2: 0x10000, a3: (unsigned int)a1); } /* ==== asd_hwop_0AC_v0_0 [tier=EXACT size=32] ==== */ // Display hardware-ops callback: installed by asd_build_hw_ops into the ops // struct (asd_hw_ops @0xD4279C, 0xEC bytes) at offset +0x0AC, ASIC variant 0. // Invoked indirectly through that struct. int __fastcall asd_hwop_0AC_v0_0(char *a1, int a2, int a3, int a4) { _DWORD vars0[5]; // [sp+4h] [bp+0h] BYREF vars0[0] = dword_D15DEC; vars0[1] = dword_D15DEC + 12; vars0[2] = dword_D15DEC + 16; return asd_reg_rw_15E14(a1: (int)vars0, a2: 0x20000, a3: (unsigned int)a1); } /* ==== asd_hwop_0AC_v1 [tier=EXACT size=32] ==== */ // Display hardware-ops callback: installed by asd_build_hw_ops into the ops // struct (asd_hw_ops @0xD4279C, 0xEC bytes) at offset +0x0AC, ASIC variant 1. // Invoked indirectly through that struct. int __fastcall asd_hwop_0AC_v1(char *a1, int a2, int a3, int a4) { _DWORD vars0[5]; // [sp+4h] [bp+0h] BYREF vars0[0] = dword_D15DEC; vars0[1] = dword_D15DEC + 12; vars0[2] = dword_D15DEC + 16; return asd_reg_rw_15E14(a1: (int)vars0, a2: 0x20000, a3: (unsigned int)a1); } /* ==== asd_hwop_0D4_v1 [tier=EXACT size=58] ==== */ // Display hardware-ops callback, installed by asd_build_hw_ops at struct // offset +0x0D4 (variant 1). Invoked indirectly through that struct. int __fastcall asd_hwop_0D4_v1(_WORD *a1) { int *v1; // r2 int v2; // r0 unsigned __int8 *v3; // r1 int v4; // r3 unsigned __int8 *v5; // r4 unsigned int v6; // r3 int v7; // r5 int v8; // r6 v1 = (int *)off_D16C00; *a1 = 12; v2 = 0; v3 = (unsigned __int8 *)off_D16BFC; while ( v2 != 12 ) { v4 = v3[8 * v2]; if ( v4 != 255 ) { v5 = &v3[8 * v2]; v6 = v1[v4]; v7 = *((_DWORD *)v5 + 1); v8 = 4 * (v6 + v7); if ( v6 > ~v7 ) v8 = 0; *((_DWORD *)v5 + 1) = v8; } ++v2; } return 0; } /* ==== asd_hwop_0D4_v2 [tier=EXACT size=58] ==== */ // Display hardware-ops callback, installed by asd_build_hw_ops at struct // offset +0x0D4 (variant 2). Invoked indirectly through that struct. int __fastcall asd_hwop_0D4_v2(_WORD *a1) { int *v1; // r2 int v2; // r0 unsigned __int8 *v3; // r1 int v4; // r3 unsigned __int8 *v5; // r4 unsigned int v6; // r3 int v7; // r5 int v8; // r6 v1 = (int *)off_D16E04; *a1 = 34; v2 = 0; v3 = (unsigned __int8 *)off_D16E00; while ( v2 != 34 ) { v4 = v3[8 * v2]; if ( v4 != 255 ) { v5 = &v3[8 * v2]; v6 = v1[v4]; v7 = *((_DWORD *)v5 + 1); v8 = 4 * (v6 + v7); if ( v6 > ~v7 ) v8 = 0; *((_DWORD *)v5 + 1) = v8; } ++v2; } return 0; } /* ==== asd_hwop_0DC_v0 [tier=EXACT size=58] ==== */ // Display hardware-ops callback, installed by asd_build_hw_ops at struct // offset +0x0DC (variant 0). Invoked indirectly through that struct. int __fastcall asd_hwop_0DC_v0(_WORD *a1) { int *v1; // r2 int v2; // r0 unsigned __int8 *v3; // r1 int v4; // r3 unsigned __int8 *v5; // r4 unsigned int v6; // r3 int v7; // r5 int v8; // r6 v1 = (int *)off_D16EE8; *a1 = 2; v2 = 0; v3 = (unsigned __int8 *)off_D16EE4; while ( v2 != 2 ) { v4 = v3[8 * v2]; if ( v4 != 255 ) { v5 = &v3[8 * v2]; v6 = v1[v4]; v7 = *((_DWORD *)v5 + 1); v8 = 4 * (v6 + v7); if ( v6 > ~v7 ) v8 = 0; *((_DWORD *)v5 + 1) = v8; } ++v2; } return 0; } /* ==== asd_hwop_0DC_v1 [tier=EXACT size=78] ==== */ // Display hardware-ops callback: installed by asd_build_hw_ops into the ops // struct (asd_hw_ops @0xD4279C, 0xEC bytes) at offset +0x0DC, ASIC variant 1. // Invoked indirectly through that struct. int __fastcall asd_hwop_0DC_v1(_WORD *a1) { unsigned __int8 *v5; // r2 int *v6; // r3 int v7; // r1 BOOL v8; // r0 int v9; // r4 unsigned int v10; // r4 unsigned __int8 *v11; // r5 int v12; // r6 int v13; // r7 __asm { SVC 0x8D } *a1 = 2; v5 = (unsigned __int8 *)off_D16FD4; v6 = (int *)off_D16FD8; v7 = 0; v8 = a1 == (_WORD *)25; while ( v7 != 2 ) { v9 = v5[8 * v7]; if ( v9 != 255 ) { v10 = v6[5 * v8 + v9]; v11 = &v5[8 * v7]; v12 = *((_DWORD *)v11 + 1); v13 = 4 * (v10 + v12); if ( v10 > ~v12 ) v13 = 0; *((_DWORD *)v11 + 1) = v13; } ++v7; } return 0; } /* ==== asd_irq_task_D42790 [tier=EXACT size=28] ==== */ // Worker task body (spawned by asd_spawn_task_D12A14): arms the interrupt source via the // direct-MMIO RMW on &unk_D42790, then loops forever waiting with SVC 0x5A and servicing // asd_reg_read_129D4. int __fastcall asd_irq_task_D42790() { int result; // r0 result = asd_mmio_30106AC_rmw(a1: off_D12A30); if ( result == 0 ) { while ( 1 ) { __asm { SVC 0x5A ; 'Z' } asd_reg_read_129D4(); } } return result; } /* ==== asd_irq_task_D42794 [tier=EXACT size=28] ==== */ // Worker task body (spawned by asd_spawn_task_D18780): arms &dword_D42794, then loops // forever waiting with SVC 0x5A and running asd_link_trace_loop. int __fastcall asd_irq_task_D42794() { int *v0; // r4 int result; // r0 int v2; // r2 int v3; // r3 v0 = (int *)off_D1879C; result = asd_mmio_30106AC_rmw(a1: off_D1879C); if ( result == 0 ) { while ( 1 ) { __asm { SVC 0x5A ; 'Z' } asd_link_trace_loop(a1: *v0, a2: -1, a3: v2, a4: v3); } } return result; } /* ==== asd_is_not_sigtype1 [tier=EXACT size=8] ==== */ // Predicate: returns (a1 != 1), a display signal-type test. BOOL __fastcall asd_is_not_sigtype1(int a1) { return a1 != 1; } /* ==== asd_is_not_sigtype3 [tier=EXACT size=8] ==== */ // Predicate: returns (a1 != 3), a display signal-type test. BOOL __fastcall asd_is_not_sigtype3(int a1) { return a1 != 3; } /* ==== asd_is_supported_asic [tier=EXACT size=86] ==== */ // Whitelist test on a (device, revision) pair: device 5686 with revision 131/132/211/ // 133/128/129, or the literal 0xC100001636. BOOL __fastcall asd_is_supported_asic(__int64 a1) { return (_DWORD)a1 == 5686 && ((unsigned int)(HIDWORD(a1) - 131) < 2 || HIDWORD(a1) == 211 || HIDWORD(a1) == 133 || (HIDWORD(a1) | 1) == 129) || a1 == 0xC100001636LL; } /* ==== asd_link_bringup_seq [tier=EXACT size=232] ==== */ // Link bring-up: requires unk_D42408 bit31 (else 8), then runs the set-bit1 / set-bit2 // wait helpers and asd_reg_poll_seq. int __fastcall asd_link_bringup_seq(_DWORD *a1) { unsigned int v2; // r4 _DWORD *v3; // r7 int v4; // r5 int v6; // r2 int v7; // r3 void (__fastcall *v8)(int, int, unsigned int); // r9 int v9; // r0 void (__fastcall *v10)(int, int, unsigned int); // r8 int v11; // r2 int v12; // r3 if ( a1 == nullptr ) return 2; v2 = a1[5]; if ( *((_DWORD *)off_D07A84 + 3) <= v2 ) return 2; v3 = off_D07A88; if ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D07A88 + 4), a3: v2) << 31 == 0 ) return 8; asd_reg_set_bit1_wait(a1: v2); asd_reg_set_bit2_wait(a1: v2); asd_reg_poll_seq(a1: a1[3], a2: 2, a3: v6, a4: v7); v8 = (void (__fastcall *)(int, int, unsigned int))off_D07D24; v4 = 0; v9 = off_D07D24(a1: 0, a2: v3[10], a3: v2); v10 = (void (__fastcall *)(int, int, unsigned int))off_D081C4; off_D081C4(a1: 0, a2: v3[10], a3: v2, a4: v9 | 1); v8(a1: 0, a2: v3[7], a3: v2); v10(a1: 0, a2: v3[7], a3: v2); v8(a1: 0, a2: v3[14], a3: v2); v10(a1: 0, a2: v3[14], a3: v2); v8(a1: 0, a2: v3[41], a3: v2); v10(a1: 0, a2: v3[41], a3: v2); asd_reg_poll_seq(a1: a1[3], a2: 2, a3: v11, a4: v12); v8(a1: 0, a2: v3[8], a3: v2); v10(a1: 0, a2: v3[8], a3: v2); v8(a1: 0, a2: v3[6], a3: v2); v10(a1: 0, a2: v3[6], a3: v2); return v4; } /* ==== asd_link_bringup_seq_v2 [tier=EXACT size=232] ==== */ // Sibling of asd_link_bringup_seq for the second register group. int __fastcall asd_link_bringup_seq_v2(_DWORD *a1) { unsigned int v2; // r4 _DWORD *v3; // r7 int v4; // r5 int v6; // r2 int v7; // r3 void (__fastcall *v8)(int, int, unsigned int); // r9 int v9; // r0 void (__fastcall *v10)(int, int, unsigned int); // r8 int v11; // r2 int v12; // r3 if ( a1 == nullptr ) return 2; v2 = a1[5]; if ( *((_DWORD *)off_D07BD4 + 3) <= v2 ) return 2; v3 = off_D07BD8; if ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D07BD8 + 4), a3: v2) << 31 == 0 ) return 8; asd_reg_set_bit1_wait(a1: v2); asd_reg_set_bit2_wait(a1: v2); asd_reg_poll_seq(a1: a1[3], a2: 2, a3: v6, a4: v7); v8 = (void (__fastcall *)(int, int, unsigned int))off_D07D24; v4 = 0; v9 = off_D07D24(a1: 0, a2: v3[10], a3: v2); v10 = (void (__fastcall *)(int, int, unsigned int))off_D081C4; off_D081C4(a1: 0, a2: v3[10], a3: v2, a4: v9 | 1); v8(a1: 0, a2: v3[7], a3: v2); v10(a1: 0, a2: v3[7], a3: v2); v8(a1: 0, a2: v3[14], a3: v2); v10(a1: 0, a2: v3[14], a3: v2); v8(a1: 0, a2: v3[41], a3: v2); v10(a1: 0, a2: v3[41], a3: v2); asd_reg_poll_seq(a1: a1[3], a2: 2, a3: v11, a4: v12); v8(a1: 0, a2: v3[8], a3: v2); v10(a1: 0, a2: v3[8], a3: v2); v8(a1: 0, a2: v3[6], a3: v2); v10(a1: 0, a2: v3[6], a3: v2); return v4; } /* ==== asd_link_bringup_seq_v3 [tier=EXACT size=284] ==== */ // Third link bring-up variant: same unk_D42408 gate and set-bit1/set-bit2 wait sequence. int __fastcall asd_link_bringup_seq_v3(_DWORD *a1) { unsigned int v2; // r4 _DWORD *v3; // r8 int v4; // r6 int v6; // r2 int v7; // r3 void (__fastcall *v8)(int, int, unsigned int); // r9 int v9; // r0 void (__fastcall *v10)(int, int, unsigned int); // r10 int v11; // r2 int v12; // r3 if ( a1 == nullptr ) return 2; v2 = a1[5]; if ( *((_DWORD *)off_D07D40 + 3) <= v2 ) return 2; v3 = off_D0889C; if ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0889C + 4), a3: v2) << 31 == 0 ) return 8; asd_reg_set_bit1_wait(a1: v2); asd_reg_set_bit2_wait(a1: v2); asd_reg_poll_seq(a1: a1[3], a2: 2, a3: v6, a4: v7); v8 = (void (__fastcall *)(int, int, unsigned int))off_D07D24; v4 = 0; v9 = off_D07D24(a1: 0, a2: v3[14], a3: v2); v10 = (void (__fastcall *)(int, int, unsigned int))off_D088A0; off_D088A0(a1: 0, a2: v3[14], a3: v2, a4: v9 | 3); v8(a1: 0, a2: v3[41], a3: v2); v10(a1: 0, a2: v3[41], a3: v2); asd_reg_poll_seq(a1: a1[3], a2: 2, a3: v11, a4: v12); v8(a1: 0, a2: v3[11], a3: v2); v10(a1: 0, a2: v3[11], a3: v2); v10(a1: 0, a2: v3[11], a3: v2); v8(a1: 0, a2: v3[8], a3: v2); v10(a1: 0, a2: v3[8], a3: v2); v8(a1: 0, a2: v3[6], a3: v2); v10(a1: 0, a2: v3[6], a3: v2); v8(a1: 0, a2: v3[20], a3: v2); v10(a1: 0, a2: v3[20], a3: v2); if ( a1[16] == 2 ) { v4 = 0; asd_reg_write_1946C(a1: 0, a2: v3[34], a3: v2); } return v4; } /* ==== asd_link_bringup_seq_v4 [tier=EXACT size=328] ==== */ // Fourth link bring-up variant. int __fastcall asd_link_bringup_seq_v4(_DWORD *a1) { unsigned int v2; // r4 _DWORD *v3; // r8 int v4; // r6 int v6; // r2 int v7; // r3 void (__fastcall *v8)(int, int, unsigned int); // r9 int v9; // r0 void (__fastcall *v10)(int, int, unsigned int); // r10 int v11; // r2 int v12; // r3 if ( a1 == nullptr ) return 2; v2 = a1[5]; if ( *((_DWORD *)off_D07E0C + 3) <= v2 ) return 2; v3 = off_D0889C; if ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0889C + 4), a3: v2) << 31 == 0 ) return 8; asd_reg_set_bit1_wait(a1: v2); asd_reg_set_bit2_wait(a1: v2); asd_reg_poll_seq(a1: a1[3], a2: 2, a3: v6, a4: v7); v8 = (void (__fastcall *)(int, int, unsigned int))off_D07D24; v4 = 0; v9 = off_D07D24(a1: 0, a2: v3[10], a3: v2); v10 = (void (__fastcall *)(int, int, unsigned int))off_D088A0; off_D088A0(a1: 0, a2: v3[10], a3: v2, a4: ((((unsigned __int16)a1[4] << 8) + 1792) & 0x700) + (v9 & 0xFFFFF8FE)); v8(a1: 0, a2: v3[14], a3: v2); v10(a1: 0, a2: v3[14], a3: v2); v8(a1: 0, a2: v3[41], a3: v2); v10(a1: 0, a2: v3[41], a3: v2); asd_reg_poll_seq(a1: a1[3], a2: 2, a3: v11, a4: v12); v8(a1: 0, a2: v3[11], a3: v2); v10(a1: 0, a2: v3[11], a3: v2); v10(a1: 0, a2: v3[11], a3: v2); v8(a1: 0, a2: v3[8], a3: v2); v10(a1: 0, a2: v3[8], a3: v2); v8(a1: 0, a2: v3[6], a3: v2); v10(a1: 0, a2: v3[6], a3: v2); v8(a1: 0, a2: v3[20], a3: v2); v10(a1: 0, a2: v3[20], a3: v2); if ( a1[16] == 2 ) { v4 = 0; asd_reg_write_1946C(a1: 0, a2: v3[34], a3: v2); } return v4; } /* ==== asd_link_bringup_seq_v5 [tier=EXACT size=328] ==== */ // Fifth link bring-up variant. int __fastcall asd_link_bringup_seq_v5(_DWORD *a1) { unsigned int v2; // r4 _DWORD *v3; // r8 int v4; // r6 int v6; // r2 int v7; // r3 void (__fastcall *v8)(int, int, unsigned int); // r9 int v9; // r0 void (__fastcall *v10)(int, int, unsigned int); // r10 int v11; // r2 int v12; // r3 if ( a1 == nullptr ) return 2; v2 = a1[5]; if ( *((_DWORD *)off_D07F8C + 3) <= v2 ) return 2; v3 = off_D0889C; if ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0889C + 4), a3: v2) << 31 == 0 ) return 8; asd_reg_set_bit1_wait(a1: v2); asd_reg_set_bit2_wait(a1: v2); asd_reg_poll_seq(a1: a1[3], a2: 2, a3: v6, a4: v7); v8 = (void (__fastcall *)(int, int, unsigned int))off_D07D24; v4 = 0; v9 = off_D07D24(a1: 0, a2: v3[10], a3: v2); v10 = (void (__fastcall *)(int, int, unsigned int))off_D08BC8; off_D08BC8(a1: 0, a2: v3[10], a3: v2, a4: ((((unsigned __int16)a1[4] << 8) + 1792) & 0x700) + (v9 & 0xFFFFF8FE)); v8(a1: 0, a2: v3[14], a3: v2); v10(a1: 0, a2: v3[14], a3: v2); v8(a1: 0, a2: v3[41], a3: v2); v10(a1: 0, a2: v3[41], a3: v2); asd_reg_poll_seq(a1: a1[3], a2: 2, a3: v11, a4: v12); v8(a1: 0, a2: v3[11], a3: v2); v10(a1: 0, a2: v3[11], a3: v2); v10(a1: 0, a2: v3[11], a3: v2); v8(a1: 0, a2: v3[8], a3: v2); v10(a1: 0, a2: v3[8], a3: v2); v8(a1: 0, a2: v3[6], a3: v2); v10(a1: 0, a2: v3[6], a3: v2); v8(a1: 0, a2: v3[20], a3: v2); v10(a1: 0, a2: v3[20], a3: v2); if ( a1[16] == 2 ) { v4 = 0; asd_reg_write_1946C(a1: 0, a2: v3[34], a3: v2); } return v4; } /* ==== asd_link_call_D49810_D49814 [tier=EXACT size=106] ==== */ // Bounds a1 <= 1 and a2 <= 3, then invokes the runtime callbacks obtained from // asd_get_D49810 and asd_get_D49814. int __fastcall asd_link_call_D49810_D49814(unsigned int a1, unsigned int a2, int a3) { int (__fastcall *D49810)(unsigned int, unsigned int); // r9 int v7; // r7 int D49814; // r0 bool v9; // cc int (__fastcall *v10)(unsigned int, unsigned int, int); // r8 bool v11; // zf D49810 = (int (__fastcall *)(unsigned int, unsigned int))asd_get_D49810(); v7 = 2; D49814 = asd_get_D49814(); v9 = a1 > 1; if ( a1 <= 1 ) v9 = a2 > 3; if ( !v9 && a3 != 0 ) { v10 = (int (__fastcall *)(unsigned int, unsigned int, int))D49814; v11 = D49810 == nullptr; v7 = 27; if ( D49810 != nullptr ) v11 = D49814 == 0; if ( !v11 ) { if ( asd_link_callback_ok(a1) && asd_opt_cb_D4980C_bounded(a1) != 0 ) { v7 = v10(a1, a2, a3); if ( v7 == 0 ) return D49810(a1, a2: (16 * a2) | 0x1000000); } else { return 0; } } } return v7; } /* ==== asd_link_call_D49818 [tier=EXACT size=78] ==== */ // Bounds a1 <= 1 and requires dword_D330A4 (ASIC id) in the 20..43 range with bitmask // 0xF7FEF5, then invokes the runtime callback from asd_get_D49818. int __fastcall asd_link_call_D49818(unsigned int a1, int a2) { int D49818; // r3 int result; // r0 unsigned int v6; // r1 int (__fastcall *v7)(unsigned int, int); // r6 D49818 = asd_get_D49818(); result = 2; if ( a1 <= 1 && a2 != 0 ) { v6 = *((_DWORD *)off_D158A8 + 19) - 20; result = 0; if ( v6 <= 0x17 && ((1 << v6) & dword_D157B0) != 0 ) { if ( D49818 != 0 ) { v7 = (int (__fastcall *)(unsigned int, int))D49818; if ( asd_link_callback_ok(a1) ) return v7(a1, a2); else return 0; } else { return 27; } } } return result; } /* ==== asd_link_call_D49818_guarded [tier=EXACT size=28] ==== */ // Skips when dword_D42624[0] is zero, otherwise invokes asd_link_call_D49818 against // dword_D3306C, mapping failure to status 27. int __fastcall asd_link_call_D49818_guarded(unsigned int a1) { int result; // r0 if ( *((_DWORD *)off_D157D8 + 5) == 0 ) return 0; result = asd_link_call_D49818(a1, a2: (int)(off_D15AF0 + 20)); if ( result != 0 ) return 27; return result; } /* ==== asd_link_callback_ok [tier=EXACT size=36] ==== */ // Bounds idx<=1, then calls the RUNTIME callback pointer off_D330C4(idx) and // sub_D19204(idx). off_D330C4 lives in BSS and is populated at run time - this is one of // the indirect edges that static call-graph analysis cannot follow. BOOL __fastcall asd_link_callback_ok(unsigned int a1) { int (__fastcall *v2)(unsigned int); // r1 BOOL result; // r0 result = false; if ( a1 <= 1 ) { v2 = *((int (__fastcall **)(unsigned int))off_D158A8 + 27); if ( v2 != nullptr && v2(a1) != 0 && asd_link_sub_19204(a1) != 0 ) return true; } return result; } /* ==== asd_link_check_C930 [tier=EXACT size=72] ==== */ // Feature-15 gated probe via asd_link_sub_C930; reports 15 when that probe is non-zero. int __fastcall asd_link_check_C930(unsigned int *a1) { unsigned int v2; // r0 unsigned int v3; // r1 int result; // r0 unsigned int v5; // r2 int *v6; // r0 bool v7; // r3 int v8; // t1 if ( !asd_feature_enabled(a1: 15) ) return 8; v2 = asd_link_sub_C930(); v3 = 0; if ( v2 != 0 ) { result = 15; } else { v5 = 0; v6 = (int *)(dword_D115E0 + 4); while ( v5 != 64 ) { v7 = v3 <= v5; v8 = *v6; v6 += 24; ++v5; v3 += v7 && v8 == 1; } result = 0; } *a1 = v3; return result; } /* ==== asd_link_enable_aux [tier=EXACT size=94] ==== */ // Feature-14 gated link enable: optionally pushes the 24-byte AUX block for the link, // applies the DIO mask, marks the link enabled, and describes the DRAM window via SYS_DRV. // Returns 18 if that RPC fails. int __fastcall asd_link_enable_aux(unsigned int a1) { _DWORD *v1; // r5 int v3; // r3 int result; // r0 v1 = off_D18510; if ( *((_DWORD *)off_D18510 + 2) <= a1 || asd_feature_level_check(a1: 14, a2: a1) == 0 ) return 2; if ( *((unsigned __int8 *)v1 + 4) << 31 == 0 ) asd_aux_write_block(a1, a2: (unsigned __int8 *)(v1[6] + 24 * a1), a3: (_BYTE *)(v1[6] + 24 * a1 + 16), a4: v3); asd_dio_apply_mask(a1, a2: 1); *(_BYTE *)(v1[9] + a1) = 1; result = sysdrv_dram_window_describe(); *((_BYTE *)v1 + 20) = 1; if ( result != 0 ) return 18; return result; } /* ==== asd_link_enable_aux_v2 [tier=EXACT size=94] ==== */ // Sibling of asd_link_enable_aux for the second instance group. int __fastcall asd_link_enable_aux_v2(unsigned int a1) { unsigned __int8 *v1; // r5 int v3; // r3 int result; // r0 v1 = (unsigned __int8 *)off_D18260; if ( *((_DWORD *)off_D18260 + 1) <= a1 || asd_feature_level_check(a1: 14, a2: a1) == 0 ) return 2; if ( *v1 << 31 == 0 ) asd_aux_write_block( a1, a2: (unsigned __int8 *)(*((_DWORD *)v1 + 5) + 24 * a1), a3: (_BYTE *)(*((_DWORD *)v1 + 5) + 24 * a1 + 16), a4: v3); asd_dio_apply_mask(a1, a2: 1); *(_BYTE *)(*((_DWORD *)v1 + 8) + a1) = 1; result = sysdrv_dram_window_describe(); v1[16] = 1; if ( result != 0 ) return 18; return result; } /* ==== asd_link_notify_D49810 [tier=EXACT size=56] ==== */ // Bounds a1 <= 1, fetches the runtime callback from asd_get_D49810 (status 27 if absent), // and invokes it with (link, 0x200000F) when the link passes both callback gates. int __fastcall asd_link_notify_D49810(unsigned int a1) { int D49810; // r0 int (__fastcall *v4)(unsigned int, int); // r5 D49810 = asd_get_D49810(); if ( a1 > 1 ) return 2; if ( D49810 == 0 ) return 27; v4 = (int (__fastcall *)(unsigned int, int))D49810; if ( asd_link_callback_ok(a1) && asd_opt_cb_D4980C_bounded(a1) != 0 ) return v4(a1, a2: dword_D14A84); else return 0; } /* ==== asd_link_op_if_supported [tier=EXACT size=50] ==== */ // Bounds a1 <= 3, then runs asd_foreach_link_D15412 only when dword_D330A4 (ASIC id) // falls in the 20..43 range with bitmask 0xF7FEF5. int __fastcall asd_link_op_if_supported(unsigned int a1, int a2) { int result; // r0 unsigned int v4; // r3 result = 2; if ( a1 <= 3 && a2 != 0 ) { v4 = *((_DWORD *)off_D11180 + 19) - 20; result = 0; if ( v4 <= 0x17 && ((1 << v4) & dword_D11184) != 0 ) return asd_foreach_link_D15412(a1, a2); } return result; } /* ==== asd_link_ops_init [tier=EXACT size=58] ==== */ // Allocates and initialises the link ops struct, then calls asd_build_link_ops. int __fastcall asd_link_ops_init(int a1) { int v1; // r4 int v3; // r2 int v4; // r3 int result; // r0 int (*v6)(void); // r1 v1 = dword_D10618; bzero_core(result: (_DWORD *)dword_D10618, a2: 0x1F18u); *(_DWORD *)(v1 + 6144) = a1; if ( !asd_feature_enabled(a1: 15) ) return 0; result = asd_build_link_ops( a1: (int (__fastcall **)(int, int, int, int))(v1 + 6148), a2: *(_DWORD *)(v1 + 6144), a3: v3, a4: v4); if ( result == 0 ) { v6 = *(int (**)(void))(v1 + 6148); if ( v6 != nullptr ) return v6(); } return result; } /* ==== asd_link_program_timing [tier=EXACT size=154] ==== */ // Programs the link timing registers: writes the encoded value from sub_D16AEC to // unk_D42434 and merges a byte into the low 8 bits of unk_D42438. int __fastcall asd_link_program_timing(int a1, unsigned __int8 *a2, unsigned __int8 *a3) { unsigned int v4; // r4 int *v6; // r9 int v7; // r6 if ( a1 == 0 ) return 2; v4 = *(_DWORD *)(a1 + 20); if ( *((_DWORD *)off_D08344 + 3) <= v4 ) return 2; asd_load_le32(a1: a2); v6 = (int *)off_D08BC4; v7 = 0; asd_reg_write_1946C(a1: 0, a2: *((_DWORD *)off_D08BC4 + 15), a3: v4); asd_reg_read_13B74(a1: 0, a2: v6[16], a3: v4); asd_reg_write_1946C(a1: 0, a2: v6[16], a3: v4); if ( *(_DWORD *)(a1 + 64) == 2 ) { asd_load_le32(a1: a3); v7 = 0; asd_reg_write_1946C(a1: 0, a2: v6[29], a3: v4); asd_reg_read_13B74(a1: 0, a2: v6[30], a3: v4); asd_reg_write_1946C(a1: 0, a2: v6[30], a3: v4); } return v7; } /* ==== asd_link_query_D49800 [tier=EXACT size=88] ==== */ // Requires the runtime callback asd_get_D49800 (else 7) and a link index below // dword_D26CA8; selects entry 63 (or 31 when unk_D43438 == 1) of the dword_D42890 table. int __fastcall asd_link_query_D49800(unsigned int a1) { int D49800; // r0 int v3; // r2 char *v4; // r5 int (__fastcall *v5)(unsigned int); // r6 D49800 = asd_get_D49800(); if ( D49800 == 0 ) return 7; if ( *off_D15620 <= a1 ) return 2; v3 = 63; if ( *((_DWORD *)off_D15624 + 746) == 1 ) v3 = 31; v4 = (char *)off_D15624 + 96 * v3; if ( *((_DWORD *)v4 + 2) != 1 ) return 0; v5 = (int (__fastcall *)(unsigned int))D49800; if ( asd_link_callback_ok(a1) ) { if ( *((_DWORD *)v4 + 22) == 3 ) return v5(a1); return 0; } return 27; } /* ==== asd_link_query_a [tier=EXACT size=168] ==== */ // Reads the link's status register, using unk_D4259C for signal type 48 and the indexed // path otherwise. int __fastcall asd_link_query_a(_DWORD *a1, int a2, __int16 a3) { int v4; // r0 unsigned int v5; // r5 int v6; // r1 __int16 v7; // r2 int _13BF8; // r0 if ( a1 == nullptr ) return 2; v4 = a1[10]; if ( v4 == 48 ) { _13BF8 = asd_reg_read_13BF8(a1: *((_DWORD *)off_D07478 + 105), a2: a1[6], a3); } else { v5 = a1[5]; if ( v4 != 32 ) { if ( v4 == 16 ) { switch ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D07478 + 3), a3: a1[5]) & 7 ) { case 0: if ( a1[8] != 0 && asd_reg_read_13D24_cfg1(a1: v5, a2: v6, a3: v7) == 0 )// jumptable 00D070CA case 0 { if ( a1[19] != 4 ) return 17; } else if ( a1[19] != 3 ) { return 17; } if ( a1[16] == 4 ) return 0; return 17; case 1: case 4: case 6: case 7: return 0; // switch 8 cases case 2: if ( a1[16] == 1 && a1[19] == 1 ) return 0; // jumptable 00D070CA case 2 return 17; case 3: if ( a1[16] == 3 && a1[19] == 2 ) return 0; // jumptable 00D070CA case 3 return 17; case 5: if ( a1[16] == 5 && a1[19] == 3 ) return 0; // jumptable 00D070CA case 5 return 17; } } return 2; } _13BF8 = asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_D074D4 + 84), a3: a1[5]); } if ( _13BF8 << 31 != 0 ) return 0; // jumptable 00D070CA cases 1,4,6,7 else return 17; } /* ==== asd_link_query_b [tier=EXACT size=170] ==== */ // Sibling of asd_link_query_a with a different output field. int __fastcall asd_link_query_b(_DWORD *a1, int a2, __int16 a3) { int v4; // r0 unsigned int v5; // r5 int v6; // r1 __int16 v7; // r2 int _13BF8; // r0 if ( a1 == nullptr ) return 2; v4 = a1[10]; if ( v4 == 48 ) { _13BF8 = asd_reg_read_13BF8(a1: *((_DWORD *)off_D0739C + 105), a2: a1[6], a3); } else { v5 = a1[5]; if ( v4 != 32 ) { if ( v4 == 16 ) { switch ( ((unsigned int)asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0739C + 2), a3: a1[5]) >> 16) & 7 ) { case 0u: if ( a1[8] != 0 && asd_reg_read_13D24_cfg0(a1: v5, a2: v6, a3: v7) == 0 )// jumptable 00D0701E case 0 { if ( a1[19] != 4 ) return 17; } else if ( a1[19] != 3 ) { return 17; } if ( a1[16] == 4 ) return 0; return 17; case 2u: if ( a1[16] == 1 && a1[19] == 1 ) return 0; // jumptable 00D0701E case 2 return 17; case 3u: if ( a1[16] == 3 && a1[19] == 2 ) return 0; // jumptable 00D0701E case 3 return 17; case 5u: if ( a1[16] == 5 && a1[19] == 3 ) return 0; // jumptable 00D0701E case 5 return 17; default: return 0; // switch jump } } return 2; // switch 6 cases } _13BF8 = asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_D0739C + 84), a3: a1[5]); } if ( _13BF8 << 31 != 0 ) return 0; // jumptable 00D0701E default case, cases 1,4 else return 17; } /* ==== asd_link_read_pair_regs [tier=EXACT size=148] ==== */ // Reads the link register pair unk_D42444 / unk_D42448 into two 5-byte caller buffers // (zeroed first via asd_hdcp1_sub_1144). int __fastcall asd_link_read_pair_regs(int a1, _BYTE *a2, _BYTE *a3) { unsigned int v6; // r6 int *v7; // r9 int v8; // r8 asd_hdcp1_sub_1144(result: a2, a2: 5u); asd_hdcp1_sub_1144(result: a3, a2: 5u); if ( a1 == 0 ) return 2; v6 = *(_DWORD *)(a1 + 20); if ( *((_DWORD *)off_D08088 + 3) <= v6 ) return 2; v7 = (int *)off_D08BC4; v8 = 0; *(_DWORD *)a2 = asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D08BC4 + 19), a3: *(_DWORD *)(a1 + 20)); a2[4] = asd_reg_read_13B74(a1: 0, a2: v7[20], a3: v6); if ( *(_DWORD *)(a1 + 64) == 2 ) { v8 = 0; *(_DWORD *)a3 = asd_reg_read_13B74(a1: 0, a2: v7[33], a3: v6); a3[4] = asd_reg_read_13B74(a1: 0, a2: v7[34], a3: v6); } return v8; } /* ==== asd_link_ready_check [tier=EXACT size=46] ==== */ // Returns 19 unless the link register (unk_D42408) bit31 is clear AND the connector // register (unk_D424A4) bit31 is set. int __fastcall asd_link_ready_check(unsigned int a1) { _DWORD *v1; // r6 int v3; // r4 __int16 v4; // r2 v1 = off_D075B0; v3 = 0; if ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D075B0 + 4), a3: a1) << 31 != 0 ) return 19; if ( asd_reg_read_13D24(a1: v1[43], a2: a1, a3: v4) << 31 == 0 ) return 19; return v3; } /* ==== asd_link_ready_full_check [tier=EXACT size=108] ==== */ // Requires (unk_D42410 & 0x101) == 0x101 and (unk_D4241C & 0x1005) == 0x1001 for the // link, else returns 10. int __fastcall asd_link_ready_full_check(int a1) { unsigned int v2; // r4 _DWORD *v3; // r6 int result; // r0 if ( a1 == 0 ) return 2; v2 = *(_DWORD *)(a1 + 20); if ( *((_DWORD *)off_D07698 + 3) <= v2 ) return 2; v3 = off_D07694; if ( (asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D07694 + 6), a3: v2) & 0x101) != 0x101 || (asd_reg_read_13B74(a1: 0, a2: v3[9], a3: v2) & 0x1005) != 0x1001 ) { return 10; } if ( *(_DWORD *)(a1 + 64) != 2 ) return 0; result = (asd_reg_read_13B74(a1: 0, a2: v3[13], a3: v2) & 0x1005) - 4097; if ( result != 0 ) return 10; return result; } /* ==== asd_link_reset [tier=EXACT size=48] ==== */ // HDCP opcode 0x160 (disp_link_reset). int __fastcall asd_link_reset(unsigned int a1, int a2) { unsigned int v4; // r0 if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3F ) return 5; v4 = dword_D10618 + 96 * a1; if ( *(_DWORD *)(v4 + 4) != 1 ) return 5; *(_DWORD *)(v4 + 88) = a2; return 0; } /* ==== asd_link_reset_seq [tier=EXACT size=164] ==== */ // Link reset sequence: verifies the register triplet, clears bit8 of unk_D42410, polls via // asd_reg_poll_seq, then continues through unk_D42430. int __fastcall asd_link_reset_seq(__int64 a1, int a2, int a3) { int v3; // r5 unsigned int v4; // r4 _DWORD *v5; // r6 void (__fastcall *v6)(int, int, unsigned int); // r7 int v7; // r0 void (__fastcall *v8)(int, int, unsigned int); // r8 int v9; // r2 int v10; // r3 if ( (_DWORD)a1 == 0 ) return 2; v3 = a1; v4 = *(_DWORD *)(a1 + 20); if ( *((_DWORD *)off_D0786C + 3) <= v4 ) return 2; LODWORD(a1) = *(_DWORD *)(a1 + 12); asd_verify_reg_triplet(a1, a2, a3); v5 = off_D07870; v6 = (void (__fastcall *)(int, int, unsigned int))off_D07874; v7 = off_D07874(a1: 0, a2: *((_DWORD *)off_D07870 + 6), a3: v4); v8 = (void (__fastcall *)(int, int, unsigned int))off_D081C4; off_D081C4(a1: 0, a2: v5[6], a3: v4, a4: v7 & 0xFFFFFEFF); asd_reg_poll_seq(a1: *(_DWORD *)(v3 + 12), a2: 2, a3: v9, a4: v10); v6(a1: 0, a2: v5[14], a3: v4); v8(a1: 0, a2: v5[14], a3: v4); v6(a1: 0, a2: v5[7], a3: v4); v8(a1: 0, a2: v5[7], a3: v4); if ( (*(_DWORD *)(v3 + 64) & 0xFFFFFFFE) == 4 ) { asd_reg_read_13B74(a1: 0, a2: v5[38], a3: v4); asd_reg_write_1946C(a1: 0, a2: v5[38], a3: v4); } asd_reg_clr_bit1_wait(a1: v4); asd_reg_clr_bit2_wait(a1: v4); return 0; } /* ==== asd_link_set_reg42440_byte [tier=EXACT size=54] ==== */ // Per-link register byte write: bounds ctx+20 against unk_D4234C, then merges a2 into // the low 8 bits of register unk_D42440. int __fastcall asd_link_set_reg42440_byte(int a1, int a2) { unsigned int v2; // r5 _DWORD *v3; // r7 int v4; // r4 if ( a1 == 0 ) return 2; v2 = *(_DWORD *)(a1 + 20); if ( *((_DWORD *)off_D07698 + 3) <= v2 ) return 2; v3 = off_D07694; v4 = 0; asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D07694 + 18), a3: v2); asd_reg_write_1946C(a1: 0, a2: v3[18], a3: v2); return v4; } /* ==== asd_link_set_reg42468_byte [tier=EXACT size=54] ==== */ // Per-link register byte write: merges a2 into the low 8 bits of register unk_D42468. int __fastcall asd_link_set_reg42468_byte(int a1, int a2) { unsigned int v2; // r5 _DWORD *v3; // r7 int v4; // r4 if ( a1 == 0 ) return 2; v2 = *(_DWORD *)(a1 + 20); if ( *((_DWORD *)off_D081BC + 3) <= v2 ) return 2; v3 = off_D081C0; v4 = 0; asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D081C0 + 28), a3: v2); asd_reg_write_1946C(a1: 0, a2: v3[28], a3: v2); return v4; } /* ==== asd_link_set_reg42468_field [tier=EXACT size=90] ==== */ // Per-link register write: merges a2 into bits 8..23 of register unk_D42468, then sets // bit0 of register unk_D424DC. int __fastcall asd_link_set_reg42468_field(int a1, int a2) { unsigned int v2; // r5 _DWORD *v3; // r7 int v4; // r4 int v5; // r1 __int16 v6; // r2 int _13E8C; // r5 __int16 v8; // r2 __int16 v9; // r2 if ( a1 == 0 ) return 2; v2 = *(_DWORD *)(a1 + 20); if ( *((_DWORD *)off_D08410 + 3) <= v2 ) return 2; v3 = off_D0840C; v4 = 0; asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0840C + 28), a3: v2); asd_reg_write_1946C(a1: 0, a2: v3[28], a3: v2); _13E8C = asd_reg_read_13E8C(a1: v3[57], a2: v5, a3: v6); asd_reg_write_196E4(a1: v3[57], a2: _13E8C | 1, a3: v8); asd_reg_write_196E4(a1: v3[57], a2: _13E8C & 0xFFFFFFFE, a3: v9); return v4; } /* ==== asd_link_set_reg4248C_half [tier=EXACT size=60] ==== */ // Per-link register halfword write: merges a2 into the low 16 bits of register unk_D4248C. int __fastcall asd_link_set_reg4248C_half(int a1, int a2) { unsigned int v2; // r5 _DWORD *v3; // r7 int v4; // r4 if ( a1 == 0 ) return 2; v2 = *(_DWORD *)(a1 + 20); if ( *((_DWORD *)off_D08344 + 3) <= v2 ) return 2; v3 = off_D08340; v4 = 0; asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D08340 + 37), a3: v2); asd_reg_write_1946C(a1: 0, a2: v3[37], a3: v2); return v4; } /* ==== asd_link_state_poll [tier=EXACT size=124] ==== */ // One iteration of the link-state poll: waits (SVC 0x56), reads the link state, queries // SYS_DRV RPC 0x1021, re-probes the power state, and reports whether dword_D33054 has // settled. Driven in a loop by asd_sync_link_state. unsigned int __fastcall asd_link_state_poll() { BOOL v0; // r6 unsigned int v5; // r4 unsigned int v6; // r5 void (__fastcall *v7)(int, int, int, int); // r6 int v8; // r3 int v9; // r3 void (__fastcall *v10)(int, int, int, int); // r6 int v11; // r3 int v12; // r3 int v14; // [sp+0h] [bp-8h] BYREF int v15; // [sp+4h] [bp-4h] BYREF v0 = false; v14 = 0; v15 = 0; __asm { SVC 0x56 ; 'V' } asd_query_link_state(a1: &v15); v5 = sysdrv_rpc_1021(a1: v15, a2: 0, a3: (int)&v14); if ( v5 == 0 ) v0 = asd_probe_power_state(); v6 = *((_DWORD *)off_D147C0 + 1) != 2; if ( (v0 | v5) != 0 ) v6 = v0; if ( v6 != 0 ) { v7 = (void (__fastcall *)(int, int, int, int))off_D147C4; off_D147C4(a1: 227, a2: 1, a3: 61440); v7(a1: 227, a2: 1, a3: HIWORD(v6), a4: v8); v7(a1: 227, a2: 1, a3: (unsigned __int16)v6, a4: v9); } if ( v5 != 0 ) { v10 = (void (__fastcall *)(int, int, int, int))off_D147C4; off_D147C4(a1: 227, a2: 1, a3: 61440); v10(a1: 227, a2: 1, a3: HIWORD(v5), a4: v11); v10(a1: 227, a2: 1, a3: (unsigned __int16)v5, a4: v12); } return v6; } /* ==== asd_link_status_by_signal [tier=EXACT size=196] ==== */ // Switch on the descriptor's signal type (16 / 48) returning the link's readiness from the // unk_D42408 register group. int __fastcall asd_link_status_by_signal(_DWORD *a1, int a2, __int16 a3) { int v3; // r6 unsigned int v4; // r4 char *v5; // r7 int v6; // r5 int *v7; // r0 char *v8; // r7 char *v10; // r5 _DWORD *v11; // r7 int v12; // r5 int *v13; // r8 int *v14; // r1 int v15; // r0 if ( a1 != nullptr ) { v3 = a1[10]; v4 = a1[5]; switch ( v3 ) { case 16: v5 = (char *)off_D08468; v6 = 0; if ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D08468 + 4), a3: v4) << 31 != 0 ) { v7 = (int *)(v5 + 240); goto LABEL_13; } return 8; case 48: v10 = (char *)off_D08468; if ( asd_reg_read_13BF8(a1: *((_DWORD *)off_D08468 + 105), a2: a1[6], a3) << 31 == 0 ) return 8; v7 = (int *)(v10 + 304); v6 = 2; goto LABEL_13; case 32: v8 = (char *)off_D08468; v6 = 1; if ( asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_D08468 + 86), a3: v4) << 31 == 0 ) return 8; v7 = (int *)(v8 + 272); LABEL_13: if ( (asd_reg_read_13B74(a1: v6, a2: *v7, a3: v4) & 0x10000000) != 0 ) return 0; v11 = off_D08410; v12 = -1; v13 = (int *)off_D092EC; while ( v11[10] > (unsigned int)++v12 ) { if ( v3 == 16 ) { v14 = v13 + 60; v15 = 0; } else if ( v3 == 32 ) { v14 = v13 + 68; v15 = 1; } else { v14 = v13 + 76; v15 = 2; } if ( (asd_reg_read_13B74(a1: v15, a2: *v14, a3: v4) & 0x10000000) != 0 ) return 0; } return 10; default: break; } } return 2; } /* ==== asd_link_status_by_signal_v2 [tier=EXACT size=196] ==== */ // Sibling of asd_link_status_by_signal for the second register group. int __fastcall asd_link_status_by_signal_v2(_DWORD *a1, int a2, __int16 a3) { int v3; // r6 unsigned int v4; // r4 char *v5; // r7 int v6; // r5 int *v7; // r0 char *v8; // r7 char *v10; // r5 _DWORD *v11; // r7 int v12; // r5 int *v13; // r8 int *v14; // r1 int v15; // r0 if ( a1 != nullptr ) { v3 = a1[10]; v4 = a1[5]; switch ( v3 ) { case 16: v5 = (char *)off_D08468; v6 = 0; if ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D08468 + 4), a3: v4) << 31 != 0 ) { v7 = (int *)(v5 + 240); goto LABEL_13; } return 8; case 48: v10 = (char *)off_D08468; if ( asd_reg_read_13BF8(a1: *((_DWORD *)off_D08468 + 105), a2: a1[6], a3) << 31 == 0 ) return 8; v7 = (int *)(v10 + 304); v6 = 2; goto LABEL_13; case 32: v8 = (char *)off_D08468; v6 = 1; if ( asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_D08468 + 86), a3: v4) << 31 == 0 ) return 8; v7 = (int *)(v8 + 272); LABEL_13: if ( (asd_reg_read_13B74(a1: v6, a2: *v7, a3: v4) & 0x10000000) != 0 ) return 0; v11 = off_D08410; v12 = -1; v13 = (int *)off_D092EC; while ( v11[10] > (unsigned int)++v12 ) { if ( v3 == 16 ) { v14 = v13 + 60; v15 = 0; } else if ( v3 == 32 ) { v14 = v13 + 68; v15 = 1; } else { v14 = v13 + 76; v15 = 2; } if ( (asd_reg_read_13B74(a1: v15, a2: *v14, a3: v4) & 0x10000000) != 0 ) return 0; } return 10; default: break; } } return 2; } /* ==== asd_link_status_query [tier=EXACT size=70] ==== */ // Bounds the link index to 0x3F (the 64-entry link table). Returns 19 unless the link // register bit31 is clear, the connector register bit31 is set, and dword_D428EC[24*idx] // equals 1. int __fastcall asd_link_status_query(unsigned int a1) { int result; // r0 _DWORD *v2; // r5 __int16 v4; // r2 if ( a1 > 0x3F ) return 5; v2 = off_D075B0; if ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D075B0 + 4), a3: a1) << 31 != 0 ) return 19; if ( asd_reg_read_13D24(a1: v2[43], a2: a1, a3: v4) << 31 != 0 ) return 0; result = *(_DWORD *)(dword_D07288 + 96 * a1 + 92) - 1; if ( *(_DWORD *)(dword_D07288 + 96 * a1 + 92) != 1 ) return 19; return result; } /* ==== asd_link_sub_113A0 [tier=EXACT size=576] ==== */ // Reachability-derived label: called only from the 'link' RPC subsystem // (BFS over direct calls + tail calls from the named 0xlink handlers). // Behaviour not individually identified. int __fastcall asd_link_sub_113A0(unsigned int a1, int *a2, _DWORD *a3, _DWORD *a4, _DWORD *a5) { _DWORD *v9; // r2 _DWORD *v10; // r11 int *v11; // r8 unsigned int v12; // r3 int result; // r0 unsigned int v14; // r0 int v15; // r0 int (__fastcall *v16)(unsigned int); // r1 unsigned int v17; // r7 int v18; // r0 _DWORD *v19; // r7 unsigned int v20; // r7 int v21; // r0 int (__fastcall *v22)(unsigned int); // r1 int v23; // r0 int v24; // r3 unsigned int *v25; // r1 unsigned int v26; // r1 _DWORD *v27; // r0 int v28; // r0 int v29; // r1 int v30; // r0 int v31; // r0 int (__fastcall *v32)(_DWORD *); // r1 int v33; // r1 int v34; // r1 int v35; // r0 int v36; // r0 _DWORD *v37; // [sp+4h] [bp-8h] unsigned int v38; // [sp+4h] [bp-8h] int v39; // [sp+8h] [bp-4h] BYREF *a2 = 0; *a3 = 0; *a4 = 0; *a5 = 0; v39 = 0; if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3F ) return 5; v9 = (_DWORD *)dword_D115E0; v10 = (_DWORD *)(dword_D115E0 + 96 * a1); if ( v10[1] != 1 ) return 5; v11 = v10 + 16; if ( v10[16] == 5 ) { a1 = v10[15]; v12 = dword_D115E0 + 96 * a1; if ( *(_DWORD *)(v12 + 4) != 1 ) return 5; } else { v12 = 0; } v14 = dword_D115E0 + 96 * a1; *a2 = *(_DWORD *)(v14 + 80); v15 = *(_DWORD *)(v14 + 72); if ( v15 == 2 ) { v19 = v10 + 2; if ( v10[2] == 1 ) { v37 = v10 + 2; v20 = v12; v21 = asd_opt_cb_D497F4(); } else { v22 = (int (__fastcall *)(unsigned int))v9[1564]; if ( v22 == nullptr || v9[1559] == 0 ) goto LABEL_43; if ( *v11 == 5 ) { v38 = v12; v23 = v22(a1: v12); v12 = v38; v9 = (_DWORD *)dword_D115E0; if ( v23 != 0 ) goto LABEL_43; v21 = (*(int (__fastcall **)(_DWORD *))(dword_D115E0 + 6236))(a1: v10); v12 = v38; goto LABEL_41; } v37 = v10 + 2; v20 = v12; v21 = v22(a1: (unsigned int)v10); } v12 = v20; v19 = v37; LABEL_41: v9 = (_DWORD *)dword_D115E0; if ( v21 == 0 ) *a5 = 1; LABEL_43: if ( v9[1567] == 0 ) goto LABEL_52; if ( *v11 == 5 ) { v29 = dword_D115E0; *a3 = *(_DWORD *)(v12 + 88); v30 = (*(int (__fastcall **)(unsigned int, int *))(v29 + 6268))(a1: v12, a2: &v39); } else { *a3 = v10[22]; if ( *v19 == 1 ) { v31 = v10[21]; LABEL_51: *a4 = v31; goto LABEL_52; } v30 = (*(int (__fastcall **)(_DWORD *, int *))(dword_D115E0 + 6268))(a1: v10, a2: &v39); } if ( v30 != 0 ) goto LABEL_52; v31 = v39; goto LABEL_51; } if ( v15 != 1 ) { result = 7; goto LABEL_55; } v16 = (int (__fastcall *)(unsigned int))v9[1561]; if ( v16 == nullptr || v9[1559] == 0 || v9[1547] == 0 || v9[1553] == 0 ) goto LABEL_52; if ( *v11 == 5 ) { v17 = v12; if ( v16(a1: v12) != 0 ) goto LABEL_29; v18 = (*(int (__fastcall **)(_DWORD *))(dword_D115E0 + 6236))(a1: v10); } else { v17 = v12; v18 = v16(a1: (unsigned int)v10); } if ( v18 == 0 ) *a5 = 1; LABEL_29: v24 = *v11; v25 = v10 + 22; if ( *v11 == 5 ) v25 = (unsigned int *)(v17 + 88); v26 = *v25; if ( v26 < 2 ) { *a3 = v26; goto LABEL_52; } v27 = (_DWORD *)v17; if ( v26 == 3 ) { v33 = *a2; if ( v24 == 5 ) { if ( v33 == 2 ) v34 = 6212; else v34 = 6188; v35 = (*(int (__fastcall **)(unsigned int))(dword_D115E0 + v34))(a1: v17); } else { if ( v33 == 2 ) v36 = 6212; else v36 = 6188; v35 = (*(int (__fastcall **)(_DWORD *))(dword_D115E0 + v36))(a1: v10); } if ( v35 == 0 ) { v28 = 3; goto LABEL_75; } } else if ( v26 == 2 ) { if ( v24 != 5 ) v27 = v10; if ( (*(int (__fastcall **)(_DWORD *))(dword_D115E0 + 6188))(a1: v27) == 0 ) { v28 = 2; LABEL_75: *a3 = v28; } } LABEL_52: if ( asd_link_sub_C930() != 0 ) { result = 15; LABEL_54: *a2 = 0; *a3 = 0; *a4 = 0; *a5 = 0; goto LABEL_55; } result = 0; if ( v10[1] == 1 ) { v32 = *(int (__fastcall **)(_DWORD *))(dword_D115E0 + 6280); if ( v32 == nullptr ) goto LABEL_55; if ( v10[2] == 0 && v32(a1: v10) != 0 ) { result = 17; goto LABEL_54; } result = 0; } LABEL_55: if ( *a3 != 3 ) *a5 = 0; return result; } /* ==== asd_link_sub_19204 [tier=EXACT size=38] ==== */ // Reachability-derived label: called only from the 'link' RPC subsystem // (BFS over direct calls + tail calls from the named 0xlink handlers). // Behaviour not individually identified. int __fastcall asd_link_sub_19204(int a1) { _DWORD *v1; // r5 int (__fastcall *v3)(int); // r1 int result; // r0 int (__fastcall *v5)(int); // r1 v1 = off_D19238; v3 = *((int (__fastcall **)(int))off_D19238 + 9); if ( v3 == nullptr ) { v5 = *((int (__fastcall **)(int))off_D19238 + 10); if ( v5 == nullptr ) return 0; return v5(a1); } result = v3(a1); if ( result != 0 ) { v5 = (int (__fastcall *)(int))v1[10]; if ( v5 != nullptr ) return v5(a1); } return result; } /* ==== asd_link_sub_C930 [tier=EXACT size=1926] ==== */ // Reachability-derived label: called only from the 'link' RPC subsystem // (BFS over direct calls + tail calls from the named 0xlink handlers). // Behaviour not individually identified. unsigned int __fastcall asd_link_sub_C930() { int v0; // r10 int (__fastcall *v1)(unsigned int *); // r1 int v2; // r0 unsigned int v3; // r6 unsigned int v4; // r11 void (__fastcall *v5)(int, int, int, int); // r4 int v6; // r3 int v7; // r3 int v8; // r2 int v9; // r3 unsigned __int64 v10; // kr00_8 unsigned __int64 v11; // kr08_8 int i; // r0 int v13; // r2 int j; // r3 int v15; // r0 int v16; // r1 _DWORD *v17; // r4 int v18; // r2 bool v19; // zf int v20; // r2 int v21; // r12 int v22; // lr int v23; // r2 int v24; // r4 unsigned int v25; // r6 _DWORD *v26; // r2 int v27; // r3 bool v28; // zf int *v29; // r6 unsigned int v30; // r2 int v31; // t1 int v32; // r0 int v33; // r1 int v34; // r0 int v35; // r12 unsigned int *v36; // r1 unsigned int v37; // r1 int v38; // r2 int v39; // r3 _DWORD *v40; // r1 int v41; // r0 bool v42; // zf int v43; // r0 int v44; // r0 bool v45; // zf int v46; // lr int v47; // r8 int *v48; // r6 unsigned int v49; // r0 int v50; // t1 unsigned int *v51; // r0 int v52; // r1 int v53; // r4 _DWORD *v54; // r0 int v55; // r6 bool v56; // zf int v57; // r0 int v58; // r1 int v59; // r7 unsigned int *v60; // r1 int v61; // r0 int k; // r2 unsigned int v63; // r3 int v64; // r1 _DWORD *v65; // r2 int v66; // r3 bool v67; // zf unsigned int v68; // r4 unsigned int v69; // r3 unsigned int v70; // r2 int v71; // r4 unsigned int *v72; // r3 int *v73; // r1 int v74; // r2 unsigned int v75; // r8 int *v76; // r1 int v77; // r0 unsigned int m; // r2 unsigned int v79; // r3 int n; // r1 _DWORD *v81; // r3 int v82; // r2 bool v83; // zf unsigned int v84; // r2 bool v85; // cf int v86; // r4 unsigned int *v87; // r4 unsigned int v88; // r6 bool v89; // zf int v90; // r1 int v91; // r2 unsigned int v92; // r8 unsigned int *v93; // r1 int v94; // r0 unsigned int ii; // r2 unsigned int v96; // r3 int v97; // r1 _DWORD *v98; // r2 int v99; // r3 bool v100; // zf unsigned int v101; // r4 unsigned int v102; // r3 unsigned int v103; // r2 int v104; // r4 unsigned int *v105; // r3 int v106; // r1 int v107; // r2 unsigned int v108; // r3 int jj; // r0 int v110; // r2 int kk; // r3 int v112; // r0 _DWORD *v113; // r1 int v114; // r2 bool v115; // zf unsigned int v116; // r2 int v117; // r1 int v118; // r0 int v119; // r1 unsigned int v120; // r8 unsigned int v121; // r3 unsigned int v122; // r2 _DWORD *v123; // r1 int v124; // r0 int mm; // r1 _DWORD *v126; // r4 int v127; // r2 bool v128; // zf unsigned int v129; // r2 bool v130; // cf int v131; // r4 int v132; // r6 unsigned int *v133; // r4 unsigned int v134; // r6 bool v135; // zf int v136; // r1 int v137; // r2 int v138; // r1 int v139; // r0 unsigned int v140; // r2 int v141; // r3 int nn; // r1 unsigned int v143; // r3 int v144; // r2 bool v145; // zf unsigned int v146; // r2 bool v147; // cc int v148; // r4 unsigned int *v149; // r4 unsigned int v150; // r6 bool v151; // zf int v152; // r0 int v153; // r1 unsigned int v155; // [sp+4h] [bp-350h] unsigned int v156; // [sp+8h] [bp-34Ch] unsigned int v157; // [sp+14h] [bp-340h] unsigned int v158; // [sp+18h] [bp-33Ch] BYREF unsigned int v159; // [sp+1Ch] [bp-338h] unsigned int v160; // [sp+20h] [bp-334h] unsigned int v161; // [sp+24h] [bp-330h] unsigned int v162; // [sp+28h] [bp-32Ch] unsigned int v163; // [sp+2Ch] [bp-328h] int v164; // [sp+30h] [bp-324h] _DWORD v165[10]; // [sp+80h] [bp-2D4h] int v166; // [sp+A8h] [bp-2ACh] BYREF int v167; // [sp+B8h] [bp-29Ch] BYREF _BYTE v168[8]; // [sp+17Ch] [bp-1D8h] BYREF _BYTE v169[104]; // [sp+184h] [bp-1D0h] BYREF _BYTE v170[116]; // [sp+1ECh] [bp-168h] BYREF _BYTE v171[208]; // [sp+260h] [bp-F4h] BYREF _DWORD v172[9]; // [sp+330h] [bp-24h] BYREF bzero_core(result: &v158, a2: 0x314u); v0 = dword_D0D268; v1 = *(int (__fastcall **)(unsigned int *))(dword_D0D268 + 6276); if ( v1 != nullptr ) { v2 = v1(a1: &v158); if ( v2 == 44 ) return 0; v3 = v2; if ( v2 != 0 ) goto LABEL_268; if ( v158 == 0 || (v4 = v159, v159 == 0) ) { v5 = (void (__fastcall *)(int, int, int, int))off_D0D0B8; off_D0D0B8(a1: 227, a2: 1, a3: 61440); v5(a1: 227, a2: 1, a3: 0, a4: v9); v3 = 2; v8 = 2; goto LABEL_269; } if ( v158 <= 7 ) { v10 = v160 + (unsigned __int64)v159; if ( (unsigned int)v10 <= 9 && HIDWORD(v10) == 0 ) { v11 = v161 + (unsigned __int64)v159; if ( (unsigned int)v11 <= 9 && HIDWORD(v11) == 0 ) { v155 = v161; v156 = v160; v157 = v158; bzero_core(result: v172, a2: 0x24u); for ( i = 0; i != v4; ++i ) { v13 = v165[i]; if ( v13 != 0 ) { for ( j = 0; j != 9; ++j ) { if ( (v13 & (1 << j)) != 0 ) { v13 &= ~(1 << j); if ( v172[j] != -1 ) ++v172[j]; } } if ( v13 != 0 ) { LABEL_208: v3 = 7; goto LABEL_268; } } } v15 = 0; v16 = 0; while ( 1 ) { if ( v15 == 63 ) { v32 = 0; while ( v32 != 9 ) { v33 = v172[v32++]; if ( v33 != 0 ) goto LABEL_100; } bzero_core(result: v172, a2: 0x1Cu); v34 = 0; v35 = 0; while ( v4 != v34 ) { v36 = &v158 + 2 * v34; if ( v36[8] == 1 ) { v37 = v36[9]; if ( v37 >= v157 ) goto LABEL_267; if ( v172[v37] != -1 ) ++v172[v37]; v85 = __CFADD__(v35++, 1); if ( v85 ) v35 = -1; } ++v34; } v38 = 0; v39 = 0; while ( v38 != 63 ) { v40 = (_DWORD *)(v0 + 96 * v38); v41 = v40[1]; v42 = v41 == 1; if ( v41 == 1 ) v42 = v40[2] == 0; if ( v42 ) { v43 = v40[10]; if ( v43 == 16 ) { v44 = v40[3]; v45 = v35 == 0; v46 = v40[6]; v47 = v44 - 1; if ( v35 != 0 ) { v44 = v172[v47]; v45 = v44 == 0; } if ( v45 ) { v48 = (int *)v168; v49 = v4; while ( v49 != 0 ) { --v49; v50 = *v48; v48 += 3; v39 += v50 == 1 && v39 != -1; } } else { --v35; v172[v47] = v44 - 1; } v51 = &v158 + 2 * v46; if ( v51[8] == 1 ) { if ( v47 != v51[9] ) goto LABEL_100; } else { v52 = v40[19]; v53 = 0; v54 = v169; while ( v4 != v53 ) { if ( v52 == 4 ) { v55 = *(v54 - 2); v56 = v55 == 1; if ( v55 == 1 ) v56 = v53 == *v54; if ( v56 ) { *(v54 - 2) = 0; if ( v39 != 0 ) --v39; } } v54 += 3; ++v53; } if ( v39 != 0 ) goto LABEL_100; v39 = 0; } } else if ( (v43 | 0x10) != 0x30 ) { goto LABEL_267; } } ++v38; } v57 = 0; while ( v57 != 7 ) { v58 = v172[v57++]; if ( v58 != 0 ) goto LABEL_100; } if ( v35 != 0 ) goto LABEL_100; if ( v156 != 0 ) { bzero_core(result: v172, a2: 0x1Cu); v59 = v10; v60 = (unsigned int *)&v166; v61 = 0; for ( k = v10; k != 0; --k ) { if ( *(v60 - 1) == 1 ) { v63 = *v60; if ( *v60 >= v157 ) goto LABEL_267; if ( v172[v63] != -1 ) ++v172[v63]; v85 = __CFADD__(v61++, 1); if ( v85 ) v61 = -1; } v60 += 6; } v64 = 0; v3 = 2; while ( v64 != 6048 ) { v65 = (_DWORD *)(v0 + v64); v66 = *(_DWORD *)(v0 + v64 + 4); v67 = v66 == 1; if ( v66 == 1 ) v67 = v65[2] == 0; if ( v67 && v65[10] == 32 ) { v68 = v65[3]; if ( v68 >= v157 ) goto LABEL_268; if ( v68 == 0 ) goto LABEL_268; v69 = v65[5]; if ( v69 >= (unsigned int)v10 ) goto LABEL_268; v70 = v68 - 1; if ( v61 != 0 ) { v71 = v172[v70]; if ( v71 != 0 ) { --v61; v172[v70] = v71 - 1; } } v72 = &v158 + 6 * v69; if ( v72[35] == 1 && v70 != v72[36] ) goto LABEL_100; } v64 += 96; } v73 = v172; while ( v59 != 0 ) { v74 = *v73++; --v59; if ( v74 != 0 ) goto LABEL_100; } if ( v61 != 0 ) goto LABEL_100; v75 = v163; if ( v163 == 0 ) return 0; bzero_core(result: v172, a2: 0x24u); v76 = &v167; v77 = 0; for ( m = v156; m != 0; --m ) { v79 = *(v76 - 1); if ( v79 >= v156 ) goto LABEL_267; if ( *v76 == 1 ) { if ( v172[v79] != -1 ) ++v172[v79]; v85 = __CFADD__(v77++, 1); if ( v85 ) v77 = -1; } v76 += 6; } for ( n = 0; n != 6048; n += 96 ) { v81 = (_DWORD *)(v0 + n); v82 = *(_DWORD *)(v0 + n + 4); v83 = v82 == 1; if ( v82 == 1 ) v83 = v81[2] == 0; if ( v83 && v81[10] == 32 ) { v84 = v81[5]; v3 = 2; v85 = v84 >= 8; if ( v84 <= 8 ) { v81 = (_DWORD *)v81[11]; v85 = (unsigned int)v81 >= v75; } if ( v85 ) goto LABEL_268; if ( v77 != 0 ) { v86 = v172[v84]; if ( v86 != 0 ) { --v77; v172[v84] = v86 - 1; } } v87 = &v158 + 6 * v84; if ( v87[35] == 1 ) { v88 = v87[39]; v89 = v84 == v88; if ( v84 == v88 ) v89 = v81 == (_DWORD *)v87[38]; if ( !v89 ) goto LABEL_100; } } } v90 = 0; while ( v90 != 9 ) { v91 = v172[v90++]; if ( v91 != 0 ) goto LABEL_100; } if ( v77 != 0 ) goto LABEL_100; } if ( v155 != 0 ) { v92 = v162; bzero_core(result: v172, a2: 0x1Cu); v93 = (unsigned int *)v170; v94 = 0; for ( ii = v92; ii != 0; --ii ) { if ( *(v93 - 1) == 1 ) { v96 = *v93; if ( *v93 >= v157 ) goto LABEL_267; if ( v172[v96] != -1 ) ++v172[v96]; v85 = __CFADD__(v94++, 1); if ( v85 ) v94 = -1; } v93 += 3; } v97 = 0; v3 = 2; while ( v97 != 6048 ) { v98 = (_DWORD *)(v0 + v97); v99 = *(_DWORD *)(v0 + v97 + 4); v100 = v99 == 1; if ( v99 == 1 ) v100 = v98[2] == 0; if ( v100 && v98[10] == 48 ) { v101 = v98[3]; if ( v101 >= v157 ) goto LABEL_268; if ( v101 == 0 ) goto LABEL_268; v102 = v98[6]; if ( v102 >= v92 ) goto LABEL_268; v103 = v101 - 1; if ( v94 != 0 ) { v104 = v172[v103]; if ( v104 != 0 ) { --v94; v172[v103] = v104 - 1; } } v105 = &v158 + 3 * v102; if ( v105[116] == 1 && v103 != v105[117] ) goto LABEL_100; } v97 += 96; } v106 = 0; while ( v106 != 7 ) { v107 = v172[v106++]; if ( v107 != 0 ) goto LABEL_100; } if ( v94 != 0 ) goto LABEL_100; bzero_core(result: v172, a2: 0x24u); v108 = v155; for ( jj = 0; jj != v108; ++jj ) { v110 = *(_DWORD *)&v170[16 * jj + 104]; if ( v110 != 0 ) { for ( kk = 0; kk != 9; ++kk ) { if ( (v110 & (1 << kk)) != 0 ) { v110 &= ~(1 << kk); if ( v172[kk] != -1 ) ++v172[kk]; } } v108 = v155; if ( v110 != 0 ) goto LABEL_208; } } v112 = 0; v3 = 2; while ( v112 != 6048 ) { v113 = (_DWORD *)(v0 + v112); v114 = *(_DWORD *)(v0 + v112 + 4); v115 = v114 == 1; if ( v114 == 1 ) v115 = v113[2] == 0; if ( v115 && v113[10] == 48 ) { v116 = v113[6]; if ( v116 >= v92 || v113[5] > 8u ) goto LABEL_268; v117 = v172[v116]; if ( v117 != 0 ) v172[v116] = v117 - 1; } v112 += 96; } v118 = 0; while ( v118 != 9 ) { v119 = v172[v118++]; if ( v119 != 0 ) goto LABEL_100; } v120 = v163; bzero_core(result: v172, a2: 0x24u); v122 = v155; v123 = v171; v124 = 0; while ( v122 != 0 ) { v121 = *(v123 - 2); if ( v121 >= v155 ) goto LABEL_267; if ( *v123 == 2 ) { if ( v172[v121] != -1 ) ++v172[v121]; v85 = __CFADD__(v124++, 1); if ( v85 ) v124 = -1; } --v122; v123 += 4; } for ( mm = 0; mm != 6048; mm += 96 ) { v126 = (_DWORD *)(v0 + mm); v127 = *(_DWORD *)(v0 + mm + 4); v128 = v127 == 1; if ( v127 == 1 ) v128 = v126[2] == 0; if ( v128 && v126[10] == 48 ) { v129 = v126[5]; v3 = 2; v130 = v129 >= 8; if ( v129 <= 8 ) { v121 = v126[11]; v130 = v121 >= v120; } if ( v130 ) goto LABEL_268; v131 = v126[6]; if ( v124 != 0 ) { v132 = v172[v129]; if ( v132 != 0 ) { --v124; v172[v129] = v132 - 1; } } if ( *(_DWORD *)&v169[12 * v131 + 100] == 1 ) { v133 = &v158 + 4 * v129; v134 = v133[144]; v135 = v129 == v134; if ( v129 == v134 ) v135 = v121 == v133[145]; if ( !v135 ) goto LABEL_100; } } } v136 = 0; while ( v136 != 9 ) { v137 = v172[v136++]; if ( v137 != 0 ) goto LABEL_100; } if ( v124 != 0 ) goto LABEL_100; } if ( v164 != 0 ) { bzero_core(result: v172, a2: 0x14u); v138 = 0; v139 = 0; while ( v138 != 72 ) { if ( *(_DWORD *)&v171[v138 + 132] == 1 ) { v140 = *(_DWORD *)&v171[v138 + 136]; if ( v140 > 4 ) goto LABEL_267; if ( v172[v140] != -1 ) ++v172[v140]; v85 = __CFADD__(v139++, 1); if ( v85 ) v139 = -1; } v138 += 12; } for ( nn = 0; nn != 6048; nn += 96 ) { v143 = v0 + nn; v144 = *(_DWORD *)(v0 + nn + 4); v145 = v144 == 1; if ( v144 == 1 ) v145 = *(_DWORD *)(v143 + 8) == 0; if ( v145 && *(_DWORD *)(v143 + 52) == 2 ) { v146 = *(_DWORD *)(v143 + 20); v3 = 2; v147 = v146 > 4; if ( v146 <= 4 ) { v143 = *(_DWORD *)(v143 + 56); v147 = v143 > 5; } if ( v147 ) goto LABEL_268; if ( v139 != 0 ) { v148 = v172[v146]; if ( v148 != 0 ) { --v139; v172[v146] = v148 - 1; } } v149 = &v158 + 3 * v143; if ( v149[179] == 1 ) { v150 = v149[180]; v151 = v146 == v150; if ( v146 == v150 ) v151 = v149[181] == v143; if ( !v151 ) goto LABEL_100; } } } if ( v139 == 0 ) { v152 = 0; while ( v152 != 5 ) { v153 = v172[v152++]; if ( v153 != 0 ) goto LABEL_100; } return 0; } LABEL_100: v3 = 15; goto LABEL_268; } return 0; } v17 = (_DWORD *)(v0 + 96 * v15); v18 = v17[1]; v19 = v18 == 1; if ( v18 == 1 ) v19 = v17[2] == 0; if ( !v19 ) goto LABEL_29; v20 = v17[10]; if ( v20 != 16 ) break; v22 = v17[6]; v21 = v17[5]; v23 = v172[v22]; if ( v23 != 0 ) { v172[v22] = v23 - 1; } else { v29 = (int *)v168; v30 = v4; while ( v30 != 0 ) { --v30; v31 = *v29; v29 += 3; v16 += v16 != -1 && v31 == 1; } } if ( v165[v21] >> (v22 & 0x1F) << 31 == 0 ) { v24 = v17[19]; v25 = v4; v26 = v169; while ( v25 != 0 ) { if ( v24 == 4 ) { v27 = *(v26 - 2); v28 = v27 == 1; if ( v27 == 1 ) v28 = v21 == *(v26 - 1); if ( v28 ) { *v26 = v22; if ( v16 != 0 ) --v16; } } --v25; v26 += 3; } if ( v16 != 0 ) goto LABEL_100; v16 = 0; } LABEL_29: ++v15; } if ( (v20 | 0x10) == 0x30 ) goto LABEL_29; LABEL_267: v3 = 2; LABEL_268: v5 = (void (__fastcall *)(int, int, int, int))off_D0D0B8; off_D0D0B8(a1: 227, a2: 1, a3: 61440); v5(a1: 227, a2: 1, a3: HIWORD(v3), a4: v141); v8 = (unsigned __int16)v3; LABEL_269: v5(a1: 227, a2: 1, a3: v8, a4: v7); return v3; } } } } v5 = (void (__fastcall *)(int, int, int, int))off_D0D0B8; off_D0D0B8(a1: 227, a2: 1, a3: 61440); v5(a1: 227, a2: 1, a3: 0, a4: v6); v3 = 7; v8 = 7; goto LABEL_269; } /* ==== asd_link_trace_loop [tier=EXACT size=280] ==== */ // Iterates the two link instances, emitting asd_log_event traces for each that passes // asd_link_callback_ok and the j_sub_D191F8 probe. void __fastcall asd_link_trace_loop(int a1, int a2, int a3, int a4) { int *v4; // r9 char *v5; // r8 void (__fastcall *v6)(int, int, int, int); // r5 unsigned int i; // r6 int v8; // r3 int v9; // r3 int v10; // r3 int *v11; // r1 void (__fastcall *v12)(int, int, int, int); // r9 char *v13; // r7 int *v14; // r8 unsigned int v15; // r5 int *v20; // r1 int v21; // r3 int v22; // r3 char v23; // [sp+3h] [bp-1h] BYREF v23 = HIBYTE(a4); v4 = off_D1877C; v5 = &v23; v6 = (void (__fastcall *)(int, int, int, int))off_D18778; for ( i = 0; i != 2; ++i ) { if ( asd_link_callback_ok(a1: i) ) { v23 = 0; if ( j_sub_D191F8() != 0 ) { if ( v23 != 0 && (asd_foreach_dio_entry(a1: i) != 0 || asd_link_call_D49818_guarded(a1: i) != 0) ) { v6(a1: 227, a2: 1, a3: 61440, a4: v8); v6(a1: 227, a2: 1, a3: 0, a4: v9); v6(a1: 227, a2: 1, a3: 27, a4: v10); } if ( *v4 == -1 ) { v6(a1: 227, a2: 1, a3: 61440, a4: v8); v6(a1: 227, a2: 1, a3: 0, a4: v21); v6(a1: 227, a2: 1, a3: 27, a4: v22); } else { v11 = v4; v12 = v6; v13 = v5; v14 = v11; v15 = 0; __asm { SVC 0x5E ; '^' } while ( v15 != 6 ) asd_bounded_dispatch_D1922C(a1: v15++, a2: i); v20 = v14; v5 = v13; v6 = v12; __asm { SVC 0x5F ; '_' } v4 = v20; } if ( j_sub_D18B14() != 0 ) break; } } } } /* ==== asd_link_train_status [tier=EXACT size=88] ==== */ // Per-link training status: requires (reg unk_D4241C & 0x1005) == 0x1001, and for // ctx+64 == 2 additionally checks register unk_D4242C the same way. int __fastcall asd_link_train_status(int a1) { unsigned int v2; // r4 _DWORD *v3; // r6 int result; // r0 if ( a1 == 0 ) return 2; v2 = *(_DWORD *)(a1 + 20); if ( *((_DWORD *)off_D0786C + 3) <= v2 ) return 2; v3 = off_D07870; if ( (asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D07870 + 9), a3: v2) & 0x1005) != 0x1001 ) return 9; if ( *(_DWORD *)(a1 + 64) != 2 ) return 0; result = (asd_reg_read_13B74(a1: 0, a2: v3[13], a3: v2) & 0x1005) - 4097; if ( result != 0 ) return 9; return result; } /* ==== asd_link_wait_and_set [tier=EXACT size=210] ==== */ // Polls register unk_D4241C for bit24 (bounded 400 iterations), then merges a2 into the // low 16 bits of unk_D4243C. int __fastcall asd_link_wait_and_set(int a1, int a2, int a3) { unsigned int v4; // r4 int v5; // r5 int *v6; // r7 int v7; // r5 int v8; // r6 int v13; // r6 if ( a1 == 0 ) return 2; v4 = *(_DWORD *)(a1 + 20); if ( *((_DWORD *)off_D07780 + 3) <= v4 ) return 2; v5 = dword_D07474; v6 = (int *)off_D0777C; while ( (asd_reg_read_13B74(a1: 0, a2: v6[9], a3: v4) & 0x1000000) == 0 && v5 != 0 ) ++v5; asd_reg_read_13B74(a1: 0, a2: v6[17], a3: v4); asd_reg_write_1946C(a1: 0, a2: v6[17], a3: v4); v8 = 4; __asm { SVC 0x56 ; 'V' } while ( --v8 != 0 ) { if ( (asd_reg_read_13B74(a1: 0, a2: v6[9], a3: v4) & 5) == 1 ) { if ( *(_DWORD *)(a1 + 64) != 2 ) return 0; while ( (asd_reg_read_13B74(a1: 0, a2: v6[13], a3: v4) & 0x1000000) == 0 && v5 != 0 ) ++v5; asd_reg_read_13B74(a1: 0, a2: v6[31], a3: v4); asd_reg_write_1946C(a1: 0, a2: v6[31], a3: v4); v13 = 4; v7 = 0; __asm { SVC 0x56 ; 'V' } while ( --v13 != 0 ) { if ( (asd_reg_read_13B74(a1: 0, a2: v6[13], a3: v4) & 5) == 1 ) return v7; } return 9; } } return 9; } /* ==== asd_link_wait_ready_a [tier=EXACT size=222] ==== */ // For link modes 4/5, polls register unk_D42490 bit31 (bounded ~21 iterations) before // reading the result. int __fastcall asd_link_wait_ready_a(int a1) { __int64 v2; // kr00_8 _DWORD *v3; // r7 int v4; // r5 int *v6; // r8 __int64 v7; // r0 int v8; // r2 int v9; // r3 __int16 v10; // r2 unsigned int v11; // r5 __int16 v12; // r2 __int16 _139E4; // r0 __int16 v14; // r2 int v15; // r0 __int16 _13974; // r0 _DWORD *v17; // r6 unsigned int v18; // r5 int v22; // r1 int result; // r0 if ( a1 == 0 ) return 2; v2 = *(_QWORD *)(a1 + 20); if ( (*(_DWORD *)(a1 + 64) & 0xFFFFFFFE) == 4 ) { v3 = off_D07964; v4 = -21; do _CF = __CFADD__(v4++, 1); while ( !_CF && asd_reg_read_13B74(a1: 0, a2: v3[38], a3: v2) << 31 == 0 ); asd_reg_read_13B74(a1: 0, a2: v3[38], a3: v2); asd_reg_write_1946C(a1: 0, a2: v3[38], a3: v2); } v6 = (int *)off_D08468; asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D08468 + 6), a3: v2); LODWORD(v7) = *(_DWORD *)(a1 + 12); asd_verify_reg_triplet(a1: v7, a2: v8, a3: v9); asd_reg_write_1946C(a1: 0, a2: v6[6], a3: v2); v11 = asd_reg_read_13974(a1: v6[100], a2: HIDWORD(v2), a3: v10) & 7; _139E4 = asd_reg_read_139E4(a1: v6[99], a2: v11, a3: v12); asd_reg_write_19394(a1: v6[99], a2: v11, a3: _139E4 | 0x80); v15 = v6[103]; if ( v15 != 0 ) { _13974 = asd_reg_read_13974(a1: v15, a2: v11, a3: v14); asd_reg_write_19328(a1: v6[103], a2: v11, a3: _13974 | 1); } v17 = off_D07960; v18 = 1; do { __asm { SVC 0x56 ; 'V' } v22 = asd_link_ready_full_check(a1); result = 0; if ( v22 == 0 ) break; } while ( v17[11] > v18++ ); return result; } /* ==== asd_link_wait_ready_b [tier=EXACT size=222] ==== */ // Sibling of asd_link_wait_ready_a for the second register group. int __fastcall asd_link_wait_ready_b(int a1) { __int64 v2; // kr00_8 _DWORD *v3; // r7 int v4; // r5 int *v6; // r8 __int64 v7; // r0 int v8; // r2 int v9; // r3 __int16 v10; // r2 unsigned int v11; // r5 __int16 v12; // r2 __int16 _139E4; // r0 __int16 v14; // r2 int v15; // r0 __int16 _13B04; // r0 _DWORD *v17; // r6 unsigned int v18; // r5 int v22; // r1 int result; // r0 if ( a1 == 0 ) return 2; v2 = *(_QWORD *)(a1 + 20); if ( (*(_DWORD *)(a1 + 64) & 0xFFFFFFFE) == 4 ) { v3 = off_D07A88; v4 = -21; do _CF = __CFADD__(v4++, 1); while ( !_CF && asd_reg_read_13B74(a1: 0, a2: v3[38], a3: v2) << 31 == 0 ); asd_reg_read_13B74(a1: 0, a2: v3[38], a3: v2); asd_reg_write_1946C(a1: 0, a2: v3[38], a3: v2); } v6 = (int *)off_D08468; asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D08468 + 6), a3: v2); LODWORD(v7) = *(_DWORD *)(a1 + 12); asd_verify_reg_triplet(a1: v7, a2: v8, a3: v9); asd_reg_write_1946C(a1: 0, a2: v6[6], a3: v2); v11 = asd_reg_read_13B04(a1: v6[5], a2: HIDWORD(v2), a3: v10) & 7; _139E4 = asd_reg_read_139E4(a1: v6[99], a2: v11, a3: v12); asd_reg_write_19394(a1: v6[99], a2: v11, a3: _139E4 | 0x80); v15 = v6[108]; if ( v15 != 0 ) { _13B04 = asd_reg_read_13B04(a1: v15, a2: v11, a3: v14); asd_reg_write_19400(a1: v6[108], a2: v11, a3: _13B04 | 1); } v17 = off_D07A84; v18 = 1; do { __asm { SVC 0x56 ; 'V' } v22 = asd_link_ready_full_check(a1); result = 0; if ( v22 == 0 ) break; } while ( v17[11] > v18++ ); return result; } /* ==== asd_link_write_quad [tier=EXACT size=130] ==== */ // Writes four caller-supplied words to the link register quad // unk_D42454/58/5C/60 indexed by ctx+20. int __fastcall asd_link_write_quad(int a1, _DWORD *a2) { unsigned int v2; // r5 _DWORD *v3; // r7 void (__fastcall *v4)(int, int, unsigned int); // r8 int v5; // r4 int v6; // r1 __int16 v7; // r2 unsigned int v8; // r6 void (__fastcall *v9)(unsigned int, int, __int16); // r5 __int16 v10; // r2 __int16 v11; // r2 if ( a1 == 0 ) return 2; v2 = *(_DWORD *)(a1 + 20); if ( *((_DWORD *)off_D08410 + 3) <= v2 ) return 2; v3 = off_D08468; v4 = (void (__fastcall *)(int, int, unsigned int))off_D09000; v5 = 0; off_D09000(a1: 0, a2: *((_DWORD *)off_D08468 + 23), a3: v2, a4: *a2); v4(a1: 0, a2: v3[24], a3: v2); v4(a1: 0, a2: v3[25], a3: v2); v4(a1: 0, a2: v3[26], a3: v2); v4(a1: 0, a2: v3[27], a3: v2); v8 = asd_reg_read_13E8C(a1: v3[57], a2: v6, a3: v7) & 0xFFFFFF8F | (16 * (v2 & 7)); v9 = (void (__fastcall *)(unsigned int, int, __int16))off_D081C8; off_D081C8(a1: v3[57], a2: v8); v9(a1: v3[57], a2: v8 | 1, a3: v10); v9(a1: v3[57], a2: v8 & 0xFFFFFFFE, a3: v11); return v5; } /* ==== asd_load_le32 [tier=EXACT size=22] ==== */ // Loads a little-endian 32-bit word from an unaligned byte pointer. int __fastcall asd_load_le32(unsigned __int8 *a1) { return *a1 | (a1[1] << 8) | (a1[2] << 16) | (a1[3] << 24); } /* ==== asd_log_event [tier=EXACT size=22] ==== */ // Opcode 0x208 - trace/log sink (HDCP-side disp_log_event). int __fastcall asd_log_event(int a1, int a2, int a3, int a4) { int result; // r0 result = asd_bzero_core_cfg2(); if ( result != 0 ) return 28; return result; } /* ==== asd_logged_entry [tier=EXACT size=148] ==== */ // Wrapper that emits asd_log_event traces around its body and returns 2 on a null // argument. int __fastcall asd_logged_entry(char **a1, int a2, int a3, int a4) { int v9; // r0 void (__fastcall *v10)(int, int, int, int); // r5 int v11; // r3 int v12; // r4 int v13; // r3 void (__fastcall *v14)(int, int, int, int); // r5 int v15; // r3 int v16; // r3 char **v18; // r3 char **v19; // r4 char **v20; // r0 char **v21; // r1 char *v22; // r5 char *v23; // r6 char *v24; // r7 char *v25; // r3 char *v26; // r4 char *v27; // r5 if ( a1 != nullptr ) { __asm { SVC 0x5E ; '^' } v9 = *((_DWORD *)off_D14D68 + 3); if ( v9 != 0 && *((_DWORD *)off_D14D68 + 2) != 0 ) { while ( 1 ) { if ( v9 == 0 ) { __asm { SVC 0x5F ; '_' } goto LABEL_10; } if ( *(char **)v9 == *a1 ) break; v9 = *(_DWORD *)(v9 + 36); } v18 = (char **)(v9 + 4); v19 = a1 + 1; v20 = (char **)(v9 + 20); v21 = a1 + 5; v22 = v18[1]; v23 = v18[2]; v24 = v18[3]; *v19 = *v18; v19[1] = v22; v19[2] = v23; v19[3] = v24; v25 = v20[1]; v26 = v20[2]; v27 = v20[3]; *v21 = *v20; v21[1] = v25; v21[2] = v26; v21[3] = v27; v12 = 0; __asm { SVC 0x5F ; '_' } } else { __asm { SVC 0x5F ; '_' } LABEL_10: v14 = (void (__fastcall *)(int, int, int, int))off_D14D6C; off_D14D6C(a1: 227, a2: 1, a3: 61440); v14(a1: 227, a2: 1, a3: 0, a4: v15); v12 = 49; v14(a1: 227, a2: 1, a3: 49, a4: v16); } } else { v10 = (void (__fastcall *)(int, int, int, int))off_D14D6C; off_D14D6C(a1: 227, a2: 1, a3: 61440); v10(a1: 227, a2: 1, a3: 0, a4: v11); v12 = 2; v10(a1: 227, a2: 1, a3: 2, a4: v13); } return v12; } /* ==== asd_lookup_by_class [tier=EXACT size=62] ==== */ // Class-indexed table lookup: class 2 bounds a2 against HIDWORD(qword_D42350) and uses // unk_D423A0; class 1 takes the sibling path. int __fastcall asd_lookup_by_class(int a1, unsigned int a2) { int result; // r0 int v3; // r2 if ( a1 == 2 ) { result = 0; if ( *((_DWORD *)off_D10B2C + 5) <= a2 ) return result; v3 = *((_DWORD *)off_D10B2C + 24); goto LABEL_10; } if ( a1 == 1 ) { result = 0; if ( *((_DWORD *)off_D10B2C + 2) <= a2 ) return result; v3 = *((_DWORD *)off_D10B2C + 22); goto LABEL_10; } if ( a1 != 0 ) return 0; result = 0; if ( *((_DWORD *)off_D10B2C + 3) > a2 ) { v3 = *((_DWORD *)off_D10B2C + 20); LABEL_10: if ( v3 != 0 ) return *(_DWORD *)(v3 + 4 * a2); } return result; } /* ==== asd_memcpy_cfg0 [tier=EXACT size=34] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls memcpy. One of 0 near-identical siblings. int __fastcall asd_memcpy_cfg0(_BYTE *a1, int a2, int a3, int a4) { if ( a1 == nullptr ) return 2; __asm { SVC 0x5E ; '^' } sub_D01058(a1, a2: off_D10AE0, a3: 24); __asm { SVC 0x5F ; '_' } return 0; } /* ==== asd_mmio_30106AC_rmw [tier=EXACT size=34] ==== */ // Direct MMIO read-modify-write on the register at 0x30106AC (no SVC; mapped aperture). int __fastcall asd_mmio_30106AC_rmw(_DWORD *a1) { if ( a1 == nullptr ) return 2; *(_DWORD *)off_D141FC |= 0xC00000u; __asm { SVC 0x59 ; 'Y' } *a1 = 91; return 0; } /* ==== asd_mmio_32000C4_rmw [tier=EXACT size=18] ==== */ // Direct MMIO read-modify-write on the register at 0x32000C4 (no SVC; mapped aperture). int __fastcall asd_mmio_32000C4_rmw(char a1) { *(_DWORD *)off_D11FE4 = *(_DWORD *)off_D11FE4 & 0xFFFFFFDF | (32 * (a1 & 1)); return 0; } /* ==== asd_mmio_3250000_rmw [tier=EXACT size=74] ==== */ // Direct MMIO read-modify-write on the register at 0x3250000 (no SVC; mapped aperture). int __fastcall asd_mmio_3250000_rmw() { unsigned __int8 *v0; // r4 unsigned int v2; // r0 _DWORD *v3; // r0 v0 = (unsigned __int8 *)off_D15750; *(_DWORD *)off_D15750 |= 8u; gp_crypto_op_0x35(); if ( asd_svc_sub_110EC(a1: 0, a2: v0 + 4, a3: 0x10u, a4: off_D15540) != 0 ) return 27; v2 = *((_DWORD *)off_D1570C + 19) - 20; if ( v2 >= 0x18 || (unsigned int)dword_D156A0 >> v2 << 31 == 0 ) { v3 = off_D15544; *(_DWORD *)off_D15544 = dword_D15548; *v3 = 50331648; } return 0; } /* ==== asd_op_1C0 [tier=EXACT size=74] ==== */ // HDCP opcode 0x1C0. int __fastcall asd_op_1C0(int a1) { int v2; // r5 int result; // r0 int (__fastcall *v4)(int); // r1 if ( !asd_feature_enabled(a1: 15) ) return 8; v2 = dword_D0C92C; result = 0; if ( *(_DWORD *)(dword_D0C92C + 6284) != 0 ) { v4 = *(int (__fastcall **)(int))(dword_D0C92C + 6288); if ( v4 != nullptr ) { if ( v4(a1) != 0 ) { result = (*(int (__fastcall **)(int))(v2 + 6284))(a1); if ( result == 0 ) return (*(int (__fastcall **)(int))(v2 + 6288))(a1); } else { return 0; } } } return result; } /* ==== asd_op_304 [tier=EXACT size=30] ==== */ // Opcode 0x304. int __fastcall asd_op_304(int a1, int a2) { int result; // r0 if ( asd_state_not_1() ) return 14; result = *(_DWORD *)off_D12E8C != 6; if ( *(_DWORD *)off_D12E8C == 5 ) return 14; return result; } /* ==== asd_op_305 [tier=EXACT size=64] ==== */ // Opcode 0x305. int __fastcall asd_op_305(int a1) { // switch 6 cases int result; // r0 _DWORD *v2; // r0 int v3; // r1 _DWORD *v4; // r0 int v5; // r1 int *v6; // r0 int v7; // r1 switch ( a1 ) { case 1: v2 = off_D12E8C; // jumptable 00D12CDA case 0 v3 = 1; goto LABEL_6; case 2: v2 = off_D12E8C; // jumptable 00D12CDA case 1 v3 = 2; LABEL_6: v2[2] = v3; goto LABEL_13; case 3: v4 = off_D12E8C; // jumptable 00D12CDA case 2 v5 = 3; goto LABEL_9; case 4: v4 = off_D12E8C; // jumptable 00D12CDA case 3 v5 = 4; LABEL_9: v4[1] = v5; goto LABEL_13; case 5: v6 = (int *)off_D12E8C; // jumptable 00D12CDA case 4 v7 = 5; goto LABEL_12; case 6: v6 = (int *)off_D12E8C; // jumptable 00D12CDA case 5 v7 = 6; LABEL_12: *v6 = v7; LABEL_13: result = 0; break; default: result = 4; break; } return result; } /* ==== asd_op_306 [tier=EXACT size=34] ==== */ // Opcode 0x306. int __fastcall asd_op_306() { int v0; // r1 bool v1; // zf v0 = *((_DWORD *)off_D12E8C + 1); v1 = v0 == 3; if ( v0 != 3 ) v1 = *((_DWORD *)off_D12E8C + 2) == 1; if ( v1 || asd_dio_entry_present(a1: 1u) ) return 14; else return 0; } /* ==== asd_op_309 [tier=EXACT size=58] ==== */ // Opcode 0x309. int __fastcall asd_op_309(unsigned int *a1) { _DWORD *v2; // r0 unsigned int v3; // r2 unsigned int v4; // r1 v2 = off_D12E8C; v3 = *a1 & 0xFFFFFFFB; if ( *((_DWORD *)off_D12E8C + 1) == 3 ) v3 += 4; *a1 = v3; v4 = v3 & 0xFFFFFFFD; if ( v2[2] == 1 ) v4 += 2; *a1 = v4; *a1 = asd_dio_entry_present(a1: 1u) + (*a1 & 0xFFFFFFFE); return 0; } /* ==== asd_op_801 [tier=EXACT size=112] ==== */ // Opcode 0x801. int __fastcall asd_op_801(unsigned int a1, int a2) { int result; // r0 unsigned int v4; // r2 int *v5; // r5 unsigned int i; // r4 if ( a1 > 1 ) return 2; v4 = *((_DWORD *)off_D156F4 + 19) - 20; result = 7; if ( v4 <= 0x17 && ((1 << v4) & dword_D156A0) != 0 ) { if ( a2 != 0 ) { return 38; } else { result = asd_foreach_dio_entry(a1); if ( result == 0 ) { result = asd_link_call_D49818_guarded(a1); if ( result == 0 ) { result = asd_link_query_D49800(a1); if ( result == 0 ) { v5 = off_D15398; if ( *off_D15398 != -1 ) __asm { SVC 0x5E ; '^' } for ( i = 0; i != 6; ++i ) asd_foreach_link_cb_D49824(a1: i); if ( *v5 != -1 ) __asm { SVC 0x5F ; '_' } return 0; } } } } } return result; } /* ==== asd_op_802 [tier=EXACT size=14] ==== */ // Opcode 0x802. int __fastcall asd_op_802(_DWORD *a1) { if ( a1 == nullptr ) return 2; *a1 = 0; return 0; } /* ==== asd_opt_cb_D330C0 [tier=EXACT size=12] ==== */ // Optional callback invoker: calls the runtime function pointer off_D330C0 if installed, // otherwise returns 0. int __fastcall asd_opt_cb_D330C0() { int (*v0)(void); // r1 v0 = *((int (**)(void))off_D14BB4 + 26); if ( v0 != nullptr ) return v0(); else return 0; } /* ==== asd_opt_cb_D330CC [tier=EXACT size=12] ==== */ // Optional callback invoker: calls the runtime function pointer off_D330CC if installed, // otherwise returns 0. int __fastcall asd_opt_cb_D330CC() { int (*v0)(void); // r0 v0 = *((int (**)(void))off_D155C4 + 29); if ( v0 != nullptr ) return v0(); else return 0; } /* ==== asd_opt_cb_D423E4 [tier=EXACT size=14] ==== */ // Optional callback invoker: calls the runtime function pointer unk_D423E4 if installed, // otherwise returns 1. int __fastcall asd_opt_cb_D423E4(int a1) { int (__fastcall *v1)(int); // r1 v1 = *((int (__fastcall **)(int))off_D0B240 + 41); if ( v1 != nullptr ) return v1(a1); else return 1; } /* ==== asd_opt_cb_D423E8 [tier=EXACT size=14] ==== */ // Optional callback invoker: calls the runtime function pointer unk_D423E8 if installed, // otherwise returns 0. int __fastcall asd_opt_cb_D423E8() { int (*v0)(void); // r1 v0 = *((int (**)(void))off_D07698 + 42); if ( v0 != nullptr ) return v0(); else return 0; } /* ==== asd_opt_cb_D423EC [tier=EXACT size=14] ==== */ // Optional callback invoker: calls the runtime function pointer unk_D423EC if installed, // otherwise returns 0. int __fastcall asd_opt_cb_D423EC() { int (*v0)(void); // r0 v0 = *((int (**)(void))off_D08088 + 43); if ( v0 != nullptr ) return v0(); else return 0; } /* ==== asd_opt_cb_D423F0 [tier=EXACT size=14] ==== */ // Optional callback invoker: calls the runtime function pointer unk_D423F0 if installed, // otherwise returns 0. int __fastcall asd_opt_cb_D423F0() { int (*v0)(void); // r1 v0 = *((int (**)(void))off_D07698 + 44); if ( v0 != nullptr ) return v0(); else return 0; } /* ==== asd_opt_cb_D497F0 [tier=EXACT size=12] ==== */ // Optional callback invoker: calls the runtime function pointer unk_D497F0 if installed, // otherwise returns 1. int __fastcall asd_opt_cb_D497F0() { int (*v0)(void); // r1 v0 = *((int (**)(void))off_D19238 + 4); if ( v0 != nullptr ) return v0(); else return 1; } /* ==== asd_opt_cb_D497F4 [tier=EXACT size=12] ==== */ // Optional callback invoker: calls the runtime function pointer unk_D497F4 if installed, // otherwise returns 1. int __fastcall asd_opt_cb_D497F4() { int (*v0)(void); // r1 v0 = *((int (**)(void))off_D19238 + 5); if ( v0 != nullptr ) return v0(); else return 1; } /* ==== asd_opt_cb_D497F8 [tier=EXACT size=12] ==== */ // Optional callback invoker: calls the runtime function pointer unk_D497F8 if installed, // otherwise returns 1. int __fastcall asd_opt_cb_D497F8() { int (*v0)(void); // r1 v0 = *((int (**)(void))off_D19238 + 6); if ( v0 != nullptr ) return v0(); else return 1; } /* ==== asd_opt_cb_D497FC [tier=EXACT size=12] ==== */ // Optional callback invoker: calls the runtime function pointer unk_D497FC if installed, // otherwise returns 1. int __fastcall asd_opt_cb_D497FC() { int (*v0)(void); // r2 v0 = *((int (**)(void))off_D19238 + 7); if ( v0 != nullptr ) return v0(); else return 1; } /* ==== asd_opt_cb_D4980C_bounded [tier=EXACT size=12] ==== */ // Bounds a1 <= 1, then calls the optional runtime callback unk_D4980C if installed. int __fastcall asd_opt_cb_D4980C_bounded(unsigned int a1) { int (*v2)(void); // r1 if ( a1 > 1 ) return 0; v2 = *((int (**)(void))off_D19238 + 11); if ( v2 != nullptr ) return v2(); else return 0; } /* ==== asd_opt_cb_D49824 [tier=EXACT size=12] ==== */ // Optional callback invoker: calls the runtime function pointer unk_D49824 if installed, // otherwise returns 1. int __fastcall asd_opt_cb_D49824() { int (*v0)(void); // r1 v0 = *((int (**)(void))off_D19238 + 17); if ( v0 != nullptr ) return v0(); else return 1; } /* ==== asd_opt_cb_D49828 [tier=EXACT size=12] ==== */ // Optional callback invoker: calls the runtime function pointer unk_D49828 if installed, // otherwise returns 1. int __fastcall asd_opt_cb_D49828() { int (*v0)(void); // r2 v0 = *((int (**)(void))off_D19238 + 18); if ( v0 != nullptr ) return v0(); else return 1; } /* ==== asd_opt_cb_D4982C [tier=EXACT size=12] ==== */ // Optional callback invoker: calls the runtime function pointer unk_D4982C if installed, // otherwise returns 1. int __fastcall asd_opt_cb_D4982C() { int (*v0)(void); // r2 v0 = *((int (**)(void))off_D19238 + 19); if ( v0 != nullptr ) return v0(); else return 1; } /* ==== asd_opt_cb_D49830 [tier=EXACT size=12] ==== */ // Optional callback invoker: calls the runtime function pointer unk_D49830 if installed, // otherwise returns 0. int __fastcall asd_opt_cb_D49830() { int (*v0)(void); // r3 v0 = *((int (**)(void))off_D19238 + 20); if ( v0 != nullptr ) return v0(); else return 0; } /* ==== asd_opt_cb_D49834 [tier=EXACT size=12] ==== */ // Optional callback invoker: calls the runtime function pointer unk_D49834 if installed, // otherwise returns 1. int __fastcall asd_opt_cb_D49834() { int (*v0)(void); // r3 v0 = *((int (**)(void))off_D18B60 + 21); if ( v0 != nullptr ) return v0(); else return 1; } /* ==== asd_pipe_enable [tier=EXACT size=190] ==== */ // Enables the pipe for signal type 16 or 48: resolves the lane via unk_D42588/unk_D425A0, // sets bit7 in unk_D42584 and the companion bit in unk_D42594. int __fastcall asd_pipe_enable(int a1, int a2, int a3) { unsigned int v5; // r1 int v7; // r0 _DWORD *v8; // r8 unsigned int v9; // r7 __int16 v10; // r2 __int16 _139E4; // r0 __int16 v12; // r2 int v13; // r0 __int16 _13974; // r0 _DWORD *v16; // r8 unsigned int v17; // r7 __int16 v18; // r2 __int16 v19; // r0 __int16 v20; // r2 int v21; // r0 __int16 _13BF8; // r0 if ( a1 == 0 ) return 2; v5 = *(_DWORD *)(a1 + 24); v7 = *(_DWORD *)(a1 + 40); if ( v7 != 48 ) { if ( v7 == 16 ) { v8 = off_D0ABD8; v9 = asd_reg_read_13974(a1: *((_DWORD *)off_D0ABD8 + 100), a2: v5, a3) & 7; _139E4 = asd_reg_read_139E4(a1: v8[99], a2: v9, a3: v10); asd_reg_write_19394(a1: v8[99], a2: v9, a3: _139E4 | 0x80); v13 = v8[103]; if ( v13 != 0 ) { _13974 = asd_reg_read_13974(a1: v13, a2: v9, a3: v12); asd_reg_write_19328(a1: v8[103], a2: v9, a3: _13974 | 1); } return asd_reg_offsets_init_19600(a1, a2, a3); } return 2; } v16 = off_D0ABD8; v17 = asd_reg_read_13BF8(a1: *((_DWORD *)off_D0ABD8 + 106), a2: v5, a3) & 7; v19 = asd_reg_read_139E4(a1: v16[99], a2: v17, a3: v18); asd_reg_write_19394(a1: v16[99], a2: v17, a3: v19 | 0x80); v21 = v16[107]; if ( v21 != 0 ) { _13BF8 = asd_reg_read_13BF8(a1: v21, a2: v17, a3: v20); asd_reg_write_19524(a1: v16[107], a2: v17, a3: _13BF8 | 1); } return asd_scan_pipe_regs(a1, a2, a3); } /* ==== asd_pipe_enable_48 [tier=EXACT size=196] ==== */ // Signal-type-48 pipe enable: resolves the lane through unk_D425A0 and sets bit7 in // unk_D42584, plus the unk_D425B0 companion when present. int __fastcall asd_pipe_enable_48(int a1, int a2, int a3) { unsigned int v5; // r1 int v7; // r0 _DWORD *v8; // r8 unsigned int v9; // r7 __int16 v10; // r2 __int16 v11; // r0 __int16 v12; // r2 int v13; // r0 __int16 _13B04; // r0 int result; // r0 _DWORD *v16; // r8 unsigned int v17; // r7 __int16 v18; // r2 __int16 _139E4; // r0 __int16 v20; // r2 int v21; // r0 __int16 _13BF8; // r0 if ( a1 != 0 ) { v5 = *(_DWORD *)(a1 + 24); v7 = *(_DWORD *)(a1 + 40); if ( v7 == 48 ) { v16 = off_D0ABD8; v17 = asd_reg_read_13BF8(a1: *((_DWORD *)off_D0ABD8 + 106), a2: v5, a3) & 7; _139E4 = asd_reg_read_139E4(a1: v16[99], a2: v17, a3: v18); asd_reg_write_19394(a1: v16[99], a2: v17, a3: _139E4 | 0x80); v21 = v16[110]; if ( v21 != 0 ) { _13BF8 = asd_reg_read_13BF8(a1: v21, a2: v17, a3: v20); asd_reg_write_19524(a1: v16[110], a2: v17, a3: _13BF8 | 1); } result = asd_scan_pipe_regs(a1, a2, a3); goto LABEL_11; } if ( v7 == 16 ) { v8 = off_D0ABD8; v9 = asd_reg_read_13B04(a1: *((_DWORD *)off_D0ABD8 + 5), a2: v5, a3) & 7; v11 = asd_reg_read_139E4(a1: v8[99], a2: v9, a3: v10); asd_reg_write_19394(a1: v8[99], a2: v9, a3: v11 | 0x80); v13 = v8[108]; if ( v13 != 0 ) { _13B04 = asd_reg_read_13B04(a1: v13, a2: v9, a3: v12); asd_reg_write_19400(a1: v8[108], a2: v9, a3: _13B04 | 1); } result = asd_reg_offsets_init_19600(a1, a2, a3); LABEL_11: if ( result == 0 ) return 0; return result; } } return 2; } /* ==== asd_pipe_lookup [tier=EXACT size=180] ==== */ // Dispatches by signal type: type 48 delegates to asd_find_active_pipe, type 16 resolves // the pipe directly; anything else returns 2. int __fastcall asd_pipe_lookup(_DWORD *a1, int a2, __int16 a3) { int v3; // r1 unsigned int v5; // r5 _DWORD *v6; // r4 int v7; // r9 int (__fastcall *v8)(int, unsigned int, __int16); // r7 unsigned int v9; // r6 __int16 v10; // r2 unsigned int v11; // r8 __int16 v12; // r2 unsigned int v13; // r0 int v14; // r1 if ( a1 == nullptr ) return 2; v3 = a1[10]; if ( v3 == 48 ) return asd_find_active_pipe((int)a1); if ( v3 != 16 ) return 2; v5 = a1[5]; if ( *((_DWORD *)off_D09AD0 + 3) <= v5 ) return 2; v6 = off_D09C98; v7 = a1[6]; v8 = (int (__fastcall *)(int, unsigned int, __int16))off_D09AD4; v9 = off_D09AD4(a1: *((_DWORD *)off_D09C98 + 44), a2: a1[5]); v11 = v8(a1: v6[45], a2: v5, a3: v10); v13 = v8(a1: v6[46], a2: v5, a3: v12); if ( (v9 & 7) == v7 && (v9 & 0x10) != 0 || (v9 & 0x100000) != 0 && (HIWORD(v9) & 7) == v7 || (v11 & 7) == v7 && (v11 & 0x10) != 0 || (v11 & 0x100000) != 0 && (HIWORD(v11) & 7) == v7 || (v13 & 7) == v7 && (v13 & 0x10) != 0 ) { return 0; } v14 = (HIWORD(v13) & 7) - v7; if ( v14 != 0 ) v14 = 10; if ( (v13 & 0x100000) == 0 ) return 10; return v14; } /* ==== asd_pipe_scan [tier=EXACT size=124] ==== */ // Requires ctx+64 == 6; scans the dword_D33028 pipe entries (60-byte stride) reading the // 64-bit descriptor at +36 when byte_D33048 is set. Returns 10 if none match. int __fastcall asd_pipe_scan(int a1) { int *v1; // r9 int result; // r0 __int64 v3; // kr00_8 unsigned __int8 v4; // r7 int v5; // r4 __int64 *v6; // r3 __int64 v7; // kr08_8 int v8; // r3 unsigned int v9; // r1 if ( a1 != 0 && *(_DWORD *)(a1 + 64) == 6 ) { v1 = off_D129AC; result = 10; v3 = *((_QWORD *)off_D129AC + 1); v4 = 0; v5 = *((unsigned __int8 *)off_D129AC + 40); while ( 1 ) { if ( (unsigned int)v3 <= v4 ) return result; if ( v5 != 0 ) { v6 = *(__int64 **)(HIDWORD(v3) + 60 * v4 + 36); if ( v6 != nullptr ) break; } LABEL_17: ++v4; } v7 = *v6; if ( *(_DWORD *)v6 == v1[11] ) { v8 = *v1; if ( (unsigned int)*v1 >= 0x7D0 || (*v1 = v8 + 1, v8 == 1999) ) { result = 10; LABEL_16: v1[11] = v7; goto LABEL_17; } } else { *v1 = 0; } v9 = HIDWORD(v7) - v7; if ( HIDWORD(v7) < (unsigned int)v7 ) v9 = v7 - HIDWORD(v7); if ( v9 < 3 ) result = 0; goto LABEL_16; } return 2; } /* ==== asd_plat_sub_1B40 [tier=EXACT size=46] ==== */ // Reachability-derived label: called only from the 'plat' RPC subsystem // (BFS over direct calls + tail calls from the named 0xplat handlers). // Behaviour not individually identified. int __fastcall asd_plat_sub_1B40() { _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF bzero_core(result: v5, a2: 0x20u); __asm { SVC 0xF2 } return 1; } /* ==== asd_platform_op_402 [tier=EXACT size=106] ==== */ // Opcode 0x402. int __fastcall asd_platform_op_402(int a1) { __asm { SVC 0x7B ; '{' } if ( a1 == 1 ) { __asm { SVC 0x7C ; '|' } __asm { SVC 0x7B ; '{' } __asm { SVC 0x7C ; '|' } } else { __asm { SVC 0x7C ; '|' } __asm { SVC 0x7B ; '{' } __asm { SVC 0x7C ; '|' } } return 0; } /* ==== asd_platform_op_403 [tier=EXACT size=268] ==== */ // Opcode 0x403. int __fastcall asd_platform_op_403(int a1, unsigned int a2, _DWORD *a3, int a4, int a5, int a6) { _DWORD *v6; // r9 int result; // r0 int i; // r0 int (__fastcall *v13)(unsigned __int8 *); // r1 _DWORD *v15; // r2 int j; // r4 char v20; // [sp+6h] [bp-22h] unsigned __int8 v21; // [sp+7h] [bp-21h] BYREF _DWORD v22[8]; // [sp+8h] [bp-20h] BYREF v6 = off_D024D4; if ( a2 <= 3 && *(_DWORD *)off_D024D4 == 12 ) { result = asd_asic_family_lookup(a1: (int)v22); if ( result != 0 ) return result; for ( i = 0; i != 6; ++i ) { if ( (*off_D024D8)[2 * i] == v22[0] && (*off_D024D8)[2 * i + 1] == v22[1] ) return 8; } } if ( (a2 | 4) == 6 ) { v13 = (int (__fastcall *)(unsigned __int8 *))v6[44]; if ( v13 != nullptr ) result = v13(a1: &v21); else result = 7; if ( (result | v21) == 0 ) result = 8; _ZF = a2 == 6; if ( a2 == 6 ) _ZF = v21 == 1; if ( _ZF ) { if ( asd_plat_sub_1B40() != 0 ) return 1; if ( v20 == 0 ) return 8; } else if ( result != 0 ) { return result; } } v15 = &v6[a1 + 1]; for ( j = 0; ; j += 12 ) { if ( 12 * *((unsigned __int16 *)v6 + a1 + 36) == j ) return 7; if ( *(_DWORD **)(*v15 + j + 8) == a3 && *(_DWORD *)(*v15 + j) == a2 ) break; } if ( a6 == 8 ) { if ( a1 == 9 ) { *a3 = a4; a3[1] = a5; } else { __asm { SVC 0xA5 } } } else { if ( a6 != 4 ) return 2; if ( a1 == 9 ) *a3 = a4; else __asm { SVC 0x7C ; '|' } } return 0; } /* ==== asd_platform_op_404 [tier=EXACT size=244] ==== */ // Opcode 0x404. int __fastcall asd_platform_op_404(unsigned int a1, unsigned int a2, unsigned int *a3, _DWORD *a4, _DWORD *a5, int a6) { char *v10; // r9 int result; // r0 int i; // r0 bool v13; // cc int v15; // r1 char *v16; // r12 int j; // r4 int v18; // r3 __int64 v19; // r0 __int64 v23; // [sp+0h] [bp-2Ch] _DWORD v24[8]; // [sp+Ch] [bp-20h] BYREF if ( asd_validate_ptr(a1: (unsigned int)a4, a2: 4u) == 0 || asd_validate_ptr(a1: (unsigned int)a5, a2: 4u) == 0 ) return 2; v10 = (char *)off_D024D4; result = 7; if ( a2 <= 3 && *(_DWORD *)off_D024D4 == 12 ) { result = asd_asic_family_lookup(a1: (int)v24); if ( result == 0 ) { for ( i = 0; ; ++i ) { if ( i == 6 ) { result = 0; goto LABEL_14; } if ( (*off_D024D8)[2 * i] == v24[0] && (*off_D024D8)[2 * i + 1] == v24[1] ) break; } return 8; } } else { LABEL_14: v13 = a1 > 0x10; if ( a1 <= 0x10 ) v13 = a2 > 7; if ( !v13 ) { _ZF = a6 == 8; if ( a6 != 8 ) _ZF = a6 == 4; if ( _ZF ) { v15 = 0; v16 = v10 + 4; result = 0; while ( v15 != 6 ) { for ( j = 0; *(unsigned __int16 *)&v16[2 * v15 + 200] != j; ++j ) { v18 = *(_DWORD *)&v16[4 * v15 + 176] + 8 * j; if ( *(unsigned int **)(v18 + 4) == a3 ) result = 7; } ++v15; } if ( result == 0 ) { if ( a1 == 9 ) { if ( a6 == 8 ) v19 = *(_QWORD *)a3; else v19 = *a3; } else { __asm { SVC 0x7B ; '{' } v19 = v23; } *a5 = HIDWORD(v19); *a4 = v19; return 0; } } } } return result; } /* ==== asd_platform_op_405 [tier=EXACT size=14] ==== */ // Opcode 0x405. int __fastcall asd_platform_op_405() { int (*v0)(void); // r1 v0 = *((int (**)(void))off_D13970 + 44); if ( v0 != nullptr ) return v0(); else return 7; } /* ==== asd_probe_power_state [tier=EXACT size=42] ==== */ // Issues SYS_DRV RPC 0x1021 (sub_D01A18 verb 6); maps the returned value to // dword_D33054 (1, or 2 when the reply is 3, or 0 on RPC failure). BOOL __fastcall asd_probe_power_state() { int v0; // r0 int v1; // r1 int v3; // [sp+4h] [bp-4h] BYREF v3 = 0; v0 = sysdrv_rpc_1021(a1: 6, a2: 0, a3: (int)&v3); v1 = 1; if ( v3 == 3 ) v1 = 2; if ( v0 != 0 ) v1 = 0; *((_DWORD *)off_D147C0 + 1) = v1; return v0 != 0; } /* ==== asd_program_key_regs [tier=EXACT size=100] ==== */ // Resolves per-signal key words via sub_D09254 then drives asd_write_key_regs across the // 2 x 2 and 4-entry register groups. int __fastcall asd_program_key_regs(int a1) { int result; // r0 unsigned int i; // r8 int j; // r7 int k; // r7 int v6[7]; // [sp+4h] [bp-1Ch] BYREF if ( a1 == 0 ) return 2; result = asd_get_key_words(a1: *(_DWORD *)(a1 + 40), a2: v6); if ( result == 0 ) { for ( i = 0; i <= 1; ++i ) { for ( j = 0; j != 2; ++j ) asd_write_key_regs(a1, a2: v6[0], a3: v6[j + 1]); for ( k = 0; k != 4; ++k ) asd_write_key_regs(a1, a2: v6[0], a3: v6[k + 3]); } return 0; } return result; } /* ==== asd_program_link_by_signal [tier=EXACT size=790] ==== */ // Programs the link for its signal class: switch over __ROR4__(ctx+40, 4) with each case // bounds-checking the link index against unk_D4234C / qword_D42350 before touching the // register block. int __fastcall asd_program_link_by_signal(struct asd_link_cfg *a1, int a2, int a3, int a4) { __int64 v5; // kr00_8 unsigned int field28; // r0 unsigned int v7; // r0 bool v8; // cc unsigned int v9; // r1 unsigned int v10; // r7 unsigned int v11; // r1 bool v12; // cc unsigned int v13; // r1 bool v14; // cc unsigned int v15; // r1 bool v16; // cc int result; // r0 unsigned int field0C; // r1 _DWORD *v19; // r5 unsigned int field2C; // r3 unsigned int v21; // r1 unsigned int field38; // r2 BOOL v23; // r6 BOOL v24; // r3 __int64 v25; // kr08_8 _DWORD *v26; // r9 unsigned int v27; // r6 __int16 v28; // r2 __int16 _139E4; // r0 __int16 v30; // r2 int v31; // r0 __int16 _13974; // r0 __int16 v33; // r2 int (__fastcall *v34)(_DWORD); // r1 unsigned int v35; // r0 _DWORD *v36; // r5 unsigned int v37; // r6 __int16 v38; // r2 __int16 v39; // r0 __int16 v40; // r2 int v41; // r0 __int16 v42; // r0 __int16 v43; // r2 int *v44; // r5 __int16 v45; // r2 unsigned int field24; // r5 int v47; // r1 __int16 v48; // r2 int _13B74; // r6 unsigned int field20; // r0 unsigned int field44; // r0 unsigned int v52; // r0 unsigned int v53; // r6 __int16 v54; // r2 __int16 v55; // r0 __int16 v56; // r2 int v57; // r0 __int16 _13BF8; // r0 int v59; // [sp+0h] [bp-8h] BYREF int v60; // [sp+4h] [bp-4h] BYREF v59 = a3; v60 = a4; if ( a1 == nullptr ) return 2; v5 = *(_QWORD *)&a1->field14; field28 = a1->field28; // switch 4 cases switch ( __ROR4__(field28, 4) ) { // switch jump case 0: v7 = *((_DWORD *)off_D0A230 + 3); // jumptable 00D09F30 case 0 v8 = v7 > (unsigned int)v5; if ( v7 > (unsigned int)v5 ) v8 = v7 > HIDWORD(v5); if ( v8 ) { v10 = 16; } else if ( v7 > (unsigned int)v5 || (v9 = *((_DWORD *)off_D0A230 + 2)) <= HIDWORD(v5) || v7 > HIDWORD(v5) || v9 <= (unsigned int)v5 ) { v10 = 0; } else { v10 = 32; } a1->field30 = 1; break; case 1: v11 = *((_DWORD *)off_D0A230 + 3); // jumptable 00D09F30 case 1 v12 = v11 > (unsigned int)v5; if ( v11 > (unsigned int)v5 ) v12 = v11 > HIDWORD(v5); if ( v12 ) { v10 = 16; } else { if ( field28 == 48 ) goto LABEL_20; if ( field28 == 32 ) goto LABEL_16; v10 = 0; // jumptable 00D09F30 default case } break; case 2: LABEL_16: v13 = *((_DWORD *)off_D0A230 + 4); // jumptable 00D09F30 case 2 v14 = v13 > (unsigned int)v5; if ( v13 > (unsigned int)v5 ) v14 = v13 > HIDWORD(v5); if ( v14 ) { v10 = 32; } else { if ( field28 == 48 ) goto LABEL_20; v10 = 0; } break; case 3: LABEL_20: v15 = *((_DWORD *)off_D0A230 + 5); // jumptable 00D09F30 case 3 v16 = v15 > (unsigned int)v5; if ( v15 > (unsigned int)v5 ) v16 = *((_DWORD *)off_D0A230 + 6) > HIDWORD(v5); if ( !v16 ) goto LABEL_23; v10 = 48; break; default: LABEL_23: v10 = 0; break; } result = 2; a1->field28 = v10; if ( v10 != 0 ) { field0C = a1->field0C; if ( field0C != 0 ) { v19 = off_D0A230; if ( *((_DWORD *)off_D0A230 + 1) > field0C ) { field2C = a1->field2C; v21 = *((_DWORD *)off_D0A230 + 7); result = 2; field38 = a1->field38; v23 = v21 <= field2C; v24 = field2C != 0; if ( field38 <= 4 && (!v24 || !v23) ) { v25 = *(_QWORD *)&a1->field30; if ( HIDWORD(v25) == 2 && *((_DWORD *)off_D0A230 + 8) <= field38 ) return 2; v59 = 255; v60 = 255; if ( v10 == 16 ) { if ( v21 == 0 || (result = asd_get_connector_ids_a(a1, a2: &v60, a3: &v59)) == 0 ) { if ( v19[4] == 0 || asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0A234 + 4), a3: v5) << 31 != 0 ) { if ( (_DWORD)v25 == 1 ) { v26 = off_D0AF2C; v27 = asd_reg_read_13974(a1: *((_DWORD *)off_D0AF2C + 100), a2: HIDWORD(v5), a3: field38) & 7; _139E4 = asd_reg_read_139E4(a1: v26[99], a2: v27, a3: v28); asd_reg_write_19394(a1: v26[99], a2: v27, a3: _139E4 | 0x80); v31 = v26[103]; if ( v31 != 0 ) { _13974 = asd_reg_read_13974(a1: v31, a2: v27, a3: v30); asd_reg_write_19328(a1: v26[103], a2: v27, a3: _13974 | 1);// switch 6 cases } } switch ( ((unsigned int)asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0A234 + 2), a3: v5) >> 16) & 7 ) { case 0u: if ( a1->field20 == 0 || (v34 = (int (__fastcall *)(_DWORD))v19[42]) != nullptr && v34(a1: v5) != 0 || asd_reg_read_13D24_cfg0(a1: v5, a2: (int)v34, a3: v33) != 0 )// jumptable 00D0A088 case 0 { a1->field4C = 3; v35 = 4; goto LABEL_65; } a1->field40 = 4; a1->field48 = 16; a1->field4C = 4; break; case 2u: v35 = 1; // jumptable 00D0A088 case 2 a1->field4C = 1; goto LABEL_65; case 3u: goto LABEL_59; // switch jump case 5u: a1->field4C = 3; // jumptable 00D0A088 case 5 v35 = 5; goto LABEL_65; default: goto LABEL_66; } goto LABEL_66; } return 8; } } else { if ( v10 == 48 ) { result = asd_get_connector_ids_a(a1, a2: &v60, a3: &v59); if ( result != 0 ) return result; v44 = (int *)off_D0A234; if ( asd_reg_read_13BF8(a1: *((_DWORD *)off_D0A234 + 105), a2: HIDWORD(v5), a3: v43) << 31 != 0 ) { a1->field4C = 3; a1->field40 = 5; if ( (_DWORD)v25 == 1 ) { v53 = asd_reg_read_13BF8(a1: v44[106], a2: HIDWORD(v5), a3: v45) & 7; v55 = asd_reg_read_139E4(a1: v44[99], a2: v53, a3: v54); asd_reg_write_19394(a1: v44[99], a2: v53, a3: v55 | 0x80); v57 = v44[107]; if ( v57 != 0 ) { _13BF8 = asd_reg_read_13BF8(a1: v57, a2: v53, a3: v56); asd_reg_write_19524(a1: v44[107], a2: v53, a3: _13BF8 | 1); } } LABEL_66: result = asd_state_not_1(); // jumptable 00D0A088 default case, cases 1,4 if ( result != 0 ) { a1->field44 = 4; return result; } field24 = a1->field24; if ( v10 == 16 ) { _13B74 = asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0A560 + 9), a3: v5); field20 = a1->field20; a1->field44 = 0; if ( field20 != 0 && asd_reg_read_13D24_cfg0(a1: v5, a2: v47, a3: v48) == 0 ) { v52 = 16; goto LABEL_83; } if ( field24 >= 0xA && (_13B74 & 0x70000000) == 0x30000000 ) a1->field44 |= 1u; if ( field24 < 0x16 ) return 0; field44 = a1->field44; } else { field44 = a1->field44 & 0xFFFFFFFE; a1->field44 = field44; if ( field24 < 0x16 ) return 0; } v52 = field44 | 2; LABEL_83: a1->field44 = v52; return 0; } return 8; } if ( v21 == 0 || (result = asd_get_connector_ids_a(a1, a2: &v60, a3: &v59)) == 0 ) { if ( (_DWORD)v25 == 1 ) { v36 = off_D0A234; v37 = asd_reg_read_13974(a1: *((_DWORD *)off_D0A234 + 101), a2: HIDWORD(v5), a3: field38) & 7; v39 = asd_reg_read_139E4(a1: v36[99], a2: v37, a3: v38); asd_reg_write_19394(a1: v36[99], a2: v37, a3: v39 | 0x80); v41 = v36[104]; if ( v41 != 0 ) { v42 = asd_reg_read_13974(a1: v41, a2: 0, a3: v40); asd_reg_write_19328(a1: v36[104], a2: 0, a3: v42 | 1); } } if ( asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_D0A234 + 84), a3: v5) << 31 != 0 ) { LABEL_59: a1->field4C = 2; // jumptable 00D0A088 case 3 v35 = 3; LABEL_65: a1->field40 = v35; goto LABEL_66; } return 8; } } } } } } return result; } /* ==== asd_program_link_by_signal_v2 [tier=EXACT size=802] ==== */ // Second ASIC form of asd_program_link_by_signal. int __fastcall asd_program_link_by_signal_v2(struct asd_link_cfg *a1, int a2, int a3, int a4) { __int64 v5; // kr00_8 unsigned int field28; // r0 unsigned int v7; // r0 bool v8; // cc unsigned int v9; // r1 unsigned int v10; // r5 unsigned int v11; // r1 bool v12; // cc unsigned int v13; // r1 bool v14; // cc unsigned int v15; // r1 bool v16; // cc int connector_ids_a; // r7 unsigned int field0C; // r0 _DWORD *v19; // r9 unsigned int field2C; // r2 unsigned int v21; // r0 unsigned int field38; // r1 BOOL v23; // r3 BOOL v24; // r2 unsigned int field34; // r2 unsigned int field30; // r10 _DWORD *v28; // r7 unsigned int v29; // r6 __int16 v30; // r2 __int16 _139E4; // r0 __int16 v32; // r2 int v33; // r0 __int16 _13974; // r0 int v35; // r1 __int16 v36; // r2 unsigned int v37; // r0 _DWORD *v38; // r7 unsigned int v39; // r6 __int16 v40; // r2 __int16 v41; // r0 __int16 v42; // r2 int v43; // r0 __int16 v44; // r0 __int16 v45; // r2 int *v46; // r7 __int16 v47; // r2 unsigned int v48; // r6 __int16 v49; // r2 __int16 v50; // r0 __int16 v51; // r2 int v52; // r0 __int16 _13BF8; // r0 BOOL v54; // r0 int v55; // r1 __int16 v56; // r2 unsigned int v57; // r0 unsigned int field24; // r6 int (__fastcall *v59)(_DWORD, int); // r0 unsigned int v60; // r0 unsigned int v61; // r0 int v62; // [sp+0h] [bp-8h] BYREF int v63; // [sp+4h] [bp-4h] BYREF v62 = a3; v63 = a4; if ( a1 == nullptr ) return 2; v5 = *(_QWORD *)&a1->field14; field28 = a1->field28; // switch 4 cases switch ( __ROR4__(field28, 4) ) { // switch jump case 0: v7 = *((_DWORD *)off_D0A55C + 3); // jumptable 00D0A250 case 0 v8 = v7 > (unsigned int)v5; if ( v7 > (unsigned int)v5 ) v8 = v7 > HIDWORD(v5); if ( v8 ) { v10 = 16; } else if ( v7 > (unsigned int)v5 || (v9 = *((_DWORD *)off_D0A55C + 2)) <= HIDWORD(v5) || v7 > HIDWORD(v5) || v9 <= (unsigned int)v5 ) { v10 = 0; } else { v10 = 32; } a1->field30 = 1; break; case 1: v11 = *((_DWORD *)off_D0A55C + 3); // jumptable 00D0A250 case 1 v12 = v11 > (unsigned int)v5; if ( v11 > (unsigned int)v5 ) v12 = v11 > HIDWORD(v5); if ( v12 ) { v10 = 16; } else { if ( field28 == 48 ) goto LABEL_20; if ( field28 == 32 ) goto LABEL_16; v10 = 0; // jumptable 00D0A250 default case } break; case 2: LABEL_16: v13 = *((_DWORD *)off_D0A55C + 4); // jumptable 00D0A250 case 2 v14 = v13 > (unsigned int)v5; if ( v13 > (unsigned int)v5 ) v14 = v13 > HIDWORD(v5); if ( v14 ) { v10 = 32; } else { if ( field28 == 48 ) goto LABEL_20; v10 = 0; } break; case 3: LABEL_20: v15 = *((_DWORD *)off_D0A55C + 5); // jumptable 00D0A250 case 3 v16 = v15 > (unsigned int)v5; if ( v15 > (unsigned int)v5 ) v16 = *((_DWORD *)off_D0A55C + 6) > HIDWORD(v5); if ( !v16 ) goto LABEL_23; v10 = 48; break; default: LABEL_23: v10 = 0; break; } connector_ids_a = 2; a1->field28 = v10; if ( v10 == 0 ) return connector_ids_a; field0C = a1->field0C; if ( field0C == 0 ) return connector_ids_a; v19 = off_D0B240; if ( *((_DWORD *)off_D0B240 + 1) <= field0C ) return connector_ids_a; field2C = a1->field2C; v21 = *((_DWORD *)off_D0B240 + 7); connector_ids_a = 2; field38 = a1->field38; v23 = v21 <= field2C; v24 = field2C != 0; if ( field38 > 4 || v24 && v23 ) return connector_ids_a; field34 = a1->field34; field30 = a1->field30; if ( field34 == 2 ) { field34 = *((_DWORD *)off_D0B240 + 8); if ( field34 <= field38 ) return 2; } v62 = 255; v63 = 255; if ( v10 == 16 ) { if ( v21 != 0 ) { connector_ids_a = asd_get_connector_ids_a(a1, a2: &v63, a3: &v62); if ( connector_ids_a != 0 ) return connector_ids_a; } if ( v19[4] == 0 || asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0A560 + 4), a3: v5) << 31 != 0 ) { if ( field30 == 1 ) { v28 = off_D0A560; v29 = asd_reg_read_13974(a1: *((_DWORD *)off_D0A560 + 100), a2: HIDWORD(v5), a3: field34) & 7; _139E4 = asd_reg_read_139E4(a1: v28[99], a2: v29, a3: v30); asd_reg_write_19394(a1: v28[99], a2: v29, a3: _139E4 | 0x80); v33 = v28[103]; if ( v33 != 0 ) { _13974 = asd_reg_read_13974(a1: v33, a2: v29, a3: v32); asd_reg_write_19328(a1: v28[103], a2: v29, a3: _13974 | 1); } } switch ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0A560 + 3), a3: v5) & 7 ) { case 0: if ( a1->field20 == 0 || asd_opt_cb_D423E8() != 0 || asd_reg_read_13D24_cfg1(a1: v5, a2: v35, a3: v36) != 0 )// jumptable 00D0A3A0 case 0 { a1->field4C = 3; v37 = 4; goto LABEL_68; } a1->field40 = 4; a1->field48 = 16; a1->field4C = 4; break; case 1: case 4: case 6: case 7: goto LABEL_69; // switch 8 cases case 2: v37 = 1; // jumptable 00D0A3A0 case 2 a1->field4C = 1; goto LABEL_68; case 3: goto LABEL_59; case 5: a1->field4C = 3; // jumptable 00D0A3A0 case 5 v37 = 5; goto LABEL_68; } goto LABEL_69; } return 8; } if ( v10 != 48 ) { if ( v21 != 0 ) { connector_ids_a = asd_get_connector_ids_a(a1, a2: &v63, a3: &v62); if ( connector_ids_a != 0 ) return connector_ids_a; } if ( field30 == 1 ) { v38 = off_D0A560; v39 = asd_reg_read_13974(a1: *((_DWORD *)off_D0A560 + 101), a2: HIDWORD(v5), a3: field34) & 7; v41 = asd_reg_read_139E4(a1: v38[99], a2: v39, a3: v40); asd_reg_write_19394(a1: v38[99], a2: v39, a3: v41 | 0x80); v43 = v38[104]; if ( v43 != 0 ) { v44 = asd_reg_read_13974(a1: v43, a2: 0, a3: v42); asd_reg_write_19328(a1: v38[104], a2: 0, a3: v44 | 1); } } if ( asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_D0A560 + 84), a3: v5) << 31 != 0 ) { LABEL_59: a1->field4C = 2; // jumptable 00D0A3A0 case 3 v37 = 3; LABEL_68: a1->field40 = v37; goto LABEL_69; } return 8; } connector_ids_a = asd_get_connector_ids_a(a1, a2: &v63, a3: &v62); if ( connector_ids_a != 0 ) return connector_ids_a; v46 = (int *)off_D0A560; if ( asd_reg_read_13BF8(a1: *((_DWORD *)off_D0A560 + 105), a2: HIDWORD(v5), a3: v45) << 31 == 0 ) return 8; a1->field4C = 3; a1->field40 = 5; if ( field30 == 1 ) { v48 = asd_reg_read_13BF8(a1: v46[106], a2: HIDWORD(v5), a3: v47) & 7; v50 = asd_reg_read_139E4(a1: v46[99], a2: v48, a3: v49); asd_reg_write_19394(a1: v46[99], a2: v48, a3: v50 | 0x80); v52 = v46[107]; if ( v52 != 0 ) { _13BF8 = asd_reg_read_13BF8(a1: v52, a2: v48, a3: v51); asd_reg_write_19524(a1: v46[107], a2: v48, a3: _13BF8 | 1); } } LABEL_69: v54 = asd_state_not_1(); // jumptable 00D0A3A0 cases 1,4,6,7 if ( v54 ) { connector_ids_a = v54; v57 = 4; LABEL_71: a1->field44 = v57; return connector_ids_a; } field24 = a1->field24; if ( v10 != 16 ) { v60 = a1->field44 & 0xFFFFFFFE; a1->field44 = v60; if ( field24 < 0x16 ) return 0; v61 = v60 | 2; LABEL_85: a1->field44 = v61; return 0; } a1->field44 = 0; if ( a1->field20 != 0 && asd_reg_read_13D24_cfg1(a1: v5, a2: v55, a3: v56) == 0 ) { v61 = 16; goto LABEL_85; } if ( field24 < 0xA ) return 0; v59 = (int (__fastcall *)(_DWORD, int))v19[43]; if ( v59 == nullptr || (connector_ids_a = v59(a1: v59, a2: v55)) == 0 ) { connector_ids_a = 0; if ( (asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0A878 + 9), a3: v5) & 0x70000000) == 0x30000000 ) { a1->field44 |= 1u; connector_ids_a = 0; } } if ( field24 >= 0x16 ) { v57 = a1->field44 | 2; goto LABEL_71; } return connector_ids_a; } /* ==== asd_program_link_by_signal_v3 [tier=EXACT size=784] ==== */ // Third ASIC form of asd_program_link_by_signal. int __fastcall asd_program_link_by_signal_v3(struct asd_link_cfg *a1, int a2, int a3, int a4) { __int64 v5; // kr00_8 unsigned int field28; // r0 unsigned int v7; // r0 bool v8; // cc unsigned int v9; // r1 unsigned int v10; // r5 unsigned int v11; // r1 bool v12; // cc unsigned int v13; // r1 bool v14; // cc unsigned int v15; // r1 bool v16; // cc int connector_ids_b; // r7 unsigned int field0C; // r0 _DWORD *v19; // r6 unsigned int field2C; // r2 unsigned int v21; // r0 unsigned int field38; // r1 BOOL v23; // r3 BOOL v24; // r2 unsigned int field34; // r2 unsigned int field30; // r9 _DWORD *v28; // r7 unsigned int v29; // r6 __int16 v30; // r2 __int16 _139E4; // r0 __int16 v32; // r2 int v33; // r0 __int16 _13974; // r0 int v35; // r1 __int16 v36; // r2 unsigned int v37; // r0 _DWORD *v38; // r7 unsigned int v39; // r6 __int16 v40; // r2 __int16 v41; // r0 __int16 v42; // r2 int v43; // r0 __int16 v44; // r0 __int16 v45; // r2 int *v46; // r7 __int16 v47; // r2 unsigned int v48; // r6 __int16 v49; // r2 __int16 v50; // r0 __int16 v51; // r2 int v52; // r0 __int16 _13BF8; // r0 BOOL v54; // r0 int v55; // r1 __int16 v56; // r2 unsigned int v57; // r0 unsigned int field24; // r6 unsigned int v59; // r0 unsigned int v60; // r0 int v61; // [sp+0h] [bp-8h] BYREF int v62; // [sp+4h] [bp-4h] BYREF v61 = a3; v62 = a4; if ( a1 == nullptr ) return 2; v5 = *(_QWORD *)&a1->field14; field28 = a1->field28; // switch 4 cases switch ( __ROR4__(field28, 4) ) { // switch jump case 0: v7 = *((_DWORD *)off_D0A874 + 3); // jumptable 00D0A57C case 0 v8 = v7 > (unsigned int)v5; if ( v7 > (unsigned int)v5 ) v8 = v7 > HIDWORD(v5); if ( v8 ) { v10 = 16; } else if ( v7 > (unsigned int)v5 || (v9 = *((_DWORD *)off_D0A874 + 2)) <= HIDWORD(v5) || v7 > HIDWORD(v5) || v9 <= (unsigned int)v5 ) { v10 = 0; } else { v10 = 32; } a1->field30 = 1; break; case 1: v11 = *((_DWORD *)off_D0A874 + 3); // jumptable 00D0A57C case 1 v12 = v11 > (unsigned int)v5; if ( v11 > (unsigned int)v5 ) v12 = v11 > HIDWORD(v5); if ( v12 ) { v10 = 16; } else { if ( field28 == 48 ) goto LABEL_20; if ( field28 == 32 ) goto LABEL_16; v10 = 0; // jumptable 00D0A57C default case } break; case 2: LABEL_16: v13 = *((_DWORD *)off_D0A874 + 4); // jumptable 00D0A57C case 2 v14 = v13 > (unsigned int)v5; if ( v13 > (unsigned int)v5 ) v14 = v13 > HIDWORD(v5); if ( v14 ) { v10 = 32; } else { if ( field28 == 48 ) goto LABEL_20; v10 = 0; } break; case 3: LABEL_20: v15 = *((_DWORD *)off_D0A874 + 5); // jumptable 00D0A57C case 3 v16 = v15 > (unsigned int)v5; if ( v15 > (unsigned int)v5 ) v16 = *((_DWORD *)off_D0A874 + 6) > HIDWORD(v5); if ( !v16 ) goto LABEL_23; v10 = 48; break; default: LABEL_23: v10 = 0; break; } connector_ids_b = 2; a1->field28 = v10; if ( v10 == 0 ) return connector_ids_b; field0C = a1->field0C; if ( field0C == 0 ) return connector_ids_b; v19 = off_D0A874; if ( *((_DWORD *)off_D0A874 + 1) <= field0C ) return connector_ids_b; field2C = a1->field2C; v21 = *((_DWORD *)off_D0A874 + 7); connector_ids_b = 2; field38 = a1->field38; v23 = v21 <= field2C; v24 = field2C != 0; if ( field38 > 4 || v24 && v23 ) return connector_ids_b; field34 = a1->field34; field30 = a1->field30; if ( field34 == 2 ) { field34 = *((_DWORD *)off_D0A874 + 8); if ( field34 <= field38 ) return 2; } v61 = 255; v62 = 255; if ( v10 == 16 ) { if ( v21 != 0 ) { connector_ids_b = asd_get_connector_ids_b(a1, a2: &v62, a3: &v61); if ( connector_ids_b != 0 ) return connector_ids_b; } if ( v19[4] == 0 || asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0A878 + 4), a3: v5) << 31 != 0 ) { if ( field30 == 1 ) { v28 = off_D0A878; v29 = asd_reg_read_13974(a1: *((_DWORD *)off_D0A878 + 100), a2: HIDWORD(v5), a3: field34) & 7; _139E4 = asd_reg_read_139E4(a1: v28[99], a2: v29, a3: v30); asd_reg_write_19394(a1: v28[99], a2: v29, a3: _139E4 | 0x80); v33 = v28[103]; if ( v33 != 0 ) { _13974 = asd_reg_read_13974(a1: v33, a2: v29, a3: v32); asd_reg_write_19328(a1: v28[103], a2: v29, a3: _13974 | 1); } } switch ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0A878 + 3), a3: v5) & 7 ) { case 0: if ( a1->field20 == 0 || asd_opt_cb_D423E8() != 0 || asd_reg_read_13D24_cfg0(a1: v5, a2: v35, a3: v36) != 0 )// jumptable 00D0A6C2 case 0 { a1->field4C = 3; v37 = 4; goto LABEL_68; } a1->field40 = 4; a1->field48 = 16; a1->field4C = 4; break; case 1: case 4: case 6: case 7: goto LABEL_69; // switch 8 cases case 2: v37 = 1; // jumptable 00D0A6C2 case 2 a1->field4C = 1; goto LABEL_68; case 3: goto LABEL_59; case 5: a1->field4C = 3; // jumptable 00D0A6C2 case 5 v37 = 5; goto LABEL_68; } goto LABEL_69; } return 8; } if ( v10 != 48 ) { if ( v21 != 0 ) { connector_ids_b = asd_get_connector_ids_b(a1, a2: &v62, a3: &v61); if ( connector_ids_b != 0 ) return connector_ids_b; } if ( field30 == 1 ) { v38 = off_D0A878; v39 = asd_reg_read_13974(a1: *((_DWORD *)off_D0A878 + 101), a2: HIDWORD(v5), a3: field34) & 7; v41 = asd_reg_read_139E4(a1: v38[99], a2: v39, a3: v40); asd_reg_write_19394(a1: v38[99], a2: v39, a3: v41 | 0x80); v43 = v38[104]; if ( v43 != 0 ) { v44 = asd_reg_read_13974(a1: v43, a2: 0, a3: v42); asd_reg_write_19328(a1: v38[104], a2: 0, a3: v44 | 1); } } if ( asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_D0A878 + 84), a3: v5) << 31 != 0 ) { LABEL_59: a1->field4C = 2; // jumptable 00D0A6C2 case 3 v37 = 3; LABEL_68: a1->field40 = v37; goto LABEL_69; } return 8; } connector_ids_b = asd_get_connector_ids_b(a1, a2: &v62, a3: &v61); if ( connector_ids_b != 0 ) return connector_ids_b; v46 = (int *)off_D0A878; if ( asd_reg_read_13BF8(a1: *((_DWORD *)off_D0A878 + 105), a2: HIDWORD(v5), a3: v45) << 31 == 0 ) return 8; a1->field4C = 3; a1->field40 = 5; if ( field30 == 1 ) { v48 = asd_reg_read_13BF8(a1: v46[106], a2: HIDWORD(v5), a3: v47) & 7; v50 = asd_reg_read_139E4(a1: v46[99], a2: v48, a3: v49); asd_reg_write_19394(a1: v46[99], a2: v48, a3: v50 | 0x80); v52 = v46[107]; if ( v52 != 0 ) { _13BF8 = asd_reg_read_13BF8(a1: v52, a2: v48, a3: v51); asd_reg_write_19524(a1: v46[107], a2: v48, a3: _13BF8 | 1); } } LABEL_69: v54 = asd_state_not_1(); // jumptable 00D0A6C2 cases 1,4,6,7 if ( v54 ) { connector_ids_b = v54; v57 = 4; LABEL_71: a1->field44 = v57; return connector_ids_b; } field24 = a1->field24; if ( v10 != 16 ) { v59 = a1->field44 & 0xFFFFFFFE; a1->field44 = v59; if ( field24 < 0x16 ) return 0; v60 = v59 | 2; LABEL_84: a1->field44 = v60; return 0; } a1->field44 = 0; if ( a1->field20 != 0 && asd_reg_read_13D24_cfg0(a1: v5, a2: v55, a3: v56) == 0 ) { v60 = 16; goto LABEL_84; } if ( field24 < 0xA ) return 0; connector_ids_b = asd_opt_cb_D423EC(); if ( connector_ids_b == 0 && (asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0ABD8 + 9), a3: v5) & 0x70000000) == 0x30000000 ) { a1->field44 |= 1u; } if ( field24 >= 0x16 ) { v57 = a1->field44 | 2; goto LABEL_71; } return connector_ids_b; } /* ==== asd_program_link_by_signal_v4 [tier=EXACT size=854] ==== */ // Fourth ASIC form of asd_program_link_by_signal. int __fastcall asd_program_link_by_signal_v4(struct asd_link_cfg *a1, int a2, int a3, int a4) { __int64 v5; // kr00_8 unsigned int field28; // r0 unsigned int v7; // r0 bool v8; // cc unsigned int v9; // r1 unsigned int v10; // r5 unsigned int v11; // r1 bool v12; // cc unsigned int v13; // r1 bool v14; // cc unsigned int v15; // r1 bool v16; // cc int connector_ids_a; // r7 unsigned int field0C; // r0 _DWORD *v19; // r6 unsigned int field2C; // r2 unsigned int v21; // r0 unsigned int field38; // r1 BOOL v23; // r3 BOOL v24; // r2 unsigned int field34; // r2 unsigned int field30; // r9 _DWORD *v28; // r7 unsigned int v29; // r6 __int16 v30; // r2 __int16 _139E4; // r0 __int16 v32; // r2 int v33; // r0 __int16 _13974; // r0 int v35; // r1 __int16 v36; // r2 unsigned int v37; // r0 _DWORD *v38; // r7 unsigned int v39; // r6 __int16 v40; // r2 __int16 v41; // r0 __int16 v42; // r2 int v43; // r0 __int16 v44; // r0 int (__fastcall *v45)(_DWORD); // r1 __int16 v46; // r2 int *v47; // r7 __int16 v48; // r2 BOOL v49; // r0 int v50; // r1 __int16 v51; // r2 unsigned int v52; // r0 unsigned int field24; // r6 unsigned int v54; // r0 unsigned int v55; // r6 __int16 v56; // r2 __int16 v57; // r0 __int16 v58; // r2 int v59; // r0 __int16 _13BF8; // r0 int v61; // [sp+0h] [bp-8h] BYREF int v62; // [sp+4h] [bp-4h] BYREF v61 = a3; v62 = a4; if ( a1 == nullptr ) return 2; v5 = *(_QWORD *)&a1->field14; field28 = a1->field28; // switch 4 cases switch ( __ROR4__(field28, 4) ) { // switch jump case 0: v7 = *((_DWORD *)off_D0B818 + 3); // jumptable 00D0A894 case 0 v8 = v7 > (unsigned int)v5; if ( v7 > (unsigned int)v5 ) v8 = v7 > HIDWORD(v5); if ( v8 ) { v10 = 16; } else if ( v7 > (unsigned int)v5 || (v9 = *((_DWORD *)off_D0B818 + 2)) <= HIDWORD(v5) || v7 > HIDWORD(v5) || v9 <= (unsigned int)v5 ) { v10 = 0; } else { v10 = 32; } a1->field30 = 1; break; case 1: v11 = *((_DWORD *)off_D0ABD4 + 3); // jumptable 00D0A894 case 1 v12 = v11 > (unsigned int)v5; if ( v11 > (unsigned int)v5 ) v12 = v11 > HIDWORD(v5); if ( v12 ) { v10 = 16; } else { if ( field28 == 48 ) goto LABEL_20; if ( field28 == 32 ) goto LABEL_16; v10 = 0; // jumptable 00D0A894 default case } break; case 2: LABEL_16: v13 = *((_DWORD *)off_D0ABD4 + 4); // jumptable 00D0A894 case 2 v14 = v13 > (unsigned int)v5; if ( v13 > (unsigned int)v5 ) v14 = v13 > HIDWORD(v5); if ( v14 ) { v10 = 32; } else { if ( field28 == 48 ) goto LABEL_20; v10 = 0; } break; case 3: LABEL_20: v15 = *((_DWORD *)off_D0ABD4 + 5); // jumptable 00D0A894 case 3 v16 = v15 > (unsigned int)v5; if ( v15 > (unsigned int)v5 ) v16 = *((_DWORD *)off_D0ABD4 + 6) > HIDWORD(v5); if ( !v16 ) goto LABEL_23; v10 = 48; break; default: LABEL_23: v10 = 0; break; } connector_ids_a = 2; a1->field28 = v10; if ( v10 == 0 ) return connector_ids_a; field0C = a1->field0C; if ( field0C == 0 ) return connector_ids_a; v19 = off_D0ABD4; if ( *((_DWORD *)off_D0ABD4 + 1) <= field0C ) return connector_ids_a; field2C = a1->field2C; v21 = *((_DWORD *)off_D0ABD4 + 7); connector_ids_a = 2; field38 = a1->field38; v23 = v21 <= field2C; v24 = field2C != 0; if ( field38 > 4 || v24 && v23 ) return connector_ids_a; field34 = a1->field34; field30 = a1->field30; if ( field34 == 2 ) { field34 = *((_DWORD *)off_D0ABD4 + 8); if ( field34 <= field38 ) return 2; } v61 = 255; v62 = 255; if ( v10 == 16 ) { if ( v21 != 0 ) { connector_ids_a = asd_get_connector_ids_a(a1, a2: &v62, a3: &v61); if ( connector_ids_a != 0 ) return connector_ids_a; } if ( v19[4] == 0 || asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0ABD8 + 4), a3: v5) << 31 != 0 ) { if ( field30 == 1 ) { v28 = off_D0ABD8; v29 = asd_reg_read_13974(a1: *((_DWORD *)off_D0ABD8 + 100), a2: HIDWORD(v5), a3: field34) & 7; _139E4 = asd_reg_read_139E4(a1: v28[99], a2: v29, a3: v30); asd_reg_write_19394(a1: v28[99], a2: v29, a3: _139E4 | 0x80); v33 = v28[103]; if ( v33 != 0 ) { _13974 = asd_reg_read_13974(a1: v33, a2: v29, a3: v32); asd_reg_write_19328(a1: v28[103], a2: v29, a3: _13974 | 1); } } switch ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0ABD8 + 3), a3: v5) & 7 ) { case 0: if ( a1->field20 == 0 || asd_opt_cb_D423E8() != 0 || asd_connector_state_check(a1: v5, a2: v35, a3: v36) != 0 )// jumptable 00D0A9DC case 0 { a1->field4C = 3; v37 = 4; goto LABEL_71; } a1->field40 = 4; a1->field48 = 16; a1->field4C = 4; break; case 1: case 4: case 6: case 7: goto LABEL_72; // switch 8 cases case 2: v37 = 1; // jumptable 00D0A9DC case 2 a1->field4C = 1; goto LABEL_71; case 3: goto LABEL_59; case 5: a1->field4C = 3; // jumptable 00D0A9DC case 5 v37 = 5; goto LABEL_71; } goto LABEL_72; } return 8; } if ( v10 != 48 ) { if ( v21 != 0 ) { connector_ids_a = asd_get_connector_ids_a(a1, a2: &v62, a3: &v61); if ( connector_ids_a != 0 ) return connector_ids_a; } if ( field30 == 1 ) { v38 = off_D0ABD8; v39 = asd_reg_read_13974(a1: *((_DWORD *)off_D0ABD8 + 101), a2: HIDWORD(v5), a3: field34) & 7; v41 = asd_reg_read_139E4(a1: v38[99], a2: v39, a3: v40); asd_reg_write_19394(a1: v38[99], a2: v39, a3: v41 | 0x80); v43 = v38[104]; if ( v43 != 0 ) { v44 = asd_reg_read_13974(a1: v43, a2: 0, a3: v42); asd_reg_write_19328(a1: v38[104], a2: 0, a3: v44 | 1); } } if ( asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_D0ABD8 + 84), a3: v5) << 31 != 0 ) { LABEL_59: a1->field4C = 2; // jumptable 00D0A9DC case 3 v37 = 3; LABEL_71: a1->field40 = v37; goto LABEL_72; } return 8; } if ( a1->field20 == 0 || (v45 = *((int (__fastcall **)(_DWORD))off_D0ABD4 + 44)) != nullptr && v45(a1: v5) != 0 || asd_encoder_state_check(a1: v5, a2: (int)v45, a3: field34) != 0 ) { a1->field4C = 3; a1->field40 = 4; } else { a1->field40 = 4; a1->field48 = 16; a1->field4C = 4; } connector_ids_a = asd_get_connector_ids_a(a1, a2: &v62, a3: &v61); if ( connector_ids_a != 0 ) return connector_ids_a; v47 = (int *)off_D0ABD8; if ( asd_reg_read_13BF8(a1: *((_DWORD *)off_D0ABD8 + 105), a2: HIDWORD(v5), a3: v46) << 31 == 0 || a1->field20 != 0 ) return 8; a1->field4C = 3; a1->field40 = 5; if ( field30 == 1 ) { v55 = asd_reg_read_13BF8(a1: v47[106], a2: HIDWORD(v5), a3: v48) & 7; v57 = asd_reg_read_139E4(a1: v47[99], a2: v55, a3: v56); asd_reg_write_19394(a1: v47[99], a2: v55, a3: v57 | 0x80); v59 = v47[107]; if ( v59 != 0 ) { _13BF8 = asd_reg_read_13BF8(a1: v59, a2: v55, a3: v58); asd_reg_write_19524(a1: v47[107], a2: v55, a3: _13BF8 | 1); } } LABEL_72: v49 = asd_state_not_1(); // jumptable 00D0A9DC cases 1,4,6,7 if ( v49 ) { connector_ids_a = v49; v52 = 4; LABEL_74: a1->field44 = v52; return connector_ids_a; } field24 = a1->field24; if ( v10 != 16 ) { v54 = a1->field44 & 0xFFFFFFFE; if ( field24 > 0x15 ) v54 = a1->field44 & 0xFFFFFFFC | 2; a1->field44 = v54; if ( v10 != 48 || a1->field20 == 0 || asd_encoder_state_check(a1: v5, a2: v50, a3: v51) != 0 ) return 0; goto LABEL_89; } a1->field44 = 0; if ( a1->field20 != 0 && asd_connector_state_check(a1: v5, a2: v50, a3: v51) == 0 ) { LABEL_89: a1->field44 = 16; return 0; } if ( field24 < 0xA ) return 0; connector_ids_a = asd_opt_cb_D423EC(); if ( connector_ids_a == 0 && (asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0ABD8 + 9), a3: v5) & 0x70000000) == 0x30000000 ) { a1->field44 |= 1u; } if ( field24 >= 0x16 ) { v52 = a1->field44 | 2; goto LABEL_74; } return connector_ids_a; } /* ==== asd_program_link_by_signal_v5 [tier=EXACT size=848] ==== */ // Fifth ASIC form of asd_program_link_by_signal. int __fastcall asd_program_link_by_signal_v5(struct asd_link_cfg *a1, int a2, int a3, int a4) { __int64 v5; // kr00_8 unsigned int field28; // r0 unsigned int v7; // r0 bool v8; // cc unsigned int v9; // r1 unsigned int v10; // r5 unsigned int v11; // r1 bool v12; // cc unsigned int v13; // r1 bool v14; // cc unsigned int v15; // r1 bool v16; // cc int connector_ids_b; // r7 unsigned int field0C; // r0 _DWORD *v19; // r6 unsigned int field2C; // r2 unsigned int v21; // r0 unsigned int field38; // r1 BOOL v23; // r3 BOOL v24; // r2 unsigned int field34; // r2 unsigned int field30; // r9 _DWORD *v28; // r7 unsigned int v29; // r6 __int16 v30; // r2 __int16 _139E4; // r0 __int16 v32; // r2 int v33; // r0 __int16 _13B04; // r0 int v35; // r1 __int16 v36; // r2 unsigned int v37; // r0 _DWORD *v38; // r7 unsigned int v39; // r6 __int16 v40; // r2 __int16 v41; // r0 __int16 v42; // r2 int v43; // r0 __int16 v44; // r0 int v45; // r1 __int16 v46; // r2 __int16 v47; // r2 int *v48; // r7 __int16 v49; // r2 BOOL v50; // r0 int v51; // r1 __int16 v52; // r2 unsigned int v53; // r0 unsigned int field24; // r6 unsigned int v55; // r0 unsigned int v56; // r6 __int16 v57; // r2 __int16 v58; // r0 __int16 v59; // r2 int v60; // r0 __int16 _13BF8; // r0 int v62; // [sp+0h] [bp-8h] BYREF int v63; // [sp+4h] [bp-4h] BYREF v62 = a3; v63 = a4; if ( a1 == nullptr ) return 2; v5 = *(_QWORD *)&a1->field14; field28 = a1->field28; // switch 4 cases switch ( __ROR4__(field28, 4) ) { // switch jump case 0: v7 = *((_DWORD *)off_D0BB10 + 3); // jumptable 00D0ABF4 case 0 v8 = v7 > (unsigned int)v5; if ( v7 > (unsigned int)v5 ) v8 = v7 > HIDWORD(v5); if ( v8 ) { v10 = 16; } else if ( v7 > (unsigned int)v5 || (v9 = *((_DWORD *)off_D0BB10 + 2)) <= HIDWORD(v5) || v7 > HIDWORD(v5) || v9 <= (unsigned int)v5 ) { v10 = 0; } else { v10 = 32; } a1->field30 = 1; break; case 1: v11 = *((_DWORD *)off_D0AF40 + 3); // jumptable 00D0ABF4 case 1 v12 = v11 > (unsigned int)v5; if ( v11 > (unsigned int)v5 ) v12 = v11 > HIDWORD(v5); if ( v12 ) { v10 = 16; } else { if ( field28 == 48 ) goto LABEL_20; if ( field28 == 32 ) goto LABEL_16; v10 = 0; // jumptable 00D0ABF4 default case } break; case 2: LABEL_16: v13 = *((_DWORD *)off_D0AF40 + 4); // jumptable 00D0ABF4 case 2 v14 = v13 > (unsigned int)v5; if ( v13 > (unsigned int)v5 ) v14 = v13 > HIDWORD(v5); if ( v14 ) { v10 = 32; } else { if ( field28 == 48 ) goto LABEL_20; v10 = 0; } break; case 3: LABEL_20: v15 = *((_DWORD *)off_D0AF40 + 5); // jumptable 00D0ABF4 case 3 v16 = v15 > (unsigned int)v5; if ( v15 > (unsigned int)v5 ) v16 = *((_DWORD *)off_D0AF40 + 6) > HIDWORD(v5); if ( !v16 ) goto LABEL_23; v10 = 48; break; default: LABEL_23: v10 = 0; break; } connector_ids_b = 2; a1->field28 = v10; if ( v10 == 0 ) return connector_ids_b; field0C = a1->field0C; if ( field0C == 0 ) return connector_ids_b; v19 = off_D0AF40; if ( *((_DWORD *)off_D0AF40 + 1) <= field0C ) return connector_ids_b; field2C = a1->field2C; v21 = *((_DWORD *)off_D0AF40 + 7); connector_ids_b = 2; field38 = a1->field38; v23 = v21 <= field2C; v24 = field2C != 0; if ( field38 > 4 || v24 && v23 ) return connector_ids_b; field34 = a1->field34; field30 = a1->field30; if ( field34 == 2 ) { field34 = *((_DWORD *)off_D0AF40 + 8); if ( field34 <= field38 ) return 2; } v62 = 255; v63 = 255; if ( v10 == 16 ) { if ( v21 != 0 ) { connector_ids_b = asd_get_connector_ids_b(a1, a2: &v63, a3: &v62); if ( connector_ids_b != 0 ) return connector_ids_b; } if ( v19[4] == 0 || asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0AF2C + 4), a3: v5) << 31 != 0 ) { if ( field30 == 1 ) { v28 = off_D0AF2C; v29 = asd_reg_read_13B04(a1: *((_DWORD *)off_D0AF2C + 5), a2: HIDWORD(v5), a3: field34) & 7; _139E4 = asd_reg_read_139E4(a1: v28[99], a2: v29, a3: v30); asd_reg_write_19394(a1: v28[99], a2: v29, a3: _139E4 | 0x80); v33 = v28[108]; if ( v33 != 0 ) { _13B04 = asd_reg_read_13B04(a1: v33, a2: v29, a3: v32); asd_reg_write_19400(a1: v28[108], a2: v29, a3: _13B04 | 1); } } switch ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0AF2C + 3), a3: v5) & 7 ) { case 0: if ( a1->field20 == 0 || asd_opt_cb_D423E8() != 0 || asd_connector_state_check(a1: v5, a2: v35, a3: v36) != 0 )// jumptable 00D0AD3A case 0 { a1->field4C = 3; v37 = 4; goto LABEL_70; } a1->field40 = 4; a1->field48 = 16; a1->field4C = 4; break; case 1: case 4: case 6: case 7: goto LABEL_71; // switch 8 cases case 2: v37 = 1; // jumptable 00D0AD3A case 2 a1->field4C = 1; goto LABEL_70; case 3: goto LABEL_59; case 5: a1->field4C = 3; // jumptable 00D0AD3A case 5 v37 = 5; goto LABEL_70; } goto LABEL_71; } return 8; } if ( v10 != 48 ) { if ( v21 != 0 ) { connector_ids_b = asd_get_connector_ids_b(a1, a2: &v63, a3: &v62); if ( connector_ids_b != 0 ) return connector_ids_b; } if ( field30 == 1 ) { v38 = off_D0AF2C; v39 = asd_reg_read_13B04(a1: *((_DWORD *)off_D0AF2C + 102), a2: HIDWORD(v5), a3: field34) & 7; v41 = asd_reg_read_139E4(a1: v38[99], a2: v39, a3: v40); asd_reg_write_19394(a1: v38[99], a2: v39, a3: v41 | 0x80); v43 = v38[109]; if ( v43 != 0 ) { v44 = asd_reg_read_13B04(a1: v43, a2: 0, a3: v42); asd_reg_write_19400(a1: v38[109], a2: 0, a3: v44 | 1); } } if ( asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_D0AF2C + 84), a3: v5) << 31 != 0 ) { LABEL_59: a1->field4C = 2; // jumptable 00D0AD3A case 3 v37 = 3; LABEL_70: a1->field40 = v37; goto LABEL_71; } return 8; } if ( a1->field20 == 0 || asd_opt_cb_D423F0() != 0 || asd_encoder_state_check(a1: v5, a2: v45, a3: v46) != 0 ) { a1->field4C = 3; a1->field40 = 4; } else { a1->field40 = 4; a1->field48 = 16; a1->field4C = 4; } connector_ids_b = asd_get_connector_ids_b(a1, a2: &v63, a3: &v62); if ( connector_ids_b != 0 ) return connector_ids_b; v48 = (int *)off_D0AF2C; if ( asd_reg_read_13BF8(a1: *((_DWORD *)off_D0AF2C + 105), a2: HIDWORD(v5), a3: v47) << 31 == 0 || a1->field20 != 0 ) return 8; a1->field4C = 3; a1->field40 = 5; if ( field30 == 1 ) { v56 = asd_reg_read_13BF8(a1: v48[106], a2: HIDWORD(v5), a3: v49) & 7; v58 = asd_reg_read_139E4(a1: v48[99], a2: v56, a3: v57); asd_reg_write_19394(a1: v48[99], a2: v56, a3: v58 | 0x80); v60 = v48[110]; if ( v60 != 0 ) { _13BF8 = asd_reg_read_13BF8(a1: v60, a2: v56, a3: v59); asd_reg_write_19524(a1: v48[110], a2: v56, a3: _13BF8 | 1); } } LABEL_71: v50 = asd_state_not_1(); // jumptable 00D0AD3A cases 1,4,6,7 if ( v50 ) { connector_ids_b = v50; v53 = 4; LABEL_73: a1->field44 = v53; return connector_ids_b; } field24 = a1->field24; if ( v10 != 16 ) { v55 = a1->field44 & 0xFFFFFFFE; if ( field24 > 0x15 ) v55 = a1->field44 & 0xFFFFFFFC | 2; a1->field44 = v55; if ( v10 != 48 || a1->field20 == 0 || asd_encoder_state_check(a1: v5, a2: v51, a3: v52) != 0 ) return 0; goto LABEL_88; } a1->field44 = 0; if ( a1->field20 != 0 && asd_connector_state_check(a1: v5, a2: v51, a3: v52) == 0 ) { LABEL_88: a1->field44 = 16; return 0; } if ( field24 < 0xA ) return 0; connector_ids_b = asd_opt_cb_D423EC(); if ( connector_ids_b == 0 && (asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0B244 + 9), a3: v5) & 0x70000000) == 0x30000000 ) { a1->field44 |= 1u; } if ( field24 >= 0x16 ) { v53 = a1->field44 | 2; goto LABEL_73; } return connector_ids_b; } /* ==== asd_query_link_config [tier=EXACT size=582] ==== */ // Switch on the descriptor's class (a1[16] in 1..3) and signal type (a1[10]) returning the // link configuration; rejects type 32 on the class path. int __fastcall asd_query_link_config(_DWORD *a1, int *a2) { int v3; // r2 unsigned int v4; // r6 int v5; // r1 int v6; // r5 int v7; // r10 _DWORD *v8; // r7 unsigned int v9; // r11 int (__fastcall *v10)(int, unsigned int, __int16); // r8 unsigned int v11; // r9 __int16 v12; // r2 __int16 v13; // r2 unsigned int v14; // r0 int v15; // r1 bool v16; // zf bool v17; // zf bool v18; // zf _DWORD *v19; // r7 __int16 _13B74; // r5 __int16 v21; // r0 __int64 v22; // r0 _DWORD *v23; // r7 int (__fastcall *v24)(int, int, unsigned int); // r11 __int16 v25; // r5 __int16 v26; // r9 __int16 v27; // r8 __int16 v28; // r0 int v29; // r0 unsigned int v31; // [sp+0h] [bp-4h] *a2 = 0; if ( a1 == nullptr ) return 2; v3 = a1[16]; v4 = a1[5]; v5 = a1[10]; if ( (unsigned int)(v3 - 1) < 3 ) { if ( v5 != 32 ) { if ( v5 == 16 ) { if ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D092EC + 42), a3: a1[5]) << 31 != 0 ) goto LABEL_65; LABEL_61: v29 = 1; LABEL_66: *a2 = v29; } return 0; } if ( asd_reg_read_13B74(a1: 1, a2: *((_DWORD *)off_D092EC + 87), a3: a1[5]) << 31 == 0 ) { *a2 = 1; return 0; } LABEL_65: v29 = 2; goto LABEL_66; } if ( v3 == 4 ) { v19 = off_D092EC; _13B74 = asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D092EC + 60), a3: v4); v21 = asd_reg_read_13B74(a1: 0, a2: v19[48], a3: v4); HIDWORD(v22) = _13B74 & 0x300; LODWORD(v22) = (v21 & 0x100) != 0; if ( v22 == 0x10000000000LL ) goto LABEL_61; v6 = 0; if ( HIDWORD(v22) == 512 && (_DWORD)v22 != 0 ) goto LABEL_65; } else if ( v3 == 5 ) { v7 = a1[6]; if ( v5 == 48 ) { v23 = off_D092EC; v24 = off_D09C9C; v25 = off_D09C9C(a1: 2, a2: *((_DWORD *)off_D092EC + 49), a3: v4); v26 = v24(a1: 2, a2: v23[50], a3: v4); v27 = v24(a1: 2, a2: v23[51], a3: v4); v28 = v24(a1: 2, a2: v23[52], a3: v4); if ( (v25 & 7) == v7 && (v25 & 0x7F00) != 0 ) { if ( (v25 & 0x20) != 0 ) goto LABEL_65; goto LABEL_61; } if ( (v26 & 7) == v7 && (v26 & 0x7F00) != 0 ) { if ( (v26 & 0x20) != 0 ) goto LABEL_65; goto LABEL_61; } if ( (v27 & 7) == v7 && (v27 & 0x7F00) != 0 ) { if ( (v27 & 0x20) == 0 ) goto LABEL_61; goto LABEL_65; } v6 = 0; if ( (v28 & 7) == v7 && (v28 & 0x7F00) != 0 ) { if ( (v28 & 0x20) == 0 ) goto LABEL_61; goto LABEL_65; } } else { if ( v5 != 16 ) return 0; v8 = off_D092EC; v6 = 0; v9 = asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D092EC + 60), a3: v4); v10 = (int (__fastcall *)(int, unsigned int, __int16))off_D09AD4; v11 = off_D09AD4(a1: v8[44], a2: v4); v31 = v10(a1: v8[45], a2: v4, a3: v12); v14 = v10(a1: v8[46], a2: v4, a3: v13); v15 = (v9 >> 8) & 3; if ( v15 == 3 ) { if ( (v11 & 7) == v7 && (v11 & 0x20) != 0 ) goto LABEL_65; if ( (v11 & 0x200000) != 0 && (HIWORD(v11) & 7) == v7 ) goto LABEL_65; if ( (v31 & 7) == v7 && (v31 & 0x20) != 0 ) goto LABEL_65; if ( (v31 & 0x200000) != 0 && (HIWORD(v31) & 7) == v7 ) goto LABEL_65; if ( (v14 & 7) == v7 && (v14 & 0x20) != 0 ) goto LABEL_65; v6 = 0; if ( (v14 & 0x200000) != 0 && (HIWORD(v14) & 7) == v7 ) goto LABEL_65; } else if ( v15 == 1 ) { v16 = (v11 & 7) == v7; if ( (v11 & 7) == v7 ) v16 = (v11 & 0x20) == 0; if ( v16 || (v11 & 0x200000) == 0 && (HIWORD(v11) & 7) == v7 ) goto LABEL_61; v17 = (v31 & 7) == v7; if ( (v31 & 7) == v7 ) v17 = (v31 & 0x20) == 0; if ( v17 || (v31 & 0x200000) == 0 && (HIWORD(v31) & 7) == v7 ) goto LABEL_61; v18 = (v14 & 7) == v7; if ( (v14 & 7) == v7 ) v18 = (v14 & 0x20) == 0; if ( v18 ) goto LABEL_61; v6 = 0; if ( (v14 & 0x200000) == 0 && (HIWORD(v14) & 7) == v7 ) goto LABEL_61; } } } else { return 1; } return v6; } /* ==== asd_query_link_state [tier=EXACT size=34] ==== */ // Sets dword_D33054 = 2 then probes via sub_D157DC/sub_D104A0, reporting state 1 or 2 // through the caller's pointer. int __fastcall asd_query_link_state(_DWORD *a1) { int v2; // r5 *a1 = 1; *((_DWORD *)off_D147C0 + 1) = 2; v2 = asd_hdcp_reset_all(); if ( (asd_foreach_link_active() | v2) == 0 ) *a1 = 2; return 0; } /* ==== asd_query_opt_D4981C [tier=EXACT size=6] ==== */ // Optional query callback: if unk_D4981C is installed calls it with &dword_D26CA8, // otherwise zeroes that global and returns 1. int __fastcall asd_query_opt_D4981C() { int (__fastcall *v0)(int *); // r1 v0 = *((int (__fastcall **)(int *))off_D18B60 + 15); if ( v0 != nullptr ) return v0(a1: off_D14D84); *off_D14D84 = 0; return 1; } /* ==== asd_query_opt_D49820 [tier=EXACT size=6] ==== */ // Optional query callback: if unk_D49820 is installed calls it with &dword_D26C94, // otherwise zeroes that global and returns 1. int __fastcall asd_query_opt_D49820() { int (__fastcall *v0)(int *); // r1 v0 = *((int (__fastcall **)(int *))off_D18B60 + 16); if ( v0 != nullptr ) return v0(a1: off_D14D78); *off_D14D78 = 0; return 1; } /* ==== asd_query_type_6_7 [tier=EXACT size=70] ==== */ // Feature-15 gated query with a 0xA8-byte working buffer; accepts type 6 (index 0) or // type 7 (index 1). int __fastcall asd_query_type_6_7(int a1) { int result; // r0 _DWORD v7[42]; // [sp+0h] [bp-A8h] BYREF bzero_core(result: v7, a2: 0xA8u); if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 != 6 && a1 != 7 ) return 2; result = asd_opt_cb_D497FC(); if ( result == 0 ) { __asm { SVC 0xB4 } return 35; } return result; } /* ==== asd_read_caps_blob [tier=EXACT size=136] ==== */ // Fetches the 132-byte capability blob via asd_cfg_132byte_blob, rejecting counts above // 0x20 with status 35. int __fastcall asd_read_caps_blob(int a1) { int result; // r0 unsigned int v3; // r0 unsigned int v4; // r6 int v5; // r0 int v6; // r0 int v7; // r0 unsigned int v8[34]; // [sp+0h] [bp-88h] BYREF bzero_core(result: v8, a2: 0x84u); result = asd_cfg_132byte_blob(a1, a2: v8, a3: 132); if ( result == 0 ) { v3 = v8[0]; if ( v8[0] > 0x20 ) { return 35; } else { v4 = 0; while ( v4 < v3 ) // switch 8 cases { // switch jump switch ( v8[v4 + 1] ) { case 2u: v5 = 2; // jumptable 00D14696 case 2 goto LABEL_10; case 3u: v5 = 3; // jumptable 00D14696 case 3 LABEL_10: result = asd_cfg_type_2_3(a1: v5); goto LABEL_17; case 4u: result = asd_build_caps_blob(a1); // jumptable 00D14696 case 4 goto LABEL_17; case 5u: result = asd_feature15_query_D44134();// jumptable 00D14696 case 5 goto LABEL_17; case 6u: v6 = 6; // jumptable 00D14696 case 6 goto LABEL_13; case 7u: v6 = 7; // jumptable 00D14696 case 7 LABEL_13: result = asd_query_type_6_7(a1: v6); goto LABEL_17; case 8u: v7 = 8; // jumptable 00D14696 case 8 goto LABEL_16; case 9u: v7 = 9; // jumptable 00D14696 case 9 LABEL_16: result = asd_hdcp_version_select(a1: v7); LABEL_17: if ( result != 0 ) return result; ++v4; v3 = v8[0]; break; default: return 7; // jumptable 00D14696 default case } } return 0; } } return result; } /* ==== asd_read_link_multi [tier=EXACT size=138] ==== */ // Multi-output link register read; requires a3 == 0 and the remaining output pointers to // be non-null. int __fastcall asd_read_link_multi( unsigned int a1, unsigned int a2, int a3, _WORD *a4, _WORD *a5, _WORD *a6, _WORD *a7) { _WORD *v7; // r9 int result; // r0 bool v11; // zf _DWORD *v12; // r7 __int16 v14; // r0^2 __int16 v15; // r0^2 int v16; // [sp+0h] [bp-8h] BYREF _WORD *v17; // [sp+4h] [bp-4h] BYREF v16 = a3; v17 = a4; result = 2; if ( a3 == 0 && a4 != nullptr && a5 != nullptr ) { v11 = a6 == nullptr; if ( a6 != nullptr ) { v7 = a7; v11 = a7 == nullptr; } if ( !v11 ) { v12 = off_D0BFB4; v16 = 0; v17 = nullptr; result = asd_reg_read_13F48(a1: *((_DWORD *)off_D0BFB4 + 95), a2: a1, a3: a2, a4: &v17); if ( result == 0 ) { result = asd_reg_read_13F48(a1: v12[96], a2: a1, a3: a2, a4: &v16); if ( result == 0 ) { v14 = HIWORD(v17); *a4 = (unsigned __int16)v17 & 0x7FFF; *a5 = v14 & 0x7FFF; v15 = HIWORD(v16); *a6 = v16 & 0x7FFF; *v7 = v15 & 0x7FFF; return 0; } } } } return result; } /* ==== asd_read_link_pair [tier=EXACT size=82] ==== */ // Reads the register pair unk_D42568 / unk_D4256C for link a1 into the caller's outputs. int __fastcall asd_read_link_pair(unsigned int a1, _WORD *a2, _WORD *a3, _WORD *a4) { int result; // r0 _DWORD *v8; // r8 __int16 v10; // r0^2 int v11; // [sp+0h] [bp-8h] BYREF int v12; // [sp+4h] [bp-4h] BYREF v11 = 0; v12 = 0; result = 2; if ( a2 != nullptr && a3 != nullptr && a4 != nullptr ) { v8 = off_D0BFB4; result = asd_reg_read_13FD4(a1: *((_DWORD *)off_D0BFB4 + 92), a2: a1, a3: &v12); if ( result == 0 ) { result = asd_reg_read_13FD4(a1: v8[93], a2: a1, a3: &v11); if ( result == 0 ) { v10 = HIWORD(v12); *a2 = v12; *a3 = v10; *a4 = v11; return 0; } } } return result; } /* ==== asd_read_link_pair_idx [tier=EXACT size=96] ==== */ // Indexed variant of asd_read_link_pair: reads unk_D42568 / unk_D4256C for (link, index) // into the caller's outputs. int __fastcall __spoils asd_read_link_pair_idx( unsigned int a1, unsigned int a2, _WORD *a3, _WORD *a4, _WORD *a5) { int result; // r0 _DWORD *v8; // r9 __int16 v11; // r0^2 int v12; // [sp+4h] [bp-8h] BYREF int v13; // [sp+8h] [bp-4h] BYREF v12 = 0; v13 = 0; result = 2; if ( a3 != nullptr && a4 != nullptr && a5 != nullptr ) { v8 = off_D0BFB4; result = asd_reg_read_13F48(a1: *((_DWORD *)off_D0BFB4 + 92), a2: a1, a3: a2, a4: &v13); if ( result == 0 ) { result = asd_reg_read_13F48(a1: v8[93], a2: a1, a3: a2, a4: &v12); if ( result == 0 ) { v11 = HIWORD(v13); *a3 = v13; *a4 = v11; *a5 = v12; return 0; } } } return result; } /* ==== asd_reg_clr_bit1_wait [tier=EXACT size=72] ==== */ // Clears bit 1 of a display register and polls (bounded ~499 iterations) until it reads // back clear. Inverse of asd_reg_set_bit1_wait. int __fastcall asd_reg_clr_bit1_wait(unsigned int a1) { int result; // r0 _DWORD *v3; // r5 int v4; // r6 result = asd_reg_read_13B74_cfg0(); if ( result == 0 ) { v3 = off_D16AE8; result = asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D16AE8 + 40), a3: a1); if ( (result & 2) != 0 ) { asd_reg_write_1946C(a1: 0, a2: v3[40], a3: a1); v4 = -499; do { result = asd_reg_read_13B74(a1: 0, a2: v3[40], a3: a1); if ( v4 == 0 ) break; ++v4; result &= 2u; } while ( result != 0 ); } } return result; } /* ==== asd_reg_clr_bit2_wait [tier=EXACT size=66] ==== */ // Clears bit 2 of a display register and polls (bounded ~499 iterations) until it reads // back clear. Inverse of asd_reg_set_bit2_wait. int __fastcall asd_reg_clr_bit2_wait(unsigned int a1) { _DWORD *v1; // r5 int result; // r0 int v4; // r6 v1 = off_D16AE8; result = asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D16AE8 + 40), a3: a1); if ( (result & 4) != 0 ) { asd_reg_write_1946C(a1: 0, a2: v1[40], a3: a1); v4 = -499; do { result = asd_reg_read_13B74(a1: 0, a2: v1[40], a3: a1); if ( v4 == 0 ) break; ++v4; result &= 4u; } while ( result != 0 ); } return result; } /* ==== asd_reg_offsets_init_19600 [tier=EXACT size=358] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte // template from 0xd19600 then patches individual register offsets. int __fastcall asd_reg_offsets_init_19600(int a1, int a2, int a3) { unsigned int v4; // r4 int *v5; // r10 int v6; // r11 int _13D24; // r5 int result; // r0 int (__fastcall *v10)(int, unsigned int, __int16); // r8 unsigned int v11; // r6 __int16 v12; // r2 __int16 v13; // r2 unsigned int v14; // r0 __int16 v15; // r0 __int16 v16; // r2 __int16 v17; // r0 int *v18; // r1 __int16 v19; // r5 __int16 v20; // r2 int v21; // r6 int v26; // r0 __int16 v27; // r0 __int16 v28; // r1 __int16 v29; // r1 unsigned int v30; // [sp+0h] [bp-4h] if ( a1 == 0 ) return 2; v4 = *(_DWORD *)(a1 + 20); if ( *((_DWORD *)off_D09AD0 + 3) <= v4 ) return 2; v5 = (int *)off_D0A878; v6 = *(_DWORD *)(a1 + 24); _13D24 = asd_reg_read_13D24(a1: *((_DWORD *)off_D0A878 + 47), a2: *(_DWORD *)(a1 + 20), a3); if ( _13D24 << 30 != 0 ) return 1; v10 = (int (__fastcall *)(int, unsigned int, __int16))off_D09AD4; v11 = off_D09AD4(a1: v5[44], a2: v4); v30 = v10(a1: v5[45], a2: v4, a3: v12); v14 = v10(a1: v5[46], a2: v4, a3: v13); if ( (v11 & 7) == v6 ) { v15 = v11 & 0xFFDF; if ( a3 == 2 ) v15 = v11 | 0x20; v16 = v15 | 0x10; v17 = v15 & 0xFFCF; LABEL_14: v18 = v5 + 44; goto LABEL_15; } if ( (HIWORD(v11) & 7) == v6 ) { v17 = v11; if ( a3 == 2 ) v17 = v11; v16 = v17; goto LABEL_14; } if ( (v30 & 7) == v6 ) { v27 = v30 & 0xFFDF; if ( a3 == 2 ) v27 = v30 | 0x20; v16 = v27 | 0x10; v17 = v27 & 0xFFCF; LABEL_33: v18 = v5 + 45; goto LABEL_15; } if ( (HIWORD(v30) & 7) == v6 ) { v17 = v30; if ( a3 == 2 ) v17 = v30; v16 = v17; goto LABEL_33; } if ( (v14 & 7) == v6 ) { v28 = v14 & 0xFFDF; if ( a3 == 2 ) v28 = v14 | 0x20; v16 = v28 | 0x10; v17 = v28 & 0xFFCF; } else { if ( (HIWORD(v14) & 7) != v6 ) goto LABEL_18; v29 = v14; if ( a3 == 2 ) v29 = v14; v16 = v29; v17 = v29; } v18 = v5 + 46; LABEL_15: if ( a2 == 0 ) v16 = v17; asd_reg_write_19600(a1: *v18, a2: v4, a3: v16); LABEL_18: v19 = _13D24 & 0xFFFC | 2; asd_reg_write_19600(a1: v5[47], a2: v4, a3: v19); v21 = 11; while ( --v21 != 0 ) { __asm { SVC 0x56 ; 'V' } v26 = asd_reg_read_13D24(a1: v5[47], a2: v4, a3: v20); LOBYTE(v19) = v26; if ( v26 << 30 == 0 ) return 0; } result = v19 & 3; if ( (v19 & 3) != 0 ) return 1; return result; } /* ==== asd_reg_offsets_init_198C0 [tier=EXACT size=464] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte // template from 0xd198c0 then patches individual register offsets. int __fastcall asd_reg_offsets_init_198C0(int a1, int a2, int a3, int a4) { int v4; // r2 int v5; // r3 int v7[49]; // [sp+0h] [bp-2D0h] BYREF _DWORD v8[18]; // [sp+C4h] [bp-20Ch] BYREF _DWORD v9[25]; // [sp+10Ch] [bp-1C4h] BYREF _DWORD v10[9]; // [sp+170h] [bp-160h] BYREF _DWORD v11[23]; // [sp+194h] [bp-13Ch] BYREF int v12[10]; // [sp+1F0h] [bp-E0h] BYREF int v13[46]; // [sp+218h] [bp-B8h] BYREF memcpy_aligned(result: v13, a2: (int *)off_D02B24, a3: 0xB4u, a4); v7[48] = 19996; v7[47] = 19987; v7[46] = 19986; v7[45] = 19985; v7[44] = 19984; v7[43] = 19941; v7[42] = 19904; v7[41] = 19903; v7[40] = 19902; v7[39] = 19880; v7[38] = 19879; v7[37] = 19878; v7[36] = 19877; v7[35] = 19876; v7[34] = 19875; v7[33] = 19874; v7[32] = 19873; v7[31] = 19872; v7[30] = 19871; v7[29] = 19870; v7[28] = 19869; v7[27] = 19868; v7[26] = 19867; v7[25] = 19866; v7[24] = 19865; v7[23] = 19864; v7[22] = 19863; v7[21] = 19862; v7[20] = 19861; v7[19] = 19860; v7[18] = 19859; v7[17] = 19858; v7[16] = 19857; v7[15] = 19856; v7[14] = 19855; v7[13] = 19854; v7[12] = 19853; v7[11] = 19852; v7[10] = 19851; v7[9] = 19850; v7[8] = 19849; v7[7] = 19848; v7[6] = 19847; v7[5] = 0; v7[3] = 0; v7[4] = 19846; v7[1] = 0; v7[2] = 19845; v7[0] = 19774; bzero_core(result: v8, a2: 0x20u); v8[17] = 19913; v8[16] = 19912; v8[15] = 19911; v8[14] = 19910; v8[13] = 19909; v8[12] = 19908; v8[11] = 19905; v8[10] = 19006; v8[9] = 19005; v8[8] = 19004; bzero_core(result: v9, a2: 0x58u); v9[24] = 15291; v9[23] = 15286; v9[22] = 15279; bzero_core(result: v10, a2: 0x1Cu); v10[8] = 19843; v10[7] = 14659; bzero_core(result: v11, a2: 0x58u); v11[22] = 19056; bzero_core(result: v12, a2: 0x28u); return asd_set_key_blobs(a1: v13, a2: v7, a3: v4, a4: v5); } /* ==== asd_reg_offsets_init_19978 [tier=EXACT size=464] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte // template from 0xd19978 then patches individual register offsets. int __fastcall asd_reg_offsets_init_19978(int a1, int a2, int a3, int a4) { int v4; // r2 int v5; // r3 int v7[49]; // [sp+0h] [bp-2D0h] BYREF _DWORD v8[18]; // [sp+C4h] [bp-20Ch] BYREF _DWORD v9[25]; // [sp+10Ch] [bp-1C4h] BYREF _DWORD v10[9]; // [sp+170h] [bp-160h] BYREF _DWORD v11[23]; // [sp+194h] [bp-13Ch] BYREF int v12[10]; // [sp+1F0h] [bp-E0h] BYREF int v13[46]; // [sp+218h] [bp-B8h] BYREF memcpy_aligned(result: v13, a2: (int *)off_D02D78, a3: 0xB4u, a4); v7[48] = 19996; v7[47] = 19987; v7[46] = 19986; v7[45] = 19985; v7[44] = 19984; v7[43] = 19941; v7[42] = 19904; v7[41] = 19903; v7[40] = 19902; v7[39] = 19880; v7[38] = 19879; v7[37] = 19878; v7[36] = 19877; v7[35] = 19876; v7[34] = 19875; v7[33] = 19874; v7[32] = 19873; v7[31] = 19872; v7[30] = 19871; v7[29] = 19870; v7[28] = 19869; v7[27] = 19868; v7[26] = 19867; v7[25] = 19866; v7[24] = 19865; v7[23] = 19864; v7[22] = 19863; v7[21] = 19862; v7[20] = 19861; v7[19] = 19860; v7[18] = 19859; v7[17] = 19858; v7[16] = 19857; v7[15] = 19856; v7[14] = 19855; v7[13] = 19854; v7[12] = 19853; v7[11] = 19852; v7[10] = 19851; v7[9] = 19850; v7[8] = 19849; v7[7] = 19848; v7[6] = 19847; v7[5] = 0; v7[3] = 0; v7[4] = 19846; v7[1] = 0; v7[2] = 19845; v7[0] = 19774; bzero_core(result: v8, a2: 0x20u); v8[17] = 19913; v8[16] = 19912; v8[15] = 19911; v8[14] = 19910; v8[13] = 19909; v8[12] = 19908; v8[11] = 19905; v8[10] = 19006; v8[9] = 19005; v8[8] = 19004; bzero_core(result: v9, a2: 0x58u); v9[24] = 15291; v9[23] = 15286; v9[22] = 15279; bzero_core(result: v10, a2: 0x1Cu); v10[8] = 19843; v10[7] = 14659; bzero_core(result: v11, a2: 0x58u); v11[22] = 19056; bzero_core(result: v12, a2: 0x28u); return asd_set_key_blobs(a1: v13, a2: v7, a3: v4, a4: v5); } /* ==== asd_reg_offsets_init_19A30 [tier=EXACT size=486] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte // template from 0xd19a30 then patches individual register offsets. int __fastcall asd_reg_offsets_init_19A30(int a1, int a2, int a3, int a4) { int v4; // r2 int v5; // r3 int v7[49]; // [sp+0h] [bp-2D0h] BYREF _DWORD v8[18]; // [sp+C4h] [bp-20Ch] BYREF _DWORD v9[27]; // [sp+10Ch] [bp-1C4h] BYREF _DWORD v10[7]; // [sp+178h] [bp-158h] BYREF _DWORD v11[26]; // [sp+194h] [bp-13Ch] BYREF int v12[7]; // [sp+1FCh] [bp-D4h] BYREF int v13[46]; // [sp+218h] [bp-B8h] BYREF memcpy_aligned(result: v13, a2: off_D02FE4, a3: 0xB4u, a4); v7[48] = 22022; v7[47] = 22013; v7[46] = 22012; v7[45] = 22011; v7[44] = 22010; v7[43] = 21967; v7[42] = 21930; v7[41] = 21929; v7[40] = 21928; v7[39] = 21906; v7[38] = 21905; v7[37] = 21904; v7[36] = 21903; v7[35] = 21902; v7[34] = 21901; v7[33] = 21900; v7[32] = 21899; v7[31] = 21898; v7[30] = 21897; v7[29] = 21896; v7[28] = 21895; v7[27] = 21894; v7[26] = 21893; v7[25] = 21892; v7[24] = 21891; v7[23] = 21890; v7[22] = 21889; v7[21] = 21888; v7[20] = 21887; v7[19] = 21886; v7[18] = 21885; v7[17] = 21884; v7[16] = 21883; v7[15] = 21882; v7[14] = 21881; v7[13] = 21880; v7[12] = 21879; v7[11] = 21878; v7[10] = 21877; v7[9] = 21876; v7[8] = 21875; v7[7] = 21874; v7[6] = 21873; v7[5] = 0; v7[3] = 0; v7[4] = 21872; v7[1] = 0; v7[2] = 21871; v7[0] = 21800; bzero_core(result: v8, a2: 0x20u); v8[17] = 21939; v8[16] = 21938; v8[15] = 21937; v8[14] = 21936; v8[13] = 21935; v8[12] = 21934; v8[11] = 21931; v8[10] = 21330; v8[9] = 21329; v8[8] = 21328; bzero_core(result: v9, a2: 0x58u); v9[26] = 20529; v9[25] = 20528; v9[24] = 20494; v9[23] = 20489; v9[22] = 20481; bzero_core(result: v10, a2: 0x14u); v10[6] = 21869; v10[5] = 14409; bzero_core(result: v11, a2: 0x58u); v11[25] = 21386; v11[23] = 0; v11[24] = 0; v11[22] = 21380; bzero_core(result: v12, a2: 0x1Cu); return asd_set_key_blobs(a1: v13, a2: v7, a3: v4, a4: v5); } /* ==== asd_reg_offsets_init_19AE8 [tier=EXACT size=464] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte // template from 0xd19ae8 then patches individual register offsets. int __fastcall asd_reg_offsets_init_19AE8(int a1, int a2, int a3, int a4) { int v4; // r2 int v5; // r3 int v7[49]; // [sp+0h] [bp-2D0h] BYREF _DWORD v8[18]; // [sp+C4h] [bp-20Ch] BYREF _DWORD v9[25]; // [sp+10Ch] [bp-1C4h] BYREF _DWORD v10[9]; // [sp+170h] [bp-160h] BYREF _DWORD v11[23]; // [sp+194h] [bp-13Ch] BYREF int v12[10]; // [sp+1F0h] [bp-E0h] BYREF int v13[46]; // [sp+218h] [bp-B8h] BYREF memcpy_aligned(result: v13, a2: off_D03304, a3: 0xB4u, a4); v7[48] = 22022; v7[47] = 22013; v7[46] = 22012; v7[45] = 22011; v7[44] = 22010; v7[43] = 21967; v7[42] = 21930; v7[41] = 21929; v7[40] = 21928; v7[39] = 21906; v7[38] = 21905; v7[37] = 21904; v7[36] = 21903; v7[35] = 21902; v7[34] = 21901; v7[33] = 21900; v7[32] = 21899; v7[31] = 21898; v7[30] = 21897; v7[29] = 21896; v7[28] = 21895; v7[27] = 21894; v7[26] = 21893; v7[25] = 21892; v7[24] = 21891; v7[23] = 21890; v7[22] = 21889; v7[21] = 21888; v7[20] = 21887; v7[19] = 21886; v7[18] = 21885; v7[17] = 21884; v7[16] = 21883; v7[15] = 21882; v7[14] = 21881; v7[13] = 21880; v7[12] = 21879; v7[11] = 21878; v7[10] = 21877; v7[9] = 21876; v7[8] = 21875; v7[7] = 21874; v7[6] = 21873; v7[5] = 0; v7[3] = 0; v7[4] = 21872; v7[1] = 0; v7[2] = 21871; v7[0] = 21800; bzero_core(result: v8, a2: 0x20u); v8[17] = 21939; v8[16] = 21938; v8[15] = 21937; v8[14] = 21936; v8[13] = 21935; v8[12] = 21934; v8[11] = 21931; v8[10] = 21330; v8[9] = 21329; v8[8] = 21328; bzero_core(result: v9, a2: 0x58u); v9[24] = 20494; v9[23] = 20489; v9[22] = 20481; bzero_core(result: v10, a2: 0x1Cu); v10[8] = 21869; v10[7] = 14409; bzero_core(result: v11, a2: 0x58u); v11[22] = 21380; bzero_core(result: v12, a2: 0x28u); return asd_set_key_blobs(a1: v13, a2: v7, a3: v4, a4: v5); } /* ==== asd_reg_offsets_init_19BA0 [tier=EXACT size=502] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte // template from 0xd19ba0 then patches individual register offsets. int __fastcall asd_reg_offsets_init_19BA0(int a1, int a2, int a3, int a4) { int v4; // r2 int v5; // r3 int v7[49]; // [sp+0h] [bp-2D0h] BYREF _DWORD v8[18]; // [sp+C4h] [bp-20Ch] BYREF _DWORD v9[34]; // [sp+10Ch] [bp-1C4h] BYREF _DWORD v10[26]; // [sp+194h] [bp-13Ch] BYREF int v11[7]; // [sp+1FCh] [bp-D4h] BYREF int v12[46]; // [sp+218h] [bp-B8h] BYREF memcpy_aligned(result: v12, a2: off_D03580, a3: 0xB4u, a4); v7[48] = 22022; v7[47] = 22013; v7[46] = 22012; v7[45] = 22011; v7[44] = 22010; v7[43] = 21967; v7[42] = 21930; v7[41] = 21929; v7[40] = 21928; v7[39] = 21906; v7[38] = 21905; v7[37] = 21904; v7[36] = 21903; v7[35] = 21902; v7[34] = 21901; v7[33] = 21900; v7[32] = 21899; v7[31] = 21898; v7[30] = 21897; v7[29] = 21896; v7[28] = 21895; v7[27] = 21894; v7[26] = 21893; v7[25] = 21892; v7[24] = 21891; v7[23] = 21890; v7[22] = 21889; v7[21] = 21888; v7[20] = 21887; v7[19] = 21886; v7[18] = 21885; v7[17] = 21884; v7[16] = 21883; v7[15] = 21882; v7[14] = 21881; v7[13] = 21880; v7[12] = 21879; v7[11] = 21878; v7[10] = 21877; v7[9] = 21876; v7[8] = 21875; v7[7] = 21874; v7[6] = 21873; v7[5] = 0; v7[3] = 0; v7[4] = 21872; v7[1] = 0; v7[2] = 21871; v7[0] = 21800; bzero_core(result: v8, a2: 0x20u); v8[17] = 21939; v8[16] = 21938; v8[15] = 21937; v8[14] = 21936; v8[13] = 21935; v8[12] = 21934; v8[11] = 21931; v8[10] = 21330; v8[9] = 21329; v8[8] = 21328; bzero_core(result: v9, a2: 0x58u); v9[33] = 21869; v9[32] = 14409; v9[31] = 20525; v9[30] = 20524; v9[29] = 20523; v9[27] = 0; v9[28] = 20522; v9[26] = 20527; v9[25] = 20526; v9[24] = 20494; v9[23] = 20489; v9[22] = 20481; bzero_core(result: v10, a2: 0x58u); v10[25] = 21386; v10[23] = 0; v10[24] = 0; v10[22] = 21380; bzero_core(result: v11, a2: 0x1Cu); return asd_set_key_blobs(a1: v12, a2: v7, a3: v4, a4: v5); } /* ==== asd_reg_offsets_init_19C58 [tier=EXACT size=564] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte // template from 0xd19c58 then patches individual register offsets. int __fastcall asd_reg_offsets_init_19C58(int a1, int a2, int a3, int a4) { int v4; // r2 int v5; // r3 int v7[49]; // [sp+0h] [bp-2D0h] BYREF _DWORD v8[26]; // [sp+C4h] [bp-20Ch] BYREF _DWORD v9[17]; // [sp+12Ch] [bp-1A4h] BYREF _DWORD v10[13]; // [sp+170h] [bp-160h] BYREF _DWORD v11[20]; // [sp+1A4h] [bp-12Ch] BYREF int v12[9]; // [sp+1F4h] [bp-DCh] BYREF int v13[46]; // [sp+218h] [bp-B8h] BYREF memcpy_aligned(result: v13, a2: off_D0394C, a3: 0xB4u, a4); v7[48] = 22022; v7[47] = 22013; v7[46] = 22012; v7[45] = 22011; v7[44] = 22010; v7[43] = 21967; v7[42] = 21910; v7[41] = 21909; v7[40] = 21908; v7[39] = 21907; v7[38] = 21906; v7[37] = 21905; v7[36] = 21904; v7[35] = 21903; v7[34] = 21902; v7[33] = 21901; v7[32] = 21900; v7[31] = 21899; v7[30] = 21898; v7[29] = 21897; v7[28] = 21896; v7[27] = 21895; v7[26] = 21894; v7[25] = 21893; v7[24] = 21892; v7[23] = 21891; v7[22] = 21890; v7[21] = 21889; v7[20] = 21888; v7[19] = 21887; v7[18] = 21886; v7[17] = 21885; v7[16] = 21884; v7[15] = 21883; v7[14] = 21882; v7[13] = 21881; v7[12] = 21880; v7[11] = 21879; v7[10] = 21878; v7[9] = 21877; v7[8] = 21876; v7[7] = 21875; v7[6] = 21874; v7[5] = 0; v7[3] = 0; v7[4] = 21873; v7[1] = 0; v7[2] = 21872; v7[0] = 21835; bzero_core(result: v8, a2: 0x20u); v8[25] = 39238; v8[24] = 39237; v8[23] = 39236; v8[22] = 39235; v8[21] = 39234; v8[20] = 39233; v8[18] = 0; v8[19] = 39230; v8[17] = 21939; v8[16] = 21938; v8[15] = 21937; v8[14] = 21936; v8[13] = 21935; v8[12] = 21934; v8[11] = 21931; v8[10] = 21330; v8[9] = 21329; v8[8] = 21328; bzero_core(result: v9, a2: 0x24u); v9[16] = 20494; v9[15] = 20489; v9[14] = 20481; v9[13] = 39175; v9[12] = 39162; v9[11] = 39135; v9[10] = 39125; v9[9] = 39123; bzero_core(result: v10, a2: 0x1Cu); v10[12] = 39216; v10[10] = 0; v10[11] = 21832; v10[9] = 39213; v10[8] = 21829; v10[7] = 14409; bzero_core(result: v11, a2: 0x48u); v11[19] = 40516; v11[18] = 21380; bzero_core(result: v12, a2: 0x24u); return asd_set_key_blobs(a1: v13, a2: v7, a3: v4, a4: v5); } /* ==== asd_reg_offsets_init_19D10 [tier=EXACT size=474] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte // template from 0xd19d10 then patches individual register offsets. int __fastcall asd_reg_offsets_init_19D10(int a1, int a2, int a3, int a4) { int v4; // r2 int v5; // r3 int v7[49]; // [sp+0h] [bp-2D0h] BYREF _DWORD v8[18]; // [sp+C4h] [bp-20Ch] BYREF _DWORD v9[25]; // [sp+10Ch] [bp-1C4h] BYREF _DWORD v10[12]; // [sp+170h] [bp-160h] BYREF _DWORD v11[20]; // [sp+1A0h] [bp-130h] BYREF int v12[10]; // [sp+1F0h] [bp-E0h] BYREF int v13[46]; // [sp+218h] [bp-B8h] BYREF memcpy_aligned(result: v13, a2: off_D03BAC, a3: 0xB4u, a4); v7[48] = 22022; v7[47] = 22013; v7[46] = 22012; v7[45] = 22011; v7[44] = 22010; v7[43] = 21967; v7[42] = 21910; v7[41] = 21909; v7[40] = 21908; v7[39] = 21907; v7[38] = 21906; v7[37] = 21905; v7[36] = 21904; v7[35] = 21903; v7[34] = 21902; v7[33] = 21901; v7[32] = 21900; v7[31] = 21899; v7[30] = 21898; v7[29] = 21897; v7[28] = 21896; v7[27] = 21895; v7[26] = 21894; v7[25] = 21893; v7[24] = 21892; v7[23] = 21891; v7[22] = 21890; v7[21] = 21889; v7[20] = 21888; v7[19] = 21887; v7[18] = 21886; v7[17] = 21885; v7[16] = 21884; v7[15] = 21883; v7[14] = 21882; v7[13] = 21881; v7[12] = 21880; v7[11] = 21879; v7[10] = 21878; v7[9] = 21877; v7[8] = 21876; v7[7] = 21875; v7[6] = 21874; v7[5] = 0; v7[3] = 0; v7[4] = 21873; v7[1] = 0; v7[2] = 21872; v7[0] = 21835; bzero_core(result: v8, a2: 0x20u); v8[17] = 21939; v8[16] = 21938; v8[15] = 21937; v8[14] = 21936; v8[13] = 21935; v8[12] = 21934; v8[11] = 21931; v8[10] = 21330; v8[9] = 21329; v8[8] = 21328; bzero_core(result: v9, a2: 0x58u); v9[24] = 20494; v9[23] = 20489; v9[22] = 20481; bzero_core(result: v10, a2: 0x1Cu); v10[11] = 21832; v10[9] = 0; v10[10] = 0; v10[8] = 21829; v10[7] = 14409; bzero_core(result: v11, a2: 0x4Cu); v11[19] = 21380; bzero_core(result: v12, a2: 0x28u); return asd_set_key_blobs(a1: v13, a2: v7, a3: v4, a4: v5); } /* ==== asd_reg_offsets_init_19DC8 [tier=EXACT size=564] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte // template from 0xd19dc8 then patches individual register offsets. int __fastcall asd_reg_offsets_init_19DC8(int a1, int a2, int a3, int a4) { int v4; // r2 int v5; // r3 int v7[49]; // [sp+0h] [bp-2D0h] BYREF _DWORD v8[26]; // [sp+C4h] [bp-20Ch] BYREF _DWORD v9[17]; // [sp+12Ch] [bp-1A4h] BYREF _DWORD v10[13]; // [sp+170h] [bp-160h] BYREF _DWORD v11[20]; // [sp+1A4h] [bp-12Ch] BYREF int v12[9]; // [sp+1F4h] [bp-DCh] BYREF int v13[46]; // [sp+218h] [bp-B8h] BYREF memcpy_aligned(result: v13, a2: off_D03E64, a3: 0xB4u, a4); v7[48] = 22022; v7[47] = 22013; v7[46] = 22012; v7[45] = 22011; v7[44] = 22010; v7[43] = 21967; v7[42] = 21910; v7[41] = 21909; v7[40] = 21908; v7[39] = 21907; v7[38] = 21906; v7[37] = 21905; v7[36] = 21904; v7[35] = 21903; v7[34] = 21902; v7[33] = 21901; v7[32] = 21900; v7[31] = 21899; v7[30] = 21898; v7[29] = 21897; v7[28] = 21896; v7[27] = 21895; v7[26] = 21894; v7[25] = 21893; v7[24] = 21892; v7[23] = 21891; v7[22] = 21890; v7[21] = 21889; v7[20] = 21888; v7[19] = 21887; v7[18] = 21886; v7[17] = 21885; v7[16] = 21884; v7[15] = 21883; v7[14] = 21882; v7[13] = 21881; v7[12] = 21880; v7[11] = 21879; v7[10] = 21878; v7[9] = 21877; v7[8] = 21876; v7[7] = 21875; v7[6] = 21874; v7[5] = 0; v7[3] = 0; v7[4] = 21873; v7[1] = 0; v7[2] = 21872; v7[0] = 21835; bzero_core(result: v8, a2: 0x20u); v8[25] = 39238; v8[24] = 39237; v8[23] = 39236; v8[22] = 39235; v8[21] = 39234; v8[20] = 39233; v8[18] = 0; v8[19] = 39230; v8[17] = 21939; v8[16] = 21938; v8[15] = 21937; v8[14] = 21936; v8[13] = 21935; v8[12] = 21934; v8[11] = 21931; v8[10] = 21330; v8[9] = 21329; v8[8] = 21328; bzero_core(result: v9, a2: 0x24u); v9[16] = 20494; v9[15] = 20489; v9[14] = 20481; v9[13] = 39175; v9[12] = 39162; v9[11] = 39135; v9[10] = 39125; v9[9] = 39123; bzero_core(result: v10, a2: 0x1Cu); v10[12] = 39216; v10[10] = 0; v10[11] = 21832; v10[9] = 39213; v10[8] = 21829; v10[7] = 14409; bzero_core(result: v11, a2: 0x48u); v11[19] = 40516; v11[18] = 21380; bzero_core(result: v12, a2: 0x24u); return asd_set_key_blobs(a1: v13, a2: v7, a3: v4, a4: v5); } /* ==== asd_reg_offsets_init_19E80 [tier=EXACT size=564] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte // template from 0xd19e80 then patches individual register offsets. int __fastcall asd_reg_offsets_init_19E80(int a1, int a2, int a3, int a4) { int v4; // r2 int v5; // r3 int v7[49]; // [sp+0h] [bp-2D0h] BYREF _DWORD v8[26]; // [sp+C4h] [bp-20Ch] BYREF _DWORD v9[17]; // [sp+12Ch] [bp-1A4h] BYREF _DWORD v10[13]; // [sp+170h] [bp-160h] BYREF _DWORD v11[20]; // [sp+1A4h] [bp-12Ch] BYREF int v12[9]; // [sp+1F4h] [bp-DCh] BYREF int v13[46]; // [sp+218h] [bp-B8h] BYREF memcpy_aligned(result: v13, a2: off_D0411C, a3: 0xB4u, a4); v7[48] = 22022; v7[47] = 22013; v7[46] = 22012; v7[45] = 22011; v7[44] = 22010; v7[43] = 21967; v7[42] = 21910; v7[41] = 21909; v7[40] = 21908; v7[39] = 21907; v7[38] = 21906; v7[37] = 21905; v7[36] = 21904; v7[35] = 21903; v7[34] = 21902; v7[33] = 21901; v7[32] = 21900; v7[31] = 21899; v7[30] = 21898; v7[29] = 21897; v7[28] = 21896; v7[27] = 21895; v7[26] = 21894; v7[25] = 21893; v7[24] = 21892; v7[23] = 21891; v7[22] = 21890; v7[21] = 21889; v7[20] = 21888; v7[19] = 21887; v7[18] = 21886; v7[17] = 21885; v7[16] = 21884; v7[15] = 21883; v7[14] = 21882; v7[13] = 21881; v7[12] = 21880; v7[11] = 21879; v7[10] = 21878; v7[9] = 21877; v7[8] = 21876; v7[7] = 21875; v7[6] = 21874; v7[5] = 0; v7[3] = 0; v7[4] = 21873; v7[1] = 0; v7[2] = 21872; v7[0] = 21835; bzero_core(result: v8, a2: 0x20u); v8[25] = 39238; v8[24] = 39237; v8[23] = 39236; v8[22] = 39235; v8[21] = 39234; v8[20] = 39233; v8[18] = 0; v8[19] = 39230; v8[17] = 21939; v8[16] = 21938; v8[15] = 21937; v8[14] = 21936; v8[13] = 21935; v8[12] = 21934; v8[11] = 21931; v8[10] = 21330; v8[9] = 21329; v8[8] = 21328; bzero_core(result: v9, a2: 0x24u); v9[16] = 20494; v9[15] = 20489; v9[14] = 20481; v9[13] = 39175; v9[12] = 39162; v9[11] = 39135; v9[10] = 39125; v9[9] = 39123; bzero_core(result: v10, a2: 0x1Cu); v10[12] = 39216; v10[10] = 0; v10[11] = 21832; v10[9] = 39213; v10[8] = 21829; v10[7] = 14409; bzero_core(result: v11, a2: 0x48u); v11[19] = 40516; v11[18] = 21380; bzero_core(result: v12, a2: 0x24u); return asd_set_key_blobs(a1: v13, a2: v7, a3: v4, a4: v5); } /* ==== asd_reg_offsets_init_19F38 [tier=EXACT size=662] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte // template from 0xd19f38 then patches individual register offsets. int __fastcall asd_reg_offsets_init_19F38(int a1, int a2, int a3, int a4) { int v4; // r2 int v5; // r3 int v7[92]; // [sp+0h] [bp-2D0h] BYREF _DWORD v8[16]; // [sp+170h] [bp-160h] BYREF _DWORD v9[18]; // [sp+1B0h] [bp-120h] BYREF int v10[8]; // [sp+1F8h] [bp-D8h] BYREF int v11[46]; // [sp+218h] [bp-B8h] BYREF memcpy_aligned(result: v11, a2: off_D04438, a3: 0xB4u, a4); v7[91] = 20494; v7[90] = 20489; v7[89] = 20481; v7[88] = 39175; v7[87] = 39162; v7[86] = 39135; v7[85] = 39125; v7[84] = 39123; v7[82] = 27498; v7[81] = 27497; v7[80] = 27496; v7[79] = 27495; v7[78] = 27494; v7[77] = 27493; v7[83] = 0; v7[75] = 0; v7[76] = 27490; v7[74] = 39238; v7[73] = 39237; v7[72] = 39236; v7[71] = 39235; v7[70] = 39234; v7[69] = 39233; v7[67] = 0; v7[68] = 39230; v7[66] = 21939; v7[65] = 21938; v7[64] = 21937; v7[63] = 21936; v7[62] = 21935; v7[61] = 21934; v7[60] = 21931; v7[59] = 21330; v7[58] = 21329; v7[57] = 21328; v7[56] = 40534; v7[55] = 27364; v7[54] = 27521; v7[53] = 27524; v7[52] = 27534; v7[51] = 27533; v7[50] = 27532; v7[49] = 27531; v7[48] = 22022; v7[47] = 22013; v7[46] = 22012; v7[45] = 22011; v7[44] = 22010; v7[43] = 21967; v7[42] = 21910; v7[41] = 21909; v7[40] = 21908; v7[39] = 21907; v7[38] = 21906; v7[37] = 21905; v7[36] = 21904; v7[35] = 21903; v7[34] = 21902; v7[33] = 21901; v7[32] = 21900; v7[31] = 21899; v7[30] = 21898; v7[29] = 21897; v7[28] = 21896; v7[27] = 21895; v7[26] = 21894; v7[25] = 21893; v7[24] = 21892; v7[23] = 21891; v7[22] = 21890; v7[21] = 21889; v7[20] = 21888; v7[19] = 21887; v7[18] = 21886; v7[17] = 21885; v7[16] = 21884; v7[15] = 21883; v7[14] = 21882; v7[13] = 21881; v7[12] = 21880; v7[11] = 21879; v7[10] = 21878; v7[9] = 21877; v7[8] = 21876; v7[7] = 21875; v7[5] = 0; v7[6] = 21874; v7[3] = 0; v7[4] = 21873; v7[1] = 0; v7[2] = 21872; v7[0] = 21835; bzero_core(result: v8, a2: 0x1Cu); v8[15] = 27397; v8[14] = 27365; v8[13] = 27421; v8[12] = 39216; v8[10] = 0; v8[11] = 21832; v8[9] = 39213; v8[8] = 21829; v8[7] = 14409; bzero_core(result: v9, a2: 0x3Cu); v9[17] = 21444; v9[16] = 40516; v9[15] = 21380; bzero_core(result: v10, a2: 0x20u); return asd_set_key_blobs(a1: v11, a2: v7, a3: v4, a4: v5); } /* ==== asd_reg_offsets_init_19FF0 [tier=EXACT size=680] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte // template from 0xd19ff0 then patches individual register offsets. int __fastcall asd_reg_offsets_init_19FF0(int a1, int a2, int a3, int a4) { int v4; // r2 int v5; // r3 int v7[92]; // [sp+0h] [bp-2D0h] BYREF _DWORD v8[21]; // [sp+170h] [bp-160h] BYREF _DWORD v9[13]; // [sp+1C4h] [bp-10Ch] BYREF int v10[8]; // [sp+1F8h] [bp-D8h] BYREF int v11[46]; // [sp+218h] [bp-B8h] BYREF memcpy_aligned(result: v11, a2: off_D04764, a3: 0xB4u, a4); v7[91] = 20494; v7[90] = 20489; v7[89] = 20481; v7[88] = 39175; v7[87] = 39162; v7[86] = 39135; v7[85] = 39125; v7[84] = 39123; v7[82] = 27498; v7[81] = 27497; v7[80] = 27496; v7[79] = 27495; v7[78] = 27494; v7[77] = 27493; v7[83] = 0; v7[75] = 0; v7[76] = 27490; v7[74] = 39238; v7[73] = 39237; v7[72] = 39236; v7[71] = 39235; v7[70] = 39234; v7[69] = 39233; v7[67] = 0; v7[68] = 39230; v7[66] = 21939; v7[65] = 21938; v7[64] = 21937; v7[63] = 21936; v7[62] = 21935; v7[61] = 21934; v7[60] = 21931; v7[59] = 21330; v7[58] = 21329; v7[57] = 21328; v7[56] = 40534; v7[55] = 27364; v7[54] = 27521; v7[53] = 27524; v7[52] = 27534; v7[51] = 27533; v7[50] = 27532; v7[49] = 27531; v7[48] = 22022; v7[47] = 22013; v7[46] = 22012; v7[45] = 22011; v7[44] = 22010; v7[43] = 21967; v7[42] = 21910; v7[41] = 21909; v7[40] = 21908; v7[39] = 21907; v7[38] = 21906; v7[37] = 21905; v7[36] = 21904; v7[35] = 21903; v7[34] = 21902; v7[33] = 21901; v7[32] = 21900; v7[31] = 21899; v7[30] = 21898; v7[29] = 21897; v7[28] = 21896; v7[27] = 21895; v7[26] = 21894; v7[25] = 21893; v7[24] = 21892; v7[23] = 21891; v7[22] = 21890; v7[21] = 21889; v7[20] = 21888; v7[19] = 21887; v7[18] = 21886; v7[17] = 21885; v7[16] = 21884; v7[15] = 21883; v7[14] = 21882; v7[13] = 21881; v7[12] = 21880; v7[11] = 21879; v7[10] = 21878; v7[9] = 21877; v7[8] = 21876; v7[7] = 21875; v7[5] = 0; v7[6] = 21874; v7[3] = 0; v7[4] = 21873; v7[1] = 0; v7[2] = 21872; v7[0] = 21835; bzero_core(result: v8, a2: 0x1Cu); v8[20] = 23877; v8[19] = 21368; memset(&v8[16], 0, 12); v8[15] = 27397; v8[14] = 27365; v8[13] = 27421; v8[12] = 39216; v8[10] = 0; v8[11] = 21832; v8[9] = 39213; v8[8] = 21829; v8[7] = 14409; bzero_core(result: v9, a2: 0x28u); v9[12] = 21444; v9[11] = 40516; v9[10] = 21380; bzero_core(result: v10, a2: 0x20u); return asd_set_key_blobs(a1: v11, a2: v7, a3: v4, a4: v5); } /* ==== asd_reg_offsets_init_1A0A8 [tier=EXACT size=674] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte base // template from 0xd1a0a8, then patches individual register offsets into the // destination array. One of a large family of near-identical variants. int __fastcall asd_reg_offsets_init_1A0A8(int a1, int a2, int a3, int a4) { int v4; // r2 int v5; // r3 int v7[92]; // [sp+0h] [bp-2D0h] BYREF _DWORD v8[20]; // [sp+170h] [bp-160h] BYREF _DWORD v9[14]; // [sp+1C0h] [bp-110h] BYREF int v10[8]; // [sp+1F8h] [bp-D8h] BYREF int v11[46]; // [sp+218h] [bp-B8h] BYREF memcpy_aligned(result: v11, a2: off_D04A90, a3: 0xB4u, a4); v7[91] = 20494; v7[90] = 20489; v7[89] = 20481; v7[88] = 39175; v7[87] = 39162; v7[86] = 39135; v7[85] = 39125; v7[84] = 39123; v7[82] = 27498; v7[81] = 27497; v7[80] = 27496; v7[79] = 27495; v7[78] = 27494; v7[77] = 27493; v7[83] = 0; v7[75] = 0; v7[76] = 27490; v7[74] = 39238; v7[73] = 39237; v7[72] = 39236; v7[71] = 39235; v7[70] = 39234; v7[69] = 39233; v7[67] = 0; v7[68] = 39230; v7[66] = 21939; v7[65] = 21938; v7[64] = 21937; v7[63] = 21936; v7[62] = 21935; v7[61] = 21934; v7[60] = 21931; v7[59] = 21330; v7[58] = 21329; v7[57] = 21328; v7[56] = 40534; v7[55] = 27364; v7[54] = 27521; v7[53] = 27524; v7[52] = 27534; v7[51] = 27533; v7[50] = 27532; v7[49] = 27531; v7[48] = 22022; v7[47] = 22013; v7[46] = 22012; v7[45] = 22011; v7[44] = 22010; v7[43] = 21967; v7[42] = 21911; v7[41] = 21910; v7[40] = 21909; v7[39] = 21908; v7[38] = 21907; v7[37] = 21906; v7[36] = 21905; v7[35] = 21904; v7[34] = 21903; v7[33] = 21902; v7[32] = 21901; v7[31] = 21900; v7[30] = 21899; v7[29] = 21898; v7[28] = 21897; v7[27] = 21896; v7[26] = 21895; v7[25] = 21894; v7[24] = 21893; v7[23] = 21892; v7[22] = 21891; v7[21] = 21890; v7[20] = 21889; v7[19] = 21888; v7[18] = 21887; v7[17] = 21886; v7[16] = 21885; v7[15] = 21884; v7[14] = 21883; v7[13] = 21882; v7[12] = 21881; v7[11] = 21880; v7[10] = 21879; v7[9] = 21878; v7[8] = 21877; v7[7] = 21876; v7[5] = 0; v7[6] = 21875; v7[3] = 0; v7[4] = 21874; v7[1] = 0; v7[2] = 21873; v7[0] = 21835; bzero_core(result: v8, a2: 0x1Cu); v8[19] = 21368; memset(&v8[16], 0, 12); v8[15] = 27397; v8[14] = 27365; v8[13] = 27421; v8[12] = 39216; v8[10] = 0; v8[11] = 21832; v8[9] = 39213; v8[8] = 21829; v8[7] = 14409; bzero_core(result: v9, a2: 0x2Cu); v9[13] = 21444; v9[12] = 40516; v9[11] = 21380; bzero_core(result: v10, a2: 0x20u); return asd_set_key_blobs(a1: v11, a2: v7, a3: v4, a4: v5); } /* ==== asd_reg_offsets_init_1A160 [tier=EXACT size=662] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte base // template from 0xd1a160, then patches individual register offsets into the // destination array. One of a large family of near-identical variants. int __fastcall asd_reg_offsets_init_1A160(int a1, int a2, int a3, int a4) { int v4; // r2 int v5; // r3 int v7[92]; // [sp+0h] [bp-2D0h] BYREF _DWORD v8[16]; // [sp+170h] [bp-160h] BYREF _DWORD v9[18]; // [sp+1B0h] [bp-120h] BYREF int v10[8]; // [sp+1F8h] [bp-D8h] BYREF int v11[46]; // [sp+218h] [bp-B8h] BYREF memcpy_aligned(result: v11, a2: off_D04DAC, a3: 0xB4u, a4); v7[91] = 20494; v7[90] = 20489; v7[89] = 20481; v7[88] = 39175; v7[87] = 39162; v7[86] = 39135; v7[85] = 39125; v7[84] = 39123; v7[82] = 27498; v7[81] = 27497; v7[80] = 27496; v7[79] = 27495; v7[78] = 27494; v7[77] = 27493; v7[83] = 0; v7[75] = 0; v7[76] = 27490; v7[74] = 39238; v7[73] = 39237; v7[72] = 39236; v7[71] = 39235; v7[70] = 39234; v7[69] = 39233; v7[67] = 0; v7[68] = 39230; v7[66] = 21939; v7[65] = 21938; v7[64] = 21937; v7[63] = 21936; v7[62] = 21935; v7[61] = 21934; v7[60] = 21931; v7[59] = 21330; v7[58] = 21329; v7[57] = 21328; v7[56] = 40534; v7[55] = 27364; v7[54] = 27521; v7[53] = 27524; v7[52] = 27534; v7[51] = 27533; v7[50] = 27532; v7[49] = 27531; v7[48] = 22022; v7[47] = 22013; v7[46] = 22012; v7[45] = 22011; v7[44] = 22010; v7[43] = 21967; v7[42] = 21910; v7[41] = 21909; v7[40] = 21908; v7[39] = 21907; v7[38] = 21906; v7[37] = 21905; v7[36] = 21904; v7[35] = 21903; v7[34] = 21902; v7[33] = 21901; v7[32] = 21900; v7[31] = 21899; v7[30] = 21898; v7[29] = 21897; v7[28] = 21896; v7[27] = 21895; v7[26] = 21894; v7[25] = 21893; v7[24] = 21892; v7[23] = 21891; v7[22] = 21890; v7[21] = 21889; v7[20] = 21888; v7[19] = 21887; v7[18] = 21886; v7[17] = 21885; v7[16] = 21884; v7[15] = 21883; v7[14] = 21882; v7[13] = 21881; v7[12] = 21880; v7[11] = 21879; v7[10] = 21878; v7[9] = 21877; v7[8] = 21876; v7[7] = 21875; v7[5] = 0; v7[6] = 21874; v7[3] = 0; v7[4] = 21873; v7[1] = 0; v7[2] = 21872; v7[0] = 21835; bzero_core(result: v8, a2: 0x1Cu); v8[15] = 27397; v8[14] = 27365; v8[13] = 27421; v8[12] = 39216; v8[10] = 0; v8[11] = 21832; v8[9] = 39213; v8[8] = 21829; v8[7] = 14409; bzero_core(result: v9, a2: 0x3Cu); v9[17] = 21444; v9[16] = 40516; v9[15] = 21380; bzero_core(result: v10, a2: 0x20u); return asd_set_key_blobs(a1: v11, a2: v7, a3: v4, a4: v5); } /* ==== asd_reg_offsets_init_1A218 [tier=EXACT size=662] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte base // template from 0xd1a218, then patches individual register offsets into the // destination array. One of a large family of near-identical variants. int __fastcall asd_reg_offsets_init_1A218(int a1, int a2, int a3, int a4) { int v4; // r2 int v5; // r3 int v7[92]; // [sp+0h] [bp-2D0h] BYREF _DWORD v8[16]; // [sp+170h] [bp-160h] BYREF _DWORD v9[18]; // [sp+1B0h] [bp-120h] BYREF int v10[8]; // [sp+1F8h] [bp-D8h] BYREF int v11[46]; // [sp+218h] [bp-B8h] BYREF memcpy_aligned(result: v11, a2: off_D050E0, a3: 0xB4u, a4); v7[91] = 20494; v7[90] = 20489; v7[89] = 20481; v7[88] = 39175; v7[87] = 39162; v7[86] = 39135; v7[85] = 39125; v7[84] = 39123; v7[82] = 27498; v7[81] = 27497; v7[80] = 27496; v7[79] = 27495; v7[78] = 27494; v7[77] = 27493; v7[83] = 0; v7[75] = 0; v7[76] = 27490; v7[74] = 39238; v7[73] = 39237; v7[72] = 39236; v7[71] = 39235; v7[70] = 39234; v7[69] = 39233; v7[67] = 0; v7[68] = 39230; v7[66] = 21939; v7[65] = 21938; v7[64] = 21937; v7[63] = 21936; v7[62] = 21935; v7[61] = 21934; v7[60] = 21931; v7[59] = 21330; v7[58] = 21329; v7[57] = 21328; v7[56] = 40534; v7[55] = 27364; v7[54] = 27521; v7[53] = 27524; v7[52] = 27534; v7[51] = 27533; v7[50] = 27532; v7[49] = 27531; v7[48] = 22022; v7[47] = 22013; v7[46] = 22012; v7[45] = 22011; v7[44] = 22010; v7[43] = 21967; v7[42] = 21910; v7[41] = 21909; v7[40] = 21908; v7[39] = 21907; v7[38] = 21906; v7[37] = 21905; v7[36] = 21904; v7[35] = 21903; v7[34] = 21902; v7[33] = 21901; v7[32] = 21900; v7[31] = 21899; v7[30] = 21898; v7[29] = 21897; v7[28] = 21896; v7[27] = 21895; v7[26] = 21894; v7[25] = 21893; v7[24] = 21892; v7[23] = 21891; v7[22] = 21890; v7[21] = 21889; v7[20] = 21888; v7[19] = 21887; v7[18] = 21886; v7[17] = 21885; v7[16] = 21884; v7[15] = 21883; v7[14] = 21882; v7[13] = 21881; v7[12] = 21880; v7[11] = 21879; v7[10] = 21878; v7[9] = 21877; v7[8] = 21876; v7[7] = 21875; v7[5] = 0; v7[6] = 21874; v7[3] = 0; v7[4] = 21873; v7[1] = 0; v7[2] = 21872; v7[0] = 21835; bzero_core(result: v8, a2: 0x1Cu); v8[15] = 27397; v8[14] = 27365; v8[13] = 27421; v8[12] = 39216; v8[10] = 0; v8[11] = 21832; v8[9] = 39213; v8[8] = 21829; v8[7] = 14409; bzero_core(result: v9, a2: 0x3Cu); v9[17] = 21444; v9[16] = 40516; v9[15] = 21380; bzero_core(result: v10, a2: 0x20u); return asd_set_key_blobs(a1: v11, a2: v7, a3: v4, a4: v5); } /* ==== asd_reg_offsets_init_1A2D0 [tier=EXACT size=662] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte base // template from 0xd1a2d0, then patches individual register offsets into the // destination array. One of a large family of near-identical variants. int __fastcall asd_reg_offsets_init_1A2D0(int a1, int a2, int a3, int a4) { int v4; // r2 int v5; // r3 int v7[92]; // [sp+0h] [bp-2D0h] BYREF _DWORD v8[16]; // [sp+170h] [bp-160h] BYREF _DWORD v9[18]; // [sp+1B0h] [bp-120h] BYREF int v10[8]; // [sp+1F8h] [bp-D8h] BYREF int v11[46]; // [sp+218h] [bp-B8h] BYREF memcpy_aligned(result: v11, a2: off_D0541C, a3: 0xB4u, a4); v7[91] = 20494; v7[90] = 20489; v7[89] = 20481; v7[88] = 39175; v7[87] = 39162; v7[86] = 39135; v7[85] = 39125; v7[84] = 39123; v7[82] = 27498; v7[81] = 27497; v7[80] = 27496; v7[79] = 27495; v7[78] = 27494; v7[77] = 27493; v7[83] = 0; v7[75] = 0; v7[76] = 27490; v7[74] = 39238; v7[73] = 39237; v7[72] = 39236; v7[71] = 39235; v7[70] = 39234; v7[69] = 39233; v7[67] = 0; v7[68] = 39230; v7[66] = 21939; v7[65] = 21938; v7[64] = 21937; v7[63] = 21936; v7[62] = 21935; v7[61] = 21934; v7[60] = 21931; v7[59] = 21330; v7[58] = 21329; v7[57] = 21328; v7[56] = 40534; v7[55] = 27364; v7[54] = 27521; v7[53] = 27524; v7[52] = 27534; v7[51] = 27533; v7[50] = 27532; v7[49] = 27531; v7[48] = 22022; v7[47] = 22013; v7[46] = 22012; v7[45] = 22011; v7[44] = 22010; v7[43] = 21967; v7[42] = 21911; v7[41] = 21910; v7[40] = 21909; v7[39] = 21908; v7[38] = 21907; v7[37] = 21906; v7[36] = 21905; v7[35] = 21904; v7[34] = 21903; v7[33] = 21902; v7[32] = 21901; v7[31] = 21900; v7[30] = 21899; v7[29] = 21898; v7[28] = 21897; v7[27] = 21896; v7[26] = 21895; v7[25] = 21894; v7[24] = 21893; v7[23] = 21892; v7[22] = 21891; v7[21] = 21890; v7[20] = 21889; v7[19] = 21888; v7[18] = 21887; v7[17] = 21886; v7[16] = 21885; v7[15] = 21884; v7[14] = 21883; v7[13] = 21882; v7[12] = 21881; v7[11] = 21880; v7[10] = 21879; v7[9] = 21878; v7[8] = 21877; v7[7] = 21876; v7[5] = 0; v7[6] = 21875; v7[3] = 0; v7[4] = 21874; v7[1] = 0; v7[2] = 21873; v7[0] = 21835; bzero_core(result: v8, a2: 0x1Cu); v8[15] = 27397; v8[14] = 27365; v8[13] = 27421; v8[12] = 39216; v8[10] = 0; v8[11] = 21832; v8[9] = 39213; v8[8] = 21829; v8[7] = 14409; bzero_core(result: v9, a2: 0x3Cu); v9[17] = 21444; v9[16] = 40516; v9[15] = 21380; bzero_core(result: v10, a2: 0x20u); return asd_set_key_blobs(a1: v11, a2: v7, a3: v4, a4: v5); } /* ==== asd_reg_offsets_init_1A388 [tier=EXACT size=662] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte base // template from 0xd1a388, then patches individual register offsets into the // destination array. One of a large family of near-identical variants. int __fastcall asd_reg_offsets_init_1A388(int a1, int a2, int a3, int a4) { int v4; // r2 int v5; // r3 int v7[92]; // [sp+0h] [bp-2D0h] BYREF _DWORD v8[16]; // [sp+170h] [bp-160h] BYREF _DWORD v9[18]; // [sp+1B0h] [bp-120h] BYREF int v10[8]; // [sp+1F8h] [bp-D8h] BYREF int v11[46]; // [sp+218h] [bp-B8h] BYREF memcpy_aligned(result: v11, a2: off_D05740, a3: 0xB4u, a4); v7[91] = 20494; v7[90] = 20489; v7[89] = 20481; v7[88] = 39175; v7[87] = 39162; v7[86] = 39135; v7[85] = 39125; v7[84] = 39123; v7[82] = 27498; v7[81] = 27497; v7[80] = 27496; v7[79] = 27495; v7[78] = 27494; v7[77] = 27493; v7[83] = 0; v7[75] = 0; v7[76] = 27490; v7[74] = 39238; v7[73] = 39237; v7[72] = 39236; v7[71] = 39235; v7[70] = 39234; v7[69] = 39233; v7[67] = 0; v7[68] = 39230; v7[66] = 21939; v7[65] = 21938; v7[64] = 21937; v7[63] = 21936; v7[62] = 21935; v7[61] = 21934; v7[60] = 21931; v7[59] = 21330; v7[58] = 21329; v7[57] = 21328; v7[56] = 40534; v7[55] = 27364; v7[54] = 27521; v7[53] = 27524; v7[52] = 27534; v7[51] = 27533; v7[50] = 27532; v7[49] = 27531; v7[48] = 22022; v7[47] = 22013; v7[46] = 22012; v7[45] = 22011; v7[44] = 22010; v7[43] = 21967; v7[42] = 21911; v7[41] = 21910; v7[40] = 21909; v7[39] = 21908; v7[38] = 21907; v7[37] = 21906; v7[36] = 21905; v7[35] = 21904; v7[34] = 21903; v7[33] = 21902; v7[32] = 21901; v7[31] = 21900; v7[30] = 21899; v7[29] = 21898; v7[28] = 21897; v7[27] = 21896; v7[26] = 21895; v7[25] = 21894; v7[24] = 21893; v7[23] = 21892; v7[22] = 21891; v7[21] = 21890; v7[20] = 21889; v7[19] = 21888; v7[18] = 21887; v7[17] = 21886; v7[16] = 21885; v7[15] = 21884; v7[14] = 21883; v7[13] = 21882; v7[12] = 21881; v7[11] = 21880; v7[10] = 21879; v7[9] = 21878; v7[8] = 21877; v7[7] = 21876; v7[5] = 0; v7[6] = 21875; v7[3] = 0; v7[4] = 21874; v7[1] = 0; v7[2] = 21873; v7[0] = 21835; bzero_core(result: v8, a2: 0x1Cu); v8[15] = 27397; v8[14] = 27365; v8[13] = 27421; v8[12] = 39216; v8[10] = 0; v8[11] = 21832; v8[9] = 39213; v8[8] = 21829; v8[7] = 14409; bzero_core(result: v9, a2: 0x3Cu); v9[17] = 21444; v9[16] = 40516; v9[15] = 21380; bzero_core(result: v10, a2: 0x20u); return asd_set_key_blobs(a1: v11, a2: v7, a3: v4, a4: v5); } /* ==== asd_reg_offsets_init_1A440 [tier=EXACT size=730] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte base // template from 0xd1a440, then patches individual register offsets into the // destination array. One of a large family of near-identical variants. int __fastcall asd_reg_offsets_init_1A440(int a1, int a2, int a3, int a4) { int v4; // r2 int v5; // r3 int v7[92]; // [sp+0h] [bp-2D0h] BYREF _DWORD v8[34]; // [sp+170h] [bp-160h] BYREF int v9[8]; // [sp+1F8h] [bp-D8h] BYREF int v10[46]; // [sp+218h] [bp-B8h] BYREF memcpy_aligned(result: v10, a2: off_D05AAC, a3: 0xB4u, a4); v7[91] = 20495; v7[90] = 20489; v7[89] = 20483; v7[88] = 39175; v7[87] = 39162; v7[86] = 39135; v7[85] = 39125; v7[84] = 39123; v7[83] = 27493; v7[78] = 27495; v7[77] = 27494; v7[76] = 27490; v7[75] = 39233; v7[70] = 39235; v7[69] = 39234; v7[68] = 39230; v7[67] = 21956; v7[62] = 21958; v7[61] = 21957; v7[60] = 21953; v7[59] = 21330; v7[58] = 21329; v7[57] = 21328; v7[56] = 40534; v7[55] = 27364; v7[54] = 27521; v7[53] = 27524; v7[52] = 27534; v7[51] = 27533; v7[50] = 27532; v7[49] = 27531; v7[48] = 22044; v7[47] = 22035; v7[46] = 22034; v7[45] = 22033; v7[44] = 22032; v7[43] = 21989; v7[42] = 21923; v7[41] = 21922; v7[40] = 21921; v7[39] = 21919; v7[38] = 21918; v7[37] = 21917; v7[36] = 21916; v7[35] = 21915; v7[34] = 21914; v7[33] = 21913; v7[32] = 21912; v7[31] = 21911; v7[30] = 21910; v7[29] = 21909; v7[28] = 21908; v7[27] = 21907; v7[26] = 21906; v7[25] = 21905; v7[24] = 21904; v7[23] = 21903; v7[22] = 21902; v7[21] = 21901; v7[20] = 21900; v7[19] = 21899; v7[18] = 21898; v7[17] = 21897; v7[16] = 21896; v7[15] = 21895; v7[14] = 21894; v7[13] = 21893; v7[12] = 21892; v7[11] = 21891; v7[10] = 21890; v7[9] = 21889; v7[8] = 21888; v7[7] = 21887; v7[6] = 21886; v7[4] = 21885; v7[3] = 21883; v7[2] = 21884; v7[1] = 21844; v7[0] = 21843; v7[63] = dword_D05AB0; v7[82] = dword_D05AB0 + 81; v7[81] = dword_D05AB0 + 80; v7[80] = dword_D05AB0 + 79; v7[79] = dword_D05AB0 + 78; v7[74] = dword_D05AB0 + 45; v7[73] = dword_D05AB0 + 44; v7[72] = dword_D05AB0 + 43; v7[71] = dword_D05AB0 + 42; v7[66] = dword_D05AB0 + 3; v7[64] = dword_D05AB0 + 1; v7[65] = dword_D05AB0 + 2; v7[5] = 0; bzero_core(result: v8, a2: 0x1Cu); v8[33] = 21444; v8[32] = 40516; v8[30] = 0; v8[31] = 21380; v8[25] = 13657; v8[24] = 13651; v8[23] = 362; v8[22] = 21302; v8[28] = 0; v8[20] = 0; v8[21] = 209715200; v8[19] = 21368; memset(&v8[16], 0, 12); v8[15] = 27397; v8[14] = 27365; v8[13] = 27421; v8[12] = 39216; v8[10] = 0; v8[11] = 21832; v8[9] = 39213; v8[8] = 21829; v8[7] = 14409; v8[26] = dword_D05E40; v8[27] = dword_D05E40 + 1; v8[29] = dword_D05E40 + 4; bzero_core(result: v9, a2: 0x1Cu); v9[7] = 13707; return asd_set_key_blobs(a1: v10, a2: v7, a3: v4, a4: v5); } /* ==== asd_reg_offsets_init_1A4F8 [tier=EXACT size=754] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte base // template from 0xd1a4f8, then patches individual register offsets into the // destination array. One of a large family of near-identical variants. int __fastcall asd_reg_offsets_init_1A4F8(int a1, int a2, int a3, int a4) { int v4; // r2 int v5; // r3 int v7[92]; // [sp+0h] [bp-2D0h] BYREF int v8[42]; // [sp+170h] [bp-160h] BYREF int v9[46]; // [sp+218h] [bp-B8h] BYREF memcpy_aligned(result: v9, a2: off_D05E38, a3: 0xB4u, a4); v7[91] = 20495; v7[90] = 20489; v7[89] = 20483; v7[88] = 39175; v7[87] = 39162; v7[86] = 39135; v7[85] = 39125; v7[84] = 39123; v7[83] = 27493; v7[78] = 27495; v7[77] = 27494; v7[76] = 27490; v7[75] = 39233; v7[70] = 39235; v7[69] = 39234; v7[68] = 39230; v7[67] = 21956; v7[62] = 21958; v7[61] = 21957; v7[60] = 21953; v7[59] = 21330; v7[58] = 21329; v7[57] = 21328; v7[56] = 40534; v7[55] = 27364; v7[54] = 27521; v7[53] = 27524; v7[52] = 27534; v7[51] = 27533; v7[50] = 27532; v7[49] = 27531; v7[48] = 22044; v7[47] = 22035; v7[46] = 22034; v7[45] = 22033; v7[44] = 22032; v7[43] = 21989; v7[42] = 21923; v7[41] = 21922; v7[40] = 21921; v7[39] = 21919; v7[38] = 21918; v7[37] = 21917; v7[36] = 21916; v7[35] = 21915; v7[34] = 21914; v7[33] = 21913; v7[32] = 21912; v7[31] = 21911; v7[30] = 21910; v7[29] = 21909; v7[28] = 21908; v7[27] = 21907; v7[26] = 21906; v7[25] = 21905; v7[24] = 21904; v7[23] = 21903; v7[22] = 21902; v7[21] = 21901; v7[20] = 21900; v7[19] = 21899; v7[18] = 21898; v7[17] = 21897; v7[16] = 21896; v7[15] = 21895; v7[14] = 21894; v7[13] = 21893; v7[12] = 21892; v7[11] = 21891; v7[10] = 21890; v7[9] = 21889; v7[8] = 21888; v7[7] = 21887; v7[6] = 21886; v7[4] = 21885; v7[3] = 21883; v7[2] = 21884; v7[1] = 21844; v7[0] = 21843; v7[63] = dword_D05E3C; v7[82] = dword_D05E3C + 81; v7[81] = dword_D05E3C + 80; v7[80] = dword_D05E3C + 79; v7[79] = dword_D05E3C + 78; v7[74] = dword_D05E3C + 45; v7[73] = dword_D05E3C + 44; v7[72] = dword_D05E3C + 43; v7[71] = dword_D05E3C + 42; v7[66] = dword_D05E3C + 3; v7[64] = dword_D05E3C + 1; v7[65] = dword_D05E3C + 2; v7[5] = 0; bzero_core(result: v8, a2: 0x1Cu); v8[41] = 13707; v8[40] = 27487; v8[39] = 27486; v8[38] = 27485; v8[37] = 27484; v8[36] = 27483; v8[34] = 0; v8[35] = 0; v8[33] = 21444; v8[32] = 40516; v8[30] = 0; v8[31] = 21380; v8[25] = 13657; v8[24] = 13651; v8[23] = 362; v8[22] = 21302; v8[28] = 0; v8[20] = 0; v8[21] = 209715200; v8[19] = 21368; memset(&v8[16], 0, 12); v8[15] = 27397; v8[14] = 27365; v8[13] = 27421; v8[12] = 39216; v8[10] = 0; v8[11] = 21832; v8[9] = 39213; v8[8] = 21829; v8[7] = 14409; v8[26] = dword_D061C8; v8[29] = dword_D061C8 + 4; v8[27] = dword_D061C8 + 1; return asd_set_key_blobs(a1: v9, a2: v7, a3: v4, a4: v5); } /* ==== asd_reg_offsets_init_1A5B0 [tier=EXACT size=730] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte base // template from 0xd1a5b0, then patches individual register offsets into the // destination array. One of a large family of near-identical variants. int __fastcall asd_reg_offsets_init_1A5B0(int a1, int a2, int a3, int a4) { int v4; // r2 int v5; // r3 int v7[92]; // [sp+0h] [bp-2D0h] BYREF _DWORD v8[34]; // [sp+170h] [bp-160h] BYREF int v9[8]; // [sp+1F8h] [bp-D8h] BYREF int v10[46]; // [sp+218h] [bp-B8h] BYREF memcpy_aligned(result: v10, a2: off_D061C0, a3: 0xB4u, a4); v7[91] = 20495; v7[90] = 20489; v7[89] = 20483; v7[88] = 39175; v7[87] = 39162; v7[86] = 39135; v7[85] = 39125; v7[84] = 39123; v7[83] = 27493; v7[78] = 27495; v7[77] = 27494; v7[76] = 27490; v7[75] = 39233; v7[70] = 39235; v7[69] = 39234; v7[68] = 39230; v7[67] = 21956; v7[62] = 21958; v7[61] = 21957; v7[60] = 21953; v7[59] = 21330; v7[58] = 21329; v7[57] = 21328; v7[56] = 40534; v7[55] = 27364; v7[54] = 27521; v7[53] = 27524; v7[52] = 27534; v7[51] = 27533; v7[50] = 27532; v7[49] = 27531; v7[48] = 22044; v7[47] = 22035; v7[46] = 22034; v7[45] = 22033; v7[44] = 22032; v7[43] = 21989; v7[42] = 21923; v7[41] = 21922; v7[40] = 21921; v7[39] = 21919; v7[38] = 21918; v7[37] = 21917; v7[36] = 21916; v7[35] = 21915; v7[34] = 21914; v7[33] = 21913; v7[32] = 21912; v7[31] = 21911; v7[30] = 21910; v7[29] = 21909; v7[28] = 21908; v7[27] = 21907; v7[26] = 21906; v7[25] = 21905; v7[24] = 21904; v7[23] = 21903; v7[22] = 21902; v7[21] = 21901; v7[20] = 21900; v7[19] = 21899; v7[18] = 21898; v7[17] = 21897; v7[16] = 21896; v7[15] = 21895; v7[14] = 21894; v7[13] = 21893; v7[12] = 21892; v7[11] = 21891; v7[10] = 21890; v7[9] = 21889; v7[8] = 21888; v7[7] = 21887; v7[6] = 21886; v7[4] = 21885; v7[3] = 21883; v7[2] = 21884; v7[1] = 21844; v7[0] = 21843; v7[63] = dword_D061C4; v7[82] = dword_D061C4 + 81; v7[81] = dword_D061C4 + 80; v7[80] = dword_D061C4 + 79; v7[79] = dword_D061C4 + 78; v7[74] = dword_D061C4 + 45; v7[73] = dword_D061C4 + 44; v7[72] = dword_D061C4 + 43; v7[71] = dword_D061C4 + 42; v7[66] = dword_D061C4 + 3; v7[64] = dword_D061C4 + 1; v7[65] = dword_D061C4 + 2; v7[5] = 0; bzero_core(result: v8, a2: 0x1Cu); v8[33] = 21444; v8[32] = 40516; v8[30] = 0; v8[31] = 21380; v8[25] = 13657; v8[24] = 13651; v8[23] = 362; v8[22] = 21302; v8[28] = 0; v8[20] = 0; v8[21] = 209715200; v8[19] = 21368; memset(&v8[16], 0, 12); v8[15] = 27397; v8[14] = 27365; v8[13] = 27421; v8[12] = 39216; v8[10] = 0; v8[11] = 21832; v8[9] = 39213; v8[8] = 21829; v8[7] = 14409; v8[26] = dword_D0654C; v8[27] = dword_D0654C + 1; v8[29] = dword_D0654C + 4; bzero_core(result: v9, a2: 0x1Cu); v9[7] = 13707; return asd_set_key_blobs(a1: v10, a2: v7, a3: v4, a4: v5); } /* ==== asd_reg_offsets_init_1A668 [tier=EXACT size=746] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte base // template from 0xd1a668, then patches individual register offsets into the // destination array. One of a large family of near-identical variants. int __fastcall asd_reg_offsets_init_1A668(int a1, int a2, int a3, int a4) { int v4; // r2 int v5; // r3 int v7[108]; // [sp+0h] [bp-2D0h] BYREF int v8[26]; // [sp+1B0h] [bp-120h] BYREF int v9[46]; // [sp+218h] [bp-B8h] BYREF memcpy_aligned(result: v9, a2: off_D06544, a3: 0xB4u, a4); v7[94] = 20576; v7[93] = 20523; v7[92] = 20522; v7[91] = 20495; v7[90] = 20489; v7[89] = 20483; v7[88] = 39175; v7[87] = 39162; v7[86] = 39135; v7[85] = 39125; v7[84] = 39123; v7[83] = 27501; v7[78] = 27503; v7[77] = 27502; v7[76] = 27498; v7[75] = 39233; v7[70] = 39235; v7[69] = 39234; v7[68] = 39230; v7[67] = 21956; v7[62] = 21958; v7[61] = 21957; v7[60] = 21953; v7[59] = 21330; v7[58] = 21329; v7[57] = 21328; v7[56] = 40534; v7[55] = 27364; v7[54] = 27509; v7[53] = 27512; v7[52] = 27522; v7[51] = 27521; v7[50] = 27520; v7[49] = 27519; v7[48] = 22044; v7[47] = 22035; v7[46] = 22034; v7[45] = 22033; v7[44] = 22032; v7[43] = 21989; v7[42] = 21923; v7[41] = 21922; v7[40] = 21921; v7[39] = 21919; v7[38] = 21918; v7[37] = 21917; v7[36] = 21916; v7[35] = 21915; v7[34] = 21914; v7[33] = 21913; v7[32] = 21912; v7[31] = 21911; v7[30] = 21910; v7[29] = 21909; v7[28] = 21908; v7[27] = 21907; v7[26] = 21906; v7[25] = 21905; v7[24] = 21904; v7[23] = 21903; v7[22] = 21902; v7[21] = 21901; v7[20] = 21900; v7[19] = 21899; v7[18] = 21898; v7[17] = 21897; v7[16] = 21896; v7[15] = 21895; v7[14] = 21894; v7[13] = 21893; v7[12] = 21892; v7[11] = 21891; v7[10] = 21890; v7[9] = 21889; v7[8] = 21888; v7[7] = 21887; v7[6] = 21886; v7[4] = 21885; v7[3] = 21883; v7[2] = 21884; v7[1] = 21844; v7[0] = 21843; v7[63] = dword_D06548; v7[82] = dword_D06548 + 81; v7[81] = dword_D06548 + 80; v7[80] = dword_D06548 + 79; v7[79] = dword_D06548 + 78; v7[74] = dword_D06548 + 45; v7[73] = dword_D06548 + 44; v7[72] = dword_D06548 + 43; v7[71] = dword_D06548 + 42; v7[66] = dword_D06548 + 3; v7[64] = dword_D06548 + 1; v7[65] = dword_D06548 + 2; v7[5] = 0; memset(&v7[95], 0, 16); v7[107] = 27397; v7[106] = 27365; v7[105] = 27421; v7[104] = 39216; v7[102] = 0; v7[103] = 21832; v7[101] = 39213; v7[100] = 21829; v7[99] = 14409; bzero_core(result: v8, a2: 0x14u); memset(&v8[14], 0, 16); v8[9] = 13657; v8[8] = 13651; v8[7] = 362; v8[6] = 21302; v8[5] = 209715200; v8[12] = 0; v8[20] = 27531; v8[19] = 19546; v8[18] = 21386; memset(&v8[21], 0, 16); v8[10] = dword_D0654C; v8[11] = dword_D0654C + 1; v8[13] = dword_D0654C + 4; v8[25] = 13707; return asd_set_key_blobs(a1: v9, a2: v7, a3: v4, a4: v5); } /* ==== asd_reg_offsets_init_1A720 [tier=EXACT size=754] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte base // template from 0xd1a720, then patches individual register offsets into the // destination array. One of a large family of near-identical variants. int __fastcall asd_reg_offsets_init_1A720(int a1, int a2, int a3, int a4) { int v4; // r3 int v6[134]; // [sp+0h] [bp-2D0h] BYREF int v7[46]; // [sp+218h] [bp-B8h] BYREF memcpy_aligned(result: v7, a2: off_D068E4, a3: 0xB4u, a4); v6[94] = 20586; v6[92] = 0; v6[93] = 0; v6[91] = 20496; v6[90] = 20490; v6[89] = 20483; v6[88] = 39175; v6[87] = 39162; v6[86] = 39135; v6[85] = 39124; v6[84] = 39123; v6[83] = 27501; v6[78] = 27503; v6[77] = 27502; v6[76] = 27498; v6[75] = 39233; v6[70] = 39235; v6[69] = 39234; v6[68] = 39230; v6[67] = 21956; v6[62] = 21958; v6[61] = 21957; v6[60] = 21953; v6[59] = 21330; v6[58] = 21329; v6[57] = 21328; v6[56] = 40534; v6[55] = 27364; v6[54] = 27509; v6[53] = 27512; v6[52] = 27522; v6[51] = 27521; v6[50] = 27520; v6[49] = 27519; v6[48] = 22044; v6[47] = 22035; v6[46] = 22034; v6[45] = 22033; v6[44] = 22032; v6[43] = 21989; v6[42] = 21922; v6[41] = 21921; v6[40] = 21920; v6[39] = 21918; v6[38] = 21917; v6[37] = 21916; v6[36] = 21915; v6[35] = 21914; v6[34] = 21913; v6[33] = 21912; v6[32] = 21911; v6[31] = 21910; v6[30] = 21909; v6[29] = 21908; v6[28] = 21907; v6[27] = 21906; v6[26] = 21905; v6[25] = 21904; v6[24] = 21903; v6[23] = 21902; v6[22] = 21901; v6[21] = 21900; v6[20] = 21899; v6[19] = 21898; v6[18] = 21897; v6[17] = 21896; v6[16] = 21895; v6[15] = 21894; v6[14] = 21893; v6[13] = 21892; v6[12] = 21891; v6[11] = 21890; v6[10] = 21889; v6[9] = 21888; v6[8] = 21887; v6[7] = 21886; v6[6] = 21885; v6[5] = 21881; v6[4] = 21884; v6[3] = 21882; v6[2] = 21883; v6[1] = 21844; v6[0] = 21843; v6[63] = dword_D068E8; v6[82] = dword_D068E8 + 81; v6[81] = dword_D068E8 + 80; v6[80] = dword_D068E8 + 79; v6[79] = dword_D068E8 + 78; v6[74] = dword_D068E8 + 45; v6[73] = dword_D068E8 + 44; v6[72] = dword_D068E8 + 43; v6[71] = dword_D068E8 + 42; v6[66] = dword_D068E8 + 3; v6[64] = dword_D068E8 + 1; v6[65] = dword_D068E8 + 2; memset(&v6[95], 0, 16); v6[133] = 13707; v6[132] = 27535; v6[131] = 27534; v6[130] = 27533; v6[129] = 27532; v6[128] = 27531; v6[127] = 19546; v6[126] = 21386; memset(&v6[123], 0, 12); v6[121] = 0; v6[118] = 0; v6[119] = 0; v6[117] = 13657; v6[116] = 13651; v6[115] = 362; v6[114] = 21302; v6[112] = 0; v6[113] = 209715200; v6[111] = 19530; v6[110] = 27397; v6[109] = 39208; v6[107] = 0; v6[108] = 21832; v6[106] = 27365; v6[105] = 27421; v6[103] = 0; v6[104] = 0; v6[102] = 39128; v6[100] = 0; v6[101] = 0; v6[99] = 14409; v6[120] = dword_D068EC; v6[122] = dword_D068EC + 3; return asd_set_key_blobs(a1: v7, a2: v6, a3: dword_D068E8 + 2, a4: v4); } /* ==== asd_reg_offsets_init_1A7D8 [tier=EXACT size=710] ==== */ // Per-ASIC display register-offset table initialiser: copies the 0xB4-byte base // template from 0xd1a7d8, then patches individual register offsets into the // destination array. One of a large family of near-identical variants. int __fastcall asd_reg_offsets_init_1A7D8(int a1, int a2, int a3, int a4) { int v4; // r2 int v5; // r3 int v7[116]; // [sp+0h] [bp-2D0h] BYREF _DWORD v8[12]; // [sp+1D0h] [bp-100h] BYREF int v9[6]; // [sp+200h] [bp-D0h] BYREF int v10[46]; // [sp+218h] [bp-B8h] BYREF memcpy_aligned(result: v10, a2: off_D06C50, a3: 0xB4u, a4); v7[94] = 20585; v7[92] = 0; v7[93] = 0; v7[91] = 20496; v7[90] = 20490; v7[89] = 20483; v7[88] = 39175; v7[87] = 39162; v7[86] = 39135; v7[85] = 39124; v7[84] = 39123; v7[83] = 27507; v7[78] = 27509; v7[77] = 27508; v7[76] = 27504; v7[75] = 39240; v7[70] = 39242; v7[69] = 39241; v7[68] = 39237; v7[67] = 21914; v7[62] = 21916; v7[61] = 21915; v7[60] = 21911; v7[59] = 21330; v7[58] = 21329; v7[57] = 21328; v7[56] = 40534; v7[55] = 27364; v7[54] = 27515; v7[53] = 27518; v7[52] = 27528; v7[51] = 27527; v7[50] = 27526; v7[49] = 27525; v7[48] = 22002; v7[47] = 21993; v7[46] = 21992; v7[45] = 21991; v7[44] = 21990; v7[43] = 21947; v7[42] = 21880; v7[41] = 21879; v7[40] = 21878; v7[39] = 21876; v7[38] = 21875; v7[37] = 21874; v7[36] = 21873; v7[35] = 21872; v7[34] = 21871; v7[33] = 21870; v7[32] = 21869; v7[31] = 21868; v7[30] = 21867; v7[29] = 21866; v7[28] = 21865; v7[27] = 21864; v7[26] = 21863; v7[25] = 21862; v7[24] = 21861; v7[23] = 21860; v7[22] = 21859; v7[21] = 21858; v7[20] = 21857; v7[19] = 21856; v7[18] = 21855; v7[17] = 21854; v7[16] = 21853; v7[15] = 21852; v7[14] = 21851; v7[13] = 21850; v7[12] = 21849; v7[11] = 21848; v7[10] = 21847; v7[9] = 21846; v7[8] = 21845; v7[7] = 21844; v7[6] = 21843; v7[5] = 21839; v7[4] = 21842; v7[3] = 21840; v7[2] = 21841; v7[1] = 21802; v7[0] = 21801; v7[63] = dword_D06C54; v7[82] = dword_D06C54 + 81; v7[81] = dword_D06C54 + 80; v7[80] = dword_D06C54 + 79; v7[79] = dword_D06C54 + 78; v7[74] = dword_D06C54 + 45; v7[73] = dword_D06C54 + 44; v7[72] = dword_D06C54 + 43; v7[71] = dword_D06C54 + 42; v7[66] = dword_D06C54 + 3; v7[64] = dword_D06C54 + 1; v7[65] = dword_D06C54 + 2; memset(&v7[95], 0, 16); v7[115] = 362; v7[114] = 21302; v7[113] = 209715200; v7[111] = 0; v7[112] = 0; v7[110] = 27397; v7[109] = 39208; v7[107] = 0; v7[108] = 21790; v7[106] = 27365; v7[105] = 27427; v7[103] = 0; v7[104] = 0; v7[102] = 39128; v7[100] = 0; v7[101] = 0; v7[99] = 14409; bzero_core(result: v8, a2: 0x28u); v8[11] = 19546; v8[10] = 21386; bzero_core(result: v9, a2: 0x14u); v9[5] = 13707; return asd_set_key_blobs(a1: v10, a2: v7, a3: v4, a4: v5); } /* ==== asd_reg_poll_seq [tier=EXACT size=136] ==== */ // Register read/poll sequence over an index, using asd_reg_read_13A54. int __fastcall asd_reg_poll_seq(unsigned int a1, int a2, int a3, int a4) { _DWORD *v4; // r7 int result; // r0 __int16 v8; // r2 __int16 v9; // r2 int _13A54; // r8 int i; // r6 bool v12; // zf __int16 v13; // r2 int j; // r6 int v15; // r0 int v16; // [sp+0h] [bp-Ch] int v17; // [sp+4h] [bp-8h] int v18; // [sp+8h] [bp-4h] v16 = a2; v17 = a3; v18 = a4; v4 = off_D19590; result = asd_reg_read_13A54(a1: *((_DWORD *)off_D19590 + 89), a2: a1, a3) << 31; if ( result != 0 ) { _13A54 = asd_reg_read_13A54(a1: v4[91], a2: a1, a3: v8); for ( i = 0; i != 3; ++i ) *(&v16 + i) = asd_reg_read_13A54(a1: v4[91], a2: a1, a3: v9); result = v16; v12 = v16 == v17; if ( v16 == v17 ) v12 = v16 == _13A54; if ( !v12 || v16 != v18 ) { result = asd_reg_read_13A54(a1: v4[90], a2: a1, a3: v9); for ( j = 0; j != a2; ++j ) { do v15 = asd_reg_read_13A54(a1: v4[90], a2: a1, a3: v13); while ( v15 << 31 == 0 ); while ( 1 ) { result = v15 << 31; if ( result == 0 ) break; v15 = asd_reg_read_13A54(a1: v4[90], a2: a1, a3: v13); } } } } return result; } /* ==== asd_reg_read_10744 [tier=EXACT size=44] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_10744(_DWORD *a1) { if ( *a1 == 2 ) __asm { SVC 0x7B ; '{' } return 0; } /* ==== asd_reg_read_10800 [tier=EXACT size=50] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_10800(_DWORD *a1) { *a1 = 1; __asm { SVC 0x7B ; '{' } return 0; } /* ==== asd_reg_read_11B00 [tier=EXACT size=228] ==== */ // Display-block register accessor: 6 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_11B00(int a1, int a2, __int16 a3) { int v3; // r3 if ( *((_DWORD *)off_D11CC8 + 116) == 0 ) return 1; if ( *((_DWORD *)off_D11CC8 + 118) != 0 ) { v3 = 0; __asm { SVC 0x7B ; '{' } if ( *((_DWORD *)off_D11CC8 + 119) != 0 ) return 0; } else { v3 = 0; if ( *((_DWORD *)off_D11CC8 + 120) != 0 ) { __asm { SVC 0x7B ; '{' } __asm { SVC 0x7B ; '{' } if ( (a3 & 0x200) != 0 ) return 0; } } return v3; } /* ==== asd_reg_read_11BE4 [tier=EXACT size=228] ==== */ // Display-block register accessor: 6 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_11BE4(int a1, int a2, __int16 a3) { int v3; // r3 if ( *((_DWORD *)off_D11CC8 + 117) == 0 ) return 1; if ( *((_DWORD *)off_D11CC8 + 118) != 0 ) { v3 = 0; __asm { SVC 0x7B ; '{' } if ( *((_DWORD *)off_D11CC8 + 121) != 0 ) return 0; } else { v3 = 0; if ( *((_DWORD *)off_D11CC8 + 122) != 0 ) { __asm { SVC 0x7B ; '{' } __asm { SVC 0x7B ; '{' } if ( (a3 & 0x200) != 0 ) return 0; } } return v3; } /* ==== asd_reg_read_1217E [tier=EXACT size=12] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int asd_reg_read_1217E() { __asm { SVC 0x7B ; '{' } return 14220; } /* ==== asd_reg_read_121B4 [tier=EXACT size=38] ==== */ // Display-block register accessor: 2 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_121B4(_DWORD *a1) { __asm { SVC 0x7B ; '{' } __asm { SVC 0x7B ; '{' } *a1 = 0; a1[1] = 0; return 0; } /* ==== asd_reg_read_12218 [tier=EXACT size=78] ==== */ // Display-block register accessor: 3 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_12218(_DWORD *a1, unsigned __int16 a2, unsigned __int16 a3, unsigned int a4) { char *v4; // r4 if ( a1 == nullptr ) return 2; v4 = off_D12288; __asm { SVC 0x7B ; '{' } *a1 = (unsigned __int16)a4; a1[1] = ((a4 >> 20) & 0xF) + ((a4 >> 12) & 0xF0); if ( (unsigned __int8)*v4 << 31 == 0 ) { __asm { SVC 0x7B ; '{' } a1[2] = a2; __asm { SVC 0x7B ; '{' } a1[3] = a3; } return 0; } /* ==== asd_reg_read_12218_cfg0 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12218. One of 0 near-identical siblings. int __fastcall asd_reg_read_12218_cfg0(int a1, _DWORD *a2, unsigned __int16 a3, unsigned int a4) { return asd_reg_read_12218(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_12218_cfg1 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12218. One of 0 near-identical siblings. int __fastcall asd_reg_read_12218_cfg1(int a1, _DWORD *a2, unsigned __int16 a3, unsigned int a4) { return asd_reg_read_12218(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_12688 [tier=EXACT size=80] ==== */ // Display-block register accessor: 3 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_12688(_DWORD *a1, unsigned __int16 a2, unsigned int a3, unsigned int a4) { char *v4; // r4 if ( a1 == nullptr ) return 2; v4 = off_D126F8; __asm { SVC 0x7B ; '{' } *a1 = (unsigned __int16)a4; a1[1] = ((a4 >> 20) & 0xF) + ((a4 >> 12) & 0xF0); if ( (unsigned __int8)*v4 << 31 == 0 ) { __asm { SVC 0x7B ; '{' } a1[2] = a2; __asm { SVC 0x7B ; '{' } a1[3] = (unsigned __int16)(a3 >> 2); } return 0; } /* ==== asd_reg_read_12688_cfg0 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12688. One of 0 near-identical siblings. int __fastcall asd_reg_read_12688_cfg0(int a1, _DWORD *a2, unsigned int a3, unsigned int a4) { return asd_reg_read_12688(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_12688_cfg1 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12688. One of 0 near-identical siblings. int __fastcall asd_reg_read_12688_cfg1(int a1, _DWORD *a2, unsigned int a3, unsigned int a4) { return asd_reg_read_12688(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_12688_cfg10 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12688. One of 0 near-identical siblings. int __fastcall asd_reg_read_12688_cfg10(int a1, _DWORD *a2, unsigned int a3, unsigned int a4) { return asd_reg_read_12688(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_12688_cfg11 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12688. One of 0 near-identical siblings. int __fastcall asd_reg_read_12688_cfg11(int a1, _DWORD *a2, unsigned int a3, unsigned int a4) { return asd_reg_read_12688(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_12688_cfg12 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12688. One of 0 near-identical siblings. int __fastcall asd_reg_read_12688_cfg12(int a1, _DWORD *a2, unsigned int a3, unsigned int a4) { return asd_reg_read_12688(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_12688_cfg13 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12688. One of 0 near-identical siblings. int __fastcall asd_reg_read_12688_cfg13(int a1, _DWORD *a2, unsigned int a3, unsigned int a4) { return asd_reg_read_12688(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_12688_cfg14 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12688. One of 0 near-identical siblings. int __fastcall asd_reg_read_12688_cfg14(int a1, _DWORD *a2, unsigned int a3, unsigned int a4) { return asd_reg_read_12688(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_12688_cfg15 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12688. One of 0 near-identical siblings. int __fastcall asd_reg_read_12688_cfg15(int a1, _DWORD *a2, unsigned int a3, unsigned int a4) { return asd_reg_read_12688(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_12688_cfg16 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12688. One of 0 near-identical siblings. int __fastcall asd_reg_read_12688_cfg16(int a1, _DWORD *a2, unsigned int a3, unsigned int a4) { return asd_reg_read_12688(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_12688_cfg17 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12688. One of 0 near-identical siblings. int __fastcall asd_reg_read_12688_cfg17(int a1, _DWORD *a2, unsigned int a3, unsigned int a4) { return asd_reg_read_12688(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_12688_cfg18 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12688. One of 0 near-identical siblings. int __fastcall asd_reg_read_12688_cfg18(int a1, _DWORD *a2, unsigned int a3, unsigned int a4) { return asd_reg_read_12688(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_12688_cfg19 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12688. One of 0 near-identical siblings. int __fastcall asd_reg_read_12688_cfg19(int a1, _DWORD *a2, unsigned int a3, unsigned int a4) { return asd_reg_read_12688(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_12688_cfg2 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12688. One of 0 near-identical siblings. int __fastcall asd_reg_read_12688_cfg2(int a1, _DWORD *a2, unsigned int a3, unsigned int a4) { return asd_reg_read_12688(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_12688_cfg20 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12688. One of 0 near-identical siblings. int __fastcall asd_reg_read_12688_cfg20(int a1, _DWORD *a2, unsigned int a3, unsigned int a4) { return asd_reg_read_12688(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_12688_cfg3 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12688. One of 0 near-identical siblings. int __fastcall asd_reg_read_12688_cfg3(int a1, _DWORD *a2, unsigned int a3, unsigned int a4) { return asd_reg_read_12688(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_12688_cfg4 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12688. One of 0 near-identical siblings. int __fastcall asd_reg_read_12688_cfg4(int a1, _DWORD *a2, unsigned int a3, unsigned int a4) { return asd_reg_read_12688(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_12688_cfg5 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12688. One of 0 near-identical siblings. int __fastcall asd_reg_read_12688_cfg5(int a1, _DWORD *a2, unsigned int a3, unsigned int a4) { return asd_reg_read_12688(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_12688_cfg6 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12688. One of 0 near-identical siblings. int __fastcall asd_reg_read_12688_cfg6(int a1, _DWORD *a2, unsigned int a3, unsigned int a4) { return asd_reg_read_12688(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_12688_cfg7 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12688. One of 0 near-identical siblings. int __fastcall asd_reg_read_12688_cfg7(int a1, _DWORD *a2, unsigned int a3, unsigned int a4) { return asd_reg_read_12688(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_12688_cfg8 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12688. One of 0 near-identical siblings. int __fastcall asd_reg_read_12688_cfg8(int a1, _DWORD *a2, unsigned int a3, unsigned int a4) { return asd_reg_read_12688(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_12688_cfg9 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_12688. One of 0 near-identical siblings. int __fastcall asd_reg_read_12688_cfg9(int a1, _DWORD *a2, unsigned int a3, unsigned int a4) { return asd_reg_read_12688(a1: a2, (unsigned __int16)a2, a3, a4); } /* ==== asd_reg_read_129D4 [tier=EXACT size=54] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_129D4() { int vars4; // [sp+4h] [bp+4h] vars4 = 0; __asm { SVC 0x7B ; '{' } return 0; } /* ==== asd_reg_read_13974 [tier=EXACT size=110] ==== */ // Display-block register accessor: 2 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_13974(int a1, unsigned int a2, __int16 a3) { int v4; // r0 if ( *((_DWORD *)off_D13D20 + 14) > a2 ) { v4 = *((_DWORD *)off_D13CD8 + 118); if ( v4 != 0 ) { if ( asd_reg_read_11B00(a1: v4, a2, a3) != 0 ) { asd_tbl_get_D423CC(a1: a2); __asm { SVC 0x7B ; '{' } } } else { asd_tbl_get_D423CC(a1: a2); __asm { SVC 0x7B ; '{' } } } return 0; } /* ==== asd_reg_read_139E4 [tier=EXACT size=110] ==== */ // Display-block register accessor: 2 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_139E4(int a1, unsigned int a2, __int16 a3) { int v4; // r0 if ( *((_DWORD *)off_D13D94 + 13) > a2 ) { v4 = *((_DWORD *)off_D13D98 + 118); if ( v4 != 0 ) { if ( asd_reg_read_11B00(a1: v4, a2, a3) != 0 ) { asd_tbl_get_D423C8(a1: a2); __asm { SVC 0x7B ; '{' } } } else { asd_tbl_get_D423C8(a1: a2); __asm { SVC 0x7B ; '{' } } } return 0; } /* ==== asd_reg_read_13A54 [tier=EXACT size=110] ==== */ // Display-block register accessor: 2 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_13A54(int a1, unsigned int a2, __int16 a3) { int v4; // r0 if ( *((_DWORD *)off_D13E0C + 1) > a2 ) { v4 = *((_DWORD *)off_D13E10 + 118); if ( v4 != 0 ) { if ( asd_reg_read_11B00(a1: v4, a2, a3) != 0 ) { asd_tbl_get_D4238C(a1: a2); __asm { SVC 0x7B ; '{' } } } else { asd_tbl_get_D4238C(a1: a2); __asm { SVC 0x7B ; '{' } } } return 0; } /* ==== asd_reg_read_13AC4 [tier=EXACT size=62] ==== */ // Display-block register accessor: 2 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_13AC4(int a1, int a2, __int16 a3) { int v3; // r0 v3 = *((_DWORD *)off_D13E88 + 118); if ( v3 != 0 ) { if ( asd_reg_read_11B00(a1: v3, a2: 0, a3) != 0 ) __asm { SVC 0x7B ; '{' } } else { __asm { SVC 0x7B ; '{' } } return 0; } /* ==== asd_reg_read_13B04 [tier=EXACT size=110] ==== */ // Display-block register accessor: 2 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_13B04(int a1, unsigned int a2, __int16 a3) { int v4; // r0 if ( *((_DWORD *)off_D13E84 + 15) > a2 ) { v4 = *((_DWORD *)off_D13ECC + 118); if ( v4 != 0 ) { if ( asd_reg_read_11B00(a1: v4, a2, a3) != 0 ) { asd_tbl_get_D423D0(a1: a2); __asm { SVC 0x7B ; '{' } } } else { asd_tbl_get_D423D0(a1: a2); __asm { SVC 0x7B ; '{' } } } return 0; } /* ==== asd_reg_read_13B74 [tier=EXACT size=130] ==== */ // Display-block register accessor: 2 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_13B74(int a1, int a2, unsigned int a3) { int v5; // r0 int _11B00; // r0 int v7; // r1 __int16 v8; // r2 int _11BE4; // r0 if ( *((_DWORD *)off_D13F40 + 2) > a3 ) { v5 = *((_DWORD *)off_D13F44 + 118); if ( v5 != 0 ) { _11B00 = asd_reg_read_11B00(a1: v5, a2, a3); if ( a1 == 0 && _11B00 != 0 || (_11BE4 = asd_reg_read_11BE4(a1: _11B00, a2: v7, a3: v8), (unsigned int)(a1 - 1) <= 1) && _11BE4 != 0 ) { asd_lookup_by_class(a1, a2: a3); __asm { SVC 0x7B ; '{' } } } else { asd_lookup_by_class(a1, a2: a3); __asm { SVC 0x7B ; '{' } } } return 0; } /* ==== asd_reg_read_13B74_cfg0 [tier=EXACT size=44] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_13B74. One of 0 near-identical siblings. int __fastcall asd_reg_read_13B74_cfg0() { _DWORD *v0; // r5 unsigned int v1; // r4 _DWORD *v2; // r6 __int16 _13B74; // r0 v0 = off_D02890; v1 = 0; v2 = off_D02894; while ( v1 < v0[3] ) { _13B74 = asd_reg_read_13B74(a1: 0, a2: v2[6], a3: v1++); if ( (_13B74 & 0x101) == 0x101 ) return 1; } return 0; } /* ==== asd_reg_read_13B74_cfg1 [tier=EXACT size=54] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_13B74. One of 0 near-identical siblings. int __fastcall asd_reg_read_13B74_cfg1(unsigned int a1) { int v3; // r5 if ( a1 > 8 ) return 5; v3 = 0; if ( asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D075B0 + 4), a3: a1) << 31 != 0 ) return 19; if ( *(_BYTE *)(3 * a1 + dword_D072C8 + 1) == 0 ) return 19; return v3; } /* ==== asd_reg_read_13B74_cfg2 [tier=EXACT size=42] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_13B74. One of 0 near-identical siblings. int __fastcall asd_reg_read_13B74_cfg2(int a1) { unsigned int v1; // r2 int result; // r0 if ( a1 == 0 ) return 2; v1 = *(_DWORD *)(a1 + 20); if ( *((_DWORD *)off_D0786C + 3) <= v1 ) return 2; result = (asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D07870 + 9), a3: v1) & (dword_D07508 + 4)) - dword_D07508; if ( result != 0 ) return 11; return result; } /* ==== asd_reg_read_13B74_cfg3 [tier=EXACT size=50] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_13B74. One of 0 near-identical siblings. int __fastcall asd_reg_read_13B74_cfg3(int a1, _BYTE *a2, _BYTE *a3) { unsigned int v5; // r2 int v6; // r6 unsigned int v7; // r0 *a2 = 0; *a3 = 0; if ( a1 == 0 ) return 2; v5 = *(_DWORD *)(a1 + 20); if ( *((_DWORD *)off_D08088 + 3) <= v5 ) return 2; v6 = 0; v7 = (unsigned int)asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D0808C + 20), a3: v5) >> 8; *a2 = v7; *a3 = v7; return v6; } /* ==== asd_reg_read_13BF8 [tier=EXACT size=110] ==== */ // Display-block register accessor: 2 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_13BF8(int a1, unsigned int a2, __int16 a3) { int v4; // r0 if ( *((_DWORD *)off_D13FD0 + 6) > a2 ) { v4 = *((_DWORD *)off_D13F44 + 118); if ( v4 != 0 ) { if ( asd_reg_read_11BE4(a1: v4, a2, a3) != 0 ) { asd_tbl_get_D423A8(a1: a2); __asm { SVC 0x7B ; '{' } } } else { asd_tbl_get_D423A8(a1: a2); __asm { SVC 0x7B ; '{' } } } return 0; } /* ==== asd_reg_read_13C68 [tier=EXACT size=110] ==== */ // Display-block register accessor: 2 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_13C68(int a1, unsigned int a2, __int16 a3) { int v4; // r0 if ( *((_DWORD *)off_D14024 + 6) > a2 ) { v4 = *((_DWORD *)off_D13F44 + 118); if ( v4 != 0 ) { if ( asd_reg_read_11BE4(a1: v4, a2, a3) != 0 ) { asd_tbl_get_D423AC(a1: a2); __asm { SVC 0x7B ; '{' } } } else { asd_tbl_get_D423AC(a1: a2); __asm { SVC 0x7B ; '{' } } } return 0; } /* ==== asd_reg_read_13CDC [tier=EXACT size=66] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_13CDC(int a1, unsigned int a2, __int16 a3) { unsigned int v3; // r0 v3 = *((_DWORD *)off_D140A8 + 5); if ( v3 > a2 && asd_reg_read_11BE4(a1: v3, a2, a3) != 0 ) { asd_tbl_get_D423E0(a1: a2); __asm { SVC 0x7B ; '{' } } return 0; } /* ==== asd_reg_read_13D24 [tier=EXACT size=110] ==== */ // Display-block register accessor: 2 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_13D24(int a1, unsigned int a2, __int16 a3) { int v4; // r0 if ( *((_DWORD *)off_D1411C + 3) > a2 ) { v4 = *((_DWORD *)off_D14120 + 118); if ( v4 != 0 ) { if ( asd_reg_read_11B00(a1: v4, a2, a3) != 0 ) { asd_tbl_get_D423B8(a1: a2); __asm { SVC 0x7B ; '{' } } } else { asd_tbl_get_D423B8(a1: a2); __asm { SVC 0x7B ; '{' } } } return 0; } /* ==== asd_reg_read_13D24_cfg0 [tier=EXACT size=26] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_13D24. One of 0 near-identical siblings. int __fastcall asd_reg_read_13D24_cfg0(unsigned int a1, int a2, __int16 a3) { bool v3; // zf int result; // r0 v3 = asd_reg_read_13D24(a1: *((_DWORD *)off_D06FF0 + 43), a2: a1, a3) << 31 == 0; result = 0; if ( v3 ) return 19; return result; } /* ==== asd_reg_read_13D24_cfg1 [tier=EXACT size=52] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_13D24. One of 0 near-identical siblings. int __fastcall asd_reg_read_13D24_cfg1(unsigned int a1, int a2, __int16 a3) { int result; // r0 if ( a1 > 0x3F ) return 5; if ( asd_reg_read_13D24(a1: *((_DWORD *)off_D06FF0 + 43), a2: a1, a3) << 31 != 0 ) return 0; result = *(_DWORD *)(dword_D06D90 + 96 * a1 + 92) - 1; if ( *(_DWORD *)(dword_D06D90 + 96 * a1 + 92) != 1 ) return 19; return result; } /* ==== asd_reg_read_13D9C [tier=EXACT size=110] ==== */ // Display-block register accessor: 2 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_13D9C(int a1, unsigned int a2, __int16 a3) { int v4; // r0 if ( *((_DWORD *)off_D1411C + 8) > a2 ) { v4 = *((_DWORD *)off_D14120 + 118); if ( v4 != 0 ) { if ( asd_reg_read_11B00(a1: v4, a2, a3) != 0 ) { asd_tbl_get_D423B4(a1: a2); __asm { SVC 0x7B ; '{' } } } else { asd_tbl_get_D423B4(a1: a2); __asm { SVC 0x7B ; '{' } } } return 0; } /* ==== asd_reg_read_13E14 [tier=EXACT size=110] ==== */ // Display-block register accessor: 2 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_13E14(int a1, unsigned int a2, __int16 a3) { int v4; // r0 if ( *((_DWORD *)off_D1411C + 1) > a2 ) { v4 = *((_DWORD *)off_D14120 + 118); if ( v4 != 0 ) { if ( asd_reg_read_11B00(a1: v4, a2, a3) != 0 ) { asd_tbl_get_D423BC(a1: a2); __asm { SVC 0x7B ; '{' } } } else { asd_tbl_get_D423BC(a1: a2); __asm { SVC 0x7B ; '{' } } } return 0; } /* ==== asd_reg_read_13E8C [tier=EXACT size=62] ==== */ // Display-block register accessor: 2 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_13E8C(int a1, int a2, __int16 a3) { int v3; // r0 v3 = *((_DWORD *)off_D14120 + 118); if ( v3 != 0 ) { if ( asd_reg_read_11B00(a1: v3, a2: 0, a3) != 0 ) __asm { SVC 0x7B ; '{' } } else { __asm { SVC 0x7B ; '{' } } return 0; } /* ==== asd_reg_read_13ED0 [tier=EXACT size=112] ==== */ // Display-block register accessor: 2 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_13ED0(int a1, unsigned int a2, __int16 a3) { int v4; // r0 if ( a1 != 0 && *((_DWORD *)off_D1411C + 1) > a2 ) { v4 = *((_DWORD *)off_D14120 + 118); if ( v4 != 0 ) { if ( asd_reg_read_11B00(a1: v4, a2, a3) != 0 ) { asd_tbl_get_D423C0(a1: a2); __asm { SVC 0x7B ; '{' } } } else { asd_tbl_get_D423C0(a1: a2); __asm { SVC 0x7B ; '{' } } } return 0; } /* ==== asd_reg_read_13F48 [tier=EXACT size=136] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). unsigned int __fastcall asd_reg_read_13F48(int a1, unsigned int a2, unsigned int a3, _DWORD *a4) { unsigned int result; // r0 unsigned int v7; // r3 bool v8; // cc int D423D8; // r6 unsigned int v10; // r8 unsigned int D423DC; // r1 unsigned int v12; // r2 if ( a4 == nullptr ) return 2; *a4 = 0; if ( a1 == 0 ) return 7; result = 30; v7 = *((_DWORD *)off_D1411C + 17); v8 = v7 > a2; if ( v7 > a2 ) v8 = *((_DWORD *)off_D1411C + 18) > a3; if ( v8 ) { D423D8 = asd_tbl_get_D423D8(a1: a2); v10 = ~a1; D423DC = asd_tbl_get_D423DC(a1: a3); result = 0; v12 = 0; if ( D423DC > ~D423D8 || (v12 = D423DC + D423D8, D423DC + D423D8 <= v10) ) { if ( (v12 + a1) >> 30 != 0 ) goto LABEL_18; if ( D423DC > ~D423D8 ) { v12 = 0; goto LABEL_17; } v12 = D423DC + D423D8; } if ( v12 > v10 ) { result = 0; goto LABEL_18; } LABEL_17: result = 4 * (v12 + a1); LABEL_18: __asm { SVC 0x7B ; '{' } if ( result != 0 ) return 30; } return result; } /* ==== asd_reg_read_13FD4 [tier=EXACT size=78] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_13FD4(int a1, unsigned int a2, _DWORD *a3) { unsigned int D423D8; // r0 int v5; // r1 int result; // r0 if ( a3 == nullptr ) return 2; *a3 = 0; if ( a1 == 0 ) return 7; if ( *((_DWORD *)off_D1411C + 17) <= a2 ) return 30; D423D8 = asd_tbl_get_D423D8(a1: a2); v5 = 4 * (D423D8 + a1); if ( (D423D8 + a1) >> 30 != 0 ) v5 = 0; if ( D423D8 > ~a1 ) v5 = 0; result = v5; __asm { SVC 0x7B ; '{' } if ( v5 != 0 ) return 30; return result; } /* ==== asd_reg_read_14028 [tier=EXACT size=128] ==== */ // Display-block register accessor: 3 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_14028(int a1, unsigned int a2, unsigned __int8 a3) { if ( *((_DWORD *)off_D1411C + 1) > a2 ) { if ( *((_DWORD *)off_D14120 + 118) != 0 ) { __asm { SVC 0x7B ; '{' } if ( a3 << 31 == 0 ) { asd_tbl_get_D423C4(a1: a2); __asm { SVC 0x7B ; '{' } } } else { asd_tbl_get_D423C4(a1: a2); __asm { SVC 0x7B ; '{' } } } return 0; } /* ==== asd_reg_read_140AC [tier=EXACT size=110] ==== */ // Display-block register accessor: 2 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_140AC(int a1, unsigned int a2, __int16 a3) { int v4; // r0 if ( *((_DWORD *)off_D1411C + 7) > a2 ) { v4 = *((_DWORD *)off_D14120 + 118); if ( v4 != 0 ) { if ( asd_reg_read_11B00(a1: v4, a2, a3) != 0 ) { asd_tbl_get_D423B0(a1: a2); __asm { SVC 0x7B ; '{' } } } else { asd_tbl_get_D423B0(a1: a2); __asm { SVC 0x7B ; '{' } } } return 0; } /* ==== asd_reg_read_14124_cfg0 [tier=EXACT size=46] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_14124. One of 0 near-identical siblings. BOOL __fastcall asd_reg_read_14124_cfg0(unsigned int a1) { int v2; // r4 if ( a1 > 1 ) return false; v2 = 4; if ( a1 == 0 ) v2 = 2; return (sub_D14124() & v2) != 0; } /* ==== asd_reg_read_14142_cfg0 [tier=EXACT size=46] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_14142. One of 0 near-identical siblings. BOOL __fastcall asd_reg_read_14142_cfg0(unsigned int a1) { int v2; // r4 if ( a1 > 1 ) return false; v2 = 4; if ( a1 == 0 ) v2 = 2; return (sub_D14142() & v2) != 0; } /* ==== asd_reg_read_1419C_cfg0 [tier=EXACT size=40] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_1419C. One of 0 near-identical siblings. int __fastcall asd_reg_read_1419C_cfg0(unsigned int a1) { if ( a1 <= 1 ) return sub_D1419C() & 1; else return 0; } /* ==== asd_reg_read_141BA_cfg0 [tier=EXACT size=34] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_read_141BA. One of 0 near-identical siblings. int __fastcall asd_reg_read_141BA_cfg0(unsigned int a1) { if ( a1 > 1 ) return 0; else return sub_D141BA() & 1; } /* ==== asd_reg_read_15C78 [tier=EXACT size=30] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_15C78(int a1) { int result; // r0 result = 0; if ( a1 == 0 ) { __asm { SVC 0x7B ; '{' } return 0; } return result; } /* ==== asd_reg_read_15CF4 [tier=EXACT size=42] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_15CF4(unsigned int a1) { int result; // r0 result = 0; if ( a1 <= 1 ) { __asm { SVC 0x7B ; '{' } return 0; } return result; } /* ==== asd_reg_read_15D24 [tier=EXACT size=30] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_15D24(int a1) { int result; // r0 result = 0; if ( a1 == 0 ) { __asm { SVC 0x7B ; '{' } return 0; } return result; } /* ==== asd_reg_read_15D48 [tier=EXACT size=30] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_15D48(int a1) { int result; // r0 result = 0; if ( a1 == 0 ) { __asm { SVC 0x7B ; '{' } return 0; } return result; } /* ==== asd_reg_read_15D68 [tier=EXACT size=30] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_15D68(int a1) { int result; // r0 result = 0; if ( a1 == 0 ) { __asm { SVC 0x7B ; '{' } return 0; } return result; } /* ==== asd_reg_read_15DF0 [tier=EXACT size=18] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int asd_reg_read_15DF0() { int v5; // [sp+0h] [bp-4h] __asm { SVC 0x7B ; '{' } return v5; } /* ==== asd_reg_read_15E02 [tier=EXACT size=18] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int asd_reg_read_15E02() { __asm { SVC 0x7B ; '{' } return 3; } /* ==== asd_reg_read_15FC4 [tier=EXACT size=18] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_15FC4() { __asm { SVC 0x7B ; '{' } return dword_D15FEC; } /* ==== asd_reg_read_15FD8 [tier=EXACT size=18] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_15FD8() { __asm { SVC 0x7B ; '{' } return dword_D15FEC; } /* ==== asd_reg_read_16290 [tier=EXACT size=48] ==== */ // Display-block register accessor: 4 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_16290() { __asm { SVC 0x7B ; '{' } __asm { SVC 0x7B ; '{' } __asm { SVC 0x7B ; '{' } __asm { SVC 0x7B ; '{' } return dword_D1632C; } /* ==== asd_reg_read_162C0 [tier=EXACT size=48] ==== */ // Display-block register accessor: 4 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_162C0() { __asm { SVC 0x7B ; '{' } __asm { SVC 0x7B ; '{' } __asm { SVC 0x7B ; '{' } __asm { SVC 0x7B ; '{' } return dword_D1632C; } /* ==== asd_reg_read_162F0 [tier=EXACT size=48] ==== */ // Display-block register accessor: 4 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_162F0() { __asm { SVC 0x7B ; '{' } __asm { SVC 0x7B ; '{' } __asm { SVC 0x7B ; '{' } __asm { SVC 0x7B ; '{' } return dword_D1632C; } /* ==== asd_reg_read_17C0C [tier=EXACT size=38] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_17C0C(int a1) { int v1; // r4 v1 = 0; if ( a1 == 0 && asd_feature_level_check(a1: 14, a2: 0) != 0 ) { __asm { SVC 0x7B ; '{' } return 1; } return v1; } /* ==== asd_reg_read_18878 [tier=EXACT size=30] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_18878(int a1) { int result; // r0 result = 0; if ( a1 == 0 ) { __asm { SVC 0x7B ; '{' } return 0; } return result; } /* ==== asd_reg_read_18898 [tier=EXACT size=36] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_18898(int a1) { if ( a1 == 0 && asd_feature_level_check(a1: 14, a2: 0) != 0 ) __asm { SVC 0x7B ; '{' } return 0; } /* ==== asd_reg_read_188BC [tier=EXACT size=30] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_188BC(int a1) { int result; // r0 result = 0; if ( a1 == 0 ) { __asm { SVC 0x7B ; '{' } return 0; } return result; } /* ==== asd_reg_read_BE08 [tier=EXACT size=100] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_BE08(unsigned int a1, _DWORD *a2) { int v2; // r3 int v3; // r5 unsigned int v4; // r4 int v5; // r2 unsigned int v6; // r6 int result; // r0 if ( a2 == nullptr ) return 2; v2 = *((_DWORD *)off_D0BFB4 + 126); *a2 = 0; if ( v2 == 0 ) return 7; if ( *((_DWORD *)off_D0BE6C + 16) <= a1 ) return 29; v3 = *((_DWORD *)off_D0BE6C + 37); v4 = ~v2; v5 = 0; if ( v3 != 0 ) { v6 = *(_DWORD *)(v3 + 4 * a1); if ( v6 > v4 ) goto LABEL_14; } else { v6 = 0; } if ( (v6 + v2) >> 30 != 0 ) goto LABEL_18; if ( v3 == 0 ) { v6 = 0; goto LABEL_17; } v6 = *(_DWORD *)(v3 + 4 * a1); LABEL_14: if ( v6 > v4 ) { v5 = 0; goto LABEL_18; } LABEL_17: v5 = 4 * (v6 + v2); LABEL_18: result = v5; __asm { SVC 0x7B ; '{' } if ( v5 != 0 ) return 29; return result; } /* ==== asd_reg_read_BE08_asic5592 [tier=EXACT size=62] ==== */ // Variant of the gated register read that only admits device 5592 revision 147. int __fastcall asd_reg_read_BE08_asic5592(unsigned int a1, _DWORD *a2) { int v4; // r6 bool v5; // zf _DWORD v7[8]; // [sp+4h] [bp+0h] BYREF v4 = asd_asic_family_lookup(a1: (int)v7); if ( asd_asic_family_lookup(a1: (int)v7) == 0 ) { v5 = v7[0] == 5592; if ( v7[0] == 5592 ) v5 = v7[1] == 147; if ( v5 ) return asd_reg_read_BE08(a1, a2); else return 7; } return v4; } /* ==== asd_reg_read_C620 [tier=EXACT size=220] ==== */ // Display-block register accessor: 8 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_C620() { unsigned int *v0; // r7 unsigned int v1; // r5 int *i; // r6 unsigned int v3; // r0 int j; // r6 v0 = (unsigned int *)off_D0C700; v1 = 0; for ( i = &(*off_D0C6FC)[2]; ; i += 6 ) { v3 = *v0; if ( *v0 >= 6 ) v3 = 6; if ( v1 >= v3 ) break; if ( asd_test_bit(a1: v0[1], a2: v1) != 0 ) { if ( v1 <= 5 ) { for ( j = 100; j != 0; --j ) __asm { SVC 0x7B ; '{' } } return 0; } ++v1; } return 0; } /* ==== asd_reg_read_C704 [tier=EXACT size=90] ==== */ // Display-block register accessor: 5 x SVC 0x7B (register read), 0 x SVC 0x7C (MMIO write). int __fastcall asd_reg_read_C704() { int i; // r5 for ( i = 100; i != 0; --i ) __asm { SVC 0x7B ; '{' } return 0; } /* ==== asd_reg_rw_15E14 [tier=EXACT size=82] ==== */ // Display-block register accessor: 3 x SVC 0x7B (register read), 2 x SVC 0x7C (MMIO write). int __fastcall asd_reg_rw_15E14(int a1, int a2, unsigned int a3) { char v7; // r0 if ( a3 == 0 ) return 2; __asm { SVC 0x7B ; '{' } __asm { SVC 0x7C ; '|' } __asm { SVC 0x7B ; '{' } __asm { SVC 0x7C ; '|' } __asm { SVC 0x7B ; '{' } v7 = a3 & a2; if ( (a3 & a2) != 0 ) v7 = 1; *(_BYTE *)a3 = v7; return 0; } /* ==== asd_reg_rw_15E66 [tier=EXACT size=38] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 1 x SVC 0x7C (MMIO write). void __fastcall asd_reg_rw_15E66() { __asm { SVC 0x7B ; '{' } __asm { SVC 0x7C ; '|' } } /* ==== asd_reg_rw_15FF0 [tier=EXACT size=178] ==== */ // Display-block register accessor: 4 x SVC 0x7B (register read), 8 x SVC 0x7C (MMIO write). __int64 __fastcall asd_reg_rw_15FF0() { int v0; // r3 v0 = 0; __asm { SVC 0x7B ; '{' } __asm { SVC 0x7B ; '{' } __asm { SVC 0x7B ; '{' } __asm { SVC 0x7B ; '{' } while ( v0 != 4 ) ++v0; return 0; } /* ==== asd_reg_rw_160A4 [tier=EXACT size=90] ==== */ // Display-block register accessor: 2 x SVC 0x7B (register read), 4 x SVC 0x7C (MMIO write). int __fastcall asd_reg_rw_160A4() { int v0; // r3 int result; // r0 v0 = 0; __asm { SVC 0x7B ; '{' } result = dword_D16324; __asm { SVC 0x7B ; '{' } while ( v0 != 4 ) { result = 0; ++v0; } return result; } /* ==== asd_reg_rw_16100 [tier=EXACT size=178] ==== */ // Display-block register accessor: 4 x SVC 0x7B (register read), 8 x SVC 0x7C (MMIO write). __int64 __fastcall asd_reg_rw_16100() { int v0; // r3 v0 = 0; __asm { SVC 0x7B ; '{' } __asm { SVC 0x7B ; '{' } __asm { SVC 0x7B ; '{' } __asm { SVC 0x7B ; '{' } while ( v0 != 4 ) ++v0; return 0; } /* ==== asd_reg_rw_161BC [tier=EXACT size=178] ==== */ // Display-block register accessor: 4 x SVC 0x7B (register read), 8 x SVC 0x7C (MMIO write). __int64 __fastcall asd_reg_rw_161BC() { int v0; // r3 v0 = 0; __asm { SVC 0x7B ; '{' } __asm { SVC 0x7B ; '{' } __asm { SVC 0x7B ; '{' } __asm { SVC 0x7B ; '{' } while ( v0 != 4 ) ++v0; return 0; } /* ==== asd_reg_rw_19798 [tier=EXACT size=124] ==== */ // Display-block register accessor: 1 x SVC 0x7B (register read), 2 x SVC 0x7C (MMIO write). int __fastcall asd_reg_rw_19798(int a1, unsigned int a2, int a3, unsigned __int8 a4) { int result; // r0 unsigned int D423C4; // r0 int v11; // r1 unsigned int v12; // r0 int v13; // r1 result = *((_DWORD *)off_D19814 + 1); if ( result > a2 ) { if ( *((_DWORD *)off_D19818 + 118) != 0 ) { __asm { SVC 0x7B ; '{' } result = a4 << 31; if ( result == 0 ) { D423C4 = asd_tbl_get_D423C4(a1: a2); v11 = 4 * (D423C4 + a1); if ( (D423C4 + a1) >> 30 != 0 ) v11 = 0; if ( D423C4 > ~a1 ) v11 = 0; __asm { SVC 0x7C ; '|' } return v11; } } else { v12 = asd_tbl_get_D423C4(a1: a2); v13 = 4 * (v12 + a1); if ( (v12 + a1) >> 30 != 0 ) v13 = 0; if ( v12 > ~a1 ) v13 = 0; __asm { SVC 0x7C ; '|' } return v13; } } return result; } /* ==== asd_reg_set_bit1_wait [tier=EXACT size=66] ==== */ // Sets bit 1 of a display register and polls (bounded ~499 iterations) until it reads back. int __fastcall asd_reg_set_bit1_wait(unsigned int a1) { _DWORD *v1; // r5 int result; // r0 int v4; // r6 v1 = off_D16AE8; result = asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D16AE8 + 40), a3: a1); if ( (result & 2) == 0 ) { asd_reg_write_1946C(a1: 0, a2: v1[40], a3: a1); v4 = -499; do { result = asd_reg_read_13B74(a1: 0, a2: v1[40], a3: a1); if ( v4 == 0 ) break; ++v4; result &= 2u; } while ( result == 0 ); } return result; } /* ==== asd_reg_set_bit2_wait [tier=EXACT size=66] ==== */ // Sets bit 2 of a display register and polls (bounded ~499 iterations) until it reads back. int __fastcall asd_reg_set_bit2_wait(unsigned int a1) { _DWORD *v1; // r5 int result; // r0 int v4; // r6 v1 = off_D16AE8; result = asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D16AE8 + 40), a3: a1); if ( (result & 4) == 0 ) { asd_reg_write_1946C(a1: 0, a2: v1[40], a3: a1); v4 = -499; do { result = asd_reg_read_13B74(a1: 0, a2: v1[40], a3: a1); if ( v4 == 0 ) break; ++v4; result &= 4u; } while ( result == 0 ); } return result; } /* ==== asd_reg_write_12C28 [tier=EXACT size=34] ==== */ // Display-block register accessor: 0 x SVC 0x7B (register read), 3 x SVC 0x7C (MMIO write). int __fastcall asd_reg_write_12C28() { __asm { SVC 0x7C ; '|' } __asm { SVC 0x7C ; '|' } __asm { SVC 0x7C ; '|' } return 0; } /* ==== asd_reg_write_12C28_cfg0 [tier=EXACT size=44] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_write_12C28. One of 0 near-identical siblings. int __fastcall asd_reg_write_12C28_cfg0() { return asd_reg_write_12C28(); } /* ==== asd_reg_write_12C28_cfg1 [tier=EXACT size=44] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_write_12C28. One of 0 near-identical siblings. int __fastcall asd_reg_write_12C28_cfg1() { return asd_reg_write_12C28(); } /* ==== asd_reg_write_12C28_cfg2 [tier=EXACT size=44] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_write_12C28. One of 0 near-identical siblings. int __fastcall asd_reg_write_12C28_cfg2() { return asd_reg_write_12C28(); } /* ==== asd_reg_write_12C28_cfg3 [tier=EXACT size=44] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_write_12C28. One of 0 near-identical siblings. int __fastcall asd_reg_write_12C28_cfg3() { return asd_reg_write_12C28(); } /* ==== asd_reg_write_12C28_cfg4 [tier=EXACT size=44] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_write_12C28. One of 0 near-identical siblings. int __fastcall asd_reg_write_12C28_cfg4() { return asd_reg_write_12C28(); } /* ==== asd_reg_write_12C28_cfg5 [tier=EXACT size=44] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_write_12C28. One of 0 near-identical siblings. int __fastcall asd_reg_write_12C28_cfg5() { return asd_reg_write_12C28(); } /* ==== asd_reg_write_12C28_cfg6 [tier=EXACT size=44] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_write_12C28. One of 0 near-identical siblings. int __fastcall asd_reg_write_12C28_cfg6() { return asd_reg_write_12C28(); } /* ==== asd_reg_write_16330 [tier=EXACT size=66] ==== */ // Display-block register accessor: 0 x SVC 0x7B (register read), 8 x SVC 0x7C (MMIO write). __int64 __fastcall asd_reg_write_16330() { __asm { SVC 0x7C ; '|' } __asm { SVC 0x7C ; '|' } __asm { SVC 0x7C ; '|' } __asm { SVC 0x7C ; '|' } __asm { SVC 0x7C ; '|' } __asm { SVC 0x7C ; '|' } __asm { SVC 0x7C ; '|' } __asm { SVC 0x7C ; '|' } return (unsigned int)dword_D16380; } /* ==== asd_reg_write_16384 [tier=EXACT size=54] ==== */ // Display-block register accessor: 0 x SVC 0x7B (register read), 4 x SVC 0x7C (MMIO write). __int64 __fastcall asd_reg_write_16384() { int v0; // r3 __int64 result; // r0 v0 = 0; while ( v0 != 4 ) { __asm { SVC 0x7C ; '|' } __asm { SVC 0x7C ; '|' } ++v0; __asm { SVC 0x7C ; '|' } result = (unsigned int)dword_D163C0; __asm { SVC 0x7C ; '|' } } return result; } /* ==== asd_reg_write_163C8 [tier=EXACT size=202] ==== */ // Display-block register accessor: 0 x SVC 0x7B (register read), 2 x SVC 0x7C (MMIO write). int __fastcall asd_reg_write_163C8() { int v0; // r5 int result; // r0 int i; // r4 _DWORD v7[32]; // [sp+0h] [bp+0h] v7[30] = dword_D16494; v7[31] = dword_D16494 + 0x2000; v7[28] = dword_D16498; v7[29] = dword_D16498 + 0x2000; v7[26] = dword_D1649C; v7[27] = dword_D1649C + 0x2000; v7[24] = dword_D164A0; v7[25] = dword_D164A0 + 0x2000; v7[22] = dword_D16534; v7[23] = dword_D16534 + 0x2000; v7[20] = dword_D16538; v7[21] = dword_D16538 + 0x2000; v7[18] = dword_D1653C; v7[19] = dword_D1653C + 0x2000; v7[16] = dword_D16540; v7[17] = dword_D16540 + 0x2000; v7[15] = dword_D164A4; v7[14] = dword_D16494 + 4; v7[13] = dword_D164A8; v7[12] = dword_D16498 + 4; v7[11] = dword_D164AC; v7[10] = dword_D1649C + 4; v7[9] = dword_D164B0; v7[8] = dword_D164A0 + 4; v7[7] = dword_D16544; v7[6] = dword_D16534 + 4; v7[5] = dword_D16548; v7[4] = dword_D16538 + 4; v0 = 0; v7[3] = dword_D1654C; v7[2] = dword_D1653C + 4; v7[1] = dword_D16550; result = dword_D16540 + 4; v7[0] = dword_D16540 + 4; while ( v0 != 16 ) { for ( i = 0; i != 4; ++i ) { __asm { SVC 0x7C ; '|' } result = v7[v0]; __asm { SVC 0x7C ; '|' } } ++v0; } return result; } /* ==== asd_reg_write_164B4 [tier=EXACT size=126] ==== */ // Display-block register accessor: 0 x SVC 0x7B (register read), 2 x SVC 0x7C (MMIO write). int __fastcall asd_reg_write_164B4() { int v0; // r5 int result; // r0 int i; // r4 _DWORD v7[16]; // [sp+0h] [bp+0h] v7[14] = dword_D16534; v0 = 0; v7[15] = dword_D16534 + 0x2000; v7[6] = dword_D16534 + 4; v7[13] = dword_D16538 + 0x2000; v7[11] = dword_D1653C + 0x2000; v7[5] = dword_D16548; v7[4] = dword_D16538 + 4; v7[3] = dword_D1654C; v7[9] = dword_D16540 + 0x2000; v7[2] = dword_D1653C + 4; v7[1] = dword_D16550; result = dword_D16540 + 4; v7[12] = dword_D16538; v7[10] = dword_D1653C; v7[8] = dword_D16540; v7[7] = dword_D16544; v7[0] = dword_D16540 + 4; while ( v0 != 8 ) { for ( i = 0; i != 4; ++i ) { __asm { SVC 0x7C ; '|' } result = v7[v0]; __asm { SVC 0x7C ; '|' } } ++v0; } return result; } /* ==== asd_reg_write_16554 [tier=EXACT size=100] ==== */ // Display-block register accessor: 0 x SVC 0x7B (register read), 2 x SVC 0x7C (MMIO write). unsigned int __fastcall asd_reg_write_16554() { unsigned int *v0; // r4 unsigned int v1; // r6 int v2; // r1 unsigned int result; // r0 unsigned int v4; // r7 int i; // r4 int j; // r6 _DWORD v11[24]; // [sp+0h] [bp-C0h] BYREF _BYTE v12[96]; // [sp+60h] [bp-60h] BYREF asd_build_reg_addr_table_v2(a1: (int)v12, a2: (int)v11); v0 = (unsigned int *)off_D165B8; v1 = 6; v2 = *(_DWORD *)off_D165B8; if ( *(_DWORD *)off_D165B8 >= 6u ) v2 = 6; result = asd_count_bits_below(a1: *((_DWORD *)off_D165B8 + 1), a2: v2); if ( *v0 < 6 ) v1 = *v0; if ( result <= v1 ) { v4 = 4 * result; for ( i = 0; i != v4; ++i ) { for ( j = 0; j != 4; ++j ) { __asm { SVC 0x7C ; '|' } result = v11[i]; __asm { SVC 0x7C ; '|' } } } } return result; } /* ==== asd_reg_write_165BC [tier=EXACT size=126] ==== */ // Display-block register accessor: 0 x SVC 0x7B (register read), 2 x SVC 0x7C (MMIO write). int __fastcall asd_reg_write_165BC() { int v0; // r5 int result; // r0 int i; // r4 _DWORD v7[16]; // [sp+0h] [bp+0h] v7[7] = dword_D168C4; v0 = 0; v7[5] = dword_D168C8; v7[3] = dword_D168CC; v7[1] = dword_D168D0; v7[14] = dword_D168BC; v7[15] = dword_D168BC + 4096; v7[6] = dword_D168BC + 4; v7[13] = dword_D168C0 + 4096; v7[4] = dword_D168C0 + 4; v7[11] = dword_D16940 + 4096; v7[2] = dword_D16940 + 4; result = dword_D16938 + 4; v7[12] = dword_D168C0; v7[10] = dword_D16940; v7[8] = dword_D16938; v7[9] = dword_D16938 + 4096; v7[0] = dword_D16938 + 4; while ( v0 != 8 ) { for ( i = 0; i != 4; ++i ) { __asm { SVC 0x7C ; '|' } result = v7[v0]; __asm { SVC 0x7C ; '|' } } ++v0; } return result; } /* ==== asd_reg_write_1663C [tier=EXACT size=108] ==== */ // Display-block register accessor: 0 x SVC 0x7B (register read), 2 x SVC 0x7C (MMIO write). unsigned int __fastcall asd_reg_write_1663C(int a1) { int v1; // r1 unsigned int result; // r0 int i; // r4 int j; // r6 int v9; // [sp+4h] [bp-84h] BYREF _DWORD v10[16]; // [sp+8h] [bp-80h] BYREF _BYTE v11[64]; // [sp+48h] [bp-40h] BYREF v9 = 0; v1 = 8 * (a1 == 30); if ( a1 == 29 ) v1 = 4; asd_build_reg_addr_table(a1: v1, a2: (int)v11, a3: (int)v10, a4: &v9); result = v9; if ( v9 <= (unsigned int)dword_D166A8 ) { for ( i = 0; i != 2 * v9; ++i ) { for ( j = 0; j != 4; ++j ) { __asm { SVC 0x7C ; '|' } result = v10[i]; __asm { SVC 0x7C ; '|' } } } } return result; } /* ==== asd_reg_write_166AC [tier=EXACT size=202] ==== */ // Display-block register accessor: 0 x SVC 0x7B (register read), 2 x SVC 0x7C (MMIO write). int __fastcall asd_reg_write_166AC() { int v0; // r5 int result; // r0 int i; // r4 _DWORD v7[32]; // [sp+0h] [bp+0h] v7[30] = dword_D16778; v7[31] = dword_D16778 + 4096; v7[28] = dword_D1677C; v7[29] = dword_D1677C + 4096; v7[26] = dword_D1682C; v7[27] = dword_D1682C + 4096; v7[24] = dword_D16830; v7[25] = dword_D16830 + 4096; v7[22] = dword_D168BC; v7[23] = dword_D168BC + 4096; v7[20] = dword_D168C0; v7[21] = dword_D168C0 + 4096; v7[18] = dword_D16940; v7[19] = dword_D16940 + 4096; v7[16] = dword_D16938; v7[17] = dword_D16938 + 4096; v7[15] = dword_D16780; v7[14] = dword_D16778 + 4; v7[13] = dword_D16784; v7[12] = dword_D1677C + 4; v7[11] = dword_D16834; v7[10] = dword_D1682C + 4; v7[9] = dword_D16838; v7[8] = dword_D16830 + 4; v7[7] = dword_D168C4; v7[6] = dword_D168BC + 4; v7[5] = dword_D168C8; v7[4] = dword_D168C0 + 4; v0 = 0; v7[3] = dword_D168CC; v7[2] = dword_D16940 + 4; v7[1] = dword_D168D0; result = dword_D16938 + 4; v7[0] = dword_D16938 + 4; while ( v0 != 16 ) { for ( i = 0; i != 4; ++i ) { __asm { SVC 0x7C ; '|' } result = v7[v0]; __asm { SVC 0x7C ; '|' } } ++v0; } return result; } /* ==== asd_reg_write_16788 [tier=EXACT size=162] ==== */ // Display-block register accessor: 0 x SVC 0x7B (register read), 2 x SVC 0x7C (MMIO write). int __fastcall asd_reg_write_16788() { int result; // r0 int v1; // r5 int i; // r4 _DWORD v7[24]; // [sp+0h] [bp+0h] v7[22] = dword_D1682C; v7[23] = dword_D1682C + 4096; v7[10] = dword_D1682C + 4; v7[21] = dword_D16830 + 4096; v7[19] = dword_D168BC + 4096; v7[9] = dword_D16838; v7[17] = dword_D168C0 + 4096; v7[8] = dword_D16830 + 4; v7[7] = dword_D168C4; v7[15] = dword_D16940 + 4096; v7[6] = dword_D168BC + 4; v7[5] = dword_D168C8; v7[4] = dword_D168C0 + 4; v7[13] = dword_D16938 + 4096; v7[3] = dword_D168CC; v7[11] = dword_D16834; v7[2] = dword_D16940 + 4; v7[1] = dword_D168D0; result = dword_D16938 + 4; v7[12] = dword_D16938; v1 = 0; v7[20] = dword_D16830; v7[18] = dword_D168BC; v7[16] = dword_D168C0; v7[14] = dword_D16940; v7[0] = dword_D16938 + 4; while ( v1 != 12 ) { for ( i = 0; i != 4; ++i ) { __asm { SVC 0x7C ; '|' } result = v7[v1]; __asm { SVC 0x7C ; '|' } } ++v1; } return result; } /* ==== asd_reg_write_1683C [tier=EXACT size=126] ==== */ // Display-block register accessor: 0 x SVC 0x7B (register read), 2 x SVC 0x7C (MMIO write). int __fastcall asd_reg_write_1683C() { int v0; // r5 int result; // r0 int i; // r4 _DWORD v7[16]; // [sp+0h] [bp+0h] v7[14] = dword_D168BC; v0 = 0; v7[15] = dword_D168BC + 4096; v7[6] = dword_D168BC + 4; v7[13] = dword_D168C0 + 4096; v7[11] = dword_D16940 + 4096; v7[5] = dword_D168C8; v7[4] = dword_D168C0 + 4; v7[3] = dword_D168CC; v7[9] = dword_D16938 + 4096; v7[2] = dword_D16940 + 4; v7[1] = dword_D168D0; result = dword_D16938 + 4; v7[12] = dword_D168C0; v7[10] = dword_D16940; v7[8] = dword_D16938; v7[7] = dword_D168C4; v7[0] = dword_D16938 + 4; while ( v0 != 8 ) { for ( i = 0; i != 4; ++i ) { __asm { SVC 0x7C ; '|' } result = v7[v0]; __asm { SVC 0x7C ; '|' } } ++v0; } return result; } /* ==== asd_reg_write_19328 [tier=EXACT size=106] ==== */ // Display-block register accessor: 0 x SVC 0x7B (register read), 2 x SVC 0x7C (MMIO write). int __fastcall asd_reg_write_19328(int a1, unsigned int a2, __int16 a3) { int result; // r0 int v6; // r0 unsigned int D423CC; // r0 int v8; // r1 unsigned int v13; // r0 int v14; // r1 result = *((_DWORD *)off_D196DC + 14); if ( result > a2 ) { v6 = *((_DWORD *)off_D196E0 + 118); if ( v6 != 0 ) { result = asd_reg_read_11B00(a1: v6, a2, a3); if ( result != 0 ) { D423CC = asd_tbl_get_D423CC(a1: a2); v8 = 4 * (D423CC + a1); if ( (D423CC + a1) >> 30 != 0 ) v8 = 0; if ( D423CC > ~a1 ) v8 = 0; result = v8; __asm { SVC 0x7C ; '|' } } } else { v13 = asd_tbl_get_D423CC(a1: a2); v14 = 4 * (v13 + a1); if ( (v13 + a1) >> 30 != 0 ) v14 = 0; if ( v13 > ~a1 ) v14 = 0; __asm { SVC 0x7C ; '|' } return v14; } } return result; } /* ==== asd_reg_write_19394 [tier=EXACT size=106] ==== */ // Display-block register accessor: 0 x SVC 0x7B (register read), 2 x SVC 0x7C (MMIO write). int __fastcall asd_reg_write_19394(int a1, unsigned int a2, __int16 a3) { int result; // r0 int v6; // r0 unsigned int D423C8; // r0 int v8; // r1 unsigned int v13; // r0 int v14; // r1 result = *((_DWORD *)off_D196DC + 13); if ( result > a2 ) { v6 = *((_DWORD *)off_D19720 + 118); if ( v6 != 0 ) { result = asd_reg_read_11B00(a1: v6, a2, a3); if ( result != 0 ) { D423C8 = asd_tbl_get_D423C8(a1: a2); v8 = 4 * (D423C8 + a1); if ( (D423C8 + a1) >> 30 != 0 ) v8 = 0; if ( D423C8 > ~a1 ) v8 = 0; result = v8; __asm { SVC 0x7C ; '|' } } } else { v13 = asd_tbl_get_D423C8(a1: a2); v14 = 4 * (v13 + a1); if ( (v13 + a1) >> 30 != 0 ) v14 = 0; if ( v13 > ~a1 ) v14 = 0; __asm { SVC 0x7C ; '|' } return v14; } } return result; } /* ==== asd_reg_write_19400 [tier=EXACT size=106] ==== */ // Display-block register accessor: 0 x SVC 0x7B (register read), 2 x SVC 0x7C (MMIO write). int __fastcall asd_reg_write_19400(int a1, unsigned int a2, __int16 a3) { int result; // r0 int v6; // r0 unsigned int D423D0; // r0 int v8; // r1 unsigned int v13; // r0 int v14; // r1 result = *((_DWORD *)off_D19790 + 15); if ( result > a2 ) { v6 = *((_DWORD *)off_D19794 + 118); if ( v6 != 0 ) { result = asd_reg_read_11B00(a1: v6, a2, a3); if ( result != 0 ) { D423D0 = asd_tbl_get_D423D0(a1: a2); v8 = 4 * (D423D0 + a1); if ( (D423D0 + a1) >> 30 != 0 ) v8 = 0; if ( D423D0 > ~a1 ) v8 = 0; result = v8; __asm { SVC 0x7C ; '|' } } } else { v13 = asd_tbl_get_D423D0(a1: a2); v14 = 4 * (v13 + a1); if ( (v13 + a1) >> 30 != 0 ) v14 = 0; if ( v13 > ~a1 ) v14 = 0; __asm { SVC 0x7C ; '|' } return v14; } } return result; } /* ==== asd_reg_write_1946C [tier=EXACT size=136] ==== */ // Display-block register accessor: 0 x SVC 0x7B (register read), 2 x SVC 0x7C (MMIO write). int __fastcall asd_reg_write_1946C(int a1, int a2, unsigned int a3) { int result; // r0 int v7; // r0 int _11B00; // r0 int v9; // r1 __int16 v10; // r2 unsigned int v11; // r0 int v12; // r1 unsigned int v17; // r0 int v18; // r1 result = *((_DWORD *)off_D19814 + 2); if ( result > a3 ) { v7 = *((_DWORD *)off_D19818 + 118); if ( v7 != 0 ) { _11B00 = asd_reg_read_11B00(a1: v7, a2, a3); if ( a1 == 0 && _11B00 != 0 || (result = asd_reg_read_11BE4(a1: _11B00, a2: v9, a3: v10), (unsigned int)(a1 - 1) <= 1) && result != 0 ) { v11 = asd_lookup_by_class(a1, a2: a3); v12 = 4 * (v11 + a2); if ( (v11 + a2) >> 30 != 0 ) v12 = 0; if ( v11 > ~a2 ) v12 = 0; result = v12; __asm { SVC 0x7C ; '|' } } } else { v17 = asd_lookup_by_class(a1, a2: a3); v18 = 4 * (v17 + a2); if ( (v17 + a2) >> 30 != 0 ) v18 = 0; if ( v17 > ~a2 ) v18 = 0; __asm { SVC 0x7C ; '|' } return v18; } } return result; } /* ==== asd_reg_write_1946C_cfg0 [tier=EXACT size=48] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_reg_write_1946C. One of 0 near-identical siblings. int __fastcall asd_reg_write_1946C_cfg0(int a1, int a2, unsigned int a3, int a4, unsigned int a5) { if ( a5 >> 30 == 0 ) return asd_reg_write_1946C(a1, a2, a3); return a1; } /* ==== asd_reg_write_19524 [tier=EXACT size=106] ==== */ // Display-block register accessor: 0 x SVC 0x7B (register read), 2 x SVC 0x7C (MMIO write). int __fastcall asd_reg_write_19524(int a1, unsigned int a2, __int16 a3) { int result; // r0 int v6; // r0 unsigned int D423A8; // r0 int v8; // r1 unsigned int v13; // r0 int v14; // r1 result = *((_DWORD *)off_D19814 + 6); if ( result > a2 ) { v6 = *((_DWORD *)off_D19818 + 118); if ( v6 != 0 ) { result = asd_reg_read_11BE4(a1: v6, a2, a3); if ( result != 0 ) { D423A8 = asd_tbl_get_D423A8(a1: a2); v8 = 4 * (D423A8 + a1); if ( (D423A8 + a1) >> 30 != 0 ) v8 = 0; if ( D423A8 > ~a1 ) v8 = 0; result = v8; __asm { SVC 0x7C ; '|' } } } else { v13 = asd_tbl_get_D423A8(a1: a2); v14 = 4 * (v13 + a1); if ( (v13 + a1) >> 30 != 0 ) v14 = 0; if ( v13 > ~a1 ) v14 = 0; __asm { SVC 0x7C ; '|' } return v14; } } return result; } /* ==== asd_reg_write_19594 [tier=EXACT size=106] ==== */ // Display-block register accessor: 0 x SVC 0x7B (register read), 1 x SVC 0x7C (MMIO write). int __fastcall asd_reg_write_19594(int a1, unsigned int a2, __int16 a3) { _DWORD *v3; // r7 int result; // r0 int v7; // r1 char v8; // r3 int v9; // r7 unsigned int v10; // r2 unsigned int v11; // r3 v3 = off_D19814; result = *((_DWORD *)off_D19814 + 5); if ( result > a2 ) { result = asd_reg_read_11BE4(a1: result, a2, a3); if ( result != 0 ) { v7 = v3[40]; result = 0; v8 = v7; if ( v7 != 0 ) v8 = 1; v9 = (unsigned __int8)v8 & (v3[5] > a2); v10 = ~a1; v11 = 0; if ( v9 != 1 || (v11 = *(_DWORD *)(v7 + 4 * a2)) <= v10 ) { if ( (v11 + a1) >> 30 != 0 ) { LABEL_14: __asm { SVC 0x7C ; '|' } return result; } if ( v9 == 0 ) { v11 = 0; goto LABEL_13; } v11 = *(_DWORD *)(v7 + 4 * a2); } if ( v11 > v10 ) { result = 0; goto LABEL_14; } LABEL_13: result = 4 * (v11 + a1); goto LABEL_14; } } return result; } /* ==== asd_reg_write_19600 [tier=EXACT size=106] ==== */ // Display-block register accessor: 0 x SVC 0x7B (register read), 2 x SVC 0x7C (MMIO write). int __fastcall asd_reg_write_19600(int a1, unsigned int a2, __int16 a3) { int result; // r0 int v6; // r0 unsigned int D423B8; // r0 int v8; // r1 unsigned int v13; // r0 int v14; // r1 result = *((_DWORD *)off_D19814 + 3); if ( result > a2 ) { v6 = *((_DWORD *)off_D19818 + 118); if ( v6 != 0 ) { result = asd_reg_read_11B00(a1: v6, a2, a3); if ( result != 0 ) { D423B8 = asd_tbl_get_D423B8(a1: a2); v8 = 4 * (D423B8 + a1); if ( (D423B8 + a1) >> 30 != 0 ) v8 = 0; if ( D423B8 > ~a1 ) v8 = 0; result = v8; __asm { SVC 0x7C ; '|' } } } else { v13 = asd_tbl_get_D423B8(a1: a2); v14 = 4 * (v13 + a1); if ( (v13 + a1) >> 30 != 0 ) v14 = 0; if ( v13 > ~a1 ) v14 = 0; __asm { SVC 0x7C ; '|' } return v14; } } return result; } /* ==== asd_reg_write_19670 [tier=EXACT size=106] ==== */ // Display-block register accessor: 0 x SVC 0x7B (register read), 2 x SVC 0x7C (MMIO write). int __fastcall asd_reg_write_19670(int a1, unsigned int a2, __int16 a3) { int result; // r0 int v6; // r0 unsigned int D423BC; // r0 int v8; // r1 unsigned int v13; // r0 int v14; // r1 result = *((_DWORD *)off_D19814 + 1); if ( result > a2 ) { v6 = *((_DWORD *)off_D19818 + 118); if ( v6 != 0 ) { result = asd_reg_read_11B00(a1: v6, a2, a3); if ( result != 0 ) { D423BC = asd_tbl_get_D423BC(a1: a2); v8 = 4 * (D423BC + a1); if ( (D423BC + a1) >> 30 != 0 ) v8 = 0; if ( D423BC > ~a1 ) v8 = 0; result = v8; __asm { SVC 0x7C ; '|' } } } else { v13 = asd_tbl_get_D423BC(a1: a2); v14 = 4 * (v13 + a1); if ( (v13 + a1) >> 30 != 0 ) v14 = 0; if ( v13 > ~a1 ) v14 = 0; __asm { SVC 0x7C ; '|' } return v14; } } return result; } /* ==== asd_reg_write_196E4 [tier=EXACT size=60] ==== */ // Display-block register accessor: 0 x SVC 0x7B (register read), 2 x SVC 0x7C (MMIO write). int __fastcall asd_reg_write_196E4(unsigned int a1, int a2, __int16 a3) { int v4; // r0 int result; // r0 v4 = *((_DWORD *)off_D19818 + 118); if ( v4 != 0 ) { result = asd_reg_read_11B00(a1: v4, a2, a3); if ( result != 0 ) { result = 4 * a1; if ( a1 >> 30 != 0 ) result = 0; __asm { SVC 0x7C ; '|' } } } else { result = 4 * a1; if ( a1 >> 30 != 0 ) result = 0; __asm { SVC 0x7C ; '|' } } return result; } /* ==== asd_reg_write_19724 [tier=EXACT size=108] ==== */ // Display-block register accessor: 0 x SVC 0x7B (register read), 2 x SVC 0x7C (MMIO write). int __fastcall asd_reg_write_19724(int result, unsigned int a2, __int16 a3) { int v3; // r5 int v5; // r0 unsigned int D423C0; // r0 int v7; // r1 unsigned int v12; // r0 int v13; // r1 if ( result != 0 ) { v3 = result; result = *((_DWORD *)off_D19814 + 1); if ( result > a2 ) { v5 = *((_DWORD *)off_D19818 + 118); if ( v5 != 0 ) { result = asd_reg_read_11B00(a1: v5, a2, a3); if ( result != 0 ) { D423C0 = asd_tbl_get_D423C0(a1: a2); v7 = 4 * (D423C0 + v3); if ( (D423C0 + v3) >> 30 != 0 ) v7 = 0; if ( D423C0 > ~v3 ) v7 = 0; result = v7; __asm { SVC 0x7C ; '|' } } } else { v12 = asd_tbl_get_D423C0(a1: a2); v13 = 4 * (v12 + v3); if ( (v12 + v3) >> 30 != 0 ) v13 = 0; if ( v12 > ~v3 ) v13 = 0; __asm { SVC 0x7C ; '|' } return v13; } } } return result; } /* ==== asd_reg_write_1981C [tier=EXACT size=20] ==== */ // Display-block register accessor: 0 x SVC 0x7B (register read), 1 x SVC 0x7C (MMIO write). unsigned int __fastcall asd_reg_write_1981C(unsigned int a1) { unsigned int v1; // r2 v1 = 4 * a1; if ( a1 >> 30 != 0 ) v1 = 0; __asm { SVC 0x7C ; '|' } return v1; } /* ==== asd_reset_hdcp_link_state [tier=EXACT size=40] ==== */ // Runs GP crypto op 0x35, tears down per-link state via asd_foreach_link_D15650, then // clears dword_D3306C/70/74/78. Returns 27 on failure. int __fastcall asd_reset_hdcp_link_state() { char *v0; // r5 char *v1; // r4 int result; // r0 v0 = off_D142E4; v1 = off_D142E4 + 20; gp_crypto_op_0x35(); result = asd_foreach_link_D15650(a1: (int)v1); *((_DWORD *)v0 + 5) = 0; *((_DWORD *)v0 + 6) = 0; *((_DWORD *)v0 + 7) = 0; *((_DWORD *)v0 + 8) = 0; if ( result != 0 ) return 27; return result; } /* ==== asd_reset_pipe_regs [tier=EXACT size=68] ==== */ // Requires ctx+64 == 6. Clears the 0x19-byte state at dword_D33030, then for each of // dword_D33028 pipe entries (60-byte stride at dword_D3302C) rewrites the register at // +12 with mask 0x80000000 / value 0x40000000. int __fastcall asd_reset_pipe_regs(int a1) { int *v1; // r4 unsigned __int8 i; // r5 if ( a1 == 0 || *(_DWORD *)(a1 + 64) != 6 ) return 2; v1 = off_D129AC; bzero_core(result: off_D129AC + 4, a2: 0x19u); for ( i = 0; v1[2] > (unsigned int)i; ++i ) asd_reg_rw_15E66(); return 0; } /* ==== asd_resolve_asic_handlers [tier=EXACT size=680] ==== */ // Resolves the per-ASIC handler set for asd_hw_init: a 680-byte switch mapping the ASIC id // to the register-access and display-parameter function pairs; default status 7. int __fastcall asd_resolve_asic_handlers(struct asd_link_caps *a1, int a2) { __int64 v2; // r4 void *v3; // r1 void *v4; // r2 void *v5; // r3 void *v6; // r1 void *v7; // r2 void *v8; // r3 void *v9; // r1 void *v10; // r6 void *v11; // r1 void *v12; // r1 void *v13; // r1 void *v14; // r2 void *v15; // r3 void *v16; // r1 void *v17; // r1 void *v18; // r1 void *v19; // r12 void *v20; // r2 void *v21; // r7 void *v22; // r3 void *v23; // r6 void *v24; // r1 void *v25; // r1 void *v26; // r2 void *v27; // r2 void *v28; // r3 void *v29; // r3 void *v30; // r6 void *v31; // r1 void *v32; // r2 void *v33; // r1 void *v34; // r1 void *v35; // r2 void *v36; // r7 void *v37; // r12 void *v38; // r3 void *v39; // r6 void *v40; // r1 void *v41; // r1 LODWORD(v2) = 7; // switch 43 cases switch ( a2 ) { case 1: v25 = off_D151D4; // jumptable 00D14D94 case 1 LODWORD(v2) = 0; v26 = off_D151DC; goto LABEL_14; case 2: case 3: LODWORD(v2) = 0; // jumptable 00D14D94 cases 2,3 v13 = off_D15124; v14 = off_D15128; v15 = off_D15130; HIDWORD(v2) = off_D15138; goto LABEL_34; case 4: v27 = off_D151D8; // jumptable 00D14D94 case 4 LODWORD(v2) = 0; HIDWORD(v2) = off_D151E0; v28 = off_D151DC; v25 = off_D151D4; *(_QWORD *)&a1->unk00 = v2; a1->field08 = (unsigned int)v28; a1->field0C = (unsigned int)v27; goto LABEL_15; case 5: v25 = off_D151CC; // jumptable 00D14D94 case 5 LODWORD(v2) = 0; v26 = off_D151D0; LABEL_14: a1->unk00 = 0; a1->field04 = 0; a1->field08 = (unsigned int)v26; a1->field0C = 0; LABEL_15: a1->field10 = (unsigned int)v25; bzero_core(result: &a1->field14, a2: 0x14u); return v2; // jumptable 00D14D94 default case, cases 10,13,39 case 6: case 8: case 11: v3 = off_D151C0; // jumptable 00D14D94 cases 6,8,11 LODWORD(v2) = 0; v4 = off_D151C4; v5 = off_D151C8; goto LABEL_23; case 7: v29 = off_D1512C; // jumptable 00D14D94 case 7 LODWORD(v2) = 0; v30 = off_D15134; HIDWORD(v2) = off_D15130; a1->unk00 = (unsigned int)off_D15138; a1->field04 = (unsigned int)v30; v13 = off_D15124; v14 = off_D15128; a1->field08 = HIDWORD(v2); a1->field0C = (unsigned int)v29; goto LABEL_35; case 9: case 16: LODWORD(v2) = 0; // jumptable 00D14D94 cases 9,16 v13 = off_D15114; v14 = off_D15118; v15 = off_D1511C; HIDWORD(v2) = off_D15120; goto LABEL_34; case 12: v3 = off_D15194; // jumptable 00D14D94 case 12 LODWORD(v2) = 0; v4 = off_D151B8; v5 = off_D151BC; goto LABEL_23; case 14: LODWORD(v2) = 0; // jumptable 00D14D94 case 14 v31 = off_D15108; v32 = off_D1510C; a1->unk00 = 0; a1->field04 = 0; a1->field08 = (unsigned int)v32; a1->field0C = 0; a1->field10 = (unsigned int)v31; a1->field14 = 0; v33 = off_D15110; a1->field18 = 0; a1->field1C = 0; a1->field20 = 0; a1->field24 = (unsigned int)v33; return v2; case 15: v3 = off_D15194; // jumptable 00D14D94 case 15 LODWORD(v2) = 0; v4 = off_D151B0; v5 = off_D151B4; goto LABEL_23; case 17: v3 = off_D15194; // jumptable 00D14D94 case 17 LODWORD(v2) = 0; v4 = off_D151A8; v5 = off_D151AC; goto LABEL_23; case 18: v34 = off_D150A8; // jumptable 00D14D94 case 18 LODWORD(v2) = 0; v35 = off_D150F0; HIDWORD(v2) = off_D150F8; v36 = off_D15100; a1->field20 = 0; a1->field24 = (unsigned int)v34; v37 = off_D150EC; v38 = off_D150F4; v39 = off_D150FC; a1->unk00 = (unsigned int)off_D15104; a1->field04 = (unsigned int)v36; a1->field08 = (unsigned int)v39; a1->field0C = HIDWORD(v2); a1->field10 = (unsigned int)v38; a1->field14 = (unsigned int)v35; a1->field18 = (unsigned int)v37; a1->field1C = 0; return v2; case 19: v3 = off_D15194; // jumptable 00D14D94 case 19 LODWORD(v2) = 0; v4 = off_D1519C; v5 = off_D151A0; LABEL_23: a1->field20 = 0; a1->field24 = (unsigned int)v3; v17 = off_D15198; HIDWORD(v2) = off_D151A4; goto LABEL_24; case 20: LODWORD(v2) = 0; // jumptable 00D14D94 case 20 a1->field20 = (unsigned int)off_D15170; a1->field24 = 0; v9 = off_D15188; v7 = off_D1518C; v8 = off_D1517C; HIDWORD(v2) = off_D15180; v10 = off_D15190; goto LABEL_32; case 21: case 28: v16 = off_D150A8; // jumptable 00D14D94 cases 21,28 LODWORD(v2) = 0; v4 = off_D150E0; v5 = off_D150E4; a1->field20 = 0; a1->field24 = (unsigned int)v16; v17 = off_D150DC; HIDWORD(v2) = off_D150E8; goto LABEL_24; case 22: case 27: v18 = off_D150BC; // jumptable 00D14D94 cases 22,27 LODWORD(v2) = 0; v19 = off_D150C0; v20 = off_D150C4; HIDWORD(v2) = off_D150CC; v21 = off_D150D4; a1->field20 = 0; a1->field24 = (unsigned int)v18; v22 = off_D150C8; v23 = off_D150D0; a1->unk00 = (unsigned int)off_D150D8; a1->field04 = (unsigned int)v21; a1->field08 = (unsigned int)v23; a1->field0C = HIDWORD(v2); a1->field10 = (unsigned int)v22; a1->field14 = (unsigned int)v20; a1->field18 = 0; a1->field1C = (unsigned int)v19; return v2; case 23: v40 = off_D150A8; // jumptable 00D14D94 case 23 LODWORD(v2) = 0; v4 = off_D150B0; v5 = off_D150B4; a1->field20 = 0; a1->field24 = (unsigned int)v40; v17 = off_D150AC; HIDWORD(v2) = off_D150B8; LABEL_24: a1->unk00 = HIDWORD(v2); a1->field04 = 0; a1->field08 = (unsigned int)v5; a1->field0C = 0; a1->field10 = (unsigned int)v4; a1->field14 = (unsigned int)v17; a1->field18 = 0; a1->field1C = 0; return v2; case 24: LODWORD(v2) = 0; // jumptable 00D14D94 case 24 a1->field20 = (unsigned int)off_D15158; a1->field24 = 0; v9 = off_D1515C; v7 = off_D15160; v8 = off_D15164; HIDWORD(v2) = off_D15168; v10 = off_D1516C; goto LABEL_32; case 25: LODWORD(v2) = 0; // jumptable 00D14D94 case 25 a1->field20 = (unsigned int)off_D15170; a1->field24 = 0; v9 = off_D15174; v7 = off_D15178; v8 = off_D1517C; HIDWORD(v2) = off_D15180; v10 = off_D15184; goto LABEL_32; case 26: case 34: case 43: v11 = off_D15058; // jumptable 00D14D94 cases 26,34,43 LODWORD(v2) = 0; v7 = off_D15098; v8 = off_D1509C; a1->field20 = 0; a1->field24 = (unsigned int)v11; v9 = off_D15070; HIDWORD(v2) = off_D150A0; v10 = off_D150A4; goto LABEL_32; case 29: v9 = off_D1513C; // jumptable 00D14D94 case 29 LODWORD(v2) = 0; v7 = off_D15150; v8 = off_D15144; HIDWORD(v2) = off_D15148; v10 = off_D15154; a1->field20 = 0; a1->field24 = 0; goto LABEL_32; case 30: LODWORD(v2) = 0; // jumptable 00D14D94 case 30 v9 = off_D1513C; a1->field20 = 0; a1->field24 = 0; v7 = off_D15140; v8 = off_D15144; HIDWORD(v2) = off_D15148; v10 = off_D1514C; goto LABEL_32; case 31: v41 = off_D15058; // jumptable 00D14D94 case 31 LODWORD(v2) = 0; v7 = off_D15088; v8 = off_D1508C; a1->field20 = 0; a1->field24 = (unsigned int)v41; v9 = off_D15084; HIDWORD(v2) = off_D15090; v10 = off_D15094; goto LABEL_32; case 32: case 35: v24 = off_D15058; // jumptable 00D14D94 cases 32,35 LODWORD(v2) = 0; v7 = off_D15074; v8 = off_D15078; a1->field20 = 0; a1->field24 = (unsigned int)v24; v9 = off_D15070; HIDWORD(v2) = off_D1507C; v10 = off_D15080; goto LABEL_32; case 33: case 40: case 42: v12 = off_D15058; // jumptable 00D14D94 cases 33,40,42 LODWORD(v2) = 0; v7 = off_D15060; v8 = off_D15064; a1->field20 = 0; a1->field24 = (unsigned int)v12; v9 = off_D1505C; HIDWORD(v2) = off_D15068; v10 = off_D1506C; goto LABEL_32; case 36: case 37: case 41: v6 = off_D15040; // jumptable 00D14D94 cases 36,37,41 LODWORD(v2) = 0; v7 = off_D15048; v8 = off_D1504C; a1->field20 = 0; a1->field24 = (unsigned int)v6; v9 = off_D15044; HIDWORD(v2) = off_D15050; v10 = off_D15054; LABEL_32: a1->unk00 = (unsigned int)v10; a1->field04 = 0; a1->field08 = HIDWORD(v2); a1->field0C = 0; a1->field10 = (unsigned int)v8; a1->field14 = (unsigned int)v7; a1->field18 = 0; a1->field1C = (unsigned int)v9; break; case 38: v13 = off_D15030; // jumptable 00D14D94 case 38 LODWORD(v2) = 0; v14 = off_D15034; v15 = off_D15038; HIDWORD(v2) = off_D1503C; LABEL_34: a1->unk00 = HIDWORD(v2); a1->field04 = 0; a1->field08 = (unsigned int)v15; a1->field0C = 0; LABEL_35: a1->field10 = (unsigned int)v14; a1->field14 = (unsigned int)v13; a1->field18 = 0; a1->field1C = 0; a1->field20 = 0; a1->field24 = 0; break; default: return v2; // switch jump } return v2; } /* ==== asd_resolve_link_parent [tier=EXACT size=110] ==== */ // Feature-15 gated, link bounded to 0x3F and required active. When the link's type is 5 // it follows the parent index at unk_D428CC and returns the parent's value from unk_D428D8. int __fastcall asd_resolve_link_parent(unsigned int a1, _DWORD *a2) { int v4; // r1 _DWORD *v5; // r0 int v6; // r0 int v7; // r0 int *v9; // r2 int (__fastcall *v10)(unsigned int, _DWORD *, int *); // r3 *a2 = 0; if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3F ) return 5; v4 = dword_D1139C; v5 = (_DWORD *)(dword_D1139C + 96 * a1); if ( v5[1] != 1 ) return 5; if ( v5[16] == 5 ) { v6 = dword_D1139C + 96 * v5[15]; if ( *(_DWORD *)(v6 + 4) == 1 ) { v7 = *(_DWORD *)(v6 + 72); goto LABEL_13; } return 5; } v9 = v5 + 18; *a2 = v5[18]; v10 = *(int (__fastcall **)(unsigned int, _DWORD *, int *))(v4 + 6324); if ( v10 != nullptr && v5[8] != 0 ) return v10(a1, a2, a3: v9); v7 = *v9; LABEL_13: *a2 = v7; return 0; } /* ==== asd_revocation_check_ksv [tier=EXACT size=70] ==== */ // Opcode 0x307 (disp_revocation_check_ksv). int __fastcall asd_revocation_check_ksv(unsigned int a1) { int v2; // r0 unsigned __int8 v3; // r2 int i; // r3 int v5; // r5 int result; // r0 if ( a1 == 0 || asd_validate_ptr(a1, a2: 5u) == 0 ) return 2; v2 = 0; v3 = 0; while ( v2 != 5 ) { for ( i = *(unsigned __int8 *)(a1 + v2); i << 24 != 0; i &= i - 1 ) { v5 = ++v3; if ( (unsigned __int8)v5 != v5 ) v3 = -1; } ++v2; } result = v3 - 20; if ( v3 != 20 ) return 22; return result; } /* ==== asd_scan_pipe_regs [tier=EXACT size=278] ==== */ // Rejects when unk_D424CC bit30 is set, then scans the dword_D424BC/C0/... pipe register // group collecting per-lane status for the caller. int __fastcall asd_scan_pipe_regs(int a1, int a2, int a3) { int *v3; // r9 __int64 v4; // kr00_8 int (__fastcall *v6)(int, int, unsigned int); // r8 int *v7; // r7 __int16 v8; // r6 __int16 v9; // r0 int _13B74; // r0 int v11; // r5 __int16 v16; // [sp+0h] [bp-Ch] __int16 v17; // [sp+4h] [bp-8h] if ( a1 == 0 ) return 2; v3 = (int *)off_D0A878; v4 = *(_QWORD *)(a1 + 20); if ( asd_reg_read_13B74(a1: 2, a2: *((_DWORD *)off_D0A878 + 53), a3: v4) << 30 != 0 ) return 1; v6 = off_D09C9C; v7 = v3 + 49; v8 = off_D09C9C(a1: 2, a2: v3[49], a3: v4); v17 = v6(a1: 2, a2: v3[50], a3: v4); v16 = v6(a1: 2, a2: v3[51], a3: v4); v9 = v6(a1: 2, a2: v3[52], a3: v4); if ( (v8 & 7) == HIDWORD(v4) && (v8 & 0x7F00) != 0 ) goto LABEL_16; if ( (v17 & 7) == HIDWORD(v4) && (v17 & 0x7F00) != 0 ) { v7 = v3 + 50; LABEL_16: asd_reg_write_1946C(a1: 2, a2: *v7, a3: v4); goto LABEL_17; } if ( (v16 & 7) == HIDWORD(v4) && (v16 & 0x7F00) != 0 ) { v7 = v3 + 51; goto LABEL_16; } if ( (v9 & 7) == HIDWORD(v4) && (v9 & 0x7F00) != 0 ) { v7 = v3 + 52; goto LABEL_16; } LABEL_17: _13B74 = asd_reg_write_1946C(a1: 2, a2: v3[53], a3: v4); v11 = 11; while ( --v11 != 0 ) { __asm { SVC 0x56 ; 'V' } _13B74 = asd_reg_read_13B74(a1: 2, a2: v3[54], a3: v4); if ( (_13B74 & 0x30000) == 0 ) return 0; } return (_13B74 & 0x30000) != 0; } /* ==== asd_session_op57 [tier=EXACT size=16] ==== */ // Issues SVC 0x57 (object-session op) with a timeout in dword_D25A3C; returns unk_D38330. int __fastcall asd_session_op57() { *off_D10728 = 1000; __asm { SVC 0x57 ; 'W' } return *(unsigned __int8 *)off_D1072C; } /* ==== asd_session_op57_1 [tier=EXACT size=16] ==== */ // Issues SVC 0x57 (object-session op) with a timeout in dword_D25A3C; returns unk_D38330. int __fastcall asd_session_op57_1() { int result; // r0 result = *off_D169CC + 1; if ( *off_D169CC != -1 ) { __asm { SVC 0x57 ; 'W' } return *(unsigned __int8 *)off_D169D0; } return result; } /* ==== asd_session_op57_invoke [tier=EXACT size=10] ==== */ // Invokes the SVC 0x57 session-op helper and returns 0. int __fastcall asd_session_op57_invoke() { asd_session_op57_1(); return 0; } /* ==== asd_session_open [tier=EXACT size=32] ==== */ // HDCP opcode 0x103 (HDCP-side stub disp_session_open). int __fastcall asd_session_open(unsigned int a1, _DWORD *a2) { if ( asd_validate_ptr(a1: (unsigned int)a2, a2: 4u) != 0 ) return asd_get_link_caps(a1, a2); else return 2; } /* ==== asd_session_timeout_disable [tier=EXACT size=10] ==== */ // Sets dword_D25A3C to -1 (disables the SVC 0x57 timeout) and returns its address. int *__fastcall asd_session_timeout_disable() { int *result; // r0 result = off_D0C7A0; *off_D0C7A0 = -1; return result; } /* ==== asd_set_D33308 [tier=EXACT size=6] ==== */ // Setter: stores the argument into unk_D33308. unsigned int __fastcall asd_set_D33308(unsigned int result) { *((_DWORD *)off_D18B04 + 4) = result; return result; } /* ==== asd_set_display_params_cfg0 [tier=EXACT size=36] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_display_params. One of 0 near-identical siblings. int __fastcall asd_set_display_params_cfg0() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[2] = 13532; var4[1] = 13524; var4[0] = 13508; return sub_D126D8(a1: &vars8, a2: var4); } /* ==== asd_set_display_params_cfg1 [tier=EXACT size=36] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_display_params. One of 0 near-identical siblings. int __fastcall asd_set_display_params_cfg1() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[2] = 13532; var4[1] = 13524; var4[0] = 13508; return sub_D126D8(a1: &vars8, a2: var4); } /* ==== asd_set_display_params_cfg10 [tier=EXACT size=32] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_display_params. One of 0 near-identical siblings. int __fastcall asd_set_display_params_cfg10() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[0] = dword_D12658; var4[1] = dword_D12658 + 12; var4[2] = dword_D12658 + 20; return sub_D126D8(a1: &vars8, a2: var4); } /* ==== asd_set_display_params_cfg11 [tier=EXACT size=32] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_display_params. One of 0 near-identical siblings. int __fastcall asd_set_display_params_cfg11() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[0] = dword_D12658; var4[1] = dword_D12658 + 12; var4[2] = dword_D12658 + 20; return sub_D126D8(a1: &vars8, a2: var4); } /* ==== asd_set_display_params_cfg12 [tier=EXACT size=32] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_display_params. One of 0 near-identical siblings. int __fastcall asd_set_display_params_cfg12() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[0] = dword_D12658; var4[1] = dword_D12658 + 12; var4[2] = dword_D12658 + 20; return sub_D126D8(a1: &vars8, a2: var4); } /* ==== asd_set_display_params_cfg13 [tier=EXACT size=32] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_display_params. One of 0 near-identical siblings. int __fastcall asd_set_display_params_cfg13() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[0] = dword_D12658; var4[1] = dword_D12658 + 12; var4[2] = dword_D12658 + 20; return sub_D126D8(a1: &vars8, a2: var4); } /* ==== asd_set_display_params_cfg14 [tier=EXACT size=36] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_display_params. One of 0 near-identical siblings. int __fastcall asd_set_display_params_cfg14() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[2] = 13632; var4[1] = 13624; var4[0] = 13572; return sub_D126D8(a1: &vars8, a2: var4); } /* ==== asd_set_display_params_cfg15 [tier=EXACT size=32] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_display_params. One of 0 near-identical siblings. int __fastcall asd_set_display_params_cfg15() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[0] = dword_D12658; var4[1] = dword_D12658 + 12; var4[2] = dword_D12658 + 20; return sub_D126D8(a1: &vars8, a2: var4); } /* ==== asd_set_display_params_cfg16 [tier=EXACT size=32] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_display_params. One of 0 near-identical siblings. int __fastcall asd_set_display_params_cfg16() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[0] = dword_D12550; var4[1] = dword_D12550 + 36; var4[2] = dword_D12550 + 44; return sub_D126D8(a1: &vars8, a2: var4); } /* ==== asd_set_display_params_cfg17 [tier=EXACT size=36] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_display_params. One of 0 near-identical siblings. int __fastcall asd_set_display_params_cfg17() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[2] = 13532; var4[1] = 13524; var4[0] = 13508; return sub_D126D8(a1: &vars8, a2: var4); } /* ==== asd_set_display_params_cfg18 [tier=EXACT size=32] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_display_params. One of 0 near-identical siblings. int __fastcall asd_set_display_params_cfg18() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[0] = dword_D12658; var4[1] = dword_D12658 + 12; var4[2] = dword_D12658 + 20; return sub_D126D8(a1: &vars8, a2: var4); } /* ==== asd_set_display_params_cfg19 [tier=EXACT size=32] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_display_params. One of 0 near-identical siblings. int __fastcall asd_set_display_params_cfg19() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[0] = dword_D12658; var4[1] = dword_D12658 + 12; var4[2] = dword_D12658 + 20; return sub_D126D8(a1: &vars8, a2: var4); } /* ==== asd_set_display_params_cfg2 [tier=EXACT size=36] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_display_params. One of 0 near-identical siblings. int __fastcall asd_set_display_params_cfg2() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[2] = 13532; var4[1] = 13524; var4[0] = 13508; return sub_D126D8(a1: &vars8, a2: var4); } /* ==== asd_set_display_params_cfg20 [tier=EXACT size=36] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_display_params. One of 0 near-identical siblings. int __fastcall asd_set_display_params_cfg20() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[2] = 13568; var4[1] = 13560; var4[0] = 13524; return sub_D126D8(a1: &vars8, a2: var4); } /* ==== asd_set_display_params_cfg3 [tier=EXACT size=36] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_display_params. One of 0 near-identical siblings. int __fastcall asd_set_display_params_cfg3() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[2] = 13532; var4[1] = 13524; var4[0] = 13508; return sub_D126D8(a1: &vars8, a2: var4); } /* ==== asd_set_display_params_cfg4 [tier=EXACT size=36] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_display_params. One of 0 near-identical siblings. int __fastcall asd_set_display_params_cfg4() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[2] = 13532; var4[1] = 13524; var4[0] = 13508; return sub_D126D8(a1: &vars8, a2: var4); } /* ==== asd_set_display_params_cfg5 [tier=EXACT size=36] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_display_params. One of 0 near-identical siblings. int __fastcall asd_set_display_params_cfg5() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[2] = 13532; var4[1] = 13524; var4[0] = 13508; return sub_D126D8(a1: &vars8, a2: var4); } /* ==== asd_set_display_params_cfg6 [tier=EXACT size=36] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_display_params. One of 0 near-identical siblings. int __fastcall asd_set_display_params_cfg6() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[2] = 13576; var4[1] = 13568; var4[0] = 13528; return sub_D126D8(a1: &vars8, a2: var4); } /* ==== asd_set_display_params_cfg7 [tier=EXACT size=36] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_display_params. One of 0 near-identical siblings. int __fastcall asd_set_display_params_cfg7() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[2] = 13576; var4[1] = 13568; var4[0] = 13528; return sub_D126D8(a1: &vars8, a2: var4); } /* ==== asd_set_display_params_cfg8 [tier=EXACT size=46] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_display_params. One of 0 near-identical siblings. int __fastcall asd_set_display_params_cfg8() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[2] = 13524; var4[1] = 13516; var4[0] = 13500; __asm { SVC 0x8D } return sub_D126D8(a1: &vars8, a2: var4); } /* ==== asd_set_display_params_cfg9 [tier=EXACT size=36] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_display_params. One of 0 near-identical siblings. int __fastcall asd_set_display_params_cfg9() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF int vars8; // [sp+Ch] [bp+8h] BYREF vars8 = 0; var4[2] = 13524; var4[1] = 13516; var4[0] = 13500; return sub_D126D8(a1: &vars8, a2: var4); } /* ==== asd_set_feature_levels [tier=EXACT size=18] ==== */ // Initialises the feature-level globals unk_D447D4/D8/DC to 6 / 4 / 2. int __fastcall asd_set_feature_levels() { _DWORD *v0; // r0 v0 = off_D12E8C; *(_DWORD *)off_D12E8C = 6; v0[1] = 4; v0[2] = 2; return 0; } /* ==== asd_set_key_blobs [tier=EXACT size=36] ==== */ // Stores two caller-supplied blobs into globals: 0xB4 bytes -> dword_D42340 and // 0x218 bytes -> dword_D423F8. Both lengths are constants. int __fastcall asd_set_key_blobs(int *a1, int *a2, int a3, int a4) { int result; // r0 int v7; // r3 result = 2; if ( a1 != nullptr && a2 != nullptr ) { memcpy_aligned(result: (int *)off_D0A230, a2: a1, a3: 0xB4u, a4); memcpy_aligned(result: (int *)off_D0A234, a2, a3: 0x218u, a4: v7); return 0; } return result; } /* ==== asd_set_link_flag [tier=EXACT size=30] ==== */ // Bounds a1 <= 8 and a2 in 1..2, then stores a3 into the 3-byte-per-link flag table at // 0xD42660 (3*idx + a2). int __fastcall asd_set_link_flag(unsigned int a1, int a2, char a3) { int result; // r0 bool v5; // cc result = 5; v5 = a1 > 8; if ( a1 <= 8 ) v5 = (unsigned int)(a2 - 1) > 1; if ( !v5 ) { *(_BYTE *)(3 * a1 + dword_D0C038 + a2) = a3; return 0; } return result; } /* ==== asd_set_link_param_40 [tier=EXACT size=48] ==== */ // Per-link setter: writes 4 to link struct +0x40 after encoder/connector state checks. int __fastcall asd_set_link_param_40(int a1, _DWORD *a2, __int16 a3) { int v4; // r5 int v5; // r1 __int16 v6; // r2 v4 = dword_D0C09C + 96 * a1; if ( asd_encoder_state_check(a1: *(_DWORD *)(v4 + 20), a2: dword_D0C09C, a3) != 0 && asd_connector_state_check(a1: *(_DWORD *)(v4 + 20), a2: v5, a3: v6) != 0 ) { return 19; } *(_DWORD *)(v4 + 64) = 4; *a2 = 4; return 0; } /* ==== asd_set_link_param_44 [tier=EXACT size=48] ==== */ // Per-link setter: writes 16 to link struct +0x44 after encoder/connector state checks. int __fastcall asd_set_link_param_44(int a1, _DWORD *a2, __int16 a3) { int v4; // r5 int v5; // r1 __int16 v6; // r2 v4 = dword_D0C09C + 96 * a1; if ( asd_encoder_state_check(a1: *(_DWORD *)(v4 + 20), a2: dword_D0C09C, a3) != 0 && asd_connector_state_check(a1: *(_DWORD *)(v4 + 20), a2: v5, a3: v6) != 0 ) { return 19; } *(_DWORD *)(v4 + 68) = 16; *a2 = 16; return 0; } /* ==== asd_set_link_param_48 [tier=EXACT size=48] ==== */ // Per-link setter: after encoder/connector state checks, writes 16 to link struct // +0x48 (96*idx + 0xD42650 base) and reports it to the caller. int __fastcall asd_set_link_param_48(int a1, _DWORD *a2, __int16 a3) { int v4; // r5 int v5; // r1 __int16 v6; // r2 v4 = dword_D0C09C + 96 * a1; if ( asd_encoder_state_check(a1: *(_DWORD *)(v4 + 20), a2: dword_D0C09C, a3) != 0 && asd_connector_state_check(a1: *(_DWORD *)(v4 + 20), a2: v5, a3: v6) != 0 ) { return 19; } *(_DWORD *)(v4 + 72) = 16; *a2 = 16; return 0; } /* ==== asd_set_link_param_4C [tier=EXACT size=48] ==== */ // Per-link setter: writes 4 to link struct +0x4C after encoder/connector state checks. int __fastcall asd_set_link_param_4C(int a1, _DWORD *a2, __int16 a3) { int v4; // r5 int v5; // r1 __int16 v6; // r2 v4 = dword_D0C09C + 96 * a1; if ( asd_encoder_state_check(a1: *(_DWORD *)(v4 + 20), a2: dword_D0C09C, a3) != 0 && asd_connector_state_check(a1: *(_DWORD *)(v4 + 20), a2: v5, a3: v6) != 0 ) { return 19; } *(_DWORD *)(v4 + 76) = 4; *a2 = 4; return 0; } /* ==== asd_set_pair_D49838 [tier=EXACT size=20] ==== */ // Stores a caller-supplied dword pair into unk_D49838/unk_D4983C. int __fastcall asd_set_pair_D49838(int *a1) { int *v1; // r2 int v2; // r1 if ( a1 == nullptr ) return 2; v1 = (int *)off_D12150; v2 = *a1; *((_DWORD *)off_D12150 + 1) = a1[1]; *v1 = v2; return 0; } /* ==== asd_set_pair_D49838_cfg0 [tier=EXACT size=18] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_pair_D49838. One of 0 near-identical siblings. int __fastcall asd_set_pair_D49838_cfg0() { int vars0[4]; // [sp+0h] [bp+0h] BYREF vars0[1] = 0; vars0[0] = dword_D12124; return asd_set_pair_D49838(a1: vars0); } /* ==== asd_set_pair_D49838_cfg1 [tier=EXACT size=18] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_pair_D49838. One of 0 near-identical siblings. int __fastcall asd_set_pair_D49838_cfg1() { int vars0[4]; // [sp+0h] [bp+0h] BYREF vars0[1] = 0; vars0[0] = dword_D12124; return asd_set_pair_D49838(a1: vars0); } /* ==== asd_set_pair_D49838_cfg10 [tier=EXACT size=18] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_pair_D49838. One of 0 near-identical siblings. int __fastcall asd_set_pair_D49838_cfg10() { int vars0[4]; // [sp+0h] [bp+0h] BYREF vars0[0] = dword_D12124; vars0[1] = dword_D12124 + 252; return asd_set_pair_D49838(a1: vars0); } /* ==== asd_set_pair_D49838_cfg11 [tier=EXACT size=18] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_pair_D49838. One of 0 near-identical siblings. int __fastcall asd_set_pair_D49838_cfg11() { int vars0[4]; // [sp+0h] [bp+0h] BYREF vars0[0] = dword_D12124; vars0[1] = dword_D12124 + 252; return asd_set_pair_D49838(a1: vars0); } /* ==== asd_set_pair_D49838_cfg12 [tier=EXACT size=18] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_pair_D49838. One of 0 near-identical siblings. int __fastcall asd_set_pair_D49838_cfg12() { int vars0[4]; // [sp+0h] [bp+0h] BYREF vars0[0] = dword_D120BC; vars0[1] = dword_D120BC + 252; return asd_set_pair_D49838(a1: vars0); } /* ==== asd_set_pair_D49838_cfg13 [tier=EXACT size=18] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_pair_D49838. One of 0 near-identical siblings. int __fastcall asd_set_pair_D49838_cfg13() { int vars0[4]; // [sp+0h] [bp+0h] BYREF vars0[0] = dword_D120BC; vars0[1] = dword_D120BC + 252; return asd_set_pair_D49838(a1: vars0); } /* ==== asd_set_pair_D49838_cfg14 [tier=EXACT size=18] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_pair_D49838. One of 0 near-identical siblings. int __fastcall asd_set_pair_D49838_cfg14() { int vars0[4]; // [sp+0h] [bp+0h] BYREF vars0[0] = dword_D12124; vars0[1] = dword_D12124 + 252; return asd_set_pair_D49838(a1: vars0); } /* ==== asd_set_pair_D49838_cfg15 [tier=EXACT size=18] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_pair_D49838. One of 0 near-identical siblings. int __fastcall asd_set_pair_D49838_cfg15() { int vars0[4]; // [sp+0h] [bp+0h] BYREF vars0[0] = dword_D12124; vars0[1] = dword_D12124 + 252; return asd_set_pair_D49838(a1: vars0); } /* ==== asd_set_pair_D49838_cfg16 [tier=EXACT size=18] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_pair_D49838. One of 0 near-identical siblings. int __fastcall asd_set_pair_D49838_cfg16() { int vars0[4]; // [sp+0h] [bp+0h] BYREF vars0[0] = dword_D12108; vars0[1] = dword_D12108 + 252; return asd_set_pair_D49838(a1: vars0); } /* ==== asd_set_pair_D49838_cfg17 [tier=EXACT size=18] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_pair_D49838. One of 0 near-identical siblings. int __fastcall asd_set_pair_D49838_cfg17() { int vars0[4]; // [sp+0h] [bp+0h] BYREF vars0[0] = dword_D12124; vars0[1] = dword_D12124 + 252; return asd_set_pair_D49838(a1: vars0); } /* ==== asd_set_pair_D49838_cfg2 [tier=EXACT size=18] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_pair_D49838. One of 0 near-identical siblings. int __fastcall asd_set_pair_D49838_cfg2() { int vars0[4]; // [sp+0h] [bp+0h] BYREF vars0[1] = 0; vars0[0] = dword_D12124; return asd_set_pair_D49838(a1: vars0); } /* ==== asd_set_pair_D49838_cfg3 [tier=EXACT size=18] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_pair_D49838. One of 0 near-identical siblings. int __fastcall asd_set_pair_D49838_cfg3() { int vars0[4]; // [sp+0h] [bp+0h] BYREF vars0[0] = dword_D12124; vars0[1] = dword_D12124 + 252; return asd_set_pair_D49838(a1: vars0); } /* ==== asd_set_pair_D49838_cfg4 [tier=EXACT size=18] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_pair_D49838. One of 0 near-identical siblings. int __fastcall asd_set_pair_D49838_cfg4() { int vars0[4]; // [sp+0h] [bp+0h] BYREF vars0[0] = dword_D12124; vars0[1] = dword_D12124 + 252; return asd_set_pair_D49838(a1: vars0); } /* ==== asd_set_pair_D49838_cfg5 [tier=EXACT size=18] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_pair_D49838. One of 0 near-identical siblings. int __fastcall asd_set_pair_D49838_cfg5() { int vars0[4]; // [sp+0h] [bp+0h] BYREF vars0[0] = dword_D12124; vars0[1] = 0; return asd_set_pair_D49838(a1: vars0); } /* ==== asd_set_pair_D49838_cfg6 [tier=EXACT size=18] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_pair_D49838. One of 0 near-identical siblings. int __fastcall asd_set_pair_D49838_cfg6() { int vars0[4]; // [sp+0h] [bp+0h] BYREF vars0[0] = dword_D12124; vars0[1] = dword_D12124 + 252; return asd_set_pair_D49838(a1: vars0); } /* ==== asd_set_pair_D49838_cfg7 [tier=EXACT size=18] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_pair_D49838. One of 0 near-identical siblings. int __fastcall asd_set_pair_D49838_cfg7() { int vars0[4]; // [sp+0h] [bp+0h] BYREF vars0[0] = dword_D12124; vars0[1] = 0; return asd_set_pair_D49838(a1: vars0); } /* ==== asd_set_pair_D49838_cfg8 [tier=EXACT size=18] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_pair_D49838. One of 0 near-identical siblings. int __fastcall asd_set_pair_D49838_cfg8() { int vars0[4]; // [sp+0h] [bp+0h] BYREF vars0[0] = dword_D12124; vars0[1] = dword_D12124 + 252; return asd_set_pair_D49838(a1: vars0); } /* ==== asd_set_pair_D49838_cfg9 [tier=EXACT size=18] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_pair_D49838. One of 0 near-identical siblings. int __fastcall asd_set_pair_D49838_cfg9() { int vars0[4]; // [sp+0h] [bp+0h] BYREF vars0[0] = dword_D12124; vars0[1] = 0; return asd_set_pair_D49838(a1: vars0); } /* ==== asd_set_pipe_config [tier=EXACT size=98] ==== */ // Copies a 44-byte pipe configuration to dword_D33024, then clears the per-pipe state // (+0x30 and +0x38) across dword_D33028 entries of the dword_D3302C table. int __fastcall asd_set_pipe_config(int *a1, int a2, int a3, int a4) { int *v4; // r8 int v5; // r6 int v6; // r7 unsigned int i; // r4 int v8; // r0 int v13; // r2 int v14; // r1 if ( a1 == nullptr ) return 2; v4 = off_D129AC; sub_D01058(a1: off_D129AC + 1, a2: a1, a3: 44); v5 = 0; v6 = 0; for ( i = 0; i < v4[2]; ++i ) { v8 = v4[3] + v6; *(_BYTE *)(v8 + 56) = 0; *(_DWORD *)(v8 + 48) = 0; *(_DWORD *)(v8 + 32) = 0; *(_DWORD *)(v8 + 36) = 0; *(_DWORD *)(v8 + 40) = 0; __asm { SVC 0x5D ; ']' } v13 = v4[3] + v6; v14 = v4[1] + v5; *(_DWORD *)(v13 + 52) = v8; sub_D01058(a1: v13, a2: v14, a3: 32); v5 += 32; v6 += 60; } return 0; } /* ==== asd_set_reg42570_field [tier=EXACT size=68] ==== */ // Reads register unk_D42570 indexed by ctx+12 and rewrites a field selected by the // (a2, a3) mode pair. int __fastcall asd_set_reg42570_field(int a1, int a2, int a3) { _DWORD *v3; // r7 int _14028; // r0 unsigned __int8 v8; // r3 unsigned int v9; // r2 char v10; // r0 if ( a1 == 0 ) return 2; v3 = off_D0A234; _14028 = asd_reg_read_14028(a1: *((_DWORD *)off_D0A234 + 94), a2: *(_DWORD *)(a1 + 12), a3); v9 = _14028; if ( a2 != 0 ) { if ( a3 == 1 ) { v10 = 1; goto LABEL_9; } if ( a3 == 2 ) { v10 = 2; LABEL_9: v9 = v9 & 0xFFFFFFFC | v10 & 3; } } else { v9 = _14028 & 0xFFFFFFFC; } asd_reg_rw_19798(a1: v3[94], a2: *(_DWORD *)(a1 + 12), a3: v9, a4: v8); return 0; } /* ==== asd_set_reg425E4_mode [tier=EXACT size=118] ==== */ // Reads the register pair unk_D425E4 / unk_D425E8 indexed by ctx+12 and rewrites them // according to the (a2, a3) mode selection. int __fastcall asd_set_reg425E4_mode(int a1, int a2, int a3) { _DWORD *v3; // r9 __int16 _13E14; // r7 __int16 v8; // r2 __int16 _13ED0; // r0 __int16 v10; // r8 __int16 v11; // r2 if ( a1 == 0 ) return 2; v3 = off_D0ABD8; _13E14 = asd_reg_read_13E14(a1: *((_DWORD *)off_D0ABD8 + 123), a2: *(_DWORD *)(a1 + 12), a3); _13ED0 = asd_reg_read_13ED0(a1: v3[124], a2: *(_DWORD *)(a1 + 12), a3: v8); v10 = _13ED0; if ( a2 != 0 ) { v11 = _13E14 | 3; if ( a3 == 1 ) { v11 = _13E14 & 0xFFEC | 3; v10 = _13ED0 & 0xFFFC | 1; } else if ( a3 == 2 ) { v10 = _13ED0 & 0xFFFC | 2; v11 = _13E14 | 0x13; } } else { v10 = _13ED0 & 0xFFFC; v11 = _13E14 & 0xFFEC; } asd_reg_write_19670(a1: v3[123], a2: *(_DWORD *)(a1 + 12), a3: v11); asd_reg_write_19724(result: v3[124], a2: *(_DWORD *)(a1 + 12), a3: v10); return 0; } /* ==== asd_set_unk_D33328 [tier=EXACT size=16] ==== */ // Stores a caller dword into unk_D33328. int __fastcall asd_set_unk_D33328(_DWORD *a1) { if ( a1 == nullptr ) return 2; *(_DWORD *)off_D10844 = *a1; return 0; } /* ==== asd_set_unk_D33328_cfg0 [tier=EXACT size=14] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_unk_D33328. One of 0 near-identical siblings. int __fastcall asd_set_unk_D33328_cfg0() { int vars4; // [sp+4h] [bp+4h] BYREF vars4 = dword_D107FC; return asd_set_unk_D33328(a1: &vars4); } /* ==== asd_set_unk_D33328_cfg1 [tier=EXACT size=14] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_unk_D33328. One of 0 near-identical siblings. int __fastcall asd_set_unk_D33328_cfg1() { int vars4; // [sp+4h] [bp+4h] BYREF vars4 = dword_D107CC; return asd_set_unk_D33328(a1: &vars4); } /* ==== asd_set_unk_D33328_cfg2 [tier=EXACT size=14] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_unk_D33328. One of 0 near-identical siblings. int __fastcall asd_set_unk_D33328_cfg2() { int vars4; // [sp+4h] [bp+4h] BYREF vars4 = dword_D107E4; return asd_set_unk_D33328(a1: &vars4); } /* ==== asd_set_unk_D33328_cfg3 [tier=EXACT size=14] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_set_unk_D33328. One of 0 near-identical siblings. int __fastcall asd_set_unk_D33328_cfg3() { int vars4; // [sp+4h] [bp+4h] BYREF vars4 = dword_D107FC; return asd_set_unk_D33328(a1: &vars4); } /* ==== asd_signal_status_check [tier=EXACT size=178] ==== */ // Per-signal status probe: type 16 tests bit30 of unk_D424B4, type 48 takes the alternate // register path. int __fastcall asd_signal_status_check(int a1, int a2, __int16 a3) { unsigned int v3; // r4 int v4; // r0 _DWORD *v5; // r6 int (__fastcall *v6)(int, unsigned int, __int16); // r7 int v7; // r5 __int16 v8; // r2 int v9; // r0 int v10; // r5 int v11; // r0 _DWORD *v13; // r6 int (__fastcall *v14)(int, int, unsigned int); // r7 char v15; // r5 char v16; // r5 unsigned __int8 v17; // r5 if ( a1 == 0 ) return 2; v3 = *(_DWORD *)(a1 + 20); v4 = *(_DWORD *)(a1 + 40); if ( v4 != 48 ) { if ( v4 == 16 ) { v5 = off_D09B78; if ( asd_reg_read_13D24(a1: *((_DWORD *)off_D09B78 + 47), a2: v3, a3) << 30 == 0 ) { v6 = (int (__fastcall *)(int, unsigned int, __int16))off_D09AD4; v7 = off_D09AD4(a1: v5[44], a2: v3); v9 = v6(a1: v5[45], a2: v3, a3: v8); v10 = v7 & 0x100010 | v9 & 0x10 | v9 & 0x100000; v11 = v6(a1: v5[46], a2: v3, a3: v9 & 0x10); return (v11 & 0x100000 | v11 & 0x10 | v10) != 0; } return 1; } return 2; } v13 = off_D09B78; if ( asd_reg_read_13B74(a1: 2, a2: *((_DWORD *)off_D09B78 + 53), a3: v3) << 30 != 0 ) return 1; v14 = off_D09B7C; v15 = off_D09B7C(a1: 2, a2: v13[49], a3: v3); v16 = v15 | v14(a1: 2, a2: v13[50], a3: v3); v17 = v16 | v14(a1: 2, a2: v13[51], a3: v3); return (((unsigned __int8)v14(a1: 2, a2: v13[52], a3: v3) | v17) & 0x10) != 0; } /* ==== asd_srm_check_receiver_id [tier=EXACT size=28] ==== */ // Opcode 0x303 (disp_srm_check_receiver_id). int __fastcall asd_srm_check_receiver_id(char *a1) { int v2; // r1 unsigned int v3; // r2 unsigned int v4; // r3 if ( a1 != nullptr && asd_validate_ptr((unsigned int)a1, a2: 5u) != 0 ) return asd_srm_sub_131F8(a1, a2: v2, a3: v3, a4: v4); else return 2; } /* ==== asd_srm_header_check [tier=EXACT size=178] ==== */ // SRM header validation + signature dispatch. // bytes[2:4] BE16 = version, must equal the caller's computed version // bytes[5:8] BE24 = SRM length field (v5) // byte0>>4 == 8 : HDCP1 SRM. Bounded: reject unless 43 <= v5 <= 5120 // (SUB #0x2B / CMP #0x13D5 / BHI), then asd_srm_verify_t8(buf, v5-35). // byte0>>4 == 9 and byte0&0xF == 1 : HDCP2 SRM. ONLY a lower bound is applied // (CMP #0x186 / BHI); v5 has NO upper bound and is never compared // against the transport length. Calls asd_srm_verify_t9(buf, v5-379). // Accepts when the verifier returns 0 OR 0xFFFF000A. int __fastcall asd_srm_header_check(int a1, int a2, unsigned __int8 *a3) { unsigned int v3; // r1 unsigned int v4; // r3 unsigned int v5; // r0 int v6; // r0 int result; // r0 int v8; // r1 bool v9; // zf v4 = *a3 | (a3[1] << 8) | ((a3[2] | (a3[3] << 8)) << 16); if ( HIBYTE(v4) + ((v4 >> 8) & 0xFF00) != a1 ) return 25; v3 = a3[4] | (a3[5] << 8) | ((a3[6] | (a3[7] << 8)) << 16); v5 = ((v3 >> 8) & 0xFF00) + ((v3 << 8) & 0xFF0000 | HIBYTE(v3)); if ( *a3 >> 4 == 9 ) { if ( (*a3 & 0xF) == 1 ) { if ( v5 > 0x186 ) { v6 = ((int (__fastcall *)(unsigned __int8 *, unsigned int))loc_D13750)(a1: a3, a2: v5 - 379); goto LABEL_12; } return 26; } return 2; } if ( *a3 >> 4 != 8 ) return 2; if ( v5 - 43 > 0x13D5 ) return 26; v6 = ((int (__fastcall *)(unsigned __int8 *, unsigned int))loc_D135C4)(a1: a3, a2: v5 - 35); LABEL_12: v8 = v6; result = 0; v9 = v8 == dword_D13578; if ( v8 != dword_D13578 ) v9 = v8 == 0; if ( !v9 ) return 24; return result; } /* ==== asd_srm_op_301 [tier=EXACT size=152] ==== */ // Opcode 0x301. int __fastcall asd_srm_op_301(unsigned int a1, unsigned int a2, int *a3, int a4, int a5, int a6, int a7) { int *v7; // r7 int result; // r0 int v12; // r1 int v13; // r3 __int64 v14; // r0 unsigned int *v15; // r2 _BYTE *v16; // r3 int v17[1024]; // [sp+0h] [bp-1408h] BYREF int v18; // [sp+1404h] [bp-4h] v7 = off_D134B8; v18 = *off_D134B8; bzero_core(result: v17, a2: 0x1400u); result = 2; if ( a2 - 48 <= 0x13D0 && a3 != nullptr ) { if ( asd_validate_ptr(a1: (unsigned int)a3, a2) != 0 && (*((unsigned __int8 *)off_D134BC[0] + 3) | (*((unsigned __int8 *)off_D134BC[0] + 2) << 8)) < a1 ) { sub_D01058(a1: v17, a2: a3, a3: a2); result = asd_srm_header_check(a1, a2: v12, a3: (unsigned __int8 *)v17); if ( result == 0 ) { memcpy_aligned(result: (int *)off_D134BC[0], a2: v17, a3: a2, a4: v13); *off_D134C0 = a2; asd_srm_sub_12EC4(); result = 0; } } else { result = 2; } } if ( *v7 != v18 ) { v14 = ((__int64 (__fastcall *)(int, int))loc_D1987C)(a1: result, a2: *v7 - v18); return asd_srm_store(a1: v14, a2: (int *)HIDWORD(v14), a3: v15, a4: v16); } return result; } /* ==== asd_srm_query [tier=EXACT size=28] ==== */ // Opcode 0x302 (disp_srm_query). int __fastcall asd_srm_query(char *a1) { unsigned int v2; // r1 unsigned int v3; // r2 unsigned int v4; // r3 if ( a1 != nullptr && asd_validate_ptr((unsigned int)a1, a2: 5u) != 0 ) return asd_srm_sub_13174(a1, a2: v2, a3: v3, a4: v4); else return 2; } /* ==== asd_srm_read [tier=EXACT size=96] ==== */ // Opcode 0x300 (HDCP-side disp_srm_read). int __fastcall asd_srm_read(int *a1, unsigned int a2, _DWORD *a3, _BYTE *a4) { int result; // r0 int *v9; // r1 result = 2; if ( a1 != nullptr && a3 != nullptr ) { if ( asd_validate_ptr((unsigned int)a1, a2: 4u) == 0 || asd_validate_ptr(a1: (unsigned int)a3, a2: 4u) == 0 || a4 != nullptr && asd_validate_ptr(a1: (unsigned int)a4, a2) == 0 ) { return 2; } v9 = off_D134C0; *a1 = *((unsigned __int8 *)off_D134BC[0] + 3) | (*((unsigned __int8 *)off_D134BC[0] + 2) << 8); *a3 = *v9; result = 0; if ( a2 != 0 && a4 != nullptr ) { if ( *v9 > a2 ) return 2; sub_D01058(a1: a4, a2: off_D134BC[0], a3: *v9); return 0; } } return result; } /* ==== asd_srm_store [tier=EXACT size=374] ==== */ // RPC 0x308. a1=transport length (gated 48..5120), a2=caller buffer, a3/a4=outputs. // Copies a1 bytes into a 5120-byte stack buffer, then parses a 24-bit BE length from // header bytes 5..7 (v18) which is NEVER validated against a1, and uses it both as the // verification length and as the copy-out length into byte_D1F038 (also 5120 bytes). int __fastcall asd_srm_store(unsigned int a1, int *a2, unsigned int *a3, _BYTE *a4) { int v4; // r10 int v5; // r11 _DWORD *v10; // r0 unsigned int v15; // r6 int v16; // r1 int v18; // r0 int v19; // r3 _QWORD v20[511]; // [sp+8h] [bp-1404h] BYREF int v21; // [sp+1408h] [bp-4h] v21 = 858993459; v10 = bzero_core(result: v20, a2: 0x1400u); __asm { SVC 0x8D } v15 = (unsigned int)v10; v16 = 2; if ( a1 - 48 > 0x13D0 || a2 == nullptr || a3 == nullptr ) goto LABEL_14; if ( asd_validate_ptr(a1: (unsigned int)a2, a2: a1) == 0 || asd_validate_ptr(a1: (unsigned int)a3, a2: 4u) == 0 || asd_validate_ptr(a1: (unsigned int)a4, a2: 1u) == 0 ) { v16 = 2; goto LABEL_14; } *a3 = 0xFFFF; *a4 = 0; v4 = *((unsigned __int16 *)off_D134BC[0] + 1); sub_D01058(a1: v20, a2, a3: a1); a2 = (int *)v20[0]; v5 = v20[0] >> 24; a1 = (v5 & 0xFF0000 | HIBYTE(HIDWORD(v20[0]))) + ((HIDWORD(v20[0]) >> 8) & 0xFF00); if ( a1 < 0x13FC ) a1 += 5; if ( (v20[0] & 0xF0) == 0x80 && v15 <= 0x14 && ((1 << v15) & 0x10000C) != 0 ) asd_srm_sub_1A54(); while ( 1 ) { a2 = (int *)((((unsigned int)a2 >> 8) & 0xFF00) + (unsigned __int8)v5); v18 = asd_srm_header_check(a1: (int)a2, a2: (unsigned __int8)v5, a3: (unsigned __int8 *)v20); v16 = v18; if ( bswap32(v4 << 16) >= (unsigned int)a2 ) { if ( v18 == 0 ) *a4 = 1; } else { if ( v18 != 0 ) goto LABEL_14; *a3 = (unsigned int)a2; *a4 = 1; memcpy_aligned(result: (int *)off_D134BC[0], a2: (int *)v20, a3: a1, a4: v19); *off_D134C0 = a1; } v16 = 0; LABEL_14: if ( v21 == 858993459 ) return v16; ((void (__fastcall *)(int, int))loc_D1987C)(a1: 858993459 - v21, a2: v16); } } /* ==== asd_srm_sub_10B30 [tier=EXACT size=18] ==== */ // Reachability-derived label: called only from the 'srm' RPC subsystem // (BFS over direct calls + tail calls from the named 0xsrm handlers). // Behaviour not individually identified. int __fastcall asd_srm_sub_10B30() { return (unsigned __int8)off_D10B44[7] + (((unsigned __int8)off_D10B44[6] << 8) | ((unsigned __int8)off_D10B44[5] << 16)); } /* ==== asd_srm_sub_12D4C [tier=EXACT size=100] ==== */ // Reachability-derived label: called only from the 'srm' RPC subsystem // (BFS over direct calls + tail calls from the named 0xsrm handlers). // Behaviour not individually identified. int __fastcall asd_srm_sub_12D4C(unsigned int *a1) { unsigned int v2; // r0 char *v4; // r8 unsigned int v5; // r9 unsigned int v6; // r7 int v7; // r5 int v8; // r10 int i; // r6 if ( a1 == nullptr ) return 2; v2 = asd_srm_sub_10B30(); if ( v2 < 0x2B ) return 26; v4 = off_D134BC[0]; v5 = v2 - 43; v6 = 0; LABEL_6: if ( v5 <= v6 ) return 0; v7 = (int)&v4[v6 + 9]; v8 = v4[v6 + 8] & 0x7F; for ( i = v8; ; --i ) { if ( i == 0 ) { v6 += 5 * v8 + 1; goto LABEL_6; } if ( ((int (__fastcall *)(int, unsigned int *, int))loc_D01000)(a1: v7, a2: a1, a3: 5) == 0 ) break; v7 += 5; } return 13; } /* ==== asd_srm_sub_12DB0 [tier=EXACT size=54] ==== */ // Reachability-derived label: called only from the 'srm' RPC subsystem // (BFS over direct calls + tail calls from the named 0xsrm handlers). // Behaviour not individually identified. int __fastcall asd_srm_sub_12DB0(unsigned int *a1) { char *v2; // r5 int i; // r6 if ( a1 == nullptr ) return 2; if ( asd_srm_sub_10B30() != 0 ) { v2 = off_D12DE8 + 12; for ( i = *((unsigned __int16 *)off_D12DE8 + 4) >> 6; i != 0; --i ) { if ( ((int (__fastcall *)(char *, unsigned int *, int))loc_D01000)(a1: v2, a2: a1, a3: 5) == 0 ) return 23; v2 += 5; } } return 0; } /* ==== asd_srm_sub_12EC4 [tier=EXACT size=656] ==== */ // Reachability-derived label: called only from the 'srm' RPC subsystem // (BFS over direct calls + tail calls from the named 0xsrm handlers). // Behaviour not individually identified. int __fastcall asd_srm_sub_12EC4() { unsigned int v0; // r3 int v1; // r11 unsigned int v2; // r6 unsigned int *v3; // r0 unsigned __int8 v4; // r10 int v5; // r7 unsigned int v6; // r8 unsigned int v7; // r1 unsigned int v8; // r2 char *v9; // r4 unsigned int v10; // r5 unsigned int v11; // r0 int v12; // r0 int v13; // r1 unsigned int v14; // r0 unsigned int v15; // r2 int v16; // r1 int v17; // r12 unsigned int *v18; // r6 unsigned int v19; // r5 unsigned int v20; // r7 unsigned int v21; // r0 int v22; // r8 int v23; // lr int v24; // r1 int v25; // r3 char *v26; // r4 unsigned int v27; // r7 int v28; // r5 unsigned int v29; // r6 unsigned __int8 v30; // r10 unsigned int v31; // r8 unsigned int v32; // r0 int v33; // r0 unsigned int v34; // lr unsigned int v35; // r1 unsigned int v36; // r2 unsigned int v37; // r5 unsigned __int8 v38; // r0 int v39; // r12 int v40; // r4 int v41; // r7 int v42; // r3 unsigned int v44; // [sp+4h] [bp-208h] int v45; // [sp+8h] [bp-204h] _DWORD v46[128]; // [sp+Ch] [bp-200h] BYREF if ( asd_feature_enabled(a1: 15) ) { v1 = dword_D13154; v2 = 0; v3 = (unsigned int *)(dword_D13154 + 7300); v4 = 0; v5 = *(unsigned __int8 *)(dword_D13154 + 7316); v45 = 0; LABEL_3: v6 = *v3; v7 = 5 * v2 + v1; v8 = 7317; v9 = (char *)(v7 + 7317); while ( v2 <= 0x7F && v5 != 0 ) { if ( v6 << 31 != 0 ) { if ( asd_srm_sub_13174(a1: v9, a2: v7, a3: v8, a4: v0) != 0 ) { v10 = v1 + 4 * v2; v11 = *(_DWORD *)(v10 + 6788); v7 = *(_DWORD *)(v1 + 96 * v11 + 88); if ( v7 != 0 ) { asd_link_reset(a1: v11, a2: 0); asd_hdcp1_disable(a1: *(_DWORD *)(v10 + 6788)); v8 = (unsigned int)v46; v7 = v4; v46[v4] = *(_DWORD *)(v10 + 6788); v12 = ++v4; if ( (unsigned __int8)v12 != v12 ) v4 = -1; } } --v5; } ++v2; v9 += 5; v6 >>= 1; if ( v2 << 27 == 0 ) { v13 = v45; if ( (unsigned __int8)v45 < 3u ) v13 = v45 + 1; v45 = v13; v3 = (unsigned int *)(v1 + 4 * (unsigned __int8)v13 + 7300); goto LABEL_3; } } v14 = 0; v15 = 0; v16 = 0; v17 = 0; while ( v14 <= 3 && v17 == 0 ) { v44 = v14; v18 = (unsigned int *)(v1 + 4 * v14 + 7300); v19 = *v18; v20 = 0; v17 = 0; v21 = *v18; while ( 1 ) { v0 = v4; if ( v20 >= v4 || v17 != 0 ) break; v22 = *(unsigned __int8 *)(v1 + 7316); v23 = v22; while ( v23 != 0 ) { if ( v21 << 31 != 0 ) { if ( v46[v20] == *(_DWORD *)(v1 + 4 * v15 + 6788) ) { *(_BYTE *)(v1 + 7316) = --v22; v19 &= ~(1 << (v16 & 0x1F)); *v18 = v19; } --v23; } v17 = 1; v24 = (unsigned __int8)v16 + 1; ++v15; v21 >>= 1; v25 = (unsigned __int8)v24; if ( (unsigned __int8)v24 != v24 ) v25 = -1; v16 = v15 & 0x1F; if ( (v15 & 0x1F) != 0 ) v16 = v25; if ( v15 >= 0x80 ) goto LABEL_35; } v17 = 0; LABEL_35: ++v20; } v14 = v44 + 1; } v26 = (char *)(v1 + 6332); v27 = 0; v28 = *(unsigned __int8 *)(v1 + 6784); v29 = *(_DWORD *)(v1 + 6780); v30 = 0; while ( v27 <= 0x1F && v28 != 0 ) { if ( v29 << 31 != 0 ) { if ( asd_srm_sub_131F8(a1: v26, a2: v16, a3: v15, a4: v0) != 0 ) { v31 = v1 + 4 * v27; v32 = *(_DWORD *)(v31 + 6652); v16 = *(_DWORD *)(v1 + 96 * v32 + 88); if ( v16 != 0 ) { asd_link_reset(a1: v32, a2: 0); asd_hdcp2_disable(a1: *(_DWORD *)(v31 + 6652)); v15 = (unsigned int)v46; v16 = v30; v46[v30] = *(_DWORD *)(v31 + 6652); v33 = ++v30; if ( (unsigned __int8)v33 != v33 ) v30 = -1; } } --v28; } v26 += 5; ++v27; v29 >>= 1; } v34 = 0; v35 = *(_DWORD *)(v1 + 6780); v36 = 0; v37 = v35; v38 = 0; v39 = 0; while ( v34 < v30 && v39 == 0 ) { v40 = *(unsigned __int8 *)(v1 + 6784); v41 = v40; while ( v41 != 0 ) { if ( v37 << 31 != 0 ) { if ( v46[v34] == *(_DWORD *)(v1 + 4 * v36 + 6652) ) { *(_BYTE *)(v1 + 6784) = --v40; v35 &= ~(1 << (v38 & 0x1F)); *(_DWORD *)(v1 + 6780) = v35; } --v41; } v39 = 1; v42 = v38 + 1; ++v36; v37 >>= 1; ++v38; if ( (unsigned __int8)v42 != v42 ) v38 = -1; if ( v36 >= 0x20 ) goto LABEL_61; } v39 = 0; LABEL_61: ++v34; } } return 0; } /* ==== asd_srm_sub_13174 [tier=EXACT size=102] ==== */ // Reachability-derived label: called only from the 'srm' RPC subsystem // (BFS over direct calls + tail calls from the named 0xsrm handlers). // Behaviour not individually identified. int __fastcall asd_srm_sub_13174(char *a1, unsigned int a2, unsigned int a3, unsigned int a4) { char v4; // r1 char v5; // r2 unsigned int v6; // r5 char v7; // r3 char v8; // r4 char v9; // r0 int v10; // r0 unsigned int v12[2]; // [sp+0h] [bp-10h] BYREF unsigned int v13[2]; // [sp+8h] [bp-8h] BYREF v12[0] = (unsigned int)a1; v12[1] = a2; v13[0] = a3; v13[1] = a4; if ( a1 == nullptr ) return 2; v4 = a1[4]; v5 = *a1; v6 = (unsigned __int8)*off_D134BC[0]; v7 = a1[1]; v8 = a1[2]; v9 = a1[3]; LOBYTE(v13[0]) = v4; BYTE1(v13[0]) = v9; BYTE2(v13[0]) = v8; HIBYTE(v13[0]) = v7; LOBYTE(v13[1]) = v5; if ( v6 >> 4 == 9 ) { BYTE1(v12[0]) = v9; LOBYTE(v12[1]) = v5; HIBYTE(v12[0]) = v7; BYTE2(v12[0]) = v8; LOBYTE(v12[0]) = v4; v10 = asd_srm_sub_12DB0(a1: v12); } else { if ( v6 >> 4 != 8 ) return 0; v10 = asd_srm_sub_12D4C(a1: v13); } if ( v10 != 0 ) return 13; return 0; } /* ==== asd_srm_sub_131F8 [tier=EXACT size=78] ==== */ // Reachability-derived label: called only from the 'srm' RPC subsystem // (BFS over direct calls + tail calls from the named 0xsrm handlers). // Behaviour not individually identified. int __fastcall asd_srm_sub_131F8(char *a1, int a2, unsigned int a3, unsigned int a4) { unsigned int v4; // r1 char v5; // r1 char v6; // r2 char v7; // r3 char v8; // r4 int v9; // r0 unsigned int v11[2]; // [sp+0h] [bp-8h] BYREF v11[0] = a3; v11[1] = a4; if ( a1 == nullptr ) return 2; v4 = (unsigned __int8)*off_D134BC[0]; if ( v4 >> 4 == 9 ) { v9 = asd_srm_sub_12DB0((unsigned int *)a1); } else { if ( v4 >> 4 != 8 ) return 0; v5 = *a1; v6 = a1[1]; v7 = a1[2]; v8 = a1[3]; LOBYTE(v11[1]) = a1[4]; LOBYTE(v11[0]) = v5; BYTE1(v11[0]) = v6; BYTE2(v11[0]) = v7; HIBYTE(v11[0]) = v8; v9 = asd_srm_sub_12D4C(a1: v11); } if ( v9 != 0 ) return 23; return 0; } /* ==== asd_srm_sub_14A88 [tier=EXACT size=26] ==== */ // Reachability-derived label: called only from the 'srm' RPC subsystem // (BFS over direct calls + tail calls from the named 0xsrm handlers). // Behaviour not individually identified. int __fastcall asd_srm_sub_14A88(char *a1, char *a2, int a3) { char *v4; // r1 char v5; // t1 if ( a1 == a2 ) return 1; v4 = a2 - 1; while ( a3 != 0 ) { v5 = *a1++; v4[a3--] = v5; } return 0; } /* ==== asd_srm_sub_1A54 [tier=EXACT size=44] ==== */ // Reachability-derived label: called only from the 'srm' RPC subsystem // (BFS over direct calls + tail calls from the named 0xsrm handlers). // Behaviour not individually identified. int __fastcall asd_srm_sub_1A54() { _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF bzero_core(result: v5, a2: 0x20u); __asm { SVC 0xF2 } return 1; } /* ==== asd_start_link_task [tier=EXACT size=60] ==== */ // Clears dword_D33054, probes the power state, and on state 1 creates a task with // SVC 0x51; otherwise falls back to sub_D1464C. int __fastcall asd_start_link_task() { char *v0; // r5 BOOL v1; // r4 unsigned __int8 v2; // r0 v0 = off_D147C0; *((_DWORD *)off_D147C0 + 1) = 0; v1 = asd_probe_power_state(); if ( v1 ) { asd_full_reset(); } else if ( *((_DWORD *)v0 + 1) == 1 ) { v1 = false; v2 = (unsigned __int8)off_D14648; __asm { SVC 0x51 ; 'Q' } *v0 = (char)off_D14648; if ( v2 == 255 ) return 39; } return v1; } /* ==== asd_state_not_1 [tier=EXACT size=12] ==== */ // Returns dword_D33054 != 1. BOOL __fastcall asd_state_not_1() { return *((_DWORD *)off_D147C0 + 1) != 1; } /* ==== asd_state_not_1_cfg0 [tier=EXACT size=34] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_state_not_1. One of 0 near-identical siblings. int __fastcall asd_state_not_1_cfg0(_DWORD *a1) { int result; // r0 int v3; // r1 if ( a1 == nullptr ) return 2; a1[19] = 5; a1[16] = 6; result = asd_state_not_1(); v3 = 4; if ( result == 0 ) v3 = 2; a1[17] = v3; return result; } /* ==== asd_store_link_config [tier=EXACT size=74] ==== */ // Stores caller config: 40 bytes -> byte_D332FC and 0xD8 bytes -> byte_D42661+87. // Then returns 2 unless dword_D33310/14/18/1C are all non-zero (readiness check). // 12 call sites. int __fastcall asd_store_link_config(int *a1, int *a2, int a3, int a4) { _DWORD *v5; // r5 int v6; // r3 int result; // r0 if ( a1 == nullptr || a2 == nullptr ) return 2; v5 = off_D1881C; sub_D01058(a1: (char *)off_D1881C + 4, a2: a1, a3: 40); memcpy_aligned(result: (int *)dword_D18820, a2, a3: 0xD8u, a4: v6); result = 2 * (v5[9] == 0); if ( v5[8] == 0 ) result = 2; if ( v5[7] == 0 ) result = 2; if ( v5[6] == 0 ) return 2; return result; } /* ==== asd_stream_enable_toggle [tier=EXACT size=44] ==== */ // Requires ctx && ctx[64]==6. a2!=0 -> sub_D17C94(ctx) gated on byte_D332FC bit0; // a2==0 -> sub_D17C48(ctx). Sets byte_D3330C. int __fastcall asd_stream_enable_toggle(int a1, int a2) { if ( a1 == 0 || *(_DWORD *)(a1 + 64) != 6 ) return 2; if ( a2 != 0 ) { if ( *((unsigned __int8 *)off_D18198 + 4) << 31 == 0 ) asd_dio_enable_all(a1); } else { asd_dio_disable_all(a1); } *((_BYTE *)off_D18198 + 20) = 1; return 0; } /* ==== asd_stream_enable_toggle_cfg0 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_stream_enable_toggle. One of 0 near-identical siblings. int __fastcall asd_stream_enable_toggle_cfg0(int a1) { return asd_stream_enable_toggle(a1, a2: 0); } /* ==== asd_stream_enable_toggle_cfg1 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_stream_enable_toggle. One of 0 near-identical siblings. int __fastcall asd_stream_enable_toggle_cfg1(int a1) { return asd_stream_enable_toggle(a1, a2: 0); } /* ==== asd_stream_enable_toggle_cfg10 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_stream_enable_toggle. One of 0 near-identical siblings. int __fastcall asd_stream_enable_toggle_cfg10(int a1) { return asd_stream_enable_toggle(a1, a2: 1); } /* ==== asd_stream_enable_toggle_cfg2 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_stream_enable_toggle. One of 0 near-identical siblings. int __fastcall asd_stream_enable_toggle_cfg2(int a1) { return asd_stream_enable_toggle(a1, a2: 0); } /* ==== asd_stream_enable_toggle_cfg3 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_stream_enable_toggle. One of 0 near-identical siblings. int __fastcall asd_stream_enable_toggle_cfg3(int a1) { return asd_stream_enable_toggle(a1, a2: 0); } /* ==== asd_stream_enable_toggle_cfg4 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_stream_enable_toggle. One of 0 near-identical siblings. int __fastcall asd_stream_enable_toggle_cfg4(int a1) { return asd_stream_enable_toggle(a1, a2: 0); } /* ==== asd_stream_enable_toggle_cfg5 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_stream_enable_toggle. One of 0 near-identical siblings. int __fastcall asd_stream_enable_toggle_cfg5(int a1) { return asd_stream_enable_toggle(a1, a2: 1); } /* ==== asd_stream_enable_toggle_cfg6 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_stream_enable_toggle. One of 0 near-identical siblings. int __fastcall asd_stream_enable_toggle_cfg6(int a1) { return asd_stream_enable_toggle(a1, a2: 1); } /* ==== asd_stream_enable_toggle_cfg7 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_stream_enable_toggle. One of 0 near-identical siblings. int __fastcall asd_stream_enable_toggle_cfg7(int a1) { return asd_stream_enable_toggle(a1, a2: 1); } /* ==== asd_stream_enable_toggle_cfg8 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_stream_enable_toggle. One of 0 near-identical siblings. int __fastcall asd_stream_enable_toggle_cfg8(int a1) { return asd_stream_enable_toggle(a1, a2: 1); } /* ==== asd_stream_enable_toggle_cfg9 [tier=EXACT size=6] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls asd_stream_enable_toggle. One of 0 near-identical siblings. int __fastcall asd_stream_enable_toggle_cfg9(int a1) { return asd_stream_enable_toggle(a1, a2: 1); } /* ==== asd_stream_enable_toggle_v2 [tier=EXACT size=44] ==== */ // Sibling of asd_stream_enable_toggle: requires ctx+64 == 6, then enables via // sub_D17C94 (gated on byte_D332FC bit0) or disables via sub_D17C48. int __fastcall asd_stream_enable_toggle_v2(int a1, int a2) { if ( a1 == 0 || *(_DWORD *)(a1 + 64) != 6 ) return 2; if ( a2 != 0 ) { if ( *(unsigned __int8 *)off_D18144 << 31 == 0 ) asd_dio_enable_all(a1); } else { asd_dio_disable_all(a1); } *((_BYTE *)off_D18144 + 16) = 1; return 0; } /* ==== asd_stream_op_D17DD0_on [tier=EXACT size=6] ==== */ // Tail-calls sub_D17DD0(a1, 1) - the 'enable' form of that operation. int __fastcall asd_stream_op_D17DD0_on(int a1) { return asd_stream_enable_toggle_v2(a1, a2: 1); } /* ==== asd_stream_reset [tier=EXACT size=46] ==== */ // Requires ctx+64 == 6, clears state via the bzero wrapper, then calls sub_D1853C. int __fastcall asd_stream_reset(int a1) { int vars0; // [sp+0h] [bp+0h] int vars4; // [sp+4h] [bp+4h] vars0 = 0; vars4 = 0; if ( a1 == 0 || *(_DWORD *)(a1 + 64) != 6 ) return 2; if ( asd_bzero_core_cfg1() != 0 ) return 18; return asd_stream_slot_update(a1: 0, a2: 0, a3: 0, a4: 0); } /* ==== asd_stream_slot_update [tier=EXACT size=124] ==== */ // Updates the active stream slot: requires the link at unk_D33308 to be enabled and its // value at unk_D33320 to match a3, then advances the unk_D332F8 counter. int __fastcall asd_stream_slot_update(int a1, int a2, int a3, int a4) { _DWORD *v4; // r0 int v5; // r3 unsigned int v6; // r4 bool v7; // zf int v8; // r5 int result; // r0 v4 = off_D18918; if ( a4 != 0 ) { v5 = *((_DWORD *)off_D18918 + 4); if ( *(_BYTE *)(*((_DWORD *)off_D18918 + 9) + v5) != 0 && *(_DWORD *)(*((_DWORD *)off_D18918 + 10) + 4 * v5) == a3 ) { v6 = *(_DWORD *)off_D18918; v8 = *(_DWORD *)off_D18918 + 1; v7 = v8 == 0; if ( *(_DWORD *)off_D18918 != -1 ) { *(_DWORD *)off_D18918 = v8; v7 = v8 == -1; } if ( v7 ) { *v4 = 2000; LABEL_19: result = 10; goto LABEL_20; } if ( v6 > 0x7CE ) goto LABEL_19; } else { *(_DWORD *)off_D18918 = 0; } } else if ( *((_BYTE *)off_D18918 + 20) != 0 ) { v5 = *((_DWORD *)off_D18918 + 4); if ( *(_DWORD *)(*((_DWORD *)off_D18918 + 7) + 4 * v5) == a2 && *(_DWORD *)(*((_DWORD *)off_D18918 + 8) + 4 * v5) == a3 ) { goto LABEL_19; } } else { v5 = *((_DWORD *)off_D18918 + 4); } result = 10; if ( (unsigned int)(a2 - a3) <= 2 && *(_BYTE *)(*((_DWORD *)off_D18918 + 9) + v5) != 0 ) { result = 0; *((_BYTE *)off_D18918 + 20) = 0; } LABEL_20: *(_DWORD *)(*((_DWORD *)off_D1897C + 10) + 4 * v5) = a3; return result; } /* ==== asd_svc_op_200 [tier=EXACT size=26] ==== */ // Opcode 0x200. int __fastcall asd_svc_op_200(unsigned int a1) { if ( asd_validate_ptr(a1, a2: 0x28u) != 0 ) return asd_svc_sub_14BD4(a1); else return 2; } /* ==== asd_svc_op_201 [tier=EXACT size=200] ==== */ // Opcode 0x201. int __fastcall asd_svc_op_201(unsigned int *a1) { int v2; // r0 int v3; // r7 unsigned int v5; // [sp+18h] [bp-4h] if ( asd_validate_ptr((unsigned int)a1, a2: 0x20u) == 0 || asd_validate_ptr((unsigned int)a1, a2: *a1) == 0 ) return 2; v5 = *a1 - 32; v2 = gp_object_allocate(); v3 = 1; if ( v5 <= 0x920 && v2 == 0 ) { v3 = 1; if ( gp_populate_transient_object() == 0 ) { v3 = 1; if ( gp_operation_allocate() == 0 ) { if ( gp_set_operation_key() != 0 ) return 1; gp_operation_set_key(); return gp_cipher_update() != 0 || asd_svc_sub_273E(a1: (int)(a1 + 8), a2: v5) != a1[2]; } } } return v3; } /* ==== asd_svc_op_202 [tier=EXACT size=242] ==== */ // Opcode 0x202. unsigned int __fastcall asd_svc_op_202(unsigned int a1, unsigned int a2, unsigned int a3, unsigned int *a4) { int *v4; // r9 int v7; // r8 _BYTE v9[16]; // [sp+18h] [bp-14h] BYREF int v10; // [sp+28h] [bp-4h] v4 = off_D14A3C; v10 = *off_D14A3C; if ( asd_validate_ptr(a1, a2) == 0 || asd_validate_ptr(a1: (unsigned int)a4, a2: 4u) == 0 || asd_validate_ptr(a1: a3, a2: *a4) == 0 ) { a3 = 2; goto LABEL_7; } v7 = gp_object_allocate(); gp_crypto_op_0x35(); if ( v7 == 0 ) goto LABEL_10; LABEL_13: gp_operation_set_key(); LABEL_14: a3 = 1; LABEL_7: while ( *v4 != v10 ) { ((void (__fastcall *)(int))loc_D1987C)(a1: *v4 - v10); LABEL_10: if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || gp_set_operation_key() != 0 ) goto LABEL_13; gp_operation_set_key(); if ( gp_cipher_update() != 0 ) goto LABEL_14; sub_D01058(a1: a3 + 16, a2: v9, a3: 16); a3 = 0; } return a3; } /* ==== asd_svc_op_203 [tier=EXACT size=194] ==== */ // Opcode 0x203. int __fastcall asd_svc_op_203(unsigned int a1, unsigned __int8 *a2, int a3) { int result; // r0 int v6; // r0 int i; // r1 unsigned int v8; // r2 int v9; // r6 unsigned __int8 v10; // r7 int v11; // r3 char v12; // r1 unsigned int v13; // r0 _DWORD *v14; // r0 result = 2; if ( a1 <= 3 && a2 != nullptr && a3 == 16 ) { if ( asd_validate_ptr(a1: (unsigned int)a2, a2: 0x10u) != 0 ) { v6 = 0; for ( i = 0; i != 16; ++i ) { v8 = a2[i]; if ( ~v6 < v8 ) return 2; v6 += v8; } v9 = 1; v10 = 0; v11 = *((_DWORD *)off_D157D8 + 5 * a1); while ( v9 != 0 ) { v12 = v11 & v9; if ( (v11 & v9) != 0 ) v12 = 1; v9 *= 2; v10 += v12 & (v10 != 255); } if ( v10 >= 2u ) { if ( v6 != 0 ) sub_D01058(a1: a2, a2: (char *)off_D157D8 + 20 * a1 + 4, a3: 16); return 0; } if ( v10 == 1 ) { sub_D01058(a1: (char *)off_D157D8 + 20 * a1 + 4, a2, a3: 16); if ( asd_svc_sub_110EC(a1, a2, a3: 0x10u, a4: off_D157AC) != 0 ) return 27; v13 = *((_DWORD *)off_D158A8 + 19) - 20; if ( v13 >= 0x18 || (unsigned int)dword_D157B0 >> v13 << 31 == 0 ) { v14 = off_D157B4; *(_DWORD *)off_D157B4 = dword_D157B8; *v14 = 50331648; } return 0; } } return 2; } return result; } /* ==== asd_svc_op_204 [tier=EXACT size=26] ==== */ // Opcode 0x204. int __fastcall asd_svc_op_204(unsigned int a1) { if ( asd_validate_ptr(a1, a2: 0x20u) != 0 ) return asd_asic_family_lookup(a1); else return 2; } /* ==== asd_svc_op_205 [tier=EXACT size=74] ==== */ // Opcode 0x205. int __fastcall asd_svc_op_205(unsigned int a1, unsigned int a2) { int result; // r0 unsigned int v4; // r3 result = 2; if ( a1 <= 3 ) { v4 = ((a2 - ((a2 >> 1) & 0x55555555)) & 0x33333333) + (((a2 - ((a2 >> 1) & 0x55555555)) >> 2) & 0x33333333); if ( (16843009 * ((v4 + (v4 >> 4)) & 0xF0F0F0F)) >> 24 == 1 ) { *(_DWORD *)(dword_D14A44 + 20 * a1) |= a2; return 0; } } return result; } /* ==== asd_svc_op_206 [tier=EXACT size=76] ==== */ // Opcode 0x206. int __fastcall asd_svc_op_206(unsigned int a1, unsigned int a2) { int result; // r0 unsigned int v4; // r3 result = 2; if ( a1 <= 3 ) { v4 = ((a2 - ((a2 >> 1) & 0x55555555)) & 0x33333333) + (((a2 - ((a2 >> 1) & 0x55555555)) >> 2) & 0x33333333); if ( (16843009 * ((v4 + (v4 >> 4)) & 0xF0F0F0F)) >> 24 == 1 ) { *(_DWORD *)(dword_D14A44 + 20 * a1) &= ~a2; return 0; } } return result; } /* ==== asd_svc_op_207 [tier=EXACT size=34] ==== */ // Opcode 0x207. int __fastcall asd_svc_op_207(unsigned int a1) { void (__fastcall *v2)(unsigned int); // r1 if ( asd_validate_ptr(a1, a2: 4u) == 0 ) return 2; v2 = *((void (__fastcall **)(unsigned int))off_D14D68 + 25); if ( v2 == nullptr ) return 7; v2(a1); return 0; } /* ==== asd_svc_op_209 [tier=EXACT size=20] ==== */ // Opcode 0x209. int __fastcall asd_svc_op_209() { unsigned int v0; // r0 v0 = *((_DWORD *)off_D158A8 + 19) - 20; if ( v0 <= 0x17 ) return *((_DWORD *)off_D15710 + v0); else return 7; } /* ==== asd_svc_op_20A [tier=EXACT size=120] ==== */ // Opcode 0x20A. int __fastcall asd_svc_op_20A(int *a1, int a2) { int result; // r0 int v4; // r0 int i; // r1 unsigned int v6; // r2 int v7; // r2 unsigned __int8 v8; // r3 int v9; // r1 char v10; // r6 int *v11; // r1 int *v12; // r0 result = 2; if ( a1 != nullptr && a2 == 16 ) { if ( asd_validate_ptr((unsigned int)a1, a2: 0x10u) != 0 ) { v4 = 0; for ( i = 0; i != 16; ++i ) { v6 = *((unsigned __int8 *)a1 + i); if ( ~v4 < v6 ) return 2; v4 += v6; } v7 = 1; v8 = 0; v9 = *((_DWORD *)off_D157D8 + 5); while ( v7 != 0 ) { v10 = v9 & v7; if ( (v9 & v7) != 0 ) v10 = 1; v8 += (v8 != 255) & v10; v7 *= 2; } if ( v8 >= 2u ) { if ( v4 == 0 ) return 0; v11 = (int *)(off_D158A8 + 20); v12 = a1; LABEL_18: sub_D01058(a1: v12, a2: v11, a3: 16); return 0; } if ( v8 == 1 ) { v11 = a1; v12 = (int *)(off_D158A8 + 20); goto LABEL_18; } } return 2; } return result; } /* ==== asd_svc_op_20B [tier=EXACT size=14] ==== */ // Opcode 0x20B. int __fastcall asd_svc_op_20B(BOOL *a1) { *a1 = asd_svc_sub_2794(); return 0; } /* ==== asd_svc_op_20E [tier=EXACT size=8] ==== */ // Opcode 0x20E. int __fastcall asd_svc_op_20E() { __asm { SVC 0x7C ; '|' } return 0; } /* ==== asd_svc_sub_110EC [tier=EXACT size=88] ==== */ // Reachability-derived label: called only from the 'svc' RPC subsystem // (BFS over direct calls + tail calls from the named 0xsvc handlers). // Behaviour not individually identified. int __fastcall asd_svc_sub_110EC(unsigned int a1, unsigned __int8 *a2, unsigned int a3, int **a4) { int v4; // r4 unsigned int v5; // r4 unsigned int v6; // r2 int v7; // r7 int v8; // r6 int v9; // r4 int *v10; // r5 v4 = 2; if ( a1 <= 3 && a2 != nullptr ) { v5 = *((_DWORD *)off_D11180 + 19) - 20; if ( v5 >= 0x18 || (unsigned int)dword_D11184 >> v5 << 31 == 0 ) { v6 = a3 >> 2; while ( v6 != 0 ) { --v6; v7 = a2[3]; v8 = a2[2]; v9 = *a2 | (a2[1] << 8); v10 = *a4++; a2 += 4; *v10 = v9 | ((v8 | (v7 << 8)) << 16); } *(_DWORD *)off_D11144 = 4; *(_DWORD *)off_D11148 = (16 * a1) | 0x1000000; } return 0; } return v4; } /* ==== asd_svc_sub_14BD4 [tier=EXACT size=146] ==== */ // Reachability-derived label: called only from the 'svc' RPC subsystem // (BFS over direct calls + tail calls from the named 0xsvc handlers). // Behaviour not individually identified. int __fastcall asd_svc_sub_14BD4(int a1) { char *v1; // r6 int v3; // r5 int v4; // r0 int v5; // r2 int result; // r0 char v7; // r1 int (__fastcall *v8)(int); // r1 v1 = off_D14D68; *(_DWORD *)(a1 + 8) = 1; v3 = a1 + 8; v4 = *((_DWORD *)v1 + 19); *(_DWORD *)(v3 - 4) = v4; v5 = v4 - 1; // switch 43 cases result = 7; v7 = 0; switch ( v5 ) { case 0: case 4: case 5: case 7: case 9: case 10: case 11: case 14: case 16: case 18: case 19: case 23: case 24: case 28: case 29: case 37: goto LABEL_3; // switch jump case 1: case 2: case 8: case 13: case 15: case 20: case 22: case 25: case 26: case 27: case 30: case 31: case 32: case 33: case 34: case 35: case 36: case 39: case 40: case 41: case 42: v7 = 1; // jumptable 00D14BF2 cases 2,3,9,14,16,21,23,26-28,31-37,40-43 LABEL_3: *(_BYTE *)a1 = v7; // jumptable 00D14BF2 cases 1,5,6,8,10-12,15,17,19,20,24,25,29,30,38 goto LABEL_4; case 3: goto LABEL_9; case 6: case 17: case 21: v7 = 1; // jumptable 00D14BF2 cases 7,18,22 LABEL_9: *(_BYTE *)a1 = v7; // jumptable 00D14BF2 case 4 result = 7; if ( *((_DWORD *)v1 + 23) != 0 ) { v8 = *((int (__fastcall **)(int))v1 + 21); if ( v8 != nullptr ) { result = v8(a1: 7); if ( result == 0 ) { result = (*((int (__fastcall **)(int))v1 + 23))(a1: v3); if ( result == 0 ) { LABEL_4: if ( sysdrv_get_chip_id_pair() == 0 ) *(_QWORD *)(a1 + 16) = 0; result = 0; } } } } break; default: return result; } return result; // jumptable 00D14BF2 default case, cases 13,39 } /* ==== asd_svc_sub_273E [tier=EXACT size=84] ==== */ // Reachability-derived label: called only from the 'svc' RPC subsystem // (BFS over direct calls + tail calls from the named 0xsvc handlers). // Behaviour not individually identified. unsigned int __fastcall asd_svc_sub_273E(int a1, unsigned int a2) { unsigned int v2; // r2 unsigned int v3; // r1 unsigned int v4; // r3 unsigned int v5; // r4 unsigned int i; // r5 int v7; // r6 v2 = a2 >> 1; v3 = 0xFFFF; v4 = 0xFFFF; while ( v2 != 0 ) { v5 = v2; if ( v2 >= 0x168 ) v5 = 360; v2 -= v5; for ( i = 0; i < v5; ++i ) { v7 = *(unsigned __int16 *)(a1 + 2 * i); v3 += v7; v4 += v3; } a1 += 2 * v5; v4 = HIWORD(v4) + (unsigned __int16)v4; v3 = HIWORD(v3) + (unsigned __int16)v3; } return ((65537 * v4) & 0xFFFF0000) + HIWORD(v3) + (unsigned __int16)v3; } /* ==== asd_svc_sub_2794 [tier=EXACT size=34] ==== */ // Reachability-derived label: called only from the 'svc' RPC subsystem // (BFS over direct calls + tail calls from the named 0xsvc handlers). // Behaviour not individually identified. BOOL __fastcall asd_svc_sub_2794() { int *v0; // r4 int v1; // r0 void (__fastcall *v2)(int *); // r1 v0 = off_D027B8; v1 = *off_D027B8; if ( *off_D027B8 == 255 ) { v2 = *((void (__fastcall **)(int *))off_D027BC + 28); if ( v2 != nullptr ) { v2(a1: off_D027B8); v1 = *v0; } else { v1 = 255; } } return v1 != 0; } /* ==== asd_sync_link_state [tier=EXACT size=46] ==== */ // Queries SYS_DRV RPC 0x1021 (verb 0, byte_D33050); on failure or a zero reply runs // sub_D1464C, otherwise drains sub_D14744 until it returns 0. void __noreturn asd_sync_link_state() { int v0; // r1 int v5; // [sp+4h] [bp-4h] BYREF v0 = (unsigned __int8)*off_D147C0; v5 = 0; if ( sysdrv_rpc_1021(a1: 0, a2: v0, a3: (int)&v5) != 0 || v5 == 0 ) { asd_full_reset(); } else { while ( asd_link_state_poll() != 0 ) ; } while ( 1 ) __asm { SVC 0x56 ; 'V' } } /* ==== asd_sysdrv_feature_mask_get_cfg0 [tier=EXACT size=40] ==== */ // Thin per-instance configuration wrapper: loads constant register offsets // and tail-calls sysdrv_feature_mask_get. One of 0 near-identical siblings. int __fastcall asd_sysdrv_feature_mask_get_cfg0(int a1) { bool v1; // zf int v2; // r0 bool v3; // zf int v4; // r4 v1 = a1 == 25; if ( a1 != 25 ) v1 = a1 == 20; if ( !v1 ) return 0; v4 = 0; v2 = sysdrv_feature_mask_get(); v3 = v2 == dword_D027EC; if ( v2 != dword_D027EC ) v3 = v2 == 0; if ( !v3 ) return 1; return v4; } /* ==== asd_table_find [tier=EXACT size=316] ==== */ // Linear search over a (base, count) descriptor for the 16-byte record whose first dword // matches the key. int __fastcall asd_table_find(_DWORD *a1, int a2, int a3) { unsigned int v5; // r0 int v6; // r3 unsigned int i; // r4 int v8; // r5 unsigned int v9; // r1 int v10; // r7 int v14; // r4 int v15; // r6 __int64 v16; // r0 unsigned int *v17; // r12 unsigned int *v18; // r3 unsigned int *v19; // r2 int v20; // r4 unsigned int v21; // r4 unsigned int v22; // r2 unsigned int v23; // r8 unsigned int v24; // r7 unsigned int v25; // r12 unsigned int v27; // lr bool v28; // cf bool v29; // cf if ( a1 != nullptr ) { v5 = a1[1]; v6 = 16; for ( i = v5; i != 0; --i ) { v8 = *a1 + v6; if ( *(_DWORD *)(v8 - 16) == a2 ) { if ( *a1 == 0 ) return 2; v9 = 0; v10 = 32; while ( 1 ) { if ( v9 >= v5 ) return 6; __asm { SVC 0x5E ; '^' } v14 = a1[2]; v15 = v14 + v10; if ( *(_BYTE *)(v14 + v10 + 24) == 0 ) break; v10 += 60; __asm { SVC 0x5F ; '_' } ++v9; v5 = a1[1]; } sub_D01058(a1: v15 - 32, a2: v8 - 16, a3: 32); if ( v14 == 0 ) return 6; v16 = *(_QWORD *)(v8 - 12); __asm { SVC 0x7D ; '}' } *(_DWORD *)(v15 + 12) = v16; if ( (_DWORD)v16 == 0 ) { v20 = 1; __asm { SVC 0x5F ; '_' } return v20; } if ( *(_BYTE *)(v8 + 12) != 0 ) { HIDWORD(v16) = *(_DWORD *)(v8 - 8); v17 = (unsigned int *)(v8 + 8); v18 = (unsigned int *)(v8 + 4); v19 = (unsigned int *)v8; } else { HIDWORD(v16) = *(_DWORD *)(v8 - 8); if ( (unsigned int)(a3 + 12) > HIDWORD(v16) ) { __asm { SVC 0x5F ; '_' } return 2; } v19 = (unsigned int *)(v16 + a3); *(_DWORD *)(v14 + v10) = v16 + a3; v17 = (unsigned int *)(v16 + a3 + 8); v18 = (unsigned int *)(v16 + a3 + 4); } v21 = *v19; v22 = *v19 + 8; if ( v22 > HIDWORD(v16) ) { __asm { SVC 0x5F ; '_' } return 2; } v23 = *v18; v24 = *v18 + 12; if ( v24 > HIDWORD(v16) ) { __asm { SVC 0x5F ; '_' } return 2; } v25 = *v17; _CF = v21 >= v24; if ( v21 < v24 ) _CF = v23 >= v22; if ( !_CF ) { __asm { SVC 0x5F ; '_' } return 2; } *(_DWORD *)(v15 + 4) = v16 + v21; *(_DWORD *)(v15 + 8) = v16 + v23; v27 = *(_DWORD *)(v16 + v23 + 8) + v25; if ( v27 > HIDWORD(v16) ) { __asm { SVC 0x5F ; '_' } return 2; } v28 = v25 >= v22; if ( v25 < v22 ) v28 = v21 >= v27; if ( !v28 ) { __asm { SVC 0x5F ; '_' } return 2; } v29 = v25 >= v24; if ( v25 < v24 ) v29 = v23 >= v27; if ( !v29 ) { __asm { SVC 0x5F ; '_' } return 2; } *(_DWORD *)(v15 + 16) = v16 + v25; *(_BYTE *)(v15 + 24) = 1; v20 = 0; asd_reg_rw_15E66(); __asm { SVC 0x5F ; '_' } return v20; } v6 += 32; } } return 2; } /* ==== asd_task_ctl_1 [tier=EXACT size=52] ==== */ // Opcode 0xFFFF0001. int __fastcall asd_task_ctl_1(int a1, int a2, void (__fastcall *a3)(int *), int a4) { int platform_info; // r4 void (__fastcall *v6)(int *); // [sp+0h] [bp-8h] BYREF int v7; // [sp+4h] [bp-4h] BYREF v6 = a3; v7 = a4; HIBYTE(v7) = 1; platform_info = asd_get_platform_info(a1: (int *)&v6, a2: (_BYTE *)&v7 + 3, a3); if ( (asd_state_not_1() | platform_info) == 0 ) { if ( HIBYTE(v7) == 0 ) return asd_opt_cb_D330CC(); platform_info = asd_mmio_3250000_rmw(); } if ( platform_info == 0 ) return asd_opt_cb_D330CC(); return platform_info; } /* ==== asd_task_ctl_2 [tier=EXACT size=212] ==== */ // Opcode 0xFFFF0002. int __fastcall asd_task_ctl_2(int a1, int a2, int a3, int a4) { int started; // r4 void *v5; // r0 void *v6; // r0 void (__fastcall *v8)(int *); // r2 int v9; // [sp+0h] [bp-8h] BYREF int var4[2]; // [sp+4h] [bp-4h] BYREF v9 = a3; var4[0] = a4; HIBYTE(var4[0]) = 1; started = asd_alloc_handles(a1: 1); if ( started == 0 ) { started = asd_start_link_task(); if ( started == 0 ) { started = asd_get_platform_info(a1: &v9, a2: (_BYTE *)var4 + 3, a3: v8); if ( started == 0 ) started = asd_feature_block_init(a1: v9); } if ( HIBYTE(var4[0]) != 0 ) { if ( started != 0 ) goto LABEL_2; started = asd_link_ops_init(a1: v9); if ( started != 0 ) goto LABEL_2; started = asd_aux_ops_init(a1: v9); if ( started != 0 ) goto LABEL_2; started = asd_set_feature_levels(); } if ( started == 0 ) { started = asd_hw_init(a1: v9, a2: HIBYTE(var4[0])); if ( started == 0 ) { started = asd_sysdrv_feature_mask_get_cfg0(a1: v9); if ( started == 0 ) { started = asd_read_caps_blob(a1: v9); if ( (unsigned int)(started - 7) <= 0x1D && ((1 << (started - 7)) & dword_D025EC) != 0 || started == 0 ) started = asd_hw_ops_init(a1: v9); if ( started == 0 ) started = asd_opt_cb_D330CC(); } } } } LABEL_2: if ( asd_svc_op_209() == 0 ) { if ( asd_query_opt_D49820() == 0 ) { sub_D12154(); v5 = sub_D12A34(); j_sub_D02794(a1: (int)v5); } if ( asd_query_opt_D4981C() == 0 ) { sub_D12154(); v6 = sub_D187A0(); j_sub_D02794(a1: (int)v6); } } return started; } /* ==== asd_task_ctl_5 [tier=EXACT size=52] ==== */ // Opcode 0xFFFF0005. int __fastcall asd_task_ctl_5(int a1, int a2, void (__fastcall *a3)(int *), int a4) { int platform_info; // r4 void (__fastcall *v6)(int *); // [sp+0h] [bp-8h] BYREF int v7; // [sp+4h] [bp-4h] BYREF v6 = a3; v7 = a4; HIBYTE(v7) = 1; platform_info = asd_get_platform_info(a1: (int *)&v6, a2: (_BYTE *)&v7 + 3, a3); if ( (asd_state_not_1() | platform_info) == 0 ) { if ( HIBYTE(v7) == 0 ) return asd_opt_cb_D330CC(); platform_info = asd_foreach_dio_entry_v2(); } if ( platform_info == 0 ) return asd_opt_cb_D330CC(); return platform_info; } /* ==== asd_task_ctl_6 [tier=EXACT size=6] ==== */ // Opcode 0xFFFF0006. int __fastcall asd_task_ctl_6() { return asd_opt_cb_D330C0(); } /* ==== asd_task_ctl_7 [tier=EXACT size=92] ==== */ // Opcode 0xFFFF0007. int __fastcall asd_task_ctl_7(int a1, int a2, int a3, int a4) { __int64 v4; // r4 void (__fastcall *v5)(int *); // r2 _BYTE *v6; // r4 int v8; // [sp+0h] [bp-8h] BYREF int v9; // [sp+4h] [bp-4h] BYREF v8 = a3; v9 = a4; HIBYTE(v9) = 1; LODWORD(v4) = asd_state_not_1(); HIDWORD(v4) = asd_opt_cb_D330C0(); if ( HIDWORD(v4) == 0 ) { if ( asd_svc_op_209() == 0 ) goto LABEL_6; HIDWORD(v4) = asd_get_platform_info(a1: &v8, a2: (_BYTE *)&v9 + 3, a3: v5); if ( v4 == 0 ) { if ( HIBYTE(v9) != 0 ) { HIDWORD(v4) = asd_foreach_dio_entry_v2(); goto LABEL_7; } LABEL_6: HIDWORD(v4) = 0; } } LABEL_7: if ( (_DWORD)v4 != 0 ) { v6 = off_D026BC; if ( *(_BYTE *)off_D026BC == 0 && asd_svc_op_209() == 0 ) { asd_hdcp_reset_all(); asd_foreach_link_active(); *v6 = 1; } } return HIDWORD(v4); } /* ==== asd_tbl_get_D4238C [tier=EXACT size=22] ==== */ // Bounded table accessor: returns unk_D4238C[idx] when idx < unk_D42344, else 0. int __fastcall asd_tbl_get_D4238C(unsigned int a1) { int result; // r0 int v3; // r2 result = 0; v3 = *((_DWORD *)off_D10B2C + 19); if ( v3 != 0 && *((_DWORD *)off_D10B2C + 1) > a1 ) return *(_DWORD *)(v3 + 4 * a1); return result; } /* ==== asd_tbl_get_D423A8 [tier=EXACT size=22] ==== */ // Bounded table accessor: returns unk_D423A8[idx] when idx < unk_D42358, else 0. int __fastcall asd_tbl_get_D423A8(unsigned int a1) { int result; // r0 int v3; // r2 result = 0; v3 = *((_DWORD *)off_D10B2C + 26); if ( v3 != 0 && *((_DWORD *)off_D10B2C + 6) > a1 ) return *(_DWORD *)(v3 + 4 * a1); return result; } /* ==== asd_tbl_get_D423AC [tier=EXACT size=22] ==== */ // Bounded table accessor: returns unk_D423AC[idx] when idx < unk_D42358, else 0. int __fastcall asd_tbl_get_D423AC(unsigned int a1) { int result; // r0 int v3; // r2 result = 0; v3 = *((_DWORD *)off_D10B2C + 27); if ( v3 != 0 && *((_DWORD *)off_D10B2C + 6) > a1 ) return *(_DWORD *)(v3 + 4 * a1); return result; } /* ==== asd_tbl_get_D423B0 [tier=EXACT size=22] ==== */ // Bounded table accessor: returns unk_D423B0[idx] when idx < unk_D4235C, else 0. int __fastcall asd_tbl_get_D423B0(unsigned int a1) { int result; // r0 int v3; // r2 result = 0; v3 = *((_DWORD *)off_D10B2C + 28); if ( v3 != 0 && *((_DWORD *)off_D10B2C + 7) > a1 ) return *(_DWORD *)(v3 + 4 * a1); return result; } /* ==== asd_tbl_get_D423B4 [tier=EXACT size=22] ==== */ // Bounded table accessor: returns unk_D423B4[idx] when idx < unk_D42360, else 0. int __fastcall asd_tbl_get_D423B4(unsigned int a1) { int result; // r0 int v3; // r2 result = 0; v3 = *((_DWORD *)off_D10B2C + 29); if ( v3 != 0 && *((_DWORD *)off_D10B2C + 8) > a1 ) return *(_DWORD *)(v3 + 4 * a1); return result; } /* ==== asd_tbl_get_D423B8 [tier=EXACT size=22] ==== */ // Bounded table accessor: returns unk_D423B8[idx] when idx < unk_D4234C, else 0. int __fastcall asd_tbl_get_D423B8(unsigned int a1) { int result; // r0 int v3; // r2 result = 0; v3 = *((_DWORD *)off_D10B2C + 30); if ( v3 != 0 && *((_DWORD *)off_D10B2C + 3) > a1 ) return *(_DWORD *)(v3 + 4 * a1); return result; } /* ==== asd_tbl_get_D423BC [tier=EXACT size=22] ==== */ // Bounded table accessor: returns unk_D423BC[idx] when idx < unk_D42344, else 0. int __fastcall asd_tbl_get_D423BC(unsigned int a1) { int result; // r0 int v3; // r2 result = 0; v3 = *((_DWORD *)off_D10B2C + 31); if ( v3 != 0 && *((_DWORD *)off_D10B2C + 1) > a1 ) return *(_DWORD *)(v3 + 4 * a1); return result; } /* ==== asd_tbl_get_D423C0 [tier=EXACT size=24] ==== */ // Bounded table accessor: returns unk_D423C0[idx] when idx < unk_D42344, else 0. int __fastcall asd_tbl_get_D423C0(unsigned int a1) { int result; // r0 int v3; // r2 result = 0; v3 = *((_DWORD *)off_D10B2C + 32); if ( v3 != 0 && *((_DWORD *)off_D10B2C + 1) > a1 ) return *(_DWORD *)(v3 + 4 * a1); return result; } /* ==== asd_tbl_get_D423C4 [tier=EXACT size=24] ==== */ // Bounded table accessor: returns unk_D423C4[idx] when idx < unk_D42344, else 0. int __fastcall asd_tbl_get_D423C4(unsigned int a1) { int result; // r0 int v3; // r2 result = 0; v3 = *((_DWORD *)off_D10B2C + 33); if ( v3 != 0 && *((_DWORD *)off_D10B2C + 1) > a1 ) return *(_DWORD *)(v3 + 4 * a1); return result; } /* ==== asd_tbl_get_D423C8 [tier=EXACT size=24] ==== */ // Bounded table accessor: returns unk_D423C8[idx] when idx < unk_D42374, else 0. int __fastcall asd_tbl_get_D423C8(unsigned int a1) { int result; // r0 int v3; // r2 result = 0; v3 = *((_DWORD *)off_D10B2C + 34); if ( v3 != 0 && *((_DWORD *)off_D10B2C + 13) > a1 ) return *(_DWORD *)(v3 + 4 * a1); return result; } /* ==== asd_tbl_get_D423CC [tier=EXACT size=24] ==== */ // Bounded table accessor: returns unk_D423CC[idx] when idx < unk_D42378, else 0. int __fastcall asd_tbl_get_D423CC(unsigned int a1) { int result; // r0 int v3; // r2 result = 0; v3 = *((_DWORD *)off_D10B2C + 35); if ( v3 != 0 && *((_DWORD *)off_D10B2C + 14) > a1 ) return *(_DWORD *)(v3 + 4 * a1); return result; } /* ==== asd_tbl_get_D423D0 [tier=EXACT size=24] ==== */ // Bounded table accessor: returns unk_D423D0[idx] when idx < unk_D4237C, else 0. int __fastcall asd_tbl_get_D423D0(unsigned int a1) { int result; // r0 int v3; // r2 result = 0; v3 = *((_DWORD *)off_D10B2C + 36); if ( v3 != 0 && *((_DWORD *)off_D10B2C + 15) > a1 ) return *(_DWORD *)(v3 + 4 * a1); return result; } /* ==== asd_tbl_get_D423D8 [tier=EXACT size=24] ==== */ // Bounded table accessor: returns unk_D423D8[idx] when idx < unk_D42384, else 0. int __fastcall asd_tbl_get_D423D8(unsigned int a1) { int result; // r0 int v3; // r2 result = 0; if ( *((_DWORD *)off_D10B2C + 17) > a1 ) { v3 = *((_DWORD *)off_D10B2C + 38); if ( v3 != 0 ) return *(_DWORD *)(v3 + 4 * a1); } return result; } /* ==== asd_tbl_get_D423DC [tier=EXACT size=24] ==== */ // Bounded table accessor: returns unk_D423DC[idx] when idx < unk_D42388, else 0. int __fastcall asd_tbl_get_D423DC(unsigned int a1) { int result; // r0 int v3; // r2 result = 0; if ( *((_DWORD *)off_D10B2C + 18) > a1 ) { v3 = *((_DWORD *)off_D10B2C + 39); if ( v3 != 0 ) return *(_DWORD *)(v3 + 4 * a1); } return result; } /* ==== asd_tbl_get_D423E0 [tier=EXACT size=24] ==== */ // Bounded table accessor: returns dword_D423E0[idx] when idx < HIDWORD(qword_D42350), // else 0. int __fastcall asd_tbl_get_D423E0(unsigned int a1) { int result; // r0 int v3; // r2 result = 0; v3 = *((_DWORD *)off_D10B2C + 40); if ( v3 != 0 && *((_DWORD *)off_D10B2C + 5) > a1 ) return *(_DWORD *)(v3 + 4 * a1); return result; } /* ==== asd_test_bit [tier=EXACT size=14] ==== */ // Returns (value >> bit) & 1 for bit < 32, else 0. Used by asd_feature_level_check. unsigned int __fastcall asd_test_bit(unsigned int a1, unsigned int a2) { return (a1 >> a2) & (a2 < 0x20); } /* ==== asd_topo_sub_11238 [tier=EXACT size=98] ==== */ // Reachability-derived label: called only from the 'topo' RPC subsystem // (BFS over direct calls + tail calls from the named 0xtopo handlers). // Behaviour not individually identified. int __fastcall asd_topo_sub_11238(unsigned int a1, _DWORD *a2) { int v4; // r7 _DWORD *v5; // r6 int (__fastcall *v6)(unsigned int); // r1 int (__fastcall *v8)(unsigned int, _DWORD *); // r2 *a2 = 0; if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3F ) return 5; v4 = dword_D115E0; v5 = (_DWORD *)(dword_D115E0 + 96 * a1); if ( v5[1] != 1 ) return 5; if ( v5[2] == 0 ) { v6 = *(int (__fastcall **)(unsigned int))(dword_D115E0 + 6280); if ( v6 != nullptr && v6(a1: dword_D115E0 + 96 * a1) != 0 ) return 17; } v8 = *(int (__fastcall **)(unsigned int, _DWORD *))(v4 + 6316); if ( v8 != nullptr && v5[8] != 0 ) return v8(a1, a2); *a2 = v5[19]; return 0; } /* ==== asd_topo_sub_191E0 [tier=EXACT size=12] ==== */ // Reachability-derived label: called only from the 'topo' RPC subsystem // (BFS over direct calls + tail calls from the named 0xtopo handlers). // Behaviour not individually identified. int __fastcall asd_topo_sub_191E0() { int (*v0)(void); // r1 v0 = *((int (**)(void))off_D19238 + 2); if ( v0 != nullptr ) return v0(); else return 1; } /* ==== asd_topology_op_102 [tier=EXACT size=32] ==== */ // Opcode 0x102. int __fastcall asd_topology_op_102(unsigned int a1, _DWORD *a2) { if ( asd_validate_ptr(a1: (unsigned int)a2, a2: 4u) != 0 ) return asd_topo_sub_11238(a1, a2); else return 2; } /* ==== asd_topology_remove [tier=EXACT size=56] ==== */ // Opcode 0x101 - DTM topology REMOVE. int __fastcall asd_topology_remove(unsigned int a1) { if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3F ) return 5; asd_hdcp1_disable(a1); asd_hdcp2_disable(a1); bzero_core(result: (_DWORD *)(dword_D0D268 + 96 * a1), a2: 0x60u); return 0; } /* ==== asd_topology_update [tier=EXACT size=248] ==== */ // Opcode 0x100 - DTM TOPOLOGY_UPDATE. Sets a topology entry ACTIVE. int __fastcall asd_topology_update(unsigned int a1, unsigned int a2) { int result; // r0 int v5; // r8 unsigned int v6; // r5 int v7; // r1 int v8; // r2 int v9; // r3 int v10; // r1 _DWORD *v11; // r7 __int64 v12; // kr08_8 int (__fastcall *v13)(unsigned int); // r1 unsigned int *v14; // r12 _DWORD *v15; // r2 int v16; // r6 unsigned int i; // r3 int v18; // r6 bool v19; // zf int v20; // r1 bool v21; // zf if ( !asd_feature_enabled(a1: 15) ) return 8; if ( a1 > 0x3F ) return 5; if ( asd_validate_ptr(a1: a2, a2: 0x40u) == 0 ) return 2; v5 = dword_D115E0; v6 = dword_D115E0 + 96 * a1; *(_DWORD *)v6 = a1; *(_DWORD *)(v6 + 4) = 1; v7 = *(_DWORD *)(a2 + 4); v8 = *(_DWORD *)(a2 + 8); v9 = *(_DWORD *)(a2 + 12); v19 = *(_DWORD *)a2 == 1; *(_DWORD *)(v6 + 8) = *(_DWORD *)a2; *(_DWORD *)(v6 + 12) = v7; *(_DWORD *)(v6 + 16) = v8; *(_DWORD *)(v6 + 24) = *(_DWORD *)(a2 + 16); *(_DWORD *)(v6 + 28) = *(_DWORD *)(a2 + 20); *(_DWORD *)(v6 + 32) = *(_DWORD *)(a2 + 24); *(_DWORD *)(v6 + 36) = *(_DWORD *)(a2 + 28); v10 = *(_DWORD *)(a2 + 32); *(_DWORD *)(v6 + 20) = v9; v11 = (_DWORD *)(v6 + 20); *(_DWORD *)(v6 + 40) = v10; v12 = *(_QWORD *)(a2 + 48); *(_QWORD *)(v6 + 44) = *(_QWORD *)(a2 + 36); *(_QWORD *)(v6 + 52) = v12; if ( v19 ) { result = asd_topo_sub_191E0(); } else { v13 = *(int (__fastcall **)(unsigned int))(v5 + 6152); if ( v13 != nullptr ) result = v13(a1: v6); else result = 0; } if ( *(_DWORD *)(v6 + 64) == 5 && *(_DWORD *)(v6 + 36) != 0 ) { v14 = (unsigned int *)(v6 + 60); v15 = (_DWORD *)(v5 + 60); v16 = 0; for ( i = 0; v16 == 0 && i < 0x3F; ++i ) { if ( i == *(_DWORD *)v6 ) goto LABEL_22; v18 = *(v15 - 10); v19 = *v11 == v18; if ( *v11 == v18 ) v19 = *(v15 - 14) == 1; if ( !v19 ) goto LABEL_22; v20 = v15[1]; v21 = v20 == 5; if ( v20 == 5 ) v21 = i == *v15; if ( v21 ) { v16 = 1; *v14 = i; } else { LABEL_22: v16 = 0; } v15 += 24; } if ( v16 == 0 ) *v14 = a1; } return result; } /* ==== asd_validate_ptr [tier=EXACT size=52] ==== */ // Region gate for caller-supplied pointers: accepts [0x400000,0x600000) (the HDCP/DTM TA // window) or [0x4000000, 2^28). Returns 1 if (ptr,len) is inside an allowed window. int __fastcall asd_validate_ptr(unsigned int a1, unsigned int a2) { bool v3; // cc int result; // r0 unsigned int v5; // r1 v3 = a1 > 0x40000000; result = 0; if ( !v3 && a2 <= 0x10000000 ) { v5 = a2 + a1; if ( a1 >= 0x400000 && v5 < 0x600000 ) return 1; result = 0; if ( a1 >= 0x4000000 && v5 >> 28 == 0 ) return 1; } return result; } /* ==== asd_validated_call_D111C8 [tier=EXACT size=32] ==== */ // Validates the caller pointer (4 bytes) then tail-calls sub_D111C8. int __fastcall asd_validated_call_D111C8(unsigned int a1, _DWORD *a2) { if ( asd_validate_ptr(a1: (unsigned int)a2, a2: 4u) != 0 ) return asd_resolve_link_parent(a1, a2); else return 2; } /* ==== asd_validated_call_D11348 [tier=EXACT size=32] ==== */ // Validates the caller pointer (4 bytes) then tail-calls sub_D11348. int __fastcall asd_validated_call_D11348(unsigned int a1, _DWORD *a2) { if ( asd_validate_ptr(a1: (unsigned int)a2, a2: 4u) != 0 ) return asd_get_link_state(a1, a2); else return 2; } /* ==== asd_validated_feature_enabled [tier=EXACT size=32] ==== */ // Validates the caller pointer (asd_validate_ptr(p,4)) before delegating to the // feature-enabled query; returns 2 on a bad pointer. int __fastcall asd_validated_feature_enabled(int a1, _DWORD *a2) { if ( asd_validate_ptr(a1: (unsigned int)a2, a2: 4u) != 0 ) return asd_feature_enabled_cfg0(a1, a2); else return 2; } /* ==== asd_validated_link_check [tier=EXACT size=26] ==== */ // Validates the caller pointer (4 bytes) then delegates to asd_link_check_C930. int __fastcall asd_validated_link_check(unsigned int *a1) { if ( asd_validate_ptr((unsigned int)a1, a2: 4u) != 0 ) return asd_link_check_C930(a1); else return 2; } /* ==== asd_verify_reg_triplet [tier=EXACT size=98] ==== */ // Reads register unk_D4255C and, when bit31 is set, reads three words from unk_D42564 and // compares them against the caller's expected triplet. __int64 __fastcall asd_verify_reg_triplet(__int64 a1, int a2, int a3) { _DWORD *v3; // r6 unsigned int v4; // r4 __int16 v5; // r2 __int16 v6; // r2 int _13A54; // r8 int i; // r7 bool v9; // zf __int64 v11; // [sp+0h] [bp-10h] int v12; // [sp+8h] [bp-8h] int v13; // [sp+Ch] [bp-4h] v11 = a1; v12 = a2; v13 = a3; v3 = off_D1966C; v4 = a1; if ( asd_reg_read_13A54(a1: *((_DWORD *)off_D1966C + 89), a2: a1, a3: a2) << 31 != 0 ) { _13A54 = asd_reg_read_13A54(a1: v3[91], a2: v4, a3: v5); for ( i = 0; i != 3; ++i ) *((_DWORD *)&v11 + i + 1) = asd_reg_read_13A54(a1: v3[91], a2: v4, a3: v6); v9 = HIDWORD(v11) == v12; if ( HIDWORD(v11) == v12 ) v9 = HIDWORD(v11) == _13A54; if ( !v9 || HIDWORD(v11) != v13 ) { while ( asd_reg_read_13A54(a1: v3[90], a2: v4, a3: v6) << 31 == 0 ) ; } } return v11; } /* ==== asd_wait_signal16_idle [tier=EXACT size=102] ==== */ // For signal type 16 only: polls register unk_D424E8 while bit28 is set, waiting with // SVC 0x56, bounded by unk_D42370 iterations. int __fastcall asd_wait_signal16_idle(int a1) { _DWORD *v1; // r6 unsigned int v2; // r5 unsigned int v3; // r4 int _13B74; // r0 _DWORD *v5; // r7 int v10; // r5 if ( a1 == 0 ) return 2; if ( *(_DWORD *)(a1 + 40) != 16 ) return 0; v1 = off_D09964; v2 = 0; v3 = *(_DWORD *)(a1 + 20); _13B74 = asd_reg_read_13B74(a1: 0, a2: *((_DWORD *)off_D09964 + 60), a3: v3); v5 = off_D09AD0; while ( (_13B74 & 0x10000000) != 0 && v5[12] > v2 ) { __asm { SVC 0x56 ; 'V' } _13B74 = asd_reg_read_13B74(a1: 0, a2: v1[60], a3: v3); ++v2; } v10 = 0; asd_reg_read_13B74(a1: 0, a2: v1[41], a3: v3); asd_reg_write_1946C(a1: 0, a2: v1[41], a3: v3); return v10; } /* ==== asd_write_block_paged [tier=EXACT size=158] ==== */ // Writes a caller block in 64-word pages, refreshing the page base every 0x40 entries. int __fastcall asd_write_block_paged(int a1, int a2, int a3) { int v4; // r1 int result; // r0 int v6; // r9 int v7; // r7 int v8; // r4 _DWORD *v9; // r6 int v10; // r10 int v11; // r5 int _13E8C; // r0 __int16 v13; // r2 int v14; // r0 __int16 v15; // r2 int v16; // r1 __int16 v17; // r2 v4 = a1; result = 2; if ( v4 != 0 && a3 != 0 ) { v6 = a3 - 1; v7 = dword_D08134; v8 = 0; v9 = off_D08468; v10 = dword_D08130; while ( v8 != v6 ) { if ( v8 != 0 && (v8 & 0x3F) == 0 ) { v11 = v7; while ( asd_reg_read_13E8C(a1: v9[58], a2: v4, a3) << 31 == 0 ) { if ( v11 == 0 ) return 1; ++v11; } } _13E8C = asd_reg_read_13E8C(a1: v9[59], a2: v4, a3); asd_reg_write_196E4(a1: v9[59], a2: _13E8C & v10 | (*(unsigned __int8 *)(a2 + v8++) << 16), a3: v13); } v14 = asd_reg_read_13E8C(a1: v9[59], a2: v4, a3); asd_reg_write_196E4(a1: v9[59], a2: v14 & v10 | (*(unsigned __int8 *)(a2 + v6) << 16) | 1, a3: v15); while ( (asd_reg_read_13E8C(a1: v9[58], a2: v16, a3: v17) & 0x10) == 0 ) { if ( v7 == 0 ) return 1; ++v7; } return 0; } return result; } /* ==== asd_write_key_regs [tier=EXACT size=70] ==== */ // Runs GP crypto op 0x35 then performs 2 x 4 register writes of the derived words via // asd_reg_write_1946C using ctx+20 as the index. int __fastcall asd_write_key_regs(int a1, int a2, int a3) { int result; // r0 unsigned int i; // r8 int j; // r7 result = gp_crypto_op_0x35(); for ( i = 0; i <= 1; ++i ) { for ( j = 0; j != 4; ++j ) result = asd_reg_write_1946C(a1: a2, a2: a3, a3: *(_DWORD *)(a1 + 20)); } return result; } /* ==== bzero_core [tier=EXACT size=78] ==== */ // Zero-fill helper. _DWORD *__fastcall bzero_core(_DWORD *result, unsigned int a2) { bool v2; // cf unsigned int v3; // r1 _DWORD *v4; // r0 int v5; // r1 int v6; // r1 v2 = a2 >= 0x20; v3 = a2 - 32; do { if ( !v2 ) break; *result = 0; result[1] = 0; result[2] = 0; result[3] = 0; v4 = result + 4; *v4 = 0; v4[1] = 0; v4[2] = 0; v4[3] = 0; result = v4 + 4; v2 = v3 >= 0x20; v3 -= 32; } while ( v2 ); v2 = __CFSHL__(v3, 28); v5 = v3 << 28; if ( v2 ) { *result = 0; result[1] = 0; result[2] = 0; result[3] = 0; result += 4; } if ( v5 < 0 ) { *result = 0; result[1] = 0; result += 2; } v2 = __CFSHL__(v5, 2); v6 = 4 * v5; if ( v2 ) *result++ = 0; if ( v6 != 0 ) { if ( v6 < 0 ) { *(_WORD *)result = 0; result = (_DWORD *)((char *)result + 2); } if ( (v6 & 0x40000000) != 0 ) { *(_BYTE *)result = 0; return (_DWORD *)((char *)result + 1); } } return result; } /* ==== gp_asym_verify [tier=EXACT size=58] ==== */ // SVC 0xF2 -> SYS_DRV gp_crypto_dispatch opcode 0xB. Frame is 0x80 bytes: // frame[0]=opcode, frame[1]=msg class, {ptr,len} parameter pairs from frame[8]. int __fastcall gp_asym_verify() { __asm { SVC 0xF2 } return 1; } /* ==== gp_cipher_update [tier=EXACT size=50] ==== */ // SVC 0xF2 -> SYS_DRV gp_crypto_dispatch opcode 7. Frame is 0x80 bytes: // frame[0]=opcode, frame[1]=msg class, {ptr,len} parameter pairs from frame[8]. int __fastcall gp_cipher_update() { __asm { SVC 0xF2 } return 1; } /* ==== gp_crypto_op_0x35 [tier=EXACT size=42] ==== */ // SVC 0xF2 -> SYS_DRV gp_crypto_dispatch opcode 0x35. Frame is 0x80 bytes: // frame[0]=opcode, frame[1]=msg class, {ptr,len} parameter pairs from frame[8]. int __fastcall gp_crypto_op_0x35() { _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF bzero_core(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 1; } /* ==== gp_digest_do_final [tier=EXACT size=50] ==== */ // SVC 0xF2 -> SYS_DRV gp_crypto_dispatch opcode 0xD. Frame is 0x80 bytes: // frame[0]=opcode, frame[1]=msg class, {ptr,len} parameter pairs from frame[8]. int __fastcall gp_digest_do_final() { __asm { SVC 0xF2 } return 1; } /* ==== gp_mac_compute_final [tier=EXACT size=46] ==== */ // SVC 0xF2 -> SYS_DRV gp_crypto_dispatch opcode 0xC. Frame is 0x80 bytes: // frame[0]=opcode, frame[1]=msg class, {ptr,len} parameter pairs from frame[8]. int __fastcall gp_mac_compute_final() { _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF bzero_core(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 1; } /* ==== gp_object_allocate [tier=EXACT size=50] ==== */ // SVC 0xF2 -> SYS_DRV gp_crypto_dispatch opcode 0x30. Frame is 0x80 bytes: // frame[0]=opcode, frame[1]=msg class, {ptr,len} parameter pairs from frame[8]. int __fastcall gp_object_allocate() { _DWORD v5[12]; // [sp+8h] [bp+8h] BYREF bzero_core(result: v5, a2: 0x20u); __asm { SVC 0xF2 } return 1; } /* ==== gp_object_free [tier=EXACT size=38] ==== */ // SVC 0xF2 -> SYS_DRV gp_crypto_dispatch opcode 0x31. Frame is 0x80 bytes: // frame[0]=opcode, frame[1]=msg class, {ptr,len} parameter pairs from frame[8]. int __fastcall gp_object_free() { _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF bzero_core(result: v5, a2: 0x20u); __asm { SVC 0xF2 } return 1; } /* ==== gp_operation_allocate [tier=EXACT size=60] ==== */ // SVC 0xF2 -> SYS_DRV gp_crypto_dispatch opcode 1. Frame is 0x80 bytes: // frame[0]=opcode, frame[1]=msg class, {ptr,len} parameter pairs from frame[8]. int __fastcall gp_operation_allocate() { _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF bzero_core(result: v5, a2: 0x20u); __asm { SVC 0xF2 } return 1; } /* ==== gp_operation_free [tier=EXACT size=36] ==== */ // SVC 0xF2 -> SYS_DRV gp_crypto_dispatch opcode 2. Frame is 0x80 bytes: // frame[0]=opcode, frame[1]=msg class, {ptr,len} parameter pairs from frame[8]. int __fastcall gp_operation_free() { _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF bzero_core(result: v5, a2: 0x20u); __asm { SVC 0xF2 } return 1; } /* ==== gp_operation_set_key [tier=EXACT size=46] ==== */ // SVC 0xF2 -> SYS_DRV gp_crypto_dispatch opcode 5. Frame is 0x80 bytes: // frame[0]=opcode, frame[1]=msg class, {ptr,len} parameter pairs from frame[8]. int __fastcall gp_operation_set_key() { _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF bzero_core(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 1; } /* ==== gp_populate_transient_object [tier=EXACT size=52] ==== */ // SVC 0xF2 -> SYS_DRV gp_crypto_dispatch opcode 0x33. Frame is 0x80 bytes: // frame[0]=opcode, frame[1]=msg class, {ptr,len} parameter pairs from frame[8]. int __fastcall gp_populate_transient_object() { _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF bzero_core(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 1; } /* ==== gp_set_operation_key [tier=EXACT size=42] ==== */ // SVC 0xF2 -> SYS_DRV gp_crypto_dispatch opcode 3. Frame is 0x80 bytes: // frame[0]=opcode, frame[1]=msg class, {ptr,len} parameter pairs from frame[8]. int __fastcall gp_set_operation_key() { _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF bzero_core(result: v5, a2: 0x20u); __asm { SVC 0xF2 } return 1; } /* ==== j_asd_aux_op_D1891C [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_aux_op_D1891C(unsigned int a1, int a2) { return asd_aux_op_D1891C(a1, a2); } /* ==== j_asd_aux_op_D1891C_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_aux_op_D1891C_2(unsigned int a1, int a2) { return asd_aux_op_D1891C(a1, a2); } /* ==== j_asd_aux_op_D1891C_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_aux_op_D1891C_3(unsigned int a1, int a2) { return asd_aux_op_D1891C(a1, a2); } /* ==== j_asd_aux_op_D1891C_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_aux_op_D1891C_4(unsigned int a1, int a2) { return asd_aux_op_D1891C(a1, a2); } /* ==== j_asd_aux_op_D1891C_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_aux_op_D1891C_5(unsigned int a1, int a2) { return asd_aux_op_D1891C(a1, a2); } /* ==== j_asd_aux_op_D1891C_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_aux_op_D1891C_6(unsigned int a1, int a2) { return asd_aux_op_D1891C(a1, a2); } /* ==== j_asd_aux_op_D1891C_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_aux_op_D1891C_7(unsigned int a1, int a2) { return asd_aux_op_D1891C(a1, a2); } /* ==== j_asd_build_link_map [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_build_link_map(int *a1, int a2, int a3, int a4) { return asd_build_link_map(a1, a2, a3, a4); } /* ==== j_asd_build_link_map_full [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_build_link_map_full(unsigned int *a1) { return asd_build_link_map_full(a1); } /* ==== j_asd_build_link_map_full_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_build_link_map_full_2(unsigned int *a1) { return asd_build_link_map_full(a1); } /* ==== j_asd_clear_link_outputs [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_clear_link_outputs(struct asd_link_cfg *a1, _BYTE *a2, _BYTE *a3) { return asd_clear_link_outputs(a1, a2, a3); } /* ==== j_asd_clear_link_outputs_0 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_clear_link_outputs_0(struct asd_link_cfg *a1, _BYTE *a2, _BYTE *a3) { return asd_clear_link_outputs(a1, a2, a3); } /* ==== j_asd_clear_link_outputs_1 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_clear_link_outputs_1(struct asd_link_cfg *a1, _BYTE *a2, _BYTE *a3) { return asd_clear_link_outputs(a1, a2, a3); } /* ==== j_asd_clear_link_outputs_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_clear_link_outputs_10(int a1, _BYTE *a2, _BYTE *a3) { return asd_clear_link_outputs((struct asd_link_cfg *)a1, a2, a3); } /* ==== j_asd_clear_link_outputs_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_clear_link_outputs_11(int a1, _BYTE *a2, _BYTE *a3) { return asd_clear_link_outputs((struct asd_link_cfg *)a1, a2, a3); } /* ==== j_asd_clear_link_outputs_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_clear_link_outputs_12(int a1, _BYTE *a2, _BYTE *a3) { return asd_clear_link_outputs((struct asd_link_cfg *)a1, a2, a3); } /* ==== j_asd_clear_link_outputs_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_clear_link_outputs_13(int a1, _BYTE *a2, _BYTE *a3) { return asd_clear_link_outputs((struct asd_link_cfg *)a1, a2, a3); } /* ==== j_asd_clear_link_outputs_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_clear_link_outputs_14(int a1, _BYTE *a2, _BYTE *a3) { return asd_clear_link_outputs((struct asd_link_cfg *)a1, a2, a3); } /* ==== j_asd_clear_link_outputs_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_clear_link_outputs_15(int a1, _BYTE *a2, _BYTE *a3) { return asd_clear_link_outputs((struct asd_link_cfg *)a1, a2, a3); } /* ==== j_asd_clear_link_outputs_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_clear_link_outputs_16(int a1, _BYTE *a2, _BYTE *a3) { return asd_clear_link_outputs((struct asd_link_cfg *)a1, a2, a3); } /* ==== j_asd_clear_link_outputs_17 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_clear_link_outputs_17(int a1, _BYTE *a2, _BYTE *a3) { return asd_clear_link_outputs((struct asd_link_cfg *)a1, a2, a3); } /* ==== j_asd_clear_link_outputs_18 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_clear_link_outputs_18(int a1, _BYTE *a2, _BYTE *a3) { return asd_clear_link_outputs((struct asd_link_cfg *)a1, a2, a3); } /* ==== j_asd_clear_link_outputs_19 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_clear_link_outputs_19(int a1, _BYTE *a2, _BYTE *a3) { return asd_clear_link_outputs((struct asd_link_cfg *)a1, a2, a3); } /* ==== j_asd_clear_link_outputs_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_clear_link_outputs_2(int a1, _BYTE *a2, _BYTE *a3) { return asd_clear_link_outputs((struct asd_link_cfg *)a1, a2, a3); } /* ==== j_asd_clear_link_outputs_20 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_clear_link_outputs_20(int a1, _BYTE *a2, _BYTE *a3) { return asd_clear_link_outputs((struct asd_link_cfg *)a1, a2, a3); } /* ==== j_asd_clear_link_outputs_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_clear_link_outputs_3(int a1, _BYTE *a2, _BYTE *a3) { return asd_clear_link_outputs((struct asd_link_cfg *)a1, a2, a3); } /* ==== j_asd_clear_link_outputs_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_clear_link_outputs_4(int a1, _BYTE *a2, _BYTE *a3) { return asd_clear_link_outputs((struct asd_link_cfg *)a1, a2, a3); } /* ==== j_asd_clear_link_outputs_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_clear_link_outputs_5(int a1, _BYTE *a2, _BYTE *a3) { return asd_clear_link_outputs((struct asd_link_cfg *)a1, a2, a3); } /* ==== j_asd_clear_link_outputs_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_clear_link_outputs_6(int a1, _BYTE *a2, _BYTE *a3) { return asd_clear_link_outputs((struct asd_link_cfg *)a1, a2, a3); } /* ==== j_asd_clear_link_outputs_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_clear_link_outputs_7(int a1, _BYTE *a2, _BYTE *a3) { return asd_clear_link_outputs((struct asd_link_cfg *)a1, a2, a3); } /* ==== j_asd_clear_link_outputs_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_clear_link_outputs_8(int a1, _BYTE *a2, _BYTE *a3) { return asd_clear_link_outputs((struct asd_link_cfg *)a1, a2, a3); } /* ==== j_asd_clear_link_outputs_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_clear_link_outputs_9(int a1, _BYTE *a2, _BYTE *a3) { return asd_clear_link_outputs((struct asd_link_cfg *)a1, a2, a3); } /* ==== j_asd_connector_enable [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_enable(int a1) { return asd_connector_enable(a1); } /* ==== j_asd_connector_enable_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_enable_10(int a1) { return asd_connector_enable(a1); } /* ==== j_asd_connector_enable_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_enable_11(int a1) { return asd_connector_enable(a1); } /* ==== j_asd_connector_enable_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_enable_12(int a1) { return asd_connector_enable(a1); } /* ==== j_asd_connector_enable_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_enable_13(int a1) { return asd_connector_enable(a1); } /* ==== j_asd_connector_enable_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_enable_14(int a1) { return asd_connector_enable(a1); } /* ==== j_asd_connector_enable_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_enable_15(int a1) { return asd_connector_enable(a1); } /* ==== j_asd_connector_enable_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_enable_16(int a1) { return asd_connector_enable(a1); } /* ==== j_asd_connector_enable_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_enable_2(int a1) { return asd_connector_enable(a1); } /* ==== j_asd_connector_enable_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_enable_3(int a1) { return asd_connector_enable(a1); } /* ==== j_asd_connector_enable_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_enable_4(int a1) { return asd_connector_enable(a1); } /* ==== j_asd_connector_enable_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_enable_5(int a1) { return asd_connector_enable(a1); } /* ==== j_asd_connector_enable_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_enable_6(int a1) { return asd_connector_enable(a1); } /* ==== j_asd_connector_enable_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_enable_7(int a1) { return asd_connector_enable(a1); } /* ==== j_asd_connector_enable_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_enable_8(int a1) { return asd_connector_enable(a1); } /* ==== j_asd_connector_enable_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_enable_9(int a1) { return asd_connector_enable(a1); } /* ==== j_asd_connector_enable_v2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_enable_v2(unsigned int a1) { return asd_connector_enable_v2(a1); } /* ==== j_asd_connector_enable_v2_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_enable_v2_2(unsigned int a1) { return asd_connector_enable_v2(a1); } /* ==== j_asd_connector_enable_wait [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_enable_wait(unsigned int a1) { return asd_connector_enable_wait(a1); } /* ==== j_asd_connector_enable_wait_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_enable_wait_2(unsigned int a1) { return asd_connector_enable_wait(a1); } /* ==== j_asd_connector_program_seq [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_program_seq(unsigned int a1) { return asd_connector_program_seq(a1); } /* ==== j_asd_connector_program_seq_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_program_seq_2(unsigned int a1) { return asd_connector_program_seq(a1); } /* ==== j_asd_connector_state_check [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_state_check(unsigned int a1) { int v1; // r1 __int16 v2; // r2 return asd_connector_state_check(a1, a2: v1, a3: v2); } /* ==== j_asd_connector_state_check_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_connector_state_check_2(unsigned int a1) { int v1; // r1 __int16 v2; // r2 return asd_connector_state_check(a1, a2: v1, a3: v2); } /* ==== j_asd_dio_current_instance_op [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_current_instance_op(int a1) { return asd_dio_current_instance_op(a1); } /* ==== j_asd_dio_current_instance_op_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_current_instance_op_2(int a1) { return asd_dio_current_instance_op(a1); } /* ==== j_asd_dio_current_instance_op_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_current_instance_op_3(int a1) { return asd_dio_current_instance_op(a1); } /* ==== j_asd_dio_current_instance_op_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_current_instance_op_4(int a1) { return asd_dio_current_instance_op(a1); } /* ==== j_asd_dio_current_instance_op_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_current_instance_op_5(int a1) { return asd_dio_current_instance_op(a1); } /* ==== j_asd_dio_current_instance_op_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_current_instance_op_6(int a1) { return asd_dio_current_instance_op(a1); } /* ==== j_asd_dio_current_instance_op_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_current_instance_op_7(int a1) { return asd_dio_current_instance_op(a1); } /* ==== j_asd_dio_disable_all [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_disable_all(int a1) { return asd_dio_disable_all(a1); } /* ==== j_asd_dio_disable_all_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_disable_all_2(int a1) { return asd_dio_disable_all(a1); } /* ==== j_asd_dio_disable_all_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_disable_all_3(int a1) { return asd_dio_disable_all(a1); } /* ==== j_asd_dio_disable_all_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_disable_all_4(int a1) { return asd_dio_disable_all(a1); } /* ==== j_asd_dio_enable_all [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_enable_all(int a1) { return asd_dio_enable_all(a1); } /* ==== j_asd_dio_enable_all_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_enable_all_2(int a1) { return asd_dio_enable_all(a1); } /* ==== j_asd_dio_enable_all_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_enable_all_3(int a1) { return asd_dio_enable_all(a1); } /* ==== j_asd_dio_enable_all_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_enable_all_4(int a1) { return asd_dio_enable_all(a1); } /* ==== j_asd_dio_idle_check [tier=EXACT size=4] ==== */ // attributes: thunk BOOL __fastcall j_asd_dio_idle_check(unsigned int a1) { return asd_dio_idle_check(a1); } /* ==== j_asd_dio_idle_check_2 [tier=EXACT size=4] ==== */ // attributes: thunk BOOL __fastcall j_asd_dio_idle_check_2(unsigned int a1) { return asd_dio_idle_check(a1); } /* ==== j_asd_dio_idle_check_3 [tier=EXACT size=4] ==== */ // attributes: thunk BOOL __fastcall j_asd_dio_idle_check_3(unsigned int a1) { return asd_dio_idle_check(a1); } /* ==== j_asd_dio_idle_check_4 [tier=EXACT size=4] ==== */ // attributes: thunk BOOL __fastcall j_asd_dio_idle_check_4(unsigned int a1) { return asd_dio_idle_check(a1); } /* ==== j_asd_dio_idle_check_5 [tier=EXACT size=4] ==== */ // attributes: thunk BOOL __fastcall j_asd_dio_idle_check_5(unsigned int a1) { return asd_dio_idle_check(a1); } /* ==== j_asd_dio_idle_check_6 [tier=EXACT size=4] ==== */ // attributes: thunk BOOL __fastcall j_asd_dio_idle_check_6(unsigned int a1) { return asd_dio_idle_check(a1); } /* ==== j_asd_dio_idle_check_7 [tier=EXACT size=4] ==== */ // attributes: thunk BOOL __fastcall j_asd_dio_idle_check_7(unsigned int a1) { return asd_dio_idle_check(a1); } /* ==== j_asd_dio_program_regs [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_program_regs(unsigned int a1) { return asd_dio_program_regs(a1); } /* ==== j_asd_dio_program_regs_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_program_regs_2(unsigned int a1) { return asd_dio_program_regs(a1); } /* ==== j_asd_dio_program_regs_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_program_regs_3(unsigned int a1) { return asd_dio_program_regs(a1); } /* ==== j_asd_dio_program_regs_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_program_regs_4(unsigned int a1) { return asd_dio_program_regs(a1); } /* ==== j_asd_dio_program_regs_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_program_regs_5(unsigned int a1) { return asd_dio_program_regs(a1); } /* ==== j_asd_dio_program_regs_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_program_regs_6(unsigned int a1) { return asd_dio_program_regs(a1); } /* ==== j_asd_dio_program_regs_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_program_regs_7(unsigned int a1) { return asd_dio_program_regs(a1); } /* ==== j_asd_dio_read_block [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_read_block(int a1, unsigned int a2) { return asd_dio_read_block((struct asd_link_caps *)a1, a2); } /* ==== j_asd_dio_read_block10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_read_block10(_DWORD *a1, unsigned int a2) { return asd_dio_read_block10(a1, a2); } /* ==== j_asd_dio_read_block10_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_read_block10_2(_DWORD *a1, unsigned int a2) { return asd_dio_read_block10(a1, a2); } /* ==== j_asd_dio_read_block10_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_read_block10_3(_DWORD *a1, unsigned int a2) { return asd_dio_read_block10(a1, a2); } /* ==== j_asd_dio_read_block_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_read_block_2(int a1, unsigned int a2) { return asd_dio_read_block((struct asd_link_caps *)a1, a2); } /* ==== j_asd_dio_read_block_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_read_block_3(int a1, unsigned int a2) { return asd_dio_read_block((struct asd_link_caps *)a1, a2); } /* ==== j_asd_dio_read_pair [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_read_pair(unsigned int a1, char *a2, _BYTE *a3) { return asd_dio_read_pair(a1, a2, a3); } /* ==== j_asd_dio_read_pair_0 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_read_pair_0(unsigned int a1, char *a2, _BYTE *a3) { return asd_dio_read_pair(a1, a2, a3); } /* ==== j_asd_dio_read_pair_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_read_pair_2(unsigned int a1, char *a2, _BYTE *a3) { return asd_dio_read_pair(a1, a2, a3); } /* ==== j_asd_dio_read_pair_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_read_pair_3(unsigned int a1, char *a2, _BYTE *a3) { return asd_dio_read_pair(a1, a2, a3); } /* ==== j_asd_dio_read_pair_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_read_pair_4(unsigned int a1, char *a2, _BYTE *a3) { return asd_dio_read_pair(a1, a2, a3); } /* ==== j_asd_dio_read_pair_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_read_pair_5(unsigned int a1, char *a2, _BYTE *a3) { return asd_dio_read_pair(a1, a2, a3); } /* ==== j_asd_dio_read_pair_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_read_pair_6(unsigned int a1, char *a2, _BYTE *a3) { return asd_dio_read_pair(a1, a2, a3); } /* ==== j_asd_dio_set_pair [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_set_pair(unsigned int a1, int a2, int a3) { return asd_dio_set_pair(a1, a2, a3); } /* ==== j_asd_dio_set_pair_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_set_pair_2(unsigned int a1, int a2, int a3) { return asd_dio_set_pair(a1, a2, a3); } /* ==== j_asd_dio_set_pair_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_set_pair_3(unsigned int a1, int a2, int a3) { return asd_dio_set_pair(a1, a2, a3); } /* ==== j_asd_dio_set_pair_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_set_pair_4(unsigned int a1, int a2, int a3) { return asd_dio_set_pair(a1, a2, a3); } /* ==== j_asd_dio_set_pair_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_set_pair_5(unsigned int a1, int a2, int a3) { return asd_dio_set_pair(a1, a2, a3); } /* ==== j_asd_dio_set_pair_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_set_pair_6(unsigned int a1, int a2, int a3) { return asd_dio_set_pair(a1, a2, a3); } /* ==== j_asd_dio_set_pair_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_set_pair_7(unsigned int a1, int a2, int a3) { return asd_dio_set_pair(a1, a2, a3); } /* ==== j_asd_dio_write_packed [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_write_packed(unsigned int a1, unsigned __int8 *a2) { return asd_dio_write_packed(a1, a2); } /* ==== j_asd_dio_write_packed_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_write_packed_2(unsigned int a1, unsigned __int8 *a2) { return asd_dio_write_packed(a1, a2); } /* ==== j_asd_dio_write_packed_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_write_packed_3(unsigned int a1, unsigned __int8 *a2) { return asd_dio_write_packed(a1, a2); } /* ==== j_asd_dio_write_packed_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_dio_write_packed_4(unsigned int a1, unsigned __int8 *a2) { return asd_dio_write_packed(a1, a2); } /* ==== j_asd_encoder_enable_seq [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_enable_seq(struct asd_link_cfg *a1, char *a2, char *a3) { return asd_encoder_enable_seq(a1, a2, a3); } /* ==== j_asd_encoder_enable_seq_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_enable_seq_10(int a1, int a2, int a3) { return asd_encoder_enable_seq((struct asd_link_cfg *)a1, (char *)a2, (char *)a3); } /* ==== j_asd_encoder_enable_seq_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_enable_seq_11(int a1, int a2, int a3) { return asd_encoder_enable_seq((struct asd_link_cfg *)a1, (char *)a2, (char *)a3); } /* ==== j_asd_encoder_enable_seq_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_enable_seq_12(int a1, int a2, int a3) { return asd_encoder_enable_seq((struct asd_link_cfg *)a1, (char *)a2, (char *)a3); } /* ==== j_asd_encoder_enable_seq_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_enable_seq_13(int a1, int a2, int a3) { return asd_encoder_enable_seq((struct asd_link_cfg *)a1, (char *)a2, (char *)a3); } /* ==== j_asd_encoder_enable_seq_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_enable_seq_14(int a1, int a2, int a3) { return asd_encoder_enable_seq((struct asd_link_cfg *)a1, (char *)a2, (char *)a3); } /* ==== j_asd_encoder_enable_seq_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_enable_seq_15(int a1, int a2, int a3) { return asd_encoder_enable_seq((struct asd_link_cfg *)a1, (char *)a2, (char *)a3); } /* ==== j_asd_encoder_enable_seq_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_enable_seq_16(int a1, int a2, int a3) { return asd_encoder_enable_seq((struct asd_link_cfg *)a1, (char *)a2, (char *)a3); } /* ==== j_asd_encoder_enable_seq_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_enable_seq_2(int a1, int a2, int a3) { return asd_encoder_enable_seq((struct asd_link_cfg *)a1, (char *)a2, (char *)a3); } /* ==== j_asd_encoder_enable_seq_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_enable_seq_3(int a1, int a2, int a3) { return asd_encoder_enable_seq((struct asd_link_cfg *)a1, (char *)a2, (char *)a3); } /* ==== j_asd_encoder_enable_seq_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_enable_seq_4(int a1, int a2, int a3) { return asd_encoder_enable_seq((struct asd_link_cfg *)a1, (char *)a2, (char *)a3); } /* ==== j_asd_encoder_enable_seq_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_enable_seq_5(int a1, int a2, int a3) { return asd_encoder_enable_seq((struct asd_link_cfg *)a1, (char *)a2, (char *)a3); } /* ==== j_asd_encoder_enable_seq_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_enable_seq_6(int a1, int a2, int a3) { return asd_encoder_enable_seq((struct asd_link_cfg *)a1, (char *)a2, (char *)a3); } /* ==== j_asd_encoder_enable_seq_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_enable_seq_7(int a1, int a2, int a3) { return asd_encoder_enable_seq((struct asd_link_cfg *)a1, (char *)a2, (char *)a3); } /* ==== j_asd_encoder_enable_seq_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_enable_seq_8(int a1, int a2, int a3) { return asd_encoder_enable_seq((struct asd_link_cfg *)a1, (char *)a2, (char *)a3); } /* ==== j_asd_encoder_enable_seq_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_enable_seq_9(int a1, int a2, int a3) { return asd_encoder_enable_seq((struct asd_link_cfg *)a1, (char *)a2, (char *)a3); } /* ==== j_asd_encoder_enable_seq_v2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_enable_seq_v2(int a1, int a2, int a3) { return asd_encoder_enable_seq_v2((struct asd_link_cfg *)a1, a2, a3); } /* ==== j_asd_encoder_enable_seq_v2_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_enable_seq_v2_2(int a1, int a2, int a3) { return asd_encoder_enable_seq_v2((struct asd_link_cfg *)a1, a2, a3); } /* ==== j_asd_encoder_enable_seq_v3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_enable_seq_v3(int a1) { int v1; // r1 __int16 v2; // r2 return asd_encoder_enable_seq_v3((struct asd_link_cfg *)a1, a2: v1, a3: v2); } /* ==== j_asd_encoder_enable_seq_v3_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_enable_seq_v3_2(int a1) { int v1; // r1 __int16 v2; // r2 return asd_encoder_enable_seq_v3((struct asd_link_cfg *)a1, a2: v1, a3: v2); } /* ==== j_asd_encoder_enable_seq_v3_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_enable_seq_v3_3(int a1) { int v1; // r1 __int16 v2; // r2 return asd_encoder_enable_seq_v3((struct asd_link_cfg *)a1, a2: v1, a3: v2); } /* ==== j_asd_encoder_enable_seq_v3_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_enable_seq_v3_4(int a1) { int v1; // r1 __int16 v2; // r2 return asd_encoder_enable_seq_v3((struct asd_link_cfg *)a1, a2: v1, a3: v2); } /* ==== j_asd_encoder_query [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_query(_DWORD *a1, int a2, __int16 a3) { return asd_encoder_query(a1, a2, a3); } /* ==== j_asd_encoder_query_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_query_2(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_encoder_query(a1, a2: v1, a3: v2); } /* ==== j_asd_encoder_query_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_encoder_query_3(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_encoder_query(a1, a2: v1, a3: v2); } /* ==== j_asd_get_link_caps_full [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_caps_full(int a1) { return asd_get_link_caps_full((struct asd_link_caps *)a1); } /* ==== j_asd_get_link_caps_full_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_caps_full_2(int a1) { return asd_get_link_caps_full((struct asd_link_caps *)a1); } /* ==== j_asd_get_link_caps_full_v2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_caps_full_v2(int a1) { return asd_get_link_caps_full_v2((struct asd_link_caps *)a1); } /* ==== j_asd_get_link_caps_full_v2_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_caps_full_v2_10(int a1) { return asd_get_link_caps_full_v2((struct asd_link_caps *)a1); } /* ==== j_asd_get_link_caps_full_v2_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_caps_full_v2_11(int a1) { return asd_get_link_caps_full_v2((struct asd_link_caps *)a1); } /* ==== j_asd_get_link_caps_full_v2_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_caps_full_v2_12(int a1) { return asd_get_link_caps_full_v2((struct asd_link_caps *)a1); } /* ==== j_asd_get_link_caps_full_v2_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_caps_full_v2_13(int a1) { return asd_get_link_caps_full_v2((struct asd_link_caps *)a1); } /* ==== j_asd_get_link_caps_full_v2_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_caps_full_v2_14(int a1) { return asd_get_link_caps_full_v2((struct asd_link_caps *)a1); } /* ==== j_asd_get_link_caps_full_v2_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_caps_full_v2_15(int a1) { return asd_get_link_caps_full_v2((struct asd_link_caps *)a1); } /* ==== j_asd_get_link_caps_full_v2_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_caps_full_v2_16(int a1) { return asd_get_link_caps_full_v2((struct asd_link_caps *)a1); } /* ==== j_asd_get_link_caps_full_v2_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_caps_full_v2_2(int a1) { return asd_get_link_caps_full_v2((struct asd_link_caps *)a1); } /* ==== j_asd_get_link_caps_full_v2_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_caps_full_v2_3(int a1) { return asd_get_link_caps_full_v2((struct asd_link_caps *)a1); } /* ==== j_asd_get_link_caps_full_v2_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_caps_full_v2_4(int a1) { return asd_get_link_caps_full_v2((struct asd_link_caps *)a1); } /* ==== j_asd_get_link_caps_full_v2_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_caps_full_v2_5(int a1) { return asd_get_link_caps_full_v2((struct asd_link_caps *)a1); } /* ==== j_asd_get_link_caps_full_v2_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_caps_full_v2_6(int a1) { return asd_get_link_caps_full_v2((struct asd_link_caps *)a1); } /* ==== j_asd_get_link_caps_full_v2_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_caps_full_v2_7(int a1) { return asd_get_link_caps_full_v2((struct asd_link_caps *)a1); } /* ==== j_asd_get_link_caps_full_v2_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_caps_full_v2_8(int a1) { return asd_get_link_caps_full_v2((struct asd_link_caps *)a1); } /* ==== j_asd_get_link_caps_full_v2_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_caps_full_v2_9(int a1) { return asd_get_link_caps_full_v2((struct asd_link_caps *)a1); } /* ==== j_asd_get_link_caps_full_v3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_caps_full_v3(int a1) { return asd_get_link_caps_full_v3((struct asd_link_caps *)a1); } /* ==== j_asd_get_link_caps_full_v3_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_caps_full_v3_2(int a1) { return asd_get_link_caps_full_v3((struct asd_link_caps *)a1); } /* ==== j_asd_get_link_caps_full_v4 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_caps_full_v4(struct asd_link_caps *a1) { return asd_get_link_caps_full_v4(a1); } /* ==== j_asd_get_link_caps_full_v5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_caps_full_v5(int a1) { return asd_get_link_caps_full_v5((struct asd_link_caps *)a1); } /* ==== j_asd_get_link_reg_offsets [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_reg_offsets(_DWORD *a1, unsigned int a2) { return asd_get_link_reg_offsets(a1, a2); } /* ==== j_asd_get_link_reg_offsets_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_reg_offsets_2(_DWORD *a1, unsigned int a2) { return asd_get_link_reg_offsets(a1, a2); } /* ==== j_asd_get_link_reg_offsets_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_link_reg_offsets_3(_DWORD *a1, unsigned int a2) { return asd_get_link_reg_offsets(a1, a2); } /* ==== j_asd_get_off_D17FF8_field8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_off_D17FF8_field8(_DWORD *a1) { return asd_get_off_D17FF8_field8(a1); } /* ==== j_asd_get_off_D17FF8_field8_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_off_D17FF8_field8_2(_DWORD *a1) { return asd_get_off_D17FF8_field8(a1); } /* ==== j_asd_get_off_D17FF8_field8_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_off_D17FF8_field8_3(_DWORD *a1) { return asd_get_off_D17FF8_field8(a1); } /* ==== j_asd_get_off_D17FF8_field8_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_off_D17FF8_field8_4(_DWORD *a1) { return asd_get_off_D17FF8_field8(a1); } /* ==== j_asd_get_off_D17FF8_field8_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_off_D17FF8_field8_5(_DWORD *a1) { return asd_get_off_D17FF8_field8(a1); } /* ==== j_asd_get_off_D17FF8_field8_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_off_D17FF8_field8_6(_DWORD *a1) { return asd_get_off_D17FF8_field8(a1); } /* ==== j_asd_get_off_D17FF8_field8_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_off_D17FF8_field8_7(_DWORD *a1) { return asd_get_off_D17FF8_field8(a1); } /* ==== j_asd_get_pair_D49838 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_pair_D49838(_DWORD *a1) { return asd_get_pair_D49838(a1); } /* ==== j_asd_get_pair_D49838_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_pair_D49838_10(_DWORD *a1) { return asd_get_pair_D49838(a1); } /* ==== j_asd_get_pair_D49838_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_pair_D49838_11(_DWORD *a1) { return asd_get_pair_D49838(a1); } /* ==== j_asd_get_pair_D49838_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_pair_D49838_12(_DWORD *a1) { return asd_get_pair_D49838(a1); } /* ==== j_asd_get_pair_D49838_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_pair_D49838_13(_DWORD *a1) { return asd_get_pair_D49838(a1); } /* ==== j_asd_get_pair_D49838_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_pair_D49838_14(_DWORD *a1) { return asd_get_pair_D49838(a1); } /* ==== j_asd_get_pair_D49838_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_pair_D49838_15(_DWORD *a1) { return asd_get_pair_D49838(a1); } /* ==== j_asd_get_pair_D49838_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_pair_D49838_16(_DWORD *a1) { return asd_get_pair_D49838(a1); } /* ==== j_asd_get_pair_D49838_17 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_pair_D49838_17(_DWORD *a1) { return asd_get_pair_D49838(a1); } /* ==== j_asd_get_pair_D49838_18 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_pair_D49838_18(_DWORD *a1) { return asd_get_pair_D49838(a1); } /* ==== j_asd_get_pair_D49838_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_pair_D49838_2(_DWORD *a1) { return asd_get_pair_D49838(a1); } /* ==== j_asd_get_pair_D49838_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_pair_D49838_3(_DWORD *a1) { return asd_get_pair_D49838(a1); } /* ==== j_asd_get_pair_D49838_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_pair_D49838_4(_DWORD *a1) { return asd_get_pair_D49838(a1); } /* ==== j_asd_get_pair_D49838_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_pair_D49838_5(_DWORD *a1) { return asd_get_pair_D49838(a1); } /* ==== j_asd_get_pair_D49838_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_pair_D49838_6(_DWORD *a1) { return asd_get_pair_D49838(a1); } /* ==== j_asd_get_pair_D49838_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_pair_D49838_7(_DWORD *a1) { return asd_get_pair_D49838(a1); } /* ==== j_asd_get_pair_D49838_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_pair_D49838_8(_DWORD *a1) { return asd_get_pair_D49838(a1); } /* ==== j_asd_get_pair_D49838_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_pair_D49838_9(_DWORD *a1) { return asd_get_pair_D49838(a1); } /* ==== j_asd_get_signal_reg [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_signal_reg(int a1) { return asd_get_signal_reg(a1); } /* ==== j_asd_get_signal_reg_0 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_signal_reg_0(int a1) { return asd_get_signal_reg(a1); } /* ==== j_asd_get_signal_reg_1 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_signal_reg_1(int a1) { return asd_get_signal_reg(a1); } /* ==== j_asd_get_signal_reg_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_signal_reg_10(int a1) { return asd_get_signal_reg(a1); } /* ==== j_asd_get_signal_reg_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_signal_reg_11(int a1) { return asd_get_signal_reg(a1); } /* ==== j_asd_get_signal_reg_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_signal_reg_12(int a1) { return asd_get_signal_reg(a1); } /* ==== j_asd_get_signal_reg_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_signal_reg_13(int a1) { return asd_get_signal_reg(a1); } /* ==== j_asd_get_signal_reg_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_signal_reg_14(int a1) { return asd_get_signal_reg(a1); } /* ==== j_asd_get_signal_reg_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_signal_reg_15(int a1) { return asd_get_signal_reg(a1); } /* ==== j_asd_get_signal_reg_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_signal_reg_16(int a1) { return asd_get_signal_reg(a1); } /* ==== j_asd_get_signal_reg_17 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_signal_reg_17(int a1) { return asd_get_signal_reg(a1); } /* ==== j_asd_get_signal_reg_18 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_signal_reg_18(int a1) { return asd_get_signal_reg(a1); } /* ==== j_asd_get_signal_reg_19 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_signal_reg_19(int a1) { return asd_get_signal_reg(a1); } /* ==== j_asd_get_signal_reg_2 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_signal_reg_2(int a1) { return asd_get_signal_reg(a1); } /* ==== j_asd_get_signal_reg_20 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_signal_reg_20(int a1) { return asd_get_signal_reg(a1); } /* ==== j_asd_get_signal_reg_3 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_signal_reg_3(int a1) { return asd_get_signal_reg(a1); } /* ==== j_asd_get_signal_reg_4 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_signal_reg_4(int a1) { return asd_get_signal_reg(a1); } /* ==== j_asd_get_signal_reg_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_signal_reg_5(int a1) { return asd_get_signal_reg(a1); } /* ==== j_asd_get_signal_reg_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_signal_reg_6(int a1) { return asd_get_signal_reg(a1); } /* ==== j_asd_get_signal_reg_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_signal_reg_7(int a1) { return asd_get_signal_reg(a1); } /* ==== j_asd_get_signal_reg_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_signal_reg_8(int a1) { return asd_get_signal_reg(a1); } /* ==== j_asd_get_signal_reg_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_get_signal_reg_9(int a1) { return asd_get_signal_reg(a1); } /* ==== j_asd_link_bringup_seq [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq(_DWORD *a1) { return asd_link_bringup_seq(a1); } /* ==== j_asd_link_bringup_seq_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_10(_DWORD *a1) { return asd_link_bringup_seq(a1); } /* ==== j_asd_link_bringup_seq_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_11(_DWORD *a1) { return asd_link_bringup_seq(a1); } /* ==== j_asd_link_bringup_seq_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_12(_DWORD *a1) { return asd_link_bringup_seq(a1); } /* ==== j_asd_link_bringup_seq_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_13(_DWORD *a1) { return asd_link_bringup_seq(a1); } /* ==== j_asd_link_bringup_seq_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_14(_DWORD *a1) { return asd_link_bringup_seq(a1); } /* ==== j_asd_link_bringup_seq_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_15(_DWORD *a1) { return asd_link_bringup_seq(a1); } /* ==== j_asd_link_bringup_seq_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_16(_DWORD *a1) { return asd_link_bringup_seq(a1); } /* ==== j_asd_link_bringup_seq_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_2(_DWORD *a1) { return asd_link_bringup_seq(a1); } /* ==== j_asd_link_bringup_seq_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_3(_DWORD *a1) { return asd_link_bringup_seq(a1); } /* ==== j_asd_link_bringup_seq_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_4(_DWORD *a1) { return asd_link_bringup_seq(a1); } /* ==== j_asd_link_bringup_seq_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_5(_DWORD *a1) { return asd_link_bringup_seq(a1); } /* ==== j_asd_link_bringup_seq_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_6(_DWORD *a1) { return asd_link_bringup_seq(a1); } /* ==== j_asd_link_bringup_seq_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_7(_DWORD *a1) { return asd_link_bringup_seq(a1); } /* ==== j_asd_link_bringup_seq_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_8(_DWORD *a1) { return asd_link_bringup_seq(a1); } /* ==== j_asd_link_bringup_seq_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_9(_DWORD *a1) { return asd_link_bringup_seq(a1); } /* ==== j_asd_link_bringup_seq_v2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v2(_DWORD *a1) { return asd_link_bringup_seq_v2(a1); } /* ==== j_asd_link_bringup_seq_v2_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v2_2(_DWORD *a1) { return asd_link_bringup_seq_v2(a1); } /* ==== j_asd_link_bringup_seq_v2_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v2_3(_DWORD *a1) { return asd_link_bringup_seq_v2(a1); } /* ==== j_asd_link_bringup_seq_v2_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v2_4(_DWORD *a1) { return asd_link_bringup_seq_v2(a1); } /* ==== j_asd_link_bringup_seq_v2_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v2_5(_DWORD *a1) { return asd_link_bringup_seq_v2(a1); } /* ==== j_asd_link_bringup_seq_v2_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v2_6(_DWORD *a1) { return asd_link_bringup_seq_v2(a1); } /* ==== j_asd_link_bringup_seq_v3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v3(_DWORD *a1) { return asd_link_bringup_seq_v3(a1); } /* ==== j_asd_link_bringup_seq_v4 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v4(_DWORD *a1) { return asd_link_bringup_seq_v4(a1); } /* ==== j_asd_link_bringup_seq_v4_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v4_10(_DWORD *a1) { return asd_link_bringup_seq_v4(a1); } /* ==== j_asd_link_bringup_seq_v4_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v4_11(_DWORD *a1) { return asd_link_bringup_seq_v4(a1); } /* ==== j_asd_link_bringup_seq_v4_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v4_12(_DWORD *a1) { return asd_link_bringup_seq_v4(a1); } /* ==== j_asd_link_bringup_seq_v4_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v4_13(_DWORD *a1) { return asd_link_bringup_seq_v4(a1); } /* ==== j_asd_link_bringup_seq_v4_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v4_14(_DWORD *a1) { return asd_link_bringup_seq_v4(a1); } /* ==== j_asd_link_bringup_seq_v4_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v4_15(_DWORD *a1) { return asd_link_bringup_seq_v4(a1); } /* ==== j_asd_link_bringup_seq_v4_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v4_16(_DWORD *a1) { return asd_link_bringup_seq_v4(a1); } /* ==== j_asd_link_bringup_seq_v4_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v4_2(_DWORD *a1) { return asd_link_bringup_seq_v4(a1); } /* ==== j_asd_link_bringup_seq_v4_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v4_3(_DWORD *a1) { return asd_link_bringup_seq_v4(a1); } /* ==== j_asd_link_bringup_seq_v4_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v4_4(_DWORD *a1) { return asd_link_bringup_seq_v4(a1); } /* ==== j_asd_link_bringup_seq_v4_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v4_5(_DWORD *a1) { return asd_link_bringup_seq_v4(a1); } /* ==== j_asd_link_bringup_seq_v4_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v4_6(_DWORD *a1) { return asd_link_bringup_seq_v4(a1); } /* ==== j_asd_link_bringup_seq_v4_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v4_7(_DWORD *a1) { return asd_link_bringup_seq_v4(a1); } /* ==== j_asd_link_bringup_seq_v4_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v4_8(_DWORD *a1) { return asd_link_bringup_seq_v4(a1); } /* ==== j_asd_link_bringup_seq_v4_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v4_9(_DWORD *a1) { return asd_link_bringup_seq_v4(a1); } /* ==== j_asd_link_bringup_seq_v5 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v5(_DWORD *a1) { return asd_link_bringup_seq_v5(a1); } /* ==== j_asd_link_bringup_seq_v5_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v5_2(_DWORD *a1) { return asd_link_bringup_seq_v5(a1); } /* ==== j_asd_link_bringup_seq_v5_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v5_3(_DWORD *a1) { return asd_link_bringup_seq_v5(a1); } /* ==== j_asd_link_bringup_seq_v5_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v5_4(_DWORD *a1) { return asd_link_bringup_seq_v5(a1); } /* ==== j_asd_link_bringup_seq_v5_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_bringup_seq_v5_5(_DWORD *a1) { return asd_link_bringup_seq_v5(a1); } /* ==== j_asd_link_enable_aux [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_enable_aux(unsigned int a1) { return asd_link_enable_aux(a1); } /* ==== j_asd_link_enable_aux_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_enable_aux_2(unsigned int a1) { return asd_link_enable_aux(a1); } /* ==== j_asd_link_enable_aux_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_enable_aux_3(unsigned int a1) { return asd_link_enable_aux(a1); } /* ==== j_asd_link_enable_aux_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_enable_aux_4(unsigned int a1) { return asd_link_enable_aux(a1); } /* ==== j_asd_link_enable_aux_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_enable_aux_5(unsigned int a1) { return asd_link_enable_aux(a1); } /* ==== j_asd_link_enable_aux_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_enable_aux_6(unsigned int a1) { return asd_link_enable_aux(a1); } /* ==== j_asd_link_enable_aux_v2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_enable_aux_v2(unsigned int a1) { return asd_link_enable_aux_v2(a1); } /* ==== j_asd_link_program_timing [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_program_timing(int a1, unsigned __int8 *a2, unsigned __int8 *a3) { return asd_link_program_timing(a1, a2, a3); } /* ==== j_asd_link_program_timing_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_program_timing_10(int a1, int a2, int a3) { return asd_link_program_timing(a1, (unsigned __int8 *)a2, (unsigned __int8 *)a3); } /* ==== j_asd_link_program_timing_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_program_timing_11(int a1, int a2, int a3) { return asd_link_program_timing(a1, (unsigned __int8 *)a2, (unsigned __int8 *)a3); } /* ==== j_asd_link_program_timing_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_program_timing_12(int a1, int a2, int a3) { return asd_link_program_timing(a1, (unsigned __int8 *)a2, (unsigned __int8 *)a3); } /* ==== j_asd_link_program_timing_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_program_timing_13(int a1, int a2, int a3) { return asd_link_program_timing(a1, (unsigned __int8 *)a2, (unsigned __int8 *)a3); } /* ==== j_asd_link_program_timing_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_program_timing_14(int a1, int a2, int a3) { return asd_link_program_timing(a1, (unsigned __int8 *)a2, (unsigned __int8 *)a3); } /* ==== j_asd_link_program_timing_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_program_timing_15(int a1, int a2, int a3) { return asd_link_program_timing(a1, (unsigned __int8 *)a2, (unsigned __int8 *)a3); } /* ==== j_asd_link_program_timing_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_program_timing_16(int a1, int a2, int a3) { return asd_link_program_timing(a1, (unsigned __int8 *)a2, (unsigned __int8 *)a3); } /* ==== j_asd_link_program_timing_17 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_program_timing_17(int a1, int a2, int a3) { return asd_link_program_timing(a1, (unsigned __int8 *)a2, (unsigned __int8 *)a3); } /* ==== j_asd_link_program_timing_18 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_program_timing_18(int a1, int a2, int a3) { return asd_link_program_timing(a1, (unsigned __int8 *)a2, (unsigned __int8 *)a3); } /* ==== j_asd_link_program_timing_19 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_program_timing_19(int a1, int a2, int a3) { return asd_link_program_timing(a1, (unsigned __int8 *)a2, (unsigned __int8 *)a3); } /* ==== j_asd_link_program_timing_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_program_timing_2(int a1, int a2, int a3) { return asd_link_program_timing(a1, (unsigned __int8 *)a2, (unsigned __int8 *)a3); } /* ==== j_asd_link_program_timing_20 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_program_timing_20(int a1, int a2, int a3) { return asd_link_program_timing(a1, (unsigned __int8 *)a2, (unsigned __int8 *)a3); } /* ==== j_asd_link_program_timing_21 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_program_timing_21(int a1, int a2, int a3) { return asd_link_program_timing(a1, (unsigned __int8 *)a2, (unsigned __int8 *)a3); } /* ==== j_asd_link_program_timing_22 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_program_timing_22(int a1, int a2, int a3) { return asd_link_program_timing(a1, (unsigned __int8 *)a2, (unsigned __int8 *)a3); } /* ==== j_asd_link_program_timing_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_program_timing_3(int a1, int a2, int a3) { return asd_link_program_timing(a1, (unsigned __int8 *)a2, (unsigned __int8 *)a3); } /* ==== j_asd_link_program_timing_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_program_timing_4(int a1, int a2, int a3) { return asd_link_program_timing(a1, (unsigned __int8 *)a2, (unsigned __int8 *)a3); } /* ==== j_asd_link_program_timing_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_program_timing_5(int a1, int a2, int a3) { return asd_link_program_timing(a1, (unsigned __int8 *)a2, (unsigned __int8 *)a3); } /* ==== j_asd_link_program_timing_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_program_timing_6(int a1, int a2, int a3) { return asd_link_program_timing(a1, (unsigned __int8 *)a2, (unsigned __int8 *)a3); } /* ==== j_asd_link_program_timing_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_program_timing_7(int a1, int a2, int a3) { return asd_link_program_timing(a1, (unsigned __int8 *)a2, (unsigned __int8 *)a3); } /* ==== j_asd_link_program_timing_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_program_timing_8(int a1, int a2, int a3) { return asd_link_program_timing(a1, (unsigned __int8 *)a2, (unsigned __int8 *)a3); } /* ==== j_asd_link_program_timing_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_program_timing_9(int a1, int a2, int a3) { return asd_link_program_timing(a1, (unsigned __int8 *)a2, (unsigned __int8 *)a3); } /* ==== j_asd_link_query_a [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_query_a(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_query_a(a1, a2: v1, a3: v2); } /* ==== j_asd_link_query_a_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_query_a_2(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_query_a(a1, a2: v1, a3: v2); } /* ==== j_asd_link_query_a_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_query_a_3(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_query_a(a1, a2: v1, a3: v2); } /* ==== j_asd_link_query_b [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_query_b(_DWORD *a1, int a2, __int16 a3) { return asd_link_query_b(a1, a2, a3); } /* ==== j_asd_link_query_b_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_query_b_10(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_query_b(a1, a2: v1, a3: v2); } /* ==== j_asd_link_query_b_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_query_b_11(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_query_b(a1, a2: v1, a3: v2); } /* ==== j_asd_link_query_b_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_query_b_12(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_query_b(a1, a2: v1, a3: v2); } /* ==== j_asd_link_query_b_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_query_b_13(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_query_b(a1, a2: v1, a3: v2); } /* ==== j_asd_link_query_b_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_query_b_14(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_query_b(a1, a2: v1, a3: v2); } /* ==== j_asd_link_query_b_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_query_b_15(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_query_b(a1, a2: v1, a3: v2); } /* ==== j_asd_link_query_b_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_query_b_16(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_query_b(a1, a2: v1, a3: v2); } /* ==== j_asd_link_query_b_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_query_b_2(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_query_b(a1, a2: v1, a3: v2); } /* ==== j_asd_link_query_b_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_query_b_3(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_query_b(a1, a2: v1, a3: v2); } /* ==== j_asd_link_query_b_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_query_b_4(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_query_b(a1, a2: v1, a3: v2); } /* ==== j_asd_link_query_b_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_query_b_5(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_query_b(a1, a2: v1, a3: v2); } /* ==== j_asd_link_query_b_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_query_b_6(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_query_b(a1, a2: v1, a3: v2); } /* ==== j_asd_link_query_b_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_query_b_7(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_query_b(a1, a2: v1, a3: v2); } /* ==== j_asd_link_query_b_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_query_b_8(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_query_b(a1, a2: v1, a3: v2); } /* ==== j_asd_link_query_b_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_query_b_9(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_query_b(a1, a2: v1, a3: v2); } /* ==== j_asd_link_read_pair_regs [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_read_pair_regs(int a1, _BYTE *a2, _BYTE *a3) { return asd_link_read_pair_regs(a1, a2, a3); } /* ==== j_asd_link_read_pair_regs_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_read_pair_regs_10(int a1, _BYTE *a2, _BYTE *a3) { return asd_link_read_pair_regs(a1, a2, a3); } /* ==== j_asd_link_read_pair_regs_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_read_pair_regs_11(int a1, _BYTE *a2, _BYTE *a3) { return asd_link_read_pair_regs(a1, a2, a3); } /* ==== j_asd_link_read_pair_regs_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_read_pair_regs_12(int a1, _BYTE *a2, _BYTE *a3) { return asd_link_read_pair_regs(a1, a2, a3); } /* ==== j_asd_link_read_pair_regs_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_read_pair_regs_13(int a1, _BYTE *a2, _BYTE *a3) { return asd_link_read_pair_regs(a1, a2, a3); } /* ==== j_asd_link_read_pair_regs_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_read_pair_regs_14(int a1, _BYTE *a2, _BYTE *a3) { return asd_link_read_pair_regs(a1, a2, a3); } /* ==== j_asd_link_read_pair_regs_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_read_pair_regs_15(int a1, _BYTE *a2, _BYTE *a3) { return asd_link_read_pair_regs(a1, a2, a3); } /* ==== j_asd_link_read_pair_regs_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_read_pair_regs_16(int a1, _BYTE *a2, _BYTE *a3) { return asd_link_read_pair_regs(a1, a2, a3); } /* ==== j_asd_link_read_pair_regs_17 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_read_pair_regs_17(int a1, _BYTE *a2, _BYTE *a3) { return asd_link_read_pair_regs(a1, a2, a3); } /* ==== j_asd_link_read_pair_regs_18 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_read_pair_regs_18(int a1, _BYTE *a2, _BYTE *a3) { return asd_link_read_pair_regs(a1, a2, a3); } /* ==== j_asd_link_read_pair_regs_19 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_read_pair_regs_19(int a1, _BYTE *a2, _BYTE *a3) { return asd_link_read_pair_regs(a1, a2, a3); } /* ==== j_asd_link_read_pair_regs_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_read_pair_regs_2(int a1, _BYTE *a2, _BYTE *a3) { return asd_link_read_pair_regs(a1, a2, a3); } /* ==== j_asd_link_read_pair_regs_20 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_read_pair_regs_20(int a1, _BYTE *a2, _BYTE *a3) { return asd_link_read_pair_regs(a1, a2, a3); } /* ==== j_asd_link_read_pair_regs_21 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_read_pair_regs_21(int a1, _BYTE *a2, _BYTE *a3) { return asd_link_read_pair_regs(a1, a2, a3); } /* ==== j_asd_link_read_pair_regs_22 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_read_pair_regs_22(int a1, _BYTE *a2, _BYTE *a3) { return asd_link_read_pair_regs(a1, a2, a3); } /* ==== j_asd_link_read_pair_regs_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_read_pair_regs_3(int a1, _BYTE *a2, _BYTE *a3) { return asd_link_read_pair_regs(a1, a2, a3); } /* ==== j_asd_link_read_pair_regs_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_read_pair_regs_4(int a1, _BYTE *a2, _BYTE *a3) { return asd_link_read_pair_regs(a1, a2, a3); } /* ==== j_asd_link_read_pair_regs_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_read_pair_regs_5(int a1, _BYTE *a2, _BYTE *a3) { return asd_link_read_pair_regs(a1, a2, a3); } /* ==== j_asd_link_read_pair_regs_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_read_pair_regs_6(int a1, _BYTE *a2, _BYTE *a3) { return asd_link_read_pair_regs(a1, a2, a3); } /* ==== j_asd_link_read_pair_regs_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_read_pair_regs_7(int a1, _BYTE *a2, _BYTE *a3) { return asd_link_read_pair_regs(a1, a2, a3); } /* ==== j_asd_link_read_pair_regs_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_read_pair_regs_8(int a1, _BYTE *a2, _BYTE *a3) { return asd_link_read_pair_regs(a1, a2, a3); } /* ==== j_asd_link_read_pair_regs_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_read_pair_regs_9(int a1, _BYTE *a2, _BYTE *a3) { return asd_link_read_pair_regs(a1, a2, a3); } /* ==== j_asd_link_ready_full_check [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_ready_full_check(int a1) { return asd_link_ready_full_check(a1); } /* ==== j_asd_link_ready_full_check_0 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_ready_full_check_0(int a1) { return asd_link_ready_full_check(a1); } /* ==== j_asd_link_ready_full_check_1 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_ready_full_check_1(int a1) { return asd_link_ready_full_check(a1); } /* ==== j_asd_link_ready_full_check_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_ready_full_check_10(int a1) { return asd_link_ready_full_check(a1); } /* ==== j_asd_link_ready_full_check_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_ready_full_check_11(int a1) { return asd_link_ready_full_check(a1); } /* ==== j_asd_link_ready_full_check_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_ready_full_check_12(int a1) { return asd_link_ready_full_check(a1); } /* ==== j_asd_link_ready_full_check_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_ready_full_check_13(int a1) { return asd_link_ready_full_check(a1); } /* ==== j_asd_link_ready_full_check_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_ready_full_check_14(int a1) { return asd_link_ready_full_check(a1); } /* ==== j_asd_link_ready_full_check_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_ready_full_check_15(int a1) { return asd_link_ready_full_check(a1); } /* ==== j_asd_link_ready_full_check_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_ready_full_check_16(int a1) { return asd_link_ready_full_check(a1); } /* ==== j_asd_link_ready_full_check_17 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_ready_full_check_17(int a1) { return asd_link_ready_full_check(a1); } /* ==== j_asd_link_ready_full_check_18 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_ready_full_check_18(int a1) { return asd_link_ready_full_check(a1); } /* ==== j_asd_link_ready_full_check_19 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_ready_full_check_19(int a1) { return asd_link_ready_full_check(a1); } /* ==== j_asd_link_ready_full_check_2 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_ready_full_check_2(int a1) { return asd_link_ready_full_check(a1); } /* ==== j_asd_link_ready_full_check_20 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_ready_full_check_20(int a1) { return asd_link_ready_full_check(a1); } /* ==== j_asd_link_ready_full_check_3 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_ready_full_check_3(int a1) { return asd_link_ready_full_check(a1); } /* ==== j_asd_link_ready_full_check_4 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_ready_full_check_4(int a1) { return asd_link_ready_full_check(a1); } /* ==== j_asd_link_ready_full_check_5 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_ready_full_check_5(int a1) { return asd_link_ready_full_check(a1); } /* ==== j_asd_link_ready_full_check_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_ready_full_check_6(int a1) { return asd_link_ready_full_check(a1); } /* ==== j_asd_link_ready_full_check_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_ready_full_check_7(int a1) { return asd_link_ready_full_check(a1); } /* ==== j_asd_link_ready_full_check_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_ready_full_check_8(int a1) { return asd_link_ready_full_check(a1); } /* ==== j_asd_link_ready_full_check_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_ready_full_check_9(int a1) { return asd_link_ready_full_check(a1); } /* ==== j_asd_link_reset_seq [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_reset_seq(__int64 a1, int a2, int a3) { return asd_link_reset_seq(a1, a2, a3); } /* ==== j_asd_link_reset_seq_0 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_reset_seq_0(__int64 a1, int a2, int a3) { return asd_link_reset_seq(a1, a2, a3); } /* ==== j_asd_link_reset_seq_10 [tier=EXACT size=4] ==== */ // local variable allocation has failed, the output may be wrong! // attributes: thunk int __fastcall j_asd_link_reset_seq_10(_DWORD *a1) { int v1; // r2 int v2; // r3 return asd_link_reset_seq(a1: *(__int64 *)&a1, a2: v1, a3: v2); } /* ==== j_asd_link_reset_seq_11 [tier=EXACT size=4] ==== */ // local variable allocation has failed, the output may be wrong! // attributes: thunk int __fastcall j_asd_link_reset_seq_11(_DWORD *a1) { int v1; // r2 int v2; // r3 return asd_link_reset_seq(a1: *(__int64 *)&a1, a2: v1, a3: v2); } /* ==== j_asd_link_reset_seq_12 [tier=EXACT size=4] ==== */ // local variable allocation has failed, the output may be wrong! // attributes: thunk int __fastcall j_asd_link_reset_seq_12(_DWORD *a1) { int v1; // r2 int v2; // r3 return asd_link_reset_seq(a1: *(__int64 *)&a1, a2: v1, a3: v2); } /* ==== j_asd_link_reset_seq_13 [tier=EXACT size=4] ==== */ // local variable allocation has failed, the output may be wrong! // attributes: thunk int __fastcall j_asd_link_reset_seq_13(_DWORD *a1) { int v1; // r2 int v2; // r3 return asd_link_reset_seq(a1: *(__int64 *)&a1, a2: v1, a3: v2); } /* ==== j_asd_link_reset_seq_14 [tier=EXACT size=4] ==== */ // local variable allocation has failed, the output may be wrong! // attributes: thunk int __fastcall j_asd_link_reset_seq_14(_DWORD *a1) { int v1; // r2 int v2; // r3 return asd_link_reset_seq(a1: *(__int64 *)&a1, a2: v1, a3: v2); } /* ==== j_asd_link_reset_seq_15 [tier=EXACT size=4] ==== */ // local variable allocation has failed, the output may be wrong! // attributes: thunk int __fastcall j_asd_link_reset_seq_15(_DWORD *a1) { int v1; // r2 int v2; // r3 return asd_link_reset_seq(a1: *(__int64 *)&a1, a2: v1, a3: v2); } /* ==== j_asd_link_reset_seq_16 [tier=EXACT size=4] ==== */ // local variable allocation has failed, the output may be wrong! // attributes: thunk int __fastcall j_asd_link_reset_seq_16(_DWORD *a1) { int v1; // r2 int v2; // r3 return asd_link_reset_seq(a1: *(__int64 *)&a1, a2: v1, a3: v2); } /* ==== j_asd_link_reset_seq_17 [tier=EXACT size=4] ==== */ // local variable allocation has failed, the output may be wrong! // attributes: thunk int __fastcall j_asd_link_reset_seq_17(_DWORD *a1) { int v1; // r2 int v2; // r3 return asd_link_reset_seq(a1: *(__int64 *)&a1, a2: v1, a3: v2); } /* ==== j_asd_link_reset_seq_18 [tier=EXACT size=4] ==== */ // local variable allocation has failed, the output may be wrong! // attributes: thunk int __fastcall j_asd_link_reset_seq_18(_DWORD *a1) { int v1; // r2 int v2; // r3 return asd_link_reset_seq(a1: *(__int64 *)&a1, a2: v1, a3: v2); } /* ==== j_asd_link_reset_seq_19 [tier=EXACT size=4] ==== */ // local variable allocation has failed, the output may be wrong! // attributes: thunk int __fastcall j_asd_link_reset_seq_19(_DWORD *a1) { int v1; // r2 int v2; // r3 return asd_link_reset_seq(a1: *(__int64 *)&a1, a2: v1, a3: v2); } /* ==== j_asd_link_reset_seq_2 [tier=EXACT size=4] ==== */ // local variable allocation has failed, the output may be wrong! // attributes: thunk int __fastcall j_asd_link_reset_seq_2(_DWORD *a1) { int v1; // r2 int v2; // r3 return asd_link_reset_seq(a1: *(__int64 *)&a1, a2: v1, a3: v2); } /* ==== j_asd_link_reset_seq_20 [tier=EXACT size=4] ==== */ // local variable allocation has failed, the output may be wrong! // attributes: thunk int __fastcall j_asd_link_reset_seq_20(_DWORD *a1) { int v1; // r2 int v2; // r3 return asd_link_reset_seq(a1: *(__int64 *)&a1, a2: v1, a3: v2); } /* ==== j_asd_link_reset_seq_21 [tier=EXACT size=4] ==== */ // local variable allocation has failed, the output may be wrong! // attributes: thunk int __fastcall j_asd_link_reset_seq_21(_DWORD *a1) { int v1; // r2 int v2; // r3 return asd_link_reset_seq(a1: *(__int64 *)&a1, a2: v1, a3: v2); } /* ==== j_asd_link_reset_seq_3 [tier=EXACT size=4] ==== */ // local variable allocation has failed, the output may be wrong! // attributes: thunk int __fastcall j_asd_link_reset_seq_3(_DWORD *a1) { int v1; // r2 int v2; // r3 return asd_link_reset_seq(a1: *(__int64 *)&a1, a2: v1, a3: v2); } /* ==== j_asd_link_reset_seq_4 [tier=EXACT size=4] ==== */ // local variable allocation has failed, the output may be wrong! // attributes: thunk int __fastcall j_asd_link_reset_seq_4(_DWORD *a1) { int v1; // r2 int v2; // r3 return asd_link_reset_seq(a1: *(__int64 *)&a1, a2: v1, a3: v2); } /* ==== j_asd_link_reset_seq_5 [tier=EXACT size=4] ==== */ // local variable allocation has failed, the output may be wrong! // attributes: thunk int __fastcall j_asd_link_reset_seq_5(_DWORD *a1) { int v1; // r2 int v2; // r3 return asd_link_reset_seq(a1: *(__int64 *)&a1, a2: v1, a3: v2); } /* ==== j_asd_link_reset_seq_6 [tier=EXACT size=4] ==== */ // local variable allocation has failed, the output may be wrong! // attributes: thunk int __fastcall j_asd_link_reset_seq_6(_DWORD *a1) { int v1; // r2 int v2; // r3 return asd_link_reset_seq(a1: *(__int64 *)&a1, a2: v1, a3: v2); } /* ==== j_asd_link_reset_seq_7 [tier=EXACT size=4] ==== */ // local variable allocation has failed, the output may be wrong! // attributes: thunk int __fastcall j_asd_link_reset_seq_7(_DWORD *a1) { int v1; // r2 int v2; // r3 return asd_link_reset_seq(a1: *(__int64 *)&a1, a2: v1, a3: v2); } /* ==== j_asd_link_reset_seq_8 [tier=EXACT size=4] ==== */ // local variable allocation has failed, the output may be wrong! // attributes: thunk int __fastcall j_asd_link_reset_seq_8(_DWORD *a1) { int v1; // r2 int v2; // r3 return asd_link_reset_seq(a1: *(__int64 *)&a1, a2: v1, a3: v2); } /* ==== j_asd_link_reset_seq_9 [tier=EXACT size=4] ==== */ // local variable allocation has failed, the output may be wrong! // attributes: thunk int __fastcall j_asd_link_reset_seq_9(_DWORD *a1) { int v1; // r2 int v2; // r3 return asd_link_reset_seq(a1: *(__int64 *)&a1, a2: v1, a3: v2); } /* ==== j_asd_link_set_reg42440_byte [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42440_byte(int a1, int a2) { return asd_link_set_reg42440_byte(a1, a2); } /* ==== j_asd_link_set_reg42440_byte_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42440_byte_10(int a1, int a2) { return asd_link_set_reg42440_byte(a1, a2); } /* ==== j_asd_link_set_reg42440_byte_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42440_byte_11(int a1, int a2) { return asd_link_set_reg42440_byte(a1, a2); } /* ==== j_asd_link_set_reg42440_byte_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42440_byte_12(int a1, int a2) { return asd_link_set_reg42440_byte(a1, a2); } /* ==== j_asd_link_set_reg42440_byte_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42440_byte_13(int a1, int a2) { return asd_link_set_reg42440_byte(a1, a2); } /* ==== j_asd_link_set_reg42440_byte_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42440_byte_14(int a1, int a2) { return asd_link_set_reg42440_byte(a1, a2); } /* ==== j_asd_link_set_reg42440_byte_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42440_byte_15(int a1, int a2) { return asd_link_set_reg42440_byte(a1, a2); } /* ==== j_asd_link_set_reg42440_byte_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42440_byte_16(int a1, int a2) { return asd_link_set_reg42440_byte(a1, a2); } /* ==== j_asd_link_set_reg42440_byte_17 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42440_byte_17(int a1, int a2) { return asd_link_set_reg42440_byte(a1, a2); } /* ==== j_asd_link_set_reg42440_byte_18 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42440_byte_18(int a1, int a2) { return asd_link_set_reg42440_byte(a1, a2); } /* ==== j_asd_link_set_reg42440_byte_19 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42440_byte_19(int a1, int a2) { return asd_link_set_reg42440_byte(a1, a2); } /* ==== j_asd_link_set_reg42440_byte_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42440_byte_2(int a1, int a2) { return asd_link_set_reg42440_byte(a1, a2); } /* ==== j_asd_link_set_reg42440_byte_20 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42440_byte_20(int a1, int a2) { return asd_link_set_reg42440_byte(a1, a2); } /* ==== j_asd_link_set_reg42440_byte_21 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42440_byte_21(int a1, int a2) { return asd_link_set_reg42440_byte(a1, a2); } /* ==== j_asd_link_set_reg42440_byte_22 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42440_byte_22(int a1, int a2) { return asd_link_set_reg42440_byte(a1, a2); } /* ==== j_asd_link_set_reg42440_byte_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42440_byte_3(int a1, int a2) { return asd_link_set_reg42440_byte(a1, a2); } /* ==== j_asd_link_set_reg42440_byte_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42440_byte_4(int a1, int a2) { return asd_link_set_reg42440_byte(a1, a2); } /* ==== j_asd_link_set_reg42440_byte_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42440_byte_5(int a1, int a2) { return asd_link_set_reg42440_byte(a1, a2); } /* ==== j_asd_link_set_reg42440_byte_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42440_byte_6(int a1, int a2) { return asd_link_set_reg42440_byte(a1, a2); } /* ==== j_asd_link_set_reg42440_byte_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42440_byte_7(int a1, int a2) { return asd_link_set_reg42440_byte(a1, a2); } /* ==== j_asd_link_set_reg42440_byte_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42440_byte_8(int a1, int a2) { return asd_link_set_reg42440_byte(a1, a2); } /* ==== j_asd_link_set_reg42440_byte_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42440_byte_9(int a1, int a2) { return asd_link_set_reg42440_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_byte [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_byte(int a1, int a2) { return asd_link_set_reg42468_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_byte_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_byte_10(int a1, int a2) { return asd_link_set_reg42468_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_byte_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_byte_11(int a1, int a2) { return asd_link_set_reg42468_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_byte_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_byte_12(int a1, int a2) { return asd_link_set_reg42468_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_byte_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_byte_13(int a1, int a2) { return asd_link_set_reg42468_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_byte_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_byte_14(int a1, int a2) { return asd_link_set_reg42468_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_byte_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_byte_15(int a1, int a2) { return asd_link_set_reg42468_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_byte_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_byte_16(int a1, int a2) { return asd_link_set_reg42468_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_byte_17 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_byte_17(int a1, int a2) { return asd_link_set_reg42468_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_byte_18 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_byte_18(int a1, int a2) { return asd_link_set_reg42468_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_byte_19 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_byte_19(int a1, int a2) { return asd_link_set_reg42468_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_byte_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_byte_2(int a1, int a2) { return asd_link_set_reg42468_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_byte_20 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_byte_20(int a1, int a2) { return asd_link_set_reg42468_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_byte_21 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_byte_21(int a1, int a2) { return asd_link_set_reg42468_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_byte_22 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_byte_22(int a1, int a2) { return asd_link_set_reg42468_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_byte_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_byte_3(int a1, int a2) { return asd_link_set_reg42468_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_byte_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_byte_4(int a1, int a2) { return asd_link_set_reg42468_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_byte_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_byte_5(int a1, int a2) { return asd_link_set_reg42468_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_byte_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_byte_6(int a1, int a2) { return asd_link_set_reg42468_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_byte_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_byte_7(int a1, int a2) { return asd_link_set_reg42468_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_byte_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_byte_8(int a1, int a2) { return asd_link_set_reg42468_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_byte_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_byte_9(int a1, int a2) { return asd_link_set_reg42468_byte(a1, a2); } /* ==== j_asd_link_set_reg42468_field [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_field(int a1, int a2) { return asd_link_set_reg42468_field(a1, a2); } /* ==== j_asd_link_set_reg42468_field_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_field_10(int a1, int a2) { return asd_link_set_reg42468_field(a1, a2); } /* ==== j_asd_link_set_reg42468_field_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_field_11(int a1, int a2) { return asd_link_set_reg42468_field(a1, a2); } /* ==== j_asd_link_set_reg42468_field_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_field_12(int a1, int a2) { return asd_link_set_reg42468_field(a1, a2); } /* ==== j_asd_link_set_reg42468_field_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_field_13(int a1, int a2) { return asd_link_set_reg42468_field(a1, a2); } /* ==== j_asd_link_set_reg42468_field_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_field_14(int a1, int a2) { return asd_link_set_reg42468_field(a1, a2); } /* ==== j_asd_link_set_reg42468_field_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_field_15(int a1, int a2) { return asd_link_set_reg42468_field(a1, a2); } /* ==== j_asd_link_set_reg42468_field_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_field_16(int a1, int a2) { return asd_link_set_reg42468_field(a1, a2); } /* ==== j_asd_link_set_reg42468_field_17 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_field_17(int a1, int a2) { return asd_link_set_reg42468_field(a1, a2); } /* ==== j_asd_link_set_reg42468_field_18 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_field_18(int a1, int a2) { return asd_link_set_reg42468_field(a1, a2); } /* ==== j_asd_link_set_reg42468_field_19 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_field_19(int a1, int a2) { return asd_link_set_reg42468_field(a1, a2); } /* ==== j_asd_link_set_reg42468_field_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_field_2(int a1, int a2) { return asd_link_set_reg42468_field(a1, a2); } /* ==== j_asd_link_set_reg42468_field_20 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_field_20(int a1, int a2) { return asd_link_set_reg42468_field(a1, a2); } /* ==== j_asd_link_set_reg42468_field_21 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_field_21(int a1, int a2) { return asd_link_set_reg42468_field(a1, a2); } /* ==== j_asd_link_set_reg42468_field_22 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_field_22(int a1, int a2) { return asd_link_set_reg42468_field(a1, a2); } /* ==== j_asd_link_set_reg42468_field_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_field_3(int a1, int a2) { return asd_link_set_reg42468_field(a1, a2); } /* ==== j_asd_link_set_reg42468_field_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_field_4(int a1, int a2) { return asd_link_set_reg42468_field(a1, a2); } /* ==== j_asd_link_set_reg42468_field_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_field_5(int a1, int a2) { return asd_link_set_reg42468_field(a1, a2); } /* ==== j_asd_link_set_reg42468_field_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_field_6(int a1, int a2) { return asd_link_set_reg42468_field(a1, a2); } /* ==== j_asd_link_set_reg42468_field_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_field_7(int a1, int a2) { return asd_link_set_reg42468_field(a1, a2); } /* ==== j_asd_link_set_reg42468_field_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_field_8(int a1, int a2) { return asd_link_set_reg42468_field(a1, a2); } /* ==== j_asd_link_set_reg42468_field_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg42468_field_9(int a1, int a2) { return asd_link_set_reg42468_field(a1, a2); } /* ==== j_asd_link_set_reg4248C_half [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg4248C_half(int a1, int a2) { return asd_link_set_reg4248C_half(a1, a2); } /* ==== j_asd_link_set_reg4248C_half_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg4248C_half_10(int a1, int a2) { return asd_link_set_reg4248C_half(a1, a2); } /* ==== j_asd_link_set_reg4248C_half_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg4248C_half_11(int a1, int a2) { return asd_link_set_reg4248C_half(a1, a2); } /* ==== j_asd_link_set_reg4248C_half_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg4248C_half_12(int a1, int a2) { return asd_link_set_reg4248C_half(a1, a2); } /* ==== j_asd_link_set_reg4248C_half_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg4248C_half_13(int a1, int a2) { return asd_link_set_reg4248C_half(a1, a2); } /* ==== j_asd_link_set_reg4248C_half_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg4248C_half_14(int a1, int a2) { return asd_link_set_reg4248C_half(a1, a2); } /* ==== j_asd_link_set_reg4248C_half_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg4248C_half_15(int a1, int a2) { return asd_link_set_reg4248C_half(a1, a2); } /* ==== j_asd_link_set_reg4248C_half_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg4248C_half_16(int a1, int a2) { return asd_link_set_reg4248C_half(a1, a2); } /* ==== j_asd_link_set_reg4248C_half_17 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg4248C_half_17(int a1, int a2) { return asd_link_set_reg4248C_half(a1, a2); } /* ==== j_asd_link_set_reg4248C_half_18 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg4248C_half_18(int a1, int a2) { return asd_link_set_reg4248C_half(a1, a2); } /* ==== j_asd_link_set_reg4248C_half_19 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg4248C_half_19(int a1, int a2) { return asd_link_set_reg4248C_half(a1, a2); } /* ==== j_asd_link_set_reg4248C_half_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg4248C_half_2(int a1, int a2) { return asd_link_set_reg4248C_half(a1, a2); } /* ==== j_asd_link_set_reg4248C_half_20 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg4248C_half_20(int a1, int a2) { return asd_link_set_reg4248C_half(a1, a2); } /* ==== j_asd_link_set_reg4248C_half_21 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg4248C_half_21(int a1, int a2) { return asd_link_set_reg4248C_half(a1, a2); } /* ==== j_asd_link_set_reg4248C_half_22 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg4248C_half_22(int a1, int a2) { return asd_link_set_reg4248C_half(a1, a2); } /* ==== j_asd_link_set_reg4248C_half_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg4248C_half_3(int a1, int a2) { return asd_link_set_reg4248C_half(a1, a2); } /* ==== j_asd_link_set_reg4248C_half_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg4248C_half_4(int a1, int a2) { return asd_link_set_reg4248C_half(a1, a2); } /* ==== j_asd_link_set_reg4248C_half_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg4248C_half_5(int a1, int a2) { return asd_link_set_reg4248C_half(a1, a2); } /* ==== j_asd_link_set_reg4248C_half_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg4248C_half_6(int a1, int a2) { return asd_link_set_reg4248C_half(a1, a2); } /* ==== j_asd_link_set_reg4248C_half_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg4248C_half_7(int a1, int a2) { return asd_link_set_reg4248C_half(a1, a2); } /* ==== j_asd_link_set_reg4248C_half_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg4248C_half_8(int a1, int a2) { return asd_link_set_reg4248C_half(a1, a2); } /* ==== j_asd_link_set_reg4248C_half_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_set_reg4248C_half_9(int a1, int a2) { return asd_link_set_reg4248C_half(a1, a2); } /* ==== j_asd_link_status_by_signal [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_status_by_signal(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_status_by_signal(a1, a2: v1, a3: v2); } /* ==== j_asd_link_status_by_signal_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_status_by_signal_10(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_status_by_signal(a1, a2: v1, a3: v2); } /* ==== j_asd_link_status_by_signal_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_status_by_signal_11(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_status_by_signal(a1, a2: v1, a3: v2); } /* ==== j_asd_link_status_by_signal_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_status_by_signal_12(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_status_by_signal(a1, a2: v1, a3: v2); } /* ==== j_asd_link_status_by_signal_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_status_by_signal_13(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_status_by_signal(a1, a2: v1, a3: v2); } /* ==== j_asd_link_status_by_signal_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_status_by_signal_14(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_status_by_signal(a1, a2: v1, a3: v2); } /* ==== j_asd_link_status_by_signal_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_status_by_signal_15(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_status_by_signal(a1, a2: v1, a3: v2); } /* ==== j_asd_link_status_by_signal_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_status_by_signal_16(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_status_by_signal(a1, a2: v1, a3: v2); } /* ==== j_asd_link_status_by_signal_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_status_by_signal_2(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_status_by_signal(a1, a2: v1, a3: v2); } /* ==== j_asd_link_status_by_signal_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_status_by_signal_3(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_status_by_signal(a1, a2: v1, a3: v2); } /* ==== j_asd_link_status_by_signal_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_status_by_signal_4(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_status_by_signal(a1, a2: v1, a3: v2); } /* ==== j_asd_link_status_by_signal_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_status_by_signal_5(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_status_by_signal(a1, a2: v1, a3: v2); } /* ==== j_asd_link_status_by_signal_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_status_by_signal_6(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_status_by_signal(a1, a2: v1, a3: v2); } /* ==== j_asd_link_status_by_signal_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_status_by_signal_7(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_status_by_signal(a1, a2: v1, a3: v2); } /* ==== j_asd_link_status_by_signal_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_status_by_signal_8(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_status_by_signal(a1, a2: v1, a3: v2); } /* ==== j_asd_link_status_by_signal_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_status_by_signal_9(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_status_by_signal(a1, a2: v1, a3: v2); } /* ==== j_asd_link_status_by_signal_v2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_status_by_signal_v2(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_status_by_signal_v2(a1, a2: v1, a3: v2); } /* ==== j_asd_link_status_by_signal_v2_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_status_by_signal_v2_2(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_status_by_signal_v2(a1, a2: v1, a3: v2); } /* ==== j_asd_link_status_by_signal_v2_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_status_by_signal_v2_3(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_status_by_signal_v2(a1, a2: v1, a3: v2); } /* ==== j_asd_link_status_by_signal_v2_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_status_by_signal_v2_4(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_status_by_signal_v2(a1, a2: v1, a3: v2); } /* ==== j_asd_link_status_by_signal_v2_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_status_by_signal_v2_5(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_status_by_signal_v2(a1, a2: v1, a3: v2); } /* ==== j_asd_link_status_by_signal_v2_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_status_by_signal_v2_6(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_link_status_by_signal_v2(a1, a2: v1, a3: v2); } /* ==== j_asd_link_train_status [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_train_status(int a1) { return asd_link_train_status(a1); } /* ==== j_asd_link_train_status_0 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_train_status_0(int a1) { return asd_link_train_status(a1); } /* ==== j_asd_link_train_status_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_train_status_10(int a1) { return asd_link_train_status(a1); } /* ==== j_asd_link_train_status_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_train_status_11(int a1) { return asd_link_train_status(a1); } /* ==== j_asd_link_train_status_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_train_status_12(int a1) { return asd_link_train_status(a1); } /* ==== j_asd_link_train_status_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_train_status_13(int a1) { return asd_link_train_status(a1); } /* ==== j_asd_link_train_status_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_train_status_14(int a1) { return asd_link_train_status(a1); } /* ==== j_asd_link_train_status_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_train_status_15(int a1) { return asd_link_train_status(a1); } /* ==== j_asd_link_train_status_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_train_status_16(int a1) { return asd_link_train_status(a1); } /* ==== j_asd_link_train_status_17 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_train_status_17(int a1) { return asd_link_train_status(a1); } /* ==== j_asd_link_train_status_18 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_train_status_18(int a1) { return asd_link_train_status(a1); } /* ==== j_asd_link_train_status_19 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_train_status_19(int a1) { return asd_link_train_status(a1); } /* ==== j_asd_link_train_status_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_train_status_2(int a1) { return asd_link_train_status(a1); } /* ==== j_asd_link_train_status_20 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_train_status_20(int a1) { return asd_link_train_status(a1); } /* ==== j_asd_link_train_status_21 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_train_status_21(int a1) { return asd_link_train_status(a1); } /* ==== j_asd_link_train_status_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_train_status_3(int a1) { return asd_link_train_status(a1); } /* ==== j_asd_link_train_status_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_train_status_4(int a1) { return asd_link_train_status(a1); } /* ==== j_asd_link_train_status_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_train_status_5(int a1) { return asd_link_train_status(a1); } /* ==== j_asd_link_train_status_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_train_status_6(int a1) { return asd_link_train_status(a1); } /* ==== j_asd_link_train_status_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_train_status_7(int a1) { return asd_link_train_status(a1); } /* ==== j_asd_link_train_status_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_train_status_8(int a1) { return asd_link_train_status(a1); } /* ==== j_asd_link_train_status_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_train_status_9(int a1) { return asd_link_train_status(a1); } /* ==== j_asd_link_wait_and_set [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_and_set(int a1, int a2, int a3) { return asd_link_wait_and_set(a1, a2, a3); } /* ==== j_asd_link_wait_and_set_0 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_and_set_0(int a1, int a2, int a3) { return asd_link_wait_and_set(a1, a2, a3); } /* ==== j_asd_link_wait_and_set_1 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_and_set_1(int a1, int a2, int a3) { return asd_link_wait_and_set(a1, a2, a3); } /* ==== j_asd_link_wait_and_set_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_and_set_10(int a1, int a2, int a3) { return asd_link_wait_and_set(a1, a2, a3); } /* ==== j_asd_link_wait_and_set_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_and_set_11(int a1, int a2, int a3) { return asd_link_wait_and_set(a1, a2, a3); } /* ==== j_asd_link_wait_and_set_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_and_set_12(int a1, int a2, int a3) { return asd_link_wait_and_set(a1, a2, a3); } /* ==== j_asd_link_wait_and_set_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_and_set_13(int a1, int a2, int a3) { return asd_link_wait_and_set(a1, a2, a3); } /* ==== j_asd_link_wait_and_set_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_and_set_14(int a1, int a2, int a3) { return asd_link_wait_and_set(a1, a2, a3); } /* ==== j_asd_link_wait_and_set_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_and_set_15(int a1, int a2, int a3) { return asd_link_wait_and_set(a1, a2, a3); } /* ==== j_asd_link_wait_and_set_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_and_set_16(int a1, int a2, int a3) { return asd_link_wait_and_set(a1, a2, a3); } /* ==== j_asd_link_wait_and_set_17 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_and_set_17(int a1, int a2, int a3) { return asd_link_wait_and_set(a1, a2, a3); } /* ==== j_asd_link_wait_and_set_18 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_and_set_18(int a1, int a2, int a3) { return asd_link_wait_and_set(a1, a2, a3); } /* ==== j_asd_link_wait_and_set_19 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_and_set_19(int a1, int a2, int a3) { return asd_link_wait_and_set(a1, a2, a3); } /* ==== j_asd_link_wait_and_set_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_and_set_2(int a1, int a2, int a3) { return asd_link_wait_and_set(a1, a2, a3); } /* ==== j_asd_link_wait_and_set_20 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_and_set_20(int a1, int a2, int a3) { return asd_link_wait_and_set(a1, a2, a3); } /* ==== j_asd_link_wait_and_set_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_and_set_3(int a1, int a2, int a3) { return asd_link_wait_and_set(a1, a2, a3); } /* ==== j_asd_link_wait_and_set_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_and_set_4(int a1, int a2, int a3) { return asd_link_wait_and_set(a1, a2, a3); } /* ==== j_asd_link_wait_and_set_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_and_set_5(int a1, int a2, int a3) { return asd_link_wait_and_set(a1, a2, a3); } /* ==== j_asd_link_wait_and_set_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_and_set_6(int a1, int a2, int a3) { return asd_link_wait_and_set(a1, a2, a3); } /* ==== j_asd_link_wait_and_set_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_and_set_7(int a1, int a2, int a3) { return asd_link_wait_and_set(a1, a2, a3); } /* ==== j_asd_link_wait_and_set_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_and_set_8(int a1, int a2, int a3) { return asd_link_wait_and_set(a1, a2, a3); } /* ==== j_asd_link_wait_and_set_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_and_set_9(int a1, int a2, int a3) { return asd_link_wait_and_set(a1, a2, a3); } /* ==== j_asd_link_wait_ready_a [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_ready_a(int a1) { return asd_link_wait_ready_a(a1); } /* ==== j_asd_link_wait_ready_a_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_ready_a_10(int a1) { return asd_link_wait_ready_a(a1); } /* ==== j_asd_link_wait_ready_a_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_ready_a_11(int a1) { return asd_link_wait_ready_a(a1); } /* ==== j_asd_link_wait_ready_a_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_ready_a_12(int a1) { return asd_link_wait_ready_a(a1); } /* ==== j_asd_link_wait_ready_a_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_ready_a_13(int a1) { return asd_link_wait_ready_a(a1); } /* ==== j_asd_link_wait_ready_a_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_ready_a_14(int a1) { return asd_link_wait_ready_a(a1); } /* ==== j_asd_link_wait_ready_a_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_ready_a_15(int a1) { return asd_link_wait_ready_a(a1); } /* ==== j_asd_link_wait_ready_a_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_ready_a_16(int a1) { return asd_link_wait_ready_a(a1); } /* ==== j_asd_link_wait_ready_a_17 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_ready_a_17(int a1) { return asd_link_wait_ready_a(a1); } /* ==== j_asd_link_wait_ready_a_18 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_ready_a_18(int a1) { return asd_link_wait_ready_a(a1); } /* ==== j_asd_link_wait_ready_a_19 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_ready_a_19(int a1) { return asd_link_wait_ready_a(a1); } /* ==== j_asd_link_wait_ready_a_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_ready_a_2(int a1) { return asd_link_wait_ready_a(a1); } /* ==== j_asd_link_wait_ready_a_20 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_ready_a_20(int a1) { return asd_link_wait_ready_a(a1); } /* ==== j_asd_link_wait_ready_a_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_ready_a_3(int a1) { return asd_link_wait_ready_a(a1); } /* ==== j_asd_link_wait_ready_a_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_ready_a_4(int a1) { return asd_link_wait_ready_a(a1); } /* ==== j_asd_link_wait_ready_a_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_ready_a_5(int a1) { return asd_link_wait_ready_a(a1); } /* ==== j_asd_link_wait_ready_a_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_ready_a_6(int a1) { return asd_link_wait_ready_a(a1); } /* ==== j_asd_link_wait_ready_a_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_ready_a_7(int a1) { return asd_link_wait_ready_a(a1); } /* ==== j_asd_link_wait_ready_a_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_ready_a_8(int a1) { return asd_link_wait_ready_a(a1); } /* ==== j_asd_link_wait_ready_a_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_ready_a_9(int a1) { return asd_link_wait_ready_a(a1); } /* ==== j_asd_link_wait_ready_b [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_ready_b(int a1) { return asd_link_wait_ready_b(a1); } /* ==== j_asd_link_wait_ready_b_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_wait_ready_b_2(int a1) { return asd_link_wait_ready_b(a1); } /* ==== j_asd_link_write_quad [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_write_quad(int a1, _DWORD *a2) { return asd_link_write_quad(a1, a2); } /* ==== j_asd_link_write_quad_0 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_write_quad_0(int a1, _DWORD *a2) { return asd_link_write_quad(a1, a2); } /* ==== j_asd_link_write_quad_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_write_quad_10(int a1, _DWORD *a2) { return asd_link_write_quad(a1, a2); } /* ==== j_asd_link_write_quad_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_write_quad_11(int a1, _DWORD *a2) { return asd_link_write_quad(a1, a2); } /* ==== j_asd_link_write_quad_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_write_quad_12(int a1, _DWORD *a2) { return asd_link_write_quad(a1, a2); } /* ==== j_asd_link_write_quad_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_write_quad_13(int a1, _DWORD *a2) { return asd_link_write_quad(a1, a2); } /* ==== j_asd_link_write_quad_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_write_quad_14(int a1, _DWORD *a2) { return asd_link_write_quad(a1, a2); } /* ==== j_asd_link_write_quad_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_write_quad_15(int a1, _DWORD *a2) { return asd_link_write_quad(a1, a2); } /* ==== j_asd_link_write_quad_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_write_quad_16(int a1, _DWORD *a2) { return asd_link_write_quad(a1, a2); } /* ==== j_asd_link_write_quad_17 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_write_quad_17(int a1, _DWORD *a2) { return asd_link_write_quad(a1, a2); } /* ==== j_asd_link_write_quad_18 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_write_quad_18(int a1, _DWORD *a2) { return asd_link_write_quad(a1, a2); } /* ==== j_asd_link_write_quad_19 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_write_quad_19(int a1, _DWORD *a2) { return asd_link_write_quad(a1, a2); } /* ==== j_asd_link_write_quad_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_write_quad_2(int a1, _DWORD *a2) { return asd_link_write_quad(a1, a2); } /* ==== j_asd_link_write_quad_20 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_write_quad_20(int a1, _DWORD *a2) { return asd_link_write_quad(a1, a2); } /* ==== j_asd_link_write_quad_21 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_write_quad_21(int a1, _DWORD *a2) { return asd_link_write_quad(a1, a2); } /* ==== j_asd_link_write_quad_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_write_quad_3(int a1, _DWORD *a2) { return asd_link_write_quad(a1, a2); } /* ==== j_asd_link_write_quad_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_write_quad_4(int a1, _DWORD *a2) { return asd_link_write_quad(a1, a2); } /* ==== j_asd_link_write_quad_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_write_quad_5(int a1, _DWORD *a2) { return asd_link_write_quad(a1, a2); } /* ==== j_asd_link_write_quad_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_write_quad_6(int a1, _DWORD *a2) { return asd_link_write_quad(a1, a2); } /* ==== j_asd_link_write_quad_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_write_quad_7(int a1, _DWORD *a2) { return asd_link_write_quad(a1, a2); } /* ==== j_asd_link_write_quad_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_write_quad_8(int a1, _DWORD *a2) { return asd_link_write_quad(a1, a2); } /* ==== j_asd_link_write_quad_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_link_write_quad_9(int a1, _DWORD *a2) { return asd_link_write_quad(a1, a2); } /* ==== j_asd_opt_cb_D49830 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_opt_cb_D49830() { return asd_opt_cb_D49830(); } /* ==== j_asd_opt_cb_D49834 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_opt_cb_D49834() { return asd_opt_cb_D49834(); } /* ==== j_asd_pipe_enable [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_enable(int a1, int a2, int a3) { return asd_pipe_enable(a1, a2, a3); } /* ==== j_asd_pipe_enable_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_enable_10(int a1, int a2, int a3) { return asd_pipe_enable(a1, a2, a3); } /* ==== j_asd_pipe_enable_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_enable_11(int a1, int a2, int a3) { return asd_pipe_enable(a1, a2, a3); } /* ==== j_asd_pipe_enable_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_enable_12(int a1, int a2, int a3) { return asd_pipe_enable(a1, a2, a3); } /* ==== j_asd_pipe_enable_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_enable_13(int a1, int a2, int a3) { return asd_pipe_enable(a1, a2, a3); } /* ==== j_asd_pipe_enable_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_enable_14(int a1, int a2, int a3) { return asd_pipe_enable(a1, a2, a3); } /* ==== j_asd_pipe_enable_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_enable_15(int a1, int a2, int a3) { return asd_pipe_enable(a1, a2, a3); } /* ==== j_asd_pipe_enable_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_enable_16(int a1, int a2, int a3) { return asd_pipe_enable(a1, a2, a3); } /* ==== j_asd_pipe_enable_17 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_enable_17(int a1, int a2, int a3) { return asd_pipe_enable(a1, a2, a3); } /* ==== j_asd_pipe_enable_18 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_enable_18(int a1, int a2, int a3) { return asd_pipe_enable(a1, a2, a3); } /* ==== j_asd_pipe_enable_19 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_enable_19(int a1, int a2, int a3) { return asd_pipe_enable(a1, a2, a3); } /* ==== j_asd_pipe_enable_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_enable_2(int a1, int a2, int a3) { return asd_pipe_enable(a1, a2, a3); } /* ==== j_asd_pipe_enable_20 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_enable_20(int a1, int a2, int a3) { return asd_pipe_enable(a1, a2, a3); } /* ==== j_asd_pipe_enable_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_enable_3(int a1, int a2, int a3) { return asd_pipe_enable(a1, a2, a3); } /* ==== j_asd_pipe_enable_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_enable_4(int a1, int a2, int a3) { return asd_pipe_enable(a1, a2, a3); } /* ==== j_asd_pipe_enable_48 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_enable_48(int a1, int a2, int a3) { return asd_pipe_enable_48(a1, a2, a3); } /* ==== j_asd_pipe_enable_48_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_enable_48_2(int a1, int a2, int a3) { return asd_pipe_enable_48(a1, a2, a3); } /* ==== j_asd_pipe_enable_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_enable_5(int a1, int a2, int a3) { return asd_pipe_enable(a1, a2, a3); } /* ==== j_asd_pipe_enable_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_enable_6(int a1, int a2, int a3) { return asd_pipe_enable(a1, a2, a3); } /* ==== j_asd_pipe_enable_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_enable_7(int a1, int a2, int a3) { return asd_pipe_enable(a1, a2, a3); } /* ==== j_asd_pipe_enable_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_enable_8(int a1, int a2, int a3) { return asd_pipe_enable(a1, a2, a3); } /* ==== j_asd_pipe_enable_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_enable_9(int a1, int a2, int a3) { return asd_pipe_enable(a1, a2, a3); } /* ==== j_asd_pipe_lookup [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_lookup(_DWORD *a1, int a2, __int16 a3) { return asd_pipe_lookup(a1, a2, a3); } /* ==== j_asd_pipe_lookup_0 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_lookup_0(_DWORD *a1, int a2, __int16 a3) { return asd_pipe_lookup(a1, a2, a3); } /* ==== j_asd_pipe_lookup_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_lookup_10(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_pipe_lookup(a1, a2: v1, a3: v2); } /* ==== j_asd_pipe_lookup_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_lookup_11(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_pipe_lookup(a1, a2: v1, a3: v2); } /* ==== j_asd_pipe_lookup_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_lookup_12(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_pipe_lookup(a1, a2: v1, a3: v2); } /* ==== j_asd_pipe_lookup_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_lookup_13(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_pipe_lookup(a1, a2: v1, a3: v2); } /* ==== j_asd_pipe_lookup_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_lookup_14(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_pipe_lookup(a1, a2: v1, a3: v2); } /* ==== j_asd_pipe_lookup_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_lookup_15(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_pipe_lookup(a1, a2: v1, a3: v2); } /* ==== j_asd_pipe_lookup_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_lookup_16(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_pipe_lookup(a1, a2: v1, a3: v2); } /* ==== j_asd_pipe_lookup_17 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_lookup_17(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_pipe_lookup(a1, a2: v1, a3: v2); } /* ==== j_asd_pipe_lookup_18 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_lookup_18(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_pipe_lookup(a1, a2: v1, a3: v2); } /* ==== j_asd_pipe_lookup_19 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_lookup_19(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_pipe_lookup(a1, a2: v1, a3: v2); } /* ==== j_asd_pipe_lookup_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_lookup_2(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_pipe_lookup(a1, a2: v1, a3: v2); } /* ==== j_asd_pipe_lookup_20 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_lookup_20(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_pipe_lookup(a1, a2: v1, a3: v2); } /* ==== j_asd_pipe_lookup_21 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_lookup_21(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_pipe_lookup(a1, a2: v1, a3: v2); } /* ==== j_asd_pipe_lookup_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_lookup_3(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_pipe_lookup(a1, a2: v1, a3: v2); } /* ==== j_asd_pipe_lookup_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_lookup_4(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_pipe_lookup(a1, a2: v1, a3: v2); } /* ==== j_asd_pipe_lookup_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_lookup_5(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_pipe_lookup(a1, a2: v1, a3: v2); } /* ==== j_asd_pipe_lookup_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_lookup_6(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_pipe_lookup(a1, a2: v1, a3: v2); } /* ==== j_asd_pipe_lookup_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_lookup_7(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_pipe_lookup(a1, a2: v1, a3: v2); } /* ==== j_asd_pipe_lookup_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_lookup_8(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_pipe_lookup(a1, a2: v1, a3: v2); } /* ==== j_asd_pipe_lookup_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_pipe_lookup_9(_DWORD *a1) { int v1; // r1 __int16 v2; // r2 return asd_pipe_lookup(a1, a2: v1, a3: v2); } /* ==== j_asd_program_key_regs [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_key_regs(int a1) { return asd_program_key_regs(a1); } /* ==== j_asd_program_key_regs_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_key_regs_10(int a1) { return asd_program_key_regs(a1); } /* ==== j_asd_program_key_regs_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_key_regs_11(int a1) { return asd_program_key_regs(a1); } /* ==== j_asd_program_key_regs_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_key_regs_12(int a1) { return asd_program_key_regs(a1); } /* ==== j_asd_program_key_regs_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_key_regs_13(int a1) { return asd_program_key_regs(a1); } /* ==== j_asd_program_key_regs_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_key_regs_14(int a1) { return asd_program_key_regs(a1); } /* ==== j_asd_program_key_regs_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_key_regs_15(int a1) { return asd_program_key_regs(a1); } /* ==== j_asd_program_key_regs_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_key_regs_16(int a1) { return asd_program_key_regs(a1); } /* ==== j_asd_program_key_regs_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_key_regs_2(int a1) { return asd_program_key_regs(a1); } /* ==== j_asd_program_key_regs_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_key_regs_3(int a1) { return asd_program_key_regs(a1); } /* ==== j_asd_program_key_regs_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_key_regs_4(int a1) { return asd_program_key_regs(a1); } /* ==== j_asd_program_key_regs_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_key_regs_5(int a1) { return asd_program_key_regs(a1); } /* ==== j_asd_program_key_regs_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_key_regs_6(int a1) { return asd_program_key_regs(a1); } /* ==== j_asd_program_key_regs_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_key_regs_7(int a1) { return asd_program_key_regs(a1); } /* ==== j_asd_program_key_regs_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_key_regs_8(int a1) { return asd_program_key_regs(a1); } /* ==== j_asd_program_key_regs_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_key_regs_9(int a1) { return asd_program_key_regs(a1); } /* ==== j_asd_program_link_by_signal [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_link_by_signal(struct asd_link_cfg *a1, int a2, int a3, int a4) { return asd_program_link_by_signal(a1, a2, a3, a4); } /* ==== j_asd_program_link_by_signal_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_link_by_signal_10(int a1, int a2, int a3, int a4) { return asd_program_link_by_signal((struct asd_link_cfg *)a1, a2, a3, a4); } /* ==== j_asd_program_link_by_signal_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_link_by_signal_11(int a1, int a2, int a3, int a4) { return asd_program_link_by_signal((struct asd_link_cfg *)a1, a2, a3, a4); } /* ==== j_asd_program_link_by_signal_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_link_by_signal_12(int a1, int a2, int a3, int a4) { return asd_program_link_by_signal((struct asd_link_cfg *)a1, a2, a3, a4); } /* ==== j_asd_program_link_by_signal_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_link_by_signal_13(int a1, int a2, int a3, int a4) { return asd_program_link_by_signal((struct asd_link_cfg *)a1, a2, a3, a4); } /* ==== j_asd_program_link_by_signal_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_link_by_signal_14(int a1, int a2, int a3, int a4) { return asd_program_link_by_signal((struct asd_link_cfg *)a1, a2, a3, a4); } /* ==== j_asd_program_link_by_signal_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_link_by_signal_2(int a1, int a2, int a3, int a4) { return asd_program_link_by_signal((struct asd_link_cfg *)a1, a2, a3, a4); } /* ==== j_asd_program_link_by_signal_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_link_by_signal_3(int a1, int a2, int a3, int a4) { return asd_program_link_by_signal((struct asd_link_cfg *)a1, a2, a3, a4); } /* ==== j_asd_program_link_by_signal_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_link_by_signal_4(int a1, int a2, int a3, int a4) { return asd_program_link_by_signal((struct asd_link_cfg *)a1, a2, a3, a4); } /* ==== j_asd_program_link_by_signal_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_link_by_signal_5(int a1, int a2, int a3, int a4) { return asd_program_link_by_signal((struct asd_link_cfg *)a1, a2, a3, a4); } /* ==== j_asd_program_link_by_signal_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_link_by_signal_6(int a1, int a2, int a3, int a4) { return asd_program_link_by_signal((struct asd_link_cfg *)a1, a2, a3, a4); } /* ==== j_asd_program_link_by_signal_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_link_by_signal_7(int a1, int a2, int a3, int a4) { return asd_program_link_by_signal((struct asd_link_cfg *)a1, a2, a3, a4); } /* ==== j_asd_program_link_by_signal_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_link_by_signal_8(int a1, int a2, int a3, int a4) { return asd_program_link_by_signal((struct asd_link_cfg *)a1, a2, a3, a4); } /* ==== j_asd_program_link_by_signal_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_link_by_signal_9(int a1, int a2, int a3, int a4) { return asd_program_link_by_signal((struct asd_link_cfg *)a1, a2, a3, a4); } /* ==== j_asd_program_link_by_signal_v2 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_link_by_signal_v2(struct asd_link_cfg *a1, int a2, int a3, int a4) { return asd_program_link_by_signal_v2(a1, a2, a3, a4); } /* ==== j_asd_program_link_by_signal_v2_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_link_by_signal_v2_2(int a1, int a2, int a3, int a4) { return asd_program_link_by_signal_v2((struct asd_link_cfg *)a1, a2, a3, a4); } /* ==== j_asd_program_link_by_signal_v3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_link_by_signal_v3(int a1, int a2, int a3, int a4) { return asd_program_link_by_signal_v3((struct asd_link_cfg *)a1, a2, a3, a4); } /* ==== j_asd_program_link_by_signal_v4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_link_by_signal_v4(int a1, int a2, int a3, int a4) { return asd_program_link_by_signal_v4((struct asd_link_cfg *)a1, a2, a3, a4); } /* ==== j_asd_program_link_by_signal_v5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_link_by_signal_v5(int a1, int a2, int a3, int a4) { return asd_program_link_by_signal_v5((struct asd_link_cfg *)a1, a2, a3, a4); } /* ==== j_asd_program_link_by_signal_v5_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_program_link_by_signal_v5_2(int a1, int a2, int a3, int a4) { return asd_program_link_by_signal_v5((struct asd_link_cfg *)a1, a2, a3, a4); } /* ==== j_asd_query_link_config [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_query_link_config(_DWORD *a1, int *a2) { return asd_query_link_config(a1, a2); } /* ==== j_asd_query_link_config_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_query_link_config_10(_DWORD *a1, int *a2) { return asd_query_link_config(a1, a2); } /* ==== j_asd_query_link_config_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_query_link_config_11(_DWORD *a1, int *a2) { return asd_query_link_config(a1, a2); } /* ==== j_asd_query_link_config_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_query_link_config_12(_DWORD *a1, int *a2) { return asd_query_link_config(a1, a2); } /* ==== j_asd_query_link_config_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_query_link_config_13(_DWORD *a1, int *a2) { return asd_query_link_config(a1, a2); } /* ==== j_asd_query_link_config_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_query_link_config_14(_DWORD *a1, int *a2) { return asd_query_link_config(a1, a2); } /* ==== j_asd_query_link_config_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_query_link_config_15(_DWORD *a1, int *a2) { return asd_query_link_config(a1, a2); } /* ==== j_asd_query_link_config_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_query_link_config_16(_DWORD *a1, int *a2) { return asd_query_link_config(a1, a2); } /* ==== j_asd_query_link_config_17 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_query_link_config_17(_DWORD *a1, int *a2) { return asd_query_link_config(a1, a2); } /* ==== j_asd_query_link_config_18 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_query_link_config_18(_DWORD *a1, int *a2) { return asd_query_link_config(a1, a2); } /* ==== j_asd_query_link_config_19 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_query_link_config_19(_DWORD *a1, int *a2) { return asd_query_link_config(a1, a2); } /* ==== j_asd_query_link_config_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_query_link_config_2(_DWORD *a1, int *a2) { return asd_query_link_config(a1, a2); } /* ==== j_asd_query_link_config_20 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_query_link_config_20(_DWORD *a1, int *a2) { return asd_query_link_config(a1, a2); } /* ==== j_asd_query_link_config_21 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_query_link_config_21(_DWORD *a1, int *a2) { return asd_query_link_config(a1, a2); } /* ==== j_asd_query_link_config_22 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_query_link_config_22(_DWORD *a1, int *a2) { return asd_query_link_config(a1, a2); } /* ==== j_asd_query_link_config_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_query_link_config_3(_DWORD *a1, int *a2) { return asd_query_link_config(a1, a2); } /* ==== j_asd_query_link_config_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_query_link_config_4(_DWORD *a1, int *a2) { return asd_query_link_config(a1, a2); } /* ==== j_asd_query_link_config_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_query_link_config_5(_DWORD *a1, int *a2) { return asd_query_link_config(a1, a2); } /* ==== j_asd_query_link_config_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_query_link_config_6(_DWORD *a1, int *a2) { return asd_query_link_config(a1, a2); } /* ==== j_asd_query_link_config_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_query_link_config_7(_DWORD *a1, int *a2) { return asd_query_link_config(a1, a2); } /* ==== j_asd_query_link_config_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_query_link_config_8(_DWORD *a1, int *a2) { return asd_query_link_config(a1, a2); } /* ==== j_asd_query_link_config_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_query_link_config_9(_DWORD *a1, int *a2) { return asd_query_link_config(a1, a2); } /* ==== j_asd_reg_read_10800 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_10800(_DWORD *a1) { return asd_reg_read_10800(a1); } /* ==== j_asd_reg_read_10800_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_10800_2(_DWORD *a1) { return asd_reg_read_10800(a1); } /* ==== j_asd_reg_read_10800_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_10800_3(_DWORD *a1) { return asd_reg_read_10800(a1); } /* ==== j_asd_reg_read_10800_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_10800_4(_DWORD *a1) { return asd_reg_read_10800(a1); } /* ==== j_asd_reg_read_13B74_cfg2 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg2(int a1) { return asd_reg_read_13B74_cfg2(a1); } /* ==== j_asd_reg_read_13B74_cfg2_0 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg2_0(int a1) { return asd_reg_read_13B74_cfg2(a1); } /* ==== j_asd_reg_read_13B74_cfg2_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg2_10(int a1) { return asd_reg_read_13B74_cfg2(a1); } /* ==== j_asd_reg_read_13B74_cfg2_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg2_11(int a1) { return asd_reg_read_13B74_cfg2(a1); } /* ==== j_asd_reg_read_13B74_cfg2_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg2_12(int a1) { return asd_reg_read_13B74_cfg2(a1); } /* ==== j_asd_reg_read_13B74_cfg2_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg2_13(int a1) { return asd_reg_read_13B74_cfg2(a1); } /* ==== j_asd_reg_read_13B74_cfg2_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg2_14(int a1) { return asd_reg_read_13B74_cfg2(a1); } /* ==== j_asd_reg_read_13B74_cfg2_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg2_15(int a1) { return asd_reg_read_13B74_cfg2(a1); } /* ==== j_asd_reg_read_13B74_cfg2_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg2_16(int a1) { return asd_reg_read_13B74_cfg2(a1); } /* ==== j_asd_reg_read_13B74_cfg2_17 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg2_17(int a1) { return asd_reg_read_13B74_cfg2(a1); } /* ==== j_asd_reg_read_13B74_cfg2_18 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg2_18(int a1) { return asd_reg_read_13B74_cfg2(a1); } /* ==== j_asd_reg_read_13B74_cfg2_19 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg2_19(int a1) { return asd_reg_read_13B74_cfg2(a1); } /* ==== j_asd_reg_read_13B74_cfg2_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg2_2(int a1) { return asd_reg_read_13B74_cfg2(a1); } /* ==== j_asd_reg_read_13B74_cfg2_20 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg2_20(int a1) { return asd_reg_read_13B74_cfg2(a1); } /* ==== j_asd_reg_read_13B74_cfg2_21 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg2_21(int a1) { return asd_reg_read_13B74_cfg2(a1); } /* ==== j_asd_reg_read_13B74_cfg2_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg2_3(int a1) { return asd_reg_read_13B74_cfg2(a1); } /* ==== j_asd_reg_read_13B74_cfg2_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg2_4(int a1) { return asd_reg_read_13B74_cfg2(a1); } /* ==== j_asd_reg_read_13B74_cfg2_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg2_5(int a1) { return asd_reg_read_13B74_cfg2(a1); } /* ==== j_asd_reg_read_13B74_cfg2_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg2_6(int a1) { return asd_reg_read_13B74_cfg2(a1); } /* ==== j_asd_reg_read_13B74_cfg2_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg2_7(int a1) { return asd_reg_read_13B74_cfg2(a1); } /* ==== j_asd_reg_read_13B74_cfg2_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg2_8(int a1) { return asd_reg_read_13B74_cfg2(a1); } /* ==== j_asd_reg_read_13B74_cfg2_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg2_9(int a1) { return asd_reg_read_13B74_cfg2(a1); } /* ==== j_asd_reg_read_13B74_cfg3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg3(int a1, _BYTE *a2, _BYTE *a3) { return asd_reg_read_13B74_cfg3(a1, a2, a3); } /* ==== j_asd_reg_read_13B74_cfg3_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg3_10(int a1, _BYTE *a2, _BYTE *a3) { return asd_reg_read_13B74_cfg3(a1, a2, a3); } /* ==== j_asd_reg_read_13B74_cfg3_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg3_11(int a1, _BYTE *a2, _BYTE *a3) { return asd_reg_read_13B74_cfg3(a1, a2, a3); } /* ==== j_asd_reg_read_13B74_cfg3_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg3_12(int a1, _BYTE *a2, _BYTE *a3) { return asd_reg_read_13B74_cfg3(a1, a2, a3); } /* ==== j_asd_reg_read_13B74_cfg3_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg3_13(int a1, _BYTE *a2, _BYTE *a3) { return asd_reg_read_13B74_cfg3(a1, a2, a3); } /* ==== j_asd_reg_read_13B74_cfg3_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg3_14(int a1, _BYTE *a2, _BYTE *a3) { return asd_reg_read_13B74_cfg3(a1, a2, a3); } /* ==== j_asd_reg_read_13B74_cfg3_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg3_15(int a1, _BYTE *a2, _BYTE *a3) { return asd_reg_read_13B74_cfg3(a1, a2, a3); } /* ==== j_asd_reg_read_13B74_cfg3_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg3_16(int a1, _BYTE *a2, _BYTE *a3) { return asd_reg_read_13B74_cfg3(a1, a2, a3); } /* ==== j_asd_reg_read_13B74_cfg3_17 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg3_17(int a1, _BYTE *a2, _BYTE *a3) { return asd_reg_read_13B74_cfg3(a1, a2, a3); } /* ==== j_asd_reg_read_13B74_cfg3_18 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg3_18(int a1, _BYTE *a2, _BYTE *a3) { return asd_reg_read_13B74_cfg3(a1, a2, a3); } /* ==== j_asd_reg_read_13B74_cfg3_19 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg3_19(int a1, _BYTE *a2, _BYTE *a3) { return asd_reg_read_13B74_cfg3(a1, a2, a3); } /* ==== j_asd_reg_read_13B74_cfg3_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg3_2(int a1, _BYTE *a2, _BYTE *a3) { return asd_reg_read_13B74_cfg3(a1, a2, a3); } /* ==== j_asd_reg_read_13B74_cfg3_20 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg3_20(int a1, _BYTE *a2, _BYTE *a3) { return asd_reg_read_13B74_cfg3(a1, a2, a3); } /* ==== j_asd_reg_read_13B74_cfg3_21 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg3_21(int a1, _BYTE *a2, _BYTE *a3) { return asd_reg_read_13B74_cfg3(a1, a2, a3); } /* ==== j_asd_reg_read_13B74_cfg3_22 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg3_22(int a1, _BYTE *a2, _BYTE *a3) { return asd_reg_read_13B74_cfg3(a1, a2, a3); } /* ==== j_asd_reg_read_13B74_cfg3_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg3_3(int a1, _BYTE *a2, _BYTE *a3) { return asd_reg_read_13B74_cfg3(a1, a2, a3); } /* ==== j_asd_reg_read_13B74_cfg3_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg3_4(int a1, _BYTE *a2, _BYTE *a3) { return asd_reg_read_13B74_cfg3(a1, a2, a3); } /* ==== j_asd_reg_read_13B74_cfg3_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg3_5(int a1, _BYTE *a2, _BYTE *a3) { return asd_reg_read_13B74_cfg3(a1, a2, a3); } /* ==== j_asd_reg_read_13B74_cfg3_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg3_6(int a1, _BYTE *a2, _BYTE *a3) { return asd_reg_read_13B74_cfg3(a1, a2, a3); } /* ==== j_asd_reg_read_13B74_cfg3_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg3_7(int a1, _BYTE *a2, _BYTE *a3) { return asd_reg_read_13B74_cfg3(a1, a2, a3); } /* ==== j_asd_reg_read_13B74_cfg3_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg3_8(int a1, _BYTE *a2, _BYTE *a3) { return asd_reg_read_13B74_cfg3(a1, a2, a3); } /* ==== j_asd_reg_read_13B74_cfg3_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13B74_cfg3_9(int a1, _BYTE *a2, _BYTE *a3) { return asd_reg_read_13B74_cfg3(a1, a2, a3); } /* ==== j_asd_reg_read_13D24_cfg0 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13D24_cfg0(unsigned int a1, int a2, __int16 a3) { return asd_reg_read_13D24_cfg0(a1, a2, a3); } /* ==== j_asd_reg_read_13D24_cfg0_0 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13D24_cfg0_0(unsigned int a1, int a2, __int16 a3) { return asd_reg_read_13D24_cfg0(a1, a2, a3); } /* ==== j_asd_reg_read_13D24_cfg0_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13D24_cfg0_10(int a1) { int v1; // r1 __int16 v2; // r2 return asd_reg_read_13D24_cfg0(a1, a2: v1, a3: v2); } /* ==== j_asd_reg_read_13D24_cfg0_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13D24_cfg0_11(int a1) { int v1; // r1 __int16 v2; // r2 return asd_reg_read_13D24_cfg0(a1, a2: v1, a3: v2); } /* ==== j_asd_reg_read_13D24_cfg0_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13D24_cfg0_12(int a1) { int v1; // r1 __int16 v2; // r2 return asd_reg_read_13D24_cfg0(a1, a2: v1, a3: v2); } /* ==== j_asd_reg_read_13D24_cfg0_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13D24_cfg0_13(int a1) { int v1; // r1 __int16 v2; // r2 return asd_reg_read_13D24_cfg0(a1, a2: v1, a3: v2); } /* ==== j_asd_reg_read_13D24_cfg0_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13D24_cfg0_14(int a1) { int v1; // r1 __int16 v2; // r2 return asd_reg_read_13D24_cfg0(a1, a2: v1, a3: v2); } /* ==== j_asd_reg_read_13D24_cfg0_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13D24_cfg0_15(int a1) { int v1; // r1 __int16 v2; // r2 return asd_reg_read_13D24_cfg0(a1, a2: v1, a3: v2); } /* ==== j_asd_reg_read_13D24_cfg0_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13D24_cfg0_16(int a1) { int v1; // r1 __int16 v2; // r2 return asd_reg_read_13D24_cfg0(a1, a2: v1, a3: v2); } /* ==== j_asd_reg_read_13D24_cfg0_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13D24_cfg0_2(int a1) { int v1; // r1 __int16 v2; // r2 return asd_reg_read_13D24_cfg0(a1, a2: v1, a3: v2); } /* ==== j_asd_reg_read_13D24_cfg0_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13D24_cfg0_3(int a1) { int v1; // r1 __int16 v2; // r2 return asd_reg_read_13D24_cfg0(a1, a2: v1, a3: v2); } /* ==== j_asd_reg_read_13D24_cfg0_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13D24_cfg0_4(int a1) { int v1; // r1 __int16 v2; // r2 return asd_reg_read_13D24_cfg0(a1, a2: v1, a3: v2); } /* ==== j_asd_reg_read_13D24_cfg0_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13D24_cfg0_5(int a1) { int v1; // r1 __int16 v2; // r2 return asd_reg_read_13D24_cfg0(a1, a2: v1, a3: v2); } /* ==== j_asd_reg_read_13D24_cfg0_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13D24_cfg0_6(int a1) { int v1; // r1 __int16 v2; // r2 return asd_reg_read_13D24_cfg0(a1, a2: v1, a3: v2); } /* ==== j_asd_reg_read_13D24_cfg0_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13D24_cfg0_7(int a1) { int v1; // r1 __int16 v2; // r2 return asd_reg_read_13D24_cfg0(a1, a2: v1, a3: v2); } /* ==== j_asd_reg_read_13D24_cfg0_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13D24_cfg0_8(int a1) { int v1; // r1 __int16 v2; // r2 return asd_reg_read_13D24_cfg0(a1, a2: v1, a3: v2); } /* ==== j_asd_reg_read_13D24_cfg0_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13D24_cfg0_9(int a1) { int v1; // r1 __int16 v2; // r2 return asd_reg_read_13D24_cfg0(a1, a2: v1, a3: v2); } /* ==== j_asd_reg_read_13D24_cfg1 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13D24_cfg1(unsigned int a1, int a2, __int16 a3) { return asd_reg_read_13D24_cfg1(a1, a2, a3); } /* ==== j_asd_reg_read_13D24_cfg1_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_reg_read_13D24_cfg1_2(unsigned int a1) { int v1; // r1 __int16 v2; // r2 return asd_reg_read_13D24_cfg1(a1, a2: v1, a3: v2); } /* ==== j_asd_session_op57_invoke [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_session_op57_invoke() { return asd_session_op57_invoke(); } /* ==== j_asd_session_op57_invoke_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_session_op57_invoke_2() { return asd_session_op57_invoke(); } /* ==== j_asd_session_op57_invoke_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_session_op57_invoke_3() { return asd_session_op57_invoke(); } /* ==== j_asd_session_op57_invoke_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_session_op57_invoke_4() { return asd_session_op57_invoke(); } /* ==== j_asd_session_op57_invoke_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_session_op57_invoke_5() { return asd_session_op57_invoke(); } /* ==== j_asd_session_op57_invoke_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_session_op57_invoke_6() { return asd_session_op57_invoke(); } /* ==== j_asd_session_op57_invoke_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_session_op57_invoke_7() { return asd_session_op57_invoke(); } /* ==== j_asd_session_op57_invoke_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_session_op57_invoke_8() { return asd_session_op57_invoke(); } /* ==== j_asd_session_op57_invoke_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_session_op57_invoke_9() { return asd_session_op57_invoke(); } /* ==== j_asd_set_link_flag [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_link_flag(unsigned int a1, int a2, char a3) { return asd_set_link_flag(a1, a2, a3); } /* ==== j_asd_set_link_flag_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_link_flag_2(unsigned int a1, int a2, char a3) { return asd_set_link_flag(a1, a2, a3); } /* ==== j_asd_set_link_param_40 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_link_param_40(int a1, _DWORD *a2, __int16 a3) { return asd_set_link_param_40(a1, a2, a3); } /* ==== j_asd_set_link_param_40_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_link_param_40_2(int a1, _DWORD *a2) { __int16 v2; // r2 return asd_set_link_param_40(a1, a2, a3: v2); } /* ==== j_asd_set_link_param_40_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_link_param_40_3(int a1, _DWORD *a2) { __int16 v2; // r2 return asd_set_link_param_40(a1, a2, a3: v2); } /* ==== j_asd_set_link_param_44 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_link_param_44(int a1, _DWORD *a2, __int16 a3) { return asd_set_link_param_44(a1, a2, a3); } /* ==== j_asd_set_link_param_44_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_link_param_44_2(int a1, _DWORD *a2) { __int16 v2; // r2 return asd_set_link_param_44(a1, a2, a3: v2); } /* ==== j_asd_set_link_param_44_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_link_param_44_3(int a1, _DWORD *a2) { __int16 v2; // r2 return asd_set_link_param_44(a1, a2, a3: v2); } /* ==== j_asd_set_link_param_48 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_link_param_48(int a1, _DWORD *a2) { __int16 v2; // r2 return asd_set_link_param_48(a1, a2, a3: v2); } /* ==== j_asd_set_link_param_48_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_link_param_48_2(int a1, _DWORD *a2) { __int16 v2; // r2 return asd_set_link_param_48(a1, a2, a3: v2); } /* ==== j_asd_set_link_param_48_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_link_param_48_3(int a1, _DWORD *a2) { __int16 v2; // r2 return asd_set_link_param_48(a1, a2, a3: v2); } /* ==== j_asd_set_link_param_4C [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_link_param_4C(int a1, _DWORD *a2) { __int16 v2; // r2 return asd_set_link_param_4C(a1, a2, a3: v2); } /* ==== j_asd_set_link_param_4C_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_link_param_4C_2(int a1, _DWORD *a2) { __int16 v2; // r2 return asd_set_link_param_4C(a1, a2, a3: v2); } /* ==== j_asd_set_link_param_4C_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_link_param_4C_3(int a1, _DWORD *a2) { __int16 v2; // r2 return asd_set_link_param_4C(a1, a2, a3: v2); } /* ==== j_asd_set_reg42570_field [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_reg42570_field(int a1, int a2, int a3) { return asd_set_reg42570_field(a1, a2, a3); } /* ==== j_asd_set_reg42570_field_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_reg42570_field_2(int a1, int a2, int a3) { return asd_set_reg42570_field(a1, a2, a3); } /* ==== j_asd_set_reg42570_field_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_reg42570_field_3(int a1, int a2, int a3) { return asd_set_reg42570_field(a1, a2, a3); } /* ==== j_asd_set_reg425E4_mode [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_reg425E4_mode(int a1, int a2, int a3) { return asd_set_reg425E4_mode(a1, a2, a3); } /* ==== j_asd_set_reg425E4_mode_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_reg425E4_mode_10(int a1, int a2, int a3) { return asd_set_reg425E4_mode(a1, a2, a3); } /* ==== j_asd_set_reg425E4_mode_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_reg425E4_mode_11(int a1, int a2, int a3) { return asd_set_reg425E4_mode(a1, a2, a3); } /* ==== j_asd_set_reg425E4_mode_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_reg425E4_mode_12(int a1, int a2, int a3) { return asd_set_reg425E4_mode(a1, a2, a3); } /* ==== j_asd_set_reg425E4_mode_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_reg425E4_mode_13(int a1, int a2, int a3) { return asd_set_reg425E4_mode(a1, a2, a3); } /* ==== j_asd_set_reg425E4_mode_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_reg425E4_mode_14(int a1, int a2, int a3) { return asd_set_reg425E4_mode(a1, a2, a3); } /* ==== j_asd_set_reg425E4_mode_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_reg425E4_mode_15(int a1, int a2, int a3) { return asd_set_reg425E4_mode(a1, a2, a3); } /* ==== j_asd_set_reg425E4_mode_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_reg425E4_mode_16(int a1, int a2, int a3) { return asd_set_reg425E4_mode(a1, a2, a3); } /* ==== j_asd_set_reg425E4_mode_17 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_reg425E4_mode_17(int a1, int a2, int a3) { return asd_set_reg425E4_mode(a1, a2, a3); } /* ==== j_asd_set_reg425E4_mode_18 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_reg425E4_mode_18(int a1, int a2, int a3) { return asd_set_reg425E4_mode(a1, a2, a3); } /* ==== j_asd_set_reg425E4_mode_19 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_reg425E4_mode_19(int a1, int a2, int a3) { return asd_set_reg425E4_mode(a1, a2, a3); } /* ==== j_asd_set_reg425E4_mode_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_reg425E4_mode_2(int a1, int a2, int a3) { return asd_set_reg425E4_mode(a1, a2, a3); } /* ==== j_asd_set_reg425E4_mode_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_reg425E4_mode_3(int a1, int a2, int a3) { return asd_set_reg425E4_mode(a1, a2, a3); } /* ==== j_asd_set_reg425E4_mode_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_reg425E4_mode_4(int a1, int a2, int a3) { return asd_set_reg425E4_mode(a1, a2, a3); } /* ==== j_asd_set_reg425E4_mode_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_reg425E4_mode_5(int a1, int a2, int a3) { return asd_set_reg425E4_mode(a1, a2, a3); } /* ==== j_asd_set_reg425E4_mode_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_reg425E4_mode_6(int a1, int a2, int a3) { return asd_set_reg425E4_mode(a1, a2, a3); } /* ==== j_asd_set_reg425E4_mode_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_reg425E4_mode_7(int a1, int a2, int a3) { return asd_set_reg425E4_mode(a1, a2, a3); } /* ==== j_asd_set_reg425E4_mode_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_reg425E4_mode_8(int a1, int a2, int a3) { return asd_set_reg425E4_mode(a1, a2, a3); } /* ==== j_asd_set_reg425E4_mode_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_set_reg425E4_mode_9(int a1, int a2, int a3) { return asd_set_reg425E4_mode(a1, a2, a3); } /* ==== j_asd_signal_status_check [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_signal_status_check(int a1, int a2, __int16 a3) { return asd_signal_status_check(a1, a2, a3); } /* ==== j_asd_signal_status_check_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_signal_status_check_10(int a1) { int v1; // r1 __int16 v2; // r2 return asd_signal_status_check(a1, a2: v1, a3: v2); } /* ==== j_asd_signal_status_check_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_signal_status_check_11(int a1) { int v1; // r1 __int16 v2; // r2 return asd_signal_status_check(a1, a2: v1, a3: v2); } /* ==== j_asd_signal_status_check_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_signal_status_check_12(int a1) { int v1; // r1 __int16 v2; // r2 return asd_signal_status_check(a1, a2: v1, a3: v2); } /* ==== j_asd_signal_status_check_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_signal_status_check_13(int a1) { int v1; // r1 __int16 v2; // r2 return asd_signal_status_check(a1, a2: v1, a3: v2); } /* ==== j_asd_signal_status_check_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_signal_status_check_14(int a1) { int v1; // r1 __int16 v2; // r2 return asd_signal_status_check(a1, a2: v1, a3: v2); } /* ==== j_asd_signal_status_check_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_signal_status_check_15(int a1) { int v1; // r1 __int16 v2; // r2 return asd_signal_status_check(a1, a2: v1, a3: v2); } /* ==== j_asd_signal_status_check_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_signal_status_check_16(int a1) { int v1; // r1 __int16 v2; // r2 return asd_signal_status_check(a1, a2: v1, a3: v2); } /* ==== j_asd_signal_status_check_17 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_signal_status_check_17(int a1) { int v1; // r1 __int16 v2; // r2 return asd_signal_status_check(a1, a2: v1, a3: v2); } /* ==== j_asd_signal_status_check_18 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_signal_status_check_18(int a1) { int v1; // r1 __int16 v2; // r2 return asd_signal_status_check(a1, a2: v1, a3: v2); } /* ==== j_asd_signal_status_check_19 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_signal_status_check_19(int a1) { int v1; // r1 __int16 v2; // r2 return asd_signal_status_check(a1, a2: v1, a3: v2); } /* ==== j_asd_signal_status_check_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_signal_status_check_2(int a1) { int v1; // r1 __int16 v2; // r2 return asd_signal_status_check(a1, a2: v1, a3: v2); } /* ==== j_asd_signal_status_check_20 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_signal_status_check_20(int a1) { int v1; // r1 __int16 v2; // r2 return asd_signal_status_check(a1, a2: v1, a3: v2); } /* ==== j_asd_signal_status_check_21 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_signal_status_check_21(int a1) { int v1; // r1 __int16 v2; // r2 return asd_signal_status_check(a1, a2: v1, a3: v2); } /* ==== j_asd_signal_status_check_22 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_signal_status_check_22(int a1) { int v1; // r1 __int16 v2; // r2 return asd_signal_status_check(a1, a2: v1, a3: v2); } /* ==== j_asd_signal_status_check_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_signal_status_check_3(int a1) { int v1; // r1 __int16 v2; // r2 return asd_signal_status_check(a1, a2: v1, a3: v2); } /* ==== j_asd_signal_status_check_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_signal_status_check_4(int a1) { int v1; // r1 __int16 v2; // r2 return asd_signal_status_check(a1, a2: v1, a3: v2); } /* ==== j_asd_signal_status_check_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_signal_status_check_5(int a1) { int v1; // r1 __int16 v2; // r2 return asd_signal_status_check(a1, a2: v1, a3: v2); } /* ==== j_asd_signal_status_check_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_signal_status_check_6(int a1) { int v1; // r1 __int16 v2; // r2 return asd_signal_status_check(a1, a2: v1, a3: v2); } /* ==== j_asd_signal_status_check_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_signal_status_check_7(int a1) { int v1; // r1 __int16 v2; // r2 return asd_signal_status_check(a1, a2: v1, a3: v2); } /* ==== j_asd_signal_status_check_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_signal_status_check_8(int a1) { int v1; // r1 __int16 v2; // r2 return asd_signal_status_check(a1, a2: v1, a3: v2); } /* ==== j_asd_signal_status_check_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_signal_status_check_9(int a1) { int v1; // r1 __int16 v2; // r2 return asd_signal_status_check(a1, a2: v1, a3: v2); } /* ==== j_asd_state_not_1_cfg0 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_state_not_1_cfg0(_DWORD *a1) { return asd_state_not_1_cfg0(a1); } /* ==== j_asd_state_not_1_cfg0_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_state_not_1_cfg0_10(_DWORD *a1) { return asd_state_not_1_cfg0(a1); } /* ==== j_asd_state_not_1_cfg0_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_state_not_1_cfg0_11(_DWORD *a1) { return asd_state_not_1_cfg0(a1); } /* ==== j_asd_state_not_1_cfg0_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_state_not_1_cfg0_12(_DWORD *a1) { return asd_state_not_1_cfg0(a1); } /* ==== j_asd_state_not_1_cfg0_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_state_not_1_cfg0_2(_DWORD *a1) { return asd_state_not_1_cfg0(a1); } /* ==== j_asd_state_not_1_cfg0_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_state_not_1_cfg0_3(_DWORD *a1) { return asd_state_not_1_cfg0(a1); } /* ==== j_asd_state_not_1_cfg0_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_state_not_1_cfg0_4(_DWORD *a1) { return asd_state_not_1_cfg0(a1); } /* ==== j_asd_state_not_1_cfg0_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_state_not_1_cfg0_5(_DWORD *a1) { return asd_state_not_1_cfg0(a1); } /* ==== j_asd_state_not_1_cfg0_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_state_not_1_cfg0_6(_DWORD *a1) { return asd_state_not_1_cfg0(a1); } /* ==== j_asd_state_not_1_cfg0_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_state_not_1_cfg0_7(_DWORD *a1) { return asd_state_not_1_cfg0(a1); } /* ==== j_asd_state_not_1_cfg0_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_state_not_1_cfg0_8(_DWORD *a1) { return asd_state_not_1_cfg0(a1); } /* ==== j_asd_state_not_1_cfg0_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_state_not_1_cfg0_9(_DWORD *a1) { return asd_state_not_1_cfg0(a1); } /* ==== j_asd_stream_reset [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_stream_reset(int a1) { return asd_stream_reset(a1); } /* ==== j_asd_stream_reset_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_stream_reset_2(int a1) { return asd_stream_reset(a1); } /* ==== j_asd_stream_reset_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_stream_reset_3(int a1) { return asd_stream_reset(a1); } /* ==== j_asd_stream_reset_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_stream_reset_4(int a1) { return asd_stream_reset(a1); } /* ==== j_asd_stream_reset_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_stream_reset_5(int a1) { return asd_stream_reset(a1); } /* ==== j_asd_svc_sub_2794 [tier=EXACT size=4] ==== */ // attributes: thunk BOOL __fastcall j_asd_svc_sub_2794(int a1) { return asd_svc_sub_2794(); } /* ==== j_asd_write_block_paged [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_write_block_paged(int a1, int a2, int a3) { return asd_write_block_paged(a1, a2, a3); } /* ==== j_asd_write_block_paged_0 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_write_block_paged_0(int a1, int a2, int a3) { return asd_write_block_paged(a1, a2, a3); } /* ==== j_asd_write_block_paged_1 [tier=THUNK size=4] ==== */ // attributes: thunk int __fastcall j_asd_write_block_paged_1(int a1, int a2, int a3) { return asd_write_block_paged(a1, a2, a3); } /* ==== j_asd_write_block_paged_10 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_write_block_paged_10(int a1, int a2, int a3) { return asd_write_block_paged(a1, a2, a3); } /* ==== j_asd_write_block_paged_11 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_write_block_paged_11(int a1, int a2, int a3) { return asd_write_block_paged(a1, a2, a3); } /* ==== j_asd_write_block_paged_12 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_write_block_paged_12(int a1, int a2, int a3) { return asd_write_block_paged(a1, a2, a3); } /* ==== j_asd_write_block_paged_13 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_write_block_paged_13(int a1, int a2, int a3) { return asd_write_block_paged(a1, a2, a3); } /* ==== j_asd_write_block_paged_14 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_write_block_paged_14(int a1, int a2, int a3) { return asd_write_block_paged(a1, a2, a3); } /* ==== j_asd_write_block_paged_15 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_write_block_paged_15(int a1, int a2, int a3) { return asd_write_block_paged(a1, a2, a3); } /* ==== j_asd_write_block_paged_16 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_write_block_paged_16(int a1, int a2, int a3) { return asd_write_block_paged(a1, a2, a3); } /* ==== j_asd_write_block_paged_17 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_write_block_paged_17(int a1, int a2, int a3) { return asd_write_block_paged(a1, a2, a3); } /* ==== j_asd_write_block_paged_18 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_write_block_paged_18(int a1, int a2, int a3) { return asd_write_block_paged(a1, a2, a3); } /* ==== j_asd_write_block_paged_19 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_write_block_paged_19(int a1, int a2, int a3) { return asd_write_block_paged(a1, a2, a3); } /* ==== j_asd_write_block_paged_2 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_write_block_paged_2(int a1, int a2, int a3) { return asd_write_block_paged(a1, a2, a3); } /* ==== j_asd_write_block_paged_20 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_write_block_paged_20(int a1, int a2, int a3) { return asd_write_block_paged(a1, a2, a3); } /* ==== j_asd_write_block_paged_3 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_write_block_paged_3(int a1, int a2, int a3) { return asd_write_block_paged(a1, a2, a3); } /* ==== j_asd_write_block_paged_4 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_write_block_paged_4(int a1, int a2, int a3) { return asd_write_block_paged(a1, a2, a3); } /* ==== j_asd_write_block_paged_5 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_write_block_paged_5(int a1, int a2, int a3) { return asd_write_block_paged(a1, a2, a3); } /* ==== j_asd_write_block_paged_6 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_write_block_paged_6(int a1, int a2, int a3) { return asd_write_block_paged(a1, a2, a3); } /* ==== j_asd_write_block_paged_7 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_write_block_paged_7(int a1, int a2, int a3) { return asd_write_block_paged(a1, a2, a3); } /* ==== j_asd_write_block_paged_8 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_write_block_paged_8(int a1, int a2, int a3) { return asd_write_block_paged(a1, a2, a3); } /* ==== j_asd_write_block_paged_9 [tier=EXACT size=4] ==== */ // attributes: thunk int __fastcall j_asd_write_block_paged_9(int a1, int a2, int a3) { return asd_write_block_paged(a1, a2, a3); } /* ==== memcpy_aligned [tier=EXACT size=100] ==== */ // ARM-mode block copy. int *__fastcall memcpy_aligned(int *result, int *a2, unsigned int a3, int a4) { unsigned int i; // r2 int *v5; // r1 int v6; // r3 int v7; // r4 int v8; // r12 int v9; // lr int *v10; // r0 int v11; // r4 int v12; // r12 int v13; // lr int v14; // r4 int v15; // r12 int v16; // lr int v17; // r4 int v18; // t1 bool v19; // cf bool v20; // nf int v21; // r2 __int16 v22; // t1 v19 = a3 >= 0x20; for ( i = a3 - 32; v19; i -= 32 ) { v6 = *a2; v7 = a2[1]; v8 = a2[2]; v9 = a2[3]; v5 = a2 + 4; *result = v6; result[1] = v7; result[2] = v8; result[3] = v9; v10 = result + 4; a4 = *v5; v11 = v5[1]; v12 = v5[2]; v13 = v5[3]; a2 = v5 + 4; *v10 = a4; v10[1] = v11; v10[2] = v12; v10[3] = v13; result = v10 + 4; v19 = i >= 0x20; } if ( __CFSHL__(i, 28) ) { a4 = *a2; v14 = a2[1]; v15 = a2[2]; v16 = a2[3]; a2 += 4; *result = a4; result[1] = v14; result[2] = v15; result[3] = v16; result += 4; } if ( (i & 8) != 0 ) { a4 = *a2; v17 = a2[1]; a2 += 2; *result = a4; result[1] = v17; result += 2; } if ( __CFSHL__(i, 30) ) { v18 = *a2++; LOWORD(a4) = v18; *result++ = v18; } if ( i << 30 != 0 ) { v19 = __CFSHL__(i, 31); v21 = i << 31; v20 = v21 < 0; if ( v19 ) { v22 = *(_WORD *)a2; a2 = (int *)((char *)a2 + 2); LOWORD(a4) = v22; } if ( v21 < 0 ) LOBYTE(v21) = *(_BYTE *)a2; if ( v19 ) { *(_WORD *)result = a4; result = (int *)((char *)result + 2); } if ( v20 ) { *(_BYTE *)result = v21; return (int *)((char *)result + 1); } } return result; } /* ==== start [tier=IDA size=3928] ==== */ int __fastcall start(int a1, int a2, unsigned int a3) { int v3; // r6 char v4; // r7 int v5; // r9 unsigned int v6; // r0 unsigned int *v7; // r1 unsigned int *v8; // r0 unsigned int v9; // r4 unsigned int v10; // r3 int v12; // r3 int v13; // t1 int v14; // t1 int v15; // r3 int v16; // r3 int v17; // t1 int v18; // t1 *(_WORD *)(STACK[0x1A0] + 8 * a3) = 8 * a3; v6 = STACK[0x1E0]; *(_BYTE *)(16 * v3 + 1) = v4; *(_DWORD *)(v3 + 20) = 16 * v3; *(_DWORD *)((v3 << 20 >> 31) + 0x10) = v3; *(_BYTE *)(v3 + 1) = v6; v7 = (unsigned int *)((v3 << 20) + v5); v8 = (_DWORD *)&loc_D00756; if ( ((unsigned int)v7 | 0xD00756) << 30 == 0 ) { while ( a3 >= 4 ) { v9 = *v8++; v10 = *v7++; a3 -= 4; if ( v9 != v10 ) { if ( bswap32(v9) <= bswap32(v10) ) return -1; else return 1; } } } if ( a3 == 0 ) return 0; if ( a3 << 31 == 0 ) goto LABEL_11; ++a3; do { v17 = *(unsigned __int8 *)v8; v8 = (unsigned int *)((char *)v8 + 1); v16 = v17; v18 = *(unsigned __int8 *)v7; v7 = (unsigned int *)((char *)v7 + 1); v15 = v16 - v18; if ( v15 != 0 ) break; a3 -= 2; if ( a3 == 0 ) break; LABEL_11: v13 = *(unsigned __int8 *)v8; v8 = (unsigned int *)((char *)v8 + 1); v12 = v13; v14 = *(unsigned __int8 *)v7; v7 = (unsigned int *)((char *)v7 + 1); v15 = v12 - v14; } while ( v15 == 0 ); return v15; } /* ==== sysdrv_dram_window_describe [tier=EXACT size=54] ==== */ // SVC 0xF2 -> SYS_DRV RPC 0x1095. int __fastcall sysdrv_dram_window_describe() { _DWORD v5[12]; // [sp+8h] [bp+8h] BYREF bzero_core(result: v5, a2: 0x20u); __asm { SVC 0xF2 } return 1; } /* ==== sysdrv_feature_commit [tier=EXACT size=56] ==== */ // SVC 0xF2 -> SYS_DRV RPC 0x1087. int __fastcall sysdrv_feature_commit() { _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF bzero_core(result: v5, a2: 0x20u); __asm { SVC 0xF2 } return 1; } /* ==== sysdrv_feature_mask_get [tier=EXACT size=52] ==== */ // SVC 0xF2 -> SYS_DRV RPC 0x109A (feature_mask_get). int __fastcall sysdrv_feature_mask_get() { _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF bzero_core(result: v5, a2: 0x20u); __asm { SVC 0xF2 } return 1; } /* ==== sysdrv_get_chip_id_pair [tier=EXACT size=44] ==== */ // SVC 0xF2 -> SYS_DRV RPC 0x109B. int __fastcall sysdrv_get_chip_id_pair() { _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF bzero_core(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 1; } /* ==== sysdrv_rpc_1002_a [tier=EXACT size=100] ==== */ // SVC 0xF2 -> SYS_DRV RPC opcode 0x1002. Six-argument form; the frame layout depends on // the mode probe (asd_bzero_core_cfg3). int __fastcall sysdrv_rpc_1002_a(int a1, int a2, unsigned int a3, int a4, int a5, int a6) { _DWORD v14[19]; // [sp+8h] [bp-74h] BYREF bzero_core(result: v14, a2: 0x20u); if ( asd_bzero_core_cfg3() == 1 ) { v14[18] = 0; v14[16] = a5; v14[17] = a6; v14[14] = a3; v14[15] = a4; v14[12] = a1; } else { v14[4] = a6; v14[5] = a5; v14[2] = a4; v14[3] = a5; v14[0] = a1; v14[1] = a3 >> 3; } __asm { SVC 0xF2 } return 1; } /* ==== sysdrv_rpc_1002_b [tier=EXACT size=100] ==== */ // SVC 0xF2 -> SYS_DRV RPC opcode 0x1002, sibling of sysdrv_rpc_1002_a with a different // result path. int __fastcall sysdrv_rpc_1002_b(int a1, int a2, unsigned int a3, int a4, int a5, int a6) { _DWORD v14[19]; // [sp+8h] [bp-74h] BYREF bzero_core(result: v14, a2: 0x20u); if ( asd_bzero_core_cfg3() == 1 ) { v14[18] = 0; v14[16] = a5; v14[17] = a6; v14[14] = a3; v14[15] = a4; v14[12] = a1; } else { v14[4] = a6; v14[5] = a5; v14[2] = a4; v14[3] = a5; v14[0] = a1; v14[1] = a3 >> 3; } __asm { SVC 0xF2 } return 1; } /* ==== sysdrv_rpc_1021 [tier=EXACT size=60] ==== */ // SVC 0xF2 -> SYS_DRV RPC opcode 0x1021. Marshals (verb, arg, out-ptr) into the frame; // the third slot is only populated when the mode probe returns 1. int __fastcall sysdrv_rpc_1021(int a1, int a2, int a3) { int v6; // r0 _DWORD v12[30]; // [sp+8h] [bp-78h] BYREF bzero_core(result: v12, a2: 0x20u); v6 = asd_bzero_core_cfg3(); v12[12] = a1; v12[13] = a2; if ( v6 == 1 ) { v12[14] = a3; } else { v12[0] = a3; v12[1] = 4; } __asm { SVC 0xF2 } return 1; } /* ==== udiv32 [tier=EXACT size=36] ==== */ // Unsigned 32-bit division by restoring shift/subtract (ARM-mode leaf, reached by BLX). unsigned int __fastcall udiv32(unsigned int a1, unsigned int a2) { bool v2; // cf BOOL v3; // r2 bool v4; // cf int v5; // r2 bool v6; // cf bool v7; // cf int v8; // r2 bool v9; // cf int v10; // r2 bool v11; // cf bool v12; // cf unsigned int v14; // r1 int v15; // r2 char v16; // cf bool v17; // cf int v18; // r2 bool v19; // cf int v20; // r2 bool v21; // cf int v22; // r2 bool v23; // cf int v24; // r2 bool v25; // cf int v26; // r2 bool v27; // cf int v28; // off bool v29; // cf unsigned int v30; // r1 int v31; // r2 v31 = 0; if ( a1 >> 2 < a2 ) { LABEL_18: v12 = a1 >> 1 >= a2; if ( a1 >> 1 >= a2 ) a1 -= 2 * a2; return v31 + v12 + v31 + (a1 >= a2) + v31 + v12 + v31; } if ( a1 >> 5 < a2 ) { LABEL_11: v7 = a1 >> 4 >= a2; if ( a1 >> 4 >= a2 ) a1 -= 16 * a2; v8 = v31 + v7 + v31; v9 = a1 >> 3 >= a2; if ( a1 >> 3 >= a2 ) a1 -= 8 * a2; v10 = v8 + v9 + v8; v11 = a1 >> 2 >= a2; if ( a1 >> 2 >= a2 ) a1 -= 4 * a2; v31 = v10 + v11 + v10; goto LABEL_18; } if ( a1 >> 8 < a2 ) { v2 = a1 >> 7 >= a2; if ( a1 >> 7 >= a2 ) a1 -= a2 << 7; v3 = v2; v4 = a1 >> 6 >= a2; if ( a1 >> 6 >= a2 ) a1 -= a2 << 6; v5 = v3 + v4 + v3; v6 = a1 >> 5 >= a2; if ( a1 >> 5 >= a2 ) a1 -= 32 * a2; v31 = v5 + v6 + v5; goto LABEL_11; } v14 = a2 << 6; v15 = -67108864; if ( a1 >> 8 < v14 ) goto LABEL_28; v14 <<= 6; v15 = -1048576; if ( a1 >> 8 < v14 ) goto LABEL_28; v14 <<= 6; v15 = -16384; if ( a1 >> 8 >= v14 ) { v14 <<= 6; v15 = -256; } v16 = v14 == 0; if ( v14 != 0 ) { do { if ( v16 ) v14 >>= 6; LABEL_28: v17 = a1 >> 7 >= v14; if ( a1 >> 7 >= v14 ) a1 -= v14 << 7; v18 = v15 + v17 + v15; v19 = a1 >> 6 >= v14; if ( a1 >> 6 >= v14 ) a1 -= v14 << 6; v20 = v18 + v19 + v18; v21 = a1 >> 5 >= v14; if ( a1 >> 5 >= v14 ) a1 -= 32 * v14; v22 = v20 + v21 + v20; v23 = a1 >> 4 >= v14; if ( a1 >> 4 >= v14 ) a1 -= 16 * v14; v24 = v22 + v23 + v22; v25 = a1 >> 3 >= v14; if ( a1 >> 3 >= v14 ) a1 -= 8 * v14; v26 = v24 + v25 + v24; v27 = a1 >> 2 >= v14; if ( a1 >> 2 >= v14 ) a1 -= 4 * v14; v28 = v27 + v26; v16 = __CFADD__(v27, v26) | __CFADD__(v26, v28); v15 = v26 + v28; } while ( v16 ); v29 = a1 >> 1 >= v14; if ( a1 >> 1 >= v14 ) a1 -= 2 * v14; return v15 + v29 + v15 + (a1 >= v14) + v15 + v29 + v15; } else { v30 = a1 & 0x80000000; if ( (int)a1 > 0 ) return 0x7FFFFFFF; return v30; } }