Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Reminder: *pointer = value at the location being pointed to.
- Note: variable<rx> = decompiled variable name <note at which register>
- pointer<r3> Decompression(arg1<r3>, const1<r4>)
- //r4 always equals 807cca60 (copied from r29)
- //r3 = r31(802cafe8) + some number (0x44 in this case) = 802cb02c
- {
- //build stack frame (LR, r31, r30, and r29 pushed)
- //r4 is copied back to r29, this is really stupid.
- scratch<r0> = *const1<r4>
- if (scratch<r0>!=0) {
- return pointer<r3> = null
- //and unwind stack frame
- }
- arg1<r3> -> <r5>
- offsetStack<r3> = stack<r1> + 8
- offsetTOC<r4> = TOC<r2> - 0x5570
- clear(floatingPointInvalidException<crb6>)
- result<r3> = subfunction1(offsetStack<r3>, offsetTOC<r4>, arg1<r5>)
- index2<r30> = 0
- limit<r0> = *(const1<r29> + 4)
- //limit abstracted away from r0
- for( i<r31> = 0; i<r31> < limit; i<r31>++) {
- result<r3> = stack<r1> + 8
- <r4> = *(const1<r29> + 8) + index2<r30>
- result<r3> = subfunction2(result<r3>, <r4>, 0x20);
- if(result<r3> == 0) {
- break
- }
- index2<r30> += 0x28
- }
- if( i<r31> < 0 || limit <= 0) {
- <r4> = 0
- } else {
- <r4> = i<r31> * 0x28 + *(const1<r29> + 8)
- }
- if( <r4> == 0 ) {
- return pointer<r3> = null
- //and unwind stack frame
- }
- return pointer<r3> = *(const1<r29> + 0x10) + *(<r4> + 0x20)
- //and unwind stack frame
- }
- result<r3> subfunction1(offsetStack<r3>, offsetTOC<r4>, arg1<r5>) {
- //build stack frame
- //LR, r25-r31
- offsetStack<r3> -> <r25>
- offsetTOC<r4> -> <r26>
- if(crb6 != 0) {
- push f1-f8
- }
- <r29> = stack<r1> + 0xA8
- <r30> = stack<r1> + 8
- <r28> = 0x0200 0000
- <r31> = -1
- <r12> = 0
- <r11> = 0x8013 0000
- push offsetTOC<r4> to stack<r1> + 0xC
- <r27> = stack<r1> + 0x74
- <r0> = 0x80128FB4
- <r4> = stack<r1> + 0x68
- push offsetStack<r3> to stack<r1> + 0x8
- <r0> -> <r3> //0x80128FB4
- push arg1<r5> to Stack<r1> + 0x10
- offsetTOC<r26> -> <r5>
- push <r6> to stack<r1> + 0x14
- <r27> -> <r6>
- push <r7 - r10, r12, r25, r28-r31>
- <r3> = subfunction1_1 (r3, r4, r5)
- if( <r5> != 0) {
- <r4> = -2
- if( <r3> < -1 ) {
- <r4> = <r3>
- }
- store byte 0 @ (<r25> + <r4>)
- }
- //unwind stack register, pop <r25> - <r31>
- //return is probably on <r3>
- }
- result<r3> subfunction2(previousResult<r3>, <r4>, 0x20) {
- offsetStack<r3>--
- <r4>--
- <r6> = 0x21
- while(true) {
- <r6>-- //and update condition register
- if(<r6> == 0) {
- return result2<r3> = null
- }
- <r0> = byte *( --previousResult<r3>) //predecrement
- <r5> = byte *( --<r4>) //also predecrement
- if(<r0> != <r5>) {
- return result<r3> = <r5> - <r0>
- }
- if(<r0> == 0) {
- return result2<r3> = null
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement