mirror of https://github.com/zeldaret/tp.git
169 lines
5.9 KiB
C
169 lines
5.9 KiB
C
//
|
|
// Generated By: dol2asm
|
|
// Translation Unit: CARDUnlock
|
|
//
|
|
|
|
#include "dolphin/card/CARDUnlock.h"
|
|
#include "dol2asm.h"
|
|
#include "dolphin/card/card.h"
|
|
#include "dolphin/dsp/dsp.h"
|
|
#include "dolphin/dvd/dvd.h"
|
|
#include "dolphin/exi/EXIBios.h"
|
|
|
|
#include "dolphin/card/CARDPriv.h"
|
|
|
|
//
|
|
// Forward References:
|
|
//
|
|
|
|
static u32 bitrev(u32 data);
|
|
static s32 ReadArrayUnlock(s32 chan, u32 data, void* rbuf, s32 rlen, s32 mode);
|
|
static s32 DummyLen(void);
|
|
static void InitCallback(void* _task);
|
|
static void DoneCallback(void* _task);
|
|
|
|
//
|
|
// External References:
|
|
//
|
|
|
|
SECTION_INIT void memset();
|
|
void DSPAddTask();
|
|
void DSPSendMailToDSP();
|
|
|
|
//
|
|
// Declarations:
|
|
//
|
|
|
|
/* 80353F24-80354090 34E864 016C+00 1/1 0/0 0/0 .text bitrev */
|
|
static u32 bitrev(u32 data) {
|
|
u32 wk;
|
|
u32 i;
|
|
u32 k = 0;
|
|
u32 j = 1;
|
|
|
|
wk = 0;
|
|
for (i = 0; i < 32; i++) {
|
|
if (i > 15) {
|
|
if (i == 31) {
|
|
wk |= (((data & (0x01 << 31)) >> 31) & 0x01);
|
|
} else {
|
|
wk |= ((data & (0x01 << i)) >> j);
|
|
j += 2;
|
|
}
|
|
} else {
|
|
wk |= ((data & (0x01 << i)) << (31 - i - k));
|
|
k++;
|
|
}
|
|
}
|
|
return wk;
|
|
}
|
|
|
|
#define SEC_AD1(x) ((u8)(((x) >> 29) & 0x03))
|
|
#define SEC_AD2(x) ((u8)(((x) >> 21) & 0xff))
|
|
#define SEC_AD3(x) ((u8)(((x) >> 19) & 0x03))
|
|
#define SEC_BA(x) ((u8)(((x) >> 12) & 0x7f))
|
|
|
|
/* 80354090-803541D4 34E9D0 0144+00 2/2 0/0 0/0 .text ReadArrayUnlock */
|
|
static s32 ReadArrayUnlock(s32 chan, u32 data, void* rbuf, s32 rlen, s32 mode) {
|
|
CARDControl* card;
|
|
BOOL err;
|
|
u8 cmd[5];
|
|
|
|
card = &__CARDBlock[chan];
|
|
if (!EXISelect(chan, 0, 4)) {
|
|
return CARD_RESULT_NOCARD;
|
|
}
|
|
|
|
data &= 0xfffff000;
|
|
memset(cmd, 0, 5);
|
|
cmd[0] = 0x52;
|
|
if (mode == 0) {
|
|
cmd[1] = SEC_AD1(data);
|
|
cmd[2] = SEC_AD2(data);
|
|
cmd[3] = SEC_AD3(data);
|
|
cmd[4] = SEC_BA(data);
|
|
} else {
|
|
cmd[1] = (u8)((data & 0xff000000) >> 24);
|
|
cmd[2] = (u8)((data & 0x00ff0000) >> 16);
|
|
}
|
|
|
|
err = FALSE;
|
|
err |= !EXIImmEx(chan, cmd, 5, 1);
|
|
err |= !EXIImmEx(chan, (u8*)card->workArea + (u32)sizeof(CARDID), card->latency, 1);
|
|
err |= !EXIImmEx(chan, rbuf, rlen, 0);
|
|
err |= !EXIDeselect(chan);
|
|
|
|
return err ? CARD_RESULT_NOCARD : CARD_RESULT_READY;
|
|
}
|
|
|
|
/* ############################################################################################## */
|
|
/* 80450A68-80450A70 0004E8 0004+04 2/2 0/0 0/0 .sdata next */
|
|
static unsigned long int next = 1;
|
|
|
|
/* 803541D4-80354298 34EB14 00C4+00 2/2 0/0 0/0 .text DummyLen */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
static asm s32 DummyLen(void) {
|
|
nofralloc
|
|
#include "asm/dolphin/card/CARDUnlock/DummyLen.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* ############################################################################################## */
|
|
/* 803D1EA0-803D2000 02EFC0 0160+00 1/1 0/0 0/0 .data CardData */
|
|
SECTION_DATA static u8 CardData[352] ALIGN_DECL(32) = {
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x02, 0xFF, 0x00, 0x21,
|
|
0x13, 0x06, 0x12, 0x03, 0x12, 0x04, 0x13, 0x05, 0x00, 0x92, 0x00, 0xFF, 0x00, 0x88, 0xFF, 0xFF,
|
|
0x00, 0x89, 0xFF, 0xFF, 0x00, 0x8A, 0xFF, 0xFF, 0x00, 0x8B, 0xFF, 0xFF, 0x8F, 0x00, 0x02, 0xBF,
|
|
0x00, 0x88, 0x16, 0xFC, 0xDC, 0xD1, 0x16, 0xFD, 0x00, 0x00, 0x16, 0xFB, 0x00, 0x01, 0x02, 0xBF,
|
|
0x00, 0x8E, 0x25, 0xFF, 0x03, 0x80, 0xFF, 0x00, 0x02, 0x94, 0x00, 0x27, 0x02, 0xBF, 0x00, 0x8E,
|
|
0x1F, 0xDF, 0x24, 0xFF, 0x02, 0x40, 0x0F, 0xFF, 0x00, 0x98, 0x04, 0x00, 0x00, 0x9A, 0x00, 0x10,
|
|
0x00, 0x99, 0x00, 0x00, 0x8E, 0x00, 0x02, 0xBF, 0x00, 0x94, 0x02, 0xBF, 0x86, 0x44, 0x02, 0xBF,
|
|
0x00, 0x88, 0x16, 0xFC, 0xDC, 0xD1, 0x16, 0xFD, 0x00, 0x03, 0x16, 0xFB, 0x00, 0x01, 0x8F, 0x00,
|
|
0x02, 0xBF, 0x00, 0x8E, 0x03, 0x80, 0xCD, 0xD1, 0x02, 0x94, 0x00, 0x48, 0x27, 0xFF, 0x03, 0x80,
|
|
0x00, 0x01, 0x02, 0x95, 0x00, 0x5A, 0x03, 0x80, 0x00, 0x02, 0x02, 0x95, 0x80, 0x00, 0x02, 0x9F,
|
|
0x00, 0x48, 0x00, 0x21, 0x8E, 0x00, 0x02, 0xBF, 0x00, 0x8E, 0x25, 0xFF, 0x02, 0xBF, 0x00, 0x8E,
|
|
0x25, 0xFF, 0x02, 0xBF, 0x00, 0x8E, 0x25, 0xFF, 0x02, 0xBF, 0x00, 0x8E, 0x00, 0xC5, 0xFF, 0xFF,
|
|
0x03, 0x40, 0x0F, 0xFF, 0x1C, 0x9F, 0x02, 0xBF, 0x00, 0x8E, 0x00, 0xC7, 0xFF, 0xFF, 0x02, 0xBF,
|
|
0x00, 0x8E, 0x00, 0xC6, 0xFF, 0xFF, 0x02, 0xBF, 0x00, 0x8E, 0x00, 0xC0, 0xFF, 0xFF, 0x02, 0xBF,
|
|
0x00, 0x8E, 0x20, 0xFF, 0x03, 0x40, 0x0F, 0xFF, 0x1F, 0x5F, 0x02, 0xBF, 0x00, 0x8E, 0x21, 0xFF,
|
|
0x02, 0xBF, 0x00, 0x8E, 0x23, 0xFF, 0x12, 0x05, 0x12, 0x06, 0x02, 0x9F, 0x80, 0xB5, 0x00, 0x21,
|
|
0x27, 0xFC, 0x03, 0xC0, 0x80, 0x00, 0x02, 0x9D, 0x00, 0x88, 0x02, 0xDF, 0x27, 0xFE, 0x03, 0xC0,
|
|
0x80, 0x00, 0x02, 0x9C, 0x00, 0x8E, 0x02, 0xDF, 0x2E, 0xCE, 0x2C, 0xCF, 0x00, 0xF8, 0xFF, 0xCD,
|
|
0x00, 0xF9, 0xFF, 0xC9, 0x00, 0xFA, 0xFF, 0xCB, 0x26, 0xC9, 0x02, 0xC0, 0x00, 0x04, 0x02, 0x9D,
|
|
0x00, 0x9C, 0x02, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
};
|
|
|
|
/* 80354298-80354DF0 34EBD8 0B58+00 0/0 1/1 0/0 .text __CARDUnlock */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm s32 __CARDUnlock(s32 chan, u8 flashID[12]) {
|
|
nofralloc
|
|
#include "asm/dolphin/card/CARDUnlock/__CARDUnlock.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 80354DF0-80354E60 34F730 0070+00 1/1 0/0 0/0 .text InitCallback */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
static asm void InitCallback(void* _task) {
|
|
nofralloc
|
|
#include "asm/dolphin/card/CARDUnlock/InitCallback.s"
|
|
}
|
|
#pragma pop
|
|
|
|
/* 80354E60-80355184 34F7A0 0324+00 1/1 0/0 0/0 .text DoneCallback */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
static asm void DoneCallback(void* _task) {
|
|
nofralloc
|
|
#include "asm/dolphin/card/CARDUnlock/DoneCallback.s"
|
|
}
|
|
#pragma pop
|