mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-14 21:37:52 -07:00
Various changes: Fixed linux build, added some zelda ucode RE, added HLE mail logging features
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3704 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
13290204b4
commit
92e63e3ac4
4
Externals/WiiUseSrc/Src/SConscript
vendored
4
Externals/WiiUseSrc/Src/SConscript
vendored
@ -20,10 +20,10 @@ files = [
|
||||
]
|
||||
|
||||
if env['HAVE_BLUEZ']:
|
||||
files += [ "io_nix.c", ]
|
||||
files += [ "io_nix.cpp", ]
|
||||
|
||||
if sys.platform == 'darwin':
|
||||
files += [ "io_osx.c", ]
|
||||
files += [ "io_osx.cpp", ]
|
||||
|
||||
if sys.platform == 'darwin':
|
||||
env_wiiuse = env.Clone(
|
||||
|
@ -46,7 +46,7 @@ void AOSound::SoundLoop()
|
||||
while (!threadData)
|
||||
{
|
||||
soundCriticalSection.Enter();
|
||||
m_mixer->Mix(realtimeBuffer, numBytesToRender >> 2);
|
||||
m_mixer->Mix(realtimeBuffer, numBytesToRender >> 2);
|
||||
ao_play(device, (char*)realtimeBuffer, numBytesToRender);
|
||||
soundCriticalSection.Leave();
|
||||
|
||||
@ -65,7 +65,7 @@ void *soundThread(void *args)
|
||||
|
||||
bool AOSound::Start()
|
||||
{
|
||||
memset(realtimeBuffer, 0, sizeof(realtimeBuffer));
|
||||
memset(realtimeBuffer, 0, sizeof(realtimeBuffer));
|
||||
|
||||
soundSyncEvent.Init();
|
||||
|
||||
|
@ -38,6 +38,7 @@ enum LOG_TYPE {
|
||||
DISCIO,
|
||||
DSPHLE,
|
||||
DSPLLE,
|
||||
DSP_MAIL,
|
||||
DSPINTERFACE,
|
||||
DVDINTERFACE,
|
||||
DYNA_REC,
|
||||
|
@ -45,6 +45,7 @@ LogManager::LogManager()\
|
||||
m_Log[LogTypes::HLE] = new LogContainer("HLE", "HLE");
|
||||
m_Log[LogTypes::DSPHLE] = new LogContainer("DSPHLE", "DSP HLE");
|
||||
m_Log[LogTypes::DSPLLE] = new LogContainer("DSPLLE", "DSP LLE");
|
||||
m_Log[LogTypes::DSP_MAIL] = new LogContainer("DSPMails", "DSP Mails");
|
||||
m_Log[LogTypes::VIDEO] = new LogContainer("Video", "Video Plugin");
|
||||
m_Log[LogTypes::AUDIO] = new LogContainer("Audio", "Audio Plugin");
|
||||
m_Log[LogTypes::DYNA_REC] = new LogContainer("JIT", "Dynamic Recompiler");
|
||||
|
@ -23,7 +23,7 @@
|
||||
#include "../PowerPC/PowerPC.h"
|
||||
#include "../PowerPC/PPCAnalyst.h"
|
||||
#include "../PowerPC/PPCSymbolDB.h"
|
||||
#include "Bochs_disasm/PowerPCDisasm.h"
|
||||
#include "PowerPCDisasm.h"
|
||||
|
||||
namespace Dolphin_Debugger
|
||||
{
|
||||
|
@ -90,9 +90,9 @@ void gdsp_mbox_write_l(u8 mbx, u16 val)
|
||||
#ifdef DEBUG_EXP
|
||||
if (mbx == GDSP_MBOX_DSP)
|
||||
{
|
||||
NOTICE_LOG(DSPLLE, "DSP(WM) B:%i M:0x%08x (pc=0x%04x)", mbx, gdsp_mbox_peek(GDSP_MBOX_DSP), g_dsp.pc);
|
||||
NOTICE_LOG(DSP_MAIL, "DSP(WM) B:%i M:0x%08x (pc=0x%04x)", mbx, gdsp_mbox_peek(GDSP_MBOX_DSP), g_dsp.pc);
|
||||
} else {
|
||||
NOTICE_LOG(DSPLLE, "CPU(WM) B:%i M:0x%08x (pc=0x%04x)", mbx, gdsp_mbox_peek(GDSP_MBOX_CPU), g_dsp.pc);
|
||||
NOTICE_LOG(DSP_MAIL, "CPU(WM) B:%i M:0x%08x (pc=0x%04x)", mbx, gdsp_mbox_peek(GDSP_MBOX_CPU), g_dsp.pc);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@ -119,9 +119,9 @@ u16 gdsp_mbox_read_l(u8 mbx)
|
||||
#ifdef DEBUG_EXP
|
||||
if (mbx == GDSP_MBOX_DSP)
|
||||
{
|
||||
NOTICE_LOG(DSPLLE, "DSP(RM) B:%i M:0x%08x (pc=0x%04x)", mbx, gdsp_mbox_peek(GDSP_MBOX_DSP), g_dsp.pc);
|
||||
NOTICE_LOG(DSP_MAIL, "DSP(RM) B:%i M:0x%08x (pc=0x%04x)", mbx, gdsp_mbox_peek(GDSP_MBOX_DSP), g_dsp.pc);
|
||||
} else {
|
||||
NOTICE_LOG(DSPLLE, "CPU(RM) B:%i M:0x%08x (pc=0x%04x)", mbx, gdsp_mbox_peek(GDSP_MBOX_CPU), g_dsp.pc);
|
||||
NOTICE_LOG(DSP_MAIL, "CPU(RM) B:%i M:0x%08x (pc=0x%04x)", mbx, gdsp_mbox_peek(GDSP_MBOX_CPU), g_dsp.pc);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -20,7 +20,7 @@
|
||||
#include "Host.h"
|
||||
#include "Debugger.h"
|
||||
#include "StringUtil.h"
|
||||
#include "PowerPC.h"
|
||||
#include "PowerPC/PowerPC.h"
|
||||
|
||||
|
||||
BEGIN_EVENT_TABLE(BreakPointDlg,wxDialog)
|
||||
|
@ -15,10 +15,6 @@
|
||||
// Official SVN repository and contact information can be found at
|
||||
// http://code.google.com/p/dolphin-emu/
|
||||
|
||||
#ifdef _WIN32
|
||||
#include "DSoundStream.h"
|
||||
#endif
|
||||
|
||||
#include "DSPHandler.h"
|
||||
|
||||
CDSPHandler* CDSPHandler::m_pInstance = NULL;
|
||||
@ -72,8 +68,10 @@ unsigned short CDSPHandler::ReadControlRegister()
|
||||
|
||||
void CDSPHandler::SendMailToDSP(u32 _uMail)
|
||||
{
|
||||
if (m_pUCode != NULL)
|
||||
if (m_pUCode != NULL) {
|
||||
DEBUG_LOG(DSP_MAIL, "CPU writes 0x%08x", _uMail);
|
||||
m_pUCode->HandleMail(_uMail);
|
||||
}
|
||||
}
|
||||
|
||||
IUCode* CDSPHandler::GetUCode()
|
||||
|
@ -30,7 +30,7 @@ CMailHandler::~CMailHandler()
|
||||
void CMailHandler::PushMail(u32 _Mail)
|
||||
{
|
||||
m_Mails.push(_Mail);
|
||||
|
||||
DEBUG_LOG(DSP_MAIL, "DSP writes 0x%08x", _Mail);
|
||||
Update();
|
||||
}
|
||||
|
||||
@ -53,7 +53,7 @@ u16 CMailHandler::ReadDSPMailboxLow()
|
||||
if (!m_Mails.empty())
|
||||
{
|
||||
u16 result = m_Mails.front() & 0xFFFF;
|
||||
m_Mails.pop();
|
||||
m_Mails.pop();
|
||||
|
||||
Update();
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
// Copyright (C) 2003-2008 Dolphin Project.
|
||||
// Copyright (C) 2003-2009 Dolphin Project.
|
||||
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
@ -16,7 +16,8 @@
|
||||
// http://code.google.com/p/dolphin-emu/
|
||||
|
||||
// Games that uses this UCode:
|
||||
// Zelda: The Windwaker, Mario Sunshine, Mario Kart, Twilight Princess
|
||||
// Zelda: The Windwaker, Mario Sunshine, Mario Kart, Twilight Princess,
|
||||
// Super Mario Galaxy
|
||||
|
||||
#include "../Globals.h"
|
||||
#include "UCodes.h"
|
||||
@ -273,7 +274,7 @@ void CUCode_Zelda::ExecuteList()
|
||||
// SyncFrame ... zelda ww jumps to 0x0243
|
||||
case 0x02:
|
||||
{
|
||||
// soundStream->GetMixer()->SetHLEReady(true);
|
||||
//soundStream->GetMixer()->SetHLEReady(true);
|
||||
// DEBUG_LOG(DSPHLE, "Update the SoundThread to be in sync");
|
||||
//soundStream->Update(); //do it in this thread to avoid sync problems
|
||||
|
||||
|
@ -50,6 +50,9 @@ void CUCode_Zelda::AFCdecodebuffer(const s16 *coef, const char *input, signed sh
|
||||
else
|
||||
{
|
||||
// untested !!! i havnt seen such a sample yet :)
|
||||
|
||||
ERROR_LOG(DSPHLE, "Untested AFC sample");
|
||||
|
||||
for (int i = 0; i < 16; i += 4)
|
||||
{
|
||||
int j = (*src >> 0) & 0x02;
|
||||
|
@ -203,7 +203,8 @@ void Initialize(void *init)
|
||||
CDSPHandler::CreateInstance();
|
||||
|
||||
soundStream = AudioCommon::InitSoundStream(new HLEMixer());
|
||||
|
||||
if(!soundStream)
|
||||
PanicAlert("Error starting up sound stream");
|
||||
}
|
||||
|
||||
void DSP_StopSoundStream()
|
||||
|
@ -3450,7 +3450,7 @@ void 0a91_Unk() {
|
||||
AC1.M = 0x50;
|
||||
AR3 = 0x520;
|
||||
|
||||
0ab3_Decoder0x21Core(AC1.M=0x50, AR3=#0x0580);
|
||||
0ab3_Decoder0x21Core(AC1.M=0x50, AR3=#0x0520);
|
||||
|
||||
// 0aa0 029f 02d8 jmp 0x02d8
|
||||
GOTO ContinueWithBlock: // in SyncFrame
|
||||
@ -3492,11 +3492,12 @@ void 0ab3_Decoder0x21Core(AC1.M, AR3) {
|
||||
// 0ab8 1f1f mrr $AX0.L, $AC1.M
|
||||
// 0ab9 0a00 lris $AX0.H, #0x00
|
||||
// 0aba 5800 subax $ACC0, $AX0.L
|
||||
ACC0 = [0x043a,0x043b] - AC1.M;
|
||||
ACC0 = [0x043a,0x043b];
|
||||
ACC0 -= AC1.M;
|
||||
|
||||
|
||||
// 0abb 0292 0ad1 jg 0x0ad1
|
||||
if ([0x043a,0x043b] > *0x043a) {
|
||||
if ([0x043a,0x043b] > AC1.M) {
|
||||
// Happens when sound has finished playing?
|
||||
|
||||
// 0abd 8900 clr $ACC1
|
||||
@ -3505,7 +3506,7 @@ void 0ab3_Decoder0x21Core(AC1.M, AR3) {
|
||||
AR0 = 0x043b;
|
||||
|
||||
// 0ac0 02bf 0af6 call 0x0af6 // 0af6_Decoder0x21_MoreStuff()
|
||||
0af6_Decoder0x21_MoreStuff(AR0=0x043b);
|
||||
0af6_Decoder0x21_MoreStuff(AR0=0x043b, AR3);
|
||||
|
||||
// 0ac2 8100 clr $ACC0
|
||||
// 0ac3 1fd8 mrr $AC0.M, $AX0.L
|
||||
@ -3574,7 +3575,7 @@ void 0ab3_Decoder0x21Core(AC1.M, AR3) {
|
||||
if (ACC0 < 0) {
|
||||
// 0adc 00c0 0436 lr $AR0, @0x0436
|
||||
// 0ade 02bf 0af6 call 0x0af6
|
||||
0af6_Decoder0x21_MoreStuff(AR0=*0x0436);
|
||||
0af6_Decoder0x21_MoreStuff(AR0=*0x0436, AR3);
|
||||
|
||||
// 0ae0 8100 clr $ACC0
|
||||
// 0ae1 1fd8 mrr $AC0.M, $AX0.L
|
||||
@ -3605,7 +3606,7 @@ void 0ab3_Decoder0x21Core(AC1.M, AR3) {
|
||||
*0x048d = *0x0489;
|
||||
|
||||
// 0aeb 02bf 0af6 call 0x0af6
|
||||
0af6_Decoder0x21_MoreStuff(AR0=*0x0436);
|
||||
0af6_Decoder0x21_MoreStuff(AR0=*0x0436, AR3);
|
||||
|
||||
0aed 0092 00ff lri $CR, #0x00ff
|
||||
// 0aef 02df ret
|
||||
@ -3616,7 +3617,7 @@ void 0ab3_Decoder0x21Core(AC1.M, AR3) {
|
||||
// 0af1 02bf 0af6 call 0x0af6
|
||||
|
||||
AR0 = AX0.L;
|
||||
0af6_Decoder0x21_MoreStuff(AR0=AX0.L);
|
||||
0af6_Decoder0x21_MoreStuff(AR0=AX0.L, AR3);
|
||||
|
||||
|
||||
0af3 0092 00ff lri $CR, #0x00ff
|
||||
@ -3627,7 +3628,7 @@ void 0ab3_Decoder0x21Core(AC1.M, AR3) {
|
||||
// CR = 0x4
|
||||
// Does strange stuff with PB[0x34] and the address PB[0x8c,d]
|
||||
// Does not touch AX0.L
|
||||
void 0af6_Decoder0x21_MoreStuff($AR0) {
|
||||
void 0af6_Decoder0x21_MoreStuff($AR0, $AR3) {
|
||||
// 0af6 8100 clr $ACC0
|
||||
// 0af7 1fc0 mrr $AC0.M, $AR0
|
||||
// 0af8 b100 tst $ACC0
|
||||
@ -3635,9 +3636,6 @@ void 0af6_Decoder0x21_MoreStuff($AR0) {
|
||||
if (!AR0)
|
||||
return;
|
||||
|
||||
ACC0 = 0;
|
||||
AC0.M = AR0;
|
||||
|
||||
// 0afa 8900 clr $ACC1
|
||||
// 0afb 2734 lrs $AC1.M, @0x0034
|
||||
// 0afc 0340 0001 andi $AC1.M, #0x0001
|
||||
@ -3656,7 +3654,7 @@ void 0af6_Decoder0x21_MoreStuff($AR0) {
|
||||
// 0b06 5a00 subax $ACC0, $AX1.L
|
||||
// 0b07 5a00 subax $ACC0, $AX1.L
|
||||
|
||||
ACC0 = {8c,8d} + *0x0434 * 2 - (*0x0434 & 1) * 2
|
||||
ACC0 = [8c,8d] + *0x0434 * 2 - ((*0x0434 & 1) * 2);
|
||||
|
||||
// 0b08 1c20 mrr $AR1, $AR0
|
||||
|
||||
@ -3667,10 +3665,13 @@ void 0af6_Decoder0x21_MoreStuff($AR0) {
|
||||
ACC1 = ($AR0 << 16) + 0x20000;
|
||||
|
||||
//
|
||||
0b0b 1c1f mrr $AR0, $AC1.M
|
||||
0b0c 009f 0b00 lri $AC1.M, #0x0b00
|
||||
// 0b0b 1c1f mrr $AR0, $AC1.M
|
||||
// 0b0c 009f 0b00 lri $AC1.M, #0x0b00
|
||||
0b0e 0092 00ff lri $CR, #0x00ff
|
||||
|
||||
AR0 = AC1.M;
|
||||
AC1.M = 0x0b00;
|
||||
|
||||
// Load more audio from RAM by DMA??
|
||||
|
||||
// 0b10 02bf 0525 call 0x0525 // 0525_CopyRAMtoDMEM
|
||||
@ -3697,19 +3698,35 @@ void 0af6_Decoder0x21_MoreStuff($AR0) {
|
||||
// 0b20 1fe1 mrr $AC1.M, $AR1
|
||||
// 0b21 191e lrri $AC0.M, @$AR0
|
||||
// 0b22 0701 cmpis $ACC1, #0x01
|
||||
AC0.M = *$AR0;
|
||||
ACC1 = 0;
|
||||
AC1.M = AR1;
|
||||
AC0.M = *$AR0++;
|
||||
// 0b23 0293 0b2c jle 0x0b2c
|
||||
if (ACC1 > 1<<16) {
|
||||
0b25 191a lrri $AX0.H, @$AR0
|
||||
0b26 05fe addis $ACC1, #0xfe
|
||||
0b27 005f loop $AC1.M
|
||||
0b28 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M
|
||||
0b29 1b7e srri @$AR3, $AC0.M
|
||||
0b2a 1b7a srri @$AR3, $AX0.H
|
||||
0b2b 02df ret
|
||||
if (AC1.M > 1) {
|
||||
// 0b25 191a lrri $AX0.H, @$AR0
|
||||
// 0b26 05fe addis $ACC1, #0xfe
|
||||
AX0.H = *$AR0++;
|
||||
ACC1 += 0xfe0000;
|
||||
|
||||
// 0b27 005f loop $AC1.M
|
||||
for(int i = 0; i < AC1.M; i++) {
|
||||
// 0b28 64a0 movr'ls $ACC0, $AX0.H : $AX0.H, $AC0.M
|
||||
AC0.L = 0;
|
||||
AC0.H = AX0.H;
|
||||
AC0.M = AX0.H;
|
||||
AX0.H = *$AR0++;
|
||||
*$AR3++ = AC0.M;
|
||||
}
|
||||
//0b29 1b7e srri @$AR3, $AC0.M
|
||||
//0b2a 1b7a srri @$AR3, $AX0.H
|
||||
//0b2b 02df ret
|
||||
|
||||
*$AR3++ = AC0.M;
|
||||
*$AR3++ = AX0.H;
|
||||
} else {
|
||||
0b2c 1b7e srri @$AR3, $AC0.M
|
||||
0b2d 02df ret
|
||||
//0b2c 1b7e srri @$AR3, $AC0.M
|
||||
//0b2d 02df ret
|
||||
*$AR3++ = AC0.M;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user