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:
parent
5e9704b464
commit
a63f0a63b5
6 changed files with 9 additions and 7 deletions
59
src/boot/driverominit.c
Normal file
59
src/boot/driverominit.c
Normal 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
32
src/boot/sprintf.c
Normal 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;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue