From a57d449196dbf9fcf93004a3655bb5f2a4fc773d Mon Sep 17 00:00:00 2001 From: Tharo <17233964+Thar0@users.noreply.github.com> Date: Fri, 10 Jan 2025 00:31:11 +0000 Subject: [PATCH] [iQue] Match remaining libultra/io files (#2411) * [iQue] Match remaining libultra/io files * Match osSpTaskYielded * Fix bss, remove double space in controller.h * Fix BSS --- include/ultra64/controller.h | 1 + include/variables.h | 3 ++ spec | 1 + src/boot/z_std_dma.c | 2 +- src/code/main.c | 2 +- src/code/z_bgcheck.c | 2 +- src/code/z_camera.c | 2 +- src/code/z_kankyo.c | 4 +-- src/libultra/io/contquery.c | 4 +++ src/libultra/io/contramread.c | 25 ++++++++++++++++ src/libultra/io/contramwrite.c | 25 ++++++++++++++++ src/libultra/io/contreaddata.c | 17 ++++++++++- src/libultra/io/controller.c | 30 +++++++++++++++++-- src/libultra/io/pfsgetstatus.c | 7 +++++ src/libultra/io/pfsisplug.c | 20 +++++++++++++ src/libultra/io/sirawdma.c | 8 +++++ src/libultra/io/sptaskyielded.c | 13 +++----- .../actors/ovl_En_Po_Field/z_en_po_field.c | 3 +- 18 files changed, 149 insertions(+), 20 deletions(-) diff --git a/include/ultra64/controller.h b/include/ultra64/controller.h index 4ce047a201..1b6d0cf323 100644 --- a/include/ultra64/controller.h +++ b/include/ultra64/controller.h @@ -17,6 +17,7 @@ #define CONT_CMD_WRITE_MEMPACK 3 #define CONT_CMD_READ_EEPROM 4 #define CONT_CMD_WRITE_EEPROM 5 +#define CONT_CMD_CHANNEL_RESET 0xFD #define CONT_CMD_RESET 0xFF #define CONT_CMD_REQUEST_STATUS_TX 1 diff --git a/include/variables.h b/include/variables.h index d532f4fe95..6ad4f7ee4d 100644 --- a/include/variables.h +++ b/include/variables.h @@ -15,6 +15,9 @@ extern u32 osMemSize; extern u8 osAppNMIBuffer[0x40]; extern u32 __osBbIsBb; +extern u32 __osBbHackFlags; +extern u32 __osBbPakAddress[4]; +extern u32 __osBbPakSize; extern s8 D_80009430; extern vu8 gViConfigBlack; diff --git a/spec b/spec index 419310744a..4260c50016 100644 --- a/spec +++ b/spec @@ -808,6 +808,7 @@ beginseg include "$(BUILD_DIR)/src/libultra/gu/perspective.o" include "$(BUILD_DIR)/src/libultra/io/sprawdma.o" include "$(BUILD_DIR)/src/libultra/io/sirawdma.o" + include "$(BUILD_DIR)/src/libultra/bb/sk/skapi.o" // TODO temporary include "$(BUILD_DIR)/src/libultra/io/sptaskyield.o" #if DEBUG_FEATURES include "$(BUILD_DIR)/src/libultra/io/pfsreadwritefile.o" diff --git a/src/boot/z_std_dma.c b/src/boot/z_std_dma.c index 07bd6dadb9..b05b188c64 100644 --- a/src/boot/z_std_dma.c +++ b/src/boot/z_std_dma.c @@ -28,7 +28,7 @@ #endif #pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \ - "ntsc-1.2:82 pal-1.0:80 pal-1.1:80" + "ntsc-1.2:78 pal-1.0:76 pal-1.1:76" StackEntry sDmaMgrStackInfo; OSMesgQueue sDmaMgrMsgQueue; diff --git a/src/code/main.c b/src/code/main.c index bffc9565ad..ae4eb3d8f1 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -24,7 +24,7 @@ extern struct IrqMgr gIrqMgr; #endif #pragma increment_block_number "gc-eu:160 gc-eu-mq:160 gc-jp:160 gc-jp-ce:160 gc-jp-mq:160 gc-us:160 gc-us-mq:160" \ - "ntsc-1.0:141 ntsc-1.1:141 ntsc-1.2:141 pal-1.0:139 pal-1.1:139" + "ntsc-1.0:138 ntsc-1.1:138 ntsc-1.2:138 pal-1.0:136 pal-1.1:136" extern u8 _buffersSegmentEnd[]; diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c index 4310d1d9cb..8caacb9405 100644 --- a/src/code/z_bgcheck.c +++ b/src/code/z_bgcheck.c @@ -2,7 +2,7 @@ #include "terminal.h" #include "line_numbers.h" -#pragma increment_block_number "ntsc-1.0:128 ntsc-1.1:128 ntsc-1.2:128" +#pragma increment_block_number "ntsc-1.0:120 ntsc-1.1:120 ntsc-1.2:120" u16 DynaSSNodeList_GetNextNodeIdx(DynaSSNodeList* nodeList); void BgCheck_GetStaticLookupIndicesFromPos(CollisionContext* colCtx, Vec3f* pos, Vec3i* sector); diff --git a/src/code/z_camera.c b/src/code/z_camera.c index e4090d484e..d5aa8ad807 100644 --- a/src/code/z_camera.c +++ b/src/code/z_camera.c @@ -3639,7 +3639,7 @@ s32 Camera_KeepOn3(Camera* camera) { } #pragma increment_block_number "gc-eu:128 gc-eu-mq:128 gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128" \ - "ntsc-1.0:144 ntsc-1.1:144 ntsc-1.2:144 pal-1.0:142 pal-1.1:142" + "ntsc-1.0:141 ntsc-1.1:141 ntsc-1.2:141 pal-1.0:139 pal-1.1:139" s32 Camera_KeepOn4(Camera* camera) { static Vec3f D_8015BD50; diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c index 2980933cdd..ee48b66f96 100644 --- a/src/code/z_kankyo.c +++ b/src/code/z_kankyo.c @@ -1,5 +1,5 @@ -#pragma increment_block_number "gc-eu:232 gc-eu-mq:232 gc-jp:212 gc-jp-ce:212 gc-jp-mq:212 gc-us:212 gc-us-mq:212" \ - "ntsc-1.0:224 ntsc-1.1:224 ntsc-1.2:224 pal-1.0:240 pal-1.1:240" +#pragma increment_block_number "gc-eu:228 gc-eu-mq:228 gc-jp:212 gc-jp-ce:212 gc-jp-mq:212 gc-us:212 gc-us-mq:212" \ + "ntsc-1.0:224 ntsc-1.1:224 ntsc-1.2:224 pal-1.0:236 pal-1.1:236" #include "global.h" #include "ultra64.h" diff --git a/src/libultra/io/contquery.c b/src/libultra/io/contquery.c index 660e2dcd42..9a8370af31 100644 --- a/src/libultra/io/contquery.c +++ b/src/libultra/io/contquery.c @@ -15,7 +15,11 @@ s32 osContStartQuery(OSMesgQueue* mq) { osRecvMesg(mq, NULL, OS_MESG_BLOCK); } ret = __osSiRawStartDma(OS_READ, &__osContPifRam); +#ifdef BBPLAYER + __osContLastCmd = CONT_CMD_CHANNEL_RESET; +#else __osContLastCmd = CONT_CMD_REQUEST_STATUS; +#endif __osSiRelAccess(); return ret; } diff --git a/src/libultra/io/contramread.c b/src/libultra/io/contramread.c index 058f58e80f..01e0703da6 100644 --- a/src/libultra/io/contramread.c +++ b/src/libultra/io/contramread.c @@ -2,9 +2,12 @@ #define BLOCKSIZE 32 +#ifndef BBPLAYER s32 __osPfsLastChannel = -1; +#endif s32 __osContRamRead(OSMesgQueue* ctrlrqueue, s32 channel, u16 addr, u8* data) { +#ifndef BBPLAYER s32 ret; s32 i; u8* ptr; @@ -60,4 +63,26 @@ s32 __osContRamRead(OSMesgQueue* ctrlrqueue, s32 channel, u16 addr, u8* data) { __osSiRelAccess(); return ret; +#else + s32 ret; + + __osSiGetAccess(); + + ret = 0; + if (__osBbPakAddress[channel] != 0) { + if (__osBbPakSize - 0x20 >= addr * 0x20) { + s32 i; + + for (i = 0; i < 0x20; i++) { + data[i] = *(u8*)(__osBbPakAddress[channel] + addr * 0x20 + i); + } + } + } else { + ret = PFS_ERR_NOPACK; + } + + __osSiRelAccess(); + + return ret; +#endif } diff --git a/src/libultra/io/contramwrite.c b/src/libultra/io/contramwrite.c index 6a776a13b8..4bd8ffaa30 100644 --- a/src/libultra/io/contramwrite.c +++ b/src/libultra/io/contramwrite.c @@ -2,6 +2,7 @@ #include "global.h" s32 __osContRamWrite(OSMesgQueue* mq, s32 channel, u16 address, u8* buffer, s32 force) { +#ifndef BBPLAYER s32 ret = 0; s32 i; u8* ptr; @@ -65,4 +66,28 @@ s32 __osContRamWrite(OSMesgQueue* mq, s32 channel, u16 address, u8* buffer, s32 __osSiRelAccess(); return ret; +#else + s32 ret = 0; + + if ((force != true) && (address < PFS_LABEL_AREA) && (address != 0)) { + return 0; + } + + __osSiGetAccess(); + + if (__osBbPakAddress[channel] != 0) { + if (__osBbPakSize - 0x20 >= address * 0x20) { + s32 i; + + for (i = 0; i < 0x20; i++) { + *(u8*)(__osBbPakAddress[channel] + address * 0x20 + i) = buffer[i]; + } + } + } else { + ret = 1; + } + + __osSiRelAccess(); + return ret; +#endif } diff --git a/src/libultra/io/contreaddata.c b/src/libultra/io/contreaddata.c index ff44bc15b8..f1f250e965 100644 --- a/src/libultra/io/contreaddata.c +++ b/src/libultra/io/contreaddata.c @@ -10,7 +10,11 @@ s32 osContStartReadData(OSMesgQueue* mq) { osRecvMesg(mq, NULL, OS_MESG_BLOCK); } ret = __osSiRawStartDma(OS_READ, &__osContPifRam); +#ifdef BBPLAYER + __osContLastCmd = CONT_CMD_CHANNEL_RESET; +#else __osContLastCmd = CONT_CMD_READ_BUTTON; +#endif __osSiRelAccess(); return ret; } @@ -29,7 +33,18 @@ void osContGetReadData(OSContPad* contData) { contData->stick_x = read.joyX; contData->stick_y = read.joyY; } - }; + } + +#ifdef BBPLAYER + if (__osBbIsBb && __osBbHackFlags != 0) { + OSContPad tmp; + contData -= __osMaxControllers; + + tmp = contData[0]; + contData[0] = contData[__osBbHackFlags]; + contData[__osBbHackFlags] = tmp; + } +#endif } void __osPackReadData(void) { diff --git a/src/libultra/io/controller.c b/src/libultra/io/controller.c index 290f1b5854..c6c8d83ca3 100644 --- a/src/libultra/io/controller.c +++ b/src/libultra/io/controller.c @@ -41,7 +41,11 @@ s32 osContInit(OSMesgQueue* mq, u8* ctlBitfield, OSContStatus* status) { osRecvMesg(mq, &msg, OS_MESG_BLOCK); __osContGetInitData(ctlBitfield, status); +#ifdef BBPLAYER + __osContLastCmd = CONT_CMD_CHANNEL_RESET; +#else __osContLastCmd = CONT_CMD_REQUEST_STATUS; +#endif __osSiCreateAccessQueue(); osCreateMesgQueue(&__osEepromTimerMsgQueue, &__osEepromTimerMsg, 1); @@ -52,7 +56,7 @@ void __osContGetInitData(u8* ctlBitfield, OSContStatus* data) { u8* ptr; __OSContRequesFormat req; s32 i; - u8 bitfieldTemp = 0; + u8 bits = 0; ptr = (u8*)&__osContPifRam; @@ -63,10 +67,30 @@ void __osContGetInitData(u8* ctlBitfield, OSContStatus* data) { continue; } data->type = req.typel << 8 | req.typeh; +#ifdef BBPLAYER + data->status = __osBbPakAddress[i] != 0; +#else data->status = req.status; - bitfieldTemp |= 1 << i; +#endif + bits |= 1 << i; } - *ctlBitfield = bitfieldTemp; + +#ifdef BBPLAYER + if (__osBbIsBb && __osBbHackFlags != 0) { + OSContStatus tmp; + + bits = (bits & ~((1 << __osBbHackFlags) | 1)) | ((bits & 1) << __osBbHackFlags) | + ((bits & (1 << __osBbHackFlags)) >> __osBbHackFlags); + + data -= __osMaxControllers; + + tmp = data[0]; + data[0] = data[__osBbHackFlags]; + data[__osBbHackFlags] = tmp; + } +#endif + + *ctlBitfield = bits; } void __osPackRequestData(u8 poll) { diff --git a/src/libultra/io/pfsgetstatus.c b/src/libultra/io/pfsgetstatus.c index 0ec3bd7b4d..aa9851e6e7 100644 --- a/src/libultra/io/pfsgetstatus.c +++ b/src/libultra/io/pfsgetstatus.c @@ -2,6 +2,7 @@ #include "global.h" s32 __osPfsGetStatus(OSMesgQueue* queue, s32 channel) { +#ifndef BBPLAYER s32 ret = 0; OSMesg msg; OSContStatus data; @@ -24,6 +25,12 @@ s32 __osPfsGetStatus(OSMesgQueue* queue, s32 channel) { return PFS_ERR_CONTRFAIL; } return ret; +#else + if (__osBbPakAddress[channel] != 0) { + return 0; + } + return PFS_ERR_NOPACK; +#endif } void __osPfsRequestOneChannel(s32 channel, u8 cmd) { diff --git a/src/libultra/io/pfsisplug.c b/src/libultra/io/pfsisplug.c index d5630fccc5..9a144d0cb5 100644 --- a/src/libultra/io/pfsisplug.c +++ b/src/libultra/io/pfsisplug.c @@ -88,8 +88,28 @@ void __osPfsGetInitData(u8* pattern, OSContStatus* contData) { } contData->type = ((req.typel << 8) | req.typeh); +#ifdef BBPLAYER + contData->status = __osBbPakAddress[i] != 0; +#else contData->status = req.status; +#endif bits |= (1 << i); } + +#ifdef BBPLAYER + if (__osBbIsBb && __osBbHackFlags != 0) { + OSContStatus tmp; + + bits = (bits & ~((1 << __osBbHackFlags) | 1)) | ((bits & 1) << __osBbHackFlags) | + ((bits & (1 << __osBbHackFlags)) >> __osBbHackFlags); + + contData -= __osMaxControllers; + + tmp = contData[0]; + contData[0] = contData[__osBbHackFlags]; + contData[__osBbHackFlags] = tmp; + } +#endif + *pattern = bits; } diff --git a/src/libultra/io/sirawdma.c b/src/libultra/io/sirawdma.c index 9bf499cc6a..0aa2f86942 100644 --- a/src/libultra/io/sirawdma.c +++ b/src/libultra/io/sirawdma.c @@ -1,4 +1,5 @@ #include "global.h" +#include "ultra64/bbskapi.h" #define PIF_RAM_SIZE (PIF_RAM_END + 1 - PIF_RAM_START) @@ -11,6 +12,13 @@ s32 __osSiRawStartDma(s32 dir, void* addr) { } IO_WRITE(SI_DRAM_ADDR_REG, osVirtualToPhysical(addr)); if (dir == OS_READ) { +#ifdef BBPLAYER + if (__osBbIsBb) { + register u32 mask = __osDisableInt(); + skKeepAlive(); + __osRestoreInt(mask); + } +#endif IO_WRITE(SI_PIF_ADDR_RD64B_REG, PIF_RAM_START); } else { IO_WRITE(SI_PIF_ADDR_WR64B_REG, PIF_RAM_START); diff --git a/src/libultra/io/sptaskyielded.c b/src/libultra/io/sptaskyielded.c index d04f673c54..8be0556c33 100644 --- a/src/libultra/io/sptaskyielded.c +++ b/src/libultra/io/sptaskyielded.c @@ -2,18 +2,13 @@ u32 osSpTaskYielded(OSTask* task) { u32 status = __osSpGetStatus(); - u32 ret; + u32 result; - if (status & SP_STATUS_YIELDED) { - ret = OS_TASK_YIELDED; - } else { - ret = 0; - } + result = (status & SP_STATUS_YIELDED) ? OS_TASK_YIELDED : 0; if (status & SP_STATUS_YIELD) { - task->t.flags |= ret; + task->t.flags |= result; task->t.flags &= ~OS_TASK_DP_WAIT; } - - return ret; + return result; } diff --git a/src/overlays/actors/ovl_En_Po_Field/z_en_po_field.c b/src/overlays/actors/ovl_En_Po_Field/z_en_po_field.c index b4de777c72..00eff4a39f 100644 --- a/src/overlays/actors/ovl_En_Po_Field/z_en_po_field.c +++ b/src/overlays/actors/ovl_En_Po_Field/z_en_po_field.c @@ -143,7 +143,8 @@ static EnPoFieldInfo sPoFieldInfo[2] = { static Vec3f D_80AD714C = { 0.0f, 1400.0f, 0.0f }; -#pragma increment_block_number "gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128 ntsc-1.2:128" +#pragma increment_block_number "gc-jp:128 gc-jp-ce:128 gc-jp-mq:128 gc-us:128 gc-us-mq:128 ntsc-1.2:128 pal-1.0:128" \ + "pal-1.1:128" static Vec3s sSpawnPositions[10]; static u8 sSpawnSwitchFlags[10];