T43 Dissasembly

Disassembly, Reassembly, Tools and devleopment. Going deep with Hardware and Software.
gmtech825
Posts: 226
Joined: Fri Feb 24, 2017 11:27 am

Re: T43 Dissasembly

Post by gmtech825 »

the older gen 3 stuff has a coast mode flag and then a seperate coast mode while braking flag. It might be that simple
hjtrbo
Posts: 227
Joined: Tue Jul 06, 2021 6:57 pm
cars: VF2 R8 LSA
FG XR6T
HJ Ute w/RB25DET

Re: T43 Dissasembly

Post by hjtrbo »

I wish
hjtrbo
Posts: 227
Joined: Tue Jul 06, 2021 6:57 pm
cars: VF2 R8 LSA
FG XR6T
HJ Ute w/RB25DET

Re: T43 Dissasembly

Post by hjtrbo »

Line pressure calc. There's a few places to adjust if needed. My lifes work lol
Attachments
Line Pressure Calc.pdf
(130.39 KiB) Downloaded 471 times
User avatar
antus
Site Admin
Posts: 8988
Joined: Sat Feb 28, 2009 8:34 pm
cars: TX Gemini 2L Twincam
TX Gemini SR20 18psi
Datsun 1200 Ute
Subaru Blitzen '06 EZ30 4th gen, 3.0R Spec B
Contact:

Re: T43 Dissasembly

Post by antus »

Good stuff. I like how you are using the code to chart exactly how these things work. There is no shortage of programs that can change things, but knowledge at this depth is rare and very helpful.
Have you read the FAQ? For lots of information and links to significant threads see here: http://pcmhacking.net/forums/viewtopic.php?f=7&t=1396
hjtrbo
Posts: 227
Joined: Tue Jul 06, 2021 6:57 pm
cars: VF2 R8 LSA
FG XR6T
HJ Ute w/RB25DET

Re: T43 Dissasembly

Post by hjtrbo »

Ta, it's far easier to follow a chart I feel. In the future when I forget everything, referencing these charts will jog the memory that much faster than digging through partially labelled dis-jointed disassembly code again!

On a side note, I have a t43 techm sitting in front of me on loan from a very friendly bloke on this forum. I'm not quite ready to start playing with it, but not to far away hopefully. Just want to get this disassembly finished first. I think I have either borderline OCD or autism.
User avatar
antus
Site Admin
Posts: 8988
Joined: Sat Feb 28, 2009 8:34 pm
cars: TX Gemini 2L Twincam
TX Gemini SR20 18psi
Datsun 1200 Ute
Subaru Blitzen '06 EZ30 4th gen, 3.0R Spec B
Contact:

Re: T43 Dissasembly

Post by antus »

Dont we all :lol:
Have you read the FAQ? For lots of information and links to significant threads see here: http://pcmhacking.net/forums/viewtopic.php?f=7&t=1396
hjtrbo
Posts: 227
Joined: Tue Jul 06, 2021 6:57 pm
cars: VF2 R8 LSA
FG XR6T
HJ Ute w/RB25DET

Re: T43 Dissasembly

Post by hjtrbo »

And here is an update to the tcc pressure command. For those that use the regulator offset / gain settings, there is a few extra scalars and tables (approx. 7) not in HP or EFILive that can add to the offset. For the circle-d guys it might be worth some of your time investigating those to see if they're useful. Some are gear based too. Unfortunately not all OS's have this adder. I've marked it with a cloud. If you load up my disassembly from page 1, jump to address 0x0015b6cc to see it.
Attachments
TCC Pressure Command.pdf
(146.82 KiB) Downloaded 315 times
hjtrbo
Posts: 227
Joined: Tue Jul 06, 2021 6:57 pm
cars: VF2 R8 LSA
FG XR6T
HJ Ute w/RB25DET

Re: T43 Dissasembly

Post by hjtrbo »

I never would have picked there are so many tcc modes. There are a crap tonne of transition criteria behind each mode which will keep me occupied.
ACbadsn.png
ACbadsn.png (32.83 KiB) Viewed 7859 times
hjtrbo
Posts: 227
Joined: Tue Jul 06, 2021 6:57 pm
cars: VF2 R8 LSA
FG XR6T
HJ Ute w/RB25DET

Re: T43 Dissasembly

Post by hjtrbo »

umm, calling powerpc assembly experts!

I'm jumping back into this after a bit of a break. Following trecools lead I'm wanting to understand how the code processes the can frame and where it ultimately lands in the ram area for use by the program.

To start with something easy; Can frame $0BE brake apply status coming in to address 0x00062ef4.

I'll start with the easy bit that I understand.

Code: Select all

 // Initial offset = 0
  initOffset = 0x1fed16;
    // Start of data section:
    // Bytes 0-3 Address
    // Bytes 4-7 Payload
  puVar1 = &DAT_00062ef4;
    // loop 41 times
  i = 0x29;
  do {
    initOffset = initOffset + 1;
    if (*initOffset < 0x1e) {
      data = *puVar1;
      local_14 = 8;
      local_13 = *(puVar1 + 5);
      local_12 = 0;
      FUN_00037994(&data,*initOffset & 0xff);
    }
    puVar1 = puVar1 + 2;
    i += -1;
  } while (i != 0);
The data goes into FUN_00037994 which then moves it onto FUN_00045df0

Code: Select all

void FUN_00037994(uint *param_1,uint param_2)

{
  int iVar1;
  uint local_8;
  undefined local_4;
  undefined local_3;
  undefined local_2;
  
  local_8 = *param_1;
  local_4 = *(param_1 + 1);
  local_3 = *(param_1 + 5);
  local_2 = *(param_1 + 6);
  if (param_2 < 0x10) {
    iVar1 = 0;
  }
  else {
    param_2 = param_2 + 0xf0 & 0xff;
    iVar1 = 3;
  }
  FUN_00045df0(&local_8,param_2,iVar1);
  return;
}
Then it gets nasty and I'm lost!!! In assembly

Code: Select all

                             **************************************************************
                             *                          FUNCTION                          *
                             **************************************************************
                             uint * __stdcall FUN_00045df0(uint * param_1, uint param
                               assume linkreg = 0x0
                               assume r13 = 0x400000
                               assume r2 = 0x8000
             uint *            r3:4           <RETURN>
             uint *            r3:4           param_1
             uint              r4:4           param_2
             int               r5:4           param_3
             undefined4        Stack[0x4]:4   local_res4                              XREF[2]:     00045dfc(W), 
                                                                                                   00046264(R)  
             undefined4        Stack[-0x28]:4 local_28                                XREF[2]:     00045df8(W), 
                                                                                                   00046268(R)  
             undefined2        Stack[-0x36]:2 local_36                                XREF[1]:     00046214(W)  
             undefined1        Stack[-0x38]:1 local_38                                XREF[3]:     00045ea8(W), 
                                                                                                   00046014(W), 
                                                                                                   0004614c(W)  
             undefined4        Stack[-0x40]:4 local_40                                XREF[1]:     00045df0(W)  
                             FUN_00045df0                                    XREF[4]:     FUN_000363bc:000363f8(c), 
                                                                                          FUN_00037994:000379e0(c), 
                                                                                          FUN_000479fc:00047a64(c), 
                                                                                          FUN_000479fc:00047a74(c)  
       OS:045df0 94 21 ff c0     stwu       r1,local_40(r1)
       OS:045df4 7c 08 02 a6     mfspr      r0,LR
       OS:045df8 be c1 00 18     stmw       r22,local_28(r1)
       OS:045dfc 90 01 00 44     stw        r0,local_res4(r1)
       OS:045e00 3b 43 00 00     addi       r26,param_1,0x0
       OS:045e04 3b a4 00 00     addi       r29,param_2,0x0
       OS:045e08 3a c5 00 00     addi       r22,param_3,0x0
       OS:045e0c 2c 05 00 00     cmpwi      param_3,0x0
       OS:045e10 41 82 00 18     beq        LAB_00045e28
       OS:045e14 2c 05 00 01     cmpwi      param_3,0x1
       OS:045e18 41 82 01 7c     beq        LAB_00045f94
       OS:045e1c 2c 05 00 03     cmpwi      param_3,0x3
       OS:045e20 41 82 02 ac     beq        LAB_000460cc
       OS:045e24 48 00 04 40     b          LAB_00046264
                             LAB_00045e28                                    XREF[1]:     00045e10(j)  
       OS:045e28 3e c0 00 30     lis        r22,0x30
       OS:045e2c 62 d6 70 8a     ori        r22,r22,DAT_0000708a                             = FFh
       OS:045e30 54 9e 06 3e     rlwinm     r30,param_2,0x0,0x18,0x1f
       OS:045e34 57 db 20 36     rlwinm     r27,r30,0x4,0x0,0x1b
       OS:045e38 6a c9 01 88     xori       r9,r22,0x188
       OS:045e3c 7f e9 da 14     add        r31,r9,r27
       OS:045e40 69 2c 00 06     xori       r12,r9,0x6
       OS:045e44 7f 0c da 14     add        r24,r12,r27
       OS:045e48 69 2b 00 03     xori       r11,r9,0x3
       OS:045e4c 7f 2b da 14     add        r25,r11,r27
       OS:045e50 83 8d 80 84     lwz        r28,-0x7f7c(r13)=>DAT_003f8084                   = ??
       OS:045e54 81 6d 80 80     lwz        r11,-0x7f80(r13)=>DAT_003f8080                   = ??
       OS:045e58 83 7c 00 1c     lwz        r27,0x1c(r28)
       OS:045e5c 83 9c 00 18     lwz        r28,0x18(r28)
       OS:045e60 39 6b 00 08     addi       r11,r11,0x8
       OS:045e64 91 6d 80 80     stw        r11,-0x7f80(r13)=>DAT_003f8080                   = ??
       OS:045e68 3e e0 00 30     lis        r23,0x30
       OS:045e6c 3a f7 c0 10     subi       r23,r23,DAT_00003ff0                             = AAh
       OS:045e70 81 4d 80 80     lwz        r10,-0x7f80(r13)=>DAT_003f8080                   = ??
       OS:045e74 81 37 00 38     lwz        r9,0x38(r23)=>DAT_002fc048
       OS:045e78 91 2a ff f8     stw        r9,-0x8(r10)
       OS:045e7c 81 6d 80 80     lwz        r11,-0x7f80(r13)=>DAT_003f8080                   = ??
       OS:045e80 81 97 00 3c     lwz        r12,0x3c(r23)=>DAT_002fc04c
       OS:045e84 91 8b ff fc     stw        r12,-0x4(r11)
       OS:045e88 7c 60 00 a6     mfmsr      param_1
       OS:045e8c 7c 11 13 a6     mtspr      spr051,r0
       OS:045e90 7c 73 43 a6     mtspr      SPRG3,param_1
       OS:045e94 93 97 00 38     stw        r28,0x38(r23)=>DAT_002fc048
       OS:045e98 93 77 00 3c     stw        r27,0x3c(r23)=>DAT_002fc04c
       OS:045e9c 7c 73 42 a6     mfspr      param_1,SPRG3
       OS:045ea0 7c 60 01 24     mtmsr      param_1,0
       OS:045ea4 89 59 00 00     lbz        r10,0x0(r25)=>DAT_00307101                       = ??
       OS:045ea8 99 41 00 08     stb        r10,local_38(r1)
       OS:045eac 2c 1e 00 0f     cmpwi      r30,0xf
       OS:045eb0 41 81 03 60     bgt        LAB_00046210
       OS:045eb4 89 9a 00 05     lbz        r12,0x5(r26)
       OS:045eb8 2c 0c 00 00     cmpwi      r12,0x0
       OS:045ebc 41 82 00 40     beq        LAB_00045efc
       OS:045ec0 83 da 00 00     lwz        r30,0x0(r26)
       OS:045ec4 57 cb 9c 34     rlwinm     r11,r30,0x13,0x10,0x1a
       OS:045ec8 57 ca 8f 7e     rlwinm     r10,r30,0x11,0x1d,0x1f
       OS:045ecc 7d 6b 53 78     or         r11,r11,r10
       OS:045ed0 61 6b 00 18     ori        r11,r11,0x18
       OS:045ed4 b1 7f 00 00     sth        r11,0x0(r31)=>DAT_00307102_CanDataArea???        = ??
       OS:045ed8 57 cc 0c 3c     rlwinm     r12,r30,0x1,0x10,0x1e
       OS:045edc b1 98 00 00     sth        r12,0x0(r24)=>DAT_00307104                       = ??
       OS:045ee0 57 aa 06 3f     rlwinm.    r10,r29,0x0,0x18,0x1f
       OS:045ee4 41 82 00 10     beq        LAB_00045ef4
       OS:045ee8 57 ac 06 3e     rlwinm     r12,r29,0x0,0x18,0x1f
       OS:045eec 2c 0c 00 01     cmpwi      r12,0x1
       OS:045ef0 40 82 00 3c     bne        LAB_00045f2c
                             LAB_00045ef4                                    XREF[1]:     00045ee4(j)  
       OS:045ef4 3b e0 00 01     li         r31,0x1
       OS:045ef8 48 00 00 30     b          LAB_00045f28
                             LAB_00045efc                                    XREF[1]:     00045ebc(j)  
       OS:045efc 81 9a 00 00     lwz        r12,0x0(r26)
       OS:045f00 55 8c 2c 34     rlwinm     r12,r12,0x5,0x10,0x1a
       OS:045f04 b1 9f 00 00     sth        r12,0x0(r31)=>DAT_00307102_CanDataArea???        = ??
       OS:045f08 39 60 00 00     li         r11,0x0
       OS:045f0c b1 78 00 00     sth        r11,0x0(r24)=>DAT_00307104                       = ??
       OS:045f10 57 aa 06 3f     rlwinm.    r10,r29,0x0,0x18,0x1f
       OS:045f14 41 82 00 10     beq        LAB_00045f24
       OS:045f18 57 ac 06 3e     rlwinm     r12,r29,0x0,0x18,0x1f
       OS:045f1c 2c 0c 00 01     cmpwi      r12,0x1
       OS:045f20 40 82 00 0c     bne        LAB_00045f2c
                             LAB_00045f24                                    XREF[1]:     00045f14(j)  
       OS:045f24 3b eb 00 00     addi       r31,r11,0x0
                             LAB_00045f28                                    XREF[1]:     00045ef8(j)  
       OS:045f28 9b ed 8d b0     stb        r31,-0x7250(r13)=>DAT_003f8db0                   = ??
                             LAB_00045f2c                                    XREF[2]:     00045ef0(j), 00045f20(j)  
       OS:045f2c 89 9a 00 06     lbz        r12,0x6(r26)
       OS:045f30 89 7a 00 04     lbz        r11,0x4(r26)
       OS:045f34 55 8c 38 30     rlwinm     r12,r12,0x7,0x0,0x18
       OS:045f38 7d 9f 5b 78     or         r31,r12,r11
       OS:045f3c 9b f9 00 00     stb        r31,0x0(r25)=>DAT_00307101                       = ??
       OS:045f40 57 ea 06 31     rlwinm.    r10,r31,0x0,0x18,0x18
       OS:045f44 57 ec 07 3e     rlwinm     r12,r31,0x0,0x1c,0x1f
       OS:045f48 40 82 00 2c     bne        LAB_00045f74
       OS:045f4c 61 8c 00 40     ori        r12,r12,0x40
       OS:045f50 99 99 00 00     stb        r12,0x0(r25)=>DAT_00307101                       = ??
       OS:045f54 a1 4d 8d 44     lhz        r10,-0x72bc(r13)=>FLOAT_003f8d44                 = ??
       OS:045f58 39 60 00 01     li         r11,0x1
       OS:045f5c 7d 6b e8 30     slw        r11,r11,r29
       OS:045f60 7d 4a 58 78     andc       r10,r10,r11
       OS:045f64 b1 4d 8d 44     sth        r10,-0x72bc(r13)=>FLOAT_003f8d44                 = ??
       OS:045f68 3d 80 00 40     lis        r12,0x40
       OS:045f6c 39 8c 8d 4a     subi       r12,r12,DAT_000072b6                             = FFh
       OS:045f70 48 00 02 70     b          LAB_000461e0
                             LAB_00045f74                                    XREF[1]:     00045f48(j)  
       OS:045f74 61 8c 00 80     ori        r12,r12,0x80
       OS:045f78 99 99 00 00     stb        r12,0x0(r25)=>DAT_00307101                       = ??
       OS:045f7c a1 6d 8d 44     lhz        r11,-0x72bc(r13)=>FLOAT_003f8d44                 = ??
       OS:045f80 39 40 00 01     li         r10,0x1
       OS:045f84 7d 4a e8 30     slw        r10,r10,r29
       OS:045f88 7d 6b 53 78     or         r11,r11,r10
       OS:045f8c b1 6d 8d 44     sth        r11,-0x72bc(r13)=>FLOAT_003f8d44                 = ??
       OS:045f90 48 00 02 80     b          LAB_00046210
                             LAB_00045f94                                    XREF[1]:     00045e18(j)  
       OS:045f94 3e c0 00 30     lis        r22,0x30
       OS:045f98 62 d6 74 8a     ori        r22,r22,DAT_0000748a                             = FFh
       OS:045f9c 54 9e 06 3e     rlwinm     r30,param_2,0x0,0x18,0x1f
       OS:045fa0 57 db 20 36     rlwinm     r27,r30,0x4,0x0,0x1b
       OS:045fa4 6a c9 01 88     xori       r9,r22,0x188
       OS:045fa8 7f 09 da 14     add        r24,r9,r27
       OS:045fac 69 2c 00 06     xori       r12,r9,0x6
       OS:045fb0 7f ec da 14     add        r31,r12,r27
       OS:045fb4 69 2b 00 03     xori       r11,r9,0x3
       OS:045fb8 7f 2b da 14     add        r25,r11,r27
       OS:045fbc 83 8d 80 84     lwz        r28,-0x7f7c(r13)=>DAT_003f8084                   = ??
       OS:045fc0 81 6d 80 80     lwz        r11,-0x7f80(r13)=>DAT_003f8080                   = ??
       OS:045fc4 83 7c 00 1c     lwz        r27,0x1c(r28)
       OS:045fc8 82 fc 00 18     lwz        r23,0x18(r28)
       OS:045fcc 39 6b 00 08     addi       r11,r11,0x8
       OS:045fd0 91 6d 80 80     stw        r11,-0x7f80(r13)=>DAT_003f8080                   = ??
       OS:045fd4 3f 80 00 30     lis        r28,0x30
       OS:045fd8 3b 9c c0 10     subi       r28,r28,DAT_00003ff0                             = AAh
       OS:045fdc 81 4d 80 80     lwz        r10,-0x7f80(r13)=>DAT_003f8080                   = ??
       OS:045fe0 81 3c 00 38     lwz        r9,0x38(r28)=>DAT_002fc048
       OS:045fe4 91 2a ff f8     stw        r9,-0x8(r10)
       OS:045fe8 81 6d 80 80     lwz        r11,-0x7f80(r13)=>DAT_003f8080                   = ??
       OS:045fec 81 9c 00 3c     lwz        r12,0x3c(r28)=>DAT_002fc04c
       OS:045ff0 91 8b ff fc     stw        r12,-0x4(r11)
       OS:045ff4 7c 60 00 a6     mfmsr      param_1
       OS:045ff8 7c 11 13 a6     mtspr      spr051,r0
       OS:045ffc 7c 73 43 a6     mtspr      SPRG3,param_1
       OS:046000 92 fc 00 38     stw        r23,0x38(r28)=>DAT_002fc048
       OS:046004 93 7c 00 3c     stw        r27,0x3c(r28)=>DAT_002fc04c
       OS:046008 7c 73 42 a6     mfspr      param_1,SPRG3
       OS:04600c 7c 60 01 24     mtmsr      param_1,0
       OS:046010 89 59 00 00     lbz        r10,0x0(r25)=>DAT_00307500+1
       OS:046014 99 41 00 08     stb        r10,local_38(r1)
       OS:046018 2c 1e 00 0f     cmpwi      r30,0xf
       OS:04601c 41 81 01 f4     bgt        LAB_00046210
       OS:046020 89 9a 00 05     lbz        r12,0x5(r26)
       OS:046024 2c 0c 00 00     cmpwi      r12,0x0
       OS:046028 41 82 00 28     beq        LAB_00046050
       OS:04602c 83 da 00 00     lwz        r30,0x0(r26)
       OS:046030 57 cb 9c 34     rlwinm     r11,r30,0x13,0x10,0x1a
       OS:046034 57 ca 8f 7e     rlwinm     r10,r30,0x11,0x1d,0x1f
       OS:046038 7d 6b 53 78     or         r11,r11,r10
       OS:04603c 61 6b 00 18     ori        r11,r11,0x18
       OS:046040 b1 78 00 00     sth        r11,0x0(r24)=>DAT_00307502                       = ??
       OS:046044 57 cc 04 7e     rlwinm     r12,r30,0x0,0x11,0x1f
       OS:046048 55 98 08 3c     rlwinm     r24,r12,0x1,0x0,0x1e
       OS:04604c 48 00 00 14     b          LAB_00046060
                             LAB_00046050                                    XREF[1]:     00046028(j)  
       OS:046050 81 9a 00 00     lwz        r12,0x0(r26)
       OS:046054 55 8c 2c 34     rlwinm     r12,r12,0x5,0x10,0x1a
       OS:046058 b1 98 00 00     sth        r12,0x0(r24)=>DAT_00307502                       = ??
       OS:04605c 3b 00 00 00     li         r24,0x0
                             LAB_00046060                                    XREF[1]:     0004604c(j)  
       OS:046060 b3 1f 00 00     sth        r24,0x0(r31)=>DAT_00307504                       = ??
       OS:046064 89 9a 00 06     lbz        r12,0x6(r26)
       OS:046068 89 7a 00 04     lbz        r11,0x4(r26)
       OS:04606c 55 8c 38 30     rlwinm     r12,r12,0x7,0x0,0x18
       OS:046070 7d 9f 5b 78     or         r31,r12,r11
       OS:046074 9b f9 00 00     stb        r31,0x0(r25)=>DAT_00307500+1
       OS:046078 57 ea 06 31     rlwinm.    r10,r31,0x0,0x18,0x18
       OS:04607c 57 ec 07 3e     rlwinm     r12,r31,0x0,0x1c,0x1f
       OS:046080 40 82 00 2c     bne        LAB_000460ac
       OS:046084 61 8c 00 40     ori        r12,r12,0x40
       OS:046088 99 99 00 00     stb        r12,0x0(r25)=>DAT_00307500+1
       OS:04608c a1 4d 8d 46     lhz        r10,-0x72ba(r13)=>FLOAT_003f8d44+2
       OS:046090 39 60 00 01     li         r11,0x1
       OS:046094 7d 6b e8 30     slw        r11,r11,r29
       OS:046098 7d 4a 58 78     andc       r10,r10,r11
       OS:04609c b1 4d 8d 46     sth        r10,-0x72ba(r13)=>FLOAT_003f8d44+2
       OS:0460a0 3d 80 00 40     lis        r12,0x40
       OS:0460a4 39 8c 8d 6a     subi       r12,r12,DAT_00007296                             = FFh
       OS:0460a8 48 00 01 38     b          LAB_000461e0
                             LAB_000460ac                                    XREF[1]:     00046080(j)  
       OS:0460ac 61 8c 00 80     ori        r12,r12,0x80
       OS:0460b0 99 99 00 00     stb        r12,0x0(r25)=>DAT_00307500+1
       OS:0460b4 a1 6d 8d 46     lhz        r11,-0x72ba(r13)=>FLOAT_003f8d44+2
       OS:0460b8 39 40 00 01     li         r10,0x1
       OS:0460bc 7d 4a e8 30     slw        r10,r10,r29
       OS:0460c0 7d 6b 53 78     or         r11,r11,r10
       OS:0460c4 b1 6d 8d 46     sth        r11,-0x72ba(r13)=>FLOAT_003f8d44+2
       OS:0460c8 48 00 01 48     b          LAB_00046210
                             LAB_000460cc                                    XREF[1]:     00045e20(j)  
       OS:0460cc 3e c0 00 30     lis        r22,0x30
       OS:0460d0 62 d6 78 8a     ori        r22,r22,DAT_0000788a                             = FFh
       OS:0460d4 54 9e 06 3e     rlwinm     r30,param_2,0x0,0x18,0x1f
       OS:0460d8 57 db 20 36     rlwinm     r27,r30,0x4,0x0,0x1b
       OS:0460dc 6a c9 01 88     xori       r9,r22,0x188
       OS:0460e0 7f 09 da 14     add        r24,r9,r27
       OS:0460e4 69 2c 00 06     xori       r12,r9,0x6
       OS:0460e8 7f ec da 14     add        r31,r12,r27
       OS:0460ec 69 2b 00 03     xori       r11,r9,0x3
       OS:0460f0 7f 2b da 14     add        r25,r11,r27
       OS:0460f4 83 8d 80 84     lwz        r28,-0x7f7c(r13)=>DAT_003f8084                   = ??
       OS:0460f8 81 6d 80 80     lwz        r11,-0x7f80(r13)=>DAT_003f8080                   = ??
       OS:0460fc 83 7c 00 1c     lwz        r27,0x1c(r28)
       OS:046100 83 9c 00 18     lwz        r28,0x18(r28)
       OS:046104 39 6b 00 08     addi       r11,r11,0x8
       OS:046108 91 6d 80 80     stw        r11,-0x7f80(r13)=>DAT_003f8080                   = ??
       OS:04610c 3e e0 00 30     lis        r23,0x30
       OS:046110 3a f7 c0 10     subi       r23,r23,DAT_00003ff0                             = AAh
       OS:046114 81 4d 80 80     lwz        r10,-0x7f80(r13)=>DAT_003f8080                   = ??
       OS:046118 81 37 00 38     lwz        r9,0x38(r23)=>DAT_002fc048
       OS:04611c 91 2a ff f8     stw        r9,-0x8(r10)
       OS:046120 81 6d 80 80     lwz        r11,-0x7f80(r13)=>DAT_003f8080                   = ??
       OS:046124 81 97 00 3c     lwz        r12,0x3c(r23)=>DAT_002fc04c
       OS:046128 91 8b ff fc     stw        r12,-0x4(r11)
       OS:04612c 7c 60 00 a6     mfmsr      param_1
       OS:046130 7c 11 13 a6     mtspr      spr051,r0
       OS:046134 7c 73 43 a6     mtspr      SPRG3,param_1
       OS:046138 93 97 00 38     stw        r28,0x38(r23)=>DAT_002fc048
       OS:04613c 93 77 00 3c     stw        r27,0x3c(r23)=>DAT_002fc04c
       OS:046140 7c 73 42 a6     mfspr      param_1,SPRG3
       OS:046144 7c 60 01 24     mtmsr      param_1,0
       OS:046148 89 59 00 00     lbz        r10,0x0(r25)=>DAT_00307901                       = ??
       OS:04614c 99 41 00 08     stb        r10,local_38(r1)
       OS:046150 2c 1e 00 0f     cmpwi      r30,0xf
       OS:046154 41 81 00 bc     bgt        LAB_00046210
       OS:046158 89 9a 00 05     lbz        r12,0x5(r26)
       OS:04615c 2c 0c 00 00     cmpwi      r12,0x0
       OS:046160 41 82 00 28     beq        LAB_00046188
       OS:046164 83 da 00 00     lwz        r30,0x0(r26)
       OS:046168 57 cb 9c 34     rlwinm     r11,r30,0x13,0x10,0x1a
       OS:04616c 57 ca 8f 7e     rlwinm     r10,r30,0x11,0x1d,0x1f
       OS:046170 7d 6b 53 78     or         r11,r11,r10
       OS:046174 61 6b 00 18     ori        r11,r11,0x18
       OS:046178 b1 78 00 00     sth        r11,0x0(r24)=>DAT_00307902                       = ??
       OS:04617c 57 cc 04 7e     rlwinm     r12,r30,0x0,0x11,0x1f
       OS:046180 55 98 08 3c     rlwinm     r24,r12,0x1,0x0,0x1e
       OS:046184 48 00 00 14     b          LAB_00046198
                             LAB_00046188                                    XREF[1]:     00046160(j)  
       OS:046188 81 9a 00 00     lwz        r12,0x0(r26)
       OS:04618c 55 8c 2c 34     rlwinm     r12,r12,0x5,0x10,0x1a
       OS:046190 b1 98 00 00     sth        r12,0x0(r24)=>DAT_00307902                       = ??
       OS:046194 3b 00 00 00     li         r24,0x0
                             LAB_00046198                                    XREF[1]:     00046184(j)  
       OS:046198 b3 1f 00 00     sth        r24,0x0(r31)=>DAT_00307904                       = ??
       OS:04619c 89 9a 00 06     lbz        r12,0x6(r26)
       OS:0461a0 89 7a 00 04     lbz        r11,0x4(r26)
       OS:0461a4 55 8c 38 30     rlwinm     r12,r12,0x7,0x0,0x18
       OS:0461a8 7d 9f 5b 78     or         r31,r12,r11
       OS:0461ac 9b f9 00 00     stb        r31,0x0(r25)=>DAT_00307901                       = ??
       OS:0461b0 57 ea 06 31     rlwinm.    r10,r31,0x0,0x18,0x18
       OS:0461b4 57 ec 07 3e     rlwinm     r12,r31,0x0,0x1c,0x1f
       OS:0461b8 40 82 00 3c     bne        LAB_000461f4
       OS:0461bc 61 8c 00 40     ori        r12,r12,0x40
       OS:0461c0 99 99 00 00     stb        r12,0x0(r25)=>DAT_00307901                       = ??
       OS:0461c4 a1 4d 8d 48     lhz        r10,-0x72b8(r13)=>FLOAT_003f8d48                 = ??
       OS:0461c8 39 60 00 01     li         r11,0x1
       OS:0461cc 7d 6b e8 30     slw        r11,r11,r29
       OS:0461d0 7d 4a 58 78     andc       r10,r10,r11
       OS:0461d4 b1 4d 8d 48     sth        r10,-0x72b8(r13)=>FLOAT_003f8d48                 = ??
       OS:0461d8 3d 80 00 40     lis        r12,0x40
       OS:0461dc 39 8c 8d 8a     subi       r12,r12,DAT_00007276                             = FFh
                             LAB_000461e0                                    XREF[2]:     00045f70(j), 000460a8(j)  
       OS:0461e0 57 ab 0d fc     rlwinm     r11,r29,0x1,0x17,0x1e
       OS:0461e4 7d 8c 5a 14     add        r12,r12,r11
       OS:0461e8 39 40 00 00     li         r10,0x0
       OS:0461ec b1 4c 00 00     sth        r10,0x0(r12)=>FLOAT_003f8d88+2
       OS:0461f0 48 00 00 20     b          LAB_00046210
                             LAB_000461f4                                    XREF[1]:     000461b8(j)  
       OS:0461f4 61 8c 00 80     ori        r12,r12,0x80
       OS:0461f8 99 99 00 00     stb        r12,0x0(r25)=>DAT_00307901                       = ??
       OS:0461fc a1 6d 8d 48     lhz        r11,-0x72b8(r13)=>FLOAT_003f8d48                 = ??
       OS:046200 39 40 00 01     li         r10,0x1
       OS:046204 7d 4a e8 30     slw        r10,r10,r29
       OS:046208 7d 6b 53 78     or         r11,r11,r10
       OS:04620c b1 6d 8d 48     sth        r11,-0x72b8(r13)=>FLOAT_003f8d48                 = ??
                             LAB_00046210                                    XREF[6]:     00045eb0(j), 00045f90(j), 
                                                                                          0004601c(j), 000460c8(j), 
                                                                                          00046154(j), 000461f0(j)  
       OS:046210 a1 96 00 00     lhz        r12,0x0(r22)=>DAT_0030788a                       = ??
       OS:046214 b1 81 00 0a     sth        r12,local_36(r1)
       OS:046218 7c 60 00 a6     mfmsr      param_1
       OS:04621c 7c 11 13 a6     mtspr      spr051,r0
       OS:046220 7c 73 43 a6     mtspr      SPRG3,param_1
       OS:046224 81 4d 80 80     lwz        r10,-0x7f80(r13)=>DAT_003f8080                   = ??
       OS:046228 3f a0 00 30     lis        r29,0x30
       OS:04622c 81 4a ff fc     lwz        r10,-0x4(r10)
       OS:046230 3b bd c0 10     subi       r29,r29,DAT_00003ff0                             = AAh
       OS:046234 91 5d 00 3c     stw        r10,0x3c(r29)=>DAT_002fc04c
       OS:046238 81 8d 80 80     lwz        r12,-0x7f80(r13)=>DAT_003f8080                   = ??
       OS:04623c 39 8c ff fc     subi       r12,r12,0x4
       OS:046240 91 8d 80 80     stw        r12,-0x7f80(r13)=>DAT_003f8080                   = ??
       OS:046244 81 6d 80 80     lwz        r11,-0x7f80(r13)=>DAT_003f8080                   = ??
       OS:046248 81 6b ff fc     lwz        r11,-0x4(r11)
       OS:04624c 91 7d 00 38     stw        r11,0x38(r29)=>DAT_002fc048
       OS:046250 81 4d 80 80     lwz        r10,-0x7f80(r13)=>DAT_003f8080                   = ??
       OS:046254 39 4a ff fc     subi       r10,r10,0x4
       OS:046258 91 4d 80 80     stw        r10,-0x7f80(r13)=>DAT_003f8080                   = ??
       OS:04625c 7c 73 42 a6     mfspr      param_1,SPRG3
       OS:046260 7c 60 01 24     mtmsr      param_1,0
                             LAB_00046264                                    XREF[1]:     00045e24(j)  
       OS:046264 80 01 00 44     lwz        r0,local_res4(r1)
       OS:046268 ba c1 00 18     lmw        r22,local_28(r1)
       OS:04626c 7c 08 03 a6     mtspr      LR,r0
       OS:046270 38 21 00 40     addi       r1,r1,0x40
       OS:046274 4e 80 00 20     blr
And in pseudo code

Code: Select all

uint * FUN_00045df0(uint *param_1,uint param_2,int param_3)

{
  undefined4 *puVar1;
  byte bVar2;
  uint uVar3;
  undefined4 *puVar4;
  int iVar5;
  undefined2 uVar6;
  byte *pbVar7;
  uint uVar8;
  uint in_MSR;
  uint *puVar9;
  
  if (param_3 == 0) {
    iVar5 = (param_2 & 0xff) * 0x10;
    pbVar7 = &DAT_00307101 + iVar5;
    puVar4 = _DAT_003f8080 + 2;
    *_DAT_003f8080 = _DAT_002fc048;
    _DAT_003f8080 = puVar4;
    _DAT_003f8080[-1] = _DAT_002fc04c;
    uVar8 = in_MSR >> 0xe & 1;
    puVar9 = in_MSR & 0x9030 | in_MSR & 0xffff6fcf | (in_MSR >> 0xf & 1 | uVar8) << 0xf | (in_MSR >> 5 & 1 | uVar8) << 5 | (in_MSR >> 4 & 1 | uVar8) << 4;
    if (0xf < (param_2 & 0xff)) goto LAB_00046210;
    if (*(param_1 + 5) == '\0') {
      *(&DAT_00307102_CanDataArea??? + iVar5) = *param_1 << 5;
      *(&DAT_00307104 + iVar5) = 0;
      if (((param_2 & 0xff) == 0) || ((param_2 & 0xff) == 1)) {
        DAT_003f8db0 = 0;
      }
    }
    else {
      uVar8 = *param_1;
      *(&DAT_00307102_CanDataArea??? + iVar5) = uVar8 >> 0xd & 0xffe0 | uVar8 >> 0xf & 7 | 0x18;
      *(&DAT_00307104 + iVar5) = uVar8 << 1;
      if (((param_2 & 0xff) == 0) || ((param_2 & 0xff) == 1)) {
        DAT_003f8db0 = 1;
      }
    }
    bVar2 = *(param_1 + 1);
    uVar8 = *(param_1 + 6) << 7 | bVar2;
    *pbVar7 = uVar8;
    bVar2 &= 0xf;
    if ((uVar8 & 0x80) != 0) {
      *pbVar7 = bVar2 | 0x80;
      FLOAT_003f8d44._0_2_ |= 1 << (param_2 & 0x3f);
      goto LAB_00046210;
    }
    *pbVar7 = bVar2 | 0x40;
    FLOAT_003f8d44._0_2_ &= ~(1 << (param_2 & 0x3f));
    iVar5 = 0x3f8d4a;
  }
  else if (param_3 == 1) {
    uVar3 = param_2 & 0xff;
    pbVar7 = &DAT_00307500 + uVar3 * 0x10 + 1;
    puVar4 = _DAT_003f8080 + 2;
    *_DAT_003f8080 = _DAT_002fc048;
    _DAT_003f8080 = puVar4;
    _DAT_003f8080[-1] = _DAT_002fc04c;
    uVar8 = in_MSR >> 0xe & 1;
    puVar9 = in_MSR & 0x9030 | in_MSR & 0xffff6fcf | (in_MSR >> 0xf & 1 | uVar8) << 0xf | (in_MSR >> 5 & 1 | uVar8) << 5 | (in_MSR >> 4 & 1 | uVar8) << 4;
    if (0xf < uVar3) goto LAB_00046210;
    if (*(param_1 + 5) == '\0') {
      (&DAT_00307502)[uVar3 * 8] = *param_1 << 5;
      uVar6 = 0;
    }
    else {
      uVar8 = *param_1;
      (&DAT_00307502)[uVar3 * 8] = uVar8 >> 0xd & 0xffe0 | uVar8 >> 0xf & 7 | 0x18;
      uVar6 = (uVar8 & 0x7fff) << 1;
    }
    (&DAT_00307504)[uVar3 * 8] = uVar6;
    bVar2 = *(param_1 + 1);
    uVar8 = *(param_1 + 6) << 7 | bVar2;
    *pbVar7 = uVar8;
    bVar2 &= 0xf;
    if ((uVar8 & 0x80) != 0) {
      *pbVar7 = bVar2 | 0x80;
      FLOAT_003f8d44._2_2_ |= 1 << (param_2 & 0x3f);
      goto LAB_00046210;
    }
    *pbVar7 = bVar2 | 0x40;
    FLOAT_003f8d44._2_2_ &= ~(1 << (param_2 & 0x3f));
    iVar5 = 0x3f8d6a;
  }
  else {
    if (param_3 != 3) {
      return param_1;
    }
    iVar5 = (param_2 & 0xff) * 0x10;
    pbVar7 = &DAT_00307901 + iVar5;
    puVar4 = _DAT_003f8080 + 2;
    *_DAT_003f8080 = _DAT_002fc048;
    _DAT_003f8080 = puVar4;
    _DAT_003f8080[-1] = _DAT_002fc04c;
    uVar8 = in_MSR >> 0xe & 1;
    puVar9 = in_MSR & 0x9030 | in_MSR & 0xffff6fcf | (in_MSR >> 0xf & 1 | uVar8) << 0xf | (in_MSR >> 5 & 1 | uVar8) << 5 | (in_MSR >> 4 & 1 | uVar8) << 4;
    if (0xf < (param_2 & 0xff)) goto LAB_00046210;
    if (*(param_1 + 5) == '\0') {
      *(&DAT_00307902 + iVar5) = *param_1 << 5;
      uVar6 = 0;
    }
    else {
      uVar8 = *param_1;
      *(&DAT_00307902 + iVar5) = uVar8 >> 0xd & 0xffe0 | uVar8 >> 0xf & 7 | 0x18;
      uVar6 = (uVar8 & 0x7fff) << 1;
    }
    *(&DAT_00307904 + iVar5) = uVar6;
    bVar2 = *(param_1 + 1);
    uVar8 = *(param_1 + 6) << 7 | bVar2;
    *pbVar7 = uVar8;
    bVar2 &= 0xf;
    if ((uVar8 & 0x80) != 0) {
      *pbVar7 = bVar2 | 0x80;
      FLOAT_003f8d48._0_2_ |= 1 << (param_2 & 0x3f);
      goto LAB_00046210;
    }
    *pbVar7 = bVar2 | 0x40;
    FLOAT_003f8d48._0_2_ &= ~(1 << (param_2 & 0x3f));
    iVar5 = 0x3f8d8a;
  }
  *(iVar5 + (param_2 & 0xff) * 2) = 0;
LAB_00046210:
  puVar4 = _DAT_003f8080 + -1;
  puVar1 = _DAT_003f8080 + -2;
  _DAT_003f8080 = _DAT_003f8080 + -2;
  _DAT_002fc04c = *puVar4;
  _DAT_002fc048 = *puVar1;
  return puVar9;
}
User avatar
antus
Site Admin
Posts: 8988
Joined: Sat Feb 28, 2009 8:34 pm
cars: TX Gemini 2L Twincam
TX Gemini SR20 18psi
Datsun 1200 Ute
Subaru Blitzen '06 EZ30 4th gen, 3.0R Spec B
Contact:

Re: T43 Dissasembly

Post by antus »

I am not sure if I can help here, I am deep in 68k but not PPC, but I took a look at the function in IDA. Its pseudocode looked quite different, It interpreted the if/else statements as a switch, it does looks like a switch statement which does 1 of 3 things (case 0, 1 and 3) from that decision point (variable from the caller in a3). But overall it didn't provide extra clarity and dropped out to asm in places so I dont think it worked well enough to be helpful. It has flagged a few instructions as controlling interrupt functionality in the CPU, so I think this could be an interrupt handler. But also it could have the wrong CPU configuration so it might not be real. Worth considering, but dont take it as a certainty. I am not sure if Ghidra can do a block diagram (aka graph) like Ida, but I like the visual representation as it helps get your head around the decision points and the chunks of code that do a thing. It helps guide thinking to a slightly higher level of logic than the actual opcodes. I took a couple of screenshots and stitched them together, maybe it can help your brain map out the asm. Ive also attached the Ida pseudocode, but I think it provides less clarity rather than more.

Code: Select all

unsigned int *__fastcall sub_45DF0(unsigned int *result, int a2, int a3)
{
  int v3; // r13
  unsigned int *v5; // r26
  int v6; // r27
  _WORD *v7; // r31
  _WORD *v8; // r24
  _BYTE *v9; // r25
  int v10; // r28
  int v11; // r27
  int v12; // r28
  unsigned int v15; // r30
  char v16; // r31
  char v17; // r31
  char v18; // r12
  int v19; // r12
  int v20; // r27
  _WORD *v21; // r24
  _WORD *v22; // r31
  _BYTE *v23; // r25
  int v24; // r28
  int v25; // r27
  int v26; // r23
  unsigned int v29; // r30
  __int16 v30; // r24
  char v31; // r31
  char v32; // r12
  int v33; // r27
  _WORD *v34; // r24
  _WORD *v35; // r31
  _BYTE *v36; // r25
  int v37; // r28
  int v38; // r27
  int v39; // r28
  unsigned int v42; // r30
  __int16 v43; // r24
  char v44; // r31
  char v45; // r12

  v5 = result;
  switch ( a3 )
  {
    case 0:
      v6 = 16 * (unsigned __int8)a2;
      v7 = (_WORD *)(v6 + 3174658);
      v8 = (_WORD *)(v6 + 3174660);
      v9 = (_BYTE *)(v6 + 3174657);
      v10 = *(_DWORD *)(v3 - 32636);
      v11 = *(_DWORD *)(v10 + 28);
      v12 = *(_DWORD *)(v10 + 24);
      *(_DWORD *)(v3 - 32640) += 8;
      *(_DWORD *)(*(_DWORD *)(v3 - 32640) - 8) = dword_2FC048;
      *(_DWORD *)(*(_DWORD *)(v3 - 32640) - 4) = dword_2FC04C;
      __asm
      {
        mfmsr     r3
        mtspr     eid, r0 # External interrupt disable
        mtsprg3   r3
      }
      dword_2FC048 = v12;
      dword_2FC04C = v11;
      __asm
      {
        mfsprg3   r3
        mtmsr     r3
      }
      if ( (unsigned __int8)a2 > 0xFu )
        goto LABEL_32;
      if ( *((_BYTE *)v5 + 5) )
      {
        v15 = *v5;
        *v7 = (*v5 >> 13) & 0xFFE0 | (*v5 >> 15) & 7 | 0x18;
        *v8 = 2 * v15;
        if ( (_BYTE)a2 && (unsigned __int8)a2 != 1 )
          goto LABEL_14;
        v16 = 1;
      }
      else
      {
        *v7 = 32 * *(_WORD *)v5;
        *v8 = 0;
        if ( (_BYTE)a2 && (unsigned __int8)a2 != 1 )
          goto LABEL_14;
        v16 = 0;
      }
      *(_BYTE *)(v3 - 29264) = v16;
LABEL_14:
      v17 = (*((_BYTE *)v5 + 6) << 7) | *((_BYTE *)v5 + 4);
      *v9 = v17;
      v18 = v17 & 0xF;
      if ( (v17 & 0x80) != 0 )
      {
        *v9 = v18 | 0x80;
        *(_WORD *)(v3 - 29372) |= 1 << a2;
        goto LABEL_32;
      }
      *v9 = v18 | 0x40;
      *(_WORD *)(v3 - 29372) &= ~(1 << a2);
      v19 = 4164938;
LABEL_30:
      *(_WORD *)(v19 + ((2 * a2) & 0x1FE)) = 0;
      goto LABEL_32;
    case 1:
      v20 = 16 * (unsigned __int8)a2;
      v21 = (_WORD *)(v20 + 0x307502);
      v22 = (_WORD *)(v20 + 0x307504);
      v23 = (_BYTE *)(v20 + 0x307501);
      v24 = *(_DWORD *)(v3 - 0x7F7C);
      v25 = *(_DWORD *)(v24 + 28);
      v26 = *(_DWORD *)(v24 + 24);
      *(_DWORD *)(v3 - 32640) += 8;
      *(_DWORD *)(*(_DWORD *)(v3 - 32640) - 8) = dword_2FC048;
      *(_DWORD *)(*(_DWORD *)(v3 - 32640) - 4) = dword_2FC04C;
      __asm
      {
        mfmsr     r3
        mtspr     eid, r0 # External interrupt disable
        mtsprg3   r3
      }
      dword_2FC048 = v26;
      dword_2FC04C = v25;
      __asm
      {
        mfsprg3   r3
        mtmsr     r3
      }
      if ( (unsigned __int8)a2 > 0xFu )
        goto LABEL_32;
      if ( *((_BYTE *)v5 + 5) )
      {
        v29 = *v5;
        *v21 = (*v5 >> 13) & 0xFFE0 | (*v5 >> 15) & 7 | 0x18;
        v30 = 2 * (v29 & 0x7FFF);
      }
      else
      {
        *v21 = 32 * *(_WORD *)v5;
        v30 = 0;
      }
      *v22 = v30;
      v31 = (*((_BYTE *)v5 + 6) << 7) | *((_BYTE *)v5 + 4);
      *v23 = v31;
      v32 = v31 & 0xF;
      if ( (v31 & 0x80) != 0 )
      {
        *v23 = v32 | 0x80;
        *(_WORD *)(v3 - 29370) |= 1 << a2;
        goto LABEL_32;
      }
      *v23 = v32 | 0x40;
      *(_WORD *)(v3 - 29370) &= ~(1 << a2);
      v19 = 4164970;
      goto LABEL_30;
    case 3:
      v33 = 16 * (unsigned __int8)a2;
      v34 = (_WORD *)(v33 + 3176706);
      v35 = (_WORD *)(v33 + 3176708);
      v36 = (_BYTE *)(v33 + 3176705);
      v37 = *(_DWORD *)(v3 - 32636);
      v38 = *(_DWORD *)(v37 + 28);
      v39 = *(_DWORD *)(v37 + 24);
      *(_DWORD *)(v3 - 32640) += 8;
      *(_DWORD *)(*(_DWORD *)(v3 - 32640) - 8) = dword_2FC048;
      *(_DWORD *)(*(_DWORD *)(v3 - 32640) - 4) = dword_2FC04C;
      __asm
      {
        mfmsr     r3
        mtspr     eid, r0 # External interrupt disable
        mtsprg3   r3
      }
      dword_2FC048 = v39;
      dword_2FC04C = v38;
      __asm
      {
        mfsprg3   r3
        mtmsr     r3
      }
      if ( (unsigned __int8)a2 <= 0xFu )
      {
        if ( *((_BYTE *)v5 + 5) )
        {
          v42 = *v5;
          *v34 = (*v5 >> 13) & 0xFFE0 | (*v5 >> 15) & 7 | 0x18;
          v43 = 2 * (v42 & 0x7FFF);
        }
        else
        {
          *v34 = 32 * *(_WORD *)v5;
          v43 = 0;
        }
        *v35 = v43;
        v44 = (*((_BYTE *)v5 + 6) << 7) | *((_BYTE *)v5 + 4);
        *v36 = v44;
        v45 = v44 & 0xF;
        if ( (v44 & 0x80) != 0 )
        {
          *v36 = v45 | 0x80;
          *(_WORD *)(v3 - 29368) |= 1 << a2;
          goto LABEL_32;
        }
        *v36 = v45 | 0x40;
        *(_WORD *)(v3 - 29368) &= ~(1 << a2);
        v19 = 4165002;
        goto LABEL_30;
      }
LABEL_32:
      __asm
      {
        mfmsr     r3
        mtspr     eid, r0 # External interrupt disable
        mtsprg3   r3
      }
      dword_2FC04C = *(_DWORD *)(*(_DWORD *)(v3 - 32640) - 4);
      *(_DWORD *)(v3 - 32640) -= 4;
      dword_2FC048 = *(_DWORD *)(*(_DWORD *)(v3 - 32640) - 4);
      *(_DWORD *)(v3 - 32640) -= 4;
      __asm
      {
        mfsprg3   r3
        mtmsr     r3
      }
      break;
  }
  return result;
}
Attachments
Sub 45DF0 Graph.png
Have you read the FAQ? For lots of information and links to significant threads see here: http://pcmhacking.net/forums/viewtopic.php?f=7&t=1396
Post Reply