This commit is contained in:
Mittenshugg 2021-02-02 17:55:34 -06:00
parent 5ae232047c
commit f67647d07b
37 changed files with 209714 additions and 60 deletions

View File

@ -0,0 +1,37 @@
IRIX_ROOT := ../ido5.3_compiler
cc: OPT_CFLAGS := -O2
cfe: OPT_CFLAGS := -O2
uopt: OPT_CFLAGS := -O2
ugen: OPT_CFLAGS := -O2
as1: OPT_CFLAGS := -O2
acpp: OPT_CFLAGS := -O2
RECOMP := recomp
ugen_c.c: RECOMP_FLAGS := --conservative
all: cc cfe uopt ugen as1 acpp copt ujoin uld umerge usplit err.english.cc
clean:
$(RM) cc* cfe* uopt* ugen* as1* acpp* copt* ujoin* uld* umerge* usplit* err.english.cc $(RECOMP) libc_impl.o
$(RECOMP): recomp.cpp
$(CXX) $^ -o $@ -std=c++11 -O2 -Wno-switch `pkg-config --cflags --libs capstone`
libc_impl.o: libc_impl.c libc_impl.h
$(CC) $< -c -fno-strict-aliasing -O2 -DIDO53
err.english.cc: $(IRIX_ROOT)/usr/lib/err.english.cc
cp $^ $@
cc_c.c: $(IRIX_ROOT)/usr/bin/cc $(RECOMP)
./$(RECOMP) $(RECOMP_FLAGS) $< > $@
%_c.c: $(IRIX_ROOT)/usr/lib/% $(RECOMP)
./$(RECOMP) $(RECOMP_FLAGS) $< > $@
%: %_c.c libc_impl.o
$(CC) libc_impl.o $< -o $@ $(OPT_CFLAGS) -fno-strict-aliasing -lm -no-pie
.PHONY: all clean

BIN
ido/ido5.3_recomp/acpp Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

70220
ido/ido5.3_recomp/cc_c.c Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

BIN
ido/ido5.3_recomp/copt Executable file

Binary file not shown.

99
ido/ido5.3_recomp/elf.h Normal file
View File

@ -0,0 +1,99 @@
#ifndef ELF_H
#define ELF_H
#include <stdint.h>
#define EI_DATA 5
#define EI_NIDENT 16
#define SHT_SYMTAB 2
#define SHT_DYNAMIC 6
#define SHT_REL 9
#define SHT_DYNSYM 11
#define SHT_MIPS_REGINFO 0x70000006
#define STN_UNDEF 0
#define STT_OBJECT 1
#define STT_FUNC 2
#define DT_PLTGOT 3
#define DT_MIPS_LOCAL_GOTNO 0x7000000a
#define DT_MIPS_SYMTABNO 0x70000011
#define DT_MIPS_GOTSYM 0x70000013
#define ELF32_R_SYM(info) ((info) >> 8)
#define ELF32_R_TYPE(info) ((info) & 0xff)
#define ELF32_ST_TYPE(info) ((info) & 0xf)
#define R_MIPS_26 4
#define R_MIPS_HI16 5
#define R_MIPS_LO16 6
#define SHN_UNDEF 0
#define SHN_COMMON 0xfff2
#define SHN_MIPS_ACOMMON 0xff00
#define SHN_MIPS_TEXT 0xff01
#define SHN_MIPS_DATA 0xff02
typedef uint32_t Elf32_Addr;
typedef uint32_t Elf32_Off;
typedef struct {
uint8_t e_ident[EI_NIDENT];
uint16_t e_type;
uint16_t e_machine;
uint32_t e_version;
Elf32_Addr e_entry;
Elf32_Off e_phoff;
Elf32_Off e_shoff;
uint32_t e_flags;
uint16_t e_ehsize;
uint16_t e_phentsize;
uint16_t e_phnum;
uint16_t e_shentsize;
uint16_t e_shnum;
uint16_t e_shstrndx;
} Elf32_Ehdr;
typedef struct {
uint32_t sh_name;
uint32_t sh_type;
uint32_t sh_flags;
Elf32_Addr sh_addr;
Elf32_Off sh_offset;
uint32_t sh_size;
uint32_t sh_link;
uint32_t sh_info;
uint32_t sh_addralign;
uint32_t sh_entsize;
} Elf32_Shdr;
typedef struct {
uint32_t st_name;
Elf32_Addr st_value;
uint32_t st_size;
uint8_t st_info;
uint8_t st_other;
uint16_t st_shndx;
} Elf32_Sym;
typedef struct {
Elf32_Addr r_offset;
uint32_t r_info;
} Elf32_Rel;
typedef struct
{
uint32_t ri_gprmask; /* General registers used. */
uint32_t ri_cprmask[4]; /* Coprocessor registers used. */
int32_t ri_gp_value; /* $gp register value. */
} Elf32_RegInfo;
typedef struct
{
int32_t d_tag; /* Dynamic entry type */
union {
uint32_t d_val; /* Integer value */
Elf32_Addr d_ptr; /* Address value */
} d_un;
} Elf32_Dyn;
#endif

View File

@ -0,0 +1,30 @@
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <assert.h>
#include "libc_impl.h"
#include "helpers.h"
#define RM_RN 0
#define RM_RZ 1
#define RM_RP 2
#define RM_RM 3
union FloatReg {
float f[2];
uint32_t w[2];
double d;
};
#define cvt_w_d(f) \
((fcsr & RM_RZ) ? ((isnan(f) || f <= -2147483649.0 || f >= 2147483648.0) ? (fcsr |= 0x40, 2147483647) : (int)f) : (assert(0), 0))
#define cvt_w_s(f) cvt_w_d((double)f)
static union FloatReg f0 = {{0, 0}}, f2 = {{0, 0}}, f4 = {{0, 0}}, f6 = {{0, 0}}, f8 = {{0, 0}},
f10 = {{0, 0}}, f12 = {{0, 0}}, f14 = {{0, 0}}, f16 = {{0, 0}}, f18 = {{0, 0}}, f20 = {{0, 0}},
f22 = {{0, 0}}, f24 = {{0, 0}}, f26 = {{0, 0}}, f28 = {{0, 0}}, f30 = {{0, 0}};
static uint32_t fcsr = 1;

View File

@ -0,0 +1,13 @@
#ifndef HELPERS_H
#define HELPERS_H
#include <stdint.h>
#define MEM_U32(a) (*(uint32_t *)(mem + a))
#define MEM_S32(a) (*(int32_t *)(mem + a))
#define MEM_U16(a) (*(uint16_t *)(mem + ((a) ^ 2)))
#define MEM_S16(a) (*(int16_t *)(mem + ((a) ^ 2)))
#define MEM_U8(a) (*(uint8_t *)(mem + ((a) ^ 3)))
#define MEM_S8(a) (*(int8_t *)(mem + ((a) ^ 3)))
#endif

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,163 @@
#include <stdint.h>
void mmap_initial_data_range(uint8_t *mem, uint32_t start, uint32_t end);
void setup_libc_data(uint8_t *mem);
uint32_t wrapper_sbrk(uint8_t *mem, int increment);
uint32_t wrapper_malloc(uint8_t *mem, uint32_t size);
uint32_t wrapper_calloc(uint8_t *mem, uint32_t num, uint32_t size);
uint32_t wrapper_realloc(uint8_t *mem, uint32_t data_addr, uint32_t size);
int wrapper_fscanf(uint8_t *mem, uint32_t fp_addr, uint32_t format_addr, uint32_t sp);
int wrapper_printf(uint8_t *mem, uint32_t format_addr, uint32_t sp);
int wrapper_sprintf(uint8_t *mem, uint32_t str_addr, uint32_t format_addr, uint32_t sp);
int wrapper_fprintf(uint8_t *mem, uint32_t fp_addr, uint32_t format_addr, uint32_t sp);
int wrapper__doprnt(uint8_t *mem, uint32_t format_addr, uint32_t params_addr, uint32_t fp_addr);
void wrapper_free(uint8_t *mem, uint32_t data_addr);
uint32_t wrapper_strlen(uint8_t *mem, uint32_t str_addr);
int wrapper_open(uint8_t *mem, uint32_t pathname_addr, int flags, int mode);
int wrapper_creat(uint8_t *mem, uint32_t pathname_addr, int mode);
int wrapper_access(uint8_t *mem, uint32_t pathname_addr, int mode);
int wrapper_rename(uint8_t *mem, uint32_t oldpath_addr, uint32_t newpath_addr);
int wrapper_utime(uint8_t *mem, uint32_t filename_addr, uint32_t times_addr);
int wrapper_flock(uint8_t *mem, int fd, int operation);
int wrapper_chmod(uint8_t *mem, uint32_t path_addr, uint32_t mode);
int wrapper_umask(int mode);
uint32_t wrapper_ecvt(uint8_t *mem, double number, int ndigits, uint32_t decpt_addr, uint32_t sign_addr);
uint32_t wrapper_fcvt(uint8_t *mem, double number, int ndigits, uint32_t decpt_addr, uint32_t sign_addr);
double wrapper_sqrt(double v);
float wrapper_sqrtf(float v);
int wrapper_atoi(uint8_t *mem, uint32_t nptr_addr);
int wrapper_atol(uint8_t *mem, uint32_t nptr_addr);
double wrapper_atof(uint8_t *mem, uint32_t nptr_addr);
int wrapper_strtol(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, int base);
uint32_t wrapper_strtoul(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, int base);
double wrapper_strtod(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr);
uint32_t wrapper_strchr(uint8_t *mem, uint32_t str_addr, int c);
uint32_t wrapper_strrchr(uint8_t *mem, uint32_t str_addr, int c);
uint32_t wrapper_strcspn(uint8_t *mem, uint32_t str_addr, uint32_t invalid_addr);
uint32_t wrapper_strpbrk(uint8_t *mem, uint32_t str_addr, uint32_t accept_addr);
int wrapper_fstat(uint8_t *mem, int fildes, uint32_t buf_addr);
int wrapper_stat(uint8_t *mem, uint32_t pathname_addr, uint32_t buf_addr);
int wrapper_ftruncate(uint8_t *mem, int fd, int length);
void wrapper_bcopy(uint8_t *mem, uint32_t src_addr, uint32_t dst_addr, uint32_t len);
uint32_t wrapper_memcpy(uint8_t *mem, uint32_t dst_addr, uint32_t src_addr, uint32_t len);
uint32_t wrapper_memccpy(uint8_t *mem, uint32_t dst_addr, uint32_t src_addr, int c, uint32_t len);
int wrapper_read(uint8_t *mem, int fd, uint32_t buf_addr, uint32_t nbytes);
int wrapper_write(uint8_t *mem, int fd, uint32_t buf_addr, uint32_t nbytes);
uint32_t wrapper_fopen(uint8_t *mem, uint32_t path_addr, uint32_t mode_addr);
uint32_t wrapper_freopen(uint8_t *mem, uint32_t path_addr, uint32_t mode_addr, uint32_t fp_addr);
int wrapper_fclose(uint8_t *mem, uint32_t fp_addr);
int wrapper_fflush(uint8_t *mem, uint32_t fp_addr);
int wrapper_ftell(uint8_t *mem, uint32_t fp_addr);
void wrapper_rewind(uint8_t *mem, uint32_t fp_addr);
int wrapper_fseek(uint8_t *mem, uint32_t fp_addr, int offset, int origin);
int wrapper_lseek(uint8_t *mem, int fd, int offset, int whence);
int wrapper_dup(uint8_t *mem, int fd);
int wrapper_dup2(uint8_t *mem, int oldfd, int newfd);
int wrapper_pipe(uint8_t *mem, uint32_t pipefd_addr);
void wrapper_perror(uint8_t *mem, uint32_t str_addr);
int wrapper_fdopen(uint8_t *mem, int fd, uint32_t mode_addr);
uint32_t wrapper_memset(uint8_t *mem, uint32_t dest_addr, int byte, uint32_t n);
int wrapper_bcmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n);
int wrapper_memcmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n);
int wrapper_getpid(void);
int wrapper_getpgrp(uint8_t *mem);
int wrapper_remove(uint8_t *mem, uint32_t path_addr);
int wrapper_unlink(uint8_t *mem, uint32_t path_addr);
int wrapper_close(uint8_t *mem, int fd);
int wrapper_strcmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr);
int wrapper_strncmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n);
uint32_t wrapper_strcpy(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr);
uint32_t wrapper_strncpy(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr, uint32_t n);
uint32_t wrapper_strcat(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr);
uint32_t wrapper_strncat(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr, uint32_t n);
uint32_t wrapper_strtok(uint8_t *mem, uint32_t str_addr, uint32_t delimiters_addr);
uint32_t wrapper_strstr(uint8_t *mem, uint32_t str1_addr, uint32_t str2_addr);
uint32_t wrapper_strdup(uint8_t *mem, uint32_t str_addr);
int wrapper_toupper(int c);
int wrapper_tolower(int c);
int wrapper_gethostname(uint8_t *mem, uint32_t name_addr, uint32_t len);
int wrapper_isatty(uint8_t *mem, int fd);
int wrapper_times(uint8_t *mem, uint32_t buffer_addr);
uint32_t wrapper_strftime(uint8_t *mem, uint32_t ptr_addr, uint32_t maxsize, uint32_t format_addr, uint32_t timeptr_addr);
int wrapper_clock(void);
uint32_t wrapper_ctime(uint8_t *mem, uint32_t timep_addr);
uint32_t wrapper_localtime(uint8_t *mem, uint32_t timep_addr);
int wrapper_setvbuf(uint8_t *mem, uint32_t fp_addr, uint32_t buf_addr, int mode, uint32_t size);
int wrapper___semgetc(uint8_t *mem, uint32_t fp_addr);
int wrapper___semputc(uint8_t *mem, int c, uint32_t fp_addr);
int wrapper_fgetc(uint8_t *mem, uint32_t fp_addr);
int wrapper_fgets(uint8_t *mem, uint32_t str_addr, int count, uint32_t fp_addr);
int wrapper___filbuf(uint8_t *mem, uint32_t fp_addr);
int wrapper___flsbuf(uint8_t *mem, int ch, uint32_t fp_addr);
int wrapper_ungetc(uint8_t *mem, int ch, uint32_t fp_addr);
uint32_t wrapper_gets(uint8_t *mem, uint32_t str_addr);
uint32_t wrapper_fread(uint8_t *mem, uint32_t data_addr, uint32_t size, uint32_t count, uint32_t fp_addr);
uint32_t wrapper_fwrite(uint8_t *mem, uint32_t data_addr, uint32_t size, uint32_t count, uint32_t fp_addr);
int wrapper_fputs(uint8_t *mem, uint32_t str_addr, uint32_t fp_addr);
int wrapper_puts(uint8_t *mem, uint32_t str_addr);
uint32_t wrapper_getcwd(uint8_t *mem, uint32_t buf_addr, uint32_t size);
int wrapper_time(uint8_t *mem, uint32_t tloc_addr);
void wrapper_bzero(uint8_t *mem, uint32_t str_addr, uint32_t n);
int wrapper_fp_class_d(double d);
double wrapper_ldexp(double d, int i);
int64_t wrapper___ll_mul(int64_t a0, int64_t a1);
int64_t wrapper___ll_div(int64_t a0, int64_t a1);
int64_t wrapper___ll_rem(uint64_t a0, int64_t a1);
int64_t wrapper___ll_lshift(int64_t a0, uint64_t shift);
int64_t wrapper___ll_rshift(int64_t a0, uint64_t shift);
uint64_t wrapper___ull_div(uint64_t a0, uint64_t a1);
uint64_t wrapper___ull_rem(uint64_t a0, uint64_t a1);
uint64_t wrapper___ull_rshift(uint64_t a0, uint64_t shift);
uint64_t wrapper___d_to_ull(double d);
int64_t wrapper___d_to_ll(double d);
uint64_t wrapper___f_to_ull(float f);
int64_t wrapper___f_to_ll(float f);
float wrapper___ull_to_f(uint64_t v);
float wrapper___ll_to_f(int64_t v);
double wrapper___ull_to_d(uint64_t v);
double wrapper___ll_to_d(int64_t v);
void wrapper_abort(uint8_t *mem);
void wrapper_exit(uint8_t *mem, int status);
void wrapper__exit(uint8_t *mem, int status);
void wrapper__cleanup(uint8_t *mem);
uint32_t wrapper__rld_new_interface(uint8_t *mem, uint32_t operation, uint32_t sp);
void wrapper__exithandle(uint8_t *mem);
int wrapper__prctl(uint8_t *mem, int operation, uint32_t sp);
double wrapper__atod(uint8_t *mem, uint32_t buffer_addr, int ndigits, int dexp);
int wrapper_pathconf(uint8_t *mem, uint32_t path_addr, int name);
uint32_t wrapper_getenv(uint8_t *mem, uint32_t name_addr);
uint32_t wrapper_gettxt(uint8_t *mem, uint32_t msgid_addr, uint32_t default_str_addr);
uint32_t wrapper_setlocale(uint8_t *mem, int category, uint32_t locale_addr);
uint32_t wrapper_mmap(uint8_t *mem, uint32_t addr, uint32_t length, int prot, int flags, int fd, int offset);
int wrapper_munmap(uint8_t *mem, uint32_t addr, uint32_t length);
int wrapper_mprotect(uint8_t *mem, uint32_t addr, uint32_t length, int prot);
int wrapper_sysconf(uint8_t *mem, int name);
int wrapper_getpagesize(uint8_t *mem);
int wrapper_strerror(uint8_t *mem, int errnum);
int wrapper_ioctl(uint8_t *mem, int fd, uint32_t request, uint32_t sp);
int wrapper_fcntl(uint8_t *mem, int fd, int cmd, uint32_t sp);
uint32_t wrapper_signal(uint8_t *mem, int signum, uint64_t (*trampoline)(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t fp_dest), uint32_t handler_addr, uint32_t sp);
uint32_t wrapper_sigset(uint8_t *mem, int signum, uint64_t (*trampoline)(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t fp_dest), uint32_t disp_addr, uint32_t sp);
int wrapper_get_fpc_csr(uint8_t *mem);
int wrapper_set_fpc_csr(uint8_t *mem, int csr);
int wrapper_setjmp(uint8_t *mem, uint32_t addr);
void wrapper_longjmp(uint8_t *mem, uint32_t addr, int status);
uint32_t wrapper_tempnam(uint8_t *mem, uint32_t dir_addr, uint32_t pfx_addr);
uint32_t wrapper_tmpnam(uint8_t *mem, uint32_t str_addr);
uint32_t wrapper_mktemp(uint8_t *mem, uint32_t template_addr);
int wrapper_mkstemp(uint8_t *mem, uint32_t name_addr);
uint32_t wrapper_tmpfile(uint8_t *mem);
int wrapper_wait(uint8_t *mem, uint32_t wstatus_addr);
int wrapper_kill(uint8_t *mem, int pid, int sig);
int wrapper_execlp(uint8_t *mem, uint32_t file_addr, uint32_t sp);
int wrapper_execv(uint8_t *mem, uint32_t pathname_addr, uint32_t argv_addr);
int wrapper_execvp(uint8_t *mem, uint32_t file_addr, uint32_t argv_addr);
int wrapper_fork(uint8_t *mem);
int wrapper_system(uint8_t *mem, uint32_t command_addr);
uint32_t wrapper_tsearch(uint8_t *mem, uint32_t key_addr, uint32_t rootp_addr, uint32_t compar_addr);
uint32_t wrapper_tfind(uint8_t *mem, uint32_t key_addr, uint32_t rootp_addr, uint32_t compar_addr);
uint32_t wrapper_qsort(uint8_t *mem, uint32_t base_addr, uint32_t num, uint32_t size, uint64_t (*trampoline)(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t fp_dest), uint32_t compare_addr, uint32_t sp);
uint32_t wrapper_regcmp(uint8_t *mem, uint32_t string1_addr, uint32_t sp);
uint32_t wrapper_regex(uint8_t *mem, uint32_t re_addr, uint32_t subject_addr, uint32_t sp);
void wrapper___assert(uint8_t *mem, uint32_t assertion_addr, uint32_t file_addr, int line);

BIN
ido/ido5.3_recomp/recomp Executable file

Binary file not shown.

2933
ido/ido5.3_recomp/recomp.cpp Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

133401
ido/ido5.3_recomp/ugen_c.c Normal file

File diff suppressed because it is too large Load Diff

BIN
ido/ido5.3_recomp/ujoin Executable file

Binary file not shown.

BIN
ido/ido5.3_recomp/uld Executable file

Binary file not shown.

BIN
ido/ido5.3_recomp/umerge Executable file

Binary file not shown.

Binary file not shown.

BIN
ido/ido5.3_recomp/usplit Executable file

Binary file not shown.

View File

@ -17,7 +17,7 @@
<text x="75.0" y="14">Banjo-Kazooie (us.v10)</text>
</g>
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<text x="181.0" y="15" fill="#010101" fill-opacity=".3">1.3614%</text>
<text x="180.0" y="14">1.3614%</text>
<text x="181.0" y="15" fill="#010101" fill-opacity=".3">1.4324%</text>
<text x="180.0" y="14">1.4324%</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

31
src/core1/audio/bnkf.c Normal file
View File

@ -0,0 +1,31 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
/* copt used??? */
void _bnkfPatchWaveTable(void){}
void _bnkfPatchSound(void){}
#pragma GLOBAL_ASM("asm/nonmatchings/core1/audio/bnkf/_bnkfPatchInst.s")
void _bnkfPatchBank(void){}
#pragma GLOBAL_ASM("asm/nonmatchings/core1/audio/bnkf/alBnkfNew.s")
void alSeqFileNew(ALSeqFile *file, u8 *base)
{
s32 offset = (s32) base;
s32 i;
/*
* patch the file so that offsets are pointers
*/
for (i = 0; i < file->seqCount; i++) {
file->seqArray[i].offset = (u8 *)((u8 *)file->seqArray[i].offset + offset);
}
}

