Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ///...
- ///
- ///022EC9B0 - Parsing BMA
- ///
- 022EC9B0 E28A0FB9 add r0,r10,2E4h //r0 = PtrTablePtrMappingData? =r10 + 0x2E4 (Possibly destination struct?)
- 022EC9B4 E285100C add r1,r5,0Ch //r1 = PtrBMABuff + 12 (Skips header) //PtrBMAData
- 022EC9B8 E28A2FAF add r2,r10,2BCh //r2 = r10 + 0x2BC
- 022EC9BC E28A3E1E add r3,r10,1E0h //r3 = r10 + 0x1E0 //PtrBMAHeaderCopy
- 022EC9C0 EB000643 bl 22EE2D4h ///fun_022EE2D4
- ///Function 22EE2D4h
- 022EE2D4 E92D4FF8 push r3-r11,r14
- 022EE2D8 E24DD010 sub r13,r13,10h //Alloc 16 bytes on stack
- 022EE2DC E3A05000 mov r5,0h //r5 = Cnt = 0
- 022EE2E0 EA0000B8 b 22EE5C8h ///022EE5C8 v
- while( Cnt < r4 )
- {
- ///022EE5C8
- 022EE5C8 E1D240F4 ldrsh r4,[r2,4h] //r4 = [r2,4h] AKA [r10,2C0h](was 2) Probably the NB of BPC entries
- 022EE5CC E1550004 cmp r5,r4
- //***LOOP CONDITION EVALUATED HERE***
- 022EE5D0 BAFFFF43 blt 22EE2E4h ///022EE2E4 LOOP_BEG_BMA
- ///022EE2E4 LOOP_BEG_BMA
- 022EE2E4 E0444005 sub r4,r4,r5 //r4 = r4 - Cnt
- 022EE2E8 E0804104 add r4,r0,r4,lsl 2h //r4 = PtrTablePtrMappingData? + (r4 * 4)
- 022EE2EC E514A004 ldr r10,[r4,-4h] //r10 = [r4 - 4] ( Was 0x for r4 == 1, Was 0x20 for r4 == 0x2102044 )
- 022EE2F0 E3A07000 mov r7,0h //r7 = Cnt1 = 0
- 022EE2F4 EA0000A3 b 22EE588h ///022EE588 v
- while( Cnt1 < BMA_unk4 )
- {
- ///022EE588
- 022EE588 E5D34003 ldrb r4,[r3,3h] //r4 = BMA_unk4
- 022EE58C E1570004 cmp r7,r4
- //***LOOP CONDITION EVALUATED HERE***
- 022EE590 BAFFFF58 blt 22EE2F8h ///022EE2F8 LOOP_BEG_1
- ///022EE2F8 LOOP_BEG_1
- 022EE2F8 E3570000 cmp r7,0h
- 022EE2FC E3A06000 mov r6,0h //r6 = Cnt2 = 0
- if( Cnt1 != 0 )
- {
- 022EE300 1A000042 bne 22EE410h ///022EE410 v
- ///022EE410
- 022EE410 E24A9080 sub r9,r10,80h //r9 = r10 - 0x80
- 022EE414 EA000051 b 22EE560h ///022EE560 v
- while(r6 < BMA_unk3)
- {
- ///022EE560
- 022EE560 E5D34002 ldrb r4,[r3,2h] //r4 = BMA_unk3
- 022EE564 E1560004 cmp r6,r4
- //***LOOP CONDITION EVALUATED HERE***
- 022EE568 BAFFFFAA blt 22EE418h ///022EE418 LOOP_BEG_7 ^
- ///022EE418 LOOP_BEG_7
- 022EE418 E4D1B001 ldrb r11,[r1],1h //r11 = curbyte2 = [PtrReadBMADataPos], PtrReadBMADataPos += 1
- 022EE41C E35B00C0 cmp r11,0C0h
- if( curbyte2 < 0xC0 )
- {
- 022EE420 BA00001D blt 22EE49Ch ///022EE49C
- ///022EE49C
- 022EE49C E35B0080 cmp r11,80h
- if( curbyte2 < 0x80 )
- {
- 022EE4A0 BA00001F blt 22EE524h ///022EE524 v
- ///022EE524
- 022EE524 E3A04000 mov r4,0h //r4 = 0
- 022EE528 EA000008 b 22EE550h ///022EE550 v
- while(r4 <= r11)
- {
- ///022EE550
- 022EE550 E154000B cmp r4,r11
- 022EE554 DAFFFFF4 ble 22EE52Ch ///022EE52C ^
- ///022EE52C LOOP_BEG_8
- 022EE52C E1D9C0B0 ldrh r12,[r9] //r12 = [r9]
- 022EE530 E2898002 add r8,r9,2h //r8 = r9 + 2
- 022EE534 E2899004 add r9,r9,4h //r9 = r9 + 4
- 022EE538 E1CAC0B0 strh r12,[r10] //[r10] = r12
- 022EE53C E1D880B0 ldrh r8,[r8] //r8 = [r8]
- 022EE540 E28AC002 add r12,r10,2h //r12 = r10 + 2
- 022EE544 E28AA004 add r10,r10,4h //r10 = r10 + 4
- 022EE548 E1CC80B0 strh r8,[r12] //[r12] = r8
- 022EE54C E2844001 add r4,r4,1h //r4 = r4 + 1
- }
- 022EE558 E28B4001 add r4,r11,1h
- 022EE55C E0866084 add r6,r6,r4,lsl 1h
- //Continue Loop...
- }
- else
- {
- 022EE4A4 E5D14000 ldrb r4,[r1] //r4 = [PtrReadBMADataPos]
- 022EE4A8 E5D1E001 ldrb r14,[r1,1h] //r14 = [PtrReadBMADataPos + 1]
- 022EE4AC E5D18002 ldrb r8,[r1,2h] //r8 = [PtrReadBMADataPos + 2]
- 022EE4B0 E2811003 add r1,r1,3h //r1 = PtrReadBMADataPos + 3
- 022EE4B4 E184440E orr r4,r4,r14,lsl 8h //r4 = [PtrReadBMADataPos] | ([PtrReadBMADataPos + 1] << 8)
- 022EE4B8 E1844808 orr r4,r4,r8,lsl 10h //r4 = ([PtrReadBMADataPos] | ([PtrReadBMADataPos + 1] << 8)) | ([PtrReadBMADataPos + 2] << 16)
- 022EE4BC E59F811C ldr r8,=0FFFh //r8 = 0x0FFF
- 022EE4C0 E3A0C080 mov r12,80h //r12 = 0x80
- 022EE4C4 E0048008 and r8,r4,r8 //r8 = (([PtrReadBMADataPos] | ([PtrReadBMADataPos + 1] << 8)) | ([PtrReadBMADataPos + 2] << 16)) & 0x0FFF
- 022EE4C8 E58D8000 str r8,[r13] //[r13] = AssembledDWord = ((([PtrReadBMADataPos] | ([PtrReadBMADataPos + 1] << 8)) | ([PtrReadBMADataPos + 2] << 16)) & 0x0FFF)
- 022EE4CC E59F810C ldr r8,=0FFFh //r8 = 0x0FFF
- 022EE4D0 E0084644 and r4,r8,r4,asr 0Ch //r4 = 0x0FFF &(([PtrReadBMADataPos] | ([PtrReadBMADataPos + 1] << 8)) | ([PtrReadBMADataPos + 2] << 16)) >> 12) (SIGNED Shift Right)
- 022EE4D4 E58D4008 str r4,[r13,8h] //[r13,8h] = Assembled12BitsInt = (0x0FFF &(([PtrReadBMADataPos] | ([PtrReadBMADataPos + 1] << 8)) | ([PtrReadBMADataPos + 2] << 16)) >> 12) (SIGNED Shift Right))
- 022EE4D8 EA00000C b 22EE510h ///022EE510 v
- while(r12 <= r11)
- {
- ///022EE510
- 022EE510 E15C000B cmp r12,r11
- 022EE514 DAFFFFF0 ble 22EE4DCh ///022EE4DC ^
- ///022EE4DC
- 022EE4DC E1D980B0 ldrh r8,[r9] //r8 = [r9]
- 022EE4E0 E59D4000 ldr r4,[r13] //r4 = AssembledDWord
- 022EE4E4 E289E002 add r14,r9,2h //r14 = r9 + 2
- 022EE4E8 E0284004 eor r4,r8,r4 //r4 = r8 ^ AssembledDWord
- 022EE4EC E1CA40B0 strh r4,[r10] //[r10] = r4
- 022EE4F0 E1DEE0B0 ldrh r14,[r14] //r14 = [r14]
- 022EE4F4 E59D4008 ldr r4,[r13,8h] //r4 = Assembled12BitsInt
- 022EE4F8 E28A8002 add r8,r10,2h //r8 = r10 + 2
- 022EE4FC E02E4004 eor r4,r14,r4 //r4 = r14 ^ Assembled12BitsInt
- 022EE500 E2899004 add r9,r9,4h //r9 = r9 + 4
- 022EE504 E28AA004 add r10,r10,4h //r10 = r10 + 4
- 022EE508 E1C840B0 strh r4,[r8] //[r8] = r4
- 022EE50C E28CC001 add r12,r12,1h //r12 = r12 + 1
- }
- 022EE518 E24B407F sub r4,r11,7Fh //r4 = r11 - 0x7F
- 022EE51C E0866084 add r6,r6,r4,lsl 1h //r6 = r6 + (r4 * 2)
- 022EE520 EA00000E b 22EE560h ///022EE560 v
- //Continue Loop...
- }
- }
- else
- {
- 022EE424 E3A0C0C0 mov r12,0C0h //r12 = 0xC0
- 022EE428 EA000016 b 22EE488h ///022EE488 v
- while( r12 <= curbyte2 )
- {
- ///022EE488
- 022EE488 E15C000B cmp r12,r11
- 022EE48C DAFFFFE6 ble 22EE42Ch ///022EE42C
- ///022EE42C
- 022EE42C E5D18001 ldrb r8,[r1,1h] //r8 = [PtrReadBMADataPos + 1]
- 022EE430 E5D1E000 ldrb r14,[r1] //r14 = [PtrReadBMADataPos]
- 022EE434 E5D14002 ldrb r4,[r1,2h] //r4 = [PtrReadBMADataPos + 2]
- 022EE438 E58D800C str r8,[r13,0Ch] //[r13,0Ch] = r8
- 022EE43C E1D980B0 ldrh r8,[r9] //r8 = [r9]
- 022EE440 E2811003 add r1,r1,3h //r1 = r1 + 3
- 022EE444 E28CC001 add r12,r12,1h //r12 = r12 + 1
- 022EE448 E58D8004 str r8,[r13,4h] //[r13,4h] = r8
- 022EE44C E59D800C ldr r8,[r13,0Ch] //r8 = [r13 + 0xC]
- 022EE450 E18E8408 orr r8,r14,r8,lsl 8h //r8 = r14 | (r8 << 8)
- 022EE454 E188E804 orr r14,r8,r4,lsl 10h //r14 = r8 | (r4 << 16)
- 022EE458 E59F4180 ldr r4,=0FFFh //r4 = 0x0FFF
- 022EE45C E00E8004 and r8,r14,r4 //r8 = r14 & 0x0FFF
- 022EE460 E59D4004 ldr r4,[r13,4h] //[r13,4h] = r4
- 022EE464 E0244008 eor r4,r4,r8 //r4 = r4 ^ r8
- 022EE468 E1CA40B0 strh r4,[r10] //[r10] = r4
- 022EE46C E59F416C ldr r4,=0FFFh //r4 = 0x0FFF
- 022EE470 E004E64E and r14,r4,r14,asr 0Ch //r14 = r4 & (r14 >> 12) (SIGNED Shift Right)
- 022EE474 E1D940B2 ldrh r4,[r9,2h] //r4 = [r9 + 2]
- 022EE478 E2899004 add r9,r9,4h //r9 = r9 + 4
- 022EE47C E024400E eor r4,r4,r14 //r4 = r4 ^ r14
- 022EE480 E1CA40B2 strh r4,[r10,2h] //[r10,2h] = r4
- 022EE484 E28AA004 add r10,r10,4h //r10 = r10 + 4
- }
- 022EE490 E24B40BF sub r4,r11,0BFh //r4 = curbyte2 - 0xBF
- 022EE494 E0866084 add r6,r6,r4,lsl 1h //r6 = r6 + (r4 * 2)
- 022EE498 EA000030 b 22EE560h ///022EE560 v
- //Continue Loop...
- }
- }// while(r6 < BMA_unk3) END
- 022EE56C EA000002 b 22EE57Ch ///022EE57C v
- }
- else
- {
- 022EE304 EA00003D b 22EE400h ///022EE400 v
- while(r6 < BMA_unk3)
- {
- ///022EE400
- 022EE400 E5D34002 ldrb r4,[r3,2h] //r4 = BMA_unk3 (was 0xF)
- 022EE404 E1560004 cmp r6,r4
- //***LOOP CONDITION EVALUATED HERE***
- 022EE408 BAFFFFBE blt 22EE308h ///022EE308 LOOP_BEG_2
- ///022EE308 LOOP_BEG_2
- 022EE308 E4D19001 ldrb r9,[r1],1h //r9 = curbyte = [PtrReadBMADataPos], PtrReadBMADataPos += 1
- 022EE30C E35900C0 cmp r9,0C0h
- if( curbyte < 0xC0 )
- {
- 022EE310 BA000014 blt 22EE368h ///022EE368 v
- ///022EE368 curbyte < 0xC0
- 022EE368 E3590080 cmp r9,80h
- if( curbyte < 0x80 )
- {
- 022EE36C BA000018 blt 22EE3D4h //022EE3D4 curbyte < 0x80 v
- ///022EE3D4 curbyte < 0x80
- 022EE3D4 E3A0B000 mov r11,0h //r11 = CntWords = 0
- 022EE3D8 EA000004 b 22EE3F0h ///022EE3F0 v
- ///022EE3F0
- 022EE3F0 E15B0009 cmp r11,r9
- while( CntWords <= curbyte )
- {
- 022EE3F4 DAFFFFF8 ble 22EE3DCh ///022EE3DC ^
- ///022EE3DC
- 022EE3DC E3A04000 mov r4,0h //r4 = 0
- 022EE3E0 E1CA40B0 strh r4,[r10] //[r10] = 0
- 022EE3E4 E1CA40B2 strh r4,[r10,2h] //[r10,2h] = 0
- 022EE3E8 E28AA004 add r10,r10,4h //r10 = r10 + 4
- 022EE3EC E28BB001 add r11,r11,1h //r11 = CntWords + 1
- }
- 022EE3F8 E2894001 add r4,r9,1h //r4 = curbyte + 1
- 022EE3FC E0866084 add r6,r6,r4,lsl 1h //r6 = r6 + (curbyte * 2)
- //ContinueLoop
- }
- else
- {
- 022EE370 E5D1C000 ldrb r12,[r1] //r12 = [PtrReadBMADataPos]
- 022EE374 E5D1B001 ldrb r11,[r1,1h] //r11 = [PtrReadBMADataPos + 1]
- 022EE378 E5D18002 ldrb r8,[r1,2h] //r8 = [PtrReadBMADataPos + 2]
- 022EE37C E2811003 add r1,r1,3h //r1 = PtrReadBMADataPos + 3
- 022EE380 E18CB40B orr r11,r12,r11,lsl 8h //r11 = r12 | (r11 << 8)
- 022EE384 E18BB808 orr r11,r11,r8,lsl 10h //r11 = r11 | (r8 << 16)
- 022EE388 E59F8250 ldr r8,=0FFFh //r8 = 0x0FFF
- 022EE38C E59FC24C ldr r12,=0FFFh //r12 = 0x0FFF
- 022EE390 E00B8008 and r8,r11,r8 //r8 = r11 & r8
- 022EE394 E00CB64B and r11,r12,r11,asr 0Ch //r11 = r12 & (r11 >> 12) (SIGNED Shift Right)
- 022EE398 E1A08808 mov r8,r8,lsl 10h //r8 = r8 << 16
- 022EE39C E1A0B80B mov r11,r11,lsl 10h //r11 = r11 << 16
- 022EE3A0 E3A04080 mov r4,80h //r4 = 0x80
- 022EE3A4 E1A08828 mov r8,r8,lsr 10h //r8 = r8 >> 16
- 022EE3A8 E1A0B82B mov r11,r11,lsr 10h //r11 = r11 >> 16
- 022EE3AC EA000003 b 22EE3C0h ///022EE3C0 v
- while(r4 < curbyte)
- {
- ///022EE3C0
- 022EE3C0 E1540009 cmp r4,r9
- 022EE3C4 DAFFFFF9 ble 22EE3B0h ///022EE3B0 LOOP_BEG_6 ^
- ///022EE3B0 LOOP_BEG_6
- 022EE3B0 E1CA80B0 strh r8,[r10] //[r10] = r8
- 022EE3B4 E1CAB0B2 strh r11,[r10,2h] //[r10 + 2] = r11
- 022EE3B8 E28AA004 add r10,r10,4h //r10 = r10 + 4
- 022EE3BC E2844001 add r4,r4,1h //r4 = r4 + 1
- }
- 022EE3C8 E249407F sub r4,r9,7Fh //r4 = curbyte - 0x7F
- 022EE3CC E0866084 add r6,r6,r4,lsl 1h //r6 = r6 + (r4 * 2)
- 022EE3D0 EA00000A b 22EE400h ///022EE400 ContinueLoop v
- }
- }
- else
- {
- 022EE314 E3A080C0 mov r8,0C0h //r8 = 0xC0
- 022EE318 EA00000D b 22EE354h ///022EE354 v
- while(r8 <= curbyte)
- {
- ///022EE354
- 022EE354 E1580009 cmp r8,r9
- 022EE358 DAFFFFEF ble 22EE31Ch ///022EE31C ^
- ///022EE31C
- 022EE31C E5D1E000 ldrb r14,[r1] //r14 = [PtrReadBMADataPos]
- 022EE320 E5D1C001 ldrb r12,[r1,1h] //r12 = [PtrReadBMADataPos + 1]
- 022EE324 E5D14002 ldrb r4,[r1,2h] //r4 = [PtrReadBMADataPos + 2]
- 022EE328 E2811003 add r1,r1,3h //r1 = PtrReadBMADataPos + 3
- 022EE32C E18EC40C orr r12,r14,r12,lsl 8h //r12 = r14 | (r12 << 8)
- 022EE330 E18C4804 orr r4,r12,r4,lsl 10h //r4 = r12 | (r4 << 16)
- 022EE334 E59FC2A4 ldr r12,=0FFFh //r12 = 0x0FFF
- 022EE338 E2888001 add r8,r8,1h //r8 = r8 + 1
- 022EE33C E004C00C and r12,r4,r12 //r12 = r4 & r12
- 022EE340 E1CAC0B0 strh r12,[r10] //[r10] = r12
- 022EE344 E59FC294 ldr r12,=0FFFh //r12 = 0x0FFF
- 022EE348 E00C4644 and r4,r12,r4,asr 0Ch //r4 = 0x0FFF & (r4 >> 12) (SIGNED Shift Right)
- 022EE34C E1CA40B2 strh r4,[r10,2h] //[r10 + 2] = r4
- 022EE350 E28AA004 add r10,r10,4h //r10 = r10 + 4
- }
- 022EE35C E24940BF sub r4,r9,0BFh //r4 = curbyte - 0xBF
- 022EE360 E0866084 add r6,r6,r4,lsl 1h //r6 = Cnt2 + (r4 * 2)
- 022EE364 EA000025 b 22EE400h ///022EE400 ContinueLoop v
- }
- } // while(r6 < BMA_unk3) END //022EE404
- 022EE40C EA00005A b 22EE57Ch ///022EE57C v
- }
- while( r6 < 64 )
- {
- ///022EE57C
- 022EE57C E3560040 cmp r6,40h
- 022EE580 BAFFFFFA blt 22EE570h ///022EE570 LOOP_BEG_3
- ///022EE570 LOOP_BEG_3
- 022EE570 E3A04000 mov r4,0h //r4 = 0
- 022EE574 E0CA40B2 strh r4,[r10],2h //[r10] = 0, r10 += 2
- 022EE578 E2866001 add r6,r6,1h //r6 = r6 + 1
- }
- 022EE584 E2877001 add r7,r7,1h //r7 = Cnt1 + 1
- } //while( r7 < BMA_unk4 ) END ///022EE590
- 022EE594 E3A06000 mov r6,0h //r6 = 0
- 022EE598 E1A08006 mov r8,r6 //r8 = 0
- 022EE59C EA000005 b 22EE5B8h ///022EE5B8 v
- while(Cnt1 < r4)
- {
- ///022EE5B8
- 022EE5B8 E1D241F4 ldrsh r4,[r2,14h] //r4 = [r2,14h](was 0x3E)
- 022EE5BC E1570004 cmp r7,r4
- 022EE5C0 BAFFFFF6 blt 22EE5A0h ///022EE5A0 LOOP_BEG_4 ^
- ///022EE5A0 LOOP_BEG_4
- 022EE5A0 E1A04008 mov r4,r8 //r4 = Cnt4 = 0
- while(r4 < 64)
- {
- ///022EE5A4 LOOP_BEG_5
- 022EE5A4 E2844001 add r4,r4,1h //r4 = r4 + 1
- 022EE5A8 E3540040 cmp r4,40h
- 022EE5AC E0CA60B2 strh r6,[r10],2h //[r10] = 0, r10 += 2
- 022EE5B0 BAFFFFFB blt 22EE5A4h ///022EE5A4 LOOP_BEG_5
- }
- 022EE5B4 E2877001 add r7,r7,1h //r7 = Cnt1 + 1
- }
- 022EE5C4 E2855001 add r5,r5,1h //r5 = r5 + 1
- }
- 022EE5D4 E1A00001 mov r0,r1 //r0 = PtrReadBMADataPos
- 022EE5D8 E28DD010 add r13,r13,10h
- 022EE5DC E8BD8FF8 pop r3-r11,r15
- 022EE5E0 00000FFF
- ///FUNCTION ENDS
- ///022EC9C4
- 022EC9C4 E1A01000 mov r1,r0 //r1 = PtrReadBMADataPos
- 022EC9C8 E58A11F0 str r1,[r10,1F0h] //[r10,1F0h] = PtrReadBMADataPos
- 022EC9CC E59A02D8 ldr r0,[r10,2D8h] //r0 = [r10,2D8h] (was 0x20F6644)
- 022EC9D0 E3500000 cmp r0,0h
- if( r0 == 0 )
- {
- 022EC9D4 0A000004 beq 22EC9ECh ///022EC9EC v
- }
- else
- {
- 022EC9D8 E28A2C02 add r2,r10,200h //r2 = r10 + 0x200
- 022EC9DC E1D23CFE ldrsh r3,[r2,0CEh] //r3 = [r2 + 0xCE] (was 0xBA)
- 022EC9E0 E59A52D4 ldr r5,[r10,2D4h] //r5 = [r10 + 0x2D4] (was 0x22F1800)
- 022EC9E4 E1A02004 mov r2,r4 //r2 = r4 (PtrBMABuff)
- 022EC9E8 E12FFF35 blx r5 ///Run r5 (Was 022F1800)
- }
- ///...
- //
- // 022F1800 22F1800h (Called from line 022EC9E8)
- // r0 = PtrTargetBuffer? [r10,2D8h]
- // r1 = PtrReadBMADataPos
- // r2 = PtrBMAHeaderCopyBeg
- // r3 = Was 0xBA //[r10,0x2CE] (PtrLevelStructBeg)
- //
- 022F1800 E92D4FF8 push r3-r11,r14
- 022F1804 E1D240F6 ldrsh r4,[r2,6h] //r4 = BMA_unk6 (was 0)
- 022F1808 E3A05000 mov r5,0h //r5 = 0 //Cnt1
- 022F180C E3540000 cmp r4,0h
- 022F1810 E3A040FF mov r4,0FFh //r4 = 0xFF
- if( BMA_unk6 <= 0 )
- {
- 022F1814 DA000088 ble 22F1A3Ch ///022F1A3C BMA_unk6 <= 0 v
- ///022F1A3C BMA_unk6 <= 0
- 022F1A3C E1A06000 mov r6,r0 //r6 = PtrTargetBuffer?
- 022F1A40 E1A07005 mov r7,r5 //r7 = Cnt1
- while(Cnt1 < 4)
- {
- ///022F1A44
- 022F1A44 E1A08007 mov r8,r7 //r8 = 0 //Cnt
- while(Cnt < 256)
- {
- ///022F1A48
- 022F1A48 E2888001 add r8,r8,1h //r8 = Cnt + 1
- 022F1A4C E3580C01 cmp r8,100h
- 022F1A50 E4C64001 strb r4,[r6],1h //[r6] = r4, r6 += 1
- 022F1A54 BAFFFFFB blt 22F1A48h ///022F1A48 ^
- }
- 022F1A58 E2855001 add r5,r5,1h //r5 = r5 + 1
- 022F1A5C E3550004 cmp r5,4h
- 022F1A60 BAFFFFF7 blt 22F1A44h ///022F1A44 ^
- }
- 022F1A64 E5D27001 ldrb r7,[r2,1h] //r7 = BMA_MapHeight (was 0x48)
- 022F1A68 E3A04000 mov r4,0h //r4 = 0 //Cnt6
- 022F1A6C E3570000 cmp r7,0h
- if( BMA_MapHeight <= 0 )
- {
- 022F1A70 DA00001B ble 22F1AE4h ///022F1AE4 v
- ///Continue to 022F1AE4...
- }
- else
- {
- 022F1A74 E3A080FF mov r8,0FFh //r8 = 0xFF
- 022F1A78 E1A09004 mov r9,r4 //r9 = 0
- 022F1A7C E1A0A008 mov r10,r8 //r10 = 0xFF
- 022F1A80 E1A0C004 mov r12,r4 //r12 = 0
- 022F1A84 EA000013 b 22F1AD8h ///022F1AD8 v
- while(Cnt6 < BMA_MapHeight)
- {
- ///022F1AD8
- 022F1AD8 E5D27001 ldrb r7,[r2,1h] ///r7 = BMA_MapHeight //(was 0x48)
- 022F1ADC E1540007 cmp r4,r7
- //**** LOOP CONDITION EVALUATED HERE! ****
- 022F1AE0 BAFFFFE8 blt 22F1A88h ///022F1A88
- ///022F1A88
- 022F1A88 E1A0E00C mov r14,r12 //r14 = 0 //Cnt7
- while( Cnt7 < 5 )
- {
- ///022F1A8C
- 022F1A8C E28EE001 add r14,r14,1h //r14 = Cnt7 + 1
- 022F1A90 E4C6A001 strb r10,[r6],1h //[r6] = 0xFF, r6 += 1
- 022F1A94 E35E0005 cmp r14,5h
- 022F1A98 BAFFFFFB blt 22F1A8Ch ///022F1A8C ^
- }
- 022F1A9C E3A0B000 mov r11,0h //r11 = 0
- 022F1AA0 EA000001 b 22F1AACh ///022F1AAC v
- while(r11 < BMA_MapWidth)
- {
- ///022F1AAC
- 022F1AAC E5D27000 ldrb r7,[r2] //r7 = BMA_MapWidth (was 0x2D)
- 022F1AB0 E15B0007 cmp r11,r7
- 022F1AB4 BAFFFFFA blt 22F1AA4h ///022F1AA4 ^
- ///022F1AA4
- 022F1AA4 E4C69001 strb r9,[r6],1h //[r6] = 0, r6 += 1
- 022F1AA8 E28BB001 add r11,r11,1h //r11 = r11 + 1
- }
- 022F1AB8 E08EE007 add r14,r14,r7 //r14 = Cnt7 + r7
- 022F1ABC EA000001 b 22F1AC8h ///022F1AC8 v
- while(Cnt7 < 256)
- {
- ///022F1AC8
- 022F1AC8 E35E0C01 cmp r14,100h
- 022F1ACC BAFFFFFB blt 22F1AC0h ///022F1AC0 ^
- ///022F1AC0
- 022F1AC0 E4C68001 strb r8,[r6],1h //[r6] = 0xFF, r6 += 1
- 022F1AC4 E28EE001 add r14,r14,1h //r14 = Cnt7 + 1
- }
- 022F1AD0 E2844001 add r4,r4,1h //r4 = Cnt6 + 1
- 022F1AD4 E2855001 add r5,r5,1h //r5 = Cnt1 + 1
- }
- ///Continue to 022F1AE4...
- }
- ///022F1AE4
- 022F1AE4 E3A040FF mov r4,0FFh //r4 = 0xFF
- 022F1AE8 E3A07000 mov r7,0h //r7 = 0
- 022F1AEC EA000005 b 22F1B08h ///022F1B08
- while( Cnt1 < r3 ) //r3 was 0xBA
- {
- ///022F1B08
- 022F1B08 E1550003 cmp r5,r3
- 022F1B0C BAFFFFF7 blt 22F1AF0h ///022F1AF0
- ///022F1AF0
- 022F1AF0 E1A08007 mov r8,r7 //r8 = r7
- while( r8 < 256 )
- {
- ///022F1AF4
- 022F1AF4 E2888001 add r8,r8,1h //r8 = r8 + 1
- 022F1AF8 E3580C01 cmp r8,100h
- 022F1AFC E4C64001 strb r4,[r6],1h //[r6] = r4, r6 += 1
- 022F1B00 BAFFFFFB blt 22F1AF4h ///022F1AF4 ^
- }
- 022F1B04 E2855001 add r5,r5,1h //r5 = Cnt1 + 1
- }
- //Continue to 022F1B10...
- }
- else //BMA_unk6 > 0
- {
- 022F1818 E1A07000 mov r7,r0 //r7 = r0
- 022F181C E1A06005 mov r6,r5 //r6 = 0
- while( Cnt1 < 4 )
- {
- ///022F1820
- 022F1820 E1A08006 mov r8,r6 //r8 = 0 //Cnt2
- while( Cnt < 256 )
- {
- ///022F1824
- 022F1824 E2888001 add r8,r8,1h //r8 = Cnt2 + 1
- 022F1828 E3580C01 cmp r8,100h
- 022F182C E4C74001 strb r4,[r7],1h //[r7] = BMA_unk6, r7 += 1
- 022F1830 BAFFFFFB blt 22F1824h ///022F1824 ^
- }
- 022F1834 E2855001 add r5,r5,1h //r5 = Cnt1 + 1
- 022F1838 E3550004 cmp r5,4h
- 022F183C BAFFFFF7 blt 22F1820h ///022F1820
- }
- 022F1840 E5D26001 ldrb r6,[r2,1h] //r6 = BMA_MapHeight
- 022F1844 E3A04000 mov r4,0h //r4 = 0 //Cnt3
- 022F1848 E3560000 cmp r6,0h
- if( BMA_MapHeight <= 0 )
- {
- 022F184C DA00006E ble 22F1A0Ch ///022F1A0C v
- ///022F1A0C
- 022F1A0C E3A040FF mov r4,0FFh //r4 = 0xFF
- 022F1A10 E3A06000 mov r6,0h //r6 = 0
- 022F1A14 EA000005 b 22F1A30h ///022F1A30 v
- while(Cnt1 < r3)
- {
- ///022F1A30
- 022F1A30 E1550003 cmp r5,r3
- 022F1A34 BAFFFFF7 blt 22F1A18h ///022F1A18 ^
- ///022F1A18
- 022F1A18 E1A08006 mov r8,r6 //r8 = 0
- while(r8 < 256)
- {
- ///022F1A1C
- 022F1A1C E2888001 add r8,r8,1h //r8 = r8 + 1
- 022F1A20 E3580C01 cmp r8,100h
- 022F1A24 E4C74001 strb r4,[r7],1h //[r7] = 0xFF, r7 += 1
- 022F1A28 BAFFFFFB blt 22F1A1Ch ///022F1A1C
- }
- 022F1A2C E2855001 add r5,r5,1h //r5 = Cnt1 + 1
- }
- }
- else //BMA_MapHeight == 0
- {
- 022F1850 EA00006A b 22F1A00h ///022F1A00 v
- while(Cnt3 < BMA_MapHeight)
- {
- ///022F1A00
- 022F1A00 E5D26001 ldrb r6,[r2,1h] //r6 = BMA_MapHeight
- 022F1A04 E1540006 cmp r4,r6
- 022F1A08 BAFFFF91 blt 22F1854h ///022F1854 ^
- ///022F1854
- 022F1854 E3A09000 mov r9,0h //r9 = 0 //Cnt5
- 022F1858 E3A060FF mov r6,0FFh //r6 = 0xFF
- while(Cnt5 < 5)
- {
- ///022F185C
- 022F185C E2899001 add r9,r9,1h //r9 = Cnt5 + 1
- 022F1860 E3590005 cmp r9,5h
- 022F1864 E4C76001 strb r6,[r7],1h //[r7] = 0xFF, r7 += 1
- 022F1868 BAFFFFFB blt 22F185Ch ///022F185C ^
- }
- 022F186C E3540000 cmp r4,0h
- 022F1870 E3A0E000 mov r14,0h //r14 = 0
- if( Cnt3 != 0 )
- {
- 022F1874 1A00002A bne 22F1924h ///022F1924 v
- ///022F1924
- 022F1924 E247CC01 sub r12,r7,100h //r12 = r7 - 256
- 022F1928 EA000028 b 22F19D0h ///022F19D0 v
- while( r14 < r6 )
- {
- ///022F19D0
- 022F19D0 E5D26000 ldrb r6,[r2] //r6 = BMA_MapWidth
- 022F19D4 E15E0006 cmp r14,r6
- 022F19D8 BAFFFFD3 blt 22F192Ch ///022F192C ^
- ///022F192C
- 022F192C E5D16000 ldrb r6,[r1] //r6 =
- 022F1930 E2818001 add r8,r1,1h //r8 = r1 + 1
- 022F1934 E1A01008 mov r1,r8 //r1 = r8
- 022F1938 E35600C0 cmp r6,0C0h
- if( r6 < 0xC0 )
- {
- 022F193C BA00000B blt 22F1970h ///022F1970 v
- ///022F1970
- 022F1970 E3560080 cmp r6,80h
- if( r6 < 0x80 )
- {
- 022F1974 BA00000C blt 22F19ACh ///022F19AC v
- ///022F19AC
- 022F19AC E3A0A000 mov r10,0h //r10 = 0
- 022F19B0 EA000002 b 22F19C0h ///022F19C0 v
- while(r10 <= r6)
- {
- ///022F19C0
- 022F19C0 E15A0006 cmp r10,r6
- 022F19C4 DAFFFFFA ble 22F19B4h ///022F19B4 ^
- ///022F19B4
- 022F19B4 E4DC8001 ldrb r8,[r12],1h //r8 = [r12], r12 += 1
- 022F19B8 E28AA001 add r10,r10,1h //r10 = r10 + 1
- 022F19BC E4C78001 strb r8,[r7],1h //[r7] = r8, r7 += 1
- }
- 022F19C8 E2866001 add r6,r6,1h //r6 = r6 + 1
- 022F19CC E08EE006 add r14,r14,r6 //r14 = r14 + r6
- ///Continue loop at 022F19D0..
- }
- else //r6 >= 0x80
- {
- 022F1978 E2881001 add r1,r8,1h //r1 = r8 + 1
- 022F197C E5D88000 ldrb r8,[r8] //r8 = [r8]
- 022F1980 E3A0A080 mov r10,80h //r10 = 0x80
- 022F1984 EA000003 b 22F1998h ///022F1998 v
- while(r10 <= r6)
- {
- ///022F1998
- 022F1998 E15A0006 cmp r10,r6
- 022F199C DAFFFFF9 ble 22F1988h ///022F1988
- ///022F1988
- 022F1988 E4DCB001 ldrb r11,[r12],1h //r11 = [r12], r12 += 1
- 022F198C E28AA001 add r10,r10,1h //r10 = r10 + 1
- 022F1990 E028B00B eor r11,r8,r11 //r11 = r8 | r11
- 022F1994 E4C7B001 strb r11,[r7],1h //[r7] = r11, r7 += 1
- }
- 022F19A0 E246607F sub r6,r6,7Fh //r6 = r6 - 0x7F
- 022F19A4 E08EE006 add r14,r14,r6 //r14 = r14 + r6
- 022F19A8 EA000008 b 22F19D0h ///022F19D0 v
- ///Continue loop at 022F19D0..
- }
- }
- else //r6 >= 0xC0
- {
- 022F1940 E3A080C0 mov r8,0C0h //r8 = 0xC0
- 022F1944 EA000004 b 22F195Ch ///022F195C v
- ///022F195C
- 022F195C E1580006 cmp r8,r6
- if( r8 <= r6 )
- {
- 022F1960 DAFFFFF8 ble 22F1948h ///022F1948 ^
- ///022F1948
- 022F1948 E4D1B001 ldrb r11,[r1],1h //r11 = [r1], r1 += 1
- 022F194C E4DCA001 ldrb r10,[r12],1h //r10 = [r12], r12 += 1
- 022F1950 E2888001 add r8,r8,1h //r8 = r8 + 1
- 022F1954 E02BA00A eor r10,r11,r10 //r10 = r11 ^ r10
- 022F1958 E4C7A001 strb r10,[r7],1h //[r7] = r10, r7 += 1
- }
- 022F1964 E24660BF sub r6,r6,0BFh //r6 = r6 - 0xBF
- 022F1968 E08EE006 add r14,r14,r6 //r14 = r14 + r6
- 022F196C EA000017 b 22F19D0h ///022F19D0 v
- ///Continue loop at 022F19D0..
- }
- }
- //Exit loop to 022F19DC...
- }
- else //Cnt3 == 0
- {
- 022F1878 E1A0800E mov r8,r14 //r8 = 0
- 022F187C E3A0C0C0 mov r12,0C0h //r12 = 0xC0
- 022F1880 EA000023 b 22F1914h ///022F1914 v
- while(r14 < BMA_MapWidth)
- {
- ///022F1914
- 022F1914 E5D26000 ldrb r6,[r2] //r6 = BMA_MapWidth
- 022F1918 E15E0006 cmp r14,r6
- 022F191C BAFFFFD8 blt 22F1884h ///022F1884 ^
- ///022F1884
- 022F1884 E5D16000 ldrb r6,[r1] //r6 =
- 022F1888 E281A001 add r10,r1,1h //r10 = r1 + 1
- 022F188C E1A0100A mov r1,r10 //r1 = r1 + 1
- 022F1890 E35600C0 cmp r6,0C0h
- if( r6 < 0xC0 )
- {
- 022F1894 BA000009 blt 22F18C0h ///022F18C0 v
- ///022F18C0
- 022F18C0 E3560080 cmp r6,80h
- if( r6 < 0x80 )
- {
- 022F18C4 BA00000A blt 22F18F4h ///022F18F4 v
- ///022F18F4
- 022F18F4 E3A0A000 mov r10,0h //r10 = 0
- 022F18F8 EA000001 b 22F1904h ///022F1904 v
- while( r10 <= r6 )
- {
- ///022F1904
- 022F1904 E15A0006 cmp r10,r6
- 022F1908 DAFFFFFB ble 22F18FCh ///022F18FC
- ///022F18FC
- 022F18FC E4C78001 strb r8,[r7],1h //[r7] = r8, r7 += 1
- 022F1900 E28AA001 add r10,r10,1h //r10 = r10 + 1
- }
- 022F190C E2866001 add r6,r6,1h //r6 = r6 + 1
- 022F1910 E08EE006 add r14,r14,r6 //r14 = r14 + r6
- ///Continue loop at 022F1914..
- }
- else //r6 >= 0x80
- {
- 022F18C8 E28A1001 add r1,r10,1h //r1 = r10 + 1
- 022F18CC E5DAA000 ldrb r10,[r10] //r10 = [r10]
- 022F18D0 E3A0B080 mov r11,80h //r11 = 0x80
- 022F18D4 EA000001 b 22F18E0h ///022F18E0 v
- while( r11 <= r6 )
- {
- ///022F18E0
- 022F18E0 E15B0006 cmp r11,r6
- 022F18E4 DAFFFFFB ble 22F18D8h ///022F18D8 ^
- ///022F18D8
- 022F18D8 E4C7A001 strb r10,[r7],1h //[r7] = r10, r7 += 1
- 022F18DC E28BB001 add r11,r11,1h //r11 = r11 + 1
- }
- 022F18E8 E246607F sub r6,r6,7Fh //r6 = r6 - 0x7F
- 022F18EC E08EE006 add r14,r14,r6 //r14 = r14 + r6
- 022F18F0 EA000007 b 22F1914h ///022F1914 v
- ///Continue loop at 022F1914..
- }
- }
- else //r6 >= 0xC0
- {
- 022F1898 E1A0B00C mov r11,r12 //r11 = r12
- 022F189C EA000002 b 22F18ACh ///022F18AC v
- while(r11 <= r6)
- {
- ///022F18AC
- 022F18AC E15B0006 cmp r11,r6
- 022F18B0 DAFFFFFA ble 22F18A0h ///022F18A0 ^
- ///022F18A0
- 022F18A0 E4D1A001 ldrb r10,[r1],1h //r10 = [r1], r1 += 1
- 022F18A4 E28BB001 add r11,r11,1h //r11 = r11 + 1
- 022F18A8 E4C7A001 strb r10,[r7],1h //[r7] = r10, r7 += 1
- }
- 022F18B4 E24660BF sub r6,r6,0BFh //r6 = r6 - 0xBF
- 022F18B8 E08EE006 add r14,r14,r6 //r14 = r14 + r6
- 022F18BC EA000014 b 22F1914h ///022F1914 v
- ///Continue loop at 022F1914..
- }
- }
- 022F1920 EA00002D b 22F19DCh ///022F19DC v
- //Exit else to 022F19DC...
- }
- ///022F19DC
- 022F19DC E0899006 add r9,r9,r6 //r9 = r9 + BMA_MapWidth
- 022F19E0 E3A060FF mov r6,0FFh //r6 = 0xFF
- 022F19E4 EA000001 b 22F19F0h ///022F19F0 v
- while(r9 < 256)
- {
- ///022F19F0
- 022F19F0 E3590C01 cmp r9,100h
- 022F19F4 BAFFFFFB blt 22F19E8h ///022F19E8 ^
- ///022F19E8
- 022F19E8 E4C76001 strb r6,[r7],1h //[r7] = 0xFF
- 022F19EC E2899001 add r9,r9,1h //r9 = r9 + 1
- }
- 022F19F8 E2844001 add r4,r4,1h //r4 = Cnt3 + 1
- 022F19FC E2855001 add r5,r5,1h //r5 = Cnt1 + 1
- ///Continue loop to 022F1A00...
- }
- //Exit else to 022F1A38
- }
- 022F1A38 EA000034 b 22F1B10h ///022F1B10 v
- //Continue to 022F1B10...
- }
- ///022F1B10
- 022F1B10 E1D230F8 ldrsh r3,[r2,8h] //r3 = BMA_unk7
- 022F1B14 E3530000 cmp r3,0h
- if( BMA_unk7 > 0 )
- {
- 022F1B18 C5D23001 ldrgtb r3,[r2,1h] //r3 = BMA_MapHeight
- 022F1B1C C2804B01 addgt r4,r0,400h //r4 = PtrTargetBuffer + 1024
- 022F1B20 C3A06000 movgt r6,0h //r6 = 0
- 022F1B24 C3530000 cmpgt r3,0h
- }
- if((BMA_unk7 <= 0) || ((BMA_unk7 > 0) && (BMA_MapHeight <= 0)) ) //This condition can be triggered either by (BMA_unk7 <= 0) or (BMA_MapHeight <= 0)
- {
- 022F1B28 DA00004A ble 22F1C58h ///022F1C58 v
- ///022F1C58
- 022F1C58 E1D230F8 ldrsh r3,[r2,8h] //r3 = BMA_unk7
- 022F1C5C E3530001 cmp r3,1h
- if( BMA_unk7 > 1 )
- {
- 022F1C60 C5D24001 ldrgtb r4,[r2,1h] //r4 = BMA_MapHeight
- 022F1C64 C2803B01 addgt r3,r0,400h //r3 = r0 + 1024
- 022F1C68 C3A05000 movgt r5,0h //r5 = 0
- 022F1C6C C3540000 cmpgt r4,0h
- }
- if( BMA_unk7 <= 1 || ((BMA_unk7 > 1) && r(4 > BMA_MapHeight)) )
- {
- 022F1C70 DA00004A ble 22F1DA0h ///022F1DA0 (Return) v
- }
- else
- {
- 022F1C74 EA000046 b 22F1D94h ///022F1D94 v
- while(r5 < BMA_MapHeight)
- {
- ///022F1D94
- 022F1D94 E5D20001 ldrb r0,[r2,1h] //r0 = BMA_MapHeight
- 022F1D98 E1550000 cmp r5,r0
- 022F1D9C BAFFFFB5 blt 22F1C78h ///022F1C78 ^
- ///022F1C78
- 022F1C78 E3550000 cmp r5,0h
- 022F1C7C E2833005 add r3,r3,5h //r3 = r3 + 5
- 022F1C80 E3A04000 mov r4,0h //r4 = 0
- if( r5 != 0 )
- {
- 022F1C84 1A000017 bne 22F1CE8h ///022F1CE8 v
- ///022F1CE8
- 022F1CE8 E2437C01 sub r7,r3,100h //r7 = r3 + 256
- 022F1CEC E3A00080 mov r0,80h //r0 = 0x80
- 022F1CF0 E1A09004 mov r9,r4 //r9 = r4
- 022F1CF4 EA00001F b 22F1D78h ///022F1D78
- while(r4 < BMA_MapWidth)
- {
- ///022F1D78
- 022F1D78 E5D28000 ldrb r8,[r2] //r8 = BMA_MapWidth
- 022F1D7C E1540008 cmp r4,r8
- 022F1D80 BAFFFFDC blt 22F1CF8h ///022F1CF8 ^
- ///022F1CF8
- 022F1CF8 E4D16001 ldrb r6,[r1],1h //r6 = [r1], r1 += 1
- 022F1CFC E3560080 cmp r6,80h
- if( r6 < 0x80 )
- {
- 022F1D00 BA00000E blt 22F1D40h ///022F1D40 v
- ///022F1D40
- 022F1D40 E1A0B009 mov r11,r9 //r11 = r9
- 022F1D44 EA000007 b 22F1D68h ///022F1D68 v
- while( r11 <= r6 )
- {
- ///022F1D68
- 022F1D68 E15B0006 cmp r11,r6
- 022F1D6C DAFFFFF5 ble 22F1D48h ///022F1D48 ^
- ///022F1D48
- 022F1D48 E4D78001 ldrb r8,[r7],1h //r8 = [r7], r7 += 1
- 022F1D4C E28BB001 add r11,r11,1h //r11 = r11 + 1
- 022F1D50 E3180040 tst r8,40h
- if( r8 & 0x40 != 0 )
- {
- 022F1D54 11A0A003 movne r10,r3 //r10 = r3
- 022F1D58 14D38001 ldrneb r8,[r3],1h //r8 = [r3], r3 += 1
- 022F1D60 13888040 orrne r8,r8,40h //r8 = r8 + 0x40
- 022F1D64 15CA8000 strneb r8,[r10] //[r10] = r8
- }
- else
- {
- 022F1D5C 02833001 addeq r3,r3,1h //r3 = r3 + 1
- }
- //022F1D60 and 022F1D64 would be here, but it would take up extra space
- }
- 022F1D70 E2866001 add r6,r6,1h //r6 = r6 + 1
- 022F1D74 E0844006 add r4,r4,r6 //r4 = r4 + r6
- //Continue loop at 022F1D78...
- }
- else
- {
- 022F1D04 E1A0B000 mov r11,r0 //r11 = r0
- 022F1D08 EA000007 b 22F1D2Ch ///022F1D2C v
- while(r11 <= r6)
- {
- ///022F1D2C
- 022F1D2C E15B0006 cmp r11,r6
- 022F1D30 DAFFFFF5 ble 22F1D0Ch ///022F1D0C ^
- ///022F1D0C
- 022F1D0C E4D78001 ldrb r8,[r7],1h //r8 = [r7], r7 += 1
- 022F1D10 E28BB001 add r11,r11,1h //r11 = r11 + 1
- 022F1D14 E3180040 tst r8,40h
- if( r8 & 0x40 == 0 )
- {
- 022F1D18 01A0A003 moveq r10,r3 //r10 = r3
- 022F1D1C 04D38001 ldreqb r8,[r3],1h //r8 = [r3], r3 += 1
- 022F1D24 03888040 orreq r8,r8,40h //r8 = r8 | 0x40
- 022F1D28 05CA8000 streqb r8,[r10] //[r10] = r8
- }
- else
- {
- 022F1D20 12833001 addne r3,r3,1h //r3 = r3 + 1
- }
- }
- 022F1D34 E246607F sub r6,r6,7Fh //r6 = r6 - 0x7F
- 022F1D38 E0844006 add r4,r4,r6 //r4 = r4 + r6
- 022F1D3C EA00000D b 22F1D78h ///022F1D78 v
- //Continue loop at 022F1D78...
- }
- //Continue loop at 022F1D78...
- }
- }
- else
- {
- 022F1C88 E3A06080 mov r6,80h //r6 = 0x80
- 022F1C8C EA000011 b 22F1CD8h //022F1CD8 v
- while(r4 < BMA_MapWidth)
- {
- ///022F1CD8
- 022F1CD8 E5D28000 ldrb r8,[r2] //r8 = BMA_MapWidth
- 022F1CDC E1540008 cmp r4,r8
- 022F1CE0 BAFFFFEA blt 22F1C90h ///022F1C90 ^
- ///022F1C90
- 022F1C90 E4D18001 ldrb r8,[r1],1h //r8 = [r1], r1 += 1
- 022F1C94 E3580080 cmp r8,80h
- if( r8 < 0x80 )
- {
- 022F1C98 BA00000B blt 22F1CCCh ///022F1CCC v
- ///022F1CCC
- 022F1CCC E2880001 add r0,r8,1h //r0 = r8 + 1
- 022F1CD0 E0833000 add r3,r3,r0 //r3 = r3 + r0
- 022F1CD4 E0844000 add r4,r4,r0 //r4 = r4 + r0
- //Continue loop at 022F1CD8..
- }
- else
- {
- 022F1C9C E1A07006 mov r7,r6 //r7 = r6
- 022F1CA0 EA000004 b 22F1CB8h ///022F1CB8 v
- while( r7 <= r8 )
- {
- ///022F1CB8
- 022F1CB8 E1570008 cmp r7,r8
- 022F1CBC DAFFFFF8 ble 22F1CA4h ///022F1CA4 ^
- ///022F1CA4
- 022F1CA4 E1A09003 mov r9,r3 //r9 = r3
- 022F1CA8 E4D30001 ldrb r0,[r3],1h //r0 = [r3], r3 += 1
- 022F1CAC E2877001 add r7,r7,1h //r7 = r7 + 1
- 022F1CB0 E3800040 orr r0,r0,40h //r0 = r0 | 0x40
- 022F1CB4 E5C90000 strb r0,[r9] //[r9] = r0
- }
- 022F1CC0 E248007F sub r0,r8,7Fh //r0 = r8 - 0x7F
- 022F1CC4 E0844000 add r4,r4,r0 //r4 = r4 + r0
- 022F1CC8 EA000002 b 22F1CD8h ///022F1CD8 v
- //Continue loop at 022F1CD8..
- }
- }
- 022F1CE4 EA000026 b 22F1D84h ///022F1D84 v
- ///022F1D84
- 022F1D84 E2680C01 rsb r0,r8,100h //r0 = 256 - r8
- 022F1D88 E2400005 sub r0,r0,5h //r0 = r0 - 5
- 022F1D8C E0833000 add r3,r3,r0 //r3 = r3 + r0
- 022F1D90 E2855001 add r5,r5,1h //r5 = r5 + 1
- //Continue loop at 022F1D94...
- }
- }
- }
- else
- {
- 022F1B2C EA000046 b 22F1C4Ch ///022F1C4C v
- while( r6 < BMA_MapHeight )
- {
- ///022F1C4C
- 022F1C4C E5D23001 ldrb r3,[r2,1h] //r3 = BMA_MapHeight
- 022F1C50 E1560003 cmp r6,r3
- 022F1C54 BAFFFFB5 blt 22F1B30h ///022F1B30 ^
- ///022F1B30
- 022F1B30 E3560000 cmp r6,0h
- 022F1B34 E2844005 add r4,r4,5h //r4 = r4 + 5
- 022F1B38 E3A05000 mov r5,0h //r5 = 0
- if( r6 != 0 )
- {
- 022F1B3C 1A000017 bne 22F1BA0h ///022F1BA0 v
- ///022F1BA0
- 022F1BA0 E2447C01 sub r7,r4,100h //r7 = r4 - 256
- 022F1BA4 E3A0C080 mov r12,80h //r12 = 0x80
- 022F1BA8 E1A03005 mov r3,r5 //r3 = r5
- 022F1BAC EA00001F b 22F1C30h ///022F1C30 v
- while( r5 < BMA_MapWidth )
- {
- ///022F1C30
- 022F1C30 E5D28000 ldrb r8,[r2] //r8 = BMA_MapWidth
- 022F1C34 E1550008 cmp r5,r8
- 022F1C38 BAFFFFDC blt 22F1BB0h ///022F1BB0 ^
- ///022F1BB0
- 022F1BB0 E4D1E001 ldrb r14,[r1],1h //r14 = [r1], r1 += 1
- 022F1BB4 E35E0080 cmp r14,80h
- if( r14 < 0x80 )
- {
- 022F1BB8 BA00000E blt 22F1BF8h ///022F1BF8 v
- ///022F1BF8
- 022F1BF8 E1A08003 mov r8,r3 //r8 = r3
- 022F1BFC EA000007 b 22F1C20h ///022F1C20
- while( r8 <= r14 )
- {
- ///022F1C20
- 022F1C20 E158000E cmp r8,r14
- 022F1C24 DAFFFFF5 ble 22F1C00h ///022F1C00 ^
- ///022F1C00
- 022F1C00 E4D79001 ldrb r9,[r7],1h //r9 = [r7], r7 += 1
- 022F1C04 E2888001 add r8,r8,1h //r8 = r8 + 1
- 022F1C08 E3190080 tst r9,80h
- if( r9 & 0x80 != 0 )
- {
- 022F1C0C 11A0A004 movne r10,r4 //r10 = r4
- 022F1C10 14D49001 ldrneb r9,[r4],1h //r9 = [r4], r4 += 1
- 022F1C18 13899080 orrne r9,r9,80h //r9 = r9 | 0x80
- 022F1C1C 15CA9000 strneb r9,[r10] //[r10] = r9
- }
- else
- {
- 022F1C14 02844001 addeq r4,r4,1h //r4 = r4 + 1
- }
- ///Continue loop at 022F1C20...
- }
- }
- else
- {
- 022F1BBC E1A0800C mov r8,r12 //r8 = r12
- 022F1BC0 EA000007 b 22F1BE4h ///022F1BE4 v
- while(r8 <= r14)
- {
- ///022F1BE4
- 022F1BE4 E158000E cmp r8,r14
- 022F1BE8 DAFFFFF5 ble 22F1BC4h ///022F1BC4 ^
- ///022F1BC4
- 022F1BC4 E4D79001 ldrb r9,[r7],1h //r9 = [r7], r7+= 1
- 022F1BC8 E2888001 add r8,r8,1h //r8 = r8 + 1
- 022F1BCC E3190080 tst r9,80h
- if( r9 & 0x80 == 0 )
- {
- 022F1BD0 01A0A004 moveq r10,r4 //r10 = r4
- 022F1BD4 04D49001 ldreqb r9,[r4],1h //r9 = [r4], r4 += 1
- 022F1BDC 03899080 orreq r9,r9,80h //r9 = r9 | 0x80
- 022F1BE0 05CA9000 streqb r9,[r10] //[r10] = r9
- }
- else
- {
- 022F1BD8 12844001 addne r4,r4,1h //r4 = r4 + 1
- }
- ///Continue loop at 022F1BE4...
- }
- 022F1BEC E24E807F sub r8,r14,7Fh //r8 = r14 + 0x7F
- 022F1BF0 E0855008 add r5,r5,r8 //r5 = r5 + r8
- 022F1BF4 EA00000D b 22F1C30h ///022F1C30 v
- }
- 022F1C28 E28E8001 add r8,r14,1h //r8 = r14 + 1
- 022F1C2C E0855008 add r5,r5,r8 //r5 = r5 + r8
- }
- ///Continue loop to 022F1B3C!
- }
- 022F1B40 E3A07080 mov r7,80h //r7 = 0x80
- 022F1B44 EA000011 b 22F1B90h ///022F1B90 v
- while( r5 < BMA_MapWidth )
- {
- ///022F1B90
- 022F1B90 E5D28000 ldrb r8,[r2] //r8 = BMA_MapWidth
- 022F1B94 E1550008 cmp r5,r8
- 022F1B98 BAFFFFEA blt 22F1B48h ///022F1B48 ^
- ///022F1B48
- 022F1B48 E4D19001 ldrb r9,[r1],1h //r9 = [r1], r1 += 1
- 022F1B4C E3590080 cmp r9,80h
- if(r9 < 0x80)
- {
- 022F1B50 BA00000B blt 22F1B84h ///022F1B84 v
- ///022F1B84
- 022F1B84 E2893001 add r3,r9,1h //r3 = r9 + 1
- 022F1B88 E0844003 add r4,r4,r3 //r4 = r4 + r3
- 022F1B8C E0855003 add r5,r5,r3 //r5 = r5 + r3
- }
- else
- {
- 022F1B54 E1A08007 mov r8,r7 //r8 = r7
- 022F1B58 EA000004 b 22F1B70h ///022F1B70 v
- ///022F1B70
- 022F1B70 E1580009 cmp r8,r9
- if( r8 <= r9 )
- {
- 022F1B74 DAFFFFF8 ble 22F1B5Ch ///022F1B5C ^
- ///022F1B5C
- 022F1B5C E1A0A004 mov r10,r4 //r10 = r4
- 022F1B60 E4D43001 ldrb r3,[r4],1h //r3 = [r4], r4 += 1
- 022F1B64 E2888001 add r8,r8,1h //r8 = r8 + 1
- 022F1B68 E3833080 orr r3,r3,80h //r3 = r3 | 0x80
- 022F1B6C E5CA3000 strb r3,[r10] //[r10] = r3
- }
- 022F1B78 E249307F sub r3,r9,7Fh //r3 = r9 - 0x7F
- 022F1B7C E0855003 add r5,r5,r3 //r5 = r5 + r3
- 022F1B80 EA000002 b 22F1B90h ///022F1B90 v
- }
- ///Continue loop to 022F1B90...
- }
- 022F1B9C EA000026 b 22F1C3Ch ///022F1C3C v
- ///022F1C3C
- 022F1C3C E2683C01 rsb r3,r8,100h //r3 = 256 - r8
- 022F1C40 E2433005 sub r3,r3,5h //r3 = r3 - 5
- 022F1C44 E0844003 add r4,r4,r3 //r4 = r4 + r3
- 022F1C48 E2866001 add r6,r6,1h //r6 = r6 + 1
- ///Continue loop to 022F1C4C...
- }
- }
- ///022F1DA0
- 022F1DA0 E1A00001 mov r0,r1 //r0 = r1
- 022F1DA4 E8BD8FF8 pop r3-r11,r15 //return
Advertisement
Add Comment
Please, Sign In to add comment