start Pal WIP

This commit is contained in:
Banjo Kazooie
2024-09-04 01:30:42 -05:00
parent 98e97f4e95
commit 06e1330e71
17 changed files with 2936 additions and 188 deletions

View File

@@ -12,44 +12,44 @@ u8 D_8038BFC2;
int func_8038AAB0(void){return 0;}
#elif VERSION == PAL
void func_8038AAB0(s32 arg0, s32 arg1){
if(arg1 < 0){
func_8031A844();
}
else{
D_8038BFC2 = arg1;
func_8038B4D0(3);
}
}
// void func_8038AAB0(s32 arg0, s32 arg1){
// if(arg1 < 0){
// func_8031A844();
// }
// else{
// D_8038BFC2 = arg1;
// func_8038B4D0(3);
// }
// }
// #pragma GLOBAL_ASM("asm/nonmatchings/SM/code_46C0/func_8038A8F0.s")
void func_8038A8F0(s32 arg0) {
u8 temp_v0;
// void func_8038A8F0(s32 arg0) {
// u8 temp_v0;
switch (arg0) { /* irregular */
case 1:
D_8038BFC1 = 1;
func_80319400();
break;
case 2:
D_8038BFC8->unk0 = (s32) D_8038BD38;
D_8038BFC8->unk4 = (s32) D_8038BD3C;
D_8038BFC8->unk10 = (s32) D_8038BD40;
D_8038BFC8->unk20 = (s32) D_8038BD44;
D_8038BFC8->unk30 = (s32) D_8038BD48;
func_8031A5E4(&D_8038BD30, &D_8038BD34, (void *)0x8038BFC8, 0xA, &D_8038B490);
break;
case 3:
temp_v0 = *(u8 *)0x8038BFC2;
if (temp_v0 != 0) {
func_8031B9A4(temp_v0 - 1, 0x80390000);
}
func_802FAF44(0);
D_8038BFC1 = 0;
break;
}
D_8038BFC0 = (s8) arg0;
}
// switch (arg0) { /* irregular */
// case 1:
// D_8038BFC1 = 1;
// func_80319400();
// break;
// case 2:
// D_8038BFC8->unk0 = (s32) D_8038BD38;
// D_8038BFC8->unk4 = (s32) D_8038BD3C;
// D_8038BFC8->unk10 = (s32) D_8038BD40;
// D_8038BFC8->unk20 = (s32) D_8038BD44;
// D_8038BFC8->unk30 = (s32) D_8038BD48;
// func_8031A5E4(&D_8038BD30, &D_8038BD34, (void *)0x8038BFC8, 0xA, &D_8038B490);
// break;
// case 3:
// temp_v0 = *(u8 *)0x8038BFC2;
// if (temp_v0 != 0) {
// func_8031B9A4(temp_v0 - 1, 0x80390000);
// }
// func_802FAF44(0);
// D_8038BFC1 = 0;
// break;
// }
// D_8038BFC0 = (s8) arg0;
// }
// #pragma GLOBAL_ASM("asm/nonmatchings/SM/code_46C0/func_8038A9E4.s")

View File

@@ -1,13 +1,16 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#include "version.h"
#include "gc/gctransition.h"
void func_8023E00C(enum map_e);
void func_8023DFF0(s32);
#if VERSION == VERSION_PAL
extern s32 D_80000300;
#endif
s32 D_80275610 = 0;
s32 D_80275614 = 0;
@@ -16,10 +19,9 @@ u32 D_8027561C[] = {
0x9, 0x4, 0xA, 0x3, 0xB, 0x2, 0xC, 0x5, 0x0,
0x1, 0x6, 0xD, -1
};
u32 D_80275650 = 0xAD019D3C; //SM_DATA_CRC_1
u32 D_80275654 = 0xD381B72F; //SM_DATA_CRC_2
char D_80275658[] = "HjunkDire:218755";
u32 D_80275650 = VER_SELECT(0xAD019D3C, 0xA371A8F3, 0, 0); //SM_DATA_CRC_1
u32 D_80275654 = VER_SELECT(0xD381B72F, 0xD0709154, 0, 0); //SM_DATA_CRC_2
char D_80275658[] = VER_SELECT("HjunkDire:218755", "HjunkDire:300875", "HjunkDire:", "HjunkDire:");
/* .bss */
u32 D_8027A130;
@@ -99,6 +101,9 @@ void func_8023DBDC(void){
}
void core1_init(void){
#if VERSION == VERSION_PAL
D_80000300 = 0;
#endif
func_80255C30();
func_8023E00C(func_8023DBA4());
rarezip_init(); //initialize decompressor's huft table

View File

@@ -1,9 +1,12 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#include "version.h"
#include "2.0L/PR/sched.h"
#include "n_libaudio.h"
#define AUDIO_HEAP_SIZE VER_SELECT(0x21000, 0x23A00, 0x21000, 0x21000)
extern void n_alInit(N_ALGlobals *, ALSynConfig *);
typedef struct AudioInfo_s {
@@ -144,12 +147,12 @@ struct {
} audioManager;
u8 pad_8027C178[0xE78];
ALHeap D_8027CFF0;
u8 * D_8027D000;
u8 * D_8027D000;
s32 D_8027D004;
OSMesgQueue D_8027D008;
OSMesg D_8027D020[50];
OSMesg D_8027D020[3000/FRAMERATE];
OSIoMesg D_8027D0E8;
Struct_core1_1D00_4 D_8027D100[50];
Struct_core1_1D00_4 D_8027D100[3000/FRAMERATE];
struct {
u8 unk0;
Struct_1D00_3 *unk4;
@@ -282,11 +285,16 @@ void func_8023FA64(ALSeqpConfig *arg0) {
}
void audioManager_init(void){
D_8027D000 = (u8 *) malloc(0x21000);
bzero(D_8027D000, 0x21000);
alHeapInit(&D_8027CFF0, D_8027D000, 0x21000);
D_8027D000 = (u8 *) malloc(AUDIO_HEAP_SIZE);
bzero(D_8027D000, AUDIO_HEAP_SIZE);
alHeapInit(&D_8027CFF0, D_8027D000, AUDIO_HEAP_SIZE);
#if VERSION == VERSION_USA_1_0
if(osTvType != OS_TV_NTSC)
osViClock = 0x2e6025c;
#elif VERSION == VERSION_PAL
PAL_EXCLUSIVE(
osViClock = 0x2f5b2d2;
)
audioManager_create();
sfxInstruments_init();
musicInstruments_init();
@@ -297,10 +305,10 @@ void audioManager_create(void) {
int i;
f32 var_f0;
osCreateMesgQueue(&D_8027D008, D_8027D020, 50);
osCreateMesgQueue(&D_8027D008, D_8027D020, 3000/FRAMERATE);
osCreateMesgQueue(&audioManager.audioReplyMsgQ, audioManager.audioReplyMsgBuf, 8); //audioReplyMesgQueue
osCreateMesgQueue(&audioManager.audioFrameMsgQ, audioManager.audioFrameMsgBuf, 8);
var_f0 = 733.333313f;
var_f0 = 44000.0f/FRAMERATE;
D_8027DD74 = (s32)var_f0;
if ((f32) D_8027DD74 < var_f0) {
D_8027DD74++;
@@ -321,14 +329,14 @@ void audioManager_create(void) {
D_8027D5C0[0].unk0.next = NULL;
for(i = 0; i < 89; i++){
alLink((ALLink *)&D_8027D5C0[i+1], (ALLink *)&D_8027D5C0[i]);
D_8027D5C0[i].unk10 = alHeapDBAlloc(0, 0, D_8027DD50.heap, 1, 0x200);
D_8027D5C0[i].unk10 = alHeapDBAlloc(0, 0, D_8027DD50.heap, 1, VER_SELECT(0x200, 0x270, 0x200, 0x200));
}
D_8027D5C0[i].unk10 = alHeapDBAlloc(0, 0, D_8027DD50.heap, 1, 0x200);
D_8027D5C0[i].unk10 = alHeapDBAlloc(0, 0, D_8027DD50.heap, 1, VER_SELECT(0x200, 0x270, 0x200, 0x200));
for(i = 0; i < 2; i++){
audioManager.ACMDList[i] = malloc(20000);
audioManager.ACMDList[i] = malloc(1200000/FRAMERATE);
}
D_8027DD80 = 2500;
D_8027DD80 = 150000/FRAMERATE;
for(i = 0; i < 3; i++){
audioManager.audioInfo[i] = alHeapDBAlloc(0, 0, D_8027DD50.heap, 1, 0x10);
audioManager.audioInfo[i]->unk8 = 0;
@@ -368,7 +376,11 @@ bool audioManager_handleFrameMsg(AudioInfo *info, AudioInfo *prev_info){
s16 *outbuffer;
Acmd *sp38;
s32 sp34;
#if VERSION == VERSION_USA_1_0
s32 sp30 = 0;
#else
s32 sp30;
#endif
f32 pad;
outbuffer = (s16 *)osVirtualToPhysical(info->data);
@@ -377,13 +389,15 @@ bool audioManager_handleFrameMsg(AudioInfo *info, AudioInfo *prev_info){
if(prev_info){
sp30 = osAiSetNextBuffer(prev_info->data, prev_info->frameSamples*4);
}//L8024003C
#if VERSION == VERSION_USA_1_0
if(sp30 == -1){
func_80247F24(2, 0x7d2);
func_80247F9C(prev_info->frameSamples);
func_80247F9C(info->frameSamples);
func_802483D8();
}
}
#endif
if((D_80275770 >= 0x139) & !D_80275778){
info->frameSamples = D_8027DD78;
@@ -401,12 +415,14 @@ bool audioManager_handleFrameMsg(AudioInfo *info, AudioInfo *prev_info){
sp38 = n_alAudioFrame(audioManager.ACMDList[D_8027DCD0], &sp34, outbuffer, info->frameSamples);
#if VERSION == VERSION_USA_1_0
if(D_8027DD80 < sp34){
func_80247F24(2, 2000);
func_80247F9C(sp34);
func_80247F9C(D_8027DD80);
func_802483D8();
}
#endif
if(sp34 == 0){
return 0;
@@ -426,6 +442,7 @@ void audioManager_handleDoneMsg(AudioInfo *info)
}
}
#if VERSION == VERSION_USA_1_0
s32 func_80240204(s32 addr, s32 len, void *state){
void *sp44;
s32 sp40;
@@ -479,6 +496,63 @@ s32 func_80240204(s32 addr, s32 len, void *state){
osPiStartDma(&D_8027D100[D_8027DCCC++], 1, 0, addr, sp44, 0x200U, &D_8027D008);
return osVirtualToPhysical(sp44) + sp40;
}
#elif VERSION == VERSION_PAL
#ifndef NONMATCHING
s32 func_80240204(s32 addr, s32 len, void *state);
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_1D00/func_80240204.s")
#else
s32 func_80240204(s32 addr, s32 len, void *state){
void *sp44;
s32 sp40;
Struct_1D00_3 *phi_s0;
Struct_1D00_3 *phi_v0;
s32 new_var;
Struct_1D00_3 *sp30;
phi_v0 = D_8027D5B0.unk4;
sp30 = NULL;
for(phi_s0 = phi_v0; phi_s0 != NULL; phi_s0 = phi_s0->unk0.next) {
sp40 = (phi_s0->unk8 + 0x270);
if ((phi_s0->unk8 > addr)) break;
sp30 = phi_s0;
if ((addr + len) <= sp40) {
phi_s0->unkC = (s32) D_8027DCC8;
return osVirtualToPhysical(phi_s0->unk10 + (addr - phi_s0->unk8));
}
}
phi_s0 = D_8027D5B0.unk8;
if (phi_s0 == NULL) {
return osVirtualToPhysical(phi_v0);
}
D_8027D5B0.unk8 = phi_s0->unk0.next;
alUnlink(phi_s0);
if (sp30 != NULL) {
alLink(phi_s0, sp30);
} else {
phi_v0 = D_8027D5B0.unk4;
if (phi_v0 != NULL) {
D_8027D5B0.unk4 = phi_s0;
phi_s0->unk0.next = (ALLink *)phi_v0;
phi_s0->unk0.prev = NULL;
phi_v0->unk0.prev = (ALLink *)phi_s0;
} else {
D_8027D5B0.unk4 = phi_s0;
phi_s0->unk0.next = NULL;
phi_s0->unk0.prev = NULL;
}
}
new_var = addr & 1;
addr = addr - new_var;
phi_s0->unk8 = addr;
phi_s0->unkC = (s32) D_8027DCC8;
sp44 = phi_s0->unk10;
osPiStartDma(&D_8027D100[D_8027DCCC++], 1, 0, phi_s0->unk8, phi_s0->unk10, 0x270U, &D_8027D008);
return osVirtualToPhysical(sp44) + new_var;
}
#endif
#endif
void *func_802403B8(void *state) {
if (D_8027D5B0.unk0 == 0) {
@@ -498,12 +572,17 @@ void func_802403F0(void) {
sp40 = NULL;
for(phi_s0 = 0; phi_s0 < D_8027DCCC; phi_s0++){
#if VERSION == VERSION_USA_1_0
if (osRecvMesg(&D_8027D008, &sp40, 0) == -1) {
func_80247F24(2, 0x7D5);
func_80247F9C(D_8027DCCC);
func_80247F9C(phi_s0);
func_802483D8();
}
#else
osRecvMesg(&D_8027D008, &sp40, 0);
#endif
}
phi_s0_2 = D_8027D5B0.unk4;
while(phi_s0_2 != NULL){
@@ -527,6 +606,11 @@ void func_802403F0(void) {
D_8027DCC8 += 1;
}
#if VERSION == VERSION_PAL
void *audioManager_getThread_PAL(void){
return &audioManager.thread;
}
void audioManager_stopThread(void){
if(D_80275774){
D_80275774 = 0;

View File

@@ -1,6 +1,8 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#include "version.h"
OSIoMesg D_8027E090;
struct {
@@ -13,7 +15,7 @@ OSMesgQueue D_8027E108; //g_PimgrMesgQueue
void func_802405F0(u32 * arg0, s32 arg1, s32 size){
s32 block_cnt;
s32 block_remainder;
s32 block_size = 0x20000;
s32 block_size = VER_SELECT(0x20000, 0x8000, 0, 0);
int i;
osWritebackDCache(arg0, size);
@@ -21,10 +23,10 @@ void func_802405F0(u32 * arg0, s32 arg1, s32 size){
block_remainder = size % block_size;
for(i = 0; i < block_cnt; i++){
osPiStartDma(&D_8027E090, OS_MESG_PRI_NORMAL, OS_READ, arg1, arg0, 0x20000, &D_8027E0A8.queue);
osPiStartDma(&D_8027E090, OS_MESG_PRI_NORMAL, OS_READ, arg1, arg0, VER_SELECT(0x20000, 0x8000, 0, 0), &D_8027E0A8.queue);
osRecvMesg(&D_8027E0A8.queue, NULL, 1);
arg1 += 0x20000;
arg0 += 0x8000;
arg1 += VER_SELECT(0x20000, 0x8000, 0, 0);
arg0 += VER_SELECT(0x8000, 0x2000, 0, 0);
}
osPiStartDma(&D_8027E090, OS_MESG_PRI_NORMAL, OS_READ, arg1, arg0, block_remainder, &D_8027E0A8.queue);

View File

@@ -1,10 +1,16 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#include "version.h"
static void _guMtxIdentF(float mf[4][4]);
u8 D_80275900[] = {0xCF, 0xAD, 0xA2, 0x90, 0x93, 0x4A, 0x83, 0xF1};
#if VERSION == VERSION_USA_1_0
u8 D_80275900[8] = {0xCF, 0xAD, 0xA2, 0x90, 0x93, 0x4A, 0x83, 0xF1};
#elif VERSION == VERSION_PAL
u8 D_80275900[8] = {0xD3, 0x9E, 0xA6, 0x20, 0xC7, 0x7E, 0xD5, 0xC6};
#endif
f32 D_80275908 = BAD_DTOR;
static s32 guFToFix32(f32 arg0){

View File

@@ -9,8 +9,8 @@
u64 gEntryStack[ENTRY_STACK_LEN_U64];
extern u8 core1_us_v10_rzip_ROM_START[];
extern u8 core1_us_v10_rzip_ROM_END[];
extern u8 core1_rzip_ROM_START[];
extern u8 core1_rzip_ROM_END[];
extern u8 D_8002D500;
extern u8 core1_VRAM;
extern u32 D_803FFE00[4];
@@ -25,7 +25,7 @@ void func_80000450(s32 arg0){
tmp = &D_8002D500;
dst = &core1_VRAM;
osInitialize();
osPiRawStartDma(OS_READ, core1_us_v10_rzip_ROM_START, tmp, core1_us_v10_rzip_ROM_END - core1_us_v10_rzip_ROM_START);
osPiRawStartDma(OS_READ, core1_rzip_ROM_START, tmp, core1_rzip_ROM_END - core1_rzip_ROM_START);
while(osPiGetStatus() & PI_STATUS_DMA_BUSY);
func_8000055C();
func_80000594(&tmp, &dst);

View File

@@ -3,42 +3,42 @@
#include "variables.h"
#define OVERLAY(ovl, _) \
extern u8 ovl##_us_v10_rzip_ROM_START[]; \
extern u8 ovl##_us_v10_rzip_ROM_END[];
extern u8 ovl##_rzip_ROM_START[]; \
extern u8 ovl##_rzip_ROM_END[];
#include <overlays.h>
#undef OVERLAY
// This doesn't match as macros, even if two macros are used per overlay.
// Look into autogenerating this table in the long run for a cleaner solution.
void overlay_table_init(void) {
gOverlayTable[ 0].start = core2_us_v10_rzip_ROM_START;
gOverlayTable[ 0].end = core2_us_v10_rzip_ROM_END;
gOverlayTable[ 1].start = emptyLvl_us_v10_rzip_ROM_START;
gOverlayTable[ 1].end = emptyLvl_us_v10_rzip_ROM_END;
gOverlayTable[ 2].start = CC_us_v10_rzip_ROM_START;
gOverlayTable[ 2].end = CC_us_v10_rzip_ROM_END;
gOverlayTable[ 3].start = MMM_us_v10_rzip_ROM_START;
gOverlayTable[ 3].end = MMM_us_v10_rzip_ROM_END;
gOverlayTable[ 4].start = GV_us_v10_rzip_ROM_START;
gOverlayTable[ 4].end = GV_us_v10_rzip_ROM_END;
gOverlayTable[ 5].start = TTC_us_v10_rzip_ROM_START;
gOverlayTable[ 5].end = TTC_us_v10_rzip_ROM_END;
gOverlayTable[ 6].start = MM_us_v10_rzip_ROM_START;
gOverlayTable[ 6].end = MM_us_v10_rzip_ROM_END;
gOverlayTable[ 7].start = BGS_us_v10_rzip_ROM_START;
gOverlayTable[ 7].end = BGS_us_v10_rzip_ROM_END;
gOverlayTable[ 8].start = RBB_us_v10_rzip_ROM_START;
gOverlayTable[ 8].end = RBB_us_v10_rzip_ROM_END;
gOverlayTable[ 9].start = FP_us_v10_rzip_ROM_START;
gOverlayTable[ 9].end = FP_us_v10_rzip_ROM_END;
gOverlayTable[10].start = CCW_us_v10_rzip_ROM_START;
gOverlayTable[10].end = CCW_us_v10_rzip_ROM_END;
gOverlayTable[11].start = SM_us_v10_rzip_ROM_START;
gOverlayTable[11].end = SM_us_v10_rzip_ROM_END;
gOverlayTable[12].start = cutscenes_us_v10_rzip_ROM_START;
gOverlayTable[12].end = cutscenes_us_v10_rzip_ROM_END;
gOverlayTable[13].start = lair_us_v10_rzip_ROM_START;
gOverlayTable[13].end = lair_us_v10_rzip_ROM_END;
gOverlayTable[14].start = fight_us_v10_rzip_ROM_START;
gOverlayTable[14].end = fight_us_v10_rzip_ROM_END;
gOverlayTable[ 0].start = core2_rzip_ROM_START;
gOverlayTable[ 0].end = core2_rzip_ROM_END;
gOverlayTable[ 1].start = emptyLvl_rzip_ROM_START;
gOverlayTable[ 1].end = emptyLvl_rzip_ROM_END;
gOverlayTable[ 2].start = CC_rzip_ROM_START;
gOverlayTable[ 2].end = CC_rzip_ROM_END;
gOverlayTable[ 3].start = MMM_rzip_ROM_START;
gOverlayTable[ 3].end = MMM_rzip_ROM_END;
gOverlayTable[ 4].start = GV_rzip_ROM_START;
gOverlayTable[ 4].end = GV_rzip_ROM_END;
gOverlayTable[ 5].start = TTC_rzip_ROM_START;
gOverlayTable[ 5].end = TTC_rzip_ROM_END;
gOverlayTable[ 6].start = MM_rzip_ROM_START;
gOverlayTable[ 6].end = MM_rzip_ROM_END;
gOverlayTable[ 7].start = BGS_rzip_ROM_START;
gOverlayTable[ 7].end = BGS_rzip_ROM_END;
gOverlayTable[ 8].start = RBB_rzip_ROM_START;
gOverlayTable[ 8].end = RBB_rzip_ROM_END;
gOverlayTable[ 9].start = FP_rzip_ROM_START;
gOverlayTable[ 9].end = FP_rzip_ROM_END;
gOverlayTable[10].start = CCW_rzip_ROM_START;
gOverlayTable[10].end = CCW_rzip_ROM_END;
gOverlayTable[11].start = SM_rzip_ROM_START;
gOverlayTable[11].end = SM_rzip_ROM_END;
gOverlayTable[12].start = cutscenes_rzip_ROM_START;
gOverlayTable[12].end = cutscenes_rzip_ROM_END;
gOverlayTable[13].start = lair_rzip_ROM_START;
gOverlayTable[13].end = lair_rzip_ROM_END;
gOverlayTable[14].start = fight_rzip_ROM_START;
gOverlayTable[14].end = fight_rzip_ROM_END;
}