14
src/core1/audio/copy.c Normal file
View File

@ -0,0 +1,14 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
void alCopy(void *src, void *dest, s32 len)
{
s32 i;
u8 *s = (u8 *)src;
u8 *d = (u8 *)dest;
for (i = 0; i < len; i++){
*d++ = *s++;
}
}

101
src/core1/audio/seq.c Normal file
View File

@ -0,0 +1,101 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
extern f64 D_80278D50;
extern f64 D_80278D58;
void alSeqGetLoc(ALSeq *seq, ALSeqMarker *m){
m->curPtr = seq->curPtr;
m->lastStatus = seq->lastStatus;
m->lastTicks = seq->lastTicks;
}
void alSeqSetLoc(ALSeq *seq, ALSeqMarker *m){
seq->curPtr = m->curPtr;
seq->lastStatus = m->lastStatus;
seq->lastTicks = m->lastTicks;
}
s32 alSeqGetTicks(ALSeq *seq){
return seq->lastTicks;
}
void read8(void){}
#pragma GLOBAL_ASM("asm/nonmatchings/core1/audio/seq/readVarLen.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/audio/seq/alSeqNextEvent.s")
void alSeqNewMarker(ALSeq *seq, ALSeqMarker *m, u32 ticks)
{
ALEvent evt;
u8 *savePtr, *lastPtr;
s32 saveTicks, lastTicks;
s16 saveStatus, lastStatus;
/* does not check that ticks is within bounds */
if (ticks == 0) { /* common case */
m->curPtr = seq->trackStart;
m->lastStatus = 0;
m->lastTicks = 0;
m->curTicks = 0;
return;
} else {
savePtr = seq->curPtr;
saveStatus = seq->lastStatus;
saveTicks = seq->lastTicks;
seq->curPtr = seq->trackStart;
seq->lastStatus = 0;
seq->lastTicks = 0;
do {
lastPtr = seq->curPtr;
lastStatus = seq->lastStatus;
lastTicks = seq->lastTicks;
alSeqNextEvent(seq, &evt);
if (evt.type == AL_SEQ_END_EVT)
{
lastPtr = seq->curPtr;
lastStatus = seq->lastStatus;
lastTicks = seq->lastTicks;
break;
}
} while (seq->lastTicks < ticks);
m->curPtr = lastPtr;
m->lastStatus = lastStatus;
m->lastTicks = lastTicks;
m->curTicks = seq->lastTicks; /* Used by test loop condition. */
seq->curPtr = savePtr;
seq->lastStatus = saveStatus;
seq->lastTicks = saveTicks;
}
}
u32 alSeqSecToTicks(ALSeq *seq, f32 sec, u32 tempo)
{
return (u32)(((sec * D_80278D50) * seq->division) / tempo);
}
f32 alSeqTicksToSec(ALSeq *seq, s32 ticks, u32 tempo)
{
return ((f32) (((f32)(ticks) * (f32)(tempo)) /
((f32)(seq->division) * D_80278D58)));
}
#pragma GLOBAL_ASM("asm/nonmatchings/core1/audio/seq/__alSeqNextDelta.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/audio/seq/read32.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/audio/seq/read16.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/audio/seq/alSeqNew.s")

View File

@ -45,7 +45,7 @@ extern ALBank *D_80282108;
// for(i = 0; i < 6; i++){
// func_8025EABC(&D_80281898[i].cseqp, &D_802820E8); //alCSPNew
// }
// func_80267144(bnk_f, 0xeade60); //alBnkfNew
// alBnkfNew(bnk_f, 0xeade60); //alBnkfNew
// for(i = 0; i < 6; i++){
// func_8025EC30(&D_80281898[i].cseqp, D_80282108); //alSeqpSetBank
// }

View File

@ -5,7 +5,60 @@
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_1F330/func_8025CD50.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_1F330/func_8025CDFC.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_1F330/alEvtqPostEvent.s")
// void alEvtqPostEvent(ALEventQueue *evtq, ALEvent *evt, ALMicroTime delta)
// {
// ALEventListItem *item;
// ALEventListItem *nextItem;
// ALLink *node;
// s32 postAtEnd=0;
// OSIntMask mask;
// mask = osSetIntMask(OS_IM_NONE);
// item = (ALEventListItem *)evtq->freeList.next;
// if (!item) {
// osSetIntMask(mask);
// #ifdef _DEBUG
// __osError(ERR_ALEVENTNOFREE, 0);
// #endif
// return;
// }
// alUnlink(&item->node);
// alCopy(evt, &item->evt, sizeof(item->evt));
// if (delta == AL_EVTQ_END)
// postAtEnd = -1;
// for (node = &evtq->allocList; node != 0; node = node->next) {
// if (!node->next) { /* end of the list */
// if (postAtEnd)
// item->delta = 0;
// else
// item->delta = delta;
// alLink(&item->node, node);
// break;
// } else {
// nextItem = (ALEventListItem *)node->next;
// if (delta < nextItem->delta) {
// item->delta = delta;
// nextItem->delta -= delta;
// alLink(&item->node, node);
// break;
// }
// delta -= nextItem->delta;
// }
// }
// osSetIntMask(mask);
// }
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_1F330/func_8025CF20.s")

View File

@ -13,7 +13,40 @@
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_22DA0/func_80260C3C.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_22DA0/func_80261210.s")
void __postNextSeqEvent(ALSeqPlayer *seqp)
{
ALEvent evt;
s32 deltaTicks;
ALSeq *seq = seqp->target;
/* sct 1/5/96 - Do nothing if we're not playing or don't have a target sequence. */
if ((seqp->state != AL_PLAYING) || (seq == NULL))
return;
/* Get the next event time in ticks. */
/* If false is returned, then there is no next delta (ie. end of sequence reached). */
if (!__alSeqNextDelta(seq, &deltaTicks))
return;
/* Handle loops. */
if (seqp->loopCount)
{
/* Assume that the loop end falls on a MIDI event. Delta time
will be correct even if we loop */
if (alSeqGetTicks(seq) + deltaTicks >= seqp->loopEnd->curTicks)
{
alSeqSetLoc(seq, seqp->loopStart);
if (seqp->loopCount != -1)
seqp->loopCount--;
}
}
evt.type = AL_SEQ_REF_EVT;
//alEvtqPostEvent(&seqp->evtq, &evt, deltaTicks * seqp->uspt);
alEvtqPostEvent(&seqp->evtq, &evt, deltaTicks * seqp->uspt);
}
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_22DA0/func_802612EC.s")

