asm notes

This commit is contained in:
theo3 2021-10-31 22:59:41 -07:00
parent 57eec4def4
commit 46d14fdc0c
21 changed files with 161 additions and 110 deletions

View File

@ -126,7 +126,7 @@ sub_08083F14: @ 0x08083F14
movs r2, #0x32
ldrsh r1, [r4, r2]
movs r2, #2
bl sub_080577AC
bl CreateMagicSparkles
ldrb r0, [r4, #0xe]
subs r0, #1
strb r0, [r4, #0xe]

View File

@ -1264,14 +1264,17 @@ _0800268C:
.byte 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00
_0800269C: .4byte gUnk_0800232E
_080026A0: .4byte gUnk_08002342
gUnk_080026A4::
.4byte gUnk_020000B0
.4byte gUnk_03003D68
.4byte gUnk_03003DB0
.4byte gUnk_03005FBC
@ normal entities
.4byte gUnk_020000B0 @ enemy target? (player)
.4byte gUnk_03003D68 @ first linked list
.4byte gUnk_03003DB0 @ last linked list
.4byte gUnk_03005FBC @ entity table
@ managers
.4byte gUnk_020000B0
.4byte gUnk_03003DA8
.4byte gHitboxCount
.4byte gCollidableCount
.4byte gUnk_03005FBC
thumb_func_start sub_080026C4

View File

@ -13,7 +13,7 @@ sub_08016B30: @ 0x08016B30
thumb_func_start sub_08016B34
sub_08016B34: @ 0x08016B34
ldr r1, _08016B54 @ =0x03007FFC
ldr r0, _08016B58 @ =IntrMain
ldr r0, _08016B58 @ =gIntrMain
str r0, [r1]
ldr r1, _08016B5C @ =0x04000004
ldr r2, _08016B60 @ =0x00005028
@ -29,7 +29,7 @@ sub_08016B34: @ 0x08016B34
bx lr
.align 2, 0
_08016B54: .4byte 0x03007FFC
_08016B58: .4byte IntrMain
_08016B58: .4byte gIntrMain
_08016B5C: .4byte 0x04000004
_08016B60: .4byte 0x00005028
_08016B64: .4byte 0x04000200

View File

@ -660,8 +660,8 @@ _0801DD7C: .4byte gAreaRoomHeaders
_0801DD80: .4byte gArea
_0801DD84: .4byte 0x0000085C
thumb_func_start sub_0801DD88
sub_0801DD88: @ 0x0801DD88
thumb_func_start LoadDungeonMap
LoadDungeonMap: @ 0x0801DD88
push {lr}
ldr r0, _0801DD98 @ =gUnk_0201AEE0
ldr r1, _0801DD9C @ =0x06006000

View File

@ -1230,7 +1230,7 @@ sub_080A5CFC: @ 0x080A5CFC
push {r4, lr}
adds r4, r0, #0
bl sub_0801DDA0
bl sub_0801DD88
bl LoadDungeonMap
ldr r1, _080A5D18 @ =gUnk_02019EE0
movs r2, #0x80
lsls r2, r2, #3

View File

@ -33,7 +33,7 @@ _080000F0:
sp_irq: .4byte gUnk_03007FA0
sp_usr: .4byte gUnk_03007F00
INTR_VECTOR_BUF: .4byte 0x03007FFC
intr_main: .4byte IntrMain
intr_main: .4byte gIntrMain
.ifdef EU
unk_function: .4byte sub_08000118
.endif

View File

@ -6,6 +6,10 @@
.text
.code 16
.global RAMFUNCS_BASE
RAMFUNCS_BASE::
sub_080B197C:: @ 0x080B197C
push {r4, r5, r6}
ldr r2, _080B19C0 @ =gRoomControls
@ -250,13 +254,14 @@ _080B1C48: .4byte gUnk_080B7A3E
_080B1C4C: .4byte gRoomControls
_080B1C50: .4byte gUnk_08000278
arm_func_start sub_080B1C54
sub_080B1C54: @ 0x080B1C54
arm_func_start UpdateCollision
UpdateCollision: @ 0x080B1C54
@ r0 : Entity* this
ldrb r1, [r0, #0x10]
ands r1, r1, #0x80
ands r1, r1, #0x80 @ disable collision flag
bxeq lr
ldr r2, _080B200C @ =gUnk_03000E10
ldr r3, _080B2010 @ =gHitboxCount
ldr r2, _080B200C @ =gCollidableList
ldr r3, _080B2010 @ =gCollidableCount
ldrb r1, [r3]
str r0, [r2, r1, lsl #2]
add r1, r1, #1
@ -340,8 +345,8 @@ _080B1D84:
pop {r4, r5, r6, r7, r8, sb, sl, lr}
bx lr
_080B1D8C: .4byte gUnk_02018EA0
_080B1D90: .4byte gUnk_03000E10
_080B1D94: .4byte gHitboxCount
_080B1D90: .4byte gCollidableList
_080B1D94: .4byte gCollidableCount
arm_func_start sub_080B1D98
sub_080B1D98: @ 0x080B1D98
@ -525,33 +530,33 @@ _080B1FFC: .4byte gUnk_03005D5C
_080B2000: .4byte gUnk_03005D24
_080B2004: .4byte gUnk_03005D18
_080B2008: .4byte gUnk_03005D58
_080B200C: .4byte gUnk_03000E10
_080B2010: .4byte gHitboxCount
_080B200C: .4byte gCollidableList
_080B2010: .4byte gCollidableCount
_080B2014: .4byte gUnk_080B7B74
_080B2018: .4byte gUnk_080B3744
arm_func_start sub_080B201C
sub_080B201C: @ 0x080B201C
arm_func_start IntrMain
IntrMain:
mov r3, #0x4000000
add r3, r3, #0x200
ldr r2, [r3]
ldrh r1, [r3, #8]
ldr r2, [r3] @ lo 16: interrupt_enable, hi 16: interrupt_request
ldrh r1, [r3, #8] @ interrupt master enable
mrs r0, spsr
push {r0, r1, r2, r3, lr}
and r1, r2, r2, lsr #16
ands r0, r1, #0x2000
ands r0, r1, #0x2000 @ external irq
bne _080B20D4
mov ip, #4
ands r0, r1, #0x80
ands r0, r1, #0x80 @ serial comm
bne _080B2074
mov ip, #0xc
ands r0, r1, #4
ands r0, r1, #4 @ vcount
bne _080B2074
mov ip, #0x10
ands r0, r1, #1
ands r0, r1, #1 @ vblank
bne _080B2074
mov ip, #0x14
ands r0, r1, #0x40
ands r0, r1, #0x40 @ timer 3 overflow
bne _080B2074
mov ip, #0
_080B2074:
@ -610,8 +615,8 @@ _080B20FC:
mov r0, #1
bx lr
arm_func_start sub_080B2124
sub_080B2124: @ 0x080B2124
arm_func_start MakeFadeBuff256
MakeFadeBuff256: @ 0x080B2124
push {r4, r5, r6, r7, r8, sb, sl, fp}
mul r3, r2, r3
mov r4, #0x400
@ -652,50 +657,60 @@ _080B21AC: .4byte gUnk_08000F54
arm_func_start UpdateEntities
UpdateEntities: @ 0x080B21B0
ldr fp, _080B2270 @ =gUnk_03003DD0
ldr r1, [fp]
ldm r1, {r7, r8, sb, sl}
ldr sp, [fp, #0xc]
ldr r8, [fp, #4]
ldr r0, [fp, #8]
ldr r11, _080B2270 @ =gUnk_03003DD0
ldr r1, [r11]
ldm r1, {r7, r8, r9, r10}
ldr sp, [r11, #0xc]
ldr r8, [r11, #4]
ldr r0, [r11, #8]
add pc, pc, #0x60 @ =_080B2230
@ gUnk_03003DD0 {
@ void* chosen_table;
@ void* linked_list_top;
@ void* curr_entity;
@ void* restore_sp;
@ }
@ UpdateEntities starts here
@ arg0 (r0) : 0 = entities, 1 = managers
ldr r1, _080B2274 @ =gUnk_080026A4
add r1, r1, r0, lsl #4
push {r4, r5, r6, r7, r8, sb, sl, fp, lr}
ldr fp, _080B2278 @ =gUnk_03003DD0
str r1, [fp]
str sp, [fp, #0xc]
ldm r1, {r7, r8, sb, sl}
_080B21E8:
push {r4 - r11, lr}
ldr r11, _080B2278 @ =gUnk_03003DD0
str r1, [r11, #0x0]
str sp, [r11, #0xc]
ldm r1, {r7, r8, r9, r10}
next_list: @ traverse entity linked list
add r8, r8, #8
str r8, [fp, #4]
cmp r8, sb
bhs _080B2238
ldr r4, [r8, #4]
_080B21FC:
str r8, [r11, #4]
cmp r8, r9
bhs lists_complete
ldr r4, [r8, #4] @ entity -> next
next_entity:
cmp r4, r8
beq _080B21E8
beq next_list
mov r0, #0
str r0, [r7]
str r4, [fp, #8]
ldrb r1, [r4, #8]
ldr r1, [sl, r1, lsl #2]
str r4, [r11, #8]
ldrb r1, [r4, #8] @ entity -> kind
ldr r1, [r10, r1, lsl #2]
mov r0, r4
mov lr, pc
bx r1 @ Jump to address stored in r1
_080B2224:
ldr r0, [fp, #8]
cmp r0, r4
bleq sub_080B1C54
bx r1 @ call entity kind update function
ldr r0, [r11, #8]
cmp r0, r4 @ update collision if entity is still alive
bleq UpdateCollision
_080B2230: @ jumped here if ClearAndUpdateEntities
ldr r4, [r0, #4]
b _080B21FC
_080B2238:
b next_entity
lists_complete:
mov r0, #0
str r0, [fp, #8]
pop {r4, r5, r6, r7, r8, sb, sl, fp, lr}
str r0, [r11, #8]
pop {r4 - r11, lr}
bx lr
_080B2248::
_080B2248: .4byte DeleteThisEntity @ 0x3005fbc
_080B224C: .4byte PlayerUpdate
_080B2250: .4byte DeleteThisEntity
@ -706,6 +721,7 @@ _080B2260: .4byte ObjectUpdate
_080B2264: .4byte NPCUpdate
_080B2268: .4byte ItemUpdate
_080B226C: .4byte ManagerUpdate
_080B2270: .4byte gUnk_03003DD0
_080B2274: .4byte gUnk_080026A4
_080B2278: .4byte gUnk_03003DD0
@ -860,7 +876,7 @@ sub_080B19C8: @ 0x080B19C8
mov r2, #0
strb r2, [r1]
stmdb sp!, {lr}
bl sub_080B2478
bl ResolveOamDrawPriority
bl sub_080B2534
ldm sp!, {lr}
b _080B1C40EU
@ -899,14 +915,17 @@ sub_080B2448: @ 0x080B2448
mov r2, #0
strb r2, [r1]
stmdb sp!, {lr}
bl sub_080B2478
bl ResolveOamDrawPriority
bl sub_080B2534
ldm sp!, {lr}
b _080B26B4
.endif
arm_func_start sub_080B2478
sub_080B2478: @ 0x080B2478
arm_func_start ResolveOamDrawPriority
ResolveOamDrawPriority: @ 0x080B2478
prio_a .req r8
prio_b .req r5
mov sb, r0
mov r1, r0
ldrb r2, [r1], #4
@ -914,7 +933,7 @@ sub_080B2478: @ 0x080B2478
sub sl, r2, #1
add r2, r1, sl, lsl #2
cmp sl, #0
beq _080B252C
beq no_objs
_080B2498:
lsl r3, sl, #2
mov r6, #0
@ -926,40 +945,44 @@ _080B24A0:
_080B24B0:
cmp r1, ip
blo _080B251C
# sprite A
ldr r4, [r1]
# pos
ldr r8, [r4, #0x30]
add r8, r8, #-0x80000000
lsr r8, r8, #3
add r8, #0x80000000
lsr r8, #3
# load priority bits, NOT so 0 = highest priority
ldrb r0, [r4, #0x29]
mvn r0, r0
orr r8, r8, r0, lsl #29
orr prio_a, r8, r0, lsl #29
add r7, r1, r3
_080B24D8:
next_sprite:
cmp r2, r7
blo _080B2510
blo a_priority
# sprite B
ldr r5, [r7]
ldr r0, [r5, #0x30]
add r0, r0, #-0x80000000
lsr r0, r0, #3
add r0, #0x80000000
lsr r0, #3
ldrb r5, [r5, #0x29]
mvn r5, r5
orr r5, r0, r5, lsl #29
cmp r8, r5
bhs _080B2510
orr prio_b, r0, r5, lsl #29
cmp prio_a, prio_b
bhs a_priority
ldr r5, [r7], -r3
str r5, [r7], r3, lsl #1
b _080B24D8
_080B2510:
b next_sprite
a_priority:
str r4, [r7, -r3]!
sub r1, r1, r3
b _080B24B0
_080B251C:
add r6, r6, #1
add r6, #1
b _080B24A0
_080B2524:
lsrs sl, sl, #1
lsrs sl, #1
bne _080B2498
_080B252C:
no_objs:
mov r0, sb
bx lr

View File

@ -1,5 +1,7 @@
.include "asm/macros/asm.inc"
.include "asm/macros/function.inc"
.include "asm/macros/ram.inc"
.include "asm/macros/m4a.inc"
.include "asm/macros/map.inc"
.include "asm/macros/entity.inc"

20
asm/macros/ram.inc Normal file
View File

@ -0,0 +1,20 @@
.ifndef GUARD_ASM_MACROS_RAM_INC
.set GUARD_ASM_MACROS_RAM_INC, 1
.ifdef EU
.set RAM_DIFF, 0x050AC28C - 0xaa0
.endif
.ifdef USA
.set RAM_DIFF, 0x050AC28C
.endif
.ifdef JP
.set RAM_DIFF, 0x050AC28C - 0x260
.endif
.macro ram_addr x
.4byte \x - RAM_DIFF
.endm
.endif @ GUARD_ASM_MACROS_RAM_INC

View File

@ -118,7 +118,7 @@ sub_08097C20: @ 0x08097C20
adds r2, r4, #0
adds r2, #0x38
ldrb r2, [r2]
bl sub_080577AC
bl CreateMagicSparkles
ldrb r0, [r4, #0xe]
subs r0, #1
strb r0, [r4, #0xe]

View File

@ -1,7 +1,7 @@
#!/bin/bash
buildname=tmc
baserom=baserom
buildname=$3
baserom=$4
OBJDUMP="$DEVKITARM/bin/arm-none-eabi-objdump -D -bbinary -marmv4t -Mforce-thumb"
OPTIONS="--start-address=$(($1)) --stop-address=$(($1 + $2))"

View File

@ -336,7 +336,7 @@
.equiv SFX_14F, 0x14f
.equiv SFX_150, 0x150
.equiv SFX_151, 0x151
.equiv SFX_152, 0x152
.equiv SFX_NEAR_PORTAL, 0x152
.equiv SFX_153, 0x153
.equiv SFX_154, 0x154
.equiv SFX_155, 0x155

View File

@ -8591,12 +8591,12 @@ sfx151_track0:: @ 08DE3684
sfx151:: @ 08DE36B0
sound_header 1 0 0x60 0 gUnk_08A10DC0 sfx151_track0
sfx152_track0:: @ 08DE36BC
sfxNearPortal_track0:: @ 08DE36BC
.incbin "baserom.gba", 0xDE36BC, 0x0000086
sfx152_track1:: @ 08DE3742
sfxNearPortal_track1:: @ 08DE3742
.incbin "baserom.gba", 0xDE3742, 0x000008A
sfx152:: @ 08DE37CC
sound_header 2 0 0x40 0 gUnk_08A10DD8 sfx152_track0 sfx152_track1
sfxNearPortal:: @ 08DE37CC
sound_header 2 0 0x40 0 gUnk_08A10DD8 sfxNearPortal_track0 sfxNearPortal_track1
sfx153_track0:: @ 08DE37DC
.incbin "baserom.gba", 0xDE37DC, 0x0000030

View File

@ -346,7 +346,7 @@ typedef enum {
SFX_14F,
SFX_150,
SFX_151,
SFX_152,
SFX_NEAR_PORTAL,
SFX_153,
SFX_154,
SFX_155,

View File

@ -24,7 +24,9 @@ typedef struct {
/*0x0E*/ u8 unk5;
/*0x0F*/ u8 unk6;
/*0x10*/ u8 unk_10;
/*0x11*/ u8 filler[3];
/*0x11*/ s8 oam_offset_x;
/*0x12*/ s8 oam_offset_y;
/*0x13*/ u8 unk13;
/*0x14*/ u8 screenShakeMagnitude;
/*0x15*/ u8 unk7;
/*0x16*/ u16 screenShakeTime;

View File

@ -181,7 +181,7 @@ SECTIONS {
. = 0x00000BF8; gUnk_03000BF8 = .;
. = 0x00000C24; gUnk_03000C24 = .;
. = 0x00000C30; gUnk_03000C30 = .;
. = 0x00000E10; gUnk_03000E10 = .;
. = 0x00000E10; gCollidableList = .;
. = 0x00000F50; gScreen = .;
. = 0x00000F58; gBG0Settings = .;
. = 0x00000F64; gBG1Settings = .;
@ -212,7 +212,7 @@ SECTIONS {
. = 0x00003DA0; gUnk_03003DA0 = .;
. = 0x00003DA8; gUnk_03003DA8 = .;
. = 0x00003DB0; gUnk_03003DB0 = .;
. = 0x00003DB8; gHitboxCount = .;
. = 0x00003DB8; gCollidableCount = .;
. = 0x00003DBC; gEntCount = .;
. = 0x00003DC0; gUnk_03003DC0 = .;
. = 0x00003DD0; gUnk_03003DD0 = .;
@ -274,7 +274,7 @@ SECTIONS {
. = 0x00005D24; gUnk_03005D24 = .;
. = 0x00005D58; gUnk_03005D58 = .;
. = 0x00005D5C; gUnk_03005D5C = .;
. = 0x00005D90; IntrMain = .;
. = 0x00005D90; gIntrMain = .;
. = 0x00005E60; gUnk_03005E60 = .;
. = 0x00005E98; gUnk_03005E98 = .;
. = 0x00005F24; _ClearAndUpdateEntities = .;

View File

@ -22,7 +22,7 @@ extern u8 gUnk_03003DF0[];
extern u8 gUnk_03003BE0;
extern Entity* gUnk_03004040[3];
extern u8 gUnk_020342F8;
extern u8 gHitboxCount;
extern u8 gCollidableCount;
extern void gDoCollision(void);
extern void sub_080ADD70();
@ -371,7 +371,7 @@ NONMATCH("asm/non_matching/arm_proxy/NPCUpdate.inc", void NPCUpdate(Entity* this
END_NONMATCH
void ClearHitboxList(void) {
gHitboxCount = 0;
gCollidableCount = 0;
}
void CollisionMain(void) {

View File

@ -533,7 +533,7 @@ extern const SongHeader sfx14E;
extern const SongHeader sfx14F;
extern const SongHeader sfx150;
extern const SongHeader sfx151;
extern const SongHeader sfx152;
extern const SongHeader sfxNearPortal;
extern const SongHeader sfx153;
extern const SongHeader sfx154;
extern const SongHeader sfx155;
@ -1165,7 +1165,7 @@ const Song gSongTable[] = {
[SFX_14F] = { &sfx14F, MUSIC_PLAYER_15, MUSIC_PLAYER_15 },
[SFX_150] = { &sfx150, MUSIC_PLAYER_14, MUSIC_PLAYER_14 },
[SFX_151] = { &sfx151, MUSIC_PLAYER_13, MUSIC_PLAYER_13 },
[SFX_152] = { &sfx152, MUSIC_PLAYER_18, MUSIC_PLAYER_18 },
[SFX_NEAR_PORTAL] = { &sfxNearPortal, MUSIC_PLAYER_18, MUSIC_PLAYER_18 },
[SFX_153] = { &sfx153, MUSIC_PLAYER_11, MUSIC_PLAYER_11 },
[SFX_154] = { &sfx154, MUSIC_PLAYER_10, MUSIC_PLAYER_10 },
[SFX_155] = { &sfx155, MUSIC_PLAYER_0F, MUSIC_PLAYER_0F },

View File

@ -10,7 +10,8 @@ typedef struct {
} VStruct;
typedef struct {
u8 filler[0x420];
u8 _0[0x20];
struct OamData oam[0x80];
VStruct unk[0x100];
} UStruct;

View File

@ -28,7 +28,7 @@ typedef struct {
extern s8 gUnk_08107C6C[];
extern u32 sub_08057810(void);
extern u32 sub_080002C0(u16, u16, u8);
extern void sub_080577AC(u32, u32, u32);
extern void CreateMagicSparkles(u32, u32, u32);
void Manager3_Main(Manager3* this) {
s8 tmp;
@ -55,11 +55,11 @@ void Manager3_Main(Manager3* this) {
}
}
if (sub_080002C0(this->unk_38, this->unk_3a, this->manager.unk_0e) == 0x3d) {
sub_080577AC(this->unk_38 + gRoomControls.roomOriginX, this->unk_3a + gRoomControls.roomOriginY,
this->manager.unk_0e);
CreateMagicSparkles(this->unk_38 + gRoomControls.roomOriginX, this->unk_3a + gRoomControls.roomOriginY,
this->manager.unk_0e);
if (!this->manager.unk_0f) {
this->manager.unk_0f = 1;
SoundReq(SFX_152);
SoundReq(SFX_NEAR_PORTAL);
}
}
}
@ -69,15 +69,15 @@ void Manager3_Main(Manager3* this) {
}
}
void sub_080577AC(u32 baseX, u32 baseY, u32 layer) {
void CreateMagicSparkles(u32 baseX, u32 baseY, u32 layer) {
u32 r;
int offsetX, offsetY;
Entity* spark;
r = Random();
if ((r & 0x7) != 0)
if (r & 0x7)
return;
spark = CreateObject(SPECIAL_FX, 0x26, 0);
if (!spark)
if (spark == NULL)
return;
offsetX = (r >> 0x8) & 0xF;
offsetY = ((r >> 0x10) & 0xF);

View File

@ -8,7 +8,7 @@
extern void (*gUnk_08121488[])(Entity*);
extern u32 sub_08057810(void);
extern void sub_080577AC(u32, u32, u32);
extern void CreateMagicSparkles(u32, u32, u32);
u32 sub_0808C128(Entity*);
void sub_0808C13C(Entity*);
@ -118,10 +118,10 @@ void sub_0808C01C(Entity* this, u32 r1) {
gArea.field_0x18 = 3;
}
}
sub_080577AC(this->x.HALF.HI, this->y.HALF.HI, this->collisionLayer);
CreateMagicSparkles(this->x.HALF.HI, this->y.HALF.HI, this->collisionLayer);
if (this->field_0xf == 0) {
this->field_0xf = 1;
SoundReq(0x152);
SoundReq(SFX_NEAR_PORTAL);
}
}
}