You've already forked ultrasm64-2
mirror of
https://github.com/HackerN64/ultrasm64-2.git
synced 2026-01-21 10:38:08 -08:00
Add libdragon ipl3 as makefile option
This commit is contained in:
27
Makefile
27
Makefile
@@ -5,9 +5,19 @@ include util.mk
|
||||
# Default target
|
||||
default: all
|
||||
|
||||
# Use Libdragon IPL3
|
||||
# WARNING: This CAN and WILL break certain (most) emulators.
|
||||
# Use if you care about console or ares boot times.
|
||||
|
||||
LIBDRAGON_IPL3 := 0
|
||||
|
||||
# Preprocessor definitions
|
||||
DEFINES :=
|
||||
|
||||
ifeq ($(LIBDRAGON_IPL3), 1)
|
||||
DEFINES += LIBDRAGON_IPL3=1
|
||||
endif
|
||||
|
||||
#==============================================================================#
|
||||
# Build Options #
|
||||
#==============================================================================#
|
||||
@@ -111,7 +121,7 @@ ifeq ($(filter $(TARGET_STRING), sm64.jp.f3d_old sm64.us.f3d_old sm64.eu.f3d_new
|
||||
endif
|
||||
|
||||
# Whether to hide commands or not
|
||||
VERBOSE ?= 1
|
||||
VERBOSE ?= 0
|
||||
ifeq ($(VERBOSE),0)
|
||||
V := @
|
||||
endif
|
||||
@@ -125,15 +135,10 @@ ifeq ($(filter clean distclean,$(MAKECMDGOALS)),)
|
||||
$(info Version: $(VERSION))
|
||||
$(info Microcode: $(GRUCODE))
|
||||
$(info Target: $(TARGET))
|
||||
ifeq ($(COMPARE),1)
|
||||
$(info Compare ROM: yes)
|
||||
ifeq ($(LIBDRAGON_IPL3),1)
|
||||
$(info IPL: Libdragon IPL3 Compat)
|
||||
else
|
||||
$(info Compare ROM: no)
|
||||
endif
|
||||
ifeq ($(NON_MATCHING),1)
|
||||
$(info Build Matching: no)
|
||||
else
|
||||
$(info Build Matching: yes)
|
||||
$(info IPL: Nintendo IPL3)
|
||||
endif
|
||||
$(info =======================)
|
||||
endif
|
||||
@@ -657,8 +662,12 @@ $(ELF): $(LIBULTRA_BUILD_DIR)/libgultra_rom.a $(O_FILES) $(MIO0_OBJ_FILES) $(SEG
|
||||
|
||||
$(ROM): $(ELF)
|
||||
$(call print,Building ROM:,$<,$@)
|
||||
ifeq ($(LIBDRAGON_IPL3), 0)
|
||||
$(V)$(OBJCOPY) $(PAD_TO_GAP_FILL) $< $(@:.z64=.bin) -O binary
|
||||
$(V)$(N64CKSUM) $(@:.z64=.bin) $@
|
||||
else
|
||||
$(V)$(OBJCOPY) $(PAD_TO_GAP_FILL) $< $@ -O binary
|
||||
endif
|
||||
|
||||
$(BUILD_DIR)/$(TARGET).objdump: $(ELF)
|
||||
$(OBJDUMP) -D $< > $@
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
|
||||
#include "macros.inc"
|
||||
#include <PR/rcp.h>
|
||||
|
||||
#define PHYS_TO_CART(addr) ((addr) | 0xB0000000)
|
||||
.equ CART_ENTRYPOINT, 0x00000008
|
||||
.equ CART_CHECKSUM0, 0x00000010
|
||||
@@ -38,7 +37,7 @@
|
||||
// 0xA4000000-0xA4000FFF: RSP DMEM
|
||||
|
||||
.section .text, "ax"
|
||||
|
||||
#ifndef LIBDRAGON_IPL3
|
||||
// 0xA4000040-0xA4000B6F: IPL3
|
||||
|
||||
// IPL3 entry point jumped to from IPL2
|
||||
@@ -1158,3 +1157,7 @@ func_A4000AD0:
|
||||
#endif
|
||||
|
||||
.end ipl3_entry
|
||||
#else
|
||||
.section .text, "ax"
|
||||
.incbin "asm/libdragon_ipl3.bin"
|
||||
#endif
|
||||
|
||||
25
asm/entry.s
25
asm/entry.s
@@ -7,28 +7,7 @@
|
||||
.section .text, "ax"
|
||||
|
||||
glabel entry_point
|
||||
#ifdef VERSION_CN
|
||||
// Get main segment bss address and size
|
||||
lui $t0, %lo(_mainSegmentNoloadStartHi)
|
||||
ori $t0, %lo(_mainSegmentNoloadStartLo)
|
||||
lui $t1, %lo(_mainSegmentNoloadSizeHi)
|
||||
ori $t1, %lo(_mainSegmentNoloadSizeLo)
|
||||
.clear_bytes:
|
||||
// Clear bss section until they are zeroed out
|
||||
sw $zero, ($t0) // Clear 4 bytes
|
||||
sw $zero, 4($t0) // Clear the next 4 bytes
|
||||
addi $t0, $t0, 8 // Increment the address of bytes to clear
|
||||
addi $t1, $t1, -8 // Subtract 8 bytes from the amount remaining
|
||||
bnez $t1, .clear_bytes // Continue clearing until clear_bytes is 0
|
||||
nop
|
||||
// Get init function and idle thread stack
|
||||
lui $sp, %lo(gIdleThreadStackHi)
|
||||
ori $sp, %lo(gIdleThreadStackLo)
|
||||
lui $t2, %lo(main_funcHi)
|
||||
ori $t2, %lo(main_funcLo)
|
||||
jr $t2 // Jump to the init function
|
||||
nop
|
||||
#else
|
||||
#ifndef LIBDRAGON_IPL3
|
||||
// Get main segment bss address and size
|
||||
lui $t0, %hi(_mainSegmentNoloadStart)
|
||||
lui $t1, %lo(_mainSegmentNoloadSizeHi)
|
||||
@@ -41,13 +20,13 @@ glabel entry_point
|
||||
sw $zero, 4($t0) // Clear the next 4 bytes
|
||||
bnez $t1, .clear_bytes // Continue clearing until clear_bytes is 0
|
||||
addi $t0, $t0, 8 // Increment the address of bytes to clear
|
||||
#endif
|
||||
// Get init function and idle thread stack
|
||||
lui $t2, %hi(main_func)
|
||||
lui $sp, %hi(gIdleThreadStack)
|
||||
addiu $t2, %lo(main_func)
|
||||
jr $t2 // Jump to the init function
|
||||
addiu $sp, %lo(gIdleThreadStack)
|
||||
#endif
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
BIN
asm/libdragon_ipl3.bin
Normal file
BIN
asm/libdragon_ipl3.bin
Normal file
Binary file not shown.
@@ -16,7 +16,7 @@
|
||||
.fill 0x30
|
||||
#else
|
||||
|
||||
.word 0x4EAA3D0E /* Checksum 1 */
|
||||
.word _mainSegmentRomEnd /* Checksum 1 / Libdragon IPL3 load end */
|
||||
.word 0x74757C24 /* Checksum 2 */
|
||||
.word 0x00000000 /* Unknown */
|
||||
.word 0x00000000 /* Unknown */
|
||||
|
||||
Reference in New Issue
Block a user