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