finish decompiling main.c (#17)

* partially decompile battle_ai.c up to tai60_unk

* nonmatching tai60_unk

* decompile more of battle_ai.c

* formatting

* finish porting battle_ai.c

* formatting

* decompile up to nonmatching VBlankIntr

* finish decompiling main.c

* formatting
This commit is contained in:
ProjectRevoTPP 2017-02-15 16:25:21 -05:00 committed by YamaArashi
parent 79c7922c23
commit 9a80b550f0
24 changed files with 288 additions and 663 deletions

View File

@ -516,7 +516,7 @@ _0807FBBE:
ldrb r0, [r0]
cmp r0, 0
beq _0807FC14
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _0807FC14
@ -1122,7 +1122,7 @@ _08080126:
bne _0808016A
b _080804F8
_0808016A:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _08080174
@ -3334,7 +3334,7 @@ sub_80814B0: @ 80814B0
ldrb r0, [r0]
cmp r0, 0
beq _080814E4
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _080814E4
@ -4706,7 +4706,7 @@ sub_8081F94: @ 8081F94
ldrb r0, [r0]
cmp r0, 0
beq _08081FB8
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08081FB8
@ -4852,7 +4852,7 @@ _080820EC:
ldrb r0, [r0]
cmp r0, 0
beq _0808218C
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _0808218C
@ -4968,7 +4968,7 @@ _080821D4:
ldrb r0, [r0]
cmp r0, 0
beq _08082254
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08082254
@ -6250,7 +6250,7 @@ sub_8082D28: @ 8082D28
lsls r0, 24
lsrs r1, r0, 24
_08082D3C:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08082DCC

View File

@ -2172,7 +2172,7 @@ sub_80B360C: @ 80B360C
movs r5, 0x1
eors r0, r5
bl sub_813C2A0
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _080B36B2
@ -2512,7 +2512,7 @@ _080B391C:
thumb_func_start sub_80B3924
sub_80B3924: @ 80B3924
push {lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _080B3940
@ -2552,7 +2552,7 @@ sub_80B3968: @ 80B3968
ldr r2, =0x00002211
adds r0, r2, 0
strh r0, [r1]
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _080B3994
@ -2661,7 +2661,7 @@ _080B3A62:
ldrb r0, [r0]
cmp r0, 0
beq _080B3AA6
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _080B3AA0
@ -2752,7 +2752,7 @@ _080B3B20:
beq _080B3B9E
b _080B3BB8
_080B3B2A:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _080B3B40
@ -2825,7 +2825,7 @@ _080B3BB8:
thumb_func_start sub_80B3BC4
sub_80B3BC4: @ 80B3BC4
push {lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _080B3BD6

View File

@ -147,7 +147,7 @@ sub_80FC5DC: @ 80FC5DC
ldr r1, =gUnknown_02039F2A
movs r0, 0x1
strb r0, [r1]
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0x1
bne _080FC60C

View File

@ -128,7 +128,7 @@ IntrMain_FoundIntr:
bic r3, r3, PSR_I_BIT | PSR_F_BIT | PSR_MODE_MASK
orr r3, r3, PSR_SYS_MODE
msr cpsr_cf, r3
ldr r1, =gUnknown_03002710
ldr r1, =gIntrTable
add r1, r1, r12
ldr r0, [r1]
stmdb sp!, {lr}

View File

@ -756,7 +756,7 @@ _0813E0F0:
b _0813E1C8
.pool
_0813E160:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _0813E174
@ -3359,7 +3359,7 @@ _0813FA24:
beq _0813FA32
b _0813FCC4
_0813FA32:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _0813FA3E

View File

@ -387,7 +387,7 @@ _08009726:
thumb_func_start sub_8009734
sub_8009734: @ 8009734
push {r4-r6,lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r4, [r0]
cmp r4, 0
bne _080097A8
@ -451,7 +451,7 @@ sub_80097E8: @ 80097E8
ldr r0, =gUnknown_03003124
movs r4, 0
strb r4, [r0]
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _080097FC
@ -1278,7 +1278,7 @@ _08009F06:
thumb_func_start sub_8009F18
sub_8009F18: @ 8009F18
push {lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08009F26
@ -1295,7 +1295,7 @@ _08009F26:
thumb_func_start sub_8009F3C
sub_8009F3C: @ 8009F3C
push {lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08009F50
@ -1336,7 +1336,7 @@ _08009F80:
thumb_func_start sub_8009F8C
sub_8009F8C: @ 8009F8C
push {lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r1, [r0]
cmp r1, 0
beq _08009FA0
@ -1355,7 +1355,7 @@ _08009FA4:
thumb_func_start sub_8009FAC
sub_8009FAC: @ 8009FAC
push {lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r1, [r0]
cmp r1, 0
beq _08009FC0
@ -1374,7 +1374,7 @@ _08009FC4:
thumb_func_start sub_8009FCC
sub_8009FCC: @ 8009FCC
push {lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _08009FEC
@ -1934,7 +1934,7 @@ sub_800A418: @ 800A418
ldr r1, =gUnknown_020223C0
movs r0, 0
str r0, [r1]
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _0800A438
@ -1972,7 +1972,7 @@ sub_800A458: @ 800A458
thumb_func_start link_get_multiplayer_id
link_get_multiplayer_id: @ 800A468
push {lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0x1
beq _0800A484
@ -2014,7 +2014,7 @@ link_0800A448: @ 800A4AC
adds r3, r1, 0
lsls r2, 16
lsrs r1, r2, 16
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0x1
beq _0800A4C8
@ -2038,7 +2038,7 @@ sub_800A4D8: @ 800A4D8
lsls r0, 24
lsrs r1, r0, 24
adds r2, r1, 0
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0x1
bne _0800A4F8
@ -2071,7 +2071,7 @@ _0800A514:
thumb_func_start sub_800A520
sub_800A520: @ 800A520
push {lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0x1
bne _0800A538
@ -2098,7 +2098,7 @@ _0800A546:
thumb_func_start sub_800A550
sub_800A550: @ 800A550
push {lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0x1
beq _0800A57C
@ -2129,7 +2129,7 @@ sub_800A588: @ 800A588
push {lr}
lsls r0, 24
lsrs r1, r0, 24
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0x1
bne _0800A5A4
@ -2151,7 +2151,7 @@ _0800A5AC:
thumb_func_start sub_800A5B4
sub_800A5B4: @ 800A5B4
push {r4,lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0x1
bne _0800A5D4
@ -2186,7 +2186,7 @@ sub_800A5EC: @ 800A5EC
push {lr}
lsls r0, 24
lsrs r1, r0, 24
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0x1
bne _0800A608
@ -2932,7 +2932,7 @@ sub_800ABAC: @ 800ABAC
thumb_func_start sub_800ABBC
sub_800ABBC: @ 800ABBC
push {lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _0800ABDC
@ -2965,7 +2965,7 @@ sub_800ABF4: @ 800ABF4
push {lr}
lsls r0, 16
lsrs r3, r0, 16
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0x1
bne _0800AC0C
@ -2992,7 +2992,7 @@ _0800AC20:
thumb_func_start sub_800AC34
sub_800AC34: @ 800AC34
push {lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0x1
bne _0800AC48
@ -3090,7 +3090,7 @@ _0800ACF4:
thumb_func_start sub_800AD10
sub_800AD10: @ 800AD10
push {lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0x1
bne _0800AD24
@ -3194,7 +3194,7 @@ _0800ADDA:
thumb_func_start sub_800ADF8
sub_800ADF8: @ 800ADF8
push {lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0x1
bne _0800AE0C
@ -3361,7 +3361,7 @@ c2_800ACD4: @ 800AF30
bl rboxid_80040B8
bl ResetTasks
bl remove_some_task
ldr r1, =gUnknown_030030FC
ldr r1, =gLinkVSyncDisabled
ldrb r0, [r1]
cmp r0, 0
beq _0800AF8C
@ -3615,7 +3615,7 @@ _0800B20C:
bl audio_play
b _0800B260
_0800B214:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0x2
bne _0800B244
@ -3654,7 +3654,7 @@ _0800B260:
ldrb r1, [r1]
cmp r1, 0xA0
bne _0800B2D0
ldr r4, =gUnknown_030030FC
ldr r4, =gLinkVSyncDisabled
ldrb r2, [r4]
cmp r2, 0x1
bne _0800B2A8
@ -3856,7 +3856,7 @@ _0800B3F4:
thumb_func_start HandleLinkConnection
HandleLinkConnection: @ 800B40C
push {r4,r5,lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _0800B45C
@ -3911,7 +3911,7 @@ sub_800B488: @ 800B488
ldrb r0, [r0]
cmp r0, 0
bne _0800B498
ldr r1, =gUnknown_030030FC
ldr r1, =gLinkVSyncDisabled
movs r0, 0x1
strb r0, [r1]
_0800B498:
@ -3927,7 +3927,7 @@ sub_800B4A4: @ 800B4A4
ldrb r1, [r0]
cmp r1, 0
bne _0800B4B2
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
strb r1, [r0]
_0800B4B2:
pop {r0}
@ -3942,7 +3942,7 @@ sub_800B4C0: @ 800B4C0
ldrb r1, [r0]
cmp r1, 0
bne _0800B4CE
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
strb r1, [r0]
_0800B4CE:
pop {r0}
@ -3953,7 +3953,7 @@ _0800B4CE:
thumb_func_start sub_800B4DC
sub_800B4DC: @ 800B4DC
push {lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _0800B4FC
@ -3987,7 +3987,7 @@ _0800B514:
thumb_func_start sub_800B518
sub_800B518: @ 800B518
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
bx lr
.pool
@ -9900,7 +9900,7 @@ sub_800E3A8: @ 800E3A8
mov r5, r8
push {r5-r7}
sub sp, 0x20
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _0800E3BE
@ -10274,7 +10274,7 @@ _0800E64A:
thumb_func_start sub_800E6D0
sub_800E6D0: @ 800E6D0
push {r4-r6,lr}
ldr r4, =gUnknown_03002710
ldr r4, =gIntrTable
ldr r5, [r4, 0x4]
ldr r6, [r4, 0x8]
bl sub_800E700
@ -10298,7 +10298,7 @@ sub_800E700: @ 800E700
push {r4,lr}
ldr r0, =gUnknown_03004190
ldr r1, =0x00000e64
ldr r4, =gUnknown_03002714
ldr r4, =gIntrTable + 0x4
adds r2, r4, 0
movs r3, 0x1
bl rfu_initializeAPI
@ -14983,7 +14983,7 @@ sub_8010DB4: @ 8010DB4
cmp r0, 0
beq _08010DE4
_08010DDE:
ldr r1, =gUnknown_030030FC
ldr r1, =gLinkVSyncDisabled
movs r0, 0x2
strb r0, [r1]
_08010DE4:
@ -16561,13 +16561,13 @@ sub_8011AB0: @ 8011AB0
.pool
thumb_func_end sub_8011AB0
thumb_func_start rfu_syncVBlank__
rfu_syncVBlank__: @ 8011ABC
thumb_func_start LinkVSync
LinkVSync: @ 8011ABC
push {lr}
bl rfu_syncVBlank_
pop {r0}
bx r0
thumb_func_end rfu_syncVBlank__
thumb_func_end LinkVSync
thumb_func_start sub_8011AC8
sub_8011AC8: @ 8011AC8
@ -39668,7 +39668,7 @@ sub_801DD98: @ 801DD98
bl Alloc
str r0, [r4]
bl sub_801DDD0
ldr r1, =gUnknown_030022B0
ldr r1, =gKeyRepeatStartDelay
movs r0, 0x14
strh r0, [r1]
movs r0, 0
@ -45490,7 +45490,7 @@ sub_8020C70: @ 8020C70
ldrb r0, [r0]
cmp r0, 0
beq _08020C8E
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _08020CAC

View File

@ -1,505 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start EnableVCountIntrAtLine150
@ void EnableVCountIntrAtLine150()
EnableVCountIntrAtLine150: @ 8000594
push {lr}
movs r0, 0x4
bl GetGpuReg
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 SetGpuReg
movs r0, 0x4
bl EnableInterrupts
pop {r0}
bx r0
thumb_func_end EnableVCountIntrAtLine150
thumb_func_start InitKeys
@ void InitKeypadData()
InitKeys: @ 80005BC
ldr r1, =gUnknown_030026FC
movs r0, 0x5
strh r0, [r1]
ldr r1, =gUnknown_030022B0
movs r0, 0x28
strh r0, [r1]
ldr r1, =gMain
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
.pool
thumb_func_end InitKeys
thumb_func_start ReadKeys
@ void ReadKeypad()
ReadKeys: @ 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, =gMain
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, =gUnknown_030026FC
b _08000632
.pool
_08000630:
ldr r0, =gUnknown_030022B0
_08000632:
ldrh r0, [r0]
strh r0, [r2, 0x32]
_08000636:
strh r3, [r2, 0x28]
strh r3, [r2, 0x2C]
ldr r0, =gSaveBlock2Ptr
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
.pool
thumb_func_end ReadKeys
thumb_func_start InitIntrHandlers
@ void InitIntrHandlers()
InitIntrHandlers: @ 8000684
push {r4,r5,lr}
ldr r5, =IntrMain
ldr r4, =gUnknown_03002750
ldr r3, =gIntrTableTemplate
ldr r2, =gUnknown_03002710
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, =gUnknown_03007FFC
str r4, [r0]
movs r0, 0
bl SetVBlankCallback
movs r0, 0
bl SetHBlankCallback
movs r0, 0
bl SetSerialCallback
ldr r1, =0x04000208
movs r0, 0x1
strh r0, [r1]
movs r0, 0x1
bl EnableInterrupts
pop {r4,r5}
pop {r0}
bx r0
.pool
thumb_func_end InitIntrHandlers
thumb_func_start SetVBlankCallback
@ void SetVBlankCallback(void ( *func)())
SetVBlankCallback: @ 80006F0
ldr r1, =gMain
str r0, [r1, 0xC]
bx lr
.pool
thumb_func_end SetVBlankCallback
thumb_func_start SetHBlankCallback
@ void SetHBlankCallback(void ( *func)())
SetHBlankCallback: @ 80006FC
ldr r1, =gMain
str r0, [r1, 0x10]
bx lr
.pool
thumb_func_end SetHBlankCallback
thumb_func_start SetVCountCallback
@ void SetVCountCallback(void ( *func)())
SetVCountCallback: @ 8000708
ldr r1, =gMain
str r0, [r1, 0x14]
bx lr
.pool
thumb_func_end SetVCountCallback
thumb_func_start RestoreSerialTimer3IntrHandlers
@ void RestoreSerialTimer3IntrHandlers()
RestoreSerialTimer3IntrHandlers: @ 8000714
ldr r0, =gUnknown_03002710
ldr r1, =SerialIntr
str r1, [r0, 0x4]
ldr r1, =Timer3Intr
str r1, [r0, 0x8]
bx lr
.pool
thumb_func_end RestoreSerialTimer3IntrHandlers
thumb_func_start SetSerialCallback
@ void SetSerialCallback(void ( *func)())
SetSerialCallback: @ 800072C
ldr r1, =gMain
str r0, [r1, 0x18]
bx lr
.pool
thumb_func_end SetSerialCallback
thumb_func_start VBlankIntr
@ void VBlankIntr()
VBlankIntr: @ 8000738
push {r4,lr}
ldr r0, =gUnknown_030030FC
ldrb r0, [r0]
cmp r0, 0
beq _0800074C
bl rfu_syncVBlank__
b _08000758
.pool
_0800074C:
ldr r0, =gUnknown_03002748
ldrb r0, [r0]
cmp r0, 0
bne _08000758
bl sub_800B9B8
_08000758:
ldr r0, =gMain
ldr r1, [r0, 0x20]
adds r1, 0x1
str r1, [r0, 0x20]
ldr r1, =gUnknown_0203CF5C
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 CopyBufferedValuesToGpuRegs
bl ProcessDma3Requests
ldr r1, =gUnknown_03002F50
ldr r0, =gSoundInfo
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, =gBattleTypeFlags
ldr r0, [r0]
ldr r1, =0x013f0102
ands r0, r1
cmp r0, 0
bne _080007BE
_080007BA:
bl Random
_080007BE:
bl sub_800E174
ldr r2, =gUnknown_03007FF8
ldrh r0, [r2]
movs r1, 0x1
orrs r0, r1
strh r0, [r2]
ldr r0, =gMain
ldrh r2, [r0, 0x1C]
ldrh r3, [r0, 0x1C]
orrs r1, r2
strh r1, [r0, 0x1C]
pop {r4}
pop {r0}
bx r0
.pool
thumb_func_end VBlankIntr
thumb_func_start StartFlashMemoryTimer
@ void StartFlashMemoryTimer()
StartFlashMemoryTimer: @ 8000800
push {lr}
ldr r1, =gUnknown_0300272C
movs r0, 0x2
bl SetFlashTimerIntr
pop {r0}
bx r0
.pool
thumb_func_end StartFlashMemoryTimer
thumb_func_start HBlankIntr
@ void HBlankIntr()
HBlankIntr: @ 8000814
push {r4,lr}
ldr r4, =gMain
ldr r0, [r4, 0x10]
cmp r0, 0
beq _08000822
bl _call_via_r0
_08000822:
ldr r2, =gUnknown_03007FF8
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
.pool
thumb_func_end HBlankIntr
thumb_func_start VCountIntr
@ void VCountIntr()
VCountIntr: @ 8000844
push {r4,lr}
ldr r4, =gMain
ldr r0, [r4, 0x14]
cmp r0, 0
beq _08000852
bl _call_via_r0
_08000852:
bl m4aSoundVSync
ldr r2, =gUnknown_03007FF8
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
.pool
thumb_func_end VCountIntr
thumb_func_start SerialIntr
@ void SerialIntr()
SerialIntr: @ 8000878
push {r4,lr}
ldr r4, =gMain
ldr r0, [r4, 0x18]
cmp r0, 0
beq _08000886
bl _call_via_r0
_08000886:
ldr r2, =gUnknown_03007FF8
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
.pool
thumb_func_end SerialIntr
thumb_func_start IntrDummy
@ void IntrDummy()
IntrDummy: @ 80008A8
bx lr
thumb_func_end IntrDummy
thumb_func_start WaitForVBlank
@ void WaitForVBlankIntr()
WaitForVBlank: @ 80008AC
push {lr}
ldr r2, =gMain
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
.pool
thumb_func_end WaitForVBlank
thumb_func_start sub_80008DC
sub_80008DC: @ 80008DC
ldr r1, =gUnknown_0203CF5C
str r0, [r1]
bx lr
.pool
thumb_func_end sub_80008DC
thumb_func_start sub_80008E8
sub_80008E8: @ 80008E8
ldr r1, =gUnknown_0203CF5C
movs r0, 0
str r0, [r1]
bx lr
.pool
thumb_func_end sub_80008E8
thumb_func_start DoSoftReset
@ void Reset()
DoSoftReset: @ 80008F4
push {r4,lr}
ldr r1, =0x04000208
movs r0, 0
strh r0, [r1]
bl m4aSoundVSyncOff
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 SiiRtcProtect
movs r0, 0xFF
bl SoftReset
pop {r4}
pop {r0}
bx r0
.pool
thumb_func_end DoSoftReset
thumb_func_start ClearPokemonCrySongs
ClearPokemonCrySongs: @ 8000964
push {lr}
sub sp, 0x4
mov r1, sp
movs r0, 0
strh r0, [r1]
ldr r1, =gPokemonCrySongs
ldr r2, =0x01000034
mov r0, sp
bl CpuSet
add sp, 0x4
pop {r0}
bx r0
.pool
thumb_func_end ClearPokemonCrySongs
.align 2, 0 @ Don't pad with nop.

View File

@ -209,7 +209,7 @@ choose_name_or_words_screen_setup: @ 80E2EA8
strh r0, [r1]
_080E2F2C:
ldr r0, [r5]
ldr r4, =gUnknown_030022B0
ldr r4, =gKeyRepeatStartDelay
ldrh r1, [r4]
ldr r2, =0x00001e25
adds r0, r2

View File

@ -295,7 +295,7 @@ sub_8145588: @ 8145588
thumb_func_start sub_81455A8
sub_81455A8: @ 81455A8
push {r4,lr}
ldr r3, =gUnknown_03002F50
ldr r3, =gPcmDmaCounter
movs r0, 0
ldrsb r0, [r3, r0]
cmp r0, 0x1

View File

@ -621,7 +621,7 @@ _080E726C:
bne _080E730A
movs r0, 0x4
strh r0, [r5]
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _080E7296
@ -664,7 +664,7 @@ _080E72C0:
ldr r0, [r0]
bl Free
bl sub_808729C
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _080E72F8
@ -2393,7 +2393,7 @@ _080E80C0:
lsls r0, 24
cmp r0, 0
bne _080E810A
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _080E80E8

View File

@ -14,7 +14,7 @@ battle_wireless_setup_if_required_maybe: @ 8032654
ands r0, r1
cmp r0, 0
beq _08032686
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _0803266E
@ -1675,7 +1675,7 @@ _080334E0:
adds r0, 0x1
b _0803363E
_080334E6:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08033504

View File

@ -3395,7 +3395,7 @@ c2_8056854: @ 8086140
ldr r0, =c1_link_related
bl set_callback1
bl sub_8086C2C
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08086174
@ -3586,7 +3586,7 @@ sub_808631C: @ 808631C
bne _0808632E
bl sub_80097E8
_0808632E:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08086348
@ -3768,7 +3768,7 @@ _080864DA:
bl cur_mapheader_run_tileset_funcs_after_some_cpuset
b _08086506
_080864E0:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08086506
@ -4056,7 +4056,7 @@ _08086766:
bl cur_mapheader_run_tileset_funcs_after_some_cpuset
b _08086792
_0808676C:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08086792
@ -4565,7 +4565,7 @@ _08086BCA:
thumb_func_start c1_link_related
c1_link_related: @ 8086BD8
push {r4,lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08086BF2
@ -4631,7 +4631,7 @@ c1_link_related_func_set: @ 8086C50
thumb_func_start sub_8086C64
sub_8086C64: @ 8086C64
push {lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08086C82
@ -5029,7 +5029,7 @@ _08086FC0:
movs r0, 0x11
strh r0, [r1]
_08086FC6:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08086FFC
@ -5926,7 +5926,7 @@ _08087666:
thumb_func_start sub_808766C
sub_808766C: @ 808766C
push {lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _08087688
@ -5946,7 +5946,7 @@ _0808768A:
thumb_func_start sub_8087690
sub_8087690: @ 8087690
push {lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _080876B0

View File

@ -271,7 +271,7 @@ _080A955C:
ldrb r0, [r0]
movs r1, 0
bl sub_8059CB4
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _080A95D2

View File

@ -11823,7 +11823,7 @@ _0813B790:
b _0813B7C6
.pool
_0813B7A8:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _0813B7B4

View File

@ -4091,7 +4091,7 @@ _0803703C:
movs r0, 0x1
strb r0, [r1]
_08037068:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _08037072
@ -4154,7 +4154,7 @@ _080370D8:
ldr r0, =gUnknown_02024332
strb r6, [r0]
_080370EE:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _080370F8
@ -4559,7 +4559,7 @@ _080374E0:
movs r0, 0x1
strb r0, [r1]
_0803750C:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08037518
@ -4644,7 +4644,7 @@ _08037530:
movs r0, 0x2
strb r0, [r1]
_080375C4:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _080375CE
@ -5365,7 +5365,7 @@ _08037C64:
ldrb r0, [r5]
adds r0, 0x1
strb r0, [r5]
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08037C98
@ -5376,7 +5376,7 @@ _08037C98:
bl sub_800AC34
b _08037D0A
_08037C9E:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08037CE4
@ -5566,7 +5566,7 @@ _08037E64:
movs r0, 0x1
strb r0, [r1]
_08037E90:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _08037E9A
@ -5618,7 +5618,7 @@ _08037EBE:
adds r0, 0x1
strb r0, [r1]
_08037F02:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _08037F0C
@ -7734,7 +7734,7 @@ _0803914C:
bne _080391C6
b _08039172
_08039166:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _08039172
@ -7757,7 +7757,7 @@ _08039184:
adds r3, r2, 0
cmp r0, 0
beq _080391A6
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _080391A6
@ -8210,7 +8210,7 @@ _080395DA:
ands r0, r1
cmp r0, 0
beq _080395F6
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _080395F6
@ -8231,7 +8231,7 @@ _08039610:
adds r3, r2, 0
cmp r0, 0
beq _08039634
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _08039634
@ -64531,7 +64531,7 @@ _080586E8:
thumb_func_start sub_80586F8
sub_80586F8: @ 80586F8
push {lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _0805875C
@ -64615,7 +64615,7 @@ sub_80587B0: @ 80587B0
lsls r0, 24
cmp r0, 0
beq _08058832
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _080587F0

View File

@ -1866,7 +1866,7 @@ sub_80C7E98: @ 80C7E98
adds r1, 0x10
movs r2, 0x8
bl sub_80D2A90
ldr r1, =gUnknown_030022B0
ldr r1, =gKeyRepeatStartDelay
movs r0, 0x14
strh r0, [r1]
bl clear_scheduled_bg_copies_to_vram

View File

@ -23265,7 +23265,7 @@ _08164D14:
ldrb r0, [r0]
cmp r0, 0
beq _08164DB0
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _08164DB0
@ -23303,7 +23303,7 @@ _08164DB6:
thumb_func_start sub_8164DCC
sub_8164DCC: @ 8164DCC
push {lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08164DDA
@ -26046,7 +26046,7 @@ _08166468:
bne _08166556
b _0816653C
_08166474:
ldr r1, =gUnknown_030022B0
ldr r1, =gKeyRepeatStartDelay
movs r0, 0x14
strh r0, [r1]
bl sub_8167420

View File

@ -34484,7 +34484,7 @@ sub_81CCFD8: @ 81CCFD8
adds r0, r4, r1
bl sub_81D1ED4
bl sub_81CD970
ldr r1, =gUnknown_030022B0
ldr r1, =gKeyRepeatStartDelay
movs r0, 0x14
strh r0, [r1]
ldr r0, =0x00006304
@ -34515,7 +34515,7 @@ sub_81CD024: @ 81CD024
adds r0, r4, r1
bl sub_81D1ED4
bl sub_81CD9F8
ldr r1, =gUnknown_030022B0
ldr r1, =gKeyRepeatStartDelay
movs r0, 0x14
strh r0, [r1]
ldr r0, =0x00006304
@ -40982,10 +40982,10 @@ sub_81D0450: @ 81D0450
adds r1, 0x98
ldr r0, =sub_81D04C4
str r0, [r1]
ldr r1, =gUnknown_030026FC
ldr r1, =gKeyRepeatContinueDelay
movs r0, 0x3
strh r0, [r1]
ldr r1, =gUnknown_030022B0
ldr r1, =gKeyRepeatStartDelay
movs r0, 0xA
strh r0, [r1]
movs r0, 0x1
@ -50412,7 +50412,7 @@ sub_81D4D50: @ 81D4D50
strh r0, [r1]
movs r0, 0
strh r0, [r4]
ldr r1, =gUnknown_03002710
ldr r1, =gIntrTable
ldr r0, =sub_81D3FAC
str r0, [r1, 0x4]
ldr r0, =sub_81D3F9C

View File

@ -2092,7 +2092,7 @@ _080A05AC:
movs r2, 0x10
movs r3, 0
bl pal_fade_maybe
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _080A0620

View File

@ -135,7 +135,7 @@ _08077258:
thumb_func_start sub_8077260
sub_8077260: @ 8077260
push {lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08077280
@ -409,7 +409,7 @@ _080774B2:
ldr r0, [r0]
adds r0, 0xA8
strb r2, [r0]
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08077528
@ -531,7 +531,7 @@ _08077600:
ldr r0, [r0]
adds r0, 0xA8
strb r2, [r0]
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
bne _0807762A
@ -543,7 +543,7 @@ _0807762A:
b _08077B46
.pool
_08077648:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08077680
@ -1182,7 +1182,7 @@ _08077C28:
b _080780D8
.pool
_08077C3C:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08077C50
@ -1780,7 +1780,7 @@ sub_807816C: @ 807816C
adds r0, 0x7E
ldrb r0, [r0]
strb r0, [r1, 0x1]
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _080781B4
@ -1809,7 +1809,7 @@ sub_80781C8: @ 80781C8
ldr r5, =gMain
ldr r0, =sub_80773AC
str r0, [r5, 0x8]
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08078220
@ -4004,7 +4004,7 @@ sub_8079490: @ 8079490
ands r0, r1
cmp r0, 0
bne _080794C4
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _080794B4
@ -4029,7 +4029,7 @@ _080794C4:
thumb_func_start sub_80794CC
sub_80794CC: @ 80794CC
push {lr}
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _08079518
@ -7507,7 +7507,7 @@ _0807B0F0:
ands r0, r1
cmp r0, 0
bne _0807B116
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _0807B110
@ -13831,7 +13831,7 @@ _0807EDC0:
movs r0, 0x15
bl sav12_xor_increment
_0807EDCE:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _0807EDF6
@ -14044,7 +14044,7 @@ _0807EFA4:
lsrs r0, 24
cmp r0, 0x1
bne _0807F03A
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _0807EFD8
@ -14071,7 +14071,7 @@ _0807EFE4:
b _0807F03A
.pool
_0807EFF0:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _0807F028
@ -14141,7 +14141,7 @@ c2_080543C4: @ 807F068
ldr r0, [r4]
bl Free
str r5, [r4]
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0
beq _0807F0B6

View File

@ -187,7 +187,7 @@ _080C2830:
bl sub_80C4630
b _080C28D4
_080C2836:
ldr r0, =gUnknown_030030FC
ldr r0, =gLinkVSyncDisabled
ldrb r0, [r0]
cmp r0, 0x1
bne _080C2852

View File

@ -42,7 +42,6 @@ SECTIONS {
{
asm/crt0.o(.text);
src/main.o(.text);
asm/main.o(.text);
src/malloc.o(.text);
asm/dma3_manager.o(.text);
src/gpu_regs.o(.text);

View File

@ -3,6 +3,12 @@
#include "gba/flash_internal.h"
#include "gba/m4a_internal.h"
extern u16 GetGpuReg(u8);
extern void SetGpuReg(u8, u16);
extern void LinkVSync(void);
extern void sub_800E174(void);
extern void sub_800B9B8(void);
extern struct SoundInfo gSoundInfo;
extern u32 gFlashMemoryPresent;
extern u32 IntrMain[];
@ -10,7 +16,10 @@ extern u8 gHeap[];
extern struct SaveBlock2 gUnknown_02024A54;
extern char *gUnknown_03005D94;
extern char gUnknown_02029808[];
extern u32 gUnknown_0203CF5C;
extern u16 gIntrCheck;
extern u32 gBattleTypeFlags;
extern u8 gUnknown_03002748;
//extern u32 gUnknown_0203CF5C;
void Timer3Intr(void);
bool8 HandleLinkConnection(void);
@ -22,7 +31,6 @@ static void VCountIntr(void);
static void SerialIntr(void);
static void IntrDummy(void);
const u8 gGameVersion = VERSION_EMERALD;
const u8 gGameLanguage = GAME_LANGUAGE; // English
@ -70,7 +78,7 @@ static void InitMainCallbacks(void);
static void CallCallbacks(void);
static void SeedRngWithRtc(void);
static void ReadKeys(void);
static void InitIntrHandlers(void);
void InitIntrHandlers(void);
static void WaitForVBlank(void);
#define B_START_SELECT (B_BUTTON | START_BUTTON | SELECT_BUTTON)
@ -149,10 +157,17 @@ static void UpdateLinkAndCallCallbacks(void)
CallCallbacks();
}
struct gUnknown_0203CF5C_Struct
{
u32 value;
};
extern struct gUnknown_0203CF5C_Struct gUnknown_0203CF5C;
static void InitMainCallbacks(void)
{
gMain.vblankCounter1 = 0;
gUnknown_0203CF5C = 0;
gUnknown_0203CF5C.value = 0;
gMain.vblankCounter2 = 0;
gMain.callback1 = NULL;
SetMainCallback2(c2_copyright_1);
@ -193,7 +208,14 @@ u16 GetTrainerId(void)
return gTrainerId;
}
/*
void EnableVCountIntrAtLine150(void)
{
u16 gpuReg = GetGpuReg(0x4) & 0xFF | 0x9600;
SetGpuReg(4, gpuReg | 0x20);
EnableInterrupts(0x4); // please use IRQ_MASK_VCOUNT
}
void InitKeys(void)
{
gKeyRepeatContinueDelay = 5;
@ -237,7 +259,7 @@ static void ReadKeys(void)
gMain.heldKeys = gMain.heldKeysRaw;
// Remap L to A if the L=A option is enabled.
if (gSaveBlock2.optionsButtonMode == 2)
if (gSaveBlock2Ptr->optionsButtonMode == 2)
{
if (gMain.newKeys & L_BUTTON)
gMain.newKeys |= A_BUTTON;
@ -250,7 +272,7 @@ static void ReadKeys(void)
gMain.watchedKeysPressed = TRUE;
}
static void InitIntrHandlers(void)
void InitIntrHandlers(void)
{
int i;
@ -266,9 +288,8 @@ static void InitIntrHandlers(void)
SetSerialCallback(NULL);
REG_IME = 1;
REG_IE = INTR_FLAG_VBLANK;
REG_DISPSTAT = DISPSTAT_VBLANK_INTR;
REG_IE |= INTR_FLAG_VBLANK;
EnableInterrupts(0x1);
}
void SetVBlankCallback(IntrCallback callback)
@ -286,43 +307,146 @@ void SetVCountCallback(IntrCallback callback)
gMain.vcountCallback = callback;
}
void RestoreSerialTimer3IntrHandlers(void)
{
gIntrTable[1] = SerialIntr;
gIntrTable[2] = Timer3Intr;
}
void SetSerialCallback(IntrCallback callback)
{
gMain.serialCallback = callback;
}
extern void CopyBufferedValuesToGpuRegs(void);
extern void ProcessDma3Requests(void);
#ifdef NONMATCHING
static void VBlankIntr(void)
{
u16 savedIme;
if (!gLinkVSyncDisabled)
if (gLinkVSyncDisabled != FALSE)
LinkVSync();
else if(gUnknown_03002748 == FALSE)
sub_800B9B8();
savedIme = REG_IME;
REG_IME = 0;
m4aSoundVSync();
REG_IME = savedIme;
gMain.vblankCounter1++; // in the original asm, gMain is put into r0 for this addition and then preserved in r4 after it. the compiler wants to skip that and put it in either r4 or r1.
gMain.vblankCounter1++;
if(gUnknown_0203CF5C.value > 0)
if(gUnknown_0203CF5C.value < 0xFFFFFFFF)
gUnknown_0203CF5C.value++;
if (gMain.vblankCallback)
gMain.vblankCallback();
gMain.vblankCounter2++;
CopyBufferedValuesToGpuRegs();
ProcessDma3Requests();
gPcmDmaCounter = gSoundInfo.pcmDmaCounter;
m4aSoundMain();
sub_800C35C();
sub_8033648();
if(!gMain.inBattle || (gBattleTypeFlags & 0x013F0102) == 0)
Random();
INTR_CHECK |= INTR_FLAG_VBLANK;
sub_800E174();
gIntrCheck |= INTR_FLAG_VBLANK;
gMain.intrCheck |= INTR_FLAG_VBLANK;
}
void InitFlashTimer(void)
#else
__attribute__((naked))
static void VBlankIntr(void)
{
SetFlashTimerIntr(2, gFlashTimerIntrFunc);
asm(".syntax unified\n\
push {r4,lr}\n\
ldr r0, =gLinkVSyncDisabled\n\
ldrb r0, [r0]\n\
cmp r0, 0\n\
beq _0800074C\n\
bl LinkVSync\n\
b _08000758\n\
.pool\n\
_0800074C:\n\
ldr r0, =gUnknown_03002748\n\
ldrb r0, [r0]\n\
cmp r0, 0\n\
bne _08000758\n\
bl sub_800B9B8\n\
_08000758:\n\
ldr r0, =gMain\n\
ldr r1, [r0, 0x20]\n\
adds r1, 0x1\n\
str r1, [r0, 0x20]\n\
ldr r1, =gUnknown_0203CF5C\n\
ldr r1, [r1]\n\
adds r4, r0, 0\n\
cmp r1, 0\n\
beq _08000778\n\
ldr r2, [r1]\n\
movs r0, 0x2\n\
negs r0, r0\n\
cmp r2, r0\n\
bhi _08000778\n\
adds r0, r2, 0x1\n\
str r0, [r1]\n\
_08000778:\n\
ldr r0, [r4, 0xC]\n\
cmp r0, 0\n\
beq _08000782\n\
bl _call_via_r0\n\
_08000782:\n\
ldr r0, [r4, 0x24]\n\
adds r0, 0x1\n\
str r0, [r4, 0x24]\n\
bl CopyBufferedValuesToGpuRegs\n\
bl ProcessDma3Requests\n\
ldr r1, =gPcmDmaCounter\n\
ldr r0, =gSoundInfo\n\
ldrb r0, [r0, 0x4]\n\
strb r0, [r1]\n\
bl m4aSoundMain\n\
bl sub_8033648\n\
ldr r1, =0x00000439\n\
adds r0, r4, r1\n\
ldrb r1, [r0]\n\
movs r0, 0x2\n\
ands r0, r1\n\
cmp r0, 0\n\
beq _080007BA\n\
ldr r0, =gBattleTypeFlags\n\
ldr r0, [r0]\n\
ldr r1, =0x013f0102\n\
ands r0, r1\n\
cmp r0, 0\n\
bne _080007BE\n\
_080007BA:\n\
bl Random\n\
_080007BE:\n\
bl sub_800E174\n\
ldr r2, =gIntrCheck\n\
ldrh r0, [r2]\n\
movs r1, 0x1\n\
orrs r0, r1\n\
strh r0, [r2]\n\
ldr r0, =gMain\n\
ldrh r2, [r0, 0x1C]\n\
ldrh r3, [r0, 0x1C]\n\
orrs r1, r2\n\
strh r1, [r0, 0x1C]\n\
pop {r4}\n\
pop {r0}\n\
bx r0\n\
.pool\n\
.syntax divided");
}
#endif
void StartFlashMemoryTimer(void)
{
SetFlashTimerIntr(2, gIntrTable + 0x7);
}
static void HBlankIntr(void)
@ -339,7 +463,8 @@ static void VCountIntr(void)
if (gMain.vcountCallback)
gMain.vcountCallback();
INTR_CHECK |= INTR_FLAG_VCOUNT;
m4aSoundVSync();
gIntrCheck |= INTR_FLAG_VCOUNT;
gMain.intrCheck |= INTR_FLAG_VCOUNT;
}
@ -348,7 +473,7 @@ static void SerialIntr(void)
if (gMain.serialCallback)
gMain.serialCallback();
INTR_CHECK |= INTR_FLAG_SERIAL;
gIntrCheck |= INTR_FLAG_SERIAL;
gMain.intrCheck |= INTR_FLAG_SERIAL;
}
@ -358,7 +483,19 @@ static void IntrDummy(void)
static void WaitForVBlank(void)
{
gMain.intrCheck &= ~INTR_FLAG_VBLANK;
VBlankIntrWait();
while(!(gMain.intrCheck & 0x1))
;
}
void sub_80008DC(u32 var)
{
gUnknown_0203CF5C.value = var;
}
void sub_80008E8(void)
{
gUnknown_0203CF5C.value = 0;
}
void DoSoftReset(void)
@ -377,4 +514,3 @@ void ClearPokemonCrySongs(void)
{
CpuFill16(0, gPokemonCrySongs, MAX_POKEMON_CRIES * sizeof(struct PokemonCrySong));
}
*/

View File

@ -1,6 +1,6 @@
.space 0x8
gUnknown_030022B0: @ 30022B0
gKeyRepeatStartDelay: @ 30022B0
.space 0x4
gUnknown_030022B4: @ 30022B4
@ -21,28 +21,22 @@ gUnknown_030024F8: @ 30024F8
gUnknown_030026F8: @ 30026F8
.space 0x4
gUnknown_030026FC: @ 30026FC
gKeyRepeatContinueDelay: @ 30026FC
.space 0x4
gSoftResetDisabled: @ 3002700
.space 0x10
gUnknown_03002710: @ 3002710
.space 0x4
gUnknown_03002714: @ 3002714
.space 0x18
gUnknown_0300272C: @ 300272C
.space 0x1C
gIntrTable: @ 3002710
.space 0x38
gUnknown_03002748: @ 3002748
.space 0x8
gUnknown_03002750: @ 3002750
IntrMain_Buffer: @ 3002750
.space 0x800
gUnknown_03002F50: @ 3002F50
gPcmDmaCounter: @ 3002F50
.space 0x4
gUnknown_03002F54: @ 3002F54
@ -135,7 +129,7 @@ gUnknown_030030F4: @ 30030F4
gUnknown_030030F8: @ 30030F8
.space 0x4
gUnknown_030030FC: @ 30030FC
gLinkVSyncDisabled: @ 30030FC
.space 0x4
gUnknown_03003100: @ 3003100
@ -531,7 +525,8 @@ gUnknown_03007F00: @ 3007F00
gUnknown_03007FF0: @ 3007FF0
.space 0x8
gUnknown_03007FF8: @ 3007FF8
gIntrCheck: @ 3007FF8
.space 0x4
gUnknown_03007FFC: @ 3007FFC
.space 0x4