Merge pull request #75 from DavidSM64/davids-branch

(8.08%) Improved asset extraction & decompiled 5 functions in unknown_0777A0
This commit is contained in:
David Benepe
2020-08-15 19:06:31 -05:00
committed by GitHub
35 changed files with 5672 additions and 4856 deletions
+1
View File
@@ -7,6 +7,7 @@ __pycache__
# Automatically generated folders should be ignored
build/
assets/
ucode/
!asm/assets/
# Linker file is automatically generated, so it should be ignored
+24 -6
View File
@@ -56,9 +56,18 @@ ifeq ($(DUMMY),FAIL)
$(error Failed to build tools)
endif
######## Extract Assets ########
######## Extract Assets & Microcode ########
NEED_TO_EXTRACT = no
ifeq ($(wildcard ./assets/.*),)
NEED_TO_EXTRACT = yes
endif
ifeq ($(wildcard ./ucode/.*),)
NEED_TO_EXTRACT = yes
endif
ifeq ($(NEED_TO_EXTRACT),yes)
DUMMY != ./extract.sh >&2 || echo FAIL
ifeq ($(DUMMY),FAIL)
$(error Failed to extract assets)
@@ -131,7 +140,7 @@ CHEAT_ENCRYPTOR = $(TOOLS_DIR)/dkr_cheats_encryptor
LIB_DIRS := lib
ASM_DIRS := asm asm/boot asm/assets data lib/asm
SRC_DIRS := src src/mips1 lib/src
ASSETS_DIRS := animations audio billboards bin cheats fonts levels objects particles text textures textures/2d textures/3d tt_ghosts ucode
ASSETS_DIRS := animations audio billboards bin cheats fonts levels lut objects particles text textures textures/2d textures/3d tt_ghosts ucode
GLOBAL_ASM_C_FILES != grep -rl 'GLOBAL_ASM(' $(wildcard src/*.c lib/src/*.c)
GLOBAL_ASM_O_FILES = $(foreach file,$(GLOBAL_ASM_C_FILES),$(BUILD_DIR)/$(file:.c=.o))
@@ -149,6 +158,7 @@ O_FILES := $(foreach file,$(S_FILES),$(BUILD_DIR)/$(file:.s=.o)) \
# TODO: Clean this up if possible
ASSETS_DIR = assets/us_1.0
UCODE_DIR = ucode/us_1.0
ASSETS_OBJCOPY = $(CROSS)objcopy --input-target=binary --output-target=binary
@@ -189,6 +199,11 @@ LEVELS = $(wildcard $(LEVELS_IN_DIR)/*.bin $(LEVELS_IN_DIR)/*.cbin)
LEVELS_BUILT = $(patsubst $(LEVELS_IN_DIR)/%.bin,$(LEVELS_OUT_DIR)/%.bin,$(LEVELS))
LEVELS_BUILT += $(patsubst $(LEVELS_IN_DIR)/%.cbin,$(LEVELS_OUT_DIR)/%.cbin,$(LEVELS))
LUT_IN_DIR = $(ASSETS_DIR)/lut
LUT_OUT_DIR = $(BUILD_DIR)/lut
LUT = $(wildcard $(LUT_IN_DIR)/*.bin)
LUT_BUILT := $(patsubst $(LUT_IN_DIR)/%.bin,$(LUT_OUT_DIR)/%.bin,$(LUT))
OBJECTS_IN_DIR = $(ASSETS_DIR)/objects
OBJECTS_OUT_DIR = $(BUILD_DIR)/objects
OBJECTS = $(wildcard $(OBJECTS_IN_DIR)/*.bin $(OBJECTS_IN_DIR)/*.cbin)
@@ -223,12 +238,12 @@ TT_GHOSTS_OUT_DIR = $(BUILD_DIR)/tt_ghosts
TT_GHOSTS = $(wildcard $(TT_GHOSTS_IN_DIR)/*.bin)
TT_GHOSTS_BUILT := $(patsubst $(TT_GHOSTS_IN_DIR)/%.bin,$(TT_GHOSTS_OUT_DIR)/%.bin,$(TT_GHOSTS))
UCODE_IN_DIR = $(ASSETS_DIR)/ucode
UCODE_IN_DIR = $(UCODE_DIR)
UCODE_OUT_DIR = $(BUILD_DIR)/ucode
UCODE = $(wildcard $(UCODE_IN_DIR)/*.bin)
UCODE_BUILT := $(patsubst $(UCODE_IN_DIR)/%.bin,$(UCODE_OUT_DIR)/%.bin,$(UCODE))
ALL_ASSETS_BUILT := $(ANIMATIONS_BUILT) $(AUDIO_BUILT) $(BILLBOARDS_BUILT) $(BINS_BUILT) $(CHEATS_BUILT) $(FONTS_BUILT) $(LEVELS_BUILT) $(OBJECTS_BUILT) $(TEXTURES_BUILT) $(PARTICLES_BUILT) $(TEXT_BUILT) $(TT_GHOSTS_BUILT) $(UCODE_BUILT)
ALL_ASSETS_BUILT := $(ANIMATIONS_BUILT) $(AUDIO_BUILT) $(BILLBOARDS_BUILT) $(BINS_BUILT) $(CHEATS_BUILT) $(FONTS_BUILT) $(LEVELS_BUILT) $(OBJECTS_BUILT) $(TEXTURES_BUILT) $(PARTICLES_BUILT) $(TEXT_BUILT) $(TT_GHOSTS_BUILT) $(UCODE_BUILT) $(LUT_BUILT)
####################### LIBULTRA #########################
@@ -326,6 +341,9 @@ $(LEVELS_OUT_DIR)/%.bin: $(LEVELS_IN_DIR)/%.bin
$(LEVELS_OUT_DIR)/%.cbin: $(LEVELS_IN_DIR)/%.cbin
$(COMPRESS) $^ $@
$(LUT_OUT_DIR)/%.bin: $(LUT_IN_DIR)/%.bin
$(ASSETS_OBJCOPY) $^ $@
$(OBJECTS_OUT_DIR)/%.bin: $(OBJECTS_IN_DIR)/%.bin
$(ASSETS_OBJCOPY) $^ $@
@@ -333,10 +351,10 @@ $(OBJECTS_OUT_DIR)/%.bin: $(OBJECTS_IN_DIR)/%.bin
$(OBJECTS_OUT_DIR)/%.cbin: $(OBJECTS_IN_DIR)/%.cbin
$(COMPRESS) $^ $@
$(TEXTURES_2D_OUT_DIR)/%.bin: $(TEXTURES_2D_IN_DIR)/%.png
$(TEXTURES_2D_OUT_DIR)/%.bin: $(TEXTURES_2D_IN_DIR)/%.png $(TEXTURES_2D_IN_DIR)/%.header
$(TEXBUILDER) $^ $@
$(TEXTURES_3D_OUT_DIR)/%.bin: $(TEXTURES_3D_IN_DIR)/%.png
$(TEXTURES_3D_OUT_DIR)/%.bin: $(TEXTURES_3D_IN_DIR)/%.png $(TEXTURES_3D_IN_DIR)/%.header
$(TEXBUILDER) $^ $@
$(TEXTURES_OUT_DIR)/%.bin: $(TEXTURES_IN_DIR)/%.bin
+3897 -3900
View File
File diff suppressed because it is too large Load Diff
+3
View File
@@ -0,0 +1,3 @@
# This file was generated by generate_ld.py
.incbin "./build/us_1.0/lut/assets_lut.0ECB60.bin"
-8
View File
@@ -1,8 +0,0 @@
# This file was generated by generate_ld.py
.incbin "./build/us_1.0/ucode/ucode_unknown.0d8200.bin"
.incbin "./build/us_1.0/ucode/ucode_boot.0d90c0.bin"
.incbin "./build/us_1.0/ucode/ucode_f3ddkr_dram.0d9190.bin"
.incbin "./build/us_1.0/ucode/ucode_f3ddkr_fifo.0da390.bin"
.incbin "./build/us_1.0/ucode/ucode_f3ddkr_xbus.0db570.bin"
.incbin "./build/us_1.0/ucode/ucode_unknown.0dc770.bin"
+6
View File
@@ -0,0 +1,6 @@
# This file was generated by generate_ld.py
.incbin "./build/us_1.0/ucode/data_f3ddkr_dram.0EA7A0.bin"
.incbin "./build/us_1.0/ucode/data_f3ddkr_fifo.0EAFA0.bin"
.incbin "./build/us_1.0/ucode/data_f3ddkr_xbus.0EB7A0.bin"
.incbin "./build/us_1.0/ucode/data_unknown.0EBFA0.bin"
+8
View File
@@ -0,0 +1,8 @@
# This file was generated by generate_ld.py
.incbin "./build/us_1.0/ucode/ucode_unknown.0D8200.bin"
.incbin "./build/us_1.0/ucode/ucode_boot.0D90C0.bin"
.incbin "./build/us_1.0/ucode/ucode_f3ddkr_dram.0D9190.bin"
.incbin "./build/us_1.0/ucode/ucode_f3ddkr_fifo.0DA390.bin"
.incbin "./build/us_1.0/ucode/ucode_f3ddkr_xbus.0DB570.bin"
.incbin "./build/us_1.0/ucode/ucode_unknown.0DC770.bin"
@@ -1,49 +0,0 @@
glabel func_80076AF4
/* 0776F4 80076AF4 27BDFFD8 */ addiu $sp, $sp, -0x28
/* 0776F8 80076AF8 AFBF0014 */ sw $ra, 0x14($sp)
/* 0776FC 80076AFC AFA40028 */ sw $a0, 0x28($sp)
/* 077700 80076B00 AFA5002C */ sw $a1, 0x2c($sp)
/* 077704 80076B04 24030006 */ li $v1, 6
/* 077708 80076B08 AFA3001C */ sw $v1, 0x1c($sp)
/* 07770C 80076B0C 240500FF */ li $a1, 255
/* 077710 80076B10 0C01C327 */ jal func_80070C9C
/* 077714 80076B14 24040100 */ li $a0, 256
/* 077718 80076B18 8FA40028 */ lw $a0, 0x28($sp)
/* 07771C 80076B1C 8FA5002C */ lw $a1, 0x2c($sp)
/* 077720 80076B20 AFA20024 */ sw $v0, 0x24($sp)
/* 077724 80076B24 00403025 */ move $a2, $v0
/* 077728 80076B28 0C01D984 */ jal func_80076610
/* 07772C 80076B2C 24070100 */ li $a3, 256
/* 077730 80076B30 8FA3001C */ lw $v1, 0x1c($sp)
/* 077734 80076B34 8FA40024 */ lw $a0, 0x24($sp)
/* 077738 80076B38 14400012 */ bnez $v0, .L80076B84
/* 07773C 80076B3C 3C014741 */ lui $at, (0x47414D44 >> 16) # lui $at, 0x4741
/* 077740 80076B40 8C820000 */ lw $v0, ($a0)
/* 077744 80076B44 34214D44 */ ori $at, (0x47414D44 & 0xFFFF) # ori $at, $at, 0x4d44
/* 077748 80076B48 10410009 */ beq $v0, $at, .L80076B70
/* 07774C 80076B4C 3C014748 */ lui $at, (0x47485353 >> 16) # lui $at, 0x4748
/* 077750 80076B50 34215353 */ ori $at, (0x47485353 & 0xFFFF) # ori $at, $at, 0x5353
/* 077754 80076B54 1041000A */ beq $v0, $at, .L80076B80
/* 077758 80076B58 3C015449 */ lui $at, (0x54494D44 >> 16) # lui $at, 0x5449
/* 07775C 80076B5C 34214D44 */ ori $at, (0x54494D44 & 0xFFFF) # ori $at, $at, 0x4d44
/* 077760 80076B60 10410005 */ beq $v0, $at, .L80076B78
/* 077764 80076B64 00000000 */ nop
/* 077768 80076B68 10000006 */ b .L80076B84
/* 07776C 80076B6C 00000000 */ nop
.L80076B70:
/* 077770 80076B70 10000004 */ b .L80076B84
/* 077774 80076B74 24030003 */ li $v1, 3
.L80076B78:
/* 077778 80076B78 10000002 */ b .L80076B84
/* 07777C 80076B7C 24030004 */ li $v1, 4
.L80076B80:
/* 077780 80076B80 24030005 */ li $v1, 5
.L80076B84:
/* 077784 80076B84 0C01C450 */ jal func_80071140
/* 077788 80076B88 AFA3001C */ sw $v1, 0x1c($sp)
/* 07778C 80076B8C 8FBF0014 */ lw $ra, 0x14($sp)
/* 077790 80076B90 8FA2001C */ lw $v0, 0x1c($sp)
/* 077794 80076B94 03E00008 */ jr $ra
/* 077798 80076B98 27BD0028 */ addiu $sp, $sp, 0x28
/* 07779C 80076B9C 00000000 */ nop
@@ -1,48 +0,0 @@
glabel func_80076BA0
/* 0777A0 80076BA0 27BDFFE0 */ addiu $sp, $sp, -0x20
/* 0777A4 80076BA4 AFBF0014 */ sw $ra, 0x14($sp)
/* 0777A8 80076BA8 3C048012 */ lui $a0, %hi(D_80124278) # $a0, 0x8012
/* 0777AC 80076BAC 3C058012 */ lui $a1, %hi(D_80124238) # $a1, 0x8012
/* 0777B0 80076BB0 24A54238 */ addiu $a1, %lo(D_80124238) # addiu $a1, $a1, 0x4238
/* 0777B4 80076BB4 24844278 */ addiu $a0, %lo(D_80124278) # addiu $a0, $a0, 0x4278
/* 0777B8 80076BB8 0C032208 */ jal osCreateMesgQueue
/* 0777BC 80076BBC 24060010 */ li $a2, 16
/* 0777C0 80076BC0 3C048012 */ lui $a0, %hi(D_80124220) # $a0, 0x8012
/* 0777C4 80076BC4 3C058012 */ lui $a1, %hi(D_80124218) # $a1, 0x8012
/* 0777C8 80076BC8 24A54218 */ addiu $a1, %lo(D_80124218) # addiu $a1, $a1, 0x4218
/* 0777CC 80076BCC 24844220 */ addiu $a0, %lo(D_80124220) # addiu $a0, $a0, 0x4220
/* 0777D0 80076BD0 0C032208 */ jal osCreateMesgQueue
/* 0777D4 80076BD4 24060001 */ li $a2, 1
/* 0777D8 80076BD8 3C058012 */ lui $a1, %hi(D_80124278) # $a1, 0x8012
/* 0777DC 80076BDC 3C068012 */ lui $a2, %hi(D_80124238) # $a2, 0x8012
/* 0777E0 80076BE0 24C64238 */ addiu $a2, %lo(D_80124238) # addiu $a2, $a2, 0x4238
/* 0777E4 80076BE4 24A54278 */ addiu $a1, %lo(D_80124278) # addiu $a1, $a1, 0x4278
/* 0777E8 80076BE8 24040096 */ li $a0, 150
/* 0777EC 80076BEC 0C031800 */ jal osCreatePiManager
/* 0777F0 80076BF0 24070010 */ li $a3, 16
/* 0777F4 80076BF4 3C0E000F */ lui $t6, %hi(D_000ECC30) # $t6, 0xf
/* 0777F8 80076BF8 3C0F000F */ lui $t7, %hi(D_000ECB60) # $t7, 0xf
/* 0777FC 80076BFC 25EFCB60 */ addiu $t7, %lo(D_000ECB60) # addiu $t7, $t7, -0x34a0
/* 077800 80076C00 25CECC30 */ addiu $t6, %lo(D_000ECC30) # addiu $t6, $t6, -0x33d0
/* 077804 80076C04 01CF1023 */ subu $v0, $t6, $t7
/* 077808 80076C08 3C057F7F */ lui $a1, (0x7F7F7FFF >> 16) # lui $a1, 0x7f7f
/* 07780C 80076C0C 34A57FFF */ ori $a1, (0x7F7F7FFF & 0xFFFF) # ori $a1, $a1, 0x7fff
/* 077810 80076C10 00402025 */ move $a0, $v0
/* 077814 80076C14 0C01C327 */ jal func_80070C9C
/* 077818 80076C18 AFA20018 */ sw $v0, 0x18($sp)
/* 07781C 80076C1C 3C038012 */ lui $v1, %hi(D_80124290) # $v1, 0x8012
/* 077820 80076C20 24634290 */ addiu $v1, %lo(D_80124290) # addiu $v1, $v1, 0x4290
/* 077824 80076C24 AC620000 */ sw $v0, ($v1)
/* 077828 80076C28 0C01C51E */ jal func_80071478
/* 07782C 80076C2C 00402025 */ move $a0, $v0
/* 077830 80076C30 3C058012 */ lui $a1, %hi(D_80124290) # $a1, 0x8012
/* 077834 80076C34 8CA54290 */ lw $a1, %lo(D_80124290)($a1)
/* 077838 80076C38 3C04000F */ lui $a0, %hi(D_000ECB60) # $a0, 0xf
/* 07783C 80076C3C 8FA60018 */ lw $a2, 0x18($sp)
/* 077840 80076C40 0C01DBDE */ jal func_80076F78
/* 077844 80076C44 2484CB60 */ addiu $a0, %lo(D_000ECB60) # addiu $a0, $a0, -0x34a0
/* 077848 80076C48 8FBF0014 */ lw $ra, 0x14($sp)
/* 07784C 80076C4C 27BD0020 */ addiu $sp, $sp, 0x20
/* 077850 80076C50 03E00008 */ jr $ra
/* 077854 80076C54 00000000 */ nop
@@ -31,7 +31,7 @@ glabel func_80076C58
/* 0778C4 80076CC4 2739CC30 */ addiu $t9, %lo(D_000ECC30) # addiu $t9, $t9, -0x33d0
/* 0778C8 80076CC8 8FA6001C */ lw $a2, 0x1c($sp)
/* 0778CC 80076CCC 00F92021 */ addu $a0, $a3, $t9
/* 0778D0 80076CD0 0C01DBDE */ jal func_80076F78
/* 0778D0 80076CD0 0C01DBDE */ jal dmacopy
/* 0778D4 80076CD4 AFA50020 */ sw $a1, 0x20($sp)
/* 0778D8 80076CD8 8FA20020 */ lw $v0, 0x20($sp)
/* 0778DC 80076CDC 00000000 */ nop
@@ -71,7 +71,7 @@ glabel func_80076C58
/* 077958 80076D58 AFA20028 */ sw $v0, 0x28($sp)
/* 07795C 80076D5C AFA40020 */ sw $a0, 0x20($sp)
/* 077960 80076D60 00402825 */ move $a1, $v0
/* 077964 80076D64 0C01DBDE */ jal func_80076F78
/* 077964 80076D64 0C01DBDE */ jal dmacopy
/* 077968 80076D68 24060008 */ li $a2, 8
/* 07796C 80076D6C 8FA40028 */ lw $a0, 0x28($sp)
/* 077970 80076D70 0C03186B */ jal byteswap32
@@ -98,7 +98,7 @@ glabel func_80076C58
/* 0779C0 80076DC0 8FA40020 */ lw $a0, 0x20($sp)
/* 0779C4 80076DC4 01C62823 */ subu $a1, $t6, $a2
/* 0779C8 80076DC8 AFA5001C */ sw $a1, 0x1c($sp)
/* 0779CC 80076DCC 0C01DBDE */ jal func_80076F78
/* 0779CC 80076DCC 0C01DBDE */ jal dmacopy
/* 0779D0 80076DD0 AFA70024 */ sw $a3, 0x24($sp)
/* 0779D4 80076DD4 8FA50024 */ lw $a1, 0x24($sp)
/* 0779D8 80076DD8 8FA4001C */ lw $a0, 0x1c($sp)
@@ -132,7 +132,7 @@ glabel func_80076C58
/* 077A3C 80076E3C 2739CC30 */ addiu $t9, %lo(D_000ECC30) # addiu $t9, $t9, -0x33d0
/* 077A40 80076E40 03033023 */ subu $a2, $t8, $v1
/* 077A44 80076E44 AFA60018 */ sw $a2, 0x18($sp)
/* 077A48 80076E48 0C01DBDE */ jal func_80076F78
/* 077A48 80076E48 0C01DBDE */ jal dmacopy
/* 077A4C 80076E4C 00792021 */ addu $a0, $v1, $t9
/* 077A50 80076E50 8FA20018 */ lw $v0, 0x18($sp)
/* 077A54 80076E54 00000000 */ nop
@@ -1,37 +0,0 @@
glabel func_80076E68
/* 077A68 80076E68 27BDFFE8 */ addiu $sp, $sp, -0x18
/* 077A6C 80076E6C AFBF0014 */ sw $ra, 0x14($sp)
/* 077A70 80076E70 AFA40018 */ sw $a0, 0x18($sp)
/* 077A74 80076E74 10E00009 */ beqz $a3, .L80076E9C
/* 077A78 80076E78 AFA60020 */ sw $a2, 0x20($sp)
/* 077A7C 80076E7C 3C088012 */ lui $t0, %hi(D_80124290) # $t0, 0x8012
/* 077A80 80076E80 8D084290 */ lw $t0, %lo(D_80124290)($t0)
/* 077A84 80076E84 8FB80018 */ lw $t8, 0x18($sp)
/* 077A88 80076E88 8D0E0000 */ lw $t6, ($t0)
/* 077A8C 80076E8C 27190001 */ addiu $t9, $t8, 1
/* 077A90 80076E90 01C4082B */ sltu $at, $t6, $a0
/* 077A94 80076E94 10200003 */ beqz $at, .L80076EA4
/* 077A98 80076E98 00194880 */ sll $t1, $t9, 2
.L80076E9C:
/* 077A9C 80076E9C 1000000E */ b .L80076ED8
/* 077AA0 80076EA0 00001025 */ move $v0, $zero
.L80076EA4:
/* 077AA4 80076EA4 AFB90018 */ sw $t9, 0x18($sp)
/* 077AA8 80076EA8 01281021 */ addu $v0, $t1, $t0
/* 077AAC 80076EAC 8C4A0000 */ lw $t2, ($v0)
/* 077AB0 80076EB0 8FAB0020 */ lw $t3, 0x20($sp)
/* 077AB4 80076EB4 3C0C000F */ lui $t4, %hi(D_000ECC30) # $t4, 0xf
/* 077AB8 80076EB8 258CCC30 */ addiu $t4, %lo(D_000ECC30) # addiu $t4, $t4, -0x33d0
/* 077ABC 80076EBC 014B1821 */ addu $v1, $t2, $t3
/* 077AC0 80076EC0 006C2021 */ addu $a0, $v1, $t4
/* 077AC4 80076EC4 AFA70024 */ sw $a3, 0x24($sp)
/* 077AC8 80076EC8 0C01DBDE */ jal func_80076F78
/* 077ACC 80076ECC 00E03025 */ move $a2, $a3
/* 077AD0 80076ED0 8FA20024 */ lw $v0, 0x24($sp)
/* 077AD4 80076ED4 00000000 */ nop
.L80076ED8:
/* 077AD8 80076ED8 8FBF0014 */ lw $ra, 0x14($sp)
/* 077ADC 80076EDC 27BD0018 */ addiu $sp, $sp, 0x18
/* 077AE0 80076EE0 03E00008 */ jr $ra
/* 077AE4 80076EE4 00000000 */ nop
@@ -1,22 +0,0 @@
glabel func_80076EE8
/* 077AE8 80076EE8 3C038012 */ lui $v1, %hi(D_80124290) # $v1, 0x8012
/* 077AEC 80076EEC 8C634290 */ lw $v1, %lo(D_80124290)($v1)
/* 077AF0 80076EF0 00A03825 */ move $a3, $a1
/* 077AF4 80076EF4 8C6E0000 */ lw $t6, ($v1)
/* 077AF8 80076EF8 3C19000F */ lui $t9, 0xf
/* 077AFC 80076EFC 01C4082B */ sltu $at, $t6, $a0
/* 077B00 80076F00 10200003 */ beqz $at, .L80076F10
/* 077B04 80076F04 24840001 */ addiu $a0, $a0, 1
/* 077B08 80076F08 03E00008 */ jr $ra
/* 077B0C 80076F0C 00001025 */ move $v0, $zero
.L80076F10:
/* 077B10 80076F10 00047880 */ sll $t7, $a0, 2
/* 077B14 80076F14 01E32821 */ addu $a1, $t7, $v1
/* 077B18 80076F18 8CB80000 */ lw $t8, ($a1)
/* 077B1C 80076F1C 2739CC30 */ addiu $t9, $t9, -0x33d0
/* 077B20 80076F20 03073021 */ addu $a2, $t8, $a3
/* 077B24 80076F24 00D91021 */ addu $v0, $a2, $t9
/* 077B28 80076F28 03E00008 */ jr $ra
/* 077B2C 80076F2C 00000000 */ nop
@@ -1,22 +0,0 @@
glabel func_80076F30
/* 077B30 80076F30 3C038012 */ lui $v1, %hi(D_80124290) # $v1, 0x8012
/* 077B34 80076F34 8C634290 */ lw $v1, %lo(D_80124290)($v1)
/* 077B38 80076F38 00000000 */ nop
/* 077B3C 80076F3C 8C6E0000 */ lw $t6, ($v1)
/* 077B40 80076F40 00000000 */ nop
/* 077B44 80076F44 01C4082B */ sltu $at, $t6, $a0
/* 077B48 80076F48 10200003 */ beqz $at, .L80076F58
/* 077B4C 80076F4C 24840001 */ addiu $a0, $a0, 1
/* 077B50 80076F50 03E00008 */ jr $ra
/* 077B54 80076F54 00001025 */ move $v0, $zero
.L80076F58:
/* 077B58 80076F58 00047880 */ sll $t7, $a0, 2
/* 077B5C 80076F5C 01E32821 */ addu $a1, $t7, $v1
/* 077B60 80076F60 8CB80004 */ lw $t8, 4($a1)
/* 077B64 80076F64 8CB90000 */ lw $t9, ($a1)
/* 077B68 80076F68 00000000 */ nop
/* 077B6C 80076F6C 03191023 */ subu $v0, $t8, $t9
/* 077B70 80076F70 03E00008 */ jr $ra
/* 077B74 80076F74 00000000 */ nop
@@ -1,60 +0,0 @@
glabel func_80076F78
/* 077B78 80076F78 27BDFFB0 */ addiu $sp, $sp, -0x50
/* 077B7C 80076F7C AFB30034 */ sw $s3, 0x34($sp)
/* 077B80 80076F80 00809825 */ move $s3, $a0
/* 077B84 80076F84 AFB20030 */ sw $s2, 0x30($sp)
/* 077B88 80076F88 00A09025 */ move $s2, $a1
/* 077B8C 80076F8C AFBF0044 */ sw $ra, 0x44($sp)
/* 077B90 80076F90 AFB1002C */ sw $s1, 0x2c($sp)
/* 077B94 80076F94 00A02025 */ move $a0, $a1
/* 077B98 80076F98 00C08825 */ move $s1, $a2
/* 077B9C 80076F9C AFB60040 */ sw $s6, 0x40($sp)
/* 077BA0 80076FA0 AFB5003C */ sw $s5, 0x3c($sp)
/* 077BA4 80076FA4 AFB40038 */ sw $s4, 0x38($sp)
/* 077BA8 80076FA8 AFB00028 */ sw $s0, 0x28($sp)
/* 077BAC 80076FAC 0C0345FC */ jal osInvalDCache
/* 077BB0 80076FB0 00C02825 */ move $a1, $a2
/* 077BB4 80076FB4 1A200019 */ blez $s1, .L8007701C
/* 077BB8 80076FB8 24105000 */ li $s0, 20480
/* 077BBC 80076FBC 3C158012 */ lui $s5, %hi(D_80124200) # $s5, 0x8012
/* 077BC0 80076FC0 3C148012 */ lui $s4, %hi(D_80124220) # $s4, 0x8012
/* 077BC4 80076FC4 26944220 */ addiu $s4, %lo(D_80124220) # addiu $s4, $s4, 0x4220
/* 077BC8 80076FC8 26B54200 */ addiu $s5, %lo(D_80124200) # addiu $s5, $s5, 0x4200
/* 077BCC 80076FCC 27B6004C */ addiu $s6, $sp, 0x4c
.L80076FD0:
/* 077BD0 80076FD0 0230082A */ slt $at, $s1, $s0
/* 077BD4 80076FD4 10200002 */ beqz $at, .L80076FE0
/* 077BD8 80076FD8 02A02025 */ move $a0, $s5
/* 077BDC 80076FDC 02208025 */ move $s0, $s1
.L80076FE0:
/* 077BE0 80076FE0 00002825 */ move $a1, $zero
/* 077BE4 80076FE4 00003025 */ move $a2, $zero
/* 077BE8 80076FE8 02603825 */ move $a3, $s3
/* 077BEC 80076FEC AFB20010 */ sw $s2, 0x10($sp)
/* 077BF0 80076FF0 AFB00014 */ sw $s0, 0x14($sp)
/* 077BF4 80076FF4 0C0323E0 */ jal osPiStartDma
/* 077BF8 80076FF8 AFB40018 */ sw $s4, 0x18($sp)
/* 077BFC 80076FFC 02802025 */ move $a0, $s4
/* 077C00 80077000 02C02825 */ move $a1, $s6
/* 077C04 80077004 0C0322EC */ jal osRecvMesg
/* 077C08 80077008 24060001 */ li $a2, 1
/* 077C0C 8007700C 02308823 */ subu $s1, $s1, $s0
/* 077C10 80077010 02709821 */ addu $s3, $s3, $s0
/* 077C14 80077014 1E20FFEE */ bgtz $s1, .L80076FD0
/* 077C18 80077018 02509021 */ addu $s2, $s2, $s0
.L8007701C:
/* 077C1C 8007701C 8FBF0044 */ lw $ra, 0x44($sp)
/* 077C20 80077020 8FB00028 */ lw $s0, 0x28($sp)
/* 077C24 80077024 8FB1002C */ lw $s1, 0x2c($sp)
/* 077C28 80077028 8FB20030 */ lw $s2, 0x30($sp)
/* 077C2C 8007702C 8FB30034 */ lw $s3, 0x34($sp)
/* 077C30 80077030 8FB40038 */ lw $s4, 0x38($sp)
/* 077C34 80077034 8FB5003C */ lw $s5, 0x3c($sp)
/* 077C38 80077038 8FB60040 */ lw $s6, 0x40($sp)
/* 077C3C 8007703C 03E00008 */ jr $ra
/* 077C40 80077040 27BD0050 */ addiu $sp, $sp, 0x50
/* 077C44 80077044 00000000 */ nop
/* 077C48 80077048 00000000 */ nop
/* 077C4C 8007704C 00000000 */ nop
@@ -28,7 +28,7 @@ glabel func_8008AD44
.L8008ADA8:
/* 08B9A8 8008ADA8 02602025 */ move $a0, $s3
/* 08B9AC 8008ADAC 02802825 */ move $a1, $s4
/* 08B9B0 8008ADB0 0C01DBDE */ jal func_80076F78
/* 08B9B0 8008ADB0 0C01DBDE */ jal dmacopy
/* 08B9B4 8008ADB4 02203025 */ move $a2, $s1
/* 08B9B8 8008ADB8 1A20001F */ blez $s1, .L8008AE38
/* 08B9BC 8008ADBC 02519023 */ subu $s2, $s2, $s1
+144 -26
View File
@@ -19,6 +19,10 @@ subfolder: "us_1.0"
# All of the sizes must add up to the total ROM size!
# -------------------------------------------------------------------------- #
asset-category: "none"
# [0x000000, 0x000040] = ROM Header, not extracted
[0x40]: "NoExtract"
@@ -29,49 +33,75 @@ subfolder: "us_1.0"
[0xD7200]: "NoExtract"
# [0x0D8200, 0x0D90C0] = Unknown microcode
[0xEC0]: "Binary", "ucode_unknown", "ucode"
[0xEC0]: "Binary", "ucode_unknown", "../../ucode/us_1.0"
# [0x0D90C0, 0x0D9190] = Microcode boot code
[0xD0]: "Binary", "ucode_boot", "ucode"
[0xD0]: "Binary", "ucode_boot", "../../ucode/us_1.0"
# [0x0D9190, 0x0DA390] = DRAM Dump version of F3DDKR
[0x1200]: "Binary", "ucode_f3ddkr_dram", "ucode"
[0x1200]: "Binary", "ucode_f3ddkr_dram", "../../ucode/us_1.0"
# [0x0DA390, 0x0DB570] = FIFO version of F3DDKR
[0x11E0]: "Binary", "ucode_f3ddkr_fifo", "ucode"
[0x11E0]: "Binary", "ucode_f3ddkr_fifo", "../../ucode/us_1.0"
# [0x0DB570, 0x0DC770] = XBUS version of F3DDKR
[0x1200]: "Binary", "ucode_f3ddkr_xbus", "ucode"
[0x1200]: "Binary", "ucode_f3ddkr_xbus", "../../ucode/us_1.0"
# [0x0DC770, 0x0DD230] = Unknown microcode
[0xAC0]: "Binary", "ucode_unknown", "ucode"
[0xAC0]: "Binary", "ucode_unknown", "../../ucode/us_1.0"
# [0x0DD230, 0x0EA7A0] = .data section of the game code
[0xD570]: "NoExtract"
# [0x0EA7A0, 0x0EAFA0] = Data section of F3DDKR-DRAM
[0x800]: "Binary", "data_f3ddkr_dram", "ucode"
[0x800]: "Binary", "data_f3ddkr_dram", "../../ucode/us_1.0"
# [0x0EAFA0, 0x0EB7A0] = Data section of F3DDKR-FIFO
[0x800]: "Binary", "data_f3ddkr_fifo", "ucode"
[0x800]: "Binary", "data_f3ddkr_fifo", "../../ucode/us_1.0"
# [0x0EB7A0, 0x0EBFA0] = Data section of F3DDKR-XBUS
[0x800]: "Binary", "data_f3ddkr_xbus", "ucode"
[0x800]: "Binary", "data_f3ddkr_xbus", "../../ucode/us_1.0"
# [0x0EBFA0, 0x0ECD50] = Unknown
[0xDB0]: "Binary", "unknown", "bin"
# [0x0EBFA0, 0x0ECB60] = Unknown
[0xBC0]: "Binary", "data_unknown", "../../ucode/us_1.0"
# -------------------------------------------------------------------------- #
asset-category: "main"
# [0x0ECB60, 0x0ECC30] = Assets lookup table.
[0xD0]: "Binary", "assets_lut", "lut"
# -------------------------------------------------------------------------- #
asset-category: "other"
# [0x0ECC30, 0x0ECD50] = Unknown
[0x120]: "Binary", "unknown", "bin"
# -------------------------------------------------------------------------- #
asset-category: "textures_3d"
# [0x0ECD50, 0x296CA0] = Textures for 3D models
include: "extract-textures/textures_3d-us-1.0.extract-config"
# [0x296CA0, 0x298290] = 3D Textures lookup table
[0x15F0]: "Binary", "textures_3d_lut", "textures"
[0x15F0]: "Binary", "textures_3d_lut", "lut"
# -------------------------------------------------------------------------- #
asset-category: "textures_2d"
# [0x298290, 0x375D70] = Textures for HUD & billboards
include: "extract-textures/textures_2d-us-1.0.extract-config"
# [0x375D70, 0x376BA0] = 2D Textures lookup table
[0xE30]: "Binary", "textures_2d_lut", "textures"
[0xE30]: "Binary", "textures_2d_lut", "lut"
# -------------------------------------------------------------------------- #
asset-category: "text"
# [0x376BA0, 0x37E030] = Game Text (English, French, German)
[0x7490]: "Binary", "game_text", "text"
@@ -86,106 +116,194 @@ include: "extract-textures/textures_2d-us-1.0.extract-config"
# [0x3808C8, 0x380BB0] is 0xFF Padding
[0x1080]: "Binary", "menu_text_german", "text"
# -------------------------------------------------------------------------- #
asset-category: "other"
# [0x380BB0, 0x380BE0] = Unknown
[0x30]: "Binary", "unknown", "bin"
# [0x380BE0, 0x381AA0] = Billboards (Probably needs to renamed to "Sprites")
# -------------------------------------------------------------------------- #
asset-category: "sprites"
# [0x380BE0, 0x381AA0] = Sprites
include: "extract-billboards/billboards-us-1.0.extract-config"
# [0x381AA0, 0x381DB0] = Billboards lookup table
[0x310]: "Binary", "billboards_lut", "billboards"
[0x310]: "Binary", "billboards_lut", "lut"
# -------------------------------------------------------------------------- #
asset-category: "other"
# [0x381DB0, 0x3833A0] = Unknown
[0x15F0]: "Binary", "unknown", "bin"
# -------------------------------------------------------------------------- #
asset-category: "cheats"
# [0x3833A0, 0x383760] = Magic Codes
[0x3C0]: "Cheats", "magic_codes", "cheats"
# -------------------------------------------------------------------------- #
asset-category: "other"
# [0x383760, 0x383AA0] = Unknown
[0x340]: "Binary", "unknown", "bin"
# -------------------------------------------------------------------------- #
asset-category: "level_object_maps"
# [0x383AA0, 0x383CD0] = Object placements map lookup table
[0x230]: "Binary", "level_object_maps_lut", "levels"
[0x230]: "Binary", "level_object_maps_lut", "lut"
# [0x383CD0, 0x3A1440] = Object placements map
include: "extract-levels/object-maps-us-1.0.extract-config"
# -------------------------------------------------------------------------- #
asset-category: "level_headers"
# [0x3A1440, 0x3A1550] = Level headers lookup table
[0x110]: "Binary", "level_headers_lut", "levels"
[0x110]: "Binary", "level_headers_lut", "lut"
# [0x3A1550, 0x3A4820] = Level headers
include: "extract-levels/level_headers-us-1.0.extract-config"
# -------------------------------------------------------------------------- #
asset-category: "level_names"
# [0x3A4820, 0x3A4930] = Level names lookup
[0x110]: "Binary", "level_names_lut", "levels"
[0x110]: "Binary", "level_names_lut", "lut"
# [0x3A4930, 0x3A5670] = Level names in each language
include: "extract-levels/level_names-us-1.0.extract-config"
# [0x3A5670, 0x3A5760] = Levels lookup table
[0xF0]: "Binary", "levels_lut", "levels"
# -------------------------------------------------------------------------- #
# [0x3A5760, 0x54F4B0] = Levels
asset-category: "level_models"
# [0x3A5670, 0x3A5760] = Level models lookup table
[0xF0]: "Binary", "level_models_lut", "lut"
# [0x3A5760, 0x54F4B0] = Level models
include: "extract-levels/levels-us-1.0.extract-config"
# -------------------------------------------------------------------------- #
asset-category: "object_models"
# [0x54F4B0, 0x54FAD0] = Objects lookup table
[0x620]: "Binary", "object_models_lut", "objects"
[0x620]: "Binary", "object_models_lut", "lut"
# [0x54FAD0, 0x61FA70] = Objects data
include: "extract-objects/objects-us-1.0.extract-config"
# -------------------------------------------------------------------------- #
asset-category: "other"
# [0x61FA70, 0x61FD80] = Unknown
[0x310]: "Binary", "unknown", "bin"
# -------------------------------------------------------------------------- #
asset-category: "object_animations"
# [0x61FD80, 0x6204E0] = Animations lookup table
[0x760]: "Binary", "animations_lut", "animations"
[0x760]: "Binary", "animations_lut", "lut"
# [0x6204E0, 0x6C0050] = Animations
include: "extract-animations/animations-us-1.0.extract-config"
# -------------------------------------------------------------------------- #
asset-category: "object_headers"
# [0x6C0050, 0x6C0520] = Object headers lookup table
[0x4D0]: "Binary", "object_headers_lut", "objects"
[0x4D0]: "Binary", "object_headers_lut", "lut"
# [0x6C0520, 0x6CBDE0] = Object headers
include: "extract-objects/object_headers-us-1.0.extract-config"
# -------------------------------------------------------------------------- #
asset-category: "object_other"
# [0x6CBDE0, 0x6CC1E0] = Level Object Map Id to Object Header Id translatation table.
[0x400]: "Binary", "level_object_translate_table", "levels"
# -------------------------------------------------------------------------- #
asset-category: "other"
# [0x6CC1E0, 0x6CC1F0] = Unknown.
[0x10]: "Binary", "unknown", "bin"
# -------------------------------------------------------------------------- #
asset-category: "audio"
# [0x6CC1F0, 0x6CC1F0] = Header/Lookup table for the huge audio file.
[0x40]: "Binary", "audio_header", "audio"
# [0x6CC1E0, 0xAA6330] = Audio (Instruments, Sound effects, Music)
[0x3DA100]: "Binary", "audio", "audio"
# -------------------------------------------------------------------------- #
asset-category: "particles"
# [0xAA6330, 0xAA6450] = Particles lookup table
[0x120]: "Binary", "particles_lut", "particles"
[0x120]: "Binary", "particles_lut", "lut"
# [0xAA6450, 0xAA6AE0] = Particles
# [0x690]: "Binary", "particles", "particles"
include: "extract-particles/particles-us-1.0.extract-config"
# -------------------------------------------------------------------------- #
asset-category: "particle_behaviors"
# [0xAA6AE0, 0xAA6C20] = Particle Behaviors lookup table
[0x140]: "Binary", "particle_behaviors_lut", "particles"
[0x140]: "Binary", "particle_behaviors_lut", "lut"
# [0xAA6C20, 0xAA9B00] = Particle Behaviors
include: "extract-particles/particle_behaviors-us-1.0.extract-config"
# -------------------------------------------------------------------------- #
asset-category: "fonts"
# [0xAA9B00, 0xAAAB00] = Fonts
include: "extract-fonts/fonts-us-1.0.extract-config"
# [0xAAAB00, 0xABBDA0] = Unused fontsheet?
[0x112A0]: "Binary", "unknown_4bpp_fontsheet_192x732", "fonts"
# -------------------------------------------------------------------------- #
asset-category: "other"
# [0xABBDA0, 0xABBDC0] = Unknown.
[0x20]: "Binary", "unknown", "bin"
# -------------------------------------------------------------------------- #
asset-category: "tt_ghosts"
# [0xABBDC0, 0xAC9630] = T.T. Ghosts
include: "extract-tt_ghosts/tt_ghosts-us-1.0.extract-config"
# -------------------------------------------------------------------------- #
asset-category: "none"
# [0xAC9630, 0xC00000] = 0xFF padding
[0x1369D0]: "NoExtract"
+6
View File
@@ -6,6 +6,12 @@ if [ -d "$ASSETS_DIR" ]; then
rm -r $ASSETS_DIR
fi
# Remove ucode directory if it exists.
UCODE_DIR="./ucode/"
if [ -d "$UCODE_DIR" ]; then
rm -r $UCODE_DIR
fi
if ! ./tools/dkr_extractor ./extract-ver ./baseroms .; then
exit 1
fi
+2 -11
View File
@@ -83,9 +83,8 @@ GLOBAL_ASM("asm/non_matchings/unknown_072E50/func_800766D4.s")
GLOBAL_ASM("asm/non_matchings/unknown_072E50/func_80076924.s")
GLOBAL_ASM("asm/non_matchings/unknown_072E50/func_8007698C.s")
GLOBAL_ASM("asm/non_matchings/unknown_072E50/func_80076A38.s")
GLOBAL_ASM("asm/non_matchings/unknown_072E50/func_80076AF4.s")
/*
// Last function of file
//GLOBAL_ASM("asm/non_matchings/unknown_072E50/func_80076AF4.s")
s32 func_80076AF4(s32 arg0, s32 arg1) {
s32* temp;
s32 pad;
@@ -112,11 +111,3 @@ s32 func_80076AF4(s32 arg0, s32 arg1) {
func_80071140(temp);
return ret;
}
*/
GLOBAL_ASM("asm/non_matchings/unknown_072E50/func_80076BA0.s")
GLOBAL_ASM("asm/non_matchings/unknown_072E50/func_80076C58.s")
GLOBAL_ASM("asm/non_matchings/unknown_072E50/func_80076E68.s")
GLOBAL_ASM("asm/non_matchings/unknown_072E50/func_80076EE8.s")
GLOBAL_ASM("asm/non_matchings/unknown_072E50/func_80076F30.s")
GLOBAL_ASM("asm/non_matchings/unknown_072E50/func_80076F78.s")
+172
View File
@@ -0,0 +1,172 @@
/* The comment below is needed for this file to be picked up by generate_ld */
/* RAM_POS: 0x80072250 */
#include "types.h"
#include "macros.h"
extern s32 *D_80124200;
extern s32 D_80124218;
extern s32 D_80124220;
extern s32 D_80124238;
extern s32 D_80124278;
extern s32 *D_80124290;
// These are both defined in the generated dkr.ld file.
extern u8 __ASSETS_LUT_START, __ASSETS_LUT_END; // __ASSETS_LUT_START = 0xECB60, _END = 0xECC30
void osCreateMesgQueue(s32*, s32*, s32);
void osCreatePiManager(s32, s32*, s32*, s32);
void *func_80070C9C(s32, s32);
s32 func_80071478(s32*);
void dmacopy(u32 romOffset, u8 *ramAddress, s32 numBytes);
void func_80076BA0(void) {
u32 size;
osCreateMesgQueue(&D_80124278, &D_80124238, 0x10);
osCreateMesgQueue(&D_80124220, &D_80124218, 1);
osCreatePiManager(0x96, &D_80124278, &D_80124238, 0x10);
size = &__ASSETS_LUT_END - &__ASSETS_LUT_START;
D_80124290 = (s32*)func_80070C9C(size, 0x7F7F7FFF);
func_80071478(D_80124290);
dmacopy(&__ASSETS_LUT_START, D_80124290, size);
}
#if 1
GLOBAL_ASM("asm/non_matchings/unknown_072E50/func_80076C58.s")
#else
// This function is OK
s32 *func_80076C58(u32 arg0) {
s32 *temp;
s32 *temp2;
s32 size;
s32 start;
if (D_80124290[0] < arg0) {
return NULL;
}
arg0++;
temp = arg0 + D_80124290;
start = *temp;
size = *(temp + 1) - start;
temp2 = (s32*)func_80070C9C(size, 0x7F7F7FFF);
if (temp2 == NULL) {
return NULL;
}
dmacopy(start + &__ASSETS_LUT_END, temp2, size);
return temp2;
}
// Unused?
// This has regalloc & stack issues.
u8 *func_80076CF0(u32 arg0, s32 arg1) {
s32 size;
s32 sp2C;
s32 start;
s32 *temp;
u8 *temp_a1;
u8 *temp_v0_2;
u8 *temp_v0_3;
u8 *temp_a0;
if (D_80124290[0] < arg0) {
return NULL;
}
arg0++;
temp = arg0 + D_80124290;
start = *temp;
size = *(temp + 1) - start;
temp_v0_2 = (u8*)func_80070C9C(8, 0xFFFFFFFF);
temp_a0 = start + &__ASSETS_LUT_END;
dmacopy(temp_a0, temp_v0_2, 8);
sp2C = byteswap32(temp_v0_2) + arg1;
func_80071140(temp_v0_2);
temp_v0_3 = (u8*)func_80070C9C(sp2C + arg1, 0x7F7F7FFF);
if (temp_v0_3 == NULL) {
return NULL;
}
temp_a1 = (temp_v0_3 + sp2C) - size;
dmacopy(temp_a0, temp_a1, size);
func_800C6218(temp_a1, temp_v0_3);
return temp_v0_3;
}
// Unused?
// This function is OK
s32 func_80076DFC(u32 arg0, s32 *arg1) {
s32 start;
s32 size;
u8 *temp;
if (D_80124290[0] < arg0) {
return 0;
}
arg0++;
temp = arg0 + D_80124290;
start = *temp;
size = *(temp + 1) - start;
dmacopy(start + &__ASSETS_LUT_END, arg1, size);
return size;
}
#endif
s32 func_80076E68(u32 arg0, s32 *arg1, s32 arg2, s32 arg3) {
s32 *temp;
s32 temp2;
if (arg3 == 0 || D_80124290[0] < arg0) {
return 0;
}
arg0++;
temp = arg0 + D_80124290;
temp2 = *temp + arg2;
dmacopy(temp2 + &__ASSETS_LUT_END, arg1, arg3);
return arg3;
}
u8 *func_80076EE8(u32 arg0, s32 arg1) {
s32 *temp;
s32 temp2;
s32 temp3;
if (D_80124290[0] < arg0) {
return NULL;
}
arg0++;
temp = arg0 + D_80124290;
temp3 = *temp + arg1;
return temp3 + &__ASSETS_LUT_END;
}
s32 func_80076F30(u32 arg0) {
s32 *temp;
if (D_80124290[0] < arg0) {
return 0;
}
arg0++;
temp = arg0 + D_80124290;
return *(temp + 1) - *temp;
}
#define MAX_TRANSFER_SIZE 0x5000 // Why did they pick 20 KB as the transfer limit?
void dmacopy(u32 romOffset, u8 *ramAddress, s32 numBytes) {
s32 sp4C;
s32 numBytesToDMA;
osInvalDCache(ramAddress, numBytes);
numBytesToDMA = MAX_TRANSFER_SIZE;
while(numBytes > 0) {
if (numBytes < numBytesToDMA) {
numBytesToDMA = numBytes;
}
osPiStartDma(&D_80124200, 0, 0, romOffset, ramAddress, numBytesToDMA, &D_80124220);
osRecvMesg(&D_80124220, &sp4C, 1);
numBytes -= numBytesToDMA;
romOffset += numBytesToDMA;
ramAddress += numBytesToDMA;
}
}
+36 -439
View File
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More