Merge branch 'master' into jaudio_NES_track

This commit is contained in:
Cuyler36
2024-06-14 13:26:17 -04:00
committed by GitHub
10 changed files with 989 additions and 6 deletions
+1
View File
@@ -442,6 +442,7 @@ FAMICOM_BASE = CFLAGS + [
] + DOL_DEFINES
JAUDIO_BASE = CFLAGS + [
"-lang=c++",
"-char signed",
"-sdata 8",
"-sdata2 8",
"-enum int",
+3
View File
@@ -11,6 +11,9 @@ symbol_aligns:
0x80026400: 32
0x8002c920: 32 # __DSPCheckMXICBoot2__FP16STRUCT_DSP_TASK2
0x80031d80: 32
0x8001ada0: 32
0x8002cfe0: 32
0x8018f1a8: 8
0x80207458: 8 # align RunQueue to 0x001251d8
0x800b9140: 32 # align gam_win_moji1_tex to 32 bytes
0x801f71c0: 32 # align texture_buffer_data to 32 bytes
+13
View File
@@ -101,6 +101,11 @@ jaudio_NES/internal/cpubuf.c:
jaudio_NES/internal/playercall.c:
.text: [0x80019dc0, 0x8001a0c0]
.bss: [0x801864d0,0x80186590]
jaudio_NES/internal/dvdthread.c:
.text: [0x8001a0c0, 0x8001ada0]
.data: [0x800d0278, 0x800d0298]
.bss: [0x80186590, 0x8018f1a8]
.sbss: [0x80218498, 0x802184e8]
jaudio_NES/internal/sub_sys.c:
.text: [0x80024ae0, 0x80026120]
.rodata: [0x800aa700, 0x800aa720]
@@ -117,6 +122,14 @@ jaudio_NES/internal/track.c:
.data: [0x800d36f0, 0x800d3b00]
.sbss: [0x80218540, 0x80218548]
.sdata2: [0x80218ec8, 0x80218f08]
jaudio_NES/internal/dspboot.c:
.text: [0x8002c920, 0x8002cd20]
.rodata: [0x800aa780, 0x800aa7a0]
.data: [0x800d3b00, 0x800d5500]
.sdata2: [0x80218f08, 0x80218f10]
jaudio_NES/internal/dspproc.c:
.text: [0x8002cd20, 0x8002cfe0]
.sdata: [0x80217c18, 0x80217c20]
jaudio_NES/internal/random.c:
.text: [0x80031ce0, 0x80031d80]
.sdata: [0x80217c38, 0x80217c40]
+1
View File
@@ -53,6 +53,7 @@ void DSPHalt();
void DSPSendMailToDSP(u32 mail);
u32 DSPCheckMailToDSP();
u32 DSPCheckMailFromDSP();
u32 DSPReadMailFromDSP();
u32 DSPGetDMAStatus();
DSPTaskInfo* DSPAddTask(DSPTaskInfo* task);
+14
View File
@@ -3,6 +3,20 @@
#include "types.h"
typedef struct STRUCT_DSP_TASK2 {
/* 0x00 */ u16* iram_mmem_addr;
/* 0x04 */ u32 iram_length;
/* 0x08 */ u16 iram_addr;
/* 0x0A */ u16* dram_mmem_addr;
/* 0x0E */ u32 dram_length;
/* 0x12 */ u16 dram_addr;
/* 0x16 */ u16 dsp_init_vector;
}DSPTaskInfo2;
extern s32 __DSPCheckMXICBoot2(DSPTaskInfo2* task);
extern void DSPInit2(DSPTaskInfo2* task);
extern void DspBoot(void);
extern u16 jdsp[];
#endif
+1
View File
@@ -5,5 +5,6 @@
extern u32 DSPReleaseHalt(void);
extern void DsyncFrame(u32 subframes, u32 dspbuf_start, u32 dspbuf_end);
extern void DwaitFrame();
#endif
+20 -6
View File
@@ -5,12 +5,26 @@
#include "dolphin/dvd.h"
typedef void (*Jac_DVDCallback)(u32);
typedef s32 (*TaskCallback)(void*);
typedef void (*ErrorCallback)(char*, u8* addr);
extern void DVDT_ExtendPath(char* dst, char* ext);
extern s32 DVDT_AddTaskHigh(TaskCallback callback, void* stackp, size_t len);
extern s32 DVDT_AddTask(TaskCallback callback, void* stackp, size_t len);
extern void jac_dvdproc_init();
extern void* jac_dvdproc(void*);
extern s32 DVDT_LoadtoARAM_Main(void* arg);
extern s32 DVDT_LoadtoARAM(u32 owner, char* name, u32 dst, u32 src, u32 length, u32* status, Jac_DVDCallback callback);
extern s32 DVDT_ARAMtoDRAM_Main(void* arg);
extern s32 DVDT_DRAMtoARAM_Main(void* arg);
extern s32 DVDT_ARAMtoDRAM(u32 owner, u32 dst, u32 src, u32 length, u32* status, Jac_DVDCallback callback);
extern s32 DVDT_DRAMtoARAM(u32 owner, u32 dst, u32 src, u32 length, u32* status, Jac_DVDCallback callback);
extern s32 DVDT_CheckFile(char* file);
extern void DVDT_CheckPass(u32 owner, u32* status, Jac_DVDCallback callback);
extern s32 Jac_CheckFile(char* file);
extern void Jac_RegisterDVDErrorCallback(ErrorCallback callback);
extern s32 Jac_RegisterFastOpen(char* file);
extern BOOL Jac_DVDOpen(char* name, DVDFileInfo* info);
extern s32 DVDT_LoadtoARAM(u32 owner, char* path, u32 dram, u32 aram, u32 len, u32* outLen, Jac_DVDCallback callback);
extern s32 DVDT_DRAMtoARAM(u32 owner, u32 dram, u32 aram, u32 len, u32* outLen, Jac_DVDCallback callback);
extern s32 DVDT_ARAMtoDRAM(u32 owner, u32 dram, u32 aram, u32 len, u32* outLen, Jac_DVDCallback callback);
extern u32 Jac_CheckFile(char* path);
extern void* jac_dvdproc(void* param);
extern void jac_dvdproc_init(void);
#endif
+380
View File
@@ -0,0 +1,380 @@
#include "jaudio_NES/dspboot.h"
#include "jaudio_NES/dspproc.h"
#include "dolphin/dsp.h"
#include "dolphin/os.h"
#include "dolphin/hw_regs.h"
u16 jdsp[] ATTRIBUTE_ALIGN(32) = {
0x029F, 0x0010, 0x0000, 0x0000, 0x02FF, 0x0000, 0x02FF, 0x0000, 0x02FF, 0x0000, 0x02FF, 0x0000, 0x02FF, 0x0000,
0x02FF, 0x0000, 0x1302, 0x1303, 0x1204, 0x1305, 0x1306, 0x8E00, 0x8C00, 0x8B00, 0x009E, 0xFFFF, 0x1D1E, 0x1D3E,
0x1D5E, 0x1D7E, 0x0092, 0x00FF, 0x8100, 0x009F, 0x1000, 0x0080, 0x0000, 0x005F, 0x1B1E, 0x26FF, 0x16FC, 0x8888,
0x16FD, 0x1111, 0x26FC, 0x02A0, 0x8000, 0x029C, 0x002C, 0x8100, 0x8900, 0x26FE, 0x02C0, 0x8000, 0x029C, 0x0031,
0x27FF, 0x00FF, 0x0345, 0x1FFE, 0x0340, 0x00FF, 0x00FF, 0x0344, 0x1479, 0x0240, 0x007E, 0x0200, 0x0062, 0x00FE,
0x0343, 0x1C1E, 0x170F, 0x009E, 0x8000, 0x00DC, 0x0343, 0x02BF, 0x005A, 0x029F, 0x0031, 0x26FE, 0x02C0, 0x8000,
0x029C, 0x0051, 0x24FF, 0x1B1E, 0x1B1C, 0x02DF, 0x2EFC, 0x2CFD, 0x26FC, 0x02A0, 0x8000, 0x029C, 0x005C, 0x02DF,
0x029F, 0x0049, 0x029F, 0x031D, 0x029F, 0x04BF, 0x029F, 0x0031, 0x029F, 0x00E1, 0x029F, 0x00F3, 0x029F, 0x06C4,
0x029F, 0x0678, 0x029F, 0x06E0, 0x029F, 0x06A8, 0x029F, 0x0049, 0x029F, 0x0721, 0x029F, 0x0BA7, 0x029F, 0x0049,
0x193E, 0x193C, 0x2FCD, 0x0F00, 0x2FC9, 0x2ECE, 0x2CCF, 0x1FE0, 0x1501, 0x2FCB, 0x02BF, 0x0091, 0x02DF, 0x193E,
0x193C, 0x2FCD, 0x0F01, 0x029F, 0x0082, 0x26C9, 0x02A0, 0x0004, 0x029C, 0x0091, 0x02DF, 0x193E, 0x193C, 0x00FF,
0xFFCD, 0x0F00, 0x00FF, 0xFFC9, 0x00FE, 0xFFCE, 0x00FC, 0xFFCF, 0x1FE0, 0x1501, 0x00FF, 0xFFCB, 0x02DF, 0x00DE,
0xFFC9, 0x02A0, 0x0004, 0x029C, 0x00A7, 0x02DF, 0x193E, 0x193C, 0x0240, 0x7FFF, 0x02BF, 0x00BC, 0x007A, 0x00BA,
0x26D3, 0x1B3E, 0x0000, 0x0000, 0x0000, 0x02DF, 0x1C3F, 0x009F, 0x0005, 0x2FD1, 0x1F5E, 0x1F1C, 0x2ED4, 0x2CD5,
0x8900, 0x1FA0, 0x4C00, 0x0200, 0x0030, 0x2ED6, 0x2CD7, 0x1FDA, 0x1F98, 0x147F, 0x2ED8, 0x2CD9, 0x1F40, 0x02DF,
0x193E, 0x193C, 0x0260, 0x8000, 0x02BF, 0x00BC, 0x007A, 0x00DF, 0x193E, 0x2ED3, 0x0000, 0x0000, 0x0000, 0x0000,
0x02DF, 0x0080, 0x0346, 0x02BF, 0x0051, 0x02BF, 0x0051, 0x0081, 0x0346, 0x00DF, 0x0349, 0x0340, 0xFFFF, 0x00C0,
0x0345, 0x02BF, 0x007E, 0x029F, 0x0049, 0x0080, 0x0346, 0x02BF, 0x0051, 0x02BF, 0x0051, 0x0081, 0x0346, 0x00DF,
0x0349, 0x0340, 0xFFFF, 0x00C0, 0x0345, 0x02BF, 0x008B, 0x029F, 0x0049, 0x0092, 0x00FF, 0x2FD1, 0x0340, 0x0003,
0x1F7F, 0x1F5E, 0x1F1C, 0x0200, 0x0010, 0x2ED4, 0x2CD5, 0x8900, 0x1FA0, 0x4C00, 0x0200, 0x0030, 0x2ED6, 0x2CD7,
0x1FDA, 0x1F98, 0x1FFB, 0x7900, 0x02CA, 0x2ED8, 0x2CD9, 0x02DF, 0x1C23, 0x197E, 0x191B, 0xD858, 0x1120, 0x012A,
0xDCD3, 0x6231, 0xDCD3, 0x6231, 0x4900, 0x1108, 0x0130, 0xDCD3, 0x6231, 0xDCD3, 0x6231, 0x02DF, 0x8F00, 0x1C03,
0x00DB, 0x038E, 0x009A, 0x0004, 0x1978, 0xA843, 0xAE00, 0x1128, 0x0140, 0x38C3, 0xAE30, 0x38C3, 0xAE30, 0x8E00,
0x02DF, 0x00F9, 0x0361, 0x1FC0, 0x0200, 0xFFFC, 0x1C1E, 0x1C5E, 0x0083, 0x043C, 0x197E, 0x197F, 0x80A2, 0x64A3,
0x6530, 0x1B1F, 0x1C02, 0x8100, 0x00DE, 0x0402, 0x00FE, 0x0362, 0x1474, 0x1F7E, 0x1F3C, 0x8900, 0x00DD, 0x0430,
0x1504, 0x0604, 0x0290, 0x01B8, 0x1FDD, 0x0082, 0x0C00, 0x1050, 0x4B2A, 0x1FBE, 0x00FE, 0x0360, 0x8900, 0x1FBE,
0x009A, 0xFFF8, 0x009B, 0x00FC, 0x00D8, 0x0361, 0x0082, 0x0C00, 0x0083, 0x0C00, 0x195E, 0x3480, 0x1128, 0x017D,
0x367A, 0x35B3, 0x3772, 0x34BB, 0x8A00, 0x0082, 0x0C00, 0x00DD, 0x0430, 0x1504, 0x1FE0, 0x8100, 0x00DE, 0x0362,
0x1474, 0x1F7E, 0x1F3C, 0x8F00, 0x1943, 0x4BC3, 0x90C3, 0xF2C3, 0xF2C3, 0xF200, 0xFE00, 0x1C1F, 0x1943, 0x4BC3,
0x90C3, 0x114E, 0x019F, 0xF2C3, 0xF2C3, 0xF231, 0x1C1F, 0x1943, 0x4BC3, 0x92C3, 0xF2C3, 0xF2C3, 0xF231, 0xFE00,
0x1B3E, 0x8B00, 0x8E00, 0x00FE, 0x0433, 0x1C1F, 0x150C, 0x0340, 0x0FFF, 0x00FF, 0x0430, 0x0083, 0x043C, 0x191E,
0x191F, 0x80A0, 0x64A1, 0x6533, 0x1B7F, 0x02DF, 0x1FE0, 0x1C1F, 0x1128, 0x01C1, 0x4B70, 0x1B3E, 0x1C1F, 0x4B70,
0x1B3E, 0x1C1F, 0x029F, 0x01A7, 0x8A00, 0x0083, 0x03E8, 0x191E, 0x191A, 0x1006, 0x64A0, 0x1B7E, 0x1B7A, 0x0080,
0x03E8, 0x0088, 0x0007, 0x1150, 0x01DE, 0x1C61, 0x84C3, 0xF2C3, 0xF2C3, 0xF2C3, 0xF2C3, 0xF2C3, 0xF2C3, 0xF2C3,
0xF200, 0xFE00, 0x1B3E, 0x0088, 0xFFFF, 0x8B00, 0x02DF, 0x8A00, 0x05FE, 0x0083, 0x03E8, 0x191E, 0x191A, 0x005F,
0x64A0, 0x1B7E, 0x1B7A, 0x0080, 0x03E8, 0x0501, 0x1D1F, 0x1150, 0x01F9, 0x1C61, 0x84C3, 0x005F, 0xF2C3, 0xF200,
0xFE00, 0x1B3E, 0x0088, 0xFFFF, 0x8B00, 0x02DF, 0x0083, 0x03E8, 0x191E, 0x191A, 0x64A0, 0x64A0, 0x1B7E, 0x1B7A,
0x0080, 0x03E8, 0x0088, 0x0003, 0x0085, 0x0000, 0x0087, 0x0000, 0x1FC2, 0x195B, 0x1959, 0x195F, 0x195A, 0x1C5E,
0x1FDA, 0x1C61, 0x8A00, 0x8F00, 0x191A, 0xB850, 0xE250, 0xEA50, 0xE8E8, 0xB650, 0x1127, 0x0229, 0xE3A8, 0x197E,
0xE850, 0xEAF8, 0xBF50, 0xE2A9, 0x197F, 0xEA50, 0xE8E8, 0xB650, 0xE3A8, 0x197E, 0xE850, 0xEAF8, 0xBF00, 0x1BFF,
0x197F, 0x8E00, 0x8B00, 0x0088, 0xFFFF, 0x1B5B, 0x1B59, 0x1B5F, 0x1B5E, 0x02DF, 0x8100, 0x1F5E, 0x00D8, 0x0402,
0x00DC, 0x0430, 0x0080, 0x0520, 0x00DF, 0x0480, 0x1501, 0x0340, 0x007E, 0x0300, 0x024F, 0x1C5F, 0x175F, 0x00FC,
0x0430, 0x029F, 0x054A, 0x029F, 0x0270, 0x029F, 0x02AB, 0x029F, 0x0293, 0x029F, 0x0280, 0x029F, 0x02B9, 0x029F,
0x026F, 0x029F, 0x02D7, 0x029F, 0x02DA, 0x029F, 0x026F, 0x029F, 0x026F, 0x029F, 0x02F8, 0x029F, 0x02B1, 0x029F,
0x02B5, 0x029F, 0x026F, 0x029F, 0x026F, 0x029F, 0x026F, 0x02DF, 0x1401, 0x009B, 0xC000, 0x0099, 0x4000, 0x1150,
0x027D, 0x02C0, 0x0001, 0x027C, 0x1B1B, 0x027D, 0x1B19, 0x4800, 0x147F, 0x02DF, 0x1402, 0x8900, 0x1FB8, 0x1501,
0x009B, 0xC000, 0x0099, 0x4000, 0x1150, 0x0290, 0x02C0, 0x0003, 0x027C, 0x1B1B, 0x027D, 0x1B19, 0x4C00, 0x147E,
0x02DF, 0x1401, 0x0081, 0x0CA0, 0x009B, 0xC000, 0x0099, 0x4000, 0x8900, 0x0082, 0x0000, 0x1150, 0x02A8, 0x02C0,
0x0001, 0x027C, 0x1B1B, 0x027D, 0x1B19, 0x183D, 0x4900, 0x1FE2, 0x4C39, 0x147F, 0x02DF, 0x8900, 0x1FB8, 0x157F,
0x1050, 0x4C20, 0x02DF, 0x0082, 0x0180, 0x029F, 0x02BB, 0x0082, 0x01C0, 0x029F, 0x02BB, 0x0082, 0x0140, 0x008A,
0x003F, 0x0086, 0x0000, 0x1406, 0x8900, 0x1FB8, 0x1505, 0x009B, 0x003F, 0x009A, 0x0000, 0x3600, 0x1CDE, 0x001A,
0x3400, 0x1150, 0x02D1, 0x4C4A, 0x3606, 0x1CDE, 0x340E, 0x1B19, 0x1FC2, 0x147A, 0x008A, 0xFFFF, 0x02DF, 0x1050,
0x1B18, 0x02DF, 0x0082, 0x0100, 0x008A, 0x003F, 0x0086, 0x0000, 0x1406, 0x8900, 0x1FB8, 0x1505, 0x009B, 0x003F,
0x009A, 0x0000, 0x3600, 0x1CDE, 0x001A, 0x3400, 0x1150, 0x02F2, 0x4C4A, 0x3606, 0x1CDE, 0x340E, 0x1B19, 0x1FC2,
0x147A, 0x008A, 0xFFFF, 0x02DF, 0x0082, 0x0100, 0x008A, 0x003F, 0x0086, 0x0000, 0x0081, 0x0CA0, 0x1406, 0x8900,
0x1FB8, 0x1505, 0x009B, 0x003F, 0x009A, 0x0000, 0x3600, 0x1CDE, 0x001A, 0x3400, 0x1150, 0x0317, 0x1939, 0xA000,
0x140A, 0x4E00, 0x1476, 0x4C4A, 0x3606, 0x1CDE, 0x340E, 0x1B19, 0x1FC2, 0x147A, 0x008A, 0xFFFF, 0x02DF, 0x0080,
0x0380, 0x02BF, 0x0051, 0x02BF, 0x0051, 0x02BF, 0x0051, 0x02BF, 0x0051, 0x0081, 0x0382, 0x009F, 0x0000, 0x0080,
0x0200, 0x02BF, 0x007E, 0x0081, 0x0384, 0x009F, 0x0300, 0x0080, 0x0020, 0x02BF, 0x007E, 0x02BF, 0x03A0, 0x00DE,
0x0345, 0x00FE, 0x0342, 0x02BF, 0x0AB1, 0x029F, 0x0049, 0x00DE, 0x0344, 0x1404, 0x0200, 0x03A8, 0x1C1E, 0x02BF,
0x0051, 0x02BF, 0x0051, 0x02BF, 0x0051, 0x00DE, 0x0345, 0x1B1E, 0x00DE, 0x0344, 0x0200, 0x03A4, 0x1C1E, 0x8100,
0x1B1E, 0x02DF, 0x00DE, 0x0344, 0x1404, 0x0200, 0x03B0, 0x1C1E, 0x02BF, 0x0051, 0x02BF, 0x0051, 0x02BF, 0x0051,
0x02BF, 0x0051, 0x02DF, 0x0081, 0x034C, 0x009F, 0x0400, 0x0080, 0x00C0, 0x02BF, 0x007E, 0x02DF, 0x0081, 0x034C,
0x009F, 0x0400, 0x0080, 0x0080, 0x0081, 0x034C, 0x193E, 0x193C, 0x0098, 0x0000, 0x7000, 0x02BF, 0x008D, 0x02DF,
0x191E, 0x191A, 0x005F, 0x64A0, 0x1B7E, 0x1B7A, 0x02DF, 0x191E, 0x191A, 0x007F, 0x038E, 0x32B2, 0x65A0, 0x33BA,
0x64A1, 0x0000, 0x02DF, 0x8A00, 0x157F, 0x1C20, 0x1C03, 0x193A, 0x9051, 0x925B, 0x007F, 0x039D, 0x4651, 0x92B2,
0x4651, 0x92B2, 0x8B00, 0x02DF, 0x0083, 0xFFA0, 0x0080, 0x0300, 0x009F, 0x000E, 0x1108, 0x03AB, 0x191E, 0x1B7E,
0x191E, 0x1B7E, 0x02DF, 0x0080, 0x0F40, 0x0082, 0x0D00, 0x0083, 0x0D60, 0x009F, 0x0028, 0x02BF, 0x0387, 0x8900,
0x009E, 0x0050, 0x0080, 0x0CA0, 0x005E, 0x1B1F, 0x0080, 0x0F40, 0x005E, 0x1B1F, 0x0080, 0x0FA0, 0x005E, 0x1B1F,
0x0080, 0x0B00, 0x005E, 0x1B1F, 0x0080, 0x09A0, 0x005E, 0x1B1F, 0x02DF, 0x00C0, 0x03A0, 0x191A, 0x00DF, 0x03A1,
0x009B, 0x00A0, 0x0081, 0x0393, 0x18BC, 0xB871, 0xBC00, 0x0080, 0x0050, 0x0508, 0x02BF, 0x0080, 0x00DE, 0x0390,
0x02A0, 0x0001, 0x029D, 0x03EE, 0x0080, 0x0398, 0x009E, 0x0008, 0x00C1, 0x03A1, 0x02BF, 0x01C4, 0x009F, 0x0050,
0x00C0, 0x03A1, 0x8100, 0x00DE, 0x0394, 0xB100, 0x0295, 0x03FD, 0x1C7E, 0x00D8, 0x0395, 0x02BF, 0x0391, 0x009F,
0x0050, 0x00C0, 0x03A1, 0x8100, 0x00DE, 0x0396, 0xB100, 0x0295, 0x040C, 0x1C7E, 0x00D8, 0x0397, 0x02BF, 0x0391,
0x00DE, 0x0390, 0x02A0, 0x0002, 0x02DD, 0x0080, 0x0398, 0x009E, 0x0008, 0x00C1, 0x03A1, 0x02BF, 0x01C4, 0x02DF,
0x009F, 0x0DC0, 0x00FF, 0x03A1, 0x009F, 0x03A8, 0x00FF, 0x03A2, 0x009F, 0x03A4, 0x00FF, 0x03A0, 0x1104, 0x044F,
0x00C0, 0x03A2, 0x0083, 0x0390, 0x009F, 0x000E, 0x02BF, 0x0380, 0x00DA, 0x0390, 0x8600, 0x0295, 0x0440, 0x00DF,
0x03A1, 0x1C7F, 0x0550, 0x1C1F, 0x009F, 0x0006, 0x02BF, 0x0380, 0x02BF, 0x03CF, 0x00DE, 0x03A2, 0x0410, 0x00FE,
0x03A2, 0x00DE, 0x03A1, 0x0460, 0x00FE, 0x03A1, 0x00DE, 0x03A0, 0x7400, 0x00FE, 0x03A0, 0x0000, 0x02DF, 0x00C0,
0x03A0, 0x181A, 0x8100, 0x181E, 0x00DB, 0x0391, 0x7400, 0xD100, 0x0270, 0x8100, 0x1B1E, 0x00DF, 0x03A1, 0x009B,
0x00A0, 0x0081, 0x0393, 0x18BC, 0xB871, 0xBC00, 0x0080, 0x0050, 0x02BF, 0x008D, 0x02DF, 0x009F, 0x0DC0, 0x00FF,
0x03A1, 0x009F, 0x03A8, 0x00FF, 0x03A2, 0x009F, 0x03A4, 0x00FF, 0x03A0, 0x1104, 0x0497, 0x00C0, 0x03A2, 0x0083,
0x0390, 0x009F, 0x000E, 0x02BF, 0x0380, 0x00DA, 0x0390, 0x8600, 0x0295, 0x0488, 0x02BF, 0x0451, 0x00DE, 0x03A2,
0x0410, 0x00FE, 0x03A2, 0x00DE, 0x03A1, 0x0460, 0x00FE, 0x03A1, 0x00DE, 0x03A0, 0x7400, 0x00FE, 0x03A0, 0x0000,
0x02DF, 0x0081, 0x0386, 0x009F, 0x03A8, 0x0080, 0x0040, 0x02BF, 0x007E, 0x02DF, 0x191E, 0x189C, 0x4800, 0x1B1E,
0x1B1C, 0x02DF, 0x8100, 0x26FE, 0x02C0, 0x8000, 0x029C, 0x04A9, 0x26FF, 0x02DF, 0x0080, 0x0388, 0x0081, 0x0051,
0x173F, 0x00DE, 0x0344, 0x00FE, 0x0341, 0x00DE, 0x0345, 0x00FE, 0x038E, 0x173F, 0x02DF, 0x02BF, 0x04B0, 0x009E,
0x8000, 0x00DC, 0x0341, 0x02BF, 0x005A, 0x8100, 0x00FE, 0x0355, 0x02BF, 0x0499, 0x00DE, 0x0341, 0x007E, 0x0675,
0x02BF, 0x03AD, 0x02BF, 0x041A, 0x02BF, 0x0B77, 0x02BF, 0x04A8, 0x8100, 0x00FE, 0x0354, 0x00DE, 0x0342, 0x007E,
0x0629, 0x00D8, 0x0354, 0x009A, 0x0180, 0x8100, 0x00DE, 0x0380, 0x00DC, 0x0381, 0x9000, 0x9400, 0x00FE, 0x034C,
0x00FC, 0x034D, 0x02BF, 0x0367, 0x00DA, 0x0400, 0x8600, 0x0295, 0x0624, 0x00DA, 0x0401, 0x8600, 0x0294, 0x0624,
0x00DA, 0x0433, 0x00FA, 0x03F8, 0x00DA, 0x0406, 0x8600, 0x0294, 0x0A1F, 0x8100, 0x00DE, 0x0480, 0x0605, 0x0295,
0x0517, 0x0609, 0x0295, 0x0517, 0x0620, 0x0295, 0x088E, 0x0621, 0x0295, 0x0897, 0x0608, 0x0295, 0x0A27, 0x029F,
0x023A, 0x00D8, 0x0402, 0x8100, 0x8900, 0x00DC, 0x0430, 0x8D00, 0x0099, 0x0050, 0xA000, 0xA400, 0x1404, 0x8C00,
0x1FFE, 0x0083, 0x0580, 0x8100, 0x00DE, 0x0480, 0x0605, 0x0295, 0x053C, 0x00DA, 0x0481, 0x8600, 0x0295, 0x0540,
0x00DA, 0x0489, 0x8100, 0x00DE, 0x048B, 0x3800, 0x0240, 0x000F, 0x0295, 0x0540, 0x02BF, 0x07C8, 0x029F, 0x0542,
0x02BF, 0x0927, 0x0080, 0x0580, 0x0081, 0x0520, 0x0099, 0x0000, 0x02BF, 0x0143, 0x00DA, 0x04A8, 0x8600, 0x0295,
0x0553, 0x0080, 0x0520, 0x02BF, 0x0B51, 0x009E, 0x0520, 0x00FE, 0x038F, 0x8900, 0x00DF, 0x0484, 0x0340, 0x001F,
0xB900, 0x0295, 0x0583, 0x00DE, 0x038F, 0x5C00, 0x00FE, 0x038F, 0x1C7E, 0x0080, 0x0440, 0x05FE, 0x02BF, 0x0380,
0x0080, 0x0490, 0x00C1, 0x038F, 0x8900, 0x00DF, 0x0484, 0x0340, 0x001F, 0x02BF, 0x01E3, 0x00DE, 0x038F, 0x0450,
0x1C1E, 0x0083, 0x0440, 0x8900, 0x00DF, 0x0484, 0x0340, 0x001F, 0x05FE, 0x02BF, 0x0380, 0x00DE, 0x0484, 0x0240,
0x0020, 0x0295, 0x05A5, 0x0080, 0x04A4, 0x00C1, 0x038F, 0x0082, 0x0454, 0x0083, 0x04A7, 0x18FA, 0x8600, 0x0294,
0x05A3, 0x18FA, 0x8600, 0x0294, 0x05A3, 0x18FA, 0x8600, 0x0294, 0x05A3, 0x8100, 0x18FE, 0x0280, 0x7FFF, 0x0295,
0x05A5, 0x02BF, 0x01FE, 0x8100, 0x1C9E, 0x1CDE, 0x7400, 0x1CFE, 0x8100, 0x00DE, 0x0407, 0xB100, 0x0295, 0x05BD,
0x00C3, 0x038F, 0x0007, 0x0080, 0x0477, 0x0084, 0xFFFF, 0x0087, 0xFFFF, 0x199A, 0x6554, 0x005E, 0x65AD, 0x00DA,
0x0485, 0x8600, 0x0295, 0x05D3, 0x8900, 0x0086, 0x0005, 0x0082, 0x040A, 0x1106, 0x05CB, 0x18DE, 0x147F, 0x4D36,
0xB900, 0x0294, 0x05D3, 0x009A, 0x0001, 0x00FA, 0x0401, 0x8F00, 0x0086, 0x0002, 0x0082, 0x0408, 0x1106, 0x0603,
0x8100, 0x195E, 0x1200, 0xB100, 0x0275, 0x1300, 0x1C7E, 0x195E, 0x195F, 0x5C00, 0x14FB, 0x1F5E, 0x1F1C, 0x185E,
0x0240, 0x00FF, 0x1F7E, 0x185E, 0x1478, 0x009C, 0x0000, 0xD100, 0x0295, 0x05F8, 0x185E, 0x0272, 0x7400, 0x0271,
0x7800, 0x1A5E, 0x0006, 0x00DE, 0x038F, 0x5600, 0x029D, 0x0601, 0x1C1E, 0x02BF, 0x0120, 0x0000, 0x1B5F, 0x000A,
0x8E00, 0x8100, 0x00DE, 0x0407, 0xB100, 0x0295, 0x061A, 0x00C3, 0x038F, 0x0087, 0x004F, 0x001F, 0x0080, 0x0477,
0x0084, 0xFFFF, 0x0087, 0xFFFF, 0x19FA, 0x6557, 0x005E, 0x65AF, 0x00DA, 0x0406, 0x8600, 0x0294, 0x0622, 0x8100,
0x00FE, 0x0404, 0x02BF, 0x0370, 0x00DE, 0x0354, 0x7400, 0x00FE, 0x0354, 0x0000, 0x16FB, 0x0001, 0x02BF, 0x0AD2,
0x02BF, 0x0AE5, 0x02BF, 0x0B3C, 0x0080, 0x09A0, 0x0083, 0x0D00, 0x009F, 0x0050, 0x0098, 0x5A82, 0x02BF, 0x0391,
0x0080, 0x09A0, 0x0083, 0x0D60, 0x009F, 0x0050, 0x02BF, 0x0391, 0x0083, 0x0D00, 0x02BF, 0x0132, 0x0081, 0x0388,
0x009F, 0x0D00, 0x0080, 0x0050, 0x02BF, 0x008B, 0x0080, 0x0FA0, 0x0083, 0x0D60, 0x009F, 0x0050, 0x0098, 0x8000,
0x02BF, 0x0391, 0x0083, 0x0D60, 0x02BF, 0x0132, 0x0081, 0x038A, 0x009F, 0x0D60, 0x0080, 0x0050, 0x02BF, 0x008B,
0x009A, 0x0000, 0x0098, 0x00A0, 0x0080, 0x0388, 0x02BF, 0x04A2, 0x0080, 0x038A, 0x02BF, 0x04A2, 0x02BF, 0x046B,
0x0000, 0x0000, 0x029F, 0x0031, 0x0080, 0x0346, 0x02BF, 0x0051, 0x02BF, 0x0051, 0x0081, 0x0346, 0x193E, 0x193C,
0x009F, 0x0400, 0x00C0, 0x0345, 0x02BF, 0x0080, 0x0081, 0x0348, 0x193E, 0x193C, 0x009F, 0x0800, 0x00C0, 0x0345,
0x02BF, 0x0080, 0x0081, 0x0346, 0x193E, 0x193C, 0x009F, 0x0800, 0x00C0, 0x0345, 0x02BF, 0x008D, 0x0081, 0x0348,
0x193E, 0x193C, 0x009F, 0x0400, 0x00C0, 0x0345, 0x02BF, 0x008D, 0x029F, 0x0049, 0x0080, 0x0346, 0x02BF, 0x0051,
0x02BF, 0x0051, 0x0081, 0x0346, 0x193E, 0x193C, 0x009F, 0x0400, 0x00C0, 0x0345, 0x02BF, 0x0080, 0x0081, 0x0348,
0x193E, 0x193C, 0x009F, 0x0400, 0x00C0, 0x0345, 0x02BF, 0x008D, 0x029F, 0x0049, 0x0080, 0x0346, 0x02BF, 0x0051,
0x02BF, 0x0051, 0x0081, 0x0346, 0x193E, 0x193C, 0x009F, 0x0400, 0x00C0, 0x0345, 0x02BF, 0x00B0, 0x0081, 0x0348,
0x193E, 0x193C, 0x009F, 0x0400, 0x00C0, 0x0345, 0x02BF, 0x008D, 0x029F, 0x0049, 0x0080, 0x0346, 0x02BF, 0x0051,
0x02BF, 0x0051, 0x0081, 0x0346, 0x193E, 0x193C, 0x009F, 0x0400, 0x00C0, 0x0344, 0x02BF, 0x0080, 0x0081, 0x0348,
0x193E, 0x193C, 0x009F, 0x0800, 0x00C0, 0x0344, 0x02BF, 0x0080, 0x0080, 0x0400, 0x0083, 0x0800, 0x0084, 0x0000,
0x00DA, 0x0345, 0x00DF, 0x0344, 0x8F00, 0x197B, 0xB800, 0x197B, 0x007F, 0x070D, 0x199E, 0xBC00, 0x80B2, 0x0000,
0x8E00, 0x0081, 0x0346, 0x193E, 0x193C, 0x009F, 0x0400, 0x00C0, 0x0344, 0x02BF, 0x008D, 0x009E, 0x8200, 0x00DC,
0x0344, 0x02BF, 0x005A, 0x029F, 0x0031, 0x0080, 0x0346, 0x02BF, 0x0051, 0x0081, 0x0346, 0x009F, 0x0400, 0x00C0,
0x0345, 0x02BF, 0x007E, 0x02BF, 0x8644, 0x029F, 0x0049, 0x009E, 0x0458, 0x2231, 0x4400, 0x1C1E, 0x1FDA, 0x3280,
0x7400, 0x2232, 0x4400, 0x0090, 0x0000, 0x029F, 0x074E, 0x009E, 0x0458, 0x2231, 0x4400, 0x1C1E, 0x1FDA, 0x3280,
0x7400, 0x2232, 0x4400, 0x0090, 0x0000, 0x8200, 0x0270, 0x1FDF, 0x1F3E, 0x02BF, 0x07BB, 0x2634, 0x2435, 0x7200,
0x5300, 0x2E34, 0x2C35, 0x02DF, 0x8100, 0x2234, 0x2035, 0x4800, 0x147C, 0x2E36, 0x2C37, 0x2380, 0x8D00, 0xC810,
0xAE00, 0x8C00, 0x2035, 0xF000, 0x4E00, 0x238C, 0x218D, 0x4A00, 0x2E38, 0x2C39, 0x1FD8, 0x0240, 0x000F, 0x2E31,
0x268A, 0x248B, 0x5800, 0x2E3A, 0x2C3B, 0x02DF, 0x8100, 0x2601, 0xB100, 0x0294, 0x07AF, 0x2236, 0x2037, 0x8100,
0x268A, 0x248B, 0x147C, 0x5800, 0x0295, 0x078B, 0x02BF, 0x0812, 0x0E10, 0x2E32, 0x8100, 0x2E31, 0x02DF, 0x228A,
0x208B, 0x8100, 0x2634, 0x2435, 0x5800, 0x0290, 0x0798, 0x02BF, 0x0812, 0x263B, 0x029F, 0x0787, 0x8100, 0x2681,
0xB100, 0x0295, 0x07B0, 0x2688, 0x2489, 0x2E34, 0x2C35, 0x0E10, 0x2E32, 0x02BF, 0x0758, 0x2682, 0x2E67, 0x2683,
0x2E66, 0x8100, 0x00FE, 0x0362, 0x02BF, 0x0812, 0x02DF, 0x8100, 0x0081, 0x0458, 0x1010, 0x1B3E, 0x7400, 0x2E01,
0x0E10, 0x2E32, 0x8100, 0x2E31, 0x02DF, 0xB100, 0x02D5, 0x04FE, 0x1F1E, 0x191E, 0x0291, 0x07C6, 0x191A, 0x0058,
0x64A0, 0x6433, 0x1B7E, 0x02DF, 0x0092, 0x0004, 0x02BF, 0x0758, 0x8100, 0x00FE, 0x0362, 0x8100, 0x263A, 0x243B,
0xB100, 0x0294, 0x07E5, 0x02BF, 0x0776, 0x2231, 0x8600, 0x0294, 0x07E2, 0x02BF, 0x073F, 0xB900, 0x0295, 0x080F,
0x02BF, 0x0758, 0x8100, 0x263A, 0x243B, 0x1F1F, 0x009A, 0x0000, 0x5800, 0x0290, 0x07FC, 0x8100, 0x2631, 0xB100,
0x0294, 0x07F6, 0x02BF, 0x0776, 0x2201, 0x8600, 0x0294, 0x080C, 0x02BF, 0x0731, 0x02BF, 0x0758, 0x029F, 0x07CF,
0x8100, 0x2631, 0xB100, 0x0294, 0x0803, 0x02BF, 0x0776, 0x02BF, 0x073F, 0xB900, 0x0295, 0x080F, 0x02BF, 0x0758,
0x029F, 0x07FC, 0x8100, 0x005F, 0x1B7E, 0x0092, 0x00FF, 0x02DF, 0x00FF, 0x0360, 0x00DA, 0x0362, 0x8600, 0x0294,
0x0824, 0x0A01, 0x00FA, 0x0362, 0x2638, 0x2439, 0x009F, 0x0005, 0x02BF, 0x0105, 0x0092, 0x0004, 0x0080, 0xFFD3,
0x0084, 0x0000, 0x199E, 0x1FFE, 0x1401, 0x0240, 0x001E, 0x0200, 0x0300, 0x1C3E, 0x157C, 0x0340, 0x000F, 0x0A11,
0x5500, 0x8100, 0x2680, 0x0605, 0x0295, 0x0852, 0x009A, 0x00F0, 0x009B, 0x000F, 0x0082, 0x0370, 0x1998, 0x6000,
0x1107, 0x0849, 0x3400, 0x1408, 0x6032, 0x3644, 0x140C, 0x6032, 0x3400, 0x1408, 0x6032, 0x3600, 0x140C, 0x1B5E,
0x029F, 0x0872, 0x009A, 0xC000, 0x0082, 0x0370, 0x1998, 0x6000, 0x1103, 0x0865, 0x1408, 0x3400, 0x6032, 0x140A,
0x3400, 0x6032, 0x140C, 0x3400, 0x6032, 0x140E, 0x3444, 0x6032, 0x1408, 0x3400, 0x6032, 0x140A, 0x3400, 0x6032,
0x140C, 0x3400, 0x6032, 0x140E, 0x3400, 0x1B5E, 0x8F00, 0x1F7F, 0x2066, 0x2767, 0x193A, 0x1939, 0x0080, 0x0370,
0x0081, 0x0458, 0x1C80, 0xA000, 0xEA70, 0x1108, 0x0888, 0x3A93, 0xA478, 0x1485, 0xE831, 0x3B92, 0xA570, 0x1585,
0xEA39, 0x8E00, 0x8900, 0x00DF, 0x0360, 0x02DF, 0x8900, 0x009F, 0x0050, 0x0083, 0x0520, 0x02BF, 0x08A9, 0x029F,
0x054A, 0x00D8, 0x0402, 0x8100, 0x8900, 0x00DC, 0x0430, 0x009A, 0x0050, 0x9000, 0x9400, 0x1404, 0x1FFE, 0x0083,
0x0580, 0x02BF, 0x08A9, 0x029F, 0x0542, 0x0092, 0x0004, 0x8100, 0x263A, 0x243B, 0x1F1F, 0x009A, 0x0000, 0x5800,
0x0290, 0x08C9, 0x8900, 0x00C0, 0x043B, 0x02BF, 0x08EE, 0x8100, 0x1FD8, 0x223B, 0x5400, 0x0007, 0x1979, 0x005E,
0x1B79, 0x009F, 0x0001, 0x2F01, 0x8900, 0x2F3B, 0x0092, 0x00FF, 0x02DF, 0x2E3A, 0x2C3B, 0x8100, 0x8900, 0x268A,
0x2734, 0x5C00, 0x2E36, 0x5000, 0x0290, 0x08E8, 0x00C0, 0x0436, 0x02BF, 0x08EE, 0x8100, 0x1FD8, 0x2236, 0x5400,
0x1C1E, 0x8100, 0x2E34, 0x2688, 0x2489, 0x2E8C, 0x2C8D, 0x02BF, 0x08EE, 0x0092, 0x00FF, 0x02DF, 0x1C18, 0x02BF,
0x08EE, 0x0092, 0x00FF, 0x02DF, 0x8100, 0x1FC0, 0xB100, 0x02D5, 0x8900, 0x2734, 0x0340, 0x0001, 0x009B, 0x0000,
0x1F3F, 0x268C, 0x248D, 0x8900, 0x2534, 0x1501, 0x4C00, 0x5A00, 0x5A00, 0x1C20, 0x1FE0, 0x0502, 0x1C1F, 0x009F,
0x0A00, 0x0092, 0x00FF, 0x02BF, 0x0080, 0x0092, 0x0004, 0x2734, 0x1F61, 0x4700, 0x2F34, 0x0080, 0x0A00, 0x8900,
0x1FF9, 0xB900, 0x0274, 0x0008, 0x8900, 0x1FE1, 0x191E, 0x0701, 0x0293, 0x0925, 0x191A, 0x05FE, 0x005F, 0x64A0,
0x1B7E, 0x1B7A, 0x02DF, 0x1B7E, 0x02DF, 0x0092, 0x0004, 0x2201, 0x8600, 0x0294, 0x0958, 0x2204, 0x8600, 0x02B4,
0x09AC, 0x2231, 0x8600, 0x0295, 0x094D, 0x009E, 0x0458, 0x4400, 0x1C1E, 0x0E10, 0x5400, 0x1F7E, 0x02BF, 0x07BB,
0xD900, 0x0292, 0x094C, 0x0295, 0x0948, 0x2631, 0x4C00, 0x2E31, 0x029F, 0x09A9, 0x8100, 0x2E31, 0x029F, 0x09A9,
0x5700, 0x8100, 0x2605, 0xB100, 0x0295, 0x0969, 0x8100, 0x2E05, 0x2281, 0x8600, 0x0294, 0x095F, 0x8100, 0x005F,
0x1B7E, 0x7400, 0x2E01, 0x029F, 0x09A9, 0x2688, 0x2489, 0x2E34, 0x2C35, 0x02BF, 0x09B1, 0x2682, 0x2483, 0x2E67,
0x2C66, 0x00FF, 0x0360, 0x2638, 0x2439, 0x009F, 0x0005, 0x02BF, 0x0105, 0x0092, 0x0004, 0x8900, 0x00FF, 0x0362,
0x00DF, 0x0360, 0x02BF, 0x09CA, 0x8100, 0x00DE, 0x0362, 0x2280, 0x4400, 0x00FE, 0x0362, 0x8100, 0x263A, 0x243B,
0x0A01, 0x0081, 0x0405, 0x7A00, 0xB100, 0x0275, 0x1A3A, 0x2E3A, 0x2C3B, 0x0710, 0x0293, 0x0997, 0x05F0, 0x2205,
0x8600, 0x0294, 0x0952, 0x029F, 0x0978, 0x0275, 0x8900, 0x2F31, 0x1FC3, 0x04F0, 0x1C1E, 0x0083, 0x0458, 0x0E10,
0x02BF, 0x07BB, 0x2638, 0x2439, 0x00D8, 0x0362, 0x7000, 0x2C39, 0x2E38, 0x0092, 0x00FF, 0x02DF, 0x8100, 0x2E34,
0x2E35, 0x2E66, 0x2E67, 0x2334, 0x2135, 0x268A, 0x248B, 0x5A00, 0x147C, 0x2E3A, 0x2C3B, 0x2634, 0x2435, 0x147C,
0x2280, 0xC010, 0x9600, 0xF000, 0x4E00, 0x238C, 0x218D, 0x4A00, 0x2E38, 0x2C39, 0x8100, 0x2E05, 0x2E31, 0x02DF,
0x00FF, 0x0360, 0x0080, 0xFFD3, 0x0084, 0x0000, 0x199E, 0x1FFE, 0x1401, 0x0240, 0x001E, 0x0200, 0x0300, 0x1C3E,
0x157C, 0x0340, 0x000F, 0x0A11, 0x5500, 0x009A, 0x00F0, 0x009B, 0x000F, 0x0082, 0x0370, 0x1998, 0x6000, 0x1107,
0x09EC, 0x3400, 0x1408, 0x6032, 0x3644, 0x140C, 0x6032, 0x3400, 0x1408, 0x6032, 0x3600, 0x140C, 0x1B5E, 0x8F00,
0x1F7F, 0x2066, 0x2767, 0x193A, 0x1939, 0x0080, 0x0370, 0x1C80, 0xA000, 0xEA70, 0x3A93, 0xA478, 0x1485, 0xE833,
0x3B92, 0xA570, 0x1585, 0xEA3B, 0x1106, 0x0A0F, 0x3A93, 0xA478, 0x1485, 0xE833, 0x3B92, 0xA570, 0x1585, 0xEA3B,
0x3A93, 0xA478, 0x1485, 0xE833, 0x3B92, 0xA500, 0x1585, 0x1B7F, 0x2E66, 0x2F67, 0x8E00, 0x8900, 0x00DF, 0x0360,
0x02DF, 0x0083, 0x0520, 0x00DE, 0x0433, 0x1050, 0x1B7E, 0x029F, 0x054A, 0x0092, 0x0004, 0x2002, 0x8100, 0x8900,
0x2430, 0x8D00, 0x0099, 0x0050, 0xA000, 0xA400, 0x1404, 0x8C00, 0x1FFE, 0x0083, 0x0580, 0x2201, 0x8600, 0x0294,
0x0A4A, 0x2204, 0x8600, 0x02B4, 0x0A93, 0x8100, 0x2605, 0xB100, 0x0295, 0x0A57, 0x8100, 0x2E05, 0x2281, 0x8600,
0x0294, 0x0A51, 0x8100, 0x005F, 0x1B7E, 0x7400, 0x2E01, 0x029F, 0x0A8F, 0x2688, 0x2489, 0x2E34, 0x2C35, 0x02BF,
0x0A96, 0x00FF, 0x0360, 0x2638, 0x2439, 0x009F, 0x0005, 0x02BF, 0x0105, 0x0092, 0x0004, 0x00DF, 0x0360, 0x8100,
0x263A, 0xB100, 0x0294, 0x0A76, 0x263B, 0x5C00, 0x0290, 0x0A76, 0x223B, 0x02BF, 0x0AA7, 0x5500, 0x009A, 0x0001,
0x00FA, 0x0405, 0x029F, 0x0A44, 0x1F5F, 0x02BF, 0x0AA7, 0x00FA, 0x0362, 0x8100, 0x263A, 0x243B, 0x1570, 0x0A01,
0x0081, 0x0405, 0x5C00, 0xB100, 0x0275, 0x1A3A, 0x2E3A, 0x2C3B, 0x2638, 0x2439, 0x00D8, 0x0362, 0x7000, 0x2C39,
0x2E38, 0x0092, 0x00FF, 0x029F, 0x0542, 0x8100, 0x2E34, 0x2E35, 0x2334, 0x2135, 0x268A, 0x248B, 0x5A00, 0x2E3A,
0x2C3B, 0x2634, 0x2435, 0x238C, 0x218D, 0x4A00, 0x2E38, 0x2C39, 0x8100, 0x2E05, 0x02DF, 0x0080, 0xFFD3, 0x0084,
0x0000, 0x007A, 0x0AAF, 0x199E, 0x1488, 0x1B7E, 0x02DF, 0x009E, 0xFFFF, 0x00FE, 0x03F2, 0x8100, 0x00FE, 0x03F0,
0x00FE, 0x03F6, 0x009E, 0x0100, 0x00FE, 0x03F7, 0x00DA, 0x03F7, 0x009E, 0x8000, 0x5400, 0x00FE, 0x03F5, 0x009E,
0x0030, 0x00FE, 0x03F3, 0x009E, 0x0010, 0x00FE, 0x03F4, 0x009E, 0x0096, 0x00FE, 0x03F1, 0x02DF, 0x0080, 0x0B00,
0x8100, 0x00DE, 0x03F0, 0x8900, 0xB100, 0x0275, 0x0550, 0x00FF, 0x03F0, 0x0200, 0x0B60, 0x1C7E, 0x009F, 0x004E,
0x02BF, 0x0380, 0x02DF, 0x00DE, 0x03F1, 0x0200, 0x0B60, 0x1C7E, 0x8100, 0x8900, 0x009F, 0x00A0, 0x00DE, 0x03F1,
0x5D00, 0x009E, 0x0050, 0x0750, 0x0270, 0x5D00, 0x00DA, 0x03F2, 0x8600, 0x0290, 0x0B17, 0x00DE, 0x03F3, 0x5C00,
0x0293, 0x0B02, 0x029F, 0x0B1C, 0x00DB, 0x03F7, 0x009E, 0x8000, 0x4600, 0x029F, 0x0B0E, 0x00DB, 0x03F7, 0x009E,
0x8000, 0x5600, 0x00FE, 0x03F5, 0x1FDA, 0x7C00, 0x1F5E, 0x00FE, 0x03F2, 0x029F, 0x0B1C, 0x00DE, 0x03F4, 0x5D00,
0x0293, 0x0B09, 0x8900, 0x00DD, 0x03F5, 0x1501, 0x8100, 0x00DC, 0x03F6, 0x008B, 0x009F, 0x0080, 0x0B00, 0x0099,
0x0000, 0x1150, 0x0B30, 0x1878, 0x4C00, 0x1CFE, 0x001F, 0x1FD9, 0x1B18, 0x009F, 0x0B60, 0x1FC3, 0x5C00, 0x00FE,
0x03F1, 0x00FC, 0x03F6, 0x008B, 0xFFFF, 0x02DF, 0x009F, 0x0050, 0x0080, 0x0B00, 0x0083, 0x0D60, 0x0098, 0x3FFF,
0x02BF, 0x0391, 0x009F, 0x0050, 0x0080, 0x0B00, 0x0083, 0x0D00, 0x0098, 0x3FFF, 0x02BF, 0x0391, 0x02DF, 0x8A00,
0x8F00, 0x8100, 0x00DE, 0x0404, 0xB100, 0x0295, 0x0B5E, 0x8100, 0x00FE, 0x0478, 0x00FE, 0x0479, 0x00DF, 0x0479,
0x00DB, 0x0478, 0x0099, 0x0000, 0x0084, 0x0000, 0x1150, 0x0B6F, 0x199E, 0x5C7C, 0xC000, 0x6E00, 0x1488, 0x4A00,
0x1B1E, 0x1F7E, 0x00FB, 0x0478, 0x00FF, 0x0479, 0x8B00, 0x8E00, 0x02DF, 0x0080, 0x01BE, 0x1918, 0x191A, 0x0080,
0x0180, 0x0083, 0x0180, 0x9070, 0x1FFE, 0x1120, 0x0B88, 0x7C00, 0xD450, 0x6533, 0xC550, 0x1501, 0x643B, 0x0080,
0x01FE, 0x191A, 0x1918, 0x0080, 0x01C0, 0x0083, 0x01C0, 0x1FF8, 0x9070, 0xF800, 0x0240, 0x01FF, 0x0260, 0x2000,
0x02BF, 0x0B9B, 0x02DF, 0xB900, 0x0272, 0x7C00, 0x1F7E, 0x4700, 0x1110, 0x0BA5, 0x473B, 0x473B, 0x473B, 0x473B,
0x02DF, 0x1306, 0x0092, 0x00FF, 0x0088, 0xFFFF, 0x0089, 0xFFFF, 0x008A, 0xFFFF, 0x008B, 0xFFFF, 0x8E00, 0x8B00,
0x8C00, 0x0080, 0x0346, 0x02BF, 0x0051, 0x0081, 0x0346, 0x009F, 0x0500, 0x0080, 0x0010, 0x02BF, 0x007E, 0x02BF,
0x0BCF, 0x8E00, 0x0081, 0x0508, 0x009F, 0x0520, 0x0080, 0x0004, 0x02BF, 0x008B, 0x1206, 0x029F, 0x0049, 0x8100,
0x0081, 0x0510, 0x1020, 0x1B3E, 0x00DF, 0x1456, 0x0340, 0xFFD0, 0x8417, 0x0080, 0x0500, 0x00DE, 0x0500, 0x00FE,
0x0520, 0x00DE, 0x0501, 0x00FE, 0x0521, 0x0086, 0x0000, 0x0082, 0x051F, 0x00DE, 0x15F6, 0x1408, 0x00DF, 0x1766,
0x0340, 0x00FF, 0x1F5F, 0x02BF, 0x88E5, 0x1F1C, 0x811E, 0x191E, 0x1478, 0x1FFC, 0x1F5E, 0x02BF, 0x8809, 0x02BF,
0x8723, 0x0006, 0x8106, 0x00DE, 0x166C, 0x1404, 0x0240, 0xFF00, 0x00DF, 0x1231, 0x1578, 0x0340, 0x00FF, 0x1F5F,
0x02BF, 0x88E5, 0x1F1C, 0x811E, 0x191E, 0x1478, 0x1FFC, 0x1F5E, 0x02BF, 0x8809, 0x02BF, 0x8723, 0x8100, 0x8900,
0x00D1, 0x0505, 0x9900, 0x8200, 0x0295, 0x0C30, 0x0291, 0x0C3E, 0x0082, 0x0510, 0x0086, 0x0001, 0x00D0, 0x171B,
0x9100, 0x7D00, 0x4D00, 0x1501, 0x1F5F, 0x00DF, 0x0503, 0x1504, 0x02BF, 0x8809, 0x029F, 0x0C4D, 0x0082, 0x0511,
0x00DF, 0x0503, 0x1501, 0x1F5F, 0x00DE, 0x1043, 0x0240, 0xFFF0, 0x02BF, 0x88E5, 0x029F, 0x0C4D, 0x0082, 0x0510,
0x0086, 0x0001, 0x00D0, 0x1285, 0x9100, 0x4D00, 0x1501, 0x00DE, 0x0503, 0x1404, 0x1F5E, 0x02BF, 0x8809, 0x0083,
0x0513, 0x1B7E, 0x8923, 0x0083, 0x0513, 0x00DF, 0x0507, 0x00DE, 0x11B8, 0x0240, 0xFFF0, 0x1F5E, 0x02BF, 0x81F4,
0xF100, 0x02BF, 0x8458, 0x8F00, 0x0082, 0x0515, 0x00DE, 0x0506, 0x00DA, 0x165B, 0x02BF, 0x88E5, 0x14FD, 0x1403,
0x1B5E, 0x1B5C, 0x0082, 0x0516, 0x00DE, 0x1723, 0x14F4, 0x00DA, 0x166B, 0x02BF, 0x88E5, 0xB100, 0x0290, 0x0C79,
0x8100, 0x14FD, 0x8E00, 0x00DF, 0x1491, 0x0340, 0xD0F0, 0x1CBF, 0x00DF, 0x1468, 0x00D1, 0x11FC, 0x157C, 0x1CDF,
0x00D1, 0x11B8, 0x9900, 0x1418, 0x1478, 0x1F5E, 0x1FFE, 0x1F65, 0x3600, 0x1402, 0x1F66, 0x3700, 0x1501, 0x4C00,
0x1518, 0x9900, 0x3500, 0x4C00, 0x00DF, 0x0512, 0x3F00, 0x00FF, 0x0512, 0x1470, 0x00DF, 0x0511, 0x3F00, 0x00FF,
0x0511, 0x1FA5, 0x1501, 0x1FE6, 0xF100, 0x15F8, 0xF500, 0x1F5F, 0x1F7D, 0x8100, 0x00DE, 0x0511, 0x3400, 0x8900,
0x00DF, 0x0512, 0x3500, 0x4C00, 0x00DF, 0x0512, 0x1578, 0x4C00, 0x8900, 0x1FFE, 0x1508, 0x3B00, 0x00DE, 0x0511,
0x3E00, 0x00DF, 0x0512, 0x3B00, 0x1CBF, 0x00DA, 0x15F1, 0x3500, 0x0295, 0x0CDD, 0x00DF, 0x10E2, 0x1508, 0x1F5F,
0x00DF, 0x103B, 0x7900, 0x3900, 0x3080, 0x00FE, 0x0522, 0x00DC, 0x1229, 0x00DD, 0x11F8, 0x5C00, 0xF000, 0x1FE5,
0x3080, 0x029F, 0x0CF0, 0x00DF, 0x10CA, 0x1508, 0x1F5F, 0x00DF, 0x1043, 0x7500, 0x3900, 0x3080, 0x00FE, 0x0522,
0x00DC, 0x1259, 0x00DD, 0x16FE, 0x4C00, 0xF000, 0x1FE5, 0x3080, 0x00FE, 0x0523, 0x02DF, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
};
extern s32 __DSPCheckMXICBoot2(DSPTaskInfo2* task) {
u32 mail;
while (DSPCheckMailFromDSP() == 0);
mail = DSPReadMailFromDSP();
if((mail + 0x7F8F0000) == 0xFEED){
DSPSendMailToDSP(0x80F3A001);
while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP((u32)task->iram_mmem_addr);
while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP(0x80F3A002);
while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP(task->iram_length);
while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP(0x80F3C002);
while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP(task->iram_addr);
while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP(0x80F3B002);
while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP(0);
while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP(0x80F3D001);
while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP(task->dsp_init_vector);
while (DSPCheckMailToDSP() != 0);
return 1;
}
if((mail + 0x3F010000) == 0 || (mail + 0x3F010000) == 1){
DSPSendMailToDSP(0xC0028073);
while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP(0xC000FFCE);
while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP((u32)task->iram_mmem_addr >> 16 | 0xC0010000);
while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP(0xC000FFCF);
while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP((u16)task->iram_mmem_addr | 0xC0010000);
while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP(0xC000FFCD);
while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP(task->iram_addr | 0xC0010000);
while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP(0xC000FFC9);
while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP(0xC0010002);
while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP(0xC000FFCB);
while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP(task->iram_length | 0xC0010000);
while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP(0xC0028073);
while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP(task->dsp_init_vector | 0xC0020000);
while (DSPCheckMailToDSP() != 0);
return 1;
}
return 0;
}
extern void DSPInit() {
}
extern void DSPInit2 (DSPTaskInfo2* task){
BOOL enable;
u16 tmp;
enable = OSDisableInterrupts();
__OSUnmaskInterrupts(OS_INTRMASK_DSP_DSP);
tmp = __DSPRegs[DSP_CONTROL_STATUS];
tmp = (tmp & ~0xA8)| 0x800;
__DSPRegs[DSP_CONTROL_STATUS] = tmp;
tmp = __DSPRegs[DSP_CONTROL_STATUS];
tmp = (tmp & ~0xAC) ;
__DSPRegs[DSP_CONTROL_STATUS] = tmp;
OSRestoreInterrupts(enable);
if(__DSPCheckMXICBoot2(task) != 1){
OSPanic("mxic.c", 357,"DSPInit(): MXIC Boot failed.");
}
}
void DspBoot(){
DSPTaskInfo2 task;
task.iram_mmem_addr = jdsp;
task.iram_length = sizeof(jdsp);
task.iram_addr = 0;
task.dram_mmem_addr = jdsp;
task.dram_length = 0x100;
task.dram_addr = 0;
task.dsp_init_vector = 0;
DSPInit2(&task);
while(DSPCheckMailFromDSP() == 0);
DSPReadMailFromDSP();
DSPCheckMailFromDSP();
DwaitFrame();
}
+92
View File
@@ -0,0 +1,92 @@
#include "jaudio_NES/dspproc.h"
#include "dolphin/dsp.h"
static u16 DSP_MIXERLEVEL = 0x4000;
extern s32 DSPSendCommands(u32* commands, u32 count) {
if (DSPCheckMailToDSP() != 0) {
return -1;
}
if (DSPCheckMailFromDSP() != 0) {
return -1;
}
int i;
for (i = 0; i < count; i++) {
DSPSendMailToDSP(commands[i]);
while (DSPCheckMailToDSP() != 0);
}
return 0;
}
extern u32 DSPReleaseHalt() {
while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP(0);
if (DSPCheckMailFromDSP() != 0) {
DSPReadMailFromDSP();
}
return 0x88881357;
}
extern void DSPWaitFinish() {
do {
while (DSPCheckMailFromDSP() == 0);
} while ((DSPReadMailFromDSP() + 0x77780000) == 0x1357);
}
extern void DsetupTable(u32 arg0, u32 arg1, u32 arg2, u32 arg3, u32 arg4) {
u32 commands[5];
commands[0] = (arg0 & 0xFFFF) | 0x81000000;
commands[1] = arg1;
commands[2] = arg2;
commands[3] = arg3;
commands[4] = arg4;
DSPSendCommands(commands, ARRAY_COUNT(commands));
DSPWaitFinish();
}
extern void DsyncFrame(u32 subframes, u32 dspbuf_start, u32 dspbuf_end){
u32 commands[3];
commands[0] = (subframes << 16 & 0xFF0000) | 0x82000000 | DSP_MIXERLEVEL;
commands[1] = dspbuf_start;
commands[2] = dspbuf_end;
DSPSendCommands(commands, ARRAY_COUNT(commands));
DSPWaitFinish();
}
extern void DwaitFrame(){
u32 commands[1];
commands[0] = 0x80000000;
DSPSendCommands(commands, ARRAY_COUNT(commands));
DSPWaitFinish();
}
extern void DiplSec(u32 arg0){
u32 commands[2];
commands[0] = 0x8B000008;
commands[1] = arg0;
DSPSendCommands(commands, ARRAY_COUNT(commands));
DSPWaitFinish();
}
extern void DagbSec(u32 arg0){
u32 commands[2];
commands[0] = 0x8C000008;
commands[1] = arg0;
DSPSendCommands(commands, ARRAY_COUNT(commands));
DSPWaitFinish();
}
+464
View File
@@ -0,0 +1,464 @@
#include "jaudio_NES/dvdthread.h"
#include "jaudio_NES/sample.h"
#include "jaudio_NES/aictrl.h"
#include "dolphin/os.h"
#include "dolphin/dvd.h"
#include "dolphin/ar.h"
#include "dolphin/string.h"
#include "dolphin/os/OSTime.h"
typedef struct DVDCall_ {
u32 owner;
char fileName[64];
u32 dst;
u32 src;
u32 length;
u32* callbackStatus;
Jac_DVDCallback callback;
} DVDCall;
static char audio_root_path[32] = "";
static OSMessageQueue mq;
static s32 msgbuf[0x80];
static u8 CALLSTACK[0x8000];
static u32 mq_init;
static size_t buffersize;
static u32 buffers;
static size_t next_buffersize;
static u8* next_buffertop;
static u32 next_buffers;
static u32 cur_q;
static OSThreadQueue dvdt_sleep;
static BOOL DVDT_PAUSE_FLAG;
static ErrorCallback error_callback;
static u8* ADVD_BUFFER[2];
static u32 buffer_load;
static void __Alloc_DVDBuffer();
static void __UpdateBuffer();
static void __WriteBufferSize(u8* buf, u32 amount, u32 size);
static void* GetCallStack() {
BOOL enable = OSDisableInterrupts();
void* ret;
u32 pre = cur_q + 1;
ret = &CALLSTACK[cur_q * 0x100];
cur_q = pre;
if (pre == 0x80) {
cur_q = 0;
}
OSRestoreInterrupts(enable);
return ret;
}
static s32 DVDReadMutex(DVDFileInfo* fileInfo, void* addr, s32 len, s32 offs, char* arg4) {
if (DVDT_PAUSE_FLAG == true) {
OSSleepThread(&dvdt_sleep);
}
while (true) {
if (DVDReadPrio(fileInfo, addr, len, offs, 2) != -1 || error_callback == nullptr) {
break;
}
error_callback(arg4, (u8*)addr);
}
}
extern void DVDT_ExtendPath(char* dst, char* ext) {
if (*audio_root_path != nullptr) {
strcpy(dst, audio_root_path);
if (*ext == '/') {
strcat(dst, ext + 1);
} else {
strcat(dst, ext);
}
} else {
strcpy(dst, ext);
}
}
extern s32 DVDT_AddTaskHigh(TaskCallback callback, void* stackp, size_t len) {
if (mq_init == false) {
return 0;
}
TaskCallback* stack = (TaskCallback*)GetCallStack();
Jac_bcopy(stackp, stack + 1, len);
*stack = callback;
OSJamMessage(&mq, (OSMessage)stack, OS_MESSAGE_BLOCK);
return 1;
}
extern s32 DVDT_AddTask(TaskCallback callback, void* stackp, size_t len) {
if (mq_init == false) {
return 0;
}
TaskCallback* stack = (TaskCallback*)GetCallStack();
Jac_bcopy(stackp, stack + 1, len);
*stack = callback;
OSSendMessage(&mq, (OSMessage)stack, OS_MESSAGE_BLOCK);
return 1;
}
extern void jac_dvdproc_init() {
OSInitMessageQueue(&mq, (OSMessage*)msgbuf, ARRAY_COUNT(msgbuf));
mq_init = 1;
}
extern void* jac_dvdproc(void* arg) {
__Alloc_DVDBuffer();
TaskCallback* callback;
u8* buf = (u8*)OSAlloc2(0x10000);
OSInitThreadQueue(&dvdt_sleep);
OSMessage msg;
while (true) {
while (true) {
OSReceiveMessage(&mq, &msg, OS_MESSAGE_BLOCK);
callback = (TaskCallback*)msg;
__UpdateBuffer();
if (buffersize == 0) {
__WriteBufferSize(buf, 2, 0x8000);
}
if (callback != nullptr) {
break;
};
}
(*callback)(callback + 1);
}
}
static void __DoError(DVDCall* call, u32 type) {
if (call->callbackStatus != nullptr) {
*call->callbackStatus = -1;
}
if (call->callback != nullptr) {
call->callback(-1);
}
}
static void __DoFinish(DVDCall* call, u32 arg) {
if (call->callbackStatus != nullptr) {
*call->callbackStatus = arg;
}
if (call->callback != nullptr) {
call->callback(call->owner);
}
}
static void __DVDT_CheckBack(void* cb) {
DVDCall* callback = (DVDCall*)cb;
__DoFinish(callback, callback->owner);
}
static void __Alloc_DVDBuffer() {
if (buffersize == 0) {
int i;
for (i = 0; i < buffers; i++) {
ADVD_BUFFER[i] = 0;
}
}
}
static void __WriteBufferSize(u8* buf, u32 amount, u32 size) {
buffersize = size;
buffers = amount;
int i;
int j = amount;
for (i = 0; i < amount; i++, j--) {
ADVD_BUFFER[i] = buf;
buf += size;
}
}
static void __UpdateBuffer() {
if (next_buffers != 0) {
__WriteBufferSize(next_buffertop, next_buffers, next_buffersize);
next_buffers = 0;
next_buffertop = nullptr;
}
}
static vu32 buffer_full;
static void ARAM_DMAfinish(u32 arg0) {
buffer_full -= 1;
}
extern s32 DVDT_LoadtoARAM_Main(void* arg) {
DVDCall* call = (DVDCall*)arg;
static int arq_index = 0;
static DVDFileInfo finfo;
static ARQRequest req[4];
if (!Jac_DVDOpen(call->fileName, &finfo)) {
__DoError(call, 0);
return -1;
}
u32 len = finfo.length;
if (len == 0) {
__DoError(call, 1);
return -1;
}
if (call->length == 0) {
call->length = len;
if (call->src != 0) {
call->length -= call->src;
}
}
OSGetTick();
while (call->length != 0) {
u32 readSize;
u8* buf = ADVD_BUFFER[buffer_load];
buffer_load = (buffer_load + 1) % buffers;
while (buffer_full == buffers)
;
if (call->length < buffersize) {
readSize = ALIGN_NEXT(call->length, 32);
len = DVDReadMutex(&finfo, buf, readSize, call->src, call->fileName);
call->length = 0;
} else {
readSize = buffersize;
len = DVDReadMutex(&finfo, buf, buffersize, call->src, call->fileName);
call->src += buffersize;
call->length -= buffersize;
}
ARQPostRequest(&req[arq_index], 0x12345678, ARQ_TYPE_MRAM_TO_ARAM, ARQ_PRIORITY_HIGH, (u32)buf, call->dst,
readSize, ARAM_DMAfinish);
buffer_full++;
arq_index++;
arq_index &= 3;
call->dst += readSize;
}
DVDClose(&finfo);
while (buffer_full != 0)
;
OSGetTick();
__DoFinish(call, len);
return 0;
}
extern s32 DVDT_LoadtoARAM(u32 owner, char* name, u32 dst, u32 src, u32 length, u32* status, Jac_DVDCallback callback) {
DVDCall call;
void* cb = (void*)&call;
call.owner = owner;
DVDT_ExtendPath(call.fileName, name);
call.dst = dst;
call.callbackStatus = status;
if (status != 0) {
*status = 0;
}
call.callback = callback;
call.src = src;
call.length = length;
DVDT_AddTask(DVDT_LoadtoARAM_Main, cb, 0x58);
return 0;
}
static vu32 buffer_full2;
static void ARAM_DMAfinish2(u32) {
buffer_full2 -= 1;
}
extern s32 DVDT_ARAMtoDRAM_Main(void* arg) {
static ARQRequest req;
DVDCall* call = (DVDCall*)arg;
buffer_full2++;
ARQPostRequest(&req, (u32)call, ARQ_TYPE_ARAM_TO_MRAM, ARQ_PRIORITY_HIGH, call->src, call->dst, call->length,
ARAM_DMAfinish2);
while (buffer_full2 != 0)
;
__DoFinish(call, call->length);
return 0;
}
extern s32 DVDT_DRAMtoARAM_Main(void* arg) {
static ARQRequest req;
DVDCall* call = (DVDCall*)arg;
buffer_full2++;
ARQPostRequest(&req, (u32)call, ARQ_TYPE_MRAM_TO_ARAM, ARQ_PRIORITY_HIGH, call->dst, call->src, call->length,
ARAM_DMAfinish2);
while (buffer_full2 != 0)
;
__DoFinish(call, call->length);
return 0;
}
extern s32 DVDT_ARAMtoDRAM(u32 owner, u32 dst, u32 src, u32 length, u32* status, Jac_DVDCallback callback) {
DVDCall call;
void* cb = (void*)&call;
call.owner = owner;
call.dst = dst;
call.callbackStatus = status;
if (status != 0) {
*status = 0;
}
call.callback = callback;
call.src = src;
call.length = length;
DVDT_AddTaskHigh(DVDT_ARAMtoDRAM_Main, cb, 0x58);
return 0;
}
extern s32 DVDT_DRAMtoARAM(u32 owner, u32 dst, u32 src, u32 length, u32* status, Jac_DVDCallback callback) {
DVDCall call;
void* cb = (void*)&call;
call.owner = owner;
call.dst = dst;
call.callbackStatus = status;
if (status != 0) {
*status = 0;
}
call.callback = callback;
call.src = src;
call.length = length;
DVDT_AddTaskHigh(DVDT_DRAMtoARAM_Main, cb, 0x58);
return 0;
}
extern s32 DVDT_CheckFile(char* file) {
static DVDFileInfo finfo;
char path[64];
DVDT_ExtendPath(path, file);
if (!Jac_DVDOpen(path, &finfo)) {
return 0;
}
u32 len = finfo.length;
DVDClose(&finfo);
return len;
}
extern void DVDT_CheckPass(u32 owner, u32* status, Jac_DVDCallback callback) {
DVDCall call;
void* cb = (void*)&call;
call.owner = owner;
call.callbackStatus = status;
call.callback = callback;
DVDT_AddTask((TaskCallback)__DVDT_CheckBack, cb, 0x58);
}
extern s32 Jac_CheckFile(char* file) {
static DVDFileInfo finfo;
if (!Jac_DVDOpen(file, &finfo)) {
return 0;
}
u32 len = finfo.length;
DVDClose(&finfo);
return len;
}
extern void Jac_RegisterDVDErrorCallback(ErrorCallback callback) {
error_callback = callback;
}
static u32 dvdfile_dics;
static char dvd_file[32][64];
static u32 dvd_entrynum[32];
extern s32 Jac_RegisterFastOpen(char* file) {
int num;
if (strlen(file) > 63) {
return -1;
}
int i;
for (i = 0; i < dvdfile_dics; i++) {
if (!strcmp(dvd_file[i], file)) {
return dvd_entrynum[i];
}
}
if (dvdfile_dics == 32) {
return -1;
}
num = DVDConvertPathToEntrynum(file);
if (num != -1) {
strcpy(dvd_file[dvdfile_dics], file);
dvd_entrynum[dvdfile_dics] = num;
dvdfile_dics++;
}
return num;
}
extern BOOL Jac_DVDOpen(char* name, DVDFileInfo* info) {
int entry = Jac_RegisterFastOpen(name);
if (entry == -1) {
return DVDOpen(name, info);
} else {
return DVDFastOpen(entry, info);
}
}