📄 nitrofs.cpp
字号:
#include <nds.h>
typedef struct {
u32 entry_start;
u16 entry_file_id;
u16 parent_id;
} NitroFSEntry;
typedef struct {
u32 file_start;
u32 file_end;
} NitroFSFat;
void * NFSFindFile(const char *filename, u32 *size)
{
u8 *ROM = (u8*)0x08000000;
u8 *filename2 = (u8*)filename;
unsigned int i;
u8 namelen;
char *pc = (char*)filename;
u8 filesize = 0;
while (*pc) {
++pc;
++filesize;
}
u32 os_name = *(u32*)0x08000040;
u32 os_fat = *(u32*)0x08000048;
u8 *pname = ROM + os_name;
NitroFSFat *fat = (NitroFSFat*)(ROM + os_fat);
NitroFSEntry *entry = (NitroFSEntry*)pname;
pname += entry->entry_start;
unsigned int no = 0;
while (*pname != 0) {
namelen = (*pname & 0x7f);
if (*pname & 0x80) {
//dir (skip)
++pname;//point filename
pname += namelen;//point dir data
pname += 3;
} else {
//file
++pname;//point filename
if (filesize == namelen) {
for (i = 0;i < namelen;++i) {
if (pname[i] != filename2[i]) break;
}
if (i == namelen) {
//find
if (size) {
*size = fat[no].file_end-fat[no].file_start;
}
return (ROM+fat[no].file_start);
}
}
pname += namelen;
}
++no;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -