diff --git a/Makefile b/Makefile index fae56df1..4477f901 100644 --- a/Makefile +++ b/Makefile @@ -146,7 +146,7 @@ ifeq ($(COMPILER),ido) else ifeq ($(COMPILER),gcc) NON_MATCHING := 1 MIPSISET := -mips3 - OPT_FLAGS := -O2 +# OPT_FLAGS := -O2 endif @@ -822,7 +822,7 @@ $(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT) # Link SM64 ELF file $(ELF): $(O_FILES) $(YAY0_OBJ_FILES) $(SEG_FILES) $(BUILD_DIR)/$(LD_SCRIPT) undefined_syms.txt @$(PRINT) "$(GREEN)Linking ELF file: $(BLUE)$@ $(NO_COL)\n" - $(V)$(LD) -L $(BUILD_DIR) -T undefined_syms.txt -T $(BUILD_DIR)/$(LD_SCRIPT) -Map $(BUILD_DIR)/sm64.$(VERSION).map --no-check-sections $(addprefix -R ,$(SEG_FILES)) -o $@ $(O_FILES) -L$(LIBS_DIR) -lultra_rom -Llib -lhvqm2 -lgcc -lz + $(V)$(LD) -L $(BUILD_DIR) -T undefined_syms.txt -T $(BUILD_DIR)/$(LD_SCRIPT) -Map $(BUILD_DIR)/sm64.$(VERSION).map --no-check-sections $(addprefix -R ,$(SEG_FILES)) -o $@ $(O_FILES) -L$(LIBS_DIR) -lultra_rom -Llib -lgcc -lnustd -lhvqm2 -lz # Build ROM $(ROM): $(ELF) diff --git a/lib/libgcc.a b/lib/libgcc.a index 32e9c312..4a3d4711 100644 Binary files a/lib/libgcc.a and b/lib/libgcc.a differ diff --git a/lib/libnustd.a b/lib/libnustd.a new file mode 100644 index 00000000..3992ebe6 Binary files /dev/null and b/lib/libnustd.a differ diff --git a/sm64.ld b/sm64.ld index 2eca7429..589cb012 100755 --- a/sm64.ld +++ b/sm64.ld @@ -105,13 +105,6 @@ SECTIONS /*ASSERT((. <= SEG_MAIN), "Error: buffers segment extended into main")*/ . = _buffersSegmentNoloadEnd; - /* lib/src/__osDevMgrMain.c and lib/src/osCreateViManager.c contain infinite - * loops compiled without -g, which cause the return statements and the .o - * files themselves to be aligned to 32-byte boundaries. But the linker - * Nintendo used did not respect .o file alignment, and aligned the files - * only to 16 bytes, in some cases misaligning them. We force the same to - * happen using the SUBALIGN directive. This is harmless; the alignment is - * just an optimization. */ BEGIN_SEG(main, .) SUBALIGN(16) { BUILD_DIR/asm/entry.o(.text); @@ -130,8 +123,8 @@ SECTIONS #ifdef YAY0 BUILD_DIR/asm/slidec.o(.text); #endif - */libultra_rom.a:*.o(.text); + */libnustd.a:*.o(.text); */libgcc.a:_umoddi3.o(.text); */libgcc.a:_udivdi3.o(.text); */libgcc.a:_divdi3.o(.text); @@ -142,8 +135,8 @@ SECTIONS */libgcc.a:_fixunssfdi.o(.text); */libgcc.a:_fixunsdfdi.o(.text); */libgcc.a:_floatdidf.o(.text); + */libgcc.a:_floatundidf.o(.text); */libgcc.a:_floatdisf.o(.text); - */libgcc.a:_fixunsdfdi.o(.text); */libgcc.a:_cmpdi2.o(.text); #ifdef GZIP */libz.a:*.o(.text); @@ -195,6 +188,9 @@ SECTIONS */libgcc.a:_umoddi3.o(.rodata*); */libgcc.a:_udivdi3.o(.rodata*); */libgcc.a:_divdi3.o(.rodata*); + */libgcc.a:_clz.o(.rodata*); + */libgcc.a:_fixunsdfdi.o(.rodata*); + */libgcc.a:_floatundidf.o(.rodata*); */libgcc.a:_moddi3.o(.rodata*); #ifdef HVQM */libhvqm2.a:*.o(.rodata*); diff --git a/src/audio/external.c b/src/audio/external.c index 302911e2..9a9536cc 100644 --- a/src/audio/external.c +++ b/src/audio/external.c @@ -10,9 +10,6 @@ #include "game/level_update.h" #include "game/object_list_processor.h" #include "game/camera.h" -#ifdef UNF -#include "usb/debug.h" -#endif #include "seq_ids.h" #include "dialog_ids.h" @@ -2361,9 +2358,6 @@ void play_music(u8 player, u16 seqArgs, u16 fadeTimer) { u8 i; u8 foundIndex = 0; -#ifdef UNF - debug_printf("Just play them immediately, stopping any old sequence.\n"); -#endif // Except for the background music player, we don't support queued // sequences. Just play them immediately, stopping any old sequence. if (player != SEQ_PLAYER_LEVEL) { @@ -2371,9 +2365,6 @@ void play_music(u8 player, u16 seqArgs, u16 fadeTimer) { return; } -#ifdef UNF - debug_printf("Abort if the queue is already full.\n"); -#endif // Abort if the queue is already full. if (sBackgroundMusicQueueSize == MAX_BACKGROUND_MUSIC_QUEUE_SIZE) { return; @@ -2385,23 +2376,14 @@ void play_music(u8 player, u16 seqArgs, u16 fadeTimer) { for (i = 0; i < sBackgroundMusicQueueSize; i++) { if (sBackgroundMusicQueue[i].seqId == seqId) { if (i == 0) { -#ifdef UNF - debug_printf("seq_player_play_sequence\n"); -#endif seq_player_play_sequence(SEQ_PLAYER_LEVEL, seqId, fadeTimer); } else if (!gSequencePlayers[SEQ_PLAYER_LEVEL].enabled) { -#ifdef UNF - debug_printf("stop_background_music\n"); -#endif stop_background_music(sBackgroundMusicQueue[0].seqId); } return; } } -#ifdef UNF - debug_printf("Find the next sequence slot by priority.\n"); -#endif // Find the next sequence slot by priority. for (i = 0; i < sBackgroundMusicQueueSize; i++) { if (sBackgroundMusicQueue[i].priority <= priority) { @@ -2413,9 +2395,6 @@ void play_music(u8 player, u16 seqArgs, u16 fadeTimer) { // If the sequence ends up first in the queue, start it, and make space for // one more entry in the queue. if (foundIndex == 0) { -#ifdef UNF - debug_printf("seq_player_play_sequence\n"); -#endif seq_player_play_sequence(SEQ_PLAYER_LEVEL, seqId, fadeTimer); sBackgroundMusicQueueSize++; } diff --git a/src/game/memory.c b/src/game/memory.c index 5f5abd14..a1bcb9d7 100644 --- a/src/game/memory.c +++ b/src/game/memory.c @@ -14,9 +14,6 @@ #ifdef GZIP #include "gzip/gzip.h" #endif -#ifdef UNF -#include "usb/debug.h" -#endif // round up to the next multiple @@ -393,16 +390,10 @@ void load_engine_code_segment(void) { UNUSED u32 alignedSize = ALIGN16(_engineSegmentRomEnd - _engineSegmentRomStart); bzero(startAddr, totalSize); -#ifdef UNF - debug_printf("DMA-ing engine segment..."); -#endif osWritebackDCacheAll(); dma_read(startAddr, _engineSegmentRomStart, _engineSegmentRomEnd); osInvalICache(startAddr, totalSize); osInvalDCache(startAddr, totalSize); -#ifdef UNF - debug_printf("\rDMA-ing engine segment...Done!\n"); -#endif } #endif diff --git a/src/usb/debug.h b/src/usb/debug.h index 942fde97..d66fb697 100644 --- a/src/usb/debug.h +++ b/src/usb/debug.h @@ -7,7 +7,7 @@ // Settings #define DEBUG_MODE 1 // Enable/Disable debug mode - #define DEBUG_INIT_MSG 1 // Print a message when debug mode has initialized + #define DEBUG_INIT_MSG 0 // Print a message when debug mode has initialized #define USE_FAULTTHREAD 0 // Create a fault detection thread #define OVERWRITE_OSPRINT 0 // Replaces osSyncPrintf calls with debug_printf #define MAX_COMMANDS 25 // The max amount of user defined commands possible diff --git a/src/usb/memcmp.c b/src/usb/memcmp.c deleted file mode 100755 index 1b25e1b9..00000000 --- a/src/usb/memcmp.c +++ /dev/null @@ -1,34 +0,0 @@ -/* -============================================================================= - Copyright (C) 1997-1999 NINTENDO Co.,Ltd. - - $RCSfile: memcmp.c,v $ - $Revision: 1.1 $ - $Date: 1999/04/14 07:18:40 $ -============================================================================= -function name: memcmp ------------------------------------------------------------------------------ -format: #include - int memcmp(const void *buf1, const void *buf2, size_t count) -argument: buf1 pointer to be compared - buf2 pointer to be compared - count the number of bytes to be compared -return value: if less than 0 buf1 is smaller than buf2 - if 0 buf1 is equal to buf2 - if more than 0 buf1 is larger than buf2 -explanation: compares the contents of pointer buf1 and pointer buf2 by the number of count bytes ------------------------------------------------------------------------------ -*/ -#include - -int memcmp(const void *buf1, const void *buf2, size_t count) -{ - char *b1 = (char *)buf1, *b2 = (char *)buf2; - while(count) { - if (*b1 != *b2) return *b1 - *b2; - b1 ++; - b2 ++; - count--; - } - return 0; -} diff --git a/src/usb/memset.c b/src/usb/memset.c deleted file mode 100755 index 45e0688c..00000000 --- a/src/usb/memset.c +++ /dev/null @@ -1,27 +0,0 @@ -/* -============================================================================= - Copyright (C) 1997-1999 NINTENDO Co.,Ltd. - - $RCSfile: memset.c,v $ - $Revision: 1.1 $ - $Date: 1999/04/14 07:18:41 $ -============================================================================= -function name: memset ------------------------------------------------------------------------------ -format: #include - void *memset(void* dst, int c, size_t count); -argument: dst pointer of destination to be written - c byte data to be written - count the number of characters to be written -return value: pointer of destination to be written, dst -explanation: writes byte data c from the pointer dst indicates by the amount of count ------------------------------------------------------------------------------ -*/ -#include - -void *memset(void* dst, int c, size_t count) -{ - char *p = (char *)dst; - while(count--) *p++ = c; - return dst; -} diff --git a/src/usb/strcat.c b/src/usb/strcat.c deleted file mode 100755 index ca731c48..00000000 --- a/src/usb/strcat.c +++ /dev/null @@ -1,29 +0,0 @@ -/* -============================================================================= - Copyright (C) 1997-1999 NINTENDO Co.,Ltd. - - $RCSfile: strcat.c,v $ - $Revision: 1.1 $ - $Date: 1999/04/14 07:18:41 $ -============================================================================= -function name: strcat ------------------------------------------------------------------------------ -format: #include - char *strcat(char *str1, const char *str2); -argument: str1 character string buffer to be added - str2 character string buffer to add -return value: pointer of str1 -explanation: adds character string, str2 to the end of character string, str1 ------------------------------------------------------------------------------ -*/ -#include - -char *strcat(char *str1, const char *str2) -{ - char *p; - p = str1; - while(*p) p++; - while(*str2) *p++ = *str2++; - *p = '\0'; - return str1; -} diff --git a/src/usb/strncmp.c b/src/usb/strncmp.c deleted file mode 100755 index dd9f7d80..00000000 --- a/src/usb/strncmp.c +++ /dev/null @@ -1,34 +0,0 @@ -/* -============================================================================= - Copyright (C) 1997-1999 NINTENDO Co.,Ltd. - - $RCSfile: strncmp.c,v $ - $Revision: 1.1 $ - $Date: 1999/04/14 07:18:42 $ -============================================================================= -function name: strncmp ------------------------------------------------------------------------------ -format : #include - int strncmp(const char *str1, const char *str2, int n) -argument: str1 character string buffer to be compared - str2 character string buffer to be compared - n character number to be compared -return value: if less than 0, str1 is smaller than str2 - if 0 str1 is equal to str2 - if more than 0, str1 is larger than str2 -explanation: compares character string, str1 with character string, str2 by - n character ------------------------------------------------------------------------------ -*/ -#include - -int strncmp(const char *str1, const char *str2, int n) -{ - char c1 = 1,c2; - while(c1 && n--) { - c1=*str1++; - c2=*str2++; - if (c1 != c2) return c1 - c2; - } - return 0; -}