Files
banjo-kazooie/include/core1/core1.h
T
2026-05-22 14:12:39 +00:00

237 lines
7.7 KiB
C

#ifndef BANJO_KAZOOIE_CORE1_CORE1_H
#define BANJO_KAZOOIE_CORE1_CORE1_H
#include <ultra64.h>
#include "bool.h"
#include "enums.h"
#include "structs.h"
#include "prop.h"
#include "core1/eeprom.h"
#include "core1/framebufferdraw.h"
#include "core1/lookup.h"
#include "core1/main.h"
#include "core1/mem.h"
#include "core1/ml.h"
#include "core1/mlmtx.h"
#include "core1/pfsmanager.h"
#include "core1/rarezip.h"
#include "core1/sns.h"
#include "core1/sprite.h"
#include "core1/thread5.h"
#include "core1/ucode.h"
#include "core1/viewport.h"
#include "core1/vimgr.h"
/* need to sort out in individual header files */
//void *defrag(void *);
void glcrc_calc_checksum(void *start, void *end, u32 checksum[2]);
void func_80250530(s32 arg0, u16 chan_mask, f32 arg2);
void func_8025A104(enum comusic_e arg0, s32 arg1);
void func_8025A55C(s32 arg0, s32 arg1, s32 arg2);
s32 func_8025A864(enum comusic_e track_id);
void func_8025ABB8(enum comusic_e comusic_id, s32 arg1, s32 arg2, s32 arg3);
int func_8025AD7C(enum comusic_e arg0);
int func_8025ADBC(enum comusic_e arg0);
void piMgr_read(void *vaddr, s32 devaddr, s32 size);
/* src/core1/code_1D00.c */
void audioManager_setupSeqp(ALSeqpConfig *config);
void audioManager_init(void);
ALHeap *audioManager_getALHeapInfo(void);
OSMesgQueue *audioManager_getDMANotifyMesgQueue(void);
OSIoMesg *audioManager_getExtraDMAMesg(void);
OSMesgQueue *audioManager_getFrameMesgQueue(void);
/* src/core1/overlay.c */
void overlay_load(
s32 id,
u8 *ram_start, u8 *ram_end,
u32 rom_start, u32 rom_end,
u8 *code_start, u8 *code_end,
u8 *data_start, u8 *data_end,
u8 *bss_start, u8 *bss_end
);
/* src/core1/overlaymanager.c */
#define MAKE_OVERLAY_SEGMENT_EXTERNS(segname) \
extern u8 segname##_VRAM[]; \
extern u8 segname##_VRAM_END[]; \
extern u8 segname##_ROM_START[]; \
extern u8 segname##_ROM_END[]; \
extern u8 segname##_TEXT_START[]; \
extern u8 segname##_TEXT_END[]; \
extern u8 segname##_DATA_START[]; \
extern u8 segname##_DATA_END[]; \
extern u8 segname##_RODATA_START[]; \
extern u8 segname##_RODATA_END[]; \
extern u8 segname##_BSS_START[]; \
extern u8 segname##_BSS_END[];
#define MAKE_SEGMENT_ENTRY(segname, realname) \
{#realname, segname##_VRAM, segname##_VRAM_END, (u32) segname##_ROM_START, (u32) segname##_ROM_END, segname##_TEXT_START, segname##_TEXT_END, segname##_DATA_START, segname##_RODATA_END, segname##_BSS_START, segname##_BSS_END}
#define MAKE_DUMMY_SEGMENT_ENTRY(segname, realname) \
{#realname, segname##_VRAM, segname##_VRAM_END, (u32) segname##_ROM_START, (u32) segname##_ROM_END, NULL, NULL, NULL, NULL, NULL, NULL}
struct overlay_address_map_s {
char *name;
u8 *ram_start, *ram_end;
u32 rom_start;
u32 rom_end;
u8 *code_start, *code_end;
u8 *data_start, *data_end;
u8 *bss_start, *bss_end;
};
MAKE_OVERLAY_SEGMENT_EXTERNS(core2)
MAKE_OVERLAY_SEGMENT_EXTERNS(emptyLvl)
MAKE_OVERLAY_SEGMENT_EXTERNS(CC)
MAKE_OVERLAY_SEGMENT_EXTERNS(MMM)
MAKE_OVERLAY_SEGMENT_EXTERNS(GV)
MAKE_OVERLAY_SEGMENT_EXTERNS(TTC)
MAKE_OVERLAY_SEGMENT_EXTERNS(MM)
MAKE_OVERLAY_SEGMENT_EXTERNS(BGS)
MAKE_OVERLAY_SEGMENT_EXTERNS(RBB)
MAKE_OVERLAY_SEGMENT_EXTERNS(FP)
MAKE_OVERLAY_SEGMENT_EXTERNS(CCW)
MAKE_OVERLAY_SEGMENT_EXTERNS(SM)
MAKE_OVERLAY_SEGMENT_EXTERNS(cutscenes)
MAKE_OVERLAY_SEGMENT_EXTERNS(lair)
MAKE_OVERLAY_SEGMENT_EXTERNS(fight)
enum overlay_e overlayManager_getLoadedID(void);
bool overlayManager_isOverlayLoaded(enum overlay_e id);
bool overlayManager_load(enum overlay_e id);
void overlayManager_clearLoadedId(void);
void overlayManager_loadCore2(void);
void overlayManager_debug(void);
/* src/core1/code_7090.c */
void core1_7090_alloc(void);
void core1_7090_release(void);
void core1_7090_initSfxSource(s32 idx, s32 lookup_idx, s32 sample_rate, f32 volume);
void core1_7090_freeSfxSource(int idx);
/* src/core1/code_CE60.c */
void core1_ce60_setChanMask(s32 chan_mask);
void core1_ce60_setChanMaskWithValue(s32 chan_mask, f32 arg1);
bool core1_ce60_isPlayerInRange(s32 x, s32 z, s32 distance);
f32 core1_ce60_getPlayerDistance(f32 x, f32 z);
bool core1_ce60_isPlayerInsideBoundingBox(s32 box_idx);
void core1_ce60_func_8024A9EC(s32 arg0);
void core1_ce60_func_8024AAB0(void);
void core1_ce60_func_8024ADF0(bool arg0);
void core1_ce60_func_8024AE74(void);
void core1_ce60_resetState(void);
void core1_ce60_setChanMaskFromWaterState(s32 chan_mask_underwater, s32 chan_mask_surface);
void core1_ce60_func_8024AF48(void);
void core1_ce60_incOrDecCounter(bool increment);
void core1_ce60_func_8024BD40(s32 arg0, s32 arg1);
/* src/core1/depthbuffer.c */
extern u8 D_8000E800;
void func_80253190(Gfx **gfx);
void func_80253208(Gfx **gfx, s32 x, s32 y, s32 w, s32 h, void *color_buffer);
bool func_80253400(void);
bool depthBuffer_isPointerSet(void);
void depthBuffer_stub(void);
void func_80253428(int arg0);
void func_802534A8(int arg0);
void zBuffer_set(Gfx **gfx);
void *zBuffer_get(void);
/* src/core1/code_15B30.c */
#define UCODE_TASK_TYPE_AUDIO 0
#define UCODE_TASK_TYPE_F3DEX 1
#define UCODE_TASK_TYPE_L3DEX 2
#define UCODE_TASK_TYPE_FRAMEBUFFER_CHANGED 7
struct ucode_task_data_s {
s32 task_type; // 0 - audio task, 1 - f3dex task, 2 - l3dex task, 7 - probably to signal framebuffers swapped
s32 unk4; // is only set for gfx tasks (0 or 0x40000000)
u64 *data_ptr; // begin of dlist data
u64 *data_ptr_end; // end of dlist data
OSMesgQueue *audio_mesg_queue; // only relevant for audio tasks
OSMesg audio_mesg; // only relevant for audio tasks
};
#define DEFAULT_FRAMEBUFFER_WIDTH 292
#define DEFAULT_FRAMEBUFFER_HEIGHT 216
extern s32 gFramebufferWidth;
extern s32 gFramebufferHeight;
extern u16 gFramebuffers[2][DEFAULT_FRAMEBUFFER_WIDTH * DEFAULT_FRAMEBUFFER_HEIGHT];
void core1_15B30_requestLockForTaskDataID(void);
void core1_15B30_requestReleaseForTaskDataID(void);
void core1_15B30_addAudioTaskData(Acmd *start, Acmd *end, OSMesgQueue *mesg_queue, OSMesg msg);
void func_80253640(Gfx ** gdl, void *arg1);
void scissorBox_SetForGameMode(Gfx **gdl, s32 framebuffer_idx);
void setupScissorBoxAndFramebuffer(Gfx **gfx, s32 framebuffer_address);
void setupDefaultScissorBoxAndFramebuffer(Gfx **gfx, s32 framebuffer_idx);
void core1_15B30_finishDList_renderThread(Gfx **gfx);
void core1_15B30_finishDList(Gfx **gfx);
void core1_15B30_addF3DEXTaskData(Gfx *start, Gfx *end, s32 flags);
void core1_15B30_addF3DEXTaskData_0(Gfx *start, Gfx *end);
void core1_15B30_addF3DEXTaskData_40000000(Gfx *start, Gfx *end);
void core1_15B30_addL3DEXTaskData(Gfx *start, Gfx *end, s32 flags);
void core1_15B30_addL3DEXTaskData_0(Gfx *start, Gfx *end);
void core1_15B30_addL3DEXTaskData_40000000(Gfx *start, Gfx *end);
void scissorBox_get(u32 *left, u32 *top, u32 *right, u32 *bottom);
void func_80253FE8(void);
void core1_15B30_sendMesg3ToRenderThread(void);
void core1_15B30_init(void);
void drawRectangle2D(Gfx **gfx, s32 x, s32 y, s32 w, s32 h, s32 r, s32 g, s32 b);
void graphicsCache_release(void);
void graphicsCache_init(void);
void scissorBox_set(s32 left, s32 top, s32 right, s32 bottom);
void scissorBox_setDefault(void);
void core1_15B30_addTask7TaskData(s32 framebuffer_id);
void toggleTextureFilterPoint(void);
void getGraphicsStacks(Gfx **gfx, Mtx **mtx, Vtx **vtx);
void dummy_func_80254464(void);
/* src/core1/defragmanager.c */
#define DEFRAGMANAGER_THREAD_STACK_SIZE 2048
#define DEFRAGMANAGER_THREAD_ID 2
#define DEFRAGMANAGER_THREAD_PRIORITY 10
#define DEFRAGMANAGER_THREAD_PRIORITY_HIGH 30
void defragManager_init(void);
void defragManager_free(void);
void defragManager_resume(void);
void defragManager_pause(void);
void defragManager_setPriority(OSPri pri);
/* src/core1/pimanager.c */
void piMgr_read(void *vaddr, s32 devaddr, s32 size);
void piMgr_init(void);
#endif