0807A8E4 2002 mov r0,2h ; r0 parameter = 2 0807A8E6 F7FEF957 bl 8078B98h ; Execute subroutine 8078B98 0807A8EA 6828 ldr r0,[r5] ;\ 0807A8EC 3040 add r0,40h ;} 3001704 = 0 0807A8EE 7004 strb r4,[r0] ;/ 0807A8F0 6829 ldr r1,[r5] ;\ 0807A8F2 1C08 mov r0,r1 ;| 0807A8F4 3042 add r0,42h ;} 3001706 = 0 0807A8F6 8004 strh r4,[r0] ;/ 0807A8F8 3026 add r0,26h ;\ 0807A8FA 8004 strh r4,[r0] ;} 300172C = 0 0807A8FC 3002 add r0,2h ;\ 0807A8FE 8004 strh r4,[r0] ;} 300172E = 0 0807A900 F000F894 bl 807AA2Ch ; (Does nothing) 0807A904 6828 ldr r0,[r5] ;\ 0807A906 303E add r0,3Eh ;| 0807A908 2103 mov r1,3h ;} 3001702 = 3 0807A90A 7001 strb r1,[r0] ;/ 0807A90C E088 b 807AA20h ; Return 0807A90E 0000 dw 00000h 0807A910 dd 008754BC4h,003000BF3h { 08078B98 B570 push r4-r6,r14 ;\ 08078B9A 0600 lsl r0,r0,18h ;| 08078B9C 0E00 lsr r0,r0,18h ;| 08078B9E 2804 cmp r0,4h ;| 08078BA0 D869 bhi 8078C76h ;| 08078BA2 0080 lsl r0,r0,2h ;} Branch to 8078C54 08078BA4 4901 ldr r1,=8078BB0h ;| 08078BA6 1840 add r0,r0,r1 ;| 08078BA8 6800 ldr r0,[r0] ;| 08078BAA 4687 mov r15,r0 ;/ 08078BAC dd 008078BB0h,008078BCCh,008078BC4h,008078C54h ; ... 08078C54 20FE mov r0,0FEh ;\ 08078C56 0040 lsl r0,r0,1h ;} r0 parameter = 01FCh 08078C58 F789FEDE bl 8002A18h ; Execute subroutine 8002A18 08078C5C 480D ldr r0,=8754BC4h ;\ 08078C5E 6801 ldr r1,[r0] ;| 08078C60 4A0D ldr r2,=20Eh ;| 08078C62 1888 add r0,r1,r2 ;} If [30018D2] != 2: 08078C64 7800 ldrb r0,[r0] ;| 08078C66 2802 cmp r0,2h ;| 08078C68 D005 beq 8078C76h ;/ 08078C6A 2681 mov r6,81h ;\ 08078C6C 00B6 lsl r6,r6,2h ;} r0 parameter = 30018C8 08078C6E 1988 add r0,r1,r6 ;/ 08078C70 2102 mov r1,2h ; r1 parameter = 2 08078C72 F7EFFA59 bl 8068128h ; Execute subroutine 8068128 08078C76 4807 ldr r0,=8754BC4h ;\ 08078C78 6802 ldr r2,[r0] ;| 08078C7A 4808 ldr r0,=20Fh ;| 08078C7C 1812 add r2,r2,r0 ;| 08078C7E 7811 ldrb r1,[r2] ;| 08078C80 2004 mov r0,4h ;| 08078C82 4240 neg r0,r0 ;} 30018D3 = [30018D3] & 0FCh | 2 08078C84 4008 and r0,r1 ;| 08078C86 2102 mov r1,2h ;| 08078C88 4308 orr r0,r1 ;| 08078C8A 7010 strb r0,[r2] ;| 08078C8C BC70 pop r4-r6 ;/ 08078C8E BC01 pop r0 08078C90 4700 bx r0 08078C92 dw 00000h 08078C94 dd 008754BC4h,00000020Eh,00000020Fh } { 08002A18 B500 push r14 08002A1A 0400 lsl r0,r0,10h 08002A1C 0C00 lsr r0,r0,10h 08002A1E 2100 mov r1,0h ; r1 parameter = 0 08002A20 F001FAC4 bl 8003FACh ; Execute subroutine 8003FAC 08002A24 BC01 pop r0 08002A26 4700 bx r0 } { ; Just this part left 08003FAC B570 push r4-r6,r14 08003FAE 0400 lsl r0,r0,10h 08003FB0 0409 lsl r1,r1,10h 08003FB2 0C0C lsr r4,r1,10h ; r4 = r1 parameter 08003FB4 490D ldr r1,=808F2C0h ;\ 08003FB6 0B40 lsr r0,r0,0Dh ;} r0 = 808F2C0 + r0 parameter<<3 08003FB8 1840 add r0,r0,r1 ;/ 08003FBA 7902 ldrb r2,[r0,4h] ; r2 = [r0+4] 08003FBC 6805 ldr r5,[r0] ; r5 = [r0] 08003FBE 480C ldr r0,=808CEE2h ;\ 08003FC0 1810 add r0,r2,r0 ;} r0 = [808CEE2 + r2] 08003FC2 7800 ldrb r0,[r0] ;/ 08003FC4 4E0B ldr r6,=3003B44h ; r6 = 3003B44 08003FC6 2800 cmp r0,0h ;\ 08003FC8 D00A beq 8003FE0h ;} If r0 != 0: 08003FCA 00D0 lsl r0,r2,3h ;\ 08003FCC 1983 add r3,r0,r6 ;| 08003FCE 7819 ldrb r1,[r3] ;| 08003FD0 2003 mov r0,3h ;} If [r2*8 + 3003B44] & 3 != 0: 08003FD2 4008 and r0,r1 ;| 08003FD4 2800 cmp r0,0h ;| 08003FD6 D003 beq 8003FE0h ;/ 08003FD8 7858 ldrb r0,[r3,1h] ;\ 08003FDA 78A9 ldrb r1,[r5,2h] ;| 08003FDC 4288 cmp r0,r1 ;} If [r2*8 + 3003B45] > [r5 + 2]: return 08003FDE D816 bhi 800400Eh ;/ 08003FE0 2C00 cmp r4,0h ;\ 08003FE2 D109 bne 8003FF8h ;} If r1 parameter == 0: 08003FE4 00D2 lsl r2,r2,3h ;\ 08003FE6 1991 add r1,r2,r6 ;} r1 = r2*8 + 3003B44 08003FE8 2001 mov r0,1h ; r0 = 1 08003FEA E008 b 8003FFEh 08003FEC dd 00808F2C0h,00808CEE2h,003003B44h 08003FF8 00D2 lsl r2,r2,3h ;\ Else (r1 parameter != 0): 08003FFA 1991 add r1,r2,r6 ;} r1 = r2*8 + 3003B44 (>_<) 08003FFC 2002 mov r0,2h ; r0 = 2 08003FFE 7008 strb r0,[r1] ; [r1] = r0 08004000 804C strh r4,[r1,2h] ; [r1 + 2] = r0 parameter 08004002 1991 add r1,r2,r6 ;\ 08004004 78A8 ldrb r0,[r5,2h] ;} [3003B45 + r2*8] = [r5 + 2] 08004006 7048 strb r0,[r1,1h] ;/ 08004008 1D30 add r0,r6,4 ;\ 0800400A 1810 add r0,r2,r0 ;} [3003B48 + r2*8] = r5 0800400C 6005 str r5,[r0] ;/ 0800400E BC70 pop r4-r6 08004010 BC01 pop r0 08004012 4700 bx r0 } { 08068128 0609 lsl r1,r1,18h 0806812A 0E09 lsr r1,r1,18h 0806812C 7281 strb r1,[r0,0Ah] ; r0+0Ah = r1 0806812E 424A neg r2,r1 ;\ 08068130 430A orr r2,r1 ;| 08068132 17D2 asr r2,r2,1Fh ;| 08068134 2302 mov r3,2h ;| 08068136 4013 and r3,r2 ;| 08068138 019B lsl r3,r3,6h ;} r0+0Bh = [r0+0Bh] & 3Fh | (r2 ? 80h : 0) 0806813A 7AC2 ldrb r2,[r0,0Bh] ;| 0806813C 213F mov r1,3Fh ;| 0806813E 4011 and r1,r2 ;| 08068140 4319 orr r1,r3 ;| 08068142 72C1 strb r1,[r0,0Bh] ;/ 08068144 4770 bx r14 }