View File

@ -9,4 +9,5 @@
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_26DB0/osStartThread.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_26DB0/func_80264AF0.s")

View File

@ -3,7 +3,7 @@
#include "variables.h"
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_27AB0/func_802654D0.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_27AB0/osSetIntMask.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_27AB0/func_80265570.s")

View File

@ -1,16 +0,0 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_29620/func_80267040.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_29620/func_80267048.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_29620/func_80267050.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_29620/func_8026713C.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_29620/func_80267144.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_29620/func_80267248.s")

View File

@ -4,5 +4,3 @@
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_2ACE0/func_80268700.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_2ACE0/func_80268740.s")

View File

@ -1,34 +0,0 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_2C1D0/func_80269BF0.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_2C1D0/func_80269C0C.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_2C1D0/func_80269C28.s")
void func_80269C30(void){}
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_2C1D0/func_80269C38.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_2C1D0/func_80269C84.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_2C1D0/func_80269E08.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_2C1D0/func_80269F28.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_2C1D0/func_8026A00C.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_2C1D0/func_8026A060.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_2C1D0/func_8026A0B8.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_2C1D0/func_8026A108.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_2C1D0/func_8026A138.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_2C1D0/func_8026A210.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_2C1D0/func_8026A220.s")

8
src/core1/code_2C7F0.c Normal file
View File

