diff --git a/asm/main.s b/asm/main.s deleted file mode 100644 index d36fdc3..0000000 --- a/asm/main.s +++ /dev/null @@ -1,822 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_0815158C -sub_0815158C: @ 0x0815158C - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #8 - ldr r1, _081515E4 @ =0x04000208 - movs r0, #0 - strh r0, [r1] - subs r1, #4 - ldr r2, _081515E8 @ =0x00004014 - adds r0, r2, #0 - strh r0, [r1] - ldr r2, _081515EC @ =gUnk_03002440 - movs r3, #0 - str r3, [r2] - ldr r0, _081515F0 @ =gUnk_03003670 - str r3, [r0] - ldr r1, _081515F4 @ =gUnk_03002E94 - movs r0, #1 - rsbs r0, r0, #0 - str r0, [r1] - ldr r0, _081515F8 @ =0x04000134 - ldrh r1, [r0] - movs r0, #0xc0 - lsls r0, r0, #8 - ands r0, r1 - movs r1, #0x80 - lsls r1, r1, #8 - cmp r0, r1 - beq _081515D0 - movs r0, #0x80 - lsls r0, r0, #2 - str r0, [r2] -_081515D0: - ldr r0, _081515FC @ =gUnk_03002E90 - ldrh r0, [r0] - cmp r0, #0xf - bne _08151600 - ldr r0, [r2] - movs r1, #0x80 - lsls r1, r1, #5 - orrs r0, r1 - str r0, [r2] - b _08151602 - .align 2, 0 -_081515E4: .4byte 0x04000208 -_081515E8: .4byte 0x00004014 -_081515EC: .4byte gUnk_03002440 -_081515F0: .4byte gUnk_03003670 -_081515F4: .4byte gUnk_03002E94 -_081515F8: .4byte 0x04000134 -_081515FC: .4byte gUnk_03002E90 -_08151600: - str r3, [r2] -_08151602: - movs r0, #0 - str r0, [sp] - ldr r1, _08151978 @ =0x040000D4 - mov r3, sp - str r3, [r1] - movs r0, #0xc0 - lsls r0, r0, #0x13 - str r0, [r1, #4] - ldr r0, _0815197C @ =0x85006000 - str r0, [r1, #8] - ldr r0, [r1, #8] - ldr r0, [r1, #8] - movs r2, #0x80 - lsls r2, r2, #0x18 - ldr r4, _08151980 @ =gUnk_030035D4 - ldr r5, _08151984 @ =gUnk_03003A04 - ldr r6, _08151988 @ =gUnk_03003790 - ldr r7, _0815198C @ =gUnk_03006078 - mov r8, r7 - ldr r3, _08151990 @ =gUnk_030039A4 - mov sb, r3 - ldr r7, _08151994 @ =gUnk_03002E80 - mov ip, r7 - ldr r3, _08151998 @ =gUnk_030023F4 - mov sl, r3 - add r3, sp, #4 - cmp r0, #0 - bge _08151642 -_0815163A: - ldr r0, [r1, #8] - ands r0, r2 - cmp r0, #0 - bne _0815163A -_08151642: - movs r0, #0 - str r0, [sp] - ldr r1, _08151978 @ =0x040000D4 - mov r7, sp - str r7, [r1] - movs r0, #0xe0 - lsls r0, r0, #0x13 - str r0, [r1, #4] - ldr r0, _0815199C @ =0x85000100 - str r0, [r1, #8] - ldr r0, [r1, #8] - ldr r0, [r1, #8] - movs r2, #0x80 - lsls r2, r2, #0x18 - cmp r0, #0 - bge _0815166A -_08151662: - ldr r0, [r1, #8] - ands r0, r2 - cmp r0, #0 - bne _08151662 -_0815166A: - movs r0, #0 - str r0, [sp] - ldr r1, _08151978 @ =0x040000D4 - mov r0, sp - str r0, [r1] - movs r0, #0xa0 - lsls r0, r0, #0x13 - str r0, [r1, #4] - ldr r0, _0815199C @ =0x85000100 - str r0, [r1, #8] - ldr r0, [r1, #8] - ldr r0, [r1, #8] - movs r2, #0x80 - lsls r2, r2, #0x18 - cmp r0, #0 - bge _08151692 -_0815168A: - ldr r0, [r1, #8] - ands r0, r2 - cmp r0, #0 - bne _0815168A -_08151692: - movs r0, #0xff - strb r0, [r4] - movs r0, #0 - strb r0, [r5] - strb r0, [r6] - ldr r1, _081519A0 @ =gUnk_030068B0 - strb r0, [r1] - mov r2, r8 - strb r0, [r2] - mov r7, sb - strb r0, [r7] - movs r0, #0 - str r0, [sp] - ldr r0, _08151978 @ =0x040000D4 - mov r1, sp - str r1, [r0] - mov r2, ip - str r2, [r0, #4] - ldr r1, _081519A4 @ =0x85000004 - str r1, [r0, #8] - ldr r1, [r0, #8] - adds r2, r0, #0 - ldr r0, [r2, #8] - movs r1, #0x80 - lsls r1, r1, #0x18 - cmp r0, #0 - bge _081516D0 -_081516C8: - ldr r0, [r2, #8] - ands r0, r1 - cmp r0, #0 - bne _081516C8 -_081516D0: - movs r0, #0 - ldr r7, _081519A8 @ =gUnk_030060A0 - str r0, [r7] - str r0, [sp] - ldr r0, _08151978 @ =0x040000D4 - mov r1, sp - str r1, [r0] - ldr r2, _081519AC @ =gUnk_03003680 - str r2, [r0, #4] - ldr r1, _081519A4 @ =0x85000004 - str r1, [r0, #8] - ldr r1, [r0, #8] - adds r2, r0, #0 - ldr r0, [r2, #8] - movs r1, #0x80 - lsls r1, r1, #0x18 - cmp r0, #0 - bge _081516FC -_081516F4: - ldr r0, [r2, #8] - ands r0, r1 - cmp r0, #0 - bne _081516F4 -_081516FC: - movs r1, #0 - mov r7, sl - strh r1, [r7] - strh r1, [r7, #2] - movs r0, #0x80 - ldr r2, _081519B0 @ =gUnk_03003690 - strh r0, [r2] - str r1, [sp] - ldr r0, _08151978 @ =0x040000D4 - mov r7, sp - str r7, [r0] - ldr r1, _081519B4 @ =gUnk_03002EC0 - str r1, [r0, #4] - ldr r1, _081519B8 @ =0x850000C0 - str r1, [r0, #8] - ldr r1, [r0, #8] - adds r2, r0, #0 - ldr r0, [r2, #8] - movs r1, #0x80 - lsls r1, r1, #0x18 - cmp r0, #0 - bge _08151730 -_08151728: - ldr r0, [r2, #8] - ands r0, r1 - cmp r0, #0 - bne _08151728 -_08151730: - movs r0, #0 - ldr r2, _081519BC @ =gUnk_030024F0 - strb r0, [r2] - ldr r7, _081519C0 @ =gUnk_03003A00 - strb r0, [r7] - movs r1, #0x80 - lsls r1, r1, #2 - adds r0, r1, #0 - strh r0, [r3] - ldr r0, _08151978 @ =0x040000D4 - str r3, [r0] - ldr r2, _081519C4 @ =gUnk_030060B0 - str r2, [r0, #4] - ldr r1, _081519C8 @ =0x81000200 - str r1, [r0, #8] - ldr r1, [r0, #8] - adds r2, r0, #0 - ldr r0, [r2, #8] - movs r1, #0x80 - lsls r1, r1, #0x18 - cmp r0, #0 - bge _08151764 -_0815175C: - ldr r0, [r2, #8] - ands r0, r1 - cmp r0, #0 - bne _0815175C -_08151764: - movs r7, #0x80 - lsls r7, r7, #2 - adds r0, r7, #0 - strh r0, [r3] - ldr r0, _08151978 @ =0x040000D4 - str r3, [r0] - ldr r1, _081519CC @ =gUnk_030031C0 - str r1, [r0, #4] - ldr r1, _081519C8 @ =0x81000200 - str r1, [r0, #8] - ldr r1, [r0, #8] - adds r2, r0, #0 - ldr r0, [r2, #8] - movs r1, #0x80 - lsls r1, r1, #0x18 - cmp r0, #0 - bge _0815178E -_08151786: - ldr r0, [r2, #8] - ands r0, r1 - cmp r0, #0 - bne _08151786 -_0815178E: - movs r0, #1 - rsbs r0, r0, #0 - str r0, [sp] - ldr r0, _08151978 @ =0x040000D4 - mov r2, sp - str r2, [r0] - ldr r3, _081519D0 @ =gUnk_03002450 - str r3, [r0, #4] - ldr r1, _081519D4 @ =0x85000008 - str r1, [r0, #8] - ldr r1, [r0, #8] - adds r2, r0, #0 - ldr r0, [r2, #8] - movs r1, #0x80 - lsls r1, r1, #0x18 - cmp r0, #0 - bge _081517B8 -_081517B0: - ldr r0, [r2, #8] - ands r0, r1 - cmp r0, #0 - bne _081517B0 -_081517B8: - movs r0, #1 - rsbs r0, r0, #0 - str r0, [sp] - ldr r0, _08151978 @ =0x040000D4 - mov r7, sp - str r7, [r0] - ldr r1, _081519D8 @ =gUnk_03006080 - str r1, [r0, #4] - ldr r1, _081519D4 @ =0x85000008 - str r1, [r0, #8] - ldr r1, [r0, #8] - adds r2, r0, #0 - ldr r0, [r2, #8] - movs r1, #0x80 - lsls r1, r1, #0x18 - cmp r0, #0 - bge _081517E2 -_081517DA: - ldr r0, [r2, #8] - ands r0, r1 - cmp r0, #0 - bne _081517DA -_081517E2: - movs r0, #0 - str r0, [sp] - ldr r0, _08151978 @ =0x040000D4 - mov r2, sp - str r2, [r0] - ldr r3, _081519DC @ =gUnk_03002C60 - str r3, [r0, #4] - ldr r1, _081519E0 @ =0x85000080 - str r1, [r0, #8] - ldr r1, [r0, #8] - adds r2, r0, #0 - ldr r0, [r2, #8] - movs r1, #0x80 - lsls r1, r1, #0x18 - cmp r0, #0 - bge _0815180A -_08151802: - ldr r0, [r2, #8] - ands r0, r1 - cmp r0, #0 - bne _08151802 -_0815180A: - movs r0, #0 - str r0, [sp] - ldr r0, _08151978 @ =0x040000D4 - mov r7, sp - str r7, [r0] - ldr r1, _081519E4 @ =gUnk_030037A0 - str r1, [r0, #4] - ldr r1, _081519E0 @ =0x85000080 - str r1, [r0, #8] - ldr r1, [r0, #8] - adds r2, r0, #0 - ldr r0, [r2, #8] - movs r1, #0x80 - lsls r1, r1, #0x18 - cmp r0, #0 - bge _08151832 -_0815182A: - ldr r0, [r2, #8] - ands r0, r1 - cmp r0, #0 - bne _0815182A -_08151832: - bl sub_08158870 - ldr r0, _081519E8 @ =gUnk_03002520 - movs r3, #0 - movs r1, #0 - movs r2, #0x80 - lsls r2, r2, #1 - strh r2, [r0] - strh r1, [r0, #2] - strh r1, [r0, #4] - strh r2, [r0, #6] - str r1, [r0, #8] - str r1, [r0, #0xc] - strh r2, [r0, #0x10] - strh r1, [r0, #0x12] - strh r1, [r0, #0x14] - strh r2, [r0, #0x16] - str r1, [r0, #0x18] - str r1, [r0, #0x1c] - ldr r0, _081519EC @ =gUnk_03002514 - strb r3, [r0] - ldr r0, _081519F0 @ =gUnk_03002544 - strh r1, [r0] - ldr r0, _081519F4 @ =gUnk_030023F0 - strh r2, [r0] - ldr r0, _081519F8 @ =gUnk_030068B4 - strh r2, [r0] - ldr r0, _081519FC @ =gUnk_030039AC - strh r1, [r0] - ldr r0, _08151A00 @ =gUnk_03006074 - strh r1, [r0] - ldr r0, _08151A04 @ =gUnk_0300254C - strh r1, [r0] - ldr r0, _08151A08 @ =gUnk_0300367C - strh r1, [r0] - ldr r0, _08151A0C @ =gUnk_030068B8 - strh r2, [r0] - ldr r0, _08151A10 @ =gUnk_03002E70 - strh r1, [r0] - strh r1, [r0, #2] - strh r1, [r0, #4] - strh r1, [r0, #6] - strh r1, [r0, #8] - strh r1, [r0, #0xa] - ldr r0, _08151A14 @ =gUnk_030024E8 - strh r1, [r0] - strh r1, [r0, #2] - strh r1, [r0, #4] - ldr r0, _08151A18 @ =gUnk_030068D8 - str r1, [r0] - movs r2, #0 - ldr r6, _08151A1C @ =gUnk_030035E0 - movs r5, #0x14 - ldr r4, _08151A20 @ =gUnk_030036A0 - movs r3, #8 -_081518A0: - lsls r0, r2, #0x10 - asrs r0, r0, #0x10 - adds r1, r0, r6 - strb r5, [r1] - adds r1, r0, r4 - strb r3, [r1] - adds r0, #1 - lsls r0, r0, #0x10 - lsrs r2, r0, #0x10 - asrs r0, r0, #0x10 - cmp r0, #9 - ble _081518A0 - ldr r0, _08151A24 @ =gUnk_03006CB0 - movs r1, #0 - strb r1, [r0, #8] - ldr r0, _08151A28 @ =gUnk_03002480 - strh r1, [r0] - ldr r0, _08151A2C @ =gUnk_030068D0 - str r1, [r0] - ldr r0, _08151A30 @ =gUnk_03002E64 - str r1, [r0] - movs r2, #0 - ldr r5, _08151A34 @ =gUnk_03002760 - ldr r6, _08151A38 @ =gUnk_03002484 - ldr r7, _08151A3C @ =gUnk_03002EAC - ldr r3, _08151A40 @ =gUnk_030036C8 - mov ip, r3 - ldr r0, _08151A44 @ =gUnk_030039A0 - mov r8, r0 - ldr r1, _08151A48 @ =gUnk_0300248C - mov sb, r1 - ldr r3, _08151A4C @ =gUnk_030024E4 - mov sl, r3 - ldr r4, _08151A50 @ =gIntrTable - ldr r3, _08151A54 @ =gIntrTableTemplate -_081518E6: - lsls r1, r2, #0x10 - asrs r1, r1, #0x10 - lsls r0, r1, #2 - adds r2, r0, r4 - adds r0, r0, r3 - ldr r0, [r0] - str r0, [r2] - adds r1, #1 - lsls r1, r1, #0x10 - lsrs r2, r1, #0x10 - asrs r1, r1, #0x10 - cmp r1, #0xe - ble _081518E6 - movs r0, #0 - str r0, [sp] - ldr r0, _08151978 @ =0x040000D4 - mov r1, sp - str r1, [r0] - str r5, [r0, #4] - ldr r1, _08151A58 @ =0x85000140 - str r1, [r0, #8] - ldr r1, [r0, #8] - adds r2, r0, #0 - ldr r0, [r2, #8] - movs r1, #0x80 - lsls r1, r1, #0x18 - cmp r0, #0 - bge _08151926 -_0815191E: - ldr r0, [r2, #8] - ands r0, r1 - cmp r0, #0 - bne _0815191E -_08151926: - str r5, [r6] - movs r2, #0xa0 - lsls r2, r2, #2 - adds r0, r5, r2 - str r0, [r7] - movs r0, #0 - mov r3, ip - str r0, [r3] - mov r7, r8 - strb r0, [r7] - mov r1, sb - strb r0, [r1] - mov r2, sl - strb r0, [r2] - str r0, [sp] - ldr r0, _08151978 @ =0x040000D4 - mov r3, sp - str r3, [r0] - ldr r7, _08151A5C @ =gUnk_030035C0 - str r7, [r0, #4] - ldr r1, _081519A4 @ =0x85000004 - str r1, [r0, #8] - ldr r1, [r0, #8] - adds r2, r0, #0 - ldr r0, [r2, #8] - movs r1, #0x80 - lsls r1, r1, #0x18 - cmp r0, #0 - bge _08151968 -_08151960: - ldr r0, [r2, #8] - ands r0, r1 - cmp r0, #0 - bne _08151960 -_08151968: - movs r0, #0 - str r0, [sp] - ldr r0, _08151978 @ =0x040000D4 - mov r1, sp - str r1, [r0] - ldr r2, _08151A60 @ =gUnk_03003A10 - str r2, [r0, #4] - b _08151A64 - .align 2, 0 -_08151978: .4byte 0x040000D4 -_0815197C: .4byte 0x85006000 -_08151980: .4byte gUnk_030035D4 -_08151984: .4byte gUnk_03003A04 -_08151988: .4byte gUnk_03003790 -_0815198C: .4byte gUnk_03006078 -_08151990: .4byte gUnk_030039A4 -_08151994: .4byte gUnk_03002E80 -_08151998: .4byte gUnk_030023F4 -_0815199C: .4byte 0x85000100 -_081519A0: .4byte gUnk_030068B0 -_081519A4: .4byte 0x85000004 -_081519A8: .4byte gUnk_030060A0 -_081519AC: .4byte gUnk_03003680 -_081519B0: .4byte gUnk_03003690 -_081519B4: .4byte gUnk_03002EC0 -_081519B8: .4byte 0x850000C0 -_081519BC: .4byte gUnk_030024F0 -_081519C0: .4byte gUnk_03003A00 -_081519C4: .4byte gUnk_030060B0 -_081519C8: .4byte 0x81000200 -_081519CC: .4byte gUnk_030031C0 -_081519D0: .4byte gUnk_03002450 -_081519D4: .4byte 0x85000008 -_081519D8: .4byte gUnk_03006080 -_081519DC: .4byte gUnk_03002C60 -_081519E0: .4byte 0x85000080 -_081519E4: .4byte gUnk_030037A0 -_081519E8: .4byte gUnk_03002520 -_081519EC: .4byte gUnk_03002514 -_081519F0: .4byte gUnk_03002544 -_081519F4: .4byte gUnk_030023F0 -_081519F8: .4byte gUnk_030068B4 -_081519FC: .4byte gUnk_030039AC -_08151A00: .4byte gUnk_03006074 -_08151A04: .4byte gUnk_0300254C -_08151A08: .4byte gUnk_0300367C -_08151A0C: .4byte gUnk_030068B8 -_08151A10: .4byte gUnk_03002E70 -_08151A14: .4byte gUnk_030024E8 -_08151A18: .4byte gUnk_030068D8 -_08151A1C: .4byte gUnk_030035E0 -_08151A20: .4byte gUnk_030036A0 -_08151A24: .4byte gUnk_03006CB0 -_08151A28: .4byte gUnk_03002480 -_08151A2C: .4byte gUnk_030068D0 -_08151A30: .4byte gUnk_03002E64 -_08151A34: .4byte gUnk_03002760 -_08151A38: .4byte gUnk_03002484 -_08151A3C: .4byte gUnk_03002EAC -_08151A40: .4byte gUnk_030036C8 -_08151A44: .4byte gUnk_030039A0 -_08151A48: .4byte gUnk_0300248C -_08151A4C: .4byte gUnk_030024E4 -_08151A50: .4byte gIntrTable -_08151A54: .4byte gIntrTableTemplate -_08151A58: .4byte 0x85000140 -_08151A5C: .4byte gUnk_030035C0 -_08151A60: .4byte gUnk_03003A10 -_08151A64: - ldr r1, _08151BDC @ =0x85000004 - str r1, [r0, #8] - ldr r1, [r0, #8] - adds r2, r0, #0 - ldr r0, [r2, #8] - movs r1, #0x80 - lsls r1, r1, #0x18 - cmp r0, #0 - bge _08151A7E -_08151A76: - ldr r0, [r2, #8] - ands r0, r1 - cmp r0, #0 - bne _08151A76 -_08151A7E: - movs r0, #0 - ldr r3, _08151BE0 @ =gUnk_03006070 - strb r0, [r3] - ldr r7, _08151BE4 @ =gUnk_03002548 - strb r0, [r7] - movs r0, #0 - str r0, [sp] - ldr r0, _08151BE8 @ =0x040000D4 - mov r1, sp - str r1, [r0] - ldr r2, _08151BEC @ =gUnk_03002470 - str r2, [r0, #4] - ldr r1, _08151BDC @ =0x85000004 - str r1, [r0, #8] - ldr r1, [r0, #8] - adds r2, r0, #0 - ldr r0, [r2, #8] - movs r1, #0x80 - lsls r1, r1, #0x18 - cmp r0, #0 - bge _08151AB0 -_08151AA8: - ldr r0, [r2, #8] - ands r0, r1 - cmp r0, #0 - bne _08151AA8 -_08151AB0: - movs r0, #0 - str r0, [sp] - ldr r0, _08151BE8 @ =0x040000D4 - mov r3, sp - str r3, [r0] - ldr r7, _08151BF0 @ =gUnk_030068C0 - str r7, [r0, #4] - ldr r1, _08151BDC @ =0x85000004 - str r1, [r0, #8] - ldr r1, [r0, #8] - adds r2, r0, #0 - ldr r0, [r2, #8] - movs r1, #0x80 - lsls r1, r1, #0x18 - cmp r0, #0 - bge _08151AD8 -_08151AD0: - ldr r0, [r2, #8] - ands r0, r1 - cmp r0, #0 - bne _08151AD0 -_08151AD8: - bl m4aSoundInit - ldr r0, _08151BF4 @ =0x0095FA00 - bl m4aSoundMode - bl m4aSoundMain - ldr r1, _08151BF8 @ =gUnk_030068D4 - movs r0, #1 - strb r0, [r1] - bl sub_08152A18 - bl sub_08159074 - ldr r1, _08151BFC @ =gUnk_03002488 - movs r2, #0x80 - lsls r2, r2, #3 - adds r0, r2, #0 - strh r0, [r1] - ldr r1, _08151C00 @ =gUnk_03002540 - ldr r0, _08151C04 @ =0x06010000 - str r0, [r1] - bl sub_08157168 - ldr r1, _08151BE8 @ =0x040000D4 - ldr r0, _08151C08 @ =IntrMain - str r0, [r1] - ldr r0, _08151C0C @ =gUnk_030017F0 - str r0, [r1, #4] - ldr r0, _08151C10 @ =0x84000080 - str r0, [r1, #8] - ldr r0, [r1, #8] - ldr r0, [r1, #8] - movs r2, #0x80 - lsls r2, r2, #0x18 - cmp r0, #0 - bge _08151B2A -_08151B22: - ldr r0, [r1, #8] - ands r0, r2 - cmp r0, #0 - bne _08151B22 -_08151B2A: - ldr r1, _08151C14 @ =INTR_VECTOR - ldr r0, _08151C0C @ =gUnk_030017F0 - str r0, [r1] - ldr r2, _08151C18 @ =0x04000200 - movs r0, #1 - strh r0, [r2] - ldr r1, _08151C1C @ =0x04000004 - movs r0, #0x18 - strh r0, [r1] - ldr r0, _08151C20 @ =0x080000B2 - ldrb r0, [r0] - cmp r0, #0x96 - bne _08151B5A - ldr r0, _08151C24 @ =0x080000AC - ldr r1, [r0] - ldr r0, _08151C28 @ =0x454B3842 - cmp r1, r0 - bne _08151B5A - ldrh r0, [r2] - movs r3, #0x80 - lsls r3, r3, #6 - adds r1, r3, #0 - orrs r0, r1 - strh r0, [r2] -_08151B5A: - ldr r1, _08151C2C @ =0x04000208 - movs r0, #1 - strh r0, [r1] - movs r0, #0 - str r0, [sp] - ldr r1, _08151BE8 @ =0x040000D4 - mov r7, sp - str r7, [r1] - ldr r0, _08151C30 @ =gUnk_030036B0 - str r0, [r1, #4] - ldr r0, _08151C34 @ =0x85000005 - str r0, [r1, #8] - ldr r0, [r1, #8] - ldr r0, [r1, #8] - movs r2, #0x80 - lsls r2, r2, #0x18 - ldr r3, _08151C38 @ =gUnk_03002490 - ldr r5, _08151C3C @ =gUnk_03002554 - ldr r6, _08151C40 @ =gUnk_03002558 - cmp r0, #0 - bge _08151B8C -_08151B84: - ldr r0, [r1, #8] - ands r0, r2 - cmp r0, #0 - bne _08151B84 -_08151B8C: - movs r0, #0 - str r0, [sp] - ldr r0, _08151BE8 @ =0x040000D4 - mov r1, sp - str r1, [r0] - str r3, [r0, #4] - ldr r1, _08151C44 @ =0x85000014 - str r1, [r0, #8] - ldr r1, [r0, #8] - adds r2, r0, #0 - ldr r0, [r2, #8] - movs r1, #0x80 - lsls r1, r1, #0x18 - cmp r0, #0 - bge _08151BB2 -_08151BAA: - ldr r0, [r2, #8] - ands r0, r1 - cmp r0, #0 - bne _08151BAA -_08151BB2: - movs r4, #0 - str r4, [r5] - strb r4, [r6] - movs r0, #0 - bl MultiSioInit - ldr r0, _08151C48 @ =gUnk_0300607C - strb r4, [r0] - ldr r0, _08151C4C @ =gUnk_030024E0 - str r4, [r0] - ldr r0, _08151C50 @ =gUnk_03002550 - strb r4, [r0] - add sp, #8 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_08151BDC: .4byte 0x85000004 -_08151BE0: .4byte gUnk_03006070 -_08151BE4: .4byte gUnk_03002548 -_08151BE8: .4byte 0x040000D4 -_08151BEC: .4byte gUnk_03002470 -_08151BF0: .4byte gUnk_030068C0 -_08151BF4: .4byte 0x0095FA00 -_08151BF8: .4byte gUnk_030068D4 -_08151BFC: .4byte gUnk_03002488 -_08151C00: .4byte gUnk_03002540 -_08151C04: .4byte 0x06010000 -_08151C08: .4byte IntrMain -_08151C0C: .4byte gUnk_030017F0 -_08151C10: .4byte 0x84000080 -_08151C14: .4byte INTR_VECTOR -_08151C18: .4byte 0x04000200 -_08151C1C: .4byte 0x04000004 -_08151C20: .4byte 0x080000B2 -_08151C24: .4byte 0x080000AC -_08151C28: .4byte 0x454B3842 -_08151C2C: .4byte 0x04000208 -_08151C30: .4byte gUnk_030036B0 -_08151C34: .4byte 0x85000005 -_08151C38: .4byte gUnk_03002490 -_08151C3C: .4byte gUnk_03002554 -_08151C40: .4byte gUnk_03002558 -_08151C44: .4byte 0x85000014 -_08151C48: .4byte gUnk_0300607C -_08151C4C: .4byte gUnk_030024E0 -_08151C50: .4byte gUnk_03002550 diff --git a/asm/rom_header.inc b/asm/rom_header.inc index 6730efa..cbe27c9 100644 --- a/asm/rom_header.inc +++ b/asm/rom_header.inc @@ -12,6 +12,7 @@ RomHeaderGameCode: RomHeaderMakerCode: .space 2 + .global RomHeaderMagic RomHeaderMagic: .byte 0 diff --git a/include/functions.h b/include/functions.h index 61c0761..eb9ffeb 100644 --- a/include/functions.h +++ b/include/functions.h @@ -8,5 +8,10 @@ extern void sub_08030E44(void); extern u32 sub_08030FE0(void); extern void sub_08032E98(void); extern void nullsub_2(void); +extern void sub_08158870(void); +extern void sub_08159074(void); +extern void sub_08152A18(void); +extern void sub_08157168(void); +extern void IntrMain(void); #endif diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h index c2e92a5..bee0d74 100644 --- a/include/gba/m4a_internal.h +++ b/include/gba/m4a_internal.h @@ -360,6 +360,7 @@ void m4aSoundVSyncOff(void); void m4aMPlayAllStop(void); void m4aSoundVSync(void); void m4aSoundMain(void); +void m4aSoundInit(void); void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo); void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume); diff --git a/include/main.h b/include/main.h index e0b4869..438e7db 100644 --- a/include/main.h +++ b/include/main.h @@ -6,12 +6,33 @@ typedef void (*HBlankFunc)(u8); typedef void (*FuncType_030068C0)(void); typedef u32 (*FuncType_08D5FDD4)(void); +typedef void (*IntrFunc)(void); struct Unk_020382D0 { u8 filler0[4]; u16 unk4; }; +struct Unk_030023F4 { + u16 unk0; + u16 unk2; +}; + +struct Unk_03002520 { + u16 unk0; + u16 unk2; + u16 unk4; + u16 unk6; + u32 unk8; + u32 unkC; + u16 unk10; + u16 unk12; + u16 unk14; + u16 unk16; + u32 unk18; + u32 unk1C; +}; + struct Unk_03002EC0 { u32 unk0; u32 unk4; @@ -26,52 +47,84 @@ struct Unk_03006CB0 { extern struct Unk_020382D0 gUnk_020382D0; +extern u16 gUnk_030023F0; +extern struct Unk_030023F4 gUnk_030023F4; extern u32 gUnk_03002440; +extern u8 gUnk_03002450[]; extern u8 gUnk_03002470[]; extern u16 gUnk_03002480; extern u8* gUnk_03002484; +extern u16 gUnk_03002488; extern u8 gUnk_0300248C; extern u8 gUnk_03002490[]; +extern u32 gUnk_030024E0; extern u8 gUnk_030024E4; extern u16 gUnk_030024E8[3]; +extern u8 gUnk_030024F0; extern u8 gUnk_03002514; -extern u16 gUnk_03002520[0x10]; +extern struct Unk_03002520 gUnk_03002520; +extern u32 gUnk_03002540; +extern u16 gUnk_03002544; extern u8 gUnk_03002548; +extern u16 gUnk_0300254C; +extern u8 gUnk_03002550; extern u32 gUnk_03002554; extern u8 gUnk_03002558; -extern u8 gUnk_03002760[0x280]; +extern u8 gUnk_03002760[2][0x280]; extern u8 gUnk_03002C60[0x200]; extern u32 gUnk_03002E64; extern u16 gUnk_03002E70[6]; +extern u8 gUnk_03002E80[]; extern u16 gUnk_03002E90; +extern u32 gUnk_03002E94; extern u8 gUnk_03002EA0[]; extern u8* gUnk_03002EAC; extern u16 gUnk_03002EB0[4]; extern u16 gUnk_03002EB8; extern struct Unk_03002EC0 gUnk_03002EC0[]; +extern u8 gUnk_030031C0[]; extern u8 gUnk_030035C0[]; extern u8 gUnk_030035D4; extern u8 gUnk_030035E0[]; extern u16 gUnk_030035EC; extern u32 gUnk_03003670; +extern u16 gUnk_0300367C; extern u16 gUnk_03003680[8]; extern u16 gUnk_03003690; extern u8 gUnk_030036A0[]; extern u8 gUnk_030036B0[]; extern u8 gUnk_030036C4; extern u32 gUnk_030036C8; +extern u8 gUnk_03003790; extern u8 gUnk_030037A0[0x200]; extern u8 gUnk_030039A0; extern u8 gUnk_030039A4; extern u16 gUnk_030039A8; +extern u16 gUnk_030039AC; extern u16 gUnk_030039FC; +extern u8 gUnk_03003A00; +extern u8 gUnk_03003A04; extern HBlankFunc gUnk_03003A10[0xa0]; extern u8 gUnk_03006070; +extern u16 gUnk_03006074; extern u8 gUnk_03006078; +extern u8 gUnk_0300607C; +extern u8 gUnk_03006080[]; +extern u32 gUnk_030060A0; extern u8 gUnk_030060B0[0x200]; +extern u8 gUnk_030068B0; +extern u16 gUnk_030068B4; +extern u16 gUnk_030068B8; extern FuncType_030068C0 gUnk_030068C0[8]; +extern u32 gUnk_030068D0; extern u8 gUnk_030068D4; +extern u32 gUnk_030068D8; extern struct Unk_03006CB0 gUnk_03006CB0; +extern IntrFunc gIntrTable[]; +extern IntrFunc gUnk_030017F0; + +extern const u8 RomHeaderMagic; +extern const u32 RomHeaderGameCode; extern void sub_08151C54(void); extern void sub_08151DC4(void); diff --git a/linker.ld b/linker.ld index 3607ce8..0cac622 100644 --- a/linker.ld +++ b/linker.ld @@ -283,7 +283,6 @@ SECTIONS { asm/code_08030C94.o(.text); asm/m4a_asm.o(.text); src/m4a.o(.text); - asm/main.o(.text); src/main.o(.text); asm/code_08152A18.o(.text); src/multi_sio.o(.text); diff --git a/src/main.c b/src/main.c index 355520b..0e708cf 100644 --- a/src/main.c +++ b/src/main.c @@ -7,6 +7,159 @@ #define GetBit(x, y) ((x) >> (y) & 1) extern FuncType_08D5FDD4 const gUnk_08D5FDD4[]; +extern IntrFunc const gIntrTableTemplate[]; + +void sub_0815158C(void) { + s16 i; + REG_IME = 0; + REG_WAITCNT = WAITCNT_PREFETCH_ENABLE | WAITCNT_WS0_S_1 | WAITCNT_WS0_N_3; + gUnk_03002440 = 0; + gUnk_03003670 = 0; + gUnk_03002E94 = ~0; + + if ((REG_RCNT & 0xc000) != 0x8000) { + gUnk_03002440 = 0x200; + } + + if (gUnk_03002E90 == 0xf) { + gUnk_03002440 |= 0x1000; + } + else { + gUnk_03002440 = 0; + } + + DmaFill32(3, 0, (void*)VRAM, VRAM_SIZE); + DmaWait(3); + DmaFill32(3, 0, (void*)OAM, OAM_SIZE); + DmaWait(3); + DmaFill32(3, 0, (void*)PLTT, PLTT_SIZE); + DmaWait(3); + gUnk_030035D4 = 0xff; + gUnk_03003A04 = 0; + gUnk_03003790 = 0; + gUnk_030068B0 = 0; + gUnk_03006078 = 0; + gUnk_030039A4 = 0; + DmaFill32(3, 0, gUnk_03002E80, 0x10); + DmaWait(3); + gUnk_030060A0 = 0; + DmaFill32(3, 0, gUnk_03003680, 0x10); + DmaWait(3); + gUnk_030023F4.unk0 = 0; + gUnk_030023F4.unk2 = 0; + gUnk_03003690 = 0x80; + DmaFill32(3, 0, gUnk_03002EC0, 0x300); + DmaWait(3); + gUnk_030024F0 = 0; + gUnk_03003A00 = 0; + DmaFill16(3, 0x200, gUnk_030060B0, 0x400); + DmaWait(3); + DmaFill16(3, 0x200, gUnk_030031C0, 0x400); + DmaWait(3); + DmaFill32(3, ~0, gUnk_03002450, 0x20); + DmaWait(3); + DmaFill32(3, ~0, gUnk_03006080, 0x20); + DmaWait(3); + DmaFill32(3, 0, gUnk_03002C60, 0x200); + DmaWait(3); + DmaFill32(3, 0, gUnk_030037A0, 0x200); + DmaWait(3); + sub_08158870(); + gUnk_03002520.unk0 = 0x100; + gUnk_03002520.unk2 = 0; + gUnk_03002520.unk4 = 0; + gUnk_03002520.unk6 = 0x100; + gUnk_03002520.unk8 = 0; + gUnk_03002520.unkC = 0; + gUnk_03002520.unk10 = 0x100; + gUnk_03002520.unk12 = 0; + gUnk_03002520.unk14 = 0; + gUnk_03002520.unk16 = 0x100; + gUnk_03002520.unk18 = 0; + gUnk_03002520.unk1C = 0; + gUnk_03002514 = 0; + gUnk_03002544 = 0; + gUnk_030023F0 = 0x100; + gUnk_030068B4 = 0x100; + gUnk_030039AC = 0; + gUnk_03006074 = 0; + gUnk_0300254C = 0; + gUnk_0300367C = 0; + gUnk_030068B8 = 0x100; + gUnk_03002E70[0] = 0; + gUnk_03002E70[1] = 0; + gUnk_03002E70[2] = 0; + gUnk_03002E70[3] = 0; + gUnk_03002E70[4] = 0; + gUnk_03002E70[5] = 0; + gUnk_030024E8[0] = 0; + gUnk_030024E8[1] = 0; + gUnk_030024E8[2] = 0; + gUnk_030068D8 = 0; + + for (i = 0; i < 10; i++) { + gUnk_030035E0[i] = 0x14; + gUnk_030036A0[i] = 8; + } + + gUnk_03006CB0.unk8 = 0; + gUnk_03002480 = 0; + gUnk_030068D0 = 0; + gUnk_03002E64 = 0; + + for (i = 0; i < 15; i++) { + gIntrTable[i] = gIntrTableTemplate[i]; + } + + DmaFill32(3, 0, gUnk_03002760, 0x500); + DmaWait(3); + gUnk_03002484 = gUnk_03002760[0]; + gUnk_03002EAC = gUnk_03002760[1]; + gUnk_030036C8 = 0; + gUnk_030039A0 = 0; + gUnk_0300248C = 0; + gUnk_030024E4 = 0; + DmaFill32(3, 0, gUnk_030035C0, 0x10); + DmaWait(3); + DmaFill32(3, 0, gUnk_03003A10, 0x10); + DmaWait(3); + gUnk_03006070 = 0; + gUnk_03002548 = 0; + DmaFill32(3, 0, gUnk_03002470, 0x10); + DmaWait(3); + DmaFill32(3, 0, gUnk_030068C0, 0x10); + DmaWait(3); + m4aSoundInit(); + m4aSoundMode(SOUND_MODE_DA_BIT_8 | SOUND_MODE_FREQ_15768 | (15 << SOUND_MODE_MASVOL_SHIFT) | (10 << SOUND_MODE_MAXCHN_SHIFT)); + m4aSoundMain(); + gUnk_030068D4 = 1; + sub_08152A18(); + sub_08159074(); + gUnk_03002488 = 0x400; + gUnk_03002540 = 0x06010000; + sub_08157168(); + DmaCopy32(3, IntrMain, &gUnk_030017F0, 0x200); + DmaWait(3); + INTR_VECTOR = &gUnk_030017F0; + REG_IE = INTR_FLAG_VBLANK; + REG_DISPSTAT = DISPSTAT_HBLANK_INTR | DISPSTAT_VBLANK_INTR; + + if ((RomHeaderMagic == 0x96) && (RomHeaderGameCode == 0x454B3842)) { + REG_IE |= INTR_FLAG_GAMEPAK; + } + + REG_IME = 1; + DmaFill32(3, 0, gUnk_030036B0, 0x14); + DmaWait(3); + DmaFill32(3, 0, gUnk_03002490, 0x50); + DmaWait(3); + gUnk_03002554 = 0; + gUnk_03002558 = 0; + MultiSioInit(0); + gUnk_0300607C = 0; + gUnk_030024E0 = 0; + gUnk_03002550 = 0; +} void sub_08151C54(void) { u32 ret; @@ -94,7 +247,7 @@ void sub_08151DC4(void) { DmaCopy32(3, gUnk_03002E70, (void*)REG_ADDR_WIN0H, 0xc); DmaCopy16(3, gUnk_030024E8, (void*)REG_ADDR_BLDCNT, 6); DmaCopy16(3, gUnk_03003680, (void*)REG_ADDR_BG0HOFS, 0x10); - DmaCopy32(3, gUnk_03002520, (void*)REG_ADDR_BG2PA, 0x20); + DmaCopy32(3, &gUnk_03002520, (void*)REG_ADDR_BG2PA, sizeof(gUnk_03002520)); if (gUnk_03002440 & 8) { REG_IE |= INTR_FLAG_HBLANK; @@ -155,13 +308,13 @@ void sub_08152098(void) { gUnk_03002440 &= ~8; if (!(gUnk_03002440 & 0x20)) { - if (gUnk_03002484 == gUnk_03002760) { - gUnk_03002484 = gUnk_03002760 + 0x280; - gUnk_03002EAC = gUnk_03002760; + if (gUnk_03002484 == gUnk_03002760[0]) { + gUnk_03002484 = gUnk_03002760[1]; + gUnk_03002EAC = gUnk_03002760[0]; } else { - gUnk_03002484 = gUnk_03002760; - gUnk_03002EAC = gUnk_03002760 + 0x280; + gUnk_03002484 = gUnk_03002760[0]; + gUnk_03002EAC = gUnk_03002760[1]; } } @@ -192,7 +345,7 @@ void sub_08152178(void) { CpuCopy32(gUnk_03002E70, (void*)REG_ADDR_WIN0H, 0xc); CpuCopy16(gUnk_030024E8, (void*)REG_ADDR_BLDCNT, 6); CpuCopy16(gUnk_03003680, (void*)REG_ADDR_BG0HOFS, 0x10); - CpuCopy32(gUnk_03002520, (void*)REG_ADDR_BG2PA, 0x20); + CpuCopy32(&gUnk_03002520, (void*)REG_ADDR_BG2PA, sizeof(gUnk_03002520)); if (gUnk_03002440 & 8) { REG_IE |= INTR_FLAG_HBLANK; @@ -466,13 +619,13 @@ void sub_08152968(void) { gUnk_03002440 &= ~8; if (!(gUnk_03002440 & 0x20)) { - if (gUnk_03002484 == &gUnk_03002760[0]) { - gUnk_03002484 = &gUnk_03002760[0x280]; - gUnk_03002EAC = &gUnk_03002760[0]; + if (gUnk_03002484 == gUnk_03002760[0]) { + gUnk_03002484 = gUnk_03002760[1]; + gUnk_03002EAC = gUnk_03002760[0]; } else { - gUnk_03002484 = &gUnk_03002760[0]; - gUnk_03002EAC = &gUnk_03002760[0x280]; + gUnk_03002484 = gUnk_03002760[0]; + gUnk_03002EAC = gUnk_03002760[1]; } }