1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-16 21:05:12 +00:00

Move driverominit and sprintf to src/boot/ (#2105)

This commit is contained in:
cadmic 2024-08-29 13:34:18 -07:00 committed by GitHub
parent 5e9704b464
commit a63f0a63b5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 9 additions and 7 deletions

59
src/boot/driverominit.c Normal file
View file

@ -0,0 +1,59 @@
#include "global.h"
OSPiHandle __DriveRomHandle;
OSPiHandle* osDriveRomInit(void) {
static u32 first = true;
register s32 status;
register u32 value;
register u32 prevInt;
__osPiGetAccess();
if (!first) {
__osPiRelAccess();
return &__DriveRomHandle;
}
first = false;
__DriveRomHandle.type = DEVICE_TYPE_BULK;
__DriveRomHandle.baseAddress = PHYS_TO_K1(PI_DOM1_ADDR1);
__DriveRomHandle.domain = PI_DOMAIN1;
__DriveRomHandle.speed = 0;
bzero(&__DriveRomHandle.transferInfo, sizeof(__OSTranxInfo));
status = IO_READ(PI_STATUS_REG);
while (status & (PI_STATUS_DMA_BUSY | PI_STATUS_IO_BUSY)) {
status = IO_READ(PI_STATUS_REG);
}
IO_WRITE(PI_BSD_DOM1_LAT_REG, 255);
IO_WRITE(PI_BSD_DOM1_PGS_REG, 0);
IO_WRITE(PI_BSD_DOM1_RLS_REG, 3);
IO_WRITE(PI_BSD_DOM1_PWD_REG, 255);
value = IO_READ(__DriveRomHandle.baseAddress);
__DriveRomHandle.latency = value & 0xFF;
__DriveRomHandle.pulse = (value >> 8) & 0xFF;
__DriveRomHandle.pageSize = (value >> 0x10) & 0xF;
__DriveRomHandle.relDuration = (value >> 0x14) & 0xF;
IO_WRITE(PI_BSD_DOM1_LAT_REG, __DriveRomHandle.latency);
IO_WRITE(PI_BSD_DOM1_PGS_REG, __DriveRomHandle.pageSize);
IO_WRITE(PI_BSD_DOM1_RLS_REG, __DriveRomHandle.relDuration);
IO_WRITE(PI_BSD_DOM1_PWD_REG, __DriveRomHandle.pulse);
__osCurrentHandle[__DriveRomHandle.domain]->type = __DriveRomHandle.type;
__osCurrentHandle[__DriveRomHandle.domain]->latency = __DriveRomHandle.latency;
__osCurrentHandle[__DriveRomHandle.domain]->pageSize = __DriveRomHandle.pageSize;
__osCurrentHandle[__DriveRomHandle.domain]->relDuration = __DriveRomHandle.relDuration;
__osCurrentHandle[__DriveRomHandle.domain]->pulse = __DriveRomHandle.pulse;
prevInt = __osDisableInt();
__DriveRomHandle.next = __osPiTable;
__osPiTable = &__DriveRomHandle;
__osRestoreInt(prevInt);
__osPiRelAccess();
return &__DriveRomHandle;
}

32
src/boot/sprintf.c Normal file
View file

@ -0,0 +1,32 @@
#include "stdarg.h"
#include "stdio.h"
#include "string.h"
#include "ultra64/xstdio.h"
void* proutSprintf(void* dst, const char* fmt, size_t size) {
return (char*)memcpy(dst, fmt, size) + size;
}
int vsprintf(char* dst, const char* fmt, va_list args) {
int ret = _Printf(proutSprintf, dst, fmt, args);
if (ret > -1) {
dst[ret] = '\0';
}
return ret;
}
int sprintf(char* dst, const char* fmt, ...) {
int ret;
va_list args;
va_start(args, fmt);
ret = _Printf(proutSprintf, dst, fmt, args);
if (ret > -1) {
dst[ret] = '\0';
}
va_end(args);
return ret;
}