summaryrefslogtreecommitdiff
path: root/asm/main.s
diff options
context:
space:
mode:
Diffstat (limited to 'asm/main.s')
-rw-r--r--asm/main.s717
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