AXWii: more disasm; and send correct mail at end of AXList (DCD10002 instead of DCD10001), which makes the game send a CDD10003 as expected.

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4336 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
luigi2us 2009-09-27 15:18:20 +00:00
parent 0423406a67
commit cad887c51d
2 changed files with 22 additions and 13 deletions

View File

@ -70,6 +70,10 @@ void CUCode_AXWii::HandleMail(u32 _uMail)
{ {
// a new List // a new List
} }
else if ((_uMail & 0xFFFF0000) == 0xCDD10000)
{
//NOTICE_LOG(DSPHLE, "action mail %08X", _uMail);
}
else else
{ {
AXTask(_uMail); AXTask(_uMail);
@ -421,8 +425,7 @@ bool CUCode_AXWii::AXTask(u32& _uMail)
SaveLog("====================================================================="); SaveLog("=====================================================================");
SaveLog("End"); SaveLog("End");
// i hope resume is okay AX m_rMailHandler.PushMail(0xDCD10002);
m_rMailHandler.PushMail(0xDCD10001);
return true; return true;
} }

View File

@ -517,7 +517,8 @@ void 0x222_JumpTable1() {
} }
// Command 0x4 - set PBs address // Command 0x4 - set PBs address
// stores command data at 0x02D0 // Parameters: AR0 -> 0x0C01
// AXList data: command (2), PBs address (4)
void 027e_Cmd4_SetPBsAddress() { void 027e_Cmd4_SetPBsAddress() {
027e 8100 clr $ACC0 027e 8100 clr $ACC0
027f 8970 clr'l $ACC1 : $AC0.M, @$AR0 027f 8970 clr'l $ACC1 : $AC0.M, @$AR0
@ -527,7 +528,7 @@ void 027e_Cmd4_SetPBsAddress() {
0284 2ccf srs @DSMAL, $AC0.L 0284 2ccf srs @DSMAL, $AC0.L
0285 16cd 02d0 si @DSPA, #0x02d0 0285 16cd 02d0 si @DSPA, #0x02d0
0287 16c9 0000 si @DSCR, #0x0000 0287 16c9 0000 si @DSCR, #0x0000
0289 16cb 0140 si @DSBL, #0x0140 0289 16cb 0140 si @DSBL, #0x0140 // transfer 0x140 bytes from the PBs address to 0x02D0
028b 02bf 0084 call 0084_WaitForDMACompletion() 028b 02bf 0084 call 0084_WaitForDMACompletion()
028d 8100 clr $ACC0 028d 8100 clr $ACC0
028e 8900 clr $ACC1 028e 8900 clr $ACC1
@ -1274,10 +1275,10 @@ void 060b_JumpTable9() {
0670 029f 006f jmp 006f_MailHandler() 0670 029f 006f jmp 006f_MailHandler()
} }
// Restart code?? // Command 0xE - AXList end
0672 16fc dcd1 si @DMBH, #0xdcd1 0672 16fc dcd1 si @DMBH, #0xdcd1
0674 16fd 0002 si @DMBL, #0x0002 0674 16fd 0002 si @DMBL, #0x0002
0676 16fb 0001 si @DIRQ, #0x0001 0676 16fb 0001 si @DIRQ, #0x0001 // send a 0xDCD10002 and trigger an IRQ
0678 029f 0f9b jmp 0x0f9b 0678 029f 0f9b jmp 0x0f9b
067a 029f 004c jmp 0x004c 067a 029f 004c jmp 0x004c
@ -3046,21 +3047,26 @@ void 0f92_Int7_Handler() {
0f96 02ff rti 0f96 02ff rti
} }
0f97 0fa9 lris $AC1.M, #0xa9 // action jump table
0f98 0fac lris $AC1.M, #0xac 0f97 0fa9 lris $AC1.M, #0xa9 // Action 0 - restart
0f99 0fe4 lris $AC1.M, #0xe4 0f98 0fac lris $AC1.M, #0xac // Action 1 - wait for 10 mails and dump memory?
0f9a 0fe7 lris $AC1.M, #0xe7 0f99 0fe4 lris $AC1.M, #0xe4 // Action 2 - soft reset
0f9a 0fe7 lris $AC1.M, #0xe7 // Action 3 - jump back to main loop
// called at AXList end; wait for a last mail and take an action
// Note: the same thing can be found in Zelda ucode. It's called after DsyncFrame.
// Probably debugging stuff.
0f9b 8e00 set16 0f9b 8e00 set16
0f9c 8100 clr $ACC0 0f9c 8100 clr $ACC0
0f9d 8900 clr $ACC1 0f9d 8900 clr $ACC1
0f9e 02bf 0fea call 0x0fea 0f9e 02bf 0fea call 0x0fea // wait for the mail; the high part is likely 0xCDD1 as for Zelda
0fa0 27ff lrs $AC1.M, @CMBL 0fa0 27ff lrs $AC1.M, @CMBL // the low part of the mail tells the action to take
0fa1 009e 0f97 lri $AC0.M, #0x0f97 0fa1 009e 0f97 lri $AC0.M, #0x0f97
0fa3 4c00 add $ACC0, $ACC1 0fa3 4c00 add $ACC0, $ACC1
0fa4 1c7e mrr $AR3, $AC0.M 0fa4 1c7e mrr $AR3, $AC0.M
0fa5 0313 ilrr $AC1.M, @$AR3 0fa5 0313 ilrr $AC1.M, @$AR3
0fa6 1c7f mrr $AR3, $AC1.M 0fa6 1c7f mrr $AR3, $AC1.M
0fa7 176f jmpr $AR3 0fa7 176f jmpr $AR3 // take the action!
0fa8 0021 halt 0fa8 0021 halt
0fa9 029f 0037 jmp 0x0037 0fa9 029f 0037 jmp 0x0037
0fab 0021 halt 0fab 0021 halt