From 853b51a03e1caed4596a48dbadf103decc45031a Mon Sep 17 00:00:00 2001 From: Sauraen Date: Wed, 15 Feb 2023 22:28:04 -0800 Subject: [PATCH] New Makefile working --- .gitignore | 4 +- Makefile | 346 ++++++++++++++++++++++++++++++----------------------- f3dex2.s | 4 +- 3 files changed, 200 insertions(+), 154 deletions(-) diff --git a/.gitignore b/.gitignore index ea9809c..ede3153 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ -F3DZEX_*/ -F3DEX2_*/ +build/ .vscode *.exe *.bat +custom.mk diff --git a/Makefile b/Makefile index 9683a0c..de36570 100644 --- a/Makefile +++ b/Makefile @@ -1,23 +1,27 @@ -default: - @echo "How to use this Makefile" - @echo "Method 1) Select a microcode, just run e.g. `make F3DZEX_NoN_2.06H`" - @echo "Method 2) `make ok`, builds all ucodes which have MD5 sums, to check if :OK:" - @echo "Method 3) `make all`, builds all ucodes in database" - @echo "Method 4) Custom microcode build via custom.mk file. Create a file custom.mk" - @echo "with contents like this:" - @echo "NAME := your_custom_ucode_name" - @echo "GAMES := Your Romhack Name" - @echo "ID_STR := Modded F3DZEX by LeEtHaCkEr64 / Real N64 or RSP LLE only. NO PROJECT64" - @echo " ^ (this must be the exact number of characters)" - @echo "CFG_NoN := 1" - @echo "etc. You only need to set the options you want to enable. Then run `make custom`." - @echo "See the Makefile for the list of options." +MAKEFLAGS += --no-builtin-rules +MAKEFLAGS += --no-builtin-variables +.SUFFIXES: -# The default is all of these options as 0 (or unset). With the defaults, you -# get 2.08, which has none of the bugs / the latest versions of everything, -# except G_BRANCH_Z (F3DEX2), no point lighting, and no NoN. Enabling the -# different BUG_ options *gives* you the bugs--the default is always with the -# bugs fixed. +default: + @echo 'How to use this Makefile' + @echo 'Method 1) Select a microcode, just run e.g. `make F3DZEX_NoN_2.06H`' + @echo 'Method 2) `make ok`, builds all ucodes which have MD5 sums, to check if :OK:' + @echo 'Method 3) `make all`, builds all ucodes in database' + @echo 'Method 4) Custom microcode build via custom.mk file. Create a file custom.mk' + @echo 'with contents like this:' + @echo 'NAME := your_custom_ucode_name' + @echo 'GAMES := Your Romhack Name' + @echo 'ID_STR := Modded F3DZEX by LeEtHaCkEr64 / Real N64 or RSP LLE only. NO PROJECT64' + @echo ' ^ (this must be the exact number of characters)' + @echo 'OPTIONS := CFG_NoN CFG_POINT_LIGHTING etc.' + @echo 'Then run `make your_custom_ucode_name`. See the Makefile for the list of options.' + +# With the defaults--all of these options unset--you get 2.08 (Banjo-Tooie), +# which has none of the bugs / the latest versions of everything, except +# G_BRANCH_Z (F3DEX2), no point lighting, and no NoN. Enabling the different +# BUG_ options *gives* you the bugs--the default is always with the bugs fixed. +# If you are modding and adding options, you just have to add them here, and +# in the options list for your custom configuration. ALL_OPTIONS := \ CFG_G_BRANCH_W \ CFG_XBUS \ @@ -31,110 +35,135 @@ ALL_OPTIONS := \ BUG_NO_CLAMP_SCREEN_Z_POSITIVE \ BUG_TEXGEN_LINEAR_CLOBBER_S_T \ BUG_WRONG_INIT_VZERO \ - BUG_HARMLESS_EXTRA_INIT_VONE \ + BUG_FAIL_IF_CARRY_SET_AT_INIT \ BUG_HARMLESS_TASKDONE_WRONG_ADDR ARMIPS ?= armips -PARENT_OUTPUT_DIR ?= ./ +PARENT_OUTPUT_DIR ?= ./build +ifeq ($(PARENT_OUTPUT_DIR),.) + $(error Cannot build directly in repo directory; see Makefile for details.) + # The problem is that we want to be able to have targets like F3DEX2_2.08, + # but this would also be the directory itself, whose existence and possible + # modification needs to be handled by the Makefile. It is possible to write + # the Makefile where the directory is the main target for that microcode, but + # this has worse behavior in case of modification to the directory. Worse, if + # it was done this way, then it would break if the user tried to set + # PARENT_OUTPUT_DIR anywhere else. So, better to support building everywhere + # but here than to support only building here. +endif NO_COL := \033[0m RED := \033[0;31m GREEN := \033[0;32m YELLOW := \033[0;33m BLUE := \033[0;34m -INFO := $(NO_COL) +INFO := $(BLUE) SUCCESS := $(GREEN) FAILURE := $(RED) WARNING := $(YELLOW) -define reset_all_options - NAME := - GAMES := (Not used in any retail games) - ID_STR := Custom F3DEX2-based microcode, github.com/Mr-Wiseguy/f3dex2 & Nintendo - MD5_CODE := NONE - MD5_DATA := NONE - $(foreach option,$(ALL_OPTIONS),$(eval $(option) := 0)) -endef - $(PARENT_OUTPUT_DIR): @printf "$(INFO)Creating parent output directory$(NO_COL)\n" ifeq ($(OS),Windows_NT) - @mkdir $@ + mkdir $@ else - @mkdir -p $@ + mkdir -p $@ endif ALL_UCODES := ALL_UCODES_WITH_MD5S := ALL_OUTPUT_DIRS := +define reset_vars + NAME := + GAMES := (Not used in any retail games) + ID_STR := Custom F3DEX2-based microcode, github.com/Mr-Wiseguy/f3dex2 & Nintendo + ID_STR := RSP Gfx ucode F3DEX fifo 2.04H Yoshitaka Yasumoto 1998 Nintendo. + MD5_CODE := + MD5_DATA := + OPTIONS := +endef + define ucode_rule + # Variables defined outside the function need one dollar sign, whereas + # variables defined within the function need two. This is because make first + # expands all this text, substituting single-dollar-sign variables, and then + # executes all of it, causing all the assignments to actually happen. ifeq ($(NAME),) - $(error Microcode name has not been set!) + $$(error Microcode name not set!) endif - UCODE_OUTPUT_DIR := $$(PARENT_OUTPUT_DIR)/$(NAME) + UCODE_OUTPUT_DIR := $(PARENT_OUTPUT_DIR)/$(NAME) ifeq ($(OS),Windows_NT) - FULL_OUTPUT_DIR := $$(subst /,\,$$(FULL_OUTPUT_DIR)) + UCODE_OUTPUT_DIR := $$(subst /,\,$$(UCODE_OUTPUT_DIR)) endif CODE_FILE := $$(UCODE_OUTPUT_DIR)/$(NAME).code DATA_FILE := $$(UCODE_OUTPUT_DIR)/$(NAME).data SYM_FILE := $$(UCODE_OUTPUT_DIR)/$(NAME).sym TEMP_FILE := $$(UCODE_OUTPUT_DIR)/$(NAME).tmp.s ALL_UCODES += $(NAME) - ifneq ($(MD5_CODE),NONE) + ifneq ($(MD5_CODE),) ALL_UCODES_WITH_MD5S += $(NAME) endif - ALL_OUTPUT_DIRS += $(UCODE_OUTPUT_DIR) - OPTIONS_AS_EQU := - $(foreach option,$(ALL_OPTIONS),$(eval OPTIONS_AS_EQU += -equ $(option) $($(option)))) + ALL_OUTPUT_DIRS += $$(UCODE_OUTPUT_DIR) + OFF_OPTIONS := $(filter-out $(OPTIONS),$(ALL_OPTIONS)) + OPTIONS_EQU := + $$(foreach option,$(OPTIONS),$$(eval OPTIONS_EQU += -equ $$(option) 1)) + OFF_OPTIONS_EQU := + $$(foreach o2,$$(OFF_OPTIONS),$$(eval OFF_OPTIONS_EQU += -equ $$(o2) 0)) ARMIPS_CMDLINE := \ - -strequ DATA_FILE $(DATA_FILE) \ - -strequ CODE_FILE $(CODE_FILE) \ - -strequ ID_STR "$(ID_STR)" \ - $(OPTIONS_AS_EQU) \ + -strequ CODE_FILE $$(CODE_FILE) \ + -strequ DATA_FILE $$(DATA_FILE) \ + $$(OPTIONS_EQU) \ + $$(OFF_OPTIONS_EQU) \ f3dex2.s \ - -sym2 $(SYM_FILE) \ - -temp $(TEMP_FILE) - ifeq ($(1),1) - TARGET_NAME := custom - else - TARGET_NAME := $(NAME) - endif - # Phony target rule - .PHONY: $(TARGET_NAME) - $(TARGET_NAME): $(CODE_FILE) $(DATA_FILE) - # Output directory rule - $(UCODE_OUTPUT_DIR): | $(PARENT_OUTPUT_DIR) - @printf "$(INFO)Creating directory: $(UCODE_OUTPUT_DIR)$(NO_COL)\n" + -sym2 $$(SYM_FILE) \ + -temp $$(TEMP_FILE) + # Microcode target + .PHONY: $(NAME) + $(NAME): $$(CODE_FILE) + # Directory target variables, see below. + $$(UCODE_OUTPUT_DIR): UCODE_OUTPUT_DIR:=$$(UCODE_OUTPUT_DIR) + # Directory target recipe + $$(UCODE_OUTPUT_DIR): + @echo "$(INFO)Creating directory $$(UCODE_OUTPUT_DIR)$(NO_COL)" ifeq ($(OS),Windows_NT) - @mkdir $(UCODE_OUTPUT_DIR) + @mkdir $$(UCODE_OUTPUT_DIR) else - @mkdir -p $(UCODE_OUTPUT_DIR) + @mkdir -p $$(UCODE_OUTPUT_DIR) endif - # File build rule - $(CODE_FILE) $(DATA_FILE) $(SYM_FILE) $(TEMP_FILE): ./f3dex2.s ./rsp/* $(UCODE_OUTPUT_DIR) - @printf "$(INFO)Building microcode: $(NAME) for $(GAMES)$(NO_COL)\n" - @echo $(ARMIPS) $(ARMIPS_CMDLINE) - #@$(ARMIPS) $(ARMIPS_CMDLINE) - ifneq ($(MD5_CODE),NONE) - @(printf "$(MD5_CODE) *$(CODE_FILE)" | md5sum --status -c -) && printf " $(SUCCESS)$(NAME) code matches$(NO_COL)\n" || printf " $(FAILURE)$(NAME) code differs$(NO_COL)\n" - @(printf "$(MD5_DATA) *$(DATA_FILE)" | md5sum --status -c -) && printf " $(SUCCESS)$(NAME) data matches$(NO_COL)\n" || printf " $(FAILURE)$(NAME) data differs$(NO_COL)\n" - elifneq ($(1),1) - @printf " $(WARNING)MD5 sums not in database for $(NAME)$(NO_COL)\n" + # Code file target variables. make does not expand variables within recipes + # until the recipe is executed, meaning that all the parts of the recipe would + # have the values from the very last microcode in the file. Here, we set + # target-specific variables--effectively local variables within the recipe-- + # to the values from the global variables have right now. We are only + # targeting CODE_FILE even though we also want DATA_FILE, because target- + # specific variables may not work as expected with multiple targets from one + # recipe. + $$(CODE_FILE): NAME:=$$(NAME) + $$(CODE_FILE): GAMES:=$$(GAMES) + $$(CODE_FILE): ID_STR:=$$(ID_STR) + $$(CODE_FILE): ARMIPS_CMDLINE:=$$(ARMIPS_CMDLINE) + $$(CODE_FILE): MD5_CODE:=$$(MD5_CODE) + $$(CODE_FILE): MD5_DATA:=$$(MD5_DATA) + $$(CODE_FILE): CODE_FILE:=$$(CODE_FILE) + $$(CODE_FILE): DATA_FILE:=$$(DATA_FILE) + # Target recipe + $$(CODE_FILE): ./f3dex2.s ./rsp/* | $$(UCODE_OUTPUT_DIR) + @printf "$(INFO)Building microcode: $$(NAME) for $$(GAMES)$(NO_COL)\n" + $(ARMIPS) -strequ ID_STR "$$(ID_STR)" $$(ARMIPS_CMDLINE) + ifneq ($$(MD5_CODE),) + @(printf "$$(MD5_CODE) $$(CODE_FILE)" | md5sum --status -c -) && printf " $(SUCCESS)$$(NAME) code matches$(NO_COL)\n" || printf " $(FAILURE)$$(NAME) code differs$(NO_COL)\n" + @(printf "$$(MD5_DATA) $$(DATA_FILE)" | md5sum --status -c -) && printf " $(SUCCESS)$$(NAME) data matches$(NO_COL)\n" || printf " $(FAILURE)$$(NAME) data differs$(NO_COL)\n" + else ifneq ($(1),1) + @printf " $(WARNING)MD5 sums not in database for $$(NAME)$(NO_COL)\n" endif - # Done - $(eval $(call reset_all_options)) + $$(eval $$(call reset_vars)) endef -$(eval $(call reset_all_options)) +$(eval $(call reset_vars)) ifneq ("$(wildcard custom.mk)","") include custom.mk - $(eval $(call ucode_rule,1)) -else - .PHONY: custom - custom: - @printf "To use `make custom`, create a file custom.mk containing your" - @printf "desired configuration. See the Makefile for more details." + $(eval $(call ucode_rule)) endif NAME := F3DEX2_2.04H @@ -142,148 +171,165 @@ GAMES := Kirby 64, Smash 64 ID_STR := RSP Gfx ucode F3DEX fifo 2.04H Yoshitaka Yasumoto 1998 Nintendo. MD5_CODE := d3a58568fa7cf042de370912a47c3b5f MD5_DATA := 6639b2fd15a73c5446aff592bb599983 -CFG_OLD_TRI_WRITE := 1 -CFG_EXTRA_0A_BEFORE_ID_STR := 1 -CFG_G_SPECIAL_1_IS_RECALC_MVP := 1 -CFG_CLIPPING_SUBDIVIDE_DESCENDING := 1 -BUG_CLIPPING_FAIL_WHEN_SUM_ZERO := 1 -BUG_NO_CLAMP_SCREEN_Z_POSITIVE := 1 -BUG_TEXGEN_LINEAR_CLOBBER_S_T := 1 -BUG_HARMLESS_EXTRA_INIT_VONE := 1 -BUG_HARMLESS_TASKDONE_WRONG_ADDR := 1 -$(eval $(call ucode_rule,0)) +OPTIONS := \ + CFG_OLD_TRI_WRITE \ + CFG_EXTRA_0A_BEFORE_ID_STR \ + CFG_G_SPECIAL_1_IS_RECALC_MVP \ + CFG_CLIPPING_SUBDIVIDE_DESCENDING \ + BUG_CLIPPING_FAIL_WHEN_SUM_ZERO \ + BUG_NO_CLAMP_SCREEN_Z_POSITIVE \ + BUG_TEXGEN_LINEAR_CLOBBER_S_T \ + BUG_FAIL_IF_CARRY_SET_AT_INIT \ + BUG_HARMLESS_TASKDONE_WRONG_ADDR +$(eval $(call ucode_rule)) NAME := F3DEX2_NoN_2.04H ID_STR := RSP Gfx ucode F3DEX.NoN fifo 2.04H Yoshitaka Yasumoto 1998 Nintendo. -CFG_NoN := 1 -CFG_OLD_TRI_WRITE := 1 -CFG_EXTRA_0A_BEFORE_ID_STR := 1 -CFG_G_SPECIAL_1_IS_RECALC_MVP := 1 -CFG_CLIPPING_SUBDIVIDE_DESCENDING := 1 -BUG_CLIPPING_FAIL_WHEN_SUM_ZERO := 1 -BUG_NO_CLAMP_SCREEN_Z_POSITIVE := 1 -BUG_TEXGEN_LINEAR_CLOBBER_S_T := 1 -BUG_HARMLESS_EXTRA_INIT_VONE := 1 -BUG_HARMLESS_TASKDONE_WRONG_ADDR := 1 -$(eval $(call ucode_rule,0)) +OPTIONS := \ + CFG_NoN \ + CFG_OLD_TRI_WRITE \ + CFG_EXTRA_0A_BEFORE_ID_STR \ + CFG_G_SPECIAL_1_IS_RECALC_MVP \ + CFG_CLIPPING_SUBDIVIDE_DESCENDING \ + BUG_CLIPPING_FAIL_WHEN_SUM_ZERO \ + BUG_NO_CLAMP_SCREEN_Z_POSITIVE \ + BUG_TEXGEN_LINEAR_CLOBBER_S_T \ + BUG_FAIL_IF_CARRY_SET_AT_INIT \ + BUG_HARMLESS_TASKDONE_WRONG_ADDR +$(eval $(call ucode_rule)) NAME := F3DEX2_2.07 GAMES := Rocket: Robot on Wheels ID_STR := RSP Gfx ucode F3DEX fifo 2.07 Yoshitaka Yasumoto 1998 Nintendo. MD5_CODE := 1523b8e38a9eae698b48909a0c0c0279 MD5_DATA := 25be72ec04e2e6a23dfa7666645f0662 -BUG_HARMLESS_EXTRA_INIT_VONE := 1 -$(eval $(call ucode_rule,0)) +OPTIONS := \ + BUG_FAIL_IF_CARRY_SET_AT_INIT +$(eval $(call ucode_rule)) NAME := F3DEX2_2.07_XBUS GAMES := Lode Runner 3-D ID_STR := RSP Gfx ucode F3DEX xbus 2.07 Yoshitaka Yasumoto 1998 Nintendo. MD5_CODE := b882f402e115ffaf05a9ee44f354c441 MD5_DATA := 71436bdc62d9263d5c2fefa783cffd4f -CFG_XBUS := 1 -BUG_HARMLESS_EXTRA_INIT_VONE := 1 -BUG_HARMLESS_TASKDONE_WRONG_ADDR := 1 -$(eval $(call ucode_rule,0)) +OPTIONS := \ + CFG_XBUS \ + BUG_FAIL_IF_CARRY_SET_AT_INIT \ + BUG_HARMLESS_TASKDONE_WRONG_ADDR +$(eval $(call ucode_rule)) NAME := F3DEX2_NoN_2.07 ID_STR := RSP Gfx ucode F3DEX.NoN fifo 2.07 Yoshitaka Yasumoto 1998 Nintendo. -CFG_NoN := 1 -BUG_HARMLESS_EXTRA_INIT_VONE := 1 -$(eval $(call ucode_rule,0)) +OPTIONS := \ + CFG_NoN \ + BUG_FAIL_IF_CARRY_SET_AT_INIT +$(eval $(call ucode_rule)) NAME := F3DEX2_2.08 GAMES := Banjo-Tooie ID_STR := RSP Gfx ucode F3DEX fifo 2.08 Yoshitaka Yasumoto 1999 Nintendo. MD5_CODE := 6ccf5fc392e440fb23bc7d7f7d71047c MD5_DATA := 3a3a406acb4295d33fa6e918dd3a7ae4 -$(eval $(call ucode_rule,0)) +OPTIONS := +$(eval $(call ucode_rule)) NAME := F3DEX2_2.08_XBUS GAMES := Power Rangers ID_STR := RSP Gfx ucode F3DEX xbus 2.08 Yoshitaka Yasumoto 1999 Nintendo. MD5_CODE := 38cbd8ef2cd168141347047cf7ec4fba MD5_DATA := dcb9a145381557d146683ddb853c6cfd -CFG_XBUS := 1 -BUG_HARMLESS_TASKDONE_WRONG_ADDR := 1 -$(eval $(call ucode_rule,0)) +OPTIONS := \ + CFG_XBUS \ + BUG_HARMLESS_TASKDONE_WRONG_ADDR +$(eval $(call ucode_rule)) NAME := F3DEX2_NoN_2.08 ID_STR := RSP Gfx ucode F3DEX.NoN fifo 2.08 Yoshitaka Yasumoto 1999 Nintendo. MD5_CODE := b5c366b55a032f232aa309cda21be3d7 MD5_DATA := 2c8dedc1b1e2fe6405c9895c4290cf2b -CFG_NoN := 1 -$(eval $(call ucode_rule,0)) +OPTIONS := \ + CFG_NoN +$(eval $(call ucode_rule)) NAME := F3DEX2_2.08PL GAMES := Paper Mario ID_STR := RSP Gfx ucode F3DEX fifo 2.08 Yoshitaka Yasumoto/Kawasedo 1999. MD5_CODE := 6a5117e62e51d87020fb81dc493efcb6 MD5_DATA := 1a6b826322aab9c93da61356af5ead40 -CFG_POINT_LIGHTING := 1 -$(eval $(call ucode_rule,0)) +OPTIONS := \ + CFG_POINT_LIGHTING +$(eval $(call ucode_rule)) NAME := F3DEX2_NoN_2.08PL +# ID_STR copied from nearclipping version above for emulator compatibility ID_STR := RSP Gfx ucode F3DEX fifo 2.08 Yoshitaka Yasumoto/Kawasedo 1999. -CFG_NoN := 1 -CFG_POINT_LIGHTING := 1 -$(eval $(call ucode_rule,0)) +OPTIONS := \ + CFG_NoN \ + CFG_POINT_LIGHTING +$(eval $(call ucode_rule)) NAME := F3DZEX_2.06H +# ID_STR copied from NoN version below for emulator compatibility ID_STR := RSP Gfx ucode F3DZEX.NoN fifo 2.06H Yoshitaka Yasumoto 1998 Nintendo. -CFG_G_BRANCH_W := 1 -CFG_NoN := 1 -CFG_OLD_TRI_WRITE := 1 -BUG_WRONG_INIT_VZERO := 1 -BUG_HARMLESS_EXTRA_INIT_VONE := 1 -$(eval $(call ucode_rule,0)) +OPTIONS := \ + CFG_G_BRANCH_W \ + CFG_OLD_TRI_WRITE \ + BUG_WRONG_INIT_VZERO \ + BUG_FAIL_IF_CARRY_SET_AT_INIT +$(eval $(call ucode_rule)) NAME := F3DZEX_NoN_2.06H GAMES := Ocarina of Time ID_STR := RSP Gfx ucode F3DZEX.NoN fifo 2.06H Yoshitaka Yasumoto 1998 Nintendo. MD5_CODE := 96a1a7a8eab45e0882aab9e4d8ccbcc3 MD5_DATA := e48c7679f1224b7c0947dcd5a4d0c713 -CFG_G_BRANCH_W := 1 -CFG_NoN := 1 -CFG_OLD_TRI_WRITE := 1 -BUG_WRONG_INIT_VZERO := 1 -BUG_HARMLESS_EXTRA_INIT_VONE := 1 -$(eval $(call ucode_rule,0)) +OPTIONS := \ + CFG_G_BRANCH_W \ + CFG_NoN \ + CFG_OLD_TRI_WRITE \ + BUG_WRONG_INIT_VZERO \ + BUG_FAIL_IF_CARRY_SET_AT_INIT +$(eval $(call ucode_rule)) NAME := F3DZEX_2.08I +# ID_STR copied from NoN version below for emulator compatibility ID_STR := RSP Gfx ucode F3DZEX.NoN fifo 2.08I Yoshitaka Yasumoto/Kawasedo 1999. -CFG_G_BRANCH_W := 1 -CFG_NoN := 1 -CFG_POINT_LIGHTING := 1 -BUG_WRONG_INIT_VZERO := 1 -$(eval $(call ucode_rule,0)) +OPTIONS := \ + CFG_G_BRANCH_W \ + CFG_POINT_LIGHTING \ + BUG_WRONG_INIT_VZERO +$(eval $(call ucode_rule)) NAME := F3DZEX_NoN_2.08I GAMES := Majora's Mask ID_STR := RSP Gfx ucode F3DZEX.NoN fifo 2.08I Yoshitaka Yasumoto/Kawasedo 1999. MD5_CODE := ca0a31df36dbeda69f09e9850e68c7f7 MD5_DATA := d31cea0e173c6a4a09e4dfe8f259c91b -CFG_G_BRANCH_W := 1 -CFG_NoN := 1 -CFG_POINT_LIGHTING := 1 -BUG_WRONG_INIT_VZERO := 1 -$(eval $(call ucode_rule,0)) +OPTIONS := \ + CFG_G_BRANCH_W \ + CFG_NoN \ + CFG_POINT_LIGHTING \ + BUG_WRONG_INIT_VZERO +$(eval $(call ucode_rule)) NAME := F3DZEX_2.08J +# ID_STR copied from NoN version below for emulator compatibility ID_STR := RSP Gfx ucode F3DZEX.NoN fifo 2.08J Yoshitaka Yasumoto/Kawasedo 1999. -CFG_G_BRANCH_W := 1 -CFG_NoN := 1 -CFG_POINT_LIGHTING := 1 -$(eval $(call ucode_rule,0)) +OPTIONS := \ + CFG_G_BRANCH_W \ + CFG_POINT_LIGHTING +$(eval $(call ucode_rule)) NAME := F3DZEX_NoN_2.08J GAMES := Animal Forest ID_STR := RSP Gfx ucode F3DZEX.NoN fifo 2.08J Yoshitaka Yasumoto/Kawasedo 1999. MD5_CODE := a7f45433a67950cdd239ee40f1dd36c1 MD5_DATA := f17544afa0dce84d589ec3d8c38254c7 -CFG_G_BRANCH_W := 1 -CFG_NoN := 1 -CFG_POINT_LIGHTING := 1 -$(eval $(call ucode_rule,0)) +OPTIONS := \ + CFG_G_BRANCH_W \ + CFG_NoN \ + CFG_POINT_LIGHTING +$(eval $(call ucode_rule)) .PHONY: default ok all clean @@ -293,4 +339,4 @@ ok: $(ALL_UCODES_WITH_MD5S) clean: @printf "$(WARNING)Deleting all built microcode files$(NO_COL)\n" - @echo "rm -rf ${ALL_OUTPUT_DIRS}" + @echo "rm -rf $(ALL_OUTPUT_DIRS)" diff --git a/f3dex2.s b/f3dex2.s index 3bd4785..244fd33 100644 --- a/f3dex2.s +++ b/f3dex2.s @@ -725,8 +725,8 @@ start: // This is at IMEM 0x1080, not the start of IMEM lqv $v31[0], (v31Value)($zero) lqv $v30[0], (v30Value)($zero) li rdpCmdBufPtr, rdpCmdBuffer1 -.if BUG_HARMLESS_EXTRA_INIT_VONE - vadd vOne, vZero, vZero // Harmless extra initialization of vOne (to zero) +.if !BUG_FAIL_IF_CARRY_SET_AT_INIT + vadd vOne, vZero, vZero // Consume VCO (carry) value possibly set by the previous ucode, before vsub below .endif li rdpCmdBufEnd, rdpCmdBuffer1End vsub vOne, vZero, $v31[0] // Vector of 1s