mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 11:26:18 -04:00
25b0e1be7d
* decomp: `collectables` * fix types * `powerups` and fixes * fixes * Merge branch 'pr/929' into d/temp/collectables * fix collide stuff * update things... * update * update * temp bump global heap mem * fix `defstate` hooks wrong/unnecessary sets & collide stuff for collectables * dumb mistakes :) * stub out broken process-drawable stuff * update refs * add `:no-inspect` key and save some memory & remove birth logs * Update kmachine.h * clang * add citadel * fix no-inspect key * fix tests!! * fix stupid mistake in `collide-shape-prim-sphere` alloc * comment annoying print * feedback * fix edge-case probably * remove `:no-inspect`s
132 lines
2.7 KiB
C++
132 lines
2.7 KiB
C++
#pragma once
|
|
|
|
/*!
|
|
* @file kmachine.h
|
|
* GOAL Machine. Contains low-level hardware interfaces for GOAL.
|
|
*/
|
|
|
|
#include "common/common_types.h"
|
|
#include "Ptr.h"
|
|
|
|
//! How much space to leave for the stack when creating the debug heap
|
|
// In the game, it's 16 kB, but we increase it to 64 kB.
|
|
// ASAN builds + fmt / spdlog stuff uses a _ton_ of stack when no optimizations are on and we
|
|
// need more.
|
|
constexpr u32 DEBUG_HEAP_SPACE_FOR_STACK = 0x10000;
|
|
|
|
//! First free address for the GOAL heap
|
|
constexpr u32 HEAP_START = 0x13fd20;
|
|
|
|
//! Where to end the global heap so it doesn't overlap with the stack.
|
|
constexpr u32 GLOBAL_HEAP_END = 0x1ffc000 + (0x1ffc000 - HEAP_START); // doubled
|
|
|
|
//! Location of kglobalheap, kdebugheap kheapinfo structures.
|
|
constexpr u32 GLOBAL_HEAP_INFO_ADDR = 0x13AD00;
|
|
constexpr u32 DEBUG_HEAP_INFO_ADDR = 0x13AD10;
|
|
constexpr u32 LINK_CONTROL_NAME_ADDR = 0x13AD80;
|
|
|
|
//! Where to place the debug heap
|
|
constexpr u32 DEBUG_HEAP_START = 0x5000000;
|
|
|
|
/*!
|
|
* Where does OVERLORD load its data from?
|
|
*/
|
|
enum OverlordDataSource : u32 {
|
|
fakeiso = 0, //! some sort of development way of getting data
|
|
deviso = 1, //! some sort of development way of getting data
|
|
iso_cd = 2, //! use the actual DVD drive
|
|
};
|
|
|
|
extern OverlordDataSource isodrv;
|
|
|
|
// Get IOP modules from DVD or from dsefilesv
|
|
extern u32 modsrc;
|
|
|
|
// Reboot IOP on start?
|
|
extern u32 reboot;
|
|
|
|
/*!
|
|
* Initialize globals for kmachine.
|
|
* This should be called before running main.
|
|
*/
|
|
void kmachine_init_globals();
|
|
|
|
/*!
|
|
* Initialize global variables based on command line parameters
|
|
*/
|
|
void InitParms(int argc, const char* const* argv);
|
|
|
|
/*!
|
|
* Initialize the CD Drive
|
|
*/
|
|
void InitCD();
|
|
|
|
/*!
|
|
* Initialize the I/O Processor
|
|
*/
|
|
void InitIOP();
|
|
|
|
/*!
|
|
* Initialize the GS and display the splash screen.
|
|
*/
|
|
void InitVideo();
|
|
|
|
/*!
|
|
* Initialze GOAL Runtime
|
|
*/
|
|
int InitMachine();
|
|
|
|
/*!
|
|
* Shutdown GOAL runtime.
|
|
*/
|
|
int ShutdownMachine();
|
|
|
|
/*!
|
|
* Flush caches. Does all the memory, regardless of what you specify
|
|
*/
|
|
void CacheFlush(void* mem, int size);
|
|
|
|
void InitMachineScheme();
|
|
|
|
//! Mirror of cpad-info
|
|
struct CPadInfo {
|
|
u8 valid;
|
|
u8 status;
|
|
u16 button0;
|
|
u8 rightx;
|
|
u8 righty;
|
|
u8 leftx;
|
|
u8 lefty;
|
|
u8 abutton[12];
|
|
u8 dummy[12];
|
|
s32 number;
|
|
s32 cpad_file;
|
|
u32 button0_abs[3];
|
|
u32 button0_shadow_abs[1];
|
|
u32 button0_rel[3];
|
|
float stick0_dir;
|
|
float stick0_speed;
|
|
s32 new_pad;
|
|
s32 state;
|
|
u8 align[6];
|
|
u8 direct[6];
|
|
u8 buzz_val[2];
|
|
u8 __pad[2];
|
|
u64 buzz_time[2];
|
|
u32 buzz;
|
|
s32 buzz_act;
|
|
s32 change_time; // actually u64 in goal!
|
|
};
|
|
|
|
struct FileStream {
|
|
u32 flags;
|
|
u32 mode; // basic
|
|
u32 name; // basic
|
|
s32 file; // int32
|
|
};
|
|
|
|
// static_assert(offsetof(CpadInfo, new_pad) == 76, "cpad type offset");
|
|
|
|
void vif_interrupt_callback();
|
|
u32 offset_of_s7();
|