/* opm 25.0.0.69 (1b85ada0) -- named functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf * functions: 54 total in build, 39 named, 15 anonymous * porting tiers: {"DISPATCH": 7, "EXACT": 10, "FUZZY": 1, "MNEM": 6, "ambiguous": 4, "cmd_protos": 4, "comments": 0, "dispatch_conflict": 0, "none": 26, "protos": 4, "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. */ /* ==== opm_TA_CloseSessionEntryPoint [tier=ENTRY size=2] ==== */ void opm_TA_CloseSessionEntryPoint() { ; } /* ==== opm_TA_CreateEntryPoint [tier=MNEM size=38] ==== */ int opm_TA_CreateEntryPoint() { int *v0; // r4 int i; // r0 int *v2; // r2 v0 = (int *)off_402DC0; opm_lib_zero_fill_words(result: (int *)off_402DC0, a2: 0x1600u); for ( i = 0; i != 1408; i += 22 ) { v2 = &v0[i]; v2[13] = -1; } return 0; } /* ==== opm_TA_DestroyEntryPoint [tier=ENTRY size=2] ==== */ void opm_TA_DestroyEntryPoint() { ; } /* ==== opm_TA_InvokeCommandEntryPoint [tier=ENTRY size=254] ==== */ int __fastcall opm_TA_InvokeCommandEntryPoint(int a1, int a2, char a3, struct opm_req **a4) { void (__cdecl *v5)(); // r4 struct opm_req *v7; // r5 int *v8; // r1 void (__cdecl *v9)(); // r4 unsigned int v10; // r0 struct ta_params *v11; // r1 int v12; // r2 int v13; // r3 unsigned int v14; // r0 struct opm_req *v15; // r0 int v16; // r1 void (__cdecl *v17)(); // r6 if ( (a3 & 0xF) == 7 && a4 != nullptr ) { if ( (unsigned int)a4[1] <= 0x3D53 ) { v5 = (void (__cdecl *)())off_402EC8; off_402EC8(a1: 7, a2: 61440); v5(); v5(); return dword_402ED0 + 10; } v7 = *a4; if ( *a4 != nullptr ) { if ( v7->cmd_id == 11 ) { v8 = off_402ECC; v7->unk04 = 0; *v8 = v7->field10; } else { v10 = opm_sysdrv_rpc_304(); if ( v10 != 0 ) { LABEL_10: v7->unk04 = v10; } else { switch ( v7->cmd_id ) { case 1u: v14 = opm_cmd01(a1: v7); break; case 2u: v14 = opm_cmd02(a1: (int)v7); break; case 3u: v14 = opm_cmd03(ctx: v7, params: v11); break; case 4u: v14 = opm_cmd04(ctx: v7, params: v11); break; case 5u: v14 = opm_cmd05(ctx: v7, params: v11); break; case 6u: v15 = v7; v16 = 0; goto LABEL_20; case 7u: v15 = v7; v16 = 1; LABEL_20: v14 = opm_cmd07(a1: (int *)v15, a2: v16, a3: v12, a4: v13); break; case 8u: v14 = ((int (__fastcall *)(struct opm_req *))loc_40132C)(a1: v7); break; case 9u: v14 = opm_cmd09(ctx: v7, params: v11); break; default: v10 = 258; goto LABEL_10; } v7->unk04 = v14; if ( v14 == 0 ) goto LABEL_25; } v17 = (void (__cdecl *)())off_402EC8; off_402EC8(a1: 7, a2: 61440); v17(); v17(); v17(); } LABEL_25: v7->cmd_id = a2 | 0x80000000; return 0; } } v9 = (void (__cdecl *)())off_402EC8; off_402EC8(a1: 7, a2: 61440); v9(); v9(); return dword_402ED0; } /* ==== opm_TA_OpenSessionEntryPoint [tier=EXACT size=4] ==== */ int opm_TA_OpenSessionEntryPoint() { return 0; } /* ==== opm_asd301_path__h1 [tier=EXACT size=26] ==== */ void __fastcall opm_asd301_path__h1(int a1, int a2) { int v2; // r0 opm_asd301_path__h1: while ( a2 != 0 ) { v2 = 0; while ( v2 != -16 ) { --v2; if ( a2 + v2 == 0 ) { a2 = 0; goto opm_asd301_path__h1; } } a2 -= 16; } } /* ==== opm_cmd01 [tier=DISPATCH size=166] ==== */ int __fastcall opm_cmd01(_DWORD *a1) { unsigned int v1; // r1 int v2; // r2 int *v3; // r3 int i; // r1 void (__cdecl *v5)(); // r5 int v6; // r4 int *v8; // r2 int v9; // r3 v1 = a1[7]; if ( v1 >= 2 ) { v5 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); v5(); v6 = 529; LABEL_11: v5(); return v6; } if ( v1 == 0 && a1[6] != 0 ) { v5 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); v5(); v6 = 268; goto LABEL_11; } v2 = 0; v3 = (int *)off_401934; for ( i = 0; ; ++i ) { if ( v2 == 1408 ) { v5 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); v5(); v6 = 528; goto LABEL_11; } if ( (*off_401934)[v2] == 0 ) break; v2 += 22; } (*off_401934)[v2] = 1; v8 = &v3[v2]; v6 = 0; v8[1] = a1[7] != 0; v8[13] = a1[5]; v8[12] = a1[4]; v9 = a1[6]; v8[18] = 0; v8[14] = v9; a1[2311] = i; return v6; } /* ==== opm_cmd02 [tier=DISPATCH size=58] ==== */ int __fastcall opm_cmd02(int a1) { int v1; // r4 void (__cdecl *v2)(); // r5 if ( *(_DWORD *)(a1 + 16) > 1u ) { v1 = 561; goto LABEL_5; } v1 = sub_401A54(); if ( v1 != 0 ) { LABEL_5: v2 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); v2(); v2(); return v1; } return 0; } /* ==== opm_cmd03 [tier=DISPATCH size=66] ==== */ int __fastcall opm_cmd03(void *ctx, struct ta_params *params) { int v2; // r4 void (__cdecl *v3)(); // r5 if ( *((_DWORD *)ctx + 5) > 1u ) { v2 = 561; goto LABEL_5; } v2 = sub_4019C0(); if ( v2 != 0 ) { LABEL_5: v3 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); v3(); v3(); return v2; } return 0; } /* ==== opm_cmd04 [tier=DISPATCH size=120] ==== */ int __fastcall opm_cmd04(void *ctx, struct ta_params *params) { unsigned int v3; // r0 void (__cdecl *v4)(); // r5 int v5; // r4 int *v6; // r6 _DWORD *v7; // r0 int v8; // r2 int v9; // r3 int v10; // r4 v3 = *((_DWORD *)ctx + 4); if ( v3 >= 0x40 ) { v4 = (void (__cdecl *)())off_4025C4; off_4025C4(a1: 7, a2: 61440); v4(); v5 = 259; LABEL_6: v4(); return v5; } if ( (*off_402590)[22 * v3] != 1 ) { v4 = (void (__cdecl *)())off_4025C4; off_4025C4(a1: 7, a2: 61440); v4(); v5 = 266; goto LABEL_6; } v6 = &(*off_402590)[22 * v3]; opm_sysdrv_rpc_35(); v7 = (char *)ctx + 9244; v8 = v6[3]; v9 = v6[4]; v10 = v6[5]; *v7 = v6[2]; v7[1] = v8; v7[2] = v9; v7[3] = v10; v5 = 0; *v6 = 2; return v5; } /* ==== opm_cmd05 [tier=DISPATCH size=274] ==== */ int __fastcall opm_cmd05(void *ctx, struct ta_params *params) { int *v2; // r8 int *v3; // r9 unsigned int v5; // r7 void (__cdecl *v6)(); // r5 int v7; // r4 int *v8; // r6 int v9; // r0 int v11; // r3 int v12; // r6 int v13; // r7 int v14; // [sp+4h] [bp-138h] BYREF _QWORD v15[38]; // [sp+8h] [bp-134h] BYREF int v16; // [sp+138h] [bp-4h] v3 = off_402D88; v16 = *off_402D88; v5 = *((_DWORD *)ctx + 4); if ( v5 < 0x40 ) { v8 = (int *)off_402DC0; if ( (*off_402DC0)[22 * v5] == 2 ) { v2 = &(*off_402DC0)[22 * v5]; opm_lib_zero_fill_words(result: v15, a2: 0x130u); v9 = v2[1]; v14 = 256; if ( ((int (__fastcall *)(int, char *, int, _QWORD *, int *))loc_4029FC)( a1: v9, a2: (char *)ctx + 20, a3: 256, a4: v15, a5: &v14) != 0 ) { v7 = 271; } else { v7 = (int)v15; v6 = (void (__cdecl *)())&v8[22 * v5]; if ( sub_4030BA(a1: (char *)v6 + 8, a2: v15, a3: 16) == 0 ) goto LABEL_14; v7 = 264; } opm_lib_zero_fill_words(result: v15, a2: 0x100u); v6 = (void (__cdecl *)())off_402EC8; off_402EC8(a1: 7, a2: 61440); v6(); } else { v6 = (void (__cdecl *)())off_402EC8; off_402EC8(a1: 7, a2: 61440); v6(); v7 = 266; } } else { v6 = (void (__cdecl *)())off_402EC8; off_402EC8(a1: 7, a2: 61440); v6(); v7 = 259; } v6(); while ( *v3 != v16 ) { ((void (__fastcall *)(int))loc_40316C)(a1: *v3 - v16); LABEL_14: v11 = *(_DWORD *)(v7 + 20); v12 = *(_DWORD *)(v7 + 24); v13 = *(_DWORD *)(v7 + 28); *((_DWORD *)v6 + 6) = *(_DWORD *)(v7 + 16); *((_DWORD *)v6 + 7) = v11; *((_DWORD *)v6 + 8) = v12; *((_DWORD *)v6 + 9) = v13; *off_402D90 = 65; *v2 = 3; *((_QWORD *)v6 + 5) = v15[4]; opm_lib_zero_fill_words(result: (_DWORD *)v7, a2: 0x100u); v7 = 0; } return v7; } /* ==== opm_cmd07 [tier=DISPATCH size=530] ==== */ int __fastcall opm_cmd07(int *a1, int a2, int a3, int a4) { int *v4; // r10 int *v5; // r5 int *v6; // r4 int v7; // r3 int v8; // r0 int v9; // r6 int v10; // r3 int v11; // r0 unsigned int v12; // r7 void (__cdecl *v13)(); // r4 void (__cdecl *v14)(); // r4 int *v16; // [sp+0h] [bp-18h] int v17[4]; // [sp+18h] [bp+0h] BYREF unsigned int v18[4]; // [sp+28h] [bp+10h] BYREF unsigned int v19[1020]; // [sp+38h] [bp+20h] BYREF __int128 v20; // [sp+1028h] [bp+1010h] BYREF __int128 v21; // [sp+1038h] [bp+1020h] BYREF _DWORD v22[2]; // [sp+1048h] [bp+1030h] BYREF _DWORD v23[4]; // [sp+1050h] [bp+1038h] BYREF unsigned int v24[1000]; // [sp+1060h] [bp+1048h] BYREF int v25; // [sp+203Ch] [bp+2024h] v4 = off_402D88; v5 = a1; v25 = *off_402D88; if ( a1 == nullptr ) { v9 = 264; goto LABEL_28; } v6 = a1 + 2315; a1[3335] = 0; if ( a2 != 0 ) { opm_memcpy_aligned(result: v17, a2: a1 + 6, a3: 0x1000u, a4); if ( opm_memcmp_be(a1: v18, a2: (unsigned int *)off_4021DC, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v18, a2: (unsigned int *)off_4021E0, a3: 0x10u) != 0 && opm_memcmp_be(a1: v18, a2: (unsigned int *)off_4021E4, a3: 0x10u) == 0 ) { v8 = 20; } else { v8 = 32; } } else { v8 = 72; } *v6 = v8; v12 = v5[4]; if ( v12 > 0x3F ) { v9 = 259; } else { opm_memcpy_aligned(result: (int *)&v20, a2: v5 + 6, a3: 0x1000u, a4: v7); v9 = sub_4021E8(a1: v5, a2: v12, a3: v22[0], a4: 1); if ( v9 == 0 ) { v9 = sub_401AAC( a1: (unsigned int *)&v21, a2: 16, a3: v12, a4: v23, a5: (_DWORD *)v22[1], a6: v5 + 2316, a7: *v6, a8: v5 + 3335); if ( v9 == 0 ) { *((_OWORD *)v5 + 579) = v20; goto LABEL_25; } } } } else { opm_memcpy_aligned(result: v17, a2: a1 + 6, a3: 0x1010u, a4); if ( opm_memcmp_be(a1: v19, a2: (unsigned int *)off_4021DC, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v19, a2: (unsigned int *)off_4021E0, a3: 0x10u) != 0 && opm_memcmp_be(a1: v19, a2: (unsigned int *)off_4021E4, a3: 0x10u) == 0 ) { v11 = 20; } else { v11 = 32; } } else { v11 = 72; } *v6 = v11; v12 = v5[4]; opm_memcpy_aligned(result: (int *)&v20, a2: v5 + 6, a3: 0x1010u, a4: v10); v9 = sub_4021E8(a1: v5, a2: v12, a3: v23[2], a4: 0); if ( v9 == 0 ) { v9 = sub_4028D8(a1: v12, a2: &v21, a3: 4096, a4: &v20); if ( v9 == 0 ) { v9 = sub_401AAC(a1: v22, a2: 16, a3: v12, a4: v24, a5: (_DWORD *)v23[3], a6: v5 + 2316, a7: *v6, a8: v5 + 3335); if ( v9 == 0 ) { *((_OWORD *)v5 + 579) = v21; LABEL_25: v16 = v5 + 2311; v5 = &(*off_40250C)[22 * v12]; v9 = ((int (__fastcall *)(int *, int, int *, int, int *))loc_4011D8)( a1: v6, a2: 4080, a3: v5 + 6, a4: 16, a5: v16); if ( v9 == 0 ) goto LABEL_33; } } } } v13 = (void (__cdecl *)())off_402510; off_402510(a1: 7, a2: 61440); v13(); v13(); while ( 1 ) { if ( v9 != 0 ) { LABEL_28: v14 = (void (__cdecl *)())off_402510; off_402510(a1: 7, a2: 61440); v14(); v14(); } else { v9 = 0; } if ( *v4 == v25 ) break; ((void (__fastcall *)(int))loc_40316C)(a1: *v4 - v25); LABEL_33: v9 = 0; ++v5[10]; } return v9; } /* ==== opm_cmd09 [tier=DISPATCH size=170] ==== */ int __fastcall opm_cmd09(void *ctx, struct ta_params *params) { unsigned int v2; // r5 void (__cdecl *v3)(); // r5 int v4; // r4 void (__cdecl *v5)(); // r5 int *v6; // r6 int *v7; // r4 int v8; // r0 _DWORD *v9; // r1 int v10; // r2 v2 = *((_DWORD *)ctx + 4); if ( v2 < 0x40 ) { v6 = (int *)off_401934; v7 = &(*off_401934)[22 * v2]; v8 = *v7; if ( *v7 == 3 ) { if ( v7[18] != 1 ) goto LABEL_10; v9 = off_401938; v10 = *(_DWORD *)off_401938; if ( *(_DWORD *)off_401938 == 0 ) { opm_lib_zero_fill_words(result: &(*off_401934)[22 * v2], a2: 0x58u); v4 = 265; v6[22 * v2 + 13] = -1; goto LABEL_3; } v7[18] = 0; *v9 = v10 - 1; if ( v10 != 1 ) goto LABEL_10; opm_sysdrv_rpc_305(); v8 = *v7; } if ( v8 == 0 ) { v4 = 259; goto LABEL_3; } LABEL_10: opm_lib_zero_fill_words(result: v7, a2: 0x58u); v4 = 0; v6[22 * v2 + 13] = -1; return v4; } v3 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); v3(); v4 = 259; v3(); LABEL_3: v5 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); v5(); v5(); return v4; } /* ==== opm_lib_thunk_tailjump [tier=EXACT size=4] ==== */ // positive sp value has been detected, the output may be wrong! void __fastcall opm_lib_thunk_tailjump( struct tee_fmt_state *a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10, int a11, int a12, int a13) { void (__fastcall *v13)(struct tee_fmt_state *, int, int, struct tee_fmt_state *); // r4 unsigned __int16 v14; // r5 _DWORD *v15; // r7 _DWORD *v16; // r10 int *v17; // r0 int v18; // r1 bool v19; // zf int v20; // [sp-8h] [bp-8h] v13(a1, a2, a3, a4: a1); ((void (__fastcall *)(int, _DWORD))v13)(a1: 7, a2: v14); while ( *v15 != v20 ) { ((void (__fastcall *)(int))loc_40316C)(a1: *v15 - v20); v17 = off_4017D8; v18 = off_4017D8[2]; v19 = v18 == 1; if ( v18 == 1 ) v19 = *off_4017D8 == (_DWORD)v13; if ( v19 ) { off_4017D8[2] = 0; v17[3] = 0; *v17 = 65; } ++*v16; } __asm { POPEQ.W {R4-R11,PC} } } /* ==== opm_lib_zero_fill_bytes [tier=EXACT size=68] ==== */ _BYTE *__fastcall opm_lib_zero_fill_bytes(_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(0x40118C); } if ( __CFSHL__(a2, 31) ) { *result = 0; v3 = result + 1; *v3 = 0; result = v3 + 1; } if ( (a2 & 1) != 0 ) *result++ = 0; return result; } /* ==== opm_lib_zero_fill_words [tier=EXACT size=78] ==== */ _DWORD *__fastcall opm_lib_zero_fill_words(_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; } /* ==== opm_memcmp_be [tier=EXACT size=88] ==== */ int __fastcall opm_memcmp_be(unsigned int *a1, unsigned int *a2, unsigned int a3) { unsigned int v3; // r4 unsigned int v4; // r3 int v6; // r3 int v7; // t1 int v8; // t1 int v9; // r3 int v10; // r3 int v11; // t1 int v12; // t1 if ( ((unsigned int)a1 | (unsigned int)a2) << 30 == 0 ) { while ( a3 >= 4 ) { v3 = *a1++; v4 = *a2++; a3 -= 4; if ( v3 != v4 ) { if ( bswap32(v3) <= bswap32(v4) ) return -1; else return 1; } } } if ( a3 == 0 ) return 0; if ( a3 << 31 == 0 ) goto LABEL_11; ++a3; do { v11 = *(unsigned __int8 *)a1; a1 = (unsigned int *)((char *)a1 + 1); v10 = v11; v12 = *(unsigned __int8 *)a2; a2 = (unsigned int *)((char *)a2 + 1); v9 = v10 - v12; if ( v9 != 0 ) break; a3 -= 2; if ( a3 == 0 ) break; LABEL_11: v7 = *(unsigned __int8 *)a1; a1 = (unsigned int *)((char *)a1 + 1); v6 = v7; v8 = *(unsigned __int8 *)a2; a2 = (unsigned int *)((char *)a2 + 1); v9 = v6 - v8; } while ( v9 == 0 ); return v9; } /* ==== opm_memcpy_aligned [tier=EXACT size=100] ==== */ int *__fastcall opm_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; } /* ==== opm_sysdrv_rpc_1 [tier=MNEM size=60] ==== */ int opm_sysdrv_rpc_1() { _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } return 1; } /* ==== opm_sysdrv_rpc_10 [tier=EXACT size=52] ==== */ int opm_sysdrv_rpc_10() { __asm { SVC 0xF2 } return 1; } /* ==== opm_sysdrv_rpc_102 [tier=SVCOP size=34] ==== */ int opm_sysdrv_rpc_102() { _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 2; } /* ==== opm_sysdrv_rpc_105 [tier=SVCOP size=34] ==== */ int opm_sysdrv_rpc_105() { _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 2; } /* ==== opm_sysdrv_rpc_107 [tier=SVCOP size=34] ==== */ int opm_sysdrv_rpc_107() { _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 2; } /* ==== opm_sysdrv_rpc_2 [tier=SVCOP size=36] ==== */ int opm_sysdrv_rpc_2() { _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } return 1; } /* ==== opm_sysdrv_rpc_200 [tier=SVCOP size=32] ==== */ int opm_sysdrv_rpc_200() { _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 2; } /* ==== opm_sysdrv_rpc_201 [tier=SVCOP size=32] ==== */ int opm_sysdrv_rpc_201() { _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 2; } /* ==== opm_sysdrv_rpc_208 [tier=SVCOP size=46] ==== */ int opm_sysdrv_rpc_208() { int v5; // [sp+0h] [bp-1Ch] BYREF opm_lib_zero_fill_words(result: &v5, a2: 0x18u); __asm { SVC 0xF2 } return 2; } /* ==== opm_sysdrv_rpc_3 [tier=SVCOP size=42] ==== */ int opm_sysdrv_rpc_3() { _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } return 1; } /* ==== opm_sysdrv_rpc_30 [tier=MNEM size=50] ==== */ int opm_sysdrv_rpc_30() { _DWORD v5[12]; // [sp+8h] [bp+8h] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } return 1; } /* ==== opm_sysdrv_rpc_301 [tier=SVCOP size=36] ==== */ int opm_sysdrv_rpc_301() { _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 2; } /* ==== opm_sysdrv_rpc_304 [tier=SVCOP size=28] ==== */ int opm_sysdrv_rpc_304() { _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 2; } /* ==== opm_sysdrv_rpc_305 [tier=SVCOP size=32] ==== */ int opm_sysdrv_rpc_305() { _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 2; } /* ==== opm_sysdrv_rpc_31 [tier=MNEM size=38] ==== */ int opm_sysdrv_rpc_31() { _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } return 1; } /* ==== opm_sysdrv_rpc_33 [tier=MNEM size=52] ==== */ int opm_sysdrv_rpc_33() { _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 1; } /* ==== opm_sysdrv_rpc_35 [tier=SVCOP size=42] ==== */ int opm_sysdrv_rpc_35() { _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 1; } /* ==== opm_sysdrv_rpc_9 [tier=EXACT size=64] ==== */ int opm_sysdrv_rpc_9() { __asm { SVC 0xF2 } return 1; } /* ==== opm_sysdrv_rpc_E [tier=MNEM size=46] ==== */ int opm_sysdrv_rpc_E() { _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 1; } /* ==== opm_ta_main_loop [tier=EXACT size=148] ==== */ void __fastcall __noreturn opm_ta_main_loop(int *a1) { int v6; // r1 void (__cdecl *v7)(); // r12 while ( 1 ) { __asm { SVC 0xF0 } v6 = *a1; if ( *a1 == 1 ) { v7 = (void (__cdecl *)())loc_403174; } else { switch ( v6 ) { case 2: v7 = (void (__cdecl *)())loc_403178; break; case 3: v7 = (void (__cdecl *)())loc_40317C; break; case 4: v7 = (void (__cdecl *)())loc_403180; break; case 5: v7 = (void (__cdecl *)())loc_403184; break; default: while ( 1 ) ; } } v7(); __asm { SVC 0xF1 } } } /* ==== start [tier=FUZZY size=1832] ==== */ void __fastcall __noreturn start(int a1, int a2, int a3, int a4, char a5) { int v5; // r6 char v6; // r7 int v7; // r0 int v8; // r4 int v9; // r2 int v10; // r4 char *v11; // r0 int v12; // r6 int v13; // r5 v7 = a1 << 9; *(_WORD *)v7 = v7; v8 = a3 << 24; v9 = 2 * v7; v11 = (char *)(v7 + 212); v10 = v9 + __CFSHL__(v11, 1) + v8; LOBYTE(v11) = 2 * ((2 * (_BYTE)v11) & 0x41); while ( 1 ) { v12 = 16 * v5; v13 = (__int16)v10 >> 15; *(_BYTE *)(v10 + 1) = v6; *(_DWORD *)(v12 + 20) = v10; *(_DWORD *)(v13 + 16) = v12; *(_BYTE *)(v12 + 1) = (_BYTE)v11; v11 = &a5; v5 = v9 >> 23; v9 = v13 + 4; } }