Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //----- (08120364) --------------------------------------------------------
- // int read_otp(u32 wordindex, void *out_buf, u32 size)
- // Read data from the OTP, this can only be used from the IOS-CRYPTO process.
- // -> 0 on success, -1 when IOUS PID isn't 3.
- //
- int __fastcall SysCall_0x22(u32 wordindex, void *out_buf, u32 size)
- {
- void *v3; // r5@1
- u32 v4; // r4@1
- int v5; // r6@1
- int v6; // lr@1
- int result; // r0@2
- v3 = out_buf;
- v4 = size;
- v5 = wordindex;
- v6 = -1;
- if ( *(_DWORD *)(current_thread_ctx_addr + 84) != 3 || (v6 = sub_8124AD8((unsigned int)out_buf, size, 4, 3, 3)) != 0 )
- result = v6;
- else
- result = Kernel_Read_From_OTP(v5, v3, v4);
- return result;
- }
- // 8173BA0: using guessed type int current_thread_ctx_addr;
- //----- (081203D8) --------------------------------------------------------
- int __fastcall sub_81203D8(int a1)
- {
- char v1; // zf@2
- int v2; // r3@6
- int v3; // r3@5
- int result; // r0@5
- if ( (unsigned __int8)off_8143000 == 32 )
- goto LABEL_9;
- v1 = (unsigned __int8)off_8143000 == 16;
- if ( (unsigned __int8)off_8143000 != 16 )
- v1 = (unsigned __int8)off_8143000 == 0;
- if ( v1 )
- {
- LABEL_9:
- dword_D800038 = a1;
- v2 = a1 | dword_D80003C;
- result = 0;
- dword_D80003C = v2;
- }
- else
- {
- dword_D800470 = a1;
- v3 = a1 | dword_D800478;
- result = 0;
- dword_D800478 = v3;
- }
- return result;
- }
- //----- (08120434) --------------------------------------------------------
- signed int __fastcall sub_8120434(int a1)
- {
- int v1; // r1@1
- signed int result; // r0@1
- char v3; // zf@2
- v1 = a1;
- result = -4;
- if ( (unsigned __int8)off_8143000 != 32 )
- {
- v3 = (unsigned __int8)off_8143000 == 16;
- if ( (unsigned __int8)off_8143000 != 16 )
- v3 = (unsigned __int8)off_8143000 == 0;
- if ( !v3 )
- {
- dword_D800474 = v1;
- result = 0;
- dword_D80047C |= v1;
- }
- }
- return result;
- }
- //----- (08120488) --------------------------------------------------------
- // write access to const memory has been detected, the output may be wrong!
- signed int sub_8120488()
- {
- signed int result; // r0@1
- char v1; // zf@2
- result = 226492416;
- if ( (unsigned __int8)off_8143000 == 32 )
- goto LABEL_9;
- v1 = (unsigned __int8)off_8143000 == 16;
- if ( (unsigned __int8)off_8143000 != 16 )
- v1 = (unsigned __int8)off_8143000 == 0;
- if ( v1 )
- {
- LABEL_9:
- starlet_gpio2_INTENABLE = 0;
- dword_D80003C = (int)byte_20801;
- off_FFFF0038 = sub_812DF60;
- dword_D800180 |= 6u;
- }
- else
- {
- off_FFFF0038 = sub_812E1BC;
- starlet_gpio2_INTENABLE = 0;
- dword_D800478 = (int)byte_20801;
- dword_D80047C = 0;
- }
- return result;
- }
- //----- (08120510) --------------------------------------------------------
- int sub_8120510()
- {
- int result; // r0@1
- char v1; // zf@2
- signed int v2; // r2@5
- result = 0;
- dword_D800014 = 0;
- if ( (unsigned __int8)off_8143000 == 32 )
- goto LABEL_12;
- v1 = (unsigned __int8)off_8143000 == 16;
- if ( (unsigned __int8)off_8143000 != 16 )
- v1 = (unsigned __int8)off_8143000 == 0;
- v2 = v1 ? 1 : 0;
- if ( v1 )
- {
- LABEL_12:
- starlet_gpio2_INTFLAG = -1;
- dword_D800038 = -16897;
- starlet_gpio2_INTENABLE = 0;
- dword_D80003C = 0;
- dword_D800040[0] = 0;
- }
- else
- {
- starlet_gpio2_INTFLAG = -1;
- dword_D800470 = -16897;
- dword_D800474 = -1;
- starlet_gpio2_INTENABLE = v2;
- dword_D800478 = v2;
- dword_D800480 = v2;
- dword_D80047C = v2;
- dword_D800484 = v2;
- }
- return result;
- }
- //----- (08120590) --------------------------------------------------------
- // int IOS_ClearandEnable(int id)
- // Enables hardware interrupts (IRQs) for the specified device
- // -> 0 on success
- int __fastcall SysCall_0x50(int id)
- {
- int v1; // r4@1
- int v2; // r0@1
- int v3; // r5@1
- signed int v4; // r4@2
- int result; // r0@3
- v1 = id;
- v2 = disable_interrupts();
- v3 = v2;
- switch ( v1 )
- {
- case 1:
- v4 = sub_81203D8(2);
- goto LABEL_3;
- case 2:
- if ( *(_DWORD *)(current_thread_ctx_addr + 84) != 3 )
- goto LABEL_5;
- v4 = sub_81203D8(4);
- goto LABEL_3;
- case 3:
- if ( *(_DWORD *)(current_thread_ctx_addr + 84) != 3 )
- goto LABEL_5;
- v4 = sub_81203D8(8);
- goto LABEL_3;
- case 4:
- v4 = sub_81203D8(16);
- goto LABEL_3;
- case 5:
- v4 = sub_81203D8(32);
- goto LABEL_3;
- case 6:
- v4 = sub_81203D8(64);
- goto LABEL_3;
- case 7:
- v4 = sub_81203D8(128);
- goto LABEL_3;
- case 8:
- v4 = sub_81203D8(256);
- goto LABEL_3;
- case 9:
- starlet_gpio2_INTFLAG = 1;
- v4 = 0;
- starlet_gpio2_INTENABLE |= 1u;
- goto LABEL_3;
- case 10:
- if ( *(_DWORD *)(current_thread_ctx_addr + 84) )
- goto LABEL_5;
- v4 = sub_81203D8(4096);
- goto LABEL_3;
- default:
- v4 = -4;
- goto LABEL_3;
- case 15:
- v4 = sub_81203D8(0x20000);
- goto LABEL_3;
- case 16:
- v4 = sub_81203D8(0x40000);
- goto LABEL_3;
- case 18:
- v4 = sub_81203D8(0x100000);
- goto LABEL_3;
- case 26:
- v4 = sub_81203D8(0x10000000);
- goto LABEL_3;
- case 29:
- if ( *(_DWORD *)(current_thread_ctx_addr + 84) )
- goto LABEL_5;
- v4 = sub_81203D8(2147483648);
- goto LABEL_3;
- case 30:
- v4 = sub_8120434(1);
- goto LABEL_3;
- case 31:
- v4 = sub_8120434(2);
- goto LABEL_3;
- case 32:
- v4 = sub_8120434(4);
- goto LABEL_3;
- case 33:
- v4 = sub_8120434(8);
- goto LABEL_3;
- case 34:
- v4 = sub_8120434(16);
- goto LABEL_3;
- case 35:
- v4 = sub_8120434(32);
- goto LABEL_3;
- case 36:
- v4 = sub_8120434(64);
- goto LABEL_3;
- case 37:
- v4 = sub_8120434(128);
- goto LABEL_3;
- case 38:
- if ( *(_DWORD *)(current_thread_ctx_addr + 84) != 3 )
- goto LABEL_5;
- v4 = sub_8120434(256);
- goto LABEL_3;
- case 39:
- if ( *(_DWORD *)(current_thread_ctx_addr + 84) != 3 )
- goto LABEL_5;
- v4 = sub_8120434(512);
- goto LABEL_3;
- case 40:
- v4 = sub_8120434(1024);
- goto LABEL_3;
- case 41:
- v4 = sub_8120434(2048);
- goto LABEL_3;
- case 42:
- v4 = sub_8120434(4096);
- goto LABEL_3;
- case 43:
- v4 = sub_8120434(0x2000);
- goto LABEL_3;
- case 44:
- v4 = sub_8120434(0x4000);
- goto LABEL_3;
- case 45:
- if ( *(_DWORD *)(current_thread_ctx_addr + 84) )
- goto LABEL_5;
- v4 = sub_8120434(0x8000000);
- goto LABEL_3;
- case 46:
- if ( *(_DWORD *)(current_thread_ctx_addr + 84) )
- goto LABEL_5;
- v4 = sub_8120434(0x20000000);
- goto LABEL_3;
- case 47:
- if ( *(_DWORD *)(current_thread_ctx_addr + 84) )
- {
- LABEL_5:
- sub_812E78C(v2);
- result = -1;
- }
- else
- {
- v4 = sub_8120434(2147483648);
- LABEL_3:
- sub_812E78C(v3);
- result = v4;
- }
- return result;
- }
- }
- // 8173BA0: using guessed type int current_thread_ctx_addr;
- // D8000F0: using guessed type int starlet_gpio2_INTFLAG;
- // D8000F4: using guessed type int starlet_gpio2_INTENABLE;
- //----- (08120970) --------------------------------------------------------
- // void get_debug_register_value()
- // Stores the value from LT_DEBUG register in the IOSU heap
- // -> Nothing
- int __fastcall SysCall_0x6E()
- {
- dword_8150000 = dword_D8005A4;
- }
- //----- (08120988) --------------------------------------------------------
- // void clear_debug_register_value()
- // Clears the LT_DEBUG register
- // -> Nothing
- int __fastcall SysCall_0x6F()
- {
- dword_D8005A4 = 0;
- }
- //----- (08120998) --------------------------------------------------------
- // void set_debug_register_value(u32 value)
- // Sets the value of the LT_DEBUG register
- // -> Nothing
- int __fastcall SysCall_0x70(int result)
- {
- if ( *(_DWORD *)(current_thread_ctx_addr + 84) == 1 )
- dword_D8005A4 = result;
- return result;
- }
- //----- (081209B8) --------------------------------------------------------
- // int check_debug_flag(u32 flag)
- // Checks if the supplied flag is enabled in the LT_DEBUG register copy on the IOSU heap
- // -> The flag value if enabled or 0 if disabled
- int __fastcall SysCall_0x71(u32 flag)
- {
- return flag & dword_8150000;
- }
- //----- (081209CC) --------------------------------------------------------
- // int set_iop2x_state(u32 state)
- // Sets the state of an unknown feature from BSP
- // -> 0 on success
- int __fastcall SysCall_0x6C(u32 state)
- {
- u32 v1; // r5@1
- int result; // r0@2
- int v3; // r0@3
- bool v4; // r6@3
- unsigned int v5; // r3@3
- int v6; // r11@3
- signed int v7; // r1@5
- int v8; // r9@7
- int v9; // r10@7
- int v10; // r8@7
- int v11; // r7@7
- signed int v12; // r2@9
- unsigned int v13; // r3@11
- int v14; // r2@11
- unsigned int v15; // r3@11
- int v16; // r4@13
- char v17; // r3@15
- v1 = state;
- if ( *(_DWORD *)(current_thread_ctx_addr + 84) == 2 )
- {
- v3 = disable_interrupts();
- v4 = v1 == 0;
- v5 = (dword_D8005BC & 4u) >> 2;
- v6 = v3;
- if ( v4 & v5 || ((v17 = v5 ^ 1, v1) ? (v3 = v17 & 1) : (v3 = 0), v3) )
- {
- if ( v1 )
- v7 = 3;
- else
- v7 = 1;
- v8 = dword_D800478;
- v9 = dword_D80047C;
- v10 = dword_D800480;
- v11 = dword_D800484;
- dword_D800478 = 0;
- dword_D800480 = 0;
- dword_D800484 = 0;
- dword_D800474 = 4096;
- dword_D80047C = 4096;
- dword_D8005BC = v7;
- sub_81314C4(v3);
- while ( !(dword_D800474 & 0x1000) )
- ;
- dword_D80047C = 0;
- dword_D800474 = 4096;
- v12 = v1;
- if ( v1 )
- v12 = 1;
- v13 = dword_D8005BC & 4;
- v14 = v12 & (v13 >> 2);
- v15 = v13 >> 2;
- if ( v14 || v4 & (v15 ^ 1) )
- {
- v16 = 0;
- dword_D800478 = v8;
- dword_D80047C = v9;
- dword_D800480 = v10;
- dword_D800484 = v11;
- }
- else
- {
- v16 = -21;
- dword_D800478 = v8;
- dword_D80047C = v9;
- dword_D800480 = v10;
- dword_D800484 = v11;
- }
- }
- else
- {
- v16 = 0;
- }
- sub_812E78C(v6);
- result = v16;
- }
- else
- {
- result = -1;
- }
- return result;
- }
- //----- (08120B10) --------------------------------------------------------
- int sub_8120B10()
- {
- int v0; // r0@1
- signed int v1; // r12@1
- unsigned int *v2; // r1@2
- int v3; // r2@2
- _DWORD *v4; // r1@3
- _DWORD *v5; // r3@4
- _DWORD *v6; // r2@4
- HW_RESETS &= 0xFFBFBFFF;
- dword_D8005E0 &= 0xFFFFFFF7;
- v0 = sub_81247B4(4);
- v1 = 218366036;
- do
- {
- v2 = (unsigned int *)(v1 + 917504);
- *(_DWORD *)v1 = *(_DWORD *)v1 & 0xFFFFFFFB | 0x100;
- v3 = *(_DWORD *)(v1 + 917504);
- v1 += 4;
- *v2 = v3 & 0xFFFFFFFB | 0x100;
- }
- while ( v1 != 218366060 );
- v4 = (_DWORD *)218431572;
- do
- {
- *v4 = 16;
- v5 = v4 + 0x4000;
- v6 = v4 + 229376;
- ++v4;
- *v5 = 16;
- *v6 = 16;
- }
- while ( v4 != (_DWORD *)218431588 );
- return sub_81247B4(v0);
- }
- //----- (08120BB8) --------------------------------------------------------
- const char *sub_8120BB8()
- {
- void *v0; // r6@1
- signed int v1; // r0@1
- unsigned int v2; // r3@1
- signed int v3; // r5@1
- char v4; // zf@2
- const char *result; // r0@6
- v0 = sub_812EB3C("Sys", 0, 0, 0, 0);
- v1 = sub_812ED34(&off_8143000);
- v2 = (unsigned int)off_8143000 >> 24;
- v3 = v1;
- if ( (unsigned int)off_8143000 >> 24 != 32 )
- {
- v4 = v2 == 0;
- if ( v2 )
- v4 = v2 == 16;
- if ( !v4 && !((unsigned int)off_8143000 & 0xF000000) )
- sub_8129A24("__iosPreBSPHardwareInit() failed to detect valid hardware version!\n");
- }
- result = "BSP Managed Entities Failed Initialization!\n";
- if ( (unsigned int)v0 | v3 )
- sub_8129A24("BSP Managed Entities Failed Initialization!\n");
- return result;
- }
- // 8143000: using guessed type int (*off_8143000)[264357];
- //----- (08120C58) --------------------------------------------------------
- int sub_8120C58()
- {
- HW_EXICTRL = HW_EXICTRL & 0xFFFFFFFE | 1;
- HW_EXICTRL |= 4u;
- dword_D800074 |= 0x10u;
- if ( sub_8125298() )
- sub_8129A24("__iosInitMMU() failed!\n");
- if ( sub_8122500() )
- sub_8129A24("__iosMemMapInit() failed!\n");
- return sub_812EA44();
- }//----- (08120CC4) --------------------------------------------------------
- int sub_8120CC4()
- {
- dword_8143004 = sub_812CCB4((u32 (__cdecl *)(void *))sub_8120D08, 0, (u32 *)&dword_FFFF0500, 0x400u, 0);
- return 0;
- }
- //----- (08120D08) --------------------------------------------------------
- void sub_8120D08()
- {
- while ( 1 )
- {
- sub_812994C();
- sub_812994C();
- }
- }
- //----- (08120D18) --------------------------------------------------------
- int *__fastcall sub_8120D18(unsigned int a1)
- {
- unsigned int v1; // r2@1
- int *result; // r0@2
- v1 = 169 * a1;
- if ( a1 > 2 || (result = &debug_args_addr[v1], !debug_args_addr[v1]) )
- result = 0;
- return result;
- }
- // FFFF1904: using guessed type int debug_args_addr[];
- //----- (08120D58) --------------------------------------------------------
- int __fastcall sub_8120D58(int a1, int a2, int a3)
- {
- int *v3; // r12@1
- int result; // r0@1
- v3 = *(int **)(a1 + 72);
- result = ~a2;
- *v3 = a3 & a2 | *v3 & ~a2;
- return result;
- }
- //----- (08120D78) --------------------------------------------------------
- // int flush_ipc_server()
- // Resets the ARM IPC control register's flags
- // -> 0 on success
- int __fastcall SysCall_0x5B()
- {
- int *v0; // r2@1
- _DWORD *v1; // r3@2
- char v2; // zf@2
- v0 = debug_args_addr;
- do
- {
- v1 = (_DWORD *)*v0;
- v2 = *v0 == 0;
- if ( *v0 )
- v1 = *(_DWORD **)((char *)v0 + (_DWORD)byte_48);
- v0 += 169;
- if ( !v2 )
- *v1 = 62;
- }
- while ( v0 != &dword_FFFF20F0 );
- return 0;
- }
- //----- (08120DB0) --------------------------------------------------------
- int __fastcall sub_8120DB0(int a1, int a2, unsigned int a3)
- {
- return sub_81200F0(a2, a3);
- }
- //----- (08120DBC) --------------------------------------------------------
- int __fastcall sub_8120DBC(int a1)
- {
- int v1; // r6@1
- int v2; // r5@1
- int result; // r0@1
- int v4; // r3@2
- int v5; // r2@2
- int v6; // r3@3
- void *v7; // r4@3
- int v8; // r3@3
- int v9; // r1@3
- int v10; // r3@4
- int v11; // r2@4
- char v12; // zf@4
- bool v13; // r3@4
- v1 = *(_DWORD *)(a1 + 612);
- v2 = a1;
- result = a1 + 84;
- if ( !v1 )
- {
- v4 = *(_DWORD *)(v2 + 84);
- v5 = v4 - 1;
- if ( v4 )
- {
- v6 = *(_DWORD *)(result + 4);
- *(_DWORD *)(v2 + 84) = v5;
- v7 = *(void **)(result + 4 * v6 + 12);
- *(_DWORD *)(result + 4) = ((_BYTE)v6 + 1) & 0x7F;
- SysCall_0x52(v7, 0x38u);
- **(_DWORD **)(v2 + 80) = v7;
- v8 = *(_DWORD *)(v2 + 608);
- v9 = v8 - 1;
- if ( !v8 )
- sub_8129A24("IPC(%d): flowControlRetireRequest() invalid state detected\n", *(_DWORD *)(v2 + 8));
- v10 = *(_DWORD *)(v2 + 616);
- v11 = 9;
- v12 = v10 == 0;
- v13 = v10 != 0;
- *(_DWORD *)(v2 + 608) = v9;
- if ( v12 )
- {
- v11 = 1;
- *(_DWORD *)(v2 + 612) = 1;
- }
- else
- {
- *(_DWORD *)(v2 + 612) = v13;
- *(_DWORD *)(v2 + 616) = 0;
- }
- result = sub_8120D58(v2, -49, v11);
- ++*(_DWORD *)(v2 + 672);
- }
- }
- return result;
- }
- //----- (08120E80) --------------------------------------------------------
- int __fastcall sub_8120E80(int a1, unsigned int *a2, int a3)
- {
- unsigned int *v3; // r6@1
- unsigned int v4; // r1@1
- int v5; // r11@1
- int v6; // r8@1
- int v7; // r12@5
- int v8; // r0@5
- unsigned int v9; // r1@5
- unsigned int v10; // r0@5
- int v12; // r3@8
- int v13; // r3@8
- int v14; // r6@9
- signed int v15; // r9@9
- int v16; // r10@10
- int v17; // r7@10
- unsigned int v18; // r0@11
- v3 = a2;
- v4 = _byteswap_ulong(*a2);
- v5 = a3;
- v6 = a1;
- switch ( v4 )
- {
- case 6u:
- v12 = *((_BYTE *)v3 + 43);
- sub_8120DB0(a1, _byteswap_ulong(v3[10]), _byteswap_ulong(v3[11]));
- v13 = *((_BYTE *)v3 + 51);
- sub_8120DB0(v6, _byteswap_ulong(v3[12]), _byteswap_ulong(v3[13]));
- break;
- case 7u:
- v14 = (int)(v3 + 9);
- v15 = _byteswap_ulong(*(_DWORD *)(v14 + 4)) + _byteswap_ulong(*(_DWORD *)(v14 + 8));
- if ( v15 > 0 )
- {
- v16 = 0;
- v17 = 0;
- do
- {
- v18 = v17 + _byteswap_ulong(*(_DWORD *)(v14 + 12));
- ++v16;
- sub_8120DB0(v6, _byteswap_ulong(*(_DWORD *)v18), _byteswap_ulong(*(_DWORD *)(v18 + 4)));
- v17 += 12;
- }
- while ( v15 != v16 );
- }
- sub_8120DB0(v6, _byteswap_ulong(*(_DWORD *)(v14 + 12)), 12 * v15);
- break;
- case 3u:
- sub_8120DB0(a1, _byteswap_ulong(v3[9]), _byteswap_ulong(v3[1]));
- break;
- }
- v7 = *(_DWORD *)(v6 + 92);
- v8 = *(_DWORD *)(v6 + 84);
- *(_DWORD *)(v6 + 92) = ((_BYTE)v7 + 1) & 0x7F;
- v9 = *(_DWORD *)(v6 + 664);
- v10 = v8 + 1;
- *(_DWORD *)(v6 + 84) = v10;
- if ( v10 > v9 )
- *(_DWORD *)(v6 + 664) = v10;
- *(_DWORD *)(v6 + 84 + 4 * v7 + 12) = v5;
- return sub_8120DBC(v6);
- }
- //----- (081210EC) --------------------------------------------------------
- int __fastcall sub_81210EC(int a1, int a2, unsigned int a3)
- {
- int v3; // r9@1
- int v4; // r10@1
- unsigned int v5; // r4@1
- int *v6; // r0@1
- int v8; // r3@4
- int v9; // r12@5
- int v10; // r6@6
- int v11; // lr@6
- int v12; // r5@6
- int v13; // r4@6
- int v14; // r11@6
- int v15; // [sp+1Ch] [bp-54h]@5
- int v16; // [sp+20h] [bp-50h]@5
- int v17; // [sp+24h] [bp-4Ch]@5
- int v18; // [sp+28h] [bp-48h]@6
- int v19; // [sp+2Ch] [bp-44h]@6
- int v20; // [sp+30h] [bp-40h]@6
- unsigned int v21; // [sp+34h] [bp-3Ch]@1
- unsigned int v22; // [sp+38h] [bp-38h]@4
- int v23; // [sp+3Ch] [bp-34h]@1
- int v24; // [sp+40h] [bp-30h]@1
- unsigned int v25; // [sp+44h] [bp-2Ch]@4
- unsigned int v26; // [sp+48h] [bp-28h]@4
- v3 = a1;
- v4 = a2;
- v21 = a3;
- v24 = disable_interrupts();
- v5 = _byteswap_ulong(*(_DWORD *)(v3 + 16));
- v6 = sub_8120D18(v5 - 1);
- v23 = (int)v6;
- if ( !v6 )
- sub_8129A24("IPC(?): __iosIpcReply() encountered invalid clientNodeId %d.", v5);
- if ( !*v6 )
- sub_8129A24("IPC(%d): __iosIpcReply() invalid clientNodeId.", v6[2]);
- sub_812EA10(dword_81A4000[0]);
- v8 = (*(_BYTE *)(v3 + 21) << 16) | (*(_BYTE *)(v3 + 20) << 24) | (*(_BYTE *)(v3 + 22) << 8);
- v25 = _byteswap_ulong(*(_DWORD *)(v3 + 20)) - 14;
- sub_8120164(v4, 0x38u);
- v22 = _byteswap_ulong(*(_DWORD *)(v4 + 16));
- v26 = _byteswap_ulong(*(_DWORD *)(v3 + 16));
- if ( _byteswap_ulong(*(_DWORD *)(v4 + 16)) != v26 )
- {
- v17 = *(_BYTE *)(v4 + 20);
- v9 = *(_BYTE *)(v4 + 21);
- v16 = *(_BYTE *)(v4 + 22);
- v15 = *(_BYTE *)(v4 + 23);
- v10 = *(_BYTE *)v4;
- v11 = *(_BYTE *)(v4 + 1);
- v19 = *(_BYTE *)(v4 + 2);
- v18 = *(_BYTE *)(v4 + 3);
- v12 = *(_BYTE *)v3;
- v13 = *(_BYTE *)(v3 + 1);
- v20 = *(_BYTE *)(v3 + 2);
- v14 = *(_BYTE *)(v3 + 3);
- goto LABEL_8;
- }
- v9 = *(_BYTE *)(v4 + 21);
- v17 = *(_BYTE *)(v4 + 20);
- v16 = *(_BYTE *)(v4 + 22);
- v15 = *(_BYTE *)(v4 + 23);
- if ( v25 != (v15 | (v9 << 16) | (v17 << 24) | (v16 << 8)) )
- {
- v10 = *(_BYTE *)v4;
- v11 = *(_BYTE *)(v4 + 1);
- v19 = *(_BYTE *)(v4 + 2);
- v18 = *(_BYTE *)(v4 + 3);
- v12 = *(_BYTE *)v3;
- v13 = *(_BYTE *)(v3 + 1);
- v20 = *(_BYTE *)(v3 + 2);
- v14 = *(_BYTE *)(v3 + 3);
- goto LABEL_8;
- }
- v11 = *(_BYTE *)(v4 + 1);
- v13 = *(_BYTE *)(v3 + 1);
- v10 = *(_BYTE *)v4;
- v12 = *(_BYTE *)v3;
- v19 = *(_BYTE *)(v4 + 2);
- v20 = *(_BYTE *)(v3 + 2);
- v18 = *(_BYTE *)(v4 + 3);
- v14 = *(_BYTE *)(v3 + 3);
- if ( (v18 | (v11 << 16) | (v10 << 24) | (v19 << 8)) != (v14 | (v13 << 16) | (v12 << 24) | (v20 << 8)) )
- LABEL_8:
- sub_8129A24(
- "IPC(%d): __iosIpcReply() found invalid PPC state clientNodeId=%d/%d, clientPid=%d/%d, cmd=%d/%d, handle=%d/%d.",
- *(_DWORD *)(v23 + 8),
- v22,
- v26,
- v15 | (v9 << 16) | (v17 << 24) | (v16 << 8),
- v25,
- v18 | (v11 << 16) | (v10 << 24) | (v19 << 8),
- v14 | (v13 << 16) | (v12 << 24) | (v20 << 8),
- _byteswap_ulong(*(_DWORD *)(v4 + 8)),
- _byteswap_ulong(*(_DWORD *)(v3 + 8)),
- *(_BYTE *)(v4 + 9) << 16);
- *(_BYTE *)(v4 + 7) = v21;
- *(_BYTE *)(v4 + 4) = BYTE3(v21);
- *(_BYTE *)(v4 + 5) = v21 >> 16;
- *(_BYTE *)(v4 + 6) = BYTE1(v21);
- sub_8120E80(v23, (unsigned int *)v3, v4);
- sub_812EA10(dword_81A4000[*(_DWORD *)(current_thread_ctx_addr + 84)]);
- sub_812E78C(v24);
- return 0;
- }
- //----- (08121440) --------------------------------------------------------
- int __fastcall sub_8121440(unsigned int a1, int a2, int a3)
- {
- int v3; // r6@1
- int v4; // r5@1
- int v5; // r4@1
- int v6; // r7@1
- int result; // r0@2
- int v8; // r0@3
- unsigned int v9; // r3@3
- v3 = a2;
- v4 = a2;
- v5 = a3;
- v6 = a1;
- if ( !a2 )
- goto LABEL_9;
- v8 = SysCall_0x5E((void *)a1, a2);
- v9 = (unsigned int)~v8 >> 31;
- if ( !v5 )
- v9 = 0;
- v4 = v8;
- if ( v9 )
- {
- sub_8120164(v6, v3);
- result = v4;
- }
- else
- {
- LABEL_9:
- result = v4;
- }
- return result;
- }
- //----- (08121494) --------------------------------------------------------
- int sub_8121494()
- {
- int result; // r0@1
- int v1; // r2@1
- sub_8131DA0((_BYTE *)debug_args_addr, 0, (unsigned int)&byte_7EC);
- sub_8131DA0(&dword_FFFF20F0, 0, (unsigned int)byte_408);
- result = sub_812CCB4((u32 (__cdecl *)(void *))sub_8121510, 0, (u32 *)dword_FFFF2CF8, 0x800u, 95);
- v1 = result;
- if ( result >= 0 )
- result = 0;
- dword_8143010 = v1;
- return result;
- }
- //----- (08121510) --------------------------------------------------------
- // write access to const memory has been detected, the output may be wrong!
- void sub_8121510()
- {
- int v0; // r0@1
- int *v1; // r11@2
- int **v2; // r6@2
- char v3; // zf@4
- signed int v4; // r1@7
- int *v5; // r4@10
- unsigned int *v6; // r4@16
- int v7; // r10@16
- unsigned int v8; // r4@16
- int *v9; // r0@16
- int v10; // r5@16
- int v11; // r2@17
- unsigned int v12; // r2@19
- unsigned int *v13; // r1@21
- int v14; // r3@21
- unsigned int v15; // r6@21
- int v16; // r2@21
- unsigned int v17; // r7@24
- int v18; // r8@24
- signed int v19; // r12@28
- unsigned int v20; // r3@50
- unsigned int v21; // r2@50
- unsigned __int8 v22; // cf@50
- unsigned int *v23; // r3@50
- int v24; // r5@59
- int v25; // [sp+18h] [bp-5Ch]@23
- int v26; // [sp+20h] [bp-54h]@31
- unsigned int v27; // [sp+2Ch] [bp-48h]@23
- _BYTE *v28; // [sp+3Ch] [bp-38h]@28
- unsigned int v29; // [sp+40h] [bp-34h]@34
- unsigned int v30; // [sp+44h] [bp-30h]@28
- unsigned int v31; // [sp+48h] [bp-2Ch]@43
- unsigned int v32; // [sp+4Ch] [bp-28h]@43
- v0 = SysCall_0x0C((u32 *)dword_FFFF20F4, 0x100u);
- dword_814300C = v0;
- if ( v0 < 0 )
- {
- v1 = &dword_FFFF20F0;
- }
- else
- {
- v1 = &dword_FFFF20F0;
- v2 = sub_8123B14(v0, (int **)&dword_FFFF20F0);
- if ( (signed int)v2 < 0 )
- goto LABEL_75;
- sub_8131DA0((_BYTE *)debug_args_addr, 0, (unsigned int)&byte_7EC);
- if ( (unsigned __int8)off_8143000 == 32 )
- goto LABEL_76;
- v3 = (unsigned __int8)off_8143000 == 16;
- if ( (unsigned __int8)off_8143000 != 16 )
- v3 = (unsigned __int8)off_8143000 == 0;
- v4 = v3 ? 1 : 0;
- if ( v3 )
- {
- LABEL_76:
- dword_FFFF1BF0 = (int)&dword_D80000C;
- dword_FFFF1BF4 = 226492416;
- dword_FFFF1BF8 = (int)&dword_D800000[2];
- dword_FFFF1BB8 = 10;
- *(_DWORD *)algn_FFFF1BAC = 2;
- dword_FFFF1BB0 = 1;
- dword_FFFF1BB4 = 29;
- dword_FFFF1BA8 = 1;
- v2 = (int **)SysCall_0x11(29, dword_814300C, (int)&dword_FFFF1BB8);
- if ( v2 )
- sub_8129A24("IPC(%d): Unable to register event handler\n", 0);
- *(_DWORD *)word_0 = 6;
- SysCall_0x50(0);
- }
- else
- {
- v5 = debug_args_addr;
- while ( 1 )
- {
- v24 = v4 + 1;
- *(int *)((char *)v5 + (_DWORD)byte_8) = v4;
- *(int *)((char *)v5 + (_DWORD)dword_4) = v4 + 1;
- if ( v4 == 1 )
- {
- *(int *)((char *)v5 + (_DWORD)byte_48) = (int)&dword_D80041C;
- *(int *)((char *)v5 + (_DWORD)byte_4C) = (int)dword_D800410;
- *(int *)((char *)&dword_4D + (_DWORD)v5 + 3) = (int)&dword_D800410[2];
- v5[3] = 46;
- *(int *)((char *)v5 + (_DWORD)byte_10) = 10;
- *v5 = 1;
- }
- else if ( v4 == 2 )
- {
- *(int *)((char *)v5 + (_DWORD)byte_48) = (int)dword_D80042C;
- *(int *)((char *)v5 + (_DWORD)byte_4C) = (int)dword_D800420;
- *(int *)((char *)&dword_4D + (_DWORD)v5 + 3) = (int)&dword_D800420[2];
- v5[3] = 45;
- *(int *)((char *)v5 + (_DWORD)byte_10) = 11;
- *v5 = 1;
- }
- else
- {
- if ( v4 )
- sub_8129A24("IPC(%d): Invalid server client node index\n");
- *(int *)((char *)v5 + (_DWORD)byte_48) = (int)&dword_D80040C;
- *(int *)((char *)v5 + (_DWORD)byte_4C) = (int)dword_D800400;
- *(int *)((char *)&dword_4D + (_DWORD)v5 + 3) = (int)&dword_D800400[2];
- v5[3] = 47;
- *(int *)((char *)v5 + (_DWORD)byte_10) = 9;
- *v5 = 1;
- }
- if ( (signed int)v2 >= 0 )
- {
- v2 = (int **)SysCall_0x11(v5[3], dword_814300C, (int)(v5 + 4));
- if ( v2 )
- sub_8129A24("IPC(%d): Unable to register event handler\n", *(int *)((char *)v5 + (_DWORD)byte_8));
- **(_DWORD **)((char *)v5 + (_DWORD)byte_48) = 6;
- SysCall_0x50(v5[3]);
- }
- v5 += 169;
- if ( v24 == 3 )
- break;
- v4 = v24;
- }
- }
- if ( (signed int)v2 < 0 )
- LABEL_75:
- sub_8129A24("IPC: ipcServerInit() failed.\n");
- }
- while ( 1 )
- {
- while ( SysCall_0x10(dword_814300C, (u32 *)&dword_FFFF24F4, 0) < 0 )
- ;
- v6 = *(unsigned int **)((char *)v1 + (_DWORD)byte_404);
- v7 = disable_interrupts();
- v8 = _byteswap_ulong(*v6);
- v9 = sub_8120D18(v8 - 9);
- v10 = (int)v9;
- if ( !v9 )
- break;
- v11 = *(_DWORD *)v9[18];
- if ( v11 & 2 )
- {
- v9[153] = 0;
- sub_8120D58((int)v9, -49, 2);
- sub_8120DBC(v10);
- }
- else
- {
- if ( !(v11 & 4) )
- sub_8129A24("IPC(%d): __iosIpcThread() encountered unexpected IPC CTRL Reg value of 0x%08x.", v9[2]);
- v12 = v9[152];
- if ( v12 <= 0x7F )
- {
- v20 = v9[165];
- v21 = v12 + 1;
- v22 = v21 >= v20;
- v3 = v21 == v20;
- v23 = (unsigned int *)v9[19];
- v9[152] = v21;
- if ( !v3 & v22 )
- v9[165] = v21;
- v15 = *v23;
- v16 = 12;
- }
- else
- {
- if ( v9[154] )
- sub_8129A24("IPC(%d): flowControlReportNewRequest() invalid state detected\n", v9[2]);
- v13 = (unsigned int *)v9[19];
- v14 = v9[167] + 1;
- v9[154] = 1;
- v9[167] = v14;
- v15 = *v13;
- v16 = 4;
- }
- sub_8120D58((int)v9, -49, v16);
- if ( sub_8121440(v15, 56, 1) < 0 )
- {
- ++*(_DWORD *)(v10 + 620);
- sub_8129A24(
- "IPC(%d): dispatchIpcRequest() encountered invalid resource request address %p.",
- *(_DWORD *)(v10 + 8),
- v15);
- }
- sub_8131D04(&v25, (char *)v15, 56);
- if ( v27 > 7 )
- {
- ++*(_DWORD *)(v10 + 624);
- sub_8129A24(
- "IPC(%d): dispatchIpcRequest() received IPC request with invalid clientPid of %d.",
- *(_DWORD *)(v10 + 8));
- }
- v17 = v27 + 14;
- v18 = *(_DWORD *)(v10 + 4);
- switch ( v25 )
- {
- case 1:
- v19 = sub_8127FAC(v28, v30, *v1, v15, v17, v18);
- if ( v19 >= 0 )
- break;
- ++*(_DWORD *)(v10 + 648);
- goto LABEL_26;
- case 2:
- v19 = sub_812720C(v26, *v1, v15, (unsigned int)v28, v17, v18);
- if ( v19 >= 0 )
- break;
- ++*(_DWORD *)(v10 + 652);
- goto LABEL_26;
- case 3:
- v19 = sub_8127C2C(v26, (unsigned int)v28, v29, *v1, v15, v17, v18);
- if ( v19 >= 0 )
- break;
- ++*(_DWORD *)(v10 + 628);
- goto LABEL_26;
- case 4:
- v19 = sub_8127ADC(v26, (unsigned int)v28, v29, *v1, v15, v17, v18);
- if ( v19 >= 0 )
- break;
- ++*(_DWORD *)(v10 + 632);
- goto LABEL_26;
- case 5:
- v19 = sub_8126BC4(v26, (unsigned int)v28, v29, *v1, v15, v17, v18);
- if ( v19 >= 0 )
- break;
- ++*(_DWORD *)(v10 + 636);
- goto LABEL_26;
- case 6:
- v19 = sub_81278B4(v26, (unsigned int)v28, v29, v30, v31, v32, *v1, v15, v17, v18);
- if ( v19 >= 0 )
- break;
- ++*(_DWORD *)(v10 + 640);
- goto LABEL_26;
- case 7:
- v19 = sub_812742C(v26, (unsigned int)v28, v29, v30, v31, *v1, v15, v17, v18);
- if ( v19 < 0 )
- {
- ++*(_DWORD *)(v10 + 644);
- LABEL_26:
- *(_BYTE *)(v15 + 5) = (unsigned int)v19 >> 16;
- *(_BYTE *)(v15 + 6) = BYTE1(v19);
- *(_BYTE *)(v15 + 4) = BYTE3(v19);
- *(_BYTE *)(v15 + 7) = v19;
- sub_8120E80(v10, (unsigned int *)v15, v15);
- }
- break;
- default:
- sub_8129A24(
- "IPC(%d): dispatchIpcRequest() received IPC request with invalid cmd of %d.",
- *(_DWORD *)(v10 + 8),
- v25);
- return;
- }
- }
- SysCall_0x50(*(_DWORD *)(v10 + 12));
- sub_812E78C(v7);
- }
- sub_8129A24("IPC(?): __iosIpcThread() encountered invalid cmd %d.", v8);
- }
- //----- (08121B18) --------------------------------------------------------
- int sub_8121B18()
- {
- int v0; // r1@1
- int v1; // r2@1
- int v2; // r3@2
- int v3; // r1@3
- int v4; // r2@3
- int v5; // r3@3
- int v6; // r2@3
- int v7; // r3@3
- int v9; // [sp+0h] [bp-Ch]@2
- SysCall_0x6E();
- SysCall_0x6F();
- if ( SysCall_0x71(0x80000000) )
- {
- v2 = 0;
- v9 = 0;
- do
- {
- sub_8131FF4("\n\n\n\n\n\n\n\n\n\n", v0, v1, v2);
- sub_8131FF4("Enter '1' to proceed with kernel startup. \n", v3, v4, v5);
- sub_8132148((int)"%d", (int)&v9, v6, v7);
- v2 = v9;
- }
- while ( v9 != 1 );
- }
- sub_8120C58();
- sub_8120510();
- sub_8120488();
- sub_812B308();
- sub_81235E8();
- sub_81294AC();
- return sub_812CD08();
- }
- //----- (08121B9C) --------------------------------------------------------
- bool __fastcall sub_8121B9C(unsigned int a1)
- {
- bool v1; // r3@1
- v1 = 1;
- if ( a1 < 0xFFF00000 || a1 > 0xFFF07FFF )
- v1 = a1 >= 0xFFFF0000;
- return v1;
- }
- //----- (08121BD8) --------------------------------------------------------
- int __fastcall sub_8121BD8(unsigned int a1, _DWORD *a2, int a3, int a4)
- {
- char v4; // lr@6
- char v5; // r3@9
- int result; // r0@10
- char v7; // lr@11
- if ( a2 )
- a4 = 0;
- if ( a2 )
- *a2 = a4;
- if ( a1 >= 0xFFFF0000 )
- goto LABEL_10;
- v4 = 0;
- if ( a1 > 0x811FFFF )
- v4 = 1;
- if ( a1 > 0x81BFFFF )
- {
- v5 = 0;
- }
- else
- {
- v5 = v4 & 1;
- if ( v4 & 1 )
- goto LABEL_10;
- }
- v7 = v5;
- if ( a1 >= 0x1D000000 )
- v7 = 1;
- result = v7 & 1;
- if ( v7 & 1 )
- {
- if ( a2 )
- {
- result = 1;
- *a2 = 1;
- return result;
- }
- LABEL_10:
- result = 1;
- }
- return result;
- }
- //----- (08121CDC) --------------------------------------------------------
- // int load_cafe2wii()
- // Maps the cafe2wii image memory
- // -> 0 on success
- int __fastcall SysCall_0x86()
- {
- signed int v0; // r3@1
- signed int v2; // [sp+0h] [bp-2Ch]@2
- signed int v3; // [sp+4h] [bp-28h]@2
- signed int v4; // [sp+8h] [bp-24h]@2
- signed int v5; // [sp+Ch] [bp-20h]@2
- signed int v6; // [sp+10h] [bp-1Ch]@2
- int v7; // [sp+14h] [bp-18h]@2
- int v8; // [sp+18h] [bp-14h]@2
- int v9; // [sp+1Ch] [bp-10h]@2
- int v10; // [sp+20h] [bp-Ch]@2
- v0 = -1;
- if ( *(_DWORD *)(current_thread_ctx_addr + 84) == 1 )
- {
- v2 = 2;
- v3 = 235;
- v4 = 2;
- v5 = 1;
- v6 = 1;
- v9 = 0;
- v10 = 0;
- v7 = 0;
- v8 = 0x2000000;
- v0 = sub_812FEE0((int)&v2, 1);
- }
- return v0;
- }
- // 8173BA0: using guessed type int current_thread_ctx_addr;
- //----- (08121D58) --------------------------------------------------------
- // int load_ppc_kernel(u32 address, u32 size)
- // Maps the PPC kernel image memory:
- // address == 0x08000000
- // size == 0x00120000
- // ->0 on success
- int __fastcall SysCall_0x77(u32 address, u32 size)
- {
- u32 v2; // r4@1
- int result; // r0@2
- void *v4; // r6@4
- void *v5; // r3@4
- int v6; // r0@7
- int v7; // r4@7
- signed int v8; // [sp+0h] [bp-38h]@8
- signed int v9; // [sp+4h] [bp-34h]@8
- signed int v10; // [sp+8h] [bp-30h]@8
- signed int v11; // [sp+Ch] [bp-2Ch]@8
- signed int v12; // [sp+10h] [bp-28h]@8
- void *v13; // [sp+14h] [bp-24h]@8
- int v14; // [sp+18h] [bp-20h]@8
- int v15; // [sp+1Ch] [bp-1Ch]@8
- int v16; // [sp+20h] [bp-18h]@8
- int v17; // [sp+24h] [bp-14h]@5
- v2 = size;
- if ( *(_DWORD *)(current_thread_ctx_addr + 84) != 1 )
- return -1;
- v4 = (void *)0x8000000;
- v5 = (void *)0x8000000;
- if ( size )
- {
- v17 = 0;
- v4 = SysCall_0x56((void *)address);
- sub_81311C0((unsigned int)v4, (unsigned int *)&v17);
- result = -1;
- if ( v17 != 1 )
- return result;
- v5 = v4;
- }
- v6 = SysCall_0x5E(v5, v2);
- v7 = (int)v4 + v2;
- if ( v6 < 0 )
- return -1;
- v8 = 1;
- v9 = 32;
- v10 = 1;
- v11 = 1;
- v12 = 3;
- v14 = v7;
- v15 = 136052736;
- v16 = 137232384;
- v13 = v4;
- return sub_812FEE0((int)&v8, 1);
- }
- // 8173BA0: using guessed type int current_thread_ctx_addr;
- //----- (08121E34) --------------------------------------------------------
- // int load_ppc_app(int mem_id, u32 addr1, u32 size1, u32 addr2, u32 size2)
- // Maps the PPC user application memory:
- // mem_id == 0x02
- // addr1 == 0x00
- // size1 == 0x00
- // addr2 == 0xA8000000
- // size2 == 0x28000000
- // ->0 on success
- int __fastcall SysCall_0x78(int mem_id, u32 addr1, u32 size1, u32 addr2, u32 size2)
- {
- char v5; // r5@1
- u32 v6; // r6@1
- void *v7; // r10@1
- int v8; // r4@2
- void *v10; // r11@5
- void *v11; // r7@8
- int v12; // r0@14
- int v13; // r0@23
- int v14; // [sp+0h] [bp-4Ch]@4
- int v15; // [sp+4h] [bp-48h]@4
- signed int v16; // [sp+8h] [bp-44h]@4
- signed int v17; // [sp+Ch] [bp-40h]@4
- int v18; // [sp+10h] [bp-3Ch]@4
- void *v19; // [sp+14h] [bp-38h]@4
- char *v20; // [sp+18h] [bp-34h]@4
- void *v21; // [sp+1Ch] [bp-30h]@4
- u32 v22; // [sp+20h] [bp-2Ch]@4
- int v23; // [sp+24h] [bp-28h]@6
- v5 = mem_id;
- v6 = size1;
- v7 = (void *)addr2;
- if ( *(_DWORD *)(current_thread_ctx_addr + 84) != 1 )
- return -1;
- v14 = 0;
- v16 = 1;
- v17 = 1;
- v18 = 0;
- v19 = 0;
- v20 = 0;
- v21 = 0;
- v22 = 0;
- v15 = 194;
- if ( size1 )
- {
- v23 = 0;
- v10 = SysCall_0x56((void *)addr1);
- sub_81311C0((unsigned int)v10, (unsigned int *)&v23);
- if ( v23 != 3 )
- return -1;
- }
- else
- {
- v10 = (void *)671088640;
- }
- if ( !size2 )
- {
- v11 = (void *)671088640;
- goto LABEL_10;
- }
- v23 = 0;
- v11 = SysCall_0x56(v7);
- sub_81311C0((unsigned int)v11, (unsigned int *)&v23);
- if ( v23 != 3 )
- return -1;
- LABEL_10:
- if ( !(v5 & 1) || (v8 = SysCall_0x5E(v10, v6), v8 >= 0) )
- v8 = 0;
- if ( v5 & 2 )
- {
- v13 = SysCall_0x5E(v11, size2);
- if ( v13 < 0 )
- return v13;
- }
- if ( v8 >= 0 )
- {
- v12 = v5 & 3;
- v14 = 3;
- if ( v12 == 2 )
- {
- v18 = 2;
- v22 = (u32)v11 + size2;
- v21 = v11;
- }
- else if ( v12 == 3 )
- {
- v18 = v5 & 3;
- v20 = (char *)v10 + v6;
- v22 = (u32)v11 + size2;
- v19 = v10;
- v21 = v11;
- }
- else
- {
- if ( v12 != 1 )
- return -29;
- v18 = 1;
- v20 = (char *)v10 + v6;
- v19 = v10;
- }
- v8 = sub_812FEE0((int)&v14, 1);
- }
- return v8;
- }
- // 8140758: using guessed type int[7];
- // 8173BA0: using guessed type int current_thread_ctx_addr;
- //----- (08121FF4) --------------------------------------------------------
- signed int __fastcall sub_8121FF4(unsigned int a1)
- {
- unsigned int v1; // r4@1
- bool v2; // r0@1
- signed int v3; // r12@1
- unsigned __int64 v5; // kr00_8@6
- unsigned int v6; // [sp+0h] [bp-20h]@4
- unsigned int v7; // [sp+4h] [bp-1Ch]@4
- char v8; // [sp+8h] [bp-18h]@4
- int v9; // [sp+Ch] [bp-14h]@3
- v1 = a1;
- v2 = sub_8121B9C(a1);
- v3 = -1179667;
- if ( !v2 )
- {
- v3 = sub_81311C0(v1, (unsigned int *)&v9);
- if ( !v3 )
- {
- v3 = sub_81302D0(v9, &v8, &v7, &v6);
- if ( !v3 )
- {
- if ( v7 > v1 || (v5 = v6 + (unsigned __int64)v7, !HIDWORD(v5)) && (unsigned int)v5 <= v1 )
- v3 = -1179667;
- }
- }
- }
- return v3;
- }
- //----- (08122094) --------------------------------------------------------
- int __fastcall sub_8122094(_BYTE *a1, int a2, signed int *a3)
- {
- _BYTE *v3; // r7@1
- int v4; // r8@1
- signed int *v5; // r6@1
- int v6; // r5@2
- signed int v7; // r3@2
- int result; // r0@4
- signed int v9; // r0@3
- char v10; // zf@12
- int v11; // [sp+0h] [bp-A8h]@1
- int v12; // [sp+80h] [bp-28h]@11
- unsigned __int16 v13; // [sp+84h] [bp-24h]@12
- v3 = a1;
- v4 = a2;
- v5 = a3;
- sub_8131DA0(&v11, 0, 0x90u);
- if ( dword_8150004 )
- {
- v9 = sub_812EED8((int)&v11);
- v6 = v9;
- if ( v9 == -1179662 )
- {
- if ( v4 )
- sub_81329B8(v3, &v11, v4);
- v7 = v12 & 0x20;
- if ( v12 & 0x20 )
- {
- v10 = v13 == 160;
- if ( v13 != 160 )
- v10 = v13 == 128;
- if ( v10 || v13 == 192 || v13 == 224 )
- v7 = 1;
- else
- v7 = v13 > 0xFFu;
- }
- if ( v12 & 4 )
- v7 = 1;
- }
- else
- {
- v7 = 0;
- }
- }
- else
- {
- v6 = dword_8150004;
- v7 = dword_8150004;
- }
- result = v6;
- if ( v5 )
- *v5 = v7;
- return result;
- }
- //----- (08122174) --------------------------------------------------------
- signed int __fastcall sub_8122174(unsigned int a1, int a2, unsigned int a3, unsigned int a4, int a5, int a6, unsigned int a7)
- {
- int v7; // r8@1
- unsigned int v8; // r10@1
- unsigned int v9; // r7@1
- int v10; // r5@1
- signed int result; // r0@2
- signed int v12; // r9@2
- signed int v13; // r3@13
- unsigned int v14; // r1@19
- unsigned int v15; // r2@19
- int v16; // r4@20
- unsigned int v17; // r6@20
- int v18; // r7@22
- int v19; // r3@24
- unsigned int v20; // r12@24
- int v21; // r3@28
- int v22; // r2@29
- int v23; // [sp+4h] [bp-40h]@16
- int v24; // [sp+8h] [bp-3Ch]@16
- unsigned int v25; // [sp+Ch] [bp-38h]@16
- unsigned int v26; // [sp+10h] [bp-34h]@16
- int v27; // [sp+14h] [bp-30h]@11
- int v28; // [sp+18h] [bp-2Ch]@16
- int v29; // [sp+1Ch] [bp-28h]@41
- int v30; // [sp+20h] [bp-24h]@1
- v7 = a2;
- v8 = a3;
- v9 = a4;
- v30 = 0;
- v10 = a1;
- if ( sub_8121B9C(a1) )
- {
- result = 0;
- v12 = 4096;
- }
- else
- {
- result = sub_81311C0(v10, (unsigned int *)&v30);
- if ( v30 == 1 )
- {
- v12 = 0x10000;
- }
- else if ( (unsigned int)v30 < 1 || (unsigned int)v30 > 3 )
- {
- result = -1179650;
- v12 = 4096;
- }
- else
- {
- v12 = 0x40000;
- }
- }
- if ( v7 & 0xFFF || v10 & 0xFFF )
- result = -33;
- if ( v9 > 0xF )
- return -29;
- if ( result >= 0 )
- {
- if ( a7 & 0x20 )
- {
- if ( a7 & 0x10 )
- {
- v27 = 1;
- }
- else
- {
- if ( a7 & 8 )
- v13 = 2;
- else
- v13 = 3;
- v27 = v13;
- }
- v28 = ((unsigned __int8)(a7 >> 1) ^ 1) & 1;
- v26 = v9;
- v23 = v10;
- v24 = v7;
- v25 = v8;
- sub_8124864((int)&v23);
- if ( a7 & 4 )
- result = sub_8124F88((char *)&v23);
- else
- result = sub_8125074((char *)&v23);
- }
- if ( ((unsigned int)~result >> 31) & (a7 >> 6) )
- {
- v14 = a5 & 0xFFFFFFF0;
- v15 = a6 & 0xFFFFFFF0;
- if ( a7 & 1 )
- {
- v21 = v12 - 1;
- if ( a7 & 0x10 )
- v22 = v15 | 0xF;
- else
- v22 = v15 | 7;
- if ( a7 & 0x10 )
- v16 = v14 | 0xF;
- else
- v16 = v14 | 7;
- v18 = v10 & v21;
- v17 = v22 & 0xFFC0000F;
- if ( !(v10 & v21) )
- goto LABEL_23;
- }
- else
- {
- v16 = v14 | 3;
- v17 = v15 | 3;
- v18 = v10 & (v12 - 1);
- if ( !(v10 & (v12 - 1)) )
- goto LABEL_23;
- }
- result = sub_81308A4(v30, (unsigned int *)&v29, v10);
- if ( result )
- {
- LABEL_23:
- if ( result < 0 )
- return result;
- v19 = v10;
- v20 = v8;
- return sub_8130D2C(v30, v16, v17, v19, v20);
- }
- if ( (v16 & v29) == (v16 & v17) || !v29 )
- {
- v20 = v8 + v18;
- v19 = v10 & -v12;
- return sub_8130D2C(v30, v16, v17, v19, v20);
- }
- result = -33;
- }
- }
- return result;
- }
- //----- (08122374) --------------------------------------------------------
- unsigned int sub_8122374()
- {
- unsigned int v0; // r4@0
- signed int v1; // r5@1
- int v2; // r0@1
- unsigned int v3; // r0@5
- unsigned int v4; // r0@7
- unsigned int result; // r0@9
- v1 = sub_8131098(4u);
- v2 = sub_813125C((int)&byte_6FF, 2);
- if ( v2 )
- v0 = v2;
- if ( !v2 )
- v0 = v1;
- v3 = sub_812F1D0(0xFFFFFu, 1, 2);
- if ( v3 )
- v0 = v3;
- v4 = sub_812F1D0(0xFFFFFu, 2, 2);
- if ( v4 )
- v0 = v4;
- result = sub_812F8B8(4u, 255);
- dword_8150004 = 0;
- if ( !result )
- result = v0;
- return result;
- }
- //----- (081223FC) --------------------------------------------------------
- signed int sub_81223FC()
- {
- signed int v0; // r4@1
- signed int v1; // r0@5
- unsigned int v2; // r2@8
- int v3; // r2@11
- signed int v5; // r0@16
- int v6; // [sp+0h] [bp-A0h]@16
- v0 = sub_8131128();
- if ( v0 < 0 )
- goto LABEL_7;
- v0 = sub_812F5C8(0x400u, 1);
- if ( v0 < 0 )
- goto LABEL_7;
- v0 = sub_812F5C8(0xFE67Eu, 2);
- if ( v0 < 0 )
- goto LABEL_7;
- v0 = sub_8131418(0);
- if ( v0 < 0 )
- goto LABEL_7;
- sub_812F8C0();
- v0 = v1;
- if ( !v1 )
- {
- v0 = sub_8130FD4(4);
- if ( !v0 )
- {
- do
- {
- sub_8131DA0(&v6, 0, 0x90u);
- v5 = sub_812EED8((int)&v6);
- v0 = v5;
- }
- while ( v5 == -1179662 );
- if ( v5 >= 0 )
- {
- dword_8150004 = 1;
- return v0;
- }
- LABEL_7:
- if ( v0 & 0x8000 )
- v2 = ~(v0 << 16);
- else
- v2 = v0 << 16;
- if ( v0 & 0x8000 )
- v3 = ~(v2 >> 16);
- else
- v3 = v2 >> 16;
- sub_8129A24("Failed to enable system protection with status %d:%d.\n", (~v0 >> 16) & 0x3FF, v3);
- }
- }
- if ( v0 < 0 )
- goto LABEL_7;
- return v0;
- }
- //----- (08122500) --------------------------------------------------------
- int sub_8122500()
- {
- int v0; // r2@1
- signed int v1; // r3@1
- signed int v2; // r4@1
- signed int v3; // r0@4
- signed int v4; // r0@5
- unsigned int v5; // r4@7
- signed int v6; // r0@9
- signed int v7; // r0@10
- signed int v8; // r0@11
- signed int v9; // r0@12
- signed int v10; // r0@13
- signed int v11; // r0@14
- signed int v12; // r0@15
- signed int v13; // r0@16
- signed int v14; // r0@17
- int result; // r0@18
- unsigned int v16; // r2@20
- int v17; // r2@23
- unsigned int v18; // r2@27
- int v19; // r2@30
- unsigned int v20; // r2@41
- int v21; // r2@44
- unsigned int v22; // r2@48
- int v23; // r2@51
- unsigned int v24; // r2@55
- int v25; // r2@58
- unsigned int v26; // r2@62
- int v27; // r2@65
- unsigned int v28; // r2@69
- int v29; // r2@72
- unsigned int v30; // r2@76
- int v31; // r2@79
- unsigned int v32; // r2@83
- int v33; // r2@86
- unsigned int v34; // r2@90
- int v35; // r2@93
- unsigned int v36; // r2@97
- int v37; // r2@100
- unsigned int v38; // r2@104
- int v39; // r2@107
- unsigned int v40; // r2@111
- int v41; // r2@114
- v2 = sub_813124C();
- if ( v2 < 0 )
- goto Failed_to_initialize_system_protection;
- v2 = sub_812FD7C(4u, 255, v0, v1);
- if ( !v2 )
- {
- v2 = sub_812FEE0((int)dword_8140774, 4);
- if ( !v2 )
- {
- v2 = sub_812FEE0((int)dword_8140804, 1);
- if ( !v2 )
- {
- v2 = sub_812FEE0((int)dword_8140828, 7);
- if ( !v2 )
- {
- v2 = sub_8131028(1, 0x10000u, 0x80C0000u);
- if ( v2 < 0 )
- goto Failed_to_initialize_system_protection;
- v2 = sub_8131028(2, 0x40000u, 0);
- if ( v2 < 0 )
- goto Failed_to_initialize_system_protection;
- v2 = sub_8131028(3, 0x40000u, 0x10000000u);
- }
- }
- }
- }
- if ( v2 < 0 )
- {
- Failed_to_initialize_system_protection:
- if ( v2 & 0x8000 )
- v18 = ~(v2 << 16);
- else
- v18 = v2 << 16;
- if ( v2 & 0x8000 )
- v19 = ~(v18 >> 16);
- else
- v19 = v18 >> 16;
- sub_8129A24("Failed to initialize system protection driver with status %d:%d.\n", (~v2 >> 16) & 0x3FF, v19);
- }
- v3 = sub_8122174((unsigned int)j__Reset, (int)j__Reset, 0x10000u, 0, 0, 0, 0x30u);
- if ( v3 < 0 )
- {
- if ( v3 & 0x8000 )
- v40 = ~(v3 << 16);
- else
- v40 = v3 << 16;
- if ( v3 & 0x8000 )
- v41 = ~(v40 >> 16);
- else
- v41 = v40 >> 16;
- sub_8129A24("Failed to map kernel SRAM with status %d:%d.\n", (~v3 >> 16) & 0x3FF, v41);
- }
- v4 = sub_8122174((unsigned int)SysCall_0x4F, (int)SysCall_0x4F, 0xA0000u, 0, 0, 0, 0x30u);
- if ( v4 < 0 )
- {
- if ( v4 & 0x8000 )
- v38 = ~(v4 << 16);
- else
- v38 = v4 << 16;
- if ( v4 & 0x8000 )
- v39 = ~(v38 >> 16);
- else
- v39 = v38 >> 16;
- sub_8129A24("Failed to map kernel MEM0 MMU with status %d:%d.\n", (~v4 >> 16) & 0x3FF, v39);
- }
- if ( sub_8121FF4(0x1D000000u) < 0 )
- v5 = 32;
- else
- v5 = 96;
- v6 = sub_8122174(0x1D000000u, 486539264, 0x2B00000u, 0, 0x3FFFFF, 4194288, v5);
- if ( v6 < 0 )
- {
- if ( v6 & 0x8000 )
- v36 = ~(v6 << 16);
- else
- v36 = v6 << 16;
- if ( v6 & 0x8000 )
- v37 = ~(v36 >> 16);
- else
- v37 = v36 >> 16;
- sub_8129A24("Failed to map IOS global heap MEM2 with status %d:%d.\n", (~v6 >> 16) & 0x3FF, v37);
- }
- v7 = sub_8122174(0x8000000u, 0x8000000, 0x100000u, 0xFu, 0, 0, 0x20u);
- if ( v7 < 0 )
- {
- if ( v7 & 0x8000 )
- v34 = ~(v7 << 16);
- else
- v34 = v7 << 16;
- if ( v7 & 0x8000 )
- v35 = ~(v34 >> 16);
- else
- v35 = v34 >> 16;
- sub_8129A24("Failed to map PPC MEM0-A MMU with status %d:%d.\n", (~v7 >> 16) & 0x3FF, v35);
- }
- v8 = sub_8122174(0x8100000u, 135266304, 0x20000u, 0, 0, 0, 0x20u);
- if ( v8 < 0 )
- {
- if ( v8 & 0x8000 )
- v32 = ~(v8 << 16);
- else
- v32 = v8 << 16;
- if ( v8 & 0x8000 )
- v33 = ~(v32 >> 16);
- else
- v33 = v32 >> 16;
- sub_8129A24("Failed to map PPC MEM0-B MMU with status %d:%d.\n", (~v8 >> 16) & 0x3FF, v33);
- }
- v9 = sub_8122174(0x80C0000u, 135004160, 0x60000u, 0, 0x3FFFFF, 4194288, 0x40u);
- if ( v9 < 0 )
- {
- if ( v9 & 0x8000 )
- v30 = ~(v9 << 16);
- else
- v30 = v9 << 16;
- if ( v9 & 0x8000 )
- v31 = ~(v30 >> 16);
- else
- v31 = v30 >> 16;
- sub_8129A24("Failed to map PPC MEM0 FG with status %d:%d.\n", (~v9 >> 16) & 0x3FF, v31);
- }
- v10 = sub_8122174(0, 0, 0x1000u, 0, 0, 0, 0x30u);
- if ( v10 < 0 )
- {
- if ( v10 & 0x8000 )
- v28 = ~(v10 << 16);
- else
- v28 = v10 << 16;
- if ( v10 & 0x8000 )
- v29 = ~(v28 >> 16);
- else
- v29 = v28 >> 16;
- sub_8129A24("Failed to map MEM1-A MMU with status %d:%d.\n", (~v10 >> 16) & 0x3FF, v29);
- }
- v11 = sub_8122174(0x1000u, 4096, 0x1FFF000u, 0, 0, 0, 0x20u);
- if ( v11 < 0 )
- {
- if ( v11 & 0x8000 )
- v26 = ~(v11 << 16);
- else
- v26 = v11 << 16;
- if ( v11 & 0x8000 )
- v27 = ~(v26 >> 16);
- else
- v27 = v26 >> 16;
- sub_8129A24("Failed to map MEM1-B MMU with status %d:%d.\n", (~v11 >> 16) & 0x3FF, v27);
- }
- v12 = sub_8122174(0, 0, 0x2000000u, 0, 0x3FFFFF, 4194288, 0x40u);
- if ( v12 < 0 )
- {
- if ( v12 & 0x8000 )
- v24 = ~(v12 << 16);
- else
- v24 = v12 << 16;
- if ( v12 & 0x8000 )
- v25 = ~(v24 >> 16);
- else
- v25 = v24 >> 16;
- sub_8129A24("Failed to map MEM1 FG with status %d:%d.\n", (~v12 >> 16) & 0x3FF, v25);
- }
- v13 = sub_8122174(0x14000000u, 335544320, 0x9000000u, 0, 0, 0, 0x20u);
- if ( v13 < 0 )
- {
- if ( v13 & 0x8000 )
- v22 = ~(v13 << 16);
- else
- v22 = v13 << 16;
- if ( v13 & 0x8000 )
- v23 = ~(v22 >> 16);
- else
- v23 = v22 >> 16;
- sub_8129A24("Failed to map PPC MEM2-A with status %d:%d.\n", (~v13 >> 16) & 0x3FF, v23);
- }
- v14 = sub_8122174(0x28000000u, 671088640, 0xA8000000, 0, 0, 0, 0x20u);
- if ( v14 < 0 )
- {
- if ( v14 & 0x8000 )
- v20 = ~(v14 << 16);
- else
- v20 = v14 << 16;
- if ( v14 & 0x8000 )
- v21 = ~(v20 >> 16);
- else
- v21 = v20 >> 16;
- sub_8129A24("Failed to map PPC MEM2-B with status %d:%d.\n", (~v14 >> 16) & 0x3FF, v21);
- }
- result = sub_8122174(0x28000000u, 671088640, 0xA8000000, 0, 0, 0, 0x20u);
- if ( result < 0 )
- {
- if ( result & 0x8000 )
- v16 = ~(result << 16);
- else
- v16 = result << 16;
- if ( result & 0x8000 )
- v17 = ~(v16 >> 16);
- else
- v17 = v16 >> 16;
- sub_8129A24("Failed to map PPC MEM2-B with status %d:%d.\n", (~result >> 16) & 0x3FF, v17);
- }
- return result;
- }
- //----- (08122AD4) --------------------------------------------------------
- signed int __fastcall sub_8122AD4(int a1, unsigned int a2)
- {
- signed int result; // r0@2
- int v3; // r2@3
- int v4; // r3@4
- if ( !a2 || (v3 = *(_DWORD *)a1, a2 < *(_DWORD *)a1 + 16) || (v4 = *(_DWORD *)(a1 + 8), result = 0, a2 >= v3 + v4) )
- result = -4;
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment