diff options
Diffstat (limited to 'asm/main.s')
-rw-r--r-- | asm/main.s | 717 |
1 files changed, 717 insertions, 0 deletions
diff --git a/asm/main.s b/asm/main.s new file mode 100644 index 000000000..b16d392ab --- /dev/null +++ b/asm/main.s @@ -0,0 +1,717 @@ + thumb_func_start Main +Main: + push {r4-r7,lr} + mov r7, r8 + push {r7} + movs r0, 0xFF + bl RegisterRamReset + movs r1, 0xA0 + lsls r1, 19 + ldr r2, =0x00007fff + adds r0, r2, 0 + strh r0, [r1] + bl lcd_io_copy_queue_clean + ldr r1, =0x04000204 + ldr r3, =0x00004014 + adds r0, r3, 0 + strh r0, [r1] + bl init_keypad_data + bl init_irq_handler + bl m4aSoundInit + bl lcd_enable_vcount_irq_at_150px + bl sub_800E6D0 + bl sub_802F21C + bl flash_timeout_start_on_timer_2_when_flash_present + bl init_saveblock_ptrs_and_set_copyright_callback2 + bl sound_sources_off + bl dma3_transfer_queue_clear + bl gpu_init_bgs + bl fboxes_set_default_ptr + ldr r0, =0x02000000 + movs r1, 0xE0 + lsls r1, 9 + bl init_malloc + ldr r0, =0x03002700 + movs r4, 0 + strb r4, [r0] + ldr r0, =0x03005d88 + ldr r0, [r0] + cmp r0, 0x1 + beq _08000414 + movs r0, 0 + bl set_callback2 +_08000414: + ldr r2, =0x030022b4 + strb r4, [r2] + ldr r1, =0x03000000 + movs r3, 0xFC + lsls r3, 4 + adds r0, r3, 0 + strh r0, [r1] + ldr r7, =0x030022c0 + movs r0, 0 + mov r8, r0 + adds r6, r2, 0 +_0800042A: + bl load_keys + ldr r0, =0x03002700 + ldrb r0, [r0] + cmp r0, 0 + bne _08000454 + ldrh r1, [r7, 0x28] + movs r0, 0x1 + ands r0, r1 + cmp r0, 0 + beq _08000454 + movs r0, 0xE + ands r0, r1 + cmp r0, 0xE + bne _08000454 + bl rfu_REQ_stopMode + bl rfu_waitREQComplete + bl do_reset +_08000454: + bl sub_8087634 + cmp r0, 0x1 + bne _0800048C + strb r0, [r6] + bl call_callbacks_wrapper + movs r0, 0 + strb r0, [r6] + b _080004B2 + .align 2, 0 + .pool +_0800048C: + ldr r5, =0x030022b4 + movs r0, 0 + strb r0, [r5] + bl call_callbacks_wrapper + bl sub_80875C8 + adds r4, r0, 0 + cmp r4, 0x1 + bne _080004B2 + movs r0, 0 + strh r0, [r7, 0x2E] + bl copy_queue_clear + strb r4, [r5] + bl call_callbacks_wrapper + mov r2, r8 + strb r2, [r5] +_080004B2: + bl gametime_increment + bl sound_something + bl wait_for_vblank + b _0800042A + .align 2, 0 + .pool + thumb_func_end Main + + thumb_func_start call_callbacks_wrapper +call_callbacks_wrapper: @ 80004C4 + push {lr} + bl sub_800B40C + lsls r0, 24 + cmp r0, 0 + bne _080004D4 + bl call_callbacks +_080004D4: + pop {r0} + bx r0 + thumb_func_end call_callbacks_wrapper + + thumb_func_start init_saveblock_ptrs_and_set_copyright_callback2 +init_saveblock_ptrs_and_set_copyright_callback2: @ 80004D8 + push {lr} + ldr r2, =0x030022c0 + movs r0, 0 + str r0, [r2, 0x20] + ldr r1, =0x0203cf5c + str r0, [r1] + str r0, [r2, 0x24] + str r0, [r2] + ldr r0, =c2_copyright_1 + 1 + bl set_callback2 + ldr r1, =0x03005d90 + ldr r0, =0x02024a54 + str r0, [r1] + ldr r1, =0x03005d94 + ldr r0, =0x02029808 + str r0, [r1] + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end init_saveblock_ptrs_and_set_copyright_callback2 + + thumb_func_start call_callbacks +call_callbacks: @ 800051C + push {r4,lr} + ldr r4, =0x030022c0 + ldr r0, [r4] + cmp r0, 0 + beq _0800052A + bl _call_via_r0 +_0800052A: + ldr r0, [r4, 0x4] + cmp r0, 0 + beq _08000534 + bl _call_via_r0 +_08000534: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end call_callbacks + + thumb_func_start set_callback2 +set_callback2: @ 8000540 + ldr r1, =0x030022c0 + str r0, [r1, 0x4] + movs r0, 0x87 + lsls r0, 3 + adds r1, r0 + movs r0, 0 + strb r0, [r1] + bx lr + .align 2, 0 + .pool + thumb_func_end set_callback2 + + thumb_func_start start_timer1 +start_timer1: @ 8000554 + ldr r1, =0x04000106 + movs r0, 0x80 + strh r0, [r1] + bx lr + .align 2, 0 + .pool + thumb_func_end start_timer1 + + thumb_func_start set_rand_seed_and_trainer_id_hi +set_rand_seed_and_trainer_id_hi: @ 8000560 + push {r4,lr} + ldr r0, =0x04000104 + ldrh r4, [r0] + adds r0, r4, 0 + bl SeedRng + ldr r1, =0x04000106 + movs r0, 0 + strh r0, [r1] + ldr r0, =0x02020000 + strh r4, [r0] + pop {r4} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end set_rand_seed_and_trainer_id_hi + + thumb_func_start get_trainer_id_hi +get_trainer_id_hi: @ 8000588 + ldr r0, =0x02020000 + ldrh r0, [r0] + bx lr + .align 2, 0 + .pool + thumb_func_end get_trainer_id_hi + + thumb_func_start lcd_enable_vcount_irq_at_150px +lcd_enable_vcount_irq_at_150px: @ 8000594 + push {lr} + movs r0, 0x4 + bl lcd_io_get + movs r1, 0xFF + ands r1, r0 + movs r2, 0x96 + lsls r2, 8 + adds r0, r2, 0 + orrs r1, r0 + movs r0, 0x20 + orrs r1, r0 + movs r0, 0x4 + bl lcd_io_set + movs r0, 0x4 + bl enable_irqs + pop {r0} + bx r0 + thumb_func_end lcd_enable_vcount_irq_at_150px + + thumb_func_start init_keypad_data +init_keypad_data: @ 80005BC + ldr r1, =0x030026fc + movs r0, 0x5 + strh r0, [r1] + ldr r1, =0x030022b0 + movs r0, 0x28 + strh r0, [r1] + ldr r1, =0x030022c0 + movs r0, 0 + strh r0, [r1, 0x2C] + strh r0, [r1, 0x2E] + strh r0, [r1, 0x30] + strh r0, [r1, 0x28] + strh r0, [r1, 0x2A] + bx lr + .align 2, 0 + .pool + thumb_func_end init_keypad_data + + thumb_func_start load_keys +load_keys: @ 80005E4 + push {lr} + ldr r0, =0x04000130 + ldrh r1, [r0] + ldr r2, =0x000003ff + adds r0, r2, 0 + adds r3, r0, 0 + eors r3, r1 + ldr r1, =0x030022c0 + ldrh r2, [r1, 0x28] + adds r0, r3, 0 + bics r0, r2 + strh r0, [r1, 0x2A] + strh r0, [r1, 0x2E] + strh r0, [r1, 0x30] + adds r2, r1, 0 + cmp r3, 0 + beq _08000630 + ldrh r0, [r2, 0x2C] + cmp r0, r3 + bne _08000630 + ldrh r0, [r2, 0x32] + subs r0, 0x1 + strh r0, [r2, 0x32] + lsls r0, 16 + cmp r0, 0 + bne _08000636 + strh r3, [r2, 0x30] + ldr r0, =0x030026fc + b _08000632 + .align 2, 0 + .pool +_08000630: + ldr r0, =0x030022b0 +_08000632: + ldrh r0, [r0] + strh r0, [r2, 0x32] +_08000636: + strh r3, [r2, 0x28] + strh r3, [r2, 0x2C] + ldr r0, =0x03005d90 + ldr r0, [r0] + ldrb r0, [r0, 0x13] + cmp r0, 0x2 + bne _08000668 + ldrh r1, [r2, 0x2E] + movs r3, 0x80 + lsls r3, 2 + adds r0, r3, 0 + ands r0, r1 + cmp r0, 0 + beq _08000658 + movs r0, 0x1 + orrs r0, r1 + strh r0, [r2, 0x2E] +_08000658: + ldrh r1, [r2, 0x2C] + adds r0, r3, 0 + ands r0, r1 + cmp r0, 0 + beq _08000668 + movs r0, 0x1 + orrs r0, r1 + strh r0, [r2, 0x2C] +_08000668: + ldrh r1, [r2, 0x2E] + ldrh r0, [r2, 0x36] + ands r0, r1 + cmp r0, 0 + beq _08000676 + movs r0, 0x1 + strh r0, [r2, 0x34] +_08000676: + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end load_keys + + thumb_func_start init_irq_handler +init_irq_handler: @ 8000684 + push {r4,r5,lr} + ldr r5, =InterruptMain + ldr r4, =0x03002750 + ldr r3, =0x082e9548 + ldr r2, =0x03002710 + movs r1, 0xD +_08000690: + ldm r3!, {r0} + stm r2!, {r0} + subs r1, 0x1 + cmp r1, 0 + bge _08000690 + ldr r0, =0x040000d4 + str r5, [r0] + str r4, [r0, 0x4] + ldr r1, =0x84000200 + str r1, [r0, 0x8] + ldr r0, [r0, 0x8] + ldr r0, =0x03007ffc + str r4, [r0] + movs r0, 0 + bl SetVBlankCallback + movs r0, 0 + bl SetHBlankCallback + movs r0, 0 + bl set_serial_callback + ldr r1, =0x04000208 + movs r0, 0x1 + strh r0, [r1] + movs r0, 0x1 + bl enable_irqs + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end init_irq_handler + + thumb_func_start SetVBlankCallback +SetVBlankCallback: @ 80006F0 + ldr r1, =0x030022c0 + str r0, [r1, 0xC] + bx lr + .align 2, 0 + .pool + thumb_func_end SetVBlankCallback + + thumb_func_start SetHBlankCallback +SetHBlankCallback: @ 80006FC + ldr r1, =0x030022c0 + str r0, [r1, 0x10] + bx lr + .align 2, 0 + .pool + thumb_func_end SetHBlankCallback + + thumb_func_start SetVCountCallback +SetVCountCallback: @ 8000708 + ldr r1, =0x030022c0 + str r0, [r1, 0x14] + bx lr + .align 2, 0 + .pool + thumb_func_end SetVCountCallback + + thumb_func_start restore_serial_timer3_irq_handlers +restore_serial_timer3_irq_handlers: @ 8000714 + ldr r0, =0x03002710 + ldr r1, =irq_serial + 1 + str r1, [r0, 0x4] + ldr r1, =irq_timer3 + 1 + str r1, [r0, 0x8] + bx lr + .align 2, 0 + .pool + thumb_func_end restore_serial_timer3_irq_handlers + + thumb_func_start set_serial_callback +set_serial_callback: @ 800072C + ldr r1, =0x030022c0 + str r0, [r1, 0x18] + bx lr + .align 2, 0 + .pool + thumb_func_end set_serial_callback + + thumb_func_start irq_vblank +irq_vblank: @ 8000738 + push {r4,lr} + ldr r0, =0x030030fc + ldrb r0, [r0] + cmp r0, 0 + beq _0800074C + bl rfu_syncVBlank__ + b _08000758 + .align 2, 0 + .pool +_0800074C: + ldr r0, =0x03002748 + ldrb r0, [r0] + cmp r0, 0 + bne _08000758 + bl sub_800B9B8 +_08000758: + ldr r0, =0x030022c0 + ldr r1, [r0, 0x20] + adds r1, 0x1 + str r1, [r0, 0x20] + ldr r1, =0x0203cf5c + ldr r1, [r1] + adds r4, r0, 0 + cmp r1, 0 + beq _08000778 + ldr r2, [r1] + movs r0, 0x2 + negs r0, r0 + cmp r2, r0 + bhi _08000778 + adds r0, r2, 0x1 + str r0, [r1] +_08000778: + ldr r0, [r4, 0xC] + cmp r0, 0 + beq _08000782 + bl _call_via_r0 +_08000782: + ldr r0, [r4, 0x24] + adds r0, 0x1 + str r0, [r4, 0x24] + bl lcd_io_copy_queue_process + bl dma_transfer_queue_process + ldr r1, =0x03002f50 + ldr r0, =0x03006380 + ldrb r0, [r0, 0x4] + strb r0, [r1] + bl m4aSoundMain + bl sub_8033648 + ldr r1, =0x00000439 + adds r0, r4, r1 + ldrb r1, [r0] + movs r0, 0x2 + ands r0, r1 + cmp r0, 0 + beq _080007BA + ldr r0, =0x02022fec + ldr r0, [r0] + ldr r1, =0x013f0102 + ands r0, r1 + cmp r0, 0 + bne _080007BE +_080007BA: + bl GenerateRandomNumber +_080007BE: + bl sub_800E174 + ldr r2, =0x03007ff8 + ldrh r0, [r2] + movs r1, 0x1 + orrs r0, r1 + strh r0, [r2] + ldr r0, =0x030022c0 + ldrh r2, [r0, 0x1C] + ldrh r3, [r0, 0x1C] + orrs r1, r2 + strh r1, [r0, 0x1C] + pop {r4} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end irq_vblank + + thumb_func_start flash_timeout_start_on_timer_2 +flash_timeout_start_on_timer_2: @ 8000800 + push {lr} + ldr r1, =0x0300272c + movs r0, 0x2 + bl SetFlashTimerIntr + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end flash_timeout_start_on_timer_2 + + thumb_func_start irq_hblank +irq_hblank: @ 8000814 + push {r4,lr} + ldr r4, =0x030022c0 + ldr r0, [r4, 0x10] + cmp r0, 0 + beq _08000822 + bl _call_via_r0 +_08000822: + ldr r2, =0x03007ff8 + ldrh r0, [r2] + movs r1, 0x2 + orrs r0, r1 + strh r0, [r2] + ldrh r0, [r4, 0x1C] + ldrh r2, [r4, 0x1C] + orrs r1, r0 + strh r1, [r4, 0x1C] + pop {r4} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end irq_hblank + + thumb_func_start irq_vcount +irq_vcount: @ 8000844 + push {r4,lr} + ldr r4, =0x030022c0 + ldr r0, [r4, 0x14] + cmp r0, 0 + beq _08000852 + bl _call_via_r0 +_08000852: + bl SoundVSync_rev01 + ldr r2, =0x03007ff8 + ldrh r0, [r2] + movs r1, 0x4 + orrs r0, r1 + strh r0, [r2] + ldrh r0, [r4, 0x1C] + ldrh r2, [r4, 0x1C] + orrs r1, r0 + strh r1, [r4, 0x1C] + pop {r4} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end irq_vcount + + thumb_func_start irq_serial +irq_serial: @ 8000878 + push {r4,lr} + ldr r4, =0x030022c0 + ldr r0, [r4, 0x18] + cmp r0, 0 + beq _08000886 + bl _call_via_r0 +_08000886: + ldr r2, =0x03007ff8 + ldrh r0, [r2] + movs r1, 0x80 + orrs r0, r1 + strh r0, [r2] + ldrh r0, [r4, 0x1C] + ldrh r2, [r4, 0x1C] + orrs r1, r0 + strh r1, [r4, 0x1C] + pop {r4} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end irq_serial + + thumb_func_start irq_other +irq_other: @ 80008A8 + bx lr + thumb_func_end irq_other + + thumb_func_start wait_for_vblank +wait_for_vblank: @ 80008AC + push {lr} + ldr r2, =0x030022c0 + ldrh r1, [r2, 0x1C] + ldr r0, =0x0000fffe + ands r0, r1 + ldrh r1, [r2, 0x1C] + strh r0, [r2, 0x1C] + ldrh r1, [r2, 0x1C] + movs r0, 0x1 + ands r0, r1 + cmp r0, 0 + bne _080008D0 + movs r3, 0x1 +_080008C6: + ldrh r1, [r2, 0x1C] + adds r0, r3, 0 + ands r0, r1 + cmp r0, 0 + beq _080008C6 +_080008D0: + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end wait_for_vblank + + thumb_func_start sub_80008DC +sub_80008DC: @ 80008DC + ldr r1, =0x0203cf5c + str r0, [r1] + bx lr + .align 2, 0 + .pool + thumb_func_end sub_80008DC + + thumb_func_start sub_80008E8 +sub_80008E8: @ 80008E8 + ldr r1, =0x0203cf5c + movs r0, 0 + str r0, [r1] + bx lr + .align 2, 0 + .pool + thumb_func_end sub_80008E8 + + thumb_func_start do_reset +do_reset: @ 80008F4 + push {r4,lr} + ldr r1, =0x04000208 + movs r0, 0 + strh r0, [r1] + bl SoundVSyncOff_rev01 + bl remove_some_task + ldr r1, =0x040000bc + ldrh r2, [r1, 0xA] + ldr r3, =0x0000c5ff + adds r0, r3, 0 + ands r0, r2 + strh r0, [r1, 0xA] + ldrh r4, [r1, 0xA] + ldr r2, =0x00007fff + adds r0, r2, 0 + ands r0, r4 + strh r0, [r1, 0xA] + ldrh r0, [r1, 0xA] + adds r1, 0xC + ldrh r4, [r1, 0xA] + adds r0, r3, 0 + ands r0, r4 + strh r0, [r1, 0xA] + ldrh r4, [r1, 0xA] + adds r0, r2, 0 + ands r0, r4 + strh r0, [r1, 0xA] + ldrh r0, [r1, 0xA] + ldr r0, =0x040000d4 + ldrh r1, [r0, 0xA] + ands r3, r1 + strh r3, [r0, 0xA] + ldrh r1, [r0, 0xA] + ands r2, r1 + strh r2, [r0, 0xA] + ldrh r0, [r0, 0xA] + bl sub_82E2168 + movs r0, 0xFF + bl SoftReset + pop {r4} + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end do_reset + + thumb_func_start sub_8000964 +sub_8000964: @ 8000964 + push {lr} + sub sp, 0x4 + mov r1, sp + movs r0, 0 + strh r0, [r1] + ldr r1, =0x03007330 + ldr r2, =0x01000034 + mov r0, sp + bl CpuSet + add sp, 0x4 + pop {r0} + bx r0 + .align 2, 0 + .pool + thumb_func_end sub_8000964 |