Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void ProcessDma3Requests(void) {
- // NOTE: the fillerA member of the DMA struct is actually u32 value;
- // NOTE: gUnknown_0300001C is just a pointer inside the gDma3Requests structure, not a true symbol; feel free to remove
- u16 total_size;
- if (gDma3ManagerLocked) return;
- total_size = 0;
- while (gDma3Requests[gDma3RequestCursor].size) {
- total_size += gDma3Requests[gDma3RequestCursor].size;
- if (total_size > 0xA000) return; // don't do too much at once
- if (REG_VCOUNT > 224) return; // we're about to leave vblank, stop
- switch (gDma3Requests[gDma3RequestCursor].mode) {
- case 1: { // regular 32-bit copy
- u32 request_size = gDma3Requests[gDma3RequestCursor].size;
- u32 * source = gDma3Requests[gDma3RequestCursor].src;
- u32 * destination = gDma3Requests[gDma3RequestCursor].dest;
- while (request_size > 0x1000) {
- DmaCopy32(3, source, destination, 0x1000);
- source += 0x1000 >> 2;
- destination += 0x1000 >> 2;
- request_size -= 0x1000;
- }
- DmaCopy32(3, source, destination, request_size);
- } break;
- case 2: { // repeat a single 32-bit value across RAM
- u32 request_size = gDma3Requests[gDma3RequestCursor].size;
- u32 * destination = gDma3Requests[gDma3RequestCursor].dest;
- while (request_size > 0x1000) {
- DmaFill32(3, gDma3Requests[gDma3RequestCursor].value, destination, 0x1000);
- destination += 0x1000 >> 2;
- request_size -= 0x1000;
- }
- DmaFill32(3, gDma3Requests[gDma3RequestCursor].value, destination, request_size);
- } break;
- case 3: { // regular 16-bit copy
- u32 request_size = gDma3Requests[gDma3RequestCursor].size;
- u16 * source = gDma3Requests[gDma3RequestCursor].src;
- u16 * destination = gDma3Requests[gDma3RequestCursor].dest;
- while (request_size > 0x1000) {
- DmaCopy16(3, source, destination, 0x1000);
- source += 0x1000 >> 1;
- destination += 0x1000 >> 1;
- request_size -= 0x1000;
- }
- DmaCopy16(3, source, destination, request_size);
- } break;
- case 4: { // repeat a single 16-bit value across RAM
- u32 request_size = gDma3Requests[gDma3RequestCursor].size;
- u16 * destination = gDma3Requests[gDma3RequestCursor].dest;
- while (request_size > 0x1000) {
- DmaFill16(3, gDma3Requests[gDma3RequestCursor].value, destination, 0x1000);
- destination += 0x1000 >> 1;
- request_size -= 0x1000;
- }
- DmaFill16(3, gDma3Requests[gDma3RequestCursor].value, destination, request_size);
- }
- }
- gDma3Requests[gDma3RequestCursor].src = NULL;
- gDma3Requests[gDma3RequestCursor].dest = NULL;
- gDma3Requests[gDma3RequestCursor].size = 0;
- gDma3Requests[gDma3RequestCursor].mode = 0;
- gDma3Requests[gDma3RequestCursor].value = 0;
- gDma3RequestCursor ++;
- if (gDma3RequestCursor >= 0x80) gDma3RequestCursor = 0;
- }
- }
- /*
- thumb_func_start ProcessDma3Requests
- @ void ProcessDma3Requests()
- ProcessDma3Requests: @ 8000BF0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- ldr r0, =gDma3ManagerLocked
- ldrb r0, [r0]
- cmp r0, 0
- beq _08000C06
- b _08000E46
- _08000C06:
- movs r0, 0
- str r0, [sp, 0x8]
- ldr r1, =gDma3Requests
- ldr r2, =gDma3RequestCursor
- ldrb r0, [r2]
- lsls r0, 4
- adds r0, r1
- ldrh r0, [r0, 0x8]
- mov r12, r2
- cmp r0, 0
- bne _08000C1E
- b _08000E46
- _08000C1E:
- mov r8, r1
- adds r1, 0x4
- mov r10, r1
- movs r6, 0x80
- lsls r6, 5
- ldr r7, =REG_DMA3
- movs r2, 0
- mov r9, r2
- _08000C2E:
- mov r3, r12 @ gDma3RequestCursor
- ldrb r0, [r3]
- lsls r5, r0, 4
- mov r0, r8 @ gDma3Requests
- adds r1, r5, r0 @ gDma3Requests[gDma3RequestCursor]
- ldrh r0, [r1, 0x8] @ gDma3Requests[gDma3RequestCursor].size
- ldr r2, [sp, 0x8]
- adds r0, r2, r0
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0x8]
- movs r0, 0xA0
- lsls r0, 8
- ldr r3, [sp, 0x8]
- cmp r3, r0
- bls _08000C50
- b _08000E46
- _08000C50:
- ldr r0, =REG_VCOUNT
- ldrb r0, [r0]
- cmp r0, 0xE0
- bls _08000C5A
- b _08000E46
- _08000C5A:
- ldrh r0, [r1, 0xA]
- cmp r0, 0x2
- beq _08000CD0
- cmp r0, 0x2
- bgt _08000C80
- cmp r0, 0x1
- beq _08000C8C
- b _08000DF0 // for 0
- .pool
- _08000C80:
- cmp r0, 0x3
- beq _08000D3C
- cmp r0, 0x4
- bne _08000C8A
- b _08000D88
- _08000C8A:
- b _08000DF0
- CASE 1
- _08000C8C:
- ldr r3, [r1]
- mov r2, r10
- adds r0, r5, r2
- ldr r2, [r0]
- ldrh r1, [r1, 0x8]
- cmp r1, r6
- bhi _08000CA6
- str r3, [r7]
- str r2, [r7, 0x4]
- lsrs r0, r1, 2
- movs r1, 0x84
- lsls r1, 24
- b _08000DAA
- _08000CA6:
- ldr r4, =REG_DMA3
- str r3, [r4]
- str r2, [r4, 0x4]
- ldr r0, =0x84000400
- str r0, [r4, 0x8]
- ldr r0, [r4, 0x8]
- adds r3, r6
- adds r2, r6
- subs r1, r6
- cmp r1, r6
- bhi _08000CA6
- str r3, [r4]
- str r2, [r4, 0x4]
- lsrs r0, r1, 2
- movs r1, 0x84
- lsls r1, 24
- b _08000D76
- .pool
- _08000CD0:
- mov r3, r10
- adds r0, r5, r3
- ldr r4, [r0]
- ldrh r1, [r1, 0x8]
- cmp r1, r6
- bhi _08000CF4
- mov r0, r8
- adds r0, 0xC
- adds r0, r5, r0
- ldr r0, [r0]
- str r0, [sp]
- mov r5, sp
- str r5, [r7]
- str r4, [r7, 0x4]
- lsrs r0, r1, 2
- movs r1, 0x85
- lsls r1, 24
- b _08000DAA
- _08000CF4:
- mov r2, r12
- ldrb r0, [r2]
- lsls r0, 4
- mov r5, r8
- adds r5, 0xC
- adds r0, r5
- ldr r0, [r0]
- str r0, [sp]
- ldr r3, =REG_DMA3
- mov r0, sp
- str r0, [r3]
- str r4, [r3, 0x4]
- ldr r0, =0x85000400
- str r0, [r3, 0x8]
- ldr r0, [r3, 0x8]
- adds r4, r6
- subs r1, r6
- cmp r1, r6
- bhi _08000CF4
- ldrb r0, [r2]
- lsls r0, 4
- adds r0, r5
- ldr r0, [r0]
- str r0, [sp]
- mov r2, sp
- str r2, [r3]
- str r4, [r3, 0x4]
- lsrs r0, r1, 2
- movs r1, 0x85
- lsls r1, 24
- b _08000DEA
- .pool
- _08000D3C:
- ldr r3, [r1]
- mov r2, r10
- adds r0, r5, r2
- ldr r2, [r0]
- ldrh r1, [r1, 0x8]
- cmp r1, r6
- bhi _08000D56
- str r3, [r7]
- str r2, [r7, 0x4]
- lsrs r0, r1, 1
- movs r1, 0x80
- lsls r1, 24
- b _08000DAA
- _08000D56:
- ldr r4, =REG_DMA3
- str r3, [r4]
- str r2, [r4, 0x4]
- ldr r0, =0x80000800
- str r0, [r4, 0x8]
- ldr r0, [r4, 0x8]
- adds r3, r6
- adds r2, r6
- subs r1, r6
- cmp r1, r6
- bhi _08000D56
- str r3, [r4]
- str r2, [r4, 0x4]
- lsrs r0, r1, 1
- movs r1, 0x80
- lsls r1, 24
- _08000D76:
- orrs r0, r1
- str r0, [r4, 0x8]
- ldr r0, [r4, 0x8]
- b _08000DF0
- .pool
- _08000D88:
- mov r3, r10
- adds r0, r5, r3
- ldr r2, [r0]
- ldrh r4, [r1, 0x8]
- add r1, sp, 0x4
- cmp r4, r6
- bhi _08000DB2
- mov r0, r8
- adds r0, 0xC
- adds r0, r5, r0
- ldr r0, [r0]
- strh r0, [r1]
- str r1, [r7]
- str r2, [r7, 0x4]
- lsrs r0, r4, 1
- movs r1, 0x81
- lsls r1, 24
- _08000DAA:
- orrs r0, r1
- str r0, [r7, 0x8]
- ldr r0, [r7, 0x8]
- b _08000DF0
- _08000DB2:
- mov r5, r12
- ldrb r0, [r5]
- lsls r0, 4
- ldr r3, =gUnknown_0300001C
- adds r0, r3
- ldr r0, [r0]
- strh r0, [r1]
- ldr r3, =REG_DMA3
- str r1, [r3]
- str r2, [r3, 0x4]
- ldr r0, =0x81000800
- str r0, [r3, 0x8]
- ldr r0, [r3, 0x8]
- adds r2, r6
- subs r4, r6
- cmp r4, r6
- bhi _08000DB2
- ldrb r0, [r5]
- lsls r0, 4
- ldr r5, =gUnknown_0300001C
- adds r0, r5
- ldr r0, [r0]
- strh r0, [r1]
- str r1, [r3]
- str r2, [r3, 0x4]
- lsrs r0, r4, 1
- movs r1, 0x81
- lsls r1, 24
- _08000DEA:
- orrs r0, r1
- str r0, [r3, 0x8]
- ldr r0, [r3, 0x8]
- _08000DF0:
- ldr r1, =gDma3Requests
- mov r3, r12
- ldrb r0, [r3]
- lsls r0, 4
- adds r0, r1
- mov r2, r9
- str r2, [r0]
- ldrb r0, [r3]
- lsls r0, 4
- add r0, r10
- str r2, [r0]
- ldrb r0, [r3]
- lsls r0, 4
- adds r0, r1
- movs r4, 0
- strh r2, [r0, 0x8]
- ldrb r0, [r3]
- lsls r0, 4
- adds r0, r1
- mov r5, r9
- strh r5, [r0, 0xA]
- ldrb r0, [r3]
- lsls r0, 4
- adds r1, 0xC
- adds r0, r1
- mov r1, r9
- str r1, [r0]
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
- lsls r0, 24
- cmp r0, 0
- bge _08000E34
- strb r4, [r3]
- _08000E34:
- mov r2, r12
- ldrb r0, [r2]
- lsls r0, 4
- ldr r3, =gDma3Requests
- adds r0, r3
- ldrh r0, [r0, 0x8]
- cmp r0, 0
- beq _08000E46
- b _08000C2E
- _08000E46:
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ProcessDma3Requests
- */
- compiler:
- ProcessDma3Requests:
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, r9
- mov r5, r8
- push {r5, r6, r7}
- add sp, sp, #0xfffffff4
- ldr r0, .L44
- ldrb r0, [r0]
- cmp r0, #0
- beq .LCB60
- b .L10 @long jump
- .LCB60:
- mov r0, #0x0
- str r0, [sp, #0x8]
- ldr r1, .L44+0x4
- ldr r2, .L44+0x8
- ldrb r0, [r2]
- lsl r0, r0, #0x4
- add r0, r0, r1
- ldrh r0, [r0, #0x8]
- cmp r0, #0
- bne .LCB74
- b .L10 @long jump
- .LCB74:
- add r1, r1, #0x4
- mov sl, r1
- mov r2, #0x80
- lsl r2, r2, #0x5
- mov r8, r2
- ldr r0, .L44+0xc
- mov ip, r0
- mov r1, #0x0
- mov r9, r1
- .L14:
- ldr r2, .L44+0x8
- ldrb r0, [r2]
- lsl r5, r0, #0x4
- ldr r0, .L44+0x4
- add r1, r5, r0
- ldrh r0, [r1, #0x8]
- ldr r2, [sp, #0x8]
- add r0, r2, r0
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- str r0, [sp, #0x8]
- mov r0, #0xa0
- lsl r0, r0, #0x8
- ldr r2, [sp, #0x8]
- cmp r2, r0
- bls .LCB109
- b .L10 @long jump
- .LCB109:
- ldr r0, .L44+0x10
- ldrh r0, [r0]
- cmp r0, #0xe0
- bls .LCB115
- b .L10 @long jump
- .LCB115:
- ldrh r0, [r1, #0xa]
- cmp r0, #0x2
- beq .L23 @cond_branch
- cmp r0, #0x2
- bgt .L40 @cond_branch
- cmp r0, #0x1
- beq .L18 @cond_branch
- b .L17
- .L45:
- .align 2, 0
- .L44:
- .word gDma3ManagerLocked
- .word gDma3Requests
- .word gDma3RequestCursor
- .word 0x40000d4
- .word 0x4000006
- .L40:
- cmp r0, #0x3
- beq .L28 @cond_branch
- cmp r0, #0x4
- beq .L33 @cond_branch
- b .L17
- .L18:
- ldrh r4, [r1, #0x8]
- ldr r2, [r1]
- mov r1, sl
- add r0, r5, r1
- ldr r1, [r0]
- cmp r4, r8
- bls .L20 @cond_branch
- ldr r5, .L46
- ldr r6, .L46+0x4
- mov r3, #0x80
- lsl r3, r3, #0x5
- .L21:
- str r2, [r5]
- str r1, [r5, #0x4]
- str r6, [r5, #0x8]
- ldr r0, [r5, #0x8]
- add r2, r2, r3
- add r1, r1, r3
- sub r4, r4, r3
- cmp r4, r3
- bhi .L21 @cond_branch
- .L20:
- mov r0, ip
- str r2, [r0]
- str r1, [r0, #0x4]
- lsr r0, r4, #0x2
- mov r1, #0x84
- lsl r1, r1, #0x18
- b .L43
- .L47:
- .align 2, 0
- .L46:
- .word 0x40000d4
- .word 0x84000400
- .L23:
- ldrh r3, [r1, #0x8]
- mov r2, sl
- add r0, r5, r2
- ldr r4, [r0]
- cmp r3, r8
- bls .L25 @cond_branch
- ldr r0, .L48
- add r6, r5, r0
- ldr r1, .L48+0x4
- mov r5, #0x80
- lsl r5, r5, #0x5
- ldr r2, .L48+0x8
- .L26:
- ldr r0, [r6]
- str r0, [sp]
- mov r0, sp
- str r0, [r1]
- str r4, [r1, #0x4]
- str r2, [r1, #0x8]
- ldr r0, [r1, #0x8]
- add r4, r4, r5
- sub r3, r3, r5
- cmp r3, r5
- bhi .L26 @cond_branch
- .L25:
- ldr r1, .L48+0xc
- ldrb r0, [r1]
- lsl r0, r0, #0x4
- ldr r2, .L48
- add r0, r0, r2
- ldr r0, [r0]
- str r0, [sp]
- mov r0, sp
- mov r1, ip
- str r0, [r1]
- str r4, [r1, #0x4]
- lsr r0, r3, #0x2
- mov r1, #0x85
- lsl r1, r1, #0x18
- orr r0, r0, r1
- mov r2, ip
- str r0, [r2, #0x8]
- ldr r0, [r2, #0x8]
- b .L17
- .L49:
- .align 2, 0
- .L48:
- .word gDma3Requests+0xc
- .word 0x40000d4
- .word 0x85000400
- .word gDma3RequestCursor
- .L28:
- ldrh r4, [r1, #0x8]
- ldr r2, [r1]
- mov r1, sl
- add r0, r5, r1
- ldr r1, [r0]
- cmp r4, r8
- bls .L30 @cond_branch
- ldr r5, .L50
- ldr r6, .L50+0x4
- mov r3, #0x80
- lsl r3, r3, #0x5
- .L31:
- str r2, [r5]
- str r1, [r5, #0x4]
- str r6, [r5, #0x8]
- ldr r0, [r5, #0x8]
- add r2, r2, r3
- add r1, r1, r3
- sub r4, r4, r3
- cmp r4, r3
- bhi .L31 @cond_branch
- .L30:
- mov r0, ip
- str r2, [r0]
- str r1, [r0, #0x4]
- lsr r0, r4, #0x1
- mov r1, #0x80
- lsl r1, r1, #0x18
- b .L43
- .L51:
- .align 2, 0
- .L50:
- .word 0x40000d4
- .word 0x80000800
- .L33:
- ldrh r3, [r1, #0x8]
- mov r2, sl
- add r0, r5, r2
- ldr r4, [r0]
- add r2, sp, #0x4
- cmp r3, r8
- bls .L35 @cond_branch
- add r6, r2, #0
- ldr r0, .L52
- add r5, r5, r0
- ldr r1, .L52+0x4
- ldr r7, .L52+0x8
- .L36:
- ldr r0, [r5]
- strh r0, [r6]
- str r6, [r1]
- str r4, [r1, #0x4]
- str r7, [r1, #0x8]
- ldr r0, [r1, #0x8]
- add r4, r4, r8
- mov r0, r8
- sub r3, r3, r0
- cmp r3, r8
- bhi .L36 @cond_branch
- .L35:
- ldr r1, .L52+0xc
- ldrb r0, [r1]
- lsl r0, r0, #0x4
- ldr r1, .L52
- add r0, r0, r1
- ldr r0, [r0]
- strh r0, [r2]
- mov r0, ip
- str r2, [r0]
- str r4, [r0, #0x4]
- lsr r0, r3, #0x1
- mov r1, #0x81
- lsl r1, r1, #0x18
- .L43:
- orr r0, r0, r1
- mov r1, ip
- str r0, [r1, #0x8]
- ldr r0, [r1, #0x8]
- .L17:
- ldr r1, .L52+0x10
- ldr r3, .L52+0xc
- ldrb r0, [r3]
- lsl r0, r0, #0x4
- add r0, r0, r1
- mov r2, r9
- str r2, [r0]
- ldrb r0, [r3]
- lsl r0, r0, #0x4
- add r0, r0, sl
- str r2, [r0]
- ldrb r0, [r3]
- lsl r0, r0, #0x4
- add r0, r0, r1
- mov r4, #0x0
- strh r2, [r0, #0x8]
- ldrb r0, [r3]
- lsl r0, r0, #0x4
- add r0, r0, r1
- mov r1, r9
- strh r1, [r0, #0xa]
- ldrb r0, [r3]
- lsl r0, r0, #0x4
- ldr r2, .L52
- add r0, r0, r2
- mov r1, r9
- str r1, [r0]
- ldrb r0, [r3]
- add r0, r0, #0x1
- strb r0, [r3]
- lsl r0, r0, #0x18
- cmp r0, #0
- bge .L12 @cond_branch
- strb r4, [r3]
- .L12:
- ldr r2, .L52+0xc
- ldrb r0, [r2]
- lsl r0, r0, #0x4
- ldr r1, .L52+0x10
- add r0, r0, r1
- ldrh r0, [r0, #0x8]
- cmp r0, #0
- beq .LCB428
- b .L14 @long jump
- .LCB428:
- .L10:
- add sp, sp, #0xc
- pop {r3, r4, r5}
- mov r8, r3
- mov r9, r4
- mov sl, r5
- pop {r4, r5, r6, r7}
- pop {r0}
- bx r0
- .L53:
- .align 2, 0
- .L52:
- .word gDma3Requests+0xc
- .word 0x40000d4
- .word 0x81000800
- .word gDma3RequestCursor
- .word gDma3Requests
- .Lfe2:
- .size ProcessDma3Requests,.Lfe2-ProcessDma3Requests
- .text
- .align 2, 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement