1.4324%
This commit is contained in:
parent
5ae232047c
commit
f67647d07b
|
@ -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
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
|
@ -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
|
|
@ -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;
|
|
@ -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
|
@ -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);
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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 |
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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++;
|
||||
}
|
||||
}
|
|
@ -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")
|
||||
|
|
@ -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
|
||||
// }
|
||||
|
|
|
@ -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")
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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")
|
||||
|
||||
|
|
|
@ -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")
|
|
@ -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")
|
||||
|
|
|
@ -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")
|
|
@ -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")
|
|
@ -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]
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue