psy_commando

figuringoutbma_;-;

Oct 20th, 2016
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 58.34 KB | None | 0 0
  1. ///...
  2.     ///
  3.     ///022EC9B0 - Parsing BMA
  4.     ///
  5.     022EC9B0 E28A0FB9 add     r0,r10,2E4h           //r0 = PtrTablePtrMappingData? =r10 + 0x2E4 (Possibly destination struct?)
  6.     022EC9B4 E285100C add     r1,r5,0Ch             //r1 = PtrBMABuff + 12 (Skips header) //PtrBMAData
  7.     022EC9B8 E28A2FAF add     r2,r10,2BCh           //r2 = r10 + 0x2BC
  8.     022EC9BC E28A3E1E add     r3,r10,1E0h           //r3 = r10 + 0x1E0 //PtrBMAHeaderCopy
  9.     022EC9C0 EB000643 bl      22EE2D4h              ///fun_022EE2D4
  10.     ///Function 22EE2D4h
  11.     022EE2D4 E92D4FF8 push    r3-r11,r14
  12.     022EE2D8 E24DD010 sub     r13,r13,10h           //Alloc 16 bytes on stack
  13.     022EE2DC E3A05000 mov     r5,0h                 //r5 = Cnt = 0
  14.     022EE2E0 EA0000B8 b       22EE5C8h              ///022EE5C8 v
  15.     while( Cnt < r4 )
  16.     {
  17.         ///022EE5C8
  18.         022EE5C8 E1D240F4 ldrsh   r4,[r2,4h]            //r4 = [r2,4h] AKA [r10,2C0h](was 2) Probably the NB of BPC entries
  19.         022EE5CC E1550004 cmp     r5,r4
  20.         //***LOOP CONDITION EVALUATED HERE***
  21.         022EE5D0 BAFFFF43 blt     22EE2E4h              ///022EE2E4 LOOP_BEG_BMA
  22.         ///022EE2E4 LOOP_BEG_BMA
  23.         022EE2E4 E0444005 sub     r4,r4,r5              //r4  = r4 - Cnt
  24.         022EE2E8 E0804104 add     r4,r0,r4,lsl 2h       //r4  = PtrTablePtrMappingData? + (r4 * 4)
  25.         022EE2EC E514A004 ldr     r10,[r4,-4h]          //r10 = [r4 - 4] ( Was 0x for r4 == 1, Was 0x20 for r4 == 0x2102044 )
  26.         022EE2F0 E3A07000 mov     r7,0h                 //r7 = Cnt1 = 0
  27.         022EE2F4 EA0000A3 b       22EE588h              ///022EE588 v
  28.        
  29.         while( Cnt1 < BMA_unk4 )
  30.         {
  31.             ///022EE588
  32.             022EE588 E5D34003 ldrb    r4,[r3,3h]            //r4 = BMA_unk4
  33.             022EE58C E1570004 cmp     r7,r4            
  34.             //***LOOP CONDITION EVALUATED HERE***
  35.             022EE590 BAFFFF58 blt     22EE2F8h              ///022EE2F8 LOOP_BEG_1
  36.             ///022EE2F8 LOOP_BEG_1
  37.             022EE2F8 E3570000 cmp     r7,0h
  38.             022EE2FC E3A06000 mov     r6,0h                 //r6 = Cnt2 = 0
  39.             if( Cnt1 != 0 )
  40.             {
  41.                 022EE300 1A000042 bne     22EE410h          ///022EE410 v
  42.                 ///022EE410
  43.                 022EE410 E24A9080 sub     r9,r10,80h        //r9 = r10 - 0x80
  44.                 022EE414 EA000051 b       22EE560h          ///022EE560 v
  45.                 while(r6 < BMA_unk3)
  46.                 {
  47.                     ///022EE560
  48.                     022EE560 E5D34002 ldrb    r4,[r3,2h]            //r4 = BMA_unk3
  49.                     022EE564 E1560004 cmp     r6,r4
  50.                     //***LOOP CONDITION EVALUATED HERE***
  51.                     022EE568 BAFFFFAA blt     22EE418h          ///022EE418 LOOP_BEG_7 ^
  52.                     ///022EE418 LOOP_BEG_7
  53.                     022EE418 E4D1B001 ldrb    r11,[r1],1h           //r11 = curbyte2 = [PtrReadBMADataPos], PtrReadBMADataPos += 1
  54.                     022EE41C E35B00C0 cmp     r11,0C0h
  55.                     if( curbyte2 < 0xC0 )
  56.                     {
  57.                         022EE420 BA00001D blt     22EE49Ch          ///022EE49C
  58.                         ///022EE49C
  59.                         022EE49C E35B0080 cmp     r11,80h
  60.                         if( curbyte2 < 0x80 )
  61.                         {
  62.                             022EE4A0 BA00001F blt     22EE524h              ///022EE524 v
  63.                             ///022EE524
  64.                             022EE524 E3A04000 mov     r4,0h                     //r4 = 0
  65.                             022EE528 EA000008 b       22EE550h                  ///022EE550 v
  66.                             while(r4 <= r11)
  67.                             {
  68.                                 ///022EE550
  69.                                 022EE550 E154000B cmp     r4,r11
  70.                                 022EE554 DAFFFFF4 ble     22EE52Ch          ///022EE52C ^
  71.                                 ///022EE52C LOOP_BEG_8
  72.                                 022EE52C E1D9C0B0 ldrh    r12,[r9]              //r12 = [r9]
  73.                                 022EE530 E2898002 add     r8,r9,2h              //r8  = r9 + 2
  74.                                 022EE534 E2899004 add     r9,r9,4h              //r9  = r9 + 4
  75.                                 022EE538 E1CAC0B0 strh    r12,[r10]             //[r10] = r12
  76.                                 022EE53C E1D880B0 ldrh    r8,[r8]               //r8  = [r8]
  77.                                 022EE540 E28AC002 add     r12,r10,2h            //r12 = r10 + 2
  78.                                 022EE544 E28AA004 add     r10,r10,4h            //r10 = r10 + 4
  79.                                 022EE548 E1CC80B0 strh    r8,[r12]              //[r12] = r8
  80.                                 022EE54C E2844001 add     r4,r4,1h              //r4 = r4 + 1
  81.                             }
  82.                             022EE558 E28B4001 add     r4,r11,1h
  83.                             022EE55C E0866084 add     r6,r6,r4,lsl 1h
  84.                             //Continue Loop...
  85.                         }
  86.                         else
  87.                         {
  88.                             022EE4A4 E5D14000 ldrb    r4,[r1]                   //r4  = [PtrReadBMADataPos]
  89.                             022EE4A8 E5D1E001 ldrb    r14,[r1,1h]               //r14 = [PtrReadBMADataPos + 1]  
  90.                             022EE4AC E5D18002 ldrb    r8,[r1,2h]                //r8  = [PtrReadBMADataPos + 2]    
  91.                             022EE4B0 E2811003 add     r1,r1,3h                  //r1  = PtrReadBMADataPos + 3
  92.                             022EE4B4 E184440E orr     r4,r4,r14,lsl 8h          //r4  = [PtrReadBMADataPos] | ([PtrReadBMADataPos + 1] << 8)
  93.                             022EE4B8 E1844808 orr     r4,r4,r8,lsl 10h          //r4  = ([PtrReadBMADataPos] | ([PtrReadBMADataPos + 1] << 8)) | ([PtrReadBMADataPos + 2]  << 16)
  94.                             022EE4BC E59F811C ldr     r8,=0FFFh                 //r8  = 0x0FFF
  95.                             022EE4C0 E3A0C080 mov     r12,80h                   //r12 = 0x80
  96.                             022EE4C4 E0048008 and     r8,r4,r8                  //r8  = (([PtrReadBMADataPos] | ([PtrReadBMADataPos + 1] << 8)) | ([PtrReadBMADataPos + 2]  << 16)) & 0x0FFF
  97.                             022EE4C8 E58D8000 str     r8,[r13]                  //[r13] = AssembledDWord = ((([PtrReadBMADataPos] | ([PtrReadBMADataPos + 1] << 8)) | ([PtrReadBMADataPos + 2]  << 16)) & 0x0FFF)
  98.                             022EE4CC E59F810C ldr     r8,=0FFFh                 //r8  = 0x0FFF    
  99.                             022EE4D0 E0084644 and     r4,r8,r4,asr 0Ch          //r4  = 0x0FFF &(([PtrReadBMADataPos] | ([PtrReadBMADataPos + 1] << 8)) | ([PtrReadBMADataPos + 2]  << 16)) >> 12) (SIGNED Shift Right)
  100.                             022EE4D4 E58D4008 str     r4,[r13,8h]               //[r13,8h] = Assembled12BitsInt = (0x0FFF &(([PtrReadBMADataPos] | ([PtrReadBMADataPos + 1] << 8)) | ([PtrReadBMADataPos + 2]  << 16)) >> 12) (SIGNED Shift Right))
  101.                             022EE4D8 EA00000C b       22EE510h                  ///022EE510 v
  102.                             while(r12 <= r11)
  103.                             {
  104.                                 ///022EE510
  105.                                 022EE510 E15C000B cmp     r12,r11
  106.                                 022EE514 DAFFFFF0 ble     22EE4DCh              ///022EE4DC ^
  107.                                 ///022EE4DC
  108.                                 022EE4DC E1D980B0 ldrh    r8,[r9]                   //r8  = [r9]
  109.                                 022EE4E0 E59D4000 ldr     r4,[r13]                  //r4  = AssembledDWord
  110.                                 022EE4E4 E289E002 add     r14,r9,2h                 //r14 = r9 + 2
  111.                                 022EE4E8 E0284004 eor     r4,r8,r4                  //r4  = r8 ^ AssembledDWord
  112.                                 022EE4EC E1CA40B0 strh    r4,[r10]                  //[r10] = r4
  113.                                 022EE4F0 E1DEE0B0 ldrh    r14,[r14]                 //r14 = [r14]
  114.                                 022EE4F4 E59D4008 ldr     r4,[r13,8h]               //r4  = Assembled12BitsInt
  115.                                 022EE4F8 E28A8002 add     r8,r10,2h                 //r8  = r10 + 2
  116.                                 022EE4FC E02E4004 eor     r4,r14,r4                 //r4  = r14 ^ Assembled12BitsInt
  117.                                 022EE500 E2899004 add     r9,r9,4h                  //r9  = r9 + 4
  118.                                 022EE504 E28AA004 add     r10,r10,4h                //r10 = r10 + 4    
  119.                                 022EE508 E1C840B0 strh    r4,[r8]                   //[r8] = r4
  120.                                 022EE50C E28CC001 add     r12,r12,1h                //r12 = r12 + 1
  121.                             }
  122.                             022EE518 E24B407F sub     r4,r11,7Fh                //r4 = r11 - 0x7F
  123.                             022EE51C E0866084 add     r6,r6,r4,lsl 1h           //r6 = r6 + (r4 * 2)
  124.                             022EE520 EA00000E b       22EE560h                  ///022EE560 v
  125.                             //Continue Loop...
  126.                         }
  127.                     }
  128.                     else
  129.                     {
  130.                         022EE424 E3A0C0C0 mov     r12,0C0h              //r12 = 0xC0
  131.                         022EE428 EA000016 b       22EE488h              ///022EE488 v
  132.                         while( r12 <= curbyte2 )
  133.                         {
  134.                             ///022EE488
  135.                             022EE488 E15C000B cmp     r12,r11
  136.                             022EE48C DAFFFFE6 ble     22EE42Ch              ///022EE42C
  137.                             ///022EE42C
  138.                             022EE42C E5D18001 ldrb    r8,[r1,1h]            //r8  = [PtrReadBMADataPos + 1]
  139.                             022EE430 E5D1E000 ldrb    r14,[r1]              //r14 = [PtrReadBMADataPos]
  140.                             022EE434 E5D14002 ldrb    r4,[r1,2h]            //r4  = [PtrReadBMADataPos + 2]
  141.                             022EE438 E58D800C str     r8,[r13,0Ch]          //[r13,0Ch] = r8
  142.                             022EE43C E1D980B0 ldrh    r8,[r9]               //r8  = [r9]
  143.                             022EE440 E2811003 add     r1,r1,3h              //r1  = r1 + 3
  144.                             022EE444 E28CC001 add     r12,r12,1h            //r12 = r12 + 1
  145.                             022EE448 E58D8004 str     r8,[r13,4h]           //[r13,4h] = r8
  146.                             022EE44C E59D800C ldr     r8,[r13,0Ch]          //r8  = [r13 + 0xC]
  147.                             022EE450 E18E8408 orr     r8,r14,r8,lsl 8h      //r8  = r14 | (r8 << 8)
  148.                             022EE454 E188E804 orr     r14,r8,r4,lsl 10h     //r14 = r8  | (r4 << 16)
  149.                             022EE458 E59F4180 ldr     r4,=0FFFh             //r4  = 0x0FFF
  150.                             022EE45C E00E8004 and     r8,r14,r4             //r8  = r14 & 0x0FFF
  151.                             022EE460 E59D4004 ldr     r4,[r13,4h]           //[r13,4h] = r4
  152.                             022EE464 E0244008 eor     r4,r4,r8              //r4  = r4 ^ r8
  153.                             022EE468 E1CA40B0 strh    r4,[r10]              //[r10] = r4
  154.                             022EE46C E59F416C ldr     r4,=0FFFh             //r4  = 0x0FFF
  155.                             022EE470 E004E64E and     r14,r4,r14,asr 0Ch    //r14 = r4 & (r14 >> 12) (SIGNED Shift Right)    
  156.                             022EE474 E1D940B2 ldrh    r4,[r9,2h]            //r4  = [r9 + 2]
  157.                             022EE478 E2899004 add     r9,r9,4h              //r9  = r9 + 4
  158.                             022EE47C E024400E eor     r4,r4,r14             //r4  = r4 ^ r14
  159.                             022EE480 E1CA40B2 strh    r4,[r10,2h]           //[r10,2h] = r4
  160.                             022EE484 E28AA004 add     r10,r10,4h            //r10 = r10 + 4
  161.                         }
  162.                         022EE490 E24B40BF sub     r4,r11,0BFh               //r4 = curbyte2 - 0xBF
  163.                         022EE494 E0866084 add     r6,r6,r4,lsl 1h           //r6 = r6 + (r4 * 2)
  164.                         022EE498 EA000030 b       22EE560h                  ///022EE560 v
  165.                         //Continue Loop...
  166.                     }
  167.                 }// while(r6 < BMA_unk3) END
  168.                 022EE56C EA000002 b       22EE57Ch              ///022EE57C v
  169.             }
  170.             else
  171.             {
  172.                 022EE304 EA00003D b       22EE400h          ///022EE400 v
  173.                 while(r6 < BMA_unk3)
  174.                 {
  175.                     ///022EE400
  176.                     022EE400 E5D34002 ldrb    r4,[r3,2h]            //r4 = BMA_unk3 (was 0xF)
  177.                     022EE404 E1560004 cmp     r6,r4
  178.                     //***LOOP CONDITION EVALUATED HERE***
  179.                     022EE408 BAFFFFBE blt     22EE308h              ///022EE308 LOOP_BEG_2
  180.                     ///022EE308 LOOP_BEG_2
  181.                     022EE308 E4D19001 ldrb    r9,[r1],1h            //r9 = curbyte = [PtrReadBMADataPos], PtrReadBMADataPos += 1
  182.                     022EE30C E35900C0 cmp     r9,0C0h
  183.                     if( curbyte < 0xC0 )
  184.                     {
  185.                         022EE310 BA000014 blt     22EE368h          ///022EE368 v
  186.                         ///022EE368 curbyte < 0xC0
  187.                         022EE368 E3590080 cmp     r9,80h
  188.                         if( curbyte < 0x80 )
  189.                         {
  190.                             022EE36C BA000018 blt     22EE3D4h              //022EE3D4 curbyte < 0x80 v
  191.                             ///022EE3D4 curbyte < 0x80
  192.                             022EE3D4 E3A0B000 mov     r11,0h                //r11 = CntWords = 0
  193.                             022EE3D8 EA000004 b       22EE3F0h              ///022EE3F0 v
  194.                             ///022EE3F0
  195.                             022EE3F0 E15B0009 cmp     r11,r9
  196.                             while( CntWords <= curbyte )
  197.                             {
  198.                                 022EE3F4 DAFFFFF8 ble     22EE3DCh          ///022EE3DC ^
  199.                                 ///022EE3DC
  200.                                 022EE3DC E3A04000 mov     r4,0h                 //r4       = 0
  201.                                 022EE3E0 E1CA40B0 strh    r4,[r10]              //[r10]    = 0
  202.                                 022EE3E4 E1CA40B2 strh    r4,[r10,2h]           //[r10,2h] = 0
  203.                                 022EE3E8 E28AA004 add     r10,r10,4h            //r10      = r10 + 4
  204.                                 022EE3EC E28BB001 add     r11,r11,1h            //r11      = CntWords + 1
  205.                             }
  206.                             022EE3F8 E2894001 add     r4,r9,1h              //r4 = curbyte + 1
  207.                             022EE3FC E0866084 add     r6,r6,r4,lsl 1h       //r6 = r6 + (curbyte * 2)
  208.                             //ContinueLoop
  209.                         }
  210.                         else
  211.                         {
  212.                             022EE370 E5D1C000 ldrb    r12,[r1]              //r12 = [PtrReadBMADataPos]
  213.                             022EE374 E5D1B001 ldrb    r11,[r1,1h]           //r11 = [PtrReadBMADataPos + 1]
  214.                             022EE378 E5D18002 ldrb    r8,[r1,2h]            //r8  = [PtrReadBMADataPos + 2]
  215.                             022EE37C E2811003 add     r1,r1,3h              //r1  = PtrReadBMADataPos + 3
  216.                             022EE380 E18CB40B orr     r11,r12,r11,lsl 8h    //r11 = r12 | (r11 << 8)    
  217.                             022EE384 E18BB808 orr     r11,r11,r8,lsl 10h    //r11 = r11 | (r8  << 16)
  218.                             022EE388 E59F8250 ldr     r8,=0FFFh             //r8  = 0x0FFF
  219.                             022EE38C E59FC24C ldr     r12,=0FFFh            //r12 = 0x0FFF
  220.                             022EE390 E00B8008 and     r8,r11,r8             //r8  = r11 & r8
  221.                             022EE394 E00CB64B and     r11,r12,r11,asr 0Ch   //r11 = r12 & (r11 >> 12) (SIGNED Shift Right)
  222.                             022EE398 E1A08808 mov     r8,r8,lsl 10h         //r8  = r8  << 16
  223.                             022EE39C E1A0B80B mov     r11,r11,lsl 10h       //r11 = r11 << 16
  224.                             022EE3A0 E3A04080 mov     r4,80h                //r4  = 0x80
  225.                             022EE3A4 E1A08828 mov     r8,r8,lsr 10h         //r8  = r8  >> 16
  226.                             022EE3A8 E1A0B82B mov     r11,r11,lsr 10h       //r11 = r11 >> 16
  227.                             022EE3AC EA000003 b       22EE3C0h              ///022EE3C0 v
  228.                             while(r4 < curbyte)
  229.                             {
  230.                                 ///022EE3C0
  231.                                 022EE3C0 E1540009 cmp     r4,r9
  232.                                 022EE3C4 DAFFFFF9 ble     22EE3B0h          ///022EE3B0 LOOP_BEG_6 ^
  233.                                 ///022EE3B0 LOOP_BEG_6
  234.                                 022EE3B0 E1CA80B0 strh    r8,[r10]              //[r10]     = r8
  235.                                 022EE3B4 E1CAB0B2 strh    r11,[r10,2h]          //[r10 + 2] = r11
  236.                                 022EE3B8 E28AA004 add     r10,r10,4h            //r10 = r10 + 4
  237.                                 022EE3BC E2844001 add     r4,r4,1h              //r4 = r4 + 1
  238.                             }
  239.                             022EE3C8 E249407F sub     r4,r9,7Fh             //r4 = curbyte - 0x7F
  240.                             022EE3CC E0866084 add     r6,r6,r4,lsl 1h       //r6 = r6 + (r4 * 2)
  241.                             022EE3D0 EA00000A b       22EE400h              ///022EE400 ContinueLoop v
  242.                         }
  243.                     }
  244.                     else
  245.                     {
  246.                         022EE314 E3A080C0 mov     r8,0C0h               //r8 = 0xC0
  247.                         022EE318 EA00000D b       22EE354h              ///022EE354 v
  248.                         while(r8 <= curbyte)
  249.                         {
  250.                             ///022EE354
  251.                             022EE354 E1580009 cmp     r8,r9
  252.                             022EE358 DAFFFFEF ble     22EE31Ch          ///022EE31C ^
  253.                             ///022EE31C
  254.                             022EE31C E5D1E000 ldrb    r14,[r1]              //r14 = [PtrReadBMADataPos]
  255.                             022EE320 E5D1C001 ldrb    r12,[r1,1h]           //r12 = [PtrReadBMADataPos + 1]
  256.                             022EE324 E5D14002 ldrb    r4,[r1,2h]            //r4  = [PtrReadBMADataPos + 2]
  257.                             022EE328 E2811003 add     r1,r1,3h              //r1  = PtrReadBMADataPos + 3
  258.                             022EE32C E18EC40C orr     r12,r14,r12,lsl 8h    //r12 = r14 | (r12 << 8)
  259.                             022EE330 E18C4804 orr     r4,r12,r4,lsl 10h     //r4  = r12 | (r4  << 16)
  260.                             022EE334 E59FC2A4 ldr     r12,=0FFFh            //r12 = 0x0FFF
  261.                             022EE338 E2888001 add     r8,r8,1h              //r8  = r8 + 1
  262.                             022EE33C E004C00C and     r12,r4,r12            //r12 = r4 & r12
  263.                             022EE340 E1CAC0B0 strh    r12,[r10]             //[r10] = r12
  264.                             022EE344 E59FC294 ldr     r12,=0FFFh            //r12  = 0x0FFF
  265.                             022EE348 E00C4644 and     r4,r12,r4,asr 0Ch     //r4   = 0x0FFF & (r4 >> 12) (SIGNED Shift Right)
  266.                             022EE34C E1CA40B2 strh    r4,[r10,2h]           //[r10 + 2] = r4
  267.                             022EE350 E28AA004 add     r10,r10,4h            //r10 = r10 + 4
  268.                         }
  269.                         022EE35C E24940BF sub     r4,r9,0BFh            //r4 = curbyte - 0xBF
  270.                         022EE360 E0866084 add     r6,r6,r4,lsl 1h       //r6 = Cnt2 + (r4 * 2)    
  271.                         022EE364 EA000025 b       22EE400h              ///022EE400 ContinueLoop v
  272.                     }
  273.  
  274.                 } // while(r6 < BMA_unk3) END //022EE404
  275.                 022EE40C EA00005A b       22EE57Ch              ///022EE57C v
  276.             }
  277.  
  278.             while( r6 < 64 )
  279.             {
  280.                 ///022EE57C
  281.                 022EE57C E3560040 cmp     r6,40h
  282.                 022EE580 BAFFFFFA blt     22EE570h          ///022EE570 LOOP_BEG_3
  283.                 ///022EE570 LOOP_BEG_3
  284.                 022EE570 E3A04000 mov     r4,0h                 //r4 = 0
  285.                 022EE574 E0CA40B2 strh    r4,[r10],2h           //[r10] = 0, r10 += 2
  286.                 022EE578 E2866001 add     r6,r6,1h              //r6 = r6 + 1
  287.             }
  288.             022EE584 E2877001 add     r7,r7,1h              //r7 = Cnt1 + 1    
  289.         } //while( r7 < BMA_unk4 ) END ///022EE590
  290.        
  291.         022EE594 E3A06000 mov     r6,0h                 //r6 = 0
  292.         022EE598 E1A08006 mov     r8,r6                 //r8 = 0
  293.         022EE59C EA000005 b       22EE5B8h              ///022EE5B8 v
  294.         while(Cnt1 < r4)
  295.         {
  296.             ///022EE5B8
  297.             022EE5B8 E1D241F4 ldrsh   r4,[r2,14h]           //r4 = [r2,14h](was 0x3E)  
  298.             022EE5BC E1570004 cmp     r7,r4
  299.             022EE5C0 BAFFFFF6 blt     22EE5A0h          ///022EE5A0 LOOP_BEG_4 ^
  300.             ///022EE5A0 LOOP_BEG_4
  301.             022EE5A0 E1A04008 mov     r4,r8                 //r4 = Cnt4 = 0
  302.             while(r4 < 64)
  303.             {
  304.                 ///022EE5A4 LOOP_BEG_5
  305.                 022EE5A4 E2844001 add     r4,r4,1h              //r4 = r4 + 1
  306.                 022EE5A8 E3540040 cmp     r4,40h
  307.                 022EE5AC E0CA60B2 strh    r6,[r10],2h           //[r10] = 0, r10 += 2
  308.                 022EE5B0 BAFFFFFB blt     22EE5A4h          ///022EE5A4 LOOP_BEG_5
  309.             }
  310.             022EE5B4 E2877001 add     r7,r7,1h              //r7 = Cnt1 + 1
  311.         }
  312.         022EE5C4 E2855001 add     r5,r5,1h              //r5 = r5 + 1
  313.  
  314.     }
  315.     022EE5D4 E1A00001 mov     r0,r1                 //r0 = PtrReadBMADataPos
  316.     022EE5D8 E28DD010 add     r13,r13,10h
  317.     022EE5DC E8BD8FF8 pop     r3-r11,r15
  318.     022EE5E0 00000FFF
  319.     ///FUNCTION ENDS
  320.     ///022EC9C4
  321.     022EC9C4 E1A01000 mov     r1,r0                 //r1 = PtrReadBMADataPos
  322.     022EC9C8 E58A11F0 str     r1,[r10,1F0h]         //[r10,1F0h] = PtrReadBMADataPos
  323.     022EC9CC E59A02D8 ldr     r0,[r10,2D8h]         //r0 = [r10,2D8h] (was 0x20F6644)
  324.     022EC9D0 E3500000 cmp     r0,0h
  325.     if( r0 == 0 )
  326.     {
  327.         022EC9D4 0A000004 beq     22EC9ECh          ///022EC9EC v
  328.     }
  329.     else
  330.     {
  331.         022EC9D8 E28A2C02 add     r2,r10,200h           //r2 = r10 + 0x200
  332.         022EC9DC E1D23CFE ldrsh   r3,[r2,0CEh]          //r3 = [r2 + 0xCE] (was 0xBA)
  333.         022EC9E0 E59A52D4 ldr     r5,[r10,2D4h]         //r5 = [r10 + 0x2D4] (was 0x22F1800)
  334.         022EC9E4 E1A02004 mov     r2,r4                 //r2 = r4 (PtrBMABuff)
  335.         022EC9E8 E12FFF35 blx     r5                    ///Run r5 (Was 022F1800)
  336.     }
  337. ///...
  338.  
  339. //
  340. //  022F1800 22F1800h (Called from line 022EC9E8)
  341. //      r0 = PtrTargetBuffer? [r10,2D8h]
  342. //      r1 = PtrReadBMADataPos
  343. //      r2 = PtrBMAHeaderCopyBeg
  344. //      r3 = Was 0xBA //[r10,0x2CE] (PtrLevelStructBeg)
  345. //
  346. 022F1800 E92D4FF8 push    r3-r11,r14
  347. 022F1804 E1D240F6 ldrsh   r4,[r2,6h]        //r4 = BMA_unk6 (was 0)
  348. 022F1808 E3A05000 mov     r5,0h             //r5 = 0 //Cnt1
  349. 022F180C E3540000 cmp     r4,0h
  350. 022F1810 E3A040FF mov     r4,0FFh           //r4 = 0xFF
  351. if( BMA_unk6 <= 0 )
  352. {
  353.     022F1814 DA000088 ble     22F1A3Ch      ///022F1A3C BMA_unk6 <= 0 v
  354.     ///022F1A3C BMA_unk6 <= 0
  355.     022F1A3C E1A06000 mov     r6,r0             //r6 = PtrTargetBuffer?
  356.     022F1A40 E1A07005 mov     r7,r5             //r7 = Cnt1
  357.     while(Cnt1 < 4)
  358.     {
  359.         ///022F1A44
  360.         022F1A44 E1A08007 mov     r8,r7             //r8 = 0 //Cnt
  361.         while(Cnt < 256)
  362.         {
  363.             ///022F1A48
  364.             022F1A48 E2888001 add     r8,r8,1h          //r8 = Cnt + 1
  365.             022F1A4C E3580C01 cmp     r8,100h
  366.             022F1A50 E4C64001 strb    r4,[r6],1h        //[r6] = r4, r6 += 1
  367.             022F1A54 BAFFFFFB blt     22F1A48h          ///022F1A48 ^
  368.         }
  369.         022F1A58 E2855001 add     r5,r5,1h          //r5 = r5 + 1
  370.         022F1A5C E3550004 cmp     r5,4h
  371.         022F1A60 BAFFFFF7 blt     22F1A44h          ///022F1A44 ^
  372.     }
  373.     022F1A64 E5D27001 ldrb    r7,[r2,1h]        //r7 = BMA_MapHeight (was 0x48)
  374.     022F1A68 E3A04000 mov     r4,0h             //r4 = 0 //Cnt6
  375.     022F1A6C E3570000 cmp     r7,0h
  376.     if( BMA_MapHeight <= 0 )
  377.     {
  378.         022F1A70 DA00001B ble     22F1AE4h      ///022F1AE4 v
  379.         ///Continue to 022F1AE4...
  380.     }
  381.     else
  382.     {
  383.         022F1A74 E3A080FF mov     r8,0FFh           //r8  = 0xFF
  384.         022F1A78 E1A09004 mov     r9,r4             //r9  = 0
  385.         022F1A7C E1A0A008 mov     r10,r8            //r10 = 0xFF
  386.         022F1A80 E1A0C004 mov     r12,r4            //r12 = 0
  387.         022F1A84 EA000013 b       22F1AD8h          ///022F1AD8 v
  388.         while(Cnt6 < BMA_MapHeight)
  389.         {
  390.             ///022F1AD8
  391.             022F1AD8 E5D27001 ldrb    r7,[r2,1h]        ///r7 = BMA_MapHeight //(was 0x48)
  392.             022F1ADC E1540007 cmp     r4,r7
  393.             //**** LOOP CONDITION EVALUATED HERE! ****
  394.             022F1AE0 BAFFFFE8 blt     22F1A88h          ///022F1A88
  395.             ///022F1A88
  396.             022F1A88 E1A0E00C mov     r14,r12           //r14 = 0 //Cnt7
  397.             while( Cnt7 < 5 )
  398.             {
  399.                 ///022F1A8C
  400.                 022F1A8C E28EE001 add     r14,r14,1h        //r14 = Cnt7 + 1
  401.                 022F1A90 E4C6A001 strb    r10,[r6],1h       //[r6] = 0xFF, r6 += 1
  402.                 022F1A94 E35E0005 cmp     r14,5h
  403.                 022F1A98 BAFFFFFB blt     22F1A8Ch          ///022F1A8C ^
  404.             }
  405.             022F1A9C E3A0B000 mov     r11,0h            //r11 = 0
  406.             022F1AA0 EA000001 b       22F1AACh          ///022F1AAC v
  407.             while(r11 < BMA_MapWidth)
  408.             {
  409.                 ///022F1AAC
  410.                 022F1AAC E5D27000 ldrb    r7,[r2]           //r7 = BMA_MapWidth (was 0x2D)
  411.                 022F1AB0 E15B0007 cmp     r11,r7
  412.                 022F1AB4 BAFFFFFA blt     22F1AA4h          ///022F1AA4 ^
  413.                 ///022F1AA4
  414.                 022F1AA4 E4C69001 strb    r9,[r6],1h        //[r6] = 0, r6 += 1
  415.                 022F1AA8 E28BB001 add     r11,r11,1h        //r11 = r11 + 1
  416.             }
  417.             022F1AB8 E08EE007 add     r14,r14,r7        //r14 = Cnt7 + r7    
  418.             022F1ABC EA000001 b       22F1AC8h          ///022F1AC8 v
  419.             while(Cnt7 < 256)
  420.             {
  421.                 ///022F1AC8
  422.                 022F1AC8 E35E0C01 cmp     r14,100h
  423.                 022F1ACC BAFFFFFB blt     22F1AC0h      ///022F1AC0 ^
  424.                 ///022F1AC0
  425.                 022F1AC0 E4C68001 strb    r8,[r6],1h        //[r6] = 0xFF, r6 += 1
  426.                 022F1AC4 E28EE001 add     r14,r14,1h        //r14 = Cnt7 + 1
  427.             }
  428.             022F1AD0 E2844001 add     r4,r4,1h          //r4 = Cnt6 + 1
  429.             022F1AD4 E2855001 add     r5,r5,1h          //r5 = Cnt1 + 1
  430.  
  431.         }
  432.         ///Continue to 022F1AE4...
  433.     }
  434.    
  435.     ///022F1AE4
  436.     022F1AE4 E3A040FF mov     r4,0FFh           //r4 = 0xFF
  437.     022F1AE8 E3A07000 mov     r7,0h             //r7 = 0
  438.     022F1AEC EA000005 b       22F1B08h          ///022F1B08
  439.     while( Cnt1 < r3 ) //r3 was 0xBA
  440.     {
  441.         ///022F1B08
  442.         022F1B08 E1550003 cmp     r5,r3
  443.         022F1B0C BAFFFFF7 blt     22F1AF0h      ///022F1AF0    
  444.         ///022F1AF0
  445.         022F1AF0 E1A08007 mov     r8,r7             //r8 = r7
  446.         while( r8 < 256 )
  447.         {
  448.             ///022F1AF4
  449.             022F1AF4 E2888001 add     r8,r8,1h          //r8 = r8 + 1
  450.             022F1AF8 E3580C01 cmp     r8,100h          
  451.             022F1AFC E4C64001 strb    r4,[r6],1h        //[r6] = r4, r6 += 1
  452.             022F1B00 BAFFFFFB blt     22F1AF4h      ///022F1AF4 ^
  453.         }
  454.         022F1B04 E2855001 add     r5,r5,1h          //r5 = Cnt1 + 1
  455.     }
  456.     //Continue to 022F1B10...
  457. }
  458. else //BMA_unk6 > 0
  459. {
  460.     022F1818 E1A07000 mov     r7,r0             //r7 = r0
  461.     022F181C E1A06005 mov     r6,r5             //r6 = 0
  462.     while( Cnt1 < 4 )
  463.     {
  464.         ///022F1820
  465.         022F1820 E1A08006 mov     r8,r6             //r8 = 0 //Cnt2
  466.         while( Cnt < 256 )
  467.         {
  468.             ///022F1824
  469.             022F1824 E2888001 add     r8,r8,1h          //r8 = Cnt2 + 1
  470.             022F1828 E3580C01 cmp     r8,100h
  471.             022F182C E4C74001 strb    r4,[r7],1h        //[r7] = BMA_unk6, r7 += 1
  472.             022F1830 BAFFFFFB blt     22F1824h          ///022F1824 ^
  473.         }
  474.         022F1834 E2855001 add     r5,r5,1h          //r5 = Cnt1 + 1
  475.         022F1838 E3550004 cmp     r5,4h
  476.         022F183C BAFFFFF7 blt     22F1820h      ///022F1820
  477.     }
  478.     022F1840 E5D26001 ldrb    r6,[r2,1h]        //r6 = BMA_MapHeight
  479.     022F1844 E3A04000 mov     r4,0h             //r4 = 0 //Cnt3
  480.     022F1848 E3560000 cmp     r6,0h
  481.     if( BMA_MapHeight <= 0 )
  482.     {
  483.         022F184C DA00006E ble     22F1A0Ch      ///022F1A0C v
  484.         ///022F1A0C
  485.         022F1A0C E3A040FF mov     r4,0FFh               //r4 = 0xFF
  486.         022F1A10 E3A06000 mov     r6,0h                 //r6 = 0
  487.         022F1A14 EA000005 b       22F1A30h              ///022F1A30 v
  488.         while(Cnt1 < r3)
  489.         {
  490.             ///022F1A30
  491.             022F1A30 E1550003 cmp     r5,r3
  492.             022F1A34 BAFFFFF7 blt     22F1A18h          ///022F1A18 ^
  493.             ///022F1A18
  494.             022F1A18 E1A08006 mov     r8,r6                 //r8 = 0
  495.             while(r8 < 256)
  496.             {
  497.                 ///022F1A1C
  498.                 022F1A1C E2888001 add     r8,r8,1h          //r8 = r8 + 1
  499.                 022F1A20 E3580C01 cmp     r8,100h              
  500.                 022F1A24 E4C74001 strb    r4,[r7],1h        //[r7] = 0xFF, r7 += 1
  501.                 022F1A28 BAFFFFFB blt     22F1A1Ch          ///022F1A1C
  502.             }
  503.             022F1A2C E2855001 add     r5,r5,1h              //r5 = Cnt1 + 1
  504.         }
  505.        
  506.     }
  507.     else //BMA_MapHeight == 0
  508.     {
  509.         022F1850 EA00006A b       22F1A00h          ///022F1A00 v
  510.        
  511.         while(Cnt3 < BMA_MapHeight)
  512.         {
  513.             ///022F1A00
  514.             022F1A00 E5D26001 ldrb    r6,[r2,1h]            //r6 = BMA_MapHeight
  515.             022F1A04 E1540006 cmp     r4,r6
  516.             022F1A08 BAFFFF91 blt     22F1854h          ///022F1854 ^
  517.            
  518.             ///022F1854
  519.             022F1854 E3A09000 mov     r9,0h             //r9 = 0 //Cnt5
  520.             022F1858 E3A060FF mov     r6,0FFh           //r6 = 0xFF
  521.             while(Cnt5 < 5)
  522.             {
  523.                 ///022F185C
  524.                 022F185C E2899001 add     r9,r9,1h          //r9 = Cnt5 + 1
  525.                 022F1860 E3590005 cmp     r9,5h
  526.                 022F1864 E4C76001 strb    r6,[r7],1h        //[r7] = 0xFF, r7 += 1
  527.                 022F1868 BAFFFFFB blt     22F185Ch      ///022F185C ^
  528.             }
  529.             022F186C E3540000 cmp     r4,0h
  530.             022F1870 E3A0E000 mov     r14,0h            //r14 = 0
  531.             if( Cnt3 !=  0 )
  532.             {
  533.                 022F1874 1A00002A bne     22F1924h      ///022F1924 v
  534.                 ///022F1924
  535.                 022F1924 E247CC01 sub     r12,r7,100h           //r12 = r7 - 256
  536.                 022F1928 EA000028 b       22F19D0h              ///022F19D0 v
  537.                
  538.                 while( r14 < r6 )
  539.                 {
  540.                     ///022F19D0
  541.                     022F19D0 E5D26000 ldrb    r6,[r2]               //r6 = BMA_MapWidth
  542.                     022F19D4 E15E0006 cmp     r14,r6
  543.                     022F19D8 BAFFFFD3 blt     22F192Ch          ///022F192C ^
  544.                     ///022F192C
  545.                     022F192C E5D16000 ldrb    r6,[r1]               //r6 =
  546.                     022F1930 E2818001 add     r8,r1,1h              //r8 = r1 + 1
  547.                     022F1934 E1A01008 mov     r1,r8                 //r1 = r8
  548.                     022F1938 E35600C0 cmp     r6,0C0h  
  549.                     if( r6 < 0xC0 )
  550.                     {
  551.                         022F193C BA00000B blt     22F1970h          ///022F1970 v
  552.                         ///022F1970
  553.                         022F1970 E3560080 cmp     r6,80h
  554.                         if( r6 < 0x80 )
  555.                         {
  556.                             022F1974 BA00000C blt     22F19ACh          ///022F19AC v
  557.                             ///022F19AC
  558.                             022F19AC E3A0A000 mov     r10,0h                //r10 = 0
  559.                             022F19B0 EA000002 b       22F19C0h              ///022F19C0 v
  560.                             while(r10 <= r6)
  561.                             {
  562.                                 ///022F19C0
  563.                                 022F19C0 E15A0006 cmp     r10,r6
  564.                                 022F19C4 DAFFFFFA ble     22F19B4h          ///022F19B4 ^
  565.                                 ///022F19B4
  566.                                 022F19B4 E4DC8001 ldrb    r8,[r12],1h           //r8 = [r12], r12 += 1
  567.                                 022F19B8 E28AA001 add     r10,r10,1h            //r10 = r10 + 1
  568.                                 022F19BC E4C78001 strb    r8,[r7],1h            //[r7] = r8, r7 += 1
  569.                             }
  570.                             022F19C8 E2866001 add     r6,r6,1h              //r6 = r6 + 1
  571.                             022F19CC E08EE006 add     r14,r14,r6            //r14 = r14 + r6
  572.                             ///Continue loop at 022F19D0..
  573.                         }
  574.                         else //r6 >= 0x80
  575.                         {
  576.                             022F1978 E2881001 add     r1,r8,1h              //r1 = r8 + 1
  577.                             022F197C E5D88000 ldrb    r8,[r8]               //r8 = [r8]
  578.                             022F1980 E3A0A080 mov     r10,80h               //r10 = 0x80
  579.                             022F1984 EA000003 b       22F1998h              ///022F1998 v
  580.                             while(r10 <= r6)
  581.                             {
  582.                                 ///022F1998
  583.                                 022F1998 E15A0006 cmp     r10,r6
  584.                                 022F199C DAFFFFF9 ble     22F1988h          ///022F1988
  585.                                 ///022F1988
  586.                                 022F1988 E4DCB001 ldrb    r11,[r12],1h          //r11 = [r12], r12 += 1
  587.                                 022F198C E28AA001 add     r10,r10,1h            //r10 = r10 + 1
  588.                                 022F1990 E028B00B eor     r11,r8,r11            //r11 = r8 | r11
  589.                                 022F1994 E4C7B001 strb    r11,[r7],1h           //[r7] = r11, r7 += 1
  590.                             }
  591.                             022F19A0 E246607F sub     r6,r6,7Fh             //r6 = r6 - 0x7F
  592.                             022F19A4 E08EE006 add     r14,r14,r6            //r14 = r14 + r6
  593.                             022F19A8 EA000008 b       22F19D0h              ///022F19D0 v
  594.                             ///Continue loop at 022F19D0..
  595.                         }
  596.                     }
  597.                     else //r6 >= 0xC0
  598.                     {
  599.                         022F1940 E3A080C0 mov     r8,0C0h               //r8 = 0xC0
  600.                         022F1944 EA000004 b       22F195Ch              ///022F195C v
  601.                         ///022F195C
  602.                         022F195C E1580006 cmp     r8,r6
  603.                         if( r8 <= r6 )
  604.                         {
  605.                             022F1960 DAFFFFF8 ble     22F1948h          ///022F1948 ^
  606.                             ///022F1948
  607.                             022F1948 E4D1B001 ldrb    r11,[r1],1h           //r11 = [r1], r1 += 1
  608.                             022F194C E4DCA001 ldrb    r10,[r12],1h          //r10 = [r12], r12 += 1
  609.                             022F1950 E2888001 add     r8,r8,1h              //r8  = r8 + 1
  610.                             022F1954 E02BA00A eor     r10,r11,r10           //r10 = r11 ^ r10
  611.                             022F1958 E4C7A001 strb    r10,[r7],1h           //[r7] = r10, r7 += 1
  612.                         }
  613.                         022F1964 E24660BF sub     r6,r6,0BFh            //r6 = r6 - 0xBF
  614.                         022F1968 E08EE006 add     r14,r14,r6            //r14 = r14 + r6
  615.                         022F196C EA000017 b       22F19D0h              ///022F19D0 v
  616.                         ///Continue loop at 022F19D0..
  617.                     }
  618.                 }
  619.                 //Exit loop to 022F19DC...
  620.             }
  621.             else //Cnt3 ==  0
  622.             {
  623.                 022F1878 E1A0800E mov     r8,r14            //r8 = 0
  624.                 022F187C E3A0C0C0 mov     r12,0C0h          //r12 = 0xC0
  625.                 022F1880 EA000023 b       22F1914h          ///022F1914 v
  626.                 while(r14 < BMA_MapWidth)
  627.                 {
  628.                     ///022F1914
  629.                     022F1914 E5D26000 ldrb    r6,[r2]           //r6 = BMA_MapWidth
  630.                     022F1918 E15E0006 cmp     r14,r6
  631.                     022F191C BAFFFFD8 blt     22F1884h          ///022F1884 ^
  632.                     ///022F1884
  633.                     022F1884 E5D16000 ldrb    r6,[r1]           //r6 =
  634.                     022F1888 E281A001 add     r10,r1,1h         //r10 = r1 + 1
  635.                     022F188C E1A0100A mov     r1,r10            //r1  = r1 + 1
  636.                     022F1890 E35600C0 cmp     r6,0C0h
  637.                     if( r6 < 0xC0 )
  638.                     {
  639.                         022F1894 BA000009 blt     22F18C0h      ///022F18C0 v
  640.                         ///022F18C0
  641.                         022F18C0 E3560080 cmp     r6,80h
  642.                         if( r6 < 0x80 )
  643.                         {
  644.                             022F18C4 BA00000A blt     22F18F4h      ///022F18F4 v
  645.                             ///022F18F4
  646.                             022F18F4 E3A0A000 mov     r10,0h            //r10 = 0
  647.                             022F18F8 EA000001 b       22F1904h          ///022F1904 v
  648.                             while( r10 <= r6 )
  649.                             {
  650.                                 ///022F1904
  651.                                 022F1904 E15A0006 cmp     r10,r6
  652.                                 022F1908 DAFFFFFB ble     22F18FCh      ///022F18FC
  653.                                 ///022F18FC
  654.                                 022F18FC E4C78001 strb    r8,[r7],1h        //[r7] = r8, r7 += 1
  655.                                 022F1900 E28AA001 add     r10,r10,1h        //r10  = r10 + 1
  656.                             }
  657.                             022F190C E2866001 add     r6,r6,1h          //r6 = r6 + 1
  658.                             022F1910 E08EE006 add     r14,r14,r6        //r14 = r14 + r6
  659.                             ///Continue loop at 022F1914..
  660.                         }
  661.                         else //r6 >= 0x80
  662.                         {
  663.                             022F18C8 E28A1001 add     r1,r10,1h         //r1  = r10 + 1
  664.                             022F18CC E5DAA000 ldrb    r10,[r10]         //r10 = [r10]
  665.                             022F18D0 E3A0B080 mov     r11,80h           //r11 = 0x80
  666.                             022F18D4 EA000001 b       22F18E0h          ///022F18E0 v
  667.                             while( r11 <= r6 )
  668.                             {
  669.                                 ///022F18E0
  670.                                 022F18E0 E15B0006 cmp     r11,r6
  671.                                 022F18E4 DAFFFFFB ble     22F18D8h      ///022F18D8 ^
  672.                                 ///022F18D8
  673.                                 022F18D8 E4C7A001 strb    r10,[r7],1h       //[r7] = r10, r7 += 1
  674.                                 022F18DC E28BB001 add     r11,r11,1h        //r11  = r11 + 1
  675.                             }
  676.                             022F18E8 E246607F sub     r6,r6,7Fh         //r6 = r6 - 0x7F
  677.                             022F18EC E08EE006 add     r14,r14,r6        //r14 = r14 + r6
  678.                             022F18F0 EA000007 b       22F1914h          ///022F1914 v
  679.                             ///Continue loop at 022F1914..
  680.                         }
  681.                     }
  682.                     else //r6 >= 0xC0
  683.                     {
  684.                         022F1898 E1A0B00C mov     r11,r12           //r11 = r12
  685.                         022F189C EA000002 b       22F18ACh          ///022F18AC v
  686.                         while(r11 <= r6)
  687.                         {
  688.                             ///022F18AC
  689.                             022F18AC E15B0006 cmp     r11,r6
  690.                             022F18B0 DAFFFFFA ble     22F18A0h      ///022F18A0 ^
  691.                             ///022F18A0
  692.                             022F18A0 E4D1A001 ldrb    r10,[r1],1h       //r10 = [r1], r1 += 1
  693.                             022F18A4 E28BB001 add     r11,r11,1h        //r11 = r11 + 1
  694.                             022F18A8 E4C7A001 strb    r10,[r7],1h       //[r7] = r10, r7 += 1
  695.                         }
  696.                         022F18B4 E24660BF sub     r6,r6,0BFh        //r6 = r6 - 0xBF
  697.                         022F18B8 E08EE006 add     r14,r14,r6        //r14 = r14 + r6
  698.                         022F18BC EA000014 b       22F1914h          ///022F1914 v
  699.                         ///Continue loop at 022F1914..
  700.                     }
  701.                 }
  702.                 022F1920 EA00002D b       22F19DCh              ///022F19DC v
  703.                 //Exit else to 022F19DC...
  704.             }
  705.             ///022F19DC
  706.             022F19DC E0899006 add     r9,r9,r6              //r9 = r9 + BMA_MapWidth
  707.             022F19E0 E3A060FF mov     r6,0FFh               //r6 = 0xFF
  708.             022F19E4 EA000001 b       22F19F0h              ///022F19F0 v
  709.             while(r9 < 256)
  710.             {
  711.                 ///022F19F0
  712.                 022F19F0 E3590C01 cmp     r9,100h
  713.                 022F19F4 BAFFFFFB blt     22F19E8h          ///022F19E8 ^
  714.                 ///022F19E8
  715.                 022F19E8 E4C76001 strb    r6,[r7],1h            //[r7] = 0xFF
  716.                 022F19EC E2899001 add     r9,r9,1h              //r9 = r9 + 1
  717.             }
  718.             022F19F8 E2844001 add     r4,r4,1h              //r4 = Cnt3 + 1
  719.             022F19FC E2855001 add     r5,r5,1h              //r5 = Cnt1 + 1
  720.             ///Continue loop  to 022F1A00...
  721.         }
  722.         //Exit else to 022F1A38
  723.     }
  724.     022F1A38 EA000034 b       22F1B10h              ///022F1B10 v
  725.     //Continue to 022F1B10...
  726. }
  727. ///022F1B10
  728. 022F1B10 E1D230F8 ldrsh   r3,[r2,8h]        //r3 = BMA_unk7
  729. 022F1B14 E3530000 cmp     r3,0h
  730. if( BMA_unk7 > 0 )
  731. {
  732.     022F1B18 C5D23001 ldrgtb  r3,[r2,1h]    //r3 = BMA_MapHeight
  733.     022F1B1C C2804B01 addgt   r4,r0,400h    //r4 = PtrTargetBuffer + 1024
  734.     022F1B20 C3A06000 movgt   r6,0h         //r6 = 0
  735.     022F1B24 C3530000 cmpgt   r3,0h
  736. }
  737. if((BMA_unk7 <= 0) || ((BMA_unk7 > 0) && (BMA_MapHeight <= 0)) )   //This condition can be triggered either by (BMA_unk7 <= 0) or (BMA_MapHeight <= 0)
  738. {
  739.     022F1B28 DA00004A ble     22F1C58h      ///022F1C58 v
  740.     ///022F1C58
  741.     022F1C58 E1D230F8 ldrsh   r3,[r2,8h]        //r3 = BMA_unk7
  742.     022F1C5C E3530001 cmp     r3,1h
  743.     if( BMA_unk7 > 1 )
  744.     {
  745.         022F1C60 C5D24001 ldrgtb  r4,[r2,1h]    //r4 = BMA_MapHeight
  746.         022F1C64 C2803B01 addgt   r3,r0,400h    //r3 = r0 + 1024
  747.         022F1C68 C3A05000 movgt   r5,0h         //r5 = 0
  748.         022F1C6C C3540000 cmpgt   r4,0h
  749.     }
  750.     if( BMA_unk7 <= 1 || ((BMA_unk7 > 1) && r(4 > BMA_MapHeight)) )
  751.     {
  752.         022F1C70 DA00004A ble     22F1DA0h      ///022F1DA0 (Return) v
  753.     }
  754.     else
  755.     {
  756.         022F1C74 EA000046 b       22F1D94h          ///022F1D94 v
  757.        
  758.         while(r5 < BMA_MapHeight)
  759.         {
  760.             ///022F1D94
  761.             022F1D94 E5D20001 ldrb    r0,[r2,1h]        //r0 = BMA_MapHeight
  762.             022F1D98 E1550000 cmp     r5,r0
  763.             022F1D9C BAFFFFB5 blt     22F1C78h      ///022F1C78 ^
  764.            
  765.             ///022F1C78
  766.             022F1C78 E3550000 cmp     r5,0h
  767.             022F1C7C E2833005 add     r3,r3,5h          //r3 = r3 + 5
  768.             022F1C80 E3A04000 mov     r4,0h             //r4 = 0
  769.             if( r5 != 0 )
  770.             {
  771.                 022F1C84 1A000017 bne     22F1CE8h      ///022F1CE8 v
  772.                 ///022F1CE8
  773.                 022F1CE8 E2437C01 sub     r7,r3,100h        //r7 = r3 + 256
  774.                 022F1CEC E3A00080 mov     r0,80h            //r0 = 0x80
  775.                 022F1CF0 E1A09004 mov     r9,r4             //r9 = r4
  776.                 022F1CF4 EA00001F b       22F1D78h          ///022F1D78
  777.                
  778.                 while(r4 < BMA_MapWidth)
  779.                 {
  780.                     ///022F1D78
  781.                     022F1D78 E5D28000 ldrb    r8,[r2]           //r8 = BMA_MapWidth
  782.                     022F1D7C E1540008 cmp     r4,r8    
  783.                     022F1D80 BAFFFFDC blt     22F1CF8h      ///022F1CF8 ^
  784.                    
  785.                     ///022F1CF8
  786.                     022F1CF8 E4D16001 ldrb    r6,[r1],1h        //r6 = [r1], r1 += 1    
  787.                     022F1CFC E3560080 cmp     r6,80h
  788.                     if( r6 < 0x80 )
  789.                     {
  790.                         022F1D00 BA00000E blt     22F1D40h      ///022F1D40 v
  791.                         ///022F1D40
  792.                         022F1D40 E1A0B009 mov     r11,r9            //r11 = r9
  793.                         022F1D44 EA000007 b       22F1D68h          ///022F1D68 v
  794.                        
  795.                         while( r11 <= r6 )
  796.                         {
  797.                             ///022F1D68
  798.                             022F1D68 E15B0006 cmp     r11,r6
  799.                             022F1D6C DAFFFFF5 ble     22F1D48h      ///022F1D48 ^
  800.                            
  801.                             ///022F1D48
  802.                             022F1D48 E4D78001 ldrb    r8,[r7],1h        //r8 = [r7], r7 += 1
  803.                             022F1D4C E28BB001 add     r11,r11,1h        //r11 = r11 + 1
  804.                             022F1D50 E3180040 tst     r8,40h
  805.                             if( r8 & 0x40 != 0 )
  806.                             {
  807.                                 022F1D54 11A0A003 movne   r10,r3        //r10 = r3
  808.                                 022F1D58 14D38001 ldrneb  r8,[r3],1h    //r8 = [r3], r3 += 1
  809.                                 022F1D60 13888040 orrne   r8,r8,40h     //r8 = r8 + 0x40
  810.                                 022F1D64 15CA8000 strneb  r8,[r10]      //[r10] = r8
  811.                             }
  812.                             else
  813.                             {
  814.                                 022F1D5C 02833001 addeq   r3,r3,1h      //r3 = r3 + 1
  815.                             }
  816.                             //022F1D60 and 022F1D64 would be here, but it would take up extra space
  817.                         }
  818.                         022F1D70 E2866001 add     r6,r6,1h          //r6 = r6 + 1
  819.                         022F1D74 E0844006 add     r4,r4,r6          //r4 = r4 + r6
  820.                         //Continue loop at 022F1D78...
  821.                     }
  822.                     else
  823.                     {
  824.                         022F1D04 E1A0B000 mov     r11,r0            //r11 = r0
  825.                         022F1D08 EA000007 b       22F1D2Ch          ///022F1D2C v
  826.                        
  827.                         while(r11 <= r6)
  828.                         {
  829.                             ///022F1D2C
  830.                             022F1D2C E15B0006 cmp     r11,r6
  831.                             022F1D30 DAFFFFF5 ble     22F1D0Ch      ///022F1D0C ^
  832.                             ///022F1D0C
  833.                             022F1D0C E4D78001 ldrb    r8,[r7],1h        //r8 = [r7], r7 += 1
  834.                             022F1D10 E28BB001 add     r11,r11,1h        //r11 = r11 + 1
  835.                             022F1D14 E3180040 tst     r8,40h
  836.                             if( r8 & 0x40 == 0 )
  837.                             {
  838.                                 022F1D18 01A0A003 moveq   r10,r3        //r10 = r3
  839.                                 022F1D1C 04D38001 ldreqb  r8,[r3],1h    //r8 = [r3], r3 += 1
  840.                                 022F1D24 03888040 orreq   r8,r8,40h     //r8 = r8 | 0x40
  841.                                 022F1D28 05CA8000 streqb  r8,[r10]      //[r10] = r8
  842.                             }
  843.                             else
  844.                             {
  845.                                 022F1D20 12833001 addne   r3,r3,1h      //r3 = r3 + 1
  846.                             }
  847.                         }
  848.                         022F1D34 E246607F sub     r6,r6,7Fh         //r6 = r6 - 0x7F
  849.                         022F1D38 E0844006 add     r4,r4,r6          //r4 = r4 + r6
  850.                         022F1D3C EA00000D b       22F1D78h          ///022F1D78 v
  851.                         //Continue loop at 022F1D78...
  852.                     }
  853.                     //Continue loop at 022F1D78...
  854.                 }
  855.                
  856.             }
  857.             else
  858.             {
  859.             022F1C88 E3A06080 mov     r6,80h            //r6 = 0x80
  860.             022F1C8C EA000011 b       22F1CD8h          //022F1CD8 v
  861.             while(r4 < BMA_MapWidth)
  862.             {
  863.                 ///022F1CD8
  864.                 022F1CD8 E5D28000 ldrb    r8,[r2]           //r8 = BMA_MapWidth
  865.                 022F1CDC E1540008 cmp     r4,r8
  866.                 022F1CE0 BAFFFFEA blt     22F1C90h      ///022F1C90 ^
  867.                 ///022F1C90
  868.                 022F1C90 E4D18001 ldrb    r8,[r1],1h        //r8 = [r1], r1 += 1
  869.                 022F1C94 E3580080 cmp     r8,80h    
  870.                 if( r8 < 0x80 )
  871.                 {
  872.                     022F1C98 BA00000B blt     22F1CCCh      ///022F1CCC v
  873.                     ///022F1CCC
  874.                     022F1CCC E2880001 add     r0,r8,1h          //r0 = r8 + 1
  875.                     022F1CD0 E0833000 add     r3,r3,r0          //r3 = r3 + r0
  876.                     022F1CD4 E0844000 add     r4,r4,r0          //r4 = r4 + r0
  877.                     //Continue loop at 022F1CD8..
  878.                 }
  879.                 else
  880.                 {
  881.                     022F1C9C E1A07006 mov     r7,r6             //r7 = r6
  882.                     022F1CA0 EA000004 b       22F1CB8h          ///022F1CB8 v
  883.  
  884.                     while( r7 <= r8 )
  885.                     {
  886.                         ///022F1CB8
  887.                         022F1CB8 E1570008 cmp     r7,r8
  888.                         022F1CBC DAFFFFF8 ble     22F1CA4h      ///022F1CA4 ^
  889.                         ///022F1CA4
  890.                         022F1CA4 E1A09003 mov     r9,r3             //r9 = r3
  891.                         022F1CA8 E4D30001 ldrb    r0,[r3],1h        //r0 = [r3], r3 += 1
  892.                         022F1CAC E2877001 add     r7,r7,1h          //r7 = r7 + 1
  893.                         022F1CB0 E3800040 orr     r0,r0,40h         //r0 = r0 | 0x40    
  894.                         022F1CB4 E5C90000 strb    r0,[r9]           //[r9] = r0
  895.                     }
  896.                     022F1CC0 E248007F sub     r0,r8,7Fh         //r0 = r8 - 0x7F
  897.                     022F1CC4 E0844000 add     r4,r4,r0          //r4 = r4 + r0
  898.                     022F1CC8 EA000002 b       22F1CD8h          ///022F1CD8 v
  899.                     //Continue loop at 022F1CD8..
  900.                 }
  901.             }
  902.             022F1CE4 EA000026 b       22F1D84h          ///022F1D84 v
  903.             ///022F1D84
  904.             022F1D84 E2680C01 rsb     r0,r8,100h        //r0 = 256 - r8
  905.             022F1D88 E2400005 sub     r0,r0,5h          //r0 = r0 - 5
  906.             022F1D8C E0833000 add     r3,r3,r0          //r3 = r3 + r0
  907.             022F1D90 E2855001 add     r5,r5,1h          //r5 = r5 + 1
  908.             //Continue loop at 022F1D94...
  909.         }
  910.     }
  911.  
  912. }
  913. else
  914. {
  915.     022F1B2C EA000046 b       22F1C4Ch          ///022F1C4C v
  916.    
  917.     while( r6 < BMA_MapHeight )
  918.     {
  919.         ///022F1C4C
  920.         022F1C4C E5D23001 ldrb    r3,[r2,1h]        //r3 = BMA_MapHeight
  921.         022F1C50 E1560003 cmp     r6,r3
  922.         022F1C54 BAFFFFB5 blt     22F1B30h      ///022F1B30 ^
  923.         ///022F1B30
  924.         022F1B30 E3560000 cmp     r6,0h
  925.         022F1B34 E2844005 add     r4,r4,5h          //r4 = r4 + 5
  926.         022F1B38 E3A05000 mov     r5,0h             //r5 = 0
  927.         if( r6 != 0 )
  928.         {
  929.             022F1B3C 1A000017 bne     22F1BA0h          ///022F1BA0 v
  930.             ///022F1BA0
  931.             022F1BA0 E2447C01 sub     r7,r4,100h        //r7 = r4 - 256    
  932.             022F1BA4 E3A0C080 mov     r12,80h           //r12 = 0x80
  933.             022F1BA8 E1A03005 mov     r3,r5             //r3 = r5
  934.             022F1BAC EA00001F b       22F1C30h          ///022F1C30 v
  935.            
  936.             while( r5 < BMA_MapWidth )
  937.             {
  938.                 ///022F1C30
  939.                 022F1C30 E5D28000 ldrb    r8,[r2]           //r8 = BMA_MapWidth
  940.                 022F1C34 E1550008 cmp     r5,r8            
  941.                 022F1C38 BAFFFFDC blt     22F1BB0h      ///022F1BB0 ^
  942.                 ///022F1BB0
  943.                 022F1BB0 E4D1E001 ldrb    r14,[r1],1h       //r14 = [r1], r1 += 1
  944.                 022F1BB4 E35E0080 cmp     r14,80h  
  945.                 if( r14 < 0x80 )
  946.                 {
  947.                     022F1BB8 BA00000E blt     22F1BF8h      ///022F1BF8 v
  948.                     ///022F1BF8
  949.                     022F1BF8 E1A08003 mov     r8,r3             //r8 = r3
  950.                     022F1BFC EA000007 b       22F1C20h          ///022F1C20
  951.                     while( r8 <= r14 )
  952.                     {
  953.                         ///022F1C20
  954.                         022F1C20 E158000E cmp     r8,r14
  955.                         022F1C24 DAFFFFF5 ble     22F1C00h      ///022F1C00 ^
  956.                         ///022F1C00
  957.                         022F1C00 E4D79001 ldrb    r9,[r7],1h        //r9 = [r7], r7 += 1
  958.                         022F1C04 E2888001 add     r8,r8,1h          //r8 = r8 + 1
  959.                         022F1C08 E3190080 tst     r9,80h    
  960.                         if( r9 & 0x80 != 0 )
  961.                         {
  962.                             022F1C0C 11A0A004 movne   r10,r4        //r10 = r4
  963.                             022F1C10 14D49001 ldrneb  r9,[r4],1h    //r9 = [r4], r4 += 1
  964.                             022F1C18 13899080 orrne   r9,r9,80h     //r9 = r9 | 0x80
  965.                             022F1C1C 15CA9000 strneb  r9,[r10]      //[r10] = r9
  966.                         }
  967.                         else
  968.                         {
  969.                             022F1C14 02844001 addeq   r4,r4,1h      //r4 = r4 + 1
  970.                         }
  971.                         ///Continue loop at 022F1C20...
  972.                     }
  973.                 }
  974.                 else
  975.                 {
  976.                     022F1BBC E1A0800C mov     r8,r12            //r8 = r12
  977.                     022F1BC0 EA000007 b       22F1BE4h          ///022F1BE4 v
  978.                     while(r8 <= r14)
  979.                     {
  980.                         ///022F1BE4
  981.                         022F1BE4 E158000E cmp     r8,r14
  982.                         022F1BE8 DAFFFFF5 ble     22F1BC4h      ///022F1BC4 ^
  983.                         ///022F1BC4
  984.                         022F1BC4 E4D79001 ldrb    r9,[r7],1h        //r9 = [r7], r7+= 1
  985.                         022F1BC8 E2888001 add     r8,r8,1h          //r8 = r8 + 1
  986.                         022F1BCC E3190080 tst     r9,80h
  987.                         if( r9 & 0x80 == 0 )
  988.                         {
  989.                             022F1BD0 01A0A004 moveq   r10,r4        //r10 = r4
  990.                             022F1BD4 04D49001 ldreqb  r9,[r4],1h    //r9 = [r4], r4 += 1  
  991.                             022F1BDC 03899080 orreq   r9,r9,80h     //r9 = r9 | 0x80
  992.                             022F1BE0 05CA9000 streqb  r9,[r10]      //[r10] = r9
  993.                         }
  994.                         else
  995.                         {
  996.                             022F1BD8 12844001 addne   r4,r4,1h      //r4 = r4 + 1
  997.                         }
  998.                         ///Continue loop at 022F1BE4...
  999.                     }
  1000.                     022F1BEC E24E807F sub     r8,r14,7Fh        //r8 = r14 + 0x7F    
  1001.                     022F1BF0 E0855008 add     r5,r5,r8          //r5 = r5 + r8
  1002.                     022F1BF4 EA00000D b       22F1C30h          ///022F1C30 v
  1003.                 }
  1004.                 022F1C28 E28E8001 add     r8,r14,1h         //r8 = r14 + 1
  1005.                 022F1C2C E0855008 add     r5,r5,r8          //r5 = r5 + r8
  1006.             }
  1007.             ///Continue loop to 022F1B3C!
  1008.         }
  1009.         022F1B40 E3A07080 mov     r7,80h            //r7 = 0x80
  1010.         022F1B44 EA000011 b       22F1B90h          ///022F1B90 v
  1011.         while( r5 < BMA_MapWidth )
  1012.         {
  1013.             ///022F1B90
  1014.             022F1B90 E5D28000 ldrb    r8,[r2]           //r8 = BMA_MapWidth
  1015.             022F1B94 E1550008 cmp     r5,r8
  1016.             022F1B98 BAFFFFEA blt     22F1B48h      ///022F1B48 ^
  1017.             ///022F1B48
  1018.             022F1B48 E4D19001 ldrb    r9,[r1],1h        //r9 = [r1], r1 += 1
  1019.             022F1B4C E3590080 cmp     r9,80h
  1020.             if(r9 < 0x80)
  1021.             {
  1022.                 022F1B50 BA00000B blt     22F1B84h      ///022F1B84 v
  1023.                 ///022F1B84
  1024.                 022F1B84 E2893001 add     r3,r9,1h          //r3 = r9 + 1
  1025.                 022F1B88 E0844003 add     r4,r4,r3          //r4 = r4 + r3
  1026.                 022F1B8C E0855003 add     r5,r5,r3          //r5 = r5 + r3
  1027.             }
  1028.             else
  1029.             {
  1030.                 022F1B54 E1A08007 mov     r8,r7             //r8 = r7
  1031.                 022F1B58 EA000004 b       22F1B70h          ///022F1B70 v
  1032.                
  1033.                 ///022F1B70
  1034.                 022F1B70 E1580009 cmp     r8,r9
  1035.                 if( r8 <= r9 )
  1036.                 {
  1037.                     022F1B74 DAFFFFF8 ble     22F1B5Ch      ///022F1B5C ^
  1038.                     ///022F1B5C
  1039.                     022F1B5C E1A0A004 mov     r10,r4            //r10 = r4
  1040.                     022F1B60 E4D43001 ldrb    r3,[r4],1h        //r3 = [r4], r4 += 1
  1041.                     022F1B64 E2888001 add     r8,r8,1h          //r8 = r8 + 1
  1042.                     022F1B68 E3833080 orr     r3,r3,80h         //r3 = r3 | 0x80
  1043.                     022F1B6C E5CA3000 strb    r3,[r10]          //[r10] = r3
  1044.                 }
  1045.                 022F1B78 E249307F sub     r3,r9,7Fh         //r3 = r9 - 0x7F
  1046.                 022F1B7C E0855003 add     r5,r5,r3          //r5 = r5 + r3
  1047.                 022F1B80 EA000002 b       22F1B90h          ///022F1B90 v
  1048.             }
  1049.             ///Continue loop to 022F1B90...
  1050.         }
  1051.         022F1B9C EA000026 b       22F1C3Ch          ///022F1C3C v
  1052.        
  1053.         ///022F1C3C
  1054.         022F1C3C E2683C01 rsb     r3,r8,100h        //r3 = 256 - r8
  1055.         022F1C40 E2433005 sub     r3,r3,5h          //r3 = r3 - 5
  1056.         022F1C44 E0844003 add     r4,r4,r3          //r4 = r4 + r3
  1057.         022F1C48 E2866001 add     r6,r6,1h          //r6 = r6 + 1  
  1058.         ///Continue loop to 022F1C4C...
  1059.     }
  1060. }
  1061. ///022F1DA0
  1062. 022F1DA0 E1A00001 mov     r0,r1             //r0 = r1
  1063. 022F1DA4 E8BD8FF8 pop     r3-r11,r15        //return
Advertisement
Add Comment
Please, Sign In to add comment