c: osPfcFreeBlocks

This commit is contained in:
Mittenshugg
2020-08-01 03:50:31 -05:00
parent 145df90687
commit d62631d600
17 changed files with 349 additions and 136 deletions
+1
View File
@@ -176,6 +176,7 @@ $(BUILD_DIR)/lib/src/unknown_0C91A0.o : OPT_FLAGS := -O1
$(BUILD_DIR)/lib/src/unknown_0D29F0.o: OPT_FLAGS := -O1
$(BUILD_DIR)/lib/src/osCreateThread.o : OPT_FLAGS := -O1
$(BUILD_DIR)/lib/src/osGetThreadPri.o : OPT_FLAGS := -O1
$(BUILD_DIR)/lib/src/osPfsFreeBlocks.o: OPT_FLAGS := -O1
$(BUILD_DIR)/lib/src/osPiStartDma.o : OPT_FLAGS := -O1
$(BUILD_DIR)/lib/src/osRecvMesg.o : OPT_FLAGS := -O1
$(BUILD_DIR)/lib/src/osSendMesg.o : OPT_FLAGS := -O1
+1 -1
View File
@@ -9259,7 +9259,7 @@ glabel __osThreadTail
glabel D_800E4888
.word 0x800E4880
glabel D_800E488C
glabel __osActiveQueue
.word 0x800E4880
glabel __osRunningThread
+17
View File
@@ -112,6 +112,23 @@ typedef struct OSMesgQueue_s {
#define OS_MESG_NOBLOCK 0
#define OS_MESG_BLOCK 1
/*
* I/O message types
*/
#define OS_MESG_TYPE_BASE (10)
#define OS_MESG_TYPE_LOOPBACK (OS_MESG_TYPE_BASE+0)
#define OS_MESG_TYPE_DMAREAD (OS_MESG_TYPE_BASE+1)
#define OS_MESG_TYPE_DMAWRITE (OS_MESG_TYPE_BASE+2)
#define OS_MESG_TYPE_VRETRACE (OS_MESG_TYPE_BASE+3)
#define OS_MESG_TYPE_COUNTER (OS_MESG_TYPE_BASE+4)
#define OS_MESG_TYPE_EDMAREAD (OS_MESG_TYPE_BASE+5)
#define OS_MESG_TYPE_EDMAWRITE (OS_MESG_TYPE_BASE+6)
/*
* I/O message priority
*/
#define OS_MESG_PRI_NORMAL 0
#define OS_MESG_PRI_HIGH 1
#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
+137
View File
@@ -0,0 +1,137 @@
#ifndef _ULTRA64_PFS_H_
#define _ULTRA64_PFS_H_
#include <ultra64.h>
/* File System size */
#define OS_PFS_VERSION 0x0200
#define OS_PFS_VERSION_HI (OS_PFS_VERSION >> 8)
#define OS_PFS_VERSION_LO (OS_PFS_VERSION & 255)
#define PFS_INODE_SIZE_PER_PAGE 128
#define PFS_FILE_NAME_LEN 16
#define PFS_FILE_EXT_LEN 4
#define BLOCKSIZE 32
#define PFS_ONE_PAGE 8
#define PFS_MAX_BANKS 62
/* File System flag */
#define PFS_READ 0
#define PFS_WRITE 1
#define PFS_CREATE 2
/* File System status */
#define PFS_INITIALIZED 0x1
#define PFS_CORRUPTED 0x2
#define PFS_ID_BROKEN 0x4
#define PFS_MOTOR_INITIALIZED 0x8
#define PFS_GBPAK_INITIALIZED 0x10
/* Definition for page usage */
#define PFS_EOF 1
#define PFS_PAGE_NOT_EXIST 2
#define PFS_PAGE_NOT_USED 3
/* File System error number */
#define PFS_ERR_NOPACK 1 /* no memory card is plugged or */
#define PFS_ERR_NEW_PACK 2 /* ram pack has been changed to a different one */
#define PFS_ERR_INCONSISTENT 3 /* need to run Pfschecker*/
#define PFS_ERR_CONTRFAIL CONT_OVERRUN_ERROR
#define PFS_ERR_INVALID 5 /* invalid parameter or file not exist*/
#define PFS_ERR_BAD_DATA 6 /* the data read from pack are bad*/
#define PFS_DATA_FULL 7 /* no free pages on ram pack*/
#define PFS_DIR_FULL 8 /* no free directories on ram pack*/
#define PFS_ERR_EXIST 9 /* file exists*/
#define PFS_ERR_ID_FATAL 10 /* dead ram pack */
#define PFS_ERR_DEVICE 11 /* wrong device type*/
#define PFS_ERR_NO_GBCART 12 /* no gb cartridge (64GB-PAK) */
#define PFS_ERR_NEW_GBCART 13 /* gb cartridge may be changed */
/* Definition for bank */
#define PFS_ID_BANK_256K 0
#define PFS_ID_BANK_1M 4
#define PFS_BANKS_256K 1
#define PFS_WRITTEN 2
#define DEF_DIR_PAGES 2
#define PFS_ID_0AREA 1
#define PFS_ID_1AREA 3
#define PFS_ID_2AREA 4
#define PFS_ID_3AREA 6
#define PFS_LABEL_AREA 7
#define PFS_ID_PAGE PFS_ONE_PAGE * 0
#define PFS_BANK_LAPPED_BY 8 /* => u8 */
#define PFS_SECTOR_PER_BANK 32
#define PFS_INODE_DIST_MAP (PFS_BANK_LAPPED_BY * PFS_SECTOR_PER_BANK)
#define PFS_SECTOR_SIZE (PFS_INODE_SIZE_PER_PAGE/PFS_SECTOR_PER_BANK)
typedef struct {
int status;
OSMesgQueue* queue;
int channel;
u8 id[32];
u8 label[32];
int version;
int dir_size;
int inode_table; /* block location */
int minode_table; /* mirrioring inode_table */
int dir_table; /* block location */
int inodeStartPage; /* page # */
u8 banks;
u8 activebank;
} OSPfs;
typedef struct {
u32 file_size; /* bytes */
u32 game_code;
u16 company_code;
char ext_name[4];
char game_name[16];
} OSPfsState;
typedef union {
struct {
u8 bank;
u8 page;
} inode_t;
u16 ipage;
} __OSInodeUnit;
typedef struct {
__OSInodeUnit inodePage[128];
} __OSInode;
typedef struct {
u32 game_code;
u16 company_code;
__OSInodeUnit start_page;
u8 status;
s8 reserved;
u16 data_sum;
u8 ext_name[PFS_FILE_EXT_LEN];
u8 game_name[PFS_FILE_NAME_LEN];
} __OSDir;
typedef struct {
u32 repaired;
u32 random;
u64 serialMid;
u64 serialLow;
u16 deviceid;
u8 banks;
u8 version;
u16 checksum;
u16 invertedChecksum;
} __OSPackId;
typedef struct {
__OSInode inode;
u8 bank;
u8 map[PFS_INODE_DIST_MAP];
} __OSInodeCache;
#endif
+133
View File
@@ -0,0 +1,133 @@
#ifndef _CONTROLLER_H
#define _CONTROLLER_H
#include "libultra_internal.h"
//#include <rcp.h>
//should go somewhere else but
#define ARRLEN(x) ((s32)(sizeof(x) / sizeof(x[0])))
#define CHNL_ERR(format) ((format.rxsize & CHNL_ERR_MASK) >> 4)
typedef struct
{
/* 0x0 */ u32 ramarray[15];
/* 0x3C */ u32 pifstatus;
} OSPifRam;
typedef struct
{
/* 0x0 */ u8 dummy;
/* 0x1 */ u8 txsize;
/* 0x2 */ u8 rxsize;
/* 0x3 */ u8 cmd;
/* 0x4 */ u16 button;
/* 0x6 */ s8 stick_x;
/* 0x7 */ s8 stick_y;
} __OSContReadFormat;
typedef struct
{
/* 0x0 */ u8 dummy;
/* 0x1 */ u8 txsize;
/* 0x2 */ u8 rxsize;
/* 0x3 */ u8 cmd;
/* 0x4 */ u8 typeh;
/* 0x5 */ u8 typel;
/* 0x6 */ u8 status;
/* 0x7 */ u8 dummy1;
} __OSContRequesFormat;
typedef struct
{
/* 0x0 */ u8 txsize;
/* 0x1 */ u8 rxsize;
/* 0x2 */ u8 cmd;
/* 0x3 */ u8 typeh;
/* 0x4 */ u8 typel;
/* 0x5 */ u8 status;
} __OSContRequesFormatShort;
typedef struct
{
/* 0x0 */ u8 dummy;
/* 0x1 */ u8 txsize;
/* 0x2 */ u8 rxsize;
/* 0x3 */ u8 cmd;
/* 0x4 */ u16 address;
/* 0x6 */ u8 data[32];
/* 0x26 */ u8 datacrc;
} __OSContRamReadFormat;
typedef struct
{
/* 0x0 */ u8 txsize;
/* 0x1 */ u8 rxsize;
/* 0x2 */ u8 cmd;
/* 0x3 */ u8 address;
/* 0x4 */ u8 data[EEPROM_BLOCK_SIZE];
} __OSContEepromFormat;
//from: http://en64.shoutwiki.com/wiki/SI_Registers_Detailed#CONT_CMD_Usage
#define CONT_CMD_REQUEST_STATUS 0
#define CONT_CMD_READ_BUTTON 1
#define CONT_CMD_READ_MEMPACK 2
#define CONT_CMD_WRITE_MEMPACK 3
#define CONT_CMD_READ_EEPROM 4
#define CONT_CMD_WRITE_EEPROM 5
#define CONT_CMD_RESET 0xff
#define CONT_CMD_REQUEST_STATUS_TX 1
#define CONT_CMD_READ_BUTTON_TX 1
#define CONT_CMD_READ_MEMPACK_TX 3
#define CONT_CMD_WRITE_MEMPACK_TX 35
#define CONT_CMD_READ_EEPROM_TX 2
#define CONT_CMD_WRITE_EEPROM_TX 10
#define CONT_CMD_RESET_TX 1
#define CONT_CMD_REQUEST_STATUS_RX 3
#define CONT_CMD_READ_BUTTON_RX 4
#define CONT_CMD_READ_MEMPACK_RX 33
#define CONT_CMD_WRITE_MEMPACK_RX 1
#define CONT_CMD_READ_EEPROM_RX 8
#define CONT_CMD_WRITE_EEPROM_RX 1
#define CONT_CMD_RESET_RX 3
#define CONT_CMD_NOP 0xff
#define CONT_CMD_END 0xfe //indicates end of a command
#define CONT_CMD_EXE 1 //set pif ram status byte to this to do a command
#define DIR_STATUS_EMPTY 0
#define DIR_STATUS_UNKNOWN 1
#define DIR_STATUS_OCCUPIED 2
//some version of this almost certainly existed since there's plenty of times where it's used right before a return 0
#define ERRCK(fn) \
ret = fn; \
if (ret != 0) \
return ret;
#define SET_ACTIVEBANK_TO_ZERO \
if (pfs->activebank != 0) \
{ \
pfs->activebank = 0; \
ERRCK(__osPfsSelectBank(pfs)) \
}
#define PFS_CHECK_ID \
if (__osCheckId(pfs) == PFS_ERR_NEW_PACK) \
return PFS_ERR_NEW_PACK;
#endif
#define PFS_CHECK_STATUS \
if ((pfs->status & PFS_INITIALIZED) == 0) \
return PFS_ERR_INVALID;
#define PFS_GET_STATUS \
__osSiGetAccess(); \
ret = __osPfsGetStatus(queue, channel); \
__osSiRelAccess(); \
if (ret != 0) \
return ret;
+1
View File
@@ -30,5 +30,6 @@
#include <PR/os_ai.h>
#include <PR/libaudio.h>
#include <PR/libultra.h>
#include <PR/pfs.h>
#endif
@@ -1,98 +0,0 @@
glabel osPfsFreeBlocks
/* 0CFFE0 800CF3E0 27BDFED0 */ addiu $sp, $sp, -0x130
/* 0CFFE4 800CF3E4 AFA40130 */ sw $a0, 0x130($sp)
/* 0CFFE8 800CF3E8 8FAE0130 */ lw $t6, 0x130($sp)
/* 0CFFEC 800CF3EC AFBF0014 */ sw $ra, 0x14($sp)
/* 0CFFF0 800CF3F0 AFA50134 */ sw $a1, 0x134($sp)
/* 0CFFF4 800CF3F4 AFA00128 */ sw $zero, 0x128($sp)
/* 0CFFF8 800CF3F8 AFA00024 */ sw $zero, 0x24($sp)
/* 0CFFFC 800CF3FC 8DCF0000 */ lw $t7, ($t6)
/* 0D0000 800CF400 31F80001 */ andi $t8, $t7, 1
/* 0D0004 800CF404 17000003 */ bnez $t8, .L800CF414
/* 0D0008 800CF408 00000000 */ nop
/* 0D000C 800CF40C 10000043 */ b .L800CF51C
/* 0D0010 800CF410 24020005 */ li $v0, 5
.L800CF414:
/* 0D0014 800CF414 0C0356F0 */ jal __osCheckId
/* 0D0018 800CF418 8FA40130 */ lw $a0, 0x130($sp)
/* 0D001C 800CF41C 24010002 */ li $at, 2
/* 0D0020 800CF420 14410003 */ bne $v0, $at, .L800CF430
/* 0D0024 800CF424 00000000 */ nop
/* 0D0028 800CF428 1000003C */ b .L800CF51C
/* 0D002C 800CF42C 24020002 */ li $v0, 2
.L800CF430:
/* 0D0030 800CF430 8FB90130 */ lw $t9, 0x130($sp)
/* 0D0034 800CF434 A3A00023 */ sb $zero, 0x23($sp)
/* 0D0038 800CF438 93280064 */ lbu $t0, 0x64($t9)
/* 0D003C 800CF43C 19000031 */ blez $t0, .L800CF504
/* 0D0040 800CF440 00000000 */ nop
.L800CF444:
/* 0D0044 800CF444 8FA40130 */ lw $a0, 0x130($sp)
/* 0D0048 800CF448 27A50028 */ addiu $a1, $sp, 0x28
/* 0D004C 800CF44C 00003025 */ move $a2, $zero
/* 0D0050 800CF450 0C03572F */ jal __osPfsRWInode
/* 0D0054 800CF454 93A70023 */ lbu $a3, 0x23($sp)
/* 0D0058 800CF458 AFA20024 */ sw $v0, 0x24($sp)
/* 0D005C 800CF45C 8FA90024 */ lw $t1, 0x24($sp)
/* 0D0060 800CF460 11200003 */ beqz $t1, .L800CF470
/* 0D0064 800CF464 00000000 */ nop
/* 0D0068 800CF468 1000002C */ b .L800CF51C
/* 0D006C 800CF46C 01201025 */ move $v0, $t1
.L800CF470:
/* 0D0070 800CF470 93AA0023 */ lbu $t2, 0x23($sp)
/* 0D0074 800CF474 19400004 */ blez $t2, .L800CF488
/* 0D0078 800CF478 00000000 */ nop
/* 0D007C 800CF47C 240B0001 */ li $t3, 1
/* 0D0080 800CF480 10000004 */ b .L800CF494
/* 0D0084 800CF484 AFAB001C */ sw $t3, 0x1c($sp)
.L800CF488:
/* 0D0088 800CF488 8FAC0130 */ lw $t4, 0x130($sp)
/* 0D008C 800CF48C 8D8D0060 */ lw $t5, 0x60($t4)
/* 0D0090 800CF490 AFAD001C */ sw $t5, 0x1c($sp)
.L800CF494:
/* 0D0094 800CF494 8FAE001C */ lw $t6, 0x1c($sp)
/* 0D0098 800CF498 29C10080 */ slti $at, $t6, 0x80
/* 0D009C 800CF49C 10200010 */ beqz $at, .L800CF4E0
/* 0D00A0 800CF4A0 AFAE012C */ sw $t6, 0x12c($sp)
.L800CF4A4:
/* 0D00A4 800CF4A4 8FAF012C */ lw $t7, 0x12c($sp)
/* 0D00A8 800CF4A8 24010003 */ li $at, 3
/* 0D00AC 800CF4AC 000FC040 */ sll $t8, $t7, 1
/* 0D00B0 800CF4B0 03B8C821 */ addu $t9, $sp, $t8
/* 0D00B4 800CF4B4 97390028 */ lhu $t9, 0x28($t9)
/* 0D00B8 800CF4B8 17210004 */ bne $t9, $at, .L800CF4CC
/* 0D00BC 800CF4BC 00000000 */ nop
/* 0D00C0 800CF4C0 8FA80128 */ lw $t0, 0x128($sp)
/* 0D00C4 800CF4C4 25090001 */ addiu $t1, $t0, 1
/* 0D00C8 800CF4C8 AFA90128 */ sw $t1, 0x128($sp)
.L800CF4CC:
/* 0D00CC 800CF4CC 8FAA012C */ lw $t2, 0x12c($sp)
/* 0D00D0 800CF4D0 254B0001 */ addiu $t3, $t2, 1
/* 0D00D4 800CF4D4 29610080 */ slti $at, $t3, 0x80
/* 0D00D8 800CF4D8 1420FFF2 */ bnez $at, .L800CF4A4
/* 0D00DC 800CF4DC AFAB012C */ sw $t3, 0x12c($sp)
.L800CF4E0:
/* 0D00E0 800CF4E0 93AC0023 */ lbu $t4, 0x23($sp)
/* 0D00E4 800CF4E4 8FAF0130 */ lw $t7, 0x130($sp)
/* 0D00E8 800CF4E8 258D0001 */ addiu $t5, $t4, 1
/* 0D00EC 800CF4EC A3AD0023 */ sb $t5, 0x23($sp)
/* 0D00F0 800CF4F0 91F80064 */ lbu $t8, 0x64($t7)
/* 0D00F4 800CF4F4 31AE00FF */ andi $t6, $t5, 0xff
/* 0D00F8 800CF4F8 01D8082A */ slt $at, $t6, $t8
/* 0D00FC 800CF4FC 1420FFD1 */ bnez $at, .L800CF444
/* 0D0100 800CF500 00000000 */ nop
.L800CF504:
/* 0D0104 800CF504 8FB90128 */ lw $t9, 0x128($sp)
/* 0D0108 800CF508 8FAA0134 */ lw $t2, 0x134($sp)
/* 0D010C 800CF50C 00001025 */ move $v0, $zero
/* 0D0110 800CF510 001940C0 */ sll $t0, $t9, 3
/* 0D0114 800CF514 00084940 */ sll $t1, $t0, 5
/* 0D0118 800CF518 AD490000 */ sw $t1, ($t2)
.L800CF51C:
/* 0D011C 800CF51C 8FBF0014 */ lw $ra, 0x14($sp)
/* 0D0120 800CF520 27BD0130 */ addiu $sp, $sp, 0x130
/* 0D0124 800CF524 03E00008 */ jr $ra
/* 0D0128 800CF528 00000000 */ nop
/* 0D012C 800CF52C 00000000 */ nop
@@ -1,10 +0,0 @@
glabel osSpTaskYield
/* 0D2E40 800D2240 27BDFFE8 */ addiu $sp, $sp, -0x18
/* 0D2E44 800D2244 AFBF0014 */ sw $ra, 0x14($sp)
/* 0D2E48 800D2248 0C033490 */ jal __osSpSetStatus
/* 0D2E4C 800D224C 24040400 */ li $a0, 1024
/* 0D2E50 800D2250 8FBF0014 */ lw $ra, 0x14($sp)
/* 0D2E54 800D2254 27BD0018 */ addiu $sp, $sp, 0x18
/* 0D2E58 800D2258 03E00008 */ jr $ra
/* 0D2E5C 800D225C 00000000 */ nop
@@ -1,4 +1,4 @@
glabel D_800D35A0
glabel __osCleanupThread
/* 0D41A0 800D35A0 0C035980 */ jal osDestroyThread
/* 0D41A4 800D35A4 00002025 */ move $a0, $zero
/* 0D41A8 800D35A8 00000000 */ nop
@@ -24,18 +24,18 @@ glabel osDestroyThread
/* 0D7254 800D6654 0C034B1C */ jal __osDequeueThread
/* 0D7258 800D6658 03002825 */ move $a1, $t8
.L800D665C:
/* 0D725C 800D665C 3C08800E */ lui $t0, %hi(D_800E488C) # $t0, 0x800e
/* 0D7260 800D6660 8D08488C */ lw $t0, %lo(D_800E488C)($t0)
/* 0D725C 800D665C 3C08800E */ lui $t0, %hi(__osActiveQueue) # $t0, 0x800e
/* 0D7260 800D6660 8D08488C */ lw $t0, %lo(__osActiveQueue)($t0)
/* 0D7264 800D6664 8FA90038 */ lw $t1, 0x38($sp)
/* 0D7268 800D6668 15090005 */ bne $t0, $t1, .L800D6680
/* 0D726C 800D666C 00000000 */ nop
/* 0D7270 800D6670 8D0A000C */ lw $t2, 0xc($t0)
/* 0D7274 800D6674 3C01800E */ lui $at, %hi(D_800E488C) # $at, 0x800e
/* 0D7274 800D6674 3C01800E */ lui $at, %hi(__osActiveQueue) # $at, 0x800e
/* 0D7278 800D6678 10000010 */ b .L800D66BC
/* 0D727C 800D667C AC2A488C */ sw $t2, %lo(D_800E488C)($at)
/* 0D727C 800D667C AC2A488C */ sw $t2, %lo(__osActiveQueue)($at)
.L800D6680:
/* 0D7280 800D6680 3C11800E */ lui $s1, %hi(D_800E488C) # $s1, 0x800e
/* 0D7284 800D6684 8E31488C */ lw $s1, %lo(D_800E488C)($s1)
/* 0D7280 800D6680 3C11800E */ lui $s1, %hi(__osActiveQueue) # $s1, 0x800e
/* 0D7284 800D6684 8E31488C */ lw $s1, %lo(__osActiveQueue)($s1)
/* 0D7288 800D6688 8E32000C */ lw $s2, 0xc($s1)
/* 0D728C 800D668C 1240000B */ beqz $s2, .L800D66BC
/* 0D7290 800D6690 00000000 */ nop
+5 -9
View File
@@ -1,15 +1,11 @@
/* The comment below is needed for this file to be picked up by generate_ld */
/* RAM_POS: 0x800C8850 */
#include "types.h"
#include "macros.h"
#include "libultra_internal.h"
#include "PR/R4300.h"
//GLOBAL_ASM("lib/asm/non_matchings/osCreateThread_0C9450/osCreateThread.s")
extern OSThread *D_800E488C; //__osActiveQueue;
void D_800D35A0(void); //__osCleanupThread
extern OSThread *__osActiveQueue; //__osActiveQueue;
void __osCleanupThread(void); //__osCleanupThread
void osCreateThread(OSThread *t, OSId id, void (*entry)(void *), void *arg, void *sp, OSPri p)
{
@@ -22,7 +18,7 @@ void osCreateThread(OSThread *t, OSId id, void (*entry)(void *), void *arg, void
t->context.pc = (u32)entry;
t->context.a0 = (u64)arg;
t->context.sp = (u64)sp - 16;
t->context.ra = (u64)D_800D35A0;
t->context.ra = (u64)__osCleanupThread;
mask = OS_IM_ALL;
t->context.sr = SR_IMASK | SR_EXL | SR_IE;
t->context.rcp = (mask & RCP_IMASK) >> RCP_IMASKSHIFT;
@@ -31,7 +27,7 @@ void osCreateThread(OSThread *t, OSId id, void (*entry)(void *), void *arg, void
t->state = OS_STATE_STOPPED;
t->flags = 0;
saveMask = __osDisableInt();
t->tlnext = D_800E488C;
D_800E488C = t;
t->tlnext = __osActiveQueue;
__osActiveQueue = t;
__osRestoreInt(saveMask);
}
+34
View File
@@ -0,0 +1,34 @@
/* The comment below is needed for this file to be picked up by generate_ld */
/* RAM_POS: 0x800CF3E0 */
#include "libultra_internal.h"
#include "controller.h"
s32 osPfsFreeBlocks(OSPfs *pfs, s32 *bytes_not_used)
{
int j;
int pages;
__OSInode inode;
s32 ret;
u8 bank;
int offset;
pages = 0;
ret = 0;
PFS_CHECK_STATUS;
PFS_CHECK_ID;
for (bank = 0; bank < pfs->banks; bank++)
{
ERRCK(__osPfsRWInode(pfs, &inode, OS_READ, bank));
if (bank > 0)
offset = 1;
else
offset = pfs->inodeStartPage;
for (j = offset; j < ARRLEN(inode.inodePage); j++)
{
if (inode.inodePage[j].ipage == 3)
pages++;
}
}
*bytes_not_used = pages * 8 * 32;
return 0;
}
-7
View File
@@ -1,7 +0,0 @@
/* The comment below is needed for this file to be picked up by generate_ld */
/* RAM_POS: 0x800CF3E0 */
#include "types.h"
#include "macros.h"
GLOBAL_ASM("lib/asm/non_matchings/unknown_0CFFE0/osPfsFreeBlocks.s")
+5
View File
@@ -3,6 +3,11 @@
#include "types.h"
#include "macros.h"
#include "libultra_internal.h"
extern OSTime __osCurrentTime;
extern u32 __osBaseCounter;
extern u32 D_8012D22C; //__osViIntrCount
//extern u16 D_8012D190; //static u16 retrace
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D2590/osCreateViManager.s")
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D2590/viMgrMain.s")
+5 -1
View File
@@ -3,6 +3,10 @@
#include "types.h"
#include "macros.h"
#include "libultra_internal.h"
void osSpTaskYield(void) {
__osSpSetStatus(SPSTATUS_SET_SIGNAL0);
}
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D2E40/osSpTaskYield.s")
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D2E40/osViSetSpecialFeatures.s")
+1 -1
View File
@@ -19,7 +19,7 @@ GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/__osEnqueueAndYield.s")
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/__osEnqueueThread.s")
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/__osPopThread.s")
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/__osDispatchThread.s")
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/D_800D35A0.s")
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/__osCleanupThread.s")
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/__osProbeTLB.s")
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/func_800D3670.s")
GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/osJamMesg.s")
+2 -2
View File
@@ -65,7 +65,7 @@ D_800D2680 = 0x800D2680;
D_800D2760 = 0x800D2760;
__osExceptionPreamble = 0x800D2CB0;
__osException = 0x800D2CC0;
D_800D35A0 = 0x800D35A0;
__osCleanupThread = 0x800D35A0;
D_800D7600 = 0x800D7600;
D_800D84C0 = 0x800D84C0;
D_800D8590 = 0x800D8590;
@@ -787,7 +787,7 @@ D_800E4874 = 0x800E4874;
D_800E4878 = 0x800E4878;
__osThreadTail = 0x800E4880;
D_800E4888 = 0x800E4888;
D_800E488C = 0x800E488C;
__osActiveQueue = 0x800E488C;
__osRunningThread = 0x800E4890;
D_800E4894 = 0x800E4894;
D_800E48C0 = 0x800E48C0;