@ -0,0 +1,8 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_2C7F0/func_8026A210.s")
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_2C7F0/func_8026A220.s")

View File

@ -108,7 +108,7 @@ segments:
- [0x28DA0, c, core1/gu/rotate]
- [0x28F90, c]
- [0x291F0, c]
- [0x29620, c]
- [0x29620, c, core1/audio/bnkf]
- [0x29870, c]
- [0x29900, c]
- [0x2A3C0, c]
@ -116,8 +116,10 @@ segments:
- [0x2AB20, c]
- [0x2AC50, c]
- [0x2ACE0, c]
- [0x2AD20, c, core1/audio/copy]
- [0x2ADA0, c]
- [0x2C1D0, c]
- [0x2C1D0, c, core1/audio/seq]
- [0x2C7F0, c]
- [0x2C810, c]
- [0x2C8C0, c]
- [0x2D230, c]

View File

@ -10,6 +10,8 @@ mlNormalizeAngle = 0x8025881C;
func_80258C48 = 0x80258C48;
func_80258C7C = 0x80258C7C;
mlScale = 0x80258CB0;
alEvtqPostEvent = 0x8025CDFC;
__postNextSeqEvent = 0x80261210;
alUnlink = 0x80264430;
alLink = 0x80264460;
alClose = 0x80264484;
@ -23,6 +25,7 @@ gu_sqrtf = 0x80265350;
osViSwapBuffer = 0x802663F0;
osViSetEvent = 0x80266440;
osViGetNextFrameBuffer = 0x802664B0;
osSetIntMask = 0x802654D0;
osViBlack = 0x802664F0;
guOrthoF = 0x80266560;
guOrtho = 0x802666B4;
@ -30,6 +33,25 @@ guTranslateF = 0x80266720;
guTranslate = 0x80266768;
guRotateF = 0x802667C0;
guRotate = 0x80266954;
_bnkfPatchInst = 0x80267050;
alBnkfNew = 0x80267144;
alSeqFileNew = 0x80267248;
alCopy = 0x80268740;
alSeqGetLoc = 0x80269BF0;
alSeqSetLoc = 0x80269C0C;
alSeqGetTicks = 0x80269C28;
readVarLen = 0x80269C38;
alSeqNextEvent = 0x80269C84;
alSeqNewMarker = 0x80269E08;
alSeqSecToTicks = 0x80269F28;
alSeqTicksToSec = 0x8026A00C;
__alSeqNextDelta = 0x8026A060;
read32 = 0x8026A0B8;
read16 = 0x8026A108;
alSeqNew = 0x8026A138;
__osEnqueueAndYield = 0x8026A90C;
__osEnqueueThread = 0x8026AA0C;
__osPopThread = 0x8026AA54;
__osDisableInt = 0x8026ACB0;
__osRestoreInt = 0x8026ACD0;
alSynNew = 0x8026B110;

View File

@ -11,6 +11,8 @@ banjo_getPitch = 0x80297F98;
func_80298220 = 0x80298220;
banjo_getRoll = 0x80298D3C;
banjo_getYaw = 0x8029921C;
func_802C4140 = 0x802C4140;
func_802C418C = 0x802C418C;
_gcbound_draw = 0x802EE420;
gcbound_draw = 0x802EE508;
gcbound_alpha = 0x802EE548;