Reorganize library code into libs/ (#3119)

* Reorganize files into libs/{dolphin,JSystem,PowerPC_EABI_Support,revolution,TRK_MINNOW_DOLPHIN}

* Update configure.py and project.py for new libs structure

* Refactor `#include <dolphin/x.h>` -> `<x.h>`

* Remove `__REVOLUTION_SDK__` forwards from dolphin

* Fix dolphin/ references in revolution

* Wrap `#include <dolphin.h>` in `!__REVOLUTION_SDK__`

* Always build TRK against dolphin headers

* Resolve revolution SDK header resolution issues
This commit is contained in:
Luke Street
2026-03-01 15:35:36 -07:00
committed by GitHub
parent c9a46bd65b
commit 4df8ccc871
1740 changed files with 583 additions and 825 deletions
+40
View File
@@ -0,0 +1,40 @@
#include <dolphin/dolphin.h>
#include <dolphin/ax.h>
#include "__ax.h"
#if DEBUG
const char* __AXVersion = "<< Dolphin SDK - AX\tdebug build: Apr 5 2004 03:56:21 (0x2301) >>";
#else
const char* __AXVersion = "<< Dolphin SDK - AX\trelease build: Apr 5 2004 04:15:05 (0x2301) >>";
#endif
void AXInit(void) {
AXInitEx(0);
}
void AXInitEx(u32 outputBufferMode) {
#if DEBUG
OSReport("Initializing AX\n");
#endif
OSRegisterVersion(__AXVersion);
__AXAllocInit();
__AXVPBInit();
__AXSPBInit();
__AXAuxInit();
__AXClInit();
__AXOutInit(outputBufferMode);
}
void AXQuit(void) {
#if DEBUG
OSReport("Shutting down AX\n");
#endif
__AXAllocQuit();
__AXVPBQuit();
__AXSPBQuit();
__AXAuxQuit();
__AXClQuit();
__AXOutQuit();
}
+248
View File
@@ -0,0 +1,248 @@
#include <dolphin/dolphin.h>
#include <dolphin/ax.h>
#include "__ax.h"
static AXVPB* __AXStackHead[AX_PRIORITY_STACKS];
static AXVPB* __AXStackTail[AX_PRIORITY_STACKS];
static AXVPB* __AXCallbackStack;
static u32 __AXCheckStacks(void) {
u32 i;
u32 voices;
AXVPB* voice;
voices = 0;
for (i = 0; i < 32; i++) {
voice = __AXStackHead[i];
while (voice != 0) {
voices++;
if (voices > 64) {
return 0;
}
voice = voice->next;
}
}
return 1;
}
AXVPB* __AXGetStackHead(u32 priority) {
ASSERTLINE(97, priority < AX_PRIORITY_STACKS);
return __AXStackHead[priority];
}
void __AXServiceCallbackStack(void) {
AXVPB* p;
for (p = __AXPopCallbackStack(); p; p = __AXPopCallbackStack()) {
if (p->priority != 0) {
if (p->callback) {
p->callback(p);
}
__AXRemoveFromStack(p);
__AXPushFreeStack(p);
}
}
}
void __AXInitVoiceStacks(void) {
u32 i;
__AXCallbackStack = NULL;
for (i = 0; i < AX_PRIORITY_STACKS; i++) {
__AXStackHead[i] = __AXStackTail[i] = 0;
}
}
void __AXAllocInit(void) {
#if DEBUG
OSReport("Initializing AXAlloc code module\n");
#endif
__AXInitVoiceStacks();
}
void __AXAllocQuit(void) {
#if DEBUG
OSReport("Shutting down AXAlloc code module\n");
#endif
__AXInitVoiceStacks();
}
void __AXPushFreeStack(AXVPB* p) {
ASSERTLINE(168, p->priority);
p->next = __AXStackHead[0];
__AXStackHead[0] = p;
p->priority = 0;
}
AXVPB* __AXPopFreeStack(void) {
AXVPB* p;
p = (void*)(u32)&__AXStackHead[0]->next;
if (p) {
__AXStackHead[0] = p->next;
}
return p;
}
void __AXPushCallbackStack(AXVPB* p) {
p->next1 = __AXCallbackStack;
__AXCallbackStack = p;
}
AXVPB* __AXPopCallbackStack(void) {
AXVPB* p;
p = (void*)(u32)&__AXCallbackStack[0];
if (p) {
__AXCallbackStack = p->next1;
}
return p;
}
void __AXRemoveFromStack(AXVPB* p) {
u32 i;
AXVPB* head;
AXVPB* tail;
ASSERTLINE(219, p->priority);
i = p->priority;
head = __AXStackHead[i];
tail = __AXStackTail[i];
if (head == tail) {
__AXStackHead[i] = __AXStackTail[i] = 0;
return;
}
if (p == head) {
__AXStackHead[i] = p->next;
__AXStackHead[i]->prev = 0;
return;
}
if (p == tail) {
__AXStackTail[i] = p->prev;
__AXStackTail[i]->next = 0;
return;
}
head = p->prev;
tail = p->next;
head->next = tail;
tail->prev = head;
}
void __AXPushStackHead(AXVPB* p, u32 priority) {
ASSERTLINE(261, priority);
ASSERTLINE(262, priority < AX_PRIORITY_STACKS);
p->next = __AXStackHead[priority];
p->prev = 0;
if (p->next) {
__AXStackHead[priority]->prev = p;
__AXStackHead[priority] = p;
} else {
__AXStackTail[priority] = p;
__AXStackHead[priority] = p;
}
p->priority = priority;
}
AXVPB* __AXPopStackFromBottom(u32 priority) {
AXVPB* p;
ASSERTLINE(287, priority);
ASSERTLINE(288, priority < AX_PRIORITY_STACKS);
p = NULL;
if (__AXStackHead[priority]) {
if (__AXStackHead[priority] == __AXStackTail[priority]) {
p = __AXStackHead[priority];
__AXStackHead[priority] = __AXStackTail[priority] = 0;
} else if (__AXStackTail[priority]) {
p = __AXStackTail[priority];
__AXStackTail[priority] = p->prev;
__AXStackTail[priority]->next = 0;
}
}
return p;
}
void AXFreeVoice(AXVPB* p) {
BOOL old;
ASSERTLINE(322, p);
ASSERTMSGLINE(326, p->priority != 0, "Calling AXFreeVoice() for voice that is already free\n");
old = OSDisableInterrupts();
__AXRemoveFromStack(p);
if (p->pb.state == 1) {
p->depop = 1;
}
__AXSetPBDefault(p);
__AXPushFreeStack(p);
ASSERTMSGLINE(343, __AXCheckStacks() != 0, "Voice list is trashed!\n");
OSRestoreInterrupts(old);
}
AXVPB* AXAcquireVoice(u32 priority, void (*callback)(void*), u32 userContext) {
BOOL old;
AXVPB* p;
u32 i;
ASSERTLINE(361, priority);
ASSERTLINE(362, priority < AX_PRIORITY_STACKS);
old = OSDisableInterrupts();
p = __AXPopFreeStack();
if (p == 0) {
for (i = 1; i < priority; i++) {
p = __AXPopStackFromBottom(i);
if (p) {
if (p->pb.state == 1) {
p->depop = 1;
}
if (p->callback != 0) {
p->callback(p);
}
break;
}
}
}
if (p) {
__AXPushStackHead(p, priority);
p->callback = callback;
p->userContext = userContext;
__AXSetPBDefault(p);
}
ASSERTMSGLINE(410, __AXCheckStacks() != 0, "Voice list is trashed!\n");
OSRestoreInterrupts(old);
return p;
}
void AXSetVoicePriority(AXVPB* p, u32 priority) {
BOOL old;
ASSERTLINE(424, p);
ASSERTMSGLINE(428, p->priority != 0, "Calling AXSetVoicePriority() for voice that is already free\n");
ASSERTMSGLINE(433, priority, "Do not set voice priority to 0, use AXFreeVoice() to free voice\n");
ASSERTLINE(435, priority < AX_PRIORITY_STACKS);
old = OSDisableInterrupts();
__AXRemoveFromStack(p);
__AXPushStackHead(p, priority);
ASSERTMSGLINE(442, __AXCheckStacks() != 0, "Voice list is trashed!\n");
OSRestoreInterrupts(old);
}
+167
View File
@@ -0,0 +1,167 @@
#include <dolphin/dolphin.h>
#include <dolphin/ax.h>
#include "__ax.h"
static s32 __AXBufferAuxA[3][480] ATTRIBUTE_ALIGN(32);
static s32 __AXBufferAuxB[3][480] ATTRIBUTE_ALIGN(32);
static void (* __AXCallbackAuxA)(void*, void*);
static void (* __AXCallbackAuxB)(void*, void*);
static void* __AXContextAuxA;
static void* __AXContextAuxB;
static s32* __AXAuxADspWrite;
static s32* __AXAuxADspRead;
static s32* __AXAuxBDspWrite;
static s32* __AXAuxBDspRead;
static u32 __AXAuxDspWritePosition;
static u32 __AXAuxDspReadPosition;
static u32 __AXAuxDspWritePositionDpl2;
static u32 __AXAuxDspReadPositionDpl2;
static u32 __AXAuxCpuReadWritePosition;
void __AXAuxInit(void) {
int i;
s32* pA;
s32* pB;
#if DEBUG
OSReport("Initializing AXAux code module\n");
#endif
__AXCallbackAuxA = NULL;
__AXCallbackAuxB = NULL;
__AXContextAuxA = 0;
__AXContextAuxB = 0;
__AXAuxDspWritePosition = 0;
__AXAuxDspReadPosition = 1;
__AXAuxDspWritePositionDpl2 = 0;
__AXAuxDspReadPositionDpl2 = 1;
__AXAuxCpuReadWritePosition = 2;
pA = (s32*)&__AXBufferAuxA;
pB = (s32*)&__AXBufferAuxB;
for (i = 0; i < 480; i++) {
*(pA) = 0; pA++;
*(pB) = 0; pB++;
}
}
void __AXAuxQuit(void) {
#if DEBUG
OSReport("Shutting down AXAux code module\n");
#endif
__AXCallbackAuxA = NULL;
__AXCallbackAuxB = NULL;
}
void __AXGetAuxAInput(u32* p) {
if (__AXCallbackAuxA) {
*p = (u32)&__AXBufferAuxA[__AXAuxDspWritePosition][0];
} else {
*p = 0;
}
}
void __AXGetAuxAInputDpl2(u32* p) {
*p = (u32)&__AXBufferAuxB[__AXAuxDspWritePosition][320];
}
void __AXGetAuxAOutput(u32* p) {
*p = (u32)&__AXBufferAuxA[__AXAuxDspReadPosition][0];
}
void __AXGetAuxAOutputDpl2R(u32* p) {
*p = (u32)&__AXBufferAuxA[__AXAuxDspReadPosition][160];
}
void __AXGetAuxAOutputDpl2Ls(u32* p) {
*p = (u32)&__AXBufferAuxA[__AXAuxDspReadPosition][320];
}
void __AXGetAuxAOutputDpl2Rs(u32* p) {
*p = (u32)&__AXBufferAuxB[__AXAuxDspReadPosition][320];
}
void __AXGetAuxBInput(u32* p) {
if (__AXCallbackAuxB) {
*p = (u32)&__AXBufferAuxB[__AXAuxDspWritePosition][0];
} else {
*p = 0;
}
}
void __AXGetAuxBOutput(u32* p) {
*p = (u32)&__AXBufferAuxB[__AXAuxDspReadPosition][0];
}
void __AXGetAuxBForDPL2(u32* p) {
*p = (u32)&__AXBufferAuxB[__AXAuxDspWritePositionDpl2][0];
}
void __AXGetAuxBOutputDPL2(u32* p) {
*p = (u32)&__AXBufferAuxB[__AXAuxDspReadPositionDpl2][0];
}
void __AXProcessAux(void) {
__AXAuxADspWrite = &__AXBufferAuxA[__AXAuxDspWritePosition][0];
__AXAuxADspRead = &__AXBufferAuxA[__AXAuxDspReadPosition][0];
__AXAuxBDspWrite = &__AXBufferAuxB[__AXAuxDspWritePosition][0];
__AXAuxBDspRead = &__AXBufferAuxB[__AXAuxDspReadPosition][0];
if (__AXCallbackAuxA) {
if (__AXClMode == 2) {
AX_AUX_DATA_DPL2 auxData;
auxData.l = &__AXBufferAuxA[__AXAuxCpuReadWritePosition][0];
auxData.r = &__AXBufferAuxA[__AXAuxCpuReadWritePosition][160];
auxData.ls = &__AXBufferAuxA[__AXAuxCpuReadWritePosition][320];
auxData.rs = &__AXBufferAuxB[__AXAuxCpuReadWritePosition][320];
DCInvalidateRange(auxData.l, 0x780);
DCInvalidateRange(auxData.rs, 0x280);
__AXCallbackAuxA(&auxData.l, __AXContextAuxA);
DCFlushRangeNoSync(auxData.l, 0x780);
DCFlushRangeNoSync(auxData.rs, 0x280);
} else {
AX_AUX_DATA auxData;
auxData.l = &__AXBufferAuxA[__AXAuxCpuReadWritePosition][0];
auxData.r = &__AXBufferAuxA[__AXAuxCpuReadWritePosition][160];
auxData.s = &__AXBufferAuxA[__AXAuxCpuReadWritePosition][320];
DCInvalidateRange(auxData.l, 0x780);
__AXCallbackAuxA(&auxData.l, __AXContextAuxA);
DCFlushRangeNoSync(auxData.l, 0x780);
}
}
if (__AXCallbackAuxB && __AXClMode != 2) {
AX_AUX_DATA auxData;
auxData.l = &__AXBufferAuxB[__AXAuxCpuReadWritePosition][0];
auxData.r = &__AXBufferAuxB[__AXAuxCpuReadWritePosition][160];
auxData.s = &__AXBufferAuxB[__AXAuxCpuReadWritePosition][320];
DCInvalidateRange(auxData.l, 0x780);
__AXCallbackAuxB(&auxData.l, __AXContextAuxB);
DCFlushRangeNoSync(auxData.l, 0x780);
}
__AXAuxDspWritePosition += 1;
__AXAuxDspWritePosition %= 3;
__AXAuxDspReadPosition += 1;
__AXAuxDspReadPosition %= 3;
__AXAuxDspWritePositionDpl2 += 1;
__AXAuxDspWritePositionDpl2 &= 1;
__AXAuxDspReadPositionDpl2 += 1;
__AXAuxDspReadPositionDpl2 &= 1;
__AXAuxCpuReadWritePosition += 1;
__AXAuxCpuReadWritePosition %= 3;
}
void AXRegisterAuxACallback(void (*callback)(void*, void*), void* context) {
__AXCallbackAuxA = callback;
__AXContextAuxA = context;
}
void AXRegisterAuxBCallback(void (*callback)(void*, void*), void* context) {
__AXCallbackAuxB = callback;
__AXContextAuxB = context;
}
+176
View File
@@ -0,0 +1,176 @@
#include <dolphin/dolphin.h>
#include <dolphin/ax.h>
#include "__ax.h"
static u16 __AXCommandList[2][384];
static u32 __AXCommandListPosition;
static u16* __AXClWrite;
static u32 __AXCommandListCycles;
static u32 __AXCompressor;
u32 __AXClMode;
u32 __AXGetCommandListCycles(void) {
return __AXCommandListCycles;
}
u32 __AXGetCommandListAddress(void) {
u32 address;
address = (u32)&__AXCommandList[__AXCommandListPosition][0];
__AXCommandListPosition += 1;
__AXCommandListPosition &= 1;
__AXClWrite = (void*)&__AXCommandList[__AXCommandListPosition][0];
return address;
}
void __AXWriteToCommandList(u16 data) {
*__AXClWrite = data;
__AXClWrite++;
}
void __AXNextFrame(void* sbuffer, void* buffer) {
u32 data;
u16* pCommandList;
__AXCommandListCycles = 0x1A9;
pCommandList = __AXClWrite;
data = __AXGetStudio();
__AXWriteToCommandList(0);
__AXWriteToCommandList((u16)(data >> 0x10));
__AXWriteToCommandList((u16)(data));
__AXCommandListCycles += 0x2E44;
switch (__AXClMode) {
case 0:
__AXWriteToCommandList(7);
__AXWriteToCommandList((u16)((u32)sbuffer >> 0x10));
__AXWriteToCommandList((u32)sbuffer);
__AXCommandListCycles += 0x546;
break;
case 1:
__AXWriteToCommandList(0x11);
__AXWriteToCommandList((u16)((u32)sbuffer >> 0x10));
__AXWriteToCommandList((u32)sbuffer);
__AXCommandListCycles += 0x5E6;
break;
case 2:
break;
default:
ASSERTMSGLINE(193, 0, "Unknown AX mode!");
}
data = (u32)__AXGetPBs();
__AXWriteToCommandList(2);
__AXWriteToCommandList((u16)(data >> 0x10));
__AXWriteToCommandList((u16)data);
__AXWriteToCommandList(3);
if (__AXClMode == 2) {
__AXGetAuxAInput(&data);
if (data != 0) {
__AXWriteToCommandList(0x13);
__AXWriteToCommandList(data >> 0x10);
__AXWriteToCommandList((u16)data);
__AXGetAuxAInputDpl2(&data);
__AXWriteToCommandList(data >> 0x10);
__AXWriteToCommandList((u16)data);
__AXGetAuxAOutput(&data);
__AXWriteToCommandList(data >> 0x10);
__AXWriteToCommandList((u16)data);
__AXGetAuxAOutputDpl2R(&data);
__AXWriteToCommandList(data >> 0x10);
__AXWriteToCommandList((u16)data);
__AXGetAuxAOutputDpl2Ls(&data);
__AXWriteToCommandList(data >> 0x10);
__AXWriteToCommandList((u16)data);
__AXGetAuxAOutputDpl2Rs(&data);
__AXWriteToCommandList(data >> 0x10);
__AXWriteToCommandList((u16)data);
__AXCommandListCycles += 0xDED;
}
__AXWriteToCommandList(0x10);
__AXGetAuxBForDPL2(&data);
__AXWriteToCommandList(data >> 0x10);
__AXWriteToCommandList((u16)data);
__AXGetAuxBOutputDPL2(&data);
__AXWriteToCommandList(data >> 0x10);
__AXWriteToCommandList((u16)data);
__AXCommandListCycles += 0xDED;
} else {
__AXGetAuxAInput(&data);
if (data != 0) {
__AXWriteToCommandList(4);
__AXWriteToCommandList((u16)(data >> 0x10));
__AXWriteToCommandList((u16)data);
__AXGetAuxAOutput(&data);
__AXWriteToCommandList((u16)(data >> 0x10));
__AXWriteToCommandList((u16)data);
__AXCommandListCycles += 0xDED;
}
__AXGetAuxBInput(&data);
if (data != 0) {
__AXWriteToCommandList(5);
__AXCommandListCycles += 0xDED;
__AXWriteToCommandList((u16)(data >> 0x10));
__AXWriteToCommandList((u16)data);
__AXGetAuxBOutput(&data);
__AXWriteToCommandList((u16)(data >> 0x10));
__AXWriteToCommandList((u16)data);
}
}
if (__AXCompressor) {
__AXWriteToCommandList(0x12);
__AXWriteToCommandList(0x8000);
__AXWriteToCommandList(0xA);
__AXWriteToCommandList((u32)__AXCompressorTable >> 0x10);
__AXWriteToCommandList((u32)__AXCompressorTable);
__AXCommandListCycles += 0xBB8;
}
__AXWriteToCommandList(0xE);
__AXWriteToCommandList((u16)((u32)sbuffer >> 0x10));
__AXWriteToCommandList((u32)sbuffer);
__AXWriteToCommandList((u16)((u32)buffer >> 0x10));
__AXWriteToCommandList((u32)buffer);
__AXCommandListCycles += 0x2710;
__AXWriteToCommandList(0xF);
__AXCommandListCycles += 2;
DCFlushRange(pCommandList, 0x300);
}
void __AXClInit(void) {
#if DEBUG
OSReport("Initializing AXCL code module\n");
#endif
ASSERTLINE(338, ((u32)&__AXCommandList[0][0] & 0x1F) == 0);
ASSERTLINE(339, ((u32)&__AXCommandList[1][0] & 0x1F) == 0);
__AXClMode = 0;
__AXCommandListPosition = 0;
__AXClWrite = (void*)&__AXCommandList;
__AXCompressor = 1;
}
void __AXClQuit(void) {
#if DEBUG
OSReport("Shutting down AXCL code module\n");
#endif
}
void AXSetMode(u32 mode) {
if (__AXClMode != mode) {
__AXClMode = mode;
}
}
u32 AXGetMode(void) {
return __AXClMode;
}
void AXSetCompressor(u32 i) {
__AXCompressor = i;
}
+567
View File
@@ -0,0 +1,567 @@
#include <dolphin/dolphin.h>
#include <dolphin/ax.h>
#include "__ax.h"
u16 __AXCompressorTable[3360] = {
0x7FA1, 0x7F43, 0x7EE6, 0x7E88, 0x7E2B, 0x7DCE,
0x7D72, 0x7D16, 0x7CBA, 0x7C5E, 0x7C02, 0x7BA7,
0x7B4C, 0x7AF1, 0x7A97, 0x7A3D, 0x79E3, 0x7989,
0x7930, 0x78D6, 0x787E, 0x7825, 0x77CD, 0x7774,
0x771C, 0x76C5, 0x766D, 0x7616, 0x75BF, 0x7569,
0x7512, 0x74BC, 0x7466, 0x7411, 0x73BB, 0x7366,
0x7311, 0x72BD, 0x7268, 0x7214, 0x71C0, 0x716C,
0x7119, 0x70C6, 0x7073, 0x7020, 0x6FCD, 0x6F7B,
0x6F29, 0x6ED7, 0x6E86, 0x6E35, 0x6DE3, 0x6D93,
0x6D42, 0x6CF2, 0x6CA1, 0x6C52, 0x6C02, 0x6BB2,
0x6B63, 0x6B14, 0x6AC5, 0x6A77, 0x6A28, 0x69DA,
0x698C, 0x693F, 0x68F1, 0x68A4, 0x6857, 0x680A,
0x67BE, 0x6771, 0x6725, 0x66D9, 0x668E, 0x6642,
0x65F7, 0x65AC, 0x6561, 0x6517, 0x64CC, 0x6482,
0x6438, 0x63EE, 0x63A5, 0x635C, 0x6312, 0x62CA,
0x6281, 0x6238, 0x61F0, 0x61A8, 0x6160, 0x6119,
0x60D1, 0x608A, 0x6043, 0x5FFC, 0x5FB5, 0x5F6F,
0x5F29, 0x5EE3, 0x5E9D, 0x5E57, 0x5E12, 0x5DCD,
0x5D88, 0x5D43, 0x5CFE, 0x5CBA, 0x5C76, 0x5C32,
0x5BEE, 0x5BAA, 0x5B67, 0x5B23, 0x5AE0, 0x5A9D,
0x5A5B, 0x5A18, 0x59D6, 0x5994, 0x5952, 0x5910,
0x58CF, 0x588D, 0x584C, 0x580B, 0x57CB, 0x578A,
0x574A, 0x5709, 0x56C9, 0x5689, 0x564A, 0x560A,
0x55CB, 0x558C, 0x554D, 0x550E, 0x54D0, 0x5491,
0x5453, 0x5415, 0x53D7, 0x5399, 0x535C, 0x531E,
0x52E1, 0x52A4, 0x5267, 0x522B, 0x51EE, 0x51B2,
0x5176, 0x513A, 0x50FE, 0x50C3, 0x79EC, 0x799B,
0x794A, 0x78FA, 0x78AA, 0x785A, 0x780A, 0x77BB,
0x776C, 0x771C, 0x76CE, 0x767F, 0x7630, 0x75E2,
0x7594, 0x7546, 0x74F9, 0x74AB, 0x745E, 0x7411,
0x73C4, 0x7377, 0x732B, 0x72DE, 0x7292, 0x7246,
0x71FB, 0x71AF, 0x7164, 0x7119, 0x70CE, 0x7083,
0x7039, 0x6FEE, 0x6FA4, 0x6F5A, 0x6F11, 0x6EC7,
0x6E7E, 0x6E35, 0x6DEC, 0x6DA3, 0x6D5A, 0x6D12,
0x6CC9, 0x6C81, 0x6C3A, 0x6BF2, 0x6BAA, 0x6B63,
0x6B1C, 0x6AD5, 0x6A8E, 0x6A48, 0x6A01, 0x69BB,
0x6975, 0x692F, 0x68EA, 0x68A4, 0x685F, 0x681A,
0x67D5, 0x6790, 0x674B, 0x6707, 0x66C3, 0x667F,
0x663B, 0x65F7, 0x65B4, 0x6570, 0x652D, 0x64EA,
0x64A7, 0x6464, 0x6422, 0x63E0, 0x639E, 0x635C,
0x631A, 0x62D8, 0x6297, 0x6255, 0x6214, 0x61D3,
0x6192, 0x6152, 0x6111, 0x60D1, 0x6091, 0x6051,
0x6011, 0x5FD2, 0x5F92, 0x5F53, 0x5F14, 0x5ED5,
0x5E96, 0x5E57, 0x5E19, 0x5DDB, 0x5D9C, 0x5D5E,
0x5D21, 0x5CE3, 0x5CA5, 0x5C68, 0x5C2B, 0x5BEE,
0x5BB1, 0x5B74, 0x5B38, 0x5AFB, 0x5ABF, 0x5A83,
0x5A47, 0x5A0B, 0x59CF, 0x5994, 0x5959, 0x591D,
0x58E2, 0x58A8, 0x586D, 0x5832, 0x57F8, 0x57BE,
0x5783, 0x574A, 0x5710, 0x56D6, 0x569D, 0x5663,
0x562A, 0x55F1, 0x55B8, 0x557F, 0x5547, 0x550E,
0x54D6, 0x549E, 0x5466, 0x542E, 0x53F6, 0x53BE,
0x5387, 0x534F, 0x5318, 0x52E1, 0x52AA, 0x5274,
0x523D, 0x5207, 0x51D0, 0x519A, 0x5164, 0x512E,
0x50F8, 0x50C3, 0x7478, 0x7433, 0x73EF, 0x73AA,
0x7366, 0x7322, 0x72DE, 0x729B, 0x7257, 0x7214,
0x71D1, 0x718E, 0x714B, 0x7108, 0x70C6, 0x7083,
0x7041, 0x6FFF, 0x6FBD, 0x6F7B, 0x6F3A, 0x6EF8,
0x6EB7, 0x6E76, 0x6E35, 0x6DF4, 0x6DB3, 0x6D72,
0x6D32, 0x6CF2, 0x6CB1, 0x6C71, 0x6C32, 0x6BF2,
0x6BB2, 0x6B73, 0x6B34, 0x6AF5, 0x6AB6, 0x6A77,
0x6A38, 0x69FA, 0x69BB, 0x697D, 0x693F, 0x6901,
0x68C3, 0x6885, 0x6848, 0x680A, 0x67CD, 0x6790,
0x6753, 0x6716, 0x66D9, 0x669D, 0x6660, 0x6624,
0x65E8, 0x65AC, 0x6570, 0x6534, 0x64F9, 0x64BD,
0x6482, 0x6447, 0x640C, 0x63D1, 0x6396, 0x635C,
0x6321, 0x62E7, 0x62AC, 0x6272, 0x6238, 0x61FF,
0x61C5, 0x618B, 0x6152, 0x6119, 0x60DF, 0x60A6,
0x606D, 0x6035, 0x5FFC, 0x5FC4, 0x5F8B, 0x5F53,
0x5F1B, 0x5EE3, 0x5EAB, 0x5E73, 0x5E3C, 0x5E04,
0x5DCD, 0x5D95, 0x5D5E, 0x5D27, 0x5CF1, 0x5CBA,
0x5C83, 0x5C4D, 0x5C16, 0x5BE0, 0x5BAA, 0x5B74,
0x5B3E, 0x5B09, 0x5AD3, 0x5A9D, 0x5A68, 0x5A33,
0x59FE, 0x59C9, 0x5994, 0x595F, 0x592B, 0x58F6,
0x58C2, 0x588D, 0x5859, 0x5825, 0x57F1, 0x57BE,
0x578A, 0x5756, 0x5723, 0x56F0, 0x56BC, 0x5689,
0x5656, 0x5624, 0x55F1, 0x55BE, 0x558C, 0x5559,
0x5527, 0x54F5, 0x54C3, 0x5491, 0x545F, 0x542E,
0x53FC, 0x53CB, 0x5399, 0x5368, 0x5337, 0x5306,
0x52D5, 0x52A4, 0x5274, 0x5243, 0x5213, 0x51E2,
0x51B2, 0x5182, 0x5152, 0x5122, 0x50F2, 0x50C3,
0x6F42, 0x6F08, 0x6ECF, 0x6E96, 0x6E5D, 0x6E24,
0x6DEC, 0x6DB3, 0x6D7A, 0x6D42, 0x6D0A, 0x6CD2,
0x6C99, 0x6C61, 0x6C2A, 0x6BF2, 0x6BBA, 0x6B83,
0x6B4B, 0x6B14, 0x6ADD, 0x6AA6, 0x6A6F, 0x6A38,
0x6A01, 0x69CB, 0x6994, 0x695E, 0x6927, 0x68F1,
0x68BB, 0x6885, 0x684F, 0x681A, 0x67E4, 0x67AE,
0x6779, 0x6744, 0x670F, 0x66D9, 0x66A4, 0x6670,
0x663B, 0x6606, 0x65D2, 0x659D, 0x6569, 0x6534,
0x6500, 0x64CC, 0x6498, 0x6464, 0x6431, 0x63FD,
0x63CA, 0x6396, 0x6363, 0x6330, 0x62FD, 0x62CA,
0x6297, 0x6264, 0x6231, 0x61FF, 0x61CC, 0x619A,
0x6167, 0x6135, 0x6103, 0x60D1, 0x609F, 0x606D,
0x603C, 0x600A, 0x5FD9, 0x5FA7, 0x5F76, 0x5F45,
0x5F14, 0x5EE3, 0x5EB2, 0x5E81, 0x5E50, 0x5E20,
0x5DEF, 0x5DBF, 0x5D8F, 0x5D5E, 0x5D2E, 0x5CFE,
0x5CCE, 0x5C9F, 0x5C6F, 0x5C3F, 0x5C10, 0x5BE0,
0x5BB1, 0x5B82, 0x5B52, 0x5B23, 0x5AF4, 0x5AC6,
0x5A97, 0x5A68, 0x5A3A, 0x5A0B, 0x59DD, 0x59AE,
0x5980, 0x5952, 0x5924, 0x58F6, 0x58C8, 0x589A,
0x586D, 0x583F, 0x5812, 0x57E4, 0x57B7, 0x578A,
0x575D, 0x5730, 0x5703, 0x56D6, 0x56A9, 0x567D,
0x5650, 0x5624, 0x55F7, 0x55CB, 0x559F, 0x5573,
0x5547, 0x551B, 0x54EF, 0x54C3, 0x5497, 0x546C,
0x5440, 0x5415, 0x53EA, 0x53BE, 0x5393, 0x5368,
0x533D, 0x5312, 0x52E7, 0x52BD, 0x5292, 0x5267,
0x523D, 0x5213, 0x51E8, 0x51BE, 0x5194, 0x516A,
0x5140, 0x5116, 0x50EC, 0x50C3, 0x6A48, 0x6A19,
0x69EA, 0x69BB, 0x698C, 0x695E, 0x692F, 0x6901,
0x68D2, 0x68A4, 0x6876, 0x6848, 0x681A, 0x67EC,
0x67BE, 0x6790, 0x6762, 0x6735, 0x6707, 0x66D9,
0x66AC, 0x667F, 0x6651, 0x6624, 0x65F7, 0x65CA,
0x659D, 0x6570, 0x6543, 0x6517, 0x64EA, 0x64BD,
0x6491, 0x6464, 0x6438, 0x640C, 0x63E0, 0x63B4,
0x6388, 0x635C, 0x6330, 0x6304, 0x62D8, 0x62AC,
0x6281, 0x6255, 0x622A, 0x61FF, 0x61D3, 0x61A8,
0x617D, 0x6152, 0x6127, 0x60FC, 0x60D1, 0x60A6,
0x607C, 0x6051, 0x6027, 0x5FFC, 0x5FD2, 0x5FA7,
0x5F7D, 0x5F53, 0x5F29, 0x5EFF, 0x5ED5, 0x5EAB,
0x5E81, 0x5E57, 0x5E2E, 0x5E04, 0x5DDB, 0x5DB1,
0x5D88, 0x5D5E, 0x5D35, 0x5D0C, 0x5CE3, 0x5CBA,
0x5C91, 0x5C68, 0x5C3F, 0x5C16, 0x5BEE, 0x5BC5,
0x5B9D, 0x5B74, 0x5B4C, 0x5B23, 0x5AFB, 0x5AD3,
0x5AAB, 0x5A83, 0x5A5B, 0x5A33, 0x5A0B, 0x59E3,
0x59BC, 0x5994, 0x596C, 0x5945, 0x591D, 0x58F6,
0x58CF, 0x58A8, 0x5880, 0x5859, 0x5832, 0x580B,
0x57E4, 0x57BE, 0x5797, 0x5770, 0x574A, 0x5723,
0x56FC, 0x56D6, 0x56B0, 0x5689, 0x5663, 0x563D,
0x5617, 0x55F1, 0x55CB, 0x55A5, 0x557F, 0x5559,
0x5534, 0x550E, 0x54E9, 0x54C3, 0x549E, 0x5478,
0x5453, 0x542E, 0x5408, 0x53E3, 0x53BE, 0x5399,
0x5374, 0x534F, 0x532B, 0x5306, 0x52E1, 0x52BD,
0x5298, 0x5274, 0x524F, 0x522B, 0x5207, 0x51E2,
0x51BE, 0x519A, 0x5176, 0x5152, 0x512E, 0x510A,
0x50E6, 0x50C3, 0x6587, 0x6561, 0x653C, 0x6517,
0x64F1, 0x64CC, 0x64A7, 0x6482, 0x645D, 0x6438,
0x6413, 0x63EE, 0x63CA, 0x63A5, 0x6380, 0x635C,
0x6337, 0x6312, 0x62EE, 0x62CA, 0x62A5, 0x6281,
0x625D, 0x6238, 0x6214, 0x61F0, 0x61CC, 0x61A8,
0x6184, 0x6160, 0x613C, 0x6119, 0x60F5, 0x60D1,
0x60AD, 0x608A, 0x6066, 0x6043, 0x601F, 0x5FFC,
0x5FD9, 0x5FB5, 0x5F92, 0x5F6F, 0x5F4C, 0x5F29,
0x5F06, 0x5EE3, 0x5EC0, 0x5E9D, 0x5E7A, 0x5E57,
0x5E35, 0x5E12, 0x5DEF, 0x5DCD, 0x5DAA, 0x5D88,
0x5D65, 0x5D43, 0x5D21, 0x5CFE, 0x5CDC, 0x5CBA,
0x5C98, 0x5C76, 0x5C54, 0x5C32, 0x5C10, 0x5BEE,
0x5BCC, 0x5BAA, 0x5B88, 0x5B67, 0x5B45, 0x5B23,
0x5B02, 0x5AE0, 0x5ABF, 0x5A9D, 0x5A7C, 0x5A5B,
0x5A3A, 0x5A18, 0x59F7, 0x59D6, 0x59B5, 0x5994,
0x5973, 0x5952, 0x5931, 0x5910, 0x58F0, 0x58CF,
0x58AE, 0x588D, 0x586D, 0x584C, 0x582C, 0x580B,
0x57EB, 0x57CB, 0x57AA, 0x578A, 0x576A, 0x574A,
0x5729, 0x5709, 0x56E9, 0x56C9, 0x56A9, 0x5689,
0x566A, 0x564A, 0x562A, 0x560A, 0x55EB, 0x55CB,
0x55AB, 0x558C, 0x556C, 0x554D, 0x552D, 0x550E,
0x54EF, 0x54D0, 0x54B0, 0x5491, 0x5472, 0x5453,
0x5434, 0x5415, 0x53F6, 0x53D7, 0x53B8, 0x5399,
0x537B, 0x535C, 0x533D, 0x531E, 0x5300, 0x52E1,
0x52C3, 0x52A4, 0x5286, 0x5267, 0x5249, 0x522B,
0x520D, 0x51EE, 0x51D0, 0x51B2, 0x5194, 0x5176,
0x5158, 0x513A, 0x511C, 0x50FE, 0x50E0, 0x50C3,
0x60FC, 0x60DF, 0x60C3, 0x60A6, 0x608A, 0x606D,
0x6051, 0x6035, 0x6018, 0x5FFC, 0x5FE0, 0x5FC4,
0x5FA7, 0x5F8B, 0x5F6F, 0x5F53, 0x5F37, 0x5F1B,
0x5EFF, 0x5EE3, 0x5EC7, 0x5EAB, 0x5E8F, 0x5E73,
0x5E57, 0x5E3C, 0x5E20, 0x5E04, 0x5DE8, 0x5DCD,
0x5DB1, 0x5D95, 0x5D7A, 0x5D5E, 0x5D43, 0x5D27,
0x5D0C, 0x5CF1, 0x5CD5, 0x5CBA, 0x5C9F, 0x5C83,
0x5C68, 0x5C4D, 0x5C32, 0x5C16, 0x5BFB, 0x5BE0,
0x5BC5, 0x5BAA, 0x5B8F, 0x5B74, 0x5B59, 0x5B3E,
0x5B23, 0x5B09, 0x5AEE, 0x5AD3, 0x5AB8, 0x5A9D,
0x5A83, 0x5A68, 0x5A4D, 0x5A33, 0x5A18, 0x59FE,
0x59E3, 0x59C9, 0x59AE, 0x5994, 0x597A, 0x595F,
0x5945, 0x592B, 0x5910, 0x58F6, 0x58DC, 0x58C2,
0x58A8, 0x588D, 0x5873, 0x5859, 0x583F, 0x5825,
0x580B, 0x57F1, 0x57D7, 0x57BE, 0x57A4, 0x578A,
0x5770, 0x5756, 0x573D, 0x5723, 0x5709, 0x56F0,
0x56D6, 0x56BC, 0x56A3, 0x5689, 0x5670, 0x5656,
0x563D, 0x5624, 0x560A, 0x55F1, 0x55D8, 0x55BE,
0x55A5, 0x558C, 0x5573, 0x5559, 0x5540, 0x5527,
0x550E, 0x54F5, 0x54DC, 0x54C3, 0x54AA, 0x5491,
0x5478, 0x545F, 0x5446, 0x542E, 0x5415, 0x53FC,
0x53E3, 0x53CB, 0x53B2, 0x5399, 0x5381, 0x5368,
0x534F, 0x5337, 0x531E, 0x5306, 0x52ED, 0x52D5,
0x52BD, 0x52A4, 0x528C, 0x5274, 0x525B, 0x5243,
0x522B, 0x5213, 0x51FA, 0x51E2, 0x51CA, 0x51B2,
0x519A, 0x5182, 0x516A, 0x5152, 0x513A, 0x5122,
0x510A, 0x50F2, 0x50DB, 0x50C3, 0x5CA5, 0x5C91,
0x5C7C, 0x5C68, 0x5C54, 0x5C3F, 0x5C2B, 0x5C16,
0x5C02, 0x5BEE, 0x5BD9, 0x5BC5, 0x5BB1, 0x5B9D,
0x5B88, 0x5B74, 0x5B60, 0x5B4C, 0x5B38, 0x5B23,
0x5B0F, 0x5AFB, 0x5AE7, 0x5AD3, 0x5ABF, 0x5AAB,
0x5A97, 0x5A83, 0x5A6F, 0x5A5B, 0x5A47, 0x5A33,
0x5A1F, 0x5A0B, 0x59F7, 0x59E3, 0x59CF, 0x59BC,
0x59A8, 0x5994, 0x5980, 0x596C, 0x5959, 0x5945,
0x5931, 0x591D, 0x590A, 0x58F6, 0x58E2, 0x58CF,
0x58BB, 0x58A8, 0x5894, 0x5880, 0x586D, 0x5859,
0x5846, 0x5832, 0x581F, 0x580B, 0x57F8, 0x57E4,
0x57D1, 0x57BE, 0x57AA, 0x5797, 0x5783, 0x5770,
0x575D, 0x574A, 0x5736, 0x5723, 0x5710, 0x56FC,
0x56E9, 0x56D6, 0x56C3, 0x56B0, 0x569D, 0x5689,
0x5676, 0x5663, 0x5650, 0x563D, 0x562A, 0x5617,
0x5604, 0x55F1, 0x55DE, 0x55CB, 0x55B8, 0x55A5,
0x5592, 0x557F, 0x556C, 0x5559, 0x5547, 0x5534,
0x5521, 0x550E, 0x54FB, 0x54E9, 0x54D6, 0x54C3,
0x54B0, 0x549E, 0x548B, 0x5478, 0x5466, 0x5453,
0x5440, 0x542E, 0x541B, 0x5408, 0x53F6, 0x53E3,
0x53D1, 0x53BE, 0x53AC, 0x5399, 0x5387, 0x5374,
0x5362, 0x534F, 0x533D, 0x532B, 0x5318, 0x5306,
0x52F4, 0x52E1, 0x52CF, 0x52BD, 0x52AA, 0x5298,
0x5286, 0x5274, 0x5261, 0x524F, 0x523D, 0x522B,
0x5219, 0x5207, 0x51F4, 0x51E2, 0x51D0, 0x51BE,
0x51AC, 0x519A, 0x5188, 0x5176, 0x5164, 0x5152,
0x5140, 0x512E, 0x511C, 0x510A, 0x50F8, 0x50E6,
0x50D5, 0x50C3, 0x5880, 0x5873, 0x5866, 0x5859,
0x584C, 0x583F, 0x5832, 0x5825, 0x5818, 0x580B,
0x57FE, 0x57F1, 0x57E4, 0x57D7, 0x57CB, 0x57BE,
0x57B1, 0x57A4, 0x5797, 0x578A, 0x577D, 0x5770,
0x5763, 0x5756, 0x574A, 0x573D, 0x5730, 0x5723,
0x5716, 0x5709, 0x56FC, 0x56F0, 0x56E3, 0x56D6,
0x56C9, 0x56BC, 0x56B0, 0x56A3, 0x5696, 0x5689,
0x567D, 0x5670, 0x5663, 0x5656, 0x564A, 0x563D,
0x5630, 0x5624, 0x5617, 0x560A, 0x55FE, 0x55F1,
0x55E4, 0x55D8, 0x55CB, 0x55BE, 0x55B2, 0x55A5,
0x5598, 0x558C, 0x557F, 0x5573, 0x5566, 0x5559,
0x554D, 0x5540, 0x5534, 0x5527, 0x551B, 0x550E,
0x5502, 0x54F5, 0x54E9, 0x54DC, 0x54D0, 0x54C3,
0x54B7, 0x54AA, 0x549E, 0x5491, 0x5485, 0x5478,
0x546C, 0x545F, 0x5453, 0x5446, 0x543A, 0x542E,
0x5421, 0x5415, 0x5408, 0x53FC, 0x53F0, 0x53E3,
0x53D7, 0x53CB, 0x53BE, 0x53B2, 0x53A6, 0x5399,
0x538D, 0x5381, 0x5374, 0x5368, 0x535C, 0x534F,
0x5343, 0x5337, 0x532B, 0x531E, 0x5312, 0x5306,
0x52FA, 0x52ED, 0x52E1, 0x52D5, 0x52C9, 0x52BD,
0x52B0, 0x52A4, 0x5298, 0x528C, 0x5280, 0x5274,
0x5267, 0x525B, 0x524F, 0x5243, 0x5237, 0x522B,
0x521F, 0x5213, 0x5207, 0x51FA, 0x51EE, 0x51E2,
0x51D6, 0x51CA, 0x51BE, 0x51B2, 0x51A6, 0x519A,
0x518E, 0x5182, 0x5176, 0x516A, 0x515E, 0x5152,
0x5146, 0x513A, 0x512E, 0x5122, 0x5116, 0x510A,
0x50FE, 0x50F2, 0x50E6, 0x50DB, 0x50CF, 0x50C3,
0x548B, 0x5485, 0x547E, 0x5478, 0x5472, 0x546C,
0x5466, 0x545F, 0x5459, 0x5453, 0x544D, 0x5446,
0x5440, 0x543A, 0x5434, 0x542E, 0x5427, 0x5421,
0x541B, 0x5415, 0x540F, 0x5408, 0x5402, 0x53FC,
0x53F6, 0x53F0, 0x53EA, 0x53E3, 0x53DD, 0x53D7,
0x53D1, 0x53CB, 0x53C4, 0x53BE, 0x53B8, 0x53B2,
0x53AC, 0x53A6, 0x539F, 0x5399, 0x5393, 0x538D,
0x5387, 0x5381, 0x537B, 0x5374, 0x536E, 0x5368,
0x5362, 0x535C, 0x5356, 0x534F, 0x5349, 0x5343,
0x533D, 0x5337, 0x5331, 0x532B, 0x5325, 0x531E,
0x5318, 0x5312, 0x530C, 0x5306, 0x5300, 0x52FA,
0x52F4, 0x52ED, 0x52E7, 0x52E1, 0x52DB, 0x52D5,
0x52CF, 0x52C9, 0x52C3, 0x52BD, 0x52B7, 0x52B0,
0x52AA, 0x52A4, 0x529E, 0x5298, 0x5292, 0x528C,
0x5286, 0x5280, 0x527A, 0x5274, 0x526E, 0x5267,
0x5261, 0x525B, 0x5255, 0x524F, 0x5249, 0x5243,
0x523D, 0x5237, 0x5231, 0x522B, 0x5225, 0x521F,
0x5219, 0x5213, 0x520D, 0x5207, 0x5201, 0x51FA,
0x51F4, 0x51EE, 0x51E8, 0x51E2, 0x51DC, 0x51D6,
0x51D0, 0x51CA, 0x51C4, 0x51BE, 0x51B8, 0x51B2,
0x51AC, 0x51A6, 0x51A0, 0x519A, 0x5194, 0x518E,
0x5188, 0x5182, 0x517C, 0x5176, 0x5170, 0x516A,
0x5164, 0x515E, 0x5158, 0x5152, 0x514C, 0x5146,
0x5140, 0x513A, 0x5134, 0x512E, 0x5128, 0x5122,
0x511C, 0x5116, 0x5110, 0x510A, 0x5104, 0x50FE,
0x50F8, 0x50F2, 0x50EC, 0x50E6, 0x50E0, 0x50DB,
0x50D5, 0x50CF, 0x50C9, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3, 0x50C3,
0x50C3, 0x50C3, 0x7A46, 0x7A4F, 0x7A58, 0x7A61,
0x7A6A, 0x7A73, 0x7A7C, 0x7A85, 0x7A8E, 0x7A97,
0x7AA0, 0x7AA9, 0x7AB2, 0x7ABB, 0x7AC4, 0x7ACD,
0x7AD6, 0x7ADF, 0x7AE8, 0x7AF1, 0x7AFA, 0x7B03,
0x7B0D, 0x7B16, 0x7B1F, 0x7B28, 0x7B31, 0x7B3A,
0x7B43, 0x7B4C, 0x7B55, 0x7B5E, 0x7B67, 0x7B70,
0x7B7A, 0x7B83, 0x7B8C, 0x7B95, 0x7B9E, 0x7BA7,
0x7BB0, 0x7BB9, 0x7BC2, 0x7BCC, 0x7BD5, 0x7BDE,
0x7BE7, 0x7BF0, 0x7BF9, 0x7C02, 0x7C0B, 0x7C15,
0x7C1E, 0x7C27, 0x7C30, 0x7C39, 0x7C42, 0x7C4B,
0x7C55, 0x7C5E, 0x7C67, 0x7C70, 0x7C79, 0x7C82,
0x7C8C, 0x7C95, 0x7C9E, 0x7CA7, 0x7CB0, 0x7CBA,
0x7CC3, 0x7CCC, 0x7CD5, 0x7CDE, 0x7CE8, 0x7CF1,
0x7CFA, 0x7D03, 0x7D0C, 0x7D16, 0x7D1F, 0x7D28,
0x7D31, 0x7D3A, 0x7D44, 0x7D4D, 0x7D56, 0x7D5F,
0x7D69, 0x7D72, 0x7D7B, 0x7D84, 0x7D8E, 0x7D97,
0x7DA0, 0x7DA9, 0x7DB3, 0x7DBC, 0x7DC5, 0x7DCE,
0x7DD8, 0x7DE1, 0x7DEA, 0x7DF4, 0x7DFD, 0x7E06,
0x7E0F, 0x7E19, 0x7E22, 0x7E2B, 0x7E35, 0x7E3E,
0x7E47, 0x7E51, 0x7E5A, 0x7E63, 0x7E6C, 0x7E76,
0x7E7F, 0x7E88, 0x7E92, 0x7E9B, 0x7EA4, 0x7EAE,
0x7EB7, 0x7EC0, 0x7ECA, 0x7ED3, 0x7EDC, 0x7EE6,
0x7EEF, 0x7EF8, 0x7F02, 0x7F0B, 0x7F15, 0x7F1E,
0x7F27, 0x7F31, 0x7F3A, 0x7F43, 0x7F4D, 0x7F56,
0x7F60, 0x7F69, 0x7F72, 0x7F7C, 0x7F85, 0x7F8F,
0x7F98, 0x7FA1, 0x7FAB, 0x7FB4, 0x7FBE, 0x7FC7,
0x7FD0, 0x7FDA, 0x7FE3, 0x7FED, 0x7FF6, 0x8000,
0x74C5, 0x74CD, 0x74D6, 0x74DF, 0x74E7, 0x74F0,
0x74F9, 0x7501, 0x750A, 0x7512, 0x751B, 0x7524,
0x752C, 0x7535, 0x753E, 0x7546, 0x754F, 0x7558,
0x7560, 0x7569, 0x7571, 0x757A, 0x7583, 0x758B,
0x7594, 0x759D, 0x75A5, 0x75AE, 0x75B7, 0x75BF,
0x75C8, 0x75D1, 0x75D9, 0x75E2, 0x75EB, 0x75F4,
0x75FC, 0x7605, 0x760E, 0x7616, 0x761F, 0x7628,
0x7630, 0x7639, 0x7642, 0x764B, 0x7653, 0x765C,
0x7665, 0x766D, 0x7676, 0x767F, 0x7688, 0x7690,
0x7699, 0x76A2, 0x76AB, 0x76B3, 0x76BC, 0x76C5,
0x76CE, 0x76D6, 0x76DF, 0x76E8, 0x76F1, 0x76F9,
0x7702, 0x770B, 0x7714, 0x771C, 0x7725, 0x772E,
0x7737, 0x7740, 0x7748, 0x7751, 0x775A, 0x7763,
0x776C, 0x7774, 0x777D, 0x7786, 0x778F, 0x7798,
0x77A0, 0x77A9, 0x77B2, 0x77BB, 0x77C4, 0x77CD,
0x77D5, 0x77DE, 0x77E7, 0x77F0, 0x77F9, 0x7802,
0x780A, 0x7813, 0x781C, 0x7825, 0x782E, 0x7837,
0x783F, 0x7848, 0x7851, 0x785A, 0x7863, 0x786C,
0x7875, 0x787E, 0x7886, 0x788F, 0x7898, 0x78A1,
0x78AA, 0x78B3, 0x78BC, 0x78C5, 0x78CE, 0x78D6,
0x78DF, 0x78E8, 0x78F1, 0x78FA, 0x7903, 0x790C,
0x7915, 0x791E, 0x7927, 0x7930, 0x7939, 0x7942,
0x794A, 0x7953, 0x795C, 0x7965, 0x796E, 0x7977,
0x7980, 0x7989, 0x7992, 0x799B, 0x79A4, 0x79AD,
0x79B6, 0x79BF, 0x79C8, 0x79D1, 0x79DA, 0x79E3,
0x79EC, 0x79F5, 0x79FE, 0x7A07, 0x7A10, 0x7A19,
0x7A22, 0x7A2B, 0x7A34, 0x7A3D, 0x6F83, 0x6F8C,
0x6F94, 0x6F9C, 0x6FA4, 0x6FAD, 0x6FB5, 0x6FBD,
0x6FC5, 0x6FCD, 0x6FD6, 0x6FDE, 0x6FE6, 0x6FEE,
0x6FF7, 0x6FFF, 0x7007, 0x700F, 0x7018, 0x7020,
0x7028, 0x7031, 0x7039, 0x7041, 0x7049, 0x7052,
0x705A, 0x7062, 0x706A, 0x7073, 0x707B, 0x7083,
0x708C, 0x7094, 0x709C, 0x70A4, 0x70AD, 0x70B5,
0x70BD, 0x70C6, 0x70CE, 0x70D6, 0x70DF, 0x70E7,
0x70EF, 0x70F8, 0x7100, 0x7108, 0x7111, 0x7119,
0x7121, 0x712A, 0x7132, 0x713A, 0x7143, 0x714B,
0x7153, 0x715C, 0x7164, 0x716C, 0x7175, 0x717D,
0x7185, 0x718E, 0x7196, 0x719F, 0x71A7, 0x71AF,
0x71B8, 0x71C0, 0x71C8, 0x71D1, 0x71D9, 0x71E2,
0x71EA, 0x71F2, 0x71FB, 0x7203, 0x720C, 0x7214,
0x721C, 0x7225, 0x722D, 0x7236, 0x723E, 0x7246,
0x724F, 0x7257, 0x7260, 0x7268, 0x7271, 0x7279,
0x7281, 0x728A, 0x7292, 0x729B, 0x72A3, 0x72AC,
0x72B4, 0x72BD, 0x72C5, 0x72CE, 0x72D6, 0x72DE,
0x72E7, 0x72EF, 0x72F8, 0x7300, 0x7309, 0x7311,
0x731A, 0x7322, 0x732B, 0x7333, 0x733C, 0x7344,
0x734D, 0x7355, 0x735E, 0x7366, 0x736F, 0x7377,
0x7380, 0x7388, 0x7391, 0x7399, 0x73A2, 0x73AA,
0x73B3, 0x73BB, 0x73C4, 0x73CC, 0x73D5, 0x73DD,
0x73E6, 0x73EF, 0x73F7, 0x7400, 0x7408, 0x7411,
0x7419, 0x7422, 0x742A, 0x7433, 0x743C, 0x7444,
0x744D, 0x7455, 0x745E, 0x7466, 0x746F, 0x7478,
0x7480, 0x7489, 0x7491, 0x749A, 0x74A2, 0x74AB,
0x74B4, 0x74BC, 0x6A7F, 0x6A86, 0x6A8E, 0x6A96,
0x6A9E, 0x6AA6, 0x6AAE, 0x6AB6, 0x6ABD, 0x6AC5,
0x6ACD, 0x6AD5, 0x6ADD, 0x6AE5, 0x6AED, 0x6AF5,
0x6AFC, 0x6B04, 0x6B0C, 0x6B14, 0x6B1C, 0x6B24,
0x6B2C, 0x6B34, 0x6B3C, 0x6B43, 0x6B4B, 0x6B53,
0x6B5B, 0x6B63, 0x6B6B, 0x6B73, 0x6B7B, 0x6B83,
0x6B8B, 0x6B93, 0x6B9B, 0x6BA2, 0x6BAA, 0x6BB2,
0x6BBA, 0x6BC2, 0x6BCA, 0x6BD2, 0x6BDA, 0x6BE2,
0x6BEA, 0x6BF2, 0x6BFA, 0x6C02, 0x6C0A, 0x6C12,
0x6C1A, 0x6C22, 0x6C2A, 0x6C32, 0x6C3A, 0x6C42,
0x6C4A, 0x6C52, 0x6C59, 0x6C61, 0x6C69, 0x6C71,
0x6C79, 0x6C81, 0x6C89, 0x6C91, 0x6C99, 0x6CA1,
0x6CA9, 0x6CB1, 0x6CB9, 0x6CC1, 0x6CC9, 0x6CD2,
0x6CDA, 0x6CE2, 0x6CEA, 0x6CF2, 0x6CFA, 0x6D02,
0x6D0A, 0x6D12, 0x6D1A, 0x6D22, 0x6D2A, 0x6D32,
0x6D3A, 0x6D42, 0x6D4A, 0x6D52, 0x6D5A, 0x6D62,
0x6D6A, 0x6D72, 0x6D7A, 0x6D82, 0x6D8B, 0x6D93,
0x6D9B, 0x6DA3, 0x6DAB, 0x6DB3, 0x6DBB, 0x6DC3,
0x6DCB, 0x6DD3, 0x6DDB, 0x6DE3, 0x6DEC, 0x6DF4,
0x6DFC, 0x6E04, 0x6E0C, 0x6E14, 0x6E1C, 0x6E24,
0x6E2C, 0x6E35, 0x6E3D, 0x6E45, 0x6E4D, 0x6E55,
0x6E5D, 0x6E65, 0x6E6D, 0x6E76, 0x6E7E, 0x6E86,
0x6E8E, 0x6E96, 0x6E9E, 0x6EA6, 0x6EAF, 0x6EB7,
0x6EBF, 0x6EC7, 0x6ECF, 0x6ED7, 0x6EE0, 0x6EE8,
0x6EF0, 0x6EF8, 0x6F00, 0x6F08, 0x6F11, 0x6F19,
0x6F21, 0x6F29, 0x6F31, 0x6F3A, 0x6F42, 0x6F4A,
0x6F52, 0x6F5A, 0x6F63, 0x6F6B, 0x6F73, 0x6F7B,
0x65B4, 0x65BB, 0x65C3, 0x65CA, 0x65D2, 0x65D9,
0x65E1, 0x65E8, 0x65F0, 0x65F7, 0x65FF, 0x6606,
0x660E, 0x6615, 0x661D, 0x6624, 0x662C, 0x6633,
0x663B, 0x6642, 0x664A, 0x6651, 0x6659, 0x6660,
0x6668, 0x6670, 0x6677, 0x667F, 0x6686, 0x668E,
0x6695, 0x669D, 0x66A4, 0x66AC, 0x66B4, 0x66BB,
0x66C3, 0x66CA, 0x66D2, 0x66D9, 0x66E1, 0x66E9,
0x66F0, 0x66F8, 0x66FF, 0x6707, 0x670F, 0x6716,
0x671E, 0x6725, 0x672D, 0x6735, 0x673C, 0x6744,
0x674B, 0x6753, 0x675B, 0x6762, 0x676A, 0x6771,
0x6779, 0x6781, 0x6788, 0x6790, 0x6798, 0x679F,
0x67A7, 0x67AE, 0x67B6, 0x67BE, 0x67C5, 0x67CD,
0x67D5, 0x67DC, 0x67E4, 0x67EC, 0x67F3, 0x67FB,
0x6803, 0x680A, 0x6812, 0x681A, 0x6821, 0x6829,
0x6831, 0x6838, 0x6840, 0x6848, 0x684F, 0x6857,
0x685F, 0x6866, 0x686E, 0x6876, 0x687E, 0x6885,
0x688D, 0x6895, 0x689C, 0x68A4, 0x68AC, 0x68B4,
0x68BB, 0x68C3, 0x68CB, 0x68D2, 0x68DA, 0x68E2,
0x68EA, 0x68F1, 0x68F9, 0x6901, 0x6909, 0x6910,
0x6918, 0x6920, 0x6927, 0x692F, 0x6937, 0x693F,
0x6947, 0x694E, 0x6956, 0x695E, 0x6966, 0x696D,
0x6975, 0x697D, 0x6985, 0x698C, 0x6994, 0x699C,
0x69A4, 0x69AC, 0x69B3, 0x69BB, 0x69C3, 0x69CB,
0x69D2, 0x69DA, 0x69E2, 0x69EA, 0x69F2, 0x69FA,
0x6A01, 0x6A09, 0x6A11, 0x6A19, 0x6A21, 0x6A28,
0x6A30, 0x6A38, 0x6A40, 0x6A48, 0x6A50, 0x6A57,
0x6A5F, 0x6A67, 0x6A6F, 0x6A77, 0x6120, 0x6127,
0x612E, 0x6135, 0x613C, 0x6144, 0x614B, 0x6152,
0x6159, 0x6160, 0x6167, 0x616F, 0x6176, 0x617D,
0x6184, 0x618B, 0x6192, 0x619A, 0x61A1, 0x61A8,
0x61AF, 0x61B6, 0x61BE, 0x61C5, 0x61CC, 0x61D3,
0x61DA, 0x61E2, 0x61E9, 0x61F0, 0x61F7, 0x61FF,
0x6206, 0x620D, 0x6214, 0x621B, 0x6223, 0x622A,
0x6231, 0x6238, 0x6240, 0x6247, 0x624E, 0x6255,
0x625D, 0x6264, 0x626B, 0x6272, 0x627A, 0x6281,
0x6288, 0x628F, 0x6297, 0x629E, 0x62A5, 0x62AC,
0x62B4, 0x62BB, 0x62C2, 0x62CA, 0x62D1, 0x62D8,
0x62DF, 0x62E7, 0x62EE, 0x62F5, 0x62FD, 0x6304,
0x630B, 0x6312, 0x631A, 0x6321, 0x6328, 0x6330,
0x6337, 0x633E, 0x6346, 0x634D, 0x6354, 0x635C,
0x6363, 0x636A, 0x6372, 0x6379, 0x6380, 0x6388,
0x638F, 0x6396, 0x639E, 0x63A5, 0x63AC, 0x63B4,
0x63BB, 0x63C2, 0x63CA, 0x63D1, 0x63D8, 0x63E0,
0x63E7, 0x63EE, 0x63F6, 0x63FD, 0x6405, 0x640C,
0x6413, 0x641B, 0x6422, 0x6429, 0x6431, 0x6438,
0x6440, 0x6447, 0x644E, 0x6456, 0x645D, 0x6464,
0x646C, 0x6473, 0x647B, 0x6482, 0x648A, 0x6491,
0x6498, 0x64A0, 0x64A7, 0x64AF, 0x64B6, 0x64BD,
0x64C5, 0x64CC, 0x64D4, 0x64DB, 0x64E3, 0x64EA,
0x64F1, 0x64F9, 0x6500, 0x6508, 0x650F, 0x6517,
0x651E, 0x6526, 0x652D, 0x6534, 0x653C, 0x6543,
0x654B, 0x6552, 0x655A, 0x6561, 0x6569, 0x6570,
0x6578, 0x657F, 0x6587, 0x658E, 0x6596, 0x659D,
0x65A5, 0x65AC, 0x5CC1, 0x5CC7, 0x5CCE, 0x5CD5,
0x5CDC, 0x5CE3, 0x5CEA, 0x5CF1, 0x5CF7, 0x5CFE,
0x5D05, 0x5D0C, 0x5D13, 0x5D1A, 0x5D21, 0x5D27,
0x5D2E, 0x5D35, 0x5D3C, 0x5D43, 0x5D4A, 0x5D51,
0x5D57, 0x5D5E, 0x5D65, 0x5D6C, 0x5D73, 0x5D7A,
0x5D81, 0x5D88, 0x5D8F, 0x5D95, 0x5D9C, 0x5DA3,
0x5DAA, 0x5DB1, 0x5DB8, 0x5DBF, 0x5DC6, 0x5DCD,
0x5DD4, 0x5DDB, 0x5DE1, 0x5DE8, 0x5DEF, 0x5DF6,
0x5DFD, 0x5E04, 0x5E0B, 0x5E12, 0x5E19, 0x5E20,
0x5E27, 0x5E2E, 0x5E35, 0x5E3C, 0x5E42, 0x5E49,
0x5E50, 0x5E57, 0x5E5E, 0x5E65, 0x5E6C, 0x5E73,
0x5E7A, 0x5E81, 0x5E88, 0x5E8F, 0x5E96, 0x5E9D,
0x5EA4, 0x5EAB, 0x5EB2, 0x5EB9, 0x5EC0, 0x5EC7,
0x5ECE, 0x5ED5, 0x5EDC, 0x5EE3, 0x5EEA, 0x5EF1,
0x5EF8, 0x5EFF, 0x5F06, 0x5F0D, 0x5F14, 0x5F1B,
0x5F22, 0x5F29, 0x5F30, 0x5F37, 0x5F3E, 0x5F45,
0x5F4C, 0x5F53, 0x5F5A, 0x5F61, 0x5F68, 0x5F6F,
0x5F76, 0x5F7D, 0x5F84, 0x5F8B, 0x5F92, 0x5F99,
0x5FA0, 0x5FA7, 0x5FAE, 0x5FB5, 0x5FBC, 0x5FC4,
0x5FCB, 0x5FD2, 0x5FD9, 0x5FE0, 0x5FE7, 0x5FEE,
0x5FF5, 0x5FFC, 0x6003, 0x600A, 0x6011, 0x6018,
0x601F, 0x6027, 0x602E, 0x6035, 0x603C, 0x6043,
0x604A, 0x6051, 0x6058, 0x605F, 0x6066, 0x606D,
0x6075, 0x607C, 0x6083, 0x608A, 0x6091, 0x6098,
0x609F, 0x60A6, 0x60AD, 0x60B5, 0x60BC, 0x60C3,
0x60CA, 0x60D1, 0x60D8, 0x60DF, 0x60E7, 0x60EE,
0x60F5, 0x60FC, 0x6103, 0x610A, 0x6111, 0x6119,
0x5894, 0x589A, 0x58A1, 0x58A8, 0x58AE, 0x58B5,
0x58BB, 0x58C2, 0x58C8, 0x58CF, 0x58D5, 0x58DC,
0x58E2, 0x58E9, 0x58F0, 0x58F6, 0x58FD, 0x5903,
0x590A, 0x5910, 0x5917, 0x591D, 0x5924, 0x592B,
0x5931, 0x5938, 0x593E, 0x5945, 0x594B, 0x5952,
0x5959, 0x595F, 0x5966, 0x596C, 0x5973, 0x597A,
0x5980, 0x5987, 0x598D, 0x5994, 0x599B, 0x59A1,
0x59A8, 0x59AE, 0x59B5, 0x59BC, 0x59C2, 0x59C9,
0x59CF, 0x59D6, 0x59DD, 0x59E3, 0x59EA, 0x59F1,
0x59F7, 0x59FE, 0x5A04, 0x5A0B, 0x5A12, 0x5A18,
0x5A1F, 0x5A26, 0x5A2C, 0x5A33, 0x5A3A, 0x5A40,
0x5A47, 0x5A4D, 0x5A54, 0x5A5B, 0x5A61, 0x5A68,
0x5A6F, 0x5A75, 0x5A7C, 0x5A83, 0x5A89, 0x5A90,
0x5A97, 0x5A9D, 0x5AA4, 0x5AAB, 0x5AB2, 0x5AB8,
0x5ABF, 0x5AC6, 0x5ACC, 0x5AD3, 0x5ADA, 0x5AE0,
0x5AE7, 0x5AEE, 0x5AF4, 0x5AFB, 0x5B02, 0x5B09,
0x5B0F, 0x5B16, 0x5B1D, 0x5B23, 0x5B2A, 0x5B31,
0x5B38, 0x5B3E, 0x5B45, 0x5B4C, 0x5B52, 0x5B59,
0x5B60, 0x5B67, 0x5B6D, 0x5B74, 0x5B7B, 0x5B82,
0x5B88, 0x5B8F, 0x5B96, 0x5B9D, 0x5BA3, 0x5BAA,
0x5BB1, 0x5BB8, 0x5BBE, 0x5BC5, 0x5BCC, 0x5BD3,
0x5BD9, 0x5BE0, 0x5BE7, 0x5BEE, 0x5BF5, 0x5BFB,
0x5C02, 0x5C09, 0x5C10, 0x5C16, 0x5C1D, 0x5C24,
0x5C2B, 0x5C32, 0x5C38, 0x5C3F, 0x5C46, 0x5C4D,
0x5C54, 0x5C5A, 0x5C61, 0x5C68, 0x5C6F, 0x5C76,
0x5C7C, 0x5C83, 0x5C8A, 0x5C91, 0x5C98, 0x5C9F,
0x5CA5, 0x5CAC, 0x5CB3, 0x5CBA, 0x5497, 0x549E,
0x54A4, 0x54AA, 0x54B0, 0x54B7, 0x54BD, 0x54C3,
0x54C9, 0x54D0, 0x54D6, 0x54DC, 0x54E2, 0x54E9,
0x54EF, 0x54F5, 0x54FB, 0x5502, 0x5508, 0x550E,
0x5514, 0x551B, 0x5521, 0x5527, 0x552D, 0x5534,
0x553A, 0x5540, 0x5547, 0x554D, 0x5553, 0x5559,
0x5560, 0x5566, 0x556C, 0x5573, 0x5579, 0x557F,
0x5585, 0x558C, 0x5592, 0x5598, 0x559F, 0x55A5,
0x55AB, 0x55B2, 0x55B8, 0x55BE, 0x55C5, 0x55CB,
0x55D1, 0x55D8, 0x55DE, 0x55E4, 0x55EB, 0x55F1,
0x55F7, 0x55FE, 0x5604, 0x560A, 0x5611, 0x5617,
0x561D, 0x5624, 0x562A, 0x5630, 0x5637, 0x563D,
0x5643, 0x564A, 0x5650, 0x5656, 0x565D, 0x5663,
0x566A, 0x5670, 0x5676, 0x567D, 0x5683, 0x5689,
0x5690, 0x5696, 0x569D, 0x56A3, 0x56A9, 0x56B0,
0x56B6, 0x56BC, 0x56C3, 0x56C9, 0x56D0, 0x56D6,
0x56DC, 0x56E3, 0x56E9, 0x56F0, 0x56F6, 0x56FC,
0x5703, 0x5709, 0x5710, 0x5716, 0x571D, 0x5723,
0x5729, 0x5730, 0x5736, 0x573D, 0x5743, 0x574A,
0x5750, 0x5756, 0x575D, 0x5763, 0x576A, 0x5770,
0x5777, 0x577D, 0x5783, 0x578A, 0x5790, 0x5797,
0x579D, 0x57A4, 0x57AA, 0x57B1, 0x57B7, 0x57BE,
0x57C4, 0x57CB, 0x57D1, 0x57D7, 0x57DE, 0x57E4,
0x57EB, 0x57F1, 0x57F8, 0x57FE, 0x5805, 0x580B,
0x5812, 0x5818, 0x581F, 0x5825, 0x582C, 0x5832,
0x5839, 0x583F, 0x5846, 0x584C, 0x5853, 0x5859,
0x5860, 0x5866, 0x586D, 0x5873, 0x587A, 0x5880,
0x5887, 0x588D, 0x50C9, 0x50CF, 0x50D5, 0x50DB,
0x50E0, 0x50E6, 0x50EC, 0x50F2, 0x50F8, 0x50FE,
0x5104, 0x510A, 0x5110, 0x5116, 0x511C, 0x5122,
0x5128, 0x512E, 0x5134, 0x513A, 0x5140, 0x5146,
0x514C, 0x5152, 0x5158, 0x515E, 0x5164, 0x516A,
0x5170, 0x5176, 0x517C, 0x5182, 0x5188, 0x518E,
0x5194, 0x519A, 0x51A0, 0x51A6, 0x51AC, 0x51B2,
0x51B8, 0x51BE, 0x51C4, 0x51CA, 0x51D0, 0x51D6,
0x51DC, 0x51E2, 0x51E8, 0x51EE, 0x51F4, 0x51FA,
0x5201, 0x5207, 0x520D, 0x5213, 0x5219, 0x521F,
0x5225, 0x522B, 0x5231, 0x5237, 0x523D, 0x5243,
0x5249, 0x524F, 0x5255, 0x525B, 0x5261, 0x5267,
0x526E, 0x5274, 0x527A, 0x5280, 0x5286, 0x528C,
0x5292, 0x5298, 0x529E, 0x52A4, 0x52AA, 0x52B0,
0x52B7, 0x52BD, 0x52C3, 0x52C9, 0x52CF, 0x52D5,
0x52DB, 0x52E1, 0x52E7, 0x52ED, 0x52F4, 0x52FA,
0x5300, 0x5306, 0x530C, 0x5312, 0x5318, 0x531E,
0x5325, 0x532B, 0x5331, 0x5337, 0x533D, 0x5343,
0x5349, 0x534F, 0x5356, 0x535C, 0x5362, 0x5368,
0x536E, 0x5374, 0x537B, 0x5381, 0x5387, 0x538D,
0x5393, 0x5399, 0x539F, 0x53A6, 0x53AC, 0x53B2,
0x53B8, 0x53BE, 0x53C4, 0x53CB, 0x53D1, 0x53D7,
0x53DD, 0x53E3, 0x53EA, 0x53F0, 0x53F6, 0x53FC,
0x5402, 0x5408, 0x540F, 0x5415, 0x541B, 0x5421,
0x5427, 0x542E, 0x5434, 0x543A, 0x5440, 0x5446,
0x544D, 0x5453, 0x5459, 0x545F, 0x5466, 0x546C,
0x5472, 0x5478, 0x547E, 0x5485, 0x548B, 0x5491
};
+238
View File
@@ -0,0 +1,238 @@
#include <dolphin/dolphin.h>
#include <dolphin/dsp.h>
#include <dolphin/ax.h>
#include "__ax.h"
static s16 __AXOutBuffer[3][320];
static s32 __AXOutSBuffer[160];
static u16 __AXDramImage[8192];
static DSPTaskInfo __AXDSPTask;
AXPROFILE __AXLocalProfile;
volatile static u32 __AXOutFrame;
volatile static u32 __AXAiDmaFrame;
volatile static u32 __AXOutDspReady;
volatile static OSTime __AXOsTime;
static void (*__AXUserFrameCallback)();
volatile static int __AXDSPInitFlag;
static int __AXDSPDoneFlag;
static volatile u32 __AXDebugSteppingMode;
static OSThreadQueue __AXOutThreadQueue;
static u32 __AXOutputBufferMode;
// prototypes
static void __AXDSPInitCallback(void* task);
static void __AXDSPResumeCallback(void* task);
static void __AXDSPDoneCallback(void* task);
void __AXOutNewFrame(u32 lessDspCycles) {
u32 cl;
AXPROFILE* profile;
u8* src;
u8* dest;
u32 i;
__AXLocalProfile.axFrameStart = OSGetTime();
__AXSyncPBs(lessDspCycles);
__AXPrintStudio();
cl = __AXGetCommandListAddress();
DSPSendMailToDSP(0xBABE0180);
do {} while (DSPCheckMailToDSP() != 0);
DSPSendMailToDSP(cl);
do {} while (DSPCheckMailToDSP() != 0);
__AXServiceCallbackStack();
__AXLocalProfile.auxProcessingStart = OSGetTime();
__AXProcessAux();
__AXLocalProfile.auxProcessingEnd = OSGetTime();
__AXLocalProfile.userCallbackStart = OSGetTime();
if (__AXUserFrameCallback) {
__AXUserFrameCallback();
}
__AXLocalProfile.userCallbackEnd = OSGetTime();
__AXNextFrame(__AXOutSBuffer, &__AXOutBuffer[__AXOutFrame][0]);
__AXOutFrame += 1;
if (__AXOutputBufferMode == 1) {
__AXOutFrame %= 3;
} else {
__AXOutFrame &= 1;
AIInitDMA((u32)&__AXOutBuffer[__AXOutFrame][0], 0x280);
}
__AXLocalProfile.axFrameEnd = OSGetTime();
__AXLocalProfile.axNumVoices = __AXGetNumVoices();
profile = (void*)__AXGetCurrentProfile();
if (profile) {
i = 56;
dest = (u8*)profile;
src = (u8*)&__AXLocalProfile;
while (i != 0) {
*dest = *src;
dest++;
src++;
i--;
}
}
}
void __AXOutAiCallback(void) {
if (__AXOutDspReady == 0) {
__AXOsTime = OSGetTime();
}
if (__AXOutDspReady == 1) {
__AXOutDspReady = 0;
__AXOutNewFrame(0);
} else {
__AXOutDspReady = 2;
DSPAssertTask(&__AXDSPTask);
}
if (__AXOutputBufferMode == 1) {
AIInitDMA((u32)__AXOutBuffer[__AXAiDmaFrame], 0x280);
__AXAiDmaFrame++;
__AXAiDmaFrame %= 3;
}
}
static void __AXDSPInitCallback(void* task) {
__AXDSPInitFlag = 1;
}
void AXSetStepMode(u32 i) {
__AXDebugSteppingMode = i;
}
static void __AXDSPResumeCallback(void* task) {
#if DEBUG
if (__AXDebugSteppingMode != 0) {
__AXOutDspReady = 1;
return;
}
#endif
if (__AXOutDspReady == 2) {
__AXOutDspReady = 0;
__AXOutNewFrame((u32)(OSGetTime() - __AXOsTime) / 4);
return;
}
__AXOutDspReady = 1;
}
static void __AXDSPDoneCallback(void* task) {
__AXDSPDoneFlag = 1;
OSWakeupThread(&__AXOutThreadQueue);
}
#define BUFFER_MEMSET(buffer, size) \
{ \
u32* p = (u32*)&buffer; \
int i; \
for (i = 0; i < size; i++) { \
*p = 0; \
p++; \
} \
}
void __AXOutInitDSP(void) {
__AXDSPTask.iram_mmem_addr = axDspSlave;
__AXDSPTask.iram_length = axDspSlaveLength;
__AXDSPTask.iram_addr = 0;
__AXDSPTask.dram_mmem_addr = __AXDramImage;
__AXDSPTask.dram_length = 0x2000;
__AXDSPTask.dram_addr = 0;
__AXDSPTask.dsp_init_vector = 0x10;
__AXDSPTask.dsp_resume_vector = 0x30;
__AXDSPTask.init_cb = __AXDSPInitCallback;
__AXDSPTask.res_cb = __AXDSPResumeCallback;
__AXDSPTask.done_cb = __AXDSPDoneCallback;
__AXDSPTask.req_cb = NULL;
__AXDSPTask.priority = 0;
__AXDSPInitFlag = 0;
__AXDSPDoneFlag = 0;
OSInitThreadQueue(&__AXOutThreadQueue);
if (DSPCheckInit() == 0) {
DSPInit();
}
DSPAddTask(&__AXDSPTask);
do {} while (__AXDSPInitFlag == 0);
}
void __AXOutInit(u32 outputBufferMode) {
#if DEBUG
OSReport("Initializing AXOut code module\n");
#endif
ASSERTLINE(404, ((u32)&__AXOutBuffer[0][0] & 0x1F) == 0);
ASSERTLINE(405, ((u32)&__AXOutBuffer[1][0] & 0x1F) == 0);
ASSERTLINE(406, ((u32)&__AXOutBuffer[2][0] & 0x1F) == 0);
ASSERTLINE(407, ((u32)&__AXOutSBuffer[0] & 0x1F) == 0);
__AXOutputBufferMode = outputBufferMode;
__AXOutFrame = 0;
__AXAiDmaFrame = 0;
__AXDebugSteppingMode = 0;
BUFFER_MEMSET(__AXOutBuffer, 0x1E0);
DCFlushRange(__AXOutBuffer, sizeof(__AXOutBuffer));
BUFFER_MEMSET(__AXOutSBuffer, 0xA0);
DCFlushRange(__AXOutSBuffer, sizeof(__AXOutSBuffer));
__AXOutInitDSP();
AIRegisterDMACallback(__AXOutAiCallback);
if (__AXOutputBufferMode == 1) {
__AXNextFrame(__AXOutSBuffer, &__AXOutBuffer[2][0]);
} else {
__AXNextFrame(__AXOutSBuffer, &__AXOutBuffer[1][0]);
}
__AXOutDspReady = 1;
__AXUserFrameCallback = NULL;
if (__AXOutputBufferMode == 1) {
AIInitDMA((u32)&__AXOutBuffer[__AXAiDmaFrame][0], sizeof(__AXOutBuffer[0]));
__AXAiDmaFrame++;
__AXAiDmaFrame &= 1;
} else {
AIInitDMA((u32)&__AXOutBuffer[__AXOutFrame][0], sizeof(__AXOutBuffer[0]));
}
AIStartDMA();
}
void __AXOutQuit(void) {
BOOL old;
#if DEBUG
OSReport("Shutting down AXOut code module\n");
#endif
old = OSDisableInterrupts();
__AXUserFrameCallback = NULL;
DSPCancelTask(&__AXDSPTask);
OSSleepThread(&__AXOutThreadQueue);
AIStopDMA();
OSRestoreInterrupts(old);
}
AXCallback AXRegisterCallback(AXCallback callback) {
BOOL enabled;
AXCallback oldCB;
oldCB = __AXUserFrameCallback;
enabled = OSDisableInterrupts();
__AXUserFrameCallback = callback;
OSRestoreInterrupts(enabled);
return oldCB;
}
+47
View File
@@ -0,0 +1,47 @@
#include <dolphin/dolphin.h>
#include <dolphin/ax.h>
#include "__ax.h"
static AXPROFILE* __AXProfile;
static u32 __AXMaxProfiles;
static u32 __AXCurrentProfile;
static u32 __AXProfileInitialized;
AXPROFILE* __AXGetCurrentProfile(void) {
AXPROFILE* profile;
if (__AXProfileInitialized != 0) {
profile = &__AXProfile[__AXCurrentProfile];
__AXCurrentProfile += 1;
__AXCurrentProfile %= __AXMaxProfiles;
return profile;
}
return 0;
}
void AXInitProfile(AXPROFILE* profile, u32 maxProfiles) {
ASSERTLINE(60, profile);
ASSERTLINE(61, maxProfiles);
__AXProfile = profile;
__AXMaxProfiles = maxProfiles;
__AXCurrentProfile = 0;
__AXProfileInitialized = 1;
}
u32 AXGetProfile(void) {
BOOL old;
u32 n;
old = OSDisableInterrupts();
n = __AXCurrentProfile;
if (n != 0) {
n -= 1;
}
__AXCurrentProfile = 0;
OSRestoreInterrupts(old);
return n;
}
+91
View File
@@ -0,0 +1,91 @@
#include <dolphin/dolphin.h>
#include <dolphin/ax.h>
#include "__ax.h"
static AXSPB __AXStudio ATTRIBUTE_ALIGN(32);
static s32 __AXSpbAL;
static s32 __AXSpbAR;
static s32 __AXSpbAS;
static s32 __AXSpbAAL;
static s32 __AXSpbAAR;
static s32 __AXSpbAAS;
static s32 __AXSpbABL;
static s32 __AXSpbABR;
static s32 __AXSpbABS;
u32 __AXGetStudio(void) {
return (u32)&__AXStudio;
}
void __AXDepopFade(s32* hostSum, s32* dspVolume, s16* dspDelta) {
int frames;
s32 delta;
frames = *hostSum / 160;
if (frames) {
delta = *hostSum / 160;
if (delta > 0x14) {
delta = 0x14;
}
if (delta < -0x14) {
delta = -0x14;
}
*dspVolume = *hostSum;
*hostSum -= delta* 0xA0;
*dspDelta = delta * -1;
return;
}
*hostSum = 0;
*dspVolume = 0;
*dspDelta = 0;
}
void __AXPrintStudio(void) {
__AXDepopFade(&__AXSpbAL, (void*)&__AXStudio.dpopLHi, &__AXStudio.dpopLDelta);
__AXDepopFade(&__AXSpbAR, (void*)&__AXStudio.dpopRHi, &__AXStudio.dpopRDelta);
__AXDepopFade(&__AXSpbAS, (void*)&__AXStudio.dpopSHi, &__AXStudio.dpopSDelta);
__AXDepopFade(&__AXSpbAAL, (void*)&__AXStudio.dpopALHi, &__AXStudio.dpopALDelta);
__AXDepopFade(&__AXSpbAAR, (void*)&__AXStudio.dpopARHi, &__AXStudio.dpopARDelta);
__AXDepopFade(&__AXSpbAAS, (void*)&__AXStudio.dpopASHi, &__AXStudio.dpopASDelta);
__AXDepopFade(&__AXSpbABL, (void*)&__AXStudio.dpopBLHi, &__AXStudio.dpopBLDelta);
__AXDepopFade(&__AXSpbABR, (void*)&__AXStudio.dpopBRHi, &__AXStudio.dpopBRDelta);
__AXDepopFade(&__AXSpbABS, (void*)&__AXStudio.dpopBSHi, &__AXStudio.dpopBSDelta);
DCFlushRange(&__AXStudio, sizeof(__AXStudio));
}
void __AXSPBInit(void) {
#if DEBUG
OSReport("Initializing AXSPB code module\n");
#endif
__AXSpbAL =
__AXSpbAR =
__AXSpbAS =
__AXSpbAAL =
__AXSpbAAR =
__AXSpbAAS =
__AXSpbABL =
__AXSpbABR =
__AXSpbABS = 0;
}
void __AXSPBQuit(void) {
#if DEBUG
OSReport("Shutting down AXSPB code module\n");
#endif
}
void __AXDepopVoice(AXPB* p) {
__AXSpbAL += p->dpop.aL;
__AXSpbAAL += p->dpop.aAuxAL;
__AXSpbABL += p->dpop.aAuxBL;
__AXSpbAR += p->dpop.aR;
__AXSpbAAR += p->dpop.aAuxAR;
__AXSpbABR += p->dpop.aAuxBR;
__AXSpbAS += p->dpop.aS;
__AXSpbAAS += p->dpop.aAuxAS;
__AXSpbABS += p->dpop.aAuxBS;
}
+966
View File
@@ -0,0 +1,966 @@
#include <dolphin/dolphin.h>
#include <dolphin/ax.h>
#include "sdk_math.h"
#include "__ax.h"
static u32 __AXSrcCycles[5] = {
0x00000DF8,
0x00000F78,
0x000014B8,
0x000019F8,
0x000019F8
};
static u32 __AXMainMixCycles[16] = {
0x00000000, 0x000002F8, 0x000002F8,
0x000005BE, 0x000002F8, 0x000005F0,
0x000005F0, 0x000008B6, 0x00000000,
0x000004F1, 0x000004F1, 0x000009A6,
0x000004F1, 0x000009E2, 0x000009E2,
0x00000E97
};
static u32 __AXAuxMixCycles[32] = {
0x00000000, 0x000002F8, 0x000002F8,
0x000005BE, 0x00000000, 0x000004F1,
0x000004F1, 0x000009A6, 0x000002F8,
0x000005F0, 0x000005F0, 0x000008B6,
0x000002F8, 0x000007E9, 0x000007E9,
0x00000C9E, 0x00000000, 0x000002F8,
0x000002F8, 0x000005BE, 0x00000000,
0x000004F1, 0x000004F1, 0x000009A6,
0x000004F1, 0x000007E9, 0x000007E9,
0x00000AAF, 0x000004F1, 0x000009E2,
0x000009E2, 0x00000E97
};
static AXPB __AXPB[AX_MAX_VOICES] ATTRIBUTE_ALIGN(32);
static AXPBITDBUFFER __AXITD[AX_MAX_VOICES] ATTRIBUTE_ALIGN(32);
static AXPBU __AXUpdates[AX_MAX_VOICES] ATTRIBUTE_ALIGN(32);
static AXVPB __AXVPB[AX_MAX_VOICES];
static u32 __AXMaxDspCycles;
static u32 __AXRecDspCycles;
static u32 __AXNumVoices;
u32 __AXGetNumVoices(void) {
return __AXNumVoices;
}
void __AXServiceVPB(AXVPB* pvpb) {
AXPB* ppbDsp;
AXPB* ppbUser;
u32 sync;
ASSERTLINE(238, (pvpb->index >= 0) && (pvpb->index < AX_MAX_VOICES));
__AXNumVoices += 1;
ppbDsp = &__AXPB[pvpb->index];
ppbUser = &pvpb->pb;
sync = pvpb->sync;
if (sync == 0) {
ppbUser->state = ppbDsp->state;
ppbUser->ve.currentVolume = ppbDsp->ve.currentVolume;
ppbUser->addr.currentAddressHi = ppbDsp->addr.currentAddressHi;
ppbUser->addr.currentAddressLo = ppbDsp->addr.currentAddressLo;
return;
}
if (sync & AX_SYNC_FLAG_COPYALL) {
// copy the whole PB struct. (size: 0xF4)
u32* src;
u32* dst;
src = (void*)ppbUser;
dst = (void*)ppbDsp;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src);
if (pvpb->updateCounter != 0) {
u32 count;
src = (void*)&__AXUpdates[pvpb->index];
dst = (void*)pvpb->updateData;
for (count = pvpb->updateCounter; count; count--) {
*(dst) = *(src); dst+=1; src+=1;
}
}
return;
}
if (sync & AX_SYNC_FLAG_COPYSELECT) {
ppbDsp->srcSelect = ppbUser->srcSelect;
ppbDsp->coefSelect = ppbUser->coefSelect;
}
if (sync & AX_SYNC_FLAG_COPYMXRCTRL) {
ppbDsp->mixerCtrl = ppbUser->mixerCtrl;
}
if (sync & AX_SYNC_FLAG_COPYSTATE) {
ppbDsp->state = ppbUser->state;
} else {
ppbUser->state = ppbDsp->state;
}
if (sync & AX_SYNC_FLAG_COPYTYPE) {
ppbDsp->type = ppbUser->type;
}
if (sync & AX_SYNC_FLAG_COPYAXPBMIX) {
// copy AXPBMIX.
u16* src;
u16* dst;
src = (void*)&ppbUser->mix;
dst = (void*)&ppbDsp->mix;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src);
}
if (sync & AX_SYNC_FLAG_COPYTSHIFT) {
ppbDsp->itd.targetShiftL = ppbUser->itd.targetShiftL;
ppbDsp->itd.targetShiftR = ppbUser->itd.targetShiftR;
} else if (sync & AX_SYNC_FLAG_COPYITD) {
// copy ITD struct.
u16* src;
u16* dst;
u32* dst_;
src = (void*)&ppbUser->itd;
dst = (void*)&ppbDsp->itd;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); src+=1;
dst; // fixes reg alloc
dst_ = pvpb->itdBuffer;
*(dst_) = 0; dst_+=1;
*(dst_) = 0; dst_+=1;
*(dst_) = 0; dst_+=1;
*(dst_) = 0; dst_+=1;
*(dst_) = 0; dst_+=1;
*(dst_) = 0; dst_+=1;
*(dst_) = 0; dst_+=1;
*(dst_) = 0; dst_+=1;
*(dst_) = 0; dst_+=1;
*(dst_) = 0; dst_+=1;
*(dst_) = 0; dst_+=1;
*(dst_) = 0; dst_+=1;
*(dst_) = 0; dst_+=1;
*(dst_) = 0; dst_+=1;
*(dst_) = 0; dst_+=1;
*(dst_) = 0;
}
if (sync & AX_SYNC_FLAG_COPYUPDATE) {
// copy UPDATE struct.
u16* src;
u16* dst;
dst = (void*)&ppbDsp->update;
src = (void*)&ppbUser->update;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src);
if (pvpb->updateCounter) {
u32* src_;
u32* dst_;
u32 count;
dst_ = (void*)&__AXUpdates[pvpb->index];
src_ = (void*)&pvpb->updateData;
for (count = pvpb->updateCounter; count; count--) {
*(dst_) = *(src_); dst_+=1; src_+=1;
}
}
}
if (sync & AX_SYNC_FLAG_COPYDPOP) {
// copy DPOP struct.
u16* src;
u16* dst;
dst = (void*)&ppbDsp->dpop;
src = (void*)&ppbUser->dpop;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src);
}
if (sync & AX_SYNC_FLAG_SWAPVOL) {
ppbUser->ve.currentVolume = ppbDsp->ve.currentVolume;
ppbDsp->ve.currentDelta = ppbUser->ve.currentDelta;
} else if (sync & AX_SYNC_FLAG_COPYVOL) {
ppbDsp->ve.currentVolume = ppbUser->ve.currentVolume;
ppbDsp->ve.currentDelta = ppbUser->ve.currentDelta;
}
if (sync & AX_SYNC_FLAG_COPYFIR) {
// copy FIR struct.
u16* src;
u16* dst;
dst = (void*)&ppbDsp->fir;
src = (void*)&ppbUser->fir;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src);
}
if (sync & (AX_SYNC_FLAG_COPYLOOP | AX_SYNC_FLAG_COPYLOOPADDR | AX_SYNC_FLAG_COPYENDADDR | AX_SYNC_FLAG_COPYCURADDR)) {
if (sync & AX_SYNC_FLAG_COPYLOOP) {
ppbDsp->addr.loopFlag = ppbUser->addr.loopFlag;
}
if (sync & AX_SYNC_FLAG_COPYLOOPADDR) {
*(u32*)&ppbDsp->addr.loopAddressHi = *(u32*)&ppbUser->addr.loopAddressHi;
}
if (sync & AX_SYNC_FLAG_COPYENDADDR) {
*(u32*)&ppbDsp->addr.endAddressHi = *(u32*)&ppbUser->addr.endAddressHi;
}
if (sync & AX_SYNC_FLAG_COPYCURADDR) {
*(u32*)&ppbDsp->addr.currentAddressHi = *(u32*)&ppbUser->addr.currentAddressHi;
} else {
*(u32*)&ppbUser->addr.currentAddressHi = *(u32*)&ppbDsp->addr.currentAddressHi;
}
} else if (sync & AX_SYNC_FLAG_COPYADDR) {
// copy ADDR struct.
u32* src;
u32* dst;
dst = (void*)&ppbDsp->addr;
src = (void*)&ppbUser->addr;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src);
} else {
ppbUser->addr.currentAddressHi = ppbDsp->addr.currentAddressHi;
ppbUser->addr.currentAddressLo = ppbDsp->addr.currentAddressLo;
}
if (sync & AX_SYNC_FLAG_COPYADPCM) {
// copy ADPCM struct.
u32* src;
u32* dst;
dst = (void*)&ppbDsp->adpcm;
src = (void*)&ppbUser->adpcm;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
}
if (sync & AX_SYNC_FLAG_COPYRATIO) {
ppbDsp->src.ratioHi = ppbUser->src.ratioHi;
ppbDsp->src.ratioLo = ppbUser->src.ratioLo;
} else if (sync & AX_SYNC_FLAG_COPYSRC) {
// copy SRC struct.
u16* src;
u16* dst;
dst = (void*)&ppbDsp->src;
src = (void*)&ppbUser->src;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
}
if (sync & AX_SYNC_FLAG_COPYADPCMLOOP) {
// copy ADPCMLOOP struct.
u16* src;
u16* dst;
dst = (void*)&ppbDsp->adpcmLoop;
src = (void*)&ppbUser->adpcmLoop;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src);
}
if (sync & 0x400000) {
ppbDsp->lpf.a0 = ppbUser->lpf.a0;
ppbDsp->lpf.b0 = ppbUser->lpf.b0;
return;
}
if (sync & 0x200000) {
// copy AXPBLPF struct
u16* src;
u16* dst;
dst = (void*)&ppbDsp->lpf;
src = (void*)&ppbUser->lpf;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src);
}
}
void __AXDumpVPB(AXVPB* pvpb) {
AXPB* ppbDsp;
ppbDsp = &__AXPB[pvpb->index];
if (ppbDsp->state == 1) {
__AXDepopVoice(ppbDsp);
}
pvpb->pb.state = ppbDsp->state = ppbDsp->update.updNum[0]
= ppbDsp->update.updNum[1] = ppbDsp->update.updNum[2]
= ppbDsp->update.updNum[3] = ppbDsp->update.updNum[4] = 0;
__AXPushCallbackStack(pvpb);
}
void __AXSyncPBs(u32 lessDlpfycles) {
u32 cycles;
u32 i;
AXVPB* pvpb;
__AXNumVoices = 0;
DCInvalidateRange(__AXPB, sizeof(__AXPB));
DCInvalidateRange(__AXITD, sizeof(__AXITD));
cycles = (__AXGetCommandListCycles() + 0x10000) - 0x55F0 + lessDlpfycles;
for (i = 31; i; i--) {
for (pvpb = __AXGetStackHead(i); pvpb; pvpb = pvpb->next) {
if (pvpb->depop != 0) {
__AXDepopVoice(&__AXPB[pvpb->index]);
}
if ((pvpb->pb.state == 1) || (pvpb->updateCounter != 0)) {
if (pvpb->pb.srcSelect != 2) {
cycles += __AXSrcCycles[pvpb->pb.src.ratioHi];
}
if (pvpb->pb.lpf.on) {
cycles += 555;
}
cycles += __AXMainMixCycles[pvpb->pb.mixerCtrl & 0xF] + __AXAuxMixCycles[(pvpb->pb.mixerCtrl >> 4) & 0x1F] + __AXAuxMixCycles[(pvpb->pb.mixerCtrl >> 9) & 0x1F] + 0x8C;
if (__AXMaxDspCycles > cycles) {
__AXServiceVPB(pvpb);
} else {
__AXDumpVPB(pvpb);
}
} else {
__AXServiceVPB(pvpb);
}
pvpb->sync = 0;
pvpb->depop = 0;
pvpb->updateMS = pvpb->updateCounter = 0;
pvpb->updateWrite = pvpb->updateData;
}
}
__AXRecDspCycles = cycles;
for (pvpb = __AXGetStackHead(0); pvpb; pvpb = pvpb->next) {
if (pvpb->depop != 0) {
__AXDepopVoice(&__AXPB[pvpb->index]);
}
pvpb->depop = 0;
__AXPB[pvpb->index].state = __AXPB[pvpb->index].update.updNum[0] = __AXPB[pvpb->index].update.updNum[1]
= __AXPB[pvpb->index].update.updNum[2] = __AXPB[pvpb->index].update.updNum[3]
= __AXPB[pvpb->index].update.updNum[4] = 0;
}
DCFlushRange(__AXPB, sizeof(__AXPB));
DCFlushRange(__AXITD, sizeof(__AXITD));
DCFlushRange(__AXUpdates, sizeof(__AXUpdates));
}
AXPB* __AXGetPBs(void) {
return __AXPB;
}
void __AXSetPBDefault(AXVPB* p) {
p->pb.state = 0;
p->pb.itd.flag = 0;
p->sync = 0x2000A4;
p->updateMS = p->updateCounter = 0;
p->updateWrite = p->updateData;
p->pb.update.updNum[0] = p->pb.update.updNum[1] = p->pb.update.updNum[2] = p->pb.update.updNum[3] = p->pb.update.updNum[4] = 0;
p->pb.lpf.on = 0;
}
void __AXVPBInit(void) {
u32 i;
AXPB* ppb;
AXPBITDBUFFER* ppbi;
AXPBU* ppbu;
AXVPB* pvpb;
u32* p;
#if DEBUG
OSReport("Initializing AXVPB code module\n");
#endif
__AXMaxDspCycles = OS_BUS_CLOCK / 400;
__AXRecDspCycles = 0;
#define BUFFER_MEMSET(buffer, size) \
{ \
p = (u32*)&buffer; \
for (i = size; i != 0; i--) { \
*p = 0; \
p++; \
} \
}
BUFFER_MEMSET(__AXPB, 0xF40);
BUFFER_MEMSET(__AXITD, 0x400);
BUFFER_MEMSET(__AXVPB, 0x22C0);
for (i = 0; i < AX_MAX_VOICES; i++) {
ppb = &__AXPB[i];
ppbi = &__AXITD[i];
ppbu = &__AXUpdates[i];
pvpb = &__AXVPB[i];
ASSERTLINE(913, (u32)ppb ^ 0x1F);
ASSERTLINE(914, (u32)ppbi ^ 0x1F);
ASSERTLINE(915, (u32)ppbu ^ 0x1F);
pvpb->index = i;
pvpb->updateWrite = pvpb->updateData;
pvpb->itdBuffer = ppbi;
__AXSetPBDefault(pvpb);
if (i == 0x3F) {
pvpb->pb.nextHi = pvpb->pb.nextLo = ppb->nextHi = ppb->nextLo = 0;
} else {
pvpb->pb.nextHi = (u16)( (u32)((char*)ppb + sizeof(AXPB)) >> 16 );
pvpb->pb.nextLo = (u16)( (u32)((char*)ppb + sizeof(AXPB)) );
ppb->nextHi = (u16)( (u32)((char*)ppb + sizeof(AXPB)) >> 16 );
ppb->nextLo = (u16)( (u32)((char*)ppb + sizeof(AXPB)) );
}
pvpb->pb.currHi = (u16)(((u32)ppb) >> 16);
pvpb->pb.currLo = (u16)((u32)ppb);
ppb->currHi = (u16)(((u32)ppb) >> 16);
ppb->currLo = (u16)((u32)ppb);
pvpb->pb.itd.bufferHi = (u16)(((u32)ppbi) >> 16);
pvpb->pb.itd.bufferLo = (u16)((u32)ppbi);
ppb->itd.bufferHi = (u16)(((u32)ppbi) >> 16);
ppb->itd.bufferLo = (u16)((u32)ppbi);
pvpb->pb.update.dataHi = (u16)(((u32)ppbu) >> 16);
pvpb->pb.update.dataLo = (u16)((u32)ppbu);
ppb->update.dataHi = (u16)(((u32)ppbu) >> 16);
ppb->update.dataLo = (u16)((u32)ppbu);
pvpb->priority = 1;
__AXPushFreeStack(pvpb);
}
DCFlushRange(__AXPB, sizeof(__AXPB));
}
void __AXVPBQuit(void) {
#if DEBUG
OSReport("Shutting down AXVPB code module\n");
#endif
}
void AXSetVoiceSrcType(AXVPB* p, u32 type) {
BOOL old;
AXPB* ppb;
ASSERTLINE(1020, p);
ASSERTLINE(1021, type <= AX_SRC_TYPE_4TAP_16K);
old = OSDisableInterrupts();
ppb = &p->pb;
switch(type) {
case AX_SRC_TYPE_NONE:
ppb->srcSelect = 2;
break;
case AX_SRC_TYPE_LINEAR:
ppb->srcSelect = 1;
break;
case AX_SRC_TYPE_4TAP_8K:
ppb->srcSelect = 0;
ppb->coefSelect = 0;
break;
case AX_SRC_TYPE_4TAP_12K:
ppb->srcSelect = 0;
ppb->coefSelect = 1;
break;
case AX_SRC_TYPE_4TAP_16K:
ppb->srcSelect = 0;
ppb->coefSelect = 2;
break;
}
p->sync |= AX_SYNC_FLAG_COPYSELECT;
OSRestoreInterrupts(old);
}
void AXSetVoiceState(AXVPB* p, u16 state) {
BOOL old;
old = OSDisableInterrupts();
p->pb.state = state;
p->sync |= AX_SYNC_FLAG_COPYSTATE;
if (state == 0) {
p->depop = 1;
}
OSRestoreInterrupts(old);
}
void AXSetVoiceType(AXVPB* p, u16 type) {
BOOL old;
old = OSDisableInterrupts();
p->pb.type = type;
p->sync |= AX_SYNC_FLAG_COPYTYPE;
OSRestoreInterrupts(old);
}
void AXSetVoiceMix(AXVPB* p, AXPBMIX* mix) {
BOOL old;
u16 mixerCtrl;
u16* dst;
u16* src;
src = (u16*)mix;
dst = (u16*)&p->pb.mix;
mixerCtrl = 0;
old = OSDisableInterrupts();
if ((*dst++ = *src++)) mixerCtrl |= 0x1;
if ((*dst++ = *src++)) mixerCtrl |= 0x9;
if ((*dst++ = *src++)) mixerCtrl |= 0x2;
if ((*dst++ = *src++)) mixerCtrl |= 0xA;
if ((*dst++ = *src++)) mixerCtrl |= 0x10;
if ((*dst++ = *src++)) mixerCtrl |= 0x50;
if ((*dst++ = *src++)) mixerCtrl |= 0x20;
if ((*dst++ = *src++)) mixerCtrl |= 0x60;
if ((*dst++ = *src++)) mixerCtrl |= 0x200;
if ((*dst++ = *src++)) mixerCtrl |= 0xA00;
if ((*dst++ = *src++)) mixerCtrl |= 0x400;
if ((*dst++ = *src++)) mixerCtrl |= 0xC00;
if ((*dst++ = *src++)) mixerCtrl |= 0x1000;
if ((*dst++ = *src++)) mixerCtrl |= 0x3000;
if ((*dst++ = *src++)) mixerCtrl |= 0x4;
if ((*dst++ = *src++)) mixerCtrl |= 0xC;
if ((*dst++ = *src++)) mixerCtrl |= 0x80;
if ((*dst++ = *src++)) mixerCtrl |= 0x180;
p->pb.mixerCtrl = mixerCtrl;
p->sync |= (AX_SYNC_FLAG_COPYAXPBMIX | AX_SYNC_FLAG_COPYMXRCTRL);
OSRestoreInterrupts(old);
}
void AXSetVoiceItdOn(AXVPB* p) {
BOOL old;
old = OSDisableInterrupts();
p->pb.itd.flag = 1;
p->pb.itd.shiftL = p->pb.itd.shiftR = p->pb.itd.targetShiftL = p->pb.itd.targetShiftR = 0;
p->sync &= ~(AX_SYNC_FLAG_COPYTSHIFT);
p->sync |= AX_SYNC_FLAG_COPYITD;
OSRestoreInterrupts(old);
}
void AXSetVoiceItdTarget(AXVPB* p, u16 lShift, u16 rShift) {
BOOL old;
old = OSDisableInterrupts();
p->pb.itd.targetShiftL = lShift;
p->pb.itd.targetShiftR = rShift;
p->sync |= AX_SYNC_FLAG_COPYTSHIFT;
OSRestoreInterrupts(old);
}
void AXSetVoiceUpdateIncrement(AXVPB* p) {
BOOL old;
old = OSDisableInterrupts();
p->updateMS++;
p->sync |= AX_SYNC_FLAG_COPYUPDATE;
ASSERTMSGLINE(1191, p->updateMS <= 4, "PB updates cannot exceed 5ms\n");
OSRestoreInterrupts(old);
}
void AXSetVoiceUpdateWrite(AXVPB* p, u16 param, u16 data) {
BOOL old;
old = OSDisableInterrupts();
p->updateCounter+=2;
ASSERTMSGLINE(1205, p->updateCounter <= 128, "PB update block exceeded 128 words\n");
*(p->updateWrite) = param; p->updateWrite+=1;
*(p->updateWrite) = data; p->updateWrite+=1;
p->sync |= AX_SYNC_FLAG_COPYUPDATE;
OSRestoreInterrupts(old);
}
void AXSetVoiceDpop(AXVPB* p, AXPBDPOP* dpop) {
BOOL old;
u16* dst;
u16* src;
dst = (void*)&p->pb.dpop;
src = (void*)dpop;
old = OSDisableInterrupts();
{
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
}
p->sync |= AX_SYNC_FLAG_COPYDPOP;
OSRestoreInterrupts(old);
}
void AXSetVoiceVe(AXVPB* p, AXPBVE* ve) {
BOOL old;
old = OSDisableInterrupts();
p->pb.ve.currentVolume = ve->currentVolume;
p->pb.ve.currentDelta = ve->currentDelta;
p->sync |= AX_SYNC_FLAG_COPYVOL;
OSRestoreInterrupts(old);
}
void AXSetVoiceVeDelta(AXVPB* p, s16 delta) {
BOOL old;
old = OSDisableInterrupts();
p->pb.ve.currentDelta = delta;
p->sync |= AX_SYNC_FLAG_SWAPVOL;
OSRestoreInterrupts(old);
}
void AXSetVoiceFir(AXVPB* p, AXPBFIR* fir) {
BOOL old;
old = OSDisableInterrupts();
p->pb.fir.numCoefs = fir->numCoefs;
p->pb.fir.coefsHi = fir->coefsHi;
p->pb.fir.coefsLo = fir->coefsLo;
p->sync |= AX_SYNC_FLAG_COPYFIR;
OSRestoreInterrupts(old);
}
void AXSetVoiceAddr(AXVPB* p, AXPBADDR* addr) {
BOOL old;
u32* dst;
u32* src;
dst = (void*)&p->pb.addr;
src = (void*)addr;
old = OSDisableInterrupts();
{
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src);
}
switch(addr->format) {
case 0:
ASSERTMSGLINE(1335, (addr->loopAddressLo & 0xF) > 1, "*** loop address on ADPCM frame header! ***\n");
ASSERTMSGLINE(1340, (addr->endAddressLo & 0xF) > 1, "*** end address on ADPCM frame header! ***\n");
ASSERTMSGLINE(1345, (addr->currentAddressLo & 0xF) > 1, "*** current address on ADPCM frame header! ***\n");
break;
case 10:
dst+=1;
*(dst) = 0; dst+=1;
*(dst) = 0; dst+=1;
*(dst) = 0; dst+=1;
*(dst) = 0; dst+=1;
*(dst) = 0; dst+=1;
*(dst) = 0; dst+=1;
*(dst) = 0; dst+=1;
*(dst) = 0; dst+=1;
*(dst) = 0x08000000; dst+=1;
*(dst) = 0; dst+=1;
break;
case 25:
dst+=1;
*(dst) = 0; dst+=1;
*(dst) = 0; dst+=1;
*(dst) = 0; dst+=1;
*(dst) = 0; dst+=1;
*(dst) = 0; dst+=1;
*(dst) = 0; dst+=1;
*(dst) = 0; dst+=1;
*(dst) = 0; dst+=1;
*(dst) = 0x01000000; dst+=1;
*(dst) = 0; dst+=1;
break;
default:
ASSERTMSGLINE(1389, 0, "unknown addr->formaqt in PB\n");
break;
}
p->sync &= ~(AX_SYNC_FLAG_COPYLOOP | AX_SYNC_FLAG_COPYLOOPADDR | AX_SYNC_FLAG_COPYENDADDR | AX_SYNC_FLAG_COPYCURADDR);
p->sync |= (AX_SYNC_FLAG_COPYADDR | AX_SYNC_FLAG_COPYADPCM);
OSRestoreInterrupts(old);
}
void AXSetVoiceLoop(AXVPB* p, u16 loop) {
BOOL old;
old = OSDisableInterrupts();
p->pb.addr.loopFlag = loop;
p->sync |= AX_SYNC_FLAG_COPYLOOP;
OSRestoreInterrupts(old);
}
void AXSetVoiceLoopAddr(AXVPB* p, u32 addr) {
BOOL old;
old = OSDisableInterrupts();
p->pb.addr.loopAddressHi = (addr >> 0x10);
p->pb.addr.loopAddressLo = (addr);
p->sync |= AX_SYNC_FLAG_COPYLOOPADDR;
OSRestoreInterrupts(old);
}
void AXSetVoiceEndAddr(AXVPB* p, u32 addr) {
BOOL old;
old = OSDisableInterrupts();
p->pb.addr.endAddressHi = (addr >> 0x10);
p->pb.addr.endAddressLo = (addr);
p->sync |= AX_SYNC_FLAG_COPYENDADDR;
OSRestoreInterrupts(old);
}
void AXSetVoiceCurrentAddr(AXVPB* p, u32 addr) {
BOOL old;
old = OSDisableInterrupts();
p->pb.addr.currentAddressHi = (addr >> 0x10);
p->pb.addr.currentAddressLo = (addr);
p->sync |= AX_SYNC_FLAG_COPYCURADDR;
OSRestoreInterrupts(old);
}
void AXSetVoiceAdpcm(AXVPB* p, AXPBADPCM* adpcm) {
BOOL old;
u32* dst;
u32* src;
dst = (void*)&p->pb.adpcm;
src = (void*)adpcm;
old = OSDisableInterrupts();
{
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
}
p->sync |= AX_SYNC_FLAG_COPYADPCM;
OSRestoreInterrupts(old);
}
void AXSetVoiceSrc(AXVPB* p, AXPBSRC* src_) {
BOOL old;
u16* dst;
u16* src;
dst = (void*)&p->pb.src;
src = (void*)src_;
old = OSDisableInterrupts();
{
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
}
p->sync &= ~(AX_SYNC_FLAG_COPYRATIO);
p->sync |= AX_SYNC_FLAG_COPYSRC;
OSRestoreInterrupts(old);
}
void AXSetVoiceSrcRatio(AXVPB* p, float ratio) {
u32 r;
BOOL old;
old = OSDisableInterrupts();
r = 65536.0f* ratio;
if (r > 0x40000) {
r = 0x40000;
}
p->pb.src.ratioHi = ((u32)r >> 0x10);
p->pb.src.ratioLo = ((u32)r);
p->sync |= AX_SYNC_FLAG_COPYRATIO;
OSRestoreInterrupts(old);
}
void AXSetVoiceAdpcmLoop(AXVPB* p, AXPBADPCMLOOP* adpcmloop) {
BOOL old;
u16* dst;
u16* src;
dst = (void*)&p->pb.adpcmLoop;
src = (void*)adpcmloop;
old = OSDisableInterrupts();
{
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
*(dst) = *(src); dst+=1; src+=1;
}
p->sync |= AX_SYNC_FLAG_COPYADPCMLOOP;
OSRestoreInterrupts(old);
}
void AXSetVoiceLpf(AXVPB* p, AXPBLPF* lpf) {
BOOL old;
u16* dst;
u16* src;
dst = (u16*)&p->pb.lpf;
src = (u16*)lpf;
old = OSDisableInterrupts();
*dst = *src; dst++; src++;
*dst = *src; dst++; src++;
*dst = *src; dst++; src++;
*dst = *src; dst++; src++;
p->sync |= 0x200000;
OSRestoreInterrupts(old);
}
void AXSetVoiceLpfCoefs(AXVPB* p, u16 a0, u16 b0) {
BOOL old;
old = OSDisableInterrupts();
p->pb.lpf.a0 = a0;
p->pb.lpf.b0 = b0;
p->sync |= 0x400000;
OSRestoreInterrupts(old);
}
#define PI 3.14159265358979323846f
void AXGetLpfCoefs(u16 freq, u16* a0, u16* b0) {
f32 bb;
f32 cc;
ASSERTMSGLINE(1616, freq <= 16000, "freq is out of range");
cc = 2.0f - cos(((PI * 2) * (f32)freq) / 32000.0f);
bb = sqrt((cc * cc) - 1.0f) - cc;
*b0 = 32768.0f * -bb;
*a0 = 0x7FFF - *b0;
}
void AXSetMaxDspCycles(u32 cycles) {
__AXMaxDspCycles = cycles;
}
u32 AXGetMaxDspCycles(void) {
return __AXMaxDspCycles;
}
u32 AXGetDspCycles(void) {
return __AXRecDspCycles;
}
+669
View File
@@ -0,0 +1,669 @@
#include <dolphin/dolphin.h>
#include <dolphin/ax.h>
u16 axDspSlaveLength = (AX_DSP_SLAVE_LENGTH * 2);
u16 axDspSlave[AX_DSP_SLAVE_LENGTH] ATTRIBUTE_ALIGN(32) = {
0x0000, 0x0000, 0x029F, 0x0E88, 0x029F, 0x0E97,
0x029F, 0x0EB3, 0x029F, 0x0ED3, 0x029F, 0x0ED9,
0x029F, 0x0F0B, 0x029F, 0x0F11, 0x1302, 0x1303,
0x1204, 0x1305, 0x1306, 0x8E00, 0x8C00, 0x8B00,
0x0092, 0x00FF, 0x8100, 0x8900, 0x009E, 0x0E80,
0x00FE, 0x0E1B, 0x8100, 0x00FE, 0x0E31, 0x16FC,
0xDCD1, 0x16FD, 0x0000, 0x16FB, 0x0001, 0x26FC,
0x02A0, 0x8000, 0x029C, 0x0029, 0x029F, 0x0045,
0x1302, 0x1303, 0x1204, 0x1305, 0x1306, 0x8E00,
0x8C00, 0x8B00, 0x0092, 0x00FF, 0x16FC, 0xDCD1,
0x16FD, 0x0001, 0x16FB, 0x0001, 0x26FC, 0x02A0,
0x8000, 0x029C, 0x0040, 0x8E00, 0x8100, 0x8900,
0x009F, 0xBABE, 0x26FE, 0x02C0, 0x8000, 0x029C,
0x004A, 0x8200, 0x0294, 0x004A, 0x23FF, 0x8100,
0x26FE, 0x02C0, 0x8000, 0x029C, 0x0054, 0x27FF,
0x0240, 0x7FFF, 0x2ECE, 0x2FCF, 0x16CD, 0x0C00,
0x8100, 0x2EC9, 0x1FFB, 0x2FCB, 0x02BF, 0x0652,
0x0080, 0x0C00, 0x8E00, 0x8100, 0x8970, 0xB100,
0x0291, 0x007E, 0x0A13, 0xC100, 0x0292, 0x007E,
0x009F, 0x0C9D, 0x4C00, 0x1C7E, 0x0213, 0x1C7E,
0x176F, 0x16FC, 0xFBAD, 0x16FD, 0x8080, 0x0021,
0x16FC, 0xBAAD, 0x2EFD, 0x0021, 0x8D00, 0x8F00,
0x8A00, 0x8900, 0x8168, 0x0098, 0x0000, 0x0099,
0x0001, 0x0081, 0x0000, 0x193E, 0x193C, 0x11A0,
0x009A, 0xA100, 0x8271, 0x0277, 0x1F19, 0x193C,
0xA100, 0x8271, 0x0277, 0x1F19, 0x193C, 0x1FD8,
0xB100, 0x0294, 0x00CB, 0x00DE, 0x0E44, 0xB100,
0x0294, 0x00AB, 0x191C, 0x191C, 0x191C, 0x00E0,
0x0E45, 0x029F, 0x0114, 0x8B00, 0x7A00, 0x00FE,
0x0E44, 0x8400, 0x0099, 0x0140, 0x1F1E, 0xA000,
0x191E, 0x191E, 0x191C, 0x00E0, 0x0E45, 0x009A,
0x0000, 0x0098, 0x0DC0, 0x4E00, 0x4800, 0x2ECE,
0x2CCF, 0x009E, 0x0E48, 0x2ECD, 0x0E00, 0x2EC9,
0x009E, 0x0140, 0x2ECB, 0x029F, 0x00E3, 0x8B00,
0x00D8, 0x0E44, 0x0099, 0x0140, 0xA000, 0x191E,
0x00FE, 0x0E44, 0x191E, 0x191C, 0x00E0, 0x0E45,
0x4E00, 0x2ECE, 0x2CCF, 0x009E, 0x0E48, 0x2ECD,
0x0E00, 0x2EC9, 0x009E, 0x0140, 0x2ECB, 0x02BF,
0x0652, 0x8A48, 0x0083, 0x0E48, 0x0080, 0x0000,
0x0081, 0x0000, 0x1979, 0x193A, 0xB041, 0xA64B,
0xF051, 0xB441, 0x9100, 0x1150, 0x00FC, 0xA792,
0xF151, 0xB520, 0x9941, 0xA693, 0xF051, 0xB428,
0x9141, 0x0083, 0x0E48, 0x0080, 0x0140, 0x0081,
0x0140, 0x1979, 0x193A, 0xB041, 0xA64B, 0xF051,
0xB441, 0x9100, 0x1150, 0x0113, 0xA792, 0xF151,
0xB520, 0x9941, 0xA693, 0xF051, 0xB428, 0x9141,
0x00C0, 0x0E45, 0x029F, 0x0068, 0x8100, 0x8970,
0x8E78, 0x2ECE, 0x2FCF, 0x009E, 0x0E48, 0x2ECD,
0x0E00, 0x2EC9, 0x009E, 0x0040, 0x2ECB, 0x0081,
0x0E48, 0x0082, 0x0000, 0x009B, 0x009F, 0x009A,
0x0140, 0x8100, 0x8900, 0x8F00, 0x02BF, 0x0652,
0x193E, 0x193C, 0xB100, 0x193F, 0x0294, 0x013C,
0x005A, 0x1B5E, 0x029F, 0x0144, 0x9900, 0x1B5E,
0x1B5C, 0x007B, 0x0143, 0x4C00, 0x1B5E, 0x1B5C,
0x193E, 0x193C, 0xB100, 0x193F, 0x0294, 0x014E,
0x005A, 0x1B5E, 0x029F, 0x0156, 0x9900, 0x1B5E,
0x1B5C, 0x007B, 0x0155, 0x4C00, 0x1B5E, 0x1B5C,
0x193E, 0x193C, 0xB100, 0x193F, 0x0294, 0x0160,
0x005A, 0x1B5E, 0x029F, 0x0168, 0x9900, 0x1B5E,
0x1B5C, 0x007B, 0x0167, 0x4C00, 0x1B5E, 0x1B5C,
0x0082, 0x0400, 0x193E, 0x193C, 0xB179, 0x0294,
0x0173, 0x005A, 0x1B5E, 0x029F, 0x017B, 0x9900,
0x1B5E, 0x1B5C, 0x007B, 0x017A, 0x4C00, 0x1B5E,
0x1B5C, 0x193E, 0x193C, 0xB179, 0x0294, 0x0184,
0x005A, 0x1B5E, 0x029F, 0x018C, 0x9900, 0x1B5E,
0x1B5C, 0x007B, 0x018B, 0x4C00, 0x1B5E, 0x1B5C,
0x193E, 0x193C, 0xB179, 0x0294, 0x0195, 0x005A,
0x1B5E, 0x029F, 0x019D, 0x9900, 0x1B5E, 0x1B5C,
0x007B, 0x019C, 0x4C00, 0x1B5E, 0x1B5C, 0x0082,
0x07C0, 0x193E, 0x193C, 0xB179, 0x0294, 0x01A8,
0x005A, 0x1B5E, 0x029F, 0x01B0, 0x9900, 0x1B5E,
0x1B5C, 0x007B, 0x01AF, 0x4C00, 0x1B5E, 0x1B5C,
0x193E, 0x193C, 0xB179, 0x0294, 0x01B9, 0x005A,
0x1B5E, 0x029F, 0x01C1, 0x9900, 0x1B5E, 0x1B5C,
0x007B, 0x01C0, 0x4C00, 0x1B5E, 0x1B5C, 0x193E,
0x193C, 0xB179, 0x0294, 0x01CA, 0x005A, 0x1B5E,
0x029F, 0x01D2, 0x9900, 0x1B5E, 0x1B5C, 0x007B,
0x01D1, 0x4C00, 0x1B5E, 0x1B5C, 0x029F, 0x0068,
0x0085, 0xFFFF, 0x8150, 0x8940, 0x8E48, 0x00FA,
0x0E17, 0x00F8, 0x0E18, 0x0081, 0x0000, 0x02BF,
0x05E7, 0x00DA, 0x0E17, 0x00D8, 0x0E18, 0x8948,
0x0081, 0x0400, 0x02BF, 0x05E7, 0x00DA, 0x0E17,
0x00D8, 0x0E18, 0x8948, 0x0081, 0x07C0, 0x02BF,
0x05E7, 0x029F, 0x0068, 0x0086, 0x07C0, 0x02BF,
0x057A, 0x029F, 0x0068, 0x8100, 0x8E00, 0x191E,
0x191C, 0x2ECE, 0x2CCF, 0x16CD, 0x0000, 0x16C9,
0x0001, 0x16CB, 0x0780, 0x02BF, 0x0652, 0x029F,
0x0068, 0x8100, 0x8970, 0x8E60, 0x2ECE, 0x2CCF,
0x16CD, 0x0E48, 0x16C9, 0x0000, 0x8900, 0x0D20,
0x2DCB, 0x4C00, 0x1C80, 0x0080, 0x0280, 0x0081,
0x0000, 0x0082, 0x0140, 0x0083, 0x0E48, 0x0A00,
0x27C9, 0x03A0, 0x0004, 0x029C, 0x0222, 0x2ECE,
0x2CCF, 0x16CD, 0x0E58, 0x16C9, 0x0000, 0x16CB,
0x0260, 0x009F, 0x00A0, 0x8F00, 0x007F, 0x023B,
0x197E, 0x1B1A, 0x197C, 0x1B1A, 0x1B5E, 0x7C22,
0x1B3E, 0x1B3C, 0x1C04, 0x029F, 0x0068, 0x8E70,
0x8960, 0x191F, 0x2ECE, 0x2CCF, 0x16CD, 0x0C00,
0x16C9, 0x0000, 0x0503, 0x0340, 0xFFF0, 0x2FCB,
0x02BF, 0x0652, 0x0080, 0x0C00, 0x029F, 0x0068,
0x8100, 0x8970, 0x8E78, 0x2ECE, 0x2FCF, 0x16CD,
0x0B80, 0x16C9, 0x0000, 0x16CB, 0x00C4, 0x0082,
0x0E08, 0x009F, 0x0000, 0x1B5F, 0x009F, 0x0140,
0x1B5F, 0x009F, 0x0280, 0x1B5F, 0x009F, 0x0400,
0x1B5F, 0x009F, 0x0540, 0x1B5F, 0x009F, 0x0680,
0x1B5F, 0x009F, 0x07C0, 0x1B5F, 0x009F, 0x0900,
0x1B5F, 0x009F, 0x0A40, 0x1B5F, 0x02BF, 0x0652,
0x00DE, 0x0BA7, 0x00DF, 0x0BA8, 0x2ECE, 0x2FCF,
0x16CD, 0x03C0, 0x16C9, 0x0000, 0x16CB, 0x0080,
0x8100, 0x8900, 0x00DE, 0x0B84, 0x009F, 0x0D21,
0x4C00, 0x1C7E, 0x0213, 0x00FE, 0x0E15, 0x00DE,
0x0B85, 0x009F, 0x0D24, 0x4C00, 0x1C7E, 0x0213,
0x00FE, 0x0E16, 0x00DE, 0x0B86, 0x009A, 0x000F,
0x009F, 0x0CB1, 0x3400, 0x4C00, 0x1C7E, 0x0213,
0x00FE, 0x0E14, 0x00DE, 0x0B86, 0x009A, 0x001F,
0x009F, 0x0CC1, 0x14FC, 0x3400, 0x4C00, 0x1C7E,
0x0213, 0x00FE, 0x0E46, 0x00DE, 0x0B86, 0x009F,
0x0CE1, 0x14F7, 0x4C00, 0x1C7E, 0x0213, 0x00FE,
0x0E47, 0x8100, 0x00DE, 0x0B9B, 0xB100, 0x0295,
0x02EA, 0x8900, 0x00DF, 0x0B9E, 0x0300, 0x0CC0,
0x00FF, 0x0E40, 0x00DF, 0x0B9F, 0x0300, 0x0CC0,
0x00FF, 0x0E41, 0x009F, 0x0CE0, 0x00FF, 0x0E42,
0x00FF, 0x0E43, 0x02BF, 0x0652, 0x00DE, 0x0B9C,
0x2ECE, 0x00DE, 0x0B9D, 0x2ECF, 0x16CD, 0x0CC0,
0x16C9, 0x0000, 0x16CB, 0x0040, 0x02BF, 0x0652,
0x029F, 0x0068, 0x009F, 0x0CE0, 0x00FF, 0x0E42,
0x00FF, 0x0E40, 0x00FF, 0x0E41, 0x00FF, 0x0E43,
0x02BF, 0x0652, 0x029F, 0x0068, 0x8E00, 0x00E0,
0x0E07, 0x0080, 0x0BA2, 0x0081, 0x03C0, 0x0E05,
0x00FE, 0x0E04, 0x8900, 0x8150, 0x009F, 0x0B80,
0x007A, 0x030B, 0x193E, 0x4C49, 0x1C5E, 0x1A59,
0x0083, 0x0E05, 0x1B61, 0x1B60, 0x00DE, 0x0B87,
0x0601, 0x0295, 0x0317, 0x029F, 0x040E, 0x00DE,
0x0E42, 0x00FE, 0x0E1C, 0x00C3, 0x0E15, 0x177F,
0x8E00, 0x8A00, 0x8100, 0x8900, 0x00DE, 0x0BB3,
0x00DF, 0x0BB2, 0x1F1F, 0x4D00, 0x1481, 0x8D1E,
0x1FD8, 0x0098, 0x8000, 0x0080, 0x0E48, 0xA830,
0xAC38, 0xAD30, 0xAC38, 0xAD30, 0xAC38, 0xAD30,
0xAC38, 0xAD30, 0xAC38, 0xAD30, 0xAC38, 0xAD30,
0xAC38, 0xAD30, 0xAC38, 0xAD30, 0xAC38, 0xAD30,
0xAC38, 0xAD30, 0xAC38, 0xAD30, 0xAC38, 0xAD30,
0xAC38, 0xAD30, 0xAC38, 0xAD30, 0xAC38, 0xAD30,
0xAC38, 0x00FE, 0x0BB2, 0x8F00, 0x0080, 0x0E48,
0x00C1, 0x0E43, 0x1C61, 0x193A, 0x1918, 0x9059,
0x1919, 0x9E51, 0x8080, 0x9759, 0x8091, 0x9E51,
0x8080, 0x9759, 0x8091, 0x9E51, 0x8080, 0x9759,
0x8091, 0x9E51, 0x8080, 0x9759, 0x8091, 0x9E51,
0x8080, 0x9759, 0x8091, 0x9E51, 0x8080, 0x9759,
0x8091, 0x9E51, 0x8080, 0x9759, 0x8091, 0x9E51,
0x8080, 0x9759, 0x8091, 0x9E51, 0x8080, 0x9759,
0x8091, 0x9E51, 0x8080, 0x9759, 0x8091, 0x9E51,
0x8080, 0x9759, 0x8091, 0x9E51, 0x8080, 0x9759,
0x8091, 0x9E51, 0x8080, 0x9759, 0x8091, 0x9E51,
0x8080, 0x9759, 0x8091, 0x9E51, 0x8080, 0x9759,
0x8091, 0x9E00, 0x6F33, 0x1B7F, 0x8100, 0x00DE,
0x0BDD, 0xB100, 0x0295, 0x03C0, 0x8D00, 0x8F00,
0x8A00, 0x00C0, 0x0E43, 0x00C1, 0x0E43, 0x0083,
0x0BDF, 0x0087, 0xFFFF, 0x00DE, 0x0BDE, 0x80E1,
0xB04F, 0x1F5E, 0xE2E1, 0xB64F, 0x1F5E, 0xE2E1,
0x110F, 0x03BB, 0xB79A, 0x1F5F, 0xE2E1, 0xB69B,
0x1F5E, 0xE2E1, 0xB79A, 0x1B1F, 0x00FF, 0x0BDE,
0x00C3, 0x0E14, 0x8A00, 0x177F, 0x00C3, 0x0E46,
0x8A00, 0x177F, 0x00C3, 0x0E47, 0x8A00, 0x177F,
0x8100, 0x00DE, 0x0B9B, 0xB100, 0x0295, 0x0406,
0x00DE, 0x0E42, 0x00FE, 0x0E43, 0x8100, 0x8900,
0x00DE, 0x0B9E, 0x00DF, 0x0BA0, 0x8200, 0x0293,
0x03E2, 0x7800, 0x029F, 0x03E5, 0x0295, 0x03E5,
0x7400, 0x00FE, 0x0B9E, 0x00DF, 0x0E43, 0x05E0,
0x4C00, 0x00FE, 0x0E40, 0x8100, 0x8900, 0x00DE,
0x0B9F, 0x00DF, 0x0BA1, 0x8200, 0x0293, 0x03F9,
0x7800, 0x029F, 0x03FC, 0x0295, 0x03FC, 0x7400,
0x00FE, 0x0B9F, 0x00DF, 0x0E43, 0x05E0, 0x4C00,
0x00FE, 0x0E41, 0x029F, 0x040E, 0x00DE, 0x0E42,
0x00FE, 0x0E40, 0x00FE, 0x0E41, 0x00FE, 0x0E43,
0x8100, 0x8E00, 0x8400, 0x8900, 0x1EFE, 0x0E40,
0x1EBE, 0x0083, 0x0E08, 0x1C03, 0x1FF5, 0x191A,
0xF858, 0xFBA0, 0xF8B1, 0xFBA0, 0xF8B1, 0xFBA0,
0xF8B1, 0xFBA0, 0xF83B, 0x1B7E, 0x0083, 0x0E04,
0x8100, 0x8973, 0x1961, 0x1960, 0x7800, 0x00FE,
0x0E04, 0x0294, 0x0303, 0x8E00, 0x8100, 0x00DE,
0x0B9B, 0xB100, 0x0295, 0x0446, 0x00DE, 0x0B9C,
0x00DC, 0x0B9D, 0x2ECE, 0x2CCF, 0x8100, 0x00DE,
0x0E1C, 0x2ECD, 0x16C9, 0x0001, 0x16CB, 0x0040,
0x02BF, 0x0652, 0x8100, 0x8900, 0x00DE, 0x0B82,
0x00DF, 0x0B83, 0x2ECE, 0x2FCF, 0x16CD, 0x0B80,
0x16C9, 0x0001, 0x16CB, 0x00C4, 0x02BF, 0x0652,
0x8100, 0x00DE, 0x0B80, 0x00DC, 0x0B81, 0xB100,
0x0294, 0x0462, 0x00C0, 0x0E07, 0x029F, 0x0068,
0x2ECE, 0x2CCF, 0x16CD, 0x0B80, 0x16C9, 0x0000,
0x16CB, 0x00C4, 0x0082, 0x0E08, 0x009F, 0x0000,
0x1B5F, 0x009F, 0x0140, 0x1B5F, 0x009F, 0x0280,
0x1B5F, 0x009F, 0x0400, 0x1B5F, 0x009F, 0x0540,
0x1B5F, 0x009F, 0x0680, 0x1B5F, 0x009F, 0x07C0,
0x1B5F, 0x009F, 0x0900, 0x1B5F, 0x009F, 0x0A40,
0x1B5F, 0x02BF, 0x0652, 0x00DE, 0x0BA7, 0x00DF,
0x0BA8, 0x2ECE, 0x2FCF, 0x16CD, 0x03C0, 0x16C9,
0x0000, 0x16CB, 0x0080, 0x8100, 0x8900, 0x00DE,
0x0B84, 0x009F, 0x0D21, 0x4C00, 0x1C7E, 0x0213,
0x00FE, 0x0E15, 0x00DE, 0x0B85, 0x009F, 0x0D24,
0x4C00, 0x1C7E, 0x0213, 0x00FE, 0x0E16, 0x00DE,
0x0B86, 0x009A, 0x000F, 0x009F, 0x0CB1, 0x3400,
0x4C00, 0x1C7E, 0x0213, 0x00FE, 0x0E14, 0x00DE,
0x0B86, 0x009A, 0x001F, 0x009F, 0x0CC1, 0x14FC,
0x3400, 0x4C00, 0x1C7E, 0x0213, 0x00FE, 0x0E46,
0x00DE, 0x0B86, 0x009F, 0x0CE1, 0x14F7, 0x4C00,
0x1C7E, 0x0213, 0x00FE, 0x0E47, 0x8100, 0x00DE,
0x0B9B, 0xB100, 0x0295, 0x04F9, 0x8900, 0x00DF,
0x0B9E, 0x0300, 0x0CC0, 0x00FF, 0x0E40, 0x00DF,
0x0B9F, 0x0300, 0x0CC0, 0x00FF, 0x0E41, 0x009F,
0x0CE0, 0x00FF, 0x0E42, 0x00FF, 0x0E43, 0x02BF,
0x0652, 0x00DE, 0x0B9C, 0x2ECE, 0x00DE, 0x0B9D,
0x2ECF, 0x16CD, 0x0CC0, 0x16C9, 0x0000, 0x16CB,
0x0040, 0x02BF, 0x0652, 0x00C0, 0x0E07, 0x029F,
0x02F8, 0x009F, 0x0CE0, 0x00FF, 0x0E42, 0x00FF,
0x0E40, 0x00FF, 0x0E41, 0x00FF, 0x0E43, 0x02BF,
0x0652, 0x00C0, 0x0E07, 0x029F, 0x02F8, 0x8E00,
0x0086, 0x0400, 0x8100, 0x8970, 0x191C, 0x2ECE,
0x2CCF, 0x1FC6, 0x2ECD, 0x16C9, 0x0001, 0x16CB,
0x0780, 0x02BF, 0x0652, 0x02BF, 0x057A, 0x029F,
0x0068, 0x8E00, 0x0086, 0x07C0, 0x8100, 0x8970,
0x191C, 0x2ECE, 0x2CCF, 0x1FC6, 0x2ECD, 0x16C9,
0x0001, 0x16CB, 0x0780, 0x02BF, 0x0652, 0x02BF,
0x057A, 0x029F, 0x0068, 0x8C00, 0x8A00, 0x8100,
0x8970, 0x191F, 0x2ECE, 0x2FCF, 0x16CD, 0x0280,
0x16C9, 0x0001, 0x16CB, 0x0280, 0x8F50, 0x8140,
0x0081, 0x0400, 0x0083, 0x0000, 0x0082, 0x0140,
0x0099, 0x0080, 0x02BF, 0x0652, 0x1105, 0x0562,
0x1F61, 0x1120, 0x0554, 0x8972, 0x195C, 0xF07B,
0x197D, 0xF131, 0x8139, 0x8900, 0x6800, 0x2ECE,
0x2CCF, 0x1FFB, 0x2FCD, 0x0F01, 0x2FC9, 0x1FF9,
0x2FCB, 0x7200, 0x1F5E, 0x1F1C, 0x8100, 0x26C9,
0x02A0, 0x0004, 0x029C, 0x0563, 0x029F, 0x0068,
0x029F, 0x0068, 0x029F, 0x0068, 0x029F, 0x0068,
0x16FC, 0xDCD1, 0x16FD, 0x0002, 0x16FB, 0x0001,
0x029F, 0x0F1A, 0x029F, 0x0045, 0x8E00, 0x191F,
0x191D, 0x1F5F, 0x1F1D, 0x2FCE, 0x2DCF, 0x8900,
0x1FA6, 0x2DCD, 0x0E00, 0x2EC9, 0x8100, 0x009C,
0x00C0, 0x2CCB, 0x1CA0, 0x0081, 0x0E48, 0x4800,
0x1B3E, 0x1B3C, 0x0B00, 0x0099, 0x0060, 0x4B00,
0x1B3D, 0x0081, 0x0E48, 0x1C06, 0x0083, 0x0000,
0x1C43, 0x27C9, 0x03A0, 0x0004, 0x029C, 0x059B,
0x1109, 0x05D0, 0x8E00, 0x193A, 0x1938, 0x6900,
0x2FCE, 0x2DCF, 0x8900, 0x193D, 0x2DCD, 0x16C9,
0x0000, 0x8100, 0x009C, 0x00C0, 0x2CCB, 0x0081,
0x0E48, 0x4800, 0x1B3E, 0x1B3C, 0x0B00, 0x0960,
0x4B00, 0x1B3D, 0x0081, 0x0E48, 0x8F00, 0x80F0,
0x80C0, 0x6A00, 0x4800, 0x1117, 0x05CA, 0x80F0,
0x80C0, 0x6B32, 0x4922, 0x80F0, 0x80C0, 0x6A3A,
0x482A, 0x80F0, 0x80C0, 0x6B32, 0x4922, 0x1B5F,
0x1B5D, 0x80F0, 0x80C0, 0x6A00, 0x4800, 0x1117,
0x05DE, 0x80F0, 0x80C0, 0x6B32, 0x4922, 0x80F0,
0x80C0, 0x6A3A, 0x482A, 0x80F0, 0x80C0, 0x6B32,
0x4922, 0x1B5F, 0x1B5D, 0x1C05, 0x02DF, 0x8E00,
0x009B, 0x0E48, 0x009D, 0x00C0, 0x02BF, 0x0637,
0x4900, 0x00FF, 0x0E1D, 0x00FD, 0x0E1E, 0x8900,
0x02BF, 0x0652, 0x1104, 0x0622, 0x00DA, 0x0E1D,
0x00D8, 0x0E1E, 0x009B, 0x0EA8, 0x009D, 0x00C0,
0x02BF, 0x0637, 0x4900, 0x00FF, 0x0E1D, 0x00FD,
0x0E1E, 0x0083, 0x0E48, 0x02BF, 0x0642, 0x8900,
0x00DA, 0x0E1D, 0x00D8, 0x0E1E, 0x009B, 0x0E48,
0x009D, 0x00C0, 0x02BF, 0x0637, 0x4900, 0x00FF,
0x0E1D, 0x00FD, 0x0E1E, 0x0083, 0x0EA8, 0x02BF,
0x0642, 0x0000, 0x0000, 0x8E00, 0x8900, 0x00DA,
0x0E1D, 0x00D8, 0x0E1E, 0x009B, 0x0EA8, 0x009D,
0x00C0, 0x02BF, 0x0637, 0x4900, 0x0083, 0x0E48,
0x02BF, 0x0642, 0x0083, 0x0EA8, 0x02BF, 0x0642,
0x02DF, 0x8E00, 0x00FA, 0xFFCE, 0x00F8, 0xFFCF,
0x00FB, 0xFFCD, 0x16C9, 0x0000, 0x2DCB, 0x02DF,
0x8F00, 0x8D00, 0x8A00, 0x197A, 0x1978, 0xA000,
0xB600, 0x1130, 0x0650, 0x9179, 0x4E6D, 0x197A,
0x4D43, 0xA039, 0xB629, 0x02DF, 0x26C9, 0x02A0,
0x0004, 0x029C, 0x0652, 0x02DF, 0x26FE, 0x02C0,
0x8000, 0x029C, 0x0658, 0x02DF, 0x26FC, 0x02A0,
0x8000, 0x029C, 0x065E, 0x02DF, 0x26FC, 0x02A0,
0x8000, 0x029C, 0x0664, 0x02DF, 0x8100, 0x8970,
0x8E60, 0x2ECE, 0x2CCF, 0x16CD, 0x0E48, 0x16C9,
0x0000, 0x8900, 0x0D20, 0x2DCB, 0x4C00, 0x1C80,
0x0080, 0x0280, 0x0081, 0x0000, 0x0082, 0x0140,
0x0083, 0x0E48, 0x0A00, 0x27C9, 0x03A0, 0x0004,
0x029C, 0x0681, 0x2ECE, 0x2CCF, 0x16CD, 0x0E58,
0x16C9, 0x0000, 0x16CB, 0x0260, 0x009F, 0x00A0,
0x8F00, 0x007F, 0x069A, 0x197E, 0x1B1A, 0x197C,
0x1B1A, 0x1B5E, 0x1B5C, 0x1B3E, 0x1B3C, 0x1C04,
0x029F, 0x0068, 0x0082, 0x0BB8, 0x195E, 0x2ED1,
0x195E, 0x2ED4, 0x195E, 0x2ED5, 0x195E, 0x2ED6,
0x195E, 0x2ED7, 0x195E, 0x2ED8, 0x195E, 0x2ED9,
0x195E, 0x2EA0, 0x195E, 0x2EA1, 0x195E, 0x2EA2,
0x195E, 0x2EA3, 0x195E, 0x2EA4, 0x195E, 0x2EA5,
0x195E, 0x2EA6, 0x195E, 0x2EA7, 0x195E, 0x2EA8,
0x195E, 0x2EA9, 0x195E, 0x2EAA, 0x195E, 0x2EAB,
0x195E, 0x2EAC, 0x195E, 0x2EAD, 0x195E, 0x2EAE,
0x195E, 0x2EAF, 0x195E, 0x2EDE, 0x195E, 0x2EDA,
0x195E, 0x2EDB, 0x195E, 0x2EDC, 0x8C00, 0x8A00,
0x8E00, 0x00D8, 0x0E16, 0x195B, 0x1959, 0x8100,
0x195C, 0x0080, 0x0E48, 0x195F, 0x1B1F, 0x195F,
0x1B1F, 0x195F, 0x1B1F, 0x185F, 0x1B1F, 0x6B00,
0x1505, 0x4D00, 0x157E, 0x1C9F, 0x1CBD, 0x05E0,
0x9900, 0x7D00, 0x1CDD, 0x8900, 0x1FA5, 0x1502,
0x1CBF, 0x009A, 0x01FC, 0x009E, 0x0E48, 0x0081,
0xFFDD, 0x0083, 0x0D80, 0x0064, 0x0710, 0x1827,
0x1B07, 0x4A00, 0x1FFC, 0x1827, 0x1B07, 0x1579,
0x3500, 0x1827, 0x1B07, 0x4100, 0x1B7E, 0x1827,
0x1B07, 0x1B7F, 0x0000, 0x0065, 0x0716, 0x1827,
0x1B07, 0x0000, 0x0000, 0x0007, 0x187F, 0x0066,
0x071F, 0x4A3B, 0x1FFC, 0x1579, 0x3533, 0x4100,
0x1B7F, 0x0004, 0x189F, 0x1ADF, 0x189F, 0x1ADF,
0x189F, 0x1ADF, 0x189F, 0x1ADF, 0x1ADC, 0x0082,
0x0BD2, 0x27DC, 0x1ADF, 0x27DB, 0x1ADF, 0x27DA,
0x1ADF, 0x0082, 0x0BBE, 0x27D9, 0x1ADF, 0x27D8,
0x1ADF, 0x8F00, 0x00C1, 0x0E42, 0x0082, 0x0D80,
0x1940, 0x1943, 0x80F0, 0xB8C0, 0x111F, 0x074A,
0xA6F0, 0xBCF0, 0x1940, 0x1943, 0xBCF0, 0x4EC0,
0xB831, 0xA6F0, 0xBCF0, 0xBC00, 0x4E00, 0x1B3E,
0x00E1, 0x0E42, 0x02DF, 0x0082, 0x0BB8, 0x195E,
0x2ED1, 0x195E, 0x2ED4, 0x195E, 0x2ED5, 0x195E,
0x2ED6, 0x195E, 0x2ED7, 0x195E, 0x2ED8, 0x195E,
0x2ED9, 0x195E, 0x2EA0, 0x195E, 0x2EA1, 0x195E,
0x2EA2, 0x195E, 0x2EA3, 0x195E, 0x2EA4, 0x195E,
0x2EA5, 0x195E, 0x2EA6, 0x195E, 0x2EA7, 0x195E,
0x2EA8, 0x195E, 0x2EA9, 0x195E, 0x2EAA, 0x195E,
0x2EAB, 0x195E, 0x2EAC, 0x195E, 0x2EAD, 0x195E,
0x2EAE, 0x195E, 0x2EAF, 0x195E, 0x2EDE, 0x195E,
0x2EDA, 0x195E, 0x2EDB, 0x195E, 0x2EDC, 0x8C00,
0x8A00, 0x8F00, 0x195B, 0x1959, 0x1958, 0x0080,
0x0E48, 0x195F, 0x1B1F, 0x195F, 0x1B1F, 0x195F,
0x1B1F, 0x185F, 0x1B1F, 0x6B00, 0x1505, 0x7100,
0x157E, 0x03A0, 0xFFFF, 0x029C, 0x07AB, 0x0085,
0x0000, 0x1502, 0x1C9F, 0x0086, 0x0020, 0x029F,
0x07B7, 0x7900, 0x1CBF, 0x1C9D, 0x05E0, 0x9900,
0x7D00, 0x1CDD, 0x8900, 0x1FA4, 0x1502, 0x0504,
0x1C9F, 0x009E, 0x0E4A, 0x7000, 0x0081, 0xFFDD,
0x0083, 0x0D80, 0x1F42, 0x0064, 0x07C4, 0x1827,
0x1B07, 0x0000, 0x0000, 0x0065, 0x07D6, 0x1827,
0x1B07, 0x4A00, 0x1C5E, 0x1827, 0x1B07, 0x1958,
0x195F, 0x1827, 0x1B07, 0x5100, 0x1B7F, 0x1827,
0x1B07, 0x1B7C, 0x1B78, 0x0066, 0x07E0, 0x4A00,
0x1C5E, 0x1958, 0x195F, 0x5100, 0x1B7F, 0x1B7C,
0x1B78, 0x0004, 0x1C5A, 0x189F, 0x1ADF, 0x189F,
0x1ADF, 0x189F, 0x1ADF, 0x189F, 0x1ADF, 0x1ADC,
0x0082, 0x0BD2, 0x27DC, 0x1ADF, 0x27DB, 0x1ADF,
0x27DA, 0x1ADF, 0x0082, 0x0BBE, 0x27D9, 0x1ADF,
0x27D8, 0x1ADF, 0x8D00, 0x8B00, 0x8F00, 0x0080,
0x0D80, 0x00C3, 0x0E42, 0x191A, 0x1919, 0xB058,
0xFB50, 0x1919, 0x110F, 0x080D, 0xB058, 0xFAA1,
0x1919, 0xB058, 0xFBA0, 0x1919, 0xB058, 0xFA3B,
0x1B7E, 0x00E3, 0x0E42, 0x02DF, 0x0082, 0x0BB8,
0x195E, 0x2ED1, 0x195E, 0x2ED4, 0x195E, 0x2ED5,
0x195E, 0x2ED6, 0x195E, 0x2ED7, 0x195E, 0x2ED8,
0x195E, 0x2ED9, 0x195E, 0x2EA0, 0x195E, 0x2EA1,
0x195E, 0x2EA2, 0x195E, 0x2EA3, 0x195E, 0x2EA4,
0x195E, 0x2EA5, 0x195E, 0x2EA6, 0x195E, 0x2EA7,
0x195E, 0x2EA8, 0x195E, 0x2EA9, 0x195E, 0x2EAA,
0x195E, 0x2EAB, 0x195E, 0x2EAC, 0x195E, 0x2EAD,
0x195E, 0x2EAE, 0x195E, 0x2EAF, 0x195E, 0x2EDE,
0x195E, 0x2EDA, 0x195E, 0x2EDB, 0x195E, 0x2EDC,
0x00C0, 0x0E42, 0x0081, 0xFFDD, 0x1120, 0x0855,
0x1824, 0x1B04, 0x0000, 0x0000, 0x00E0, 0x0E42,
0x0082, 0x0BD9, 0x0004, 0x189F, 0x1ADF, 0x189F,
0x1ADF, 0x189F, 0x1ADF, 0x189F, 0x1ADF, 0x8900,
0x1ADC, 0x27DC, 0x00FF, 0x0BD2, 0x27DB, 0x00FF,
0x0BD1, 0x27DA, 0x00FF, 0x0BD0, 0x27D9, 0x00FF,
0x0BBE, 0x27D8, 0x00FF, 0x0BBD, 0x02DF, 0x02DF,
0x00C0, 0x0E40, 0x0081, 0x0B89, 0x00C2, 0x0E08,
0x1C62, 0x02BF, 0x81F9, 0x00F8, 0x0BA9, 0x02DF,
0x00C0, 0x0E41, 0x0081, 0x0B8B, 0x00C2, 0x0E09,
0x1C62, 0x02BF, 0x81F9, 0x00F8, 0x0BAC, 0x02DF,
0x00C0, 0x0E40, 0x0081, 0x0B89, 0x00C2, 0x0E08,
0x1C62, 0x00C4, 0x0E41, 0x00C5, 0x0E09, 0x02BF,
0x80E7, 0x00F8, 0x0BA9, 0x00FB, 0x0BAC, 0x02DF,
0x00C0, 0x0E43, 0x0081, 0x0B97, 0x00C2, 0x0E0A,
0x1C62, 0x02BF, 0x81F9, 0x00F8, 0x0BAF, 0x02DF,
0x00C0, 0x0E40, 0x0081, 0x0B89, 0x00C2, 0x0E08,
0x1C62, 0x02BF, 0x81F9, 0x00F8, 0x0BA9, 0x00C0,
0x0E43, 0x0081, 0x0B97, 0x00C2, 0x0E0A, 0x1C62,
0x02BF, 0x81F9, 0x00F8, 0x0BAF, 0x02DF, 0x00C0,
0x0E41, 0x0081, 0x0B8B, 0x00C2, 0x0E09, 0x1C62,
0x02BF, 0x81F9, 0x00F8, 0x0BAC, 0x00C0, 0x0E43,
0x0081, 0x0B97, 0x00C2, 0x0E0A, 0x1C62, 0x02BF,
0x81F9, 0x00F8, 0x0BAF, 0x02DF, 0x00C0, 0x0E40,
0x0081, 0x0B89, 0x00C2, 0x0E08, 0x1C62, 0x00C4,
0x0E41, 0x00C5, 0x0E09, 0x02BF, 0x80E7, 0x00F8,
0x0BA9, 0x00FB, 0x0BAC, 0x00C0, 0x0E43, 0x0081,
0x0B97, 0x00C2, 0x0E0A, 0x1C62, 0x02BF, 0x81F9,
0x00F8, 0x0BAF, 0x02DF, 0x00C0, 0x0E40, 0x0081,
0x0B89, 0x00C2, 0x0E08, 0x0083, 0x0E48, 0x02BF,
0x845D, 0x00F8, 0x0BA9, 0x02DF, 0x00C0, 0x0E41,
0x0081, 0x0B8B, 0x00C2, 0x0E09, 0x0083, 0x0E48,
0x02BF, 0x845D, 0x00F8, 0x0BAC, 0x02DF, 0x00C0,
0x0E40, 0x0081, 0x0B89, 0x00C2, 0x0E08, 0x0083,
0x0E48, 0x00C4, 0x0E41, 0x00C5, 0x0E09, 0x02BF,
0x8282, 0x00F8, 0x0BA9, 0x00FB, 0x0BAC, 0x02DF,
0x00C0, 0x0E43, 0x0081, 0x0B97, 0x00C2, 0x0E0A,
0x0083, 0x0E48, 0x02BF, 0x845D, 0x00F8, 0x0BAF,
0x02DF, 0x00C0, 0x0E40, 0x0081, 0x0B89, 0x00C2,
0x0E08, 0x0083, 0x0E48, 0x02BF, 0x845D, 0x00F8,
0x0BA9, 0x00C0, 0x0E43, 0x0081, 0x0B97, 0x00C2,
0x0E0A, 0x0083, 0x0E48, 0x02BF, 0x845D, 0x00F8,
0x0BAF, 0x02DF, 0x00C0, 0x0E41, 0x0081, 0x0B8B,
0x00C2, 0x0E09, 0x0083, 0x0E48, 0x02BF, 0x845D,
0x00F8, 0x0BAC, 0x00C0, 0x0E43, 0x0081, 0x0B97,
0x00C2, 0x0E0A, 0x0083, 0x0E48, 0x02BF, 0x845D,
0x00F8, 0x0BAF, 0x02DF, 0x00C0, 0x0E40, 0x0081,
0x0B89, 0x00C2, 0x0E08, 0x0083, 0x0E48, 0x00C4,
0x0E41, 0x00C5, 0x0E09, 0x02BF, 0x8282, 0x00F8,
0x0BA9, 0x00FB, 0x0BAC, 0x00C0, 0x0E43, 0x0081,
0x0B97, 0x00C2, 0x0E0A, 0x0083, 0x0E48, 0x02BF,
0x845D, 0x00F8, 0x0BAF, 0x02DF, 0x00C0, 0x0E40,
0x0081, 0x0B8D, 0x00C2, 0x0E0B, 0x1C62, 0x02BF,
0x81F9, 0x00F8, 0x0BAA, 0x02DF, 0x00C0, 0x0E41,
0x0081, 0x0B8F, 0x00C2, 0x0E0C, 0x1C62, 0x02BF,
0x81F9, 0x00F8, 0x0BAD, 0x02DF, 0x00C0, 0x0E40,
0x0081, 0x0B8D, 0x00C2, 0x0E0B, 0x1C62, 0x00C4,
0x0E41, 0x00C5, 0x0E0C, 0x02BF, 0x80E7, 0x00F8,
0x0BAA, 0x00FB, 0x0BAD, 0x02DF, 0x00C0, 0x0E40,
0x0081, 0x0B8D, 0x00C2, 0x0E0B, 0x0083, 0x0E48,
0x02BF, 0x845D, 0x00F8, 0x0BAA, 0x02DF, 0x00C0,
0x0E41, 0x0081, 0x0B8F, 0x00C2, 0x0E0C, 0x0083,
0x0E48, 0x02BF, 0x845D, 0x00F8, 0x0BAD, 0x02DF,
0x00C0, 0x0E40, 0x0081, 0x0B8D, 0x00C2, 0x0E0B,
0x0083, 0x0E48, 0x00C4, 0x0E41, 0x00C5, 0x0E0C,
0x02BF, 0x8282, 0x00F8, 0x0BAA, 0x00FB, 0x0BAD,
0x02DF, 0x00C0, 0x0E43, 0x0081, 0x0B99, 0x00C2,
0x0E0D, 0x1C62, 0x02BF, 0x81F9, 0x00F8, 0x0BB0,
0x02DF, 0x00C0, 0x0E43, 0x0081, 0x0B99, 0x00C2,
0x0E0D, 0x1C62, 0x02BF, 0x81F9, 0x00F8, 0x0BB0,
0x029F, 0x0982, 0x00C0, 0x0E43, 0x0081, 0x0B99,
0x00C2, 0x0E0D, 0x1C62, 0x02BF, 0x81F9, 0x00F8,
0x0BB0, 0x029F, 0x098E, 0x00C0, 0x0E43, 0x0081,
0x0B99, 0x00C2, 0x0E0D, 0x1C62, 0x02BF, 0x81F9,
0x00F8, 0x0BB0, 0x029F, 0x099A, 0x00C0, 0x0E43,
0x0081, 0x0B99, 0x00C2, 0x0E0D, 0x1C62, 0x02BF,
0x81F9, 0x00F8, 0x0BB0, 0x029F, 0x09AC, 0x00C0,
0x0E43, 0x0081, 0x0B99, 0x00C2, 0x0E0D, 0x1C62,
0x02BF, 0x81F9, 0x00F8, 0x0BB0, 0x029F, 0x09B9,
0x00C0, 0x0E43, 0x0081, 0x0B99, 0x00C2, 0x0E0D,
0x1C62, 0x02BF, 0x81F9, 0x00F8, 0x0BB0, 0x029F,
0x09C6, 0x00C0, 0x0E43, 0x0081, 0x0B99, 0x00C2,
0x0E0D, 0x0083, 0x0E48, 0x02BF, 0x845D, 0x00F8,
0x0BB0, 0x02DF, 0x00C0, 0x0E43, 0x0081, 0x0B99,
0x00C2, 0x0E0D, 0x0083, 0x0E48, 0x02BF, 0x845D,
0x00F8, 0x0BB0, 0x029F, 0x0982, 0x00C0, 0x0E43,
0x0081, 0x0B99, 0x00C2, 0x0E0D, 0x0083, 0x0E48,
0x02BF, 0x845D, 0x00F8, 0x0BB0, 0x029F, 0x098E,
0x00C0, 0x0E43, 0x0081, 0x0B99, 0x00C2, 0x0E0D,
0x0083, 0x0E48, 0x02BF, 0x845D, 0x00F8, 0x0BB0,
0x029F, 0x099A, 0x00C0, 0x0E43, 0x0081, 0x0B99,
0x00C2, 0x0E0D, 0x0083, 0x0E48, 0x02BF, 0x845D,
0x00F8, 0x0BB0, 0x029F, 0x09AC, 0x00C0, 0x0E43,
0x0081, 0x0B99, 0x00C2, 0x0E0D, 0x0083, 0x0E48,
0x02BF, 0x845D, 0x00F8, 0x0BB0, 0x029F, 0x09B9,
0x00C0, 0x0E43, 0x0081, 0x0B99, 0x00C2, 0x0E0D,
0x0083, 0x0E48, 0x02BF, 0x845D, 0x00F8, 0x0BB0,
0x029F, 0x09C6, 0x00C0, 0x0E40, 0x0081, 0x0B91,
0x00C2, 0x0E0E, 0x1C62, 0x02BF, 0x81F9, 0x00F8,
0x0BAB, 0x02DF, 0x00C0, 0x0E41, 0x0081, 0x0B93,
0x00C2, 0x0E0F, 0x1C62, 0x02BF, 0x81F9, 0x00F8,
0x0BAE, 0x02DF, 0x00C0, 0x0E40, 0x0081, 0x0B91,
0x00C2, 0x0E0E, 0x1C62, 0x00C4, 0x0E41, 0x00C5,
0x0E0F, 0x02BF, 0x80E7, 0x00F8, 0x0BAB, 0x00FB,
0x0BAE, 0x02DF, 0x00C0, 0x0E40, 0x0081, 0x0B91,
0x00C2, 0x0E0E, 0x0083, 0x0E48, 0x02BF, 0x845D,
0x00F8, 0x0BAB, 0x02DF, 0x00C0, 0x0E41, 0x0081,
0x0B93, 0x00C2, 0x0E0F, 0x0083, 0x0E48, 0x02BF,
0x845D, 0x00F8, 0x0BAE, 0x02DF, 0x00C0, 0x0E40,
0x0081, 0x0B91, 0x00C2, 0x0E0E, 0x0083, 0x0E48,
0x00C4, 0x0E41, 0x00C5, 0x0E0F, 0x02BF, 0x8282,
0x00F8, 0x0BAB, 0x00FB, 0x0BAE, 0x02DF, 0x00C0,
0x0E43, 0x0081, 0x0B95, 0x00C2, 0x0E10, 0x1C62,
0x02BF, 0x81F9, 0x00F8, 0x0BB1, 0x02DF, 0x00C0,
0x0E43, 0x0081, 0x0B95, 0x00C2, 0x0E10, 0x1C62,
0x02BF, 0x81F9, 0x00F8, 0x0BB1, 0x029F, 0x0A94,
0x00C0, 0x0E43, 0x0081, 0x0B95, 0x00C2, 0x0E10,
0x1C62, 0x02BF, 0x81F9, 0x00F8, 0x0BB1, 0x029F,
0x0AA0, 0x00C0, 0x0E43, 0x0081, 0x0B95, 0x00C2,
0x0E10, 0x1C62, 0x02BF, 0x81F9, 0x00F8, 0x0BB1,
0x029F, 0x0AAC, 0x00C0, 0x0E43, 0x0081, 0x0B95,
0x00C2, 0x0E10, 0x1C62, 0x02BF, 0x81F9, 0x00F8,
0x0BB1, 0x029F, 0x0ABE, 0x00C0, 0x0E43, 0x0081,
0x0B95, 0x00C2, 0x0E10, 0x1C62, 0x02BF, 0x81F9,
0x00F8, 0x0BB1, 0x029F, 0x0ACB, 0x00C0, 0x0E43,
0x0081, 0x0B95, 0x00C2, 0x0E10, 0x1C62, 0x02BF,
0x81F9, 0x00F8, 0x0BB1, 0x029F, 0x0AD8, 0x00C0,
0x0E43, 0x0081, 0x0B95, 0x00C2, 0x0E10, 0x0083,
0x0E48, 0x02BF, 0x845D, 0x02DF, 0x00C0, 0x0E43,
0x0081, 0x0B95, 0x00C2, 0x0E10, 0x0083, 0x0E48,
0x02BF, 0x845D, 0x00F8, 0x0BB1, 0x029F, 0x0A94,
0x00C0, 0x0E43, 0x0081, 0x0B95, 0x00C2, 0x0E10,
0x0083, 0x0E48, 0x02BF, 0x845D, 0x00F8, 0x0BB1,
0x029F, 0x0AA0, 0x00C0, 0x0E43, 0x0081, 0x0B95,
0x00C2, 0x0E10, 0x0083, 0x0E48, 0x02BF, 0x845D,
0x00F8, 0x0BB1, 0x029F, 0x0AAC, 0x00C0, 0x0E43,
0x0081, 0x0B95, 0x00C2, 0x0E10, 0x0083, 0x0E48,
0x02BF, 0x845D, 0x00F8, 0x0BB1, 0x029F, 0x0ABE,
0x00C0, 0x0E43, 0x0081, 0x0B95, 0x00C2, 0x0E10,
0x0083, 0x0E48, 0x02BF, 0x845D, 0x00F8, 0x0BB1,
0x029F, 0x0ACB, 0x00C0, 0x0E43, 0x0081, 0x0B95,
0x00C2, 0x0E10, 0x0083, 0x0E48, 0x02BF, 0x845D,
0x00F8, 0x0BB1, 0x029F, 0x0AD8, 0x00C0, 0x0E43,
0x0081, 0x0B91, 0x00C2, 0x0E0E, 0x1C62, 0x02BF,
0x81F9, 0x00F8, 0x0BAB, 0x02DF, 0x00C0, 0x0E43,
0x0081, 0x0B93, 0x00C2, 0x0E0F, 0x1C62, 0x02BF,
0x81F9, 0x00F8, 0x0BAE, 0x02DF, 0x00C0, 0x0E43,
0x0081, 0x0B91, 0x00C2, 0x0E0E, 0x1C62, 0x00C4,
0x0E43, 0x00C5, 0x0E0F, 0x02BF, 0x80E7, 0x00F8,
0x0BAB, 0x00FB, 0x0BAE, 0x02DF, 0x00C0, 0x0E43,
0x0081, 0x0B91, 0x00C2, 0x0E0E, 0x0083, 0x0E48,
0x02BF, 0x845D, 0x00F8, 0x0BAB, 0x02DF, 0x00C0,
0x0E43, 0x0081, 0x0B93, 0x00C2, 0x0E0F, 0x0083,
0x0E48, 0x02BF, 0x845D, 0x00F8, 0x0BAE, 0x02DF,
0x00C0, 0x0E43, 0x0081, 0x0B91, 0x00C2, 0x0E0E,
0x0083, 0x0E48, 0x00C4, 0x0E43, 0x00C5, 0x0E0F,
0x02BF, 0x8282, 0x00F8, 0x0BAB, 0x00FB, 0x0BAE,
0x02DF, 0x00C0, 0x0E43, 0x0081, 0x0B95, 0x00C2,
0x0E10, 0x1C62, 0x02BF, 0x81F9, 0x00F8, 0x0BB1,
0x029F, 0x0BA4, 0x00C0, 0x0E43, 0x0081, 0x0B95,
0x00C2, 0x0E10, 0x1C62, 0x02BF, 0x81F9, 0x00F8,
0x0BB1, 0x029F, 0x0BB0, 0x00C0, 0x0E43, 0x0081,
0x0B95, 0x00C2, 0x0E10, 0x1C62, 0x02BF, 0x81F9,
0x00F8, 0x0BB1, 0x029F, 0x0BBC, 0x00C0, 0x0E43,
0x0081, 0x0B95, 0x00C2, 0x0E10, 0x1C62, 0x02BF,
0x81F9, 0x00F8, 0x0BB1, 0x029F, 0x0BCE, 0x00C0,
0x0E43, 0x0081, 0x0B95, 0x00C2, 0x0E10, 0x1C62,
0x02BF, 0x81F9, 0x00F8, 0x0BB1, 0x029F, 0x0BDB,
0x00C0, 0x0E43, 0x0081, 0x0B95, 0x00C2, 0x0E10,
0x1C62, 0x02BF, 0x81F9, 0x00F8, 0x0BB1, 0x029F,
0x0BE8, 0x00C0, 0x0E43, 0x0081, 0x0B95, 0x00C2,
0x0E10, 0x0083, 0x0E48, 0x02BF, 0x845D, 0x00F8,
0x0BB1, 0x029F, 0x0BA4, 0x00C0, 0x0E43, 0x0081,
0x0B95, 0x00C2, 0x0E10, 0x0083, 0x0E48, 0x02BF,
0x845D, 0x00F8, 0x0BB1, 0x029F, 0x0BB0, 0x00C0,
0x0E43, 0x0081, 0x0B95, 0x00C2, 0x0E10, 0x0083,
0x0E48, 0x02BF, 0x845D, 0x00F8, 0x0BB1, 0x029F,
0x0BBC, 0x00C0, 0x0E43, 0x0081, 0x0B95, 0x00C2,
0x0E10, 0x0083, 0x0E48, 0x02BF, 0x845D, 0x00F8,
0x0BB1, 0x029F, 0x0BCE, 0x00C0, 0x0E43, 0x0081,
0x0B95, 0x00C2, 0x0E10, 0x0083, 0x0E48, 0x02BF,
0x845D, 0x00F8, 0x0BB1, 0x029F, 0x0BDB, 0x00C0,
0x0E43, 0x0081, 0x0B95, 0x00C2, 0x0E10, 0x0083,
0x0E48, 0x02BF, 0x845D, 0x00F8, 0x0BB1, 0x029F,
0x0BE8, 0x0118, 0x01D4, 0x0252, 0x02F8, 0x0509,
0x051D, 0x01FB, 0x066A, 0x0D27, 0x01F5, 0x056E,
0x056A, 0x056C, 0x023F, 0x0531, 0x0570, 0x0DA1,
0x020B, 0x0082, 0x0E17, 0x0875, 0x0876, 0x0882,
0x088E, 0x08A0, 0x08AC, 0x08C3, 0x08DA, 0x0875,
0x08F7, 0x0904, 0x0911, 0x0924, 0x0931, 0x094A,
0x0963, 0x0875, 0x0982, 0x098E, 0x099A, 0x0875,
0x09AC, 0x09B9, 0x09C6, 0x09D9, 0x09E5, 0x09F2,
0x09FF, 0x09D9, 0x0A0C, 0x0A19, 0x0A26, 0x0875,
0x0982, 0x098E, 0x099A, 0x0875, 0x09AC, 0x09B9,
0x09C6, 0x0A33, 0x0A40, 0x0A4E, 0x0A5C, 0x0A33,
0x0A6A, 0x0A78, 0x0A86, 0x0875, 0x0A94, 0x0AA0,
0x0AAC, 0x0875, 0x0ABE, 0x0ACB, 0x0AD8, 0x0AEB,
0x0AF7, 0x0B04, 0x0B11, 0x0AEB, 0x0B1E, 0x0B2B,
0x0B38, 0x0875, 0x0A94, 0x0AA0, 0x0AAC, 0x0875,
0x0ABE, 0x0ACB, 0x0AD8, 0x0B45, 0x0B50, 0x0B5E,
0x0B6C, 0x0B45, 0x0B7A, 0x0B88, 0x0B96, 0x0875,
0x0BA4, 0x0BB0, 0x0BBC, 0x0875, 0x0BCE, 0x0BDB,
0x0BE8, 0x0AEB, 0x0BFB, 0x0C08, 0x0C15, 0x0AEB,
0x0C22, 0x0C2F, 0x0C3C, 0x0875, 0x0BA4, 0x0BB0,
0x0BBC, 0x0875, 0x0BCE, 0x0BDB, 0x0BE8, 0x0B45,
0x0C49, 0x0C57, 0x0C65, 0x0B45, 0x0C73, 0x0C81,
0x0C8F, 0x069E, 0x0753, 0x0814, 0x1000, 0x1200,
0x1400, 0x8E00, 0x8100, 0x8970, 0x191C, 0x2ECE,
0x2CCF, 0x16CD, 0x0E80, 0x16C9, 0x0000, 0x16CB,
0x0100, 0x1F7E, 0x1F3C, 0x8100, 0x26C9, 0x02A0,
0x0004, 0x029C, 0x0D36, 0x191E, 0x191C, 0x2ECE,
0x2CCF, 0x16CD, 0x0280, 0x16C9, 0x0000, 0x16CB,
0x0280, 0x1C80, 0x0080, 0x0280, 0x00C1, 0x0E1B,
0x0085, 0x0000, 0x0089, 0x007F, 0x0082, 0x0F00,
0x0083, 0x16B4, 0x1CE3, 0x8100, 0x26C9, 0x02A0,
0x0004, 0x029C, 0x0D54, 0x8F00, 0x8A78, 0x8C68,
0xF100, 0x1A3F, 0x84E3, 0x107E, 0xF2E3, 0xF2E7,
0xF278, 0x6E68, 0xF132, 0x1A3F, 0x119E, 0x0D70,
0x1C67, 0x84E3, 0x107E, 0xF2E3, 0xF2E7, 0xF278,
0x6E68, 0xF132, 0x1A3F, 0x1C67, 0x84E3, 0x107E,
0xF2E3, 0xF2E7, 0xF200, 0x6E00, 0x1B5E, 0x00E1,
0x0E1B, 0x0080, 0x0280, 0x0083, 0x0F00, 0x0081,
0x0000, 0x0082, 0x0140, 0x0089, 0xFFFF, 0x8900,
0x8100, 0x8F00, 0x11A0, 0x0D90, 0x197F, 0x9930,
0x1B1E, 0x1B3F, 0x7D29, 0x1B5F, 0x1B5D, 0x8E00,
0x1FDB, 0x1F99, 0x2ECE, 0x2CCF, 0x16CD, 0x0E80,
0x16C9, 0x0001, 0x16CB, 0x0100, 0x02BF, 0x0652,
0x1C04, 0x029F, 0x0068, 0x8E00, 0x8100, 0x8970,
0x191C, 0x2ECE, 0x2CCF, 0x16CD, 0x07C0, 0x16C9,
0x0001, 0x16CB, 0x0500, 0x02BF, 0x0652, 0x8100,
0x8970, 0x191C, 0x2ECE, 0x2CCF, 0x16CD, 0x07C0,
0x16C9, 0x0000, 0x8900, 0x0D20, 0x2DCB, 0x4C00,
0x1C80, 0x0080, 0x07C0, 0x0083, 0x0000, 0x1C43,
0x0A00, 0x27C9, 0x03A0, 0x0004, 0x029C, 0x0DC3,
0x2ECE, 0x2CCF, 0x16CD, 0x07D0, 0x16C9, 0x0000,
0x16CB, 0x04E0, 0x8F00, 0x80F0, 0x80C0, 0x6A00,
0x4800, 0x114F, 0x0DDE, 0x80F0, 0x80C0, 0x6B32,
0x4922, 0x80F0, 0x80C0, 0x6A3A, 0x482A, 0x80F0,
0x80C0, 0x6B32, 0x4922, 0x1B5F, 0x1B5D, 0x80F0,
0x80C0, 0x6800, 0x7C00, 0x4A00, 0x114F, 0x0DF5,
0x80F0, 0x80C0, 0x6932, 0x7D00, 0x4B22, 0x80F0,
0x80C0, 0x683A, 0x7C00, 0x4A2A, 0x80F0, 0x80C0,
0x6932, 0x7D00, 0x4B22, 0x1B5F, 0x1B5D, 0x1C04,
0x029F, 0x0068, 0x8F00, 0x80F1, 0x80C1, 0x6A00,
0x4800, 0x114F, 0x0E0E, 0x80F1, 0x80C1, 0x6B32,
0x4922, 0x80F1, 0x80C1, 0x6A3A, 0x482A, 0x80F1,
0x80C1, 0x6B32, 0x4922, 0x1B5F, 0x1B5D, 0x8E00,
0x02DF, 0x8E00, 0x8100, 0x8970, 0x191C, 0x2ECE,
0x2CCF, 0x16CD, 0x0400, 0x16C9, 0x0001, 0x16CB,
0x0780, 0x02BF, 0x0652, 0x8100, 0x8970, 0x191C,
0x2ECE, 0x2CCF, 0x16CD, 0x0A40, 0x16C9, 0x0001,
0x16CB, 0x0280, 0x02BF, 0x0652, 0x8100, 0x8970,
0x191C, 0x2ECE, 0x2CCF, 0x16CD, 0x0E48, 0x16C9,
0x0000, 0x16CB, 0x0280, 0x0081, 0x0E48, 0x0082,
0x0000, 0x0083, 0x0000, 0x02BF, 0x0652, 0x02BF,
0x0E00, 0x8100, 0x8970, 0x191C, 0x2ECE, 0x2CCF,
0x16CD, 0x0E48, 0x16C9, 0x0000, 0x16CB, 0x0280,
0x0081, 0x0E48, 0x0082, 0x0140, 0x0083, 0x0140,
0x02BF, 0x0652, 0x02BF, 0x0E00, 0x8100, 0x8970,
0x191C, 0x2ECE, 0x2CCF, 0x16CD, 0x0E48, 0x16C9,
0x0000, 0x16CB, 0x0280, 0x0081, 0x0E48, 0x0082,
0x07C0, 0x0083, 0x07C0, 0x02BF, 0x0652, 0x02BF,
0x0E00, 0x8100, 0x8970, 0x191C, 0x2ECE, 0x2CCF,
0x16CD, 0x0E48, 0x16C9, 0x0000, 0x16CB, 0x0280,
0x0081, 0x0E48, 0x0082, 0x0900, 0x0083, 0x0900,
0x02BF, 0x0652, 0x02BF, 0x0E00, 0x029F, 0x0068,
0x8E00, 0x16FC, 0xECC0, 0x1FCC, 0x1D9E, 0x2EFD,
0x26FC, 0x02A0, 0x8000, 0x029C, 0x0E8E, 0x0000,
0x0000, 0x0000, 0x02FF, 0x8E00, 0x00F0, 0x0E17,
0x00FE, 0x0E18, 0x00FC, 0x0E19, 0x1FCC, 0x1D9E,
0x16FC, 0xFEED, 0x2EFD, 0x26FC, 0x02A0, 0x8000,
0x029C, 0x0EA3, 0x00D0, 0x0E17, 0x00DE, 0x0E18,
0x00DC, 0x0E19, 0x0000, 0x0000, 0x0000, 0x0000,
0x02FF, 0x8E00, 0x1DBC, 0x1DBE, 0x8100, 0x00DE,
0x0BB7, 0x0601, 0x0295, 0x0EBF, 0x0E00, 0x00FE,
0x0B87, 0x8100, 0x00DE, 0x0B88, 0x0601, 0x0295,
0x0EC9, 0x8100, 0x1FCD, 0x1F8D, 0x02FF, 0x8100,
0x00DC, 0x0BE1, 0x7600, 0x00FC, 0x0BE1, 0x8100,
0x1FCD, 0x1F8D, 0x02FF, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x02FF, 0x8E00, 0x1DBC, 0x1DBE,
0x8100, 0x00DE, 0x0BB7, 0x0601, 0x0295, 0x0EE8,
0x0E00, 0x00FE, 0x0B87, 0x1FCD, 0x1F8D, 0x02FF,
0x8100, 0x00DE, 0x0B88, 0x0601, 0x0295, 0x0EFA,
0x00DE, 0x0BDA, 0x2EDA, 0x00DE, 0x0BDB, 0x2EDB,
0x00DE, 0x0BDC, 0x2EDC, 0x1FCD, 0x1F8D, 0x02FF,
0x00DE, 0x0BDA, 0x2EDA, 0x26DB, 0x2EDB, 0x26DC,
0x2EDC, 0x8100, 0x00DC, 0x0BE1, 0x7600, 0x00FC,
0x0BE1, 0x8100, 0x1FCD, 0x1F8D, 0x02FF, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x02FF, 0x0000,
0x0000, 0x0000, 0x0000, 0x02FF, 0x0F28, 0x0F2B,
0x0F63, 0x0F66, 0x8E00, 0x8100, 0x8900, 0x02BF,
0x0F69, 0x27FF, 0x009E, 0x0F16, 0x4C00, 0x1C7E,
0x0313, 0x1C7F, 0x176F, 0x0021, 0x029F, 0x0030,
0x0021, 0x8100, 0x8900, 0x02BF, 0x0F69, 0x24FF,
0x02BF, 0x0F6F, 0x25FF, 0x02BF, 0x0F6F, 0x27FF,
0x2ECE, 0x2CCF, 0x16C9, 0x0001, 0x2FCD, 0x2DCB,
0x8100, 0x8900, 0x02BF, 0x0F69, 0x24FF, 0x1C9E,
0x1CBC, 0x02BF, 0x0F6F, 0x25FF, 0x02BF, 0x0F6F,
0x27FF, 0x1CDF, 0x1CFD, 0x8100, 0x02BF, 0x0F69,
0x26FF, 0x1C1E, 0x8900, 0x02BF, 0x0F6F, 0x20FF,
0x1F5F, 0x02BF, 0x0F69, 0x21FF, 0x02BF, 0x0F69,
0x23FF, 0x26C9, 0x02A0, 0x0004, 0x029C, 0x0F5B,
0x029F, 0x80B5, 0x0021, 0x029F, 0x8000, 0x0021,
0x029F, 0x0045, 0x0021, 0x26FE, 0x02C0, 0x8000,
0x029C, 0x0F69, 0x02DF, 0x27FE, 0x03C0, 0x8000,
0x029C, 0x0F6F, 0x02DF, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000
};
+84
View File
@@ -0,0 +1,84 @@
#ifndef _DOLPHIN_AX_INTERNAL_H_
#define _DOLPHIN_AX_INTERNAL_H_
#include <dolphin/ax.h>
#ifdef __cplusplus
extern "C" {
#endif
// AXAlloc
AXVPB* __AXGetStackHead(u32 priority);
void __AXServiceCallbackStack(void);
void __AXInitVoiceStacks(void);
void __AXAllocInit(void);
void __AXAllocQuit(void);
void __AXPushFreeStack(AXVPB* p);
AXVPB* __AXPopFreeStack(void);
void __AXPushCallbackStack(AXVPB* p);
AXVPB* __AXPopCallbackStack(void);
void __AXRemoveFromStack(AXVPB* p);
void __AXPushStackHead(AXVPB* p, u32 priority);
AXVPB* __AXPopStackFromBottom(u32 priority);
// AXAux
void __AXAuxInit(void);
void __AXAuxQuit(void);
void __AXGetAuxAInput(u32* p);
void __AXGetAuxAOutput(u32* p);
void __AXGetAuxBInput(u32* p);
void __AXGetAuxBOutput(u32* p);
void __AXProcessAux(void);
void __AXGetAuxAInputDpl2(u32* p);
void __AXGetAuxAOutputDpl2R(u32* p);
void __AXGetAuxAOutputDpl2Ls(u32* p);
void __AXGetAuxAOutputDpl2Rs(u32* p);
void __AXGetAuxBForDPL2(u32* p);
void __AXGetAuxBOutputDPL2(u32* p);
// AXCL
extern u32 __AXClMode;
// AXComp
extern u16 __AXCompressorTable[3360];
u32 __AXGetCommandListCycles(void);
u32 __AXGetCommandListAddress(void);
void __AXWriteToCommandList(u16 data);
void __AXNextFrame(void* sbuffer, void* buffer);
void __AXClInit(void);
void __AXClQuit(void);
// AXOut
void __AXOutNewFrame(u32 lessDspCycles);
void __AXOutAiCallback(void);
void __AXOutInitDSP(void);
void __AXOutInit(u32 outputBufferMode);
void __AXOutQuit(void);
// AXProf
AXPROFILE* __AXGetCurrentProfile(void);
// AXSPB
u32 __AXGetStudio(void);
void __AXDepopFade(s32* hostSum, s32* dspVolume, s16* dspDelta);
void __AXPrintStudio(void);
void __AXSPBInit(void);
void __AXSPBQuit(void);
void __AXDepopVoice(AXPB* p);
// AXVPB
u32 __AXGetNumVoices(void);
void __AXServiceVPB(AXVPB *pvpb);
void __AXDumpVPB(AXVPB* pvpb);
void __AXSyncPBs(u32 lessDspCycles);
AXPB* __AXGetPBs(void);
void __AXSetPBDefault(AXVPB* p);
void __AXVPBInit(void);
void __AXVPBQuit(void);
#ifdef __cplusplus
}
#endif
#endif // _DOLPHIN_AX_INTERNAL_H_