actually make N64DD support work

This commit is contained in:
CasualPokePlayer 2022-11-27 23:29:06 -08:00
parent 6baee38717
commit 8818f79bb0
2 changed files with 23 additions and 10 deletions

Binary file not shown.

View File

@ -120,6 +120,7 @@ static array_view<u8>* pifData = nullptr;
static array_view<u8>* iplData = nullptr;
static array_view<u8>* romData = nullptr;
static array_view<u8>* diskData = nullptr;
static array_view<u8>* diskErrorData = nullptr;
static array_view<u8>* saveData = nullptr;
static array_view<u8>* gbRomData[4] = { nullptr, nullptr, nullptr, nullptr, };
@ -365,6 +366,8 @@ typedef struct
u64 RomLen;
u8* DiskData;
u64 DiskLen;
u8* DiskErrorData;
u64 DiskErrorLen;
GbRom GbRoms[4];
} LoadData;
@ -438,13 +441,6 @@ static bool LoadDisk(LoadData* loadData)
u32 len;
string name;
name = "64dd.ipl.rom";
len = loadData->IplLen;
data = new u8[len];
memcpy(data, loadData->IplData, len);
iplData = new array_view<u8>(data, len);
platform->bizpak->append(name, *iplData);
name = "program.disk";
len = loadData->DiskLen;
data = new u8[len];
@ -452,6 +448,13 @@ static bool LoadDisk(LoadData* loadData)
diskData = new array_view<u8>(data, len);
platform->bizpak->append(name, *diskData);
name = "program.disk.error";
len = loadData->DiskErrorLen;
data = new u8[len];
memcpy(data, loadData->DiskErrorData, len);
diskErrorData = new array_view<u8>(data, len);
platform->bizpak->append(name, *diskErrorData);
ares::Nintendo64::dd.rtcCallback = GetBizTime;
if (auto port = root->find<ares::Node::Port>("Nintendo 64DD/Disk Drive"))
@ -471,6 +474,7 @@ EXPORT bool Init(LoadData* loadData, ControllerType* controllers, bool isPal, bo
{
platform = new BizPlatform;
platform->bizpak = new vfs::directory;
ares::platform = platform;
biztime = initTime;
u8* data;
@ -484,13 +488,22 @@ EXPORT bool Init(LoadData* loadData, ControllerType* controllers, bool isPal, bo
pifData = new array_view<u8>(data, len);
platform->bizpak->append(name, *pifData);
// needs to be loaded before ares::Nintendo64::load
if (loadData->IplData)
{
name = "64dd.ipl.rom";
len = loadData->IplLen;
data = new u8[len];
memcpy(data, loadData->IplData, len);
iplData = new array_view<u8>(data, len);
platform->bizpak->append(name, *iplData);
}
string region = isPal ? "PAL" : "NTSC";
platform->bizpak->setAttribute("region", region);
ares::platform = platform;
name = {"[Nintendo] Nintendo 64 (", region, ")"};
if (loadData->DiskData) name = {"[Nintendo] Nintendo 64DD (", region, ")"};
if (loadData->DiskData) name = "[Nintendo] Nintendo 64DD (NTSC-J)"; // todo: handle this better (name doesn't really matter at this point)
if (!ares::Nintendo64::load(root, name))
{