mirror of
https://github.com/zeldaret/oot.git
synced 2025-07-14 03:44:34 +00:00
Fix various non matching issues and introduce #ifdef NON_EQUIVALENT instead of #if 0 (#207)
This commit is contained in:
parent
031d946db7
commit
06fc61c83d
18 changed files with 297 additions and 1307 deletions
|
@ -8,78 +8,80 @@
|
|||
s32 D_8012D280 = 1;
|
||||
|
||||
OSMesgQueue* PadMgr_LockSerialMesgQueue(PadMgr* padmgr) {
|
||||
OSMesgQueue* ctrlrqueue = NULL;
|
||||
OSMesgQueue* ctrlrQ = NULL;
|
||||
|
||||
if (D_8012D280 > 2) {
|
||||
// EUC-JP: ロック待ち | Waiting for lock
|
||||
// "serialMsgQ Waiting for lock"
|
||||
osSyncPrintf("%2d %d serialMsgQロック待ち %08x %08x %08x\n", osGetThreadId(NULL),
|
||||
padmgr->queue1.validCount, padmgr, &padmgr->queue1, &ctrlrqueue);
|
||||
padmgr->serialMsgQ.validCount, padmgr, &padmgr->serialMsgQ, &ctrlrQ);
|
||||
}
|
||||
|
||||
osRecvMesg(&padmgr->queue1, &ctrlrqueue, OS_MESG_BLOCK);
|
||||
osRecvMesg(&padmgr->serialMsgQ, &ctrlrQ, OS_MESG_BLOCK);
|
||||
|
||||
if (D_8012D280 > 2) {
|
||||
// EUC-JP: をロックしました | Locked
|
||||
// "serialMsgQ Locked"
|
||||
osSyncPrintf("%2d %d serialMsgQをロックしました %08x\n", osGetThreadId(NULL),
|
||||
padmgr->queue1.validCount, ctrlrqueue);
|
||||
padmgr->serialMsgQ.validCount, ctrlrQ);
|
||||
}
|
||||
|
||||
return ctrlrqueue;
|
||||
return ctrlrQ;
|
||||
}
|
||||
|
||||
void PadMgr_UnlockSerialMesgQueue(PadMgr* padmgr, OSMesgQueue* ctrlrqueue) {
|
||||
void PadMgr_UnlockSerialMesgQueue(PadMgr* padmgr, OSMesgQueue* ctrlrQ) {
|
||||
if (D_8012D280 > 2) {
|
||||
// EUC-JP: ロック解除します | Unlock
|
||||
// "serialMsgQ Unlock"
|
||||
osSyncPrintf("%2d %d serialMsgQロック解除します %08x %08x %08x\n", osGetThreadId(NULL),
|
||||
padmgr->queue1.validCount, padmgr, &padmgr->queue1, ctrlrqueue);
|
||||
padmgr->serialMsgQ.validCount, padmgr, &padmgr->serialMsgQ, ctrlrQ);
|
||||
}
|
||||
|
||||
osSendMesg(&padmgr->queue1, ctrlrqueue, OS_MESG_BLOCK);
|
||||
osSendMesg(&padmgr->serialMsgQ, ctrlrQ, OS_MESG_BLOCK);
|
||||
|
||||
if (D_8012D280 > 2) {
|
||||
// EUC-JP: ロック解除しました | Unlocked
|
||||
// "serialMsgQ Unlocked"
|
||||
osSyncPrintf("%2d %d serialMsgQロック解除しました %08x %08x %08x\n", osGetThreadId(NULL),
|
||||
padmgr->queue1.validCount, padmgr, &padmgr->queue1, ctrlrqueue);
|
||||
padmgr->serialMsgQ.validCount, padmgr, &padmgr->serialMsgQ, ctrlrQ);
|
||||
}
|
||||
}
|
||||
|
||||
void PadMgr_LockPadData(PadMgr* padmgr) {
|
||||
osRecvMesg(&padmgr->queue2, NULL, OS_MESG_BLOCK);
|
||||
osRecvMesg(&padmgr->lockMsgQ, NULL, OS_MESG_BLOCK);
|
||||
}
|
||||
|
||||
void PadMgr_UnlockPadData(PadMgr* padmgr) {
|
||||
osSendMesg(&padmgr->queue2, NULL, OS_MESG_BLOCK);
|
||||
osSendMesg(&padmgr->lockMsgQ, NULL, OS_MESG_BLOCK);
|
||||
}
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
// regalloc and minor ordering differences
|
||||
void PadMgr_RumbleControl(PadMgr* padmgr) {
|
||||
static u32 errcnt = 0;
|
||||
static u32 D_8016A4F0;
|
||||
static u32 frame;
|
||||
s32 temp;
|
||||
s32 triedRumbleComm;
|
||||
OSMesgQueue* ctrlrqueue;
|
||||
s32 ctrlr;
|
||||
OSMesgQueue* ctrlrQ;
|
||||
s32 var4;
|
||||
s32 i;
|
||||
|
||||
temp = 1;
|
||||
ctrlrqueue = PadMgr_LockSerialMesgQueue(padmgr);
|
||||
ctrlrQ = PadMgr_LockSerialMesgQueue(padmgr);
|
||||
triedRumbleComm = 0;
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (padmgr->ctrlrIsConnected[i] != 0) {
|
||||
if (padmgr->pad_status[i].status & 1) {
|
||||
if (padmgr->ctrlrIsConnected[i]) {
|
||||
if (padmgr->padStatus[i].status & 1) {
|
||||
if (padmgr->pakType[i] == temp) {
|
||||
if (padmgr->rumbleEnable[i] != 0) {
|
||||
if (padmgr->rumbleCounter[i] < 3) {
|
||||
osSyncPrintf(VT_FGCOL(YELLOW));
|
||||
// clang-format off
|
||||
if (1) {} osSyncPrintf(VT_FGCOL(YELLOW));
|
||||
// clang-format on
|
||||
|
||||
// "Vibration pack jumble jumble"?
|
||||
osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パック ぶるぶるぶるぶる");
|
||||
osSyncPrintf(VT_RST);
|
||||
|
||||
if (osSetRumble(&padmgr->unk_controller[i], temp) != 0) {
|
||||
padmgr->pakType[i] = 0;
|
||||
osSyncPrintf(VT_FGCOL(YELLOW));
|
||||
// "A communication error has occurred with the vibraton pack"
|
||||
osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パックで通信エラーが発生しました");
|
||||
osSyncPrintf(VT_RST);
|
||||
} else {
|
||||
|
@ -90,13 +92,18 @@ void PadMgr_RumbleControl(PadMgr* padmgr) {
|
|||
}
|
||||
} else {
|
||||
if (padmgr->rumbleCounter[i] != 0) {
|
||||
osSyncPrintf(VT_FGCOL(YELLOW));
|
||||
// clang-format off
|
||||
if (1) {} osSyncPrintf(VT_FGCOL(YELLOW));
|
||||
// clang-format on
|
||||
|
||||
// "Stop vibration pack"
|
||||
osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パック 停止");
|
||||
osSyncPrintf(VT_RST);
|
||||
|
||||
if (osSetRumble(&padmgr->unk_controller[i], 0) != 0) {
|
||||
padmgr->pakType[i] = 0;
|
||||
osSyncPrintf(VT_FGCOL(YELLOW));
|
||||
// "A communication error has occurred with the vibration pack"
|
||||
osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パックで通信エラーが発生しました");
|
||||
osSyncPrintf(VT_RST);
|
||||
} else {
|
||||
|
@ -111,11 +118,13 @@ void PadMgr_RumbleControl(PadMgr* padmgr) {
|
|||
if (padmgr->pakType[i] != 0) {
|
||||
if (padmgr->pakType[i] == 1) {
|
||||
osSyncPrintf(VT_FGCOL(YELLOW));
|
||||
// "It seems that a vibration pack was pulled out"
|
||||
osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パックが抜かれたようです");
|
||||
osSyncPrintf(VT_RST);
|
||||
padmgr->pakType[i] = 0;
|
||||
} else {
|
||||
osSyncPrintf(VT_FGCOL(YELLOW));
|
||||
// "It seems that a controller pack that is not a vibration pack was pulled out"
|
||||
osSyncPrintf("padmgr: %dコン: %s\n", i + 1,
|
||||
"振動パックではないコントローラパックが抜かれたようです");
|
||||
osSyncPrintf(VT_RST);
|
||||
|
@ -127,52 +136,46 @@ void PadMgr_RumbleControl(PadMgr* padmgr) {
|
|||
}
|
||||
|
||||
if (!triedRumbleComm) {
|
||||
ctrlr = D_8016A4F0 % 4;
|
||||
i = frame % 4;
|
||||
|
||||
if ((padmgr->ctrlrIsConnected[ctrlr] != 0) && (padmgr->pad_status[ctrlr].status & 1) &&
|
||||
(padmgr->pakType[ctrlr] != 1)) {
|
||||
var4 = osProbeRumblePak(ctrlrqueue, &padmgr->unk_controller[ctrlr], ctrlr);
|
||||
if (padmgr->ctrlrIsConnected[i] && (padmgr->padStatus[i].status & 1) && (padmgr->pakType[i] != 1)) {
|
||||
var4 = osProbeRumblePak(ctrlrQ, &padmgr->unk_controller[i], i);
|
||||
|
||||
if (var4 == 0) {
|
||||
padmgr->pakType[ctrlr] = 1;
|
||||
osSetRumble(&padmgr->unk_controller[ctrlr], 1);
|
||||
osSetRumble(&padmgr->unk_controller[ctrlr], 0);
|
||||
padmgr->pakType[i] = 1;
|
||||
osSetRumble(&padmgr->unk_controller[i], 1);
|
||||
osSetRumble(&padmgr->unk_controller[i], 0);
|
||||
osSyncPrintf(VT_FGCOL(YELLOW));
|
||||
osSyncPrintf("padmgr: %dコン: %s\n", ctrlr + 1, "振動パックを認識しました");
|
||||
// "Recognized vibration pack"
|
||||
osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パックを認識しました");
|
||||
osSyncPrintf(VT_RST);
|
||||
} else if (var4 == 11) {
|
||||
padmgr->pakType[ctrlr] = 2;
|
||||
padmgr->pakType[i] = 2;
|
||||
} else if (var4 == 4) {
|
||||
LOG_NUM("++errcnt", ++errcnt, "../padmgr.c", 282);
|
||||
osSyncPrintf(VT_FGCOL(YELLOW));
|
||||
osSyncPrintf("padmgr: %dコン: %s\n", ctrlr + 1, "コントローラパックの通信エラー");
|
||||
// "Controller pack communication error"
|
||||
osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "コントローラパックの通信エラー");
|
||||
osSyncPrintf(VT_RST);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
D_8016A4F0++;
|
||||
PadMgr_UnlockSerialMesgQueue(padmgr, ctrlrqueue);
|
||||
frame++;
|
||||
PadMgr_UnlockSerialMesgQueue(padmgr, ctrlrQ);
|
||||
}
|
||||
#else
|
||||
u32 D_8012D284 = 0; // errcnt
|
||||
u32 D_8016A4F0;
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/PadMgr_RumbleControl.s")
|
||||
#endif
|
||||
|
||||
// func_800A2300 in 1.0
|
||||
void PadMgr_RumbleStop(PadMgr* padmgr) {
|
||||
s32 i;
|
||||
OSMesgQueue* ctrlrqueue;
|
||||
OSMesgQueue* ctrlrQ;
|
||||
|
||||
ctrlrqueue = PadMgr_LockSerialMesgQueue(padmgr);
|
||||
ctrlrQ = PadMgr_LockSerialMesgQueue(padmgr);
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (osProbeRumblePak(ctrlrqueue, &padmgr->unk_controller[i], i) == 0) {
|
||||
if (osProbeRumblePak(ctrlrQ, &padmgr->unk_controller[i], i) == 0) {
|
||||
if ((gFaultStruct.msgId == 0) && (padmgr->rumbleOnFrames != 0)) {
|
||||
osSyncPrintf(VT_FGCOL(YELLOW));
|
||||
// EUC-JP: コン | 'Con'? , EUC-JP: 振動パック 停止 | Stop vibration pack
|
||||
osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パック 停止");
|
||||
osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "振動パック 停止"); // "Stop vibration pack"
|
||||
osSyncPrintf(VT_RST);
|
||||
}
|
||||
|
||||
|
@ -180,7 +183,7 @@ void PadMgr_RumbleStop(PadMgr* padmgr) {
|
|||
}
|
||||
}
|
||||
|
||||
PadMgr_UnlockSerialMesgQueue(padmgr, ctrlrqueue);
|
||||
PadMgr_UnlockSerialMesgQueue(padmgr, ctrlrQ);
|
||||
}
|
||||
|
||||
void PadMgr_RumbleReset(PadMgr* padmgr) {
|
||||
|
@ -189,102 +192,85 @@ void PadMgr_RumbleReset(PadMgr* padmgr) {
|
|||
|
||||
void PadMgr_RumbleSetSingle(PadMgr* padmgr, u32 ctrlr, u32 rumble) {
|
||||
padmgr->rumbleEnable[ctrlr] = rumble;
|
||||
padmgr->rumbleOnFrames = 0xF0;
|
||||
padmgr->rumbleOnFrames = 240;
|
||||
}
|
||||
|
||||
// 800A23CC in 1.0
|
||||
void PadMgr_RumbleSet(PadMgr* padmgr, u8* ctrlrRumbles) {
|
||||
s32 i;
|
||||
for (i = 0; i < 4; ++i) {
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
padmgr->rumbleEnable[i] = ctrlrRumbles[i];
|
||||
}
|
||||
padmgr->rumbleOnFrames = 0xF0;
|
||||
|
||||
padmgr->rumbleOnFrames = 240;
|
||||
}
|
||||
|
||||
#if 0
|
||||
void PadMgr_ProcessInputs(PadMgr* padmgr) {
|
||||
/*
|
||||
void *sp34;
|
||||
s32 temp_s1;
|
||||
s32 temp_v0_5;
|
||||
u16 temp_a1;
|
||||
u16 temp_v1_2;
|
||||
u8 temp_v0;
|
||||
void *temp_v0_2;
|
||||
void *temp_v0_3;
|
||||
void *temp_v0_4;
|
||||
void *temp_v1;
|
||||
void *phi_s0;
|
||||
void *phi_s3;
|
||||
s32 phi_s2;
|
||||
s32 phi_s1;
|
||||
*/
|
||||
Input* input;
|
||||
PadState* padnow1; //name from debug string
|
||||
s32 i;
|
||||
Input* input;
|
||||
PadState* padnow1; // original name
|
||||
s32 buttonDiff;
|
||||
|
||||
PadMgr_LockPadData(padmgr);
|
||||
input = padmgr->inputs; //s0
|
||||
padnow1 = padmgr->pads; //s3
|
||||
for(i=0; i<padmgr->ncontrollers; ++i, ++input, ++padnow1){
|
||||
input->prev.in = input->cur.in;
|
||||
input->prev.status = input->cur.status;
|
||||
temp_v0 = phi_s3->unk4;
|
||||
switch(padnow1->errno){
|
||||
case 0:
|
||||
input->cur.in = padnow1->input;
|
||||
input->cur.status = padnow1->status;
|
||||
if (padmgr->ctrlrIsConnected[i] == 0) {
|
||||
padmgr->ctrlrIsConnected[i] = 1;
|
||||
osSyncPrintf(&D_80145AF0); //"\x1b[33m"
|
||||
osSyncPrintf(&D_80145AF8, phi_s2 + 1, &D_80145B0C); //"padmgr: %dCon: %s\n" : "Recognized"
|
||||
osSyncPrintf(&D_80145B1C); //"\x1b[m"
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
input->cur.in = input->prev.in;
|
||||
input->cur.status = input->prev.status;
|
||||
LogUtils_LogThreadId(&D_80145B20, 0x17c); //"../padmgr.c"
|
||||
osSyncPrintf(&D_80145B2C, padmgr->ctrlrIsConnected[i]); //"this->ctrlrIsConnected[i] = %d\n"
|
||||
osSyncPrintf(&D_80145B48); //"\x1b[33m"
|
||||
osSyncPrintf(&D_80145B50, temp_s1, &D_80145B64); //"padmgr: %dCon: %s\n" : "Overrun error occurred"
|
||||
osSyncPrintf(&D_80145B80); //"\x1b[m"
|
||||
break;
|
||||
case 8:
|
||||
input->cur.in.button = 0;
|
||||
input->cur.in.x = 0;
|
||||
input->cur.in.y = 0;
|
||||
temp_v0_2 = arg0 + phi_s2;
|
||||
input->cur.errno = padnow1->errno;
|
||||
if (temp_v0_2->ctrlrIsConnected != 0){
|
||||
temp_v0_2->ctrlrIsConnected = 0;
|
||||
temp_v0_2->pakType = 0;
|
||||
temp_v0_2->rumbleCounter = 0xff;
|
||||
osSyncPrintf(&D_80145B84); //"\x1b[33m"
|
||||
osSyncPrintf(&D_80145B8C, phi_s2 + 1, &D_80145BA0); //"padmgr: %dCon: %s\n" : "Do not respond"
|
||||
osSyncPrintf(&D_80145BB0); //"\x1b[m"
|
||||
}
|
||||
break;
|
||||
default:
|
||||
LogUtils_LogThreadId(&D_80145BB4, 0x18c); //"../padmgr.c"
|
||||
osSyncPrintf(&D_80145BC0, padnow1->errno); //"padnow1->errno = %x\n"
|
||||
Fault_AddHungupAndCrash(&D_80145BD8, 0x18d); //"../padmgr.c"
|
||||
|
||||
input = &padmgr->inputs[0];
|
||||
padnow1 = &padmgr->pads[0];
|
||||
|
||||
for (i = 0; i < padmgr->ncontrollers; i++, input++, padnow1++) {
|
||||
input->prev = input->cur;
|
||||
|
||||
if (1) {} // Necessary to match
|
||||
|
||||
switch (padnow1->errno) {
|
||||
case 0:
|
||||
input->cur = *padnow1;
|
||||
if (!padmgr->ctrlrIsConnected[i]) {
|
||||
padmgr->ctrlrIsConnected[i] = true;
|
||||
osSyncPrintf(VT_FGCOL(YELLOW));
|
||||
osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "認識しました"); // "Recognized"
|
||||
osSyncPrintf(VT_RST);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
input->cur = input->prev;
|
||||
LOG_NUM("this->Key_switch[i]", padmgr->ctrlrIsConnected[i], "../padmgr.c", 380);
|
||||
osSyncPrintf(VT_FGCOL(YELLOW));
|
||||
osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "オーバーランエラーが発生"); // "Overrun error occurred"
|
||||
osSyncPrintf(VT_RST);
|
||||
break;
|
||||
case 8:
|
||||
input->cur.in.button = 0;
|
||||
input->cur.in.x = 0;
|
||||
input->cur.in.y = 0;
|
||||
input->cur.errno = padnow1->errno;
|
||||
if (padmgr->ctrlrIsConnected[i]) {
|
||||
padmgr->ctrlrIsConnected[i] = false;
|
||||
padmgr->pakType[i] = 0;
|
||||
padmgr->rumbleCounter[i] = 0xFF;
|
||||
osSyncPrintf(VT_FGCOL(YELLOW));
|
||||
osSyncPrintf("padmgr: %dコン: %s\n", i + 1, "応答しません"); // "Do not respond"?
|
||||
osSyncPrintf(VT_RST);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
LOG_HEX("padnow1->errno", padnow1->errno, "../padmgr.c", 396);
|
||||
Fault_AddHungupAndCrash("../padmgr.c", 397);
|
||||
}
|
||||
input->press.in.button = input->cur.in.button & (input->prev.in.button ^ input->cur.in.button);
|
||||
input->rel.in.button = input->prev.in.button & (input->prev.in.button ^ input->cur.in.button);
|
||||
|
||||
buttonDiff = input->prev.in.button ^ input->cur.in.button;
|
||||
input->press.in.button |= (u16)(buttonDiff & input->cur.in.button);
|
||||
input->rel.in.button |= (u16)(buttonDiff & input->prev.in.button);
|
||||
PadUtils_UpdateRelXY(input);
|
||||
input->press.in.x = (input->cur.in.x - input->prev.in.x) + input->press.in.x;
|
||||
input->press.in.y = (input->cur.in.y - input->prev.in.y) + input->press.in.y;
|
||||
input->press.in.x += (s8)(input->cur.in.x - input->prev.in.x);
|
||||
input->press.in.y += (s8)(input->cur.in.y - input->prev.in.y);
|
||||
}
|
||||
PadMgr_UnlockPadData(arg0);
|
||||
|
||||
PadMgr_UnlockPadData(padmgr);
|
||||
}
|
||||
#else
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/PadMgr_ProcessInputs.s")
|
||||
#endif
|
||||
|
||||
void PadMgr_HandleRetraceMsg(PadMgr* padmgr) {
|
||||
OSMesgQueue* queue; // s1
|
||||
u32 i;
|
||||
s32 i;
|
||||
OSMesgQueue* queue;
|
||||
u32 mask;
|
||||
|
||||
queue = PadMgr_LockSerialMesgQueue(padmgr);
|
||||
|
@ -293,25 +279,24 @@ void PadMgr_HandleRetraceMsg(PadMgr* padmgr) {
|
|||
padmgr->retraceCallback(padmgr, padmgr->retraceCallbackValue);
|
||||
}
|
||||
osRecvMesg(queue, NULL, OS_MESG_BLOCK);
|
||||
osContGetReadData(&padmgr->pads[0]);
|
||||
osContGetReadData(padmgr->pads);
|
||||
if (padmgr->preNMIShutdown) {
|
||||
bzero(&padmgr->pads[0], 0x18);
|
||||
bzero(padmgr->pads, sizeof(padmgr->pads));
|
||||
}
|
||||
PadMgr_ProcessInputs(padmgr);
|
||||
osContStartQuery(queue);
|
||||
osRecvMesg(queue, NULL, OS_MESG_BLOCK);
|
||||
osContGetQuery(padmgr);
|
||||
osContGetQuery(padmgr->padStatus);
|
||||
PadMgr_UnlockSerialMesgQueue(padmgr, queue);
|
||||
|
||||
mask = 0;
|
||||
for (i = 0; i - 4 != 0; ++i) {
|
||||
if (padmgr->pad_status[i].errno == 0) {
|
||||
if (padmgr->pad_status[i].type - 5 == 0) {
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (padmgr->padStatus[i].errno == 0) {
|
||||
if (padmgr->padStatus[i].type == 5) {
|
||||
mask |= 1 << i;
|
||||
} else {
|
||||
LogUtils_LogThreadId("../padmgr.c", 0x1ca);
|
||||
osSyncPrintf("this->pad_status[i].type = %x\n", padmgr->pad_status[i].type);
|
||||
// EUC-JP: 知らない種類のコントローラが接続されています | An unknown type of controller is connected
|
||||
LOG_HEX("this->pad_status[i].type", padmgr->padStatus[i].type, "../padmgr.c", 458);
|
||||
// "An unknown type of controller is connected"
|
||||
osSyncPrintf("知らない種類のコントローラが接続されています\n");
|
||||
}
|
||||
}
|
||||
|
@ -333,63 +318,59 @@ void PadMgr_HandleRetraceMsg(PadMgr* padmgr) {
|
|||
|
||||
void PadMgr_HandlePreNMI(PadMgr* padmgr) {
|
||||
osSyncPrintf("padmgr_HandlePreNMI()\n");
|
||||
padmgr->preNMIShutdown = 1;
|
||||
padmgr->preNMIShutdown = true;
|
||||
PadMgr_RumbleReset(padmgr);
|
||||
}
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
// Regalloc differences
|
||||
void PadMgr_RequestPadData(PadMgr* padmgr, Input* inputs, s32 mode) {
|
||||
u32 i;
|
||||
Input* pmInputs;
|
||||
Input* newin;
|
||||
s32 i;
|
||||
Input* ogInput;
|
||||
Input* newInput;
|
||||
s32 buttonDiff;
|
||||
|
||||
PadMgr_LockPadData(padmgr);
|
||||
pmInputs = padmgr->inputs;
|
||||
newin = inputs;
|
||||
for (i = 0; i < 4; ++i) {
|
||||
if (mode) {
|
||||
*newin = *pmInputs;
|
||||
pmInputs->press.in.button = 0;
|
||||
pmInputs->press.in.x = 0;
|
||||
pmInputs->press.in.y = 0;
|
||||
pmInputs->rel.in.button = 0;
|
||||
|
||||
ogInput = &padmgr->inputs[0];
|
||||
newInput = &inputs[0];
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (mode != 0) {
|
||||
*newInput = *ogInput;
|
||||
ogInput->press.in.button = 0;
|
||||
ogInput->press.in.x = 0;
|
||||
ogInput->press.in.y = 0;
|
||||
ogInput->rel.in.button = 0;
|
||||
} else {
|
||||
// Correct instructions, wrong regalloc
|
||||
newin->prev = newin->cur;
|
||||
newin->cur = pmInputs->cur;
|
||||
newin->press.in.button = newin->cur.in.button & (newin->prev.in.button ^ newin->cur.in.button);
|
||||
newin->rel.in.button = newin->prev.in.button & (newin->prev.in.button ^ newin->cur.in.button);
|
||||
PadUtils_UpdateRelXY(newin);
|
||||
newin->press.in.x = (newin->cur.in.x - newin->prev.in.x) + newin->press.in.x;
|
||||
newin->press.in.y = (newin->cur.in.y - newin->prev.in.y) + newin->press.in.y;
|
||||
newInput->prev = newInput->cur;
|
||||
newInput->cur = ogInput->cur;
|
||||
buttonDiff = newInput->prev.in.button ^ newInput->cur.in.button;
|
||||
newInput->press.in.button = newInput->cur.in.button & buttonDiff;
|
||||
newInput->rel.in.button = newInput->prev.in.button & buttonDiff;
|
||||
PadUtils_UpdateRelXY(newInput);
|
||||
newInput->press.in.x += (s8)(newInput->cur.in.x - newInput->prev.in.x);
|
||||
newInput->press.in.y += (s8)(newInput->cur.in.y - newInput->prev.in.y);
|
||||
}
|
||||
++pmInputs;
|
||||
++newin;
|
||||
ogInput++;
|
||||
newInput++;
|
||||
}
|
||||
|
||||
PadMgr_UnlockPadData(padmgr);
|
||||
}
|
||||
#else
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/padmgr/PadMgr_RequestPadData.s")
|
||||
#endif
|
||||
|
||||
// 800A2918 in 1.0
|
||||
void PadMgr_MainProc(PadMgr* padmgr) {
|
||||
s16* mesg;
|
||||
void PadMgr_ThreadEntry(PadMgr* padmgr) {
|
||||
s16* mesg = NULL;
|
||||
s32 exit;
|
||||
|
||||
mesg = NULL;
|
||||
// EUC-JP: コントローラスレッド実行開始 | Start of controller thread execution
|
||||
// "Controller thread execution start"
|
||||
osSyncPrintf("コントローラスレッド実行開始\n");
|
||||
exit = 0;
|
||||
|
||||
exit = false;
|
||||
while (!exit) {
|
||||
if ((D_8012D280 > 2) && (padmgr->queue3.validCount == 0)) {
|
||||
// EUC-JP: コントローラスレッドイベント待ち | Waiting for controller thread event
|
||||
if ((D_8012D280 > 2) && (padmgr->interruptMsgQ.validCount == 0)) {
|
||||
// "Waiting for controller thread event"
|
||||
osSyncPrintf("コントローラスレッドイベント待ち %lld\n", OS_CYCLES_TO_USEC(osGetTime()));
|
||||
}
|
||||
|
||||
osRecvMesg(&padmgr->queue3, &mesg, OS_MESG_BLOCK);
|
||||
osRecvMesg(&padmgr->interruptMsgQ, &mesg, OS_MESG_BLOCK);
|
||||
LogUtils_CheckNullPointer("msg", mesg, "../padmgr.c", 563);
|
||||
|
||||
switch (*mesg) {
|
||||
|
@ -409,34 +390,35 @@ void PadMgr_MainProc(PadMgr* padmgr) {
|
|||
PadMgr_HandlePreNMI(padmgr);
|
||||
break;
|
||||
case OS_SC_NMI_MSG:
|
||||
exit = 1;
|
||||
exit = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
IrqMgr_RemoveClient(padmgr->unk_78, &padmgr->unk_70);
|
||||
// EUC-JP: コントローラスレッド実行終了 | Controller thread execution end
|
||||
IrqMgr_RemoveClient(padmgr->irqMgr, &padmgr->irqClient);
|
||||
|
||||
// "Controller thread execution end"
|
||||
osSyncPrintf("コントローラスレッド実行終了\n");
|
||||
}
|
||||
|
||||
// func_800A2A14 in 1.0
|
||||
void PadMgr_Init(PadMgr* padmgr, OSMesgQueue* siIntMsgQ, UNK_TYPE arg2, OSId id, OSPri priority, void* stack) {
|
||||
// EUC-JP: パッドマネージャ作成 | Create pad manager
|
||||
void PadMgr_Init(PadMgr* padmgr, OSMesgQueue* siIntMsgQ, IrqMgr* irqMgr, OSId id, OSPri priority, void* stack) {
|
||||
// "Pad Manager creation"
|
||||
osSyncPrintf("パッドマネージャ作成 padmgr_Create()\n");
|
||||
bzero(padmgr, sizeof(PadMgr));
|
||||
padmgr->unk_78 = arg2;
|
||||
|
||||
osCreateMesgQueue(&padmgr->queue3, padmgr->msgbuf3, 4);
|
||||
IrqMgr_AddClient(padmgr->unk_78, &padmgr->unk_70, &padmgr->queue3);
|
||||
osCreateMesgQueue(&padmgr->queue1, padmgr->msgbuf1, 1);
|
||||
bzero(padmgr, sizeof(PadMgr));
|
||||
padmgr->irqMgr = irqMgr;
|
||||
|
||||
osCreateMesgQueue(&padmgr->interruptMsgQ, padmgr->interruptMsgBuf, 4);
|
||||
IrqMgr_AddClient(padmgr->irqMgr, &padmgr->irqClient, &padmgr->interruptMsgQ);
|
||||
osCreateMesgQueue(&padmgr->serialMsgQ, padmgr->serialMsgBuf, 1);
|
||||
PadMgr_UnlockSerialMesgQueue(padmgr, siIntMsgQ);
|
||||
osCreateMesgQueue(&padmgr->queue2, padmgr->msgbuf2, 1);
|
||||
osCreateMesgQueue(&padmgr->lockMsgQ, padmgr->lockMsgBuf, 1);
|
||||
PadMgr_UnlockPadData(padmgr);
|
||||
func_800FCD40(siIntMsgQ, &padmgr->validCtrlrsMask, padmgr);
|
||||
|
||||
padmgr->ncontrollers = 4;
|
||||
func_80104D00(padmgr->ncontrollers);
|
||||
|
||||
osCreateThread(&padmgr->thread, id, PadMgr_MainProc, padmgr, stack, priority);
|
||||
osCreateThread(&padmgr->thread, id, PadMgr_ThreadEntry, padmgr, stack, priority);
|
||||
osStartThread(&padmgr->thread);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue