diff --git a/config/disasm_overrides.yml b/config/disasm_overrides.yml index 8415cc47..a8a46532 100644 --- a/config/disasm_overrides.yml +++ b/config/disasm_overrides.yml @@ -11,6 +11,7 @@ symbol_aligns: 0x80026400: 32 0x80031d80: 32 0x8001ada0: 32 + 0x8002cd20: 32 0x8018f1a8: 8 0x80207458: 8 # align RunQueue to 0x001251d8 0x800b9140: 32 # align gam_win_moji1_tex to 32 bytes diff --git a/config/dol_slices.yml b/config/dol_slices.yml index 8b2ff1d9..d889bc92 100644 --- a/config/dol_slices.yml +++ b/config/dol_slices.yml @@ -116,6 +116,11 @@ jaudio_NES/internal/os.c: .text: [0x80026120, 0x80026300] jaudio_NES/internal/astest.c: .text: [0x80026300, 0x80026400] +jaudio_NES/internal/dspboot.c: + .text: [0x8002c920, 0x8002cd20] + .rodata: [0x800aa780, 0x800aa7a0] + .data: [0x800d3b00, 0x800d5500] + .sdata2: [0x80218f08, 0x80218f10] jaudio_NES/internal/random.c: .text: [0x80031ce0, 0x80031d80] .sdata: [0x80217c38, 0x80217c40] diff --git a/include/dolphin/dsp.h b/include/dolphin/dsp.h index e3a5d43f..96e62398 100644 --- a/include/dolphin/dsp.h +++ b/include/dolphin/dsp.h @@ -53,6 +53,7 @@ void DSPHalt(); void DSPSendMailToDSP(u32 mail); u32 DSPCheckMailToDSP(); u32 DSPCheckMailFromDSP(); +u32 DSPReadMailFromDSP(); u32 DSPGetDMAStatus(); DSPTaskInfo* DSPAddTask(DSPTaskInfo* task); diff --git a/include/jaudio_NES/dspboot.h b/include/jaudio_NES/dspboot.h index 0839e0d4..326a00af 100644 --- a/include/jaudio_NES/dspboot.h +++ b/include/jaudio_NES/dspboot.h @@ -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 diff --git a/include/jaudio_NES/dspproc.h b/include/jaudio_NES/dspproc.h index 018be422..8ab52eb0 100644 --- a/include/jaudio_NES/dspproc.h +++ b/include/jaudio_NES/dspproc.h @@ -5,5 +5,6 @@ extern u32 DSPReleaseHalt(void); extern void DsyncFrame(u32 subframes, u32 dspbuf_start, u32 dspbuf_end); +extern void DwaitFrame(); #endif diff --git a/src/static/jaudio_NES/internal/dspboot.c b/src/static/jaudio_NES/internal/dspboot.c new file mode 100644 index 00000000..bf9f38a8 --- /dev/null +++ b/src/static/jaudio_NES/internal/dspboot.c @@ -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(); +}