mirror of
https://gitlab.com/banjo.decomp/banjo-kazooie
synced 2026-09-01 17:20:06 -04:00
237 lines
7.7 KiB
C
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
|