mirror of
https://github.com/N64Recomp/N64ModernRuntime.git
synced 2025-10-30 08:02:29 +00:00
Finish wiring stuff up
This commit is contained in:
parent
ca53e8f85a
commit
35d6ec1752
2 changed files with 64 additions and 10 deletions
|
|
@ -6,8 +6,31 @@
|
||||||
|
|
||||||
template<int index, typename T>
|
template<int index, typename T>
|
||||||
T _arg(uint8_t* rdram, recomp_context* ctx) {
|
T _arg(uint8_t* rdram, recomp_context* ctx) {
|
||||||
static_assert(index < 4, "Only args 0 through 3 supported");
|
static_assert(index >= 0, "");
|
||||||
gpr raw_arg = (&ctx->r4)[index];
|
gpr raw_arg;
|
||||||
|
|
||||||
|
switch (index) {
|
||||||
|
case 0:
|
||||||
|
raw_arg = ctx->r4;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
raw_arg = ctx->r5;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
raw_arg = ctx->r6;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
raw_arg = ctx->r7;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
raw_arg = MEM_W(4 * index, ctx->r29);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if constexpr (std::is_same_v<T, float>) {
|
if constexpr (std::is_same_v<T, float>) {
|
||||||
if constexpr (index < 2) {
|
if constexpr (index < 2) {
|
||||||
static_assert(index != 1, "Floats in arg 1 not supported");
|
static_assert(index != 1, "Floats in arg 1 not supported");
|
||||||
|
|
|
||||||
|
|
@ -27,10 +27,9 @@ extern "C" void osPfsAllocateFile_recomp(uint8_t * rdram, recomp_context * ctx)
|
||||||
u16 company_code = _arg<1, u16>(rdram, ctx);
|
u16 company_code = _arg<1, u16>(rdram, ctx);
|
||||||
u32 game_code = _arg<2, u32>(rdram, ctx);
|
u32 game_code = _arg<2, u32>(rdram, ctx);
|
||||||
PTR(u8) game_name = _arg<3, PTR(u8)>(rdram, ctx);
|
PTR(u8) game_name = _arg<3, PTR(u8)>(rdram, ctx);
|
||||||
// TODO
|
PTR(u8) ext_name = _arg<4, PTR(u8)>(rdram, ctx);
|
||||||
PTR(u8) ext_name = 0; // _arg<4, PTR(u8)>(rdram, ctx);
|
int file_size_in_bytes = _arg<5, int>(rdram, ctx);
|
||||||
int file_size_in_bytes = 0; // _arg<5, int>(rdram, ctx);
|
PTR(s32) file_no = _arg<6, PTR(s32)>(rdram, ctx);
|
||||||
PTR(s32) file_no = 0; // _arg<6, s32>(rdram, ctx);
|
|
||||||
|
|
||||||
s32 ret = osPfsAllocateFile(rdram, pfs, company_code, game_code, game_name, ext_name, file_size_in_bytes, file_no);
|
s32 ret = osPfsAllocateFile(rdram, pfs, company_code, game_code, game_name, ext_name, file_size_in_bytes, file_no);
|
||||||
|
|
||||||
|
|
@ -38,19 +37,51 @@ extern "C" void osPfsAllocateFile_recomp(uint8_t * rdram, recomp_context * ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void osPfsDeleteFile_recomp(uint8_t * rdram, recomp_context * ctx) {
|
extern "C" void osPfsDeleteFile_recomp(uint8_t * rdram, recomp_context * ctx) {
|
||||||
ctx->r2 = 1; // PFS_ERR_NOPACK
|
PTR(OSPfs) pfs = _arg<0, PTR(OSPfs)>(rdram, ctx);
|
||||||
|
u16 company_code = _arg<1, u16>(rdram, ctx);
|
||||||
|
u32 game_code = _arg<2, u32>(rdram, ctx);
|
||||||
|
PTR(u8) game_name = _arg<3, PTR(u8)>(rdram, ctx);
|
||||||
|
PTR(u8) ext_name = _arg<4, PTR(u8)>(rdram, ctx);
|
||||||
|
|
||||||
|
s32 ret = osPfsDeleteFile(rdram, pfs, company_code, game_code, game_name, ext_name);
|
||||||
|
|
||||||
|
_return<s32>(ctx, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void osPfsFileState_recomp(uint8_t * rdram, recomp_context * ctx) {
|
extern "C" void osPfsFileState_recomp(uint8_t * rdram, recomp_context * ctx) {
|
||||||
ctx->r2 = 1; // PFS_ERR_NOPACK
|
PTR(OSPfs) pfs = _arg<0, PTR(OSPfs)>(rdram, ctx);
|
||||||
|
s32 file_no = _arg<1, s32>(rdram, ctx);
|
||||||
|
PTR(OSPfsState) state = _arg<2, PTR(OSPfsState)>(rdram, ctx);
|
||||||
|
|
||||||
|
s32 ret = osPfsFileState(rdram, pfs, file_no, state);
|
||||||
|
|
||||||
|
_return<s32>(ctx, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void osPfsFindFile_recomp(uint8_t * rdram, recomp_context * ctx) {
|
extern "C" void osPfsFindFile_recomp(uint8_t * rdram, recomp_context * ctx) {
|
||||||
ctx->r2 = 1; // PFS_ERR_NOPACK
|
PTR(OSPfs) pfs = _arg<0, PTR(OSPfs)>(rdram, ctx);
|
||||||
|
u16 company_code = _arg<1, u16>(rdram, ctx);
|
||||||
|
u32 game_code = _arg<2, u32>(rdram, ctx);
|
||||||
|
PTR(u8) game_name = _arg<3, PTR(u8)>(rdram, ctx);
|
||||||
|
PTR(u8) ext_name = _arg<4, PTR(u8)>(rdram, ctx);
|
||||||
|
PTR(s32) file_no = _arg<5, PTR(s32)>(rdram, ctx);
|
||||||
|
|
||||||
|
s32 ret = osPfsFindFile(rdram, pfs, company_code, game_code, game_name, ext_name, file_no);
|
||||||
|
|
||||||
|
_return<s32>(ctx, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void osPfsReadWriteFile_recomp(uint8_t * rdram, recomp_context * ctx) {
|
extern "C" void osPfsReadWriteFile_recomp(uint8_t * rdram, recomp_context * ctx) {
|
||||||
ctx->r2 = 1; // PFS_ERR_NOPACK
|
PTR(OSPfs) pfs = _arg<0, PTR(OSPfs)>(rdram, ctx);
|
||||||
|
s32 file_no = _arg<1, s32>(rdram, ctx);
|
||||||
|
u8 flag = _arg<2, u8>(rdram, ctx);
|
||||||
|
int offset = _arg<3, int>(rdram, ctx);
|
||||||
|
int size_in_bytes = _arg<4, int>(rdram, ctx);
|
||||||
|
PTR(u8) data_buffer = _arg<5, PTR(u8)>(rdram, ctx);
|
||||||
|
|
||||||
|
s32 ret = osPfsReadWriteFile(rdram, pfs, file_no, flag, offset, size_in_bytes, data_buffer);
|
||||||
|
|
||||||
|
_return<s32>(ctx, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void osPfsChecker_recomp(uint8_t * rdram, recomp_context * ctx) {
|
extern "C" void osPfsChecker_recomp(uint8_t * rdram, recomp_context * ctx) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue