From f8bb3c248b1334843f831fac881fda6796d89495 Mon Sep 17 00:00:00 2001 From: angie Date: Sun, 3 Sep 2023 18:03:11 -0300 Subject: [PATCH] various io files --- include/PR/os_pi.h | 6 +++++ include/PR/rcp.h | 6 +++++ spec | 1 + src/libultra/flash/osFlash.c | 4 +-- src/libultra/io/aigetlen.c | 2 +- src/libultra/io/aisetfreq.c | 8 +++--- src/libultra/io/cartrominit.c | 10 ++++--- src/libultra/io/contchannelreset.c | 9 ++++--- src/libultra/io/contpfs.c | 38 +++------------------------ src/libultra/io/contquery.c | 9 ++++--- src/libultra/io/contramread.c | 3 ++- src/libultra/io/contramwrite.c | 2 +- src/libultra/io/contreaddata.c | 4 ++- src/libultra/io/controller.c | 15 ++++++----- src/libultra/io/contsetch.c | 9 ++++--- src/libultra/io/crc.c | 2 +- src/libultra/io/devmgr.c | 3 ++- src/libultra/io/dpgetstat.c | 2 +- src/libultra/io/dpsetstat.c | 2 +- src/libultra/io/epidma.c | 10 +++---- src/libultra/io/epilinkhandle.c | 2 +- src/libultra/io/siint.h | 4 --- src/libultra/vimodes/vimodentschpn1.c | 37 ++++++++++++++++++++++++++ tools/disasm/files.txt | 1 + 24 files changed, 109 insertions(+), 80 deletions(-) delete mode 100644 src/libultra/io/siint.h create mode 100644 src/libultra/vimodes/vimodentschpn1.c diff --git a/include/PR/os_pi.h b/include/PR/os_pi.h index 1fd3d8e297..1be7939ed4 100644 --- a/include/PR/os_pi.h +++ b/include/PR/os_pi.h @@ -93,6 +93,12 @@ typedef struct OSDevMgr { #define OS_MESG_PRI_NORMAL 0 #define OS_MESG_PRI_HIGH 1 +/* + * PI/EPI + */ +#define PI_DOMAIN1 0 +#define PI_DOMAIN2 1 + extern OSPiHandle* __osPiTable; diff --git a/include/PR/rcp.h b/include/PR/rcp.h index b991a64a3d..18a2379418 100644 --- a/include/PR/rcp.h +++ b/include/PR/rcp.h @@ -115,6 +115,12 @@ #define CHNL_ERR_MASK 0xC0 /* Bit 6-7: channel errors */ +#define PI_DOM1_ADDR1 0x06000000 /* to 0x07FFFFFF */ +#define PI_DOM1_ADDR2 0x10000000 /* to 0x1FBFFFFF */ +#define PI_DOM1_ADDR3 0x1FD00000 /* to 0x7FFFFFFF */ +#define PI_DOM2_ADDR1 0x05000000 /* to 0x05FFFFFF */ +#define PI_DOM2_ADDR2 0x08000000 /* to 0x0FFFFFFF */ + #define IO_READ(addr) (*(vu32*)PHYS_TO_K1(addr)) #define IO_WRITE(addr,data) (*(vu32*)PHYS_TO_K1(addr)=(u32)(data)) diff --git a/spec b/spec index 713140befc..819735946b 100644 --- a/spec +++ b/spec @@ -112,6 +112,7 @@ beginseg pad_text include "build/src/libultra/io/devmgr.o" include "build/src/libultra/io/pirawdma.o" + include "build/src/libultra/vimodes/vimodentschpn1.o" include "build/src/libultra/io/contpfs.o" include "build/asm/boot/getcount.text.o" pad_text diff --git a/src/libultra/flash/osFlash.c b/src/libultra/flash/osFlash.c index 1555aea6ba..6c37850824 100644 --- a/src/libultra/flash/osFlash.c +++ b/src/libultra/flash/osFlash.c @@ -1,6 +1,6 @@ -#include "prevent_bss_reordering.h" #include "ultra64.h" #include "global.h" +#include "alignment.h" u32 __osFlashID[4] ALIGNED(8); OSIoMesg __osFlashMsg ALIGNED(8); @@ -8,7 +8,7 @@ OSMesgQueue __osFlashMessageQ ALIGNED(8); OSPiHandle __osFlashHandler ALIGNED(8); OSMesg __osFlashMsgBuf[1]; s32 __osFlashVersion; -UNK_TYPE1 D_801FD0FC[0x14]; +s32 D_801FD0FC[0x5]; typedef enum { /* 0 */ FLASH_OLD, diff --git a/src/libultra/io/aigetlen.c b/src/libultra/io/aigetlen.c index f020957b14..0e7171928b 100644 --- a/src/libultra/io/aigetlen.c +++ b/src/libultra/io/aigetlen.c @@ -1,4 +1,4 @@ -#include "global.h" +#include "ultra64.h" u32 osAiGetLength(void) { return IO_READ(AI_LEN_REG); diff --git a/src/libultra/io/aisetfreq.c b/src/libultra/io/aisetfreq.c index 63c75eea6d..8771b4c95b 100644 --- a/src/libultra/io/aisetfreq.c +++ b/src/libultra/io/aisetfreq.c @@ -1,17 +1,17 @@ -#include "global.h" +#include "ultra64.h" s32 osAiSetFrequency(u32 frequency) { u8 bitrate; f32 dacRateF = ((f32)osViClock / frequency) + 0.5f; u32 dacRate = dacRateF; - if (dacRate < 132) { + if (dacRate < AI_MIN_DAC_RATE) { return -1; } bitrate = (dacRate / 66); - if (bitrate > 16) { - bitrate = 16; + if (bitrate > AI_MAX_BIT_RATE) { + bitrate = AI_MAX_BIT_RATE; } IO_WRITE(AI_DACRATE_REG, dacRate - 1); diff --git a/src/libultra/io/cartrominit.c b/src/libultra/io/cartrominit.c index 8ad6209455..ea90d87280 100644 --- a/src/libultra/io/cartrominit.c +++ b/src/libultra/io/cartrominit.c @@ -1,6 +1,8 @@ -#include "global.h" +#include "ultra64.h" +#include "libc/stdbool.h" +#include "alignment.h" -OSPiHandle __CartRomHandle; +OSPiHandle __CartRomHandle ALIGNED(8); OSPiHandle* osCartRomInit(void) { register u32 initialConfig; @@ -22,8 +24,8 @@ OSPiHandle* osCartRomInit(void) { sCartRomNeedsInit = false; __CartRomHandle.type = DEVICE_TYPE_CART; - __CartRomHandle.baseAddress = 0xB0000000; - __CartRomHandle.domain = 0; + __CartRomHandle.baseAddress = PHYS_TO_K1(PI_DOM1_ADDR2); + __CartRomHandle.domain = PI_DOMAIN1; __CartRomHandle.speed = 0; bzero(&__CartRomHandle.transferInfo, sizeof(__OSTranxInfo)); diff --git a/src/libultra/io/contchannelreset.c b/src/libultra/io/contchannelreset.c index d0f1fbd9bc..d0dc33eef4 100644 --- a/src/libultra/io/contchannelreset.c +++ b/src/libultra/io/contchannelreset.c @@ -1,4 +1,5 @@ -#include "global.h" +#include "ultra64.h" +#include "PR/controller.h" s32 __osContChannelReset(OSMesgQueue* mq, s32 channel) { s32 i; @@ -7,13 +8,13 @@ s32 __osContChannelReset(OSMesgQueue* mq, s32 channel) { __osSiGetAccess(); - __osPfsPifRam.status = 1; + __osPfsPifRam.status = CONT_CMD_EXE; for (i = 0; i < channel; i++) { - *bufptr++ = 0; + *bufptr++ = CONT_CMD_REQUEST_STATUS; } - *bufptr++ = 0xFD; + *bufptr++ = CONT_CMD_CHANNEL_RESET; *bufptr = CONT_CMD_END; __osSiRawStartDma(OS_WRITE, &__osPfsPifRam); diff --git a/src/libultra/io/contpfs.c b/src/libultra/io/contpfs.c index e6817c3d07..b86f35c0d4 100644 --- a/src/libultra/io/contpfs.c +++ b/src/libultra/io/contpfs.c @@ -1,39 +1,9 @@ #include "ultra64.h" -#include "global.h" +#include "PR/controller.h" +#include "alignment.h" + +__OSInode __osPfsInodeCache ALIGNED(8); -__OSInode __osPfsInodeCache; -OSViMode osViModeNtscHpn1 = { - 8, // type - { - // comRegs - 0x324E, // ctrl - 0x500, // width - 0x3E52239, // burst - 0x20C, // vSync - 0xC15, // hSync - 0xC150C15, // leap - 0x6C02EC, // hStart - 0x400, // xScale - 0, // vCurrent - }, - { // fldRegs - { - // [0] - 0x500, // origin - 0x400, // yScale - 0x2301FD, // vStart - 0xE0204, // vBurst - 2, // vIntr - }, - { - // [1] - 0xA00, // origin - 0x400, // yScale - 0x2501FF, // vStart - 0xE0204, // vBurst - 2, // vIntr - } }, -}; s32 __osPfsInodeCacheChannel = -1; u8 __osPfsInodeCacheBank = 250; diff --git a/src/libultra/io/contquery.c b/src/libultra/io/contquery.c index a9a944f54b..cacf956160 100644 --- a/src/libultra/io/contquery.c +++ b/src/libultra/io/contquery.c @@ -1,19 +1,20 @@ -#include "global.h" +#include "ultra64.h" +#include "PR/controller.h" s32 osContStartQuery(OSMesgQueue* mq) { s32 ret; __osSiGetAccess(); - if (__osContLastPoll != 0) { - __osPackRequestData(0); + if (__osContLastPoll != CONT_CMD_REQUEST_STATUS) { + __osPackRequestData(CONT_CMD_REQUEST_STATUS); __osSiRawStartDma(OS_WRITE, &__osContPifRam); osRecvMesg(mq, NULL, OS_MESG_BLOCK); } ret = __osSiRawStartDma(OS_READ, &__osContPifRam); - __osContLastPoll = 0; + __osContLastPoll = CONT_CMD_REQUEST_STATUS; __osSiRelAccess(); diff --git a/src/libultra/io/contramread.c b/src/libultra/io/contramread.c index a916236c0c..56b928d378 100644 --- a/src/libultra/io/contramread.c +++ b/src/libultra/io/contramread.c @@ -1,4 +1,5 @@ -#include "global.h" +#include "ultra64.h" +#include "PR/controller.h" #include "PR/voiceinternal.h" #define BLOCKSIZE 32 diff --git a/src/libultra/io/contramwrite.c b/src/libultra/io/contramwrite.c index 240b244f56..0c84434098 100644 --- a/src/libultra/io/contramwrite.c +++ b/src/libultra/io/contramwrite.c @@ -1,6 +1,6 @@ #include "ultra64.h" +#include "PR/controller.h" #include "PR/voiceinternal.h" -#include "global.h" s32 __osContRamWrite(OSMesgQueue* mq, s32 channel, u16 address, u8* buffer, s32 force) { s32 ret = 0; diff --git a/src/libultra/io/contreaddata.c b/src/libultra/io/contreaddata.c index 21a8b90ce3..eded3a3384 100644 --- a/src/libultra/io/contreaddata.c +++ b/src/libultra/io/contreaddata.c @@ -1,4 +1,6 @@ -#include "global.h" +#include "ultra64.h" +#include "PR/controller.h" +#include "macros.h" void __osPackReadData(void); diff --git a/src/libultra/io/controller.c b/src/libultra/io/controller.c index ef15824aee..6f5034bacf 100644 --- a/src/libultra/io/controller.c +++ b/src/libultra/io/controller.c @@ -1,13 +1,16 @@ -#include "global.h" +#include "ultra64.h" +#include "PR/controller.h" +#include "alignment.h" +#include "macros.h" s32 __osContinitialized = 0; -OSPifRam __osContPifRam; +OSPifRam __osContPifRam ALIGNED(16); u8 __osContLastPoll; u8 __osMaxControllers; OSTimer __osEepromTimer; -OSMesgQueue __osEepromTimerQ; +OSMesgQueue __osEepromTimerQ ALIGNED(8); OSMesg __osEepromTimerMsg[1]; s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data) { @@ -24,15 +27,15 @@ s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data) { __osContinitialized = 1; t = osGetTime(); - if (t < 0x165A0BC) { + if (t < OS_USEC_TO_CYCLES(500000)) { osCreateMesgQueue(&timerMesgQueue, &dummy, 1); - osSetTimer(&mytimer, 0x165A0BC - t, 0, &timerMesgQueue, &dummy); + osSetTimer(&mytimer, OS_USEC_TO_CYCLES(500000) - t, 0, &timerMesgQueue, &dummy); osRecvMesg(&timerMesgQueue, &dummy, OS_MESG_BLOCK); } __osMaxControllers = 4; - __osPackRequestData(0); + __osPackRequestData(CONT_CMD_REQUEST_STATUS); ret = __osSiRawStartDma(OS_WRITE, &__osContPifRam); osRecvMesg(mq, &dummy, OS_MESG_BLOCK); diff --git a/src/libultra/io/contsetch.c b/src/libultra/io/contsetch.c index e2740489c5..8868d762b2 100644 --- a/src/libultra/io/contsetch.c +++ b/src/libultra/io/contsetch.c @@ -1,14 +1,15 @@ -#include "global.h" +#include "ultra64.h" +#include "PR/controller.h" s32 osContSetCh(u8 ch) { __osSiGetAccess(); - if (4 < ch) { - __osMaxControllers = 4; + if (ch > MAXCONTROLLERS) { + __osMaxControllers = MAXCONTROLLERS; } else { __osMaxControllers = ch; } - __osContLastPoll = -2; + __osContLastPoll = CONT_CMD_END; __osSiRelAccess(); return 0; diff --git a/src/libultra/io/crc.c b/src/libultra/io/crc.c index acae7b4081..235b1c077e 100644 --- a/src/libultra/io/crc.c +++ b/src/libultra/io/crc.c @@ -69,7 +69,7 @@ * implementing CRC (Cyclic Redundancy Check) calculation * ](http://www.sunshine2k.de/articles/coding/crc/understanding_crc.html) */ -#include "global.h" +#include "ultra64.h" #define ADDRESS_CRC_MESSAGE_LENGTH 10 #define ADDRESS_CRC_LENGTH 5 diff --git a/src/libultra/io/devmgr.c b/src/libultra/io/devmgr.c index 8cc4211b73..9e7220de35 100644 --- a/src/libultra/io/devmgr.c +++ b/src/libultra/io/devmgr.c @@ -1,4 +1,5 @@ -#include "global.h" +#include "ultra64.h" +#include "libc/stdbool.h" void __osDevMgrMain(void* arg) { OSIoMesg* ioMesg; diff --git a/src/libultra/io/dpgetstat.c b/src/libultra/io/dpgetstat.c index 1a944b2c7a..1dbf5e09b8 100644 --- a/src/libultra/io/dpgetstat.c +++ b/src/libultra/io/dpgetstat.c @@ -1,4 +1,4 @@ -#include "global.h" +#include "ultra64.h" u32 osDpGetStatus(void) { return IO_READ(DPC_STATUS_REG); diff --git a/src/libultra/io/dpsetstat.c b/src/libultra/io/dpsetstat.c index fc573cc98a..5eaa88534d 100644 --- a/src/libultra/io/dpsetstat.c +++ b/src/libultra/io/dpsetstat.c @@ -1,4 +1,4 @@ -#include "global.h" +#include "ultra64.h" void osDpSetStatus(u32 data) { IO_WRITE(DPC_STATUS_REG, data); diff --git a/src/libultra/io/epidma.c b/src/libultra/io/epidma.c index 0b8c847d6a..ba2e55bced 100644 --- a/src/libultra/io/epidma.c +++ b/src/libultra/io/epidma.c @@ -1,4 +1,4 @@ -#include "global.h" +#include "ultra64.h" s32 osEPiStartDma(OSPiHandle* pihandle, OSIoMesg* mb, s32 direction) { register s32 result; @@ -9,13 +9,13 @@ s32 osEPiStartDma(OSPiHandle* pihandle, OSIoMesg* mb, s32 direction) { mb->piHandle = pihandle; - if (direction == 0) { - mb->hdr.type = 15; + if (direction == OS_READ) { + mb->hdr.type = OS_MESG_TYPE_EDMAREAD; } else { - mb->hdr.type = 16; + mb->hdr.type = OS_MESG_TYPE_EDMAWRITE; } - if (mb->hdr.pri == 1) { + if (mb->hdr.pri == OS_MESG_PRI_HIGH) { result = osJamMesg(osPiGetCmdQueue(), mb, OS_MESG_NOBLOCK); } else { result = osSendMesg(osPiGetCmdQueue(), mb, OS_MESG_NOBLOCK); diff --git a/src/libultra/io/epilinkhandle.c b/src/libultra/io/epilinkhandle.c index bedd6d71c0..76832e9e3c 100644 --- a/src/libultra/io/epilinkhandle.c +++ b/src/libultra/io/epilinkhandle.c @@ -1,4 +1,4 @@ -#include "global.h" +#include "ultra64.h" s32 osEPiLinkHandle(OSPiHandle* handle) { u32 saveMask = __osDisableInt(); diff --git a/src/libultra/io/siint.h b/src/libultra/io/siint.h deleted file mode 100644 index 5fe7258447..0000000000 --- a/src/libultra/io/siint.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef _SIINT_H_ -#define _SIINT_H_ - -#endif diff --git a/src/libultra/vimodes/vimodentschpn1.c b/src/libultra/vimodes/vimodentschpn1.c new file mode 100644 index 0000000000..877da10c33 --- /dev/null +++ b/src/libultra/vimodes/vimodentschpn1.c @@ -0,0 +1,37 @@ +#include "PR/os.h" +#include "PR/rcp.h" +#include "PR/viint.h" + +OSViMode osViModeNtscHpn1 = { + OS_VI_NTSC_HPN1, // type + { + // comRegs + VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_SERRATE_ON | VI_CTRL_ANTIALIAS_MODE_2 | + VI_CTRL_PIXEL_ADV_3, // ctrl + WIDTH(1280), // width + BURST(57, 34, 5, 62), // burst + VSYNC(524), // vSync + HSYNC(3093, 0), // hSync + LEAP(3093, 3093), // leap + HSTART(108, 748), // hStart + SCALE(1, 0), // xScale + VCURRENT(0), // vCurrent + }, + { // fldRegs + { + // [0] + ORIGIN(1280), // origin + SCALE(1, 0), // yScale + HSTART(35, 509), // vStart + BURST(4, 2, 14, 0), // vBurst + VINTR(2), // vIntr + }, + { + // [1] + ORIGIN(2560), // origin + SCALE(1, 0), // yScale + HSTART(37, 511), // vStart + BURST(4, 2, 14, 0), // vBurst + VINTR(2), // vIntr + } }, +}; diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt index 2b48102f00..1da1ee2bdd 100644 --- a/tools/disasm/files.txt +++ b/tools/disasm/files.txt @@ -270,6 +270,7 @@ 0x80097E70 : "pimgr", 0x80097EA0 : "piacs", 0x80097EB0 : "contpfs", + 0x80097EB0 : "vimodentschpn1", 0x80097F10 : "seteventmesg", 0x80097F20 : "xprintf", 0x80097F70 : "timerintr",