Extracted STGTRAIN_f2 through STGTRAIN_f10.

This commit is contained in:
Filipe Rodrigues 2023-08-30 17:27:59 +01:00
parent b7038057e8
commit e7064c010b
5 changed files with 127 additions and 45 deletions

View File

@ -239,53 +239,71 @@ STGTRAIN_0:
.L0x000003a4: .word 0x8008b710 # lb $t0, -0x48f0($zr)
# Start of code
# `fn f2(arg0: *mut Unknown0, arg1: u32, arg2: u32)`
.section "section_STGTRAIN_f2"
.global STGTRAIN_f2
STGTRAIN_f2:
sw $a1, 0x58($a0) # arg0.a17 = arg1
jr $ra
sw $a2, 0x5c($a0) # arg0.a16 = arg2
# `fn f3(arg0: *mut Unknown0, arg1: u32, arg2: u32)`
.section "section_STGTRAIN_f3"
.global STGTRAIN_f3
STGTRAIN_f3:
sw $a1, 0x60($a0) # arg0.a15 = arg1
jr $ra
sw $a2, 0x64($a0) # arg0.a14 = arg2
# `fn f4(arg0: *mut Unknown0, arg1: u32, arg2: u32)`
.section "section_STGTRAIN_f4"
.global STGTRAIN_f4
STGTRAIN_f4:
sw $a1, 0x68($a0) # arg0.a13 = arg1
jr $ra
sw $a2, 0x6c($a0) # arg0.a12 = arg2
# `fn f5(arg0: *mut Unknown0, arg1: u32, arg2: u32)`
.section "section_STGTRAIN_f5"
.global STGTRAIN_f5
STGTRAIN_f5:
sw $a1, 0x70($a0) # arg0.a11 = arg1
jr $ra
sw $a2, 0x74($a0) # arg0.a10 = arg2
# `fn f6(arg0: *mut Unknown0, arg1: u32, arg2: u32, arg3: u32)`
.section "section_STGTRAIN_f6"
.global STGTRAIN_f6
STGTRAIN_f6:
li $v0, 0x1
sw $a1, 0xa8($a0) # arg0.a21 = arg0
sw $a2, 0xac($a0) # arg0.a22 = arg1
sw $a3, 0xb0($a0) # arg0.a23 = arg2
jr $ra
sw $v0, 0x9c($a0) # arg0.a18 = 1
# `fn f7(arg0: *mut Unknown0, arg1: u32, arg2: u32)`
.section "section_STGTRAIN_f7"
.global STGTRAIN_f7
STGTRAIN_f7:
sw $a1, 0xa0($a0) # arg0.a19 = arg1
jr $ra
sw $a2, 0xa4($a0) # arg0.a20 = arg2
# `fn f8(arg0: *mut Unknown0, arg1: u16, arg2: u16, arg3: u16)`
.section "section_STGTRAIN_f8"
.global STGTRAIN_f8
STGTRAIN_f8:
li $v0, 0x1
sh $a1, 0xb8($a0) # arg0.a25 = arg1
sh $a2, 0xba($a0) # arg0.a26 = arg2
sh $a3, 0xbc($a0) # arg0.a27 = arg3
jr $ra
sw $v0, 0x9c($a0) # arg0.a18 = 1
.section "section_STGTRAIN_1"
.global STGTRAIN_1
STGTRAIN_1:
.L0x000003f0: sw $a1, 0x58($a0) # .word 0xac850058
.L0x000003f4: jr $ra # .word 0x03e00008
.L0x000003f8: sw $a2, 0x5c($a0) # .word 0xac86005c
.L0x000003fc: sw $a1, 0x60($a0) # .word 0xac850060
.L0x00000400: jr $ra # .word 0x03e00008
.L0x00000404: sw $a2, 0x64($a0) # .word 0xac860064
.L0x00000408: sw $a1, 0x68($a0) # .word 0xac850068
.L0x0000040c: jr $ra # .word 0x03e00008
.L0x00000410: sw $a2, 0x6c($a0) # .word 0xac86006c
.L0x00000414: sw $a1, 0x70($a0) # .word 0xac850070
.L0x00000418: jr $ra # .word 0x03e00008
.L0x0000041c: sw $a2, 0x74($a0) # .word 0xac860074
.L0x00000420: li $v0, 0x1 # .word 0x24020001
.L0x00000424: sw $a1, 0xa8($a0) # .word 0xac8500a8
.L0x00000428: sw $a2, 0xac($a0) # .word 0xac8600ac
.L0x0000042c: sw $a3, 0xb0($a0) # .word 0xac8700b0
.L0x00000430: jr $ra # .word 0x03e00008
.L0x00000434: sw $v0, 0x9c($a0) # .word 0xac82009c
.L0x00000438: sw $a1, 0xa0($a0) # .word 0xac8500a0
.L0x0000043c: jr $ra # .word 0x03e00008
.L0x00000440: sw $a2, 0xa4($a0) # .word 0xac8600a4
.L0x00000444: li $v0, 0x1 # .word 0x24020001
.L0x00000448: sh $a1, 0xb8($a0) # .word 0xa48500b8
.L0x0000044c: sh $a2, 0xba($a0) # .word 0xa48600ba
.L0x00000450: sh $a3, 0xbc($a0) # .word 0xa48700bc
.L0x00000454: jr $ra # .word 0x03e00008
.L0x00000458: sw $v0, 0x9c($a0) # .word 0xac82009c
.L0x0000045c: lui $v1, 0x7fff # .word 0x3c037fff
.L0x00000460: lw $v0, 0x78($a0) # .word 0x8c820078
.L0x00000464: ori $v1, 0xffff # .word 0x3463ffff
.L0x00000468: jr $ra # .word 0x03e00008
.L0x0000046c: and $v0, $v1 # .word 0x00431024
.L0x00000470: beqz $a1, .L0x0000048c # .word 0x10a00006
.L0x00000474: lui $v1, 0x7fff # .word 0x3c037fff
.L0x00000478: lw $v0, 0x78($a0) # .word 0x8c820078
.L0x0000047c: lui $v1, 0x8000 # .word 0x3c038000
.L0x00000480: or $v0, $v1 # .word 0x00431025
.L0x00000484: jr $ra # .word 0x03e00008
.L0x00000488: sw $v0, 0x78($a0) # .word 0xac820078
.L0x0000048c: lw $v0, 0x78($a0) # .word 0x8c820078
.L0x00000490: ori $v1, 0xffff # .word 0x3463ffff
.L0x00000494: and $v0, $v1 # .word 0x00431024
.L0x00000498: jr $ra # .word 0x03e00008
.L0x0000049c: sw $v0, 0x78($a0) # .word 0xac820078
.L0x000004a0: addiu $sp, -0xb0 # .word 0x27bdff50
.L0x000004a4: sw $s4, 0x98($sp) # .word 0xafb40098
.L0x000004a8: move_ $s4, $a0 # .word 0x0080a021

View File

@ -0,0 +1,22 @@
.include "macros.s"
# `fn f10(arg0: *mut Unknown0, set_bit: bool) -> u32`
#
# If `set_bit`, sets and returns `arg0.a9 |= 0x8000_0000`.
# Else sets and returns `arg0.a9 &= 0x7fff_ffff`.
.section "section_STGTRAIN_f10"
.global STGTRAIN_f10
STGTRAIN_f10:
beqz $a1, .L0
lui $v1, 0x7fff
lw $v0, 0x78($a0)
lui $v1, 0x8000
or $v0, $v1
jr $ra
sw $v0, 0x78($a0)
.L0:
lw $v0, 0x78($a0)
ori $v1, 0xffff
and $v0, $v1
jr $ra
sw $v0, 0x78($a0)

View File

@ -0,0 +1,13 @@
.include "macros.s"
# `fn f9(arg0: *mut Unknown0) -> u32`
#
# Returns `arg0.a9 & 0x7fff_ffff`
.section "section_STGTRAIN_f9"
.global STGTRAIN_f9
STGTRAIN_f9:
lui $v1, 0x7fff
lw $v0, 0x78($a0)
ori $v1, 0xffff
jr $ra
and $v0, $v1

View File

@ -4,11 +4,22 @@ objs:
- /build/asm/dw2003/pro/STGTRAIN.o
- /build/asm/dw2003/pro/STGTRAIN/f0.o
- /build/asm/dw2003/pro/STGTRAIN/f1.o
- /build/asm/dw2003/pro/STGTRAIN/f9.o
- /build/asm/dw2003/pro/STGTRAIN/f10.o
- /build/rust/dw2003_pro_STGTRAIN_data.o # TODO: Change to `.a` once it doesn't ignore the data
sections:
- section_STGTRAIN_0
- section_STGTRAIN_f0
- section_STGTRAIN_f1
- section_STGTRAIN_f2
- section_STGTRAIN_f3
- section_STGTRAIN_f4
- section_STGTRAIN_f5
- section_STGTRAIN_f6
- section_STGTRAIN_f7
- section_STGTRAIN_f8
- section_STGTRAIN_f9
- section_STGTRAIN_f10
- section_STGTRAIN_1
- dw2003_pro_STGTRAIN_data
link_with:

View File

@ -3,7 +3,15 @@
/// Unknown0
#[repr(C)]
struct Unknown0 {
pad0: [u8; 0x78], // 0x00
pad0: [u8; 0x58], // 0x00
a17: u32, // 0x58
a16: u32, // 0x5c
a15: u32, // 0x60
a14: u32, // 0x64
a13: u32, // 0x68
a12: u32, // 0x6c
a11: u32, // 0x70
a10: u32, // 0x74
a9: u32, // 0x78
a8: u32, // 0x7c
a0: *mut u16, // 0x80
@ -14,6 +22,16 @@ struct Unknown0 {
a5: u32, // 0x90
a6: u32, // 0x94
a7: u32, // 0x98
a18: u32, // 0x9c
a19: u32, // 0xa0
a20: u32, // 0xa4
a21: u32, // 0xa8
a22: u32, // 0xac
a23: u32, // 0xb0
a24: u32, // 0xb4
a25: u16, // 0xb8
a26: u16, // 0xba
a27: u16, // 0xbc
}
util::decl_static! { "dw2003_pro_STGTRAIN_data",