⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nitrofs.cpp

📁 NITRO FILE SYSTEM NFS即NDS上的文件系统文件之一
💻 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 + -