diff --git a/Assets/dll/ares64.wbx.zst b/Assets/dll/ares64.wbx.zst
index 6cd444114e..ddb8c9eeb0 100644
Binary files a/Assets/dll/ares64.wbx.zst and b/Assets/dll/ares64.wbx.zst differ
diff --git a/waterbox/ares64/BizInterface.cpp b/waterbox/ares64/BizInterface.cpp
index 206aba85db..a4088ee80e 100644
--- a/waterbox/ares64/BizInterface.cpp
+++ b/waterbox/ares64/BizInterface.cpp
@@ -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))
 	{