From b2f3d928a4d51c44969691396dce1faa7344d560 Mon Sep 17 00:00:00 2001 From: Alejandro Javier Asenjo Nitti Date: Tue, 3 Oct 2023 02:57:03 -0300 Subject: [PATCH] progress on disassembly --- Makefile | 14 ++ Makefile_Progess | 202 ++++++++++++++++++++++ starfox64.yaml => yamls/starfox64.us.yaml | 6 +- 3 files changed, 219 insertions(+), 3 deletions(-) create mode 100644 Makefile create mode 100644 Makefile_Progess rename starfox64.yaml => yamls/starfox64.us.yaml (96%) mode change 100644 => 100755 diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..2b6d004b --- /dev/null +++ b/Makefile @@ -0,0 +1,14 @@ +VERSION ?= us + +BASEROM := baserom.$(VERSION).z64 +TARGET := starfox64 + +SPLAT ?= tools/splat/split.py +SPLAT_YAML ?= $(TARGET).$(VERSION).yaml + + + +extract: +# $(RM) -r asm/$(VERSION) bin/$(VERSION) +# $(CAT) yamls/$(VERSION)/header.yaml yamls/$(VERSION)/makerom.yaml yamls/$(VERSION)/main.yaml > $(SPLAT_YAML) + $(SPLAT) yamls/$(SPLAT_YAML) \ No newline at end of file diff --git a/Makefile_Progess b/Makefile_Progess new file mode 100644 index 00000000..3c7d1179 --- /dev/null +++ b/Makefile_Progess @@ -0,0 +1,202 @@ +# Build options can be changed by modifying the makefile or by building with 'make SETTING=value'. +# It is also possible to override the settings in Defaults in a file called .make_options as 'SETTING=value'. + +-include .make_options + +MAKEFLAGS += --no-builtin-rules + +#### Defaults #### + +# If COMPARE is 1, check the output md5sum after building +COMPARE ?= 1 +# If NON_MATCHING is 1, define the NON_MATCHING C flag when building +NON_MATCHING ?= 0 +# if WERROR is 1, pass -Werror to CC_CHECK, so warnings would be treated as errors +WERROR ?= 0 +# Keep .mdebug section in build +KEEP_MDEBUG ?= 0 +# Check code syntax with host compiler +RUN_CC_CHECK ?= 1 +CC_CHECK_COMP ?= gcc +# Dump build object files +OBJDUMP_BUILD ?= 0 +# Number of threads to compress with +N_THREADS ?= $(shell nproc) + +# Set prefix to mips binutils binaries (mips-linux-gnu-ld => 'mips-linux-gnu-') - Change at your own risk! +# In nearly all cases, not having 'mips-linux-gnu-*' binaries on the PATH is indicative of missing dependencies +MIPS_BINUTILS_PREFIX ?= mips-linux-gnu- + + +VERSION ?= us + +BASEROM := baserom.$(VERSION).z64 +TARGET := starfox64 + + +### Output ### + +BUILD_DIR := build +ROM := $(BUILD_DIR)/$(TARGET).$(VERSION).z64 +ELF := $(BUILD_DIR)/$(TARGET).$(VERSION).elf +LD_MAP := $(BUILD_DIR)/$(TARGET).$(VERSION).map +LD_SCRIPT := linker_scripts/$(VERSION)/$(TARGET).ld + + +#### Setup #### + +BUILD_DEFINES ?= + +ifeq ($(VERSION),us) + BUILD_DEFINES += -DVERSION_US=1 +else +$(error Invalid VERSION variable detected. Please use 'us') +endif + + +ifeq ($(NON_MATCHING),1) + BUILD_DEFINES += -DNON_MATCHING -DAVOID_UB + COMPARE := 0 +endif + +MAKE = make +CPPFLAGS += -fno-dollars-in-identifiers -P +LDFLAGS := --no-check-sections --accept-unknown-input-arch --emit-relocs + +UNAME_S := $(shell uname -s) +ifeq ($(OS),Windows_NT) +$(error Native Windows is currently unsupported for building this repository, use WSL instead c:) +else ifeq ($(UNAME_S),Linux) + DETECTED_OS := linux +else ifeq ($(UNAME_S),Darwin) + DETECTED_OS := mac + MAKE := gmake + CPPFLAGS += -xc++ +endif + +#### Tools #### +ifneq ($(shell type $(MIPS_BINUTILS_PREFIX)ld >/dev/null 2>/dev/null; echo $$?), 0) +$(error Unable to find $(MIPS_BINUTILS_PREFIX)ld. Please install or build MIPS binutils, commonly mips-linux-gnu. (or set MIPS_BINUTILS_PREFIX if your MIPS binutils install uses another prefix)) +endif + + +CC := tools/ido/$(DETECTED_OS)/7.1/cc +CC_OLD := tools/ido/$(DETECTED_OS)/5.3/cc + + +AS := $(MIPS_BINUTILS_PREFIX)as +LD := $(MIPS_BINUTILS_PREFIX)ld +OBJCOPY := $(MIPS_BINUTILS_PREFIX)objcopy +OBJDUMP := $(MIPS_BINUTILS_PREFIX)objdump +CPP := cpp +ICONV := iconv +ASM_PROC := python3 tools/asm-processor/build.py +CAT := cat + +ASM_PROC_FLAGS := --input-enc=utf-8 --output-enc=euc-jp --convert-statics=global-with-filename + +SPLAT ?= tools/splat/split.py +SPLAT_YAML ?= $(TARGET).$(VERSION).yaml + + + +IINC := -Iinclude -Ibin/$(VERSION) -I. +IINC += -Ilib/ultralib/include -Ilib/ultralib/include/PR -Ilib/ultralib/include/ido + +ifeq ($(KEEP_MDEBUG),0) + RM_MDEBUG = $(OBJCOPY) --remove-section .mdebug $@ +else + RM_MDEBUG = @: +endif + +# Check code syntax with host compiler +CHECK_WARNINGS := -Wall -Wextra -Wimplicit-fallthrough -Wno-unknown-pragmas -Wno-missing-braces -Wno-sign-compare -Wno-uninitialized +# Have CC_CHECK pretend to be a MIPS compiler +MIPS_BUILTIN_DEFS := -DMIPSEB -D_MIPS_FPSET=16 -D_MIPS_ISA=2 -D_ABIO32=1 -D_MIPS_SIM=_ABIO32 -D_MIPS_SZINT=32 -D_MIPS_SZPTR=32 +ifneq ($(RUN_CC_CHECK),0) +# The -MMD flags additionaly creates a .d file with the same name as the .o file. + CC_CHECK := $(CC_CHECK_COMP) + CC_CHECK_FLAGS := -MMD -MP -fno-builtin -fsyntax-only -funsigned-char -fdiagnostics-color -std=gnu89 -m32 -DNON_MATCHING -DAVOID_UB -DCC_CHECK=1 + ifneq ($(WERROR), 0) + CHECK_WARNINGS += -Werror + endif +else + CC_CHECK := @: +endif + + +CFLAGS += -G 0 -non_shared -Xcpluscomm -nostdinc -Wab,-r4300_mul + +WARNINGS := -fullwarn -verbose -woff 624,649,838,712,516,513,596,564,594 +ASFLAGS := -march=vr4300 -32 -G0 +COMMON_DEFINES := -D_MIPS_SZLONG=32 +GBI_DEFINES := -DF3DEX_GBI +RELEASE_DEFINES := -DNDEBUG -D_FINALROM +AS_DEFINES := -DMIPSEB -D_LANGUAGE_ASSEMBLY -D_ULTRA64 +C_DEFINES := -DLANGUAGE_C -D_LANGUAGE_C +ENDIAN := -EB + +OPTFLAGS := -O2 -g3 +MIPS_VERSION := -mips2 +ICONV_FLAGS := --from-code=UTF-8 --to-code=EUC-JP + +# Use relocations and abi fpr names in the dump +OBJDUMP_FLAGS := --disassemble --reloc --disassemble-zeroes -Mreg-names=32 -Mno-aliases + +ifneq ($(OBJDUMP_BUILD), 0) + OBJDUMP_CMD = $(OBJDUMP) $(OBJDUMP_FLAGS) $@ > $(@:.o=.dump.s) + OBJCOPY_BIN = $(OBJCOPY) -O binary $@ $@.bin +else + OBJDUMP_CMD = @: + OBJCOPY_BIN = @: +endif + +# rom compression flags +COMPFLAGS := --threads $(N_THREADS) +ifeq ($(NON_MATCHING),0) + COMPFLAGS += --matching +endif + +#### Files #### + +$(shell mkdir -p asm bin linker_scripts/$(VERSION)/auto) + +SRC_DIRS := $(shell find src -type d) +ASM_DIRS := $(shell find asm/$(VERSION) -type d -not -path "asm/$(VERSION)/nonmatchings/*") +BIN_DIRS := $(shell find bin -type d) + +C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c)) +S_FILES := $(foreach dir,$(ASM_DIRS) $(SRC_DIRS),$(wildcard $(dir)/*.s)) +BIN_FILES := $(foreach dir,$(BIN_DIRS),$(wildcard $(dir)/*.bin)) +O_FILES := $(foreach f,$(C_FILES:.c=.o),$(BUILD_DIR)/$f) \ + $(foreach f,$(S_FILES:.s=.o),$(BUILD_DIR)/$f) \ + $(foreach f,$(BIN_FILES:.bin=.o),$(BUILD_DIR)/$f) + + +# Automatic dependency files +DEP_FILES := $(O_FILES:.o=.d) \ + $(O_FILES:.o=.asmproc.d) + +# create build directories +$(shell mkdir -p $(BUILD_DIR)/linker_scripts/$(VERSION) $(BUILD_DIR)/linker_scripts/$(VERSION)/auto $(foreach dir,$(SRC_DIRS) $(ASM_DIRS) $(BIN_DIRS),$(BUILD_DIR)/$(dir))) + + +# directory flags +build/src/main/O2/%.o: OPTFLAGS := -O2 + +# per-file flags + +# cc & asm-processor +build/src/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) -- + + +#### Main Targets ### + +uncompressed: $(ROM) +ifneq ($(COMPARE),0) + @md5sum $(ROM) + @md5sum -c $(TARGET).$(VERSION).md5 +endif + +extract: + $(SPLAT) $(SPLAT_YAML) \ No newline at end of file diff --git a/starfox64.yaml b/yamls/starfox64.us.yaml old mode 100644 new mode 100755 similarity index 96% rename from starfox64.yaml rename to yamls/starfox64.us.yaml index 3c08cf25..38ac862e --- a/starfox64.yaml +++ b/yamls/starfox64.us.yaml @@ -2,9 +2,9 @@ name: Starfox64 (North America) sha1: 09f0d105f476b00efa5303a3ebc42e60a7753b7a options: basename: starfox64 - target_path: sf64.z64 + target_path: baserom.us.z64 elf_path: build/starfox64.elf - base_path: . + base_path: .. platform: n64 compiler: ido @@ -71,7 +71,7 @@ segments: - [0x1050, asm] - [0x1270, asm] - [0x3440, asm] #func_80002840 - - [0x35A8, asm] + - [0x35A8, c] - [0xC3EE0, data] - { start: 0xDE480, type: bss, vram: 0x800DD880 }