It would probably need some game specific patches to run with Swiss to handle the disc interface, as it doesn't use the Nintendo SDK. Here are my notes in case it helps. These are the functions I found that I needed to modify to get it to work. (Memory locations for first dol load (0x80003100), and after it copies the apploader to 0x81300000 (before it loads the next dol) below). Note that there are multiple, non-identical versions of functions that do the same thing. These are a bit out of date, as it does't include the changes I just added to Nintendont (Interrupt mask, etc.). Also watch out for the apploader. In the dol at 0x80003100 is the apploader that gets copied to 0x81300000 after selecting AGP or Cheat Creator. Patches using relative branches (e.g. to 0x80001800 range) will be to the wrong address if patched before the copy.
FuncPattern DatelFPatterns[] =
{
{ 0x48, 9, 2, 3, 0, 3, NULL, FCODE_DolEntryMod, "DolEntryMod", "Datel", FGROUP_NONE, 0 },
{ 0xF8, 8, 6, 7, 1, 6, NULL, FCODE_DolEntryMod, "DolEntryMod", "DatelB", FGROUP_NONE, 0 },
{ 0x14, 1, 1, 0, 0, 1, NULL, FCODE_PatchFunc, "GetImmediateBuffer", "Datel", FGROUP_NONE, 0 },
{ 0x20, 2, 2, 0, 0, 0, NULL, FCODE_PatchFunc, "DVDLowStopMotor", "Datel", FGROUP_NONE, 0 },//DVDLowStopMotor
{ 0x58, 3, 6, 0, 0, 0, NULL, FCODE_PatchFunc, "DVDInquiryAsync", "Datel", FGROUP_DVDInquiryAsync, 0 },
// { 0x58, 3, 6, 0, 0, 0, DVDInquiryAsync, DVDInquiryAsync_size, "DVDInquiryAsync", "Datel", FGROUP_DVDInquiryAsync, 0 },
{ 0x6C, 4, 7, 0, 0, 0, NULL, FCODE_PatchFunc, "DVDLowReadDiskID", "Datel", FGROUP_NONE, 0 },
{ 0x60, 3, 7, 0, 0, 0, NULL, FCODE_PatchFunc, "DVDLowRead", "Datel", FGROUP_DVDLowRead, 0 },
{ 0x3C, 3, 4, 0, 0, 0, NULL, FCODE_PatchFunc, "DVDSeekAbsAsyncPrio", "Datel", FGROUP_NONE, 0 },
// { 0x3C, 3, 4, 0, 0, 0, DVDSeekAbsAsyncPrio,DVDSeekAbsAsyncPrio_size, "DVDSeekAbsAsyncPrio", "Datel", FGROUP_NONE, 0 },
{ 0x20, 2, 2, 0, 0, 0, NULL, FCODE_PatchFunc, "DVDEnableInterrupts", "Datel", FGROUP_NONE, 0 },
{ 0xE4, 12, 14, 1, 1, 5, NULL, FCODE_PatchFunc, "DVDEnableInterrupts", "DatelB", FGROUP_NONE, 0 },
{ 0x30, 2, 3, 0, 0, 0, NULL, FCODE_PatchFunc, "DVDEnableInterrupts", "DatelC", FGROUP_NONE, 0 },
{ 0x24, 2, 3, 0, 0, 0, NULL, FCODE_PatchFunc, "DVDGetDriveStatus", "Datel", FGROUP_NONE, 0 },
// { 0x24, 2, 3, 0, 0, 0, DVDGetDriveStatus, sizeof(DVDGetDriveStatus), "DVDGetDriveStatus", "Datel", FGROUP_NONE, 0 },
// { 0x190, 15, 12, 2, 8, 15, NULL, FCODE_PatchFunc, "__DVDInterruptHandler","Datel", FGROUP_NONE, 0 },
{ 0x18, 2, 1, 0, 0, 0, NULL, FCODE_GetCoverStatus, "GetCoverStatus", "Datel", FGROUP_NONE, 0 },
{ 0x34, 1, 2, 0, 0, 3, NULL, FCODE_PatchFunc, "DVDAudioDisable", "Datel", FGROUP_NONE, 0 },
{ 0x6C, 8, 8, 3, 0, 4, NULL, FCODE_PatchFunc, "CallDVDAudioDisable", "Datel", FGROUP_NONE, 0 },
{ 0x3C, 6, 4, 1, 0, 2, NULL, FCODE_PatchFunc, "GetImmBufferAndStore", "Datel", FGROUP_NONE, 0 },
{ 0x80, 10, 8, 4, 0, 2, NULL, FCODE_PatchFunc, "DVDReadHeader", "Datel", FGROUP_NONE, 0 },
{ 0x70, 10, 9, 2, 1, 2, NULL, FCODE_PatchFunc, "DVDWait", "Datel", FGROUP_NONE, 0 },
{ 0x58, 8, 8, 1, 0, 2, NULL, FCODE_PatchFunc, "ClearCoverInterrupt", "Datel", FGROUP_NONE, 0 },
{ 0x48, 2, 1, 0, 0, 3, NULL, FCODE_PatchDiscFunc, "GetAndClearError", "Datel", FGROUP_NONE, 0 },
// { 0x134, 19, 10, 0, 11, 7, NULL, FCODE_PatchDiscFunc, "__DVDInterruptHandler","Datel", FGROUP_NONE, 0 },
{ 0x14, 1, 1, 0, 0, 0, NULL, FCODE_PatchFunc, "GetImmediateBuffer", "Datel", FGROUP_NONE, 0 },
{ 0x98, 7, 7, 0, 1, 1, NULL, FCODE_PatchFunc, "DVDEnableInterrupts", "DatelD", FGROUP_NONE, 0 },
// Same as DVDLowStopMotor, but patch is the same so ok
// { 0x20, 2, 2, 0, 0, 0, NULL, FCODE_PatchFunc, "DVDGetDriveStatus", "Datel", FGROUP_NONE, 0 },
{ 0x98, 9, 8, 2, 1, 6, NULL, FCODE_PatchDiscFunc, "_CallDVDIntHandler", "Datel", FGROUP_NONE, 0 },
{ 0x74, 8, 8, 3, 0, 4, NULL, FCODE_PatchFunc, "CallDVDAudioDisable", "Datel", FGROUP_NONE, 0 },
};
//FuncPattern[0x01300118] : 0xF8, 8, 6, 7, 1, 6
//FuncPattern[0x013006CC] : 0x48, 2, 1, 0, 0, 3
//FuncPattern[0x01300718] : 0x134, 19, 10, 0, 11, 7
//FuncPattern[0x01300888] : 0x14, 1, 1, 0, 0, 0
//FuncPattern[0x01300B28] : 0x98, 7, 7, 0, 1, 1
//FuncPattern[0x01300BE8] : 0x98, 9, 8, 2, 1, 6
//FuncPattern[0x01300CBC] : 0x74, 8, 8, 3, 0, 4
//FuncPattern[0x00003218] : 0x48, 9, 2, 3, 0, 3
//FuncPattern[0x00018CE0] : 0x14, 1, 1, 0, 0, 1
//FuncPattern[0x00018CF8] : 0x20, 2, 2, 0, 0, 0
//FuncPattern[0x00018D1C] : 0x4C, 6, 6, 3, 0, 3
//FuncPattern[0x00018D6C] : 0x58, 3, 6, 0, 0, 0
//FuncPattern[0x00018DC8] : 0x70, 8, 6, 5, 1, 3
//FuncPattern[0x00018E3C] : 0x6C, 4, 7, 0, 0, 0
//FuncPattern[0x00018EAC] : 0x78, 8, 8, 4, 0, 5
//FuncPattern[0x00018F28] : 0x60, 3, 7, 0, 0, 0
//FuncPattern[0x00018F8C] : 0x4C, 6, 6, 3, 0, 3
//FuncPattern[0x00018FDC] : 0x3C, 3, 4, 0, 0, 0
//FuncPattern[0x0001901C] : 0x1C, 2, 2, 1, 0, 2
//FuncPattern[0x0001903C] : 0x20, 2, 2, 0, 0, 0
//FuncPattern[0x00019060] : 0x60, 9, 6, 4, 0, 3
//FuncPattern[0x000190C4] : 0x7C, 10, 6, 4, 0, 2
//FuncPattern[0x00019144] : 0x2C, 3, 3, 3, 0, 2
//FuncPattern[0x00019178] : 0xE4, 12, 14, 1, 1, 5
//FuncPattern[0x00019260] : 0x30, 2, 3, 0, 0, 0
//FuncPattern[0x00019294] : 0x24, 2, 3, 0, 0, 0
//FuncPattern[0x000192BC] : 0x190, 15, 12, 2, 8, 15
//FuncPattern[0x0001947C] : 0x18, 2, 1, 0, 0, 0
//FuncPattern[0x00019498] : 0x34, 1, 2, 0, 0, 3
//FuncPattern[0x000194D0] : 0x6C, 8, 8, 3, 0, 4
//FuncPattern[0x00019540] : 0x34, 5, 3, 1, 1, 2
//FuncPattern[0x00019634] : 0x3C, 6, 4, 1, 0, 2
//FuncPattern[0x00019780] : 0x80, 10, 8, 4, 0, 2
//FuncPattern[0x00019804] : 0x70, 10, 9, 2, 1, 2
//FuncPattern[0x00019878] : 0x58, 8, 8, 1, 0, 2