Another small DSP HLE update.

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1123 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
John Peterson 2008-11-11 16:28:46 +00:00
parent f38b1688cc
commit cfcd1b6dd5
10 changed files with 285 additions and 107 deletions

View File

@ -371,3 +371,26 @@ int ChooseStringFrom(const char* str, const char* * items)
} }
return -1; return -1;
} }
// Thousand separator. Turns 12345678 into 12,345,678.
std::string ThS(int a, bool b)
{
char cbuf[20]; int j = 0;
// determine treatment of signed or unsigned
if(b) sprintf(cbuf, "%u", a); else sprintf(cbuf, "%i", a);
std::string sbuf = cbuf;
for (int i = 0; i < sbuf.length(); ++i)
{
if((i & 3) == 3)
{
sbuf.insert(sbuf.length() - i, ",");
}
}
return sbuf;
}

View File

@ -50,6 +50,7 @@ inline void CharArrayFromFormat(char (& out)[Count], const char* format, ...)
std::string StripSpaces(const std::string &s); std::string StripSpaces(const std::string &s);
std::string StripQuotes(const std::string &s); std::string StripQuotes(const std::string &s);
std::string StripNewline(const std::string &s); std::string StripNewline(const std::string &s);
std::string ThS(int a, bool b = true); // thousand separator
std::string StringFromInt(int value); std::string StringFromInt(int value);

View File

@ -57,8 +57,10 @@ BEGIN_EVENT_TABLE(CDebugger,wxDialog)
// left cotrols // left cotrols
EVT_CHECKLISTBOX(IDC_CHECKLIST5, CDebugger::OnOptions) // options EVT_CHECKLISTBOX(IDC_CHECKLIST5, CDebugger::OnOptions) // options
EVT_CHECKLISTBOX(IDC_CHECKLIST6, CDebugger::OnShowAll) EVT_CHECKLISTBOX(IDC_CHECKLIST6, CDebugger::OnShowAll)
EVT_RADIOBOX(IDC_RADIO0,CDebugger::ShowBase) // update frequency
// right cotrols // right cotrols
EVT_RADIOBOX(IDC_RADIO0,CDebugger::ShowBase)
EVT_RADIOBOX(IDC_RADIO1,CDebugger::ChangeFrequency) // update frequency EVT_RADIOBOX(IDC_RADIO1,CDebugger::ChangeFrequency) // update frequency
EVT_RADIOBOX(IDC_RADIO2,CDebugger::ChangePreset) // presets EVT_RADIOBOX(IDC_RADIO2,CDebugger::ChangePreset) // presets
EVT_CHECKLISTBOX(IDC_CHECKLIST1, CDebugger::OnSettingsCheck) // settings EVT_CHECKLISTBOX(IDC_CHECKLIST1, CDebugger::OnSettingsCheck) // settings
@ -113,6 +115,7 @@ void CDebugger::Save(IniFile& _IniFile) const
_IniFile.Set("SoundWindow", "UpdateFrequency", m_RadioBox[1]->GetSelection()); _IniFile.Set("SoundWindow", "UpdateFrequency", m_RadioBox[1]->GetSelection());
_IniFile.Set("SoundWindow", "ScanMails", m_gcwiiset->IsChecked(0)); _IniFile.Set("SoundWindow", "ScanMails", m_gcwiiset->IsChecked(0));
_IniFile.Set("SoundWindow", "StoreMails", m_gcwiiset->IsChecked(1)); _IniFile.Set("SoundWindow", "StoreMails", m_gcwiiset->IsChecked(1));
_IniFile.Set("SoundWindow", "ShowBase", m_RadioBox[0]->GetSelection() ? false : true);
} }
@ -125,12 +128,16 @@ void CDebugger::Load(IniFile& _IniFile)
_IniFile.Get("SoundWindow", "h", &h, GetSize().GetHeight()); _IniFile.Get("SoundWindow", "h", &h, GetSize().GetHeight());
SetSize(x, y, w, h); SetSize(x, y, w, h);
// saved settings // Show console or not
bool Console; bool Console;
_IniFile.Get("SoundWindow", "Console", &Console, m_options->IsChecked(3)); _IniFile.Get("SoundWindow", "Console", &Console, m_options->IsChecked(3));
m_options->Check(3, Console); m_options->Check(3, Console);
DoShowHideConsole(); DoShowHideConsole();
// Show number base
_IniFile.Get("SoundWindow", "ShowBase", &bShowBase, !m_RadioBox[0]->GetSelection());
m_RadioBox[0]->SetSelection(!bShowBase);
_IniFile.Get("SoundWindow", "UpdateFrequency", &gUpdFreq, m_RadioBox[1]->GetSelection()); _IniFile.Get("SoundWindow", "UpdateFrequency", &gUpdFreq, m_RadioBox[1]->GetSelection());
m_RadioBox[1]->SetSelection(gUpdFreq); m_RadioBox[1]->SetSelection(gUpdFreq);
DoChangeFrequency(); DoChangeFrequency();
@ -261,7 +268,6 @@ SetTitle(wxT("Sound Debugging"));
m_radioBoxNChoices[0] = sizeof( m_radioBoxChoices0 ) / sizeof( wxString ); m_radioBoxNChoices[0] = sizeof( m_radioBoxChoices0 ) / sizeof( wxString );
m_RadioBox[0] = new wxRadioBox( m_PageMain, IDC_RADIO0, wxT("Show base"), m_RadioBox[0] = new wxRadioBox( m_PageMain, IDC_RADIO0, wxT("Show base"),
wxDefaultPosition, wxDefaultSize, m_radioBoxNChoices[0], m_radioBoxChoices0, 1, wxRA_SPECIFY_COLS); wxDefaultPosition, wxDefaultSize, m_radioBoxNChoices[0], m_radioBoxChoices0, 1, wxRA_SPECIFY_COLS);
m_RadioBox[0]->Enable(false);
wxString m_radioBoxChoices1[] = { wxT("Never"), wxT("5 times/s"), wxT("15 times/s"), wxT("30 times/s") }; wxString m_radioBoxChoices1[] = { wxT("Never"), wxT("5 times/s"), wxT("15 times/s"), wxT("30 times/s") };
m_radioBoxNChoices[1] = sizeof( m_radioBoxChoices1 ) / sizeof( wxString ); m_radioBoxNChoices[1] = sizeof( m_radioBoxChoices1 ) / sizeof( wxString );
@ -475,6 +481,19 @@ void CDebugger::DoChangePreset()
// ============== // ==============
// =======================================================================================
// Show base
// --------------
void CDebugger::ShowBase(wxCommandEvent& event)
{
if(m_RadioBox[0]->GetSelection() == 0)
bShowBase = true;
else if(m_RadioBox[0]->GetSelection() == 1)
bShowBase = false;
}
// ==============
// ======================================================================================= // =======================================================================================
// Change update frequency // Change update frequency
// -------------- // --------------

View File

@ -74,6 +74,7 @@ class CDebugger : public wxDialog
void OnUpdate(wxCommandEvent& event); void OnUpdate(wxCommandEvent& event);
void ShowHideConsole(wxCommandEvent& event); // options void ShowHideConsole(wxCommandEvent& event); // options
void ShowBase(wxCommandEvent& event);
void DoShowHideConsole(); void DoShowHideConsole();
//void OnlyLooping(wxCommandEvent& event); //void OnlyLooping(wxCommandEvent& event);
void OnOptions(wxCommandEvent& event); void OnOptions(wxCommandEvent& event);
@ -84,7 +85,7 @@ class CDebugger : public wxDialog
void ChangePreset(wxCommandEvent& event); void ChangePreset(wxCommandEvent& event);
void DoChangePreset(); void DoChangePreset();
void OnSettingsCheck(wxCommandEvent& event); // settings void OnSettingsCheck(wxCommandEvent& event); // settings
// ============== Mail // ============== Mail
void DoUpdateMail(); void DoUpdateMail();
@ -107,14 +108,8 @@ class CDebugger : public wxDialog
bool gShowAll; bool gShowAll;
int giShowAll; int giShowAll;
int gUpdFreq;// main update freq. int gUpdFreq;// main update freq.
int gPreset; // main presets int gPreset; // main presets
bool bShowBase; // main presets
bool gSSBM; // main settings
bool gSSBMremedy1;
bool gSSBMremedy2;
bool gSequenced;
bool gVolume;
bool gReset;
bool ScanMails; // mail settings bool ScanMails; // mail settings
bool StoreMails; bool StoreMails;

View File

@ -31,6 +31,8 @@
#include <windows.h> #include <windows.h>
#endif #endif
#include "StringUtil.h"
#include "../Debugger/Debugger.h" #include "../Debugger/Debugger.h"
#include "../Debugger/PBView.h" #include "../Debugger/PBView.h"
#include "Console.h" // open and close console, clear console window #include "Console.h" // open and close console, clear console window
@ -43,6 +45,12 @@
// Externals // Externals
extern bool gSSBM;
extern bool gSSBMremedy1;
extern bool gSSBMremedy2;
extern bool gSequenced;
extern bool gVolume;
extern bool gReset;
u32 gLastBlock; u32 gLastBlock;
extern int nFiles; extern int nFiles;
float ratioFactor; // a global to get the ratio factor from MixAdd float ratioFactor; // a global to get the ratio factor from MixAdd
@ -148,25 +156,60 @@ extern CDebugger* m_frame;
// ======================================================================================= // =======================================================================================
// Write title // Write title
// -------------- // --------------
std::string writeTitle(int a) std::string writeTitle(int a, bool Wii)
{ {
std::string b; std::string b;
if(a == 0) if(a == 0)
{ {
b = " adpcm adpcm_loop\n"; if(m_frame->bShowBase) // show base 10
b = b + " Nr pos / end lpos | voll volr | isl iss | pre yn1 yn2 pre yn1 yn2 | frac ratio[hi lo]\n"; {
b = " adpcm adpcm_loop\n";
b = b + " Nr pos / end lpos | voll volr | isl iss | pre yn1 yn2 pre yn1 yn2 | frac ratio[hi lo]\n";
}
else
{
b = " adpcm adpcm_loop\n";
b = b + " Nr pos / end lpos | voll volr | isl iss | pre yn1 yn2 pre yn1 yn2 | frac rati[hi lo ]\n";
}
} }
else if(a == 1) else if(a == 1)
{ {
b = " Nr pos / end lpos | voll volr | src form coef | 1 2 3 4 5\n"; if(m_frame->bShowBase) // show base 10
{
b = " Nr pos / end lpos | voll volr | src form coef | 1 2 3 4 5 addr value\n";
}
else
{
b = " Nr pos / end lpos | voll volr | src form coef | 1 2 3 4 5 addr value\n";
}
} }
else if(a == 2) else if(a == 2)
{ {
b = " Nr pos / end lpos | voll volr | isl iss | e-l e-s\n"; if(m_frame->bShowBase) // show base 10
{
b = " Nr pos / end lpos | voll volr | isl iss | e-l e-s\n";
}
else
{
b = " Nr pos / end lpos | voll volr | isl iss | e-l e-s\n";
}
} }
else if(a == 3) else if(a == 3)
{ {
b = " Nr voll volr dl dr curv delt mixc r | v1 v2 v3 v4 v5 v6 v7 | d1 d2 d3 d4 d5 d6 d7\n"; if(m_frame->bShowBase) // show base 10
{
if(Wii)
b = " Nr voll volr dl dr curv delt mixc r | v1 v2 v3 v4 v5 v6 v7 | d1 d2 d3 d4 d5 d6 d7\n";
else
b = " Nr voll volr dl dr curv delt mixc r | v1 v2 v3 v4 v5 v6 v7 | d1 d2 d3 d4 d5 d6 d7\n";
}
else
{
if(Wii)
b = " Nr voll volr dl dr curv delt mixc r | v1 v2 v3 v4 v5 v6 v7 | d1 d2 d3 d4 d5 d6 d7\n";
else
b = " Nr voll volr dl dr curv delt mixc r | v1 v2 v3 v4 v5 v6 v7 | d1 d2 d3 d4 d5 d6 d7\n";
}
} }
return b; return b;
} }
@ -177,7 +220,7 @@ std::string writeTitle(int a)
// ======================================================================================= // =======================================================================================
// Write main message (presets) // Write main message (presets)
// -------------- // --------------
std::string writeMessage(int a, int i) std::string writeMessage(int a, int i, bool Wii)
{ {
char buf [1000] = ""; char buf [1000] = "";
std::string sbuf; std::string sbuf;
@ -186,44 +229,84 @@ std::string writeMessage(int a, int i)
// --------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------
/* /*
PRESET 0 PRESET 0
" Nr pos / end lpos | voll volr | isl iss | pre yn1 yn2 pre yn1 yn2 | frac ratio[hi lo]\n"; " Nr pos / end lpos | voll volr | isl iss | pre yn1 yn2 pre yn1 yn2 | frac ratio[hi lo]\n";
"---------------|00 12341234/1234123412 12341234 | 00000 00000 | 0 0 | 000 00000 00000 000 00000 00000 | 00000 00000[0 00000] "---------------|00 12,341,234/134,123,412 12341234 | 00,000 00,000 | 0 0 | 000 00000 00000 000 00000 00000 | 00000 00000[0 00000]
" Nr pos / end lpos | voll volr | isl iss | pre yn1 yn2 pre yn1 yn2 | frac rati[hi lo ]\n";
"---------------|00 12,341,234/134,123,412 12341234 | 00,000 00,000 | 0 0 | 000 0000 0000 000 0000 0000 | 0000 0000[0 00000]
PRESET 1 (updates) PRESET 1 (updates)
" Nr pos / end lpos | voll volr | src form coef | 1 2 3 4 5\n"; " Nr pos / end lpos | voll volr | src form coef | 1 2 3 4 5 addr value\n";
"---------------|00 12341234/12341234 12341234 | 00000 00000 | 0 0 0 | 0 0 0 0 0 "---------------|00 12,341,234/12,341,234 12341234 | 00,000 00,000 | 0 0 0 | 0 0 0 0 0 80808080 80808080
PRESET 2 PRESET 2
" Nr pos / end lpos | voll volr | isl iss | e-l e-s\n"; " Nr pos / end lpos | voll volr | isl iss | e-l e-s\n";
"---------------|00 12341234/12341234 12341234 | 00000 00000 | 0 0 | 000000 000000 "---------------|00 12,341,234/12341234 12,341,234 | 00000 00000 | 0 0 | 00,000,000 00,000,000
*/ */
if(a == 0) if(a == 0)
{ {
sprintf(buf,"%c%02i %08x/%08x %08x | %05u %05u | %i %i | %03i %05i %05i %03i %05i %05i | %05i %05i[%i %05i]", if(m_frame->bShowBase)
223, i, gsamplePos[i], gsampleEnd[i], gloopPos[i], {
gvolume_left[i], gvolume_right[i], sprintf(buf,"%c%02i %10s/%10s %10s | %06s %06s | %i %i | %03i %05i %05i %03i %05i %05i | %05i %05i[%i %05i]",
glooping[i], gis_stream[i], 223, i, ThS(gsamplePos[i],true).c_str(), ThS(gsampleEnd[i],true).c_str(), ThS(gloopPos[i],true).c_str(),
gadloop1[i], gadloop2[i], gadloop3[i], gloop1[i], gloop2[i], gloop3[i], ThS(gvolume_left[i]).c_str(), ThS(gvolume_right[i]).c_str(),
gfrac[i], gratio[i], gratiohi[i], gratiolo[i] glooping[i], gis_stream[i],
); gadloop1[i], gadloop2[i], gadloop3[i], gloop1[i], gloop2[i], gloop3[i],
gfrac[i], gratio[i], gratiohi[i], gratiolo[i]
);
}
else
{
sprintf(buf,"%c%02i %08x/%08x %08x | %04x %04x | %i %i | %02x %04x %04x %02x %04x %04x | %04x %04x[%i %04x]",
223, i, gsamplePos[i], gsampleEnd[i], gloopPos[i],
gvolume_left[i], gvolume_right[i],
glooping[i], gis_stream[i],
gadloop1[i], gadloop2[i], gadloop3[i], gloop1[i], gloop2[i], gloop3[i],
gfrac[i], gratio[i], gratiohi[i], gratiolo[i]
);
}
} }
else if(a == 1) else if(a == 1)
{ {
sprintf(buf,"%c%02i %08x/%08x %08x | %05u %05u | %i %i %i | %i %i %i %i %i %08x %08x", if(m_frame->bShowBase)
223, i, gsamplePos[i], gsampleEnd[i], gloopPos[i], {
gvolume_left[i], gvolume_right[i], sprintf(buf,"%c%02i %10s/%10s %10s | %06s %06s | %u %u %u | %u %u %u %u %u %08x %08x",
gsrc_type[i], gaudioFormat[i], gcoef[i], 223, i, ThS(gsamplePos[i]).c_str(), ThS(gsampleEnd[i]).c_str(), ThS(gloopPos[i]).c_str(),
gupdates1[i], gupdates2[i], gupdates3[i], gupdates4[i], gupdates5[i], gupdates_addr[i], gupdates_data[i] ThS(gvolume_left[i]).c_str(), ThS(gvolume_right[i]).c_str(),
); gsrc_type[i], gaudioFormat[i], gcoef[i],
gupdates1[i], gupdates2[i], gupdates3[i], gupdates4[i], gupdates5[i], gupdates_addr[i], gupdates_data[i]
);
}
else
{
sprintf(buf,"%c%02i %08x/%08x %08x | %04x %04x | %u %u %u | %u %u %u %u %u %08x %08x",
223, i, ThS(gsamplePos[i]).c_str(), ThS(gsampleEnd[i]).c_str(), ThS(gloopPos[i]).c_str(),
gvolume_left[i], gvolume_right[i],
gsrc_type[i], gaudioFormat[i], gcoef[i],
gupdates1[i], gupdates2[i], gupdates3[i], gupdates4[i], gupdates5[i], gupdates_addr[i], gupdates_data[i]
);
}
} }
else if(a == 2) else if(a == 2)
{ {
sprintf(buf,"%c%02i %08i/%08i %08i | %05i %05i | %i %i | %06i %06i", if(m_frame->bShowBase)
223, i, gsamplePos[i], gsampleEnd[i], gloopPos[i], {
gvolume_left[i], gvolume_right[i], sprintf(buf,"%c%02i %10s/%10s %10s | %05i %05i | %i %i | %10s %10s",
glooping[i], gis_stream[i], 223, i, ThS(gsamplePos[i]).c_str(), ThS(gsampleEnd[i]).c_str(), ThS(gloopPos[i]).c_str(),
gsampleEnd[i] - gloopPos[i], gsampleEnd[i] - gsamplePos[i] gvolume_left[i], gvolume_right[i],
); glooping[i], gis_stream[i],
ThS(gsampleEnd[i] - gloopPos[i], false).c_str(), ThS(gsampleEnd[i] - gsamplePos[i], false).c_str()
);
}
else
{
sprintf(buf,"%c%02i %08x/%08x %08x | %04x %04x | %i %i | %08x %08x",
223, i, gsamplePos[i], gsampleEnd[i], gloopPos[i],
gvolume_left[i], gvolume_right[i],
glooping[i], gis_stream[i],
gsampleEnd[i] - gloopPos[i], gsampleEnd[i] - gsamplePos[i]
);
}
} }
/* /*
PRESET 3 PRESET 3
@ -232,15 +315,60 @@ std::string writeMessage(int a, int i)
*/ */
else if(a == 3) else if(a == 3)
{ {
sprintf(buf,"%c%02i %05i %05i %05i %05i %05i %05i %05i %i | %05i %05i %05i %05i %05i %05i %05i | %05i %05i %05i %05i %05i %05i %05i", if(m_frame->bShowBase)
223, i, {
gvolume_left[i], gvolume_right[i], gmix_unknown[i], gmix_unknown2[i], gcur_volume[i], gcur_volume_delta[i], if(Wii)
gmixer_control[i], (gmixer_control[i] & MIXCONTROL_RAMPING), {
gmixer_vol1[i], gmixer_vol2[i], gmixer_vol3[i], gmixer_vol4[i], gmixer_vol5[i], sprintf(buf,"%c%02i %05i %05i %05i %05i %05i %05i %05i %i | %05i %05i %05i %05i %05i %05i %05i | %05i %05i %05i %05i %05i %05i %05i",
gmixer_vol6[i], gmixer_vol7[i], 223, i,
gmixer_d1[i], gmixer_d2[i], gmixer_d3[i], gmixer_d4[i], gmixer_d5[i], gvolume_left[i], gvolume_right[i], gmix_unknown[i], gmix_unknown2[i], gcur_volume[i], gcur_volume_delta[i],
gmixer_d6[i], gmixer_d7[i] gmixer_control_wii[i], (gmixer_control_wii[i] & MIXCONTROL_RAMPING),
); gmixer_vol1[i], gmixer_vol2[i], gmixer_vol3[i], gmixer_vol4[i], gmixer_vol5[i],
gmixer_vol6[i], gmixer_vol7[i],
gmixer_d1[i], gmixer_d2[i], gmixer_d3[i], gmixer_d4[i], gmixer_d5[i],
gmixer_d6[i], gmixer_d7[i]
);
}
else
{
sprintf(buf,"%c%02i %05i %05i %05i %05i %05i %05i %08i %i | %05i %05i %05i %05i %05i %05i %05i | %05i %05i %05i %05i %05i %05i %05i",
223, i,
gvolume_left[i], gvolume_right[i], gmix_unknown[i], gmix_unknown2[i], gcur_volume[i], gcur_volume_delta[i],
gmixer_control[i], (gmixer_control[i] & MIXCONTROL_RAMPING),
gmixer_vol1[i], gmixer_vol2[i], gmixer_vol3[i], gmixer_vol4[i], gmixer_vol5[i],
gmixer_vol6[i], gmixer_vol7[i],
gmixer_d1[i], gmixer_d2[i], gmixer_d3[i], gmixer_d4[i], gmixer_d5[i],
gmixer_d6[i], gmixer_d7[i]
);
}
}
else
{
if(Wii)
{
sprintf(buf,"%c%02i %04x %04x %04x %04x %04x %04x %08x %i | %04x %04x %04x %04x %04x %04x %04x | %04x %04x %04x %04x %04x %04x %04x",
223, i,
gvolume_left[i], gvolume_right[i], gmix_unknown[i], gmix_unknown2[i], gcur_volume[i], gcur_volume_delta[i],
gmixer_control_wii[i], (gmixer_control_wii[i] & MIXCONTROL_RAMPING),
gmixer_vol1[i], gmixer_vol2[i], gmixer_vol3[i], gmixer_vol4[i], gmixer_vol5[i],
gmixer_vol6[i], gmixer_vol7[i],
gmixer_d1[i], gmixer_d2[i], gmixer_d3[i], gmixer_d4[i], gmixer_d5[i],
gmixer_d6[i], gmixer_d7[i]
);
}
else
{
sprintf(buf,"%c%02i %04x %04x %04x %04x %04x %04x %04x %i | %04x %04x %04x %04x %04x %04x %04x | %04x %04x %04x %04x %04x %04x %04x",
223, i,
gvolume_left[i], gvolume_right[i], gmix_unknown[i], gmix_unknown2[i], gcur_volume[i], gcur_volume_delta[i],
gmixer_control[i], (gmixer_control[i] & MIXCONTROL_RAMPING),
gmixer_vol1[i], gmixer_vol2[i], gmixer_vol3[i], gmixer_vol4[i], gmixer_vol5[i],
gmixer_vol6[i], gmixer_vol7[i],
gmixer_d1[i], gmixer_d2[i], gmixer_d3[i], gmixer_d4[i], gmixer_d5[i],
gmixer_d6[i], gmixer_d7[i]
);
}
}
} }
sbuf = buf; sbuf = buf;
return sbuf; return sbuf;
@ -445,7 +573,7 @@ void CUCode_AX::Logging(short* _pBuffer, int _iSize, int a, bool Wii)
for (int i = 0; i < nFiles; i++) for (int i = 0; i < nFiles; i++)
{ {
std::string sfbuff; std::string sfbuff;
sfbuff = "-----"; sfbuff = "-----\n";
aprintf(i, (char *)sfbuff.c_str()); aprintf(i, (char *)sfbuff.c_str());
} }
} }
@ -482,7 +610,7 @@ void CUCode_AX::Logging(short* _pBuffer, int _iSize, int a, bool Wii)
sprintf(cbuf, "%i", running[i]); sprintf(cbuf, "%i", running[i]);
sfbuff = sfbuff + cbuf; sfbuff = sfbuff + cbuf;
sfbuff = sfbuff + writeMessage(ii, i); sfbuff = sfbuff + writeMessage(ii, i, Wii);
// write _iSize // write _iSize
strcpy(cbuf, ""); sprintf(cbuf, "%i", _iSize); strcpy(cbuf, ""); sprintf(cbuf, "%i", _iSize);
@ -588,7 +716,7 @@ void CUCode_AX::Logging(short* _pBuffer, int _iSize, int a, bool Wii)
// -------------- // --------------
char buffer [1000] = ""; char buffer [1000] = "";
std::string sbuff; std::string sbuff;
sbuff = writeTitle(m_frame->gPreset); sbuff = writeTitle(m_frame->gPreset, Wii);
// ============== // ==============
@ -678,7 +806,7 @@ void CUCode_AX::Logging(short* _pBuffer, int _iSize, int a, bool Wii)
} }
// add new line // add new line
sbuff = sbuff + writeMessage(m_frame->gPreset, i); strcpy(buffer, ""); sbuff = sbuff + writeMessage(m_frame->gPreset, i, Wii); strcpy(buffer, "");
sbuff = sbuff + "\n"; sbuff = sbuff + "\n";
} // end of if (PBs[i].running) } // end of if (PBs[i].running)
@ -705,8 +833,8 @@ void CUCode_AX::Logging(short* _pBuffer, int _iSize, int a, bool Wii)
// Write settings // Write settings
// --------------- // ---------------
sprintf(buffer, "\nSettings: SSBM fix %i | SSBM rem1 %i | SSBM rem2 %i\nSequenced %i | Volume %i | Reset %i | Only looping %i | Save file %i\n", sprintf(buffer, "\nSettings: SSBM fix %i | SSBM rem1 %i | SSBM rem2 %i\nSequenced %i | Volume %i | Reset %i | Only looping %i | Save file %i\n",
m_frame->gSSBM, m_frame->gSSBMremedy1, m_frame->gSSBMremedy2, m_frame->gSequenced, gSSBM, gSSBMremedy1, gSSBMremedy2, gSequenced,
m_frame->gVolume, m_frame->gReset, m_frame->gOnlyLooping, m_frame->gSaveFile); gVolume, gReset, m_frame->gOnlyLooping, m_frame->gSaveFile);
sbuff = sbuff + buffer; strcpy(buffer, ""); sbuff = sbuff + buffer; strcpy(buffer, "");
// =============== // ===============

View File

@ -73,36 +73,35 @@ CUCode_AX::~CUCode_AX()
// ---------------- // ----------------
void CUCode_AX::SaveLogFile(std::string f, int resizeTo, bool type, bool Wii) void CUCode_AX::SaveLogFile(std::string f, int resizeTo, bool type, bool Wii)
{ {
if (!File::IsDirectory("Logs/Mail")) File::CreateDir("Logs/Mail"); if(gpName.length() > 0) // thios is currently off in the Release build
std::ostringstream ci; {
std::ostringstream cType; if (!File::IsDirectory("Logs/Mail")) File::CreateDir("Logs/Mail");
std::ostringstream ci;
ci << (resizeTo - 1); // write ci std::ostringstream cType;
cType << type; // write cType
ci << (resizeTo - 1); // write ci
cType << type; // write cType
std::string FileName = "Logs/Mail/"; FileName += gpName; std::string FileName = "Logs/Mail/"; FileName += gpName;
FileName += "_sep"; FileName += ci.str(); FileName += "_sep"; FileName += cType.str(); FileName += "_sep"; FileName += ci.str(); FileName += "_sep"; FileName += cType.str();
FileName += Wii ? "_sepWii_sep" : "_sepGC_sep"; FileName += ".log"; FileName += Wii ? "_sepWii_sep" : "_sepGC_sep"; FileName += ".log";
FILE* fhandle = fopen(FileName.c_str(), "w"); FILE* fhandle = fopen(FileName.c_str(), "w");
fprintf(fhandle, f.c_str()); fprintf(fhandle, f.c_str());
fflush(fhandle); fhandle = NULL; fflush(fhandle); fhandle = NULL;
}
} }
// ============================================ // ============================================
// Save the logged AX mail // Save the logged AX mail
// ---------------- // ----------------
void CUCode_AX::SaveLog_(bool Wii, const char* _fmt, ...) void CUCode_AX::SaveLog_(bool Wii, const char* _fmt, va_list ap)
{ {
if(m_frame->ScanMails) if(m_frame->ScanMails)
{ {
char Msg[512*10]; char Msg[512];
va_list ap;
va_start(ap, _fmt);
vsprintf(Msg, _fmt, ap); vsprintf(Msg, _fmt, ap);
va_end(ap);
//wxMessageBox( wxString::Format("SaveLog_ again: %s\n", Msg) ); //wxMessageBox( wxString::Format("SaveLog_ again: %s\n", Msg) );
@ -508,8 +507,11 @@ void CUCode_AX::Update()
// ----------- // -----------
// Shortcut // Shortcut to avoid having to write SaveLog(false, ...) every time
void CUCode_AX::SaveLog(const char* _fmt, ...) { if(m_frame) SaveLog_(false, _fmt); } void CUCode_AX::SaveLog(const char* _fmt, ...)
{
va_list ap; va_start(ap, _fmt); if(m_frame) SaveLog_(false, _fmt, ap); va_end(ap);
}
// ============================================ // ============================================

View File

@ -40,7 +40,7 @@ public:
//template<class ParamBlockType> //template<class ParamBlockType>
//void Logging(short* _pBuffer, int _iSize, int a, bool Wii, ParamBlockType &PBs, int numberOfPBs); //void Logging(short* _pBuffer, int _iSize, int a, bool Wii, ParamBlockType &PBs, int numberOfPBs);
void Logging(short* _pBuffer, int _iSize, int a, bool Wii); void Logging(short* _pBuffer, int _iSize, int a, bool Wii);
void SaveLog_(bool Wii, const char* _fmt, ...); void SaveLog_(bool Wii, const char* _fmt, va_list ap);
void SaveMail(bool Wii, u32 _uMail); void SaveMail(bool Wii, u32 _uMail);
void SaveLogFile(std::string f, int resizeTo, bool type, bool Wii); void SaveLogFile(std::string f, int resizeTo, bool type, bool Wii);
std::string TmpMailLog; std::string TmpMailLog;

View File

@ -185,18 +185,18 @@ struct AXParamBlockWii
u16 running; // 1=RUN 0=STOP u16 running; // 1=RUN 0=STOP
u16 is_stream; // 1 = stream, 0 = one shot u16 is_stream; // 1 = stream, 0 = one shot
PBMixerWii mixer; /* 10 */ PBMixerWii mixer;
PBInitialTimeDelay initial_time_delay; /* 34 */ PBInitialTimeDelay initial_time_delay;
PBUpdatesWii updates; /* 41 */ PBUpdatesWii updates;
PBDpopWii dpop; /* 46 */ PBDpopWii dpop;
PBVolumeEnvelope vol_env; /* 58 */ PBVolumeEnvelope vol_env;
PBAudioAddr audio_addr; /* 60 */ PBAudioAddr audio_addr;
PBADPCMInfo adpcm; /* 68 */ PBADPCMInfo adpcm;
PBSampleRateConverter src; /* 88 */ PBSampleRateConverter src;
PBADPCMLoopInfo adpcm_loop_info; /* 95 */ PBADPCMLoopInfo adpcm_loop_info;
PBLpf lpf; /* 98 */ PBLpf lpf;
PBHpf hpf; /* 102 */ PBHpf hpf;
u16 pad[22]; /* 106 */ u16 pad[22];
}; };
enum { enum {

View File

@ -90,12 +90,14 @@ int ReadOutPBsWii(u32 pbs_address, AXParamBlockWii* _pPBs, int _num)
short *pDest = (short *)&_pPBs[i]; short *pDest = (short *)&_pPBs[i];
for (int p = 0; p < sizeof(AXParamBlockWii) / 2; p++) for (int p = 0; p < sizeof(AXParamBlockWii) / 2; p++)
{ {
pDest[p] = Common::swap16(pSrc[p]); if(p == 6 || p == 7) pDest[p] = pSrc[p]; // control for the u32
else pDest[p] = Common::swap16(pSrc[p]);
#if defined(_DEBUG) || defined(DEBUGFAST) #if defined(_DEBUG) || defined(DEBUGFAST)
gLastBlock = blockAddr + p*2 + 2; // save last block location gLastBlock = blockAddr + p*2 + 2; // save last block location
#endif #endif
} }
_pPBs[i].mixer_control = Common::swap32(_pPBs[i].mixer_control);
blockAddr = (_pPBs[i].next_pb_hi << 16) | _pPBs[i].next_pb_lo; blockAddr = (_pPBs[i].next_pb_hi << 16) | _pPBs[i].next_pb_lo;
count++; count++;
@ -120,9 +122,11 @@ void WriteBackPBsWii(u32 pbs_address, AXParamBlockWii* _pPBs, int _num)
{ {
short* pSrc = (short*)&_pPBs[i]; short* pSrc = (short*)&_pPBs[i];
short* pDest = (short*)g_dspInitialize.pGetMemoryPointer(blockAddr); short* pDest = (short*)g_dspInitialize.pGetMemoryPointer(blockAddr);
_pPBs[i].mixer_control = Common::swap32(_pPBs[i].mixer_control);
for (size_t p = 0; p < sizeof(AXParamBlockWii) / 2; p++) for (size_t p = 0; p < sizeof(AXParamBlockWii) / 2; p++)
{ {
pDest[p] = Common::swap16(pSrc[p]); if(p == 6 || p == 7) pDest[p] = pSrc[p]; // control for the u32
else pDest[p] = Common::swap16(pSrc[p]);
} }
// next block // next block
@ -136,10 +140,11 @@ void CUCode_AXWii::MixAdd(short* _pBuffer, int _iSize)
// read out pbs // read out pbs
int numberOfPBs = ReadOutPBsWii(m_addressPBs, PBs, NUMBER_OF_PBS); int numberOfPBs = ReadOutPBsWii(m_addressPBs, PBs, NUMBER_OF_PBS);
if (_iSize > 1024 * 1024) if (_iSize > 1024 * 1024)
_iSize = 1024 * 1024; _iSize = 1024 * 1024;
// write zeroes to the beginning of templbuffer
memset(templbuffer, 0, _iSize * sizeof(int)); memset(templbuffer, 0, _iSize * sizeof(int));
memset(temprbuffer, 0, _iSize * sizeof(int)); memset(temprbuffer, 0, _iSize * sizeof(int));
@ -189,6 +194,7 @@ void CUCode_AXWii::MixAdd(short* _pBuffer, int _iSize)
WriteBackPBsWii(m_addressPBs, PBs, numberOfPBs); WriteBackPBsWii(m_addressPBs, PBs, numberOfPBs);
// We write the sound to _pBuffer
for (int i = 0; i < _iSize; i++) for (int i = 0; i < _iSize; i++)
{ {
// Clamp into 16-bit. Maybe we should add a volume compressor here. // Clamp into 16-bit. Maybe we should add a volume compressor here.
@ -219,8 +225,12 @@ void CUCode_AXWii::Update()
} }
} }
// Shortcut // Shortcut
void CUCode_AXWii::SaveLog(const char* _fmt, ...) { if(m_frame) lCUCode_AX->SaveLog_(true, _fmt); } void CUCode_AXWii::SaveLog(const char* _fmt, ...)
{
va_list ap; va_start(ap, _fmt); if(m_frame) lCUCode_AX->SaveLog_(true, _fmt, ap); va_end(ap);
}
// AX seems to bootup one task only and waits for resume-callbacks // AX seems to bootup one task only and waits for resume-callbacks

View File

@ -96,12 +96,6 @@ inline void MixAddVoice(ParamBlockType &pb, int *templbuffer, int *temprbuffer,
// Top Spin 3 Wii // Top Spin 3 Wii
if(pb.audio_addr.sample_format > 25) pb.audio_addr.sample_format = 0; if(pb.audio_addr.sample_format > 25) pb.audio_addr.sample_format = 0;
/* What's with the high samplePos values in Wii? Should we adjust them somehow?
samplePos = ((samplePos/14)*16) + (samplePos % 14) + 2;
sampleEnd = ((sampleEnd/14)*16) + (sampleEnd % 14) + 2;
loopPos = ((loopPos/14)*16) + (loopPos % 14) + 2;
*/
// ======================================================================================= // =======================================================================================
// Walk through _iSize. _iSize = numSamples. If the game goes slow _iSize will be higher to // Walk through _iSize. _iSize = numSamples. If the game goes slow _iSize will be higher to
// compensate for that. _iSize can be as low as 100 or as high as 2000 some cases. // compensate for that. _iSize can be as low as 100 or as high as 2000 some cases.
@ -154,8 +148,9 @@ inline void MixAddVoice(ParamBlockType &pb, int *templbuffer, int *temprbuffer,
} }
// ================ // ================
// ======================================================================================= // ===================================================================
// Volume control // Overall volume control. In addition to this there is also separate volume settings to
// different channels (left, right etc).
frac &= 0xffff; frac &= 0xffff;
int vol = pb.vol_env.cur_volume >> 9; int vol = pb.vol_env.cur_volume >> 9;
@ -173,13 +168,16 @@ inline void MixAddVoice(ParamBlockType &pb, int *templbuffer, int *temprbuffer,
int leftmix = pb.mixer.volume_left >> 5; int leftmix = pb.mixer.volume_left >> 5;
int rightmix = pb.mixer.volume_right >> 5; int rightmix = pb.mixer.volume_right >> 5;
// ===============
int left = sample * leftmix >> 8; int left = sample * leftmix >> 8;
int right = sample * rightmix >> 8; int right = sample * rightmix >> 8;
//adpcm has to walk from oldSamplePos to samplePos here //adpcm has to walk from oldSamplePos to samplePos here
templbuffer[s] += left; templbuffer[s] += left;
temprbuffer[s] += right; temprbuffer[s] += right;
// ===============
// ===================================================================
// Control the behavior when we reach the end of the sample
if (samplePos >= sampleEnd) if (samplePos >= sampleEnd)
{ {
if (pb.audio_addr.looping == 1) if (pb.audio_addr.looping == 1)
@ -201,6 +199,8 @@ inline void MixAddVoice(ParamBlockType &pb, int *templbuffer, int *temprbuffer,
break; break;
} }
} }
// ===============
} // end of the _iSize loop } // end of the _iSize loop
// Update volume // Update volume
@ -214,7 +214,7 @@ inline void MixAddVoice(ParamBlockType &pb, int *templbuffer, int *temprbuffer,
pb.src.cur_addr_frac = (u16)frac; pb.src.cur_addr_frac = (u16)frac;
pb.audio_addr.cur_addr_hi = samplePos >> 16; pb.audio_addr.cur_addr_hi = samplePos >> 16;
pb.audio_addr.cur_addr_lo = (u16)samplePos; pb.audio_addr.cur_addr_lo = (u16)samplePos;
} //if (pb.running) } // if (pb.running)
} }
#endif // _UCODE_AX_VOICE_H #endif // _UCODE_AX_VOICE_H