diff options
| author | user <user@clank> | 2026-10-01 20:37:34 +0200 |
|---|---|---|
| committer | user <user@clank> | 2026-10-01 20:37:34 +0200 |
| commit | e8d0e168563a7eb9ed08a1c66b3aba2cff62258a (patch) | |
| tree | ce9bc5785095f03f3d6d4862e5c1790e8f838c74 /fw/decomp | |
| parent | generalise SVC-opcode naming corpus-wide after validating it: 501 stubs, corp... (diff) | |
| download | amd-psp-re-e8d0e168563a7eb9ed08a1c66b3aba2cff62258a.tar.gz amd-psp-re-e8d0e168563a7eb9ed08a1c66b3aba2cff62258a.tar.xz amd-psp-re-e8d0e168563a7eb9ed08a1c66b3aba2cff62258a.zip | |
replace the SVC-opcode heuristic with a structural rule: 940/940 against known names
The previous pass left 102 stubs unnamed because they load more than one in-range constant. The
tempting fix was to take the first immediate, which matches 4 of 4 multi-immediate stubs that carry an
established name -- and that number is worthless, because all four are the same XGMI function in four
builds. It is n=1 dressed up as n=4, and applying it to 102 functions would have been a guess with a
validation figure attached.
The structural rule earns the names instead: track MOV/MOVW/MOVS immediates per register, then return
whichever register is stored to [SP,#0], which is the first word of the frame R1 is pointed at before
the supervisor call. Against the 940 stubs the libdump already names *_rpc_N it matches 940 and
disagrees on 0, with no abstentions, and it resolves all 102 stubs the count heuristic could not.
So the weaker rule is superseded rather than patched, and the audit records both along with why the
4/4 figure was rejected -- that reasoning is the part worth keeping.
Regenerated gcp, hdcp, merit, opm and asd. Corpus 19,405 -> 19,433 meaningful names (67.1%), no
duplicate names in any of the 99 builds, address-derived still 0.
Diffstat (limited to 'fw/decomp')
165 files changed, 7201 insertions, 6735 deletions
diff --git a/fw/decomp/asd.summary.json b/fw/decomp/asd.summary.json index d3c266a..a14ece8 100644 --- a/fw/decomp/asd.summary.json +++ b/fw/decomp/asd.summary.json @@ -29,7 +29,7 @@ "funcs": 1092, "nearest_source": "asd2.elf", "commands": {}, - "named": 229, + "named": 233, "stats": { "EXACT": 144, "MNEM": 75, @@ -53,7 +53,7 @@ "funcs": 1252, "nearest_source": "asd_33.0.0.163_18debcc4.elf", "commands": {}, - "named": 252, + "named": 256, "stats": { "EXACT": 142, "MNEM": 100, @@ -77,7 +77,7 @@ "funcs": 1245, "nearest_source": "asd_33.0.0.173_27402e22.elf", "commands": {}, - "named": 261, + "named": 265, "stats": { "EXACT": 180, "MNEM": 70, @@ -101,7 +101,7 @@ "funcs": 1269, "nearest_source": "asd_33.0.0.181_e0b3c2e0.elf", "commands": {}, - "named": 302, + "named": 306, "stats": { "EXACT": 180, "MNEM": 114, @@ -125,7 +125,7 @@ "funcs": 1419, "nearest_source": "asd_33.0.0.195_904a5e72.elf", "commands": {}, - "named": 430, + "named": 434, "stats": { "EXACT": 228, "MNEM": 179, @@ -149,7 +149,7 @@ "funcs": 1050, "nearest_source": "asd_33.0.0.163_18debcc4.elf", "commands": {}, - "named": 167, + "named": 171, "stats": { "EXACT": 110, "MNEM": 48, @@ -173,7 +173,7 @@ "funcs": 1354, "nearest_source": "asd_33.0.4.153_ddc1f532.elf", "commands": {}, - "named": 354, + "named": 358, "stats": { "EXACT": 195, "MNEM": 149, @@ -197,7 +197,7 @@ "funcs": 1363, "nearest_source": "asd_33.0.4.222_ff8dd593.elf", "commands": {}, - "named": 367, + "named": 371, "stats": { "EXACT": 236, "MNEM": 121, @@ -221,7 +221,7 @@ "funcs": 1419, "nearest_source": "asd_33.0.8.222_bbc214c9.elf", "commands": {}, - "named": 430, + "named": 434, "stats": { "EXACT": 272, "MNEM": 135, @@ -245,7 +245,7 @@ "funcs": 1419, "nearest_source": "asd_33.0.8.235_64e420e4.elf", "commands": {}, - "named": 430, + "named": 434, "stats": { "EXACT": 407, "MNEM": 0, @@ -269,7 +269,7 @@ "funcs": 1419, "nearest_source": "asd_33.0.8.235_64e420e4.elf", "commands": {}, - "named": 432, + "named": 436, "stats": { "EXACT": 273, "MNEM": 135, @@ -293,7 +293,7 @@ "funcs": 1262, "nearest_source": "asd_33.0.8.222_bbc214c9.elf", "commands": {}, - "named": 301, + "named": 305, "stats": { "EXACT": 192, "MNEM": 101, @@ -317,7 +317,7 @@ "funcs": 1360, "nearest_source": "asd_33.0.8.222_bbc214c9.elf", "commands": {}, - "named": 382, + "named": 386, "stats": { "EXACT": 237, "MNEM": 136, @@ -341,7 +341,7 @@ "funcs": 1338, "nearest_source": "asd_33.0.12.227_43f99d51.elf", "commands": {}, - "named": 342, + "named": 346, "stats": { "EXACT": 209, "MNEM": 125, @@ -365,7 +365,7 @@ "funcs": 1038, "nearest_source": "asd_33.0.16.209_e129d135.elf", "commands": {}, - "named": 155, + "named": 159, "stats": { "EXACT": 108, "MNEM": 37, @@ -389,7 +389,7 @@ "funcs": 1338, "nearest_source": "asd_33.0.16.209_e129d135.elf", "commands": {}, - "named": 334, + "named": 338, "stats": { "EXACT": 249, "MNEM": 77, @@ -413,7 +413,7 @@ "funcs": 1344, "nearest_source": "asd_33.0.24.209_356275c8.elf", "commands": {}, - "named": 341, + "named": 345, "stats": { "EXACT": 333, "MNEM": 0, diff --git a/fw/decomp/asd_33.0.0.163_18debcc4.anon.c b/fw/decomp/asd_33.0.0.163_18debcc4.anon.c index 19c5e1f..b09fc02 100644 --- a/fw/decomp/asd_33.0.0.163_18debcc4.anon.c +++ b/fw/decomp/asd_33.0.0.163_18debcc4.anon.c @@ -1,7 +1,7 @@ /* asd 33.0.0.163 (18debcc4) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1092 total in build, 499 named, 593 anonymous + * functions: 1092 total in build, 503 named, 589 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 144, "FUZZY": 5, "MNEM": 75, "ambiguous": 677, "cmd_protos": 0, "comments": 157, "dispatch_conflict": 0, "none": 191, "protos": 222, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -3136,6 +3136,24 @@ int sub_D0C5F4() } /* ==== ANON size=36 ==== */ +int sub_D0D764() +{ + int *v0; // r4 + int result; // r0 + + v0 = off_D0D788; + asd_rpc_35(); + result = sub_D0EA80(a1: v0); + *v0 = 0; + v0[1] = 0; + v0[2] = 0; + v0[3] = 0; + if ( result != 0 ) + return 27; + return result; +} + +/* ==== ANON size=36 ==== */ int sub_D0C4F8() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF @@ -3315,24 +3333,6 @@ LABEL_28: } /* ==== ANON size=36 ==== */ -int sub_D0D764() -{ - int *v0; // r4 - int result; // r0 - - v0 = off_D0D788; - sub_D01CE2(); - result = sub_D0EA80(a1: v0); - *v0 = 0; - v0[1] = 0; - v0[2] = 0; - v0[3] = 0; - if ( result != 0 ) - return 27; - return result; -} - -/* ==== ANON size=36 ==== */ int sub_D0C54C() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF @@ -3494,26 +3494,6 @@ int __fastcall sub_D083D8(int a1) return result; } -/* ==== ANON size=42 ==== */ -int sub_D01D40() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - bzero_core(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=42 ==== */ -int sub_D01CE2() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=44 ==== */ int __fastcall sub_D0B494(int a1, unsigned int a2) { @@ -3547,16 +3527,6 @@ int __fastcall sub_D10AE0(int a1, int a2) } /* ==== ANON size=46 ==== */ -int sub_D01C6A() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ BOOL __fastcall sub_D0F118(unsigned int a1) { int v2; // r4 @@ -3570,16 +3540,6 @@ BOOL __fastcall sub_D0F118(unsigned int a1) } /* ==== ANON size=46 ==== */ -int sub_D01C0A() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ BOOL __fastcall sub_D0F0A0(unsigned int a1) { int v2; // r4 @@ -4744,33 +4704,6 @@ int __fastcall sub_D0FDF8(_WORD *a1) } /* ==== ANON size=60 ==== */ -int __fastcall sub_D024E8(int a1, int a2, int a3, int a4) -{ - int v4; // r4 - int v6; // [sp+0h] [bp-8h] BYREF - int v7; // [sp+4h] [bp-4h] BYREF - - v6 = a3; - v7 = a4; - HIBYTE(v7) = 1; - v4 = sub_D0DE7C(a1: &v6, a2: (_BYTE *)&v7 + 3); - if ( (asd_state_not_1() | v4) == 0 ) - { - if ( HIBYTE(v7) != 0 ) - { - v4 = sub_D0EB84(); - if ( v4 == 0 ) - return sub_D0EBFC(); - } - else - { - return 0; - } - } - return v4; -} - -/* ==== ANON size=60 ==== */ int sub_D0E838() { int *v0; // r5 @@ -4785,7 +4718,7 @@ int sub_D0E838() v0 = off_D0EBF8; off_D0EBF8[4] |= 8u; v1 = (_DWORD *)((char *)off_D0EB80 + 16); - sub_D01CE2(); + asd_rpc_35(); v2 = v0 + 5; v3 = v1[1]; v4 = v1[2]; @@ -4800,6 +4733,33 @@ int sub_D0E838() return sub_D0DDDC(a1: 0, a2: v6, a3: v7); } +/* ==== ANON size=60 ==== */ +int __fastcall sub_D024E8(int a1, int a2, int a3, int a4) +{ + int v4; // r4 + int v6; // [sp+0h] [bp-8h] BYREF + int v7; // [sp+4h] [bp-4h] BYREF + + v6 = a3; + v7 = a4; + HIBYTE(v7) = 1; + v4 = sub_D0DE7C(a1: &v6, a2: (_BYTE *)&v7 + 3); + if ( (asd_state_not_1() | v4) == 0 ) + { + if ( HIBYTE(v7) != 0 ) + { + v4 = sub_D0EB84(); + if ( v4 == 0 ) + return sub_D0EBFC(); + } + else + { + return 0; + } + } + return v4; +} + /* ==== ANON size=62 ==== */ int __fastcall sub_D0B2E0(int a1) { @@ -5289,33 +5249,6 @@ int __fastcall sub_D0DC34(unsigned int a1, unsigned int a2) } /* ==== ANON size=76 ==== */ -int __fastcall sub_D0DC8C(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 ) - { - off_D0DCD8[5 * a1 + 4] &= ~a2; - return 0; - } - } - return result; -} - -/* ==== ANON size=76 ==== */ -int __fastcall sub_D0D60C(int a1, unsigned int a2) -{ - if ( *((_DWORD *)off_D0D658 + 7) > a2 ) - __asm { SVC 0x7B ; '{' } - return 0; -} - -/* ==== ANON size=76 ==== */ int sub_D0D714() { _DWORD *v0; // r7 @@ -5331,7 +5264,7 @@ int sub_D0D714() v3 = (_DWORD *)((char *)off_D0D760 + 16); while ( v2 != 8 ) { - sub_D01CE2(); + asd_rpc_35(); if ( sub_D0BC80(a1: v2, a2: v3) != 0 ) v1 = 27; ++v2; @@ -5351,6 +5284,33 @@ int sub_D0D714() } /* ==== ANON size=76 ==== */ +int __fastcall sub_D0DC8C(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 ) + { + off_D0DCD8[5 * a1 + 4] &= ~a2; + return 0; + } + } + return result; +} + +/* ==== ANON size=76 ==== */ +int __fastcall sub_D0D60C(int a1, unsigned int a2) +{ + if ( *((_DWORD *)off_D0D658 + 7) > a2 ) + __asm { SVC 0x7B ; '{' } + return 0; +} + +/* ==== ANON size=76 ==== */ int __fastcall sub_D11144(unsigned int a1) { int v1; // r4 @@ -7599,9 +7559,9 @@ int __fastcall sub_D0EF60(unsigned int *a1) v3 = 1; if ( gp_operation_allocate() == 0 ) { - if ( sub_D01D40() != 0 ) + if ( asd_rpc_3() != 0 ) return 1; - sub_D01C0A(); + asd_rpc_5(); return gp_cipher_update() != 0 || asd_svc_sub_273E(a1: (int)(a1 + 8), a2: v5) != a1[2]; } } @@ -10767,7 +10727,7 @@ LABEL_3: if ( v3 > 1 ) return 0; v25 = v3; - sub_D01CE2(); + asd_rpc_35(); for ( i = 0; i <= 1; ++i ) { switch ( v2 ) @@ -10794,7 +10754,7 @@ LABEL_3: v5(a1: v8, a2: *v7, a3: v1, a4: 0); v5(a1: v8, a2: *v7, a3: v1, a4: 0); } - sub_D01CE2(); + asd_rpc_35(); for ( j = 0; j <= 1; ++j ) { switch ( v2 ) @@ -10821,7 +10781,7 @@ LABEL_3: v5(a1: v11, a2: *v10, a3: v1, a4: 0); v5(a1: v11, a2: *v10, a3: v1, a4: 0); } - sub_D01CE2(); + asd_rpc_35(); for ( k = 0; k <= 1; ++k ) { switch ( v2 ) @@ -10848,7 +10808,7 @@ LABEL_3: v5(a1: v14, a2: *v13, a3: v1, a4: 0); v5(a1: v14, a2: *v13, a3: v1, a4: 0); } - sub_D01CE2(); + asd_rpc_35(); for ( m = 0; m <= 1; ++m ) { switch ( v2 ) @@ -10875,7 +10835,7 @@ LABEL_3: v5(a1: v17, a2: *v16, a3: v1, a4: 0); v5(a1: v17, a2: *v16, a3: v1, a4: 0); } - sub_D01CE2(); + asd_rpc_35(); for ( n = 0; n <= 1; ++n ) { switch ( v2 ) @@ -10902,7 +10862,7 @@ LABEL_3: v5(a1: v20, a2: *v19, a3: v1, a4: 0); v5(a1: v20, a2: *v19, a3: v1, a4: 0); } - sub_D01CE2(); + asd_rpc_35(); for ( ii = 0; ; ++ii ) { if ( ii > 1 ) diff --git a/fw/decomp/asd_33.0.0.163_18debcc4.c b/fw/decomp/asd_33.0.0.163_18debcc4.c index b97d165..11cf7dc 100644 --- a/fw/decomp/asd_33.0.0.163_18debcc4.c +++ b/fw/decomp/asd_33.0.0.163_18debcc4.c @@ -1,7 +1,7 @@ /* asd 33.0.0.163 (18debcc4) -- named functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1092 total in build, 499 named, 593 anonymous + * functions: 1092 total in build, 503 named, 589 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 144, "FUZZY": 5, "MNEM": 75, "ambiguous": 677, "cmd_protos": 0, "comments": 157, "dispatch_conflict": 0, "none": 191, "protos": 222, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -5537,6 +5537,46 @@ int asd_rpc_1043() return 1; } +/* ==== asd_rpc_3 [tier=SVCOP size=42] ==== */ +int asd_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + bzero_core(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_35 [tier=SVCOP size=42] ==== */ +int asd_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_5 [tier=SVCOP size=46] ==== */ +int asd_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_C [tier=SVCOP size=46] ==== */ +int asd_rpc_C() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== asd_scan_pipe_regs [tier=MNEM 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. @@ -6573,11 +6613,11 @@ unsigned int __fastcall asd_svc_op_202(unsigned int a1, unsigned int a2, unsigne v12 = 16; v11 = (char *)off_D0E104 + 16; v10 = -1073741824; - sub_D01CE2(); + asd_rpc_35(); if ( v7 == 0 ) goto LABEL_10; LABEL_13: - sub_D01C0A(); + asd_rpc_5(); LABEL_14: for ( i = 1; ; i = 0 ) { @@ -6590,9 +6630,9 @@ LABEL_7: break; ((void (__fastcall *)(int))loc_D11610)(a1: *v4 - v16); LABEL_10: - if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || sub_D01D40() != 0 ) + if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || asd_rpc_3() != 0 ) goto LABEL_13; - sub_D01C0A(); + asd_rpc_5(); if ( gp_cipher_update() != 0 ) goto LABEL_14; sub_D01058( diff --git a/fw/decomp/asd_33.0.0.163_18debcc4.index.json b/fw/decomp/asd_33.0.0.163_18debcc4.index.json index ccb7dd1..d4d1f69 100644 --- a/fw/decomp/asd_33.0.0.163_18debcc4.index.json +++ b/fw/decomp/asd_33.0.0.163_18debcc4.index.json @@ -178,9 +178,9 @@ { "addr": "0xd01c0a", "ida_name": "sub_D01C0A", - "name": null, + "name": "asd_rpc_5", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01c38", @@ -192,9 +192,9 @@ { "addr": "0xd01c6a", "ida_name": "sub_D01C6A", - "name": null, + "name": "asd_rpc_C", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01c98", @@ -213,9 +213,9 @@ { "addr": "0xd01ce2", "ida_name": "sub_D01CE2", - "name": null, + "name": "asd_rpc_35", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01d0c", @@ -227,9 +227,9 @@ { "addr": "0xd01d40", "ida_name": "sub_D01D40", - "name": null, + "name": "asd_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01d6c", diff --git a/fw/decomp/asd_33.0.0.173_27402e22.anon.c b/fw/decomp/asd_33.0.0.173_27402e22.anon.c index 7643e8d..5361bd6 100644 --- a/fw/decomp/asd_33.0.0.173_27402e22.anon.c +++ b/fw/decomp/asd_33.0.0.173_27402e22.anon.c @@ -1,7 +1,7 @@ /* asd 33.0.0.173 (27402e22) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1252 total in build, 660 named, 592 anonymous + * functions: 1252 total in build, 663 named, 589 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 142, "FUZZY": 5, "MNEM": 100, "ambiguous": 808, "cmd_protos": 0, "comments": 187, "dispatch_conflict": 0, "none": 197, "protos": 245, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -3323,6 +3323,24 @@ int sub_D0E68A() } /* ==== ANON size=36 ==== */ +int sub_D0FAEC() +{ + int *v0; // r4 + int result; // r0 + + v0 = off_D0FB10; + asd_rpc_35(); + result = sub_D10FAC(a1: v0); + *v0 = 0; + v0[1] = 0; + v0[2] = 0; + v0[3] = 0; + if ( result != 0 ) + return 27; + return result; +} + +/* ==== ANON size=36 ==== */ int sub_D0E708() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF @@ -3349,24 +3367,6 @@ int sub_D0E6DE() } /* ==== ANON size=36 ==== */ -int sub_D0FAEC() -{ - int *v0; // r4 - int result; // r0 - - v0 = off_D0FB10; - gp_crypto_op_0x35(); - result = sub_D10FAC(a1: v0); - *v0 = 0; - v0[1] = 0; - v0[2] = 0; - v0[3] = 0; - if ( result != 0 ) - return 27; - return result; -} - -/* ==== ANON size=36 ==== */ BOOL __fastcall sub_D13A2C(unsigned int a1) { return *((_DWORD *)off_D13E08 + 1) > a1 && (sub_D0FA24() & 3) == 0; @@ -3431,16 +3431,6 @@ int __fastcall sub_D09F8C(int a1) } /* ==== ANON size=42 ==== */ -int sub_D01D88() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - bzero_core(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=42 ==== */ BOOL __fastcall sub_D11040(unsigned int a1) { int (__fastcall **v1)(unsigned int); // r5 @@ -3527,16 +3517,6 @@ BOOL sub_D0E114() } /* ==== ANON size=46 ==== */ -int sub_D01CB2() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ BOOL sub_D0E144() { int v5; // [sp+0h] [bp-4h] @@ -3546,16 +3526,6 @@ BOOL sub_D0E144() } /* ==== ANON size=46 ==== */ -int sub_D01C52() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ BOOL __fastcall sub_D11684(unsigned int a1) { int v2; // r4 @@ -3645,7 +3615,7 @@ int sub_D10D34() v0 = (unsigned __int8 *)(off_D110FC + 11); off_D110FC[10] |= 8u; - gp_crypto_op_0x35(); + asd_rpc_35(); if ( sub_D0DCA0(a1: 0, a2: v0, a3: 0x10u, a4: (int **)off_D11100) != 0 ) return 27; else @@ -5059,7 +5029,7 @@ int sub_D0FAA0() v3 = off_D0FB10 + 10; while ( v2 != 4 ) { - gp_crypto_op_0x35(); + asd_rpc_35(); v4 = sub_D0DCA0(a1: v2, a2: (unsigned __int8 *)v3 + 4, a3: 0x10u, a4: v1); bzero_core(result: v3, a2: 0x14u); if ( v4 != 0 ) @@ -7554,9 +7524,9 @@ int __fastcall sub_D114BC(unsigned int *a1) v3 = 1; if ( gp_operation_allocate() == 0 ) { - if ( sub_D01D88() != 0 ) + if ( asd_rpc_3() != 0 ) return 1; - sub_D01C52(); + asd_rpc_5(); return gp_cipher_update() != 0 || asd_svc_sub_273E(a1: (int)(a1 + 8), a2: v5) != a1[2]; } } diff --git a/fw/decomp/asd_33.0.0.173_27402e22.c b/fw/decomp/asd_33.0.0.173_27402e22.c index f232f39..b26e345 100644 --- a/fw/decomp/asd_33.0.0.173_27402e22.c +++ b/fw/decomp/asd_33.0.0.173_27402e22.c @@ -1,7 +1,7 @@ /* asd 33.0.0.173 (27402e22) -- named functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1252 total in build, 660 named, 592 anonymous + * functions: 1252 total in build, 663 named, 589 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 142, "FUZZY": 5, "MNEM": 100, "ambiguous": 808, "cmd_protos": 0, "comments": 187, "dispatch_conflict": 0, "none": 197, "protos": 245, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -7083,6 +7083,46 @@ int asd_rpc_1043() return 1; } +/* ==== asd_rpc_3 [tier=SVCOP size=42] ==== */ +int asd_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + bzero_core(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_35 [tier=SVCOP size=42] ==== */ +int asd_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_5 [tier=SVCOP size=46] ==== */ +int asd_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_C [tier=SVCOP size=46] ==== */ +int asd_rpc_C() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== asd_scan_pipe_regs [tier=MNEM 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. @@ -8187,11 +8227,11 @@ unsigned int __fastcall asd_svc_op_202(unsigned int a1, unsigned int a2, unsigne v12 = 16; v11 = off_D10178 + 11; v10 = -1073741824; - gp_crypto_op_0x35(); + asd_rpc_35(); if ( v7 == 0 ) goto LABEL_10; LABEL_13: - sub_D01C52(); + asd_rpc_5(); LABEL_14: for ( i = 1; ; i = 0 ) { @@ -8204,9 +8244,9 @@ LABEL_7: break; ((void (__fastcall *)(int))loc_D1424C)(a1: *v4 - v16); LABEL_10: - if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || sub_D01D88() != 0 ) + if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || asd_rpc_3() != 0 ) goto LABEL_13; - sub_D01C52(); + asd_rpc_5(); if ( gp_cipher_update() != 0 ) goto LABEL_14; sub_D01058( @@ -8468,7 +8508,7 @@ int __fastcall asd_write_key_regs(int a1, int a2, int a3) int j; // r7 _DWORD v9[4]; // [sp+4h] [bp-10h] - result = gp_crypto_op_0x35(); + result = asd_rpc_35(); for ( i = 0; i <= 1; ++i ) { for ( j = 0; j != 4; ++j ) @@ -8561,16 +8601,6 @@ int __fastcall gp_cipher_update() return 1; } -/* ==== gp_crypto_op_0x35 [tier=IDA size=42] ==== */ -int 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]. diff --git a/fw/decomp/asd_33.0.0.173_27402e22.index.json b/fw/decomp/asd_33.0.0.173_27402e22.index.json index 88c9801..ecd0e1b 100644 --- a/fw/decomp/asd_33.0.0.173_27402e22.index.json +++ b/fw/decomp/asd_33.0.0.173_27402e22.index.json @@ -171,9 +171,9 @@ { "addr": "0xd01c52", "ida_name": "sub_D01C52", - "name": null, + "name": "asd_rpc_5", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01c80", @@ -185,9 +185,9 @@ { "addr": "0xd01cb2", "ida_name": "sub_D01CB2", - "name": null, + "name": "asd_rpc_C", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01ce0", @@ -206,9 +206,9 @@ { "addr": "0xd01d2a", "ida_name": "sub_D01D2A", - "name": "gp_crypto_op_0x35", + "name": "asd_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01d54", @@ -220,9 +220,9 @@ { "addr": "0xd01d88", "ida_name": "sub_D01D88", - "name": null, + "name": "asd_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01db4", diff --git a/fw/decomp/asd_33.0.0.181_e0b3c2e0.anon.c b/fw/decomp/asd_33.0.0.181_e0b3c2e0.anon.c index 017c112..25fe8bd 100644 --- a/fw/decomp/asd_33.0.0.181_e0b3c2e0.anon.c +++ b/fw/decomp/asd_33.0.0.181_e0b3c2e0.anon.c @@ -1,7 +1,7 @@ /* asd 33.0.0.181 (e0b3c2e0) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1245 total in build, 661 named, 584 anonymous + * functions: 1245 total in build, 664 named, 581 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 180, "FUZZY": 6, "MNEM": 70, "ambiguous": 794, "cmd_protos": 0, "comments": 189, "dispatch_conflict": 0, "none": 195, "protos": 254, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -3022,24 +3022,6 @@ BOOL __fastcall sub_D136DC(unsigned int a1) } /* ==== ANON size=36 ==== */ -int sub_D0F7F8() -{ - int *v0; // r4 - int result; // r0 - - v0 = off_D0F81C; - gp_crypto_op_0x35(); - result = sub_D10C6C(a1: v0); - *v0 = 0; - v0[1] = 0; - v0[2] = 0; - v0[3] = 0; - if ( result != 0 ) - return 27; - return result; -} - -/* ==== ANON size=36 ==== */ int sub_D0E3F4() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF @@ -3296,6 +3278,24 @@ int sub_D0E41E() return sub_D0E6A0(a1: &vars8, a2: var4); } +/* ==== ANON size=36 ==== */ +int sub_D0F7F8() +{ + int *v0; // r4 + int result; // r0 + + v0 = off_D0F81C; + asd_rpc_35(); + result = sub_D10C6C(a1: v0); + *v0 = 0; + v0[1] = 0; + v0[2] = 0; + v0[3] = 0; + if ( result != 0 ) + return 27; + return result; +} + /* ==== ANON size=38 ==== */ int __fastcall sub_D0243C(int a1) { @@ -3389,16 +3389,6 @@ BOOL __fastcall sub_D10D00(unsigned int a1) return result; } -/* ==== ANON size=42 ==== */ -int sub_D01D88() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - bzero_core(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=44 ==== */ int __fastcall sub_D13180(int a1, int a2) { @@ -3489,26 +3479,6 @@ BOOL __fastcall sub_D112BC(unsigned int a1) return (sub_D0F6EA() & v2) != 0; } -/* ==== ANON size=46 ==== */ -int sub_D01CB2() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ -int sub_D01C52() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=48 ==== */ int __fastcall sub_D0250C(int a1, int a2, int a3, int a4) { @@ -3586,7 +3556,7 @@ int sub_D109F4() v0 = (unsigned __int8 *)(off_D10DAC + 11); off_D10DAC[10] |= 8u; - gp_crypto_op_0x35(); + asd_rpc_35(); if ( sub_D0D9BC(a1: 0, a2: v0, a3: 0x10u, a4: (int **)off_D10DB0) != 0 ) return 27; else @@ -4958,6 +4928,32 @@ int __fastcall sub_D1015C(_DWORD *a1, int a2, int a3, unsigned int a4) } /* ==== ANON size=72 ==== */ +int sub_D0F7AC() +{ + int v0; // r4 + int **v1; // r8 + unsigned int v2; // r7 + int *v3; // r5 + int v4; // r6 + + v0 = 0; + v1 = (int **)off_D0F7F4; + v2 = 0; + v3 = off_D0F81C + 10; + while ( v2 != 4 ) + { + asd_rpc_35(); + v4 = sub_D0D9BC(a1: v2, a2: (unsigned __int8 *)v3 + 4, a3: 0x10u, a4: v1); + bzero_core(result: v3, a2: 0x14u); + if ( v4 != 0 ) + v0 = 27; + v3 += 5; + ++v2; + } + return v0; +} + +/* ==== ANON size=72 ==== */ int __fastcall sub_D0C3F8(unsigned int a1) { _DWORD *v2; // r5 @@ -4990,32 +4986,6 @@ int __fastcall sub_D0C3F8(unsigned int a1) return result; } -/* ==== ANON size=72 ==== */ -int sub_D0F7AC() -{ - int v0; // r4 - int **v1; // r8 - unsigned int v2; // r7 - int *v3; // r5 - int v4; // r6 - - v0 = 0; - v1 = (int **)off_D0F7F4; - v2 = 0; - v3 = off_D0F81C + 10; - while ( v2 != 4 ) - { - gp_crypto_op_0x35(); - v4 = sub_D0D9BC(a1: v2, a2: (unsigned __int8 *)v3 + 4, a3: 0x10u, a4: v1); - bzero_core(result: v3, a2: 0x14u); - if ( v4 != 0 ) - v0 = 27; - v3 += 5; - ++v2; - } - return v0; -} - /* ==== ANON size=74 ==== */ int __fastcall sub_D0FE8C(int a1, int a2, int a3) { @@ -7604,9 +7574,9 @@ int __fastcall sub_D1116C(unsigned int *a1) v3 = 1; if ( gp_operation_allocate() == 0 ) { - if ( sub_D01D88() != 0 ) + if ( asd_rpc_3() != 0 ) return 1; - sub_D01C52(); + asd_rpc_5(); return gp_cipher_update() != 0 || asd_svc_sub_273E(a1: (int)(a1 + 8), a2: v5) != a1[2]; } } diff --git a/fw/decomp/asd_33.0.0.181_e0b3c2e0.c b/fw/decomp/asd_33.0.0.181_e0b3c2e0.c index 27ee0bd..ce3c785 100644 --- a/fw/decomp/asd_33.0.0.181_e0b3c2e0.c +++ b/fw/decomp/asd_33.0.0.181_e0b3c2e0.c @@ -1,7 +1,7 @@ /* asd 33.0.0.181 (e0b3c2e0) -- named functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1245 total in build, 661 named, 584 anonymous + * functions: 1245 total in build, 664 named, 581 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 180, "FUZZY": 6, "MNEM": 70, "ambiguous": 794, "cmd_protos": 0, "comments": 189, "dispatch_conflict": 0, "none": 195, "protos": 254, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -7072,6 +7072,46 @@ int asd_rpc_1043() return 1; } +/* ==== asd_rpc_3 [tier=SVCOP size=42] ==== */ +int asd_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + bzero_core(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_35 [tier=SVCOP size=42] ==== */ +int asd_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_5 [tier=SVCOP size=46] ==== */ +int asd_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_C [tier=SVCOP size=46] ==== */ +int asd_rpc_C() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== asd_scan_pipe_regs [tier=MNEM 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. @@ -8165,11 +8205,11 @@ unsigned int __fastcall asd_svc_op_202(unsigned int a1, unsigned int a2, unsigne v12 = 16; v11 = off_D0FE84 + 11; v10 = -1073741824; - gp_crypto_op_0x35(); + asd_rpc_35(); if ( v7 == 0 ) goto LABEL_10; LABEL_13: - sub_D01C52(); + asd_rpc_5(); LABEL_14: for ( i = 1; ; i = 0 ) { @@ -8182,9 +8222,9 @@ LABEL_7: break; ((void (__fastcall *)(int))loc_D1415C)(a1: *v4 - v16); LABEL_10: - if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || sub_D01D88() != 0 ) + if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || asd_rpc_3() != 0 ) goto LABEL_13; - sub_D01C52(); + asd_rpc_5(); if ( gp_cipher_update() != 0 ) goto LABEL_14; sub_D01058( @@ -8446,7 +8486,7 @@ int __fastcall asd_write_key_regs(int a1, int a2, int a3) int j; // r7 _DWORD v9[4]; // [sp+4h] [bp-10h] - result = gp_crypto_op_0x35(); + result = asd_rpc_35(); for ( i = 0; i <= 1; ++i ) { for ( j = 0; j != 4; ++j ) @@ -8539,16 +8579,6 @@ int __fastcall gp_cipher_update() return 1; } -/* ==== gp_crypto_op_0x35 [tier=IDA size=42] ==== */ -int 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]. diff --git a/fw/decomp/asd_33.0.0.181_e0b3c2e0.index.json b/fw/decomp/asd_33.0.0.181_e0b3c2e0.index.json index fdd1df0..db8de09 100644 --- a/fw/decomp/asd_33.0.0.181_e0b3c2e0.index.json +++ b/fw/decomp/asd_33.0.0.181_e0b3c2e0.index.json @@ -171,9 +171,9 @@ { "addr": "0xd01c52", "ida_name": "sub_D01C52", - "name": null, + "name": "asd_rpc_5", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01c80", @@ -185,9 +185,9 @@ { "addr": "0xd01cb2", "ida_name": "sub_D01CB2", - "name": null, + "name": "asd_rpc_C", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01ce0", @@ -206,9 +206,9 @@ { "addr": "0xd01d2a", "ida_name": "sub_D01D2A", - "name": "gp_crypto_op_0x35", + "name": "asd_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01d54", @@ -220,9 +220,9 @@ { "addr": "0xd01d88", "ida_name": "sub_D01D88", - "name": null, + "name": "asd_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01db4", diff --git a/fw/decomp/asd_33.0.0.195_904a5e72.anon.c b/fw/decomp/asd_33.0.0.195_904a5e72.anon.c index 6f73417..58de91c 100644 --- a/fw/decomp/asd_33.0.0.195_904a5e72.anon.c +++ b/fw/decomp/asd_33.0.0.195_904a5e72.anon.c @@ -1,7 +1,7 @@ /* asd 33.0.0.195 (904a5e72) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1269 total in build, 759 named, 510 anonymous + * functions: 1269 total in build, 762 named, 507 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 180, "FUZZY": 3, "MNEM": 114, "ambiguous": 812, "cmd_protos": 0, "comments": 229, "dispatch_conflict": 0, "none": 160, "protos": 293, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -2793,24 +2793,6 @@ LABEL_28: } /* ==== ANON size=36 ==== */ -int sub_D100E8() -{ - _DWORD *v0; // r4 - int result; // r0 - - v0 = off_D1010C; - gp_crypto_op_0x35(); - result = asd_foreach_link_D15650(a1: (int)v0); - *v0 = 0; - v0[1] = 0; - v0[2] = 0; - v0[3] = 0; - if ( result != 0 ) - return 27; - return result; -} - -/* ==== ANON size=36 ==== */ int sub_D0EC0A() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF @@ -2902,6 +2884,24 @@ int sub_D0ECB2() } /* ==== ANON size=36 ==== */ +int sub_D100E8() +{ + _DWORD *v0; // r4 + int result; // r0 + + v0 = off_D1010C; + asd_rpc_35(); + result = asd_foreach_link_D15650(a1: (int)v0); + *v0 = 0; + v0[1] = 0; + v0[2] = 0; + v0[3] = 0; + if ( result != 0 ) + return 27; + return result; +} + +/* ==== ANON size=36 ==== */ int sub_D0EC34() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF @@ -2955,16 +2955,6 @@ int __fastcall sub_D02444(int a1) return result; } -/* ==== ANON size=42 ==== */ -int sub_D01D88() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - bzero_core(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=44 ==== */ int __fastcall sub_D135F4(int a1, int a2) { @@ -3026,16 +3016,6 @@ BOOL __fastcall sub_D11948(unsigned int a1) } /* ==== ANON size=46 ==== */ -int sub_D01CB2() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ int __fastcall sub_D0D1D4(unsigned int a1, int a2) { char *v4; // r0 @@ -3052,16 +3032,6 @@ int __fastcall sub_D0D1D4(unsigned int a1, int a2) } /* ==== ANON size=46 ==== */ -int sub_D01C52() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ int __fastcall sub_D05FB0(unsigned int a1) { _DWORD *v1; // r6 @@ -3125,7 +3095,7 @@ int sub_D11008() v0 = (unsigned __int8 *)off_D113DC + 20; *((_DWORD *)off_D113DC + 4) |= 8u; - gp_crypto_op_0x35(); + asd_rpc_35(); if ( sub_D0DDCC(a1: 0, a2: v0, a3: 0x10u, a4: off_D113E0) != 0 ) return 27; else @@ -4329,7 +4299,7 @@ int sub_D100A0() v3 = (unsigned __int8 *)off_D1010C + 16; while ( v2 != 4 ) { - gp_crypto_op_0x35(); + asd_rpc_35(); v4 = sub_D0DDCC(a1: v2, a2: v3 + 4, a3: 0x10u, a4: v1); bzero_core(result: v3, a2: 0x14u); if ( v4 != 0 ) @@ -6592,9 +6562,9 @@ int __fastcall sub_D11798(unsigned int *a1) v3 = 1; if ( gp_operation_allocate() == 0 ) { - if ( sub_D01D88() != 0 ) + if ( asd_rpc_3() != 0 ) return 1; - sub_D01C52(); + asd_rpc_5(); return gp_cipher_update() != 0 || asd_svc_sub_273E(a1: (int)(a1 + 8), a2: v5) != a1[2]; } } diff --git a/fw/decomp/asd_33.0.0.195_904a5e72.c b/fw/decomp/asd_33.0.0.195_904a5e72.c index 00dd4c6..02f8c2f 100644 --- a/fw/decomp/asd_33.0.0.195_904a5e72.c +++ b/fw/decomp/asd_33.0.0.195_904a5e72.c @@ -1,7 +1,7 @@ /* asd 33.0.0.195 (904a5e72) -- named functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1269 total in build, 759 named, 510 anonymous + * functions: 1269 total in build, 762 named, 507 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 180, "FUZZY": 3, "MNEM": 114, "ambiguous": 812, "cmd_protos": 0, "comments": 229, "dispatch_conflict": 0, "none": 160, "protos": 293, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -9875,6 +9875,46 @@ int asd_rpc_1043() return 1; } +/* ==== asd_rpc_3 [tier=SVCOP size=42] ==== */ +int asd_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + bzero_core(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_35 [tier=SVCOP size=42] ==== */ +int asd_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_5 [tier=SVCOP size=46] ==== */ +int asd_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_C [tier=SVCOP size=46] ==== */ +int asd_rpc_C() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== asd_scan_pipe_regs [tier=MNEM 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. @@ -11031,11 +11071,11 @@ unsigned int __fastcall asd_svc_op_202(unsigned int a1, unsigned int a2, unsigne v12 = 16; v11 = dword_D10808 + 20; v10 = -1073741824; - gp_crypto_op_0x35(); + asd_rpc_35(); if ( v7 == 0 ) goto LABEL_10; LABEL_13: - sub_D01C52(); + asd_rpc_5(); LABEL_14: for ( i = 1; ; i = 0 ) { @@ -11048,9 +11088,9 @@ LABEL_7: break; ((void (__fastcall *)(int))loc_D14A30)(a1: *v4 - v16); LABEL_10: - if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || sub_D01D88() != 0 ) + if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || asd_rpc_3() != 0 ) goto LABEL_13; - sub_D01C52(); + asd_rpc_5(); if ( gp_cipher_update() != 0 ) goto LABEL_14; sub_D01058( @@ -11312,7 +11352,7 @@ int __fastcall asd_write_key_regs(int a1, int a2, int a3) int j; // r7 _DWORD v9[4]; // [sp+4h] [bp-10h] - result = gp_crypto_op_0x35(); + result = asd_rpc_35(); for ( i = 0; i <= 1; ++i ) { for ( j = 0; j != 4; ++j ) @@ -11405,16 +11445,6 @@ int __fastcall gp_cipher_update() return 1; } -/* ==== gp_crypto_op_0x35 [tier=IDA size=42] ==== */ -int 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]. diff --git a/fw/decomp/asd_33.0.0.195_904a5e72.index.json b/fw/decomp/asd_33.0.0.195_904a5e72.index.json index d8bec1f..295ba01 100644 --- a/fw/decomp/asd_33.0.0.195_904a5e72.index.json +++ b/fw/decomp/asd_33.0.0.195_904a5e72.index.json @@ -171,9 +171,9 @@ { "addr": "0xd01c52", "ida_name": "sub_D01C52", - "name": null, + "name": "asd_rpc_5", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01c80", @@ -185,9 +185,9 @@ { "addr": "0xd01cb2", "ida_name": "sub_D01CB2", - "name": null, + "name": "asd_rpc_C", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01ce0", @@ -206,9 +206,9 @@ { "addr": "0xd01d2a", "ida_name": "sub_D01D2A", - "name": "gp_crypto_op_0x35", + "name": "asd_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01d54", @@ -220,9 +220,9 @@ { "addr": "0xd01d88", "ida_name": "sub_D01D88", - "name": null, + "name": "asd_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01db4", diff --git a/fw/decomp/asd_33.0.0.239_0bcc6b23.anon.c b/fw/decomp/asd_33.0.0.239_0bcc6b23.anon.c index f577eb4..f3cd2ad 100644 --- a/fw/decomp/asd_33.0.0.239_0bcc6b23.anon.c +++ b/fw/decomp/asd_33.0.0.239_0bcc6b23.anon.c @@ -1,7 +1,7 @@ /* asd 33.0.0.239 (0bcc6b23) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1419 total in build, 1009 named, 410 anonymous + * functions: 1419 total in build, 1010 named, 409 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 228, "FUZZY": 18, "MNEM": 179, "ambiguous": 908, "cmd_protos": 0, "comments": 327, "dispatch_conflict": 0, "none": 86, "protos": 421, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -2210,24 +2210,6 @@ int sub_D10582() } /* ==== ANON size=36 ==== */ -int sub_D11F04() -{ - int *v0; // r4 - int result; // r0 - - v0 = off_D11F28; - gp_crypto_op_0x35(); - result = asd_foreach_link_D15650(a1: (int)v0); - *v0 = 0; - v0[1] = 0; - v0[2] = 0; - v0[3] = 0; - if ( result != 0 ) - return 27; - return result; -} - -/* ==== ANON size=36 ==== */ int sub_D10432() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF @@ -2267,6 +2249,24 @@ int sub_D105E0() } /* ==== ANON size=36 ==== */ +int sub_D11F04() +{ + int *v0; // r4 + int result; // r0 + + v0 = off_D11F28; + asd_rpc_35(); + result = asd_foreach_link_D15650(a1: (int)v0); + *v0 = 0; + v0[1] = 0; + v0[2] = 0; + v0[3] = 0; + if ( result != 0 ) + return 27; + return result; +} + +/* ==== ANON size=36 ==== */ int sub_D10486() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF @@ -2529,16 +2529,6 @@ BOOL __fastcall sub_D1366C(unsigned int a1) return (sub_D11D74() & v2) != 0; } -/* ==== ANON size=46 ==== */ -int sub_D01D36() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=48 ==== */ int __fastcall sub_D0E770(unsigned int a1, int a2) { @@ -3737,7 +3727,7 @@ int sub_D12DE4() v0 = (unsigned __int8 *)off_D13100; *(_DWORD *)off_D13100 |= 8u; - gp_crypto_op_0x35(); + asd_rpc_35(); if ( asd_svc_sub_110EC(a1: 0, a2: v0 + 4, a3: 0x10u, a4: off_D12F98) != 0 ) return 27; v2 = off_D1314C[8] - 20; @@ -4576,7 +4566,7 @@ int sub_D11E90() v3 = (unsigned __int8 *)(dword_D11F00 + 4); for ( i = 0; i != 4; ++i ) { - gp_crypto_op_0x35(); + asd_rpc_35(); v5 = v1[8] - 20; if ( v5 <= 0xF && ((1 << v5) & 0xFEF5) != 0 ) v6 = asd_link_op_if_supported(a1: i, a2: (int)v3); diff --git a/fw/decomp/asd_33.0.0.239_0bcc6b23.c b/fw/decomp/asd_33.0.0.239_0bcc6b23.c index 7efb0e5..a3c657b 100644 --- a/fw/decomp/asd_33.0.0.239_0bcc6b23.c +++ b/fw/decomp/asd_33.0.0.239_0bcc6b23.c @@ -1,7 +1,7 @@ /* asd 33.0.0.239 (0bcc6b23) -- named functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1419 total in build, 1009 named, 410 anonymous + * functions: 1419 total in build, 1010 named, 409 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 228, "FUZZY": 18, "MNEM": 179, "ambiguous": 908, "cmd_protos": 0, "comments": 327, "dispatch_conflict": 0, "none": 86, "protos": 421, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -13999,6 +13999,46 @@ int asd_rpc_1043() return 1; } +/* ==== asd_rpc_3 [tier=SVCOP size=42] ==== */ +int asd_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + bzero_core(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_35 [tier=SVCOP size=42] ==== */ +int asd_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_5 [tier=SVCOP size=46] ==== */ +int asd_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_C [tier=SVCOP size=46] ==== */ +int asd_rpc_C() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== asd_scan_pipe_regs [tier=MNEM 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. @@ -15301,9 +15341,9 @@ int __fastcall asd_svc_op_201(unsigned int *a1) v3 = 1; if ( gp_operation_allocate() == 0 ) { - if ( gp_set_operation_key() != 0 ) + if ( asd_rpc_3() != 0 ) return 1; - gp_operation_set_key(); + asd_rpc_5(); return gp_cipher_update() != 0 || asd_svc_sub_273E(a1: (int)(a1 + 8), a2: v5) != a1[2]; } } @@ -15331,11 +15371,11 @@ unsigned int __fastcall asd_svc_op_202(unsigned int a1, unsigned int a2, unsigne goto LABEL_7; } v7 = gp_object_allocate(); - gp_crypto_op_0x35(); + asd_rpc_35(); if ( v7 == 0 ) goto LABEL_10; LABEL_13: - gp_operation_set_key(); + asd_rpc_5(); LABEL_14: a3 = 1; LABEL_7: @@ -15343,9 +15383,9 @@ LABEL_7: { ((void (__fastcall *)(int))loc_D16E24)(a1: *v4 - v11); LABEL_10: - if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || gp_set_operation_key() != 0 ) + if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || asd_rpc_3() != 0 ) goto LABEL_13; - gp_operation_set_key(); + asd_rpc_5(); if ( gp_cipher_update() != 0 ) goto LABEL_14; memcpy(result: (_BYTE *)(a3 + 16), a2: v10, a3: 0x10u, a4: v9); @@ -15959,7 +15999,7 @@ int __fastcall asd_write_key_regs(int a1, int a2, int a3) unsigned int i; // r8 int j; // r7 - result = gp_crypto_op_0x35(); + result = asd_rpc_35(); for ( i = 0; i <= 1; ++i ) { for ( j = 0; j != 4; ++j ) @@ -16052,16 +16092,6 @@ int __fastcall gp_cipher_update() return 1; } -/* ==== gp_crypto_op_0x35 [tier=IDA size=42] ==== */ -int 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]. @@ -16119,16 +16149,6 @@ int __fastcall gp_operation_free() return 1; } -/* ==== gp_operation_set_key [tier=IDA size=46] ==== */ -int 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=MNEM 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]. @@ -16141,16 +16161,6 @@ int __fastcall gp_populate_transient_object() return 1; } -/* ==== gp_set_operation_key [tier=IDA size=42] ==== */ -int 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=THUNK size=4] REF-DERIVED-NAME ==== */ // attributes: thunk int __fastcall j_asd_aux_op_D1891C(unsigned int a1, int a2) diff --git a/fw/decomp/asd_33.0.0.239_0bcc6b23.index.json b/fw/decomp/asd_33.0.0.239_0bcc6b23.index.json index 804e304..875fb83 100644 --- a/fw/decomp/asd_33.0.0.239_0bcc6b23.index.json +++ b/fw/decomp/asd_33.0.0.239_0bcc6b23.index.json @@ -171,9 +171,9 @@ { "addr": "0xd01cd6", "ida_name": "sub_D01CD6", - "name": "gp_operation_set_key", + "name": "asd_rpc_5", "size": 46, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01d04", @@ -185,9 +185,9 @@ { "addr": "0xd01d36", "ida_name": "sub_D01D36", - "name": null, + "name": "asd_rpc_C", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01d64", @@ -206,9 +206,9 @@ { "addr": "0xd01dae", "ida_name": "sub_D01DAE", - "name": "gp_crypto_op_0x35", + "name": "asd_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01dd8", @@ -220,9 +220,9 @@ { "addr": "0xd01e0c", "ida_name": "sub_D01E0C", - "name": "gp_set_operation_key", + "name": "asd_rpc_3", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01e38", diff --git a/fw/decomp/asd_33.0.12.227_43f99d51.anon.c b/fw/decomp/asd_33.0.12.227_43f99d51.anon.c index 8ac1b52..a7de0e2 100644 --- a/fw/decomp/asd_33.0.12.227_43f99d51.anon.c +++ b/fw/decomp/asd_33.0.12.227_43f99d51.anon.c @@ -1,7 +1,7 @@ /* asd 33.0.12.227 (43f99d51) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1360 total in build, 942 named, 418 anonymous + * functions: 1360 total in build, 943 named, 417 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 237, "FUZZY": 4, "MNEM": 136, "ambiguous": 869, "cmd_protos": 0, "comments": 291, "dispatch_conflict": 0, "none": 114, "protos": 373, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -2301,6 +2301,24 @@ int sub_D0FCAE() } /* ==== ANON size=36 ==== */ +int sub_D11548() +{ + int *v0; // r4 + int result; // r0 + + v0 = off_D1156C; + asd_rpc_35(); + result = asd_foreach_link_D15650(a1: (int)v0); + *v0 = 0; + v0[1] = 0; + v0[2] = 0; + v0[3] = 0; + if ( result != 0 ) + return 27; + return result; +} + +/* ==== ANON size=36 ==== */ int sub_D0FC84() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF @@ -2336,24 +2354,6 @@ int sub_D0FD02() } /* ==== ANON size=36 ==== */ -int sub_D11548() -{ - int *v0; // r4 - int result; // r0 - - v0 = off_D1156C; - gp_crypto_op_0x35(); - result = asd_foreach_link_D15650(a1: (int)v0); - *v0 = 0; - v0[1] = 0; - v0[2] = 0; - v0[3] = 0; - if ( result != 0 ) - return 27; - return result; -} - -/* ==== ANON size=36 ==== */ int sub_D0FC5A() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF @@ -2432,26 +2432,13 @@ int __fastcall sub_D0249C(int a1) } /* ==== ANON size=46 ==== */ -BOOL __fastcall sub_D12D1C(unsigned int a1) -{ - int v2; // r4 - - if ( a1 > 1 ) - return false; - v2 = 4; - if ( a1 == 0 ) - v2 = 2; - return (sub_D11402() & v2) != 0; -} - -/* ==== ANON size=46 ==== */ int sub_D12450() { unsigned __int8 *v0; // r4 v0 = (unsigned __int8 *)off_D12818; *(_DWORD *)off_D12818 |= 8u; - gp_crypto_op_0x35(); + asd_rpc_35(); if ( sub_D0ECBC(a1: 0, a2: v0 + 4, a3: 0x10u, a4: off_D1281C) != 0 ) return 27; else @@ -2459,7 +2446,7 @@ int sub_D12450() } /* ==== ANON size=46 ==== */ -BOOL __fastcall sub_D12CA4(unsigned int a1) +BOOL __fastcall sub_D12D1C(unsigned int a1) { int v2; // r4 @@ -2468,17 +2455,20 @@ BOOL __fastcall sub_D12CA4(unsigned int a1) v2 = 4; if ( a1 == 0 ) v2 = 2; - return (sub_D113E4() & v2) != 0; + return (sub_D11402() & v2) != 0; } /* ==== ANON size=46 ==== */ -int sub_D01D0A() +BOOL __fastcall sub_D12CA4(unsigned int a1) { - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + int v2; // r4 - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; + if ( a1 > 1 ) + return false; + v2 = 4; + if ( a1 == 0 ) + v2 = 2; + return (sub_D113E4() & v2) != 0; } /* ==== ANON size=48 ==== */ @@ -3666,7 +3656,7 @@ int sub_D11500() v3 = (unsigned __int8 *)(dword_D11544 + 4); while ( v2 != 4 ) { - gp_crypto_op_0x35(); + asd_rpc_35(); v4 = sub_D0ECBC(a1: v2, a2: v3, a3: 0x10u, a4: v1); bzero_core(result: (_DWORD *)v3 - 1, a2: 0x14u); if ( v4 != 0 ) diff --git a/fw/decomp/asd_33.0.12.227_43f99d51.c b/fw/decomp/asd_33.0.12.227_43f99d51.c index 51126cf..b3efcf7 100644 --- a/fw/decomp/asd_33.0.12.227_43f99d51.c +++ b/fw/decomp/asd_33.0.12.227_43f99d51.c @@ -1,7 +1,7 @@ /* asd 33.0.12.227 (43f99d51) -- named functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1360 total in build, 942 named, 418 anonymous + * functions: 1360 total in build, 943 named, 417 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 237, "FUZZY": 4, "MNEM": 136, "ambiguous": 869, "cmd_protos": 0, "comments": 291, "dispatch_conflict": 0, "none": 114, "protos": 373, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -12282,6 +12282,46 @@ int asd_rpc_1043() return 1; } +/* ==== asd_rpc_3 [tier=SVCOP size=42] ==== */ +int asd_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + bzero_core(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_35 [tier=SVCOP size=42] ==== */ +int asd_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_5 [tier=SVCOP size=46] ==== */ +int asd_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_C [tier=SVCOP size=46] ==== */ +int asd_rpc_C() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== asd_scan_pipe_regs [tier=MNEM 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. @@ -13578,9 +13618,9 @@ int __fastcall asd_svc_op_201(unsigned int *a1) v3 = 1; if ( gp_operation_allocate() == 0 ) { - if ( gp_set_operation_key() != 0 ) + if ( asd_rpc_3() != 0 ) return 1; - gp_operation_set_key(); + asd_rpc_5(); return gp_cipher_update() != 0 || asd_svc_sub_273E(a1: (int)(a1 + 8), a2: v5) != a1[2]; } } @@ -13608,11 +13648,11 @@ unsigned int __fastcall asd_svc_op_202(unsigned int a1, unsigned int a2, unsigne goto LABEL_7; } v7 = gp_object_allocate(); - gp_crypto_op_0x35(); + asd_rpc_35(); if ( v7 == 0 ) goto LABEL_10; LABEL_13: - gp_operation_set_key(); + asd_rpc_5(); LABEL_14: a3 = 1; LABEL_7: @@ -13620,9 +13660,9 @@ LABEL_7: { ((void (__fastcall *)(int))loc_D16450)(a1: *v4 - v11); LABEL_10: - if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || gp_set_operation_key() != 0 ) + if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || asd_rpc_3() != 0 ) goto LABEL_13; - gp_operation_set_key(); + asd_rpc_5(); if ( gp_cipher_update() != 0 ) goto LABEL_14; memcpy(result: (_BYTE *)(a3 + 16), a2: v10, a3: 0x10u, a4: v9); @@ -14111,7 +14151,7 @@ int __fastcall asd_write_key_regs(int a1, int a2, int a3) unsigned int i; // r8 int j; // r7 - result = gp_crypto_op_0x35(); + result = asd_rpc_35(); for ( i = 0; i <= 1; ++i ) { for ( j = 0; j != 4; ++j ) @@ -14204,16 +14244,6 @@ int __fastcall gp_cipher_update() return 1; } -/* ==== gp_crypto_op_0x35 [tier=IDA size=42] ==== */ -int 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]. @@ -14271,16 +14301,6 @@ int __fastcall gp_operation_free() return 1; } -/* ==== gp_operation_set_key [tier=IDA size=46] ==== */ -int 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]. @@ -14293,16 +14313,6 @@ int __fastcall gp_populate_transient_object() return 1; } -/* ==== gp_set_operation_key [tier=IDA size=42] ==== */ -int 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=THUNK size=4] REF-DERIVED-NAME ==== */ // attributes: thunk int __fastcall j_asd_aux_op_D1891C(unsigned int a1, int a2) diff --git a/fw/decomp/asd_33.0.12.227_43f99d51.index.json b/fw/decomp/asd_33.0.12.227_43f99d51.index.json index 953fae8..8fd2cd8 100644 --- a/fw/decomp/asd_33.0.12.227_43f99d51.index.json +++ b/fw/decomp/asd_33.0.12.227_43f99d51.index.json @@ -171,9 +171,9 @@ { "addr": "0xd01caa", "ida_name": "sub_D01CAA", - "name": "gp_operation_set_key", + "name": "asd_rpc_5", "size": 46, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01cd8", @@ -185,9 +185,9 @@ { "addr": "0xd01d0a", "ida_name": "sub_D01D0A", - "name": null, + "name": "asd_rpc_C", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01d38", @@ -206,9 +206,9 @@ { "addr": "0xd01d82", "ida_name": "sub_D01D82", - "name": "gp_crypto_op_0x35", + "name": "asd_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01dac", @@ -220,9 +220,9 @@ { "addr": "0xd01de0", "ida_name": "sub_D01DE0", - "name": "gp_set_operation_key", + "name": "asd_rpc_3", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01e0c", diff --git a/fw/decomp/asd_33.0.16.144_aaa06ff8.anon.c b/fw/decomp/asd_33.0.16.144_aaa06ff8.anon.c index 0393e00..6604d68 100644 --- a/fw/decomp/asd_33.0.16.144_aaa06ff8.anon.c +++ b/fw/decomp/asd_33.0.16.144_aaa06ff8.anon.c @@ -1,7 +1,7 @@ /* asd 33.0.16.144 (aaa06ff8) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1038 total in build, 427 named, 611 anonymous + * functions: 1038 total in build, 431 named, 607 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 108, "FUZZY": 5, "MNEM": 37, "ambiguous": 546, "cmd_protos": 0, "comments": 105, "dispatch_conflict": 0, "none": 342, "protos": 148, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -3011,7 +3011,7 @@ int sub_D0D2B8() int result; // r0 v0 = off_D0D2DC; - sub_D01CE2(); + asd_rpc_35(); result = sub_D0E3F4(a1: v0); *v0 = 0; v0[1] = 0; @@ -3225,16 +3225,6 @@ int __fastcall sub_D02E28(unsigned int a1, _DWORD *a2) } /* ==== ANON size=42 ==== */ -int sub_D01D40() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - bzero_core(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=42 ==== */ int __fastcall sub_D11AA0(_DWORD *a1, int a2) { int v2; // r2 @@ -3267,16 +3257,6 @@ int __fastcall sub_D0CFB4(int a1, unsigned int a2) } /* ==== ANON size=42 ==== */ -int sub_D01CE2() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=42 ==== */ int __fastcall sub_D0D0CC(int a1, unsigned int a2, _DWORD *a3) { int result; // r0 @@ -3373,16 +3353,6 @@ int __fastcall sub_D1098C(unsigned int a1) } /* ==== ANON size=46 ==== */ -int sub_D01C6A() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ int __fastcall sub_D11640(int a1, int a2) { int result; // r0 @@ -3598,16 +3568,6 @@ int __fastcall sub_D0C460(_WORD *a1) } /* ==== ANON size=46 ==== */ -int sub_D01C0A() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ int __fastcall sub_D07E04(_WORD *a1) { int *v1; // r2 @@ -4800,36 +4760,6 @@ int __fastcall sub_D0A794(unsigned int a1) } /* ==== ANON size=60 ==== */ -int sub_D0E1AC() -{ - int *v0; // r5 - _DWORD *v1; // r4 - _DWORD *v2; // r0 - int v3; // r3 - int v4; // r5 - int v5; // r6 - int v6; // r1 - int v7; // r2 - - v0 = off_D0E580; - off_D0E580[4] |= 8u; - v1 = (_DWORD *)((char *)off_D0E4EC + 16); - sub_D01CE2(); - v2 = v0 + 5; - v3 = v1[1]; - v4 = v1[2]; - v5 = v1[3]; - *v2 = *v1; - v2[1] = v3; - v2[2] = v4; - v2[3] = v5; - if ( sub_D0B780(a1: 0, a2: v1) != 0 ) - return 27; - else - return sub_D0D8B0(a1: 0, a2: v6, a3: v7); -} - -/* ==== ANON size=60 ==== */ int __fastcall sub_D11B2C(int a1) { int v1; // r3 @@ -4874,6 +4804,36 @@ int __fastcall sub_D024E8(int a1, int a2, int a3, int a4) } /* ==== ANON size=60 ==== */ +int sub_D0E1AC() +{ + int *v0; // r5 + _DWORD *v1; // r4 + _DWORD *v2; // r0 + int v3; // r3 + int v4; // r5 + int v5; // r6 + int v6; // r1 + int v7; // r2 + + v0 = off_D0E580; + off_D0E580[4] |= 8u; + v1 = (_DWORD *)((char *)off_D0E4EC + 16); + asd_rpc_35(); + v2 = v0 + 5; + v3 = v1[1]; + v4 = v1[2]; + v5 = v1[3]; + *v2 = *v1; + v2[1] = v3; + v2[2] = v4; + v2[3] = v5; + if ( sub_D0B780(a1: 0, a2: v1) != 0 ) + return 27; + else + return sub_D0D8B0(a1: 0, a2: v6, a3: v7); +} + +/* ==== ANON size=60 ==== */ int __fastcall sub_D11540(int a1) { int v1; // r3 @@ -5941,7 +5901,7 @@ int sub_D0D268() v3 = (_DWORD *)((char *)off_D0D2B4 + 16); while ( v2 != 8 ) { - sub_D01CE2(); + asd_rpc_35(); if ( sub_D0B780(a1: v2, a2: v3) != 0 ) v1 = 27; ++v2; @@ -8477,36 +8437,6 @@ int __fastcall sub_D0AAEC(unsigned int a1, unsigned int a2, unsigned int a3, int } /* ==== ANON size=198 ==== */ -int __fastcall sub_D0E8B0(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 ( sub_D01D40() != 0 ) - return 1; - sub_D01C0A(); - return gp_cipher_update() != 0 || asd_svc_sub_273E(a1: (int)(a1 + 8), a2: v5) != a1[2]; - } - } - } - return v3; -} - -/* ==== ANON size=198 ==== */ __int64 __fastcall sub_D10894(int a1, char *a2) { int i; // r0 @@ -8561,6 +8491,36 @@ __int64 __fastcall sub_D102DC(int a1, char *a2) } /* ==== ANON size=198 ==== */ +int __fastcall sub_D0E8B0(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 ( asd_rpc_3() != 0 ) + return 1; + asd_rpc_5(); + return gp_cipher_update() != 0 || asd_svc_sub_273E(a1: (int)(a1 + 8), a2: v5) != a1[2]; + } + } + } + return v3; +} + +/* ==== ANON size=198 ==== */ __int64 __fastcall sub_D105D8(int a1, char *a2) { int i; // r0 @@ -8939,7 +8899,7 @@ __int64 __fastcall sub_D10CDC(int a1, int a2, _BYTE *a3, int a4) } /* ==== ANON size=222 ==== */ -int __fastcall sub_D11298(int a1, struct tee_fmt_state *a2, unsigned __int8 *a3) +int __fastcall sub_D117C4(int a1, struct tee_fmt_state *a2, unsigned __int8 *a3) { int v3; // r4 int *v4; // r7 @@ -8960,8 +8920,8 @@ int __fastcall sub_D11298(int a1, struct tee_fmt_state *a2, unsigned __int8 *a3) int v21; // [sp+10h] [bp-8h] int v22; // [sp+14h] [bp-4h] - v4 = off_D11378; - v22 = *off_D11378; + v4 = off_D118A4; + v22 = *off_D118A4; v19 = 0; v20 = 0; v17 = 0; @@ -8971,18 +8931,18 @@ int __fastcall sub_D11298(int a1, struct tee_fmt_state *a2, unsigned __int8 *a3) v3 = (int)a3; if ( asd_op_304(a1: 6, a2: 0) != 0 ) { - sub_D01CE2(); + asd_rpc_35(); sub_D01058(a1: a2, a2: (int)&v17, a3: 16, a4: v6, a5: v17, a6: v18, a7: v19, a8: v20, a9: v21, a10: v22); } if ( !sub_D0E480(a1: 0) ) goto LABEL_14; - v8 = off_D11400; + v8 = off_D11930; v9 = 0; - if ( *off_D11400 == 0 ) + if ( *off_D11930 == 0 ) { - sub_D11404(a1: 0, a2, a3: v3); + sub_D11934(a1: 0, a2, a3: v3); v3 = 1; - sub_D1137C(a1: 0, a2: 1, a3: v10); + sub_D118A8(a1: 0, a2: 1, a3: v10); *v8 = 1; v11 = sysdrv_dram_window_describe(); v8[1] = 0; @@ -8999,9 +8959,9 @@ int __fastcall sub_D11298(int a1, struct tee_fmt_state *a2, unsigned __int8 *a3) { ((void (__fastcall *)(int))loc_D1206C)(a1: *v4 - v22); LABEL_14: - v13 = off_D11400; + v13 = off_D11930; sub_D01058( - a1: (struct tee_fmt_state *)(off_D11400 + 12), + a1: (struct tee_fmt_state *)(off_D11930 + 12), (int)a2, a3: 16, a4: v7, @@ -9087,7 +9047,7 @@ int __fastcall sub_D057AC(int a1) } /* ==== ANON size=222 ==== */ -int __fastcall sub_D117C4(int a1, struct tee_fmt_state *a2, unsigned __int8 *a3) +int __fastcall sub_D11298(int a1, struct tee_fmt_state *a2, unsigned __int8 *a3) { int v3; // r4 int *v4; // r7 @@ -9108,8 +9068,8 @@ int __fastcall sub_D117C4(int a1, struct tee_fmt_state *a2, unsigned __int8 *a3) int v21; // [sp+10h] [bp-8h] int v22; // [sp+14h] [bp-4h] - v4 = off_D118A4; - v22 = *off_D118A4; + v4 = off_D11378; + v22 = *off_D11378; v19 = 0; v20 = 0; v17 = 0; @@ -9119,18 +9079,18 @@ int __fastcall sub_D117C4(int a1, struct tee_fmt_state *a2, unsigned __int8 *a3) v3 = (int)a3; if ( asd_op_304(a1: 6, a2: 0) != 0 ) { - sub_D01CE2(); + asd_rpc_35(); sub_D01058(a1: a2, a2: (int)&v17, a3: 16, a4: v6, a5: v17, a6: v18, a7: v19, a8: v20, a9: v21, a10: v22); } if ( !sub_D0E480(a1: 0) ) goto LABEL_14; - v8 = off_D11930; + v8 = off_D11400; v9 = 0; - if ( *off_D11930 == 0 ) + if ( *off_D11400 == 0 ) { - sub_D11934(a1: 0, a2, a3: v3); + sub_D11404(a1: 0, a2, a3: v3); v3 = 1; - sub_D118A8(a1: 0, a2: 1, a3: v10); + sub_D1137C(a1: 0, a2: 1, a3: v10); *v8 = 1; v11 = sysdrv_dram_window_describe(); v8[1] = 0; @@ -9147,9 +9107,9 @@ int __fastcall sub_D117C4(int a1, struct tee_fmt_state *a2, unsigned __int8 *a3) { ((void (__fastcall *)(int))loc_D1206C)(a1: *v4 - v22); LABEL_14: - v13 = off_D11930; + v13 = off_D11400; sub_D01058( - a1: (struct tee_fmt_state *)(off_D11930 + 12), + a1: (struct tee_fmt_state *)(off_D11400 + 12), (int)a2, a3: 16, a4: v7, @@ -12070,7 +12030,7 @@ LABEL_3: if ( v3 > 1 ) return 0; v25 = v3; - sub_D01CE2(); + asd_rpc_35(); for ( i = 0; i <= 1; ++i ) { switch ( v2 ) @@ -12097,7 +12057,7 @@ LABEL_3: v5(a1: v8, a2: *v7, a3: v1, a4: 0); v5(a1: v8, a2: *v7, a3: v1, a4: 0); } - sub_D01CE2(); + asd_rpc_35(); for ( j = 0; j <= 1; ++j ) { switch ( v2 ) @@ -12124,7 +12084,7 @@ LABEL_3: v5(a1: v11, a2: *v10, a3: v1, a4: 0); v5(a1: v11, a2: *v10, a3: v1, a4: 0); } - sub_D01CE2(); + asd_rpc_35(); for ( k = 0; k <= 1; ++k ) { switch ( v2 ) @@ -12151,7 +12111,7 @@ LABEL_3: v5(a1: v14, a2: *v13, a3: v1, a4: 0); v5(a1: v14, a2: *v13, a3: v1, a4: 0); } - sub_D01CE2(); + asd_rpc_35(); for ( m = 0; m <= 1; ++m ) { switch ( v2 ) @@ -12178,7 +12138,7 @@ LABEL_3: v5(a1: v17, a2: *v16, a3: v1, a4: 0); v5(a1: v17, a2: *v16, a3: v1, a4: 0); } - sub_D01CE2(); + asd_rpc_35(); for ( n = 0; n <= 1; ++n ) { switch ( v2 ) @@ -12205,7 +12165,7 @@ LABEL_3: v5(a1: v20, a2: *v19, a3: v1, a4: 0); v5(a1: v20, a2: *v19, a3: v1, a4: 0); } - sub_D01CE2(); + asd_rpc_35(); for ( ii = 0; ; ++ii ) { if ( ii > 1 ) diff --git a/fw/decomp/asd_33.0.16.144_aaa06ff8.c b/fw/decomp/asd_33.0.16.144_aaa06ff8.c index f9103de..23c6e45 100644 --- a/fw/decomp/asd_33.0.16.144_aaa06ff8.c +++ b/fw/decomp/asd_33.0.16.144_aaa06ff8.c @@ -1,7 +1,7 @@ /* asd 33.0.16.144 (aaa06ff8) -- named functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1038 total in build, 427 named, 611 anonymous + * functions: 1038 total in build, 431 named, 607 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 108, "FUZZY": 5, "MNEM": 37, "ambiguous": 546, "cmd_protos": 0, "comments": 105, "dispatch_conflict": 0, "none": 342, "protos": 148, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -4021,6 +4021,46 @@ int asd_rpc_1043() return 1; } +/* ==== asd_rpc_3 [tier=SVCOP size=42] ==== */ +int asd_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + bzero_core(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_35 [tier=SVCOP size=42] ==== */ +int asd_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_5 [tier=SVCOP size=46] ==== */ +int asd_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_C [tier=SVCOP size=46] ==== */ +int asd_rpc_C() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== asd_scan_pipe_regs [tier=MNEM 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. @@ -4906,11 +4946,11 @@ unsigned int __fastcall asd_svc_op_202(unsigned int a1, unsigned int a2, unsigne v12 = 16; v11 = (char *)off_D0DBCC + 16; v10 = -1073741824; - sub_D01CE2(); + asd_rpc_35(); if ( v7 == 0 ) goto LABEL_10; LABEL_13: - sub_D01C0A(); + asd_rpc_5(); LABEL_14: for ( i = 1; ; i = 0 ) { @@ -4923,9 +4963,9 @@ LABEL_7: break; ((void (__fastcall *)(int))loc_D1206C)(a1: *v4 - v16); LABEL_10: - if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || sub_D01D40() != 0 ) + if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || asd_rpc_3() != 0 ) goto LABEL_13; - sub_D01C0A(); + asd_rpc_5(); if ( gp_cipher_update() != 0 ) goto LABEL_14; sub_D01058( diff --git a/fw/decomp/asd_33.0.16.144_aaa06ff8.index.json b/fw/decomp/asd_33.0.16.144_aaa06ff8.index.json index 2cf1b1c..c893bbf 100644 --- a/fw/decomp/asd_33.0.16.144_aaa06ff8.index.json +++ b/fw/decomp/asd_33.0.16.144_aaa06ff8.index.json @@ -178,9 +178,9 @@ { "addr": "0xd01c0a", "ida_name": "sub_D01C0A", - "name": null, + "name": "asd_rpc_5", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01c38", @@ -192,9 +192,9 @@ { "addr": "0xd01c6a", "ida_name": "sub_D01C6A", - "name": null, + "name": "asd_rpc_C", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01c98", @@ -213,9 +213,9 @@ { "addr": "0xd01ce2", "ida_name": "sub_D01CE2", - "name": null, + "name": "asd_rpc_35", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01d0c", @@ -227,9 +227,9 @@ { "addr": "0xd01d40", "ida_name": "sub_D01D40", - "name": null, + "name": "asd_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01d6c", diff --git a/fw/decomp/asd_33.0.16.209_e129d135.anon.c b/fw/decomp/asd_33.0.16.209_e129d135.anon.c index f20aff9..0e54ad3 100644 --- a/fw/decomp/asd_33.0.16.209_e129d135.anon.c +++ b/fw/decomp/asd_33.0.16.209_e129d135.anon.c @@ -1,7 +1,7 @@ /* asd 33.0.16.209 (e129d135) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1338 total in build, 892 named, 446 anonymous + * functions: 1338 total in build, 893 named, 445 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 209, "FUZZY": 3, "MNEM": 125, "ambiguous": 866, "cmd_protos": 0, "comments": 257, "dispatch_conflict": 0, "none": 135, "protos": 333, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -2421,6 +2421,24 @@ __int64 sub_D0FBE4() } /* ==== ANON size=36 ==== */ +int sub_D11060() +{ + int *v0; // r4 + int result; // r0 + + v0 = off_D11084; + asd_rpc_35(); + result = asd_foreach_link_D15650(a1: (int)v0); + *v0 = 0; + v0[1] = 0; + v0[2] = 0; + v0[3] = 0; + if ( result != 0 ) + return 27; + return result; +} + +/* ==== ANON size=36 ==== */ __int64 sub_D0FC2C() { __asm { SVC 0x7C ; '|' } @@ -2481,24 +2499,6 @@ int sub_D0F864() return sub_D0FB38(a1: &vars8, a2: var4); } -/* ==== ANON size=36 ==== */ -int sub_D11060() -{ - int *v0; // r4 - int result; // r0 - - v0 = off_D11084; - gp_crypto_op_0x35(); - result = asd_foreach_link_D15650(a1: (int)v0); - *v0 = 0; - v0[1] = 0; - v0[2] = 0; - v0[3] = 0; - if ( result != 0 ) - return 27; - return result; -} - /* ==== ANON size=38 ==== */ int __fastcall sub_D0249C(int a1) { @@ -2572,16 +2572,6 @@ BOOL __fastcall sub_D12960(unsigned int a1) } /* ==== ANON size=46 ==== */ -int sub_D01D0A() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ int __fastcall sub_D06490(unsigned int a1) { _DWORD *v1; // r6 @@ -2709,7 +2699,7 @@ int sub_D11FB8() v0 = (unsigned __int8 *)(off_D12388 + 5); off_D12388[4] |= 8u; - gp_crypto_op_0x35(); + asd_rpc_35(); if ( sub_D0E848(a1: 0, a2: v0, a3: 0x10u, a4: off_D12348) != 0 ) return 27; else @@ -3826,32 +3816,6 @@ int __fastcall sub_D0353C(unsigned int a1, _WORD *a2, _WORD *a3, _WORD *a4) } /* ==== ANON size=72 ==== */ -int sub_D11014() -{ - int v0; // r4 - int **v1; // r8 - unsigned int v2; // r7 - int *v3; // r5 - int v4; // r6 - - v0 = 0; - v1 = off_D1105C; - v2 = 0; - v3 = off_D11084 + 4; - while ( v2 != 4 ) - { - gp_crypto_op_0x35(); - v4 = sub_D0E848(a1: v2, a2: (unsigned __int8 *)v3 + 4, a3: 0x10u, a4: v1); - bzero_core(result: v3, a2: 0x14u); - if ( v4 != 0 ) - v0 = 27; - v3 += 5; - ++v2; - } - return v0; -} - -/* ==== ANON size=72 ==== */ int __fastcall sub_D121A8(unsigned int a1) { int v2; // r0 @@ -3876,6 +3840,32 @@ int __fastcall sub_D121A8(unsigned int a1) return 27; } +/* ==== ANON size=72 ==== */ +int sub_D11014() +{ + int v0; // r4 + int **v1; // r8 + unsigned int v2; // r7 + int *v3; // r5 + int v4; // r6 + + v0 = 0; + v1 = off_D1105C; + v2 = 0; + v3 = off_D11084 + 4; + while ( v2 != 4 ) + { + asd_rpc_35(); + v4 = sub_D0E848(a1: v2, a2: (unsigned __int8 *)v3 + 4, a3: 0x10u, a4: v1); + bzero_core(result: v3, a2: 0x14u); + if ( v4 != 0 ) + v0 = 27; + v3 += 5; + ++v2; + } + return v0; +} + /* ==== ANON size=74 ==== */ int __fastcall sub_D11620(unsigned int a1, unsigned int a2) { @@ -6078,9 +6068,9 @@ int __fastcall sub_D127B0(unsigned int *a1) v3 = 1; if ( gp_operation_allocate() == 0 ) { - if ( gp_set_operation_key() != 0 ) + if ( asd_rpc_3() != 0 ) return 1; - gp_operation_set_key(); + asd_rpc_5(); return gp_cipher_update() != 0 || asd_svc_sub_273E(a1: (int)(a1 + 8), a2: v5) != a1[2]; } } diff --git a/fw/decomp/asd_33.0.16.209_e129d135.c b/fw/decomp/asd_33.0.16.209_e129d135.c index 4af0af6..4cba9b7 100644 --- a/fw/decomp/asd_33.0.16.209_e129d135.c +++ b/fw/decomp/asd_33.0.16.209_e129d135.c @@ -1,7 +1,7 @@ /* asd 33.0.16.209 (e129d135) -- named functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1338 total in build, 892 named, 446 anonymous + * functions: 1338 total in build, 893 named, 445 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 209, "FUZZY": 3, "MNEM": 125, "ambiguous": 866, "cmd_protos": 0, "comments": 257, "dispatch_conflict": 0, "none": 135, "protos": 333, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -10996,6 +10996,46 @@ int asd_rpc_1043() return 1; } +/* ==== asd_rpc_3 [tier=SVCOP size=42] ==== */ +int asd_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + bzero_core(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_35 [tier=SVCOP size=42] ==== */ +int asd_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_5 [tier=SVCOP size=46] ==== */ +int asd_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_C [tier=SVCOP size=46] ==== */ +int asd_rpc_C() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== asd_scan_pipe_regs [tier=MNEM 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. @@ -12199,11 +12239,11 @@ unsigned int __fastcall asd_svc_op_202(unsigned int a1, unsigned int a2, unsigne goto LABEL_7; } v7 = gp_object_allocate(); - gp_crypto_op_0x35(); + asd_rpc_35(); if ( v7 == 0 ) goto LABEL_10; LABEL_13: - gp_operation_set_key(); + asd_rpc_5(); LABEL_14: a3 = 1; LABEL_7: @@ -12211,9 +12251,9 @@ LABEL_7: { ((void (__fastcall *)(int))loc_D15FA8)(a1: *v4 - v11); LABEL_10: - if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || gp_set_operation_key() != 0 ) + if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || asd_rpc_3() != 0 ) goto LABEL_13; - gp_operation_set_key(); + asd_rpc_5(); if ( gp_cipher_update() != 0 ) goto LABEL_14; memcpy(result: (_BYTE *)(a3 + 16), a2: v10, a3: 0x10u, a4: v9); @@ -12634,7 +12674,7 @@ int __fastcall asd_write_key_regs(int a1, int a2, int a3) unsigned int i; // r8 int j; // r7 - result = gp_crypto_op_0x35(); + result = asd_rpc_35(); for ( i = 0; i <= 1; ++i ) { for ( j = 0; j != 4; ++j ) @@ -12727,16 +12767,6 @@ int __fastcall gp_cipher_update() return 1; } -/* ==== gp_crypto_op_0x35 [tier=IDA size=42] ==== */ -int 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]. @@ -12794,16 +12824,6 @@ int __fastcall gp_operation_free() return 1; } -/* ==== gp_operation_set_key [tier=IDA size=46] ==== */ -int 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]. @@ -12816,16 +12836,6 @@ int __fastcall gp_populate_transient_object() return 1; } -/* ==== gp_set_operation_key [tier=IDA size=42] ==== */ -int 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=THUNK size=4] REF-DERIVED-NAME ==== */ // attributes: thunk int __fastcall j_asd_aux_op_D1891C(unsigned int a1, int a2) diff --git a/fw/decomp/asd_33.0.16.209_e129d135.index.json b/fw/decomp/asd_33.0.16.209_e129d135.index.json index 9aaf0fe..a351abf 100644 --- a/fw/decomp/asd_33.0.16.209_e129d135.index.json +++ b/fw/decomp/asd_33.0.16.209_e129d135.index.json @@ -171,9 +171,9 @@ { "addr": "0xd01caa", "ida_name": "sub_D01CAA", - "name": "gp_operation_set_key", + "name": "asd_rpc_5", "size": 46, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01cd8", @@ -185,9 +185,9 @@ { "addr": "0xd01d0a", "ida_name": "sub_D01D0A", - "name": null, + "name": "asd_rpc_C", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01d38", @@ -206,9 +206,9 @@ { "addr": "0xd01d82", "ida_name": "sub_D01D82", - "name": "gp_crypto_op_0x35", + "name": "asd_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01dac", @@ -220,9 +220,9 @@ { "addr": "0xd01de0", "ida_name": "sub_D01DE0", - "name": "gp_set_operation_key", + "name": "asd_rpc_3", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01e0c", diff --git a/fw/decomp/asd_33.0.24.209_356275c8.anon.c b/fw/decomp/asd_33.0.24.209_356275c8.anon.c index 5fadd30..b014b8f 100644 --- a/fw/decomp/asd_33.0.24.209_356275c8.anon.c +++ b/fw/decomp/asd_33.0.24.209_356275c8.anon.c @@ -1,7 +1,7 @@ /* asd 33.0.24.209 (356275c8) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1338 total in build, 895 named, 443 anonymous + * functions: 1338 total in build, 896 named, 442 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 249, "FUZZY": 3, "MNEM": 77, "ambiguous": 876, "cmd_protos": 0, "comments": 260, "dispatch_conflict": 0, "none": 133, "protos": 325, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -2427,24 +2427,6 @@ LABEL_28: } /* ==== ANON size=36 ==== */ -int sub_D110C0() -{ - int *v0; // r4 - int result; // r0 - - v0 = off_D110E4; - gp_crypto_op_0x35(); - result = asd_foreach_link_D15650(a1: (int)v0); - *v0 = 0; - v0[1] = 0; - v0[2] = 0; - v0[3] = 0; - if ( result != 0 ) - return 27; - return result; -} - -/* ==== ANON size=36 ==== */ __int64 sub_D0FC8C() { __asm { SVC 0x7C ; '|' } @@ -2480,6 +2462,24 @@ int sub_D0F94C() } /* ==== ANON size=36 ==== */ +int sub_D110C0() +{ + int *v0; // r4 + int result; // r0 + + v0 = off_D110E4; + asd_rpc_35(); + result = asd_foreach_link_D15650(a1: (int)v0); + *v0 = 0; + v0[1] = 0; + v0[2] = 0; + v0[3] = 0; + if ( result != 0 ) + return 27; + return result; +} + +/* ==== ANON size=36 ==== */ int sub_D0F8C4() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF @@ -2552,16 +2552,6 @@ BOOL __fastcall sub_D12948(unsigned int a1) } /* ==== ANON size=46 ==== */ -int sub_D01D0A() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ BOOL __fastcall sub_D129C0(unsigned int a1) { int v2; // r4 @@ -2687,7 +2677,7 @@ int sub_D12018() v0 = (unsigned __int8 *)(off_D123E8 + 5); off_D123E8[4] |= 8u; - gp_crypto_op_0x35(); + asd_rpc_35(); if ( sub_D0E8A8(a1: 0, a2: v0, a3: 0x10u, a4: off_D123A8) != 0 ) return 27; else @@ -3818,7 +3808,7 @@ int sub_D11074() v3 = off_D110E4 + 4; while ( v2 != 4 ) { - gp_crypto_op_0x35(); + asd_rpc_35(); v4 = sub_D0E8A8(a1: v2, a2: (unsigned __int8 *)v3 + 4, a3: 0x10u, a4: v1); bzero_core(result: v3, a2: 0x14u); if ( v4 != 0 ) @@ -6063,9 +6053,9 @@ int __fastcall sub_D12810(unsigned int *a1) v3 = 1; if ( gp_operation_allocate() == 0 ) { - if ( gp_set_operation_key() != 0 ) + if ( asd_rpc_3() != 0 ) return 1; - gp_operation_set_key(); + asd_rpc_5(); return gp_cipher_update() != 0 || asd_svc_sub_273E(a1: (int)(a1 + 8), a2: v5) != a1[2]; } } diff --git a/fw/decomp/asd_33.0.24.209_356275c8.c b/fw/decomp/asd_33.0.24.209_356275c8.c index ab7578e..76c95db 100644 --- a/fw/decomp/asd_33.0.24.209_356275c8.c +++ b/fw/decomp/asd_33.0.24.209_356275c8.c @@ -1,7 +1,7 @@ /* asd 33.0.24.209 (356275c8) -- named functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1338 total in build, 895 named, 443 anonymous + * functions: 1338 total in build, 896 named, 442 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 249, "FUZZY": 3, "MNEM": 77, "ambiguous": 876, "cmd_protos": 0, "comments": 260, "dispatch_conflict": 0, "none": 133, "protos": 325, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -11242,6 +11242,46 @@ int asd_rpc_1043() return 1; } +/* ==== asd_rpc_3 [tier=SVCOP size=42] ==== */ +int asd_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + bzero_core(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_35 [tier=SVCOP size=42] ==== */ +int asd_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_5 [tier=SVCOP size=46] ==== */ +int asd_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_C [tier=SVCOP size=46] ==== */ +int asd_rpc_C() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== asd_scan_pipe_regs [tier=MNEM 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. @@ -12445,11 +12485,11 @@ unsigned int __fastcall asd_svc_op_202(unsigned int a1, unsigned int a2, unsigne goto LABEL_7; } v7 = gp_object_allocate(); - gp_crypto_op_0x35(); + asd_rpc_35(); if ( v7 == 0 ) goto LABEL_10; LABEL_13: - gp_operation_set_key(); + asd_rpc_5(); LABEL_14: a3 = 1; LABEL_7: @@ -12457,9 +12497,9 @@ LABEL_7: { ((void (__fastcall *)(int))loc_D16008)(a1: *v4 - v11); LABEL_10: - if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || gp_set_operation_key() != 0 ) + if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || asd_rpc_3() != 0 ) goto LABEL_13; - gp_operation_set_key(); + asd_rpc_5(); if ( gp_cipher_update() != 0 ) goto LABEL_14; memcpy(result: (_BYTE *)(a3 + 16), a2: v10, a3: 0x10u, a4: v9); @@ -12880,7 +12920,7 @@ int __fastcall asd_write_key_regs(int a1, int a2, int a3) unsigned int i; // r8 int j; // r7 - result = gp_crypto_op_0x35(); + result = asd_rpc_35(); for ( i = 0; i <= 1; ++i ) { for ( j = 0; j != 4; ++j ) @@ -12973,16 +13013,6 @@ int __fastcall gp_cipher_update() return 1; } -/* ==== gp_crypto_op_0x35 [tier=IDA size=42] ==== */ -int 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]. @@ -13040,16 +13070,6 @@ int __fastcall gp_operation_free() return 1; } -/* ==== gp_operation_set_key [tier=IDA size=46] ==== */ -int 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]. @@ -13062,16 +13082,6 @@ int __fastcall gp_populate_transient_object() return 1; } -/* ==== gp_set_operation_key [tier=IDA size=42] ==== */ -int 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=THUNK size=4] REF-DERIVED-NAME ==== */ // attributes: thunk int __fastcall j_asd_aux_op_D1891C(unsigned int a1, int a2) diff --git a/fw/decomp/asd_33.0.24.209_356275c8.index.json b/fw/decomp/asd_33.0.24.209_356275c8.index.json index 64606ae..f37f8ab 100644 --- a/fw/decomp/asd_33.0.24.209_356275c8.index.json +++ b/fw/decomp/asd_33.0.24.209_356275c8.index.json @@ -171,9 +171,9 @@ { "addr": "0xd01caa", "ida_name": "sub_D01CAA", - "name": "gp_operation_set_key", + "name": "asd_rpc_5", "size": 46, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01cd8", @@ -185,9 +185,9 @@ { "addr": "0xd01d0a", "ida_name": "sub_D01D0A", - "name": null, + "name": "asd_rpc_C", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01d38", @@ -206,9 +206,9 @@ { "addr": "0xd01d82", "ida_name": "sub_D01D82", - "name": "gp_crypto_op_0x35", + "name": "asd_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01dac", @@ -220,9 +220,9 @@ { "addr": "0xd01de0", "ida_name": "sub_D01DE0", - "name": "gp_set_operation_key", + "name": "asd_rpc_3", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01e0c", diff --git a/fw/decomp/asd_33.0.28.209_135c328b.anon.c b/fw/decomp/asd_33.0.28.209_135c328b.anon.c index 81e1877..365db75 100644 --- a/fw/decomp/asd_33.0.28.209_135c328b.anon.c +++ b/fw/decomp/asd_33.0.28.209_135c328b.anon.c @@ -1,7 +1,7 @@ /* asd 33.0.28.209 (135c328b) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1344 total in build, 903 named, 441 anonymous + * functions: 1344 total in build, 904 named, 440 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 333, "FUZZY": 3, "MNEM": 0, "ambiguous": 876, "cmd_protos": 0, "comments": 264, "dispatch_conflict": 0, "none": 132, "protos": 332, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -2420,24 +2420,6 @@ LABEL_28: } /* ==== ANON size=36 ==== */ -int sub_D110C0() -{ - int *v0; // r4 - int result; // r0 - - v0 = off_D110E4; - gp_crypto_op_0x35(); - result = asd_foreach_link_D15650(a1: (int)v0); - *v0 = 0; - v0[1] = 0; - v0[2] = 0; - v0[3] = 0; - if ( result != 0 ) - return 27; - return result; -} - -/* ==== ANON size=36 ==== */ __int64 sub_D0FC8C() { __asm { SVC 0x7C ; '|' } @@ -2473,6 +2455,24 @@ int sub_D0F94C() } /* ==== ANON size=36 ==== */ +int sub_D110C0() +{ + int *v0; // r4 + int result; // r0 + + v0 = off_D110E4; + asd_rpc_35(); + result = asd_foreach_link_D15650(a1: (int)v0); + *v0 = 0; + v0[1] = 0; + v0[2] = 0; + v0[3] = 0; + if ( result != 0 ) + return 27; + return result; +} + +/* ==== ANON size=36 ==== */ int sub_D0F8C4() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF @@ -2545,16 +2545,6 @@ BOOL __fastcall sub_D12948(unsigned int a1) } /* ==== ANON size=46 ==== */ -int sub_D01D0A() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ BOOL __fastcall sub_D129C0(unsigned int a1) { int v2; // r4 @@ -2680,7 +2670,7 @@ int sub_D12018() v0 = (unsigned __int8 *)(off_D123E8 + 5); off_D123E8[4] |= 8u; - gp_crypto_op_0x35(); + asd_rpc_35(); if ( sub_D0E8A8(a1: 0, a2: v0, a3: 0x10u, a4: off_D123A8) != 0 ) return 27; else @@ -3811,7 +3801,7 @@ int sub_D11074() v3 = off_D110E4 + 4; while ( v2 != 4 ) { - gp_crypto_op_0x35(); + asd_rpc_35(); v4 = sub_D0E8A8(a1: v2, a2: (unsigned __int8 *)v3 + 4, a3: 0x10u, a4: v1); bzero_core(result: v3, a2: 0x14u); if ( v4 != 0 ) @@ -6048,9 +6038,9 @@ int __fastcall sub_D12810(unsigned int *a1) v3 = 1; if ( gp_operation_allocate() == 0 ) { - if ( gp_set_operation_key() != 0 ) + if ( asd_rpc_3() != 0 ) return 1; - gp_operation_set_key(); + asd_rpc_5(); return gp_cipher_update() != 0 || asd_svc_sub_273E(a1: (int)(a1 + 8), a2: v5) != a1[2]; } } diff --git a/fw/decomp/asd_33.0.28.209_135c328b.c b/fw/decomp/asd_33.0.28.209_135c328b.c index dd9c0d2..716acb7 100644 --- a/fw/decomp/asd_33.0.28.209_135c328b.c +++ b/fw/decomp/asd_33.0.28.209_135c328b.c @@ -1,7 +1,7 @@ /* asd 33.0.28.209 (135c328b) -- named functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1344 total in build, 903 named, 441 anonymous + * functions: 1344 total in build, 904 named, 440 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 333, "FUZZY": 3, "MNEM": 0, "ambiguous": 876, "cmd_protos": 0, "comments": 264, "dispatch_conflict": 0, "none": 132, "protos": 332, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -11251,6 +11251,46 @@ int asd_rpc_1043() return 1; } +/* ==== asd_rpc_3 [tier=SVCOP size=42] ==== */ +int asd_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + bzero_core(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_35 [tier=SVCOP size=42] ==== */ +int asd_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_5 [tier=SVCOP size=46] ==== */ +int asd_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_C [tier=SVCOP size=46] ==== */ +int asd_rpc_C() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== 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. @@ -12487,11 +12527,11 @@ unsigned int __fastcall asd_svc_op_202(unsigned int a1, unsigned int a2, unsigne goto LABEL_7; } v7 = gp_object_allocate(); - gp_crypto_op_0x35(); + asd_rpc_35(); if ( v7 == 0 ) goto LABEL_10; LABEL_13: - gp_operation_set_key(); + asd_rpc_5(); LABEL_14: a3 = 1; LABEL_7: @@ -12499,9 +12539,9 @@ LABEL_7: { ((void (__fastcall *)(int))loc_D16008)(a1: *v4 - v11); LABEL_10: - if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || gp_set_operation_key() != 0 ) + if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || asd_rpc_3() != 0 ) goto LABEL_13; - gp_operation_set_key(); + asd_rpc_5(); if ( gp_cipher_update() != 0 ) goto LABEL_14; memcpy(result: (_BYTE *)(a3 + 16), a2: v10, a3: 0x10u, a4: v9); @@ -12922,7 +12962,7 @@ int __fastcall asd_write_key_regs(int a1, int a2, int a3) unsigned int i; // r8 int j; // r7 - result = gp_crypto_op_0x35(); + result = asd_rpc_35(); for ( i = 0; i <= 1; ++i ) { for ( j = 0; j != 4; ++j ) @@ -13015,16 +13055,6 @@ int __fastcall gp_cipher_update() return 1; } -/* ==== gp_crypto_op_0x35 [tier=IDA size=42] ==== */ -int 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]. @@ -13082,16 +13112,6 @@ int __fastcall gp_operation_free() return 1; } -/* ==== gp_operation_set_key [tier=IDA size=46] ==== */ -int 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]. @@ -13104,16 +13124,6 @@ int __fastcall gp_populate_transient_object() return 1; } -/* ==== gp_set_operation_key [tier=IDA size=42] ==== */ -int 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=THUNK size=4] REF-DERIVED-NAME ==== */ // attributes: thunk int __fastcall j_asd_aux_op_D1891C(unsigned int a1, int a2) diff --git a/fw/decomp/asd_33.0.28.209_135c328b.index.json b/fw/decomp/asd_33.0.28.209_135c328b.index.json index 1c7875c..435f756 100644 --- a/fw/decomp/asd_33.0.28.209_135c328b.index.json +++ b/fw/decomp/asd_33.0.28.209_135c328b.index.json @@ -171,9 +171,9 @@ { "addr": "0xd01caa", "ida_name": "sub_D01CAA", - "name": "gp_operation_set_key", + "name": "asd_rpc_5", "size": 46, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01cd8", @@ -185,9 +185,9 @@ { "addr": "0xd01d0a", "ida_name": "sub_D01D0A", - "name": null, + "name": "asd_rpc_C", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01d38", @@ -206,9 +206,9 @@ { "addr": "0xd01d82", "ida_name": "sub_D01D82", - "name": "gp_crypto_op_0x35", + "name": "asd_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01dac", @@ -220,9 +220,9 @@ { "addr": "0xd01de0", "ida_name": "sub_D01DE0", - "name": "gp_set_operation_key", + "name": "asd_rpc_3", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01e0c", diff --git a/fw/decomp/asd_33.0.4.153_ddc1f532.anon.c b/fw/decomp/asd_33.0.4.153_ddc1f532.anon.c index 543e945..0a47d5a 100644 --- a/fw/decomp/asd_33.0.4.153_ddc1f532.anon.c +++ b/fw/decomp/asd_33.0.4.153_ddc1f532.anon.c @@ -1,7 +1,7 @@ /* asd 33.0.4.153 (ddc1f532) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1050 total in build, 435 named, 615 anonymous + * functions: 1050 total in build, 439 named, 611 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 110, "FUZZY": 4, "MNEM": 48, "ambiguous": 547, "cmd_protos": 0, "comments": 110, "dispatch_conflict": 0, "none": 341, "protos": 160, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -2870,7 +2870,7 @@ int sub_D0D4E4() int result; // r0 v0 = off_D0D508; - sub_D01CE2(); + asd_rpc_35(); result = sub_D0E680(a1: v0); *v0 = 0; v0[1] = 0; @@ -3193,16 +3193,6 @@ int __fastcall sub_D081BC(int a1) } /* ==== ANON size=42 ==== */ -int sub_D01D40() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - bzero_core(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=42 ==== */ int __fastcall sub_D11E28(_DWORD *a1, int a2) { int v2; // r2 @@ -3251,16 +3241,6 @@ BOOL __fastcall sub_D0E70C(unsigned int a1) return result; } -/* ==== ANON size=42 ==== */ -int sub_D01CE2() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=44 ==== */ int __fastcall sub_D0B178(int a1) { @@ -3354,16 +3334,6 @@ BOOL __fastcall sub_D0ED14(unsigned int a1) } /* ==== ANON size=46 ==== */ -int sub_D01C6A() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ int __fastcall sub_D07FA8(_WORD *a1) { int *v1; // r2 @@ -3490,16 +3460,6 @@ int __fastcall sub_D08050(_WORD *a1) } /* ==== ANON size=46 ==== */ -int sub_D01C0A() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ int __fastcall sub_D0B8A0(_WORD *a1) { int *v1; // r2 @@ -4778,6 +4738,23 @@ int __fastcall sub_D11EE0(int a1) } /* ==== ANON size=60 ==== */ +int __fastcall sub_D118A8(int a1) +{ + int v1; // r3 + + if ( a1 != 0 ) + return 2; + __asm { SVC 0x7C ; '|' } + __asm { SVC 0x7C ; '|' } + v1 = 0; + __asm { SVC 0x7C ; '|' } + __asm { SVC 0x7C ; '|' } + __asm { SVC 0x7C ; '|' } + __asm { SVC 0x7C ; '|' } + return v1; +} + +/* ==== ANON size=60 ==== */ int sub_D0E438() { int *v0; // r5 @@ -4792,7 +4769,7 @@ int sub_D0E438() v0 = off_D0E7F8; off_D0E7F8[4] |= 8u; v1 = (_DWORD *)((char *)off_D0E780 + 16); - sub_D01CE2(); + asd_rpc_35(); v2 = v0 + 5; v3 = v1[1]; v4 = v1[2]; @@ -4808,23 +4785,6 @@ int sub_D0E438() } /* ==== ANON size=60 ==== */ -int __fastcall sub_D118A8(int a1) -{ - int v1; // r3 - - if ( a1 != 0 ) - return 2; - __asm { SVC 0x7C ; '|' } - __asm { SVC 0x7C ; '|' } - v1 = 0; - __asm { SVC 0x7C ; '|' } - __asm { SVC 0x7C ; '|' } - __asm { SVC 0x7C ; '|' } - __asm { SVC 0x7C ; '|' } - return v1; -} - -/* ==== ANON size=60 ==== */ int __fastcall sub_D024E8(int a1, int a2, int a3, int a4) { int v4; // r4 @@ -5883,6 +5843,41 @@ int __fastcall sub_D0C12A(int a1, _DWORD *a2) } /* ==== ANON size=76 ==== */ +int sub_D0D494() +{ + _DWORD *v0; // r7 + int v1; // r4 + unsigned int v2; // r6 + _DWORD *v3; // r5 + int *v4; // r6 + int v5; // r5 + + v0 = off_D0D4E0; + v1 = 0; + v2 = 0; + v3 = (_DWORD *)((char *)off_D0D4E0 + 16); + while ( v2 != 8 ) + { + asd_rpc_35(); + if ( sub_D0B8DC(a1: v2, a2: v3) != 0 ) + v1 = 27; + ++v2; + } + v4 = off_D0D508; + v5 = 4; + v0[4] = 0; + v0[5] = 0; + v0[6] = 0; + v0[7] = 0; + while ( v5 != 24 ) + { + bzero_core(result: &v4[v5], a2: 0x14u); + v5 += 5; + } + return v1; +} + +/* ==== ANON size=76 ==== */ int __fastcall sub_D1185A(int a1, char *a2, _BYTE *a3) { int v3; // r4 @@ -5918,41 +5913,6 @@ int __fastcall sub_D1185A(int a1, char *a2, _BYTE *a3) } /* ==== ANON size=76 ==== */ -int sub_D0D494() -{ - _DWORD *v0; // r7 - int v1; // r4 - unsigned int v2; // r6 - _DWORD *v3; // r5 - int *v4; // r6 - int v5; // r5 - - v0 = off_D0D4E0; - v1 = 0; - v2 = 0; - v3 = (_DWORD *)((char *)off_D0D4E0 + 16); - while ( v2 != 8 ) - { - sub_D01CE2(); - if ( sub_D0B8DC(a1: v2, a2: v3) != 0 ) - v1 = 27; - ++v2; - } - v4 = off_D0D508; - v5 = 4; - v0[4] = 0; - v0[5] = 0; - v0[6] = 0; - v0[7] = 0; - while ( v5 != 24 ) - { - bzero_core(result: &v4[v5], a2: 0x14u); - v5 += 5; - } - return v1; -} - -/* ==== ANON size=76 ==== */ int __fastcall sub_D0D98C(unsigned int a1, unsigned int a2) { int result; // r0 @@ -8600,6 +8560,33 @@ __int64 __fastcall sub_D0FCF0(int a1, char *a2) } /* ==== ANON size=198 ==== */ +__int64 __fastcall sub_D0FFD4(int a1, char *a2) +{ + int i; // r0 + char v8; // t1 + _DWORD v10[2]; // [sp+0h] [bp-8h] + + __asm { SVC 0x7C ; '|' } + __asm { SVC 0x7C ; '|' } + __asm { SVC 0x7C ; '|' } + __asm { SVC 0x7C ; '|' } + __asm { SVC 0x7C ; '|' } + v10[0] = 0; + v10[1] = 0; + for ( i = 7; i != -1; --i ) + { + v8 = *a2++; + *((_BYTE *)v10 + i) = v8; + } + __asm { SVC 0x7C ; '|' } + __asm { SVC 0x7C ; '|' } + __asm { SVC 0x7C ; '|' } + __asm { SVC 0x7C ; '|' } + __asm { SVC 0x7C ; '|' } + return (unsigned int)dword_D10450; +} + +/* ==== ANON size=198 ==== */ int __fastcall sub_D0EB5C(unsigned int *a1) { int v2; // r0 @@ -8619,9 +8606,9 @@ int __fastcall sub_D0EB5C(unsigned int *a1) v3 = 1; if ( gp_operation_allocate() == 0 ) { - if ( sub_D01D40() != 0 ) + if ( asd_rpc_3() != 0 ) return 1; - sub_D01C0A(); + asd_rpc_5(); return gp_cipher_update() != 0 || asd_svc_sub_273E(a1: (int)(a1 + 8), a2: v5) != a1[2]; } } @@ -8630,33 +8617,6 @@ int __fastcall sub_D0EB5C(unsigned int *a1) } /* ==== ANON size=198 ==== */ -__int64 __fastcall sub_D0FFD4(int a1, char *a2) -{ - int i; // r0 - char v8; // t1 - _DWORD v10[2]; // [sp+0h] [bp-8h] - - __asm { SVC 0x7C ; '|' } - __asm { SVC 0x7C ; '|' } - __asm { SVC 0x7C ; '|' } - __asm { SVC 0x7C ; '|' } - __asm { SVC 0x7C ; '|' } - v10[0] = 0; - v10[1] = 0; - for ( i = 7; i != -1; --i ) - { - v8 = *a2++; - *((_BYTE *)v10 + i) = v8; - } - __asm { SVC 0x7C ; '|' } - __asm { SVC 0x7C ; '|' } - __asm { SVC 0x7C ; '|' } - __asm { SVC 0x7C ; '|' } - __asm { SVC 0x7C ; '|' } - return (unsigned int)dword_D10450; -} - -/* ==== ANON size=198 ==== */ __int64 __fastcall sub_D108A8(int a1, char *a2) { int i; // r0 @@ -9040,7 +9000,7 @@ int __fastcall sub_D115D4(int a1, struct tee_fmt_state *a2, unsigned __int8 *a3) v3 = (int)a3; if ( asd_op_304(a1: 6, a2: 0) != 0 ) { - sub_D01CE2(); + asd_rpc_35(); sub_D01058(a1: a2, a2: (int)&v17, a3: 16, a4: v6, a5: v17, a6: v18, a7: v19, a8: v20, a9: v21, a10: v22); } if ( !sub_D0E70C(a1: 0) ) @@ -9126,7 +9086,7 @@ int __fastcall sub_D11B4C(int a1, struct tee_fmt_state *a2, unsigned __int8 *a3) v3 = (int)a3; if ( asd_op_304(a1: 6, a2: 0) != 0 ) { - sub_D01CE2(); + asd_rpc_35(); sub_D01058(a1: a2, a2: (int)&v17, a3: 16, a4: v6, a5: v17, a6: v18, a7: v19, a8: v20, a9: v21, a10: v22); } if ( !sub_D0E70C(a1: 0) ) @@ -12215,7 +12175,7 @@ LABEL_3: if ( v3 > 1 ) return 0; v25 = v3; - sub_D01CE2(); + asd_rpc_35(); for ( i = 0; i <= 1; ++i ) { switch ( v2 ) @@ -12242,7 +12202,7 @@ LABEL_3: v5(a1: v8, a2: *v7, a3: v1, a4: 0); v5(a1: v8, a2: *v7, a3: v1, a4: 0); } - sub_D01CE2(); + asd_rpc_35(); for ( j = 0; j <= 1; ++j ) { switch ( v2 ) @@ -12269,7 +12229,7 @@ LABEL_3: v5(a1: v11, a2: *v10, a3: v1, a4: 0); v5(a1: v11, a2: *v10, a3: v1, a4: 0); } - sub_D01CE2(); + asd_rpc_35(); for ( k = 0; k <= 1; ++k ) { switch ( v2 ) @@ -12296,7 +12256,7 @@ LABEL_3: v5(a1: v14, a2: *v13, a3: v1, a4: 0); v5(a1: v14, a2: *v13, a3: v1, a4: 0); } - sub_D01CE2(); + asd_rpc_35(); for ( m = 0; m <= 1; ++m ) { switch ( v2 ) @@ -12323,7 +12283,7 @@ LABEL_3: v5(a1: v17, a2: *v16, a3: v1, a4: 0); v5(a1: v17, a2: *v16, a3: v1, a4: 0); } - sub_D01CE2(); + asd_rpc_35(); for ( n = 0; n <= 1; ++n ) { switch ( v2 ) @@ -12350,7 +12310,7 @@ LABEL_3: v5(a1: v20, a2: *v19, a3: v1, a4: 0); v5(a1: v20, a2: *v19, a3: v1, a4: 0); } - sub_D01CE2(); + asd_rpc_35(); for ( ii = 0; ; ++ii ) { if ( ii > 1 ) diff --git a/fw/decomp/asd_33.0.4.153_ddc1f532.c b/fw/decomp/asd_33.0.4.153_ddc1f532.c index d86a324..7710860 100644 --- a/fw/decomp/asd_33.0.4.153_ddc1f532.c +++ b/fw/decomp/asd_33.0.4.153_ddc1f532.c @@ -1,7 +1,7 @@ /* asd 33.0.4.153 (ddc1f532) -- named functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1050 total in build, 435 named, 615 anonymous + * functions: 1050 total in build, 439 named, 611 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 110, "FUZZY": 4, "MNEM": 48, "ambiguous": 547, "cmd_protos": 0, "comments": 110, "dispatch_conflict": 0, "none": 341, "protos": 160, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -4188,6 +4188,46 @@ int asd_rpc_1043() return 1; } +/* ==== asd_rpc_3 [tier=SVCOP size=42] ==== */ +int asd_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + bzero_core(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_35 [tier=SVCOP size=42] ==== */ +int asd_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_5 [tier=SVCOP size=46] ==== */ +int asd_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_C [tier=SVCOP size=46] ==== */ +int asd_rpc_C() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== asd_scan_pipe_regs [tier=MNEM 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. @@ -5073,11 +5113,11 @@ unsigned int __fastcall asd_svc_op_202(unsigned int a1, unsigned int a2, unsigne v12 = 16; v11 = (char *)off_D0DDF8 + 16; v10 = -1073741824; - sub_D01CE2(); + asd_rpc_35(); if ( v7 == 0 ) goto LABEL_10; LABEL_13: - sub_D01C0A(); + asd_rpc_5(); LABEL_14: for ( i = 1; ; i = 0 ) { @@ -5090,9 +5130,9 @@ LABEL_7: break; ((void (__fastcall *)(int))loc_D12448)(a1: *v4 - v16); LABEL_10: - if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || sub_D01D40() != 0 ) + if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || asd_rpc_3() != 0 ) goto LABEL_13; - sub_D01C0A(); + asd_rpc_5(); if ( gp_cipher_update() != 0 ) goto LABEL_14; sub_D01058( diff --git a/fw/decomp/asd_33.0.4.153_ddc1f532.index.json b/fw/decomp/asd_33.0.4.153_ddc1f532.index.json index a94f24e..8b87c2b 100644 --- a/fw/decomp/asd_33.0.4.153_ddc1f532.index.json +++ b/fw/decomp/asd_33.0.4.153_ddc1f532.index.json @@ -178,9 +178,9 @@ { "addr": "0xd01c0a", "ida_name": "sub_D01C0A", - "name": null, + "name": "asd_rpc_5", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01c38", @@ -192,9 +192,9 @@ { "addr": "0xd01c6a", "ida_name": "sub_D01C6A", - "name": null, + "name": "asd_rpc_C", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01c98", @@ -213,9 +213,9 @@ { "addr": "0xd01ce2", "ida_name": "sub_D01CE2", - "name": null, + "name": "asd_rpc_35", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01d0c", @@ -227,9 +227,9 @@ { "addr": "0xd01d40", "ida_name": "sub_D01D40", - "name": null, + "name": "asd_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01d6c", diff --git a/fw/decomp/asd_33.0.4.222_ff8dd593.anon.c b/fw/decomp/asd_33.0.4.222_ff8dd593.anon.c index 574a651..f4f68d0 100644 --- a/fw/decomp/asd_33.0.4.222_ff8dd593.anon.c +++ b/fw/decomp/asd_33.0.4.222_ff8dd593.anon.c @@ -1,7 +1,7 @@ /* asd 33.0.4.222 (ff8dd593) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1354 total in build, 918 named, 436 anonymous + * functions: 1354 total in build, 919 named, 435 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 195, "FUZZY": 5, "MNEM": 149, "ambiguous": 877, "cmd_protos": 0, "comments": 273, "dispatch_conflict": 0, "none": 128, "protos": 345, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -2171,7 +2171,7 @@ int sub_D1119C() int result; // r0 v0 = off_D111C0; - gp_crypto_op_0x35(); + asd_rpc_35(); result = asd_foreach_link_D15650(a1: (int)v0); *v0 = 0; v0[1] = 0; @@ -2534,16 +2534,6 @@ BOOL __fastcall sub_D12B2C(unsigned int a1) return (sub_D11052() & v2) != 0; } -/* ==== ANON size=46 ==== */ -int sub_D01D0A() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=48 ==== */ int __fastcall sub_D0DC4C(unsigned int a1, int a2) { @@ -2687,6 +2677,20 @@ int __fastcall sub_D0A2A8(int a1, _DWORD *a2) } /* ==== ANON size=50 ==== */ +int sub_D12144() +{ + unsigned __int8 *v0; // r4 + + v0 = (unsigned __int8 *)(off_D1251C + 5); + off_D1251C[4] |= 8u; + asd_rpc_35(); + if ( sub_D0E8B0(a1: 0, a2: v0, a3: 0x10u, a4: off_D124DC) != 0 ) + return 27; + else + return sub_D11904(); +} + +/* ==== ANON size=50 ==== */ void *sub_D0F778() { int *v0; // r5 @@ -2704,20 +2708,6 @@ void *sub_D0F778() return result; } -/* ==== ANON size=50 ==== */ -int sub_D12144() -{ - unsigned __int8 *v0; // r4 - - v0 = (unsigned __int8 *)(off_D1251C + 5); - off_D1251C[4] |= 8u; - gp_crypto_op_0x35(); - if ( sub_D0E8B0(a1: 0, a2: v0, a3: 0x10u, a4: off_D124DC) != 0 ) - return 27; - else - return sub_D11904(); -} - /* ==== ANON size=52 ==== */ int __fastcall sub_D0ED9C(int a1) { @@ -3795,7 +3785,7 @@ int sub_D11150() v3 = off_D111C0 + 4; while ( v2 != 4 ) { - gp_crypto_op_0x35(); + asd_rpc_35(); v4 = sub_D0E8B0(a1: v2, a2: (unsigned __int8 *)v3 + 4, a3: 0x10u, a4: v1); bzero_core(result: v3, a2: 0x14u); if ( v4 != 0 ) @@ -5880,9 +5870,9 @@ int __fastcall sub_D12948(unsigned int *a1) v3 = 1; if ( gp_operation_allocate() == 0 ) { - if ( gp_set_operation_key() != 0 ) + if ( asd_rpc_3() != 0 ) return 1; - gp_operation_set_key(); + asd_rpc_5(); return gp_cipher_update() != 0 || asd_svc_sub_273E(a1: (int)(a1 + 8), a2: v5) != a1[2]; } } diff --git a/fw/decomp/asd_33.0.4.222_ff8dd593.c b/fw/decomp/asd_33.0.4.222_ff8dd593.c index 3424afb..933c422 100644 --- a/fw/decomp/asd_33.0.4.222_ff8dd593.c +++ b/fw/decomp/asd_33.0.4.222_ff8dd593.c @@ -1,7 +1,7 @@ /* asd 33.0.4.222 (ff8dd593) -- named functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1354 total in build, 918 named, 436 anonymous + * functions: 1354 total in build, 919 named, 435 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 195, "FUZZY": 5, "MNEM": 149, "ambiguous": 877, "cmd_protos": 0, "comments": 273, "dispatch_conflict": 0, "none": 128, "protos": 345, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -11541,6 +11541,46 @@ int asd_rpc_1043() return 1; } +/* ==== asd_rpc_3 [tier=SVCOP size=42] ==== */ +int asd_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + bzero_core(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_35 [tier=SVCOP size=42] ==== */ +int asd_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_5 [tier=SVCOP size=46] ==== */ +int asd_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_C [tier=SVCOP size=46] ==== */ +int asd_rpc_C() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== asd_scan_pipe_regs [tier=MNEM 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. @@ -12816,11 +12856,11 @@ unsigned int __fastcall asd_svc_op_202(unsigned int a1, unsigned int a2, unsigne goto LABEL_7; } v7 = gp_object_allocate(); - gp_crypto_op_0x35(); + asd_rpc_35(); if ( v7 == 0 ) goto LABEL_10; LABEL_13: - gp_operation_set_key(); + asd_rpc_5(); LABEL_14: a3 = 1; LABEL_7: @@ -12828,9 +12868,9 @@ LABEL_7: { ((void (__fastcall *)(int))loc_D161B0)(a1: *v4 - v11); LABEL_10: - if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || gp_set_operation_key() != 0 ) + if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || asd_rpc_3() != 0 ) goto LABEL_13; - gp_operation_set_key(); + asd_rpc_5(); if ( gp_cipher_update() != 0 ) goto LABEL_14; memcpy(result: (_BYTE *)(a3 + 16), a2: v10, a3: 0x10u, a4: v9); @@ -13251,7 +13291,7 @@ int __fastcall asd_write_key_regs(int a1, int a2, int a3) unsigned int i; // r8 int j; // r7 - result = gp_crypto_op_0x35(); + result = asd_rpc_35(); for ( i = 0; i <= 1; ++i ) { for ( j = 0; j != 4; ++j ) @@ -13344,16 +13384,6 @@ int __fastcall gp_cipher_update() return 1; } -/* ==== gp_crypto_op_0x35 [tier=IDA size=42] ==== */ -int 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]. @@ -13411,16 +13441,6 @@ int __fastcall gp_operation_free() return 1; } -/* ==== gp_operation_set_key [tier=IDA size=46] ==== */ -int 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=MNEM 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]. @@ -13433,16 +13453,6 @@ int __fastcall gp_populate_transient_object() return 1; } -/* ==== gp_set_operation_key [tier=IDA size=42] ==== */ -int 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=THUNK size=4] REF-DERIVED-NAME ==== */ // attributes: thunk int __fastcall j_asd_aux_op_D1891C(unsigned int a1, int a2) diff --git a/fw/decomp/asd_33.0.4.222_ff8dd593.index.json b/fw/decomp/asd_33.0.4.222_ff8dd593.index.json index bae38f4..64003b2 100644 --- a/fw/decomp/asd_33.0.4.222_ff8dd593.index.json +++ b/fw/decomp/asd_33.0.4.222_ff8dd593.index.json @@ -171,9 +171,9 @@ { "addr": "0xd01caa", "ida_name": "sub_D01CAA", - "name": "gp_operation_set_key", + "name": "asd_rpc_5", "size": 46, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01cd8", @@ -185,9 +185,9 @@ { "addr": "0xd01d0a", "ida_name": "sub_D01D0A", - "name": null, + "name": "asd_rpc_C", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01d38", @@ -206,9 +206,9 @@ { "addr": "0xd01d82", "ida_name": "sub_D01D82", - "name": "gp_crypto_op_0x35", + "name": "asd_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01dac", @@ -220,9 +220,9 @@ { "addr": "0xd01de0", "ida_name": "sub_D01DE0", - "name": "gp_set_operation_key", + "name": "asd_rpc_3", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01e0c", diff --git a/fw/decomp/asd_33.0.8.195_5f04c8ff.anon.c b/fw/decomp/asd_33.0.8.195_5f04c8ff.anon.c index 5dd7ebc..e962acf 100644 --- a/fw/decomp/asd_33.0.8.195_5f04c8ff.anon.c +++ b/fw/decomp/asd_33.0.8.195_5f04c8ff.anon.c @@ -1,7 +1,7 @@ /* asd 33.0.8.195 (5f04c8ff) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1262 total in build, 768 named, 494 anonymous + * functions: 1262 total in build, 771 named, 491 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 192, "FUZZY": 3, "MNEM": 101, "ambiguous": 807, "cmd_protos": 0, "comments": 232, "dispatch_conflict": 0, "none": 159, "protos": 292, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -2731,6 +2731,24 @@ LABEL_28: } /* ==== ANON size=36 ==== */ +int sub_D10018() +{ + int *v0; // r4 + int result; // r0 + + v0 = off_D1003C; + asd_rpc_35(); + result = asd_foreach_link_D15650(a1: (int)v0); + *v0 = 0; + v0[1] = 0; + v0[2] = 0; + v0[3] = 0; + if ( result != 0 ) + return 27; + return result; +} + +/* ==== ANON size=36 ==== */ int sub_D0EBB8() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF @@ -2795,24 +2813,6 @@ int sub_D0EAE6() return sub_D0EEB8(a1: &vars8, a2: var4); } -/* ==== ANON size=36 ==== */ -int sub_D10018() -{ - int *v0; // r4 - int result; // r0 - - v0 = off_D1003C; - gp_crypto_op_0x35(); - result = asd_foreach_link_D15650(a1: (int)v0); - *v0 = 0; - v0[1] = 0; - v0[2] = 0; - v0[3] = 0; - if ( result != 0 ) - return 27; - return result; -} - /* ==== ANON size=38 ==== */ int __fastcall sub_D02444(int a1) { @@ -2841,16 +2841,6 @@ int __fastcall sub_D02444(int a1) return result; } -/* ==== ANON size=42 ==== */ -int sub_D01D88() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - bzero_core(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=44 ==== */ int __fastcall sub_D134B8(int a1, int a2) { @@ -2930,16 +2920,6 @@ int __fastcall sub_D0D164(unsigned int a1, int a2) } /* ==== ANON size=46 ==== */ -int sub_D01CB2() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ BOOL __fastcall sub_D11790(unsigned int a1) { int v2; // r4 @@ -2952,16 +2932,6 @@ BOOL __fastcall sub_D11790(unsigned int a1) return (sub_D0FEF0() & v2) != 0; } -/* ==== ANON size=46 ==== */ -int sub_D01C52() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=48 ==== */ int __fastcall sub_D02530(int a1, int a2, void (__fastcall *a3)(int *), int a4) { @@ -3011,7 +2981,7 @@ int sub_D10EC8() v0 = (unsigned __int8 *)(off_D1129C + 20); *(_DWORD *)(off_D1129C + 0x10) |= 8u; - gp_crypto_op_0x35(); + asd_rpc_35(); if ( sub_D0DD2C(a1: 0, a2: v0, a3: 0x10u, a4: off_D112A0) != 0 ) return 27; else @@ -4150,27 +4120,6 @@ int __fastcall sub_D034BC(unsigned int a1, _WORD *a2, _WORD *a3, _WORD *a4) } /* ==== ANON size=72 ==== */ -int __fastcall sub_D0C430(unsigned int a1) -{ - char *v2; // r0 - int v3; // r2 - - if ( !asd_feature_enabled(a1: 15) ) - return 8; - if ( a1 > 0x1E ) - return 5; - v2 = (char *)off_D0C7F0 + 92 * a1; - if ( *((_DWORD *)v2 + 1) != 1 ) - return 5; - v3 = *((_DWORD *)v2 + 16); - if ( (unsigned int)(v3 - 1) < 3 ) - return (*((int (**)(void))off_D0C7F0 + 748))(); - if ( (unsigned int)(v3 - 4) < 2 ) - return 0; - return 7; -} - -/* ==== ANON size=72 ==== */ int sub_D0FFD0() { int v0; // r4 @@ -4185,7 +4134,7 @@ int sub_D0FFD0() v3 = off_D1003C + 4; while ( v2 != 4 ) { - gp_crypto_op_0x35(); + asd_rpc_35(); v4 = sub_D0DD2C(a1: v2, a2: (unsigned __int8 *)v3 + 4, a3: 0x10u, a4: v1); bzero_core(result: v3, a2: 0x14u); if ( v4 != 0 ) @@ -4196,6 +4145,27 @@ int sub_D0FFD0() return v0; } +/* ==== ANON size=72 ==== */ +int __fastcall sub_D0C430(unsigned int a1) +{ + char *v2; // r0 + int v3; // r2 + + if ( !asd_feature_enabled(a1: 15) ) + return 8; + if ( a1 > 0x1E ) + return 5; + v2 = (char *)off_D0C7F0 + 92 * a1; + if ( *((_DWORD *)v2 + 1) != 1 ) + return 5; + v3 = *((_DWORD *)v2 + 16); + if ( (unsigned int)(v3 - 1) < 3 ) + return (*((int (**)(void))off_D0C7F0 + 748))(); + if ( (unsigned int)(v3 - 4) < 2 ) + return 0; + return 7; +} + /* ==== ANON size=74 ==== */ int __fastcall sub_D10598(unsigned int a1, unsigned int a2) { @@ -6416,9 +6386,9 @@ int __fastcall sub_D11658(unsigned int *a1) v3 = 1; if ( gp_operation_allocate() == 0 ) { - if ( sub_D01D88() != 0 ) + if ( asd_rpc_3() != 0 ) return 1; - sub_D01C52(); + asd_rpc_5(); return gp_cipher_update() != 0 || asd_svc_sub_273E(a1: (int)(a1 + 8), a2: v5) != a1[2]; } } diff --git a/fw/decomp/asd_33.0.8.195_5f04c8ff.c b/fw/decomp/asd_33.0.8.195_5f04c8ff.c index b4930eb..24d7da5 100644 --- a/fw/decomp/asd_33.0.8.195_5f04c8ff.c +++ b/fw/decomp/asd_33.0.8.195_5f04c8ff.c @@ -1,7 +1,7 @@ /* asd 33.0.8.195 (5f04c8ff) -- named functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1262 total in build, 768 named, 494 anonymous + * functions: 1262 total in build, 771 named, 491 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 192, "FUZZY": 3, "MNEM": 101, "ambiguous": 807, "cmd_protos": 0, "comments": 232, "dispatch_conflict": 0, "none": 159, "protos": 292, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -9943,6 +9943,46 @@ int asd_rpc_1043() return 1; } +/* ==== asd_rpc_3 [tier=SVCOP size=42] ==== */ +int asd_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + bzero_core(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_35 [tier=SVCOP size=42] ==== */ +int asd_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_5 [tier=SVCOP size=46] ==== */ +int asd_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_C [tier=SVCOP size=46] ==== */ +int asd_rpc_C() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== asd_scan_pipe_regs [tier=MNEM 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. @@ -11122,11 +11162,11 @@ unsigned int __fastcall asd_svc_op_202(unsigned int a1, unsigned int a2, unsigne v12 = 16; v11 = off_D10738 + 5; v10 = -1073741824; - gp_crypto_op_0x35(); + asd_rpc_35(); if ( v7 == 0 ) goto LABEL_10; LABEL_13: - sub_D01C52(); + asd_rpc_5(); LABEL_14: for ( i = 1; ; i = 0 ) { @@ -11139,9 +11179,9 @@ LABEL_7: break; ((void (__fastcall *)(int))loc_D148E8)(a1: *v4 - v16); LABEL_10: - if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || sub_D01D88() != 0 ) + if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || asd_rpc_3() != 0 ) goto LABEL_13; - sub_D01C52(); + asd_rpc_5(); if ( gp_cipher_update() != 0 ) goto LABEL_14; sub_D01058( @@ -11403,7 +11443,7 @@ int __fastcall asd_write_key_regs(int a1, int a2, int a3) int j; // r7 _DWORD v9[4]; // [sp+4h] [bp-10h] - result = gp_crypto_op_0x35(); + result = asd_rpc_35(); for ( i = 0; i <= 1; ++i ) { for ( j = 0; j != 4; ++j ) @@ -11496,16 +11536,6 @@ int __fastcall gp_cipher_update() return 1; } -/* ==== gp_crypto_op_0x35 [tier=IDA size=42] ==== */ -int 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]. diff --git a/fw/decomp/asd_33.0.8.195_5f04c8ff.index.json b/fw/decomp/asd_33.0.8.195_5f04c8ff.index.json index d251fd2..e0d6a46 100644 --- a/fw/decomp/asd_33.0.8.195_5f04c8ff.index.json +++ b/fw/decomp/asd_33.0.8.195_5f04c8ff.index.json @@ -171,9 +171,9 @@ { "addr": "0xd01c52", "ida_name": "sub_D01C52", - "name": null, + "name": "asd_rpc_5", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01c80", @@ -185,9 +185,9 @@ { "addr": "0xd01cb2", "ida_name": "sub_D01CB2", - "name": null, + "name": "asd_rpc_C", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01ce0", @@ -206,9 +206,9 @@ { "addr": "0xd01d2a", "ida_name": "sub_D01D2A", - "name": "gp_crypto_op_0x35", + "name": "asd_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01d54", @@ -220,9 +220,9 @@ { "addr": "0xd01d88", "ida_name": "sub_D01D88", - "name": null, + "name": "asd_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01db4", diff --git a/fw/decomp/asd_33.0.8.222_bbc214c9.anon.c b/fw/decomp/asd_33.0.8.222_bbc214c9.anon.c index 7505ad5..ea47618 100644 --- a/fw/decomp/asd_33.0.8.222_bbc214c9.anon.c +++ b/fw/decomp/asd_33.0.8.222_bbc214c9.anon.c @@ -1,7 +1,7 @@ /* asd 33.0.8.222 (bbc214c9) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1363 total in build, 929 named, 434 anonymous + * functions: 1363 total in build, 930 named, 433 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 236, "FUZZY": 5, "MNEM": 121, "ambiguous": 876, "cmd_protos": 0, "comments": 281, "dispatch_conflict": 0, "none": 125, "protos": 358, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -2119,6 +2119,24 @@ __int64 sub_D0FF1C() } /* ==== ANON size=36 ==== */ +int sub_D11358() +{ + int *v0; // r4 + int result; // r0 + + v0 = off_D1137C; + asd_rpc_35(); + result = asd_foreach_link_D15650(a1: (int)v0); + *v0 = 0; + v0[1] = 0; + v0[2] = 0; + v0[3] = 0; + if ( result != 0 ) + return 27; + return result; +} + +/* ==== ANON size=36 ==== */ int __fastcall sub_D163A8(unsigned int a1, unsigned int a2) { bool v2; // cf @@ -2272,24 +2290,6 @@ int sub_D0FB0E() } /* ==== ANON size=36 ==== */ -int sub_D11358() -{ - int *v0; // r4 - int result; // r0 - - v0 = off_D1137C; - gp_crypto_op_0x35(); - result = asd_foreach_link_D15650(a1: (int)v0); - *v0 = 0; - v0[1] = 0; - v0[2] = 0; - v0[3] = 0; - if ( result != 0 ) - return 27; - return result; -} - -/* ==== ANON size=36 ==== */ int sub_D0F9BE() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF @@ -2527,16 +2527,6 @@ BOOL __fastcall sub_D12CE8(unsigned int a1) return (sub_D1120E() & v2) != 0; } -/* ==== ANON size=46 ==== */ -int sub_D01D0A() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=48 ==== */ int __fastcall sub_D15D74(int a1) { @@ -2680,6 +2670,20 @@ int __fastcall sub_D0A3C4(int a1, _DWORD *a2, __int16 a3) } /* ==== ANON size=50 ==== */ +int sub_D12300() +{ + unsigned __int8 *v0; // r4 + + v0 = (unsigned __int8 *)(off_D126D8 + 5); + off_D126D8[4] |= 8u; + asd_rpc_35(); + if ( sub_D0EA9C(a1: 0, a2: v0, a3: 0x10u, a4: off_D12698) != 0 ) + return 27; + else + return sub_D11AC0(); +} + +/* ==== ANON size=50 ==== */ void *sub_D0F964() { int *v0; // r5 @@ -2697,20 +2701,6 @@ void *sub_D0F964() return result; } -/* ==== ANON size=50 ==== */ -int sub_D12300() -{ - unsigned __int8 *v0; // r4 - - v0 = (unsigned __int8 *)(off_D126D8 + 5); - off_D126D8[4] |= 8u; - gp_crypto_op_0x35(); - if ( sub_D0EA9C(a1: 0, a2: v0, a3: 0x10u, a4: off_D12698) != 0 ) - return 27; - else - return sub_D11AC0(); -} - /* ==== ANON size=52 ==== */ int __fastcall sub_D02590(int a1, int a2, void (__fastcall *a3)(int *), int a4) { @@ -3788,7 +3778,7 @@ int sub_D1130C() v3 = off_D1137C + 4; while ( v2 != 4 ) { - gp_crypto_op_0x35(); + asd_rpc_35(); v4 = sub_D0EA9C(a1: v2, a2: (unsigned __int8 *)v3 + 4, a3: 0x10u, a4: v1); bzero_core(result: v3, a2: 0x14u); if ( v4 != 0 ) @@ -5839,9 +5829,9 @@ int __fastcall sub_D12B04(unsigned int *a1) v3 = 1; if ( gp_operation_allocate() == 0 ) { - if ( gp_set_operation_key() != 0 ) + if ( asd_rpc_3() != 0 ) return 1; - gp_operation_set_key(); + asd_rpc_5(); return gp_cipher_update() != 0 || asd_svc_sub_273E(a1: (int)(a1 + 8), a2: v5) != a1[2]; } } diff --git a/fw/decomp/asd_33.0.8.222_bbc214c9.c b/fw/decomp/asd_33.0.8.222_bbc214c9.c index 7ee7707..fd16359 100644 --- a/fw/decomp/asd_33.0.8.222_bbc214c9.c +++ b/fw/decomp/asd_33.0.8.222_bbc214c9.c @@ -1,7 +1,7 @@ /* asd 33.0.8.222 (bbc214c9) -- named functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1363 total in build, 929 named, 434 anonymous + * functions: 1363 total in build, 930 named, 433 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 236, "FUZZY": 5, "MNEM": 121, "ambiguous": 876, "cmd_protos": 0, "comments": 281, "dispatch_conflict": 0, "none": 125, "protos": 358, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -11733,6 +11733,46 @@ int asd_rpc_1043() return 1; } +/* ==== asd_rpc_3 [tier=SVCOP size=42] ==== */ +int asd_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + bzero_core(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_35 [tier=SVCOP size=42] ==== */ +int asd_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_5 [tier=SVCOP size=46] ==== */ +int asd_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_C [tier=SVCOP size=46] ==== */ +int asd_rpc_C() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== asd_scan_pipe_regs [tier=MNEM 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. @@ -13028,11 +13068,11 @@ unsigned int __fastcall asd_svc_op_202(unsigned int a1, unsigned int a2, unsigne goto LABEL_7; } v7 = gp_object_allocate(); - gp_crypto_op_0x35(); + asd_rpc_35(); if ( v7 == 0 ) goto LABEL_10; LABEL_13: - gp_operation_set_key(); + asd_rpc_5(); LABEL_14: a3 = 1; LABEL_7: @@ -13040,9 +13080,9 @@ LABEL_7: { ((void (__fastcall *)(int))loc_D163E0)(a1: *v4 - v11); LABEL_10: - if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || gp_set_operation_key() != 0 ) + if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || asd_rpc_3() != 0 ) goto LABEL_13; - gp_operation_set_key(); + asd_rpc_5(); if ( gp_cipher_update() != 0 ) goto LABEL_14; memcpy(result: (_BYTE *)(a3 + 16), a2: v10, a3: 0x10u, a4: v9); @@ -13476,7 +13516,7 @@ int __fastcall asd_write_key_regs(int a1, int a2, int a3) unsigned int i; // r8 int j; // r7 - result = gp_crypto_op_0x35(); + result = asd_rpc_35(); for ( i = 0; i <= 1; ++i ) { for ( j = 0; j != 4; ++j ) @@ -13569,16 +13609,6 @@ int __fastcall gp_cipher_update() return 1; } -/* ==== gp_crypto_op_0x35 [tier=IDA size=42] ==== */ -int 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]. @@ -13636,16 +13666,6 @@ int __fastcall gp_operation_free() return 1; } -/* ==== gp_operation_set_key [tier=IDA size=46] ==== */ -int 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]. @@ -13658,16 +13678,6 @@ int __fastcall gp_populate_transient_object() return 1; } -/* ==== gp_set_operation_key [tier=IDA size=42] ==== */ -int 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=THUNK size=4] REF-DERIVED-NAME ==== */ // attributes: thunk int __fastcall j_asd_aux_op_D1891C(unsigned int a1, int a2) diff --git a/fw/decomp/asd_33.0.8.222_bbc214c9.index.json b/fw/decomp/asd_33.0.8.222_bbc214c9.index.json index c34f20d..dd99c34 100644 --- a/fw/decomp/asd_33.0.8.222_bbc214c9.index.json +++ b/fw/decomp/asd_33.0.8.222_bbc214c9.index.json @@ -171,9 +171,9 @@ { "addr": "0xd01caa", "ida_name": "sub_D01CAA", - "name": "gp_operation_set_key", + "name": "asd_rpc_5", "size": 46, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01cd8", @@ -185,9 +185,9 @@ { "addr": "0xd01d0a", "ida_name": "sub_D01D0A", - "name": null, + "name": "asd_rpc_C", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01d38", @@ -206,9 +206,9 @@ { "addr": "0xd01d82", "ida_name": "sub_D01D82", - "name": "gp_crypto_op_0x35", + "name": "asd_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01dac", @@ -220,9 +220,9 @@ { "addr": "0xd01de0", "ida_name": "sub_D01DE0", - "name": "gp_set_operation_key", + "name": "asd_rpc_3", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01e0c", diff --git a/fw/decomp/asd_33.0.8.235_64e420e4.anon.c b/fw/decomp/asd_33.0.8.235_64e420e4.anon.c index 9579df8..15003d5 100644 --- a/fw/decomp/asd_33.0.8.235_64e420e4.anon.c +++ b/fw/decomp/asd_33.0.8.235_64e420e4.anon.c @@ -1,7 +1,7 @@ /* asd 33.0.8.235 (64e420e4) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1419 total in build, 1009 named, 410 anonymous + * functions: 1419 total in build, 1010 named, 409 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 272, "FUZZY": 18, "MNEM": 135, "ambiguous": 908, "cmd_protos": 0, "comments": 327, "dispatch_conflict": 0, "none": 86, "protos": 421, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -2171,24 +2171,6 @@ int sub_D10530() } /* ==== ANON size=36 ==== */ -int sub_D11EDC() -{ - int *v0; // r4 - int result; // r0 - - v0 = off_D11F00; - gp_crypto_op_0x35(); - result = asd_foreach_link_D15650(a1: (int)v0); - *v0 = 0; - v0[1] = 0; - v0[2] = 0; - v0[3] = 0; - if ( result != 0 ) - return 27; - return result; -} - -/* ==== ANON size=36 ==== */ int sub_D1055A() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF @@ -2280,6 +2262,24 @@ int sub_D104DC() } /* ==== ANON size=36 ==== */ +int sub_D11EDC() +{ + int *v0; // r4 + int result; // r0 + + v0 = off_D11F00; + asd_rpc_35(); + result = asd_foreach_link_D15650(a1: (int)v0); + *v0 = 0; + v0[1] = 0; + v0[2] = 0; + v0[3] = 0; + if ( result != 0 ) + return 27; + return result; +} + +/* ==== ANON size=36 ==== */ int sub_D1040A() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF @@ -2529,16 +2529,6 @@ BOOL __fastcall sub_D136B4(unsigned int a1) return (sub_D11D6A() & v2) != 0; } -/* ==== ANON size=46 ==== */ -int sub_D01D36() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=48 ==== */ int __fastcall sub_D0E718(unsigned int a1, int a2) { @@ -3687,28 +3677,6 @@ LABEL_2: } /* ==== ANON size=78 ==== */ -int sub_D12DC0() -{ - unsigned __int8 *v0; // r4 - unsigned int v2; // r0 - _DWORD *v3; // r0 - - v0 = (unsigned __int8 *)off_D1319C; - *(_DWORD *)off_D1319C |= 8u; - gp_crypto_op_0x35(); - if ( asd_svc_sub_110EC(a1: 0, a2: v0 + 4, a3: 0x10u, a4: off_D12F74) != 0 ) - return 27; - v2 = off_D13124[8] - 20; - if ( v2 >= 0xE || 0x3EF5u >> v2 << 31 == 0 ) - { - v3 = off_D12F78; - *(_DWORD *)off_D12F78 = dword_D12F7C; - *v3 = 50331648; - } - return 0; -} - -/* ==== ANON size=78 ==== */ int __fastcall sub_D0D99C(unsigned int a1) { char *v2; // r0 @@ -3737,6 +3705,28 @@ int __fastcall sub_D0D99C(unsigned int a1) } /* ==== ANON size=78 ==== */ +int sub_D12DC0() +{ + unsigned __int8 *v0; // r4 + unsigned int v2; // r0 + _DWORD *v3; // r0 + + v0 = (unsigned __int8 *)off_D1319C; + *(_DWORD *)off_D1319C |= 8u; + asd_rpc_35(); + if ( asd_svc_sub_110EC(a1: 0, a2: v0 + 4, a3: 0x10u, a4: off_D12F74) != 0 ) + return 27; + v2 = off_D13124[8] - 20; + if ( v2 >= 0xE || 0x3EF5u >> v2 << 31 == 0 ) + { + v3 = off_D12F78; + *(_DWORD *)off_D12F78 = dword_D12F7C; + *v3 = 50331648; + } + return 0; +} + +/* ==== ANON size=78 ==== */ int __fastcall sub_D12CF8(int a1, int a2) { int *v2; // r6 @@ -4557,6 +4547,28 @@ int __fastcall sub_D119E8(int a1, unsigned int a2) } /* ==== ANON size=110 ==== */ +int __fastcall sub_D118BC(int a1, unsigned int a2) +{ + if ( *((_DWORD *)off_D11C70 + 6) > a2 ) + { + if ( *((_DWORD *)off_D11B90 + 113) != 0 ) + { + if ( asd_reg_read_11BE4() != 0 ) + { + sub_D0F048(a1: a2); + __asm { SVC 0x7B ; '{' } + } + } + else + { + sub_D0F048(a1: a2); + __asm { SVC 0x7B ; '{' } + } + } + return 0; +} + +/* ==== ANON size=110 ==== */ int sub_D11E68() { int v0; // r4 @@ -4574,7 +4586,7 @@ int sub_D11E68() v3 = (unsigned __int8 *)(dword_D11ED8 + 4); for ( i = 0; i != 4; ++i ) { - gp_crypto_op_0x35(); + asd_rpc_35(); v5 = v1[8] - 20; if ( v5 <= 0xD && ((1 << v5) & 0x3EF5) != 0 ) v6 = asd_link_op_if_supported(a1: i, a2: (int)v3); @@ -4589,28 +4601,6 @@ int sub_D11E68() return v0; } -/* ==== ANON size=110 ==== */ -int __fastcall sub_D118BC(int a1, unsigned int a2) -{ - if ( *((_DWORD *)off_D11C70 + 6) > a2 ) - { - if ( *((_DWORD *)off_D11B90 + 113) != 0 ) - { - if ( asd_reg_read_11BE4() != 0 ) - { - sub_D0F048(a1: a2); - __asm { SVC 0x7B ; '{' } - } - } - else - { - sub_D0F048(a1: a2); - __asm { SVC 0x7B ; '{' } - } - } - return 0; -} - /* ==== ANON size=114 ==== */ int __fastcall sub_D12F80(unsigned int a1, int a2) { diff --git a/fw/decomp/asd_33.0.8.235_64e420e4.c b/fw/decomp/asd_33.0.8.235_64e420e4.c index ae383d0..795dad7 100644 --- a/fw/decomp/asd_33.0.8.235_64e420e4.c +++ b/fw/decomp/asd_33.0.8.235_64e420e4.c @@ -1,7 +1,7 @@ /* asd 33.0.8.235 (64e420e4) -- named functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1419 total in build, 1009 named, 410 anonymous + * functions: 1419 total in build, 1010 named, 409 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 272, "FUZZY": 18, "MNEM": 135, "ambiguous": 908, "cmd_protos": 0, "comments": 327, "dispatch_conflict": 0, "none": 86, "protos": 421, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -13997,6 +13997,46 @@ int asd_rpc_1043() return 1; } +/* ==== asd_rpc_3 [tier=SVCOP size=42] ==== */ +int asd_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + bzero_core(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_35 [tier=SVCOP size=42] ==== */ +int asd_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_5 [tier=SVCOP size=46] ==== */ +int asd_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_C [tier=SVCOP size=46] ==== */ +int asd_rpc_C() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== asd_scan_pipe_regs [tier=MNEM 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. @@ -15299,9 +15339,9 @@ int __fastcall asd_svc_op_201(unsigned int *a1) v3 = 1; if ( gp_operation_allocate() == 0 ) { - if ( gp_set_operation_key() != 0 ) + if ( asd_rpc_3() != 0 ) return 1; - gp_operation_set_key(); + asd_rpc_5(); return gp_cipher_update() != 0 || asd_svc_sub_273E(a1: (int)(a1 + 8), a2: v5) != a1[2]; } } @@ -15329,11 +15369,11 @@ unsigned int __fastcall asd_svc_op_202(unsigned int a1, unsigned int a2, unsigne goto LABEL_7; } v7 = gp_object_allocate(); - gp_crypto_op_0x35(); + asd_rpc_35(); if ( v7 == 0 ) goto LABEL_10; LABEL_13: - gp_operation_set_key(); + asd_rpc_5(); LABEL_14: a3 = 1; LABEL_7: @@ -15341,9 +15381,9 @@ LABEL_7: { ((void (__fastcall *)(int))loc_D16DE8)(a1: *v4 - v11); LABEL_10: - if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || gp_set_operation_key() != 0 ) + if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || asd_rpc_3() != 0 ) goto LABEL_13; - gp_operation_set_key(); + asd_rpc_5(); if ( gp_cipher_update() != 0 ) goto LABEL_14; memcpy(result: (_BYTE *)(a3 + 16), a2: v10, a3: 0x10u, a4: v9); @@ -15957,7 +15997,7 @@ int __fastcall asd_write_key_regs(int a1, int a2, int a3) unsigned int i; // r8 int j; // r7 - result = gp_crypto_op_0x35(); + result = asd_rpc_35(); for ( i = 0; i <= 1; ++i ) { for ( j = 0; j != 4; ++j ) @@ -16050,16 +16090,6 @@ int __fastcall gp_cipher_update() return 1; } -/* ==== gp_crypto_op_0x35 [tier=IDA size=42] ==== */ -int 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]. @@ -16117,16 +16147,6 @@ int __fastcall gp_operation_free() return 1; } -/* ==== gp_operation_set_key [tier=IDA size=46] ==== */ -int 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]. @@ -16139,16 +16159,6 @@ int __fastcall gp_populate_transient_object() return 1; } -/* ==== gp_set_operation_key [tier=IDA size=42] ==== */ -int 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=THUNK size=4] REF-DERIVED-NAME ==== */ // attributes: thunk int __fastcall j_asd_aux_op_D1891C(unsigned int a1, int a2) diff --git a/fw/decomp/asd_33.0.8.235_64e420e4.index.json b/fw/decomp/asd_33.0.8.235_64e420e4.index.json index 005c031..b80efb4 100644 --- a/fw/decomp/asd_33.0.8.235_64e420e4.index.json +++ b/fw/decomp/asd_33.0.8.235_64e420e4.index.json @@ -171,9 +171,9 @@ { "addr": "0xd01cd6", "ida_name": "sub_D01CD6", - "name": "gp_operation_set_key", + "name": "asd_rpc_5", "size": 46, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01d04", @@ -185,9 +185,9 @@ { "addr": "0xd01d36", "ida_name": "sub_D01D36", - "name": null, + "name": "asd_rpc_C", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01d64", @@ -206,9 +206,9 @@ { "addr": "0xd01dae", "ida_name": "sub_D01DAE", - "name": "gp_crypto_op_0x35", + "name": "asd_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01dd8", @@ -220,9 +220,9 @@ { "addr": "0xd01e0c", "ida_name": "sub_D01E0C", - "name": "gp_set_operation_key", + "name": "asd_rpc_3", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01e38", diff --git a/fw/decomp/asd_33.0.8.235_76e58ee4.anon.c b/fw/decomp/asd_33.0.8.235_76e58ee4.anon.c index 3db9622..210b8fd 100644 --- a/fw/decomp/asd_33.0.8.235_76e58ee4.anon.c +++ b/fw/decomp/asd_33.0.8.235_76e58ee4.anon.c @@ -1,7 +1,7 @@ /* asd 33.0.8.235 (76e58ee4) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1419 total in build, 1008 named, 411 anonymous + * functions: 1419 total in build, 1009 named, 410 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 407, "FUZZY": 18, "MNEM": 0, "ambiguous": 908, "cmd_protos": 0, "comments": 327, "dispatch_conflict": 0, "none": 86, "protos": 421, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -2180,24 +2180,6 @@ int sub_D10530() } /* ==== ANON size=36 ==== */ -int sub_D11EDC() -{ - int *v0; // r4 - int result; // r0 - - v0 = off_D11F00; - gp_crypto_op_0x35(); - result = asd_foreach_link_D15650(a1: (int)v0); - *v0 = 0; - v0[1] = 0; - v0[2] = 0; - v0[3] = 0; - if ( result != 0 ) - return 27; - return result; -} - -/* ==== ANON size=36 ==== */ int sub_D1055A() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF @@ -2289,6 +2271,24 @@ int sub_D104DC() } /* ==== ANON size=36 ==== */ +int sub_D11EDC() +{ + int *v0; // r4 + int result; // r0 + + v0 = off_D11F00; + asd_rpc_35(); + result = asd_foreach_link_D15650(a1: (int)v0); + *v0 = 0; + v0[1] = 0; + v0[2] = 0; + v0[3] = 0; + if ( result != 0 ) + return 27; + return result; +} + +/* ==== ANON size=36 ==== */ int sub_D1040A() { _DWORD var4[3]; // [sp+0h] [bp-4h] BYREF @@ -2538,16 +2538,6 @@ BOOL __fastcall sub_D136B4(unsigned int a1) return (sub_D11D6A() & v2) != 0; } -/* ==== ANON size=46 ==== */ -int sub_D01D36() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=48 ==== */ int __fastcall sub_D0E718(unsigned int a1, int a2) { @@ -3696,28 +3686,6 @@ LABEL_2: } /* ==== ANON size=78 ==== */ -int sub_D12DC0() -{ - unsigned __int8 *v0; // r4 - unsigned int v2; // r0 - _DWORD *v3; // r0 - - v0 = (unsigned __int8 *)off_D1319C; - *(_DWORD *)off_D1319C |= 8u; - gp_crypto_op_0x35(); - if ( asd_svc_sub_110EC(a1: 0, a2: v0 + 4, a3: 0x10u, a4: off_D12F74) != 0 ) - return 27; - v2 = off_D13124[8] - 20; - if ( v2 >= 0xE || 0x3EF5u >> v2 << 31 == 0 ) - { - v3 = off_D12F78; - *(_DWORD *)off_D12F78 = dword_D12F7C; - *v3 = 50331648; - } - return 0; -} - -/* ==== ANON size=78 ==== */ int __fastcall sub_D0D99C(unsigned int a1) { char *v2; // r0 @@ -3746,6 +3714,28 @@ int __fastcall sub_D0D99C(unsigned int a1) } /* ==== ANON size=78 ==== */ +int sub_D12DC0() +{ + unsigned __int8 *v0; // r4 + unsigned int v2; // r0 + _DWORD *v3; // r0 + + v0 = (unsigned __int8 *)off_D1319C; + *(_DWORD *)off_D1319C |= 8u; + asd_rpc_35(); + if ( asd_svc_sub_110EC(a1: 0, a2: v0 + 4, a3: 0x10u, a4: off_D12F74) != 0 ) + return 27; + v2 = off_D13124[8] - 20; + if ( v2 >= 0xE || 0x3EF5u >> v2 << 31 == 0 ) + { + v3 = off_D12F78; + *(_DWORD *)off_D12F78 = dword_D12F7C; + *v3 = 50331648; + } + return 0; +} + +/* ==== ANON size=78 ==== */ int __fastcall sub_D12CF8(int a1, int a2) { int *v2; // r6 @@ -4566,6 +4556,28 @@ int __fastcall sub_D119E8(int a1, unsigned int a2) } /* ==== ANON size=110 ==== */ +int __fastcall sub_D118BC(int a1, unsigned int a2) +{ + if ( *((_DWORD *)off_D11C70 + 6) > a2 ) + { + if ( *((_DWORD *)off_D11B90 + 113) != 0 ) + { + if ( asd_reg_read_11BE4() != 0 ) + { + sub_D0F048(a1: a2); + __asm { SVC 0x7B ; '{' } + } + } + else + { + sub_D0F048(a1: a2); + __asm { SVC 0x7B ; '{' } + } + } + return 0; +} + +/* ==== ANON size=110 ==== */ int sub_D11E68() { int v0; // r4 @@ -4583,7 +4595,7 @@ int sub_D11E68() v3 = (unsigned __int8 *)(dword_D11ED8 + 4); for ( i = 0; i != 4; ++i ) { - gp_crypto_op_0x35(); + asd_rpc_35(); v5 = v1[8] - 20; if ( v5 <= 0xD && ((1 << v5) & 0x3EF5) != 0 ) v6 = asd_link_op_if_supported(a1: i, a2: (int)v3); @@ -4598,28 +4610,6 @@ int sub_D11E68() return v0; } -/* ==== ANON size=110 ==== */ -int __fastcall sub_D118BC(int a1, unsigned int a2) -{ - if ( *((_DWORD *)off_D11C70 + 6) > a2 ) - { - if ( *((_DWORD *)off_D11B90 + 113) != 0 ) - { - if ( asd_reg_read_11BE4() != 0 ) - { - sub_D0F048(a1: a2); - __asm { SVC 0x7B ; '{' } - } - } - else - { - sub_D0F048(a1: a2); - __asm { SVC 0x7B ; '{' } - } - } - return 0; -} - /* ==== ANON size=114 ==== */ int __fastcall sub_D12F80(unsigned int a1, int a2) { diff --git a/fw/decomp/asd_33.0.8.235_76e58ee4.c b/fw/decomp/asd_33.0.8.235_76e58ee4.c index 991aba5..ecabf0f 100644 --- a/fw/decomp/asd_33.0.8.235_76e58ee4.c +++ b/fw/decomp/asd_33.0.8.235_76e58ee4.c @@ -1,7 +1,7 @@ /* asd 33.0.8.235 (76e58ee4) -- named functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1419 total in build, 1008 named, 411 anonymous + * functions: 1419 total in build, 1009 named, 410 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 407, "FUZZY": 18, "MNEM": 0, "ambiguous": 908, "cmd_protos": 0, "comments": 327, "dispatch_conflict": 0, "none": 86, "protos": 421, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -14010,6 +14010,46 @@ int asd_rpc_1043() return 1; } +/* ==== asd_rpc_3 [tier=SVCOP size=42] ==== */ +int asd_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + bzero_core(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_35 [tier=SVCOP size=42] ==== */ +int asd_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_5 [tier=SVCOP size=46] ==== */ +int asd_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_C [tier=SVCOP size=46] ==== */ +int asd_rpc_C() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== 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. @@ -15312,9 +15352,9 @@ int __fastcall asd_svc_op_201(unsigned int *a1) v3 = 1; if ( gp_operation_allocate() == 0 ) { - if ( gp_set_operation_key() != 0 ) + if ( asd_rpc_3() != 0 ) return 1; - gp_operation_set_key(); + asd_rpc_5(); return gp_cipher_update() != 0 || asd_svc_sub_273E(a1: (int)(a1 + 8), a2: v5) != a1[2]; } } @@ -15342,11 +15382,11 @@ unsigned int __fastcall asd_svc_op_202(unsigned int a1, unsigned int a2, unsigne goto LABEL_7; } v7 = gp_object_allocate(); - gp_crypto_op_0x35(); + asd_rpc_35(); if ( v7 == 0 ) goto LABEL_10; LABEL_13: - gp_operation_set_key(); + asd_rpc_5(); LABEL_14: a3 = 1; LABEL_7: @@ -15354,9 +15394,9 @@ LABEL_7: { ((void (__fastcall *)(int))loc_D16DE8)(a1: *v4 - v11); LABEL_10: - if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || gp_set_operation_key() != 0 ) + if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || asd_rpc_3() != 0 ) goto LABEL_13; - gp_operation_set_key(); + asd_rpc_5(); if ( gp_cipher_update() != 0 ) goto LABEL_14; memcpy(result: (_BYTE *)(a3 + 16), a2: v10, a3: 0x10u, a4: v9); @@ -15970,7 +16010,7 @@ int __fastcall asd_write_key_regs(int a1, int a2, int a3) unsigned int i; // r8 int j; // r7 - result = gp_crypto_op_0x35(); + result = asd_rpc_35(); for ( i = 0; i <= 1; ++i ) { for ( j = 0; j != 4; ++j ) @@ -16063,16 +16103,6 @@ int __fastcall gp_cipher_update() return 1; } -/* ==== gp_crypto_op_0x35 [tier=IDA size=42] ==== */ -int 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]. @@ -16130,16 +16160,6 @@ int __fastcall gp_operation_free() return 1; } -/* ==== gp_operation_set_key [tier=IDA size=46] ==== */ -int 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]. @@ -16152,16 +16172,6 @@ int __fastcall gp_populate_transient_object() return 1; } -/* ==== gp_set_operation_key [tier=IDA size=42] ==== */ -int 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=THUNK size=4] REF-DERIVED-NAME ==== */ // attributes: thunk int __fastcall j_asd_aux_op_D1891C(unsigned int a1, int a2) diff --git a/fw/decomp/asd_33.0.8.235_76e58ee4.index.json b/fw/decomp/asd_33.0.8.235_76e58ee4.index.json index 775f03f..a584f57 100644 --- a/fw/decomp/asd_33.0.8.235_76e58ee4.index.json +++ b/fw/decomp/asd_33.0.8.235_76e58ee4.index.json @@ -171,9 +171,9 @@ { "addr": "0xd01cd6", "ida_name": "sub_D01CD6", - "name": "gp_operation_set_key", + "name": "asd_rpc_5", "size": 46, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01d04", @@ -185,9 +185,9 @@ { "addr": "0xd01d36", "ida_name": "sub_D01D36", - "name": null, + "name": "asd_rpc_C", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01d64", @@ -206,9 +206,9 @@ { "addr": "0xd01dae", "ida_name": "sub_D01DAE", - "name": "gp_crypto_op_0x35", + "name": "asd_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01dd8", @@ -220,9 +220,9 @@ { "addr": "0xd01e0c", "ida_name": "sub_D01E0C", - "name": "gp_set_operation_key", + "name": "asd_rpc_3", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01e38", diff --git a/fw/decomp/asd_33.0.8.239_4c19d868.anon.c b/fw/decomp/asd_33.0.8.239_4c19d868.anon.c index 887d912..3d8cfba 100644 --- a/fw/decomp/asd_33.0.8.239_4c19d868.anon.c +++ b/fw/decomp/asd_33.0.8.239_4c19d868.anon.c @@ -1,7 +1,7 @@ /* asd 33.0.8.239 (4c19d868) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1419 total in build, 1010 named, 409 anonymous + * functions: 1419 total in build, 1011 named, 408 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 273, "FUZZY": 19, "MNEM": 135, "ambiguous": 908, "cmd_protos": 0, "comments": 329, "dispatch_conflict": 0, "none": 84, "protos": 423, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -2434,7 +2434,7 @@ int sub_D11F08() int v1; // r5 v0 = off_D11F30 + 1; - gp_crypto_op_0x35(); + asd_rpc_35(); v1 = asd_foreach_link_D15650(a1: (int)v0); asd_hdcp1_sub_1144(result: v0, a2: 0x10u); if ( v1 != 0 ) @@ -2526,16 +2526,6 @@ int __fastcall sub_D024C8(int a1) return result; } -/* ==== ANON size=46 ==== */ -int sub_D01D36() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=48 ==== */ int __fastcall sub_D0E774(unsigned int a1, int a2) { @@ -3686,6 +3676,28 @@ LABEL_2: } /* ==== ANON size=78 ==== */ +int sub_D12DEC() +{ + unsigned __int8 *v0; // r4 + unsigned int v2; // r0 + _DWORD *v3; // r0 + + v0 = (unsigned __int8 *)off_D1310C; + *(_DWORD *)off_D1310C |= 8u; + asd_rpc_35(); + if ( asd_svc_sub_110EC(a1: 0, a2: v0 + 4, a3: 0x10u, a4: off_D12FA0) != 0 ) + return 27; + v2 = *((_DWORD *)off_D13158 + 15) - 20; + if ( v2 >= 0x10 || 0xFEF5u >> v2 << 31 == 0 ) + { + v3 = off_D12FA4; + *(_DWORD *)off_D12FA4 = dword_D12FA8; + *v3 = 50331648; + } + return 0; +} + +/* ==== ANON size=78 ==== */ int __fastcall sub_D0D9C8(unsigned int a1) { char *v2; // r0 @@ -3753,28 +3765,6 @@ int __fastcall sub_D12D24(int a1, int a2) return result; } -/* ==== ANON size=78 ==== */ -int sub_D12DEC() -{ - unsigned __int8 *v0; // r4 - unsigned int v2; // r0 - _DWORD *v3; // r0 - - v0 = (unsigned __int8 *)off_D1310C; - *(_DWORD *)off_D1310C |= 8u; - gp_crypto_op_0x35(); - if ( asd_svc_sub_110EC(a1: 0, a2: v0 + 4, a3: 0x10u, a4: off_D12FA0) != 0 ) - return 27; - v2 = *((_DWORD *)off_D13158 + 15) - 20; - if ( v2 >= 0x10 || 0xFEF5u >> v2 << 31 == 0 ) - { - v3 = off_D12FA4; - *(_DWORD *)off_D12FA4 = dword_D12FA8; - *v3 = 50331648; - } - return 0; -} - /* ==== ANON size=82 ==== */ int __fastcall sub_D0F73C(unsigned int a1, _DWORD *a2) { @@ -4556,28 +4546,6 @@ int __fastcall sub_D118E8(int a1, unsigned int a2) } /* ==== ANON size=110 ==== */ -int __fastcall sub_D11A14(int a1, unsigned int a2) -{ - if ( *((_DWORD *)off_D11D70 + 8) > a2 ) - { - if ( *((_DWORD *)off_D11D74 + 113) != 0 ) - { - if ( asd_reg_read_11B00() != 0 ) - { - sub_D0F0A4(a1: a2); - __asm { SVC 0x7B ; '{' } - } - } - else - { - sub_D0F0A4(a1: a2); - __asm { SVC 0x7B ; '{' } - } - } - return 0; -} - -/* ==== ANON size=110 ==== */ int sub_D11E94() { int v0; // r4 @@ -4595,7 +4563,7 @@ int sub_D11E94() v3 = (unsigned __int8 *)(dword_D11F04 + 4); for ( i = 0; i != 4; ++i ) { - gp_crypto_op_0x35(); + asd_rpc_35(); v5 = *((_DWORD *)v1 + 15) - 20; if ( v5 <= 0xF && ((1 << v5) & 0xFEF5) != 0 ) v6 = asd_link_op_if_supported(a1: i, a2: (int)v3); @@ -4610,6 +4578,28 @@ int sub_D11E94() return v0; } +/* ==== ANON size=110 ==== */ +int __fastcall sub_D11A14(int a1, unsigned int a2) +{ + if ( *((_DWORD *)off_D11D70 + 8) > a2 ) + { + if ( *((_DWORD *)off_D11D74 + 113) != 0 ) + { + if ( asd_reg_read_11B00() != 0 ) + { + sub_D0F0A4(a1: a2); + __asm { SVC 0x7B ; '{' } + } + } + else + { + sub_D0F0A4(a1: a2); + __asm { SVC 0x7B ; '{' } + } + } + return 0; +} + /* ==== ANON size=122 ==== */ int __fastcall sub_D15F04(int a1, unsigned int a2) { diff --git a/fw/decomp/asd_33.0.8.239_4c19d868.c b/fw/decomp/asd_33.0.8.239_4c19d868.c index 7ed9f19..4b36618 100644 --- a/fw/decomp/asd_33.0.8.239_4c19d868.c +++ b/fw/decomp/asd_33.0.8.239_4c19d868.c @@ -1,7 +1,7 @@ /* asd 33.0.8.239 (4c19d868) -- named functions * generated by fw/ta_re.py -- do not edit * reference: asd2.elf - * functions: 1419 total in build, 1010 named, 409 anonymous + * functions: 1419 total in build, 1011 named, 408 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 273, "FUZZY": 19, "MNEM": 135, "ambiguous": 908, "cmd_protos": 0, "comments": 329, "dispatch_conflict": 0, "none": 84, "protos": 423, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -14025,6 +14025,46 @@ int asd_rpc_1043() return 1; } +/* ==== asd_rpc_3 [tier=SVCOP size=42] ==== */ +int asd_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + bzero_core(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_35 [tier=SVCOP size=42] ==== */ +int asd_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_5 [tier=SVCOP size=46] ==== */ +int asd_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== asd_rpc_C [tier=SVCOP size=46] ==== */ +int asd_rpc_C() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== asd_scan_pipe_regs [tier=MNEM 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. @@ -15327,9 +15367,9 @@ int __fastcall asd_svc_op_201(unsigned int *a1) v3 = 1; if ( gp_operation_allocate() == 0 ) { - if ( gp_set_operation_key() != 0 ) + if ( asd_rpc_3() != 0 ) return 1; - gp_operation_set_key(); + asd_rpc_5(); return gp_cipher_update() != 0 || asd_svc_sub_273E(a1: (int)(a1 + 8), a2: v5) != a1[2]; } } @@ -15357,11 +15397,11 @@ unsigned int __fastcall asd_svc_op_202(unsigned int a1, unsigned int a2, unsigne goto LABEL_7; } v7 = gp_object_allocate(); - gp_crypto_op_0x35(); + asd_rpc_35(); if ( v7 == 0 ) goto LABEL_10; LABEL_13: - gp_operation_set_key(); + asd_rpc_5(); LABEL_14: a3 = 1; LABEL_7: @@ -15369,9 +15409,9 @@ LABEL_7: { ((void (__fastcall *)(int))loc_D16E5C)(a1: *v4 - v11); LABEL_10: - if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || gp_set_operation_key() != 0 ) + if ( gp_populate_transient_object() != 0 || gp_operation_allocate() != 0 || asd_rpc_3() != 0 ) goto LABEL_13; - gp_operation_set_key(); + asd_rpc_5(); if ( gp_cipher_update() != 0 ) goto LABEL_14; memcpy(result: (_BYTE *)(a3 + 16), a2: v10, a3: 0x10u, a4: v9); @@ -16046,7 +16086,7 @@ int __fastcall asd_write_key_regs(int a1, int a2, int a3) unsigned int i; // r8 int j; // r7 - result = gp_crypto_op_0x35(); + result = asd_rpc_35(); for ( i = 0; i <= 1; ++i ) { for ( j = 0; j != 4; ++j ) @@ -16139,16 +16179,6 @@ int __fastcall gp_cipher_update() return 1; } -/* ==== gp_crypto_op_0x35 [tier=IDA size=42] ==== */ -int 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]. @@ -16206,16 +16236,6 @@ int __fastcall gp_operation_free() return 1; } -/* ==== gp_operation_set_key [tier=IDA size=46] ==== */ -int 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]. @@ -16228,16 +16248,6 @@ int __fastcall gp_populate_transient_object() return 1; } -/* ==== gp_set_operation_key [tier=IDA size=42] ==== */ -int 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=THUNK size=4] REF-DERIVED-NAME ==== */ // attributes: thunk int __fastcall j_asd_aux_op_D1891C(unsigned int a1, int a2) diff --git a/fw/decomp/asd_33.0.8.239_4c19d868.index.json b/fw/decomp/asd_33.0.8.239_4c19d868.index.json index 954426a..496e4ce 100644 --- a/fw/decomp/asd_33.0.8.239_4c19d868.index.json +++ b/fw/decomp/asd_33.0.8.239_4c19d868.index.json @@ -171,9 +171,9 @@ { "addr": "0xd01cd6", "ida_name": "sub_D01CD6", - "name": "gp_operation_set_key", + "name": "asd_rpc_5", "size": 46, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01d04", @@ -185,9 +185,9 @@ { "addr": "0xd01d36", "ida_name": "sub_D01D36", - "name": null, + "name": "asd_rpc_C", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0xd01d64", @@ -206,9 +206,9 @@ { "addr": "0xd01dae", "ida_name": "sub_D01DAE", - "name": "gp_crypto_op_0x35", + "name": "asd_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01dd8", @@ -220,9 +220,9 @@ { "addr": "0xd01e0c", "ida_name": "sub_D01E0C", - "name": "gp_set_operation_key", + "name": "asd_rpc_3", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0xd01e38", diff --git a/fw/decomp/gcp.summary.json b/fw/decomp/gcp.summary.json index 1b6214f..4109bcd 100644 --- a/fw/decomp/gcp.summary.json +++ b/fw/decomp/gcp.summary.json @@ -59,7 +59,7 @@ "0x4": "0x403704", "0x5": "0x402878" }, - "named": 106, + "named": 110, "stats": { "EXACT": 61, "MNEM": 42, @@ -98,7 +98,7 @@ "0x4": "0x40370c", "0x5": "0x402884" }, - "named": 97, + "named": 101, "stats": { "EXACT": 52, "MNEM": 34, @@ -137,7 +137,7 @@ "0x4": "0x40370c", "0x5": "0x402884" }, - "named": 97, + "named": 98, "stats": { "EXACT": 48, "MNEM": 29, @@ -176,7 +176,7 @@ "0x4": "0x40370c", "0x5": "0x402884" }, - "named": 97, + "named": 98, "stats": { "EXACT": 50, "MNEM": 27, @@ -218,7 +218,7 @@ "0x4": "0x40394c", "0x5": "0x402930" }, - "named": 95, + "named": 96, "stats": { "EXACT": 44, "MNEM": 21, @@ -260,7 +260,7 @@ "0x4": "0x40394c", "0x5": "0x402930" }, - "named": 95, + "named": 96, "stats": { "EXACT": 65, "MNEM": 0, @@ -302,7 +302,7 @@ "0x4": "0x403968", "0x5": "0x402940" }, - "named": 94, + "named": 95, "stats": { "EXACT": 43, "MNEM": 21, @@ -344,7 +344,7 @@ "0x4": "0x403968", "0x5": "0x402940" }, - "named": 94, + "named": 95, "stats": { "EXACT": 46, "MNEM": 18, @@ -386,7 +386,7 @@ "0x4": "0x403968", "0x5": "0x402940" }, - "named": 94, + "named": 95, "stats": { "EXACT": 46, "MNEM": 18, @@ -428,7 +428,7 @@ "0x4": "0x403968", "0x5": "0x402940" }, - "named": 94, + "named": 95, "stats": { "EXACT": 46, "MNEM": 18, diff --git a/fw/decomp/gcp_22.0.0.53_14b24632.anon.c b/fw/decomp/gcp_22.0.0.53_14b24632.anon.c index a113b82..52be844 100644 --- a/fw/decomp/gcp_22.0.0.53_14b24632.anon.c +++ b/fw/decomp/gcp_22.0.0.53_14b24632.anon.c @@ -1,7 +1,7 @@ /* gcp 22.0.0.53 (14b24632) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: gcp_22.0.4.50_81b082b4.elf - * functions: 119 total in build, 110 named, 9 anonymous + * functions: 119 total in build, 111 named, 8 anonymous * porting tiers: {"DISPATCH": 5, "EXACT": 52, "FUZZY": 5, "MNEM": 34, "ambiguous": 8, "cmd_protos": 14, "comments": 0, "dispatch_conflict": 1, "none": 15, "protos": 6, "relabelled": 1, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -77,16 +77,6 @@ char *__fastcall sub_405D80(int a1, _BYTE *a2) } } -/* ==== ANON size=46 ==== */ -int sub_4051D6() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=48 ==== */ int __fastcall sub_401090(_BYTE *a1, int a2, struct tee_fmt_state *a3, int *a4) { diff --git a/fw/decomp/gcp_22.0.0.53_14b24632.c b/fw/decomp/gcp_22.0.0.53_14b24632.c index 822baaa..b76d2bc 100644 --- a/fw/decomp/gcp_22.0.0.53_14b24632.c +++ b/fw/decomp/gcp_22.0.0.53_14b24632.c @@ -1,7 +1,7 @@ /* gcp 22.0.0.53 (14b24632) -- named functions * generated by fw/ta_re.py -- do not edit * reference: gcp_22.0.4.50_81b082b4.elf - * functions: 119 total in build, 110 named, 9 anonymous + * functions: 119 total in build, 111 named, 8 anonymous * porting tiers: {"DISPATCH": 5, "EXACT": 52, "FUZZY": 5, "MNEM": 34, "ambiguous": 8, "cmd_protos": 14, "comments": 0, "dispatch_conflict": 1, "none": 15, "protos": 6, "relabelled": 1, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -989,7 +989,7 @@ int __fastcall gcp_cmd04_GetContentKey(struct gcp_ctx *ctx, struct ta_params *pa v16 = v10; goto LABEL_12; } - if ( gcp_sysdrv_rpc_30() == 0 && gcp_sysdrv_rpc_33() == 0 && gcp_sysdrv_rpc_1() == 0 && gcp_sysdrv_rpc_3() == 0 ) + if ( gcp_sysdrv_rpc_30() == 0 && gcp_sysdrv_rpc_33() == 0 && gcp_sysdrv_rpc_1() == 0 && gcp_rpc_3() == 0 ) goto LABEL_19; v6 = 1051; goto LABEL_9; @@ -1000,7 +1000,7 @@ int __fastcall gcp_cmd04_GetContentKey(struct gcp_ctx *ctx, struct ta_params *pa { ((void (__fastcall *)(int))loc_405D20)(a1: *v2 - v17); LABEL_19: - gcp_sysdrv_rpc_5(); + gcp_rpc_5(); v6 = gcp_sysdrv_rpc_7(); if ( v6 != 0 ) v6 = 1052; @@ -1153,7 +1153,7 @@ int __fastcall gcp_cmdFE02(struct gcp_ctx *ctx, struct ta_params *params) if ( gcp_sysdrv_rpc_30() != 0 || (v19 = 16, v17 = -1073741824, v18 = ctx->crypto[(__int16)v8].rest, gcp_sysdrv_rpc_33() != 0) || gcp_sysdrv_rpc_1() != 0 - || gcp_sysdrv_rpc_3() != 0 ) + || gcp_rpc_3() != 0 ) { v7 = 882; goto LABEL_17; @@ -1165,7 +1165,7 @@ int __fastcall gcp_cmdFE02(struct gcp_ctx *ctx, struct ta_params *params) { ((void (__fastcall *)(int))loc_405D20)(a1: *v2 - v28); LABEL_25: - gcp_sysdrv_rpc_5(); + gcp_rpc_5(); v15 = &v20; if ( gcp_sysdrv_rpc_7() != 0 ) { @@ -1329,7 +1329,7 @@ LABEL_13: } else { - if ( gcp_sysdrv_rpc_3() != 0 ) + if ( gcp_rpc_3() != 0 ) { v7 = 1299; } @@ -2095,7 +2095,7 @@ int __fastcall gcp_cmdFE0A_QueryAccessibilityAttributes__h8(struct gcp_access_at a1->tag40[3] = HIBYTE(v5); a1->tag40[2] = BYTE2(v5); a1->tag40[1] = BYTE1(v5); - gcp_sysdrv_rpc_35(); + gcp_rpc_35(); v6 = ((int (__fastcall *)(struct gcp_access_attrs *))loc_404D0C)(a1); if ( v6 != 0 ) { @@ -2279,7 +2279,7 @@ int __fastcall gcp_cmdFE10_StartKeyRefreshCryptoSession(struct gcp_ctx *ctx, str if ( v8 ) { v9 = &ctx->crypto[(__int16)v6].rest[16]; - gcp_sysdrv_rpc_35(); + gcp_rpc_35(); p_out1950 = ¶ms->out1950; v11 = *((_DWORD *)v9 + 1); v12 = *((_DWORD *)v9 + 2); @@ -3590,6 +3590,46 @@ int __fastcall gcp_missed_fn_4025F8(int a1, int a2, int a3) return v28; } +/* ==== gcp_rpc_3 [tier=SVCOP size=42] ==== */ +int gcp_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== gcp_rpc_35 [tier=SVCOP size=42] ==== */ +int gcp_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== gcp_rpc_5 [tier=SVCOP size=46] ==== */ +int gcp_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== gcp_rpc_E [tier=SVCOP size=46] ==== */ +int gcp_rpc_E() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== gcp_runtime_globals [tier=EXACT size=4] ==== */ int *gcp_runtime_globals() { @@ -3763,16 +3803,6 @@ int __fastcall gcp_sysdrv_rpc_109D(int a1, int a2, int a3, int a4, int a5, int a return 1; } -/* ==== gcp_sysdrv_rpc_3 [tier=IDA size=42] ==== */ -int gcp_sysdrv_rpc_3() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== gcp_sysdrv_rpc_30 [tier=MNEM size=50] ==== */ int gcp_sysdrv_rpc_30() { @@ -3803,26 +3833,6 @@ int gcp_sysdrv_rpc_33() return 1; } -/* ==== gcp_sysdrv_rpc_35 [tier=IDA size=42] ==== */ -int gcp_sysdrv_rpc_35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== gcp_sysdrv_rpc_5 [tier=IDA size=46] ==== */ -int gcp_sysdrv_rpc_5() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== gcp_sysdrv_rpc_7 [tier=EXACT size=50] ==== */ int gcp_sysdrv_rpc_7() { diff --git a/fw/decomp/gcp_22.0.0.53_14b24632.index.json b/fw/decomp/gcp_22.0.0.53_14b24632.index.json index 3d8e4b4..4c2d877 100644 --- a/fw/decomp/gcp_22.0.0.53_14b24632.index.json +++ b/fw/decomp/gcp_22.0.0.53_14b24632.index.json @@ -612,9 +612,9 @@ { "addr": "0x405068", "ida_name": "sub_405068", - "name": "gcp_sysdrv_rpc_5", + "name": "gcp_rpc_5", "size": 46, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x405098", @@ -640,9 +640,9 @@ { "addr": "0x405178", "ida_name": "sub_405178", - "name": "gcp_sysdrv_rpc_35", + "name": "gcp_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x4051a2", @@ -654,9 +654,9 @@ { "addr": "0x4051d6", "ida_name": "sub_4051D6", - "name": null, + "name": "gcp_rpc_E", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x405204", @@ -675,9 +675,9 @@ { "addr": "0x405294", "ida_name": "sub_405294", - "name": "gcp_sysdrv_rpc_3", + "name": "gcp_rpc_3", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x4053d4", diff --git a/fw/decomp/gcp_22.0.0.57_713166b8.anon.c b/fw/decomp/gcp_22.0.0.57_713166b8.anon.c index 36b0765..78bad5c 100644 --- a/fw/decomp/gcp_22.0.0.57_713166b8.anon.c +++ b/fw/decomp/gcp_22.0.0.57_713166b8.anon.c @@ -1,7 +1,7 @@ /* gcp 22.0.0.57 (713166b8) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: gcp_22.0.4.50_81b082b4.elf - * functions: 119 total in build, 110 named, 9 anonymous + * functions: 119 total in build, 111 named, 8 anonymous * porting tiers: {"DISPATCH": 5, "EXACT": 48, "FUZZY": 5, "MNEM": 29, "ambiguous": 8, "cmd_protos": 14, "comments": 0, "dispatch_conflict": 1, "none": 24, "protos": 6, "relabelled": 1, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -77,16 +77,6 @@ char *__fastcall sub_405DD4(int a1, _BYTE *a2) } } -/* ==== ANON size=46 ==== */ -int sub_4051E2() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=48 ==== */ int __fastcall sub_401090(_BYTE *a1, int a2, struct tee_fmt_state *a3, int *a4) { diff --git a/fw/decomp/gcp_22.0.0.57_713166b8.c b/fw/decomp/gcp_22.0.0.57_713166b8.c index 38c85af..10240db 100644 --- a/fw/decomp/gcp_22.0.0.57_713166b8.c +++ b/fw/decomp/gcp_22.0.0.57_713166b8.c @@ -1,7 +1,7 @@ /* gcp 22.0.0.57 (713166b8) -- named functions * generated by fw/ta_re.py -- do not edit * reference: gcp_22.0.4.50_81b082b4.elf - * functions: 119 total in build, 110 named, 9 anonymous + * functions: 119 total in build, 111 named, 8 anonymous * porting tiers: {"DISPATCH": 5, "EXACT": 48, "FUZZY": 5, "MNEM": 29, "ambiguous": 8, "cmd_protos": 14, "comments": 0, "dispatch_conflict": 1, "none": 24, "protos": 6, "relabelled": 1, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -200,10 +200,10 @@ int __fastcall gcp_QueryOutputID(int a1, _DWORD *a2, int a3, int a4) v7 = (v6 != -9) & __CFADD__(v6, 9); if ( v7 || (unsigned int)(v6 + 8) <= a2[518] && v5 + 4 <= a2[261] ) { - v8 = gcp_rpc_108(); + v8 = gcp_asd_rpc_108(); if ( v8 == 0 ) { - v8 = gcp_rpc_107(); + v8 = gcp_asd_rpc_107(); if ( v8 == 0 ) { v9 = (char *)a2 + v6; @@ -784,6 +784,36 @@ LABEL_45: return result; } +/* ==== gcp_asd_rpc_107 [tier=IDA size=34] ==== */ +int gcp_asd_rpc_107() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== gcp_asd_rpc_108 [tier=IDA size=34] ==== */ +int gcp_asd_rpc_108() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== gcp_asd_rpc_202 [tier=IDA size=38] ==== */ +int gcp_asd_rpc_202() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + /* ==== gcp_call_once_init [tier=EXACT size=30] ==== */ int __fastcall gcp_call_once_init(int (__fastcall *a1)(_DWORD, _DWORD, _DWORD, _DWORD)) { @@ -923,7 +953,7 @@ int __fastcall gcp_cmd04_GetContentKey(struct gcp_ctx *ctx, struct ta_params *pa v16 = v10; goto LABEL_12; } - if ( gcp_sysdrv_rpc_30() == 0 && gcp_sysdrv_rpc_33() == 0 && gcp_sysdrv_rpc_1() == 0 && gcp_sysdrv_rpc_3() == 0 ) + if ( gcp_sysdrv_rpc_30() == 0 && gcp_sysdrv_rpc_33() == 0 && gcp_sysdrv_rpc_1() == 0 && gcp_rpc_3() == 0 ) goto LABEL_19; v6 = 1051; goto LABEL_9; @@ -934,7 +964,7 @@ int __fastcall gcp_cmd04_GetContentKey(struct gcp_ctx *ctx, struct ta_params *pa { ((void (__fastcall *)(int))loc_405C24)(a1: *v2 - v17); LABEL_19: - gcp_sysdrv_rpc_5(); + gcp_rpc_5(); v6 = gcp_sysdrv_rpc_7(); if ( v6 != 0 ) v6 = 1052; @@ -942,7 +972,7 @@ LABEL_9: if ( v6 == 0 ) { LABEL_12: - if ( gcp_rpc_202() != 0 ) + if ( gcp_asd_rpc_202() != 0 ) { v6 = 1045; gcp_log(a1: 0, a2: "AMD_TA_GCP: tlDrmApiGetObfKey status = 0x%x\n", 1045); @@ -1087,7 +1117,7 @@ int __fastcall gcp_cmdFE02(struct gcp_ctx *ctx, struct ta_params *params) if ( gcp_sysdrv_rpc_30() != 0 || (v19 = 16, v17 = -1073741824, v18 = ctx->crypto[(__int16)v8].rest, gcp_sysdrv_rpc_33() != 0) || gcp_sysdrv_rpc_1() != 0 - || gcp_sysdrv_rpc_3() != 0 ) + || gcp_rpc_3() != 0 ) { v7 = 882; goto LABEL_17; @@ -1099,7 +1129,7 @@ int __fastcall gcp_cmdFE02(struct gcp_ctx *ctx, struct ta_params *params) { ((void (__fastcall *)(int))loc_405C24)(a1: *v2 - v28); LABEL_25: - gcp_sysdrv_rpc_5(); + gcp_rpc_5(); v15 = &v20; if ( gcp_sysdrv_rpc_7() != 0 ) { @@ -1110,7 +1140,7 @@ LABEL_25: LABEL_14: LODWORD(params[1].arg18) = *(_DWORD *)¶ms->data20[20]; params = (struct ta_params *)((char *)params + 6512); - if ( gcp_rpc_202() != 0 ) + if ( gcp_asd_rpc_202() != 0 ) { v7 = 880; } @@ -1263,7 +1293,7 @@ LABEL_13: } else { - if ( gcp_sysdrv_rpc_3() != 0 ) + if ( gcp_rpc_3() != 0 ) { v7 = 1299; } @@ -2031,7 +2061,7 @@ int __fastcall gcp_cmdFE0A_QueryAccessibilityAttributes__h8(struct gcp_access_at a1->tag40[3] = HIBYTE(v5); a1->tag40[2] = BYTE2(v5); a1->tag40[1] = BYTE1(v5); - gcp_sysdrv_rpc_35(); + gcp_rpc_35(); v6 = ((int (__fastcall *)(struct gcp_access_attrs *))loc_404D18)(a1); if ( v6 != 0 ) { @@ -2214,7 +2244,7 @@ int __fastcall gcp_cmdFE10_StartKeyRefreshCryptoSession(struct gcp_ctx *ctx, str if ( v8 ) { v9 = &ctx->crypto[(__int16)v6].rest[16]; - gcp_sysdrv_rpc_35(); + gcp_rpc_35(); p_out1950 = ¶ms->out1950; v11 = *((_DWORD *)v9 + 1); v12 = *((_DWORD *)v9 + 2); @@ -3526,28 +3556,28 @@ int __fastcall gcp_missed_fn_4025F8(int a1, int a2, int a3) return v28; } -/* ==== gcp_rpc_107 [tier=SVCOP size=34] ==== */ -int gcp_rpc_107() +/* ==== gcp_rpc_109 [tier=SVCOP size=32] ==== */ +int gcp_rpc_109() { - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF gcp_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 2; } -/* ==== gcp_rpc_108 [tier=SVCOP size=34] ==== */ -int gcp_rpc_108() +/* ==== gcp_rpc_200 [tier=SVCOP size=32] ==== */ +int gcp_rpc_200() { - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF gcp_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 2; } -/* ==== gcp_rpc_109 [tier=SVCOP size=32] ==== */ -int gcp_rpc_109() +/* ==== gcp_rpc_201 [tier=SVCOP size=32] ==== */ +int gcp_rpc_201() { _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF @@ -3556,8 +3586,8 @@ int gcp_rpc_109() return 2; } -/* ==== gcp_rpc_200 [tier=SVCOP size=32] ==== */ -int gcp_rpc_200() +/* ==== gcp_rpc_204 [tier=SVCOP size=32] ==== */ +int gcp_rpc_204() { _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF @@ -3566,18 +3596,18 @@ int gcp_rpc_200() return 2; } -/* ==== gcp_rpc_201 [tier=SVCOP size=32] ==== */ -int gcp_rpc_201() +/* ==== gcp_rpc_3 [tier=SVCOP size=42] ==== */ +int gcp_rpc_3() { - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + gcp_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } - return 2; + return 1; } -/* ==== gcp_rpc_202 [tier=SVCOP size=38] ==== */ -int gcp_rpc_202() +/* ==== gcp_rpc_304 [tier=SVCOP size=28] ==== */ +int gcp_rpc_304() { _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF @@ -3586,8 +3616,8 @@ int gcp_rpc_202() return 2; } -/* ==== gcp_rpc_204 [tier=SVCOP size=32] ==== */ -int gcp_rpc_204() +/* ==== gcp_rpc_305 [tier=SVCOP size=32] ==== */ +int gcp_rpc_305() { _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF @@ -3596,24 +3626,34 @@ int gcp_rpc_204() return 2; } -/* ==== gcp_rpc_304 [tier=SVCOP size=28] ==== */ -int gcp_rpc_304() +/* ==== gcp_rpc_35 [tier=SVCOP size=42] ==== */ +int gcp_rpc_35() { - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF gcp_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 2; + return 1; } -/* ==== gcp_rpc_305 [tier=SVCOP size=32] ==== */ -int gcp_rpc_305() +/* ==== gcp_rpc_5 [tier=SVCOP size=46] ==== */ +int gcp_rpc_5() { - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF gcp_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 2; + return 1; +} + +/* ==== gcp_rpc_E [tier=SVCOP size=46] ==== */ +int gcp_rpc_E() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; } /* ==== gcp_runtime_globals [tier=EXACT size=4] ==== */ @@ -3789,16 +3829,6 @@ int __fastcall gcp_sysdrv_rpc_109D(int a1, int a2, int a3, int a4, int a5, int a return 1; } -/* ==== gcp_sysdrv_rpc_3 [tier=IDA size=42] ==== */ -int gcp_sysdrv_rpc_3() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== gcp_sysdrv_rpc_30 [tier=MNEM size=50] ==== */ int gcp_sysdrv_rpc_30() { @@ -3829,26 +3859,6 @@ int gcp_sysdrv_rpc_33() return 1; } -/* ==== gcp_sysdrv_rpc_35 [tier=IDA size=42] ==== */ -int gcp_sysdrv_rpc_35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== gcp_sysdrv_rpc_5 [tier=IDA size=46] ==== */ -int gcp_sysdrv_rpc_5() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== gcp_sysdrv_rpc_7 [tier=EXACT size=50] ==== */ int gcp_sysdrv_rpc_7() { diff --git a/fw/decomp/gcp_22.0.0.57_713166b8.index.json b/fw/decomp/gcp_22.0.0.57_713166b8.index.json index da9b64b..f6de78c 100644 --- a/fw/decomp/gcp_22.0.0.57_713166b8.index.json +++ b/fw/decomp/gcp_22.0.0.57_713166b8.index.json @@ -612,9 +612,9 @@ { "addr": "0x405074", "ida_name": "sub_405074", - "name": "gcp_sysdrv_rpc_5", + "name": "gcp_rpc_5", "size": 46, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x4050a4", @@ -640,9 +640,9 @@ { "addr": "0x405184", "ida_name": "sub_405184", - "name": "gcp_sysdrv_rpc_35", + "name": "gcp_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x4051ae", @@ -654,9 +654,9 @@ { "addr": "0x4051e2", "ida_name": "sub_4051E2", - "name": null, + "name": "gcp_rpc_E", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x405210", @@ -675,9 +675,9 @@ { "addr": "0x4052a0", "ida_name": "sub_4052A0", - "name": "gcp_sysdrv_rpc_3", + "name": "gcp_rpc_3", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x4053e0", @@ -752,9 +752,9 @@ { "addr": "0x405c82", "ida_name": "sub_405C82", - "name": "gcp_rpc_108", + "name": "gcp_asd_rpc_108", "size": 34, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x405ca4", @@ -766,9 +766,9 @@ { "addr": "0x405cc4", "ida_name": "sub_405CC4", - "name": "gcp_rpc_107", + "name": "gcp_asd_rpc_107", "size": 34, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x405ce6", @@ -787,9 +787,9 @@ { "addr": "0x405d22", "ida_name": "sub_405D22", - "name": "gcp_rpc_202", + "name": "gcp_asd_rpc_202", "size": 38, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x405d48", diff --git a/fw/decomp/gcp_22.0.0.60_38628e32.anon.c b/fw/decomp/gcp_22.0.0.60_38628e32.anon.c index 116ea80..eeb9cfc 100644 --- a/fw/decomp/gcp_22.0.0.60_38628e32.anon.c +++ b/fw/decomp/gcp_22.0.0.60_38628e32.anon.c @@ -1,7 +1,7 @@ /* gcp 22.0.0.60 (38628e32) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: gcp_22.0.4.50_81b082b4.elf - * functions: 119 total in build, 110 named, 9 anonymous + * functions: 119 total in build, 111 named, 8 anonymous * porting tiers: {"DISPATCH": 5, "EXACT": 50, "FUZZY": 5, "MNEM": 27, "ambiguous": 8, "cmd_protos": 14, "comments": 0, "dispatch_conflict": 1, "none": 24, "protos": 6, "relabelled": 1, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -77,16 +77,6 @@ char *__fastcall sub_405DC4(int a1, _BYTE *a2) } } -/* ==== ANON size=46 ==== */ -int sub_4051FE() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=48 ==== */ int __fastcall sub_401090(_BYTE *a1, int a2, struct tee_fmt_state *a3, int *a4) { diff --git a/fw/decomp/gcp_22.0.0.60_38628e32.c b/fw/decomp/gcp_22.0.0.60_38628e32.c index 96f20e4..f72479d 100644 --- a/fw/decomp/gcp_22.0.0.60_38628e32.c +++ b/fw/decomp/gcp_22.0.0.60_38628e32.c @@ -1,7 +1,7 @@ /* gcp 22.0.0.60 (38628e32) -- named functions * generated by fw/ta_re.py -- do not edit * reference: gcp_22.0.4.50_81b082b4.elf - * functions: 119 total in build, 110 named, 9 anonymous + * functions: 119 total in build, 111 named, 8 anonymous * porting tiers: {"DISPATCH": 5, "EXACT": 50, "FUZZY": 5, "MNEM": 27, "ambiguous": 8, "cmd_protos": 14, "comments": 0, "dispatch_conflict": 1, "none": 24, "protos": 6, "relabelled": 1, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -200,10 +200,10 @@ int __fastcall gcp_QueryOutputID(int a1, _DWORD *a2, int a3, int a4) v7 = (v6 != -9) & __CFADD__(v6, 9); if ( v7 || (unsigned int)(v6 + 8) <= a2[518] && v5 + 4 <= a2[261] ) { - v8 = gcp_rpc_108(); + v8 = gcp_asd_rpc_108(); if ( v8 == 0 ) { - v8 = gcp_rpc_107(); + v8 = gcp_asd_rpc_107(); if ( v8 == 0 ) { v9 = (char *)a2 + v6; @@ -784,6 +784,36 @@ LABEL_45: return result; } +/* ==== gcp_asd_rpc_107 [tier=IDA size=34] ==== */ +int gcp_asd_rpc_107() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== gcp_asd_rpc_108 [tier=IDA size=34] ==== */ +int gcp_asd_rpc_108() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== gcp_asd_rpc_202 [tier=IDA size=38] ==== */ +int gcp_asd_rpc_202() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + /* ==== gcp_call_once_init [tier=EXACT size=30] ==== */ int __fastcall gcp_call_once_init(int (__fastcall *a1)(_DWORD, _DWORD, _DWORD, _DWORD)) { @@ -923,7 +953,7 @@ int __fastcall gcp_cmd04_GetContentKey(struct gcp_ctx *ctx, struct ta_params *pa v16 = v10; goto LABEL_12; } - if ( gcp_sysdrv_rpc_30() == 0 && gcp_sysdrv_rpc_33() == 0 && gcp_sysdrv_rpc_1() == 0 && gcp_sysdrv_rpc_3() == 0 ) + if ( gcp_sysdrv_rpc_30() == 0 && gcp_sysdrv_rpc_33() == 0 && gcp_sysdrv_rpc_1() == 0 && gcp_rpc_3() == 0 ) goto LABEL_19; v6 = 1051; goto LABEL_9; @@ -934,7 +964,7 @@ int __fastcall gcp_cmd04_GetContentKey(struct gcp_ctx *ctx, struct ta_params *pa { ((void (__fastcall *)(int))loc_405C40)(a1: *v2 - v17); LABEL_19: - gcp_sysdrv_rpc_5(); + gcp_rpc_5(); v6 = gcp_sysdrv_rpc_7(); if ( v6 != 0 ) v6 = 1052; @@ -942,7 +972,7 @@ LABEL_9: if ( v6 == 0 ) { LABEL_12: - if ( gcp_rpc_202() != 0 ) + if ( gcp_asd_rpc_202() != 0 ) { v6 = 1045; gcp_log(a1: 0, a2: "AMD_TA_GCP: tlDrmApiGetObfKey status = 0x%x\n", 1045); @@ -1087,7 +1117,7 @@ int __fastcall gcp_cmdFE02(struct gcp_ctx *ctx, struct ta_params *params) if ( gcp_sysdrv_rpc_30() != 0 || (v19 = 16, v17 = -1073741824, v18 = ctx->crypto[(__int16)v8].rest, gcp_sysdrv_rpc_33() != 0) || gcp_sysdrv_rpc_1() != 0 - || gcp_sysdrv_rpc_3() != 0 ) + || gcp_rpc_3() != 0 ) { v7 = 882; goto LABEL_17; @@ -1099,7 +1129,7 @@ int __fastcall gcp_cmdFE02(struct gcp_ctx *ctx, struct ta_params *params) { ((void (__fastcall *)(int))loc_405C40)(a1: *v2 - v28); LABEL_25: - gcp_sysdrv_rpc_5(); + gcp_rpc_5(); v15 = &v20; if ( gcp_sysdrv_rpc_7() != 0 ) { @@ -1110,7 +1140,7 @@ LABEL_25: LABEL_14: LODWORD(params[1].arg18) = *(_DWORD *)¶ms->data20[20]; params = (struct ta_params *)((char *)params + 6512); - if ( gcp_rpc_202() != 0 ) + if ( gcp_asd_rpc_202() != 0 ) { v7 = 880; } @@ -1263,7 +1293,7 @@ LABEL_13: } else { - if ( gcp_sysdrv_rpc_3() != 0 ) + if ( gcp_rpc_3() != 0 ) { v7 = 1299; } @@ -2034,7 +2064,7 @@ int __fastcall gcp_cmdFE0A_QueryAccessibilityAttributes__h8(struct gcp_access_at a1->tag40[3] = HIBYTE(v5); a1->tag40[2] = BYTE2(v5); a1->tag40[1] = BYTE1(v5); - gcp_sysdrv_rpc_35(); + gcp_rpc_35(); v6 = ((int (__fastcall *)(struct gcp_access_attrs *))loc_404D34)(a1); if ( v6 != 0 ) { @@ -2217,7 +2247,7 @@ int __fastcall gcp_cmdFE10_StartKeyRefreshCryptoSession(struct gcp_ctx *ctx, str if ( v8 ) { v9 = &ctx->crypto[(__int16)v6].rest[16]; - gcp_sysdrv_rpc_35(); + gcp_rpc_35(); p_out1950 = ¶ms->out1950; v11 = *((_DWORD *)v9 + 1); v12 = *((_DWORD *)v9 + 2); @@ -3529,28 +3559,28 @@ int __fastcall gcp_missed_fn_4025F8(int a1, int a2, int a3) return v28; } -/* ==== gcp_rpc_107 [tier=SVCOP size=34] ==== */ -int gcp_rpc_107() +/* ==== gcp_rpc_109 [tier=SVCOP size=32] ==== */ +int gcp_rpc_109() { - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF gcp_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 2; } -/* ==== gcp_rpc_108 [tier=SVCOP size=34] ==== */ -int gcp_rpc_108() +/* ==== gcp_rpc_200 [tier=SVCOP size=32] ==== */ +int gcp_rpc_200() { - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF gcp_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 2; } -/* ==== gcp_rpc_109 [tier=SVCOP size=32] ==== */ -int gcp_rpc_109() +/* ==== gcp_rpc_201 [tier=SVCOP size=32] ==== */ +int gcp_rpc_201() { _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF @@ -3559,8 +3589,8 @@ int gcp_rpc_109() return 2; } -/* ==== gcp_rpc_200 [tier=SVCOP size=32] ==== */ -int gcp_rpc_200() +/* ==== gcp_rpc_204 [tier=SVCOP size=32] ==== */ +int gcp_rpc_204() { _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF @@ -3569,18 +3599,18 @@ int gcp_rpc_200() return 2; } -/* ==== gcp_rpc_201 [tier=SVCOP size=32] ==== */ -int gcp_rpc_201() +/* ==== gcp_rpc_3 [tier=SVCOP size=42] ==== */ +int gcp_rpc_3() { - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + gcp_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } - return 2; + return 1; } -/* ==== gcp_rpc_202 [tier=SVCOP size=38] ==== */ -int gcp_rpc_202() +/* ==== gcp_rpc_304 [tier=SVCOP size=28] ==== */ +int gcp_rpc_304() { _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF @@ -3589,8 +3619,8 @@ int gcp_rpc_202() return 2; } -/* ==== gcp_rpc_204 [tier=SVCOP size=32] ==== */ -int gcp_rpc_204() +/* ==== gcp_rpc_305 [tier=SVCOP size=32] ==== */ +int gcp_rpc_305() { _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF @@ -3599,24 +3629,34 @@ int gcp_rpc_204() return 2; } -/* ==== gcp_rpc_304 [tier=SVCOP size=28] ==== */ -int gcp_rpc_304() +/* ==== gcp_rpc_35 [tier=SVCOP size=42] ==== */ +int gcp_rpc_35() { - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF gcp_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 2; + return 1; } -/* ==== gcp_rpc_305 [tier=SVCOP size=32] ==== */ -int gcp_rpc_305() +/* ==== gcp_rpc_5 [tier=SVCOP size=46] ==== */ +int gcp_rpc_5() { - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF gcp_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 2; + return 1; +} + +/* ==== gcp_rpc_E [tier=SVCOP size=46] ==== */ +int gcp_rpc_E() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; } /* ==== gcp_runtime_globals [tier=EXACT size=4] ==== */ @@ -3792,16 +3832,6 @@ int __fastcall gcp_sysdrv_rpc_109D(int a1, int a2, int a3, int a4, int a5, int a return 1; } -/* ==== gcp_sysdrv_rpc_3 [tier=IDA size=42] ==== */ -int gcp_sysdrv_rpc_3() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== gcp_sysdrv_rpc_30 [tier=MNEM size=50] ==== */ int gcp_sysdrv_rpc_30() { @@ -3832,26 +3862,6 @@ int gcp_sysdrv_rpc_33() return 1; } -/* ==== gcp_sysdrv_rpc_35 [tier=IDA size=42] ==== */ -int gcp_sysdrv_rpc_35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== gcp_sysdrv_rpc_5 [tier=IDA size=46] ==== */ -int gcp_sysdrv_rpc_5() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== gcp_sysdrv_rpc_7 [tier=EXACT size=50] ==== */ int gcp_sysdrv_rpc_7() { diff --git a/fw/decomp/gcp_22.0.0.60_38628e32.index.json b/fw/decomp/gcp_22.0.0.60_38628e32.index.json index c08b062..ee6cb78 100644 --- a/fw/decomp/gcp_22.0.0.60_38628e32.index.json +++ b/fw/decomp/gcp_22.0.0.60_38628e32.index.json @@ -612,9 +612,9 @@ { "addr": "0x405090", "ida_name": "sub_405090", - "name": "gcp_sysdrv_rpc_5", + "name": "gcp_rpc_5", "size": 46, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x4050c0", @@ -640,9 +640,9 @@ { "addr": "0x4051a0", "ida_name": "sub_4051A0", - "name": "gcp_sysdrv_rpc_35", + "name": "gcp_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x4051ca", @@ -654,9 +654,9 @@ { "addr": "0x4051fe", "ida_name": "sub_4051FE", - "name": null, + "name": "gcp_rpc_E", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x40522c", @@ -675,9 +675,9 @@ { "addr": "0x4052bc", "ida_name": "sub_4052BC", - "name": "gcp_sysdrv_rpc_3", + "name": "gcp_rpc_3", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x4053fc", @@ -752,9 +752,9 @@ { "addr": "0x405c9e", "ida_name": "sub_405C9E", - "name": "gcp_rpc_108", + "name": "gcp_asd_rpc_108", "size": 34, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x405cc0", @@ -766,9 +766,9 @@ { "addr": "0x405ce0", "ida_name": "sub_405CE0", - "name": "gcp_rpc_107", + "name": "gcp_asd_rpc_107", "size": 34, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x405d02", @@ -787,9 +787,9 @@ { "addr": "0x405d3e", "ida_name": "sub_405D3E", - "name": "gcp_rpc_202", + "name": "gcp_asd_rpc_202", "size": 38, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x405d64", diff --git a/fw/decomp/gcp_22.0.0.62_7b7e9c9b.anon.c b/fw/decomp/gcp_22.0.0.62_7b7e9c9b.anon.c index fb13592..5179228 100644 --- a/fw/decomp/gcp_22.0.0.62_7b7e9c9b.anon.c +++ b/fw/decomp/gcp_22.0.0.62_7b7e9c9b.anon.c @@ -1,7 +1,7 @@ /* gcp 22.0.0.62 (7b7e9c9b) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: gcp_22.0.4.50_81b082b4.elf - * functions: 125 total in build, 111 named, 14 anonymous + * functions: 125 total in build, 110 named, 15 anonymous * porting tiers: {"DISPATCH": 17, "EXACT": 44, "FUZZY": 1, "MNEM": 21, "ambiguous": 8, "cmd_protos": 17, "comments": 0, "dispatch_conflict": 0, "none": 34, "protos": 0, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -59,34 +59,44 @@ char *__fastcall sub_4062F8(int a1, _BYTE *a2) } /* ==== ANON size=34 ==== */ -char *__fastcall sub_4062CC(int a1, _BYTE *a2) +int sub_406176() { - int v2; // r0 + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - if ( a2 != nullptr && *a2 != 0 && (gcp_asic_name_lookup(), v2 != 0) ) - return nullptr; - else - return (char *)&(*off_4062F4)[1054907] + 2; + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; } -/* ==== ANON size=46 ==== */ -int sub_40551C() +/* ==== ANON size=34 ==== */ +int sub_4061B8() { - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF gcp_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } -/* ==== ANON size=46 ==== */ -int sub_40568A() +/* ==== ANON size=34 ==== */ +char *__fastcall sub_4062CC(int a1, _BYTE *a2) { - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + int v2; // r0 - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + if ( a2 != nullptr && *a2 != 0 && (gcp_asic_name_lookup(), v2 != 0) ) + return nullptr; + else + return (char *)&(*off_4062F4)[1054907] + 2; +} + +/* ==== ANON size=38 ==== */ +int __fastcall sub_406216(int a1, int a2, int a3, int a4, int a5) +{ + _DWORD v10[7]; // [sp+0h] [bp-1Ch] BYREF + + gcp_lib_zero_fill_words(result: v10, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } /* ==== ANON size=48 ==== */ diff --git a/fw/decomp/gcp_22.0.0.62_7b7e9c9b.c b/fw/decomp/gcp_22.0.0.62_7b7e9c9b.c index 27b8ff8..f6a10e3 100644 --- a/fw/decomp/gcp_22.0.0.62_7b7e9c9b.c +++ b/fw/decomp/gcp_22.0.0.62_7b7e9c9b.c @@ -1,7 +1,7 @@ /* gcp 22.0.0.62 (7b7e9c9b) -- named functions * generated by fw/ta_re.py -- do not edit * reference: gcp_22.0.4.50_81b082b4.elf - * functions: 125 total in build, 111 named, 14 anonymous + * functions: 125 total in build, 110 named, 15 anonymous * porting tiers: {"DISPATCH": 17, "EXACT": 44, "FUZZY": 1, "MNEM": 21, "ambiguous": 8, "cmd_protos": 17, "comments": 0, "dispatch_conflict": 0, "none": 34, "protos": 0, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -583,11 +583,21 @@ int __fastcall gcp_QueryOutputID(int a1, _DWORD *a2, int a3, int a4) int v6; // r6 char v7; // cc int v8; // r4 - char *v9; // r0 - char *v10; // r3 + int v9; // r1 + unsigned int v10; // r2 char *v11; // r0 - void (__cdecl *v12)(); // r5 + unsigned int v12; // r5 + _BYTE *v13; // r3 + void (__cdecl *v14)(); // r5 + int v16; // [sp+0h] [bp-10h] BYREF + unsigned int v17; // [sp+4h] [bp-Ch] + int v18; // [sp+8h] [bp-8h] + int v19; // [sp+Ch] [bp-4h] BYREF + v16 = a1; + v17 = (unsigned int)a2; + v18 = a3; + v19 = a4; gcp_log(a1: 0, a2: (int)aAmdTaGcpQueryo); v5 = a2[532]; v6 = a2[533]; @@ -599,29 +609,41 @@ int __fastcall gcp_QueryOutputID(int a1, _DWORD *a2, int a3, int a4) gcp_log(a1: 0, a2: (int)off_404F80); v8 = 256; LABEL_13: - v12 = (void (__cdecl *)())off_4050F0; + v14 = (void (__cdecl *)())off_4050F0; off_4050F0(a1: 3, a2: 61440); - v12(); - v12(); + v14(); + v14(); return v8; } - v8 = gcp_rpc_108(); + v19 = 0; + v8 = sub_406176( + a1: *((unsigned __int8 *)a2 + v5 + 20) + | (*((unsigned __int8 *)a2 + v5 + 21) << 8) + | ((*((unsigned __int8 *)a2 + v5 + 22) | (*((unsigned __int8 *)a2 + v5 + 23) << 8)) << 16), + a2: &v19); if ( v8 == 0 ) { - v8 = gcp_rpc_107(); + v16 = 0; + v17 = 0; + v8 = sub_4061B8(a1: v19, a2: &v16); if ( v8 == 0 ) { - v9 = (char *)a2 + v6; - v9[1053] = 0; - v9[1049] = 0; - *((_BYTE *)a2 + v6 + 1052) = 0; - v10 = (char *)a2 + v6 + 1054; - *((_BYTE *)a2 + v6 + 1048) = 0; - v11 = (char *)a2 + v6 + 1050; - *v10 = 0; - v10[1] = 0; - v11[1] = 0; - *v11 = 0; + v9 = v16; + v10 = v17; + v11 = (char *)a2 + v6; + v12 = HIBYTE(v17); + v11[1053] = BYTE1(v17); + v11[1049] = BYTE1(v9); + v13 = v11 + 1052; + v11 += 1048; + *v13 = v10; + v13 += 2; + *v11 = v9; + v11 += 2; + *v13 = BYTE2(v10); + v13[1] = v12; + v11[1] = HIBYTE(v9); + *v11 = BYTE2(v9); } } gcp_log(a1: 0, a2: (int)off_404F80); @@ -1434,7 +1456,7 @@ int __fastcall gcp_cmd04(struct gcp_ctx *ctx, struct ta_params *params) v8 = 16; goto LABEL_12; } - if ( gcp_sysdrv_rpc_30() == 0 && gcp_sysdrv_rpc_33() == 0 && gcp_sysdrv_rpc_1() == 0 && gcp_sysdrv_rpc_3() == 0 ) + if ( gcp_sysdrv_rpc_30() == 0 && gcp_sysdrv_rpc_33() == 0 && gcp_sysdrv_rpc_1() == 0 && gcp_rpc_3() == 0 ) goto LABEL_20; v7 = 1051; goto LABEL_9; @@ -1449,7 +1471,7 @@ int __fastcall gcp_cmd04(struct gcp_ctx *ctx, struct ta_params *params) { ((void (__fastcall *)(int))loc_406118)(a1: *v2 - v20); LABEL_20: - sub_40551C(); + gcp_rpc_5(); v14 = &v15; v7 = gcp_sysdrv_rpc_7(); if ( v7 != 0 ) @@ -1459,7 +1481,7 @@ LABEL_9: goto LABEL_14; v8 = v15; LABEL_12: - if ( gcp_rpc_202(a1: (int)v17, a2: v8, a3: (int)v4 + 36, a4: (int)&v15, a5: (int)v14) != 0 ) + if ( sub_406216(a1: (int)v17, a2: v8, a3: (int)v4 + 36, a4: (int)&v15, a5: (int)v14) != 0 ) { v7 = 1045; gcp_log(a1: 0, a2: (struct tee_fmt_state *)aAmdTaGcpTldrma); @@ -1600,12 +1622,12 @@ int __fastcall gcp_cmdFE02(struct gcp_ctx *ctx, struct ta_params *params) v19 = 16; if ( sub_4058D4(a1: (char *)v22, a2: (char *)¶ms->arg10 + 4, a3: v8) != 0 ) { - if ( gcp_sysdrv_rpc_30() != 0 || gcp_sysdrv_rpc_33() != 0 || gcp_sysdrv_rpc_1() != 0 || gcp_sysdrv_rpc_3() != 0 ) + if ( gcp_sysdrv_rpc_30() != 0 || gcp_sysdrv_rpc_33() != 0 || gcp_sysdrv_rpc_1() != 0 || gcp_rpc_3() != 0 ) { v6 = 882; goto LABEL_17; } - sub_40551C(); + gcp_rpc_5(); v18 = &v19; if ( gcp_sysdrv_rpc_7() != 0 ) { @@ -1629,7 +1651,7 @@ int __fastcall gcp_cmdFE02(struct gcp_ctx *ctx, struct ta_params *params) LODWORD(params[1].arg18) = *(_DWORD *)¶ms->data20[20]; p_out1950 = ¶ms->out1950; p_arg18 = ¶ms[1].arg18; - if ( gcp_rpc_202(a1: (int)v23, a2: v13, a3: (int)p_out1950, a4: (int)p_arg18, a5: (int)v18) != 0 ) + if ( sub_406216(a1: (int)v23, a2: v13, a3: (int)p_out1950, a4: (int)p_arg18, a5: (int)v18) != 0 ) { v6 = 880; } @@ -1893,7 +1915,7 @@ LABEL_13: } else { - if ( gcp_sysdrv_rpc_3() != 0 ) + if ( gcp_rpc_3() != 0 ) { v8 = 1299; } @@ -2371,7 +2393,7 @@ int __fastcall gcp_cmdFE0A_QueryAccessibilityAttributes__h8(struct gcp_access_at a1->tag40[3] = HIBYTE(v5); a1->tag40[2] = BYTE2(v5); a1->tag40[1] = BYTE1(v5); - gcp_sysdrv_rpc_35(); + gcp_rpc_35(); v6 = ((int (__fastcall *)(struct gcp_access_attrs *))loc_405154)(a1); if ( v6 != 0 ) { @@ -2689,7 +2711,7 @@ int __fastcall gcp_cmdFE10(struct gcp_ctx *ctx, struct ta_params *params) if ( v9 ) { v11 = &ctx->crypto[(__int16)v7].rest[16]; - gcp_sysdrv_rpc_35(); + gcp_rpc_35(); p_out1950 = ¶ms->out1950; v13 = *((_DWORD *)v11 + 1); v14 = *((_DWORD *)v11 + 2); @@ -3925,26 +3947,6 @@ int __fastcall gcp_missed_fn_4025F8(int a1, int a2, int a3) return v28; } -/* ==== gcp_rpc_107 [tier=SVCOP size=34] ==== */ -int gcp_rpc_107() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== gcp_rpc_108 [tier=SVCOP size=34] ==== */ -int gcp_rpc_108() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== gcp_rpc_109 [tier=SVCOP size=32] ==== */ int gcp_rpc_109() { @@ -3975,16 +3977,6 @@ int gcp_rpc_201() return 2; } -/* ==== gcp_rpc_202 [tier=SVCOP size=38] ==== */ -int __fastcall gcp_rpc_202(int a1, int a2, int a3, int a4, int a5) -{ - _DWORD v10[7]; // [sp+0h] [bp-1Ch] BYREF - - gcp_lib_zero_fill_words(result: v10, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== gcp_rpc_204 [tier=SVCOP size=32] ==== */ int gcp_rpc_204() { @@ -4005,6 +3997,16 @@ int gcp_rpc_208() return 2; } +/* ==== gcp_rpc_3 [tier=SVCOP size=42] ==== */ +int gcp_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== gcp_rpc_304 [tier=SVCOP size=28] ==== */ int gcp_rpc_304() { @@ -4025,6 +4027,36 @@ int gcp_rpc_305() return 2; } +/* ==== gcp_rpc_35 [tier=SVCOP size=42] ==== */ +int gcp_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== gcp_rpc_5 [tier=SVCOP size=46] ==== */ +int gcp_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== gcp_rpc_E [tier=SVCOP size=46] ==== */ +int gcp_rpc_E() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== gcp_runtime_globals [tier=EXACT size=4] ==== */ int *gcp_runtime_globals() { @@ -4198,16 +4230,6 @@ int __fastcall gcp_sysdrv_rpc_109D(int a1, int a2, int a3, int a4, int a5, int a return 1; } -/* ==== gcp_sysdrv_rpc_3 [tier=IDA size=42] ==== */ -int gcp_sysdrv_rpc_3() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== gcp_sysdrv_rpc_30 [tier=MNEM size=50] ==== */ int gcp_sysdrv_rpc_30() { @@ -4238,16 +4260,6 @@ int gcp_sysdrv_rpc_33() return 1; } -/* ==== gcp_sysdrv_rpc_35 [tier=IDA size=42] ==== */ -int gcp_sysdrv_rpc_35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== gcp_sysdrv_rpc_7 [tier=EXACT size=50] ==== */ int gcp_sysdrv_rpc_7() { diff --git a/fw/decomp/gcp_22.0.0.62_7b7e9c9b.index.json b/fw/decomp/gcp_22.0.0.62_7b7e9c9b.index.json index d37b34f..c1004b3 100644 --- a/fw/decomp/gcp_22.0.0.62_7b7e9c9b.index.json +++ b/fw/decomp/gcp_22.0.0.62_7b7e9c9b.index.json @@ -640,9 +640,9 @@ { "addr": "0x40551c", "ida_name": "sub_40551C", - "name": null, + "name": "gcp_rpc_5", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x40554c", @@ -668,9 +668,9 @@ { "addr": "0x40562c", "ida_name": "sub_40562C", - "name": "gcp_sysdrv_rpc_35", + "name": "gcp_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x405656", @@ -682,9 +682,9 @@ { "addr": "0x40568a", "ida_name": "sub_40568A", - "name": null, + "name": "gcp_rpc_E", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x4056b8", @@ -703,9 +703,9 @@ { "addr": "0x405748", "ida_name": "sub_405748", - "name": "gcp_sysdrv_rpc_3", + "name": "gcp_rpc_3", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x405774", @@ -787,9 +787,9 @@ { "addr": "0x406176", "ida_name": "sub_406176", - "name": "gcp_rpc_108", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x406198", @@ -801,9 +801,9 @@ { "addr": "0x4061b8", "ida_name": "sub_4061B8", - "name": "gcp_rpc_107", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4061da", @@ -822,9 +822,9 @@ { "addr": "0x406216", "ida_name": "sub_406216", - "name": "gcp_rpc_202", + "name": null, "size": 38, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x40623c", diff --git a/fw/decomp/gcp_22.0.0.64_00133a50.anon.c b/fw/decomp/gcp_22.0.0.64_00133a50.anon.c index 78bc889..b02ceb5 100644 --- a/fw/decomp/gcp_22.0.0.64_00133a50.anon.c +++ b/fw/decomp/gcp_22.0.0.64_00133a50.anon.c @@ -1,7 +1,7 @@ /* gcp 22.0.0.64 (00133a50) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: gcp_22.0.4.50_81b082b4.elf - * functions: 125 total in build, 111 named, 14 anonymous + * functions: 125 total in build, 110 named, 15 anonymous * porting tiers: {"DISPATCH": 17, "EXACT": 65, "FUZZY": 1, "MNEM": 0, "ambiguous": 8, "cmd_protos": 17, "comments": 0, "dispatch_conflict": 0, "none": 34, "protos": 0, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -59,34 +59,44 @@ char *__fastcall sub_4062F8(int a1, _BYTE *a2) } /* ==== ANON size=34 ==== */ -char *__fastcall sub_4062CC(int a1, _BYTE *a2) +int sub_406176() { - int v2; // r0 + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - if ( a2 != nullptr && *a2 != 0 && (gcp_asic_name_lookup(), v2 != 0) ) - return nullptr; - else - return (char *)&(*off_4062F4)[1054907] + 2; + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; } -/* ==== ANON size=46 ==== */ -int sub_40551C() +/* ==== ANON size=34 ==== */ +int sub_4061B8() { - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF gcp_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } -/* ==== ANON size=46 ==== */ -int sub_40568A() +/* ==== ANON size=34 ==== */ +char *__fastcall sub_4062CC(int a1, _BYTE *a2) { - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + int v2; // r0 - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + if ( a2 != nullptr && *a2 != 0 && (gcp_asic_name_lookup(), v2 != 0) ) + return nullptr; + else + return (char *)&(*off_4062F4)[1054907] + 2; +} + +/* ==== ANON size=38 ==== */ +int __fastcall sub_406216(int a1, int a2, int a3, int a4, int a5) +{ + _DWORD v10[7]; // [sp+0h] [bp-1Ch] BYREF + + gcp_lib_zero_fill_words(result: v10, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } /* ==== ANON size=48 ==== */ diff --git a/fw/decomp/gcp_22.0.0.64_00133a50.c b/fw/decomp/gcp_22.0.0.64_00133a50.c index 674d9c6..be71979 100644 --- a/fw/decomp/gcp_22.0.0.64_00133a50.c +++ b/fw/decomp/gcp_22.0.0.64_00133a50.c @@ -1,7 +1,7 @@ /* gcp 22.0.0.64 (00133a50) -- named functions * generated by fw/ta_re.py -- do not edit * reference: gcp_22.0.4.50_81b082b4.elf - * functions: 125 total in build, 111 named, 14 anonymous + * functions: 125 total in build, 110 named, 15 anonymous * porting tiers: {"DISPATCH": 17, "EXACT": 65, "FUZZY": 1, "MNEM": 0, "ambiguous": 8, "cmd_protos": 17, "comments": 0, "dispatch_conflict": 0, "none": 34, "protos": 0, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -583,11 +583,21 @@ int __fastcall gcp_QueryOutputID(int a1, _DWORD *a2, int a3, int a4) int v6; // r6 char v7; // cc int v8; // r4 - char *v9; // r0 - char *v10; // r3 + int v9; // r1 + unsigned int v10; // r2 char *v11; // r0 - void (__cdecl *v12)(); // r5 + unsigned int v12; // r5 + _BYTE *v13; // r3 + void (__cdecl *v14)(); // r5 + int v16; // [sp+0h] [bp-10h] BYREF + unsigned int v17; // [sp+4h] [bp-Ch] + int v18; // [sp+8h] [bp-8h] + int v19; // [sp+Ch] [bp-4h] BYREF + v16 = a1; + v17 = (unsigned int)a2; + v18 = a3; + v19 = a4; gcp_log(a1: 0, a2: (int)aAmdTaGcpQueryo); v5 = a2[532]; v6 = a2[533]; @@ -599,29 +609,41 @@ int __fastcall gcp_QueryOutputID(int a1, _DWORD *a2, int a3, int a4) gcp_log(a1: 0, a2: (int)off_404F80); v8 = 256; LABEL_13: - v12 = (void (__cdecl *)())off_4050F0; + v14 = (void (__cdecl *)())off_4050F0; off_4050F0(a1: 3, a2: 61440); - v12(); - v12(); + v14(); + v14(); return v8; } - v8 = gcp_rpc_108(); + v19 = 0; + v8 = sub_406176( + a1: *((unsigned __int8 *)a2 + v5 + 20) + | (*((unsigned __int8 *)a2 + v5 + 21) << 8) + | ((*((unsigned __int8 *)a2 + v5 + 22) | (*((unsigned __int8 *)a2 + v5 + 23) << 8)) << 16), + a2: &v19); if ( v8 == 0 ) { - v8 = gcp_rpc_107(); + v16 = 0; + v17 = 0; + v8 = sub_4061B8(a1: v19, a2: &v16); if ( v8 == 0 ) { - v9 = (char *)a2 + v6; - v9[1053] = 0; - v9[1049] = 0; - *((_BYTE *)a2 + v6 + 1052) = 0; - v10 = (char *)a2 + v6 + 1054; - *((_BYTE *)a2 + v6 + 1048) = 0; - v11 = (char *)a2 + v6 + 1050; - *v10 = 0; - v10[1] = 0; - v11[1] = 0; - *v11 = 0; + v9 = v16; + v10 = v17; + v11 = (char *)a2 + v6; + v12 = HIBYTE(v17); + v11[1053] = BYTE1(v17); + v11[1049] = BYTE1(v9); + v13 = v11 + 1052; + v11 += 1048; + *v13 = v10; + v13 += 2; + *v11 = v9; + v11 += 2; + *v13 = BYTE2(v10); + v13[1] = v12; + v11[1] = HIBYTE(v9); + *v11 = BYTE2(v9); } } gcp_log(a1: 0, a2: (int)off_404F80); @@ -1434,7 +1456,7 @@ int __fastcall gcp_cmd04(struct gcp_ctx *ctx, struct ta_params *params) v8 = 16; goto LABEL_12; } - if ( gcp_sysdrv_rpc_30() == 0 && gcp_sysdrv_rpc_33() == 0 && gcp_sysdrv_rpc_1() == 0 && gcp_sysdrv_rpc_3() == 0 ) + if ( gcp_sysdrv_rpc_30() == 0 && gcp_sysdrv_rpc_33() == 0 && gcp_sysdrv_rpc_1() == 0 && gcp_rpc_3() == 0 ) goto LABEL_20; v7 = 1051; goto LABEL_9; @@ -1449,7 +1471,7 @@ int __fastcall gcp_cmd04(struct gcp_ctx *ctx, struct ta_params *params) { ((void (__fastcall *)(int))loc_406118)(a1: *v2 - v20); LABEL_20: - sub_40551C(); + gcp_rpc_5(); v14 = &v15; v7 = gcp_sysdrv_rpc_7(); if ( v7 != 0 ) @@ -1459,7 +1481,7 @@ LABEL_9: goto LABEL_14; v8 = v15; LABEL_12: - if ( gcp_rpc_202(a1: (int)v17, a2: v8, a3: (int)v4 + 36, a4: (int)&v15, a5: (int)v14) != 0 ) + if ( sub_406216(a1: (int)v17, a2: v8, a3: (int)v4 + 36, a4: (int)&v15, a5: (int)v14) != 0 ) { v7 = 1045; gcp_log(a1: 0, a2: (struct tee_fmt_state *)aAmdTaGcpTldrma); @@ -1600,12 +1622,12 @@ int __fastcall gcp_cmdFE02(struct gcp_ctx *ctx, struct ta_params *params) v19 = 16; if ( sub_4058D4(a1: (char *)v22, a2: (char *)¶ms->arg10 + 4, a3: v8) != 0 ) { - if ( gcp_sysdrv_rpc_30() != 0 || gcp_sysdrv_rpc_33() != 0 || gcp_sysdrv_rpc_1() != 0 || gcp_sysdrv_rpc_3() != 0 ) + if ( gcp_sysdrv_rpc_30() != 0 || gcp_sysdrv_rpc_33() != 0 || gcp_sysdrv_rpc_1() != 0 || gcp_rpc_3() != 0 ) { v6 = 882; goto LABEL_17; } - sub_40551C(); + gcp_rpc_5(); v18 = &v19; if ( gcp_sysdrv_rpc_7() != 0 ) { @@ -1629,7 +1651,7 @@ int __fastcall gcp_cmdFE02(struct gcp_ctx *ctx, struct ta_params *params) LODWORD(params[1].arg18) = *(_DWORD *)¶ms->data20[20]; p_out1950 = ¶ms->out1950; p_arg18 = ¶ms[1].arg18; - if ( gcp_rpc_202(a1: (int)v23, a2: v13, a3: (int)p_out1950, a4: (int)p_arg18, a5: (int)v18) != 0 ) + if ( sub_406216(a1: (int)v23, a2: v13, a3: (int)p_out1950, a4: (int)p_arg18, a5: (int)v18) != 0 ) { v6 = 880; } @@ -1893,7 +1915,7 @@ LABEL_13: } else { - if ( gcp_sysdrv_rpc_3() != 0 ) + if ( gcp_rpc_3() != 0 ) { v8 = 1299; } @@ -2371,7 +2393,7 @@ int __fastcall gcp_cmdFE0A_QueryAccessibilityAttributes__h8(struct gcp_access_at a1->tag40[3] = HIBYTE(v5); a1->tag40[2] = BYTE2(v5); a1->tag40[1] = BYTE1(v5); - gcp_sysdrv_rpc_35(); + gcp_rpc_35(); v6 = ((int (__fastcall *)(struct gcp_access_attrs *))loc_405154)(a1); if ( v6 != 0 ) { @@ -2689,7 +2711,7 @@ int __fastcall gcp_cmdFE10(struct gcp_ctx *ctx, struct ta_params *params) if ( v9 ) { v11 = &ctx->crypto[(__int16)v7].rest[16]; - gcp_sysdrv_rpc_35(); + gcp_rpc_35(); p_out1950 = ¶ms->out1950; v13 = *((_DWORD *)v11 + 1); v14 = *((_DWORD *)v11 + 2); @@ -3920,26 +3942,6 @@ int __fastcall gcp_missed_fn_4025F8(int a1, int a2, int a3) return v25; } -/* ==== gcp_rpc_107 [tier=SVCOP size=34] ==== */ -int gcp_rpc_107() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== gcp_rpc_108 [tier=SVCOP size=34] ==== */ -int gcp_rpc_108() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== gcp_rpc_109 [tier=SVCOP size=32] ==== */ int gcp_rpc_109() { @@ -3970,16 +3972,6 @@ int gcp_rpc_201() return 2; } -/* ==== gcp_rpc_202 [tier=SVCOP size=38] ==== */ -int __fastcall gcp_rpc_202(int a1, int a2, int a3, int a4, int a5) -{ - _DWORD v10[7]; // [sp+0h] [bp-1Ch] BYREF - - gcp_lib_zero_fill_words(result: v10, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== gcp_rpc_204 [tier=SVCOP size=32] ==== */ int gcp_rpc_204() { @@ -4000,6 +3992,16 @@ int gcp_rpc_208() return 2; } +/* ==== gcp_rpc_3 [tier=SVCOP size=42] ==== */ +int gcp_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== gcp_rpc_304 [tier=SVCOP size=28] ==== */ int gcp_rpc_304() { @@ -4020,6 +4022,36 @@ int gcp_rpc_305() return 2; } +/* ==== gcp_rpc_35 [tier=SVCOP size=42] ==== */ +int gcp_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== gcp_rpc_5 [tier=SVCOP size=46] ==== */ +int gcp_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== gcp_rpc_E [tier=SVCOP size=46] ==== */ +int gcp_rpc_E() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== gcp_runtime_globals [tier=EXACT size=4] ==== */ int *gcp_runtime_globals() { @@ -4193,16 +4225,6 @@ int __fastcall gcp_sysdrv_rpc_109D(int a1, int a2, int a3, int a4, int a5, int a return 1; } -/* ==== gcp_sysdrv_rpc_3 [tier=IDA size=42] ==== */ -int gcp_sysdrv_rpc_3() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== gcp_sysdrv_rpc_30 [tier=EXACT size=50] ==== */ int gcp_sysdrv_rpc_30() { @@ -4233,16 +4255,6 @@ int gcp_sysdrv_rpc_33() return 1; } -/* ==== gcp_sysdrv_rpc_35 [tier=IDA size=42] ==== */ -int gcp_sysdrv_rpc_35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== gcp_sysdrv_rpc_7 [tier=EXACT size=50] ==== */ int gcp_sysdrv_rpc_7() { diff --git a/fw/decomp/gcp_22.0.0.64_00133a50.index.json b/fw/decomp/gcp_22.0.0.64_00133a50.index.json index c0fe343..f6acb73 100644 --- a/fw/decomp/gcp_22.0.0.64_00133a50.index.json +++ b/fw/decomp/gcp_22.0.0.64_00133a50.index.json @@ -640,9 +640,9 @@ { "addr": "0x40551c", "ida_name": "sub_40551C", - "name": null, + "name": "gcp_rpc_5", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x40554c", @@ -668,9 +668,9 @@ { "addr": "0x40562c", "ida_name": "sub_40562C", - "name": "gcp_sysdrv_rpc_35", + "name": "gcp_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x405656", @@ -682,9 +682,9 @@ { "addr": "0x40568a", "ida_name": "sub_40568A", - "name": null, + "name": "gcp_rpc_E", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x4056b8", @@ -703,9 +703,9 @@ { "addr": "0x405748", "ida_name": "sub_405748", - "name": "gcp_sysdrv_rpc_3", + "name": "gcp_rpc_3", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x405774", @@ -787,9 +787,9 @@ { "addr": "0x406176", "ida_name": "sub_406176", - "name": "gcp_rpc_108", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x406198", @@ -801,9 +801,9 @@ { "addr": "0x4061b8", "ida_name": "sub_4061B8", - "name": "gcp_rpc_107", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4061da", @@ -822,9 +822,9 @@ { "addr": "0x406216", "ida_name": "sub_406216", - "name": "gcp_rpc_202", + "name": null, "size": 38, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x40623c", diff --git a/fw/decomp/gcp_22.0.0.68_0c0fa55e.anon.c b/fw/decomp/gcp_22.0.0.68_0c0fa55e.anon.c index 163735c..3c70ba7 100644 --- a/fw/decomp/gcp_22.0.0.68_0c0fa55e.anon.c +++ b/fw/decomp/gcp_22.0.0.68_0c0fa55e.anon.c @@ -1,7 +1,7 @@ /* gcp 22.0.0.68 (0c0fa55e) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: gcp_22.0.4.50_81b082b4.elf - * functions: 124 total in build, 110 named, 14 anonymous + * functions: 124 total in build, 109 named, 15 anonymous * porting tiers: {"DISPATCH": 17, "EXACT": 43, "FUZZY": 1, "MNEM": 21, "ambiguous": 8, "cmd_protos": 17, "comments": 0, "dispatch_conflict": 0, "none": 34, "protos": 0, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -63,6 +63,26 @@ char *__fastcall sub_4062D0(int a1, _BYTE *a2) } /* ==== ANON size=34 ==== */ +int sub_4061BC() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ +int sub_40617A() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ char *__fastcall sub_4062FC(int a1, _BYTE *a2) { if ( a2 != nullptr @@ -77,24 +97,14 @@ char *__fastcall sub_4062FC(int a1, _BYTE *a2) } } -/* ==== ANON size=46 ==== */ -int sub_40568E() +/* ==== ANON size=38 ==== */ +int __fastcall sub_40621A(int a1, int a2, int a3, int a4, int a5) { - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + _DWORD v10[7]; // [sp+0h] [bp-1Ch] BYREF - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + gcp_lib_zero_fill_words(result: v10, a2: 0x18u); __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ -int sub_405520() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; + return 2; } /* ==== ANON size=48 ==== */ diff --git a/fw/decomp/gcp_22.0.0.68_0c0fa55e.c b/fw/decomp/gcp_22.0.0.68_0c0fa55e.c index 9ab811a..b53f2fc 100644 --- a/fw/decomp/gcp_22.0.0.68_0c0fa55e.c +++ b/fw/decomp/gcp_22.0.0.68_0c0fa55e.c @@ -1,7 +1,7 @@ /* gcp 22.0.0.68 (0c0fa55e) -- named functions * generated by fw/ta_re.py -- do not edit * reference: gcp_22.0.4.50_81b082b4.elf - * functions: 124 total in build, 110 named, 14 anonymous + * functions: 124 total in build, 109 named, 15 anonymous * porting tiers: {"DISPATCH": 17, "EXACT": 43, "FUZZY": 1, "MNEM": 21, "ambiguous": 8, "cmd_protos": 17, "comments": 0, "dispatch_conflict": 0, "none": 34, "protos": 0, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -583,11 +583,21 @@ int __fastcall gcp_QueryOutputID(int a1, _DWORD *a2, int a3, int a4) int v6; // r6 char v7; // cc int v8; // r4 - char *v9; // r0 - char *v10; // r3 + int v9; // r1 + unsigned int v10; // r2 char *v11; // r0 - void (__cdecl *v12)(); // r5 + unsigned int v12; // r5 + _BYTE *v13; // r3 + void (__cdecl *v14)(); // r5 + int v16; // [sp+0h] [bp-10h] BYREF + unsigned int v17; // [sp+4h] [bp-Ch] + int v18; // [sp+8h] [bp-8h] + int v19; // [sp+Ch] [bp-4h] BYREF + v16 = a1; + v17 = (unsigned int)a2; + v18 = a3; + v19 = a4; gcp_log(a1: 0, a2: (int)aAmdTaGcpQueryo); v5 = a2[532]; v6 = a2[533]; @@ -599,29 +609,41 @@ int __fastcall gcp_QueryOutputID(int a1, _DWORD *a2, int a3, int a4) gcp_log(a1: 0, a2: (int)off_404FB0); v8 = 256; LABEL_13: - v12 = (void (__cdecl *)())off_405360; + v14 = (void (__cdecl *)())off_405360; off_405360(a1: 3, a2: 61440); - v12(); - v12(); + v14(); + v14(); return v8; } - v8 = gcp_rpc_108(); + v19 = 0; + v8 = sub_40617A( + a1: *((unsigned __int8 *)a2 + v5 + 20) + | (*((unsigned __int8 *)a2 + v5 + 21) << 8) + | ((*((unsigned __int8 *)a2 + v5 + 22) | (*((unsigned __int8 *)a2 + v5 + 23) << 8)) << 16), + a2: &v19); if ( v8 == 0 ) { - v8 = gcp_rpc_107(); + v16 = 0; + v17 = 0; + v8 = sub_4061BC(a1: v19, a2: &v16); if ( v8 == 0 ) { - v9 = (char *)a2 + v6; - v9[1053] = 0; - v9[1049] = 0; - *((_BYTE *)a2 + v6 + 1052) = 0; - v10 = (char *)a2 + v6 + 1054; - *((_BYTE *)a2 + v6 + 1048) = 0; - v11 = (char *)a2 + v6 + 1050; - *v10 = 0; - v10[1] = 0; - v11[1] = 0; - *v11 = 0; + v9 = v16; + v10 = v17; + v11 = (char *)a2 + v6; + v12 = HIBYTE(v17); + v11[1053] = BYTE1(v17); + v11[1049] = BYTE1(v9); + v13 = v11 + 1052; + v11 += 1048; + *v13 = v10; + v13 += 2; + *v11 = v9; + v11 += 2; + *v13 = BYTE2(v10); + v13[1] = v12; + v11[1] = HIBYTE(v9); + *v11 = BYTE2(v9); } } gcp_log(a1: 0, a2: (int)off_404FB0); @@ -1428,7 +1450,7 @@ int __fastcall gcp_cmd04(struct gcp_ctx *ctx, struct ta_params *params) v8 = 16; goto LABEL_12; } - if ( gcp_sysdrv_rpc_30() == 0 && gcp_sysdrv_rpc_33() == 0 && gcp_sysdrv_rpc_1() == 0 && gcp_sysdrv_rpc_3() == 0 ) + if ( gcp_sysdrv_rpc_30() == 0 && gcp_sysdrv_rpc_33() == 0 && gcp_sysdrv_rpc_1() == 0 && gcp_rpc_3() == 0 ) goto LABEL_20; v7 = 1051; goto LABEL_9; @@ -1443,7 +1465,7 @@ int __fastcall gcp_cmd04(struct gcp_ctx *ctx, struct ta_params *params) { ((void (__fastcall *)(int))loc_40611C)(a1: *v2 - v20); LABEL_20: - sub_405520(); + gcp_rpc_5(); v14 = &v15; v7 = gcp_sysdrv_rpc_7(); if ( v7 != 0 ) @@ -1453,7 +1475,7 @@ LABEL_9: goto LABEL_14; v8 = v15; LABEL_12: - if ( gcp_rpc_202(a1: (int)v17, a2: v8, a3: (int)v4 + 36, a4: (int)&v15, a5: (int)v14) != 0 ) + if ( sub_40621A(a1: (int)v17, a2: v8, a3: (int)v4 + 36, a4: (int)&v15, a5: (int)v14) != 0 ) { v7 = 1045; gcp_log(a1: 0, a2: (struct tee_fmt_state *)aAmdTaGcpTldrma); @@ -1598,12 +1620,12 @@ int __fastcall gcp_cmdFE02(struct gcp_ctx *ctx, struct ta_params *params) v19 = 16; if ( sub_4058D8(a1: (char *)v22, a2: (char *)¶ms->arg10 + 4, a3: v8) != 0 ) { - if ( gcp_sysdrv_rpc_30() != 0 || gcp_sysdrv_rpc_33() != 0 || gcp_sysdrv_rpc_1() != 0 || gcp_sysdrv_rpc_3() != 0 ) + if ( gcp_sysdrv_rpc_30() != 0 || gcp_sysdrv_rpc_33() != 0 || gcp_sysdrv_rpc_1() != 0 || gcp_rpc_3() != 0 ) { v6 = 882; goto LABEL_17; } - sub_405520(); + gcp_rpc_5(); v18 = &v19; if ( gcp_sysdrv_rpc_7() != 0 ) { @@ -1627,7 +1649,7 @@ int __fastcall gcp_cmdFE02(struct gcp_ctx *ctx, struct ta_params *params) LODWORD(params[1].arg18) = *(_DWORD *)¶ms->data20[20]; p_out1950 = ¶ms->out1950; p_arg18 = ¶ms[1].arg18; - if ( gcp_rpc_202(a1: (int)v23, a2: v13, a3: (int)p_out1950, a4: (int)p_arg18, a5: (int)v18) != 0 ) + if ( sub_40621A(a1: (int)v23, a2: v13, a3: (int)p_out1950, a4: (int)p_arg18, a5: (int)v18) != 0 ) { v6 = 880; } @@ -1891,7 +1913,7 @@ LABEL_13: } else { - if ( gcp_sysdrv_rpc_3() != 0 ) + if ( gcp_rpc_3() != 0 ) { v8 = 1299; } @@ -2377,7 +2399,7 @@ int __fastcall gcp_cmdFE0A_QueryAccessibilityAttributes__h8(struct gcp_access_at a1->tag40[3] = HIBYTE(v5); a1->tag40[2] = BYTE2(v5); a1->tag40[1] = BYTE1(v5); - gcp_sysdrv_rpc_35(); + gcp_rpc_35(); v6 = ((int (__fastcall *)(struct gcp_access_attrs *))loc_405158)(a1); if ( v6 != 0 ) { @@ -2695,7 +2717,7 @@ int __fastcall gcp_cmdFE10(struct gcp_ctx *ctx, struct ta_params *params) if ( v9 ) { v11 = &ctx->crypto[(__int16)v7].rest[16]; - gcp_sysdrv_rpc_35(); + gcp_rpc_35(); p_out1950 = ¶ms->out1950; v13 = *((_DWORD *)v11 + 1); v14 = *((_DWORD *)v11 + 2); @@ -3931,26 +3953,6 @@ int __fastcall gcp_missed_fn_4025F8(int a1, int a2, int a3) return v28; } -/* ==== gcp_rpc_107 [tier=SVCOP size=34] ==== */ -int gcp_rpc_107() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== gcp_rpc_108 [tier=SVCOP size=34] ==== */ -int gcp_rpc_108() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== gcp_rpc_109 [tier=SVCOP size=32] ==== */ int gcp_rpc_109() { @@ -3981,16 +3983,6 @@ int gcp_rpc_201() return 2; } -/* ==== gcp_rpc_202 [tier=SVCOP size=38] ==== */ -int __fastcall gcp_rpc_202(int a1, int a2, int a3, int a4, int a5) -{ - _DWORD v10[7]; // [sp+0h] [bp-1Ch] BYREF - - gcp_lib_zero_fill_words(result: v10, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== gcp_rpc_204 [tier=SVCOP size=32] ==== */ int gcp_rpc_204() { @@ -4011,6 +4003,16 @@ int gcp_rpc_208() return 2; } +/* ==== gcp_rpc_3 [tier=SVCOP size=42] ==== */ +int gcp_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== gcp_rpc_304 [tier=SVCOP size=28] ==== */ int gcp_rpc_304() { @@ -4031,6 +4033,36 @@ int gcp_rpc_305() return 2; } +/* ==== gcp_rpc_35 [tier=SVCOP size=42] ==== */ +int gcp_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== gcp_rpc_5 [tier=SVCOP size=46] ==== */ +int gcp_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== gcp_rpc_E [tier=SVCOP size=46] ==== */ +int gcp_rpc_E() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== gcp_runtime_globals [tier=EXACT size=4] ==== */ int *gcp_runtime_globals() { @@ -4204,16 +4236,6 @@ int __fastcall gcp_sysdrv_rpc_109D(int a1, int a2, int a3, int a4, int a5, int a return 1; } -/* ==== gcp_sysdrv_rpc_3 [tier=IDA size=42] ==== */ -int gcp_sysdrv_rpc_3() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== gcp_sysdrv_rpc_30 [tier=MNEM size=50] ==== */ int gcp_sysdrv_rpc_30() { @@ -4244,16 +4266,6 @@ int gcp_sysdrv_rpc_33() return 1; } -/* ==== gcp_sysdrv_rpc_35 [tier=IDA size=42] ==== */ -int gcp_sysdrv_rpc_35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== gcp_sysdrv_rpc_7 [tier=EXACT size=50] ==== */ int gcp_sysdrv_rpc_7() { diff --git a/fw/decomp/gcp_22.0.0.68_0c0fa55e.index.json b/fw/decomp/gcp_22.0.0.68_0c0fa55e.index.json index 1ac577f..bd69f32 100644 --- a/fw/decomp/gcp_22.0.0.68_0c0fa55e.index.json +++ b/fw/decomp/gcp_22.0.0.68_0c0fa55e.index.json @@ -633,9 +633,9 @@ { "addr": "0x405520", "ida_name": "sub_405520", - "name": null, + "name": "gcp_rpc_5", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x405550", @@ -661,9 +661,9 @@ { "addr": "0x405630", "ida_name": "sub_405630", - "name": "gcp_sysdrv_rpc_35", + "name": "gcp_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x40565a", @@ -675,9 +675,9 @@ { "addr": "0x40568e", "ida_name": "sub_40568E", - "name": null, + "name": "gcp_rpc_E", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x4056bc", @@ -696,9 +696,9 @@ { "addr": "0x40574c", "ida_name": "sub_40574C", - "name": "gcp_sysdrv_rpc_3", + "name": "gcp_rpc_3", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x405778", @@ -780,9 +780,9 @@ { "addr": "0x40617a", "ida_name": "sub_40617A", - "name": "gcp_rpc_108", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x40619c", @@ -794,9 +794,9 @@ { "addr": "0x4061bc", "ida_name": "sub_4061BC", - "name": "gcp_rpc_107", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4061de", @@ -815,9 +815,9 @@ { "addr": "0x40621a", "ida_name": "sub_40621A", - "name": "gcp_rpc_202", + "name": null, "size": 38, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x406240", diff --git a/fw/decomp/gcp_22.0.0.71_a4b4fff1.anon.c b/fw/decomp/gcp_22.0.0.71_a4b4fff1.anon.c index b3f2b74..537d3c0 100644 --- a/fw/decomp/gcp_22.0.0.71_a4b4fff1.anon.c +++ b/fw/decomp/gcp_22.0.0.71_a4b4fff1.anon.c @@ -1,7 +1,7 @@ /* gcp 22.0.0.71 (a4b4fff1) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: gcp_22.0.4.50_81b082b4.elf - * functions: 124 total in build, 110 named, 14 anonymous + * functions: 124 total in build, 109 named, 15 anonymous * porting tiers: {"DISPATCH": 17, "EXACT": 46, "FUZZY": 1, "MNEM": 18, "ambiguous": 8, "cmd_protos": 17, "comments": 0, "dispatch_conflict": 0, "none": 34, "protos": 0, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -48,6 +48,26 @@ int __fastcall sub_4058E8(char *a1, char *a2, int a3) } /* ==== ANON size=34 ==== */ +int sub_4061CC() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ +int sub_40618A() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ char *__fastcall sub_4062E0(int a1, _BYTE *a2) { if ( a2 != nullptr @@ -77,24 +97,14 @@ char *__fastcall sub_40630C(int a1, _BYTE *a2) } } -/* ==== ANON size=46 ==== */ -int sub_40569E() +/* ==== ANON size=38 ==== */ +int __fastcall sub_40622A(int a1, int a2, int a3, int a4, int a5) { - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + _DWORD v10[7]; // [sp+0h] [bp-1Ch] BYREF - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + gcp_lib_zero_fill_words(result: v10, a2: 0x18u); __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ -int sub_405530() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; + return 2; } /* ==== ANON size=48 ==== */ diff --git a/fw/decomp/gcp_22.0.0.71_a4b4fff1.c b/fw/decomp/gcp_22.0.0.71_a4b4fff1.c index a0294e5..7465692 100644 --- a/fw/decomp/gcp_22.0.0.71_a4b4fff1.c +++ b/fw/decomp/gcp_22.0.0.71_a4b4fff1.c @@ -1,7 +1,7 @@ /* gcp 22.0.0.71 (a4b4fff1) -- named functions * generated by fw/ta_re.py -- do not edit * reference: gcp_22.0.4.50_81b082b4.elf - * functions: 124 total in build, 110 named, 14 anonymous + * functions: 124 total in build, 109 named, 15 anonymous * porting tiers: {"DISPATCH": 17, "EXACT": 46, "FUZZY": 1, "MNEM": 18, "ambiguous": 8, "cmd_protos": 17, "comments": 0, "dispatch_conflict": 0, "none": 34, "protos": 0, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -583,11 +583,21 @@ int __fastcall gcp_QueryOutputID(int a1, _DWORD *a2, int a3, int a4) int v6; // r6 char v7; // cc int v8; // r4 - char *v9; // r0 - char *v10; // r3 + int v9; // r1 + unsigned int v10; // r2 char *v11; // r0 - void (__cdecl *v12)(); // r5 + unsigned int v12; // r5 + _BYTE *v13; // r3 + void (__cdecl *v14)(); // r5 + int v16; // [sp+0h] [bp-10h] BYREF + unsigned int v17; // [sp+4h] [bp-Ch] + int v18; // [sp+8h] [bp-8h] + int v19; // [sp+Ch] [bp-4h] BYREF + v16 = a1; + v17 = (unsigned int)a2; + v18 = a3; + v19 = a4; gcp_log(a1: 0, a2: (int)aAmdTaGcpQueryo); v5 = a2[532]; v6 = a2[533]; @@ -599,29 +609,41 @@ int __fastcall gcp_QueryOutputID(int a1, _DWORD *a2, int a3, int a4) gcp_log(a1: 0, a2: (int)off_404FC0); v8 = 256; LABEL_13: - v12 = (void (__cdecl *)())off_405370; + v14 = (void (__cdecl *)())off_405370; off_405370(a1: 3, a2: 61440); - v12(); - v12(); + v14(); + v14(); return v8; } - v8 = gcp_rpc_108(); + v19 = 0; + v8 = sub_40618A( + a1: *((unsigned __int8 *)a2 + v5 + 20) + | (*((unsigned __int8 *)a2 + v5 + 21) << 8) + | ((*((unsigned __int8 *)a2 + v5 + 22) | (*((unsigned __int8 *)a2 + v5 + 23) << 8)) << 16), + a2: &v19); if ( v8 == 0 ) { - v8 = gcp_rpc_107(); + v16 = 0; + v17 = 0; + v8 = sub_4061CC(a1: v19, a2: &v16); if ( v8 == 0 ) { - v9 = (char *)a2 + v6; - v9[1053] = 0; - v9[1049] = 0; - *((_BYTE *)a2 + v6 + 1052) = 0; - v10 = (char *)a2 + v6 + 1054; - *((_BYTE *)a2 + v6 + 1048) = 0; - v11 = (char *)a2 + v6 + 1050; - *v10 = 0; - v10[1] = 0; - v11[1] = 0; - *v11 = 0; + v9 = v16; + v10 = v17; + v11 = (char *)a2 + v6; + v12 = HIBYTE(v17); + v11[1053] = BYTE1(v17); + v11[1049] = BYTE1(v9); + v13 = v11 + 1052; + v11 += 1048; + *v13 = v10; + v13 += 2; + *v11 = v9; + v11 += 2; + *v13 = BYTE2(v10); + v13[1] = v12; + v11[1] = HIBYTE(v9); + *v11 = BYTE2(v9); } } gcp_log(a1: 0, a2: (int)off_404FC0); @@ -1428,7 +1450,7 @@ int __fastcall gcp_cmd04(struct gcp_ctx *ctx, struct ta_params *params) v8 = 16; goto LABEL_12; } - if ( gcp_sysdrv_rpc_30() == 0 && gcp_sysdrv_rpc_33() == 0 && gcp_sysdrv_rpc_1() == 0 && gcp_sysdrv_rpc_3() == 0 ) + if ( gcp_sysdrv_rpc_30() == 0 && gcp_sysdrv_rpc_33() == 0 && gcp_sysdrv_rpc_1() == 0 && gcp_rpc_3() == 0 ) goto LABEL_20; v7 = 1051; goto LABEL_9; @@ -1443,7 +1465,7 @@ int __fastcall gcp_cmd04(struct gcp_ctx *ctx, struct ta_params *params) { ((void (__fastcall *)(int))loc_40612C)(a1: *v2 - v20); LABEL_20: - sub_405530(); + gcp_rpc_5(); v14 = &v15; v7 = gcp_sysdrv_rpc_7(); if ( v7 != 0 ) @@ -1453,7 +1475,7 @@ LABEL_9: goto LABEL_14; v8 = v15; LABEL_12: - if ( gcp_rpc_202(a1: (int)v17, a2: v8, a3: (int)v4 + 36, a4: (int)&v15, a5: (int)v14) != 0 ) + if ( sub_40622A(a1: (int)v17, a2: v8, a3: (int)v4 + 36, a4: (int)&v15, a5: (int)v14) != 0 ) { v7 = 1045; gcp_log(a1: 0, a2: (struct tee_fmt_state *)aAmdTaGcpTldrma); @@ -1598,12 +1620,12 @@ int __fastcall gcp_cmdFE02(struct gcp_ctx *ctx, struct ta_params *params) v19 = 16; if ( sub_4058E8(a1: (char *)v22, a2: (char *)¶ms->arg10 + 4, a3: v8) != 0 ) { - if ( gcp_sysdrv_rpc_30() != 0 || gcp_sysdrv_rpc_33() != 0 || gcp_sysdrv_rpc_1() != 0 || gcp_sysdrv_rpc_3() != 0 ) + if ( gcp_sysdrv_rpc_30() != 0 || gcp_sysdrv_rpc_33() != 0 || gcp_sysdrv_rpc_1() != 0 || gcp_rpc_3() != 0 ) { v6 = 882; goto LABEL_17; } - sub_405530(); + gcp_rpc_5(); v18 = &v19; if ( gcp_sysdrv_rpc_7() != 0 ) { @@ -1627,7 +1649,7 @@ int __fastcall gcp_cmdFE02(struct gcp_ctx *ctx, struct ta_params *params) LODWORD(params[1].arg18) = *(_DWORD *)¶ms->data20[20]; p_out1950 = ¶ms->out1950; p_arg18 = ¶ms[1].arg18; - if ( gcp_rpc_202(a1: (int)v23, a2: v13, a3: (int)p_out1950, a4: (int)p_arg18, a5: (int)v18) != 0 ) + if ( sub_40622A(a1: (int)v23, a2: v13, a3: (int)p_out1950, a4: (int)p_arg18, a5: (int)v18) != 0 ) { v6 = 880; } @@ -1891,7 +1913,7 @@ LABEL_13: } else { - if ( gcp_sysdrv_rpc_3() != 0 ) + if ( gcp_rpc_3() != 0 ) { v8 = 1299; } @@ -2379,7 +2401,7 @@ int __fastcall gcp_cmdFE0A_QueryAccessibilityAttributes__h8(struct gcp_access_at a1->tag40[3] = HIBYTE(v5); a1->tag40[2] = BYTE2(v5); a1->tag40[1] = BYTE1(v5); - gcp_sysdrv_rpc_35(); + gcp_rpc_35(); v6 = ((int (__fastcall *)(struct gcp_access_attrs *))loc_405168)(a1); if ( v6 != 0 ) { @@ -2697,7 +2719,7 @@ int __fastcall gcp_cmdFE10(struct gcp_ctx *ctx, struct ta_params *params) if ( v9 ) { v11 = &ctx->crypto[(__int16)v7].rest[16]; - gcp_sysdrv_rpc_35(); + gcp_rpc_35(); p_out1950 = ¶ms->out1950; v13 = *((_DWORD *)v11 + 1); v14 = *((_DWORD *)v11 + 2); @@ -3933,26 +3955,6 @@ int __fastcall gcp_missed_fn_4025F8(int a1, int a2, int a3) return v28; } -/* ==== gcp_rpc_107 [tier=SVCOP size=34] ==== */ -int gcp_rpc_107() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== gcp_rpc_108 [tier=SVCOP size=34] ==== */ -int gcp_rpc_108() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== gcp_rpc_109 [tier=SVCOP size=32] ==== */ int gcp_rpc_109() { @@ -3983,16 +3985,6 @@ int gcp_rpc_201() return 2; } -/* ==== gcp_rpc_202 [tier=SVCOP size=38] ==== */ -int __fastcall gcp_rpc_202(int a1, int a2, int a3, int a4, int a5) -{ - _DWORD v10[7]; // [sp+0h] [bp-1Ch] BYREF - - gcp_lib_zero_fill_words(result: v10, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== gcp_rpc_204 [tier=SVCOP size=32] ==== */ int gcp_rpc_204() { @@ -4013,6 +4005,16 @@ int gcp_rpc_208() return 2; } +/* ==== gcp_rpc_3 [tier=SVCOP size=42] ==== */ +int gcp_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== gcp_rpc_304 [tier=SVCOP size=28] ==== */ int gcp_rpc_304() { @@ -4033,6 +4035,36 @@ int gcp_rpc_305() return 2; } +/* ==== gcp_rpc_35 [tier=SVCOP size=42] ==== */ +int gcp_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== gcp_rpc_5 [tier=SVCOP size=46] ==== */ +int gcp_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== gcp_rpc_E [tier=SVCOP size=46] ==== */ +int gcp_rpc_E() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== gcp_runtime_globals [tier=EXACT size=4] ==== */ int *gcp_runtime_globals() { @@ -4206,16 +4238,6 @@ int __fastcall gcp_sysdrv_rpc_109D(int a1, int a2, int a3, int a4, int a5, int a return 1; } -/* ==== gcp_sysdrv_rpc_3 [tier=IDA size=42] ==== */ -int gcp_sysdrv_rpc_3() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== gcp_sysdrv_rpc_30 [tier=MNEM size=50] ==== */ int gcp_sysdrv_rpc_30() { @@ -4246,16 +4268,6 @@ int gcp_sysdrv_rpc_33() return 1; } -/* ==== gcp_sysdrv_rpc_35 [tier=IDA size=42] ==== */ -int gcp_sysdrv_rpc_35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== gcp_sysdrv_rpc_7 [tier=EXACT size=50] ==== */ int gcp_sysdrv_rpc_7() { diff --git a/fw/decomp/gcp_22.0.0.71_a4b4fff1.index.json b/fw/decomp/gcp_22.0.0.71_a4b4fff1.index.json index d5756e6..06cc0ef 100644 --- a/fw/decomp/gcp_22.0.0.71_a4b4fff1.index.json +++ b/fw/decomp/gcp_22.0.0.71_a4b4fff1.index.json @@ -633,9 +633,9 @@ { "addr": "0x405530", "ida_name": "sub_405530", - "name": null, + "name": "gcp_rpc_5", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x405560", @@ -661,9 +661,9 @@ { "addr": "0x405640", "ida_name": "sub_405640", - "name": "gcp_sysdrv_rpc_35", + "name": "gcp_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x40566a", @@ -675,9 +675,9 @@ { "addr": "0x40569e", "ida_name": "sub_40569E", - "name": null, + "name": "gcp_rpc_E", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x4056cc", @@ -696,9 +696,9 @@ { "addr": "0x40575c", "ida_name": "sub_40575C", - "name": "gcp_sysdrv_rpc_3", + "name": "gcp_rpc_3", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x405788", @@ -780,9 +780,9 @@ { "addr": "0x40618a", "ida_name": "sub_40618A", - "name": "gcp_rpc_108", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4061ac", @@ -794,9 +794,9 @@ { "addr": "0x4061cc", "ida_name": "sub_4061CC", - "name": "gcp_rpc_107", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4061ee", @@ -815,9 +815,9 @@ { "addr": "0x40622a", "ida_name": "sub_40622A", - "name": "gcp_rpc_202", + "name": null, "size": 38, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x406250", diff --git a/fw/decomp/gcp_22.0.0.73_af9f39e1.anon.c b/fw/decomp/gcp_22.0.0.73_af9f39e1.anon.c index 7a5bf5a..5ecac34 100644 --- a/fw/decomp/gcp_22.0.0.73_af9f39e1.anon.c +++ b/fw/decomp/gcp_22.0.0.73_af9f39e1.anon.c @@ -1,7 +1,7 @@ /* gcp 22.0.0.73 (af9f39e1) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: gcp_22.0.4.50_81b082b4.elf - * functions: 124 total in build, 110 named, 14 anonymous + * functions: 124 total in build, 109 named, 15 anonymous * porting tiers: {"DISPATCH": 17, "EXACT": 46, "FUZZY": 1, "MNEM": 18, "ambiguous": 8, "cmd_protos": 17, "comments": 0, "dispatch_conflict": 0, "none": 34, "protos": 0, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -48,6 +48,26 @@ int __fastcall sub_4058FC(char *a1, char *a2, int a3) } /* ==== ANON size=34 ==== */ +int sub_40619E() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ +int sub_4061E0() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ char *__fastcall sub_406320(int a1, _BYTE *a2) { if ( a2 != nullptr @@ -77,24 +97,14 @@ char *__fastcall sub_4062F4(int a1, _BYTE *a2) } } -/* ==== ANON size=46 ==== */ -int sub_405544() +/* ==== ANON size=38 ==== */ +int __fastcall sub_40623E(int a1, int a2, int a3, int a4, int a5) { - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + _DWORD v10[7]; // [sp+0h] [bp-1Ch] BYREF - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + gcp_lib_zero_fill_words(result: v10, a2: 0x18u); __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ -int sub_4056B2() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; + return 2; } /* ==== ANON size=48 ==== */ diff --git a/fw/decomp/gcp_22.0.0.73_af9f39e1.c b/fw/decomp/gcp_22.0.0.73_af9f39e1.c index 699a943..f615631 100644 --- a/fw/decomp/gcp_22.0.0.73_af9f39e1.c +++ b/fw/decomp/gcp_22.0.0.73_af9f39e1.c @@ -1,7 +1,7 @@ /* gcp 22.0.0.73 (af9f39e1) -- named functions * generated by fw/ta_re.py -- do not edit * reference: gcp_22.0.4.50_81b082b4.elf - * functions: 124 total in build, 110 named, 14 anonymous + * functions: 124 total in build, 109 named, 15 anonymous * porting tiers: {"DISPATCH": 17, "EXACT": 46, "FUZZY": 1, "MNEM": 18, "ambiguous": 8, "cmd_protos": 17, "comments": 0, "dispatch_conflict": 0, "none": 34, "protos": 0, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -583,11 +583,21 @@ int __fastcall gcp_QueryOutputID(int a1, _DWORD *a2, int a3, int a4) int v6; // r6 char v7; // cc int v8; // r4 - char *v9; // r0 - char *v10; // r3 + int v9; // r1 + unsigned int v10; // r2 char *v11; // r0 - void (__cdecl *v12)(); // r5 + unsigned int v12; // r5 + _BYTE *v13; // r3 + void (__cdecl *v14)(); // r5 + int v16; // [sp+0h] [bp-10h] BYREF + unsigned int v17; // [sp+4h] [bp-Ch] + int v18; // [sp+8h] [bp-8h] + int v19; // [sp+Ch] [bp-4h] BYREF + v16 = a1; + v17 = (unsigned int)a2; + v18 = a3; + v19 = a4; gcp_log(a1: 0, a2: (int)aAmdTaGcpQueryo); v5 = a2[532]; v6 = a2[533]; @@ -599,29 +609,41 @@ int __fastcall gcp_QueryOutputID(int a1, _DWORD *a2, int a3, int a4) gcp_log(a1: 0, a2: (int)off_404FD4); v8 = 256; LABEL_13: - v12 = (void (__cdecl *)())off_405384; + v14 = (void (__cdecl *)())off_405384; off_405384(a1: 3, a2: 61440); - v12(); - v12(); + v14(); + v14(); return v8; } - v8 = gcp_rpc_108(); + v19 = 0; + v8 = sub_40619E( + a1: *((unsigned __int8 *)a2 + v5 + 20) + | (*((unsigned __int8 *)a2 + v5 + 21) << 8) + | ((*((unsigned __int8 *)a2 + v5 + 22) | (*((unsigned __int8 *)a2 + v5 + 23) << 8)) << 16), + a2: &v19); if ( v8 == 0 ) { - v8 = gcp_rpc_107(); + v16 = 0; + v17 = 0; + v8 = sub_4061E0(a1: v19, a2: &v16); if ( v8 == 0 ) { - v9 = (char *)a2 + v6; - v9[1053] = 0; - v9[1049] = 0; - *((_BYTE *)a2 + v6 + 1052) = 0; - v10 = (char *)a2 + v6 + 1054; - *((_BYTE *)a2 + v6 + 1048) = 0; - v11 = (char *)a2 + v6 + 1050; - *v10 = 0; - v10[1] = 0; - v11[1] = 0; - *v11 = 0; + v9 = v16; + v10 = v17; + v11 = (char *)a2 + v6; + v12 = HIBYTE(v17); + v11[1053] = BYTE1(v17); + v11[1049] = BYTE1(v9); + v13 = v11 + 1052; + v11 += 1048; + *v13 = v10; + v13 += 2; + *v11 = v9; + v11 += 2; + *v13 = BYTE2(v10); + v13[1] = v12; + v11[1] = HIBYTE(v9); + *v11 = BYTE2(v9); } } gcp_log(a1: 0, a2: (int)off_404FD4); @@ -1428,7 +1450,7 @@ int __fastcall gcp_cmd04(struct gcp_ctx *ctx, struct ta_params *params) v8 = 16; goto LABEL_12; } - if ( gcp_sysdrv_rpc_30() == 0 && gcp_sysdrv_rpc_33() == 0 && gcp_sysdrv_rpc_1() == 0 && gcp_sysdrv_rpc_3() == 0 ) + if ( gcp_sysdrv_rpc_30() == 0 && gcp_sysdrv_rpc_33() == 0 && gcp_sysdrv_rpc_1() == 0 && gcp_rpc_3() == 0 ) goto LABEL_20; v7 = 1051; goto LABEL_9; @@ -1443,7 +1465,7 @@ int __fastcall gcp_cmd04(struct gcp_ctx *ctx, struct ta_params *params) { ((void (__fastcall *)(int))loc_406140)(a1: *v2 - v20); LABEL_20: - sub_405544(); + gcp_rpc_5(); v14 = &v15; v7 = gcp_sysdrv_rpc_7(); if ( v7 != 0 ) @@ -1453,7 +1475,7 @@ LABEL_9: goto LABEL_14; v8 = v15; LABEL_12: - if ( gcp_rpc_202(a1: (int)v17, a2: v8, a3: (int)v4 + 36, a4: (int)&v15, a5: (int)v14) != 0 ) + if ( sub_40623E(a1: (int)v17, a2: v8, a3: (int)v4 + 36, a4: (int)&v15, a5: (int)v14) != 0 ) { v7 = 1045; gcp_log(a1: 0, a2: (struct tee_fmt_state *)aAmdTaGcpTldrma); @@ -1598,12 +1620,12 @@ int __fastcall gcp_cmdFE02(struct gcp_ctx *ctx, struct ta_params *params) v19 = 16; if ( sub_4058FC(a1: (char *)v22, a2: (char *)¶ms->arg10 + 4, a3: v8) != 0 ) { - if ( gcp_sysdrv_rpc_30() != 0 || gcp_sysdrv_rpc_33() != 0 || gcp_sysdrv_rpc_1() != 0 || gcp_sysdrv_rpc_3() != 0 ) + if ( gcp_sysdrv_rpc_30() != 0 || gcp_sysdrv_rpc_33() != 0 || gcp_sysdrv_rpc_1() != 0 || gcp_rpc_3() != 0 ) { v6 = 882; goto LABEL_17; } - sub_405544(); + gcp_rpc_5(); v18 = &v19; if ( gcp_sysdrv_rpc_7() != 0 ) { @@ -1627,7 +1649,7 @@ int __fastcall gcp_cmdFE02(struct gcp_ctx *ctx, struct ta_params *params) LODWORD(params[1].arg18) = *(_DWORD *)¶ms->data20[20]; p_out1950 = ¶ms->out1950; p_arg18 = ¶ms[1].arg18; - if ( gcp_rpc_202(a1: (int)v23, a2: v13, a3: (int)p_out1950, a4: (int)p_arg18, a5: (int)v18) != 0 ) + if ( sub_40623E(a1: (int)v23, a2: v13, a3: (int)p_out1950, a4: (int)p_arg18, a5: (int)v18) != 0 ) { v6 = 880; } @@ -1891,7 +1913,7 @@ LABEL_13: } else { - if ( gcp_sysdrv_rpc_3() != 0 ) + if ( gcp_rpc_3() != 0 ) { v8 = 1299; } @@ -2381,7 +2403,7 @@ int __fastcall gcp_cmdFE0A_QueryAccessibilityAttributes__h8(struct gcp_access_at a1->tag40[3] = HIBYTE(v5); a1->tag40[2] = BYTE2(v5); a1->tag40[1] = BYTE1(v5); - gcp_sysdrv_rpc_35(); + gcp_rpc_35(); v6 = ((int (__fastcall *)(struct gcp_access_attrs *))loc_40517C)(a1); if ( v6 != 0 ) { @@ -2699,7 +2721,7 @@ int __fastcall gcp_cmdFE10(struct gcp_ctx *ctx, struct ta_params *params) if ( v9 ) { v11 = &ctx->crypto[(__int16)v7].rest[16]; - gcp_sysdrv_rpc_35(); + gcp_rpc_35(); p_out1950 = ¶ms->out1950; v13 = *((_DWORD *)v11 + 1); v14 = *((_DWORD *)v11 + 2); @@ -3935,26 +3957,6 @@ int __fastcall gcp_missed_fn_4025F8(int a1, int a2, int a3) return v28; } -/* ==== gcp_rpc_107 [tier=SVCOP size=34] ==== */ -int gcp_rpc_107() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== gcp_rpc_108 [tier=SVCOP size=34] ==== */ -int gcp_rpc_108() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== gcp_rpc_109 [tier=SVCOP size=32] ==== */ int gcp_rpc_109() { @@ -3985,16 +3987,6 @@ int gcp_rpc_201() return 2; } -/* ==== gcp_rpc_202 [tier=SVCOP size=38] ==== */ -int __fastcall gcp_rpc_202(int a1, int a2, int a3, int a4, int a5) -{ - _DWORD v10[7]; // [sp+0h] [bp-1Ch] BYREF - - gcp_lib_zero_fill_words(result: v10, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== gcp_rpc_204 [tier=SVCOP size=32] ==== */ int gcp_rpc_204() { @@ -4015,6 +4007,16 @@ int gcp_rpc_208() return 2; } +/* ==== gcp_rpc_3 [tier=SVCOP size=42] ==== */ +int gcp_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== gcp_rpc_304 [tier=SVCOP size=28] ==== */ int gcp_rpc_304() { @@ -4035,6 +4037,36 @@ int gcp_rpc_305() return 2; } +/* ==== gcp_rpc_35 [tier=SVCOP size=42] ==== */ +int gcp_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== gcp_rpc_5 [tier=SVCOP size=46] ==== */ +int gcp_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== gcp_rpc_E [tier=SVCOP size=46] ==== */ +int gcp_rpc_E() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== gcp_runtime_globals [tier=EXACT size=4] ==== */ int *gcp_runtime_globals() { @@ -4208,16 +4240,6 @@ int __fastcall gcp_sysdrv_rpc_109D(int a1, int a2, int a3, int a4, int a5, int a return 1; } -/* ==== gcp_sysdrv_rpc_3 [tier=IDA size=42] ==== */ -int gcp_sysdrv_rpc_3() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== gcp_sysdrv_rpc_30 [tier=MNEM size=50] ==== */ int gcp_sysdrv_rpc_30() { @@ -4248,16 +4270,6 @@ int gcp_sysdrv_rpc_33() return 1; } -/* ==== gcp_sysdrv_rpc_35 [tier=IDA size=42] ==== */ -int gcp_sysdrv_rpc_35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== gcp_sysdrv_rpc_7 [tier=EXACT size=50] ==== */ int gcp_sysdrv_rpc_7() { diff --git a/fw/decomp/gcp_22.0.0.73_af9f39e1.index.json b/fw/decomp/gcp_22.0.0.73_af9f39e1.index.json index 9f50dae..1749234 100644 --- a/fw/decomp/gcp_22.0.0.73_af9f39e1.index.json +++ b/fw/decomp/gcp_22.0.0.73_af9f39e1.index.json @@ -633,9 +633,9 @@ { "addr": "0x405544", "ida_name": "sub_405544", - "name": null, + "name": "gcp_rpc_5", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x405574", @@ -661,9 +661,9 @@ { "addr": "0x405654", "ida_name": "sub_405654", - "name": "gcp_sysdrv_rpc_35", + "name": "gcp_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x40567e", @@ -675,9 +675,9 @@ { "addr": "0x4056b2", "ida_name": "sub_4056B2", - "name": null, + "name": "gcp_rpc_E", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x4056e0", @@ -696,9 +696,9 @@ { "addr": "0x405770", "ida_name": "sub_405770", - "name": "gcp_sysdrv_rpc_3", + "name": "gcp_rpc_3", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x40579c", @@ -780,9 +780,9 @@ { "addr": "0x40619e", "ida_name": "sub_40619E", - "name": "gcp_rpc_108", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4061c0", @@ -794,9 +794,9 @@ { "addr": "0x4061e0", "ida_name": "sub_4061E0", - "name": "gcp_rpc_107", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x406202", @@ -815,9 +815,9 @@ { "addr": "0x40623e", "ida_name": "sub_40623E", - "name": "gcp_rpc_202", + "name": null, "size": 38, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x406264", diff --git a/fw/decomp/gcp_22.0.0.77_7c426e7f.anon.c b/fw/decomp/gcp_22.0.0.77_7c426e7f.anon.c index 7c1521a..ba74d93 100644 --- a/fw/decomp/gcp_22.0.0.77_7c426e7f.anon.c +++ b/fw/decomp/gcp_22.0.0.77_7c426e7f.anon.c @@ -1,7 +1,7 @@ /* gcp 22.0.0.77 (7c426e7f) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: gcp_22.0.4.50_81b082b4.elf - * functions: 124 total in build, 110 named, 14 anonymous + * functions: 124 total in build, 109 named, 15 anonymous * porting tiers: {"DISPATCH": 17, "EXACT": 46, "FUZZY": 1, "MNEM": 18, "ambiguous": 8, "cmd_protos": 17, "comments": 0, "dispatch_conflict": 0, "none": 34, "protos": 0, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -48,6 +48,16 @@ int __fastcall sub_40590C(char *a1, char *a2, int a3) } /* ==== ANON size=34 ==== */ +int sub_4061F0() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ char *__fastcall sub_406304(int a1, _BYTE *a2) { if ( a2 != nullptr @@ -77,24 +87,24 @@ char *__fastcall sub_406330(int a1, _BYTE *a2) } } -/* ==== ANON size=46 ==== */ -int sub_405554() +/* ==== ANON size=34 ==== */ +int sub_4061AE() { - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF gcp_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } -/* ==== ANON size=46 ==== */ -int sub_4056C2() +/* ==== ANON size=38 ==== */ +int __fastcall sub_40624E(int a1, int a2, int a3, int a4, int a5) { - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + _DWORD v10[7]; // [sp+0h] [bp-1Ch] BYREF - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + gcp_lib_zero_fill_words(result: v10, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } /* ==== ANON size=48 ==== */ diff --git a/fw/decomp/gcp_22.0.0.77_7c426e7f.c b/fw/decomp/gcp_22.0.0.77_7c426e7f.c index 3406153..d2104ec 100644 --- a/fw/decomp/gcp_22.0.0.77_7c426e7f.c +++ b/fw/decomp/gcp_22.0.0.77_7c426e7f.c @@ -1,7 +1,7 @@ /* gcp 22.0.0.77 (7c426e7f) -- named functions * generated by fw/ta_re.py -- do not edit * reference: gcp_22.0.4.50_81b082b4.elf - * functions: 124 total in build, 110 named, 14 anonymous + * functions: 124 total in build, 109 named, 15 anonymous * porting tiers: {"DISPATCH": 17, "EXACT": 46, "FUZZY": 1, "MNEM": 18, "ambiguous": 8, "cmd_protos": 17, "comments": 0, "dispatch_conflict": 0, "none": 34, "protos": 0, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -583,11 +583,21 @@ int __fastcall gcp_QueryOutputID(int a1, _DWORD *a2, int a3, int a4) int v6; // r6 char v7; // cc int v8; // r4 - char *v9; // r0 - char *v10; // r3 + int v9; // r1 + unsigned int v10; // r2 char *v11; // r0 - void (__cdecl *v12)(); // r5 + unsigned int v12; // r5 + _BYTE *v13; // r3 + void (__cdecl *v14)(); // r5 + int v16; // [sp+0h] [bp-10h] BYREF + unsigned int v17; // [sp+4h] [bp-Ch] + int v18; // [sp+8h] [bp-8h] + int v19; // [sp+Ch] [bp-4h] BYREF + v16 = a1; + v17 = (unsigned int)a2; + v18 = a3; + v19 = a4; gcp_log(a1: 0, a2: (int)aAmdTaGcpQueryo); v5 = a2[532]; v6 = a2[533]; @@ -599,29 +609,41 @@ int __fastcall gcp_QueryOutputID(int a1, _DWORD *a2, int a3, int a4) gcp_log(a1: 0, a2: (int)off_404FE4); v8 = 256; LABEL_13: - v12 = (void (__cdecl *)())off_405394; + v14 = (void (__cdecl *)())off_405394; off_405394(a1: 3, a2: 61440); - v12(); - v12(); + v14(); + v14(); return v8; } - v8 = gcp_rpc_108(); + v19 = 0; + v8 = sub_4061AE( + a1: *((unsigned __int8 *)a2 + v5 + 20) + | (*((unsigned __int8 *)a2 + v5 + 21) << 8) + | ((*((unsigned __int8 *)a2 + v5 + 22) | (*((unsigned __int8 *)a2 + v5 + 23) << 8)) << 16), + a2: &v19); if ( v8 == 0 ) { - v8 = gcp_rpc_107(); + v16 = 0; + v17 = 0; + v8 = sub_4061F0(a1: v19, a2: &v16); if ( v8 == 0 ) { - v9 = (char *)a2 + v6; - v9[1053] = 0; - v9[1049] = 0; - *((_BYTE *)a2 + v6 + 1052) = 0; - v10 = (char *)a2 + v6 + 1054; - *((_BYTE *)a2 + v6 + 1048) = 0; - v11 = (char *)a2 + v6 + 1050; - *v10 = 0; - v10[1] = 0; - v11[1] = 0; - *v11 = 0; + v9 = v16; + v10 = v17; + v11 = (char *)a2 + v6; + v12 = HIBYTE(v17); + v11[1053] = BYTE1(v17); + v11[1049] = BYTE1(v9); + v13 = v11 + 1052; + v11 += 1048; + *v13 = v10; + v13 += 2; + *v11 = v9; + v11 += 2; + *v13 = BYTE2(v10); + v13[1] = v12; + v11[1] = HIBYTE(v9); + *v11 = BYTE2(v9); } } gcp_log(a1: 0, a2: (int)off_404FE4); @@ -1428,7 +1450,7 @@ int __fastcall gcp_cmd04(struct gcp_ctx *ctx, struct ta_params *params) v8 = 16; goto LABEL_12; } - if ( gcp_sysdrv_rpc_30() == 0 && gcp_sysdrv_rpc_33() == 0 && gcp_sysdrv_rpc_1() == 0 && gcp_sysdrv_rpc_3() == 0 ) + if ( gcp_sysdrv_rpc_30() == 0 && gcp_sysdrv_rpc_33() == 0 && gcp_sysdrv_rpc_1() == 0 && gcp_rpc_3() == 0 ) goto LABEL_20; v7 = 1051; goto LABEL_9; @@ -1443,7 +1465,7 @@ int __fastcall gcp_cmd04(struct gcp_ctx *ctx, struct ta_params *params) { ((void (__fastcall *)(int))loc_406150)(a1: *v2 - v20); LABEL_20: - sub_405554(); + gcp_rpc_5(); v14 = &v15; v7 = gcp_sysdrv_rpc_7(); if ( v7 != 0 ) @@ -1453,7 +1475,7 @@ LABEL_9: goto LABEL_14; v8 = v15; LABEL_12: - if ( gcp_rpc_202(a1: (int)v17, a2: v8, a3: (int)v4 + 36, a4: (int)&v15, a5: (int)v14) != 0 ) + if ( sub_40624E(a1: (int)v17, a2: v8, a3: (int)v4 + 36, a4: (int)&v15, a5: (int)v14) != 0 ) { v7 = 1045; gcp_log(a1: 0, a2: (struct tee_fmt_state *)aAmdTaGcpTldrma); @@ -1598,12 +1620,12 @@ int __fastcall gcp_cmdFE02(struct gcp_ctx *ctx, struct ta_params *params) v19 = 16; if ( sub_40590C(a1: (char *)v22, a2: (char *)¶ms->arg10 + 4, a3: v8) != 0 ) { - if ( gcp_sysdrv_rpc_30() != 0 || gcp_sysdrv_rpc_33() != 0 || gcp_sysdrv_rpc_1() != 0 || gcp_sysdrv_rpc_3() != 0 ) + if ( gcp_sysdrv_rpc_30() != 0 || gcp_sysdrv_rpc_33() != 0 || gcp_sysdrv_rpc_1() != 0 || gcp_rpc_3() != 0 ) { v6 = 882; goto LABEL_17; } - sub_405554(); + gcp_rpc_5(); v18 = &v19; if ( gcp_sysdrv_rpc_7() != 0 ) { @@ -1627,7 +1649,7 @@ int __fastcall gcp_cmdFE02(struct gcp_ctx *ctx, struct ta_params *params) LODWORD(params[1].arg18) = *(_DWORD *)¶ms->data20[20]; p_out1950 = ¶ms->out1950; p_arg18 = ¶ms[1].arg18; - if ( gcp_rpc_202(a1: (int)v23, a2: v13, a3: (int)p_out1950, a4: (int)p_arg18, a5: (int)v18) != 0 ) + if ( sub_40624E(a1: (int)v23, a2: v13, a3: (int)p_out1950, a4: (int)p_arg18, a5: (int)v18) != 0 ) { v6 = 880; } @@ -1891,7 +1913,7 @@ LABEL_13: } else { - if ( gcp_sysdrv_rpc_3() != 0 ) + if ( gcp_rpc_3() != 0 ) { v8 = 1299; } @@ -2383,7 +2405,7 @@ int __fastcall gcp_cmdFE0A_QueryAccessibilityAttributes__h8(struct gcp_access_at a1->tag40[3] = HIBYTE(v5); a1->tag40[2] = BYTE2(v5); a1->tag40[1] = BYTE1(v5); - gcp_sysdrv_rpc_35(); + gcp_rpc_35(); v6 = ((int (__fastcall *)(struct gcp_access_attrs *))loc_40518C)(a1); if ( v6 != 0 ) { @@ -2701,7 +2723,7 @@ int __fastcall gcp_cmdFE10(struct gcp_ctx *ctx, struct ta_params *params) if ( v9 ) { v11 = &ctx->crypto[(__int16)v7].rest[16]; - gcp_sysdrv_rpc_35(); + gcp_rpc_35(); p_out1950 = ¶ms->out1950; v13 = *((_DWORD *)v11 + 1); v14 = *((_DWORD *)v11 + 2); @@ -3937,26 +3959,6 @@ int __fastcall gcp_missed_fn_4025F8(int a1, int a2, int a3) return v28; } -/* ==== gcp_rpc_107 [tier=SVCOP size=34] ==== */ -int gcp_rpc_107() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== gcp_rpc_108 [tier=SVCOP size=34] ==== */ -int gcp_rpc_108() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== gcp_rpc_109 [tier=SVCOP size=32] ==== */ int gcp_rpc_109() { @@ -3987,16 +3989,6 @@ int gcp_rpc_201() return 2; } -/* ==== gcp_rpc_202 [tier=SVCOP size=38] ==== */ -int __fastcall gcp_rpc_202(int a1, int a2, int a3, int a4, int a5) -{ - _DWORD v10[7]; // [sp+0h] [bp-1Ch] BYREF - - gcp_lib_zero_fill_words(result: v10, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== gcp_rpc_204 [tier=SVCOP size=32] ==== */ int gcp_rpc_204() { @@ -4017,6 +4009,16 @@ int gcp_rpc_208() return 2; } +/* ==== gcp_rpc_3 [tier=SVCOP size=42] ==== */ +int gcp_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== gcp_rpc_304 [tier=SVCOP size=28] ==== */ int gcp_rpc_304() { @@ -4037,6 +4039,36 @@ int gcp_rpc_305() return 2; } +/* ==== gcp_rpc_35 [tier=SVCOP size=42] ==== */ +int gcp_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== gcp_rpc_5 [tier=SVCOP size=46] ==== */ +int gcp_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== gcp_rpc_E [tier=SVCOP size=46] ==== */ +int gcp_rpc_E() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== gcp_runtime_globals [tier=EXACT size=4] ==== */ int *gcp_runtime_globals() { @@ -4210,16 +4242,6 @@ int __fastcall gcp_sysdrv_rpc_109D(int a1, int a2, int a3, int a4, int a5, int a return 1; } -/* ==== gcp_sysdrv_rpc_3 [tier=IDA size=42] ==== */ -int gcp_sysdrv_rpc_3() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== gcp_sysdrv_rpc_30 [tier=MNEM size=50] ==== */ int gcp_sysdrv_rpc_30() { @@ -4250,16 +4272,6 @@ int gcp_sysdrv_rpc_33() return 1; } -/* ==== gcp_sysdrv_rpc_35 [tier=IDA size=42] ==== */ -int gcp_sysdrv_rpc_35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== gcp_sysdrv_rpc_7 [tier=EXACT size=50] ==== */ int gcp_sysdrv_rpc_7() { diff --git a/fw/decomp/gcp_22.0.0.77_7c426e7f.index.json b/fw/decomp/gcp_22.0.0.77_7c426e7f.index.json index 68784cf..0a7ec58 100644 --- a/fw/decomp/gcp_22.0.0.77_7c426e7f.index.json +++ b/fw/decomp/gcp_22.0.0.77_7c426e7f.index.json @@ -633,9 +633,9 @@ { "addr": "0x405554", "ida_name": "sub_405554", - "name": null, + "name": "gcp_rpc_5", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x405584", @@ -661,9 +661,9 @@ { "addr": "0x405664", "ida_name": "sub_405664", - "name": "gcp_sysdrv_rpc_35", + "name": "gcp_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x40568e", @@ -675,9 +675,9 @@ { "addr": "0x4056c2", "ida_name": "sub_4056C2", - "name": null, + "name": "gcp_rpc_E", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x4056f0", @@ -696,9 +696,9 @@ { "addr": "0x405780", "ida_name": "sub_405780", - "name": "gcp_sysdrv_rpc_3", + "name": "gcp_rpc_3", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x4057ac", @@ -780,9 +780,9 @@ { "addr": "0x4061ae", "ida_name": "sub_4061AE", - "name": "gcp_rpc_108", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4061d0", @@ -794,9 +794,9 @@ { "addr": "0x4061f0", "ida_name": "sub_4061F0", - "name": "gcp_rpc_107", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x406212", @@ -815,9 +815,9 @@ { "addr": "0x40624e", "ida_name": "sub_40624E", - "name": "gcp_rpc_202", + "name": null, "size": 38, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x406274", diff --git a/fw/decomp/gcp_22.0.4.49_7485a4ea.c b/fw/decomp/gcp_22.0.4.49_7485a4ea.c index 95c316c..e1699d9 100644 --- a/fw/decomp/gcp_22.0.4.49_7485a4ea.c +++ b/fw/decomp/gcp_22.0.4.49_7485a4ea.c @@ -837,7 +837,7 @@ int __fastcall gcp_cmd04_GetContentKey(struct gcp_ctx *ctx, struct ta_params *pa v16 = v10; goto LABEL_12; } - if ( gcp_sysdrv_rpc_30() == 0 && gcp_sysdrv_rpc_33() == 0 && gcp_sysdrv_rpc_1() == 0 && gcp_sysdrv_rpc_3() == 0 ) + if ( gcp_sysdrv_rpc_30() == 0 && gcp_sysdrv_rpc_33() == 0 && gcp_sysdrv_rpc_1() == 0 && gcp_rpc_3() == 0 ) goto LABEL_19; v6 = 1051; goto LABEL_9; @@ -848,7 +848,7 @@ int __fastcall gcp_cmd04_GetContentKey(struct gcp_ctx *ctx, struct ta_params *pa { ((void (__fastcall *)(int))loc_405CE4)(a1: *v2 - v17); LABEL_19: - gcp_sysdrv_rpc_5(); + gcp_rpc_5(); v6 = gcp_sysdrv_rpc_7(); if ( v6 != 0 ) v6 = 1052; @@ -1002,7 +1002,7 @@ int __fastcall gcp_cmdFE02_GetObfKeyCryptoSession(struct gcp_ctx *ctx, struct ta if ( gcp_sysdrv_rpc_30() != 0 || (v19 = 16, v17 = -1073741824, v18 = ctx->crypto[(__int16)slot_idx].rest, gcp_sysdrv_rpc_33() != 0) || gcp_sysdrv_rpc_1() != 0 - || gcp_sysdrv_rpc_3() != 0 ) + || gcp_rpc_3() != 0 ) { params = (struct ta_params *)882; goto LABEL_17; @@ -1014,7 +1014,7 @@ int __fastcall gcp_cmdFE02_GetObfKeyCryptoSession(struct gcp_ctx *ctx, struct ta { ((void (__fastcall *)(int))loc_405CE4)(a1: *v2 - v28); LABEL_25: - gcp_sysdrv_rpc_5(); + gcp_rpc_5(); v15 = &v20; if ( gcp_sysdrv_rpc_7() != 0 ) { @@ -1183,7 +1183,7 @@ LABEL_13: } else { - if ( gcp_sysdrv_rpc_3() != 0 ) + if ( gcp_rpc_3() != 0 ) { v7 = 1299; } @@ -1875,13 +1875,13 @@ int __fastcall gcp_cmdFE0A_QueryAccessibilityAttributes__h10(struct gcp_access_a { ((void (__fastcall *)(int))loc_405CE4)(a1: *v1 - v7); LABEL_7: - if ( gcp_sysdrv_rpc_30() != 0 || gcp_sysdrv_rpc_33() != 0 || gcp_sysdrv_rpc_1() != 0 || gcp_sysdrv_rpc_3() != 0 ) + if ( gcp_sysdrv_rpc_30() != 0 || gcp_sysdrv_rpc_33() != 0 || gcp_sysdrv_rpc_1() != 0 || gcp_rpc_3() != 0 ) { v3 = 612; } else { - gcp_sysdrv_rpc_E(); + gcp_rpc_E(); v3 = gcp_sysdrv_rpc_10(); if ( v3 != 0 ) v3 = 612; @@ -2192,7 +2192,7 @@ int __fastcall gcp_cmdFE0A_QueryAccessibilityAttributes__h8(struct gcp_access_at a1->tag40[3] = HIBYTE(v5); a1->tag40[2] = BYTE2(v5); a1->tag40[1] = BYTE1(v5); - gcp_sysdrv_rpc_35(); + gcp_rpc_35(); AccessibilityAttributes__h10 = gcp_cmdFE0A_QueryAccessibilityAttributes__h10(a1); if ( AccessibilityAttributes__h10 != 0 ) { @@ -2389,7 +2389,7 @@ int __fastcall gcp_cmdFE10_StartKeyRefreshCryptoSession(struct gcp_ctx *ctx, str if ( v8 ) { v9 = &ctx->crypto[(__int16)v6].rest[16]; - gcp_sysdrv_rpc_35(); + gcp_rpc_35(); p_out1950 = ¶ms->out1950; v11 = *((_DWORD *)v9 + 1); v12 = *((_DWORD *)v9 + 2); @@ -3704,6 +3704,46 @@ int __fastcall gcp_missed_fn_4025F8(int a1, int a2, int a3) return v28; } +/* ==== gcp_rpc_3 [tier=SVCOP size=42] ==== */ +int gcp_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== gcp_rpc_35 [tier=SVCOP size=42] ==== */ +int gcp_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== gcp_rpc_5 [tier=SVCOP size=46] ==== */ +int gcp_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== gcp_rpc_E [tier=SVCOP size=46] ==== */ +int gcp_rpc_E() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + gcp_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== gcp_runtime_globals [tier=EXACT size=4] ==== */ int *gcp_runtime_globals() { @@ -3877,16 +3917,6 @@ int __fastcall gcp_sysdrv_rpc_109D(int a1, int a2, int a3, int a4, int a5, int a return 1; } -/* ==== gcp_sysdrv_rpc_3 [tier=IDA size=42] ==== */ -int gcp_sysdrv_rpc_3() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== gcp_sysdrv_rpc_30 [tier=MNEM size=50] ==== */ int gcp_sysdrv_rpc_30() { @@ -3917,26 +3947,6 @@ int gcp_sysdrv_rpc_33() return 1; } -/* ==== gcp_sysdrv_rpc_35 [tier=IDA size=42] ==== */ -int gcp_sysdrv_rpc_35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== gcp_sysdrv_rpc_5 [tier=IDA size=46] ==== */ -int gcp_sysdrv_rpc_5() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== gcp_sysdrv_rpc_7 [tier=EXACT size=50] ==== */ int gcp_sysdrv_rpc_7() { @@ -3951,16 +3961,6 @@ int gcp_sysdrv_rpc_9() return 1; } -/* ==== gcp_sysdrv_rpc_E [tier=IDA size=46] ==== */ -int gcp_sysdrv_rpc_E() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - gcp_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== gcp_ta_main_loop [tier=EXACT size=148] ==== */ void __fastcall __noreturn gcp_ta_main_loop(int *a1) { diff --git a/fw/decomp/gcp_22.0.4.49_7485a4ea.index.json b/fw/decomp/gcp_22.0.4.49_7485a4ea.index.json index 40f6fcf..a011549 100644 --- a/fw/decomp/gcp_22.0.4.49_7485a4ea.index.json +++ b/fw/decomp/gcp_22.0.4.49_7485a4ea.index.json @@ -633,9 +633,9 @@ { "addr": "0x405050", "ida_name": "sub_405050", - "name": "gcp_sysdrv_rpc_5", + "name": "gcp_rpc_5", "size": 46, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x405080", @@ -661,9 +661,9 @@ { "addr": "0x405160", "ida_name": "sub_405160", - "name": "gcp_sysdrv_rpc_35", + "name": "gcp_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x40518a", @@ -675,9 +675,9 @@ { "addr": "0x4051be", "ida_name": "sub_4051BE", - "name": "gcp_sysdrv_rpc_E", + "name": "gcp_rpc_E", "size": 46, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x4051ec", @@ -696,9 +696,9 @@ { "addr": "0x40527c", "ida_name": "sub_40527C", - "name": "gcp_sysdrv_rpc_3", + "name": "gcp_rpc_3", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x4052a8", diff --git a/fw/decomp/hdcp.summary.json b/fw/decomp/hdcp.summary.json index eae2a5b..9c2bd5b 100644 --- a/fw/decomp/hdcp.summary.json +++ b/fw/decomp/hdcp.summary.json @@ -50,7 +50,7 @@ "0x12": "0x4042a0", "0x13": "0x4037b4" }, - "named": 92, + "named": 96, "stats": { "EXACT": 20, "MNEM": 33, @@ -91,7 +91,7 @@ "0x12": "0x403e94", "0x13": "0x4033a8" }, - "named": 93, + "named": 82, "stats": { "EXACT": 27, "MNEM": 29, @@ -132,7 +132,7 @@ "0x12": "0x403f1c", "0x13": "0x403430" }, - "named": 94, + "named": 83, "stats": { "EXACT": 30, "MNEM": 26, @@ -173,7 +173,7 @@ "0x12": "0x404264", "0x13": "0x403778" }, - "named": 92, + "named": 96, "stats": { "EXACT": 33, "MNEM": 20, @@ -214,7 +214,7 @@ "0x12": "0x404260", "0x13": "0x403774" }, - "named": 92, + "named": 96, "stats": { "EXACT": 34, "MNEM": 19, @@ -255,7 +255,7 @@ "0x12": "0x404280", "0x13": "0x403794" }, - "named": 91, + "named": 95, "stats": { "EXACT": 34, "MNEM": 18, diff --git a/fw/decomp/hdcp_23.0.0.52_c6b25da3.anon.c b/fw/decomp/hdcp_23.0.0.52_c6b25da3.anon.c index edb03d3..7427496 100644 --- a/fw/decomp/hdcp_23.0.0.52_c6b25da3.anon.c +++ b/fw/decomp/hdcp_23.0.0.52_c6b25da3.anon.c @@ -1,7 +1,7 @@ /* hdcp 23.0.0.52 (c6b25da3) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: hdcp2.elf - * functions: 100 total in build, 96 named, 4 anonymous + * functions: 100 total in build, 99 named, 1 anonymous * porting tiers: {"DISPATCH": 3, "EXACT": 20, "FUZZY": 0, "MNEM": 33, "ambiguous": 10, "cmd_protos": 0, "comments": 16, "dispatch_conflict": 0, "none": 34, "protos": 53, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -25,33 +25,3 @@ void sub_401058() JUMPOUT(0x401702); } -/* ==== ANON size=42 ==== */ -int sub_40176E() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - bzero_core(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ -int sub_40170C() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ -int sub_401604() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - diff --git a/fw/decomp/hdcp_23.0.0.52_c6b25da3.c b/fw/decomp/hdcp_23.0.0.52_c6b25da3.c index 228c7ac..130d20d 100644 --- a/fw/decomp/hdcp_23.0.0.52_c6b25da3.c +++ b/fw/decomp/hdcp_23.0.0.52_c6b25da3.c @@ -1,7 +1,7 @@ /* hdcp 23.0.0.52 (c6b25da3) -- named functions * generated by fw/ta_re.py -- do not edit * reference: hdcp2.elf - * functions: 100 total in build, 96 named, 4 anonymous + * functions: 100 total in build, 99 named, 1 anonymous * porting tiers: {"DISPATCH": 3, "EXACT": 20, "FUZZY": 0, "MNEM": 33, "ambiguous": 10, "cmd_protos": 0, "comments": 16, "dispatch_conflict": 0, "none": 34, "protos": 53, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -282,16 +282,6 @@ int __fastcall gp_populate_transient_object(int a1, int a2, int a3) return 1; } -/* ==== gp_populate_transient_object_op35 [tier=IDA size=42] ==== */ -int gp_populate_transient_object_op35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== hdcp1_create_session [tier=MNEM size=298] ==== */ int __fastcall hdcp1_create_session(unsigned __int8 *a1, struct hdcp1_session_req *a2) { @@ -1985,7 +1975,7 @@ int __fastcall hdcp2_tx_AKE_Init(struct hdcp2_session *a1, _BYTE *a2, unsigned i if ( v9 <= a3 ) { *a2 = 2; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); v10 = a1->field192[0]; v11 = a1->field192[1]; v12 = a1->field192[3]; @@ -2060,7 +2050,7 @@ int __fastcall hdcp2_tx_AKE_No_Stored_km(int a1, _BYTE *a2, unsigned int a3, _QW { *a2++ = 4; if ( *(_DWORD *)(a1 + 40) == 0 ) - gp_populate_transient_object_op35(); + hdcp_rpc_35(); sub_401058(); sub_401058(); v15 = *(_WORD *)(a1 + 546); @@ -2164,7 +2154,7 @@ int __fastcall hdcp2_tx_LC_Init(_DWORD *a1, _BYTE *a2, int *a3, _DWORD *a4, int } *a2 = 9; a3 = a5; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); v10 = *((_WORD *)a1 + 205); v11 = *((_WORD *)a1 + 206); v12 = *((_WORD *)a1 + 208); @@ -2525,7 +2515,7 @@ int __fastcall hdcp2_tx_SKE_Send_Eks(struct hdcp2_session *a1, _BYTE *a2, unsign goto LABEL_6; } *a2 = 11; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); v58[1] = a1->field192[2] | (a1->field192[3] << 16); v58[0] = a1->field192[0] | (a1->field192[1] << 16); if ( a1->field18[3] < 0x16 ) @@ -2569,7 +2559,7 @@ int __fastcall hdcp2_tx_SKE_Send_Eks(struct hdcp2_session *a1, _BYTE *a2, unsign *v21++ ^= v23; } v24 = &a1->pad235[16]; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); if ( a1->field10 != 6 || a1->field18[3] < 0x17 ) { sub_401058(); @@ -3307,6 +3297,16 @@ int hdcp_rpc_201() return 2; } +/* ==== hdcp_rpc_3 [tier=SVCOP size=42] ==== */ +int hdcp_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + bzero_core(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== hdcp_rpc_300 [tier=SVCOP size=30] ==== */ int hdcp_rpc_300() { @@ -3342,6 +3342,36 @@ int hdcp_rpc_308() return 2; } +/* ==== hdcp_rpc_35 [tier=SVCOP size=42] ==== */ +int hdcp_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== hdcp_rpc_5 [tier=SVCOP size=46] ==== */ +int hdcp_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== hdcp_rpc_E [tier=SVCOP size=46] ==== */ +int hdcp_rpc_E() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== hdcp_session_teardown [tier=MNEM size=84] ==== */ int __fastcall hdcp_session_teardown(_DWORD *a1) { diff --git a/fw/decomp/hdcp_23.0.0.52_c6b25da3.index.json b/fw/decomp/hdcp_23.0.0.52_c6b25da3.index.json index 4af634d..4af40c7 100644 --- a/fw/decomp/hdcp_23.0.0.52_c6b25da3.index.json +++ b/fw/decomp/hdcp_23.0.0.52_c6b25da3.index.json @@ -115,9 +115,9 @@ { "addr": "0x401604", "ida_name": "sub_401604", - "name": null, + "name": "hdcp_rpc_5", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x401632", @@ -143,9 +143,9 @@ { "addr": "0x4016ae", "ida_name": "sub_4016AE", - "name": "gp_populate_transient_object_op35", + "name": "hdcp_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x4016d8", @@ -157,9 +157,9 @@ { "addr": "0x40170c", "ida_name": "sub_40170C", - "name": null, + "name": "hdcp_rpc_E", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x40173a", @@ -171,9 +171,9 @@ { "addr": "0x40176e", "ida_name": "sub_40176E", - "name": null, + "name": "hdcp_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x401798", diff --git a/fw/decomp/hdcp_23.0.0.57_94971234.anon.c b/fw/decomp/hdcp_23.0.0.57_94971234.anon.c index 9f45988..60160ff 100644 --- a/fw/decomp/hdcp_23.0.0.57_94971234.anon.c +++ b/fw/decomp/hdcp_23.0.0.57_94971234.anon.c @@ -1,7 +1,7 @@ /* hdcp 23.0.0.57 (94971234) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: hdcp2.elf - * functions: 101 total in build, 97 named, 4 anonymous + * functions: 101 total in build, 95 named, 6 anonymous * porting tiers: {"DISPATCH": 3, "EXACT": 27, "FUZZY": 0, "MNEM": 29, "ambiguous": 34, "cmd_protos": 0, "comments": 18, "dispatch_conflict": 0, "none": 8, "protos": 56, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -25,33 +25,53 @@ void sub_401058() JUMPOUT(0x401702); } -/* ==== ANON size=42 ==== */ -int sub_40176E() +/* ==== ANON size=34 ==== */ +int sub_40421C() { - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - bzero_core(result: v5, a2: 0x20u); + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=36 ==== */ +int sub_404316() +{ + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=36 ==== */ +int sub_404484() +{ + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + + bzero_core(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } -/* ==== ANON size=46 ==== */ -int sub_40170C() +/* ==== ANON size=36 ==== */ +int sub_40433A() { - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF bzero_core(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } -/* ==== ANON size=46 ==== */ -int sub_401604() +/* ==== ANON size=36 ==== */ +int sub_40435E() { - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF bzero_core(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } diff --git a/fw/decomp/hdcp_23.0.0.57_94971234.c b/fw/decomp/hdcp_23.0.0.57_94971234.c index c6a0ba8..e40f7e1 100644 --- a/fw/decomp/hdcp_23.0.0.57_94971234.c +++ b/fw/decomp/hdcp_23.0.0.57_94971234.c @@ -1,7 +1,7 @@ /* hdcp 23.0.0.57 (94971234) -- named functions * generated by fw/ta_re.py -- do not edit * reference: hdcp2.elf - * functions: 101 total in build, 97 named, 4 anonymous + * functions: 101 total in build, 95 named, 6 anonymous * porting tiers: {"DISPATCH": 3, "EXACT": 27, "FUZZY": 0, "MNEM": 29, "ambiguous": 34, "cmd_protos": 0, "comments": 18, "dispatch_conflict": 0, "none": 8, "protos": 56, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -193,6 +193,16 @@ int __fastcall disp_get_link_status(int a1, int a2, int a3, int a4) return 2; } +/* ==== disp_hdcp1_compute_ri [tier=IDA size=36] ==== */ +int disp_hdcp1_compute_ri() +{ + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + /* ==== disp_hdcp1_read_ri [tier=MNEM size=44] ==== */ // RPC to the display service (SVC 0xF2, target process 2), opcode 0x186. // Frame is 0x18 bytes: {u32 opcode; u32 arg1; u32 arg2}. The name reflects the calling @@ -207,6 +217,96 @@ int __fastcall disp_hdcp1_read_ri(int a1, int a2, int a3) return 2; } +/* ==== disp_hdcp1_read_status [tier=IDA size=44] ==== */ +int disp_hdcp1_read_status() +{ + _DWORD v5[3]; // [sp+0h] [bp-1Ch] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== disp_hdcp1_verify_v [tier=IDA size=38] ==== */ +int disp_hdcp1_verify_v() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== disp_hdcp2_set_caps [tier=IDA size=34] ==== */ +int disp_hdcp2_set_caps() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== disp_hdcp2_set_receiver_id [tier=IDA size=34] ==== */ +int disp_hdcp2_set_receiver_id() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== disp_hdcp2_set_topology [tier=IDA size=44] ==== */ +int disp_hdcp2_set_topology() +{ + _DWORD v5[3]; // [sp+0h] [bp-1Ch] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== disp_hdcp2_stream_manage [tier=IDA size=34] ==== */ +int disp_hdcp2_stream_manage() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== disp_link_reset [tier=IDA size=34] ==== */ +int disp_link_reset() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== disp_srm_read [tier=IDA size=38] ==== */ +int disp_srm_read() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== disp_srm_store [tier=IDA size=38] ==== */ +int disp_srm_store() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + /* ==== gp_asym_verify [tier=EXACT size=58] ==== */ // Call into SYS_DRV via SVC 0xF2 (target process 1), opcode 0xB. // Opcodes below 0x1000 are handled by gp_crypto_dispatch in sys_drv2.elf - this is the @@ -330,16 +430,6 @@ int __fastcall gp_populate_transient_object(int a1, int a2, int a3) return 1; } -/* ==== gp_populate_transient_object_op35 [tier=IDA size=42] ==== */ -int gp_populate_transient_object_op35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== hdcp1_create_session [tier=MNEM size=298] ==== */ int __fastcall hdcp1_create_session(unsigned __int8 *a1, struct hdcp1_session_req *a2) { @@ -380,13 +470,13 @@ int __fastcall hdcp1_create_session(unsigned __int8 *a1, struct hdcp1_session_re *(_DWORD *)(v10 + 4) = v5; *(_DWORD *)(v10 + 8) = 1; *(_DWORD *)a2 = j; - if ( hdcp_rpc_103() != 0 || hdcp_rpc_180() != 0 ) + if ( sub_40421C() != 0 || hdcp_rpc_180() != 0 ) { v3 = 4; } else { - if ( hdcp_rpc_182() == 0 && hdcp_rpc_183() == 0 && hdcp_rpc_184() == 0 ) + if ( sub_404316() == 0 && sub_40435E() == 0 && sub_40433A() == 0 ) { *((_WORD *)a2 + 9) = 0; *((_WORD *)a2 + 11) = 0; @@ -509,7 +599,7 @@ int __fastcall hdcp1_first_part_authentication(struct hdcp1_auth_req *a1, int *a if ( hdcp_rpc_181() != 0 ) { LABEL_6: - hdcp_rpc_160(); + disp_link_reset(); } else { @@ -522,7 +612,7 @@ LABEL_6: if ( hdcp_rpc_302() == 0 ) goto LABEL_17; LABEL_12: - hdcp_rpc_160(); + disp_link_reset(); *a2 = 10; } } @@ -551,7 +641,7 @@ LABEL_17: v31 = v29; v30 = v28; status = 1; - if ( hdcp_rpc_18E() == 0 ) + if ( disp_hdcp1_read_status() == 0 ) { v8 = v6 + 652 * session_idx; if ( *(_DWORD *)(v8 + 16) != 2 ) @@ -563,7 +653,7 @@ LABEL_17: v31 = v27; v30 = v26; status = 1; - if ( hdcp_rpc_18E() == 0 ) + if ( disp_hdcp1_read_status() == 0 ) { LABEL_27: *(_BYTE *)(v8 + 56) = v29; @@ -573,7 +663,7 @@ LABEL_27: v25 = v29; v23 = v27; v22 = v26; - if ( hdcp_rpc_185() != 0 || disp_hdcp1_read_ri(a1: *v7, a2: v19, a3: v18) != 0 ) + if ( disp_hdcp1_compute_ri() != 0 || disp_hdcp1_read_ri(a1: *v7, a2: v19, a3: v18) != 0 ) goto LABEL_6; if ( disp_get_link_status(a1: *v7, a2: v6 + 652 * session_idx + 20, a3: (int)v21, a4: (int)v20) != 0 ) goto LABEL_13; @@ -689,7 +779,7 @@ int __fastcall hdcp1_second_part_authentication(int *a1, int *a2) goto LABEL_22; if ( hdcp_rpc_302() != 0 ) { - hdcp_rpc_160(); + disp_link_reset(); result = 1; v15 = 10; goto LABEL_24; @@ -700,11 +790,11 @@ int __fastcall hdcp1_second_part_authentication(int *a1, int *a2) v14 = 0; bzero(result: (_BYTE *)&v16 + 5 * v7, a2: v14); sub_401058(); - if ( hdcp_rpc_18E() != 0 ) + if ( disp_hdcp1_read_status() != 0 ) goto LABEL_19; - if ( hdcp_rpc_18A() != 0 || (sub_401058(), hdcp_rpc_18C() != 0) ) + if ( hdcp_rpc_18A() != 0 || (sub_401058(), disp_hdcp1_verify_v() != 0) ) { - hdcp_rpc_160(); + disp_link_reset(); LABEL_19: result = 1; goto LABEL_20; @@ -836,7 +926,7 @@ int __fastcall hdcp2_create_session(__int64 *a1, int *a2) } *(_DWORD *)((char *)v5 + dword_401ECC) = v10; *(_DWORD *)((char *)v5 + dword_401ED0) = v9; - if ( hdcp_rpc_1A3() != 0 || hdcp_rpc_103() != 0 ) + if ( disp_hdcp2_set_caps() != 0 || sub_40421C() != 0 ) { return 17; } @@ -1079,7 +1169,7 @@ LABEL_16: else v7 = 0; LABEL_17: - if ( hdcp_rpc_160() != 0 ) + if ( disp_link_reset() != 0 ) v7 = 17; else *(_DWORD *)a2 = *v2; @@ -1272,7 +1362,7 @@ LABEL_18: sub_401058(); sub_401058(); a1->field4F[5] = v5[136] >> 4; - if ( hdcp_rpc_1A4() != 0 ) + if ( disp_hdcp2_set_receiver_id() != 0 ) goto LABEL_21; if ( hdcp_rpc_303() != 0 ) { @@ -1283,7 +1373,7 @@ LABEL_18: if ( a1->field254[5] != 0 && hdcp_rpc_1A8() != 0 ) goto LABEL_21; bzero(result: v19, a2: 0x9Bu); - v17 = hdcp_rpc_1A7(); + v17 = disp_hdcp2_set_topology(); if ( v17 != 0 ) { if ( v17 == 23 ) @@ -1877,7 +1967,7 @@ LABEL_17: if ( a1->field18[1] - 1 > 1 ) goto LABEL_35; a1->field18[2] = 0; - if ( hdcp_rpc_1A3() == 0 ) + if ( disp_hdcp2_set_caps() == 0 ) goto LABEL_35; LABEL_25: result = 17; @@ -1991,8 +2081,8 @@ LABEL_48: v39 = a1->field4F[0]; v49 = a1->field4F[4]; v48 = v39 | (a1->field4F[1] << 8) | ((a1->field4F[2] | (a1->field4F[3] << 8)) << 16); - v40 = hdcp_rpc_1A7(); - if ( v40 != 0 || (a3 = a1->field38, sub_401058(), (v40 = hdcp_rpc_1A7()) != 0) ) + v40 = disp_hdcp2_set_topology(); + if ( v40 != 0 || (a3 = a1->field38, sub_401058(), (v40 = disp_hdcp2_set_topology()) != 0) ) { if ( v40 != 23 ) goto LABEL_25; @@ -2084,7 +2174,7 @@ int __fastcall hdcp2_tx_AKE_Init(struct hdcp2_session *a1, _BYTE *a2, unsigned i if ( v9 <= a3 ) { *a2 = 2; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); v10 = a1->field192[0]; v11 = a1->field192[1]; v12 = a1->field192[3]; @@ -2159,7 +2249,7 @@ int __fastcall hdcp2_tx_AKE_No_Stored_km(int a1, _BYTE *a2, unsigned int a3, _QW { *a2++ = 4; if ( *(_DWORD *)(a1 + 40) == 0 ) - gp_populate_transient_object_op35(); + hdcp_rpc_35(); sub_401058(); sub_401058(); v15 = *(_WORD *)(a1 + 546); @@ -2263,7 +2353,7 @@ int __fastcall hdcp2_tx_LC_Init(_DWORD *a1, _BYTE *a2, int *a3, _DWORD *a4, int } *a2 = 9; a3 = a5; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); v10 = *((_WORD *)a1 + 205); v11 = *((_WORD *)a1 + 206); v12 = *((_WORD *)a1 + 208); @@ -2475,7 +2565,7 @@ int __fastcall hdcp2_tx_RepeaterAuth_Stream_Manage( *((_BYTE *)v5 + 1) = v10->field250 >> 2; *((_BYTE *)v5 + 2) = v10->field250 >> 1; *((_BYTE *)v5 + 3) = v10->field250; - if ( hdcp_rpc_1A5() == 0 ) + if ( disp_hdcp2_stream_manage() == 0 ) goto LABEL_18; result = 17; } @@ -2624,7 +2714,7 @@ int __fastcall hdcp2_tx_SKE_Send_Eks(struct hdcp2_session *a1, _BYTE *a2, unsign goto LABEL_6; } *a2 = 11; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); v58[1] = a1->field192[2] | (a1->field192[3] << 16); v58[0] = a1->field192[0] | (a1->field192[1] << 16); if ( a1->field18[3] < 0x16 ) @@ -2668,7 +2758,7 @@ int __fastcall hdcp2_tx_SKE_Send_Eks(struct hdcp2_session *a1, _BYTE *a2, unsign *v21++ ^= v23; } v24 = &a1->pad235[16]; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); if ( a1->field10 != 6 || a1->field18[3] < 0x17 ) { sub_401058(); @@ -3008,7 +3098,7 @@ int __fastcall hdcp_close_all_sessions() { v4 = hdcp_rpc_18F(); v5 = hdcp_rpc_189(); - if ( hdcp_rpc_160() != 0 ) + if ( disp_link_reset() != 0 ) { v2 = 1; } @@ -3157,7 +3247,7 @@ LABEL_18: sub_401058(); for ( i = 0; i != 16; ++i ) *((_BYTE *)&v17 + i) ^= *((_BYTE *)&v16[8] + i); - if ( hdcp_rpc_1A1() != 0 ) + if ( sub_404484() != 0 ) { v5 = 19; } @@ -3195,31 +3285,11 @@ int __fastcall hdcp_cmd10(unsigned int *a1) int __fastcall hdcp_get_srm_status(int a1) { if ( a1 != 0 ) - return 8 * (hdcp_rpc_300() != 0); + return 8 * (disp_srm_read() != 0); else return 5; } -/* ==== hdcp_rpc_103 [tier=SVCOP size=34] ==== */ -int hdcp_rpc_103() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== hdcp_rpc_160 [tier=SVCOP size=34] ==== */ -int hdcp_rpc_160() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== hdcp_rpc_180 [tier=SVCOP size=32] ==== */ int hdcp_rpc_180() { @@ -3240,46 +3310,6 @@ int hdcp_rpc_181() return 2; } -/* ==== hdcp_rpc_182 [tier=SVCOP size=36] ==== */ -int hdcp_rpc_182() -{ - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== hdcp_rpc_183 [tier=SVCOP size=36] ==== */ -int hdcp_rpc_183() -{ - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== hdcp_rpc_184 [tier=SVCOP size=36] ==== */ -int hdcp_rpc_184() -{ - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== hdcp_rpc_185 [tier=SVCOP size=36] ==== */ -int hdcp_rpc_185() -{ - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== hdcp_rpc_187 [tier=SVCOP size=32] ==== */ int hdcp_rpc_187() { @@ -3320,26 +3350,6 @@ int hdcp_rpc_18A() return 2; } -/* ==== hdcp_rpc_18C [tier=SVCOP size=38] ==== */ -int hdcp_rpc_18C() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== hdcp_rpc_18E [tier=SVCOP size=44] ==== */ -int hdcp_rpc_18E() -{ - _DWORD v5[3]; // [sp+0h] [bp-1Ch] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== hdcp_rpc_18F [tier=SVCOP size=32] ==== */ int hdcp_rpc_18F() { @@ -3360,16 +3370,6 @@ int hdcp_rpc_1A0() return 2; } -/* ==== hdcp_rpc_1A1 [tier=SVCOP size=36] ==== */ -int hdcp_rpc_1A1() -{ - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== hdcp_rpc_1A2 [tier=SVCOP size=32] ==== */ int hdcp_rpc_1A2() { @@ -3380,36 +3380,6 @@ int hdcp_rpc_1A2() return 2; } -/* ==== hdcp_rpc_1A3 [tier=SVCOP size=34] ==== */ -int hdcp_rpc_1A3() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== hdcp_rpc_1A4 [tier=SVCOP size=34] ==== */ -int hdcp_rpc_1A4() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== hdcp_rpc_1A5 [tier=SVCOP size=34] ==== */ -int hdcp_rpc_1A5() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== hdcp_rpc_1A6 [tier=SVCOP size=32] ==== */ int hdcp_rpc_1A6() { @@ -3420,16 +3390,6 @@ int hdcp_rpc_1A6() return 2; } -/* ==== hdcp_rpc_1A7 [tier=SVCOP size=44] ==== */ -int hdcp_rpc_1A7() -{ - _DWORD v5[3]; // [sp+0h] [bp-1Ch] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== hdcp_rpc_1A8 [tier=SVCOP size=32] ==== */ int hdcp_rpc_1A8() { @@ -3460,14 +3420,14 @@ int hdcp_rpc_201() return 2; } -/* ==== hdcp_rpc_300 [tier=SVCOP size=38] ==== */ -int hdcp_rpc_300() +/* ==== hdcp_rpc_3 [tier=SVCOP size=42] ==== */ +int hdcp_rpc_3() { - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - bzero_core(result: v5, a2: 0x18u); + bzero_core(result: v5, a2: 0x20u); __asm { SVC 0xF2 } - return 2; + return 1; } /* ==== hdcp_rpc_302 [tier=SVCOP size=32] ==== */ @@ -3500,14 +3460,34 @@ int hdcp_rpc_307() return 2; } -/* ==== hdcp_rpc_308 [tier=SVCOP size=38] ==== */ -int hdcp_rpc_308() +/* ==== hdcp_rpc_35 [tier=SVCOP size=42] ==== */ +int hdcp_rpc_35() { - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF bzero_core(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 2; + return 1; +} + +/* ==== hdcp_rpc_5 [tier=SVCOP size=46] ==== */ +int hdcp_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== hdcp_rpc_E [tier=SVCOP size=46] ==== */ +int hdcp_rpc_E() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; } /* ==== hdcp_session_teardown [tier=MNEM size=84] ==== */ @@ -3526,7 +3506,7 @@ int __fastcall hdcp_session_teardown(_DWORD *a1) v4 = !v3; v5 = hdcp_rpc_18F(); HIDWORD(v6) = hdcp_rpc_189(); - LODWORD(v6) = hdcp_rpc_160(); + LODWORD(v6) = disp_link_reset(); bzero_core(result: a1, a2: 0x28Cu); if ( v5 != 0 ) v4 = 17; @@ -3539,7 +3519,7 @@ int __fastcall hdcp_session_teardown(_DWORD *a1) int __fastcall hdcp_set_protection(int *a1, int a2) { if ( a1 != nullptr && *a1 != 0 ) - return 8 * (hdcp_rpc_308() != 0); + return 8 * (disp_srm_store() != 0); else return 5; } diff --git a/fw/decomp/hdcp_23.0.0.57_94971234.index.json b/fw/decomp/hdcp_23.0.0.57_94971234.index.json index 90932d4..7e4f96e 100644 --- a/fw/decomp/hdcp_23.0.0.57_94971234.index.json +++ b/fw/decomp/hdcp_23.0.0.57_94971234.index.json @@ -115,9 +115,9 @@ { "addr": "0x401604", "ida_name": "sub_401604", - "name": null, + "name": "hdcp_rpc_5", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x401632", @@ -143,9 +143,9 @@ { "addr": "0x4016ae", "ida_name": "sub_4016AE", - "name": "gp_populate_transient_object_op35", + "name": "hdcp_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x4016d8", @@ -157,9 +157,9 @@ { "addr": "0x40170c", "ida_name": "sub_40170C", - "name": null, + "name": "hdcp_rpc_E", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x40173a", @@ -171,9 +171,9 @@ { "addr": "0x40176e", "ida_name": "sub_40176E", - "name": null, + "name": "hdcp_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x401798", @@ -479,16 +479,16 @@ { "addr": "0x40421c", "ida_name": "sub_40421C", - "name": "hdcp_rpc_103", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x40423e", "ida_name": "sub_40423E", - "name": "hdcp_rpc_18E", + "name": "disp_hdcp1_read_status", "size": 44, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x40426a", @@ -528,23 +528,23 @@ { "addr": "0x404316", "ida_name": "sub_404316", - "name": "hdcp_rpc_182", + "name": null, "size": 36, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x40433a", "ida_name": "sub_40433A", - "name": "hdcp_rpc_184", + "name": null, "size": 36, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x40435e", "ida_name": "sub_40435E", - "name": "hdcp_rpc_183", + "name": null, "size": 36, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x404382", @@ -563,9 +563,9 @@ { "addr": "0x4043c8", "ida_name": "sub_4043C8", - "name": "hdcp_rpc_185", + "name": "disp_hdcp1_compute_ri", "size": 36, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x4043ec", @@ -577,16 +577,16 @@ { "addr": "0x404412", "ida_name": "sub_404412", - "name": "hdcp_rpc_18C", + "name": "disp_hdcp1_verify_v", "size": 38, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x404438", "ida_name": "sub_404438", - "name": "hdcp_rpc_1A7", + "name": "disp_hdcp2_set_topology", "size": 44, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x404464", @@ -598,9 +598,9 @@ { "addr": "0x404484", "ida_name": "sub_404484", - "name": "hdcp_rpc_1A1", + "name": null, "size": 36, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4044a8", @@ -612,9 +612,9 @@ { "addr": "0x4044c8", "ida_name": "sub_4044C8", - "name": "hdcp_rpc_1A5", + "name": "disp_hdcp2_stream_manage", "size": 34, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x4044ea", @@ -633,16 +633,16 @@ { "addr": "0x40452a", "ida_name": "sub_40452A", - "name": "hdcp_rpc_1A3", + "name": "disp_hdcp2_set_caps", "size": 34, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x40454c", "ida_name": "sub_40454C", - "name": "hdcp_rpc_1A4", + "name": "disp_hdcp2_set_receiver_id", "size": 34, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x40456e", @@ -654,9 +654,9 @@ { "addr": "0x40459c", "ida_name": "sub_40459C", - "name": "hdcp_rpc_160", + "name": "disp_link_reset", "size": 34, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x4045be", @@ -675,16 +675,16 @@ { "addr": "0x4045fe", "ida_name": "sub_4045FE", - "name": "hdcp_rpc_300", + "name": "disp_srm_read", "size": 38, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x404624", "ida_name": "sub_404624", - "name": "hdcp_rpc_308", + "name": "disp_srm_store", "size": 38, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x40464a", diff --git a/fw/decomp/hdcp_23.0.0.59_520f9e97.anon.c b/fw/decomp/hdcp_23.0.0.59_520f9e97.anon.c index a6650f2..695ea18 100644 --- a/fw/decomp/hdcp_23.0.0.59_520f9e97.anon.c +++ b/fw/decomp/hdcp_23.0.0.59_520f9e97.anon.c @@ -1,7 +1,7 @@ /* hdcp 23.0.0.59 (520f9e97) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: hdcp2.elf - * functions: 102 total in build, 98 named, 4 anonymous + * functions: 102 total in build, 96 named, 6 anonymous * porting tiers: {"DISPATCH": 3, "EXACT": 30, "FUZZY": 1, "MNEM": 26, "ambiguous": 34, "cmd_protos": 0, "comments": 19, "dispatch_conflict": 0, "none": 8, "protos": 57, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -25,33 +25,53 @@ void sub_401058() JUMPOUT(0x401702); } -/* ==== ANON size=42 ==== */ -int sub_4017F6() +/* ==== ANON size=34 ==== */ +int sub_4042A4() { - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - bzero_core(result: v5, a2: 0x20u); + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=36 ==== */ +int sub_40439E() +{ + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=36 ==== */ +int sub_4043E6() +{ + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + + bzero_core(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } -/* ==== ANON size=46 ==== */ -int sub_40168C() +/* ==== ANON size=36 ==== */ +int sub_40450C() { - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF bzero_core(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } -/* ==== ANON size=46 ==== */ -int sub_401794() +/* ==== ANON size=36 ==== */ +int sub_4043C2() { - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF bzero_core(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } diff --git a/fw/decomp/hdcp_23.0.0.59_520f9e97.c b/fw/decomp/hdcp_23.0.0.59_520f9e97.c index 8763aeb..5f8042c 100644 --- a/fw/decomp/hdcp_23.0.0.59_520f9e97.c +++ b/fw/decomp/hdcp_23.0.0.59_520f9e97.c @@ -1,7 +1,7 @@ /* hdcp 23.0.0.59 (520f9e97) -- named functions * generated by fw/ta_re.py -- do not edit * reference: hdcp2.elf - * functions: 102 total in build, 98 named, 4 anonymous + * functions: 102 total in build, 96 named, 6 anonymous * porting tiers: {"DISPATCH": 3, "EXACT": 30, "FUZZY": 1, "MNEM": 26, "ambiguous": 34, "cmd_protos": 0, "comments": 19, "dispatch_conflict": 0, "none": 8, "protos": 57, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -343,6 +343,16 @@ int __fastcall disp_get_link_status(int a1, int a2, int a3, int a4) return 2; } +/* ==== disp_hdcp1_compute_ri [tier=IDA size=36] ==== */ +int disp_hdcp1_compute_ri() +{ + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + /* ==== disp_hdcp1_read_ri [tier=MNEM size=44] ==== */ // RPC to the display service (SVC 0xF2, target process 2), opcode 0x186. // Frame is 0x18 bytes: {u32 opcode; u32 arg1; u32 arg2}. The name reflects the calling @@ -357,6 +367,96 @@ int __fastcall disp_hdcp1_read_ri(int a1, int a2, int a3) return 2; } +/* ==== disp_hdcp1_read_status [tier=IDA size=44] ==== */ +int disp_hdcp1_read_status() +{ + _DWORD v5[3]; // [sp+0h] [bp-1Ch] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== disp_hdcp1_verify_v [tier=IDA size=38] ==== */ +int disp_hdcp1_verify_v() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== disp_hdcp2_set_caps [tier=IDA size=34] ==== */ +int disp_hdcp2_set_caps() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== disp_hdcp2_set_receiver_id [tier=IDA size=34] ==== */ +int disp_hdcp2_set_receiver_id() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== disp_hdcp2_set_topology [tier=IDA size=44] ==== */ +int disp_hdcp2_set_topology() +{ + _DWORD v5[3]; // [sp+0h] [bp-1Ch] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== disp_hdcp2_stream_manage [tier=IDA size=34] ==== */ +int disp_hdcp2_stream_manage() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== disp_link_reset [tier=IDA size=34] ==== */ +int disp_link_reset() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== disp_srm_read [tier=IDA size=38] ==== */ +int disp_srm_read() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== disp_srm_store [tier=IDA size=38] ==== */ +int disp_srm_store() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + /* ==== gp_asym_verify [tier=EXACT size=58] ==== */ // Call into SYS_DRV via SVC 0xF2 (target process 1), opcode 0xB. // Opcodes below 0x1000 are handled by gp_crypto_dispatch in sys_drv2.elf - this is the @@ -480,16 +580,6 @@ int __fastcall gp_populate_transient_object(int a1, int a2, int a3) return 1; } -/* ==== gp_populate_transient_object_op35 [tier=IDA size=42] ==== */ -int gp_populate_transient_object_op35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== hdcp1_create_session [tier=MNEM size=298] ==== */ int __fastcall hdcp1_create_session(unsigned __int8 *a1, struct hdcp1_session_req *a2) { @@ -530,13 +620,13 @@ int __fastcall hdcp1_create_session(unsigned __int8 *a1, struct hdcp1_session_re *(_DWORD *)(v10 + 4) = v5; *(_DWORD *)(v10 + 8) = 1; *(_DWORD *)a2 = j; - if ( hdcp_rpc_103() != 0 || hdcp_rpc_180() != 0 ) + if ( sub_4042A4() != 0 || hdcp_rpc_180() != 0 ) { v3 = 4; } else { - if ( hdcp_rpc_182() == 0 && hdcp_rpc_183() == 0 && hdcp_rpc_184() == 0 ) + if ( sub_40439E() == 0 && sub_4043E6() == 0 && sub_4043C2() == 0 ) { *((_WORD *)a2 + 9) = 0; *((_WORD *)a2 + 11) = 0; @@ -659,7 +749,7 @@ int __fastcall hdcp1_first_part_authentication(struct hdcp1_auth_req *a1, int *a if ( hdcp_rpc_181() != 0 ) { LABEL_6: - hdcp_rpc_160(); + disp_link_reset(); } else { @@ -672,7 +762,7 @@ LABEL_6: if ( hdcp_rpc_302() == 0 ) goto LABEL_17; LABEL_12: - hdcp_rpc_160(); + disp_link_reset(); *a2 = 10; } } @@ -701,7 +791,7 @@ LABEL_17: v31 = v29; v30 = v28; status = 1; - if ( hdcp_rpc_18E() == 0 ) + if ( disp_hdcp1_read_status() == 0 ) { v8 = v6 + 652 * session_idx; if ( *(_DWORD *)(v8 + 16) != 2 ) @@ -713,7 +803,7 @@ LABEL_17: v31 = v27; v30 = v26; status = 1; - if ( hdcp_rpc_18E() == 0 ) + if ( disp_hdcp1_read_status() == 0 ) { LABEL_27: *(_BYTE *)(v8 + 56) = v29; @@ -723,7 +813,7 @@ LABEL_27: v25 = v29; v23 = v27; v22 = v26; - if ( hdcp_rpc_185() != 0 || disp_hdcp1_read_ri(a1: *v7, a2: v19, a3: v18) != 0 ) + if ( disp_hdcp1_compute_ri() != 0 || disp_hdcp1_read_ri(a1: *v7, a2: v19, a3: v18) != 0 ) goto LABEL_6; if ( disp_get_link_status(a1: *v7, a2: v6 + 652 * session_idx + 20, a3: (int)v21, a4: (int)v20) != 0 ) goto LABEL_13; @@ -839,7 +929,7 @@ int __fastcall hdcp1_second_part_authentication(int *a1, int *a2) goto LABEL_22; if ( hdcp_rpc_302() != 0 ) { - hdcp_rpc_160(); + disp_link_reset(); result = 1; v15 = 10; goto LABEL_24; @@ -850,11 +940,11 @@ int __fastcall hdcp1_second_part_authentication(int *a1, int *a2) v14 = 0; bzero(result: (_BYTE *)&v16 + 5 * v7, a2: v14); sub_401058(); - if ( hdcp_rpc_18E() != 0 ) + if ( disp_hdcp1_read_status() != 0 ) goto LABEL_19; - if ( hdcp_rpc_18A() != 0 || (sub_401058(), hdcp_rpc_18C() != 0) ) + if ( hdcp_rpc_18A() != 0 || (sub_401058(), disp_hdcp1_verify_v() != 0) ) { - hdcp_rpc_160(); + disp_link_reset(); LABEL_19: result = 1; goto LABEL_20; @@ -986,7 +1076,7 @@ int __fastcall hdcp2_create_session(__int64 *a1, int *a2) } *(_DWORD *)((char *)v5 + dword_401F54) = v10; *(_DWORD *)((char *)v5 + dword_401F58) = v9; - if ( hdcp_rpc_1A3() != 0 || hdcp_rpc_103() != 0 ) + if ( disp_hdcp2_set_caps() != 0 || sub_4042A4() != 0 ) { return 17; } @@ -1229,7 +1319,7 @@ LABEL_16: else v7 = 0; LABEL_17: - if ( hdcp_rpc_160() != 0 ) + if ( disp_link_reset() != 0 ) v7 = 17; else *(_DWORD *)a2 = *v2; @@ -1422,7 +1512,7 @@ LABEL_18: sub_401058(); sub_401058(); a1->field4F[5] = v5[136] >> 4; - if ( hdcp_rpc_1A4() != 0 ) + if ( disp_hdcp2_set_receiver_id() != 0 ) goto LABEL_21; if ( hdcp_rpc_303() != 0 ) { @@ -1433,7 +1523,7 @@ LABEL_18: if ( a1->field254[5] != 0 && hdcp_rpc_1A8() != 0 ) goto LABEL_21; bzero(result: v19, a2: 0x9Bu); - v17 = hdcp_rpc_1A7(); + v17 = disp_hdcp2_set_topology(); if ( v17 != 0 ) { if ( v17 == 23 ) @@ -2027,7 +2117,7 @@ LABEL_17: if ( a1->field18[1] - 1 > 1 ) goto LABEL_35; a1->field18[2] = 0; - if ( hdcp_rpc_1A3() == 0 ) + if ( disp_hdcp2_set_caps() == 0 ) goto LABEL_35; LABEL_25: result = 17; @@ -2141,8 +2231,8 @@ LABEL_48: v39 = a1->field4F[0]; v49 = a1->field4F[4]; v48 = v39 | (a1->field4F[1] << 8) | ((a1->field4F[2] | (a1->field4F[3] << 8)) << 16); - v40 = hdcp_rpc_1A7(); - if ( v40 != 0 || (a3 = a1->field38, sub_401058(), (v40 = hdcp_rpc_1A7()) != 0) ) + v40 = disp_hdcp2_set_topology(); + if ( v40 != 0 || (a3 = a1->field38, sub_401058(), (v40 = disp_hdcp2_set_topology()) != 0) ) { if ( v40 != 23 ) goto LABEL_25; @@ -2234,7 +2324,7 @@ int __fastcall hdcp2_tx_AKE_Init(struct hdcp2_session *a1, _BYTE *a2, unsigned i if ( v9 <= a3 ) { *a2 = 2; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); v10 = a1->field192[0]; v11 = a1->field192[1]; v12 = a1->field192[3]; @@ -2309,7 +2399,7 @@ int __fastcall hdcp2_tx_AKE_No_Stored_km(int a1, _BYTE *a2, unsigned int a3, _QW { *a2++ = 4; if ( *(_DWORD *)(a1 + 40) == 0 ) - gp_populate_transient_object_op35(); + hdcp_rpc_35(); sub_401058(); sub_401058(); v15 = *(_WORD *)(a1 + 546); @@ -2413,7 +2503,7 @@ int __fastcall hdcp2_tx_LC_Init(_DWORD *a1, _BYTE *a2, int *a3, _DWORD *a4, int } *a2 = 9; a3 = a5; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); v10 = *((_WORD *)a1 + 205); v11 = *((_WORD *)a1 + 206); v12 = *((_WORD *)a1 + 208); @@ -2625,7 +2715,7 @@ int __fastcall hdcp2_tx_RepeaterAuth_Stream_Manage( *((_BYTE *)v5 + 1) = v10->field250 >> 2; *((_BYTE *)v5 + 2) = v10->field250 >> 1; *((_BYTE *)v5 + 3) = v10->field250; - if ( hdcp_rpc_1A5() == 0 ) + if ( disp_hdcp2_stream_manage() == 0 ) goto LABEL_18; result = 17; } @@ -2774,7 +2864,7 @@ int __fastcall hdcp2_tx_SKE_Send_Eks(struct hdcp2_session *a1, _BYTE *a2, unsign goto LABEL_6; } *a2 = 11; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); v58[1] = a1->field192[2] | (a1->field192[3] << 16); v58[0] = a1->field192[0] | (a1->field192[1] << 16); if ( a1->field18[3] < 0x16 ) @@ -2818,7 +2908,7 @@ int __fastcall hdcp2_tx_SKE_Send_Eks(struct hdcp2_session *a1, _BYTE *a2, unsign *v21++ ^= v23; } v24 = &a1->pad235[16]; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); if ( a1->field10 != 6 || a1->field18[3] < 0x17 ) { sub_401058(); @@ -3070,7 +3160,7 @@ int __fastcall hdcp_close_all_sessions() { v4 = hdcp_rpc_18F(); v5 = hdcp_rpc_189(); - if ( hdcp_rpc_160() != 0 ) + if ( disp_link_reset() != 0 ) { v2 = 1; } @@ -3219,7 +3309,7 @@ LABEL_18: sub_401058(); for ( i = 0; i != 16; ++i ) *((_BYTE *)&v17 + i) ^= *((_BYTE *)&v16[8] + i); - if ( hdcp_rpc_1A1() != 0 ) + if ( sub_40450C() != 0 ) { v5 = 19; } @@ -3257,31 +3347,11 @@ int __fastcall hdcp_cmd10(unsigned int *a1) int __fastcall hdcp_get_srm_status(int a1) { if ( a1 != 0 ) - return 8 * (hdcp_rpc_300() != 0); + return 8 * (disp_srm_read() != 0); else return 5; } -/* ==== hdcp_rpc_103 [tier=SVCOP size=34] ==== */ -int hdcp_rpc_103() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== hdcp_rpc_160 [tier=SVCOP size=34] ==== */ -int hdcp_rpc_160() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== hdcp_rpc_180 [tier=SVCOP size=32] ==== */ int hdcp_rpc_180() { @@ -3302,46 +3372,6 @@ int hdcp_rpc_181() return 2; } -/* ==== hdcp_rpc_182 [tier=SVCOP size=36] ==== */ -int hdcp_rpc_182() -{ - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== hdcp_rpc_183 [tier=SVCOP size=36] ==== */ -int hdcp_rpc_183() -{ - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== hdcp_rpc_184 [tier=SVCOP size=36] ==== */ -int hdcp_rpc_184() -{ - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== hdcp_rpc_185 [tier=SVCOP size=36] ==== */ -int hdcp_rpc_185() -{ - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== hdcp_rpc_187 [tier=SVCOP size=32] ==== */ int hdcp_rpc_187() { @@ -3382,26 +3412,6 @@ int hdcp_rpc_18A() return 2; } -/* ==== hdcp_rpc_18C [tier=SVCOP size=38] ==== */ -int hdcp_rpc_18C() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== hdcp_rpc_18E [tier=SVCOP size=44] ==== */ -int hdcp_rpc_18E() -{ - _DWORD v5[3]; // [sp+0h] [bp-1Ch] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== hdcp_rpc_18F [tier=SVCOP size=32] ==== */ int hdcp_rpc_18F() { @@ -3422,16 +3432,6 @@ int hdcp_rpc_1A0() return 2; } -/* ==== hdcp_rpc_1A1 [tier=SVCOP size=36] ==== */ -int hdcp_rpc_1A1() -{ - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== hdcp_rpc_1A2 [tier=SVCOP size=32] ==== */ int hdcp_rpc_1A2() { @@ -3442,36 +3442,6 @@ int hdcp_rpc_1A2() return 2; } -/* ==== hdcp_rpc_1A3 [tier=SVCOP size=34] ==== */ -int hdcp_rpc_1A3() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== hdcp_rpc_1A4 [tier=SVCOP size=34] ==== */ -int hdcp_rpc_1A4() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== hdcp_rpc_1A5 [tier=SVCOP size=34] ==== */ -int hdcp_rpc_1A5() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== hdcp_rpc_1A6 [tier=SVCOP size=32] ==== */ int hdcp_rpc_1A6() { @@ -3482,16 +3452,6 @@ int hdcp_rpc_1A6() return 2; } -/* ==== hdcp_rpc_1A7 [tier=SVCOP size=44] ==== */ -int hdcp_rpc_1A7() -{ - _DWORD v5[3]; // [sp+0h] [bp-1Ch] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - /* ==== hdcp_rpc_1A8 [tier=SVCOP size=32] ==== */ int hdcp_rpc_1A8() { @@ -3532,14 +3492,14 @@ int hdcp_rpc_208() return 2; } -/* ==== hdcp_rpc_300 [tier=SVCOP size=38] ==== */ -int hdcp_rpc_300() +/* ==== hdcp_rpc_3 [tier=SVCOP size=42] ==== */ +int hdcp_rpc_3() { - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - bzero_core(result: v5, a2: 0x18u); + bzero_core(result: v5, a2: 0x20u); __asm { SVC 0xF2 } - return 2; + return 1; } /* ==== hdcp_rpc_302 [tier=SVCOP size=32] ==== */ @@ -3572,14 +3532,34 @@ int hdcp_rpc_307() return 2; } -/* ==== hdcp_rpc_308 [tier=SVCOP size=38] ==== */ -int hdcp_rpc_308() +/* ==== hdcp_rpc_35 [tier=SVCOP size=42] ==== */ +int hdcp_rpc_35() { - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF bzero_core(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 2; + return 1; +} + +/* ==== hdcp_rpc_5 [tier=SVCOP size=46] ==== */ +int hdcp_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== hdcp_rpc_E [tier=SVCOP size=46] ==== */ +int hdcp_rpc_E() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; } /* ==== hdcp_session_teardown [tier=MNEM size=84] ==== */ @@ -3598,7 +3578,7 @@ int __fastcall hdcp_session_teardown(_DWORD *a1) v4 = !v3; v5 = hdcp_rpc_18F(); HIDWORD(v6) = hdcp_rpc_189(); - LODWORD(v6) = hdcp_rpc_160(); + LODWORD(v6) = disp_link_reset(); bzero_core(result: a1, a2: 0x28Cu); if ( v5 != 0 ) v4 = 17; @@ -3611,7 +3591,7 @@ int __fastcall hdcp_session_teardown(_DWORD *a1) int __fastcall hdcp_set_protection(int *a1, int a2) { if ( a1 != nullptr && *a1 != 0 ) - return 8 * (hdcp_rpc_308() != 0); + return 8 * (disp_srm_store() != 0); else return 5; } diff --git a/fw/decomp/hdcp_23.0.0.59_520f9e97.index.json b/fw/decomp/hdcp_23.0.0.59_520f9e97.index.json index 0be243c..18df840 100644 --- a/fw/decomp/hdcp_23.0.0.59_520f9e97.index.json +++ b/fw/decomp/hdcp_23.0.0.59_520f9e97.index.json @@ -115,9 +115,9 @@ { "addr": "0x40168c", "ida_name": "sub_40168C", - "name": null, + "name": "hdcp_rpc_5", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x4016ba", @@ -143,9 +143,9 @@ { "addr": "0x401736", "ida_name": "sub_401736", - "name": "gp_populate_transient_object_op35", + "name": "hdcp_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x401760", @@ -157,9 +157,9 @@ { "addr": "0x401794", "ida_name": "sub_401794", - "name": null, + "name": "hdcp_rpc_E", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x4017c2", @@ -171,9 +171,9 @@ { "addr": "0x4017f6", "ida_name": "sub_4017F6", - "name": null, + "name": "hdcp_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x401820", @@ -479,16 +479,16 @@ { "addr": "0x4042a4", "ida_name": "sub_4042A4", - "name": "hdcp_rpc_103", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4042c6", "ida_name": "sub_4042C6", - "name": "hdcp_rpc_18E", + "name": "disp_hdcp1_read_status", "size": 44, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x4042f2", @@ -528,23 +528,23 @@ { "addr": "0x40439e", "ida_name": "sub_40439E", - "name": "hdcp_rpc_182", + "name": null, "size": 36, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4043c2", "ida_name": "sub_4043C2", - "name": "hdcp_rpc_184", + "name": null, "size": 36, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4043e6", "ida_name": "sub_4043E6", - "name": "hdcp_rpc_183", + "name": null, "size": 36, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x40440a", @@ -563,9 +563,9 @@ { "addr": "0x404450", "ida_name": "sub_404450", - "name": "hdcp_rpc_185", + "name": "disp_hdcp1_compute_ri", "size": 36, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x404474", @@ -577,16 +577,16 @@ { "addr": "0x40449a", "ida_name": "sub_40449A", - "name": "hdcp_rpc_18C", + "name": "disp_hdcp1_verify_v", "size": 38, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x4044c0", "ida_name": "sub_4044C0", - "name": "hdcp_rpc_1A7", + "name": "disp_hdcp2_set_topology", "size": 44, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x4044ec", @@ -598,9 +598,9 @@ { "addr": "0x40450c", "ida_name": "sub_40450C", - "name": "hdcp_rpc_1A1", + "name": null, "size": 36, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x404530", @@ -612,9 +612,9 @@ { "addr": "0x404550", "ida_name": "sub_404550", - "name": "hdcp_rpc_1A5", + "name": "disp_hdcp2_stream_manage", "size": 34, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x404572", @@ -633,16 +633,16 @@ { "addr": "0x4045b2", "ida_name": "sub_4045B2", - "name": "hdcp_rpc_1A3", + "name": "disp_hdcp2_set_caps", "size": 34, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x4045d4", "ida_name": "sub_4045D4", - "name": "hdcp_rpc_1A4", + "name": "disp_hdcp2_set_receiver_id", "size": 34, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x4045f6", @@ -654,9 +654,9 @@ { "addr": "0x404624", "ida_name": "sub_404624", - "name": "hdcp_rpc_160", + "name": "disp_link_reset", "size": 34, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x404646", @@ -675,16 +675,16 @@ { "addr": "0x404686", "ida_name": "sub_404686", - "name": "hdcp_rpc_300", + "name": "disp_srm_read", "size": 38, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x4046ac", "ida_name": "sub_4046AC", - "name": "hdcp_rpc_308", + "name": "disp_srm_store", "size": 38, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x4046d2", diff --git a/fw/decomp/hdcp_23.0.4.49_0478f2fb.anon.c b/fw/decomp/hdcp_23.0.4.49_0478f2fb.anon.c index 77a180d..a7daebc 100644 --- a/fw/decomp/hdcp_23.0.4.49_0478f2fb.anon.c +++ b/fw/decomp/hdcp_23.0.4.49_0478f2fb.anon.c @@ -1,7 +1,7 @@ /* hdcp 23.0.4.49 (0478f2fb) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: hdcp2.elf - * functions: 100 total in build, 96 named, 4 anonymous + * functions: 100 total in build, 99 named, 1 anonymous * porting tiers: {"DISPATCH": 3, "EXACT": 33, "FUZZY": 0, "MNEM": 20, "ambiguous": 10, "cmd_protos": 0, "comments": 16, "dispatch_conflict": 0, "none": 34, "protos": 53, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -25,33 +25,3 @@ void sub_401058() JUMPOUT(0x401702); } -/* ==== ANON size=42 ==== */ -int sub_40176E() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - bzero_core(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ -int sub_40170C() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ -int sub_401604() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - diff --git a/fw/decomp/hdcp_23.0.4.49_0478f2fb.c b/fw/decomp/hdcp_23.0.4.49_0478f2fb.c index 374a04a..87ec608 100644 --- a/fw/decomp/hdcp_23.0.4.49_0478f2fb.c +++ b/fw/decomp/hdcp_23.0.4.49_0478f2fb.c @@ -1,7 +1,7 @@ /* hdcp 23.0.4.49 (0478f2fb) -- named functions * generated by fw/ta_re.py -- do not edit * reference: hdcp2.elf - * functions: 100 total in build, 96 named, 4 anonymous + * functions: 100 total in build, 99 named, 1 anonymous * porting tiers: {"DISPATCH": 3, "EXACT": 33, "FUZZY": 0, "MNEM": 20, "ambiguous": 10, "cmd_protos": 0, "comments": 16, "dispatch_conflict": 0, "none": 34, "protos": 53, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -282,16 +282,6 @@ int __fastcall gp_populate_transient_object(int a1, int a2, int a3) return 1; } -/* ==== gp_populate_transient_object_op35 [tier=IDA size=42] ==== */ -int gp_populate_transient_object_op35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== hdcp1_create_session [tier=EXACT size=298] ==== */ int __fastcall hdcp1_create_session(unsigned __int8 *a1, struct hdcp1_session_req *a2) { @@ -1982,7 +1972,7 @@ int __fastcall hdcp2_tx_AKE_Init(struct hdcp2_session *a1, _BYTE *a2, unsigned i if ( v9 <= a3 ) { *a2 = 2; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); v10 = a1->field192[0]; v11 = a1->field192[1]; v12 = a1->field192[3]; @@ -2057,7 +2047,7 @@ int __fastcall hdcp2_tx_AKE_No_Stored_km(int a1, _BYTE *a2, unsigned int a3, _QW { *a2++ = 4; if ( *(_DWORD *)(a1 + 40) == 0 ) - gp_populate_transient_object_op35(); + hdcp_rpc_35(); sub_401058(); sub_401058(); v15 = *(_WORD *)(a1 + 546); @@ -2161,7 +2151,7 @@ int __fastcall hdcp2_tx_LC_Init(_DWORD *a1, _BYTE *a2, int *a3, _DWORD *a4, int } *a2 = 9; a3 = a5; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); v10 = *((_WORD *)a1 + 205); v11 = *((_WORD *)a1 + 206); v12 = *((_WORD *)a1 + 208); @@ -2522,7 +2512,7 @@ int __fastcall hdcp2_tx_SKE_Send_Eks(struct hdcp2_session *a1, _BYTE *a2, unsign goto LABEL_6; } *a2 = 11; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); v58[1] = a1->field192[2] | (a1->field192[3] << 16); v58[0] = a1->field192[0] | (a1->field192[1] << 16); if ( a1->field18[3] < 0x16 ) @@ -2566,7 +2556,7 @@ int __fastcall hdcp2_tx_SKE_Send_Eks(struct hdcp2_session *a1, _BYTE *a2, unsign *v21++ ^= v23; } v24 = &a1->pad235[16]; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); if ( a1->field10 != 6 || a1->field18[3] < 0x17 ) { sub_401058(); @@ -3298,6 +3288,16 @@ int hdcp_rpc_201() return 2; } +/* ==== hdcp_rpc_3 [tier=SVCOP size=42] ==== */ +int hdcp_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + bzero_core(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== hdcp_rpc_300 [tier=SVCOP size=30] ==== */ int hdcp_rpc_300() { @@ -3333,6 +3333,36 @@ int hdcp_rpc_308() return 2; } +/* ==== hdcp_rpc_35 [tier=SVCOP size=42] ==== */ +int hdcp_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== hdcp_rpc_5 [tier=SVCOP size=46] ==== */ +int hdcp_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== hdcp_rpc_E [tier=SVCOP size=46] ==== */ +int hdcp_rpc_E() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== hdcp_session_teardown [tier=EXACT size=84] ==== */ int __fastcall hdcp_session_teardown(_DWORD *a1) { diff --git a/fw/decomp/hdcp_23.0.4.49_0478f2fb.index.json b/fw/decomp/hdcp_23.0.4.49_0478f2fb.index.json index facc9cd..006eb5c 100644 --- a/fw/decomp/hdcp_23.0.4.49_0478f2fb.index.json +++ b/fw/decomp/hdcp_23.0.4.49_0478f2fb.index.json @@ -115,9 +115,9 @@ { "addr": "0x401604", "ida_name": "sub_401604", - "name": null, + "name": "hdcp_rpc_5", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x401632", @@ -143,9 +143,9 @@ { "addr": "0x4016ae", "ida_name": "sub_4016AE", - "name": "gp_populate_transient_object_op35", + "name": "hdcp_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x4016d8", @@ -157,9 +157,9 @@ { "addr": "0x40170c", "ida_name": "sub_40170C", - "name": null, + "name": "hdcp_rpc_E", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x40173a", @@ -171,9 +171,9 @@ { "addr": "0x40176e", "ida_name": "sub_40176E", - "name": null, + "name": "hdcp_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x401798", diff --git a/fw/decomp/hdcp_23.0.4.49_543e8a45.anon.c b/fw/decomp/hdcp_23.0.4.49_543e8a45.anon.c index b6cd551..df88898 100644 --- a/fw/decomp/hdcp_23.0.4.49_543e8a45.anon.c +++ b/fw/decomp/hdcp_23.0.4.49_543e8a45.anon.c @@ -1,7 +1,7 @@ /* hdcp 23.0.4.49 (543e8a45) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: hdcp2.elf - * functions: 100 total in build, 96 named, 4 anonymous + * functions: 100 total in build, 99 named, 1 anonymous * porting tiers: {"DISPATCH": 3, "EXACT": 34, "FUZZY": 0, "MNEM": 19, "ambiguous": 10, "cmd_protos": 0, "comments": 16, "dispatch_conflict": 0, "none": 34, "protos": 53, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -25,33 +25,3 @@ void sub_401058() JUMPOUT(0x401702); } -/* ==== ANON size=42 ==== */ -int sub_40176E() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - bzero_core(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ -int sub_40170C() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ -int sub_401604() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - diff --git a/fw/decomp/hdcp_23.0.4.49_543e8a45.c b/fw/decomp/hdcp_23.0.4.49_543e8a45.c index 26bd62e..8f1c0e5 100644 --- a/fw/decomp/hdcp_23.0.4.49_543e8a45.c +++ b/fw/decomp/hdcp_23.0.4.49_543e8a45.c @@ -1,7 +1,7 @@ /* hdcp 23.0.4.49 (543e8a45) -- named functions * generated by fw/ta_re.py -- do not edit * reference: hdcp2.elf - * functions: 100 total in build, 96 named, 4 anonymous + * functions: 100 total in build, 99 named, 1 anonymous * porting tiers: {"DISPATCH": 3, "EXACT": 34, "FUZZY": 0, "MNEM": 19, "ambiguous": 10, "cmd_protos": 0, "comments": 16, "dispatch_conflict": 0, "none": 34, "protos": 53, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -282,16 +282,6 @@ int __fastcall gp_populate_transient_object(int a1, int a2, int a3) return 1; } -/* ==== gp_populate_transient_object_op35 [tier=IDA size=42] ==== */ -int gp_populate_transient_object_op35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== hdcp1_create_session [tier=EXACT size=298] ==== */ int __fastcall hdcp1_create_session(unsigned __int8 *a1, struct hdcp1_session_req *a2) { @@ -1982,7 +1972,7 @@ int __fastcall hdcp2_tx_AKE_Init(struct hdcp2_session *a1, _BYTE *a2, unsigned i if ( v9 <= a3 ) { *a2 = 2; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); v10 = a1->field192[0]; v11 = a1->field192[1]; v12 = a1->field192[3]; @@ -2057,7 +2047,7 @@ int __fastcall hdcp2_tx_AKE_No_Stored_km(int a1, _BYTE *a2, unsigned int a3, _QW { *a2++ = 4; if ( *(_DWORD *)(a1 + 40) == 0 ) - gp_populate_transient_object_op35(); + hdcp_rpc_35(); sub_401058(); sub_401058(); v15 = *(_WORD *)(a1 + 546); @@ -2161,7 +2151,7 @@ int __fastcall hdcp2_tx_LC_Init(_DWORD *a1, _BYTE *a2, int *a3, _DWORD *a4, int } *a2 = 9; a3 = a5; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); v10 = *((_WORD *)a1 + 205); v11 = *((_WORD *)a1 + 206); v12 = *((_WORD *)a1 + 208); @@ -2522,7 +2512,7 @@ int __fastcall hdcp2_tx_SKE_Send_Eks(struct hdcp2_session *a1, _BYTE *a2, unsign goto LABEL_6; } *a2 = 11; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); v58[1] = a1->field192[2] | (a1->field192[3] << 16); v58[0] = a1->field192[0] | (a1->field192[1] << 16); if ( a1->field18[3] < 0x16 ) @@ -2566,7 +2556,7 @@ int __fastcall hdcp2_tx_SKE_Send_Eks(struct hdcp2_session *a1, _BYTE *a2, unsign *v21++ ^= v23; } v24 = &a1->pad235[16]; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); if ( a1->field10 != 6 || a1->field18[3] < 0x17 ) { sub_401058(); @@ -3297,6 +3287,16 @@ int hdcp_rpc_201() return 2; } +/* ==== hdcp_rpc_3 [tier=SVCOP size=42] ==== */ +int hdcp_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + bzero_core(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== hdcp_rpc_300 [tier=SVCOP size=30] ==== */ int hdcp_rpc_300() { @@ -3332,6 +3332,36 @@ int hdcp_rpc_308() return 2; } +/* ==== hdcp_rpc_35 [tier=SVCOP size=42] ==== */ +int hdcp_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== hdcp_rpc_5 [tier=SVCOP size=46] ==== */ +int hdcp_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== hdcp_rpc_E [tier=SVCOP size=46] ==== */ +int hdcp_rpc_E() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== hdcp_session_teardown [tier=EXACT size=84] ==== */ int __fastcall hdcp_session_teardown(_DWORD *a1) { diff --git a/fw/decomp/hdcp_23.0.4.49_543e8a45.index.json b/fw/decomp/hdcp_23.0.4.49_543e8a45.index.json index 45b745d..7390bbf 100644 --- a/fw/decomp/hdcp_23.0.4.49_543e8a45.index.json +++ b/fw/decomp/hdcp_23.0.4.49_543e8a45.index.json @@ -115,9 +115,9 @@ { "addr": "0x401604", "ida_name": "sub_401604", - "name": null, + "name": "hdcp_rpc_5", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x401632", @@ -143,9 +143,9 @@ { "addr": "0x4016ae", "ida_name": "sub_4016AE", - "name": "gp_populate_transient_object_op35", + "name": "hdcp_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x4016d8", @@ -157,9 +157,9 @@ { "addr": "0x40170c", "ida_name": "sub_40170C", - "name": null, + "name": "hdcp_rpc_E", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x40173a", @@ -171,9 +171,9 @@ { "addr": "0x40176e", "ida_name": "sub_40176E", - "name": null, + "name": "hdcp_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x401798", diff --git a/fw/decomp/hdcp_23.0.8.49_40cdde34.anon.c b/fw/decomp/hdcp_23.0.8.49_40cdde34.anon.c index 965cd63..1ac462e 100644 --- a/fw/decomp/hdcp_23.0.8.49_40cdde34.anon.c +++ b/fw/decomp/hdcp_23.0.8.49_40cdde34.anon.c @@ -1,7 +1,7 @@ /* hdcp 23.0.8.49 (40cdde34) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: hdcp2.elf - * functions: 100 total in build, 96 named, 4 anonymous + * functions: 100 total in build, 99 named, 1 anonymous * porting tiers: {"DISPATCH": 3, "EXACT": 34, "FUZZY": 0, "MNEM": 18, "ambiguous": 10, "cmd_protos": 0, "comments": 16, "dispatch_conflict": 0, "none": 35, "protos": 52, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -25,33 +25,3 @@ void sub_401058() JUMPOUT(0x401702); } -/* ==== ANON size=42 ==== */ -int sub_40176E() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - bzero_core(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ -int sub_40170C() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=46 ==== */ -int sub_401604() -{ - _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - diff --git a/fw/decomp/hdcp_23.0.8.49_40cdde34.c b/fw/decomp/hdcp_23.0.8.49_40cdde34.c index 837b202..c456289 100644 --- a/fw/decomp/hdcp_23.0.8.49_40cdde34.c +++ b/fw/decomp/hdcp_23.0.8.49_40cdde34.c @@ -1,7 +1,7 @@ /* hdcp 23.0.8.49 (40cdde34) -- named functions * generated by fw/ta_re.py -- do not edit * reference: hdcp2.elf - * functions: 100 total in build, 96 named, 4 anonymous + * functions: 100 total in build, 99 named, 1 anonymous * porting tiers: {"DISPATCH": 3, "EXACT": 34, "FUZZY": 0, "MNEM": 18, "ambiguous": 10, "cmd_protos": 0, "comments": 16, "dispatch_conflict": 0, "none": 35, "protos": 52, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -282,16 +282,6 @@ int __fastcall gp_populate_transient_object(int a1, int a2, int a3) return 1; } -/* ==== gp_populate_transient_object_op35 [tier=IDA size=42] ==== */ -int gp_populate_transient_object_op35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - bzero_core(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== hdcp1_create_session [tier=EXACT size=298] ==== */ int __fastcall hdcp1_create_session(unsigned __int8 *a1, struct hdcp1_session_req *a2) { @@ -1982,7 +1972,7 @@ int __fastcall hdcp2_tx_AKE_Init(struct hdcp2_session *a1, _BYTE *a2, unsigned i if ( v9 <= a3 ) { *a2 = 2; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); v10 = a1->field192[0]; v11 = a1->field192[1]; v12 = a1->field192[3]; @@ -2057,7 +2047,7 @@ int __fastcall hdcp2_tx_AKE_No_Stored_km(int a1, _BYTE *a2, unsigned int a3, _QW { *a2++ = 4; if ( *(_DWORD *)(a1 + 40) == 0 ) - gp_populate_transient_object_op35(); + hdcp_rpc_35(); sub_401058(); sub_401058(); v15 = *(_WORD *)(a1 + 546); @@ -2161,7 +2151,7 @@ int __fastcall hdcp2_tx_LC_Init(_DWORD *a1, _BYTE *a2, int *a3, _DWORD *a4, int } *a2 = 9; a3 = a5; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); v10 = *((_WORD *)a1 + 205); v11 = *((_WORD *)a1 + 206); v12 = *((_WORD *)a1 + 208); @@ -2522,7 +2512,7 @@ int __fastcall hdcp2_tx_SKE_Send_Eks(struct hdcp2_session *a1, _BYTE *a2, unsign goto LABEL_6; } *a2 = 11; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); v58[1] = a1->field192[2] | (a1->field192[3] << 16); v58[0] = a1->field192[0] | (a1->field192[1] << 16); if ( a1->field18[3] < 0x16 ) @@ -2566,7 +2556,7 @@ int __fastcall hdcp2_tx_SKE_Send_Eks(struct hdcp2_session *a1, _BYTE *a2, unsign *v21++ ^= v23; } v24 = &a1->pad235[16]; - gp_populate_transient_object_op35(); + hdcp_rpc_35(); if ( a1->field10 != 6 || a1->field18[3] < 0x17 ) { sub_401058(); @@ -3304,6 +3294,16 @@ int hdcp_rpc_201() return 2; } +/* ==== hdcp_rpc_3 [tier=SVCOP size=42] ==== */ +int hdcp_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + bzero_core(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== hdcp_rpc_300 [tier=SVCOP size=30] ==== */ int hdcp_rpc_300() { @@ -3339,6 +3339,36 @@ int hdcp_rpc_308() return 2; } +/* ==== hdcp_rpc_35 [tier=SVCOP size=42] ==== */ +int hdcp_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== hdcp_rpc_5 [tier=SVCOP size=46] ==== */ +int hdcp_rpc_5() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== hdcp_rpc_E [tier=SVCOP size=46] ==== */ +int hdcp_rpc_E() +{ + _DWORD v5[10]; // [sp+10h] [bp+10h] BYREF + + bzero_core(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== hdcp_session_teardown [tier=EXACT size=84] ==== */ int __fastcall hdcp_session_teardown(_DWORD *a1) { diff --git a/fw/decomp/hdcp_23.0.8.49_40cdde34.index.json b/fw/decomp/hdcp_23.0.8.49_40cdde34.index.json index 0b799df..c6705aa 100644 --- a/fw/decomp/hdcp_23.0.8.49_40cdde34.index.json +++ b/fw/decomp/hdcp_23.0.8.49_40cdde34.index.json @@ -115,9 +115,9 @@ { "addr": "0x401604", "ida_name": "sub_401604", - "name": null, + "name": "hdcp_rpc_5", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x401632", @@ -143,9 +143,9 @@ { "addr": "0x4016ae", "ida_name": "sub_4016AE", - "name": "gp_populate_transient_object_op35", + "name": "hdcp_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x4016d8", @@ -157,9 +157,9 @@ { "addr": "0x40170c", "ida_name": "sub_40170C", - "name": null, + "name": "hdcp_rpc_E", "size": 46, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x40173a", @@ -171,9 +171,9 @@ { "addr": "0x40176e", "ida_name": "sub_40176E", - "name": null, + "name": "hdcp_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x401798", diff --git a/fw/decomp/merit.summary.json b/fw/decomp/merit.summary.json index 093d70b..f60cd16 100644 --- a/fw/decomp/merit.summary.json +++ b/fw/decomp/merit.summary.json @@ -43,7 +43,7 @@ "0x5": "0x401aa0", "0x6": "0x401940" }, - "named": 29, + "named": 31, "stats": { "EXACT": 13, "MNEM": 14, @@ -74,7 +74,7 @@ "0x5": "0x401ac8", "0x6": "0x401968" }, - "named": 28, + "named": 30, "stats": { "EXACT": 11, "MNEM": 11, @@ -105,7 +105,7 @@ "0x5": "0x401b1c", "0x6": "0x4019bc" }, - "named": 27, + "named": 29, "stats": { "EXACT": 9, "MNEM": 11, @@ -136,7 +136,7 @@ "0x5": "0x401b9c", "0x6": "0x401a3c" }, - "named": 27, + "named": 29, "stats": { "EXACT": 9, "MNEM": 11, @@ -167,7 +167,7 @@ "0x5": "0x401bbc", "0x6": "0x401a5c" }, - "named": 28, + "named": 30, "stats": { "EXACT": 9, "MNEM": 11, @@ -198,7 +198,7 @@ "0x5": "0x401bbc", "0x6": "0x401a5c" }, - "named": 28, + "named": 30, "stats": { "EXACT": 20, "MNEM": 0, @@ -229,7 +229,7 @@ "0x5": "0x401bfc", "0x6": "0x401a9c" }, - "named": 27, + "named": 29, "stats": { "EXACT": 8, "MNEM": 11, @@ -260,7 +260,7 @@ "0x5": "0x401c3c", "0x6": "0x401adc" }, - "named": 29, + "named": 31, "stats": { "EXACT": 9, "MNEM": 11, @@ -291,7 +291,7 @@ "0x5": "0x401cb8", "0x6": "0x401b58" }, - "named": 28, + "named": 30, "stats": { "EXACT": 9, "MNEM": 11, @@ -322,7 +322,7 @@ "0x5": "0x401cb8", "0x6": "0x401b58" }, - "named": 28, + "named": 30, "stats": { "EXACT": 20, "MNEM": 0, diff --git a/fw/decomp/merit_24.0.0.46_4d02c1b9.anon.c b/fw/decomp/merit_24.0.0.46_4d02c1b9.anon.c index 39651a8..46228d2 100644 --- a/fw/decomp/merit_24.0.0.46_4d02c1b9.anon.c +++ b/fw/decomp/merit_24.0.0.46_4d02c1b9.anon.c @@ -1,7 +1,7 @@ /* merit 24.0.0.46 (4d02c1b9) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: merit_24.0.4.42_444eceee.elf - * functions: 36 total in build, 29 named, 7 anonymous + * functions: 36 total in build, 30 named, 6 anonymous * porting tiers: {"DISPATCH": 2, "EXACT": 11, "FUZZY": 1, "MNEM": 11, "ambiguous": 4, "cmd_protos": 6, "comments": 0, "dispatch_conflict": 0, "none": 7, "protos": 7, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -220,16 +220,6 @@ void __fastcall sub_40C60A(int a1, int a2, int a3, int a4) JUMPOUT(0x40C62E); } -/* ==== ANON size=42 ==== */ -int sub_401F60() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - merit_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=148 ==== */ int __fastcall sub_4012B4(int a1, int a2, unsigned int a3) { @@ -345,7 +335,7 @@ int __fastcall sub_4011D8(int a1, int a2, int a3, int a4, struct tee_fmt_state * } else { - if ( sub_401F60(a1: v20, a2: v19) != 0 ) + if ( merit_rpc_3() != 0 ) { v9 = 1299; } diff --git a/fw/decomp/merit_24.0.0.46_4d02c1b9.c b/fw/decomp/merit_24.0.0.46_4d02c1b9.c index 3d100a1..e3c8e12 100644 --- a/fw/decomp/merit_24.0.0.46_4d02c1b9.c +++ b/fw/decomp/merit_24.0.0.46_4d02c1b9.c @@ -1,7 +1,7 @@ /* merit 24.0.0.46 (4d02c1b9) -- named functions * generated by fw/ta_re.py -- do not edit * reference: merit_24.0.4.42_444eceee.elf - * functions: 36 total in build, 29 named, 7 anonymous + * functions: 36 total in build, 30 named, 6 anonymous * porting tiers: {"DISPATCH": 2, "EXACT": 11, "FUZZY": 1, "MNEM": 11, "ambiguous": 4, "cmd_protos": 6, "comments": 0, "dispatch_conflict": 0, "none": 7, "protos": 7, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -191,7 +191,7 @@ int __fastcall merit_cmd03(void *ctx, struct ta_params *params) return 259; if ( merit_asd_rpc_200() != 0 ) return 576; - merit_sysdrv_rpc_35(); + merit_rpc_35(); *((_DWORD *)ctx + 1037) = 16; merit_lib_thunk_tailjump( a1: (struct tee_fmt_state *)((char *)ctx + 4132), @@ -662,6 +662,26 @@ LABEL_11: return v9; } +/* ==== merit_rpc_3 [tier=SVCOP size=42] ==== */ +int merit_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + merit_lib_zero_fill_words(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== merit_rpc_35 [tier=SVCOP size=42] ==== */ +int merit_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + merit_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== merit_sysdrv_rpc_1 [tier=MNEM size=60] ==== */ int merit_sysdrv_rpc_1() { @@ -709,16 +729,6 @@ int merit_sysdrv_rpc_33() return 1; } -/* ==== merit_sysdrv_rpc_35 [tier=IDA size=42] ==== */ -int merit_sysdrv_rpc_35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - merit_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== merit_sysdrv_rpc_9 [tier=EXACT size=64] ==== */ int merit_sysdrv_rpc_9() { diff --git a/fw/decomp/merit_24.0.0.46_4d02c1b9.index.json b/fw/decomp/merit_24.0.0.46_4d02c1b9.index.json index eb98d24..058faf9 100644 --- a/fw/decomp/merit_24.0.0.46_4d02c1b9.index.json +++ b/fw/decomp/merit_24.0.0.46_4d02c1b9.index.json @@ -164,9 +164,9 @@ { "addr": "0x401ea0", "ida_name": "sub_401EA0", - "name": "merit_sysdrv_rpc_35", + "name": "merit_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x401eca", @@ -192,9 +192,9 @@ { "addr": "0x401f60", "ida_name": "sub_401F60", - "name": null, + "name": "merit_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x401f8a", diff --git a/fw/decomp/merit_24.0.0.50_1a70a0b2.anon.c b/fw/decomp/merit_24.0.0.50_1a70a0b2.anon.c index 2b5005f..62d6407 100644 --- a/fw/decomp/merit_24.0.0.50_1a70a0b2.anon.c +++ b/fw/decomp/merit_24.0.0.50_1a70a0b2.anon.c @@ -1,7 +1,7 @@ /* merit 24.0.0.50 (1a70a0b2) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: merit_24.0.4.42_444eceee.elf - * functions: 36 total in build, 28 named, 8 anonymous + * functions: 36 total in build, 29 named, 7 anonymous * porting tiers: {"DISPATCH": 2, "EXACT": 9, "FUZZY": 0, "MNEM": 11, "ambiguous": 4, "cmd_protos": 6, "comments": 0, "dispatch_conflict": 0, "none": 10, "protos": 6, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -220,16 +220,6 @@ void __fastcall sub_40CACA(int a1, int a2, int a3, int a4) JUMPOUT(0x40CAEE); } -/* ==== ANON size=42 ==== */ -int sub_401FB4() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - merit_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=148 ==== */ int __fastcall sub_4012B4(int a1, int a2, unsigned int a3) { @@ -310,7 +300,7 @@ int __fastcall sub_4011D8(int a1) { v3 = 1298; } - else if ( sub_401FB4(a1: 0, a2: 0) != 0 ) + else if ( merit_rpc_3() != 0 ) { v3 = 1299; } @@ -475,7 +465,7 @@ LABEL_17: } else { - if ( sub_401FB4(a1: STACK[0x27CC], a2: STACK[0x27C8]) != 0 ) + if ( merit_rpc_3() != 0 ) { v9 = 1299; } diff --git a/fw/decomp/merit_24.0.0.50_1a70a0b2.c b/fw/decomp/merit_24.0.0.50_1a70a0b2.c index 22e1f80..68f76d8 100644 --- a/fw/decomp/merit_24.0.0.50_1a70a0b2.c +++ b/fw/decomp/merit_24.0.0.50_1a70a0b2.c @@ -1,7 +1,7 @@ /* merit 24.0.0.50 (1a70a0b2) -- named functions * generated by fw/ta_re.py -- do not edit * reference: merit_24.0.4.42_444eceee.elf - * functions: 36 total in build, 28 named, 8 anonymous + * functions: 36 total in build, 29 named, 7 anonymous * porting tiers: {"DISPATCH": 2, "EXACT": 9, "FUZZY": 0, "MNEM": 11, "ambiguous": 4, "cmd_protos": 6, "comments": 0, "dispatch_conflict": 0, "none": 10, "protos": 6, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -158,7 +158,7 @@ int __fastcall merit_cmd03(void *ctx, struct ta_params *params) return 259; if ( merit_rpc_200() != 0 ) return 576; - merit_sysdrv_rpc_35(); + merit_rpc_35(); *((_DWORD *)ctx + 1037) = 16; merit_lib_thunk_tailjump(); if ( *off_401D40 == 2 ) @@ -548,6 +548,26 @@ int merit_rpc_201() return 2; } +/* ==== merit_rpc_3 [tier=SVCOP size=42] ==== */ +int merit_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + merit_lib_zero_fill_words(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== merit_rpc_35 [tier=SVCOP size=42] ==== */ +int merit_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + merit_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== merit_sysdrv_rpc_1 [tier=MNEM size=60] ==== */ int merit_sysdrv_rpc_1() { @@ -595,16 +615,6 @@ int merit_sysdrv_rpc_33() return 1; } -/* ==== merit_sysdrv_rpc_35 [tier=IDA size=42] ==== */ -int merit_sysdrv_rpc_35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - merit_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== merit_sysdrv_rpc_9 [tier=EXACT size=64] ==== */ int merit_sysdrv_rpc_9() { diff --git a/fw/decomp/merit_24.0.0.50_1a70a0b2.index.json b/fw/decomp/merit_24.0.0.50_1a70a0b2.index.json index f2831a1..ea09363 100644 --- a/fw/decomp/merit_24.0.0.50_1a70a0b2.index.json +++ b/fw/decomp/merit_24.0.0.50_1a70a0b2.index.json @@ -164,9 +164,9 @@ { "addr": "0x401ef4", "ida_name": "sub_401EF4", - "name": "merit_sysdrv_rpc_35", + "name": "merit_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x401f1e", @@ -192,9 +192,9 @@ { "addr": "0x401fb4", "ida_name": "sub_401FB4", - "name": null, + "name": "merit_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x401fde", diff --git a/fw/decomp/merit_24.0.0.53_7bc0749b.anon.c b/fw/decomp/merit_24.0.0.53_7bc0749b.anon.c index 3d39185..c5b6c88 100644 --- a/fw/decomp/merit_24.0.0.53_7bc0749b.anon.c +++ b/fw/decomp/merit_24.0.0.53_7bc0749b.anon.c @@ -1,7 +1,7 @@ /* merit 24.0.0.53 (7bc0749b) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: merit_24.0.4.42_444eceee.elf - * functions: 36 total in build, 28 named, 8 anonymous + * functions: 36 total in build, 29 named, 7 anonymous * porting tiers: {"DISPATCH": 2, "EXACT": 9, "FUZZY": 0, "MNEM": 11, "ambiguous": 4, "cmd_protos": 6, "comments": 0, "dispatch_conflict": 0, "none": 10, "protos": 6, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -220,16 +220,6 @@ void __fastcall sub_40D44A(int a1, int a2, int a3, int a4) JUMPOUT(0x40D46E); } -/* ==== ANON size=42 ==== */ -int sub_402034() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - merit_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=148 ==== */ int __fastcall sub_4012B4(int a1, int a2, unsigned int a3) { @@ -310,7 +300,7 @@ int __fastcall sub_4011D8(int a1) { v3 = 1298; } - else if ( sub_402034(a1: 0, a2: 0) != 0 ) + else if ( merit_rpc_3() != 0 ) { v3 = 1299; } @@ -481,7 +471,7 @@ LABEL_17: } else { - if ( sub_402034(a1: STACK[0x27CC], a2: STACK[0x27C8]) != 0 ) + if ( merit_rpc_3() != 0 ) { v9 = 1299; } diff --git a/fw/decomp/merit_24.0.0.53_7bc0749b.c b/fw/decomp/merit_24.0.0.53_7bc0749b.c index 2220dc3..6fa8deb 100644 --- a/fw/decomp/merit_24.0.0.53_7bc0749b.c +++ b/fw/decomp/merit_24.0.0.53_7bc0749b.c @@ -1,7 +1,7 @@ /* merit 24.0.0.53 (7bc0749b) -- named functions * generated by fw/ta_re.py -- do not edit * reference: merit_24.0.4.42_444eceee.elf - * functions: 36 total in build, 28 named, 8 anonymous + * functions: 36 total in build, 29 named, 7 anonymous * porting tiers: {"DISPATCH": 2, "EXACT": 9, "FUZZY": 0, "MNEM": 11, "ambiguous": 4, "cmd_protos": 6, "comments": 0, "dispatch_conflict": 0, "none": 10, "protos": 6, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -158,7 +158,7 @@ int __fastcall merit_cmd03(void *ctx, struct ta_params *params) return 259; if ( merit_rpc_200() != 0 ) return 576; - merit_sysdrv_rpc_35(); + merit_rpc_35(); *((_DWORD *)ctx + 1037) = 16; merit_lib_thunk_tailjump(); if ( *off_401DC0 == 2 ) @@ -548,6 +548,26 @@ int merit_rpc_201() return 2; } +/* ==== merit_rpc_3 [tier=SVCOP size=42] ==== */ +int merit_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + merit_lib_zero_fill_words(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== merit_rpc_35 [tier=SVCOP size=42] ==== */ +int merit_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + merit_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== merit_sysdrv_rpc_1 [tier=MNEM size=60] ==== */ int merit_sysdrv_rpc_1() { @@ -595,16 +615,6 @@ int merit_sysdrv_rpc_33() return 1; } -/* ==== merit_sysdrv_rpc_35 [tier=IDA size=42] ==== */ -int merit_sysdrv_rpc_35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - merit_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== merit_sysdrv_rpc_9 [tier=EXACT size=64] ==== */ int merit_sysdrv_rpc_9() { diff --git a/fw/decomp/merit_24.0.0.53_7bc0749b.index.json b/fw/decomp/merit_24.0.0.53_7bc0749b.index.json index 5101b7c..283d1bc 100644 --- a/fw/decomp/merit_24.0.0.53_7bc0749b.index.json +++ b/fw/decomp/merit_24.0.0.53_7bc0749b.index.json @@ -164,9 +164,9 @@ { "addr": "0x401f74", "ida_name": "sub_401F74", - "name": "merit_sysdrv_rpc_35", + "name": "merit_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x401f9e", @@ -192,9 +192,9 @@ { "addr": "0x402034", "ida_name": "sub_402034", - "name": null, + "name": "merit_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x40205e", diff --git a/fw/decomp/merit_24.0.0.56_ac736398.anon.c b/fw/decomp/merit_24.0.0.56_ac736398.anon.c index 0762fc2..a48f8ef 100644 --- a/fw/decomp/merit_24.0.0.56_ac736398.anon.c +++ b/fw/decomp/merit_24.0.0.56_ac736398.anon.c @@ -1,7 +1,7 @@ /* merit 24.0.0.56 (ac736398) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: merit_24.0.4.42_444eceee.elf - * functions: 37 total in build, 29 named, 8 anonymous + * functions: 37 total in build, 30 named, 7 anonymous * porting tiers: {"DISPATCH": 2, "EXACT": 9, "FUZZY": 0, "MNEM": 11, "ambiguous": 4, "cmd_protos": 6, "comments": 0, "dispatch_conflict": 0, "none": 11, "protos": 6, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -220,16 +220,6 @@ void __fastcall sub_40D90A(int a1, int a2, int a3, int a4) JUMPOUT(0x40D92E); } -/* ==== ANON size=42 ==== */ -int sub_4020C8() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - merit_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=148 ==== */ int __fastcall sub_4012B4(int a1, int a2, unsigned int a3) { @@ -310,7 +300,7 @@ int __fastcall sub_4011D8(int a1) { v3 = 1298; } - else if ( sub_4020C8(a1: 0, a2: 0) != 0 ) + else if ( merit_rpc_3() != 0 ) { v3 = 1299; } @@ -483,7 +473,7 @@ LABEL_17: } else { - if ( sub_4020C8(a1: STACK[0x27CC], a2: STACK[0x27C8]) != 0 ) + if ( merit_rpc_3() != 0 ) { v9 = 1299; } diff --git a/fw/decomp/merit_24.0.0.56_ac736398.c b/fw/decomp/merit_24.0.0.56_ac736398.c index 61e18c8..fada7e5 100644 --- a/fw/decomp/merit_24.0.0.56_ac736398.c +++ b/fw/decomp/merit_24.0.0.56_ac736398.c @@ -1,7 +1,7 @@ /* merit 24.0.0.56 (ac736398) -- named functions * generated by fw/ta_re.py -- do not edit * reference: merit_24.0.4.42_444eceee.elf - * functions: 37 total in build, 29 named, 8 anonymous + * functions: 37 total in build, 30 named, 7 anonymous * porting tiers: {"DISPATCH": 2, "EXACT": 9, "FUZZY": 0, "MNEM": 11, "ambiguous": 4, "cmd_protos": 6, "comments": 0, "dispatch_conflict": 0, "none": 11, "protos": 6, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -184,7 +184,7 @@ int __fastcall merit_cmd03(void *ctx, struct ta_params *params) return 259; if ( merit_rpc_200() != 0 ) return 576; - merit_sysdrv_rpc_35(); + merit_rpc_35(); *((_DWORD *)ctx + 1037) = 16; merit_lib_thunk_tailjump(); if ( *off_401DE0 == 2 ) @@ -584,6 +584,26 @@ int merit_rpc_208() return 2; } +/* ==== merit_rpc_3 [tier=SVCOP size=42] ==== */ +int merit_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + merit_lib_zero_fill_words(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== merit_rpc_35 [tier=SVCOP size=42] ==== */ +int merit_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + merit_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== merit_sysdrv_rpc_1 [tier=MNEM size=60] ==== */ int merit_sysdrv_rpc_1() { @@ -631,16 +651,6 @@ int merit_sysdrv_rpc_33() return 1; } -/* ==== merit_sysdrv_rpc_35 [tier=IDA size=42] ==== */ -int merit_sysdrv_rpc_35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - merit_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== merit_sysdrv_rpc_9 [tier=EXACT size=64] ==== */ int merit_sysdrv_rpc_9() { diff --git a/fw/decomp/merit_24.0.0.56_ac736398.index.json b/fw/decomp/merit_24.0.0.56_ac736398.index.json index 250024d..2bd817b 100644 --- a/fw/decomp/merit_24.0.0.56_ac736398.index.json +++ b/fw/decomp/merit_24.0.0.56_ac736398.index.json @@ -164,9 +164,9 @@ { "addr": "0x402008", "ida_name": "sub_402008", - "name": "merit_sysdrv_rpc_35", + "name": "merit_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x402032", @@ -192,9 +192,9 @@ { "addr": "0x4020c8", "ida_name": "sub_4020C8", - "name": null, + "name": "merit_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x4020f2", diff --git a/fw/decomp/merit_24.0.0.57_6ca54ade.anon.c b/fw/decomp/merit_24.0.0.57_6ca54ade.anon.c index f781792..d6a616c 100644 --- a/fw/decomp/merit_24.0.0.57_6ca54ade.anon.c +++ b/fw/decomp/merit_24.0.0.57_6ca54ade.anon.c @@ -1,7 +1,7 @@ /* merit 24.0.0.57 (6ca54ade) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: merit_24.0.4.42_444eceee.elf - * functions: 37 total in build, 29 named, 8 anonymous + * functions: 37 total in build, 30 named, 7 anonymous * porting tiers: {"DISPATCH": 2, "EXACT": 20, "FUZZY": 0, "MNEM": 0, "ambiguous": 4, "cmd_protos": 6, "comments": 0, "dispatch_conflict": 0, "none": 11, "protos": 6, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -220,16 +220,6 @@ void __fastcall sub_40D90A(int a1, int a2, int a3, int a4) JUMPOUT(0x40D92E); } -/* ==== ANON size=42 ==== */ -int sub_4020C8() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - merit_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=148 ==== */ int __fastcall sub_4012B4(int a1, int a2, unsigned int a3) { @@ -310,7 +300,7 @@ int __fastcall sub_4011D8(int a1) { v3 = 1298; } - else if ( sub_4020C8(a1: 0, a2: 0) != 0 ) + else if ( merit_rpc_3() != 0 ) { v3 = 1299; } @@ -483,7 +473,7 @@ LABEL_17: } else { - if ( sub_4020C8(a1: STACK[0x27CC], a2: STACK[0x27C8]) != 0 ) + if ( merit_rpc_3() != 0 ) { v9 = 1299; } diff --git a/fw/decomp/merit_24.0.0.57_6ca54ade.c b/fw/decomp/merit_24.0.0.57_6ca54ade.c index b9e6362..afa87bb 100644 --- a/fw/decomp/merit_24.0.0.57_6ca54ade.c +++ b/fw/decomp/merit_24.0.0.57_6ca54ade.c @@ -1,7 +1,7 @@ /* merit 24.0.0.57 (6ca54ade) -- named functions * generated by fw/ta_re.py -- do not edit * reference: merit_24.0.4.42_444eceee.elf - * functions: 37 total in build, 29 named, 8 anonymous + * functions: 37 total in build, 30 named, 7 anonymous * porting tiers: {"DISPATCH": 2, "EXACT": 20, "FUZZY": 0, "MNEM": 0, "ambiguous": 4, "cmd_protos": 6, "comments": 0, "dispatch_conflict": 0, "none": 11, "protos": 6, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -184,7 +184,7 @@ int __fastcall merit_cmd03(void *ctx, struct ta_params *params) return 259; if ( merit_rpc_200() != 0 ) return 576; - merit_sysdrv_rpc_35(); + merit_rpc_35(); *((_DWORD *)ctx + 1037) = 16; merit_lib_thunk_tailjump(); if ( *off_401DE0 == 2 ) @@ -584,6 +584,26 @@ int merit_rpc_208() return 2; } +/* ==== merit_rpc_3 [tier=SVCOP size=42] ==== */ +int merit_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + merit_lib_zero_fill_words(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== merit_rpc_35 [tier=SVCOP size=42] ==== */ +int merit_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + merit_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== merit_sysdrv_rpc_1 [tier=EXACT size=60] ==== */ int merit_sysdrv_rpc_1() { @@ -631,16 +651,6 @@ int merit_sysdrv_rpc_33() return 1; } -/* ==== merit_sysdrv_rpc_35 [tier=IDA size=42] ==== */ -int merit_sysdrv_rpc_35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - merit_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== merit_sysdrv_rpc_9 [tier=EXACT size=64] ==== */ int merit_sysdrv_rpc_9() { diff --git a/fw/decomp/merit_24.0.0.57_6ca54ade.index.json b/fw/decomp/merit_24.0.0.57_6ca54ade.index.json index 1934180..3d60c18 100644 --- a/fw/decomp/merit_24.0.0.57_6ca54ade.index.json +++ b/fw/decomp/merit_24.0.0.57_6ca54ade.index.json @@ -164,9 +164,9 @@ { "addr": "0x402008", "ida_name": "sub_402008", - "name": "merit_sysdrv_rpc_35", + "name": "merit_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x402032", @@ -192,9 +192,9 @@ { "addr": "0x4020c8", "ida_name": "sub_4020C8", - "name": null, + "name": "merit_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x4020f2", diff --git a/fw/decomp/merit_24.0.0.61_a9100483.anon.c b/fw/decomp/merit_24.0.0.61_a9100483.anon.c index 3deda9e..1c66914 100644 --- a/fw/decomp/merit_24.0.0.61_a9100483.anon.c +++ b/fw/decomp/merit_24.0.0.61_a9100483.anon.c @@ -1,7 +1,7 @@ /* merit 24.0.0.61 (a9100483) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: merit_24.0.4.42_444eceee.elf - * functions: 40 total in build, 29 named, 11 anonymous + * functions: 40 total in build, 30 named, 10 anonymous * porting tiers: {"DISPATCH": 2, "EXACT": 8, "FUZZY": 0, "MNEM": 11, "ambiguous": 4, "cmd_protos": 6, "comments": 0, "dispatch_conflict": 0, "none": 15, "protos": 6, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -233,16 +233,6 @@ void __fastcall sub_40E28A(int a1, int a2, int a3, int a4) JUMPOUT(0x40E2AE); } -/* ==== ANON size=42 ==== */ -int sub_402108() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - merit_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=88 ==== */ int __fastcall sub_4012B4(char *a1, int a2, unsigned int a3) { @@ -519,7 +509,7 @@ int __fastcall sub_4011D8(int a1, int a2, int a3, int a4, int a5) { v7 = 1298; } - else if ( sub_402108(a1: 0, a2: 0) != 0 ) + else if ( merit_rpc_3() != 0 ) { v7 = 1299; } @@ -843,7 +833,7 @@ LABEL_40: } else { - if ( sub_402108(a1: STACK[0x27CC], a2: STACK[0x27C8]) != 0 ) + if ( merit_rpc_3() != 0 ) { v9 = 1299; } diff --git a/fw/decomp/merit_24.0.0.61_a9100483.c b/fw/decomp/merit_24.0.0.61_a9100483.c index bf5d3b6..33190c1 100644 --- a/fw/decomp/merit_24.0.0.61_a9100483.c +++ b/fw/decomp/merit_24.0.0.61_a9100483.c @@ -1,7 +1,7 @@ /* merit 24.0.0.61 (a9100483) -- named functions * generated by fw/ta_re.py -- do not edit * reference: merit_24.0.4.42_444eceee.elf - * functions: 40 total in build, 29 named, 11 anonymous + * functions: 40 total in build, 30 named, 10 anonymous * porting tiers: {"DISPATCH": 2, "EXACT": 8, "FUZZY": 0, "MNEM": 11, "ambiguous": 4, "cmd_protos": 6, "comments": 0, "dispatch_conflict": 0, "none": 15, "protos": 6, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -218,7 +218,7 @@ int __fastcall merit_cmd03(void *ctx, struct ta_params *params) return 259; if ( merit_rpc_200() != 0 ) return 576; - merit_sysdrv_rpc_35(); + merit_rpc_35(); *((_DWORD *)ctx + 1037) = 16; sub_401058(result: (int)ctx + 4132, a2: (char *)v4 + v5 + 1, a3: 16, a4: v7); if ( *off_401E20 == 2 ) @@ -638,6 +638,26 @@ int merit_rpc_208() return 2; } +/* ==== merit_rpc_3 [tier=SVCOP size=42] ==== */ +int merit_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + merit_lib_zero_fill_words(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== merit_rpc_35 [tier=SVCOP size=42] ==== */ +int merit_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + merit_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== merit_sysdrv_rpc_1 [tier=MNEM size=60] ==== */ int merit_sysdrv_rpc_1() { @@ -685,16 +705,6 @@ int merit_sysdrv_rpc_33() return 1; } -/* ==== merit_sysdrv_rpc_35 [tier=IDA size=42] ==== */ -int merit_sysdrv_rpc_35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - merit_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== merit_sysdrv_rpc_9 [tier=EXACT size=64] ==== */ int merit_sysdrv_rpc_9() { diff --git a/fw/decomp/merit_24.0.0.61_a9100483.index.json b/fw/decomp/merit_24.0.0.61_a9100483.index.json index 65ff397..bfa5659 100644 --- a/fw/decomp/merit_24.0.0.61_a9100483.index.json +++ b/fw/decomp/merit_24.0.0.61_a9100483.index.json @@ -178,9 +178,9 @@ { "addr": "0x402048", "ida_name": "sub_402048", - "name": "merit_sysdrv_rpc_35", + "name": "merit_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x402072", @@ -206,9 +206,9 @@ { "addr": "0x402108", "ida_name": "sub_402108", - "name": null, + "name": "merit_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x402132", diff --git a/fw/decomp/merit_24.0.0.64_d1182c39.anon.c b/fw/decomp/merit_24.0.0.64_d1182c39.anon.c index 8556271..8ef95d2 100644 --- a/fw/decomp/merit_24.0.0.64_d1182c39.anon.c +++ b/fw/decomp/merit_24.0.0.64_d1182c39.anon.c @@ -1,7 +1,7 @@ /* merit 24.0.0.64 (d1182c39) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: merit_24.0.4.42_444eceee.elf - * functions: 38 total in build, 30 named, 8 anonymous + * functions: 38 total in build, 31 named, 7 anonymous * porting tiers: {"DISPATCH": 2, "EXACT": 9, "FUZZY": 1, "MNEM": 11, "ambiguous": 4, "cmd_protos": 6, "comments": 0, "dispatch_conflict": 0, "none": 11, "protos": 7, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -220,16 +220,6 @@ void __fastcall sub_40EC0A(int a1, int a2, int a3, int a4) JUMPOUT(0x40EC2E); } -/* ==== ANON size=42 ==== */ -int sub_402148() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - merit_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=148 ==== */ int __fastcall sub_4012B4(int a1, int a2, unsigned int a3) { @@ -345,7 +335,7 @@ int __fastcall sub_4011D8(int a1, int a2, int a3, int a4, struct tee_fmt_state * } else { - if ( sub_402148(a1: v20, a2: v19) != 0 ) + if ( merit_rpc_3() != 0 ) { v9 = 1299; } diff --git a/fw/decomp/merit_24.0.0.64_d1182c39.c b/fw/decomp/merit_24.0.0.64_d1182c39.c index fc16791..cb75c13 100644 --- a/fw/decomp/merit_24.0.0.64_d1182c39.c +++ b/fw/decomp/merit_24.0.0.64_d1182c39.c @@ -1,7 +1,7 @@ /* merit 24.0.0.64 (d1182c39) -- named functions * generated by fw/ta_re.py -- do not edit * reference: merit_24.0.4.42_444eceee.elf - * functions: 38 total in build, 30 named, 8 anonymous + * functions: 38 total in build, 31 named, 7 anonymous * porting tiers: {"DISPATCH": 2, "EXACT": 9, "FUZZY": 1, "MNEM": 11, "ambiguous": 4, "cmd_protos": 6, "comments": 0, "dispatch_conflict": 0, "none": 11, "protos": 7, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -205,7 +205,7 @@ int __fastcall merit_cmd03(void *ctx, struct ta_params *params) return 259; if ( merit_rpc_200() != 0 ) return 576; - merit_sysdrv_rpc_35(); + merit_rpc_35(); *((_DWORD *)ctx + 1037) = 16; merit_lib_thunk_tailjump( a1: (struct tee_fmt_state *)((char *)ctx + 4132), @@ -706,6 +706,26 @@ int merit_rpc_208() return 2; } +/* ==== merit_rpc_3 [tier=SVCOP size=42] ==== */ +int merit_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + merit_lib_zero_fill_words(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== merit_rpc_35 [tier=SVCOP size=42] ==== */ +int merit_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + merit_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== merit_sysdrv_rpc_1 [tier=MNEM size=60] ==== */ int merit_sysdrv_rpc_1() { @@ -753,16 +773,6 @@ int merit_sysdrv_rpc_33() return 1; } -/* ==== merit_sysdrv_rpc_35 [tier=IDA size=42] ==== */ -int merit_sysdrv_rpc_35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - merit_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== merit_sysdrv_rpc_9 [tier=EXACT size=64] ==== */ int merit_sysdrv_rpc_9() { diff --git a/fw/decomp/merit_24.0.0.64_d1182c39.index.json b/fw/decomp/merit_24.0.0.64_d1182c39.index.json index f91b469..46196ef 100644 --- a/fw/decomp/merit_24.0.0.64_d1182c39.index.json +++ b/fw/decomp/merit_24.0.0.64_d1182c39.index.json @@ -164,9 +164,9 @@ { "addr": "0x402088", "ida_name": "sub_402088", - "name": "merit_sysdrv_rpc_35", + "name": "merit_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x4020b2", @@ -192,9 +192,9 @@ { "addr": "0x402148", "ida_name": "sub_402148", - "name": null, + "name": "merit_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x402172", diff --git a/fw/decomp/merit_24.0.0.66_ba6f0ef7.anon.c b/fw/decomp/merit_24.0.0.66_ba6f0ef7.anon.c index cc8bdb1..d2421f1 100644 --- a/fw/decomp/merit_24.0.0.66_ba6f0ef7.anon.c +++ b/fw/decomp/merit_24.0.0.66_ba6f0ef7.anon.c @@ -1,7 +1,7 @@ /* merit 24.0.0.66 (ba6f0ef7) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: merit_24.0.4.42_444eceee.elf - * functions: 38 total in build, 29 named, 9 anonymous + * functions: 38 total in build, 30 named, 8 anonymous * porting tiers: {"DISPATCH": 2, "EXACT": 9, "FUZZY": 0, "MNEM": 11, "ambiguous": 4, "cmd_protos": 6, "comments": 0, "dispatch_conflict": 0, "none": 12, "protos": 6, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -220,16 +220,6 @@ void __fastcall sub_40EC0A(int a1, int a2, int a3, int a4) JUMPOUT(0x40EC2E); } -/* ==== ANON size=42 ==== */ -int sub_4021C4() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - merit_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=148 ==== */ int __fastcall sub_4012B4(int a1, int a2, unsigned int a3) { @@ -310,7 +300,7 @@ int __fastcall sub_4011D8(int a1) { v3 = 1298; } - else if ( sub_4021C4(a1: 0, a2: 0) != 0 ) + else if ( merit_rpc_3() != 0 ) { v3 = 1299; } @@ -507,7 +497,7 @@ LABEL_17: } else { - if ( sub_4021C4(a1: STACK[0x27CC], a2: STACK[0x27C8]) != 0 ) + if ( merit_rpc_3() != 0 ) { v9 = 1299; } diff --git a/fw/decomp/merit_24.0.0.66_ba6f0ef7.c b/fw/decomp/merit_24.0.0.66_ba6f0ef7.c index 2b6a28d..fe833a2 100644 --- a/fw/decomp/merit_24.0.0.66_ba6f0ef7.c +++ b/fw/decomp/merit_24.0.0.66_ba6f0ef7.c @@ -1,7 +1,7 @@ /* merit 24.0.0.66 (ba6f0ef7) -- named functions * generated by fw/ta_re.py -- do not edit * reference: merit_24.0.4.42_444eceee.elf - * functions: 38 total in build, 29 named, 9 anonymous + * functions: 38 total in build, 30 named, 8 anonymous * porting tiers: {"DISPATCH": 2, "EXACT": 9, "FUZZY": 0, "MNEM": 11, "ambiguous": 4, "cmd_protos": 6, "comments": 0, "dispatch_conflict": 0, "none": 12, "protos": 6, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -184,7 +184,7 @@ int __fastcall merit_cmd03(void *ctx, struct ta_params *params) return 259; if ( merit_rpc_200() != 0 ) return 576; - merit_sysdrv_rpc_35(); + merit_rpc_35(); *((_DWORD *)ctx + 1037) = 16; merit_lib_thunk_tailjump(); if ( *off_401EDC == 2 ) @@ -584,6 +584,26 @@ int merit_rpc_208() return 2; } +/* ==== merit_rpc_3 [tier=SVCOP size=42] ==== */ +int merit_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + merit_lib_zero_fill_words(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== merit_rpc_35 [tier=SVCOP size=42] ==== */ +int merit_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + merit_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== merit_sysdrv_rpc_1 [tier=MNEM size=60] ==== */ int merit_sysdrv_rpc_1() { @@ -631,16 +651,6 @@ int merit_sysdrv_rpc_33() return 1; } -/* ==== merit_sysdrv_rpc_35 [tier=IDA size=42] ==== */ -int merit_sysdrv_rpc_35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - merit_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== merit_sysdrv_rpc_9 [tier=EXACT size=64] ==== */ int merit_sysdrv_rpc_9() { diff --git a/fw/decomp/merit_24.0.0.66_ba6f0ef7.index.json b/fw/decomp/merit_24.0.0.66_ba6f0ef7.index.json index f457daa..95f00a1 100644 --- a/fw/decomp/merit_24.0.0.66_ba6f0ef7.index.json +++ b/fw/decomp/merit_24.0.0.66_ba6f0ef7.index.json @@ -164,9 +164,9 @@ { "addr": "0x402104", "ida_name": "sub_402104", - "name": "merit_sysdrv_rpc_35", + "name": "merit_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x40212e", @@ -192,9 +192,9 @@ { "addr": "0x4021c4", "ida_name": "sub_4021C4", - "name": null, + "name": "merit_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x4021ee", diff --git a/fw/decomp/merit_24.0.0.70_5cd4afda.anon.c b/fw/decomp/merit_24.0.0.70_5cd4afda.anon.c index 2c9f76e..0a440a1 100644 --- a/fw/decomp/merit_24.0.0.70_5cd4afda.anon.c +++ b/fw/decomp/merit_24.0.0.70_5cd4afda.anon.c @@ -1,7 +1,7 @@ /* merit 24.0.0.70 (5cd4afda) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: merit_24.0.4.42_444eceee.elf - * functions: 38 total in build, 29 named, 9 anonymous + * functions: 38 total in build, 30 named, 8 anonymous * porting tiers: {"DISPATCH": 2, "EXACT": 20, "FUZZY": 0, "MNEM": 0, "ambiguous": 4, "cmd_protos": 6, "comments": 0, "dispatch_conflict": 0, "none": 12, "protos": 6, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -220,16 +220,6 @@ void __fastcall sub_40F0CA(int a1, int a2, int a3, int a4) JUMPOUT(0x40F0EE); } -/* ==== ANON size=42 ==== */ -int sub_4021C4() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - merit_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=148 ==== */ int __fastcall sub_4012B4(int a1, int a2, unsigned int a3) { @@ -310,7 +300,7 @@ int __fastcall sub_4011D8(int a1) { v3 = 1298; } - else if ( sub_4021C4(a1: 0, a2: 0) != 0 ) + else if ( merit_rpc_3() != 0 ) { v3 = 1299; } @@ -507,7 +497,7 @@ LABEL_17: } else { - if ( sub_4021C4(a1: STACK[0x27CC], a2: STACK[0x27C8]) != 0 ) + if ( merit_rpc_3() != 0 ) { v9 = 1299; } diff --git a/fw/decomp/merit_24.0.0.70_5cd4afda.c b/fw/decomp/merit_24.0.0.70_5cd4afda.c index 8b58c31..1f9ee74 100644 --- a/fw/decomp/merit_24.0.0.70_5cd4afda.c +++ b/fw/decomp/merit_24.0.0.70_5cd4afda.c @@ -1,7 +1,7 @@ /* merit 24.0.0.70 (5cd4afda) -- named functions * generated by fw/ta_re.py -- do not edit * reference: merit_24.0.4.42_444eceee.elf - * functions: 38 total in build, 29 named, 9 anonymous + * functions: 38 total in build, 30 named, 8 anonymous * porting tiers: {"DISPATCH": 2, "EXACT": 20, "FUZZY": 0, "MNEM": 0, "ambiguous": 4, "cmd_protos": 6, "comments": 0, "dispatch_conflict": 0, "none": 12, "protos": 6, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -184,7 +184,7 @@ int __fastcall merit_cmd03(void *ctx, struct ta_params *params) return 259; if ( merit_rpc_200() != 0 ) return 576; - merit_sysdrv_rpc_35(); + merit_rpc_35(); *((_DWORD *)ctx + 1037) = 16; merit_lib_thunk_tailjump(); if ( *off_401EDC == 2 ) @@ -584,6 +584,26 @@ int merit_rpc_208() return 2; } +/* ==== merit_rpc_3 [tier=SVCOP size=42] ==== */ +int merit_rpc_3() +{ + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + + merit_lib_zero_fill_words(result: v5, a2: 0x20u); + __asm { SVC 0xF2 } + return 1; +} + +/* ==== merit_rpc_35 [tier=SVCOP size=42] ==== */ +int merit_rpc_35() +{ + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + merit_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 1; +} + /* ==== merit_sysdrv_rpc_1 [tier=EXACT size=60] ==== */ int merit_sysdrv_rpc_1() { @@ -631,16 +651,6 @@ int merit_sysdrv_rpc_33() return 1; } -/* ==== merit_sysdrv_rpc_35 [tier=IDA size=42] ==== */ -int merit_sysdrv_rpc_35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - merit_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== merit_sysdrv_rpc_9 [tier=EXACT size=64] ==== */ int merit_sysdrv_rpc_9() { diff --git a/fw/decomp/merit_24.0.0.70_5cd4afda.index.json b/fw/decomp/merit_24.0.0.70_5cd4afda.index.json index bf92471..3b835ce 100644 --- a/fw/decomp/merit_24.0.0.70_5cd4afda.index.json +++ b/fw/decomp/merit_24.0.0.70_5cd4afda.index.json @@ -164,9 +164,9 @@ { "addr": "0x402104", "ida_name": "sub_402104", - "name": "merit_sysdrv_rpc_35", + "name": "merit_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x40212e", @@ -192,9 +192,9 @@ { "addr": "0x4021c4", "ida_name": "sub_4021C4", - "name": null, + "name": "merit_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x4021ee", diff --git a/fw/decomp/merit_24.0.4.42_bc1706f8.c b/fw/decomp/merit_24.0.4.42_bc1706f8.c index c11313a..ed46600 100644 --- a/fw/decomp/merit_24.0.4.42_bc1706f8.c +++ b/fw/decomp/merit_24.0.4.42_bc1706f8.c @@ -195,7 +195,7 @@ int __fastcall merit_cmd03(void *ctx, struct ta_params *params) return 259; if ( merit_asd_rpc_200() != 0 ) return 576; - merit_sysdrv_rpc_35(); + merit_rpc_35(); *((_DWORD *)ctx + 1037) = 16; merit_lib_thunk_tailjump( a1: (struct tee_fmt_state *)((char *)ctx + 4132), @@ -532,7 +532,7 @@ LABEL_10: v11 = false; goto LABEL_13; } - if ( merit_sysdrv_rpc_3() != 0 ) + if ( merit_rpc_3() != 0 ) { LABEL_15: v11 = false; @@ -736,8 +736,8 @@ LABEL_11: return v9; } -/* ==== merit_sysdrv_rpc_1 [tier=MNEM size=60] ==== */ -int merit_sysdrv_rpc_1() +/* ==== merit_rpc_3 [tier=SVCOP size=42] ==== */ +int merit_rpc_3() { _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF @@ -746,15 +746,18 @@ int merit_sysdrv_rpc_1() return 1; } -/* ==== merit_sysdrv_rpc_10 [tier=EXACT size=52] ==== */ -int merit_sysdrv_rpc_10() +/* ==== merit_rpc_35 [tier=SVCOP size=42] ==== */ +int merit_rpc_35() { + _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + + merit_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } return 1; } -/* ==== merit_sysdrv_rpc_3 [tier=IDA size=42] ==== */ -int merit_sysdrv_rpc_3() +/* ==== merit_sysdrv_rpc_1 [tier=MNEM size=60] ==== */ +int merit_sysdrv_rpc_1() { _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF @@ -763,6 +766,13 @@ int merit_sysdrv_rpc_3() return 1; } +/* ==== merit_sysdrv_rpc_10 [tier=EXACT size=52] ==== */ +int merit_sysdrv_rpc_10() +{ + __asm { SVC 0xF2 } + return 1; +} + /* ==== merit_sysdrv_rpc_30 [tier=MNEM size=50] ==== */ int merit_sysdrv_rpc_30() { @@ -793,16 +803,6 @@ int merit_sysdrv_rpc_33() return 1; } -/* ==== merit_sysdrv_rpc_35 [tier=IDA size=42] ==== */ -int merit_sysdrv_rpc_35() -{ - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF - - merit_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== merit_sysdrv_rpc_9 [tier=EXACT size=64] ==== */ int merit_sysdrv_rpc_9() { diff --git a/fw/decomp/merit_24.0.4.42_bc1706f8.index.json b/fw/decomp/merit_24.0.4.42_bc1706f8.index.json index eb66ffa..3066c11 100644 --- a/fw/decomp/merit_24.0.4.42_bc1706f8.index.json +++ b/fw/decomp/merit_24.0.4.42_bc1706f8.index.json @@ -164,9 +164,9 @@ { "addr": "0x401e7c", "ida_name": "sub_401E7C", - "name": "merit_sysdrv_rpc_35", + "name": "merit_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x401ea6", @@ -192,9 +192,9 @@ { "addr": "0x401f3c", "ida_name": "sub_401F3C", - "name": "merit_sysdrv_rpc_3", + "name": "merit_rpc_3", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x401f66", diff --git a/fw/decomp/opm.summary.json b/fw/decomp/opm.summary.json index 2cb66e8..505573d 100644 --- a/fw/decomp/opm.summary.json +++ b/fw/decomp/opm.summary.json @@ -7,7 +7,7 @@ "commands": { "0x0": "0x4017dc" }, - "named": 42, + "named": 43, "stats": { "EXACT": 40, "MNEM": 0, @@ -33,7 +33,7 @@ "commands": { "0x0": "0x4017dc" }, - "named": 40, + "named": 43, "stats": { "EXACT": 20, "MNEM": 17, @@ -59,7 +59,7 @@ "commands": { "0x0": "0x4017dc" }, - "named": 42, + "named": 43, "stats": { "EXACT": 36, "MNEM": 4, @@ -83,7 +83,7 @@ "funcs": 47, "nearest_source": "opm_25.0.0.51_97f44863.elf", "commands": {}, - "named": 34, + "named": 31, "stats": { "EXACT": 10, "MNEM": 11, @@ -109,7 +109,7 @@ "commands": { "0x1f": "0x4010e0" }, - "named": 32, + "named": 29, "stats": { "EXACT": 10, "MNEM": 10, @@ -142,7 +142,7 @@ "0x8": "0x40132c", "0x9": "0x401888" }, - "named": 37, + "named": 34, "stats": { "EXACT": 9, "MNEM": 6, @@ -175,7 +175,7 @@ "0x8": "0x40132c", "0x9": "0x401888" }, - "named": 37, + "named": 34, "stats": { "EXACT": 15, "MNEM": 0, @@ -207,7 +207,7 @@ "0x7": "0x401fc4", "0x9": "0x401888" }, - "named": 38, + "named": 35, "stats": { "EXACT": 10, "MNEM": 6, @@ -239,7 +239,7 @@ "0x7": "0x401fc4", "0x9": "0x401888" }, - "named": 38, + "named": 35, "stats": { "EXACT": 10, "MNEM": 6, @@ -271,7 +271,7 @@ "0x7": "0x401fc4", "0x9": "0x401888" }, - "named": 38, + "named": 35, "stats": { "EXACT": 10, "MNEM": 6, @@ -303,7 +303,7 @@ "0x7": "0x401fc4", "0x9": "0x401888" }, - "named": 38, + "named": 35, "stats": { "EXACT": 10, "MNEM": 6, diff --git a/fw/decomp/opm_25.0.0.51_97f44863.anon.c b/fw/decomp/opm_25.0.0.51_97f44863.anon.c index acafcf1..3d36686 100644 --- a/fw/decomp/opm_25.0.0.51_97f44863.anon.c +++ b/fw/decomp/opm_25.0.0.51_97f44863.anon.c @@ -1,7 +1,7 @@ /* opm 25.0.0.51 (97f44863) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf - * functions: 48 total in build, 42 named, 6 anonymous + * functions: 48 total in build, 43 named, 5 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 36, "FUZZY": 0, "MNEM": 4, "ambiguous": 2, "cmd_protos": 0, "comments": 0, "dispatch_conflict": 1, "none": 6, "protos": 5, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -48,16 +48,6 @@ int __fastcall sub_402EB8(char *a1, char *a2, int a3) return v3; } -/* ==== ANON size=36 ==== */ -int sub_402C5A() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - opm_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=96 ==== */ int __fastcall sub_401702(_DWORD *a1) { @@ -132,7 +122,7 @@ BOOL __fastcall sub_402300(unsigned int a1, int a2, int a3, int a4) while ( 1 ) { if ( v8 != 0 ) - sub_402C5A(a1: v8); + opm_rpc_2(); LABEL_11: if ( v9 != 0 ) opm_sysdrv_rpc_31(); @@ -408,7 +398,7 @@ LABEL_67: while ( 1 ) { if ( v21 != 0 ) - sub_402C5A(a1: v21); + opm_rpc_2(); if ( v20 != 0 ) opm_sysdrv_rpc_31(); LABEL_78: diff --git a/fw/decomp/opm_25.0.0.51_97f44863.c b/fw/decomp/opm_25.0.0.51_97f44863.c index 4ece6db..732f1ae 100644 --- a/fw/decomp/opm_25.0.0.51_97f44863.c +++ b/fw/decomp/opm_25.0.0.51_97f44863.c @@ -1,7 +1,7 @@ /* opm 25.0.0.51 (97f44863) -- named functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf - * functions: 48 total in build, 42 named, 6 anonymous + * functions: 48 total in build, 43 named, 5 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 36, "FUZZY": 0, "MNEM": 4, "ambiguous": 2, "cmd_protos": 0, "comments": 0, "dispatch_conflict": 1, "none": 6, "protos": 5, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -1514,6 +1514,16 @@ int *__fastcall opm_memcpy_aligned(int *result, int *a2, unsigned int a3, int a4 return result; } +/* ==== opm_rpc_2 [tier=SVCOP size=36] ==== */ +int opm_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_1 [tier=EXACT size=60] ==== */ int opm_sysdrv_rpc_1() { diff --git a/fw/decomp/opm_25.0.0.51_97f44863.index.json b/fw/decomp/opm_25.0.0.51_97f44863.index.json index fb95eb0..0c00fbe 100644 --- a/fw/decomp/opm_25.0.0.51_97f44863.index.json +++ b/fw/decomp/opm_25.0.0.51_97f44863.index.json @@ -199,9 +199,9 @@ { "addr": "0x402c5a", "ida_name": "sub_402C5A", - "name": null, + "name": "opm_rpc_2", "size": 36, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x402c7e", diff --git a/fw/decomp/opm_25.0.0.57_a7ad870e.anon.c b/fw/decomp/opm_25.0.0.57_a7ad870e.anon.c index 1ead36d..57014bd 100644 --- a/fw/decomp/opm_25.0.0.57_a7ad870e.anon.c +++ b/fw/decomp/opm_25.0.0.57_a7ad870e.anon.c @@ -1,7 +1,7 @@ /* opm 25.0.0.57 (a7ad870e) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf - * functions: 47 total in build, 37 named, 10 anonymous + * functions: 47 total in build, 34 named, 13 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 10, "FUZZY": 1, "MNEM": 11, "ambiguous": 4, "cmd_protos": 0, "comments": 0, "dispatch_conflict": 0, "none": 21, "protos": 3, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -48,24 +48,54 @@ int __fastcall sub_402D7E(char *a1, char *a2, int a3) return v3; } +/* ==== ANON size=34 ==== */ +int sub_402E72() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ +int sub_402E94() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ +int sub_402E50() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + /* ==== ANON size=36 ==== */ -int sub_402C4A() +int sub_402F46() { - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x20u); + opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } -/* ==== ANON size=42 ==== */ -int sub_402D54() +/* ==== ANON size=38 ==== */ +int sub_402F20() { - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x20u); + opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } /* ==== ANON size=98 ==== */ @@ -285,36 +315,43 @@ int __fastcall sub_401914( int v21; // r0 bool v22; // zf int v23; // r1 - int v24; // r1 - int v25; // r0 - int v26; // r0 - int v27; // r2 - int *v28; // r1 - int *v29; // r5 - bool v30; // zf - int v31; // r6 + int *v24; // r1 + int *v25; // r5 + _DWORD *v26; // r5 + int v27; // t1 + int v28; // r1 + int v29; // r0 + int v30; // r0 + int v31; // r2 + int *v32; // r1 + int *v33; // r1 + int *v34; // r1 + _QWORD *v35; // r5 + bool v36; // zf + int v37; // r6 unsigned int unk00; // r5 - int v33; // r0 - int v34; // [sp+18h] [bp-FE4h] - struct tee_fmt_state v35; // [sp+20h] [bp-FDCh] BYREF - int v36; // [sp+FF8h] [bp-4h] + int v39; // r0 + int v40; // [sp+18h] [bp-FE4h] + int v41; // [sp+1Ch] [bp-FE0h] BYREF + struct tee_fmt_state v42; // [sp+20h] [bp-FDCh] BYREF + int v43; // [sp+FF8h] [bp-4h] v10 = (_DWORD *)off_401D24; - v36 = *(_DWORD *)off_401D24; + v43 = *(_DWORD *)off_401D24; result = 264; if ( a2 != 16 ) - goto LABEL_72; + goto LABEL_77; if ( a1 == nullptr ) - goto LABEL_72; + goto LABEL_77; if ( a4 == 0 ) - goto LABEL_72; + goto LABEL_77; v8 = a6; if ( a6 == nullptr || a8 == nullptr ) - goto LABEL_72; + goto LABEL_77; if ( a3 > 0x3F ) { result = 259; - goto LABEL_72; + goto LABEL_77; } v15 = (int *)off_401D28; v9 = (__int16 *)a7; @@ -322,30 +359,31 @@ int __fastcall sub_401914( v16 = &v15[22 * a3]; v18 = v16[1]; v17 = v16 + 1; - v34 = v18; + v40 = v18; if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D2C, a3: 0x10u) == 0 ) { if ( a7 != 72 ) - goto LABEL_71; - if ( v34 != 0 ) + goto LABEL_76; + if ( v40 != 0 ) { *a8 = dword_401D80 + 6; - goto LABEL_71; + goto LABEL_76; } - goto LABEL_54; + goto LABEL_57; } if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D30, a3: 0x10u) == 0 ) { if ( a7 != 32 ) - goto LABEL_71; - v35.unk00 = 0; - result = opm_rpc_102(); + goto LABEL_76; + v42.unk00 = 0; + result = sub_402E72(a1: (*off_401D28)[22 * a3 + 13], a2: &v42); if ( result != 0 ) - goto LABEL_72; - v23 = -1; -LABEL_38: - a6[5] = v23; - goto LABEL_72; + goto LABEL_77; + if ( v42.unk00 - 1 > 4 ) + v23 = -1; + else + v23 = dword_401D8C[v42.unk00 - 1]; + goto LABEL_40; } if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D34, a3: 0x10u) != 0 ) { @@ -353,183 +391,193 @@ LABEL_38: if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D38, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D3C, a3: 0x10u) == 0 ) - goto LABEL_48; + goto LABEL_51; if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D40, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D44, a3: 0x10u) == 0 ) - goto LABEL_48; + goto LABEL_51; if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D48, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D4C, a3: 0x10u) == 0 ) { if ( a7 == 32 ) { - opm_lib_zero_fill_words(result: &v35, a2: 0x28u); + opm_lib_zero_fill_words(result: &v42, a2: 0x28u); a6[5] = 0; result = opm_rpc_200(); if ( result == 0 ) { - v27 = dword_401D84; - if ( LOBYTE(v35.unk00) == 0 ) - v27 = 3; - a6[5] = v27; + v31 = dword_401D84; + if ( LOBYTE(v42.unk00) == 0 ) + v31 = 3; + a6[5] = v31; } - goto LABEL_72; + goto LABEL_77; } - goto LABEL_71; + goto LABEL_76; } if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D50, a3: 0x10u) != 0 ) { - if ( __PAIR64__(v34, opm_memcmp_be(a1, a2: (unsigned int *)dword_401D54, a3: 0x10u)) == 0x100000000LL - || (opm_memcmp_be(a1, a2: (unsigned int *)dword_401D58, a3: 0x10u) | v34) == 0 ) + if ( __PAIR64__(v40, opm_memcmp_be(a1, a2: (unsigned int *)dword_401D54, a3: 0x10u)) == 0x100000000LL + || (opm_memcmp_be(a1, a2: (unsigned int *)dword_401D58, a3: 0x10u) | v40) == 0 ) { if ( a7 == 32 ) { a6[5] = 0; v8 = a6 + 5; - v35.unk00 = 0; - result = opm_rpc_300(); + v42.unk00 = 0; + result = sub_402F20(a1: a6 + 5, a2: 0, a3: &v42, a4: 0); if ( result != 0 ) *a8 = dword_401D80; - goto LABEL_72; + goto LABEL_77; } + goto LABEL_76; } - else + if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D5C, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D5C, a3: 0x10u) == 0 ) - { - if ( a7 == 32 ) - { - a6[5] = 0; - v35.unk00 = 0; - opm_rpc_102(); - result = 608; - goto LABEL_72; - } - goto LABEL_71; - } if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D60, a3: 0x10u) != 0 ) { v19 = opm_memcmp_be(a1, a2: (unsigned int *)dword_401D64, a3: 0x10u); - v20 = v34 == 1; - if ( v34 == 1 ) + v20 = v40 == 1; + if ( v40 == 1 ) v20 = v19 == 0; - if ( v20 || (opm_memcmp_be(a1, a2: (unsigned int *)dword_401D68, a3: 0x10u) | v34) == 0 ) - goto LABEL_54; + if ( v20 || (opm_memcmp_be(a1, a2: (unsigned int *)dword_401D68, a3: 0x10u) | v40) == 0 ) + goto LABEL_57; v21 = opm_memcmp_be(a1, a2: (unsigned int *)dword_401D6C, a3: 0x10u); - v22 = v34 == 1; - if ( v34 == 1 ) + v22 = v40 == 1; + if ( v40 == 1 ) v22 = v21 == 0; - if ( !v22 && (opm_memcmp_be(a1, a2: (unsigned int *)dword_401D70, a3: 0x10u) | v34) != 0 ) + if ( !v22 && (opm_memcmp_be(a1, a2: (unsigned int *)dword_401D70, a3: 0x10u) | v40) != 0 ) { if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D74, a3: 0x10u) == 0 ) - goto LABEL_74; + goto LABEL_79; result = 263; - goto LABEL_72; + goto LABEL_77; } if ( a7 == 32 ) { - v26 = 1; - goto LABEL_53; + v30 = 1; + goto LABEL_56; } - goto LABEL_71; + goto LABEL_76; } if ( a7 == 32 ) { - v28 = (int *)off_401D28; + v33 = (int *)off_401D28; a6[6] = 0; a6[7] = 0; - v29 = &v28[22 * a3 + 16]; - result = opm_rpc_107(); + v34 = &v33[22 * a3]; + v35 = v34 + 16; + result = sub_402E94(a1: v34[13], a2: v34 + 16); if ( result == 0 ) { - *((_QWORD *)a6 + 3) = *(_QWORD *)v29; - goto LABEL_54; + *((_QWORD *)a6 + 3) = *v35; + goto LABEL_57; } - goto LABEL_72; + goto LABEL_77; } +LABEL_76: + result = 264; + goto LABEL_77; } -LABEL_71: - result = 264; - goto LABEL_72; + if ( a7 != 32 ) + goto LABEL_76; + v32 = (int *)off_401D28; + a6[5] = 0; + v42.unk00 = 0; + result = sub_402E72(a1: v32[22 * a3 + 13], a2: &v42); + if ( v42.unk00 != 1 ) + { + result = 608; + goto LABEL_77; + } + v23 = 1; +LABEL_40: + a6[5] = v23; + goto LABEL_77; } -LABEL_48: +LABEL_51: if ( a7 == 32 ) { result = 0; a6[5] = 0; - goto LABEL_72; + goto LABEL_77; } - goto LABEL_71; + goto LABEL_76; } -LABEL_54: +LABEL_57: result = 0; - goto LABEL_72; + goto LABEL_77; } - v25 = 1; + v29 = 1; } else { - v25 = 0; + v29 = 0; } - result = opm_TA_InvokeCommandEntryPoint__h4(a1: a3, a2: v34, a3: a4, a4: a5, a5: (int)a6, a6: a7, a7: a8, a8: v25); - goto LABEL_72; + result = opm_TA_InvokeCommandEntryPoint__h4(a1: a3, a2: v40, a3: a4, a4: a5, a5: (int)a6, a6: a7, a7: a8, a8: v29); + goto LABEL_77; } if ( a7 != 32 ) - goto LABEL_71; + goto LABEL_76; + v24 = (int *)off_401D28; a6[5] = 0; - v35.unk00 = 0; - result = opm_rpc_105(); + v42.unk00 = 0; + v25 = &v24[22 * a3]; + v27 = v25[13]; + v26 = v25 + 13; + result = sub_402E50(a1: v27, a2: &v42); if ( result == 0 ) { if ( *v17 == 0 ) { - v26 = a6[5] | 1; -LABEL_53: - a6[5] = v26; - goto LABEL_54; + v30 = a6[5] | 1; +LABEL_56: + a6[5] = v30; + goto LABEL_57; } if ( *v17 != 1 ) { result = 260; - goto LABEL_72; + goto LABEL_77; } - result = opm_rpc_102(); - if ( result == 0 ) + v41 = 0; + result = sub_402E72(a1: *v26, a2: &v41); + if ( result == 0 && v41 != 4 ) { - v24 = a6[5]; - a6[5] = v24 | 8; - if ( (v35.unk00 & 2) != 0 && *off_401D88 != 0 ) + v28 = a6[5]; + a6[5] = v28 | 8; + if ( (v42.unk00 & 2) != 0 && *off_401D88 != 0 ) { - v23 = v24 | 0x28; - goto LABEL_38; + v23 = v28 | 0x28; + goto LABEL_40; } } } -LABEL_72: - while ( *v10 != v36 ) +LABEL_77: + while ( *v10 != v43 ) { - ((void (__fastcall *)(int, int))loc_402E30)(a1: result, a2: *v10 - v36); -LABEL_74: - v30 = v9 == (__int16 *)4056; + ((void (__fastcall *)(int, int))loc_402E30)(a1: result, a2: *v10 - v43); +LABEL_79: + v36 = v9 == (__int16 *)4056; if ( v9 == (__int16 *)4056 ) - v30 = a7 == 20; + v36 = a7 == 20; result = 264; - if ( v30 ) + if ( v36 ) { - v31 = 0; + v37 = 0; v8[4] = 0; - opm_lib_thunk_tailjump(a1: &v35); - unk00 = v35.unk00; + opm_lib_thunk_tailjump(a1: &v42); + unk00 = v42.unk00; v9 = off_401D78; - while ( v31 != 56 ) + while ( v37 != 56 ) { - v33 = opm_memcmp_be(a1: (unsigned int *)&v9[v31], a2: &v35.unk04, a3: unk00); - v31 += 8; - if ( v33 == 0 ) + v39 = opm_memcmp_be(a1: (unsigned int *)&v9[v37], a2: &v42.unk04, a3: unk00); + v37 += 8; + if ( v39 == 0 ) { v8[4] = dword_401D7C; - goto LABEL_54; + goto LABEL_57; } } result = 688; @@ -568,46 +616,47 @@ int __fastcall sub_4012CC(int a1, int a2, unsigned int a3) int v28; // t1 _DWORD *v29; // r2 int v30; // r1 - int v31; // r0 - int *v32; // r0 - _DWORD *v33; // r0 - int v34; // t1 - _DWORD *v35; // r1 - int v36; // r2 - int v37; // r7 - int v38; // r1 - int *v39; // r11 - int v40; // r0 - int *v41; // r11 - int v42; // t1 - int v43; // r1 - bool v44; // zf - int v45; // r1 - bool v46; // zf - int v47; // r0 - int v48; // r1 - bool v49; // zf - int v50; // [sp+Ch] [bp-1384h] BYREF - int v51[4]; // [sp+10h] [bp-1380h] BYREF - unsigned int v52[5]; // [sp+20h] [bp-1370h] BYREF - int v53; // [sp+34h] [bp-135Ch] - int v54[1010]; // [sp+38h] [bp-1358h] BYREF - _DWORD v55[76]; // [sp+1010h] [bp-380h] BYREF - int v56[71]; // [sp+1140h] [bp-250h] BYREF - int v57; // [sp+125Ch] [bp-134h] - unsigned int v58; // [sp+1264h] [bp-12Ch] - struct tee_fmt_state *v59; // [sp+1268h] [bp-128h] - int v60; // [sp+126Ch] [bp-124h] - int v61; // [sp+1270h] [bp-120h] - int *v62; // [sp+1274h] [bp-11Ch] - int v63; // [sp+1278h] [bp-118h] - _DWORD *v64; // [sp+127Ch] [bp-114h] - int v65; // [sp+1280h] [bp-110h] - int v66; // [sp+1284h] [bp-10Ch] - struct tee_fmt_state v67[6]; // [sp+1288h] [bp-108h] BYREF - int v68; // [sp+138Ch] [bp-4h] + int v31; // r1 + int v32; // r0 + int *v33; // r0 + _DWORD *v34; // r0 + int v35; // t1 + _DWORD *v36; // r1 + int v37; // r2 + int v38; // r7 + int v39; // r1 + int *v40; // r11 + int v41; // r0 + int *v42; // r11 + int v43; // t1 + int v44; // r1 + bool v45; // zf + int v46; // r1 + bool v47; // zf + int v48; // r0 + int v49; // r1 + bool v50; // zf + int v51; // [sp+Ch] [bp-1384h] BYREF + int v52[4]; // [sp+10h] [bp-1380h] BYREF + unsigned int v53[5]; // [sp+20h] [bp-1370h] BYREF + int v54; // [sp+34h] [bp-135Ch] + int v55[1010]; // [sp+38h] [bp-1358h] BYREF + _DWORD v56[76]; // [sp+1010h] [bp-380h] BYREF + int v57[71]; // [sp+1140h] [bp-250h] BYREF + int v58; // [sp+125Ch] [bp-134h] + unsigned int v59; // [sp+1264h] [bp-12Ch] + struct tee_fmt_state *v60; // [sp+1268h] [bp-128h] + int v61; // [sp+126Ch] [bp-124h] + int v62; // [sp+1270h] [bp-120h] + int *v63; // [sp+1274h] [bp-11Ch] + int v64; // [sp+1278h] [bp-118h] + _DWORD *v65; // [sp+127Ch] [bp-114h] + int v66; // [sp+1280h] [bp-110h] + int v67; // [sp+1284h] [bp-10Ch] + struct tee_fmt_state v68[6]; // [sp+1288h] [bp-108h] BYREF + int v69; // [sp+138Ch] [bp-4h] - v68 = dword_402E2C; + v69 = dword_402E2C; if ( a1 != 0 ) { v5 = a2; @@ -616,12 +665,12 @@ int __fastcall sub_4012CC(int a1, int a2, unsigned int a3) v3 = a3; if ( a3 <= 0x100 ) { - v4 = v67; + v4 = v68; v10 = 256 - a3; if ( a3 > 0xFF ) v10 = 0; - opm_lib_zero_fill_bytes(result: (_BYTE *)v67 + a3, a2: v10); - opm_lib_thunk_tailjump(a1: v67); + opm_lib_zero_fill_bytes(result: (_BYTE *)v68 + a3, a2: v10); + opm_lib_thunk_tailjump(a1: v68); while ( v3 != 0 ) { unk00 = v4->unk00; @@ -631,21 +680,21 @@ int __fastcall sub_4012CC(int a1, int a2, unsigned int a3) } } } - result = dword_402E2C - v68; - if ( dword_402E2C != v68 ) + result = dword_402E2C - v69; + if ( dword_402E2C != v69 ) { v13 = ((int (__fastcall *)(int))loc_402E30)(a1: result); - v58 = v3; - v59 = v4; - v60 = v5; - v61 = a1; - v62 = &dword_402E2C; - v63 = v6; - v64 = v7; - v65 = v8; - v66 = v15; + v59 = v3; + v60 = v4; + v61 = v5; + v62 = a1; + v63 = &dword_402E2C; + v64 = v6; + v65 = v7; + v66 = v8; + v67 = v15; v16 = v13; - v57 = dword_402E2C; + v58 = dword_402E2C; if ( v13 == 0 ) goto LABEL_89; v3 = *(_DWORD *)(v13 + 16); @@ -654,38 +703,38 @@ int __fastcall sub_4012CC(int a1, int a2, unsigned int a3) v17 = (int *)off_4022A8; if ( (*off_4022A8)[22 * v3] != 3 ) goto LABEL_89; - opm_memcpy_aligned(result: v51, a2: (int *)(v13 + 24), a3: 0x1000u, a4: v14); + opm_memcpy_aligned(result: v52, a2: (int *)(v13 + 24), a3: 0x1000u, a4: v14); v18 = &v17[22 * v3]; v19 = v18[11]; v7 = v18 + 11; - if ( v19 != v52[4] - || ((int (__fastcall *)(unsigned int, unsigned int *, int, int *))loc_4022AC)(a1: v3, a2: v52, a3: 4080, a4: v51) != 0 ) + if ( v19 != v53[4] + || ((int (__fastcall *)(unsigned int, unsigned int *, int, int *))loc_4022AC)(a1: v3, a2: v53, a3: 4080, a4: v52) != 0 ) { goto LABEL_89; } - if ( opm_memcmp_be(a1: (unsigned int *)dword_4016DC, a2: v52, a3: 0x10u) != 0 - && opm_memcmp_be(a1: (unsigned int *)dword_4016E0, a2: v52, a3: 0x10u) != 0 - && opm_memcmp_be(a1: (unsigned int *)dword_4016E4, a2: v52, a3: 0x10u) != 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)dword_4016DC, a2: v53, a3: 0x10u) != 0 + && opm_memcmp_be(a1: (unsigned int *)dword_4016E0, a2: v53, a3: 0x10u) != 0 + && opm_memcmp_be(a1: (unsigned int *)dword_4016E4, a2: v53, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)dword_4016E8, a2: v52, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)dword_4016E8, a2: v53, a3: 0x10u) == 0 ) goto LABEL_96; - LODWORD(v20) = opm_memcmp_be(a1: (unsigned int *)dword_4016EC, a2: v52, a3: 0x10u); + LODWORD(v20) = opm_memcmp_be(a1: (unsigned int *)dword_4016EC, a2: v53, a3: 0x10u); if ( (_DWORD)v20 != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)dword_4016F0, a2: v52, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)dword_4016F0, a2: v53, a3: 0x10u) == 0 ) goto LABEL_89; - if ( opm_memcmp_be(a1: (unsigned int *)dword_4016F4, a2: v52, a3: 0x10u) == 0 - || opm_memcmp_be(a1: (unsigned int *)dword_4016F8, a2: v52, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)dword_4016F4, a2: v53, a3: 0x10u) == 0 + || opm_memcmp_be(a1: (unsigned int *)dword_4016F8, a2: v53, a3: 0x10u) == 0 ) { if ( *(_DWORD *)(loc_401714 + 8) != 1 ) { *loc_401714 = v3; *(_DWORD *)(loc_401714 + 8) = 1; if ( *(_DWORD *)(loc_401714 + 4) == 1 ) - v38 = 0; + v39 = 0; else - v38 = v17[22 * v3 + 15]; - *(_DWORD *)(loc_401714 + 0xC) = v38; + v39 = v17[22 * v3 + 15]; + *(_DWORD *)(loc_401714 + 0xC) = v39; goto LABEL_96; } if ( *loc_401714 == v3 ) @@ -693,15 +742,15 @@ int __fastcall sub_4012CC(int a1, int a2, unsigned int a3) while ( 1 ) { LABEL_89: - if ( dword_402E2C == v57 ) + if ( dword_402E2C == v58 ) __asm { POPEQ.W {R4-R11,PC} } - ((void (__fastcall *)(int))loc_402E30)(a1: dword_402E2C - v57); + ((void (__fastcall *)(int))loc_402E30)(a1: dword_402E2C - v58); LABEL_92: - v48 = *(_DWORD *)(loc_401714 + 8); - v49 = v48 == 1; - if ( v48 == 1 ) - v49 = *loc_401714 == v3; - if ( v49 ) + v49 = *(_DWORD *)(loc_401714 + 8); + v50 = v49 == 1; + if ( v49 == 1 ) + v50 = *loc_401714 == v3; + if ( v50 ) { *(_DWORD *)(loc_401714 + 8) = 0; *(_DWORD *)(loc_401714 + 8 + 4) = 0; @@ -711,100 +760,105 @@ LABEL_96: ++*v7; } } - v22 = opm_memcmp_be(a1: (unsigned int *)dword_4016FC, a2: v52, a3: 0x10u); - if ( v22 != 0 && opm_memcmp_be(a1: *(unsigned int **)byte_401700, a2: v52, a3: 0x10u) != 0 ) + v22 = opm_memcmp_be(a1: (unsigned int *)dword_4016FC, a2: v53, a3: 0x10u); + if ( v22 != 0 && opm_memcmp_be(a1: *(unsigned int **)byte_401700, a2: v53, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: loc_401704, a2: v52, a3: 0x10u) != 0 - && opm_memcmp_be(a1: loc_401708, a2: v52, a3: 0x10u) != 0 ) + if ( opm_memcmp_be(a1: loc_401704, a2: v53, a3: 0x10u) != 0 + && opm_memcmp_be(a1: loc_401708, a2: v53, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: loc_40170C, a2: v52, a3: 0x10u) == 0 - || opm_memcmp_be(a1: loc_401710, a2: v52, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: loc_40170C, a2: v53, a3: 0x10u) == 0 + || opm_memcmp_be(a1: loc_401710, a2: v53, a3: 0x10u) == 0 ) { goto LABEL_92; } } else { - v43 = *(_DWORD *)(loc_401714 + 8); - v44 = v43 == 1; - if ( v43 == 1 ) - v44 = *loc_401714 == v3; - if ( !v44 || v53 == 8 ) + v44 = *(_DWORD *)(loc_401714 + 8); + v45 = v44 == 1; + if ( v44 == 1 ) + v45 = *loc_401714 == v3; + if ( !v45 || v54 == 8 ) goto LABEL_96; } goto LABEL_89; } - v39 = &v17[22 * v3]; - v42 = v39[1]; - v41 = v39 + 1; - v40 = v42; - if ( v42 == 1 ) + v40 = &v17[22 * v3]; + v43 = v40[1]; + v42 = v40 + 1; + v41 = v43; + if ( v43 == 1 ) { if ( v22 != 0 ) goto LABEL_89; } - else if ( v40 != 0 || opm_memcmp_be(a1: *(unsigned int **)byte_401700, a2: v52, a3: 0x10u) != 0 ) + else if ( v41 != 0 || opm_memcmp_be(a1: *(unsigned int **)byte_401700, a2: v53, a3: 0x10u) != 0 ) { goto LABEL_89; } - if ( v53 != 280 ) + if ( v54 != 280 ) goto LABEL_89; - v45 = *(_DWORD *)(loc_401714 + 8); - v46 = v45 == 1; - if ( v45 == 1 ) - v46 = *loc_401714 == v3; - if ( !v46 ) + v46 = *(_DWORD *)(loc_401714 + 8); + v47 = v46 == 1; + if ( v46 == 1 ) + v47 = *loc_401714 == v3; + if ( !v47 ) goto LABEL_89; - opm_memcpy_aligned(result: v56, a2: v54, a3: 0x118u, a4: v21); - v37 = v56[68]; - if ( v56[68] != 0 ) + opm_memcpy_aligned(result: v57, a2: v55, a3: 0x118u, a4: v21); + v38 = v57[68]; + if ( v57[68] != 0 ) { - if ( v56[68] == 16 ) + if ( v57[68] == 16 ) { - v3 = (unsigned int)v56; - opm_asd301_path__h1(a1: (int)v56, a2: 256); - opm_lib_zero_fill_words(result: v55, a2: 0x130u); - v47 = *v41; - v50 = 256; - v37 = sub_4023B4(a1: v47, a2: v56, a3: 256, a4: v55, a5: &v50); - if ( v37 == 0 ) - opm_asd301_path__h1(a1: (int)v55, a2: v56[68]); + v3 = (unsigned int)v57; + opm_asd301_path__h1(a1: (int)v57, a2: 256); + opm_lib_zero_fill_words(result: v56, a2: 0x130u); + v48 = *v42; + v51 = 256; + v38 = sub_4023B4(a1: v48, a2: v57, a3: 256, a4: v56, a5: &v51); + if ( v38 == 0 ) + opm_asd301_path__h1(a1: (int)v56, a2: v57[68]); } else { - v37 = 264; + v38 = 264; } } LABEL_59: - if ( v37 == 0 ) + if ( v38 == 0 ) goto LABEL_96; goto LABEL_89; } HIDWORD(v20) = v17[22 * v3 + 1]; - if ( v20 != 0x100000000LL || v53 != 4 || *(_DWORD *)(v16 + 4120) == 0 ) + if ( v20 != 0x100000000LL ) + goto LABEL_89; + if ( v54 != 4 ) + goto LABEL_89; + v31 = *(_DWORD *)(v16 + 4120); + if ( v31 == 0 ) goto LABEL_89; - v31 = opm_rpc_301(); + v32 = sub_402F46(a1: v55[0], a2: v31, a3: v16 + 4124); } else { - if ( v53 != 16 ) + if ( v54 != 16 ) goto LABEL_89; - v24 = v54[0]; - v23 = v54[1]; - v25 = v54[0] == 32; - if ( v54[0] != 32 ) - v25 = v54[0] == 8; + v24 = v55[0]; + v23 = v55[1]; + v25 = v55[0] == 32; + if ( v55[0] != 32 ) + v25 = v55[0] == 8; if ( v25 ) { if ( v17[22 * v3 + 1] != 1 ) goto LABEL_89; } - else if ( v54[0] != 1 || v17[22 * v3 + 1] != 0 ) + else if ( v55[0] != 1 || v17[22 * v3 + 1] != 0 ) { goto LABEL_89; } - if ( v54[1] >= 3u && v54[1] != 0x40000000 - || opm_memcmp_be(a1: (unsigned int *)dword_4016E4, a2: v52, a3: 0x10u) == 0 ) + if ( v55[1] >= 3u && v55[1] != 0x40000000 + || opm_memcmp_be(a1: (unsigned int *)dword_4016E4, a2: v53, a3: 0x10u) == 0 ) { goto LABEL_89; } @@ -815,18 +869,18 @@ LABEL_59: { if ( v23 != 0 ) goto LABEL_89; - v32 = &v17[22 * v3]; - v34 = v32[18]; - v33 = v32 + 18; - if ( v34 != 1 ) + v33 = &v17[22 * v3]; + v35 = v33[18]; + v34 = v33 + 18; + if ( v35 != 1 ) goto LABEL_96; - v35 = off_4017EC; - v36 = *(_DWORD *)off_4017EC; + v36 = off_4017EC; + v37 = *(_DWORD *)off_4017EC; if ( *(_DWORD *)off_4017EC == 0 ) goto LABEL_89; - *v33 = 0; - *v35 = v36 - 1; - if ( v36 != 1 ) + *v34 = 0; + *v36 = v37 - 1; + if ( v37 != 1 ) goto LABEL_96; } else @@ -844,9 +898,9 @@ LABEL_59: if ( v30 != 0 ) goto LABEL_96; } - v31 = opm_rpc_305(); + v32 = opm_rpc_305(); } - v37 = v31; + v38 = v32; goto LABEL_59; } return result; @@ -1133,7 +1187,7 @@ LABEL_79: { LABEL_80: if ( v20 != 0 ) - sub_402C4A(); + opm_rpc_2(); if ( v19 != 0 ) opm_sysdrv_rpc_31(); LABEL_84: @@ -1157,7 +1211,7 @@ LABEL_87: goto LABEL_94; if ( opm_sysdrv_rpc_1() != 0 ) goto LABEL_96; - if ( sub_402D54(a1: STACK[0x27F8], a2: STACK[0x27F4]) != 0 ) + if ( opm_rpc_3() != 0 ) goto LABEL_98; STACK[0x278C] = 256; if ( opm_sysdrv_rpc_9() != 0 ) @@ -1179,7 +1233,7 @@ LABEL_94: LABEL_96: v10 = 1298; } - else if ( sub_402D54(a1: STACK[0x27F8], a2: STACK[0x27F4]) != 0 ) + else if ( opm_rpc_3() != 0 ) { LABEL_98: v10 = 1299; diff --git a/fw/decomp/opm_25.0.0.57_a7ad870e.c b/fw/decomp/opm_25.0.0.57_a7ad870e.c index 83c6918..55de73b 100644 --- a/fw/decomp/opm_25.0.0.57_a7ad870e.c +++ b/fw/decomp/opm_25.0.0.57_a7ad870e.c @@ -1,7 +1,7 @@ /* opm 25.0.0.57 (a7ad870e) -- named functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf - * functions: 47 total in build, 37 named, 10 anonymous + * functions: 47 total in build, 34 named, 13 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 10, "FUZZY": 1, "MNEM": 11, "ambiguous": 4, "cmd_protos": 0, "comments": 0, "dispatch_conflict": 0, "none": 21, "protos": 3, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -172,7 +172,7 @@ int __fastcall opm_TA_InvokeCommandEntryPoint__h5(unsigned int a1, int a2, int a if ( a1 > 0x3F ) return 259; - result = opm_rpc_161(); + result = opm_asd_rpc_161(); v6 = result == 7; if ( result != 7 ) v6 = result == 0; @@ -205,7 +205,7 @@ int __fastcall opm_TA_InvokeCommandEntryPoint__h6(unsigned int a1, int a2, int a { if ( v5 > 4 ) return 0; - result = opm_rpc_161(); + result = opm_asd_rpc_161(); v9 = result == 7; if ( result != 7 ) v9 = result == 0; @@ -248,6 +248,16 @@ opm_asd301_path__h1: } } +/* ==== opm_asd_rpc_161 [tier=IDA size=46] ==== */ +int opm_asd_rpc_161() +{ + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + /* ==== opm_cmd04 [tier=MNEM size=72] ==== */ int __fastcall opm_cmd04(void *ctx, struct ta_params *params) { @@ -264,7 +274,7 @@ int __fastcall opm_cmd04(void *ctx, struct ta_params *params) if ( (*off_4023AC)[22 * v3] != 1 ) return 266; v5 = &(*off_4023AC)[22 * v3]; - opm_sysdrv_rpc_35(); + opm_rpc_35(); v6 = (char *)ctx + 9244; v7 = v5[3]; v8 = v5[4]; @@ -657,44 +667,14 @@ int *__fastcall opm_memcpy_aligned(int *result, int *a2, unsigned int a3, int a4 return result; } -/* ==== opm_rpc_102 [tier=SVCOP size=34] ==== */ -int opm_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_rpc_105 [tier=SVCOP size=34] ==== */ -int opm_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_rpc_107 [tier=SVCOP size=34] ==== */ -int opm_rpc_107() +/* ==== opm_rpc_2 [tier=SVCOP size=36] ==== */ +int opm_rpc_2() { - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - opm_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== opm_rpc_161 [tier=SVCOP size=46] ==== */ -int opm_rpc_161() -{ - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x18u); + opm_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } - return 2; + return 1; } /* ==== opm_rpc_200 [tier=SVCOP size=32] ==== */ @@ -717,24 +697,14 @@ int opm_rpc_201() return 2; } -/* ==== opm_rpc_300 [tier=SVCOP size=38] ==== */ -int opm_rpc_300() +/* ==== opm_rpc_3 [tier=SVCOP size=42] ==== */ +int opm_rpc_3() { - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - opm_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== opm_rpc_301 [tier=SVCOP size=36] ==== */ -int opm_rpc_301() -{ - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x18u); + opm_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } - return 2; + return 1; } /* ==== opm_rpc_304 [tier=SVCOP size=28] ==== */ @@ -757,6 +727,16 @@ int opm_rpc_305() return 2; } +/* ==== opm_rpc_35 [tier=SVCOP size=42] ==== */ +int opm_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_1 [tier=MNEM size=60] ==== */ int opm_sysdrv_rpc_1() { @@ -804,16 +784,6 @@ int opm_sysdrv_rpc_33() return 1; } -/* ==== opm_sysdrv_rpc_35 [tier=IDA 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() { diff --git a/fw/decomp/opm_25.0.0.57_a7ad870e.index.json b/fw/decomp/opm_25.0.0.57_a7ad870e.index.json index 3c9199c..50afbaf 100644 --- a/fw/decomp/opm_25.0.0.57_a7ad870e.index.json +++ b/fw/decomp/opm_25.0.0.57_a7ad870e.index.json @@ -192,9 +192,9 @@ { "addr": "0x402c4a", "ida_name": "sub_402C4A", - "name": null, + "name": "opm_rpc_2", "size": 36, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x402c6e", @@ -206,9 +206,9 @@ { "addr": "0x402c94", "ida_name": "sub_402C94", - "name": "opm_sysdrv_rpc_35", + "name": "opm_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x402cbe", @@ -234,9 +234,9 @@ { "addr": "0x402d54", "ida_name": "sub_402D54", - "name": null, + "name": "opm_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x402d7e", @@ -255,30 +255,30 @@ { "addr": "0x402e50", "ida_name": "sub_402E50", - "name": "opm_rpc_105", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x402e72", "ida_name": "sub_402E72", - "name": "opm_rpc_102", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x402e94", "ida_name": "sub_402E94", - "name": "opm_rpc_107", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x402eb6", "ida_name": "sub_402EB6", - "name": "opm_rpc_161", + "name": "opm_asd_rpc_161", "size": 46, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x402ee4", @@ -297,16 +297,16 @@ { "addr": "0x402f20", "ida_name": "sub_402F20", - "name": "opm_rpc_300", + "name": null, "size": 38, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x402f46", "ida_name": "sub_402F46", - "name": "opm_rpc_301", + "name": null, "size": 36, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x402f6a", diff --git a/fw/decomp/opm_25.0.0.60_638c0601.anon.c b/fw/decomp/opm_25.0.0.60_638c0601.anon.c index 1cd1edd..d46989e 100644 --- a/fw/decomp/opm_25.0.0.60_638c0601.anon.c +++ b/fw/decomp/opm_25.0.0.60_638c0601.anon.c @@ -1,7 +1,7 @@ /* opm 25.0.0.60 (638c0601) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf - * functions: 49 total in build, 36 named, 13 anonymous + * functions: 49 total in build, 33 named, 16 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 10, "FUZZY": 0, "MNEM": 10, "ambiguous": 4, "cmd_protos": 0, "comments": 0, "dispatch_conflict": 0, "none": 25, "protos": 3, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -145,24 +145,54 @@ int __fastcall sub_4017F0(int a1) return 561; } +/* ==== ANON size=34 ==== */ +int sub_402EF8() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ +int sub_402ED6() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ +int sub_402EB4() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + /* ==== ANON size=36 ==== */ -int sub_402CAE() +int sub_402FAA() { - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x20u); + opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } -/* ==== ANON size=42 ==== */ -int sub_402DB8() +/* ==== ANON size=38 ==== */ +int sub_402F84() { - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x20u); + opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } /* ==== ANON size=96 ==== */ @@ -656,7 +686,7 @@ LABEL_50: goto LABEL_82; if ( v46 != 4 || a1[1030] == 0 ) goto LABEL_81; - v22 = opm_rpc_301(); + v22 = sub_402FAA(); goto LABEL_50; } if ( opm_memcmp_be(a1: (unsigned int *)dword_4016F0, a2: v45, a3: 0x10u) == 0 ) @@ -799,36 +829,41 @@ int __fastcall sub_401914( int v23; // r3 int v24; // r1 int *v25; // r1 - int v26; // r1 - int v27; // r0 - int v28; // r0 - int v29; // r2 - int *v30; // r1 - bool v31; // zf - int v32; // r6 - int v33; // r0 - int v34; // [sp+18h] [bp-FE4h] - int *v35; // [sp+20h] [bp-FDCh] BYREF - unsigned int v36[1013]; // [sp+24h] [bp-FD8h] BYREF - int v37; // [sp+FF8h] [bp-4h] + int *v26; // r5 + int v27; // t1 + int v28; // r1 + int v29; // r0 + int v30; // r0 + int v31; // r2 + int *v32; // r1 + int *v33; // r1 + int *v34; // r1 + bool v35; // zf + int v36; // r6 + int v37; // r0 + int v38; // [sp+18h] [bp-FE4h] + int v39; // [sp+1Ch] [bp-FE0h] BYREF + int *v40; // [sp+20h] [bp-FDCh] BYREF + unsigned int v41[1013]; // [sp+24h] [bp-FD8h] BYREF + int v42; // [sp+FF8h] [bp-4h] v11 = (_DWORD *)off_401D24; - v37 = *(_DWORD *)off_401D24; + v42 = *(_DWORD *)off_401D24; result = 264; if ( a2 != 16 ) - goto LABEL_72; + goto LABEL_77; if ( a1 == nullptr ) - goto LABEL_72; + goto LABEL_77; v9 = a4; if ( a4 == nullptr ) - goto LABEL_72; + goto LABEL_77; v8 = a6; if ( a6 == nullptr || a8 == nullptr ) - goto LABEL_72; + goto LABEL_77; if ( a3 > 0x3F ) { result = 259; - goto LABEL_72; + goto LABEL_77; } v15 = (int *)off_401D28; v10 = (__int16 *)a7; @@ -836,30 +871,31 @@ int __fastcall sub_401914( v16 = &v15[22 * a3]; v18 = v16[1]; v17 = v16 + 1; - v34 = v18; + v38 = v18; if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D2C, a3: 0x10u) == 0 ) { if ( a7 != 72 ) - goto LABEL_71; - if ( v34 != 0 ) + goto LABEL_76; + if ( v38 != 0 ) { *a8 = dword_401D80 + 6; - goto LABEL_71; + goto LABEL_76; } - goto LABEL_54; + goto LABEL_57; } if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D30, a3: 0x10u) == 0 ) { if ( a7 != 32 ) - goto LABEL_71; - v35 = nullptr; - result = opm_rpc_102(); + goto LABEL_76; + v40 = nullptr; + result = sub_402ED6(a1: (*off_401D28)[22 * a3 + 13], a2: &v40); if ( result != 0 ) - goto LABEL_72; - v24 = -1; -LABEL_38: - a6[5] = v24; - goto LABEL_72; + goto LABEL_77; + if ( (unsigned int)v40 - 1 > 4 ) + v24 = -1; + else + v24 = dword_401D8C[(_DWORD)v40 - 1]; + goto LABEL_40; } if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D34, a3: 0x10u) != 0 ) { @@ -867,194 +903,202 @@ LABEL_38: if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D38, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D3C, a3: 0x10u) == 0 ) - goto LABEL_48; + goto LABEL_51; if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D40, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D44, a3: 0x10u) == 0 ) - goto LABEL_48; + goto LABEL_51; if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D48, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D4C, a3: 0x10u) == 0 ) { if ( a7 == 32 ) { - v9 = (int *)&v35; - opm_lib_zero_fill_words(result: &v35, a2: 0x28u); + v9 = (int *)&v40; + opm_lib_zero_fill_words(result: &v40, a2: 0x28u); a6[5] = 0; result = opm_rpc_200(); if ( result == 0 ) { - v29 = dword_401D84; - if ( (_BYTE)v35 == 0 ) - v29 = 3; - a6[5] = v29; + v31 = dword_401D84; + if ( (_BYTE)v40 == 0 ) + v31 = 3; + a6[5] = v31; } - goto LABEL_72; + goto LABEL_77; } - goto LABEL_71; + goto LABEL_76; } if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D50, a3: 0x10u) != 0 ) { - if ( __PAIR64__(v34, opm_memcmp_be(a1, a2: (unsigned int *)dword_401D54, a3: 0x10u)) == 0x100000000LL - || (opm_memcmp_be(a1, a2: (unsigned int *)dword_401D58, a3: 0x10u) | v34) == 0 ) + if ( __PAIR64__(v38, opm_memcmp_be(a1, a2: (unsigned int *)dword_401D54, a3: 0x10u)) == 0x100000000LL + || (opm_memcmp_be(a1, a2: (unsigned int *)dword_401D58, a3: 0x10u) | v38) == 0 ) { if ( a7 == 32 ) { a6[5] = 0; v8 = a6 + 5; - v35 = nullptr; - result = opm_rpc_300(); + v40 = nullptr; + result = sub_402F84(a1: a6 + 5, a2: 0, a3: &v40, a4: 0); if ( result != 0 ) *a8 = dword_401D80; - goto LABEL_72; + goto LABEL_77; } + goto LABEL_76; } - else + if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D5C, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D5C, a3: 0x10u) == 0 ) - { - if ( a7 == 32 ) - { - a6[5] = 0; - v35 = nullptr; - opm_rpc_102(); - result = 608; - goto LABEL_72; - } - goto LABEL_71; - } if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D60, a3: 0x10u) != 0 ) { v19 = opm_memcmp_be(a1, a2: (unsigned int *)dword_401D64, a3: 0x10u); - v20 = v34 == 1; - if ( v34 == 1 ) + v20 = v38 == 1; + if ( v38 == 1 ) v20 = v19 == 0; - if ( v20 || (opm_memcmp_be(a1, a2: (unsigned int *)dword_401D68, a3: 0x10u) | v34) == 0 ) - goto LABEL_54; + if ( v20 || (opm_memcmp_be(a1, a2: (unsigned int *)dword_401D68, a3: 0x10u) | v38) == 0 ) + goto LABEL_57; v21 = opm_memcmp_be(a1, a2: (unsigned int *)dword_401D6C, a3: 0x10u); - v22 = v34 == 1; - if ( v34 == 1 ) + v22 = v38 == 1; + if ( v38 == 1 ) v22 = v21 == 0; - if ( !v22 && (opm_memcmp_be(a1, a2: (unsigned int *)dword_401D70, a3: 0x10u) | v34) != 0 ) + if ( !v22 && (opm_memcmp_be(a1, a2: (unsigned int *)dword_401D70, a3: 0x10u) | v38) != 0 ) { if ( opm_memcmp_be(a1, a2: (unsigned int *)dword_401D74, a3: 0x10u) == 0 ) - goto LABEL_74; + goto LABEL_79; result = 263; - goto LABEL_72; + goto LABEL_77; } if ( a7 == 32 ) { - v28 = 1; - goto LABEL_53; + v30 = 1; + goto LABEL_56; } - goto LABEL_71; + goto LABEL_76; } if ( a7 == 32 ) { - v30 = (int *)off_401D28; + v33 = (int *)off_401D28; a6[6] = 0; a6[7] = 0; - v9 = &v30[22 * a3 + 16]; - result = opm_rpc_107(); + v34 = &v33[22 * a3]; + v9 = v34 + 16; + result = sub_402EF8(a1: v34[13], a2: v34 + 16); if ( result == 0 ) { *((_QWORD *)a6 + 3) = *(_QWORD *)v9; - goto LABEL_54; + goto LABEL_57; } - goto LABEL_72; + goto LABEL_77; } +LABEL_76: + result = 264; + goto LABEL_77; + } + if ( a7 != 32 ) + goto LABEL_76; + v32 = (int *)off_401D28; + a6[5] = 0; + v40 = nullptr; + result = sub_402ED6(a1: v32[22 * a3 + 13], a2: &v40); + if ( v40 != (int *)1 ) + { + result = 608; + goto LABEL_77; } -LABEL_71: - result = 264; - goto LABEL_72; + v24 = 1; +LABEL_40: + a6[5] = v24; + goto LABEL_77; } -LABEL_48: +LABEL_51: if ( a7 == 32 ) { result = 0; a6[5] = 0; - goto LABEL_72; + goto LABEL_77; } - goto LABEL_71; + goto LABEL_76; } -LABEL_54: +LABEL_57: result = 0; - goto LABEL_72; + goto LABEL_77; } - v27 = 1; + v29 = 1; } else { - v27 = 0; + v29 = 0; } result = opm_TA_InvokeCommandEntryPoint__h4( a1: a3, - a2: v34, + a2: v38, a3: (int)v9, a4: a5, a5: (int)a6, a6: a7, a7: a8, - a8: v27); - goto LABEL_72; + a8: v29); + goto LABEL_77; } if ( a7 != 32 ) - goto LABEL_71; + goto LABEL_76; v25 = (int *)off_401D28; a6[5] = 0; - v35 = nullptr; - v9 = &v25[22 * a3 + 13]; - result = opm_rpc_105(); + v40 = nullptr; + v26 = &v25[22 * a3]; + v27 = v26[13]; + v9 = v26 + 13; + result = sub_402EB4(a1: v27, a2: &v40); if ( result == 0 ) { if ( *v17 == 0 ) { - v28 = a6[5] | 1; -LABEL_53: - a6[5] = v28; - goto LABEL_54; + v30 = a6[5] | 1; +LABEL_56: + a6[5] = v30; + goto LABEL_57; } if ( *v17 != 1 ) { result = 260; - goto LABEL_72; + goto LABEL_77; } - result = opm_rpc_102(); - if ( result == 0 ) + v39 = 0; + result = sub_402ED6(a1: *v9, a2: &v39); + if ( result == 0 && v39 != 4 ) { - v26 = a6[5]; - a6[5] = v26 | 8; - if ( ((unsigned __int8)v35 & 2) != 0 && *off_401D88 != 0 ) + v28 = a6[5]; + a6[5] = v28 | 8; + if ( ((unsigned __int8)v40 & 2) != 0 && *off_401D88 != 0 ) { - v24 = v26 | 0x28; - goto LABEL_38; + v24 = v28 | 0x28; + goto LABEL_40; } } } -LABEL_72: - while ( *v11 != v37 ) +LABEL_77: + while ( *v11 != v42 ) { - ((void (__fastcall *)(int, int))loc_402E94)(a1: result, a2: *v11 - v37); -LABEL_74: - v31 = v10 == (__int16 *)4056; + ((void (__fastcall *)(int, int))loc_402E94)(a1: result, a2: *v11 - v42); +LABEL_79: + v35 = v10 == (__int16 *)4056; if ( v10 == (__int16 *)4056 ) - v31 = a7 == 20; + v35 = a7 == 20; result = 264; - if ( v31 ) + if ( v35 ) { - v32 = 0; + v36 = 0; v8[4] = 0; - sub_401058(result: (int *)&v35, a2: v9, a3: 0xFD8u, a4: v23); - v9 = v35; + sub_401058(result: (int *)&v40, a2: v9, a3: 0xFD8u, a4: v23); + v9 = v40; v10 = off_401D78; - while ( v32 != 56 ) + while ( v36 != 56 ) { - v33 = opm_memcmp_be(a1: (unsigned int *)&v10[v32], a2: v36, a3: (unsigned int)v9); - v32 += 8; - if ( v33 == 0 ) + v37 = opm_memcmp_be(a1: (unsigned int *)&v10[v36], a2: v41, a3: (unsigned int)v9); + v36 += 8; + if ( v37 == 0 ) { v8[4] = dword_401D7C; - goto LABEL_54; + goto LABEL_57; } } result = 688; @@ -1362,7 +1406,7 @@ LABEL_83: { LABEL_84: if ( v20 != 0 ) - sub_402CAE(); + opm_rpc_2(); if ( v19 != 0 ) opm_sysdrv_rpc_31(); LABEL_88: @@ -1386,7 +1430,7 @@ LABEL_91: goto LABEL_98; if ( opm_sysdrv_rpc_1() != 0 ) goto LABEL_100; - if ( sub_402DB8(a1: STACK[0x27F8], a2: STACK[0x27F4]) != 0 ) + if ( opm_rpc_3() != 0 ) goto LABEL_104; STACK[0x278C] = 256; if ( opm_sysdrv_rpc_9() != 0 ) @@ -1408,7 +1452,7 @@ LABEL_98: LABEL_100: v10 = 1298; } - else if ( sub_402DB8(a1: STACK[0x27F8], a2: STACK[0x27F4]) != 0 ) + else if ( opm_rpc_3() != 0 ) { LABEL_104: v10 = 1299; diff --git a/fw/decomp/opm_25.0.0.60_638c0601.c b/fw/decomp/opm_25.0.0.60_638c0601.c index fedb640..070ee68 100644 --- a/fw/decomp/opm_25.0.0.60_638c0601.c +++ b/fw/decomp/opm_25.0.0.60_638c0601.c @@ -1,7 +1,7 @@ /* opm 25.0.0.60 (638c0601) -- named functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf - * functions: 49 total in build, 36 named, 13 anonymous + * functions: 49 total in build, 33 named, 16 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 10, "FUZZY": 0, "MNEM": 10, "ambiguous": 4, "cmd_protos": 0, "comments": 0, "dispatch_conflict": 0, "none": 25, "protos": 3, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -172,7 +172,7 @@ int __fastcall opm_TA_InvokeCommandEntryPoint__h5(unsigned int a1, int a2, int a if ( a1 > 0x3F ) return 259; - result = opm_rpc_161(); + result = opm_asd_rpc_161(); v6 = result == 7; if ( result != 7 ) v6 = result == 0; @@ -205,7 +205,7 @@ int __fastcall opm_TA_InvokeCommandEntryPoint__h6(unsigned int a1, int a2, int a { if ( v5 > 4 ) return 0; - result = opm_rpc_161(); + result = opm_asd_rpc_161(); v9 = result == 7; if ( result != 7 ) v9 = result == 0; @@ -248,6 +248,16 @@ opm_asd301_path__h1: } } +/* ==== opm_asd_rpc_161 [tier=IDA size=46] ==== */ +int opm_asd_rpc_161() +{ + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + /* ==== opm_cmd04 [tier=MNEM size=72] ==== */ int __fastcall opm_cmd04(void *ctx, struct ta_params *params) { @@ -264,7 +274,7 @@ int __fastcall opm_cmd04(void *ctx, struct ta_params *params) if ( (*off_4023AC)[22 * v3] != 1 ) return 266; v5 = &(*off_4023AC)[22 * v3]; - opm_sysdrv_rpc_35(); + opm_rpc_35(); v6 = (char *)ctx + 9244; v7 = v5[3]; v8 = v5[4]; @@ -651,44 +661,14 @@ int *__fastcall opm_memcpy_aligned(int *result, int *a2, unsigned int a3, int a4 return result; } -/* ==== opm_rpc_102 [tier=SVCOP size=34] ==== */ -int opm_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_rpc_105 [tier=SVCOP size=34] ==== */ -int opm_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_rpc_107 [tier=SVCOP size=34] ==== */ -int opm_rpc_107() +/* ==== opm_rpc_2 [tier=SVCOP size=36] ==== */ +int opm_rpc_2() { - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - opm_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== opm_rpc_161 [tier=SVCOP size=46] ==== */ -int opm_rpc_161() -{ - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x18u); + opm_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } - return 2; + return 1; } /* ==== opm_rpc_200 [tier=SVCOP size=32] ==== */ @@ -711,24 +691,14 @@ int opm_rpc_201() return 2; } -/* ==== opm_rpc_300 [tier=SVCOP size=38] ==== */ -int opm_rpc_300() +/* ==== opm_rpc_3 [tier=SVCOP size=42] ==== */ +int opm_rpc_3() { - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - opm_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== opm_rpc_301 [tier=SVCOP size=36] ==== */ -int opm_rpc_301() -{ - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x18u); + opm_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } - return 2; + return 1; } /* ==== opm_rpc_304 [tier=SVCOP size=28] ==== */ @@ -751,6 +721,16 @@ int opm_rpc_305() return 2; } +/* ==== opm_rpc_35 [tier=SVCOP size=42] ==== */ +int opm_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_1 [tier=MNEM size=60] ==== */ int opm_sysdrv_rpc_1() { @@ -798,16 +778,6 @@ int opm_sysdrv_rpc_33() return 1; } -/* ==== opm_sysdrv_rpc_35 [tier=IDA 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() { diff --git a/fw/decomp/opm_25.0.0.60_638c0601.index.json b/fw/decomp/opm_25.0.0.60_638c0601.index.json index fb92c48..566aeac 100644 --- a/fw/decomp/opm_25.0.0.60_638c0601.index.json +++ b/fw/decomp/opm_25.0.0.60_638c0601.index.json @@ -206,9 +206,9 @@ { "addr": "0x402cae", "ida_name": "sub_402CAE", - "name": null, + "name": "opm_rpc_2", "size": 36, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x402cd2", @@ -220,9 +220,9 @@ { "addr": "0x402cf8", "ida_name": "sub_402CF8", - "name": "opm_sysdrv_rpc_35", + "name": "opm_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x402d22", @@ -248,9 +248,9 @@ { "addr": "0x402db8", "ida_name": "sub_402DB8", - "name": null, + "name": "opm_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x402de2", @@ -269,30 +269,30 @@ { "addr": "0x402eb4", "ida_name": "sub_402EB4", - "name": "opm_rpc_105", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x402ed6", "ida_name": "sub_402ED6", - "name": "opm_rpc_102", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x402ef8", "ida_name": "sub_402EF8", - "name": "opm_rpc_107", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x402f1a", "ida_name": "sub_402F1A", - "name": "opm_rpc_161", + "name": "opm_asd_rpc_161", "size": 46, - "tier": "SVCOP" + "tier": "IDA" }, { "addr": "0x402f48", @@ -311,16 +311,16 @@ { "addr": "0x402f84", "ida_name": "sub_402F84", - "name": "opm_rpc_300", + "name": null, "size": 38, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x402faa", "ida_name": "sub_402FAA", - "name": "opm_rpc_301", + "name": null, "size": 36, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x402fce", diff --git a/fw/decomp/opm_25.0.0.62_10543c57.anon.c b/fw/decomp/opm_25.0.0.62_10543c57.anon.c index 599a5fe..06dbc58 100644 --- a/fw/decomp/opm_25.0.0.62_10543c57.anon.c +++ b/fw/decomp/opm_25.0.0.62_10543c57.anon.c @@ -1,7 +1,7 @@ /* opm 25.0.0.62 (10543c57) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf - * functions: 55 total in build, 38 named, 17 anonymous + * functions: 55 total in build, 35 named, 20 anonymous * porting tiers: {"DISPATCH": 8, "EXACT": 9, "FUZZY": 0, "MNEM": 6, "ambiguous": 4, "cmd_protos": 4, "comments": 0, "dispatch_conflict": 0, "none": 28, "protos": 4, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -137,34 +137,54 @@ int __fastcall sub_4031FA(char *a1, char *a2, int a3) return v3; } -/* ==== ANON size=36 ==== */ -int sub_4030C6() +/* ==== ANON size=34 ==== */ +int sub_403310() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ +int sub_4032CC() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ +int sub_4032EE() { - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x20u); + opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } -/* ==== ANON size=42 ==== */ -int sub_403110() +/* ==== ANON size=36 ==== */ +int sub_4033C2() { - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } -/* ==== ANON size=42 ==== */ -int sub_4031D0() +/* ==== ANON size=38 ==== */ +int sub_40339C() { - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x20u); + opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } /* ==== ANON size=46 ==== */ @@ -189,6 +209,16 @@ int __fastcall sub_40259C(int a1, int a2) return v2; } +/* ==== ANON size=46 ==== */ +int sub_403332() +{ + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + /* ==== ANON size=88 ==== */ int __fastcall sub_401A54(int a1, int *a2) { @@ -512,86 +542,172 @@ int *__fastcall sub_401058(int *result, int *a2, unsigned int a3, int a4) } /* ==== ANON size=180 ==== */ -int __fastcall sub_401FC4(unsigned int a1, int a2) +int __fastcall sub_401FC4(unsigned int a1, int a2, int a3, int a4) { - int v2; // r4 - int v4; // r0 - bool v5; // zf - void (__cdecl *v6)(); // r5 + int v4; // r4 + _DWORD *v6; // r9 + int v10; // r0 + bool v11; // zf + void (__cdecl *v12)(); // r5 + int v13; // r0 + bool v15; // zf + int v16; // [sp+4h] [bp-10h] BYREF + int v17; // [sp+8h] [bp-Ch] BYREF + int v18; // [sp+Ch] [bp-8h] BYREF + int v19; // [sp+10h] [bp-4h] BYREF + v18 = 0; + v19 = 0; + v16 = 0; + v17 = 0; if ( a1 > 0x3F ) { - v2 = 259; -LABEL_8: - v6 = (void (__cdecl *)())off_402394; - off_402394(a1: 7, a2: 61440); - v6(); - v6(); - return v2; + v4 = 259; + goto LABEL_11; } - v4 = opm_rpc_161(); - v5 = v4 == 7; - if ( v4 != 7 ) + v6 = off_402F00; + v10 = sub_403332(a1: *((_DWORD *)off_402F00 + 22 * a1 + 13), a2: &v19, a3: &v18, a4: &v17, a5: &v16); + v11 = v10 == 7; + if ( v10 != 7 ) { - v2 = v4; - v5 = v4 == 0; + v4 = v10; + v11 = v10 == 0; } - if ( !v5 ) - goto LABEL_8; + if ( !v11 ) + goto LABEL_11; + if ( v18 != 3 ) + { + v16 = 0; + goto LABEL_13; + } + if ( v16 == 1 ) + { + v15 = a3 == 32; + v13 = 1; + if ( a3 == 32 ) + v15 = v17 == 2; + if ( v15 ) + { + v13 = 2; + if ( v6[22 * a1 + 20] != 2 && a4 == 0 ) + v13 = 1; + } + goto LABEL_14; + } + if ( v16 != 2 ) + { +LABEL_13: + v13 = 0; + v16 = 0; +LABEL_14: + *(_DWORD *)(a2 + 20) = v13; + return 0; + } + v4 = 269; + *(_DWORD *)(a2 + 16) = 1; *(_DWORD *)(a2 + 20) = 0; - return 0; +LABEL_11: + v12 = (void (__cdecl *)())off_402394; + off_402394(a1: 7, a2: 61440); + v12(); + v12(); + return v4; } /* ==== ANON size=244 ==== */ -int __fastcall sub_402078(unsigned int a1, int a2) +int __fastcall sub_402078(unsigned int a1, int a2, int a3, int a4) { - int v2; // r5 - unsigned int v4; // r10 - int v5; // r7 - _DWORD *v6; // r9 - int v7; // r0 - bool v8; // zf - void (__cdecl *v9)(); // r4 + int v4; // r5 + char *v6; // r0 + unsigned int v7; // r10 + int v8; // r7 + _DWORD *v9; // r9 + int v10; // r0 + bool v11; // zf + unsigned int v12; // r0 + bool v13; // zf + void (__cdecl *v14)(); // r4 + _DWORD *v17; // [sp+Ch] [bp-18h] + int v19; // [sp+14h] [bp-10h] BYREF + int v20; // [sp+18h] [bp-Ch] BYREF + int v21; // [sp+1Ch] [bp-8h] BYREF + int v22; // [sp+20h] [bp-4h] BYREF + v20 = 0; + v21 = 0; + v22 = 0; *(_DWORD *)(a2 + 20) = 0x40000000; - if ( a1 > 0x3F ) - { - v2 = 259; -LABEL_14: - v9 = (void (__cdecl *)())off_402520; - off_402520(a1: 7, a2: 61440); - v9(); - v9(); - } - else + v19 = 0; + if ( a1 <= 0x3F ) { - v4 = 0; - v5 = 0; - v6 = (_DWORD *)((char *)off_40241C + 88 * a1 + 56); - while ( v5 != 32 ) + v6 = (char *)off_40241C + 88 * a1; + v7 = 0; + v8 = 0; + v9 = v6 + 56; + v17 = v6 + 80; + while ( 1 ) { - if ( *v6 >> v5 << 31 != 0 ) + if ( v8 == 32 ) + return 0; + if ( *v9 >> v8 << 31 != 0 ) + break; +LABEL_21: + ++v8; + } + if ( v7 > 4 ) + return 0; + v10 = sub_403332(a1: v8, a2: &v22, a3: &v21, a4: &v20, a5: &v19); + v11 = v10 == 7; + if ( v10 != 7 ) + { + v4 = v10; + v11 = v10 == 0; + } + if ( !v11 ) + goto LABEL_26; + if ( v21 == 3 ) + { + if ( v19 == 1 ) { - if ( v4 > 4 ) - return 0; - v7 = opm_rpc_161(); - v8 = v7 == 7; - if ( v7 != 7 ) + v12 = 1; + v13 = a3 == 32; + if ( a3 == 32 ) + v13 = v20 == 2; + if ( v13 ) { - v2 = v7; - v8 = v7 == 0; + v12 = 2; + if ( *v17 != 2 && a4 == 0 ) + v12 = 1; } - if ( !v8 ) - goto LABEL_14; - ++v4; - if ( *(_DWORD *)(a2 + 20) != 0 ) - *(_DWORD *)(a2 + 20) = 0; + goto LABEL_19; + } + if ( v19 == 2 ) + { + v4 = 269; + *(_DWORD *)(a2 + 16) = 1; + *(_DWORD *)(a2 + 20) = 0; + goto LABEL_26; } - ++v5; } - return 0; + else + { + v19 = 0; + } + v12 = 0; + v19 = 0; +LABEL_19: + ++v7; + if ( v12 < *(_DWORD *)(a2 + 20) ) + *(_DWORD *)(a2 + 20) = v12; + goto LABEL_21; } - return v2; + v4 = 259; +LABEL_26: + v14 = (void (__cdecl *)())off_402520; + off_402520(a1: 7, a2: 61440); + v14(); + v14(); + return v4; } /* ==== ANON size=250 ==== */ @@ -654,9 +770,9 @@ LABEL_25: LABEL_23: v16 = off_4026E8; if ( *((_DWORD *)off_4026E8 + 22 * a1 + 14) != 0 ) - v17 = sub_402078(a1, a2: a5); + v17 = sub_402078(a1, a2: a5, a3: v19, a4: a8); else - v17 = sub_401FC4(a1, a2: a5); + v17 = sub_401FC4(a1, a2: a5, a3: v19, a4: a8); v10 = v17; if ( a8 == 0 ) { @@ -713,7 +829,7 @@ int __fastcall sub_4025CC(unsigned int a1, int a2, int a3, int a4) { v5 = 1298; } - else if ( sub_4031D0(a1: 0, a2: 0) != 0 ) + else if ( opm_rpc_3() != 0 ) { v5 = 1299; } @@ -779,28 +895,35 @@ int __fastcall sub_401AAC( int v26; // r3 void (__cdecl *v27)(); // r4 int v28; // r0 - int v29; // r0 - int v30; // r0 - int v31; // r0 - int v32; // r0 - int v33; // r1 + char *v29; // r1 + char *v30; // r4 + _DWORD *v31; // r4 + int v32; // t1 + int v33; // r0 int v34; // r0 - char *v35; // r1 - char *v36; // r4 - bool v37; // zf - int v38; // r4 - unsigned int v39; // r5 - int *v40; // r8 - int v41; // r0 - unsigned int v42; // [sp+18h] [bp-FE4h] - unsigned int v43; // [sp+20h] [bp-FDCh] BYREF - unsigned int v44[1013]; // [sp+24h] [bp-FD8h] BYREF - int v45; // [sp+FF8h] [bp-4h] + int v35; // r0 + int v36; // r0 + int v37; // r1 + int v38; // r0 + _DWORD *v39; // r1 + char *v40; // r1 + char *v41; // r1 + _QWORD *v42; // r4 + bool v43; // zf + int v44; // r4 + unsigned int v45; // r5 + int *v46; // r8 + int v47; // r0 + unsigned int v48; // [sp+18h] [bp-FE4h] + int v49; // [sp+1Ch] [bp-FE0h] BYREF + unsigned int v50; // [sp+20h] [bp-FDCh] BYREF + unsigned int v51[1013]; // [sp+24h] [bp-FD8h] BYREF + int v52; // [sp+FF8h] [bp-4h] v11 = off_401F44; v12 = a1; v13 = 264; - v45 = *off_401F44; + v52 = *off_401F44; if ( a2 != 16 ) goto LABEL_8; if ( a1 == nullptr ) @@ -830,69 +953,69 @@ int __fastcall sub_401AAC( v19 = &v18[88 * a3]; v21 = *((_DWORD *)v19 + 1); v20 = v19 + 4; - v42 = v21; + v48 = v21; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F4C, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F50, a3: 0x10u) == 0 ) { if ( a7 != 32 ) - goto LABEL_80; - v43 = 0; - v28 = opm_rpc_102(); + goto LABEL_81; + v50 = 0; + v28 = sub_4032EE(a1: *((_DWORD *)off_401F48 + 22 * v17 + 13), a2: &v50); if ( v28 != 0 ) goto LABEL_44; - if ( v43 - 1 > 4 ) - v30 = -1; + if ( v50 - 1 > 4 ) + v34 = -1; else - v30 = dword_401FB0[v43 - 1]; - goto LABEL_58; + v34 = dword_401FB0[v50 - 1]; + goto LABEL_59; } if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F54, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F58, a3: 0x10u) == 0 ) { - v31 = 0; - goto LABEL_60; + v35 = 0; + goto LABEL_61; } if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F5C, a3: 0x10u) == 0 ) - goto LABEL_54; + goto LABEL_55; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F60, a3: 0x10u) == 0 ) { - v31 = 1; -LABEL_60: - v32 = sub_402420(a1: v17, a2: v42, a3: v8, a4: a5, a5: v9, a6: a7, a7: v10, a8: v31); + v35 = 1; LABEL_61: - v13 = v32; - if ( v32 != 0 ) + v36 = sub_402420(a1: v17, a2: v48, a3: v8, a4: a5, a5: v9, a6: a7, a7: v10, a8: v35); +LABEL_62: + v13 = v36; + if ( v36 != 0 ) goto LABEL_8; - goto LABEL_62; + goto LABEL_63; } if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F64, a3: 0x10u) == 0 ) - goto LABEL_54; + goto LABEL_55; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F68, a3: 0x10u) == 0 ) - goto LABEL_62; + goto LABEL_63; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F6C, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F70, a3: 0x10u) == 0 ) { -LABEL_54: - v32 = sub_40259C(a1: v9, a2: a7); - goto LABEL_61; +LABEL_55: + v36 = sub_40259C(a1: v9, a2: a7); + goto LABEL_62; } - if ( __PAIR64__(v42, opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F74, a3: 0x10u)) == 0x100000000LL - || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F78, a3: 0x10u) | v42) == 0 ) + if ( __PAIR64__(v48, opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F74, a3: 0x10u)) == 0x100000000LL + || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F78, a3: 0x10u) | v48) == 0 ) { if ( a7 != 32 ) - goto LABEL_80; + goto LABEL_81; v9[5] = 0; v9 += 5; - v43 = 0; - v34 = opm_rpc_300(); - if ( v34 != 0 ) + v50 = 0; + v38 = sub_40339C(a1: v9, a2: 0, a3: &v50, a4: 0); + if ( v38 != 0 ) { - v13 = v34; + v13 = v38; *v10 = dword_401FA4; - goto LABEL_81; + goto LABEL_82; } } else if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F7C, a3: 0x10u) != 0 ) @@ -900,17 +1023,17 @@ LABEL_54: if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F80, a3: 0x10u) != 0 ) { v22 = opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F84, a3: 0x10u); - v23 = v42 == 1; - if ( v42 == 1 ) + v23 = v48 == 1; + if ( v48 == 1 ) v23 = v22 == 0; - if ( v23 || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F88, a3: 0x10u) | v42) == 0 ) - goto LABEL_62; + if ( v23 || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F88, a3: 0x10u) | v48) == 0 ) + goto LABEL_63; v10 = a5; v24 = opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F8C, a3: 0x10u); - v25 = v42 == 1; - if ( v42 == 1 ) + v25 = v48 == 1; + if ( v48 == 1 ) v25 = v24 == 0; - if ( !v25 && (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F90, a3: 0x10u) | v42) != 0 ) + if ( !v25 && (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F90, a3: 0x10u) | v48) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F94, a3: 0x10u) != 0 ) { @@ -918,38 +1041,38 @@ LABEL_54: } else { - v37 = a5 == (_DWORD *)4056; + v43 = a5 == (_DWORD *)4056; if ( a5 == (_DWORD *)4056 ) - v37 = a7 == 20; + v43 = a7 == 20; v13 = 264; - if ( v37 ) + if ( v43 ) { - v38 = 0; + v44 = 0; v9[4] = 0; - sub_401058(result: (int *)&v43, a2: v8, a3: 0xFD8u, a4: v26); - v8 = (int *)v44; - v39 = v43; - v40 = (int *)off_401F98; + sub_401058(result: (int *)&v50, a2: v8, a3: 0xFD8u, a4: v26); + v8 = (int *)v51; + v45 = v50; + v46 = (int *)off_401F98; while ( 1 ) { - v12 = (unsigned int *)(v38 * 4 + 16); - if ( v38 == 28 ) + v12 = (unsigned int *)(v44 * 4 + 16); + if ( v44 == 28 ) break; - v41 = opm_memcmp_be(a1: (unsigned int *)&v40[v38], a2: v44, a3: v39); - v38 += 4; - if ( v41 == 0 ) + v47 = opm_memcmp_be(a1: (unsigned int *)&v46[v44], a2: v51, a3: v45); + v44 += 4; + if ( v47 == 0 ) { v9[4] = dword_401F9C; - goto LABEL_62; + goto LABEL_63; } } v13 = 688; } -LABEL_81: +LABEL_82: v27 = (void (__cdecl *)())off_401FA0; off_401FA0(a1: 7, a2: 61440); v27(); -LABEL_82: +LABEL_83: v27(); } LABEL_8: @@ -961,89 +1084,99 @@ LABEL_8: } if ( a7 != 32 ) goto LABEL_41; - v30 = 1; - goto LABEL_58; + v34 = 1; + goto LABEL_59; } if ( a7 != 32 ) { -LABEL_80: +LABEL_81: v13 = 264; - goto LABEL_81; + goto LABEL_82; } - v35 = (char *)off_401F48; + v40 = (char *)off_401F48; v9[6] = 0; v9[7] = 0; - v36 = &v35[88 * v17 + 64]; - v13 = opm_rpc_107(); + v41 = &v40[88 * v17]; + v42 = v41 + 64; + v13 = sub_403310(a1: *((_DWORD *)v41 + 13), a2: v41 + 64); if ( v13 != 0 ) - goto LABEL_81; - *((_QWORD *)v9 + 3) = *(_QWORD *)v36; + goto LABEL_82; + *((_QWORD *)v9 + 3) = *v42; } else { if ( a7 != 32 ) - goto LABEL_80; + goto LABEL_81; + v39 = off_401F48; v9[5] = 0; - v43 = 0; - v13 = opm_rpc_102(); - if ( v43 != 1 ) + v50 = 0; + v13 = sub_4032EE(a1: v39[22 * v17 + 13], a2: &v50); + if ( v50 != 1 ) { v13 = 608; - goto LABEL_81; + goto LABEL_82; } v9[5] = 1; if ( v13 != 0 ) - goto LABEL_81; + goto LABEL_82; } } else { if ( a7 != 32 ) - goto LABEL_80; - opm_lib_zero_fill_words(result: &v43, a2: 0x28u); + goto LABEL_81; + opm_lib_zero_fill_words(result: &v50, a2: 0x28u); v9[5] = 0; v28 = opm_rpc_200(); if ( v28 != 0 ) { LABEL_44: v13 = v28; - goto LABEL_81; + goto LABEL_82; } - v33 = dword_401FA8; - if ( (_BYTE)v43 == 0 ) - v33 = 3; - v9[5] = v33; + v37 = dword_401FA8; + if ( (_BYTE)v50 == 0 ) + v37 = 3; + v9[5] = v37; } } else { if ( a7 != 32 ) - goto LABEL_80; + goto LABEL_81; + v29 = (char *)off_401F48; v9[5] = 0; - v43 = 0; - v13 = opm_rpc_105(); + v50 = 0; + v30 = &v29[88 * v17]; + v32 = *((_DWORD *)v30 + 13); + v31 = v30 + 52; + v13 = sub_4032CC(a1: v32, a2: &v50); if ( v13 != 0 ) - goto LABEL_81; + goto LABEL_82; if ( *v20 == 0 ) { - v30 = v9[5] | 1; - goto LABEL_58; + v34 = v9[5] | 1; + goto LABEL_59; } if ( *v20 != 1 ) { v13 = 260; - goto LABEL_81; + goto LABEL_82; } - v28 = opm_rpc_102(); + v49 = 0; + v28 = sub_4032EE(a1: *v31, a2: &v49); if ( v28 != 0 ) goto LABEL_44; - v29 = v9[5]; - v9[5] = v29 | 8; - if ( (v43 & 2) != 0 && *off_401FAC != 0 ) + if ( v49 != 4 ) { - v30 = v29 | 0x28; -LABEL_58: - v9[5] = v30; + v33 = v9[5]; + v9[5] = v33 | 8; + if ( (v50 & 2) != 0 && *off_401FAC != 0 ) + { + v34 = v33 | 0x28; +LABEL_59: + v9[5] = v34; + } } } } @@ -1051,7 +1184,7 @@ LABEL_58: { if ( a7 != 72 ) goto LABEL_41; - if ( v42 != 0 ) + if ( v48 != 0 ) { *v10 = dword_401FA4 + 6; LABEL_41: @@ -1059,15 +1192,15 @@ LABEL_41: off_401FA0(a1: 7, a2: 61440); v27(); v13 = 264; - goto LABEL_82; + goto LABEL_83; } } -LABEL_62: +LABEL_63: v13 = 0; LABEL_9: - if ( *v11 == v45 ) + if ( *v11 == v52 ) return v13; - ((void (__fastcall *)(int))loc_4032AC)(a1: *v11 - v45); + ((void (__fastcall *)(int))loc_4032AC)(a1: *v11 - v52); } } @@ -1376,7 +1509,7 @@ LABEL_85: { LABEL_86: if ( v20 != 0 ) - sub_4030C6(a1: v20); + opm_rpc_2(); if ( v19 != 0 ) opm_sysdrv_rpc_31(); LABEL_90: @@ -1400,7 +1533,7 @@ LABEL_93: goto LABEL_100; if ( opm_sysdrv_rpc_1() != 0 ) goto LABEL_102; - if ( sub_4031D0(a1: STACK[0x27F8], a2: STACK[0x27F4]) != 0 ) + if ( opm_rpc_3() != 0 ) goto LABEL_106; STACK[0x278C] = 256; if ( opm_sysdrv_rpc_9() != 0 ) @@ -1422,7 +1555,7 @@ LABEL_100: LABEL_102: v10 = 1298; } - else if ( sub_4031D0(a1: STACK[0x27F8], a2: STACK[0x27F4]) != 0 ) + else if ( opm_rpc_3() != 0 ) { LABEL_106: v10 = 1299; diff --git a/fw/decomp/opm_25.0.0.62_10543c57.c b/fw/decomp/opm_25.0.0.62_10543c57.c index 3cead5d..c9ae6f7 100644 --- a/fw/decomp/opm_25.0.0.62_10543c57.c +++ b/fw/decomp/opm_25.0.0.62_10543c57.c @@ -1,7 +1,7 @@ /* opm 25.0.0.62 (10543c57) -- named functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf - * functions: 55 total in build, 38 named, 17 anonymous + * functions: 55 total in build, 35 named, 20 anonymous * porting tiers: {"DISPATCH": 8, "EXACT": 9, "FUZZY": 0, "MNEM": 6, "ambiguous": 4, "cmd_protos": 4, "comments": 0, "dispatch_conflict": 0, "none": 28, "protos": 4, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -315,7 +315,7 @@ LABEL_6: goto LABEL_6; } v6 = (_DWORD *)((char *)off_4026E8 + 88 * v3); - sub_403110(a1: v6 + 2, a2: 16); + opm_rpc_35(); v7 = (char *)ctx + 9244; v8 = v6[3]; v9 = v6[4]; @@ -599,39 +599,40 @@ int __fastcall opm_cmd08(_DWORD *a1, int a2, int a3, int a4) int v20; // t1 _DWORD *v21; // r2 int v22; // r1 - int v23; // r0 - char *v24; // r0 - _DWORD *v25; // r0 - int v26; // t1 - _DWORD *v27; // r1 - int v28; // r2 - int *v29; // r0 - void (__cdecl *v30)(); // r4 - int v31; // r1 - char *v32; // r6 - int v33; // r0 - int *v34; // r6 - int v35; // t1 - int v36; // r1 - bool v37; // zf - int v38; // r1 - bool v39; // zf - int *v41; // r0 - int v42; // r1 - bool v43; // zf - int v44; // r0 + int v23; // r1 + int v24; // r0 + char *v25; // r0 + _DWORD *v26; // r0 + int v27; // t1 + _DWORD *v28; // r1 + int v29; // r2 + int *v30; // r0 + void (__cdecl *v31)(); // r4 + int v32; // r1 + char *v33; // r6 + int v34; // r0 + int *v35; // r6 + int v36; // t1 + int v37; // r1 + bool v38; // zf + int v39; // r1 + bool v40; // zf + int *v42; // r0 + int v43; // r1 + bool v44; // zf int v45; // r0 - int v46; // [sp+Ch] [bp-1258h] BYREF - int v47[4]; // [sp+10h] [bp-1254h] BYREF - unsigned int v48[5]; // [sp+20h] [bp-1244h] BYREF - int v49; // [sp+34h] [bp-1230h] - int v50[1010]; // [sp+38h] [bp-122Ch] BYREF - _DWORD v51[76]; // [sp+1010h] [bp-254h] BYREF - int v52[71]; // [sp+1140h] [bp-124h] BYREF - int v53; // [sp+125Ch] [bp-8h] + int v46; // r0 + int v47; // [sp+Ch] [bp-1258h] BYREF + int v48[4]; // [sp+10h] [bp-1254h] BYREF + unsigned int v49[5]; // [sp+20h] [bp-1244h] BYREF + int v50; // [sp+34h] [bp-1230h] + int v51[1010]; // [sp+38h] [bp-122Ch] BYREF + _DWORD v52[76]; // [sp+1010h] [bp-254h] BYREF + int v53[71]; // [sp+1140h] [bp-124h] BYREF + int v54; // [sp+125Ch] [bp-8h] v5 = off_401F44; - v53 = *off_401F44; + v54 = *off_401F44; if ( a1 == nullptr ) { v7 = (unsigned int)off_402170; @@ -652,11 +653,11 @@ int __fastcall opm_cmd08(_DWORD *a1, int a2, int a3, int a4) v8 = 266; goto LABEL_84; } - opm_memcpy_aligned(result: v47, a2: a1 + 6, a3: 0x1000u, a4); + opm_memcpy_aligned(result: v48, a2: a1 + 6, a3: 0x1000u, a4); v10 = (char *)&v9[22 * v7]; v11 = *((_DWORD *)v10 + 11); v4 = v10 + 44; - if ( v11 != v48[4] ) + if ( v11 != v49[4] ) { v7 = (unsigned int)off_401884; off_401884(a1: 7, a2: 61440); @@ -664,7 +665,7 @@ int __fastcall opm_cmd08(_DWORD *a1, int a2, int a3, int a4) v8 = 261; goto LABEL_84; } - v8 = sub_4025CC(a1: v7, a2: v48, a3: 4080, a4: v47); + v8 = sub_4025CC(a1: v7, a2: v49, a3: 4080, a4: v48); if ( v8 != 0 ) { LABEL_83: @@ -673,105 +674,105 @@ LABEL_83: ((void (__cdecl *)())v7)(); goto LABEL_84; } - if ( opm_memcmp_be(a1: (unsigned int *)off_4017A0, a2: v48, a3: 0x10u) != 0 - && opm_memcmp_be(a1: (unsigned int *)off_4017A4, a2: v48, a3: 0x10u) != 0 - && opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v48, a3: 0x10u) != 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017A0, a2: v49, a3: 0x10u) != 0 + && opm_memcmp_be(a1: (unsigned int *)off_4017A4, a2: v49, a3: 0x10u) != 0 + && opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v49, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017AC, a2: v48, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017AC, a2: v49, a3: 0x10u) == 0 ) goto LABEL_92; - LODWORD(v12) = opm_memcmp_be(a1: (unsigned int *)off_4017B0, a2: v48, a3: 0x10u); + LODWORD(v12) = opm_memcmp_be(a1: (unsigned int *)off_4017B0, a2: v49, a3: 0x10u); if ( (_DWORD)v12 != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017B4, a2: v48, a3: 0x10u) != 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017B4, a2: v49, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017B8, a2: v48, a3: 0x10u) == 0 - || opm_memcmp_be(a1: (unsigned int *)off_4017BC, a2: v48, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017B8, a2: v49, a3: 0x10u) == 0 + || opm_memcmp_be(a1: (unsigned int *)off_4017BC, a2: v49, a3: 0x10u) == 0 ) { - v29 = off_4017D8; + v30 = off_4017D8; if ( off_4017D8[2] != 1 ) { *off_4017D8 = v7; - v29[2] = 1; - if ( v29[1] == 1 ) - v31 = 0; + v30[2] = 1; + if ( v30[1] == 1 ) + v32 = 0; else - v31 = v9[22 * v7 + 15]; - v29[3] = v31; + v32 = v9[22 * v7 + 15]; + v30[3] = v32; goto LABEL_92; } if ( *off_4017D8 == v7 ) goto LABEL_92; - v30 = (void (__cdecl *)())off_4019BC; + v31 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); - v30(); + v31(); v8 = 640; goto LABEL_82; } - v14 = opm_memcmp_be(a1: (unsigned int *)off_4017C0, a2: v48, a3: 0x10u); - if ( v14 != 0 && opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v48, a3: 0x10u) != 0 ) + v14 = opm_memcmp_be(a1: (unsigned int *)off_4017C0, a2: v49, a3: 0x10u); + if ( v14 != 0 && opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v49, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017C8, a2: v48, a3: 0x10u) != 0 - && opm_memcmp_be(a1: (unsigned int *)off_4017CC, a2: v48, a3: 0x10u) != 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017C8, a2: v49, a3: 0x10u) != 0 + && opm_memcmp_be(a1: (unsigned int *)off_4017CC, a2: v49, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017D0, a2: v48, a3: 0x10u) == 0 - || opm_memcmp_be(a1: (unsigned int *)off_4017D4, a2: v48, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017D0, a2: v49, a3: 0x10u) == 0 + || opm_memcmp_be(a1: (unsigned int *)off_4017D4, a2: v49, a3: 0x10u) == 0 ) { goto LABEL_88; } v8 = 263; goto LABEL_83; } - v36 = off_4017D8[2]; - v37 = v36 == 1; - if ( v36 == 1 ) - v37 = *off_4017D8 == v7; - if ( !v37 || v49 == 8 ) + v37 = off_4017D8[2]; + v38 = v37 == 1; + if ( v37 == 1 ) + v38 = *off_4017D8 == v7; + if ( !v38 || v50 == 8 ) goto LABEL_92; - v30 = (void (__cdecl *)())off_4019BC; + v31 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); - v30(); + v31(); v8 = 264; goto LABEL_82; } - v32 = (char *)&v9[22 * v7]; - v35 = *((_DWORD *)v32 + 1); - v34 = (int *)(v32 + 4); - v33 = v35; - if ( v35 == 1 ) + v33 = (char *)&v9[22 * v7]; + v36 = *((_DWORD *)v33 + 1); + v35 = (int *)(v33 + 4); + v34 = v36; + if ( v36 == 1 ) { if ( v14 == 0 ) goto LABEL_73; } - else if ( v33 == 0 && opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v48, a3: 0x10u) == 0 ) + else if ( v34 == 0 && opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v49, a3: 0x10u) == 0 ) { LABEL_73: - if ( v49 == 280 ) + if ( v50 == 280 ) { v8 = 264; - v38 = off_4017D8[2]; - v39 = v38 == 1; - if ( v38 == 1 ) - v39 = *off_4017D8 == v7; - if ( !v39 ) + v39 = off_4017D8[2]; + v40 = v39 == 1; + if ( v39 == 1 ) + v40 = *off_4017D8 == v7; + if ( !v40 ) goto LABEL_81; - opm_memcpy_aligned(result: v52, a2: v50, a3: 0x118u, a4: v13); - if ( v52[68] == 16 ) + opm_memcpy_aligned(result: v53, a2: v51, a3: 0x118u, a4: v13); + if ( v53[68] == 16 ) { - v7 = (unsigned int)v52; - opm_asd301_path__h1(a1: (int)v52, a2: 256); - opm_lib_zero_fill_words(result: v51, a2: 0x130u); - v44 = *v34; - v46 = 256; - v45 = sub_4026F4(a1: v44, a2: v52, a3: 256, a4: v51, a5: &v46); - if ( v45 == 0 ) + v7 = (unsigned int)v53; + opm_asd301_path__h1(a1: (int)v53, a2: 256); + opm_lib_zero_fill_words(result: v52, a2: 0x130u); + v45 = *v35; + v47 = 256; + v46 = sub_4026F4(a1: v45, a2: v53, a3: 256, a4: v52, a5: &v47); + if ( v46 == 0 ) { - opm_asd301_path__h1(a1: (int)v51, a2: v52[68]); + opm_asd301_path__h1(a1: (int)v52, a2: v53[68]); goto LABEL_92; } - v8 = v45; + v8 = v46; goto LABEL_81; } - if ( v52[68] == 0 ) + if ( v53[68] == 0 ) goto LABEL_92; } } @@ -784,41 +785,44 @@ LABEL_80: HIDWORD(v12) = v9[22 * v7 + 1]; if ( v12 == 0x100000000LL ) { - if ( v49 != 4 || a1[1030] == 0 ) + if ( v50 != 4 ) goto LABEL_80; - v23 = opm_rpc_301(); -LABEL_52: - v8 = v23; + v23 = a1[1030]; if ( v23 == 0 ) + goto LABEL_80; + v24 = sub_4033C2(a1: v51[0], a2: v23, a3: a1 + 1031); +LABEL_52: + v8 = v24; + if ( v24 == 0 ) goto LABEL_92; } LABEL_81: - v30 = (void (__cdecl *)())off_4019BC; + v31 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); - v30(); + v31(); LABEL_82: - v30(); + v31(); goto LABEL_83; } - if ( v49 != 16 ) + if ( v50 != 16 ) goto LABEL_80; - v16 = v50[0]; - v15 = v50[1]; - v17 = v50[0] == 32; - if ( v50[0] != 32 ) - v17 = v50[0] == 8; + v16 = v51[0]; + v15 = v51[1]; + v17 = v51[0] == 32; + if ( v51[0] != 32 ) + v17 = v51[0] == 8; if ( v17 ) { if ( v9[22 * v7 + 1] != 1 ) goto LABEL_80; } - else if ( v50[0] != 1 || v9[22 * v7 + 1] != 0 ) + else if ( v51[0] != 1 || v9[22 * v7 + 1] != 0 ) { goto LABEL_80; } - if ( v50[1] >= 3u && v50[1] != 0x40000000 ) + if ( v51[1] >= 3u && v51[1] != 0x40000000 ) goto LABEL_80; - if ( opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v48, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v49, a3: 0x10u) == 0 ) { v8 = 640; goto LABEL_81; @@ -830,18 +834,18 @@ LABEL_82: { if ( v15 != 0 ) goto LABEL_80; - v24 = (char *)&v9[22 * v7]; - v26 = *((_DWORD *)v24 + 18); - v25 = v24 + 72; - if ( v26 != 1 ) + v25 = (char *)&v9[22 * v7]; + v27 = *((_DWORD *)v25 + 18); + v26 = v25 + 72; + if ( v27 != 1 ) goto LABEL_92; - v27 = off_401938; - v28 = *(_DWORD *)off_401938; + v28 = off_401938; + v29 = *(_DWORD *)off_401938; if ( *(_DWORD *)off_401938 != 0 ) { - *v25 = 0; - *v27 = v28 - 1; - if ( v28 != 1 ) + *v26 = 0; + *v28 = v29 - 1; + if ( v29 != 1 ) goto LABEL_92; goto LABEL_51; } @@ -861,7 +865,7 @@ LABEL_82: if ( v22 != 0 ) goto LABEL_92; LABEL_51: - v23 = opm_rpc_305(); + v24 = opm_rpc_305(); goto LABEL_52; } } @@ -874,20 +878,20 @@ LABEL_51: v8 = 259; LABEL_84: ((void (__cdecl *)())v7)(); - while ( *v5 != v53 ) + while ( *v5 != v54 ) { - ((void (__fastcall *)(int))loc_4032AC)(a1: *v5 - v53); + ((void (__fastcall *)(int))loc_4032AC)(a1: *v5 - v54); LABEL_88: - v41 = off_4017D8; - v42 = off_4017D8[2]; - v43 = v42 == 1; - if ( v42 == 1 ) - v43 = *off_4017D8 == v7; - if ( v43 ) + v42 = off_4017D8; + v43 = off_4017D8[2]; + v44 = v43 == 1; + if ( v43 == 1 ) + v44 = *off_4017D8 == v7; + if ( v44 ) { off_4017D8[2] = 0; - v41[3] = 0; - *v41 = 65; + v42[3] = 0; + *v42 = 65; } LABEL_92: v8 = 0; @@ -1216,44 +1220,14 @@ int *__fastcall opm_memcpy_aligned(int *result, int *a2, unsigned int a3, int a4 return result; } -/* ==== opm_rpc_102 [tier=SVCOP size=34] ==== */ -int opm_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_rpc_105 [tier=SVCOP size=34] ==== */ -int opm_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_rpc_107 [tier=SVCOP size=34] ==== */ -int opm_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_rpc_161 [tier=SVCOP size=46] ==== */ -int opm_rpc_161() +/* ==== opm_rpc_2 [tier=SVCOP size=36] ==== */ +int opm_rpc_2() { - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x18u); + opm_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } - return 2; + return 1; } /* ==== opm_rpc_200 [tier=SVCOP size=32] ==== */ @@ -1286,24 +1260,14 @@ int opm_rpc_208() return 2; } -/* ==== opm_rpc_300 [tier=SVCOP size=38] ==== */ -int opm_rpc_300() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - opm_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== opm_rpc_301 [tier=SVCOP size=36] ==== */ -int opm_rpc_301() +/* ==== opm_rpc_3 [tier=SVCOP size=42] ==== */ +int opm_rpc_3() { - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x18u); + opm_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } - return 2; + return 1; } /* ==== opm_rpc_304 [tier=SVCOP size=28] ==== */ @@ -1326,6 +1290,16 @@ int opm_rpc_305() return 2; } +/* ==== opm_rpc_35 [tier=SVCOP size=42] ==== */ +int opm_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_1 [tier=MNEM size=60] ==== */ int opm_sysdrv_rpc_1() { diff --git a/fw/decomp/opm_25.0.0.62_10543c57.index.json b/fw/decomp/opm_25.0.0.62_10543c57.index.json index 166aadb..035a970 100644 --- a/fw/decomp/opm_25.0.0.62_10543c57.index.json +++ b/fw/decomp/opm_25.0.0.62_10543c57.index.json @@ -241,9 +241,9 @@ { "addr": "0x4030c6", "ida_name": "sub_4030C6", - "name": null, + "name": "opm_rpc_2", "size": 36, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x4030ea", @@ -255,9 +255,9 @@ { "addr": "0x403110", "ida_name": "sub_403110", - "name": null, + "name": "opm_rpc_35", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x40313a", @@ -283,9 +283,9 @@ { "addr": "0x4031d0", "ida_name": "sub_4031D0", - "name": null, + "name": "opm_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x4031fa", @@ -304,30 +304,30 @@ { "addr": "0x4032cc", "ida_name": "sub_4032CC", - "name": "opm_rpc_105", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4032ee", "ida_name": "sub_4032EE", - "name": "opm_rpc_102", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x403310", "ida_name": "sub_403310", - "name": "opm_rpc_107", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x403332", "ida_name": "sub_403332", - "name": "opm_rpc_161", + "name": null, "size": 46, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x403360", @@ -346,16 +346,16 @@ { "addr": "0x40339c", "ida_name": "sub_40339C", - "name": "opm_rpc_300", + "name": null, "size": 38, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4033c2", "ida_name": "sub_4033C2", - "name": "opm_rpc_301", + "name": null, "size": 36, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4033e6", diff --git a/fw/decomp/opm_25.0.0.63_b42666c6.anon.c b/fw/decomp/opm_25.0.0.63_b42666c6.anon.c index 2e2f508..d44b0d9 100644 --- a/fw/decomp/opm_25.0.0.63_b42666c6.anon.c +++ b/fw/decomp/opm_25.0.0.63_b42666c6.anon.c @@ -1,7 +1,7 @@ /* opm 25.0.0.63 (b42666c6) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf - * functions: 55 total in build, 38 named, 17 anonymous + * functions: 55 total in build, 35 named, 20 anonymous * porting tiers: {"DISPATCH": 8, "EXACT": 15, "FUZZY": 0, "MNEM": 0, "ambiguous": 4, "cmd_protos": 4, "comments": 0, "dispatch_conflict": 0, "none": 28, "protos": 4, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -137,34 +137,54 @@ int __fastcall sub_4031FA(char *a1, char *a2, int a3) return v3; } -/* ==== ANON size=36 ==== */ -int sub_4030C6() +/* ==== ANON size=34 ==== */ +int sub_403310() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ +int sub_4032CC() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ +int sub_4032EE() { - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x20u); + opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } -/* ==== ANON size=42 ==== */ -int sub_403110() +/* ==== ANON size=36 ==== */ +int sub_4033C2() { - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } -/* ==== ANON size=42 ==== */ -int sub_4031D0() +/* ==== ANON size=38 ==== */ +int sub_40339C() { - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x20u); + opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } /* ==== ANON size=46 ==== */ @@ -189,6 +209,16 @@ int __fastcall sub_40259C(int a1, int a2) return v2; } +/* ==== ANON size=46 ==== */ +int sub_403332() +{ + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + /* ==== ANON size=88 ==== */ int __fastcall sub_401A54(int a1, int *a2) { @@ -512,86 +542,172 @@ int *__fastcall sub_401058(int *result, int *a2, unsigned int a3, int a4) } /* ==== ANON size=180 ==== */ -int __fastcall sub_401FC4(unsigned int a1, int a2) +int __fastcall sub_401FC4(unsigned int a1, int a2, int a3, int a4) { - int v2; // r4 - int v4; // r0 - bool v5; // zf - void (__cdecl *v6)(); // r5 + int v4; // r4 + int *v6; // r9 + int v10; // r0 + bool v11; // zf + void (__cdecl *v12)(); // r5 + int v13; // r0 + bool v15; // zf + int v16; // [sp+4h] [bp-10h] BYREF + int v17; // [sp+8h] [bp-Ch] BYREF + int v18; // [sp+Ch] [bp-8h] BYREF + int v19; // [sp+10h] [bp-4h] BYREF + v18 = 0; + v19 = 0; + v16 = 0; + v17 = 0; if ( a1 > 0x3F ) { - v2 = 259; -LABEL_8: - v6 = (void (__cdecl *)())off_402394; - off_402394(a1: 7, a2: 61440); - v6(); - v6(); - return v2; + v4 = 259; + goto LABEL_11; } - v4 = opm_rpc_161(); - v5 = v4 == 7; - if ( v4 != 7 ) + v6 = (int *)off_402F00; + v10 = sub_403332(a1: (*off_402F00)[22 * a1 + 13], a2: &v19, a3: &v18, a4: &v17, a5: &v16); + v11 = v10 == 7; + if ( v10 != 7 ) { - v2 = v4; - v5 = v4 == 0; + v4 = v10; + v11 = v10 == 0; } - if ( !v5 ) - goto LABEL_8; + if ( !v11 ) + goto LABEL_11; + if ( v18 != 3 ) + { + v16 = 0; + goto LABEL_13; + } + if ( v16 == 1 ) + { + v15 = a3 == 32; + v13 = 1; + if ( a3 == 32 ) + v15 = v17 == 2; + if ( v15 ) + { + v13 = 2; + if ( v6[22 * a1 + 20] != 2 && a4 == 0 ) + v13 = 1; + } + goto LABEL_14; + } + if ( v16 != 2 ) + { +LABEL_13: + v13 = 0; + v16 = 0; +LABEL_14: + *(_DWORD *)(a2 + 20) = v13; + return 0; + } + v4 = 269; + *(_DWORD *)(a2 + 16) = 1; *(_DWORD *)(a2 + 20) = 0; - return 0; +LABEL_11: + v12 = (void (__cdecl *)())off_402394; + off_402394(a1: 7, a2: 61440); + v12(); + v12(); + return v4; } /* ==== ANON size=244 ==== */ -int __fastcall sub_402078(unsigned int a1, int a2) +int __fastcall sub_402078(unsigned int a1, int a2, int a3, int a4) { - int v2; // r5 - unsigned int v4; // r10 - int v5; // r7 - int *v6; // r9 - int v7; // r0 - bool v8; // zf - void (__cdecl *v9)(); // r4 + int v4; // r5 + int *v6; // r0 + unsigned int v7; // r10 + int v8; // r7 + _DWORD *v9; // r9 + int v10; // r0 + bool v11; // zf + unsigned int v12; // r0 + bool v13; // zf + void (__cdecl *v14)(); // r4 + _DWORD *v17; // [sp+Ch] [bp-18h] + int v19; // [sp+14h] [bp-10h] BYREF + int v20; // [sp+18h] [bp-Ch] BYREF + int v21; // [sp+1Ch] [bp-8h] BYREF + int v22; // [sp+20h] [bp-4h] BYREF + v20 = 0; + v21 = 0; + v22 = 0; *(_DWORD *)(a2 + 20) = 0x40000000; - if ( a1 > 0x3F ) - { - v2 = 259; -LABEL_14: - v9 = (void (__cdecl *)())off_402520; - off_402520(a1: 7, a2: 61440); - v9(); - v9(); - } - else + v19 = 0; + if ( a1 <= 0x3F ) { - v4 = 0; - v5 = 0; - v6 = &(*off_40241C)[22 * a1 + 14]; - while ( v5 != 32 ) + v6 = &(*off_40241C)[22 * a1]; + v7 = 0; + v8 = 0; + v9 = v6 + 14; + v17 = v6 + 20; + while ( 1 ) { - if ( (unsigned int)*v6 >> v5 << 31 != 0 ) + if ( v8 == 32 ) + return 0; + if ( *v9 >> v8 << 31 != 0 ) + break; +LABEL_21: + ++v8; + } + if ( v7 > 4 ) + return 0; + v10 = sub_403332(a1: v8, a2: &v22, a3: &v21, a4: &v20, a5: &v19); + v11 = v10 == 7; + if ( v10 != 7 ) + { + v4 = v10; + v11 = v10 == 0; + } + if ( !v11 ) + goto LABEL_26; + if ( v21 == 3 ) + { + if ( v19 == 1 ) { - if ( v4 > 4 ) - return 0; - v7 = opm_rpc_161(); - v8 = v7 == 7; - if ( v7 != 7 ) + v12 = 1; + v13 = a3 == 32; + if ( a3 == 32 ) + v13 = v20 == 2; + if ( v13 ) { - v2 = v7; - v8 = v7 == 0; + v12 = 2; + if ( *v17 != 2 && a4 == 0 ) + v12 = 1; } - if ( !v8 ) - goto LABEL_14; - ++v4; - if ( *(_DWORD *)(a2 + 20) != 0 ) - *(_DWORD *)(a2 + 20) = 0; + goto LABEL_19; + } + if ( v19 == 2 ) + { + v4 = 269; + *(_DWORD *)(a2 + 16) = 1; + *(_DWORD *)(a2 + 20) = 0; + goto LABEL_26; } - ++v5; } - return 0; + else + { + v19 = 0; + } + v12 = 0; + v19 = 0; +LABEL_19: + ++v7; + if ( v12 < *(_DWORD *)(a2 + 20) ) + *(_DWORD *)(a2 + 20) = v12; + goto LABEL_21; } - return v2; + v4 = 259; +LABEL_26: + v14 = (void (__cdecl *)())off_402520; + off_402520(a1: 7, a2: 61440); + v14(); + v14(); + return v4; } /* ==== ANON size=250 ==== */ @@ -654,9 +770,9 @@ LABEL_25: LABEL_23: v16 = (int *)off_4026E8; if ( (*off_4026E8)[22 * a1 + 14] != 0 ) - v17 = sub_402078(a1, a2: a5); + v17 = sub_402078(a1, a2: a5, a3: v19, a4: a8); else - v17 = sub_401FC4(a1, a2: a5); + v17 = sub_401FC4(a1, a2: a5, a3: v19, a4: a8); v10 = v17; if ( a8 == 0 ) { @@ -713,7 +829,7 @@ int __fastcall sub_4025CC(unsigned int a1, int a2, int a3, int a4) { v5 = 1298; } - else if ( sub_4031D0(a1: 0, a2: 0) != 0 ) + else if ( opm_rpc_3() != 0 ) { v5 = 1299; } @@ -779,28 +895,35 @@ int __fastcall sub_401AAC( int v26; // r3 void (__cdecl *v27)(); // r4 int v28; // r0 - int v29; // r0 - int v30; // r0 - int v31; // r0 - int v32; // r0 - int v33; // r1 + int *v29; // r1 + int *v30; // r4 + _DWORD *v31; // r4 + int v32; // t1 + int v33; // r0 int v34; // r0 - int *v35; // r1 - int *v36; // r4 - bool v37; // zf - int v38; // r4 - unsigned int v39; // r5 - int *v40; // r8 - int v41; // r0 - unsigned int v42; // [sp+18h] [bp-FE4h] - unsigned int v43; // [sp+20h] [bp-FDCh] BYREF - unsigned int v44[1013]; // [sp+24h] [bp-FD8h] BYREF - int v45; // [sp+FF8h] [bp-4h] + int v35; // r0 + int v36; // r0 + int v37; // r1 + int v38; // r0 + int *v39; // r1 + int *v40; // r1 + int *v41; // r1 + _QWORD *v42; // r4 + bool v43; // zf + int v44; // r4 + unsigned int v45; // r5 + int *v46; // r8 + int v47; // r0 + unsigned int v48; // [sp+18h] [bp-FE4h] + int v49; // [sp+1Ch] [bp-FE0h] BYREF + unsigned int v50; // [sp+20h] [bp-FDCh] BYREF + unsigned int v51[1013]; // [sp+24h] [bp-FD8h] BYREF + int v52; // [sp+FF8h] [bp-4h] v11 = (_DWORD *)off_401F44; v12 = a1; v13 = 264; - v45 = *(_DWORD *)off_401F44; + v52 = *(_DWORD *)off_401F44; if ( a2 != 16 ) goto LABEL_8; if ( a1 == nullptr ) @@ -830,69 +953,69 @@ int __fastcall sub_401AAC( v19 = &v18[22 * a3]; v21 = v19[1]; v20 = v19 + 1; - v42 = v21; + v48 = v21; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F4C, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F50, a3: 0x10u) == 0 ) { if ( a7 != 32 ) - goto LABEL_80; - v43 = 0; - v28 = opm_rpc_102(); + goto LABEL_81; + v50 = 0; + v28 = sub_4032EE(a1: (*off_401F48)[22 * v17 + 13], a2: &v50); if ( v28 != 0 ) goto LABEL_44; - if ( v43 - 1 > 4 ) - v30 = -1; + if ( v50 - 1 > 4 ) + v34 = -1; else - v30 = dword_401FB0[v43 - 1]; - goto LABEL_58; + v34 = dword_401FB0[v50 - 1]; + goto LABEL_59; } if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F54, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F58, a3: 0x10u) == 0 ) { - v31 = 0; - goto LABEL_60; + v35 = 0; + goto LABEL_61; } if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F5C, a3: 0x10u) == 0 ) - goto LABEL_54; + goto LABEL_55; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F60, a3: 0x10u) == 0 ) { - v31 = 1; -LABEL_60: - v32 = sub_402420(a1: v17, a2: v42, a3: v8, a4: a5, a5: v9, a6: a7, a7: v10, a8: v31); + v35 = 1; LABEL_61: - v13 = v32; - if ( v32 != 0 ) + v36 = sub_402420(a1: v17, a2: v48, a3: v8, a4: a5, a5: v9, a6: a7, a7: v10, a8: v35); +LABEL_62: + v13 = v36; + if ( v36 != 0 ) goto LABEL_8; - goto LABEL_62; + goto LABEL_63; } if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F64, a3: 0x10u) == 0 ) - goto LABEL_54; + goto LABEL_55; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F68, a3: 0x10u) == 0 ) - goto LABEL_62; + goto LABEL_63; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F6C, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F70, a3: 0x10u) == 0 ) { -LABEL_54: - v32 = sub_40259C(a1: v9, a2: a7); - goto LABEL_61; +LABEL_55: + v36 = sub_40259C(a1: v9, a2: a7); + goto LABEL_62; } - if ( __PAIR64__(v42, opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F74, a3: 0x10u)) == 0x100000000LL - || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F78, a3: 0x10u) | v42) == 0 ) + if ( __PAIR64__(v48, opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F74, a3: 0x10u)) == 0x100000000LL + || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F78, a3: 0x10u) | v48) == 0 ) { if ( a7 != 32 ) - goto LABEL_80; + goto LABEL_81; v9[5] = 0; v9 += 5; - v43 = 0; - v34 = opm_rpc_300(); - if ( v34 != 0 ) + v50 = 0; + v38 = sub_40339C(a1: v9, a2: 0, a3: &v50, a4: 0); + if ( v38 != 0 ) { - v13 = v34; + v13 = v38; *v10 = dword_401FA4; - goto LABEL_81; + goto LABEL_82; } } else if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F7C, a3: 0x10u) != 0 ) @@ -900,17 +1023,17 @@ LABEL_54: if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F80, a3: 0x10u) != 0 ) { v22 = opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F84, a3: 0x10u); - v23 = v42 == 1; - if ( v42 == 1 ) + v23 = v48 == 1; + if ( v48 == 1 ) v23 = v22 == 0; - if ( v23 || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F88, a3: 0x10u) | v42) == 0 ) - goto LABEL_62; + if ( v23 || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F88, a3: 0x10u) | v48) == 0 ) + goto LABEL_63; v10 = a5; v24 = opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F8C, a3: 0x10u); - v25 = v42 == 1; - if ( v42 == 1 ) + v25 = v48 == 1; + if ( v48 == 1 ) v25 = v24 == 0; - if ( !v25 && (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F90, a3: 0x10u) | v42) != 0 ) + if ( !v25 && (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F90, a3: 0x10u) | v48) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F94, a3: 0x10u) != 0 ) { @@ -918,38 +1041,38 @@ LABEL_54: } else { - v37 = a5 == (_DWORD *)4056; + v43 = a5 == (_DWORD *)4056; if ( a5 == (_DWORD *)4056 ) - v37 = a7 == 20; + v43 = a7 == 20; v13 = 264; - if ( v37 ) + if ( v43 ) { - v38 = 0; + v44 = 0; v9[4] = 0; - sub_401058(result: (int *)&v43, a2: v8, a3: 0xFD8u, a4: v26); - v8 = (int *)v44; - v39 = v43; - v40 = (int *)off_401F98; + sub_401058(result: (int *)&v50, a2: v8, a3: 0xFD8u, a4: v26); + v8 = (int *)v51; + v45 = v50; + v46 = (int *)off_401F98; while ( 1 ) { - v12 = (unsigned int *)(v38 * 4 + 16); - if ( v38 == 28 ) + v12 = (unsigned int *)(v44 * 4 + 16); + if ( v44 == 28 ) break; - v41 = opm_memcmp_be(a1: (unsigned int *)&v40[v38], a2: v44, a3: v39); - v38 += 4; - if ( v41 == 0 ) + v47 = opm_memcmp_be(a1: (unsigned int *)&v46[v44], a2: v51, a3: v45); + v44 += 4; + if ( v47 == 0 ) { v9[4] = dword_401F9C; - goto LABEL_62; + goto LABEL_63; } } v13 = 688; } -LABEL_81: +LABEL_82: v27 = (void (__cdecl *)())off_401FA0; off_401FA0(a1: 7, a2: 61440); v27(); -LABEL_82: +LABEL_83: v27(); } LABEL_8: @@ -961,89 +1084,99 @@ LABEL_8: } if ( a7 != 32 ) goto LABEL_41; - v30 = 1; - goto LABEL_58; + v34 = 1; + goto LABEL_59; } if ( a7 != 32 ) { -LABEL_80: +LABEL_81: v13 = 264; - goto LABEL_81; + goto LABEL_82; } - v35 = (int *)off_401F48; + v40 = (int *)off_401F48; v9[6] = 0; v9[7] = 0; - v36 = &v35[22 * v17 + 16]; - v13 = opm_rpc_107(); + v41 = &v40[22 * v17]; + v42 = v41 + 16; + v13 = sub_403310(a1: v41[13], a2: v41 + 16); if ( v13 != 0 ) - goto LABEL_81; - *((_QWORD *)v9 + 3) = *(_QWORD *)v36; + goto LABEL_82; + *((_QWORD *)v9 + 3) = *v42; } else { if ( a7 != 32 ) - goto LABEL_80; + goto LABEL_81; + v39 = (int *)off_401F48; v9[5] = 0; - v43 = 0; - v13 = opm_rpc_102(); - if ( v43 != 1 ) + v50 = 0; + v13 = sub_4032EE(a1: v39[22 * v17 + 13], a2: &v50); + if ( v50 != 1 ) { v13 = 608; - goto LABEL_81; + goto LABEL_82; } v9[5] = 1; if ( v13 != 0 ) - goto LABEL_81; + goto LABEL_82; } } else { if ( a7 != 32 ) - goto LABEL_80; - opm_lib_zero_fill_words(result: &v43, a2: 0x28u); + goto LABEL_81; + opm_lib_zero_fill_words(result: &v50, a2: 0x28u); v9[5] = 0; v28 = opm_rpc_200(); if ( v28 != 0 ) { LABEL_44: v13 = v28; - goto LABEL_81; + goto LABEL_82; } - v33 = dword_401FA8; - if ( (_BYTE)v43 == 0 ) - v33 = 3; - v9[5] = v33; + v37 = dword_401FA8; + if ( (_BYTE)v50 == 0 ) + v37 = 3; + v9[5] = v37; } } else { if ( a7 != 32 ) - goto LABEL_80; + goto LABEL_81; + v29 = (int *)off_401F48; v9[5] = 0; - v43 = 0; - v13 = opm_rpc_105(); + v50 = 0; + v30 = &v29[22 * v17]; + v32 = v30[13]; + v31 = v30 + 13; + v13 = sub_4032CC(a1: v32, a2: &v50); if ( v13 != 0 ) - goto LABEL_81; + goto LABEL_82; if ( *v20 == 0 ) { - v30 = v9[5] | 1; - goto LABEL_58; + v34 = v9[5] | 1; + goto LABEL_59; } if ( *v20 != 1 ) { v13 = 260; - goto LABEL_81; + goto LABEL_82; } - v28 = opm_rpc_102(); + v49 = 0; + v28 = sub_4032EE(a1: *v31, a2: &v49); if ( v28 != 0 ) goto LABEL_44; - v29 = v9[5]; - v9[5] = v29 | 8; - if ( (v43 & 2) != 0 && *off_401FAC != 0 ) + if ( v49 != 4 ) { - v30 = v29 | 0x28; -LABEL_58: - v9[5] = v30; + v33 = v9[5]; + v9[5] = v33 | 8; + if ( (v50 & 2) != 0 && *off_401FAC != 0 ) + { + v34 = v33 | 0x28; +LABEL_59: + v9[5] = v34; + } } } } @@ -1051,7 +1184,7 @@ LABEL_58: { if ( a7 != 72 ) goto LABEL_41; - if ( v42 != 0 ) + if ( v48 != 0 ) { *v10 = dword_401FA4 + 6; LABEL_41: @@ -1059,15 +1192,15 @@ LABEL_41: off_401FA0(a1: 7, a2: 61440); v27(); v13 = 264; - goto LABEL_82; + goto LABEL_83; } } -LABEL_62: +LABEL_63: v13 = 0; LABEL_9: - if ( *v11 == v45 ) + if ( *v11 == v52 ) return v13; - ((void (__fastcall *)(int))loc_4032AC)(a1: *v11 - v45); + ((void (__fastcall *)(int))loc_4032AC)(a1: *v11 - v52); } } @@ -1376,7 +1509,7 @@ LABEL_85: { LABEL_86: if ( v20 != 0 ) - sub_4030C6(a1: v20); + opm_rpc_2(); if ( v19 != 0 ) opm_sysdrv_rpc_31(); LABEL_90: @@ -1400,7 +1533,7 @@ LABEL_93: goto LABEL_100; if ( opm_sysdrv_rpc_1() != 0 ) goto LABEL_102; - if ( sub_4031D0(a1: STACK[0x27F8], a2: STACK[0x27F4]) != 0 ) + if ( opm_rpc_3() != 0 ) goto LABEL_106; STACK[0x278C] = 256; if ( opm_sysdrv_rpc_9() != 0 ) @@ -1422,7 +1555,7 @@ LABEL_100: LABEL_102: v10 = 1298; } - else if ( sub_4031D0(a1: STACK[0x27F8], a2: STACK[0x27F4]) != 0 ) + else if ( opm_rpc_3() != 0 ) { LABEL_106: v10 = 1299; diff --git a/fw/decomp/opm_25.0.0.63_b42666c6.c b/fw/decomp/opm_25.0.0.63_b42666c6.c index 2b9fe9d..ccabf04 100644 --- a/fw/decomp/opm_25.0.0.63_b42666c6.c +++ b/fw/decomp/opm_25.0.0.63_b42666c6.c @@ -1,7 +1,7 @@ /* opm 25.0.0.63 (b42666c6) -- named functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf - * functions: 55 total in build, 38 named, 17 anonymous + * functions: 55 total in build, 35 named, 20 anonymous * porting tiers: {"DISPATCH": 8, "EXACT": 15, "FUZZY": 0, "MNEM": 0, "ambiguous": 4, "cmd_protos": 4, "comments": 0, "dispatch_conflict": 0, "none": 28, "protos": 4, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -315,7 +315,7 @@ LABEL_6: goto LABEL_6; } v6 = &(*off_4026E8)[22 * v3]; - sub_403110(a1: v6 + 2, a2: 16); + opm_rpc_35(); v7 = (char *)ctx + 9244; v8 = v6[3]; v9 = v6[4]; @@ -591,39 +591,40 @@ int __fastcall opm_cmd08(_DWORD *a1, int a2, int a3, int a4) int v20; // t1 _DWORD *v21; // r2 int v22; // r1 - int v23; // r0 - int *v24; // r0 - _DWORD *v25; // r0 - int v26; // t1 - _DWORD *v27; // r1 - int v28; // r2 - int *v29; // r0 - void (__cdecl *v30)(); // r4 - int v31; // r1 - int *v32; // r6 - int v33; // r0 - int *v34; // r6 - int v35; // t1 - int v36; // r1 - bool v37; // zf - int v38; // r1 - bool v39; // zf - int *v41; // r0 - int v42; // r1 - bool v43; // zf - int v44; // r0 + int v23; // r1 + int v24; // r0 + int *v25; // r0 + _DWORD *v26; // r0 + int v27; // t1 + _DWORD *v28; // r1 + int v29; // r2 + int *v30; // r0 + void (__cdecl *v31)(); // r4 + int v32; // r1 + int *v33; // r6 + int v34; // r0 + int *v35; // r6 + int v36; // t1 + int v37; // r1 + bool v38; // zf + int v39; // r1 + bool v40; // zf + int *v42; // r0 + int v43; // r1 + bool v44; // zf int v45; // r0 - int v46; // [sp+Ch] [bp-1258h] BYREF - int v47[4]; // [sp+10h] [bp-1254h] BYREF - unsigned int v48[5]; // [sp+20h] [bp-1244h] BYREF - int v49; // [sp+34h] [bp-1230h] - int v50[1010]; // [sp+38h] [bp-122Ch] BYREF - _DWORD v51[76]; // [sp+1010h] [bp-254h] BYREF - int v52[71]; // [sp+1140h] [bp-124h] BYREF - int v53; // [sp+125Ch] [bp-8h] + int v46; // r0 + int v47; // [sp+Ch] [bp-1258h] BYREF + int v48[4]; // [sp+10h] [bp-1254h] BYREF + unsigned int v49[5]; // [sp+20h] [bp-1244h] BYREF + int v50; // [sp+34h] [bp-1230h] + int v51[1010]; // [sp+38h] [bp-122Ch] BYREF + _DWORD v52[76]; // [sp+1010h] [bp-254h] BYREF + int v53[71]; // [sp+1140h] [bp-124h] BYREF + int v54; // [sp+125Ch] [bp-8h] v5 = (_DWORD *)off_401F44; - v53 = *(_DWORD *)off_401F44; + v54 = *(_DWORD *)off_401F44; if ( a1 == nullptr ) { v7 = (unsigned int)off_402170; @@ -644,11 +645,11 @@ int __fastcall opm_cmd08(_DWORD *a1, int a2, int a3, int a4) v8 = 266; goto LABEL_84; } - opm_memcpy_aligned(result: v47, a2: a1 + 6, a3: 0x1000u, a4); + opm_memcpy_aligned(result: v48, a2: a1 + 6, a3: 0x1000u, a4); v10 = &v9[22 * v7]; v11 = v10[11]; v4 = v10 + 11; - if ( v11 != v48[4] ) + if ( v11 != v49[4] ) { v7 = (unsigned int)off_401884; off_401884(a1: 7, a2: 61440); @@ -656,7 +657,7 @@ int __fastcall opm_cmd08(_DWORD *a1, int a2, int a3, int a4) v8 = 261; goto LABEL_84; } - v8 = sub_4025CC(a1: v7, a2: v48, a3: 4080, a4: v47); + v8 = sub_4025CC(a1: v7, a2: v49, a3: 4080, a4: v48); if ( v8 != 0 ) { LABEL_83: @@ -665,105 +666,105 @@ LABEL_83: ((void (__cdecl *)())v7)(); goto LABEL_84; } - if ( opm_memcmp_be(a1: (unsigned int *)off_4017A0, a2: v48, a3: 0x10u) != 0 - && opm_memcmp_be(a1: (unsigned int *)off_4017A4, a2: v48, a3: 0x10u) != 0 - && opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v48, a3: 0x10u) != 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017A0, a2: v49, a3: 0x10u) != 0 + && opm_memcmp_be(a1: (unsigned int *)off_4017A4, a2: v49, a3: 0x10u) != 0 + && opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v49, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017AC, a2: v48, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017AC, a2: v49, a3: 0x10u) == 0 ) goto LABEL_92; - LODWORD(v12) = opm_memcmp_be(a1: (unsigned int *)off_4017B0, a2: v48, a3: 0x10u); + LODWORD(v12) = opm_memcmp_be(a1: (unsigned int *)off_4017B0, a2: v49, a3: 0x10u); if ( (_DWORD)v12 != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017B4, a2: v48, a3: 0x10u) != 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017B4, a2: v49, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017B8, a2: v48, a3: 0x10u) == 0 - || opm_memcmp_be(a1: (unsigned int *)off_4017BC, a2: v48, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017B8, a2: v49, a3: 0x10u) == 0 + || opm_memcmp_be(a1: (unsigned int *)off_4017BC, a2: v49, a3: 0x10u) == 0 ) { - v29 = off_4017D8; + v30 = off_4017D8; if ( off_4017D8[2] != 1 ) { *off_4017D8 = v7; - v29[2] = 1; - if ( v29[1] == 1 ) - v31 = 0; + v30[2] = 1; + if ( v30[1] == 1 ) + v32 = 0; else - v31 = v9[22 * v7 + 15]; - v29[3] = v31; + v32 = v9[22 * v7 + 15]; + v30[3] = v32; goto LABEL_92; } if ( *off_4017D8 == v7 ) goto LABEL_92; - v30 = (void (__cdecl *)())off_4019BC; + v31 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); - v30(); + v31(); v8 = 640; goto LABEL_82; } - v14 = opm_memcmp_be(a1: (unsigned int *)off_4017C0, a2: v48, a3: 0x10u); - if ( v14 != 0 && opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v48, a3: 0x10u) != 0 ) + v14 = opm_memcmp_be(a1: (unsigned int *)off_4017C0, a2: v49, a3: 0x10u); + if ( v14 != 0 && opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v49, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017C8, a2: v48, a3: 0x10u) != 0 - && opm_memcmp_be(a1: (unsigned int *)off_4017CC, a2: v48, a3: 0x10u) != 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017C8, a2: v49, a3: 0x10u) != 0 + && opm_memcmp_be(a1: (unsigned int *)off_4017CC, a2: v49, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017D0, a2: v48, a3: 0x10u) == 0 - || opm_memcmp_be(a1: (unsigned int *)off_4017D4, a2: v48, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017D0, a2: v49, a3: 0x10u) == 0 + || opm_memcmp_be(a1: (unsigned int *)off_4017D4, a2: v49, a3: 0x10u) == 0 ) { goto LABEL_88; } v8 = 263; goto LABEL_83; } - v36 = off_4017D8[2]; - v37 = v36 == 1; - if ( v36 == 1 ) - v37 = *off_4017D8 == v7; - if ( !v37 || v49 == 8 ) + v37 = off_4017D8[2]; + v38 = v37 == 1; + if ( v37 == 1 ) + v38 = *off_4017D8 == v7; + if ( !v38 || v50 == 8 ) goto LABEL_92; - v30 = (void (__cdecl *)())off_4019BC; + v31 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); - v30(); + v31(); v8 = 264; goto LABEL_82; } - v32 = &v9[22 * v7]; - v35 = v32[1]; - v34 = v32 + 1; - v33 = v35; - if ( v35 == 1 ) + v33 = &v9[22 * v7]; + v36 = v33[1]; + v35 = v33 + 1; + v34 = v36; + if ( v36 == 1 ) { if ( v14 == 0 ) goto LABEL_73; } - else if ( v33 == 0 && opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v48, a3: 0x10u) == 0 ) + else if ( v34 == 0 && opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v49, a3: 0x10u) == 0 ) { LABEL_73: - if ( v49 == 280 ) + if ( v50 == 280 ) { v8 = 264; - v38 = off_4017D8[2]; - v39 = v38 == 1; - if ( v38 == 1 ) - v39 = *off_4017D8 == v7; - if ( !v39 ) + v39 = off_4017D8[2]; + v40 = v39 == 1; + if ( v39 == 1 ) + v40 = *off_4017D8 == v7; + if ( !v40 ) goto LABEL_81; - opm_memcpy_aligned(result: v52, a2: v50, a3: 0x118u, a4: v13); - if ( v52[68] == 16 ) + opm_memcpy_aligned(result: v53, a2: v51, a3: 0x118u, a4: v13); + if ( v53[68] == 16 ) { - v7 = (unsigned int)v52; - opm_asd301_path__h1(a1: (int)v52, a2: 256); - opm_lib_zero_fill_words(result: v51, a2: 0x130u); - v44 = *v34; - v46 = 256; - v45 = sub_4026F4(a1: v44, a2: v52, a3: 256, a4: v51, a5: &v46); - if ( v45 == 0 ) + v7 = (unsigned int)v53; + opm_asd301_path__h1(a1: (int)v53, a2: 256); + opm_lib_zero_fill_words(result: v52, a2: 0x130u); + v45 = *v35; + v47 = 256; + v46 = sub_4026F4(a1: v45, a2: v53, a3: 256, a4: v52, a5: &v47); + if ( v46 == 0 ) { - opm_asd301_path__h1(a1: (int)v51, a2: v52[68]); + opm_asd301_path__h1(a1: (int)v52, a2: v53[68]); goto LABEL_92; } - v8 = v45; + v8 = v46; goto LABEL_81; } - if ( v52[68] == 0 ) + if ( v53[68] == 0 ) goto LABEL_92; } } @@ -776,41 +777,44 @@ LABEL_80: HIDWORD(v12) = v9[22 * v7 + 1]; if ( v12 == 0x100000000LL ) { - if ( v49 != 4 || a1[1030] == 0 ) + if ( v50 != 4 ) goto LABEL_80; - v23 = opm_rpc_301(); -LABEL_52: - v8 = v23; + v23 = a1[1030]; if ( v23 == 0 ) + goto LABEL_80; + v24 = sub_4033C2(a1: v51[0], a2: v23, a3: a1 + 1031); +LABEL_52: + v8 = v24; + if ( v24 == 0 ) goto LABEL_92; } LABEL_81: - v30 = (void (__cdecl *)())off_4019BC; + v31 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); - v30(); + v31(); LABEL_82: - v30(); + v31(); goto LABEL_83; } - if ( v49 != 16 ) + if ( v50 != 16 ) goto LABEL_80; - v16 = v50[0]; - v15 = v50[1]; - v17 = v50[0] == 32; - if ( v50[0] != 32 ) - v17 = v50[0] == 8; + v16 = v51[0]; + v15 = v51[1]; + v17 = v51[0] == 32; + if ( v51[0] != 32 ) + v17 = v51[0] == 8; if ( v17 ) { if ( v9[22 * v7 + 1] != 1 ) goto LABEL_80; } - else if ( v50[0] != 1 || v9[22 * v7 + 1] != 0 ) + else if ( v51[0] != 1 || v9[22 * v7 + 1] != 0 ) { goto LABEL_80; } - if ( v50[1] >= 3u && v50[1] != 0x40000000 ) + if ( v51[1] >= 3u && v51[1] != 0x40000000 ) goto LABEL_80; - if ( opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v48, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v49, a3: 0x10u) == 0 ) { v8 = 640; goto LABEL_81; @@ -822,18 +826,18 @@ LABEL_82: { if ( v15 != 0 ) goto LABEL_80; - v24 = &v9[22 * v7]; - v26 = v24[18]; - v25 = v24 + 18; - if ( v26 != 1 ) + v25 = &v9[22 * v7]; + v27 = v25[18]; + v26 = v25 + 18; + if ( v27 != 1 ) goto LABEL_92; - v27 = off_401938; - v28 = *(_DWORD *)off_401938; + v28 = off_401938; + v29 = *(_DWORD *)off_401938; if ( *(_DWORD *)off_401938 != 0 ) { - *v25 = 0; - *v27 = v28 - 1; - if ( v28 != 1 ) + *v26 = 0; + *v28 = v29 - 1; + if ( v29 != 1 ) goto LABEL_92; goto LABEL_51; } @@ -853,7 +857,7 @@ LABEL_82: if ( v22 != 0 ) goto LABEL_92; LABEL_51: - v23 = opm_rpc_305(); + v24 = opm_rpc_305(); goto LABEL_52; } } @@ -866,20 +870,20 @@ LABEL_51: v8 = 259; LABEL_84: ((void (__cdecl *)())v7)(); - while ( *v5 != v53 ) + while ( *v5 != v54 ) { - ((void (__fastcall *)(int))loc_4032AC)(a1: *v5 - v53); + ((void (__fastcall *)(int))loc_4032AC)(a1: *v5 - v54); LABEL_88: - v41 = off_4017D8; - v42 = off_4017D8[2]; - v43 = v42 == 1; - if ( v42 == 1 ) - v43 = *off_4017D8 == v7; - if ( v43 ) + v42 = off_4017D8; + v43 = off_4017D8[2]; + v44 = v43 == 1; + if ( v43 == 1 ) + v44 = *off_4017D8 == v7; + if ( v44 ) { off_4017D8[2] = 0; - v41[3] = 0; - *v41 = 65; + v42[3] = 0; + *v42 = 65; } LABEL_92: v8 = 0; @@ -1208,44 +1212,14 @@ int *__fastcall opm_memcpy_aligned(int *result, int *a2, unsigned int a3, int a4 return result; } -/* ==== opm_rpc_102 [tier=SVCOP size=34] ==== */ -int opm_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_rpc_105 [tier=SVCOP size=34] ==== */ -int opm_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_rpc_107 [tier=SVCOP size=34] ==== */ -int opm_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_rpc_161 [tier=SVCOP size=46] ==== */ -int opm_rpc_161() +/* ==== opm_rpc_2 [tier=SVCOP size=36] ==== */ +int opm_rpc_2() { - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x18u); + opm_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } - return 2; + return 1; } /* ==== opm_rpc_200 [tier=SVCOP size=32] ==== */ @@ -1278,24 +1252,14 @@ int opm_rpc_208() return 2; } -/* ==== opm_rpc_300 [tier=SVCOP size=38] ==== */ -int opm_rpc_300() -{ - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - opm_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== opm_rpc_301 [tier=SVCOP size=36] ==== */ -int opm_rpc_301() +/* ==== opm_rpc_3 [tier=SVCOP size=42] ==== */ +int opm_rpc_3() { - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x18u); + opm_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } - return 2; + return 1; } /* ==== opm_rpc_304 [tier=SVCOP size=28] ==== */ @@ -1318,6 +1282,16 @@ int opm_rpc_305() return 2; } +/* ==== opm_rpc_35 [tier=SVCOP size=42] ==== */ +int opm_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_1 [tier=EXACT size=60] ==== */ int opm_sysdrv_rpc_1() { diff --git a/fw/decomp/opm_25.0.0.63_b42666c6.index.json b/fw/decomp/opm_25.0.0.63_b42666c6.index.json index 345da64..a4dd6fb 100644 --- a/fw/decomp/opm_25.0.0.63_b42666c6.index.json +++ b/fw/decomp/opm_25.0.0.63_b42666c6.index.json @@ -241,9 +241,9 @@ { "addr": "0x4030c6", "ida_name": "sub_4030C6", - "name": null, + "name": "opm_rpc_2", "size": 36, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x4030ea", @@ -255,9 +255,9 @@ { "addr": "0x403110", "ida_name": "sub_403110", - "name": null, + "name": "opm_rpc_35", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x40313a", @@ -283,9 +283,9 @@ { "addr": "0x4031d0", "ida_name": "sub_4031D0", - "name": null, + "name": "opm_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x4031fa", @@ -304,30 +304,30 @@ { "addr": "0x4032cc", "ida_name": "sub_4032CC", - "name": "opm_rpc_105", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4032ee", "ida_name": "sub_4032EE", - "name": "opm_rpc_102", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x403310", "ida_name": "sub_403310", - "name": "opm_rpc_107", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x403332", "ida_name": "sub_403332", - "name": "opm_rpc_161", + "name": null, "size": 46, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x403360", @@ -346,16 +346,16 @@ { "addr": "0x40339c", "ida_name": "sub_40339C", - "name": "opm_rpc_300", + "name": null, "size": 38, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4033c2", "ida_name": "sub_4033C2", - "name": "opm_rpc_301", + "name": null, "size": 36, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4033e6", diff --git a/fw/decomp/opm_25.0.0.66_0aa202d0.anon.c b/fw/decomp/opm_25.0.0.66_0aa202d0.anon.c index cb1305e..ecb77c8 100644 --- a/fw/decomp/opm_25.0.0.66_0aa202d0.anon.c +++ b/fw/decomp/opm_25.0.0.66_0aa202d0.anon.c @@ -1,7 +1,7 @@ /* opm 25.0.0.66 (0aa202d0) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf - * functions: 54 total in build, 38 named, 16 anonymous + * functions: 54 total in build, 35 named, 19 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 @@ -137,34 +137,64 @@ int __fastcall sub_403092(char *a1, char *a2, int a3) return v3; } +/* ==== ANON size=34 ==== */ +int sub_4031A8() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ +int sub_403186() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ +int sub_403164() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + /* ==== ANON size=36 ==== */ -int sub_402F5E() +int sub_40325A() { - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x20u); + opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } -/* ==== ANON size=42 ==== */ -int sub_403068() +/* ==== ANON size=38 ==== */ +int sub_403234() { - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x20u); + opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } -/* ==== ANON size=42 ==== */ -int sub_402FA8() +/* ==== ANON size=46 ==== */ +int sub_4031CA() { - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } /* ==== ANON size=46 ==== */ @@ -684,7 +714,7 @@ int __fastcall sub_4028B0(unsigned int a1, int a2, int a3, int a4) { v5 = 1298; } - else if ( sub_403068(a1: 0, a2: 0) != 0 ) + else if ( opm_rpc_3() != 0 ) { v5 = 1299; } @@ -739,20 +769,21 @@ int __fastcall sub_4022B8(int a1, int a2, int a3, unsigned int a4, int a5, int a unsigned int v25; // r0 bool v26; // zf int v27; // r0 - bool v28; // zf - void (__cdecl *v29)(); // r8 - int v30; // r0 - void (__cdecl *v31)(); // r6 - unsigned int v32; // r0 - bool v33; // zf - int v34; // [sp+0h] [bp-1Ch] - int v35; // [sp+4h] [bp-18h] - _DWORD *v36; // [sp+4h] [bp-18h] - int v37; // [sp+8h] [bp-14h] BYREF - int v38; // [sp+Ch] [bp-10h] - int v39; // [sp+10h] [bp-Ch] - int v40; // [sp+14h] [bp-8h] - int v41; // [sp+18h] [bp-4h] + int v28; // r0 + bool v29; // zf + void (__cdecl *v30)(); // r8 + int v31; // r0 + void (__cdecl *v32)(); // r6 + unsigned int v33; // r0 + bool v34; // zf + int v35; // [sp+0h] [bp-1Ch] + int v36; // [sp+4h] [bp-18h] + _DWORD *v37; // [sp+4h] [bp-18h] + int v38; // [sp+8h] [bp-14h] BYREF + int v39; // [sp+Ch] [bp-10h] BYREF + int v40; // [sp+10h] [bp-Ch] BYREF + int v41; // [sp+14h] [bp-8h] BYREF + int v42; // [sp+18h] [bp-4h] BYREF int savedregs[9]; // [sp+1Ch] [bp+0h] v10 = 264; @@ -768,33 +799,33 @@ int __fastcall sub_4022B8(int a1, int a2, int a3, unsigned int a4, int a5, int a goto LABEL_8; *(_DWORD *)(a5 + 20) = 0; opm_lib_thunk_tailjump( - a1: (struct tee_fmt_state *)&v37, + a1: (struct tee_fmt_state *)&v38, a2: a3, a3: a4, a4, - a5: v34, - a6: v35, + a5: v35, + a6: v36, a7: 0, - a8: v38, - a9: v39, - a10: v40, - a11: v41, + a8: v39, + a9: v40, + a10: v41, + a11: v42, a12: savedregs[0], a13: savedregs[1]); - v15 = v37; - if ( a2 != 0 && v37 == 1 ) + v15 = v38; + if ( a2 != 0 && v38 == 1 ) { v16 = dword_402514; LABEL_18: *v8 = v16; return 0; } - if ( a2 != 1 && v37 == 8 || a2 != 1 && v37 == 32 ) + if ( a2 != 1 && v38 == 8 || a2 != 1 && v38 == 32 ) { v16 = dword_402514 + 3; goto LABEL_18; } - switch ( v37 ) + switch ( v38 ) { case 1: case 8: @@ -809,7 +840,7 @@ LABEL_18: case 7: goto LABEL_47; default: - if ( v37 != 32 ) + if ( v38 != 32 ) { LABEL_47: v10 = 264; @@ -822,67 +853,68 @@ LABEL_23: v20 = v18 + 14; if ( v18[14] == 0 ) { - v40 = 0; + v27 = v18[13]; v41 = 0; - v38 = 0; + v42 = 0; v39 = 0; - v27 = opm_rpc_161(); - v28 = v27 == 7; - if ( v27 != 7 ) + v40 = 0; + v28 = sub_4031CA(a1: v27, a2: &v42, a3: &v41, a4: &v40, a5: &v39); + v29 = v28 == 7; + if ( v28 != 7 ) { - v10 = v27; - v28 = v27 == 0; + v10 = v28; + v29 = v28 == 0; } - if ( !v28 ) + if ( !v29 ) goto LABEL_57; - if ( v40 == 3 ) + if ( v41 == 3 ) { - if ( v38 == 1 ) + if ( v39 == 1 ) { - v33 = v15 == 32; - v30 = 1; + v34 = v15 == 32; + v31 = 1; if ( v15 == 32 ) - v33 = v39 == 2; - if ( v33 ) + v34 = v40 == 2; + if ( v34 ) { - v30 = 2; + v31 = 2; if ( v17[22 * a1 + 20] != 2 && a8 == 0 ) - v30 = 1; + v31 = 1; } goto LABEL_60; } - if ( v38 == 2 ) + if ( v39 == 2 ) { v10 = 269; *(_DWORD *)(a5 + 16) = 1; *(_DWORD *)(a5 + 20) = 0; LABEL_57: - v29 = (void (__cdecl *)())off_402EA0; + v30 = (void (__cdecl *)())off_402EA0; off_402EA0(a1: 7, a2: 61440); - v29(); - v29(); + v30(); + v30(); goto LABEL_63; } } else { - v38 = 0; + v39 = 0; } - v30 = 0; - v38 = 0; + v31 = 0; + v39 = 0; LABEL_60: - *(_DWORD *)(a5 + 20) = v30; + *(_DWORD *)(a5 + 20) = v31; v10 = 0; goto LABEL_63; } v21 = 0; v22 = 0; - v39 = 0; v40 = 0; v41 = 0; + v42 = 0; *(_DWORD *)(a5 + 20) = 0x40000000; - v38 = 0; - v36 = v18 + 20; + v39 = 0; + v37 = v18 + 20; while ( 1 ) { if ( v22 == 32 ) @@ -898,7 +930,7 @@ LABEL_43: } if ( v21 > 4 ) goto LABEL_48; - v23 = opm_rpc_161(); + v23 = sub_4031CA(a1: v22, a2: &v42, a3: &v41, a4: &v40, a5: &v39); v24 = v23 == 7; if ( v23 != 7 ) { @@ -907,30 +939,30 @@ LABEL_43: } if ( !v24 ) goto LABEL_61; - if ( v40 != 3 ) + if ( v41 != 3 ) { - v38 = 0; + v39 = 0; goto LABEL_37; } - if ( v38 == 1 ) + if ( v39 == 1 ) { v26 = v15 == 32; v25 = 1; if ( v15 == 32 ) - v26 = v39 == 2; + v26 = v40 == 2; if ( v26 ) { v25 = 2; - if ( *v36 != 2 && a8 == 0 ) + if ( *v37 != 2 && a8 == 0 ) v25 = 1; } goto LABEL_41; } - if ( v38 != 2 ) + if ( v39 != 2 ) { LABEL_37: v25 = 0; - v38 = 0; + v39 = 0; LABEL_41: ++v21; if ( v25 < *(_DWORD *)(a5 + 20) ) @@ -941,19 +973,19 @@ LABEL_41: *(_DWORD *)(a5 + 16) = 1; *(_DWORD *)(a5 + 20) = 0; LABEL_61: - v31 = (void (__cdecl *)())off_4025C4; + v32 = (void (__cdecl *)())off_4025C4; off_4025C4(a1: 7, a2: 61440); - v31(); - v31(); + v32(); + v32(); LABEL_62: v17 = (int *)off_402590; v19 = a8; LABEL_63: if ( v19 == 0 ) { - v32 = v17[22 * a1 + 20]; - if ( v32 <= *(_DWORD *)(a5 + 20) ) - *(_DWORD *)(a5 + 20) = v32; + v33 = v17[22 * a1 + 20]; + if ( v33 <= *(_DWORD *)(a5 + 20) ) + *(_DWORD *)(a5 + 20) = v33; if ( opm_rpc_304() != 0 ) *(_DWORD *)(a5 + 20) = 0; } @@ -1002,36 +1034,37 @@ int __fastcall sub_4012CC(int a1, int a2, unsigned int a3) int v32; // t1 _DWORD *v33; // r2 int v34; // r1 - int v35; // r0 - int *v36; // r0 - _DWORD *v37; // r0 - int v38; // t1 - _DWORD *v39; // r1 - int v40; // r2 - int *v41; // r0 - void (__cdecl *v42)(); // r4 - int v43; // r1 - int *v44; // r6 - int v45; // r0 - int *v46; // r6 - int v47; // t1 - int v48; // r1 - bool v49; // zf - int v50; // r1 - bool v51; // zf - int v52; // r0 - int v53; // [sp+Ch] [bp-1384h] BYREF - int v54[4]; // [sp+10h] [bp-1380h] BYREF - unsigned int v55[5]; // [sp+20h] [bp-1370h] BYREF - int v56; // [sp+34h] [bp-135Ch] - int v57[1010]; // [sp+38h] [bp-1358h] BYREF - _DWORD v58[76]; // [sp+1010h] [bp-380h] BYREF - int v59[82]; // [sp+1140h] [bp-250h] BYREF - struct tee_fmt_state v60[6]; // [sp+1288h] [bp-108h] BYREF - int v61; // [sp+138Ch] [bp-4h] + int v35; // r1 + int v36; // r0 + int *v37; // r0 + _DWORD *v38; // r0 + int v39; // t1 + _DWORD *v40; // r1 + int v41; // r2 + int *v42; // r0 + void (__cdecl *v43)(); // r4 + int v44; // r1 + int *v45; // r6 + int v46; // r0 + int *v47; // r6 + int v48; // t1 + int v49; // r1 + bool v50; // zf + int v51; // r1 + bool v52; // zf + int v53; // r0 + int v54; // [sp+Ch] [bp-1384h] BYREF + int v55[4]; // [sp+10h] [bp-1380h] BYREF + unsigned int v56[5]; // [sp+20h] [bp-1370h] BYREF + int v57; // [sp+34h] [bp-135Ch] + int v58[1010]; // [sp+38h] [bp-1358h] BYREF + _DWORD v59[76]; // [sp+1010h] [bp-380h] BYREF + int v60[82]; // [sp+1140h] [bp-250h] BYREF + struct tee_fmt_state v61[6]; // [sp+1288h] [bp-108h] BYREF + int v62; // [sp+138Ch] [bp-4h] v9 = off_4021D8; - v61 = *off_4021D8; + v62 = *off_4021D8; if ( a1 != 0 ) { v5 = a2; @@ -1040,25 +1073,25 @@ int __fastcall sub_4012CC(int a1, int a2, unsigned int a3) v3 = a3; if ( a3 <= 0x100 ) { - v4 = v60; + v4 = v61; v11 = 256 - a3; if ( a3 > 0xFF ) v11 = 0; - opm_lib_zero_fill_bytes(result: (_BYTE *)v60 + a3, a2: v11); + opm_lib_zero_fill_bytes(result: (_BYTE *)v61 + a3, a2: v11); opm_lib_thunk_tailjump( - a1: v60, + a1: v61, a2: a1, a3: v3, a4: v12, - a5: v60[0].unk00, - a6: v60[0].unk04, - a7: v60[0].field08, - a8: v60[0].unk0C, - a9: v60[0].field10, - a10: v60[0].field14, - a11: v60[0].field18, - a12: v60[0].field1C, - a13: v60[0].field20); + a5: v61[0].unk00, + a6: v61[0].unk04, + a7: v61[0].field08, + a8: v61[0].unk0C, + a9: v61[0].field10, + a10: v61[0].field14, + a11: v61[0].field18, + a12: v61[0].field1C, + a13: v61[0].field20); while ( v3 != 0 ) { unk00 = v4->unk00; @@ -1068,21 +1101,21 @@ int __fastcall sub_4012CC(int a1, int a2, unsigned int a3) } } } - result = *v9 - v61; - if ( *v9 != v61 ) + result = *v9 - v62; + if ( *v9 != v62 ) { v15 = ((int (__fastcall *)(int))loc_403144)(a1: result); - v59[73] = v3; - v59[74] = (int)v4; - v59[75] = v5; - v59[76] = a1; - v59[77] = (int)v9; - v59[78] = v6; - v59[79] = v7; - v59[80] = v8; - v59[81] = v17; + v60[73] = v3; + v60[74] = (int)v4; + v60[75] = v5; + v60[76] = a1; + v60[77] = (int)v9; + v60[78] = v6; + v60[79] = v7; + v60[80] = v8; + v60[81] = v17; v18 = v15; - v59[71] = *off_4021D8; + v60[71] = *off_4021D8; if ( v15 == 0 || (unsigned int)(v19 = *(_DWORD *)(v15 + 16)) >= 0x40 ) { v20 = (void (__cdecl *)())off_402270; @@ -1093,60 +1126,60 @@ int __fastcall sub_4012CC(int a1, int a2, unsigned int a3) v21 = (int *)off_40226C; if ( (*off_40226C)[22 * v19] == 3 ) { - opm_memcpy_aligned(result: v54, a2: (int *)(v15 + 24), a3: 0x1000u, a4: v16); - if ( v21[22 * v19 + 11] == v55[4] ) + opm_memcpy_aligned(result: v55, a2: (int *)(v15 + 24), a3: 0x1000u, a4: v16); + if ( v21[22 * v19 + 11] == v56[4] ) { - if ( sub_4028B0(a1: v19, a2: v55, a3: 4080, a4: v54) != 0 ) + if ( sub_4028B0(a1: v19, a2: v56, a3: 4080, a4: v55) != 0 ) goto LABEL_91; - if ( opm_memcmp_be(a1: (unsigned int *)off_4017A0, a2: v55, a3: 0x10u) != 0 - && opm_memcmp_be(a1: (unsigned int *)off_4017A4, a2: v55, a3: 0x10u) != 0 - && opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v55, a3: 0x10u) != 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017A0, a2: v56, a3: 0x10u) != 0 + && opm_memcmp_be(a1: (unsigned int *)off_4017A4, a2: v56, a3: 0x10u) != 0 + && opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v56, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017AC, a2: v55, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017AC, a2: v56, a3: 0x10u) == 0 ) goto LABEL_96; - LODWORD(v22) = opm_memcmp_be(a1: (unsigned int *)off_4017B0, a2: v55, a3: 0x10u); + LODWORD(v22) = opm_memcmp_be(a1: (unsigned int *)off_4017B0, a2: v56, a3: 0x10u); if ( (_DWORD)v22 != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017B4, a2: v55, a3: 0x10u) != 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017B4, a2: v56, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017B8, a2: v55, a3: 0x10u) == 0 - || opm_memcmp_be(a1: (unsigned int *)off_4017BC, a2: v55, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017B8, a2: v56, a3: 0x10u) == 0 + || opm_memcmp_be(a1: (unsigned int *)off_4017BC, a2: v56, a3: 0x10u) == 0 ) { - v41 = off_4017D8; + v42 = off_4017D8; if ( off_4017D8[2] == 1 ) { if ( *off_4017D8 != v19 ) { LABEL_65: - v42 = (void (__cdecl *)())off_4019BC; + v43 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); - v42(); + v43(); LABEL_90: - v42(); + v43(); goto LABEL_91; } } else { *off_4017D8 = v19; - v41[2] = 1; - if ( v41[1] == 1 ) - v43 = 0; + v42[2] = 1; + if ( v42[1] == 1 ) + v44 = 0; else - v43 = v21[22 * v19 + 15]; - v41[3] = v43; + v44 = v21[22 * v19 + 15]; + v42[3] = v44; } LABEL_96: JUMPOUT(0x401740); } - v24 = opm_memcmp_be(a1: (unsigned int *)off_4017C0, a2: v55, a3: 0x10u); - if ( v24 != 0 && opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v55, a3: 0x10u) != 0 ) + v24 = opm_memcmp_be(a1: (unsigned int *)off_4017C0, a2: v56, a3: 0x10u); + if ( v24 != 0 && opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v56, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017C8, a2: v55, a3: 0x10u) != 0 - && opm_memcmp_be(a1: (unsigned int *)off_4017CC, a2: v55, a3: 0x10u) != 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017C8, a2: v56, a3: 0x10u) != 0 + && opm_memcmp_be(a1: (unsigned int *)off_4017CC, a2: v56, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017D0, a2: v55, a3: 0x10u) == 0 - || opm_memcmp_be(a1: (unsigned int *)off_4017D4, a2: v55, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017D0, a2: v56, a3: 0x10u) == 0 + || opm_memcmp_be(a1: (unsigned int *)off_4017D4, a2: v56, a3: 0x10u) == 0 ) { JUMPOUT(0x401728); } @@ -1154,54 +1187,54 @@ LABEL_91: off_4019BC(a1: 7, a2: 61440); JUMPOUT(0x401702); } - v48 = off_4017D8[2]; - v49 = v48 == 1; - if ( v48 == 1 ) - v49 = *off_4017D8 == v19; - if ( v49 && v56 != 8 ) + v49 = off_4017D8[2]; + v50 = v49 == 1; + if ( v49 == 1 ) + v50 = *off_4017D8 == v19; + if ( v50 && v57 != 8 ) goto LABEL_65; goto LABEL_96; } - v44 = &v21[22 * v19]; - v47 = v44[1]; - v46 = v44 + 1; - v45 = v47; - if ( v47 == 1 ) + v45 = &v21[22 * v19]; + v48 = v45[1]; + v47 = v45 + 1; + v46 = v48; + if ( v48 == 1 ) { if ( v24 != 0 ) goto LABEL_89; } - else if ( v45 != 0 || opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v55, a3: 0x10u) != 0 ) + else if ( v46 != 0 || opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v56, a3: 0x10u) != 0 ) { goto LABEL_89; } - if ( v56 == 280 ) + if ( v57 == 280 ) { - v50 = off_4017D8[2]; - v51 = v50 == 1; - if ( v50 == 1 ) - v51 = *off_4017D8 == v19; - if ( v51 ) + v51 = off_4017D8[2]; + v52 = v51 == 1; + if ( v51 == 1 ) + v52 = *off_4017D8 == v19; + if ( v52 ) { - opm_memcpy_aligned(result: v59, a2: v57, a3: 0x118u, a4: v23); - if ( v59[68] == 16 ) + opm_memcpy_aligned(result: v60, a2: v58, a3: 0x118u, a4: v23); + if ( v60[68] == 16 ) { - opm_asd301_path__h1(a1: (int)v59, a2: 256); - opm_lib_zero_fill_words(result: v58, a2: 0x130u); - v52 = *v46; - v53 = 256; + opm_asd301_path__h1(a1: (int)v60, a2: 256); + opm_lib_zero_fill_words(result: v59, a2: 0x130u); + v53 = *v47; + v54 = 256; if ( ((int (__fastcall *)(int, int *, int, _DWORD *, int *))loc_4029D4)( - a1: v52, - a2: v59, + a1: v53, + a2: v60, a3: 256, - a4: v58, - a5: &v53) == 0 ) + a4: v59, + a5: &v54) == 0 ) { - opm_asd301_path__h1(a1: (int)v58, a2: v59[68]); + opm_asd301_path__h1(a1: (int)v59, a2: v60[68]); goto LABEL_96; } } - else if ( v59[68] == 0 ) + else if ( v60[68] == 0 ) { goto LABEL_96; } @@ -1209,36 +1242,41 @@ LABEL_91: } } LABEL_89: - v42 = (void (__cdecl *)())off_4019BC; + v43 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); - v42(); + v43(); goto LABEL_90; } HIDWORD(v22) = v21[22 * v19 + 1]; - if ( v22 != 0x100000000LL || v56 != 4 || *(_DWORD *)(v18 + 4120) == 0 ) + if ( v22 != 0x100000000LL ) goto LABEL_89; - v35 = opm_rpc_301(); + if ( v57 != 4 ) + goto LABEL_89; + v35 = *(_DWORD *)(v18 + 4120); + if ( v35 == 0 ) + goto LABEL_89; + v36 = sub_40325A(a1: v58[0], a2: v35, a3: v18 + 4124); } else { - if ( v56 != 16 ) + if ( v57 != 16 ) goto LABEL_89; - v28 = v57[0]; - v27 = v57[1]; - v29 = v57[0] == 32; - if ( v57[0] != 32 ) - v29 = v57[0] == 8; + v28 = v58[0]; + v27 = v58[1]; + v29 = v58[0] == 32; + if ( v58[0] != 32 ) + v29 = v58[0] == 8; if ( v29 ) { if ( v21[22 * v19 + 1] != 1 ) goto LABEL_89; } - else if ( v57[0] != 1 || v21[22 * v19 + 1] != 0 ) + else if ( v58[0] != 1 || v21[22 * v19 + 1] != 0 ) { goto LABEL_89; } - if ( v57[1] >= 3u && v57[1] != 0x40000000 - || opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v55, a3: 0x10u) == 0 ) + if ( v58[1] >= 3u && v58[1] != 0x40000000 + || opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v56, a3: 0x10u) == 0 ) { goto LABEL_89; } @@ -1249,18 +1287,18 @@ LABEL_89: { if ( v27 != 0 ) goto LABEL_89; - v36 = &v21[22 * v19]; - v38 = v36[18]; - v37 = v36 + 18; - if ( v38 != 1 ) + v37 = &v21[22 * v19]; + v39 = v37[18]; + v38 = v37 + 18; + if ( v39 != 1 ) goto LABEL_96; - v39 = off_401938; - v40 = *(_DWORD *)off_401938; + v40 = off_401938; + v41 = *(_DWORD *)off_401938; if ( *(_DWORD *)off_401938 == 0 ) goto LABEL_89; - *v37 = 0; - *v39 = v40 - 1; - if ( v40 != 1 ) + *v38 = 0; + *v40 = v41 - 1; + if ( v41 != 1 ) goto LABEL_96; } else @@ -1278,9 +1316,9 @@ LABEL_89: if ( v34 != 0 ) goto LABEL_96; } - v35 = opm_rpc_305(); + v36 = opm_rpc_305(); } - if ( v35 == 0 ) + if ( v36 == 0 ) goto LABEL_96; goto LABEL_89; } @@ -1331,34 +1369,40 @@ int __fastcall sub_401AAC( int v26; // r3 void (__cdecl *v27)(); // r4 int v28; // r0 - int v29; // r0 - int v30; // r0 - int v31; // r0 - int v32; // r0 - int v33; // r1 + int *v29; // r1 + int *v30; // r4 + _DWORD *v31; // r4 + int v32; // t1 + int v33; // r0 int v34; // r0 - int *v35; // r1 - int *v36; // r4 - bool v37; // zf - int v38; // r4 + int v35; // r0 + int v36; // r0 + int v37; // r1 + int v38; // r0 + int *v39; // r1 + int *v40; // r1 + int *v41; // r1 + _QWORD *v42; // r4 + bool v43; // zf + int v44; // r4 unsigned int unk00; // r5 - int *v40; // r8 - int v41; // r0 - int v42; // [sp+0h] [bp-FFCh] - int v43; // [sp+4h] [bp-FF8h] - int v44; // [sp+8h] [bp-FF4h] - int v45; // [sp+Ch] [bp-FF0h] - int v46; // [sp+10h] [bp-FECh] - int v47; // [sp+14h] [bp-FE8h] - int v48; // [sp+18h] [bp-FE4h] - int v49; // [sp+1Ch] [bp-FE0h] - struct tee_fmt_state v50; // [sp+20h] [bp-FDCh] BYREF - int v51; // [sp+FF8h] [bp-4h] + int *v46; // r8 + int v47; // r0 + int v48; // [sp+0h] [bp-FFCh] + int v49; // [sp+4h] [bp-FF8h] + int v50; // [sp+8h] [bp-FF4h] + int v51; // [sp+Ch] [bp-FF0h] + int v52; // [sp+10h] [bp-FECh] + int v53; // [sp+14h] [bp-FE8h] + int v54; // [sp+18h] [bp-FE4h] + int v55; // [sp+1Ch] [bp-FE0h] BYREF + struct tee_fmt_state v56; // [sp+20h] [bp-FDCh] BYREF + int v57; // [sp+FF8h] [bp-4h] v11 = (_DWORD *)off_401F44; v12 = a1; v13 = 264; - v51 = *(_DWORD *)off_401F44; + v57 = *(_DWORD *)off_401F44; if ( a2 != 16 ) goto LABEL_8; if ( a1 == nullptr ) @@ -1388,73 +1432,73 @@ int __fastcall sub_401AAC( v19 = &v18[22 * a3]; v21 = v19[1]; v20 = v19 + 1; - v48 = v21; + v54 = v21; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F4C, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F50, a3: 0x10u) == 0 ) { if ( a7 != 32 ) - goto LABEL_80; - v50.unk00 = 0; - v28 = opm_rpc_102(); + goto LABEL_81; + v56.unk00 = 0; + v28 = sub_403186(a1: (*off_401F48)[22 * v17 + 13], a2: &v56); if ( v28 != 0 ) goto LABEL_44; - if ( v50.unk00 - 1 > 4 ) - v30 = -1; + if ( v56.unk00 - 1 > 4 ) + v34 = -1; else - v30 = dword_401FB0[v50.unk00 - 1]; - goto LABEL_58; + v34 = dword_401FB0[v56.unk00 - 1]; + goto LABEL_59; } if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F54, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F58, a3: 0x10u) == 0 ) { - v31 = 0; - goto LABEL_60; + v35 = 0; + goto LABEL_61; } if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F5C, a3: 0x10u) == 0 ) - goto LABEL_54; + goto LABEL_55; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F60, a3: 0x10u) == 0 ) { - v31 = 1; -LABEL_60: - v42 = (int)v9; - v43 = a7; - v44 = (int)v10; - v45 = v31; - v32 = sub_4022B8(a1: v17, a2: v48, a3: p_unk04, a4: a5); + v35 = 1; LABEL_61: - v13 = v32; - if ( v32 != 0 ) + v48 = (int)v9; + v49 = a7; + v50 = (int)v10; + v51 = v35; + v36 = sub_4022B8(a1: v17, a2: v54, a3: p_unk04, a4: a5); +LABEL_62: + v13 = v36; + if ( v36 != 0 ) goto LABEL_8; - goto LABEL_62; + goto LABEL_63; } if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F64, a3: 0x10u) == 0 ) - goto LABEL_54; + goto LABEL_55; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F68, a3: 0x10u) == 0 ) - goto LABEL_62; + goto LABEL_63; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F6C, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F70, a3: 0x10u) == 0 ) { -LABEL_54: - v32 = sub_402594(a1: v9, a2: a7); - goto LABEL_61; +LABEL_55: + v36 = sub_402594(a1: v9, a2: a7); + goto LABEL_62; } - if ( __PAIR64__(v48, opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F74, a3: 0x10u)) == 0x100000000LL - || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F78, a3: 0x10u) | v48) == 0 ) + if ( __PAIR64__(v54, opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F74, a3: 0x10u)) == 0x100000000LL + || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F78, a3: 0x10u) | v54) == 0 ) { if ( a7 != 32 ) - goto LABEL_80; + goto LABEL_81; v9[5] = 0; v9 += 5; - v50.unk00 = 0; - v34 = opm_rpc_300(); - if ( v34 != 0 ) + v56.unk00 = 0; + v38 = sub_403234(a1: v9, a2: 0, a3: &v56, a4: 0); + if ( v38 != 0 ) { - v13 = v34; + v13 = v38; *v10 = dword_401FA4; - goto LABEL_81; + goto LABEL_82; } } else if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F7C, a3: 0x10u) != 0 ) @@ -1462,17 +1506,17 @@ LABEL_54: if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F80, a3: 0x10u) != 0 ) { v22 = opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F84, a3: 0x10u); - v23 = v48 == 1; - if ( v48 == 1 ) + v23 = v54 == 1; + if ( v54 == 1 ) v23 = v22 == 0; - if ( v23 || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F88, a3: 0x10u) | v48) == 0 ) - goto LABEL_62; + if ( v23 || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F88, a3: 0x10u) | v54) == 0 ) + goto LABEL_63; v10 = a5; v24 = opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F8C, a3: 0x10u); - v25 = v48 == 1; - if ( v48 == 1 ) + v25 = v54 == 1; + if ( v54 == 1 ) v25 = v24 == 0; - if ( !v25 && (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F90, a3: 0x10u) | v48) != 0 ) + if ( !v25 && (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F90, a3: 0x10u) | v54) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F94, a3: 0x10u) != 0 ) { @@ -1480,51 +1524,51 @@ LABEL_54: } else { - v37 = a5 == (_DWORD *)4056; + v43 = a5 == (_DWORD *)4056; if ( a5 == (_DWORD *)4056 ) - v37 = a7 == 20; + v43 = a7 == 20; v13 = 264; - if ( v37 ) + if ( v43 ) { - v38 = 0; + v44 = 0; v9[4] = 0; opm_lib_thunk_tailjump( - a1: &v50, + a1: &v56, a2: (int)p_unk04, a3: 4056, a4: v26, - a5: v42, - a6: v43, - a7: v44, - a8: v45, - a9: v46, - a10: v47, - a11: v48, - a12: v49, - a13: v50.unk00); - p_unk04 = &v50.unk04; - unk00 = v50.unk00; - v40 = (int *)off_401F98; + a5: v48, + a6: v49, + a7: v50, + a8: v51, + a9: v52, + a10: v53, + a11: v54, + a12: v55, + a13: v56.unk00); + p_unk04 = &v56.unk04; + unk00 = v56.unk00; + v46 = (int *)off_401F98; while ( 1 ) { - v12 = (unsigned int *)(v38 * 4 + 16); - if ( v38 == 28 ) + v12 = (unsigned int *)(v44 * 4 + 16); + if ( v44 == 28 ) break; - v41 = opm_memcmp_be(a1: (unsigned int *)&v40[v38], a2: &v50.unk04, a3: unk00); - v38 += 4; - if ( v41 == 0 ) + v47 = opm_memcmp_be(a1: (unsigned int *)&v46[v44], a2: &v56.unk04, a3: unk00); + v44 += 4; + if ( v47 == 0 ) { v9[4] = dword_401F9C; - goto LABEL_62; + goto LABEL_63; } } v13 = 688; } -LABEL_81: +LABEL_82: v27 = (void (__cdecl *)())off_401FA0; off_401FA0(a1: 7, a2: 61440); v27(); -LABEL_82: +LABEL_83: v27(); } LABEL_8: @@ -1536,90 +1580,99 @@ LABEL_8: } if ( a7 != 32 ) goto LABEL_41; - v30 = 1; - goto LABEL_58; + v34 = 1; + goto LABEL_59; } if ( a7 != 32 ) { -LABEL_80: +LABEL_81: v13 = 264; - goto LABEL_81; + goto LABEL_82; } - v35 = (int *)off_401F48; + v40 = (int *)off_401F48; v9[6] = 0; v9[7] = 0; - v36 = &v35[22 * v17 + 16]; - v13 = opm_rpc_107(); + v41 = &v40[22 * v17]; + v42 = v41 + 16; + v13 = sub_4031A8(a1: v41[13], a2: v41 + 16); if ( v13 != 0 ) - goto LABEL_81; - *((_QWORD *)v9 + 3) = *(_QWORD *)v36; + goto LABEL_82; + *((_QWORD *)v9 + 3) = *v42; } else { if ( a7 != 32 ) - goto LABEL_80; + goto LABEL_81; + v39 = (int *)off_401F48; v9[5] = 0; - v50.unk00 = 0; - v13 = opm_rpc_102(); - if ( v50.unk00 != 1 ) + v56.unk00 = 0; + v13 = sub_403186(a1: v39[22 * v17 + 13], a2: &v56); + if ( v56.unk00 != 1 ) { v13 = 608; - goto LABEL_81; + goto LABEL_82; } v9[5] = 1; if ( v13 != 0 ) - goto LABEL_81; + goto LABEL_82; } } else { if ( a7 != 32 ) - goto LABEL_80; - opm_lib_zero_fill_words(result: &v50, a2: 0x28u); + goto LABEL_81; + opm_lib_zero_fill_words(result: &v56, a2: 0x28u); v9[5] = 0; v28 = opm_rpc_200(); if ( v28 != 0 ) { LABEL_44: v13 = v28; - goto LABEL_81; + goto LABEL_82; } - v33 = dword_401FA8; - if ( LOBYTE(v50.unk00) == 0 ) - v33 = 3; - v9[5] = v33; + v37 = dword_401FA8; + if ( LOBYTE(v56.unk00) == 0 ) + v37 = 3; + v9[5] = v37; } } else { if ( a7 != 32 ) - goto LABEL_80; + goto LABEL_81; + v29 = (int *)off_401F48; v9[5] = 0; - v50.unk00 = 0; - v13 = opm_rpc_105(); + v56.unk00 = 0; + v30 = &v29[22 * v17]; + v32 = v30[13]; + v31 = v30 + 13; + v13 = sub_403164(a1: v32, a2: &v56); if ( v13 != 0 ) - goto LABEL_81; + goto LABEL_82; if ( *v20 == 0 ) { - v30 = v9[5] | 1; - goto LABEL_58; + v34 = v9[5] | 1; + goto LABEL_59; } if ( *v20 != 1 ) { v13 = 260; - goto LABEL_81; + goto LABEL_82; } - v49 = 0; - v28 = opm_rpc_102(); + v55 = 0; + v28 = sub_403186(a1: *v31, a2: &v55); if ( v28 != 0 ) goto LABEL_44; - v29 = v9[5]; - v9[5] = v29 | 8; - if ( (v50.unk00 & 2) != 0 && *off_401FAC != 0 ) + if ( v55 != 4 ) { - v30 = v29 | 0x28; -LABEL_58: - v9[5] = v30; + v33 = v9[5]; + v9[5] = v33 | 8; + if ( (v56.unk00 & 2) != 0 && *off_401FAC != 0 ) + { + v34 = v33 | 0x28; +LABEL_59: + v9[5] = v34; + } } } } @@ -1627,7 +1680,7 @@ LABEL_58: { if ( a7 != 72 ) goto LABEL_41; - if ( v48 != 0 ) + if ( v54 != 0 ) { *v10 = dword_401FA4 + 6; LABEL_41: @@ -1635,15 +1688,15 @@ LABEL_41: off_401FA0(a1: 7, a2: 61440); v27(); v13 = 264; - goto LABEL_82; + goto LABEL_83; } } -LABEL_62: +LABEL_63: v13 = 0; LABEL_9: - if ( *v11 == v51 ) + if ( *v11 == v57 ) return v13; - ((void (__fastcall *)(int))loc_403144)(a1: *v11 - v51); + ((void (__fastcall *)(int))loc_403144)(a1: *v11 - v57); } } diff --git a/fw/decomp/opm_25.0.0.66_0aa202d0.c b/fw/decomp/opm_25.0.0.66_0aa202d0.c index 031e3b9..133d281 100644 --- a/fw/decomp/opm_25.0.0.66_0aa202d0.c +++ b/fw/decomp/opm_25.0.0.66_0aa202d0.c @@ -1,7 +1,7 @@ /* opm 25.0.0.66 (0aa202d0) -- named functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf - * functions: 54 total in build, 38 named, 16 anonymous + * functions: 54 total in build, 35 named, 19 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 @@ -315,7 +315,7 @@ LABEL_6: goto LABEL_6; } v6 = &(*off_402590)[22 * v3]; - sub_402FA8(a1: v6 + 2, a2: 16); + opm_rpc_35(); v7 = (char *)ctx + 9244; v8 = v6[3]; v9 = v6[4]; @@ -941,44 +941,14 @@ int *__fastcall opm_memcpy_aligned(int *result, int *a2, unsigned int a3, int a4 return result; } -/* ==== opm_rpc_102 [tier=SVCOP size=34] ==== */ -int opm_rpc_102() +/* ==== opm_rpc_2 [tier=SVCOP size=36] ==== */ +int opm_rpc_2() { - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - opm_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== opm_rpc_105 [tier=SVCOP size=34] ==== */ -int opm_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_rpc_107 [tier=SVCOP size=34] ==== */ -int opm_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_rpc_161 [tier=SVCOP size=46] ==== */ -int opm_rpc_161() -{ - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x18u); + opm_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } - return 2; + return 1; } /* ==== opm_rpc_200 [tier=SVCOP size=32] ==== */ @@ -1011,24 +981,14 @@ int opm_rpc_208() return 2; } -/* ==== opm_rpc_300 [tier=SVCOP size=38] ==== */ -int opm_rpc_300() +/* ==== opm_rpc_3 [tier=SVCOP size=42] ==== */ +int opm_rpc_3() { - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - opm_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== opm_rpc_301 [tier=SVCOP size=36] ==== */ -int opm_rpc_301() -{ - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x18u); + opm_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } - return 2; + return 1; } /* ==== opm_rpc_304 [tier=SVCOP size=28] ==== */ @@ -1051,6 +1011,16 @@ int opm_rpc_305() return 2; } +/* ==== opm_rpc_35 [tier=SVCOP size=42] ==== */ +int opm_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_1 [tier=MNEM size=60] ==== */ int opm_sysdrv_rpc_1() { diff --git a/fw/decomp/opm_25.0.0.66_0aa202d0.index.json b/fw/decomp/opm_25.0.0.66_0aa202d0.index.json index b715dff..126e659 100644 --- a/fw/decomp/opm_25.0.0.66_0aa202d0.index.json +++ b/fw/decomp/opm_25.0.0.66_0aa202d0.index.json @@ -234,9 +234,9 @@ { "addr": "0x402f5e", "ida_name": "sub_402F5E", - "name": null, + "name": "opm_rpc_2", "size": 36, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x402f82", @@ -248,9 +248,9 @@ { "addr": "0x402fa8", "ida_name": "sub_402FA8", - "name": null, + "name": "opm_rpc_35", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x402fd2", @@ -276,9 +276,9 @@ { "addr": "0x403068", "ida_name": "sub_403068", - "name": null, + "name": "opm_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x403092", @@ -297,30 +297,30 @@ { "addr": "0x403164", "ida_name": "sub_403164", - "name": "opm_rpc_105", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x403186", "ida_name": "sub_403186", - "name": "opm_rpc_102", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4031a8", "ida_name": "sub_4031A8", - "name": "opm_rpc_107", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4031ca", "ida_name": "sub_4031CA", - "name": "opm_rpc_161", + "name": null, "size": 46, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4031f8", @@ -339,16 +339,16 @@ { "addr": "0x403234", "ida_name": "sub_403234", - "name": "opm_rpc_300", + "name": null, "size": 38, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x40325a", "ida_name": "sub_40325A", - "name": "opm_rpc_301", + "name": null, "size": 36, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x40327e", diff --git a/fw/decomp/opm_25.0.0.69_1b85ada0.anon.c b/fw/decomp/opm_25.0.0.69_1b85ada0.anon.c index 739cf55..4b15b22 100644 --- a/fw/decomp/opm_25.0.0.69_1b85ada0.anon.c +++ b/fw/decomp/opm_25.0.0.69_1b85ada0.anon.c @@ -1,7 +1,7 @@ /* opm 25.0.0.69 (1b85ada0) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf - * functions: 54 total in build, 38 named, 16 anonymous + * functions: 54 total in build, 35 named, 19 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 @@ -137,34 +137,64 @@ int __fastcall sub_4030BA(char *a1, char *a2, int a3) return v3; } +/* ==== ANON size=34 ==== */ +int sub_4031AE() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ +int sub_4031D0() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ +int sub_40318C() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + /* ==== ANON size=36 ==== */ -int sub_402F86() +int sub_403282() { - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x20u); + opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } -/* ==== ANON size=42 ==== */ -int sub_402FD0() +/* ==== ANON size=38 ==== */ +int sub_40325C() { - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } -/* ==== ANON size=42 ==== */ -int sub_403090() +/* ==== ANON size=46 ==== */ +int sub_4031F2() { - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x20u); + opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } /* ==== ANON size=46 ==== */ @@ -696,7 +726,7 @@ int __fastcall sub_4028D8(unsigned int a1, int a2, int a3, int a4) { v5 = 1298; } - else if ( sub_403090(a1: 0, a2: 0) != 0 ) + else if ( opm_rpc_3() != 0 ) { v5 = 1299; } @@ -751,20 +781,21 @@ int __fastcall sub_4022B8(int a1, int a2, int a3, unsigned int a4, int a5, int a unsigned int v25; // r0 bool v26; // zf int v27; // r0 - bool v28; // zf - void (__cdecl *v29)(); // r8 - int v30; // r0 - void (__cdecl *v31)(); // r6 - unsigned int v32; // r0 - bool v33; // zf - int v34; // [sp+0h] [bp-1Ch] - int v35; // [sp+4h] [bp-18h] - _DWORD *v36; // [sp+4h] [bp-18h] - int v37; // [sp+8h] [bp-14h] BYREF - int v38; // [sp+Ch] [bp-10h] - int v39; // [sp+10h] [bp-Ch] - int v40; // [sp+14h] [bp-8h] - int v41; // [sp+18h] [bp-4h] + int v28; // r0 + bool v29; // zf + void (__cdecl *v30)(); // r8 + int v31; // r0 + void (__cdecl *v32)(); // r6 + unsigned int v33; // r0 + bool v34; // zf + int v35; // [sp+0h] [bp-1Ch] + int v36; // [sp+4h] [bp-18h] + _DWORD *v37; // [sp+4h] [bp-18h] + int v38; // [sp+8h] [bp-14h] BYREF + int v39; // [sp+Ch] [bp-10h] BYREF + int v40; // [sp+10h] [bp-Ch] BYREF + int v41; // [sp+14h] [bp-8h] BYREF + int v42; // [sp+18h] [bp-4h] BYREF int savedregs[9]; // [sp+1Ch] [bp+0h] v10 = 264; @@ -780,33 +811,33 @@ int __fastcall sub_4022B8(int a1, int a2, int a3, unsigned int a4, int a5, int a goto LABEL_8; *(_DWORD *)(a5 + 20) = 0; opm_lib_thunk_tailjump( - a1: (struct tee_fmt_state *)&v37, + a1: (struct tee_fmt_state *)&v38, a2: a3, a3: a4, a4, - a5: v34, - a6: v35, + a5: v35, + a6: v36, a7: 0, - a8: v38, - a9: v39, - a10: v40, - a11: v41, + a8: v39, + a9: v40, + a10: v41, + a11: v42, a12: savedregs[0], a13: savedregs[1]); - v15 = v37; - if ( a2 != 0 && v37 == 1 ) + v15 = v38; + if ( a2 != 0 && v38 == 1 ) { v16 = dword_402514; LABEL_18: *v8 = v16; return 0; } - if ( a2 != 1 && v37 == 8 || a2 != 1 && v37 == 32 ) + if ( a2 != 1 && v38 == 8 || a2 != 1 && v38 == 32 ) { v16 = dword_402514 + 3; goto LABEL_18; } - switch ( v37 ) + switch ( v38 ) { case 1: case 8: @@ -821,7 +852,7 @@ LABEL_18: case 7: goto LABEL_47; default: - if ( v37 != 32 ) + if ( v38 != 32 ) { LABEL_47: v10 = 264; @@ -834,67 +865,68 @@ LABEL_23: v20 = v18 + 14; if ( v18[14] == 0 ) { - v40 = 0; + v27 = v18[13]; v41 = 0; - v38 = 0; + v42 = 0; v39 = 0; - v27 = opm_rpc_161(); - v28 = v27 == 7; - if ( v27 != 7 ) + v40 = 0; + v28 = sub_4031F2(a1: v27, a2: &v42, a3: &v41, a4: &v40, a5: &v39); + v29 = v28 == 7; + if ( v28 != 7 ) { - v10 = v27; - v28 = v27 == 0; + v10 = v28; + v29 = v28 == 0; } - if ( !v28 ) + if ( !v29 ) goto LABEL_57; - if ( v40 == 3 ) + if ( v41 == 3 ) { - if ( v38 == 1 ) + if ( v39 == 1 ) { - v33 = v15 == 32; - v30 = 1; + v34 = v15 == 32; + v31 = 1; if ( v15 == 32 ) - v33 = v39 == 2; - if ( v33 ) + v34 = v40 == 2; + if ( v34 ) { - v30 = 2; + v31 = 2; if ( v17[22 * a1 + 20] != 2 && a8 == 0 ) - v30 = 1; + v31 = 1; } goto LABEL_60; } - if ( v38 == 2 ) + if ( v39 == 2 ) { v10 = 269; *(_DWORD *)(a5 + 16) = 1; *(_DWORD *)(a5 + 20) = 0; LABEL_57: - v29 = (void (__cdecl *)())off_402EC8; + v30 = (void (__cdecl *)())off_402EC8; off_402EC8(a1: 7, a2: 61440); - v29(); - v29(); + v30(); + v30(); goto LABEL_63; } } else { - v38 = 0; + v39 = 0; } - v30 = 0; - v38 = 0; + v31 = 0; + v39 = 0; LABEL_60: - *(_DWORD *)(a5 + 20) = v30; + *(_DWORD *)(a5 + 20) = v31; v10 = 0; goto LABEL_63; } v21 = 0; v22 = 0; - v39 = 0; v40 = 0; v41 = 0; + v42 = 0; *(_DWORD *)(a5 + 20) = 0x40000000; - v38 = 0; - v36 = v18 + 20; + v39 = 0; + v37 = v18 + 20; while ( 1 ) { if ( v22 == 32 ) @@ -910,7 +942,7 @@ LABEL_43: } if ( v21 > 4 ) goto LABEL_48; - v23 = opm_rpc_161(); + v23 = sub_4031F2(a1: v22, a2: &v42, a3: &v41, a4: &v40, a5: &v39); v24 = v23 == 7; if ( v23 != 7 ) { @@ -919,30 +951,30 @@ LABEL_43: } if ( !v24 ) goto LABEL_61; - if ( v40 != 3 ) + if ( v41 != 3 ) { - v38 = 0; + v39 = 0; goto LABEL_37; } - if ( v38 == 1 ) + if ( v39 == 1 ) { v26 = v15 == 32; v25 = 1; if ( v15 == 32 ) - v26 = v39 == 2; + v26 = v40 == 2; if ( v26 ) { v25 = 2; - if ( *v36 != 2 && a8 == 0 ) + if ( *v37 != 2 && a8 == 0 ) v25 = 1; } goto LABEL_41; } - if ( v38 != 2 ) + if ( v39 != 2 ) { LABEL_37: v25 = 0; - v38 = 0; + v39 = 0; LABEL_41: ++v21; if ( v25 < *(_DWORD *)(a5 + 20) ) @@ -953,19 +985,19 @@ LABEL_41: *(_DWORD *)(a5 + 16) = 1; *(_DWORD *)(a5 + 20) = 0; LABEL_61: - v31 = (void (__cdecl *)())off_4025C4; + v32 = (void (__cdecl *)())off_4025C4; off_4025C4(a1: 7, a2: 61440); - v31(); - v31(); + v32(); + v32(); LABEL_62: v17 = (int *)off_402590; v19 = a8; LABEL_63: if ( v19 == 0 ) { - v32 = v17[22 * a1 + 20]; - if ( v32 <= *(_DWORD *)(a5 + 20) ) - *(_DWORD *)(a5 + 20) = v32; + v33 = v17[22 * a1 + 20]; + if ( v33 <= *(_DWORD *)(a5 + 20) ) + *(_DWORD *)(a5 + 20) = v33; if ( opm_rpc_304() != 0 ) *(_DWORD *)(a5 + 20) = 0; } @@ -1014,36 +1046,37 @@ int __fastcall sub_4012CC(int a1, int a2, unsigned int a3) int v32; // t1 _DWORD *v33; // r2 int v34; // r1 - int v35; // r0 - int *v36; // r0 - _DWORD *v37; // r0 - int v38; // t1 - _DWORD *v39; // r1 - int v40; // r2 - int *v41; // r0 - void (__cdecl *v42)(); // r4 - int v43; // r1 - int *v44; // r6 - int v45; // r0 - int *v46; // r6 - int v47; // t1 - int v48; // r1 - bool v49; // zf - int v50; // r1 - bool v51; // zf - int v52; // r0 - int v53; // [sp+Ch] [bp-1384h] BYREF - int v54[4]; // [sp+10h] [bp-1380h] BYREF - unsigned int v55[5]; // [sp+20h] [bp-1370h] BYREF - int v56; // [sp+34h] [bp-135Ch] - int v57[1010]; // [sp+38h] [bp-1358h] BYREF - _DWORD v58[76]; // [sp+1010h] [bp-380h] BYREF - int v59[82]; // [sp+1140h] [bp-250h] BYREF - struct tee_fmt_state v60[6]; // [sp+1288h] [bp-108h] BYREF - int v61; // [sp+138Ch] [bp-4h] + int v35; // r1 + int v36; // r0 + int *v37; // r0 + _DWORD *v38; // r0 + int v39; // t1 + _DWORD *v40; // r1 + int v41; // r2 + int *v42; // r0 + void (__cdecl *v43)(); // r4 + int v44; // r1 + int *v45; // r6 + int v46; // r0 + int *v47; // r6 + int v48; // t1 + int v49; // r1 + bool v50; // zf + int v51; // r1 + bool v52; // zf + int v53; // r0 + int v54; // [sp+Ch] [bp-1384h] BYREF + int v55[4]; // [sp+10h] [bp-1380h] BYREF + unsigned int v56[5]; // [sp+20h] [bp-1370h] BYREF + int v57; // [sp+34h] [bp-135Ch] + int v58[1010]; // [sp+38h] [bp-1358h] BYREF + _DWORD v59[76]; // [sp+1010h] [bp-380h] BYREF + int v60[82]; // [sp+1140h] [bp-250h] BYREF + struct tee_fmt_state v61[6]; // [sp+1288h] [bp-108h] BYREF + int v62; // [sp+138Ch] [bp-4h] v9 = off_4021D8; - v61 = *off_4021D8; + v62 = *off_4021D8; if ( a1 != 0 ) { v5 = a2; @@ -1052,25 +1085,25 @@ int __fastcall sub_4012CC(int a1, int a2, unsigned int a3) v3 = a3; if ( a3 <= 0x100 ) { - v4 = v60; + v4 = v61; v11 = 256 - a3; if ( a3 > 0xFF ) v11 = 0; - opm_lib_zero_fill_bytes(result: (_BYTE *)v60 + a3, a2: v11); + opm_lib_zero_fill_bytes(result: (_BYTE *)v61 + a3, a2: v11); opm_lib_thunk_tailjump( - a1: v60, + a1: v61, a2: a1, a3: v3, a4: v12, - a5: v60[0].unk00, - a6: v60[0].unk04, - a7: v60[0].field08, - a8: v60[0].unk0C, - a9: v60[0].field10, - a10: v60[0].field14, - a11: v60[0].field18, - a12: v60[0].field1C, - a13: v60[0].field20); + a5: v61[0].unk00, + a6: v61[0].unk04, + a7: v61[0].field08, + a8: v61[0].unk0C, + a9: v61[0].field10, + a10: v61[0].field14, + a11: v61[0].field18, + a12: v61[0].field1C, + a13: v61[0].field20); while ( v3 != 0 ) { unk00 = v4->unk00; @@ -1080,21 +1113,21 @@ int __fastcall sub_4012CC(int a1, int a2, unsigned int a3) } } } - result = *v9 - v61; - if ( *v9 != v61 ) + result = *v9 - v62; + if ( *v9 != v62 ) { v15 = ((int (__fastcall *)(int))loc_40316C)(a1: result); - v59[73] = v3; - v59[74] = (int)v4; - v59[75] = v5; - v59[76] = a1; - v59[77] = (int)v9; - v59[78] = v6; - v59[79] = v7; - v59[80] = v8; - v59[81] = v17; + v60[73] = v3; + v60[74] = (int)v4; + v60[75] = v5; + v60[76] = a1; + v60[77] = (int)v9; + v60[78] = v6; + v60[79] = v7; + v60[80] = v8; + v60[81] = v17; v18 = v15; - v59[71] = *off_4021D8; + v60[71] = *off_4021D8; if ( v15 == 0 || (unsigned int)(v19 = *(_DWORD *)(v15 + 16)) >= 0x40 ) { v20 = (void (__cdecl *)())off_402270; @@ -1105,60 +1138,60 @@ int __fastcall sub_4012CC(int a1, int a2, unsigned int a3) v21 = (int *)off_40226C; if ( (*off_40226C)[22 * v19] == 3 ) { - opm_memcpy_aligned(result: v54, a2: (int *)(v15 + 24), a3: 0x1000u, a4: v16); - if ( v21[22 * v19 + 11] == v55[4] ) + opm_memcpy_aligned(result: v55, a2: (int *)(v15 + 24), a3: 0x1000u, a4: v16); + if ( v21[22 * v19 + 11] == v56[4] ) { - if ( sub_4028D8(a1: v19, a2: v55, a3: 4080, a4: v54) != 0 ) + if ( sub_4028D8(a1: v19, a2: v56, a3: 4080, a4: v55) != 0 ) goto LABEL_91; - if ( opm_memcmp_be(a1: (unsigned int *)off_4017A0, a2: v55, a3: 0x10u) != 0 - && opm_memcmp_be(a1: (unsigned int *)off_4017A4, a2: v55, a3: 0x10u) != 0 - && opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v55, a3: 0x10u) != 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017A0, a2: v56, a3: 0x10u) != 0 + && opm_memcmp_be(a1: (unsigned int *)off_4017A4, a2: v56, a3: 0x10u) != 0 + && opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v56, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017AC, a2: v55, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017AC, a2: v56, a3: 0x10u) == 0 ) goto LABEL_96; - LODWORD(v22) = opm_memcmp_be(a1: (unsigned int *)off_4017B0, a2: v55, a3: 0x10u); + LODWORD(v22) = opm_memcmp_be(a1: (unsigned int *)off_4017B0, a2: v56, a3: 0x10u); if ( (_DWORD)v22 != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017B4, a2: v55, a3: 0x10u) != 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017B4, a2: v56, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017B8, a2: v55, a3: 0x10u) == 0 - || opm_memcmp_be(a1: (unsigned int *)off_4017BC, a2: v55, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017B8, a2: v56, a3: 0x10u) == 0 + || opm_memcmp_be(a1: (unsigned int *)off_4017BC, a2: v56, a3: 0x10u) == 0 ) { - v41 = off_4017D8; + v42 = off_4017D8; if ( off_4017D8[2] == 1 ) { if ( *off_4017D8 != v19 ) { LABEL_65: - v42 = (void (__cdecl *)())off_4019BC; + v43 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); - v42(); + v43(); LABEL_90: - v42(); + v43(); goto LABEL_91; } } else { *off_4017D8 = v19; - v41[2] = 1; - if ( v41[1] == 1 ) - v43 = 0; + v42[2] = 1; + if ( v42[1] == 1 ) + v44 = 0; else - v43 = v21[22 * v19 + 15]; - v41[3] = v43; + v44 = v21[22 * v19 + 15]; + v42[3] = v44; } LABEL_96: JUMPOUT(0x401740); } - v24 = opm_memcmp_be(a1: (unsigned int *)off_4017C0, a2: v55, a3: 0x10u); - if ( v24 != 0 && opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v55, a3: 0x10u) != 0 ) + v24 = opm_memcmp_be(a1: (unsigned int *)off_4017C0, a2: v56, a3: 0x10u); + if ( v24 != 0 && opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v56, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017C8, a2: v55, a3: 0x10u) != 0 - && opm_memcmp_be(a1: (unsigned int *)off_4017CC, a2: v55, a3: 0x10u) != 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017C8, a2: v56, a3: 0x10u) != 0 + && opm_memcmp_be(a1: (unsigned int *)off_4017CC, a2: v56, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017D0, a2: v55, a3: 0x10u) == 0 - || opm_memcmp_be(a1: (unsigned int *)off_4017D4, a2: v55, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017D0, a2: v56, a3: 0x10u) == 0 + || opm_memcmp_be(a1: (unsigned int *)off_4017D4, a2: v56, a3: 0x10u) == 0 ) { JUMPOUT(0x401728); } @@ -1166,54 +1199,54 @@ LABEL_91: off_4019BC(a1: 7, a2: 61440); JUMPOUT(0x401702); } - v48 = off_4017D8[2]; - v49 = v48 == 1; - if ( v48 == 1 ) - v49 = *off_4017D8 == v19; - if ( v49 && v56 != 8 ) + v49 = off_4017D8[2]; + v50 = v49 == 1; + if ( v49 == 1 ) + v50 = *off_4017D8 == v19; + if ( v50 && v57 != 8 ) goto LABEL_65; goto LABEL_96; } - v44 = &v21[22 * v19]; - v47 = v44[1]; - v46 = v44 + 1; - v45 = v47; - if ( v47 == 1 ) + v45 = &v21[22 * v19]; + v48 = v45[1]; + v47 = v45 + 1; + v46 = v48; + if ( v48 == 1 ) { if ( v24 != 0 ) goto LABEL_89; } - else if ( v45 != 0 || opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v55, a3: 0x10u) != 0 ) + else if ( v46 != 0 || opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v56, a3: 0x10u) != 0 ) { goto LABEL_89; } - if ( v56 == 280 ) + if ( v57 == 280 ) { - v50 = off_4017D8[2]; - v51 = v50 == 1; - if ( v50 == 1 ) - v51 = *off_4017D8 == v19; - if ( v51 ) + v51 = off_4017D8[2]; + v52 = v51 == 1; + if ( v51 == 1 ) + v52 = *off_4017D8 == v19; + if ( v52 ) { - opm_memcpy_aligned(result: v59, a2: v57, a3: 0x118u, a4: v23); - if ( v59[68] == 16 ) + opm_memcpy_aligned(result: v60, a2: v58, a3: 0x118u, a4: v23); + if ( v60[68] == 16 ) { - opm_asd301_path__h1(a1: (int)v59, a2: 256); - opm_lib_zero_fill_words(result: v58, a2: 0x130u); - v52 = *v46; - v53 = 256; + opm_asd301_path__h1(a1: (int)v60, a2: 256); + opm_lib_zero_fill_words(result: v59, a2: 0x130u); + v53 = *v47; + v54 = 256; if ( ((int (__fastcall *)(int, int *, int, _DWORD *, int *))loc_4029FC)( - a1: v52, - a2: v59, + a1: v53, + a2: v60, a3: 256, - a4: v58, - a5: &v53) == 0 ) + a4: v59, + a5: &v54) == 0 ) { - opm_asd301_path__h1(a1: (int)v58, a2: v59[68]); + opm_asd301_path__h1(a1: (int)v59, a2: v60[68]); goto LABEL_96; } } - else if ( v59[68] == 0 ) + else if ( v60[68] == 0 ) { goto LABEL_96; } @@ -1221,36 +1254,41 @@ LABEL_91: } } LABEL_89: - v42 = (void (__cdecl *)())off_4019BC; + v43 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); - v42(); + v43(); goto LABEL_90; } HIDWORD(v22) = v21[22 * v19 + 1]; - if ( v22 != 0x100000000LL || v56 != 4 || *(_DWORD *)(v18 + 4120) == 0 ) + if ( v22 != 0x100000000LL ) goto LABEL_89; - v35 = opm_rpc_301(); + if ( v57 != 4 ) + goto LABEL_89; + v35 = *(_DWORD *)(v18 + 4120); + if ( v35 == 0 ) + goto LABEL_89; + v36 = sub_403282(a1: v58[0], a2: v35, a3: v18 + 4124); } else { - if ( v56 != 16 ) + if ( v57 != 16 ) goto LABEL_89; - v28 = v57[0]; - v27 = v57[1]; - v29 = v57[0] == 32; - if ( v57[0] != 32 ) - v29 = v57[0] == 8; + v28 = v58[0]; + v27 = v58[1]; + v29 = v58[0] == 32; + if ( v58[0] != 32 ) + v29 = v58[0] == 8; if ( v29 ) { if ( v21[22 * v19 + 1] != 1 ) goto LABEL_89; } - else if ( v57[0] != 1 || v21[22 * v19 + 1] != 0 ) + else if ( v58[0] != 1 || v21[22 * v19 + 1] != 0 ) { goto LABEL_89; } - if ( v57[1] >= 3u && v57[1] != 0x40000000 - || opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v55, a3: 0x10u) == 0 ) + if ( v58[1] >= 3u && v58[1] != 0x40000000 + || opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v56, a3: 0x10u) == 0 ) { goto LABEL_89; } @@ -1261,18 +1299,18 @@ LABEL_89: { if ( v27 != 0 ) goto LABEL_89; - v36 = &v21[22 * v19]; - v38 = v36[18]; - v37 = v36 + 18; - if ( v38 != 1 ) + v37 = &v21[22 * v19]; + v39 = v37[18]; + v38 = v37 + 18; + if ( v39 != 1 ) goto LABEL_96; - v39 = off_401938; - v40 = *(_DWORD *)off_401938; + v40 = off_401938; + v41 = *(_DWORD *)off_401938; if ( *(_DWORD *)off_401938 == 0 ) goto LABEL_89; - *v37 = 0; - *v39 = v40 - 1; - if ( v40 != 1 ) + *v38 = 0; + *v40 = v41 - 1; + if ( v41 != 1 ) goto LABEL_96; } else @@ -1290,9 +1328,9 @@ LABEL_89: if ( v34 != 0 ) goto LABEL_96; } - v35 = opm_rpc_305(); + v36 = opm_rpc_305(); } - if ( v35 == 0 ) + if ( v36 == 0 ) goto LABEL_96; goto LABEL_89; } @@ -1343,34 +1381,40 @@ int __fastcall sub_401AAC( int v26; // r3 void (__cdecl *v27)(); // r4 int v28; // r0 - int v29; // r0 - int v30; // r0 - int v31; // r0 - int v32; // r0 - int v33; // r1 + int *v29; // r1 + int *v30; // r4 + _DWORD *v31; // r4 + int v32; // t1 + int v33; // r0 int v34; // r0 - int *v35; // r1 - int *v36; // r4 - bool v37; // zf - int v38; // r4 + int v35; // r0 + int v36; // r0 + int v37; // r1 + int v38; // r0 + int *v39; // r1 + int *v40; // r1 + int *v41; // r1 + _QWORD *v42; // r4 + bool v43; // zf + int v44; // r4 unsigned int unk00; // r5 - int *v40; // r8 - int v41; // r0 - int v42; // [sp+0h] [bp-FFCh] - int v43; // [sp+4h] [bp-FF8h] - int v44; // [sp+8h] [bp-FF4h] - int v45; // [sp+Ch] [bp-FF0h] - int v46; // [sp+10h] [bp-FECh] - int v47; // [sp+14h] [bp-FE8h] - int v48; // [sp+18h] [bp-FE4h] - int v49; // [sp+1Ch] [bp-FE0h] - struct tee_fmt_state v50; // [sp+20h] [bp-FDCh] BYREF - int v51; // [sp+FF8h] [bp-4h] + int *v46; // r8 + int v47; // r0 + int v48; // [sp+0h] [bp-FFCh] + int v49; // [sp+4h] [bp-FF8h] + int v50; // [sp+8h] [bp-FF4h] + int v51; // [sp+Ch] [bp-FF0h] + int v52; // [sp+10h] [bp-FECh] + int v53; // [sp+14h] [bp-FE8h] + int v54; // [sp+18h] [bp-FE4h] + int v55; // [sp+1Ch] [bp-FE0h] BYREF + struct tee_fmt_state v56; // [sp+20h] [bp-FDCh] BYREF + int v57; // [sp+FF8h] [bp-4h] v11 = (_DWORD *)off_401F44; v12 = a1; v13 = 264; - v51 = *(_DWORD *)off_401F44; + v57 = *(_DWORD *)off_401F44; if ( a2 != 16 ) goto LABEL_8; if ( a1 == nullptr ) @@ -1400,73 +1444,73 @@ int __fastcall sub_401AAC( v19 = &v18[22 * a3]; v21 = v19[1]; v20 = v19 + 1; - v48 = v21; + v54 = v21; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F4C, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F50, a3: 0x10u) == 0 ) { if ( a7 != 32 ) - goto LABEL_80; - v50.unk00 = 0; - v28 = opm_rpc_102(); + goto LABEL_81; + v56.unk00 = 0; + v28 = sub_4031AE(a1: (*off_401F48)[22 * v17 + 13], a2: &v56); if ( v28 != 0 ) goto LABEL_44; - if ( v50.unk00 - 1 > 4 ) - v30 = -1; + if ( v56.unk00 - 1 > 4 ) + v34 = -1; else - v30 = dword_401FB0[v50.unk00 - 1]; - goto LABEL_58; + v34 = dword_401FB0[v56.unk00 - 1]; + goto LABEL_59; } if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F54, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F58, a3: 0x10u) == 0 ) { - v31 = 0; - goto LABEL_60; + v35 = 0; + goto LABEL_61; } if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F5C, a3: 0x10u) == 0 ) - goto LABEL_54; + goto LABEL_55; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F60, a3: 0x10u) == 0 ) { - v31 = 1; -LABEL_60: - v42 = (int)v9; - v43 = a7; - v44 = (int)v10; - v45 = v31; - v32 = sub_4022B8(a1: v17, a2: v48, a3: p_unk04, a4: a5); + v35 = 1; LABEL_61: - v13 = v32; - if ( v32 != 0 ) + v48 = (int)v9; + v49 = a7; + v50 = (int)v10; + v51 = v35; + v36 = sub_4022B8(a1: v17, a2: v54, a3: p_unk04, a4: a5); +LABEL_62: + v13 = v36; + if ( v36 != 0 ) goto LABEL_8; - goto LABEL_62; + goto LABEL_63; } if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F64, a3: 0x10u) == 0 ) - goto LABEL_54; + goto LABEL_55; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F68, a3: 0x10u) == 0 ) - goto LABEL_62; + goto LABEL_63; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F6C, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F70, a3: 0x10u) == 0 ) { -LABEL_54: - v32 = sub_402594(a1: v9, a2: a7); - goto LABEL_61; +LABEL_55: + v36 = sub_402594(a1: v9, a2: a7); + goto LABEL_62; } - if ( __PAIR64__(v48, opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F74, a3: 0x10u)) == 0x100000000LL - || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F78, a3: 0x10u) | v48) == 0 ) + if ( __PAIR64__(v54, opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F74, a3: 0x10u)) == 0x100000000LL + || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F78, a3: 0x10u) | v54) == 0 ) { if ( a7 != 32 ) - goto LABEL_80; + goto LABEL_81; v9[5] = 0; v9 += 5; - v50.unk00 = 0; - v34 = opm_rpc_300(); - if ( v34 != 0 ) + v56.unk00 = 0; + v38 = sub_40325C(a1: v9, a2: 0, a3: &v56, a4: 0); + if ( v38 != 0 ) { - v13 = v34; + v13 = v38; *v10 = dword_401FA4; - goto LABEL_81; + goto LABEL_82; } } else if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F7C, a3: 0x10u) != 0 ) @@ -1474,17 +1518,17 @@ LABEL_54: if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F80, a3: 0x10u) != 0 ) { v22 = opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F84, a3: 0x10u); - v23 = v48 == 1; - if ( v48 == 1 ) + v23 = v54 == 1; + if ( v54 == 1 ) v23 = v22 == 0; - if ( v23 || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F88, a3: 0x10u) | v48) == 0 ) - goto LABEL_62; + if ( v23 || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F88, a3: 0x10u) | v54) == 0 ) + goto LABEL_63; v10 = a5; v24 = opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F8C, a3: 0x10u); - v25 = v48 == 1; - if ( v48 == 1 ) + v25 = v54 == 1; + if ( v54 == 1 ) v25 = v24 == 0; - if ( !v25 && (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F90, a3: 0x10u) | v48) != 0 ) + if ( !v25 && (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F90, a3: 0x10u) | v54) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F94, a3: 0x10u) != 0 ) { @@ -1492,51 +1536,51 @@ LABEL_54: } else { - v37 = a5 == (_DWORD *)4056; + v43 = a5 == (_DWORD *)4056; if ( a5 == (_DWORD *)4056 ) - v37 = a7 == 20; + v43 = a7 == 20; v13 = 264; - if ( v37 ) + if ( v43 ) { - v38 = 0; + v44 = 0; v9[4] = 0; opm_lib_thunk_tailjump( - a1: &v50, + a1: &v56, a2: (int)p_unk04, a3: 4056, a4: v26, - a5: v42, - a6: v43, - a7: v44, - a8: v45, - a9: v46, - a10: v47, - a11: v48, - a12: v49, - a13: v50.unk00); - p_unk04 = &v50.unk04; - unk00 = v50.unk00; - v40 = (int *)off_401F98; + a5: v48, + a6: v49, + a7: v50, + a8: v51, + a9: v52, + a10: v53, + a11: v54, + a12: v55, + a13: v56.unk00); + p_unk04 = &v56.unk04; + unk00 = v56.unk00; + v46 = (int *)off_401F98; while ( 1 ) { - v12 = (unsigned int *)(v38 * 4 + 16); - if ( v38 == 28 ) + v12 = (unsigned int *)(v44 * 4 + 16); + if ( v44 == 28 ) break; - v41 = opm_memcmp_be(a1: (unsigned int *)&v40[v38], a2: &v50.unk04, a3: unk00); - v38 += 4; - if ( v41 == 0 ) + v47 = opm_memcmp_be(a1: (unsigned int *)&v46[v44], a2: &v56.unk04, a3: unk00); + v44 += 4; + if ( v47 == 0 ) { v9[4] = dword_401F9C; - goto LABEL_62; + goto LABEL_63; } } v13 = 688; } -LABEL_81: +LABEL_82: v27 = (void (__cdecl *)())off_401FA0; off_401FA0(a1: 7, a2: 61440); v27(); -LABEL_82: +LABEL_83: v27(); } LABEL_8: @@ -1548,90 +1592,99 @@ LABEL_8: } if ( a7 != 32 ) goto LABEL_41; - v30 = 1; - goto LABEL_58; + v34 = 1; + goto LABEL_59; } if ( a7 != 32 ) { -LABEL_80: +LABEL_81: v13 = 264; - goto LABEL_81; + goto LABEL_82; } - v35 = (int *)off_401F48; + v40 = (int *)off_401F48; v9[6] = 0; v9[7] = 0; - v36 = &v35[22 * v17 + 16]; - v13 = opm_rpc_107(); + v41 = &v40[22 * v17]; + v42 = v41 + 16; + v13 = sub_4031D0(a1: v41[13], a2: v41 + 16); if ( v13 != 0 ) - goto LABEL_81; - *((_QWORD *)v9 + 3) = *(_QWORD *)v36; + goto LABEL_82; + *((_QWORD *)v9 + 3) = *v42; } else { if ( a7 != 32 ) - goto LABEL_80; + goto LABEL_81; + v39 = (int *)off_401F48; v9[5] = 0; - v50.unk00 = 0; - v13 = opm_rpc_102(); - if ( v50.unk00 != 1 ) + v56.unk00 = 0; + v13 = sub_4031AE(a1: v39[22 * v17 + 13], a2: &v56); + if ( v56.unk00 != 1 ) { v13 = 608; - goto LABEL_81; + goto LABEL_82; } v9[5] = 1; if ( v13 != 0 ) - goto LABEL_81; + goto LABEL_82; } } else { if ( a7 != 32 ) - goto LABEL_80; - opm_lib_zero_fill_words(result: &v50, a2: 0x28u); + goto LABEL_81; + opm_lib_zero_fill_words(result: &v56, a2: 0x28u); v9[5] = 0; v28 = opm_rpc_200(); if ( v28 != 0 ) { LABEL_44: v13 = v28; - goto LABEL_81; + goto LABEL_82; } - v33 = dword_401FA8; - if ( LOBYTE(v50.unk00) == 0 ) - v33 = 3; - v9[5] = v33; + v37 = dword_401FA8; + if ( LOBYTE(v56.unk00) == 0 ) + v37 = 3; + v9[5] = v37; } } else { if ( a7 != 32 ) - goto LABEL_80; + goto LABEL_81; + v29 = (int *)off_401F48; v9[5] = 0; - v50.unk00 = 0; - v13 = opm_rpc_105(); + v56.unk00 = 0; + v30 = &v29[22 * v17]; + v32 = v30[13]; + v31 = v30 + 13; + v13 = sub_40318C(a1: v32, a2: &v56); if ( v13 != 0 ) - goto LABEL_81; + goto LABEL_82; if ( *v20 == 0 ) { - v30 = v9[5] | 1; - goto LABEL_58; + v34 = v9[5] | 1; + goto LABEL_59; } if ( *v20 != 1 ) { v13 = 260; - goto LABEL_81; + goto LABEL_82; } - v49 = 0; - v28 = opm_rpc_102(); + v55 = 0; + v28 = sub_4031AE(a1: *v31, a2: &v55); if ( v28 != 0 ) goto LABEL_44; - v29 = v9[5]; - v9[5] = v29 | 8; - if ( (v50.unk00 & 2) != 0 && *off_401FAC != 0 ) + if ( v55 != 4 ) { - v30 = v29 | 0x28; -LABEL_58: - v9[5] = v30; + v33 = v9[5]; + v9[5] = v33 | 8; + if ( (v56.unk00 & 2) != 0 && *off_401FAC != 0 ) + { + v34 = v33 | 0x28; +LABEL_59: + v9[5] = v34; + } } } } @@ -1639,7 +1692,7 @@ LABEL_58: { if ( a7 != 72 ) goto LABEL_41; - if ( v48 != 0 ) + if ( v54 != 0 ) { *v10 = dword_401FA4 + 6; LABEL_41: @@ -1647,15 +1700,15 @@ LABEL_41: off_401FA0(a1: 7, a2: 61440); v27(); v13 = 264; - goto LABEL_82; + goto LABEL_83; } } -LABEL_62: +LABEL_63: v13 = 0; LABEL_9: - if ( *v11 == v51 ) + if ( *v11 == v57 ) return v13; - ((void (__fastcall *)(int))loc_40316C)(a1: *v11 - v51); + ((void (__fastcall *)(int))loc_40316C)(a1: *v11 - v57); } } diff --git a/fw/decomp/opm_25.0.0.69_1b85ada0.c b/fw/decomp/opm_25.0.0.69_1b85ada0.c index 404eddd..25336e1 100644 --- a/fw/decomp/opm_25.0.0.69_1b85ada0.c +++ b/fw/decomp/opm_25.0.0.69_1b85ada0.c @@ -1,7 +1,7 @@ /* 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, 38 named, 16 anonymous + * functions: 54 total in build, 35 named, 19 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 @@ -315,7 +315,7 @@ LABEL_6: goto LABEL_6; } v6 = &(*off_402590)[22 * v3]; - sub_402FD0(a1: v6 + 2, a2: 16); + opm_rpc_35(); v7 = (char *)ctx + 9244; v8 = v6[3]; v9 = v6[4]; @@ -941,44 +941,14 @@ int *__fastcall opm_memcpy_aligned(int *result, int *a2, unsigned int a3, int a4 return result; } -/* ==== opm_rpc_102 [tier=SVCOP size=34] ==== */ -int opm_rpc_102() +/* ==== opm_rpc_2 [tier=SVCOP size=36] ==== */ +int opm_rpc_2() { - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - opm_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== opm_rpc_105 [tier=SVCOP size=34] ==== */ -int opm_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_rpc_107 [tier=SVCOP size=34] ==== */ -int opm_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_rpc_161 [tier=SVCOP size=46] ==== */ -int opm_rpc_161() -{ - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x18u); + opm_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } - return 2; + return 1; } /* ==== opm_rpc_200 [tier=SVCOP size=32] ==== */ @@ -1011,24 +981,14 @@ int opm_rpc_208() return 2; } -/* ==== opm_rpc_300 [tier=SVCOP size=38] ==== */ -int opm_rpc_300() +/* ==== opm_rpc_3 [tier=SVCOP size=42] ==== */ +int opm_rpc_3() { - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - opm_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== opm_rpc_301 [tier=SVCOP size=36] ==== */ -int opm_rpc_301() -{ - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x18u); + opm_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } - return 2; + return 1; } /* ==== opm_rpc_304 [tier=SVCOP size=28] ==== */ @@ -1051,6 +1011,16 @@ int opm_rpc_305() return 2; } +/* ==== opm_rpc_35 [tier=SVCOP size=42] ==== */ +int opm_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_1 [tier=MNEM size=60] ==== */ int opm_sysdrv_rpc_1() { diff --git a/fw/decomp/opm_25.0.0.69_1b85ada0.index.json b/fw/decomp/opm_25.0.0.69_1b85ada0.index.json index 35c1874..545f444 100644 --- a/fw/decomp/opm_25.0.0.69_1b85ada0.index.json +++ b/fw/decomp/opm_25.0.0.69_1b85ada0.index.json @@ -234,9 +234,9 @@ { "addr": "0x402f86", "ida_name": "sub_402F86", - "name": null, + "name": "opm_rpc_2", "size": 36, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x402faa", @@ -248,9 +248,9 @@ { "addr": "0x402fd0", "ida_name": "sub_402FD0", - "name": null, + "name": "opm_rpc_35", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x402ffa", @@ -276,9 +276,9 @@ { "addr": "0x403090", "ida_name": "sub_403090", - "name": null, + "name": "opm_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x4030ba", @@ -297,30 +297,30 @@ { "addr": "0x40318c", "ida_name": "sub_40318C", - "name": "opm_rpc_105", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4031ae", "ida_name": "sub_4031AE", - "name": "opm_rpc_102", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4031d0", "ida_name": "sub_4031D0", - "name": "opm_rpc_107", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4031f2", "ida_name": "sub_4031F2", - "name": "opm_rpc_161", + "name": null, "size": 46, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x403220", @@ -339,16 +339,16 @@ { "addr": "0x40325c", "ida_name": "sub_40325C", - "name": "opm_rpc_300", + "name": null, "size": 38, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x403282", "ida_name": "sub_403282", - "name": "opm_rpc_301", + "name": null, "size": 36, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4032a6", diff --git a/fw/decomp/opm_25.0.0.71_28fa5413.anon.c b/fw/decomp/opm_25.0.0.71_28fa5413.anon.c index 8788bc3..d75327e 100644 --- a/fw/decomp/opm_25.0.0.71_28fa5413.anon.c +++ b/fw/decomp/opm_25.0.0.71_28fa5413.anon.c @@ -1,7 +1,7 @@ /* opm 25.0.0.71 (28fa5413) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf - * functions: 54 total in build, 38 named, 16 anonymous + * functions: 54 total in build, 35 named, 19 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 @@ -137,34 +137,64 @@ int __fastcall sub_4030D2(char *a1, char *a2, int a3) return v3; } +/* ==== ANON size=34 ==== */ +int sub_4031C6() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ +int sub_4031A4() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ +int sub_4031E8() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + /* ==== ANON size=36 ==== */ -int sub_402F9E() +int sub_40329A() { - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x20u); + opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } -/* ==== ANON size=42 ==== */ -int sub_402FE8() +/* ==== ANON size=38 ==== */ +int sub_403274() { - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } -/* ==== ANON size=42 ==== */ -int sub_4030A8() +/* ==== ANON size=46 ==== */ +int sub_40320A() { - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x20u); + opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } /* ==== ANON size=46 ==== */ @@ -706,7 +736,7 @@ int __fastcall sub_4028F0(unsigned int a1, int a2, int a3, int a4) { v5 = 1298; } - else if ( sub_4030A8(a1: 0, a2: 0) != 0 ) + else if ( opm_rpc_3() != 0 ) { v5 = 1299; } @@ -761,20 +791,21 @@ int __fastcall sub_4022B8(int a1, int a2, int a3, unsigned int a4, int a5, int a unsigned int v25; // r0 bool v26; // zf int v27; // r0 - bool v28; // zf - void (__cdecl *v29)(); // r8 - int v30; // r0 - void (__cdecl *v31)(); // r6 - unsigned int v32; // r0 - bool v33; // zf - int v34; // [sp+0h] [bp-1Ch] - int v35; // [sp+4h] [bp-18h] - _DWORD *v36; // [sp+4h] [bp-18h] - int v37; // [sp+8h] [bp-14h] BYREF - int v38; // [sp+Ch] [bp-10h] - int v39; // [sp+10h] [bp-Ch] - int v40; // [sp+14h] [bp-8h] - int v41; // [sp+18h] [bp-4h] + int v28; // r0 + bool v29; // zf + void (__cdecl *v30)(); // r8 + int v31; // r0 + void (__cdecl *v32)(); // r6 + unsigned int v33; // r0 + bool v34; // zf + int v35; // [sp+0h] [bp-1Ch] + int v36; // [sp+4h] [bp-18h] + _DWORD *v37; // [sp+4h] [bp-18h] + int v38; // [sp+8h] [bp-14h] BYREF + int v39; // [sp+Ch] [bp-10h] BYREF + int v40; // [sp+10h] [bp-Ch] BYREF + int v41; // [sp+14h] [bp-8h] BYREF + int v42; // [sp+18h] [bp-4h] BYREF int savedregs[9]; // [sp+1Ch] [bp+0h] v10 = 264; @@ -790,33 +821,33 @@ int __fastcall sub_4022B8(int a1, int a2, int a3, unsigned int a4, int a5, int a goto LABEL_8; *(_DWORD *)(a5 + 20) = 0; opm_lib_thunk_tailjump( - a1: (struct tee_fmt_state *)&v37, + a1: (struct tee_fmt_state *)&v38, a2: a3, a3: a4, a4, - a5: v34, - a6: v35, + a5: v35, + a6: v36, a7: 0, - a8: v38, - a9: v39, - a10: v40, - a11: v41, + a8: v39, + a9: v40, + a10: v41, + a11: v42, a12: savedregs[0], a13: savedregs[1]); - v15 = v37; - if ( a2 != 0 && v37 == 1 ) + v15 = v38; + if ( a2 != 0 && v38 == 1 ) { v16 = dword_402514; LABEL_18: *v8 = v16; return 0; } - if ( a2 != 1 && v37 == 8 || a2 != 1 && v37 == 32 ) + if ( a2 != 1 && v38 == 8 || a2 != 1 && v38 == 32 ) { v16 = dword_402514 + 3; goto LABEL_18; } - switch ( v37 ) + switch ( v38 ) { case 1: case 8: @@ -831,7 +862,7 @@ LABEL_18: case 7: goto LABEL_47; default: - if ( v37 != 32 ) + if ( v38 != 32 ) { LABEL_47: v10 = 264; @@ -844,67 +875,68 @@ LABEL_23: v20 = v18 + 14; if ( v18[14] == 0 ) { - v40 = 0; + v27 = v18[13]; v41 = 0; - v38 = 0; + v42 = 0; v39 = 0; - v27 = opm_rpc_161(); - v28 = v27 == 7; - if ( v27 != 7 ) + v40 = 0; + v28 = sub_40320A(a1: v27, a2: &v42, a3: &v41, a4: &v40, a5: &v39); + v29 = v28 == 7; + if ( v28 != 7 ) { - v10 = v27; - v28 = v27 == 0; + v10 = v28; + v29 = v28 == 0; } - if ( !v28 ) + if ( !v29 ) goto LABEL_57; - if ( v40 == 3 ) + if ( v41 == 3 ) { - if ( v38 == 1 ) + if ( v39 == 1 ) { - v33 = v15 == 32; - v30 = 1; + v34 = v15 == 32; + v31 = 1; if ( v15 == 32 ) - v33 = v39 == 2; - if ( v33 ) + v34 = v40 == 2; + if ( v34 ) { - v30 = 2; + v31 = 2; if ( v17[22 * a1 + 20] != 2 && a8 == 0 ) - v30 = 1; + v31 = 1; } goto LABEL_60; } - if ( v38 == 2 ) + if ( v39 == 2 ) { v10 = 269; *(_DWORD *)(a5 + 16) = 1; *(_DWORD *)(a5 + 20) = 0; LABEL_57: - v29 = (void (__cdecl *)())off_402EE0; + v30 = (void (__cdecl *)())off_402EE0; off_402EE0(a1: 7, a2: 61440); - v29(); - v29(); + v30(); + v30(); goto LABEL_63; } } else { - v38 = 0; + v39 = 0; } - v30 = 0; - v38 = 0; + v31 = 0; + v39 = 0; LABEL_60: - *(_DWORD *)(a5 + 20) = v30; + *(_DWORD *)(a5 + 20) = v31; v10 = 0; goto LABEL_63; } v21 = 0; v22 = 0; - v39 = 0; v40 = 0; v41 = 0; + v42 = 0; *(_DWORD *)(a5 + 20) = 0x40000000; - v38 = 0; - v36 = v18 + 20; + v39 = 0; + v37 = v18 + 20; while ( 1 ) { if ( v22 == 32 ) @@ -920,7 +952,7 @@ LABEL_43: } if ( v21 > 4 ) goto LABEL_48; - v23 = opm_rpc_161(); + v23 = sub_40320A(a1: v22, a2: &v42, a3: &v41, a4: &v40, a5: &v39); v24 = v23 == 7; if ( v23 != 7 ) { @@ -929,30 +961,30 @@ LABEL_43: } if ( !v24 ) goto LABEL_61; - if ( v40 != 3 ) + if ( v41 != 3 ) { - v38 = 0; + v39 = 0; goto LABEL_37; } - if ( v38 == 1 ) + if ( v39 == 1 ) { v26 = v15 == 32; v25 = 1; if ( v15 == 32 ) - v26 = v39 == 2; + v26 = v40 == 2; if ( v26 ) { v25 = 2; - if ( *v36 != 2 && a8 == 0 ) + if ( *v37 != 2 && a8 == 0 ) v25 = 1; } goto LABEL_41; } - if ( v38 != 2 ) + if ( v39 != 2 ) { LABEL_37: v25 = 0; - v38 = 0; + v39 = 0; LABEL_41: ++v21; if ( v25 < *(_DWORD *)(a5 + 20) ) @@ -963,19 +995,19 @@ LABEL_41: *(_DWORD *)(a5 + 16) = 1; *(_DWORD *)(a5 + 20) = 0; LABEL_61: - v31 = (void (__cdecl *)())off_4025C4; + v32 = (void (__cdecl *)())off_4025C4; off_4025C4(a1: 7, a2: 61440); - v31(); - v31(); + v32(); + v32(); LABEL_62: v17 = (int *)off_402590; v19 = a8; LABEL_63: if ( v19 == 0 ) { - v32 = v17[22 * a1 + 20]; - if ( v32 <= *(_DWORD *)(a5 + 20) ) - *(_DWORD *)(a5 + 20) = v32; + v33 = v17[22 * a1 + 20]; + if ( v33 <= *(_DWORD *)(a5 + 20) ) + *(_DWORD *)(a5 + 20) = v33; if ( opm_rpc_304() != 0 ) *(_DWORD *)(a5 + 20) = 0; } @@ -1024,36 +1056,37 @@ int __fastcall sub_4012CC(int a1, int a2, unsigned int a3) int v32; // t1 _DWORD *v33; // r2 int v34; // r1 - int v35; // r0 - int *v36; // r0 - _DWORD *v37; // r0 - int v38; // t1 - _DWORD *v39; // r1 - int v40; // r2 - int *v41; // r0 - void (__cdecl *v42)(); // r4 - int v43; // r1 - int *v44; // r6 - int v45; // r0 - int *v46; // r6 - int v47; // t1 - int v48; // r1 - bool v49; // zf - int v50; // r1 - bool v51; // zf - int v52; // r0 - int v53; // [sp+Ch] [bp-1384h] BYREF - int v54[4]; // [sp+10h] [bp-1380h] BYREF - unsigned int v55[5]; // [sp+20h] [bp-1370h] BYREF - int v56; // [sp+34h] [bp-135Ch] - int v57[1010]; // [sp+38h] [bp-1358h] BYREF - _DWORD v58[76]; // [sp+1010h] [bp-380h] BYREF - int v59[82]; // [sp+1140h] [bp-250h] BYREF - struct tee_fmt_state v60[6]; // [sp+1288h] [bp-108h] BYREF - int v61; // [sp+138Ch] [bp-4h] + int v35; // r1 + int v36; // r0 + int *v37; // r0 + _DWORD *v38; // r0 + int v39; // t1 + _DWORD *v40; // r1 + int v41; // r2 + int *v42; // r0 + void (__cdecl *v43)(); // r4 + int v44; // r1 + int *v45; // r6 + int v46; // r0 + int *v47; // r6 + int v48; // t1 + int v49; // r1 + bool v50; // zf + int v51; // r1 + bool v52; // zf + int v53; // r0 + int v54; // [sp+Ch] [bp-1384h] BYREF + int v55[4]; // [sp+10h] [bp-1380h] BYREF + unsigned int v56[5]; // [sp+20h] [bp-1370h] BYREF + int v57; // [sp+34h] [bp-135Ch] + int v58[1010]; // [sp+38h] [bp-1358h] BYREF + _DWORD v59[76]; // [sp+1010h] [bp-380h] BYREF + int v60[82]; // [sp+1140h] [bp-250h] BYREF + struct tee_fmt_state v61[6]; // [sp+1288h] [bp-108h] BYREF + int v62; // [sp+138Ch] [bp-4h] v9 = off_4021D8; - v61 = *off_4021D8; + v62 = *off_4021D8; if ( a1 != 0 ) { v5 = a2; @@ -1062,25 +1095,25 @@ int __fastcall sub_4012CC(int a1, int a2, unsigned int a3) v3 = a3; if ( a3 <= 0x100 ) { - v4 = v60; + v4 = v61; v11 = 256 - a3; if ( a3 > 0xFF ) v11 = 0; - opm_lib_zero_fill_bytes(result: (_BYTE *)v60 + a3, a2: v11); + opm_lib_zero_fill_bytes(result: (_BYTE *)v61 + a3, a2: v11); opm_lib_thunk_tailjump( - a1: v60, + a1: v61, a2: a1, a3: v3, a4: v12, - a5: v60[0].unk00, - a6: v60[0].unk04, - a7: v60[0].field08, - a8: v60[0].unk0C, - a9: v60[0].field10, - a10: v60[0].field14, - a11: v60[0].field18, - a12: v60[0].field1C, - a13: v60[0].field20); + a5: v61[0].unk00, + a6: v61[0].unk04, + a7: v61[0].field08, + a8: v61[0].unk0C, + a9: v61[0].field10, + a10: v61[0].field14, + a11: v61[0].field18, + a12: v61[0].field1C, + a13: v61[0].field20); while ( v3 != 0 ) { unk00 = v4->unk00; @@ -1090,21 +1123,21 @@ int __fastcall sub_4012CC(int a1, int a2, unsigned int a3) } } } - result = *v9 - v61; - if ( *v9 != v61 ) + result = *v9 - v62; + if ( *v9 != v62 ) { v15 = ((int (__fastcall *)(int))loc_403184)(a1: result); - v59[73] = v3; - v59[74] = (int)v4; - v59[75] = v5; - v59[76] = a1; - v59[77] = (int)v9; - v59[78] = v6; - v59[79] = v7; - v59[80] = v8; - v59[81] = v17; + v60[73] = v3; + v60[74] = (int)v4; + v60[75] = v5; + v60[76] = a1; + v60[77] = (int)v9; + v60[78] = v6; + v60[79] = v7; + v60[80] = v8; + v60[81] = v17; v18 = v15; - v59[71] = *off_4021D8; + v60[71] = *off_4021D8; if ( v15 == 0 || (unsigned int)(v19 = *(_DWORD *)(v15 + 16)) >= 0x40 ) { v20 = (void (__cdecl *)())off_402270; @@ -1115,60 +1148,60 @@ int __fastcall sub_4012CC(int a1, int a2, unsigned int a3) v21 = (int *)off_40226C; if ( (*off_40226C)[22 * v19] == 3 ) { - opm_memcpy_aligned(result: v54, a2: (int *)(v15 + 24), a3: 0x1000u, a4: v16); - if ( v21[22 * v19 + 11] == v55[4] ) + opm_memcpy_aligned(result: v55, a2: (int *)(v15 + 24), a3: 0x1000u, a4: v16); + if ( v21[22 * v19 + 11] == v56[4] ) { - if ( sub_4028F0(a1: v19, a2: v55, a3: 4080, a4: v54) != 0 ) + if ( sub_4028F0(a1: v19, a2: v56, a3: 4080, a4: v55) != 0 ) goto LABEL_91; - if ( opm_memcmp_be(a1: (unsigned int *)off_4017A0, a2: v55, a3: 0x10u) != 0 - && opm_memcmp_be(a1: (unsigned int *)off_4017A4, a2: v55, a3: 0x10u) != 0 - && opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v55, a3: 0x10u) != 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017A0, a2: v56, a3: 0x10u) != 0 + && opm_memcmp_be(a1: (unsigned int *)off_4017A4, a2: v56, a3: 0x10u) != 0 + && opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v56, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017AC, a2: v55, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017AC, a2: v56, a3: 0x10u) == 0 ) goto LABEL_96; - LODWORD(v22) = opm_memcmp_be(a1: (unsigned int *)off_4017B0, a2: v55, a3: 0x10u); + LODWORD(v22) = opm_memcmp_be(a1: (unsigned int *)off_4017B0, a2: v56, a3: 0x10u); if ( (_DWORD)v22 != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017B4, a2: v55, a3: 0x10u) != 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017B4, a2: v56, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017B8, a2: v55, a3: 0x10u) == 0 - || opm_memcmp_be(a1: (unsigned int *)off_4017BC, a2: v55, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017B8, a2: v56, a3: 0x10u) == 0 + || opm_memcmp_be(a1: (unsigned int *)off_4017BC, a2: v56, a3: 0x10u) == 0 ) { - v41 = off_4017D8; + v42 = off_4017D8; if ( off_4017D8[2] == 1 ) { if ( *off_4017D8 != v19 ) { LABEL_65: - v42 = (void (__cdecl *)())off_4019BC; + v43 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); - v42(); + v43(); LABEL_90: - v42(); + v43(); goto LABEL_91; } } else { *off_4017D8 = v19; - v41[2] = 1; - if ( v41[1] == 1 ) - v43 = 0; + v42[2] = 1; + if ( v42[1] == 1 ) + v44 = 0; else - v43 = v21[22 * v19 + 15]; - v41[3] = v43; + v44 = v21[22 * v19 + 15]; + v42[3] = v44; } LABEL_96: JUMPOUT(0x401740); } - v24 = opm_memcmp_be(a1: (unsigned int *)off_4017C0, a2: v55, a3: 0x10u); - if ( v24 != 0 && opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v55, a3: 0x10u) != 0 ) + v24 = opm_memcmp_be(a1: (unsigned int *)off_4017C0, a2: v56, a3: 0x10u); + if ( v24 != 0 && opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v56, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017C8, a2: v55, a3: 0x10u) != 0 - && opm_memcmp_be(a1: (unsigned int *)off_4017CC, a2: v55, a3: 0x10u) != 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017C8, a2: v56, a3: 0x10u) != 0 + && opm_memcmp_be(a1: (unsigned int *)off_4017CC, a2: v56, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017D0, a2: v55, a3: 0x10u) == 0 - || opm_memcmp_be(a1: (unsigned int *)off_4017D4, a2: v55, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017D0, a2: v56, a3: 0x10u) == 0 + || opm_memcmp_be(a1: (unsigned int *)off_4017D4, a2: v56, a3: 0x10u) == 0 ) { JUMPOUT(0x401728); } @@ -1176,54 +1209,54 @@ LABEL_91: off_4019BC(a1: 7, a2: 61440); JUMPOUT(0x401702); } - v48 = off_4017D8[2]; - v49 = v48 == 1; - if ( v48 == 1 ) - v49 = *off_4017D8 == v19; - if ( v49 && v56 != 8 ) + v49 = off_4017D8[2]; + v50 = v49 == 1; + if ( v49 == 1 ) + v50 = *off_4017D8 == v19; + if ( v50 && v57 != 8 ) goto LABEL_65; goto LABEL_96; } - v44 = &v21[22 * v19]; - v47 = v44[1]; - v46 = v44 + 1; - v45 = v47; - if ( v47 == 1 ) + v45 = &v21[22 * v19]; + v48 = v45[1]; + v47 = v45 + 1; + v46 = v48; + if ( v48 == 1 ) { if ( v24 != 0 ) goto LABEL_89; } - else if ( v45 != 0 || opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v55, a3: 0x10u) != 0 ) + else if ( v46 != 0 || opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v56, a3: 0x10u) != 0 ) { goto LABEL_89; } - if ( v56 == 280 ) + if ( v57 == 280 ) { - v50 = off_4017D8[2]; - v51 = v50 == 1; - if ( v50 == 1 ) - v51 = *off_4017D8 == v19; - if ( v51 ) + v51 = off_4017D8[2]; + v52 = v51 == 1; + if ( v51 == 1 ) + v52 = *off_4017D8 == v19; + if ( v52 ) { - opm_memcpy_aligned(result: v59, a2: v57, a3: 0x118u, a4: v23); - if ( v59[68] == 16 ) + opm_memcpy_aligned(result: v60, a2: v58, a3: 0x118u, a4: v23); + if ( v60[68] == 16 ) { - opm_asd301_path__h1(a1: (int)v59, a2: 256); - opm_lib_zero_fill_words(result: v58, a2: 0x130u); - v52 = *v46; - v53 = 256; + opm_asd301_path__h1(a1: (int)v60, a2: 256); + opm_lib_zero_fill_words(result: v59, a2: 0x130u); + v53 = *v47; + v54 = 256; if ( ((int (__fastcall *)(int, int *, int, _DWORD *, int *))loc_402A14)( - a1: v52, - a2: v59, + a1: v53, + a2: v60, a3: 256, - a4: v58, - a5: &v53) == 0 ) + a4: v59, + a5: &v54) == 0 ) { - opm_asd301_path__h1(a1: (int)v58, a2: v59[68]); + opm_asd301_path__h1(a1: (int)v59, a2: v60[68]); goto LABEL_96; } } - else if ( v59[68] == 0 ) + else if ( v60[68] == 0 ) { goto LABEL_96; } @@ -1231,36 +1264,41 @@ LABEL_91: } } LABEL_89: - v42 = (void (__cdecl *)())off_4019BC; + v43 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); - v42(); + v43(); goto LABEL_90; } HIDWORD(v22) = v21[22 * v19 + 1]; - if ( v22 != 0x100000000LL || v56 != 4 || *(_DWORD *)(v18 + 4120) == 0 ) + if ( v22 != 0x100000000LL ) goto LABEL_89; - v35 = opm_rpc_301(); + if ( v57 != 4 ) + goto LABEL_89; + v35 = *(_DWORD *)(v18 + 4120); + if ( v35 == 0 ) + goto LABEL_89; + v36 = sub_40329A(a1: v58[0], a2: v35, a3: v18 + 4124); } else { - if ( v56 != 16 ) + if ( v57 != 16 ) goto LABEL_89; - v28 = v57[0]; - v27 = v57[1]; - v29 = v57[0] == 32; - if ( v57[0] != 32 ) - v29 = v57[0] == 8; + v28 = v58[0]; + v27 = v58[1]; + v29 = v58[0] == 32; + if ( v58[0] != 32 ) + v29 = v58[0] == 8; if ( v29 ) { if ( v21[22 * v19 + 1] != 1 ) goto LABEL_89; } - else if ( v57[0] != 1 || v21[22 * v19 + 1] != 0 ) + else if ( v58[0] != 1 || v21[22 * v19 + 1] != 0 ) { goto LABEL_89; } - if ( v57[1] >= 3u && v57[1] != 0x40000000 - || opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v55, a3: 0x10u) == 0 ) + if ( v58[1] >= 3u && v58[1] != 0x40000000 + || opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v56, a3: 0x10u) == 0 ) { goto LABEL_89; } @@ -1271,18 +1309,18 @@ LABEL_89: { if ( v27 != 0 ) goto LABEL_89; - v36 = &v21[22 * v19]; - v38 = v36[18]; - v37 = v36 + 18; - if ( v38 != 1 ) + v37 = &v21[22 * v19]; + v39 = v37[18]; + v38 = v37 + 18; + if ( v39 != 1 ) goto LABEL_96; - v39 = off_401938; - v40 = *(_DWORD *)off_401938; + v40 = off_401938; + v41 = *(_DWORD *)off_401938; if ( *(_DWORD *)off_401938 == 0 ) goto LABEL_89; - *v37 = 0; - *v39 = v40 - 1; - if ( v40 != 1 ) + *v38 = 0; + *v40 = v41 - 1; + if ( v41 != 1 ) goto LABEL_96; } else @@ -1300,9 +1338,9 @@ LABEL_89: if ( v34 != 0 ) goto LABEL_96; } - v35 = opm_rpc_305(); + v36 = opm_rpc_305(); } - if ( v35 == 0 ) + if ( v36 == 0 ) goto LABEL_96; goto LABEL_89; } @@ -1353,34 +1391,40 @@ int __fastcall sub_401AAC( int v26; // r3 void (__cdecl *v27)(); // r4 int v28; // r0 - int v29; // r0 - int v30; // r0 - int v31; // r0 - int v32; // r0 - int v33; // r1 + int *v29; // r1 + int *v30; // r4 + _DWORD *v31; // r4 + int v32; // t1 + int v33; // r0 int v34; // r0 - int *v35; // r1 - int *v36; // r4 - bool v37; // zf - int v38; // r4 + int v35; // r0 + int v36; // r0 + int v37; // r1 + int v38; // r0 + int *v39; // r1 + int *v40; // r1 + int *v41; // r1 + _QWORD *v42; // r4 + bool v43; // zf + int v44; // r4 unsigned int unk00; // r5 - int *v40; // r8 - int v41; // r0 - int v42; // [sp+0h] [bp-FFCh] - int v43; // [sp+4h] [bp-FF8h] - int v44; // [sp+8h] [bp-FF4h] - int v45; // [sp+Ch] [bp-FF0h] - int v46; // [sp+10h] [bp-FECh] - int v47; // [sp+14h] [bp-FE8h] - int v48; // [sp+18h] [bp-FE4h] - int v49; // [sp+1Ch] [bp-FE0h] - struct tee_fmt_state v50; // [sp+20h] [bp-FDCh] BYREF - int v51; // [sp+FF8h] [bp-4h] + int *v46; // r8 + int v47; // r0 + int v48; // [sp+0h] [bp-FFCh] + int v49; // [sp+4h] [bp-FF8h] + int v50; // [sp+8h] [bp-FF4h] + int v51; // [sp+Ch] [bp-FF0h] + int v52; // [sp+10h] [bp-FECh] + int v53; // [sp+14h] [bp-FE8h] + int v54; // [sp+18h] [bp-FE4h] + int v55; // [sp+1Ch] [bp-FE0h] BYREF + struct tee_fmt_state v56; // [sp+20h] [bp-FDCh] BYREF + int v57; // [sp+FF8h] [bp-4h] v11 = (_DWORD *)off_401F44; v12 = a1; v13 = 264; - v51 = *(_DWORD *)off_401F44; + v57 = *(_DWORD *)off_401F44; if ( a2 != 16 ) goto LABEL_8; if ( a1 == nullptr ) @@ -1410,73 +1454,73 @@ int __fastcall sub_401AAC( v19 = &v18[22 * a3]; v21 = v19[1]; v20 = v19 + 1; - v48 = v21; + v54 = v21; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F4C, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F50, a3: 0x10u) == 0 ) { if ( a7 != 32 ) - goto LABEL_80; - v50.unk00 = 0; - v28 = opm_rpc_102(); + goto LABEL_81; + v56.unk00 = 0; + v28 = sub_4031C6(a1: (*off_401F48)[22 * v17 + 13], a2: &v56); if ( v28 != 0 ) goto LABEL_44; - if ( v50.unk00 - 1 > 4 ) - v30 = -1; + if ( v56.unk00 - 1 > 4 ) + v34 = -1; else - v30 = dword_401FB0[v50.unk00 - 1]; - goto LABEL_58; + v34 = dword_401FB0[v56.unk00 - 1]; + goto LABEL_59; } if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F54, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F58, a3: 0x10u) == 0 ) { - v31 = 0; - goto LABEL_60; + v35 = 0; + goto LABEL_61; } if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F5C, a3: 0x10u) == 0 ) - goto LABEL_54; + goto LABEL_55; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F60, a3: 0x10u) == 0 ) { - v31 = 1; -LABEL_60: - v42 = (int)v9; - v43 = a7; - v44 = (int)v10; - v45 = v31; - v32 = sub_4022B8(a1: v17, a2: v48, a3: p_unk04, a4: a5); + v35 = 1; LABEL_61: - v13 = v32; - if ( v32 != 0 ) + v48 = (int)v9; + v49 = a7; + v50 = (int)v10; + v51 = v35; + v36 = sub_4022B8(a1: v17, a2: v54, a3: p_unk04, a4: a5); +LABEL_62: + v13 = v36; + if ( v36 != 0 ) goto LABEL_8; - goto LABEL_62; + goto LABEL_63; } if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F64, a3: 0x10u) == 0 ) - goto LABEL_54; + goto LABEL_55; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F68, a3: 0x10u) == 0 ) - goto LABEL_62; + goto LABEL_63; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F6C, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F70, a3: 0x10u) == 0 ) { -LABEL_54: - v32 = sub_402594(a1: v9, a2: a7); - goto LABEL_61; +LABEL_55: + v36 = sub_402594(a1: v9, a2: a7); + goto LABEL_62; } - if ( __PAIR64__(v48, opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F74, a3: 0x10u)) == 0x100000000LL - || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F78, a3: 0x10u) | v48) == 0 ) + if ( __PAIR64__(v54, opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F74, a3: 0x10u)) == 0x100000000LL + || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F78, a3: 0x10u) | v54) == 0 ) { if ( a7 != 32 ) - goto LABEL_80; + goto LABEL_81; v9[5] = 0; v9 += 5; - v50.unk00 = 0; - v34 = opm_rpc_300(); - if ( v34 != 0 ) + v56.unk00 = 0; + v38 = sub_403274(a1: v9, a2: 0, a3: &v56, a4: 0); + if ( v38 != 0 ) { - v13 = v34; + v13 = v38; *v10 = dword_401FA4; - goto LABEL_81; + goto LABEL_82; } } else if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F7C, a3: 0x10u) != 0 ) @@ -1484,17 +1528,17 @@ LABEL_54: if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F80, a3: 0x10u) != 0 ) { v22 = opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F84, a3: 0x10u); - v23 = v48 == 1; - if ( v48 == 1 ) + v23 = v54 == 1; + if ( v54 == 1 ) v23 = v22 == 0; - if ( v23 || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F88, a3: 0x10u) | v48) == 0 ) - goto LABEL_62; + if ( v23 || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F88, a3: 0x10u) | v54) == 0 ) + goto LABEL_63; v10 = a5; v24 = opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F8C, a3: 0x10u); - v25 = v48 == 1; - if ( v48 == 1 ) + v25 = v54 == 1; + if ( v54 == 1 ) v25 = v24 == 0; - if ( !v25 && (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F90, a3: 0x10u) | v48) != 0 ) + if ( !v25 && (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F90, a3: 0x10u) | v54) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F94, a3: 0x10u) != 0 ) { @@ -1502,51 +1546,51 @@ LABEL_54: } else { - v37 = a5 == (_DWORD *)4056; + v43 = a5 == (_DWORD *)4056; if ( a5 == (_DWORD *)4056 ) - v37 = a7 == 20; + v43 = a7 == 20; v13 = 264; - if ( v37 ) + if ( v43 ) { - v38 = 0; + v44 = 0; v9[4] = 0; opm_lib_thunk_tailjump( - a1: &v50, + a1: &v56, a2: (int)p_unk04, a3: 4056, a4: v26, - a5: v42, - a6: v43, - a7: v44, - a8: v45, - a9: v46, - a10: v47, - a11: v48, - a12: v49, - a13: v50.unk00); - p_unk04 = &v50.unk04; - unk00 = v50.unk00; - v40 = (int *)off_401F98; + a5: v48, + a6: v49, + a7: v50, + a8: v51, + a9: v52, + a10: v53, + a11: v54, + a12: v55, + a13: v56.unk00); + p_unk04 = &v56.unk04; + unk00 = v56.unk00; + v46 = (int *)off_401F98; while ( 1 ) { - v12 = (unsigned int *)(v38 * 4 + 16); - if ( v38 == 28 ) + v12 = (unsigned int *)(v44 * 4 + 16); + if ( v44 == 28 ) break; - v41 = opm_memcmp_be(a1: (unsigned int *)&v40[v38], a2: &v50.unk04, a3: unk00); - v38 += 4; - if ( v41 == 0 ) + v47 = opm_memcmp_be(a1: (unsigned int *)&v46[v44], a2: &v56.unk04, a3: unk00); + v44 += 4; + if ( v47 == 0 ) { v9[4] = dword_401F9C; - goto LABEL_62; + goto LABEL_63; } } v13 = 688; } -LABEL_81: +LABEL_82: v27 = (void (__cdecl *)())off_401FA0; off_401FA0(a1: 7, a2: 61440); v27(); -LABEL_82: +LABEL_83: v27(); } LABEL_8: @@ -1558,90 +1602,99 @@ LABEL_8: } if ( a7 != 32 ) goto LABEL_41; - v30 = 1; - goto LABEL_58; + v34 = 1; + goto LABEL_59; } if ( a7 != 32 ) { -LABEL_80: +LABEL_81: v13 = 264; - goto LABEL_81; + goto LABEL_82; } - v35 = (int *)off_401F48; + v40 = (int *)off_401F48; v9[6] = 0; v9[7] = 0; - v36 = &v35[22 * v17 + 16]; - v13 = opm_rpc_107(); + v41 = &v40[22 * v17]; + v42 = v41 + 16; + v13 = sub_4031E8(a1: v41[13], a2: v41 + 16); if ( v13 != 0 ) - goto LABEL_81; - *((_QWORD *)v9 + 3) = *(_QWORD *)v36; + goto LABEL_82; + *((_QWORD *)v9 + 3) = *v42; } else { if ( a7 != 32 ) - goto LABEL_80; + goto LABEL_81; + v39 = (int *)off_401F48; v9[5] = 0; - v50.unk00 = 0; - v13 = opm_rpc_102(); - if ( v50.unk00 != 1 ) + v56.unk00 = 0; + v13 = sub_4031C6(a1: v39[22 * v17 + 13], a2: &v56); + if ( v56.unk00 != 1 ) { v13 = 608; - goto LABEL_81; + goto LABEL_82; } v9[5] = 1; if ( v13 != 0 ) - goto LABEL_81; + goto LABEL_82; } } else { if ( a7 != 32 ) - goto LABEL_80; - opm_lib_zero_fill_words(result: &v50, a2: 0x28u); + goto LABEL_81; + opm_lib_zero_fill_words(result: &v56, a2: 0x28u); v9[5] = 0; v28 = opm_rpc_200(); if ( v28 != 0 ) { LABEL_44: v13 = v28; - goto LABEL_81; + goto LABEL_82; } - v33 = dword_401FA8; - if ( LOBYTE(v50.unk00) == 0 ) - v33 = 3; - v9[5] = v33; + v37 = dword_401FA8; + if ( LOBYTE(v56.unk00) == 0 ) + v37 = 3; + v9[5] = v37; } } else { if ( a7 != 32 ) - goto LABEL_80; + goto LABEL_81; + v29 = (int *)off_401F48; v9[5] = 0; - v50.unk00 = 0; - v13 = opm_rpc_105(); + v56.unk00 = 0; + v30 = &v29[22 * v17]; + v32 = v30[13]; + v31 = v30 + 13; + v13 = sub_4031A4(a1: v32, a2: &v56); if ( v13 != 0 ) - goto LABEL_81; + goto LABEL_82; if ( *v20 == 0 ) { - v30 = v9[5] | 1; - goto LABEL_58; + v34 = v9[5] | 1; + goto LABEL_59; } if ( *v20 != 1 ) { v13 = 260; - goto LABEL_81; + goto LABEL_82; } - v49 = 0; - v28 = opm_rpc_102(); + v55 = 0; + v28 = sub_4031C6(a1: *v31, a2: &v55); if ( v28 != 0 ) goto LABEL_44; - v29 = v9[5]; - v9[5] = v29 | 8; - if ( (v50.unk00 & 2) != 0 && *off_401FAC != 0 ) + if ( v55 != 4 ) { - v30 = v29 | 0x28; -LABEL_58: - v9[5] = v30; + v33 = v9[5]; + v9[5] = v33 | 8; + if ( (v56.unk00 & 2) != 0 && *off_401FAC != 0 ) + { + v34 = v33 | 0x28; +LABEL_59: + v9[5] = v34; + } } } } @@ -1649,7 +1702,7 @@ LABEL_58: { if ( a7 != 72 ) goto LABEL_41; - if ( v48 != 0 ) + if ( v54 != 0 ) { *v10 = dword_401FA4 + 6; LABEL_41: @@ -1657,15 +1710,15 @@ LABEL_41: off_401FA0(a1: 7, a2: 61440); v27(); v13 = 264; - goto LABEL_82; + goto LABEL_83; } } -LABEL_62: +LABEL_63: v13 = 0; LABEL_9: - if ( *v11 == v51 ) + if ( *v11 == v57 ) return v13; - ((void (__fastcall *)(int))loc_403184)(a1: *v11 - v51); + ((void (__fastcall *)(int))loc_403184)(a1: *v11 - v57); } } diff --git a/fw/decomp/opm_25.0.0.71_28fa5413.c b/fw/decomp/opm_25.0.0.71_28fa5413.c index f5580e6..f1ff342 100644 --- a/fw/decomp/opm_25.0.0.71_28fa5413.c +++ b/fw/decomp/opm_25.0.0.71_28fa5413.c @@ -1,7 +1,7 @@ /* opm 25.0.0.71 (28fa5413) -- named functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf - * functions: 54 total in build, 38 named, 16 anonymous + * functions: 54 total in build, 35 named, 19 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 @@ -315,7 +315,7 @@ LABEL_6: goto LABEL_6; } v6 = &(*off_402590)[22 * v3]; - sub_402FE8(a1: v6 + 2, a2: 16); + opm_rpc_35(); v7 = (char *)ctx + 9244; v8 = v6[3]; v9 = v6[4]; @@ -941,44 +941,14 @@ int *__fastcall opm_memcpy_aligned(int *result, int *a2, unsigned int a3, int a4 return result; } -/* ==== opm_rpc_102 [tier=SVCOP size=34] ==== */ -int opm_rpc_102() +/* ==== opm_rpc_2 [tier=SVCOP size=36] ==== */ +int opm_rpc_2() { - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - opm_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== opm_rpc_105 [tier=SVCOP size=34] ==== */ -int opm_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_rpc_107 [tier=SVCOP size=34] ==== */ -int opm_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_rpc_161 [tier=SVCOP size=46] ==== */ -int opm_rpc_161() -{ - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x18u); + opm_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } - return 2; + return 1; } /* ==== opm_rpc_200 [tier=SVCOP size=32] ==== */ @@ -1011,24 +981,14 @@ int opm_rpc_208() return 2; } -/* ==== opm_rpc_300 [tier=SVCOP size=38] ==== */ -int opm_rpc_300() +/* ==== opm_rpc_3 [tier=SVCOP size=42] ==== */ +int opm_rpc_3() { - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - opm_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== opm_rpc_301 [tier=SVCOP size=36] ==== */ -int opm_rpc_301() -{ - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x18u); + opm_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } - return 2; + return 1; } /* ==== opm_rpc_304 [tier=SVCOP size=28] ==== */ @@ -1051,6 +1011,16 @@ int opm_rpc_305() return 2; } +/* ==== opm_rpc_35 [tier=SVCOP size=42] ==== */ +int opm_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_1 [tier=MNEM size=60] ==== */ int opm_sysdrv_rpc_1() { diff --git a/fw/decomp/opm_25.0.0.71_28fa5413.index.json b/fw/decomp/opm_25.0.0.71_28fa5413.index.json index 44226e4..7568ed3 100644 --- a/fw/decomp/opm_25.0.0.71_28fa5413.index.json +++ b/fw/decomp/opm_25.0.0.71_28fa5413.index.json @@ -234,9 +234,9 @@ { "addr": "0x402f9e", "ida_name": "sub_402F9E", - "name": null, + "name": "opm_rpc_2", "size": 36, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x402fc2", @@ -248,9 +248,9 @@ { "addr": "0x402fe8", "ida_name": "sub_402FE8", - "name": null, + "name": "opm_rpc_35", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x403012", @@ -276,9 +276,9 @@ { "addr": "0x4030a8", "ida_name": "sub_4030A8", - "name": null, + "name": "opm_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x4030d2", @@ -297,30 +297,30 @@ { "addr": "0x4031a4", "ida_name": "sub_4031A4", - "name": "opm_rpc_105", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4031c6", "ida_name": "sub_4031C6", - "name": "opm_rpc_102", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4031e8", "ida_name": "sub_4031E8", - "name": "opm_rpc_107", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x40320a", "ida_name": "sub_40320A", - "name": "opm_rpc_161", + "name": null, "size": 46, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x403238", @@ -339,16 +339,16 @@ { "addr": "0x403274", "ida_name": "sub_403274", - "name": "opm_rpc_300", + "name": null, "size": 38, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x40329a", "ida_name": "sub_40329A", - "name": "opm_rpc_301", + "name": null, "size": 36, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4032be", diff --git a/fw/decomp/opm_25.0.0.81_dc596ba6.anon.c b/fw/decomp/opm_25.0.0.81_dc596ba6.anon.c index 0868689..855683c 100644 --- a/fw/decomp/opm_25.0.0.81_dc596ba6.anon.c +++ b/fw/decomp/opm_25.0.0.81_dc596ba6.anon.c @@ -1,7 +1,7 @@ /* opm 25.0.0.81 (dc596ba6) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf - * functions: 55 total in build, 38 named, 17 anonymous + * functions: 55 total in build, 35 named, 20 anonymous * porting tiers: {"DISPATCH": 7, "EXACT": 10, "FUZZY": 1, "MNEM": 6, "ambiguous": 4, "cmd_protos": 4, "comments": 0, "dispatch_conflict": 0, "none": 27, "protos": 4, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -155,34 +155,64 @@ int __fastcall sub_4030EA(char *a1, char *a2, int a3) return v3; } +/* ==== ANON size=34 ==== */ +int sub_403200() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ +int sub_4031DE() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + +/* ==== ANON size=34 ==== */ +int sub_4031BC() +{ + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF + + opm_lib_zero_fill_words(result: v5, a2: 0x18u); + __asm { SVC 0xF2 } + return 2; +} + /* ==== ANON size=36 ==== */ -int sub_402FB6() +int sub_4032B2() { - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x20u); + opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } -/* ==== ANON size=42 ==== */ -int sub_4030C0() +/* ==== ANON size=38 ==== */ +int sub_40328C() { - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF + _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x20u); + opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } -/* ==== ANON size=42 ==== */ -int sub_403000() +/* ==== ANON size=46 ==== */ +int sub_403222() { - _DWORD v5[28]; // [sp+10h] [bp-70h] BYREF + _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF opm_lib_zero_fill_words(result: v5, a2: 0x18u); __asm { SVC 0xF2 } - return 1; + return 2; } /* ==== ANON size=46 ==== */ @@ -732,7 +762,7 @@ int __fastcall sub_402908(unsigned int a1, int a2, int a3, int a4) { v5 = 1298; } - else if ( sub_4030C0(a1: 0, a2: 0) != 0 ) + else if ( opm_rpc_3() != 0 ) { v5 = 1299; } @@ -787,20 +817,21 @@ int __fastcall sub_4022B8(int a1, int a2, int a3, unsigned int a4, int a5, int a unsigned int v25; // r0 bool v26; // zf int v27; // r0 - bool v28; // zf - void (__cdecl *v29)(); // r8 - int v30; // r0 - void (__cdecl *v31)(); // r6 - unsigned int v32; // r0 - bool v33; // zf - int v34; // [sp+0h] [bp-1Ch] - int v35; // [sp+4h] [bp-18h] - _DWORD *v36; // [sp+4h] [bp-18h] - int v37; // [sp+8h] [bp-14h] BYREF - int v38; // [sp+Ch] [bp-10h] - int v39; // [sp+10h] [bp-Ch] - int v40; // [sp+14h] [bp-8h] - int v41; // [sp+18h] [bp-4h] + int v28; // r0 + bool v29; // zf + void (__cdecl *v30)(); // r8 + int v31; // r0 + void (__cdecl *v32)(); // r6 + unsigned int v33; // r0 + bool v34; // zf + int v35; // [sp+0h] [bp-1Ch] + int v36; // [sp+4h] [bp-18h] + _DWORD *v37; // [sp+4h] [bp-18h] + int v38; // [sp+8h] [bp-14h] BYREF + int v39; // [sp+Ch] [bp-10h] BYREF + int v40; // [sp+10h] [bp-Ch] BYREF + int v41; // [sp+14h] [bp-8h] BYREF + int v42; // [sp+18h] [bp-4h] BYREF int savedregs[9]; // [sp+1Ch] [bp+0h] v10 = 264; @@ -816,33 +847,33 @@ int __fastcall sub_4022B8(int a1, int a2, int a3, unsigned int a4, int a5, int a goto LABEL_8; *(_DWORD *)(a5 + 20) = 0; opm_lib_thunk_tailjump( - a1: (struct tee_fmt_state *)&v37, + a1: (struct tee_fmt_state *)&v38, a2: a3, a3: a4, a4, - a5: v34, - a6: v35, + a5: v35, + a6: v36, a7: 0, - a8: v38, - a9: v39, - a10: v40, - a11: v41, + a8: v39, + a9: v40, + a10: v41, + a11: v42, a12: savedregs[0], a13: savedregs[1]); - v15 = v37; - if ( a2 != 0 && v37 == 1 ) + v15 = v38; + if ( a2 != 0 && v38 == 1 ) { v16 = dword_402514; LABEL_18: *v8 = v16; return 0; } - if ( a2 != 1 && v37 == 8 || a2 != 1 && v37 == 32 ) + if ( a2 != 1 && v38 == 8 || a2 != 1 && v38 == 32 ) { v16 = dword_402514 + 3; goto LABEL_18; } - switch ( v37 ) + switch ( v38 ) { case 1: case 8: @@ -857,7 +888,7 @@ LABEL_18: case 7: goto LABEL_47; default: - if ( v37 != 32 ) + if ( v38 != 32 ) { LABEL_47: v10 = 264; @@ -870,67 +901,68 @@ LABEL_23: v20 = v18 + 14; if ( v18[14] == 0 ) { - v40 = 0; + v27 = v18[13]; v41 = 0; - v38 = 0; + v42 = 0; v39 = 0; - v27 = opm_rpc_161(); - v28 = v27 == 7; - if ( v27 != 7 ) + v40 = 0; + v28 = sub_403222(a1: v27, a2: &v42, a3: &v41, a4: &v40, a5: &v39); + v29 = v28 == 7; + if ( v28 != 7 ) { - v10 = v27; - v28 = v27 == 0; + v10 = v28; + v29 = v28 == 0; } - if ( !v28 ) + if ( !v29 ) goto LABEL_57; - if ( v40 == 3 ) + if ( v41 == 3 ) { - if ( v38 == 1 ) + if ( v39 == 1 ) { - v33 = v15 == 32; - v30 = 1; + v34 = v15 == 32; + v31 = 1; if ( v15 == 32 ) - v33 = v39 == 2; - if ( v33 ) + v34 = v40 == 2; + if ( v34 ) { - v30 = 2; + v31 = 2; if ( v17[22 * a1 + 20] != 2 && a8 == 0 ) - v30 = 1; + v31 = 1; } goto LABEL_60; } - if ( v38 == 2 ) + if ( v39 == 2 ) { v10 = 269; *(_DWORD *)(a5 + 16) = 1; *(_DWORD *)(a5 + 20) = 0; LABEL_57: - v29 = (void (__cdecl *)())off_402EF8; + v30 = (void (__cdecl *)())off_402EF8; off_402EF8(a1: 7, a2: 61440); - v29(); - v29(); + v30(); + v30(); goto LABEL_63; } } else { - v38 = 0; + v39 = 0; } - v30 = 0; - v38 = 0; + v31 = 0; + v39 = 0; LABEL_60: - *(_DWORD *)(a5 + 20) = v30; + *(_DWORD *)(a5 + 20) = v31; v10 = 0; goto LABEL_63; } v21 = 0; v22 = 0; - v39 = 0; v40 = 0; v41 = 0; + v42 = 0; *(_DWORD *)(a5 + 20) = 0x40000000; - v38 = 0; - v36 = v18 + 20; + v39 = 0; + v37 = v18 + 20; while ( 1 ) { if ( v22 == 32 ) @@ -946,7 +978,7 @@ LABEL_43: } if ( v21 > 4 ) goto LABEL_48; - v23 = opm_rpc_161(); + v23 = sub_403222(a1: v22, a2: &v42, a3: &v41, a4: &v40, a5: &v39); v24 = v23 == 7; if ( v23 != 7 ) { @@ -955,30 +987,30 @@ LABEL_43: } if ( !v24 ) goto LABEL_61; - if ( v40 != 3 ) + if ( v41 != 3 ) { - v38 = 0; + v39 = 0; goto LABEL_37; } - if ( v38 == 1 ) + if ( v39 == 1 ) { v26 = v15 == 32; v25 = 1; if ( v15 == 32 ) - v26 = v39 == 2; + v26 = v40 == 2; if ( v26 ) { v25 = 2; - if ( *v36 != 2 && a8 == 0 ) + if ( *v37 != 2 && a8 == 0 ) v25 = 1; } goto LABEL_41; } - if ( v38 != 2 ) + if ( v39 != 2 ) { LABEL_37: v25 = 0; - v38 = 0; + v39 = 0; LABEL_41: ++v21; if ( v25 < *(_DWORD *)(a5 + 20) ) @@ -989,19 +1021,19 @@ LABEL_41: *(_DWORD *)(a5 + 16) = 1; *(_DWORD *)(a5 + 20) = 0; LABEL_61: - v31 = (void (__cdecl *)())off_4025C4; + v32 = (void (__cdecl *)())off_4025C4; off_4025C4(a1: 7, a2: 61440); - v31(); - v31(); + v32(); + v32(); LABEL_62: v17 = (int *)off_402590; v19 = a8; LABEL_63: if ( v19 == 0 ) { - v32 = v17[22 * a1 + 20]; - if ( v32 <= *(_DWORD *)(a5 + 20) ) - *(_DWORD *)(a5 + 20) = v32; + v33 = v17[22 * a1 + 20]; + if ( v33 <= *(_DWORD *)(a5 + 20) ) + *(_DWORD *)(a5 + 20) = v33; if ( opm_rpc_304() != 0 ) *(_DWORD *)(a5 + 20) = 0; } @@ -1050,36 +1082,37 @@ int __fastcall sub_4012CC(int a1, int a2, unsigned int a3) int v32; // t1 _DWORD *v33; // r2 int v34; // r1 - int v35; // r0 - int *v36; // r0 - _DWORD *v37; // r0 - int v38; // t1 - _DWORD *v39; // r1 - int v40; // r2 - int *v41; // r0 - void (__cdecl *v42)(); // r4 - int v43; // r1 - int *v44; // r6 - int v45; // r0 - int *v46; // r6 - int v47; // t1 - int v48; // r1 - bool v49; // zf - int v50; // r1 - bool v51; // zf - int v52; // r0 - int v53; // [sp+Ch] [bp-1384h] BYREF - int v54[4]; // [sp+10h] [bp-1380h] BYREF - unsigned int v55[5]; // [sp+20h] [bp-1370h] BYREF - int v56; // [sp+34h] [bp-135Ch] - int v57[1010]; // [sp+38h] [bp-1358h] BYREF - _DWORD v58[76]; // [sp+1010h] [bp-380h] BYREF - int v59[82]; // [sp+1140h] [bp-250h] BYREF - struct tee_fmt_state v60[6]; // [sp+1288h] [bp-108h] BYREF - int v61; // [sp+138Ch] [bp-4h] + int v35; // r1 + int v36; // r0 + int *v37; // r0 + _DWORD *v38; // r0 + int v39; // t1 + _DWORD *v40; // r1 + int v41; // r2 + int *v42; // r0 + void (__cdecl *v43)(); // r4 + int v44; // r1 + int *v45; // r6 + int v46; // r0 + int *v47; // r6 + int v48; // t1 + int v49; // r1 + bool v50; // zf + int v51; // r1 + bool v52; // zf + int v53; // r0 + int v54; // [sp+Ch] [bp-1384h] BYREF + int v55[4]; // [sp+10h] [bp-1380h] BYREF + unsigned int v56[5]; // [sp+20h] [bp-1370h] BYREF + int v57; // [sp+34h] [bp-135Ch] + int v58[1010]; // [sp+38h] [bp-1358h] BYREF + _DWORD v59[76]; // [sp+1010h] [bp-380h] BYREF + int v60[82]; // [sp+1140h] [bp-250h] BYREF + struct tee_fmt_state v61[6]; // [sp+1288h] [bp-108h] BYREF + int v62; // [sp+138Ch] [bp-4h] v9 = off_4021D8; - v61 = *off_4021D8; + v62 = *off_4021D8; if ( a1 != 0 ) { v5 = a2; @@ -1088,25 +1121,25 @@ int __fastcall sub_4012CC(int a1, int a2, unsigned int a3) v3 = a3; if ( a3 <= 0x100 ) { - v4 = v60; + v4 = v61; v11 = 256 - a3; if ( a3 > 0xFF ) v11 = 0; - opm_lib_zero_fill_bytes(result: (_BYTE *)v60 + a3, a2: v11); + opm_lib_zero_fill_bytes(result: (_BYTE *)v61 + a3, a2: v11); opm_lib_thunk_tailjump( - a1: v60, + a1: v61, a2: a1, a3: v3, a4: v12, - a5: v60[0].unk00, - a6: v60[0].unk04, - a7: v60[0].field08, - a8: v60[0].unk0C, - a9: v60[0].field10, - a10: v60[0].field14, - a11: v60[0].field18, - a12: v60[0].field1C, - a13: v60[0].field20); + a5: v61[0].unk00, + a6: v61[0].unk04, + a7: v61[0].field08, + a8: v61[0].unk0C, + a9: v61[0].field10, + a10: v61[0].field14, + a11: v61[0].field18, + a12: v61[0].field1C, + a13: v61[0].field20); while ( v3 != 0 ) { unk00 = v4->unk00; @@ -1116,21 +1149,21 @@ int __fastcall sub_4012CC(int a1, int a2, unsigned int a3) } } } - result = *v9 - v61; - if ( *v9 != v61 ) + result = *v9 - v62; + if ( *v9 != v62 ) { v15 = ((int (__fastcall *)(int))loc_40319C)(a1: result); - v59[73] = v3; - v59[74] = (int)v4; - v59[75] = v5; - v59[76] = a1; - v59[77] = (int)v9; - v59[78] = v6; - v59[79] = v7; - v59[80] = v8; - v59[81] = v17; + v60[73] = v3; + v60[74] = (int)v4; + v60[75] = v5; + v60[76] = a1; + v60[77] = (int)v9; + v60[78] = v6; + v60[79] = v7; + v60[80] = v8; + v60[81] = v17; v18 = v15; - v59[71] = *off_4021D8; + v60[71] = *off_4021D8; if ( v15 == 0 || (unsigned int)(v19 = *(_DWORD *)(v15 + 16)) >= 0x40 ) { v20 = (void (__cdecl *)())off_402270; @@ -1141,60 +1174,60 @@ int __fastcall sub_4012CC(int a1, int a2, unsigned int a3) v21 = (int *)off_40226C; if ( (*off_40226C)[22 * v19] == 3 ) { - opm_memcpy_aligned(result: v54, a2: (int *)(v15 + 24), a3: 0x1000u, a4: v16); - if ( v21[22 * v19 + 11] == v55[4] ) + opm_memcpy_aligned(result: v55, a2: (int *)(v15 + 24), a3: 0x1000u, a4: v16); + if ( v21[22 * v19 + 11] == v56[4] ) { - if ( sub_402908(a1: v19, a2: v55, a3: 4080, a4: v54) != 0 ) + if ( sub_402908(a1: v19, a2: v56, a3: 4080, a4: v55) != 0 ) goto LABEL_91; - if ( opm_memcmp_be(a1: (unsigned int *)off_4017A0, a2: v55, a3: 0x10u) != 0 - && opm_memcmp_be(a1: (unsigned int *)off_4017A4, a2: v55, a3: 0x10u) != 0 - && opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v55, a3: 0x10u) != 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017A0, a2: v56, a3: 0x10u) != 0 + && opm_memcmp_be(a1: (unsigned int *)off_4017A4, a2: v56, a3: 0x10u) != 0 + && opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v56, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017AC, a2: v55, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017AC, a2: v56, a3: 0x10u) == 0 ) goto LABEL_96; - LODWORD(v22) = opm_memcmp_be(a1: (unsigned int *)off_4017B0, a2: v55, a3: 0x10u); + LODWORD(v22) = opm_memcmp_be(a1: (unsigned int *)off_4017B0, a2: v56, a3: 0x10u); if ( (_DWORD)v22 != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017B4, a2: v55, a3: 0x10u) != 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017B4, a2: v56, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017B8, a2: v55, a3: 0x10u) == 0 - || opm_memcmp_be(a1: (unsigned int *)off_4017BC, a2: v55, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017B8, a2: v56, a3: 0x10u) == 0 + || opm_memcmp_be(a1: (unsigned int *)off_4017BC, a2: v56, a3: 0x10u) == 0 ) { - v41 = off_4017D8; + v42 = off_4017D8; if ( off_4017D8[2] == 1 ) { if ( *off_4017D8 != v19 ) { LABEL_65: - v42 = (void (__cdecl *)())off_4019BC; + v43 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); - v42(); + v43(); LABEL_90: - v42(); + v43(); goto LABEL_91; } } else { *off_4017D8 = v19; - v41[2] = 1; - if ( v41[1] == 1 ) - v43 = 0; + v42[2] = 1; + if ( v42[1] == 1 ) + v44 = 0; else - v43 = v21[22 * v19 + 15]; - v41[3] = v43; + v44 = v21[22 * v19 + 15]; + v42[3] = v44; } LABEL_96: JUMPOUT(0x401740); } - v24 = opm_memcmp_be(a1: (unsigned int *)off_4017C0, a2: v55, a3: 0x10u); - if ( v24 != 0 && opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v55, a3: 0x10u) != 0 ) + v24 = opm_memcmp_be(a1: (unsigned int *)off_4017C0, a2: v56, a3: 0x10u); + if ( v24 != 0 && opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v56, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017C8, a2: v55, a3: 0x10u) != 0 - && opm_memcmp_be(a1: (unsigned int *)off_4017CC, a2: v55, a3: 0x10u) != 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017C8, a2: v56, a3: 0x10u) != 0 + && opm_memcmp_be(a1: (unsigned int *)off_4017CC, a2: v56, a3: 0x10u) != 0 ) { - if ( opm_memcmp_be(a1: (unsigned int *)off_4017D0, a2: v55, a3: 0x10u) == 0 - || opm_memcmp_be(a1: (unsigned int *)off_4017D4, a2: v55, a3: 0x10u) == 0 ) + if ( opm_memcmp_be(a1: (unsigned int *)off_4017D0, a2: v56, a3: 0x10u) == 0 + || opm_memcmp_be(a1: (unsigned int *)off_4017D4, a2: v56, a3: 0x10u) == 0 ) { JUMPOUT(0x401728); } @@ -1202,54 +1235,54 @@ LABEL_91: off_4019BC(a1: 7, a2: 61440); JUMPOUT(0x401702); } - v48 = off_4017D8[2]; - v49 = v48 == 1; - if ( v48 == 1 ) - v49 = *off_4017D8 == v19; - if ( v49 && v56 != 8 ) + v49 = off_4017D8[2]; + v50 = v49 == 1; + if ( v49 == 1 ) + v50 = *off_4017D8 == v19; + if ( v50 && v57 != 8 ) goto LABEL_65; goto LABEL_96; } - v44 = &v21[22 * v19]; - v47 = v44[1]; - v46 = v44 + 1; - v45 = v47; - if ( v47 == 1 ) + v45 = &v21[22 * v19]; + v48 = v45[1]; + v47 = v45 + 1; + v46 = v48; + if ( v48 == 1 ) { if ( v24 != 0 ) goto LABEL_89; } - else if ( v45 != 0 || opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v55, a3: 0x10u) != 0 ) + else if ( v46 != 0 || opm_memcmp_be(a1: (unsigned int *)off_4017C4, a2: v56, a3: 0x10u) != 0 ) { goto LABEL_89; } - if ( v56 == 280 ) + if ( v57 == 280 ) { - v50 = off_4017D8[2]; - v51 = v50 == 1; - if ( v50 == 1 ) - v51 = *off_4017D8 == v19; - if ( v51 ) + v51 = off_4017D8[2]; + v52 = v51 == 1; + if ( v51 == 1 ) + v52 = *off_4017D8 == v19; + if ( v52 ) { - opm_memcpy_aligned(result: v59, a2: v57, a3: 0x118u, a4: v23); - if ( v59[68] == 16 ) + opm_memcpy_aligned(result: v60, a2: v58, a3: 0x118u, a4: v23); + if ( v60[68] == 16 ) { - opm_asd301_path__h1(a1: (int)v59, a2: 256); - opm_lib_zero_fill_words(result: v58, a2: 0x130u); - v52 = *v46; - v53 = 256; + opm_asd301_path__h1(a1: (int)v60, a2: 256); + opm_lib_zero_fill_words(result: v59, a2: 0x130u); + v53 = *v47; + v54 = 256; if ( ((int (__fastcall *)(int, int *, int, _DWORD *, int *))loc_402A2C)( - a1: v52, - a2: v59, + a1: v53, + a2: v60, a3: 256, - a4: v58, - a5: &v53) == 0 ) + a4: v59, + a5: &v54) == 0 ) { - opm_asd301_path__h1(a1: (int)v58, a2: v59[68]); + opm_asd301_path__h1(a1: (int)v59, a2: v60[68]); goto LABEL_96; } } - else if ( v59[68] == 0 ) + else if ( v60[68] == 0 ) { goto LABEL_96; } @@ -1257,36 +1290,41 @@ LABEL_91: } } LABEL_89: - v42 = (void (__cdecl *)())off_4019BC; + v43 = (void (__cdecl *)())off_4019BC; off_4019BC(a1: 7, a2: 61440); - v42(); + v43(); goto LABEL_90; } HIDWORD(v22) = v21[22 * v19 + 1]; - if ( v22 != 0x100000000LL || v56 != 4 || *(_DWORD *)(v18 + 4120) == 0 ) + if ( v22 != 0x100000000LL ) goto LABEL_89; - v35 = opm_rpc_301(); + if ( v57 != 4 ) + goto LABEL_89; + v35 = *(_DWORD *)(v18 + 4120); + if ( v35 == 0 ) + goto LABEL_89; + v36 = sub_4032B2(a1: v58[0], a2: v35, a3: v18 + 4124); } else { - if ( v56 != 16 ) + if ( v57 != 16 ) goto LABEL_89; - v28 = v57[0]; - v27 = v57[1]; - v29 = v57[0] == 32; - if ( v57[0] != 32 ) - v29 = v57[0] == 8; + v28 = v58[0]; + v27 = v58[1]; + v29 = v58[0] == 32; + if ( v58[0] != 32 ) + v29 = v58[0] == 8; if ( v29 ) { if ( v21[22 * v19 + 1] != 1 ) goto LABEL_89; } - else if ( v57[0] != 1 || v21[22 * v19 + 1] != 0 ) + else if ( v58[0] != 1 || v21[22 * v19 + 1] != 0 ) { goto LABEL_89; } - if ( v57[1] >= 3u && v57[1] != 0x40000000 - || opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v55, a3: 0x10u) == 0 ) + if ( v58[1] >= 3u && v58[1] != 0x40000000 + || opm_memcmp_be(a1: (unsigned int *)off_4017A8, a2: v56, a3: 0x10u) == 0 ) { goto LABEL_89; } @@ -1297,18 +1335,18 @@ LABEL_89: { if ( v27 != 0 ) goto LABEL_89; - v36 = &v21[22 * v19]; - v38 = v36[18]; - v37 = v36 + 18; - if ( v38 != 1 ) + v37 = &v21[22 * v19]; + v39 = v37[18]; + v38 = v37 + 18; + if ( v39 != 1 ) goto LABEL_96; - v39 = off_401938; - v40 = *(_DWORD *)off_401938; + v40 = off_401938; + v41 = *(_DWORD *)off_401938; if ( *(_DWORD *)off_401938 == 0 ) goto LABEL_89; - *v37 = 0; - *v39 = v40 - 1; - if ( v40 != 1 ) + *v38 = 0; + *v40 = v41 - 1; + if ( v41 != 1 ) goto LABEL_96; } else @@ -1326,9 +1364,9 @@ LABEL_89: if ( v34 != 0 ) goto LABEL_96; } - v35 = opm_rpc_305(); + v36 = opm_rpc_305(); } - if ( v35 == 0 ) + if ( v36 == 0 ) goto LABEL_96; goto LABEL_89; } @@ -1379,34 +1417,40 @@ int __fastcall sub_401AAC( int v26; // r3 void (__cdecl *v27)(); // r4 int v28; // r0 - int v29; // r0 - int v30; // r0 - int v31; // r0 - int v32; // r0 - int v33; // r1 + int *v29; // r1 + int *v30; // r4 + _DWORD *v31; // r4 + int v32; // t1 + int v33; // r0 int v34; // r0 - int *v35; // r1 - int *v36; // r4 - bool v37; // zf - int v38; // r4 + int v35; // r0 + int v36; // r0 + int v37; // r1 + int v38; // r0 + int *v39; // r1 + int *v40; // r1 + int *v41; // r1 + _QWORD *v42; // r4 + bool v43; // zf + int v44; // r4 unsigned int unk00; // r5 - int *v40; // r8 - int v41; // r0 - int v42; // [sp+0h] [bp-FFCh] - int v43; // [sp+4h] [bp-FF8h] - int v44; // [sp+8h] [bp-FF4h] - int v45; // [sp+Ch] [bp-FF0h] - int v46; // [sp+10h] [bp-FECh] - int v47; // [sp+14h] [bp-FE8h] - int v48; // [sp+18h] [bp-FE4h] - int v49; // [sp+1Ch] [bp-FE0h] - struct tee_fmt_state v50; // [sp+20h] [bp-FDCh] BYREF - int v51; // [sp+FF8h] [bp-4h] + int *v46; // r8 + int v47; // r0 + int v48; // [sp+0h] [bp-FFCh] + int v49; // [sp+4h] [bp-FF8h] + int v50; // [sp+8h] [bp-FF4h] + int v51; // [sp+Ch] [bp-FF0h] + int v52; // [sp+10h] [bp-FECh] + int v53; // [sp+14h] [bp-FE8h] + int v54; // [sp+18h] [bp-FE4h] + int v55; // [sp+1Ch] [bp-FE0h] BYREF + struct tee_fmt_state v56; // [sp+20h] [bp-FDCh] BYREF + int v57; // [sp+FF8h] [bp-4h] v11 = (_DWORD *)off_401F44; v12 = a1; v13 = 264; - v51 = *(_DWORD *)off_401F44; + v57 = *(_DWORD *)off_401F44; if ( a2 != 16 ) goto LABEL_8; if ( a1 == nullptr ) @@ -1436,73 +1480,73 @@ int __fastcall sub_401AAC( v19 = &v18[22 * a3]; v21 = v19[1]; v20 = v19 + 1; - v48 = v21; + v54 = v21; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F4C, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F50, a3: 0x10u) == 0 ) { if ( a7 != 32 ) - goto LABEL_80; - v50.unk00 = 0; - v28 = opm_rpc_102(); + goto LABEL_81; + v56.unk00 = 0; + v28 = sub_4031DE(a1: (*off_401F48)[22 * v17 + 13], a2: &v56); if ( v28 != 0 ) goto LABEL_44; - if ( v50.unk00 - 1 > 4 ) - v30 = -1; + if ( v56.unk00 - 1 > 4 ) + v34 = -1; else - v30 = dword_401FB0[v50.unk00 - 1]; - goto LABEL_58; + v34 = dword_401FB0[v56.unk00 - 1]; + goto LABEL_59; } if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F54, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F58, a3: 0x10u) == 0 ) { - v31 = 0; - goto LABEL_60; + v35 = 0; + goto LABEL_61; } if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F5C, a3: 0x10u) == 0 ) - goto LABEL_54; + goto LABEL_55; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F60, a3: 0x10u) == 0 ) { - v31 = 1; -LABEL_60: - v42 = (int)v9; - v43 = a7; - v44 = (int)v10; - v45 = v31; - v32 = sub_4022B8(a1: v17, a2: v48, a3: p_unk04, a4: a5); + v35 = 1; LABEL_61: - v13 = v32; - if ( v32 != 0 ) + v48 = (int)v9; + v49 = a7; + v50 = (int)v10; + v51 = v35; + v36 = sub_4022B8(a1: v17, a2: v54, a3: p_unk04, a4: a5); +LABEL_62: + v13 = v36; + if ( v36 != 0 ) goto LABEL_8; - goto LABEL_62; + goto LABEL_63; } if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F64, a3: 0x10u) == 0 ) - goto LABEL_54; + goto LABEL_55; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F68, a3: 0x10u) == 0 ) - goto LABEL_62; + goto LABEL_63; if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F6C, a3: 0x10u) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F70, a3: 0x10u) == 0 ) { -LABEL_54: - v32 = sub_402594(a1: v9, a2: a7); - goto LABEL_61; +LABEL_55: + v36 = sub_402594(a1: v9, a2: a7); + goto LABEL_62; } - if ( __PAIR64__(v48, opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F74, a3: 0x10u)) == 0x100000000LL - || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F78, a3: 0x10u) | v48) == 0 ) + if ( __PAIR64__(v54, opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F74, a3: 0x10u)) == 0x100000000LL + || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F78, a3: 0x10u) | v54) == 0 ) { if ( a7 != 32 ) - goto LABEL_80; + goto LABEL_81; v9[5] = 0; v9 += 5; - v50.unk00 = 0; - v34 = opm_rpc_300(); - if ( v34 != 0 ) + v56.unk00 = 0; + v38 = sub_40328C(a1: v9, a2: 0, a3: &v56, a4: 0); + if ( v38 != 0 ) { - v13 = v34; + v13 = v38; *v10 = dword_401FA4; - goto LABEL_81; + goto LABEL_82; } } else if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F7C, a3: 0x10u) != 0 ) @@ -1510,17 +1554,17 @@ LABEL_54: if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F80, a3: 0x10u) != 0 ) { v22 = opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F84, a3: 0x10u); - v23 = v48 == 1; - if ( v48 == 1 ) + v23 = v54 == 1; + if ( v54 == 1 ) v23 = v22 == 0; - if ( v23 || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F88, a3: 0x10u) | v48) == 0 ) - goto LABEL_62; + if ( v23 || (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F88, a3: 0x10u) | v54) == 0 ) + goto LABEL_63; v10 = a5; v24 = opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F8C, a3: 0x10u); - v25 = v48 == 1; - if ( v48 == 1 ) + v25 = v54 == 1; + if ( v54 == 1 ) v25 = v24 == 0; - if ( !v25 && (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F90, a3: 0x10u) | v48) != 0 ) + if ( !v25 && (opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F90, a3: 0x10u) | v54) != 0 ) { if ( opm_memcmp_be(a1: v12, a2: (unsigned int *)off_401F94, a3: 0x10u) != 0 ) { @@ -1528,51 +1572,51 @@ LABEL_54: } else { - v37 = a5 == (_DWORD *)4056; + v43 = a5 == (_DWORD *)4056; if ( a5 == (_DWORD *)4056 ) - v37 = a7 == 20; + v43 = a7 == 20; v13 = 264; - if ( v37 ) + if ( v43 ) { - v38 = 0; + v44 = 0; v9[4] = 0; opm_lib_thunk_tailjump( - a1: &v50, + a1: &v56, a2: (int)p_unk04, a3: 4056, a4: v26, - a5: v42, - a6: v43, - a7: v44, - a8: v45, - a9: v46, - a10: v47, - a11: v48, - a12: v49, - a13: v50.unk00); - p_unk04 = &v50.unk04; - unk00 = v50.unk00; - v40 = (int *)off_401F98; + a5: v48, + a6: v49, + a7: v50, + a8: v51, + a9: v52, + a10: v53, + a11: v54, + a12: v55, + a13: v56.unk00); + p_unk04 = &v56.unk04; + unk00 = v56.unk00; + v46 = (int *)off_401F98; while ( 1 ) { - v12 = (unsigned int *)(v38 * 4 + 16); - if ( v38 == 28 ) + v12 = (unsigned int *)(v44 * 4 + 16); + if ( v44 == 28 ) break; - v41 = opm_memcmp_be(a1: (unsigned int *)&v40[v38], a2: &v50.unk04, a3: unk00); - v38 += 4; - if ( v41 == 0 ) + v47 = opm_memcmp_be(a1: (unsigned int *)&v46[v44], a2: &v56.unk04, a3: unk00); + v44 += 4; + if ( v47 == 0 ) { v9[4] = dword_401F9C; - goto LABEL_62; + goto LABEL_63; } } v13 = 688; } -LABEL_81: +LABEL_82: v27 = (void (__cdecl *)())off_401FA0; off_401FA0(a1: 7, a2: 61440); v27(); -LABEL_82: +LABEL_83: v27(); } LABEL_8: @@ -1584,90 +1628,99 @@ LABEL_8: } if ( a7 != 32 ) goto LABEL_41; - v30 = 1; - goto LABEL_58; + v34 = 1; + goto LABEL_59; } if ( a7 != 32 ) { -LABEL_80: +LABEL_81: v13 = 264; - goto LABEL_81; + goto LABEL_82; } - v35 = (int *)off_401F48; + v40 = (int *)off_401F48; v9[6] = 0; v9[7] = 0; - v36 = &v35[22 * v17 + 16]; - v13 = opm_rpc_107(); + v41 = &v40[22 * v17]; + v42 = v41 + 16; + v13 = sub_403200(a1: v41[13], a2: v41 + 16); if ( v13 != 0 ) - goto LABEL_81; - *((_QWORD *)v9 + 3) = *(_QWORD *)v36; + goto LABEL_82; + *((_QWORD *)v9 + 3) = *v42; } else { if ( a7 != 32 ) - goto LABEL_80; + goto LABEL_81; + v39 = (int *)off_401F48; v9[5] = 0; - v50.unk00 = 0; - v13 = opm_rpc_102(); - if ( v50.unk00 != 1 ) + v56.unk00 = 0; + v13 = sub_4031DE(a1: v39[22 * v17 + 13], a2: &v56); + if ( v56.unk00 != 1 ) { v13 = 608; - goto LABEL_81; + goto LABEL_82; } v9[5] = 1; if ( v13 != 0 ) - goto LABEL_81; + goto LABEL_82; } } else { if ( a7 != 32 ) - goto LABEL_80; - opm_lib_zero_fill_words(result: &v50, a2: 0x28u); + goto LABEL_81; + opm_lib_zero_fill_words(result: &v56, a2: 0x28u); v9[5] = 0; v28 = opm_rpc_200(); if ( v28 != 0 ) { LABEL_44: v13 = v28; - goto LABEL_81; + goto LABEL_82; } - v33 = dword_401FA8; - if ( LOBYTE(v50.unk00) == 0 ) - v33 = 3; - v9[5] = v33; + v37 = dword_401FA8; + if ( LOBYTE(v56.unk00) == 0 ) + v37 = 3; + v9[5] = v37; } } else { if ( a7 != 32 ) - goto LABEL_80; + goto LABEL_81; + v29 = (int *)off_401F48; v9[5] = 0; - v50.unk00 = 0; - v13 = opm_rpc_105(); + v56.unk00 = 0; + v30 = &v29[22 * v17]; + v32 = v30[13]; + v31 = v30 + 13; + v13 = sub_4031BC(a1: v32, a2: &v56); if ( v13 != 0 ) - goto LABEL_81; + goto LABEL_82; if ( *v20 == 0 ) { - v30 = v9[5] | 1; - goto LABEL_58; + v34 = v9[5] | 1; + goto LABEL_59; } if ( *v20 != 1 ) { v13 = 260; - goto LABEL_81; + goto LABEL_82; } - v49 = 0; - v28 = opm_rpc_102(); + v55 = 0; + v28 = sub_4031DE(a1: *v31, a2: &v55); if ( v28 != 0 ) goto LABEL_44; - v29 = v9[5]; - v9[5] = v29 | 8; - if ( (v50.unk00 & 2) != 0 && *off_401FAC != 0 ) + if ( v55 != 4 ) { - v30 = v29 | 0x28; -LABEL_58: - v9[5] = v30; + v33 = v9[5]; + v9[5] = v33 | 8; + if ( (v56.unk00 & 2) != 0 && *off_401FAC != 0 ) + { + v34 = v33 | 0x28; +LABEL_59: + v9[5] = v34; + } } } } @@ -1675,7 +1728,7 @@ LABEL_58: { if ( a7 != 72 ) goto LABEL_41; - if ( v48 != 0 ) + if ( v54 != 0 ) { *v10 = dword_401FA4 + 6; LABEL_41: @@ -1683,15 +1736,15 @@ LABEL_41: off_401FA0(a1: 7, a2: 61440); v27(); v13 = 264; - goto LABEL_82; + goto LABEL_83; } } -LABEL_62: +LABEL_63: v13 = 0; LABEL_9: - if ( *v11 == v51 ) + if ( *v11 == v57 ) return v13; - ((void (__fastcall *)(int))loc_40319C)(a1: *v11 - v51); + ((void (__fastcall *)(int))loc_40319C)(a1: *v11 - v57); } } diff --git a/fw/decomp/opm_25.0.0.81_dc596ba6.c b/fw/decomp/opm_25.0.0.81_dc596ba6.c index cdaf6e4..12384aa 100644 --- a/fw/decomp/opm_25.0.0.81_dc596ba6.c +++ b/fw/decomp/opm_25.0.0.81_dc596ba6.c @@ -1,7 +1,7 @@ /* opm 25.0.0.81 (dc596ba6) -- named functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf - * functions: 55 total in build, 38 named, 17 anonymous + * functions: 55 total in build, 35 named, 20 anonymous * porting tiers: {"DISPATCH": 7, "EXACT": 10, "FUZZY": 1, "MNEM": 6, "ambiguous": 4, "cmd_protos": 4, "comments": 0, "dispatch_conflict": 0, "none": 27, "protos": 4, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -315,7 +315,7 @@ LABEL_6: goto LABEL_6; } v6 = &(*off_402590)[22 * v3]; - sub_403000(a1: v6 + 2, a2: 16); + opm_rpc_35(); v7 = (char *)ctx + 9244; v8 = v6[3]; v9 = v6[4]; @@ -941,44 +941,14 @@ int *__fastcall opm_memcpy_aligned(int *result, int *a2, unsigned int a3, int a4 return result; } -/* ==== opm_rpc_102 [tier=SVCOP size=34] ==== */ -int opm_rpc_102() +/* ==== opm_rpc_2 [tier=SVCOP size=36] ==== */ +int opm_rpc_2() { - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - opm_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== opm_rpc_105 [tier=SVCOP size=34] ==== */ -int opm_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_rpc_107 [tier=SVCOP size=34] ==== */ -int opm_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_rpc_161 [tier=SVCOP size=46] ==== */ -int opm_rpc_161() -{ - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x18u); + opm_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } - return 2; + return 1; } /* ==== opm_rpc_200 [tier=SVCOP size=32] ==== */ @@ -1011,24 +981,14 @@ int opm_rpc_208() return 2; } -/* ==== opm_rpc_300 [tier=SVCOP size=38] ==== */ -int opm_rpc_300() +/* ==== opm_rpc_3 [tier=SVCOP size=42] ==== */ +int opm_rpc_3() { - _DWORD v5[7]; // [sp+0h] [bp-1Ch] BYREF - - opm_lib_zero_fill_words(result: v5, a2: 0x18u); - __asm { SVC 0xF2 } - return 2; -} - -/* ==== opm_rpc_301 [tier=SVCOP size=36] ==== */ -int opm_rpc_301() -{ - _DWORD v5[6]; // [sp+0h] [bp-18h] BYREF + _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - opm_lib_zero_fill_words(result: v5, a2: 0x18u); + opm_lib_zero_fill_words(result: v5, a2: 0x20u); __asm { SVC 0xF2 } - return 2; + return 1; } /* ==== opm_rpc_304 [tier=SVCOP size=28] ==== */ @@ -1051,6 +1011,16 @@ int opm_rpc_305() return 2; } +/* ==== opm_rpc_35 [tier=SVCOP size=42] ==== */ +int opm_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_1 [tier=MNEM size=60] ==== */ int opm_sysdrv_rpc_1() { diff --git a/fw/decomp/opm_25.0.0.81_dc596ba6.index.json b/fw/decomp/opm_25.0.0.81_dc596ba6.index.json index 869bd9c..29eca15 100644 --- a/fw/decomp/opm_25.0.0.81_dc596ba6.index.json +++ b/fw/decomp/opm_25.0.0.81_dc596ba6.index.json @@ -234,9 +234,9 @@ { "addr": "0x402fb6", "ida_name": "sub_402FB6", - "name": null, + "name": "opm_rpc_2", "size": 36, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x402fda", @@ -248,9 +248,9 @@ { "addr": "0x403000", "ida_name": "sub_403000", - "name": null, + "name": "opm_rpc_35", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x40302a", @@ -276,9 +276,9 @@ { "addr": "0x4030c0", "ida_name": "sub_4030C0", - "name": null, + "name": "opm_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x4030ea", @@ -297,30 +297,30 @@ { "addr": "0x4031bc", "ida_name": "sub_4031BC", - "name": "opm_rpc_105", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4031de", "ida_name": "sub_4031DE", - "name": "opm_rpc_102", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x403200", "ida_name": "sub_403200", - "name": "opm_rpc_107", + "name": null, "size": 34, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x403222", "ida_name": "sub_403222", - "name": "opm_rpc_161", + "name": null, "size": 46, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x403250", @@ -339,16 +339,16 @@ { "addr": "0x40328c", "ida_name": "sub_40328C", - "name": "opm_rpc_300", + "name": null, "size": 38, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4032b2", "ida_name": "sub_4032B2", - "name": "opm_rpc_301", + "name": null, "size": 36, - "tier": "SVCOP" + "tier": "none" }, { "addr": "0x4032d6", diff --git a/fw/decomp/opm_25.0.4.47_f67d19b6.anon.c b/fw/decomp/opm_25.0.4.47_f67d19b6.anon.c index 5046c5d..968eb27 100644 --- a/fw/decomp/opm_25.0.4.47_f67d19b6.anon.c +++ b/fw/decomp/opm_25.0.4.47_f67d19b6.anon.c @@ -1,7 +1,7 @@ /* opm 25.0.4.47 (f67d19b6) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf - * functions: 47 total in build, 41 named, 6 anonymous + * functions: 47 total in build, 43 named, 4 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 20, "FUZZY": 1, "MNEM": 17, "ambiguous": 4, "cmd_protos": 0, "comments": 0, "dispatch_conflict": 1, "none": 5, "protos": 5, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -28,26 +28,6 @@ void __fastcall sub_406B80(int a1, int a2) JUMPOUT(0x406878); } -/* ==== ANON size=36 ==== */ -int sub_402B0A() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - opm_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - -/* ==== ANON size=42 ==== */ -int sub_402C14() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - opm_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=96 ==== */ int __fastcall sub_401702(_DWORD *a1) { @@ -116,13 +96,13 @@ BOOL __fastcall sub_402300(unsigned int a1, int a2, int a3, unsigned int *a4) v9 = 0; if ( opm_sysdrv_rpc_30() != 0 ) goto LABEL_11; - if ( opm_sysdrv_rpc_33() == 0 && opm_sysdrv_rpc_1() == 0 && sub_402C14(a1: 0, a2: 0) == 0 ) + if ( opm_sysdrv_rpc_33() == 0 && opm_sysdrv_rpc_1() == 0 && opm_rpc_3() == 0 ) goto LABEL_16; v6 = false; while ( 1 ) { if ( v8 != 0 ) - sub_402B0A(a1: v8); + opm_rpc_2(); LABEL_11: if ( v9 != 0 ) opm_sysdrv_rpc_31(); @@ -472,25 +452,15 @@ LABEL_82: if ( a1 == 1 ) { v5 = a5; - if ( opm_sysdrv_rpc_33() != 0 - || opm_sysdrv_rpc_1() != 0 - || sub_402C14(a1: v28, a2: v27) != 0 - || opm_sysdrv_rpc_9() != 0 ) - { + if ( opm_sysdrv_rpc_33() != 0 || opm_sysdrv_rpc_1() != 0 || opm_rpc_3() != 0 || opm_sysdrv_rpc_9() != 0 ) goto LABEL_74; - } } else { opm_asd301_path(a1: v6, a2: v6, a3: 256); v5 = a5; - if ( opm_sysdrv_rpc_33() != 0 - || opm_sysdrv_rpc_1() != 0 - || sub_402C14(a1: v28, a2: v27) != 0 - || opm_sysdrv_rpc_9() != 0 ) - { + if ( opm_sysdrv_rpc_33() != 0 || opm_sysdrv_rpc_1() != 0 || opm_rpc_3() != 0 || opm_sysdrv_rpc_9() != 0 ) goto LABEL_74; - } opm_asd301_path(a1: v7, a2: v7, a3: 256); } *v5 = 256; @@ -498,7 +468,7 @@ LABEL_74: v11 = 0; LABEL_75: if ( v28 != 0 ) - sub_402B0A(a1: v28); + opm_rpc_2(); if ( v27 != 0 ) opm_sysdrv_rpc_31(); } diff --git a/fw/decomp/opm_25.0.4.47_f67d19b6.c b/fw/decomp/opm_25.0.4.47_f67d19b6.c index 87f30b2..b87ffa9 100644 --- a/fw/decomp/opm_25.0.4.47_f67d19b6.c +++ b/fw/decomp/opm_25.0.4.47_f67d19b6.c @@ -1,7 +1,7 @@ /* opm 25.0.4.47 (f67d19b6) -- named functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf - * functions: 47 total in build, 41 named, 6 anonymous + * functions: 47 total in build, 43 named, 4 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 20, "FUZZY": 1, "MNEM": 17, "ambiguous": 4, "cmd_protos": 0, "comments": 0, "dispatch_conflict": 1, "none": 5, "protos": 5, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -1121,7 +1121,7 @@ int __fastcall opm_cmd04(void *ctx, struct ta_params *params) if ( (*off_4023E4)[22 * v3] != 1 ) return 266; v5 = &(*off_4023E4)[22 * v3]; - opm_sysdrv_rpc_35(); + opm_rpc_35(); v6 = (char *)ctx + 9244; v7 = v5[3]; v8 = v5[4]; @@ -1514,6 +1514,36 @@ int *__fastcall opm_memcpy_aligned(int *result, int *a2, unsigned int a3, int a4 return result; } +/* ==== opm_rpc_2 [tier=SVCOP size=36] ==== */ +int opm_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_rpc_3 [tier=SVCOP size=42] ==== */ +int opm_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_rpc_35 [tier=SVCOP size=42] ==== */ +int opm_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_1 [tier=MNEM size=60] ==== */ int opm_sysdrv_rpc_1() { @@ -1561,16 +1591,6 @@ int opm_sysdrv_rpc_33() return 1; } -/* ==== opm_sysdrv_rpc_35 [tier=IDA 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() { diff --git a/fw/decomp/opm_25.0.4.47_f67d19b6.index.json b/fw/decomp/opm_25.0.4.47_f67d19b6.index.json index 6abf07f..bab5b70 100644 --- a/fw/decomp/opm_25.0.4.47_f67d19b6.index.json +++ b/fw/decomp/opm_25.0.4.47_f67d19b6.index.json @@ -199,9 +199,9 @@ { "addr": "0x402b0a", "ida_name": "sub_402B0A", - "name": null, + "name": "opm_rpc_2", "size": 36, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x402b2e", @@ -213,9 +213,9 @@ { "addr": "0x402b54", "ida_name": "sub_402B54", - "name": "opm_sysdrv_rpc_35", + "name": "opm_rpc_35", "size": 42, - "tier": "IDA" + "tier": "SVCOP" }, { "addr": "0x402b7e", @@ -241,9 +241,9 @@ { "addr": "0x402c14", "ida_name": "sub_402C14", - "name": null, + "name": "opm_rpc_3", "size": 42, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x402c3e", diff --git a/fw/decomp/opm_25.0.4.48_ea9026f1.anon.c b/fw/decomp/opm_25.0.4.48_ea9026f1.anon.c index 0ec5f0f..0e09466 100644 --- a/fw/decomp/opm_25.0.4.48_ea9026f1.anon.c +++ b/fw/decomp/opm_25.0.4.48_ea9026f1.anon.c @@ -1,7 +1,7 @@ /* opm 25.0.4.48 (ea9026f1) -- UNNAMED functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf - * functions: 47 total in build, 42 named, 5 anonymous + * functions: 47 total in build, 43 named, 4 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 40, "FUZZY": 0, "MNEM": 0, "ambiguous": 2, "cmd_protos": 0, "comments": 0, "dispatch_conflict": 1, "none": 5, "protos": 5, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -28,16 +28,6 @@ void __fastcall sub_406CD0(int a1, int a2) JUMPOUT(0x4069C8); } -/* ==== ANON size=36 ==== */ -int sub_402C5A() -{ - _DWORD v5[12]; // [sp+8h] [bp-78h] BYREF - - opm_lib_zero_fill_words(result: v5, a2: 0x20u); - __asm { SVC 0xF2 } - return 1; -} - /* ==== ANON size=96 ==== */ int __fastcall sub_401702(_DWORD *a1) { @@ -112,7 +102,7 @@ BOOL __fastcall sub_402300(unsigned int a1, int a2, int a3, unsigned int *a4) while ( 1 ) { if ( v8 != 0 ) - sub_402C5A(a1: v8); + opm_rpc_2(); LABEL_11: if ( v9 != 0 ) opm_sysdrv_rpc_31(); @@ -388,7 +378,7 @@ LABEL_67: while ( 1 ) { if ( v21 != 0 ) - sub_402C5A(a1: v21); + opm_rpc_2(); if ( v20 != 0 ) opm_sysdrv_rpc_31(); LABEL_78: diff --git a/fw/decomp/opm_25.0.4.48_ea9026f1.c b/fw/decomp/opm_25.0.4.48_ea9026f1.c index 7a35bc8..9d9addd 100644 --- a/fw/decomp/opm_25.0.4.48_ea9026f1.c +++ b/fw/decomp/opm_25.0.4.48_ea9026f1.c @@ -1,7 +1,7 @@ /* opm 25.0.4.48 (ea9026f1) -- named functions * generated by fw/ta_re.py -- do not edit * reference: opm_25.0.4.48_ea9026f1.elf - * functions: 47 total in build, 42 named, 5 anonymous + * functions: 47 total in build, 43 named, 4 anonymous * porting tiers: {"DISPATCH": 0, "EXACT": 40, "FUZZY": 0, "MNEM": 0, "ambiguous": 2, "cmd_protos": 0, "comments": 0, "dispatch_conflict": 1, "none": 5, "protos": 5, "relabelled": 0, "types": 1} * * Addresses are omitted and functions are ordered by NAME so that the same @@ -1513,6 +1513,16 @@ int *__fastcall opm_memcpy_aligned(int *result, int *a2, unsigned int a3, int a4 return result; } +/* ==== opm_rpc_2 [tier=SVCOP size=36] ==== */ +int opm_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_1 [tier=EXACT size=60] ==== */ int opm_sysdrv_rpc_1() { diff --git a/fw/decomp/opm_25.0.4.48_ea9026f1.index.json b/fw/decomp/opm_25.0.4.48_ea9026f1.index.json index 60a5c2a..8cc2992 100644 --- a/fw/decomp/opm_25.0.4.48_ea9026f1.index.json +++ b/fw/decomp/opm_25.0.4.48_ea9026f1.index.json @@ -199,9 +199,9 @@ { "addr": "0x402c5a", "ida_name": "sub_402C5A", - "name": null, + "name": "opm_rpc_2", "size": 36, - "tier": "none" + "tier": "SVCOP" }, { "addr": "0x402c7e", |
