bad_flip issue fix

This commit is contained in:
Nekotekina 2014-03-28 12:47:32 +04:00
parent 994ce50392
commit 70cc2494aa
3 changed files with 30 additions and 25 deletions

View File

@ -181,7 +181,17 @@ int cellGcmSetPrepareFlip(mem_ptr_t<CellGcmContextData> ctxt, u32 id)
if(current + 8 >= end) if(current + 8 >= end)
{ {
ConLog.Warning("bad flip!"); ConLog.Warning("bad flip!");
cellGcmCallback(ctxt.GetAddr(), current + 8 - end); //cellGcmCallback(ctxt.GetAddr(), current + 8 - end);
//copied:
CellGcmControl& ctrl = (CellGcmControl&)Memory[gcm_info.control_addr];
const s32 res = ctxt->current - ctxt->begin - ctrl.put;
if(res > 0) Memory.Copy(ctxt->begin, ctxt->current - res, res);
ctxt->current = ctxt->begin + res;
ctrl.put = res;
ctrl.get = 0;
} }
current = ctxt->current; current = ctxt->current;

View File

@ -32,10 +32,6 @@ struct LogPacket
{ {
} }
LogPacket()
{
}
}; };
struct _LogBuffer : public MTPacketBuffer<LogPacket> struct _LogBuffer : public MTPacketBuffer<LogPacket>
@ -78,29 +74,27 @@ struct _LogBuffer : public MTPacketBuffer<LogPacket>
LogPacket _pop() LogPacket _pop()
{ {
LogPacket ret;
u32 c_get = m_get; u32 c_get = m_get;
const u32& sprefix = *(u32*)&m_buffer[c_get]; const u32& sprefix = *(u32*)&m_buffer[c_get];
c_get += sizeof(u32); c_get += sizeof(u32);
ret.m_prefix = wxString((wxChar*)&m_buffer[c_get], sprefix / sizeof(wxChar)); const wxString& prefix = wxString((wxChar*)&m_buffer[c_get], sprefix / sizeof(wxChar));
c_get += sprefix; c_get += sprefix;
const u32& stext = *(u32*)&m_buffer[c_get]; const u32& stext = *(u32*)&m_buffer[c_get];
c_get += sizeof(u32); c_get += sizeof(u32);
ret.m_text = wxString((wxChar*)&m_buffer[c_get], stext / sizeof(wxChar)); const wxString& text = wxString((wxChar*)&m_buffer[c_get], stext / sizeof(wxChar));
c_get += stext; c_get += stext;
const u32& scolour = *(u32*)&m_buffer[c_get]; const u32& scolour = *(u32*)&m_buffer[c_get];
c_get += sizeof(u32); c_get += sizeof(u32);
ret.m_colour = wxString((wxChar*)&m_buffer[c_get], scolour / sizeof(wxChar)); const wxString& colour = wxString((wxChar*)&m_buffer[c_get], scolour / sizeof(wxChar));
c_get += scolour; c_get += scolour;
m_get = c_get; m_get = c_get;
if(!HasNewPacket()) Flush(); if(!HasNewPacket()) Flush();
return ret; return LogPacket(prefix, text, colour);
} }
} LogBuffer; } LogBuffer;
@ -114,18 +108,19 @@ LogWriter::LogWriter()
} }
} }
void LogWriter::WriteToLog(wxString prefix, wxString value, u8 lvl/*, wxColour bgcolour*/) void LogWriter::WriteToLog(const wxString& prefix, const wxString& value, u8 lvl/*, wxColour bgcolour*/)
{ {
wxString new_prefix = prefix;
if(!prefix.empty()) if(!prefix.empty())
{ {
if(NamedThreadBase* thr = GetCurrentNamedThread()) if(NamedThreadBase* thr = GetCurrentNamedThread())
{ {
prefix += " : " + thr->GetThreadName(); new_prefix += " : " + thr->GetThreadName();
} }
} }
if(m_logfile.IsOpened() && !prefix.empty()) if(m_logfile.IsOpened() && !new_prefix.empty())
m_logfile.Write(wxString("[") + prefix + "]: " + value + "\n"); m_logfile.Write(wxString("[") + new_prefix + "]: " + value + "\n");
if(!ConLogFrame || Ini.HLELogLvl.GetValue() == 4 || (lvl != 0 && lvl <= Ini.HLELogLvl.GetValue())) if(!ConLogFrame || Ini.HLELogLvl.GetValue() == 4 || (lvl != 0 && lvl <= Ini.HLELogLvl.GetValue()))
return; return;
@ -159,10 +154,10 @@ void LogWriter::WriteToLog(wxString prefix, wxString value, u8 lvl/*, wxColour b
//if(LogBuffer.put == LogBuffer.get) LogBuffer.Flush(); //if(LogBuffer.put == LogBuffer.get) LogBuffer.Flush();
LogBuffer.Push(LogPacket(prefix, value, g_log_colors[lvl])); LogBuffer.Push(LogPacket(new_prefix, value, g_log_colors[lvl]));
} }
void LogWriter::Write(const wxString fmt, ...) void LogWriter::Write(const wxString& fmt, ...)
{ {
va_list list; va_list list;
va_start(list, fmt); va_start(list, fmt);
@ -175,7 +170,7 @@ void LogWriter::Write(const wxString fmt, ...)
WriteToLog("!", frmt, 2); WriteToLog("!", frmt, 2);
} }
void LogWriter::Error(const wxString fmt, ...) void LogWriter::Error(const wxString& fmt, ...)
{ {
va_list list; va_list list;
va_start(list, fmt); va_start(list, fmt);
@ -188,7 +183,7 @@ void LogWriter::Error(const wxString fmt, ...)
WriteToLog("E", frmt, 4); WriteToLog("E", frmt, 4);
} }
void LogWriter::Warning(const wxString fmt, ...) void LogWriter::Warning(const wxString& fmt, ...)
{ {
va_list list; va_list list;
va_start(list, fmt); va_start(list, fmt);
@ -201,7 +196,7 @@ void LogWriter::Warning(const wxString fmt, ...)
WriteToLog("W", frmt, 3); WriteToLog("W", frmt, 3);
} }
void LogWriter::Success(const wxString fmt, ...) void LogWriter::Success(const wxString& fmt, ...)
{ {
va_list list; va_list list;
va_start(list, fmt); va_start(list, fmt);

View File

@ -11,15 +11,15 @@ class LogWriter
//wxString m_prefix; //wxString m_prefix;
//wxString m_value; //wxString m_value;
virtual void WriteToLog(wxString prefix, wxString value, u8 lvl); virtual void WriteToLog(const wxString& prefix, const wxString& value, u8 lvl);
public: public:
LogWriter(); LogWriter();
virtual void Write(const wxString fmt, ...); virtual void Write(const wxString& fmt, ...);
virtual void Error(const wxString fmt, ...); virtual void Error(const wxString& fmt, ...);
virtual void Warning(const wxString fmt, ...); virtual void Warning(const wxString& fmt, ...);
virtual void Success(const wxString fmt, ...); virtual void Success(const wxString& fmt, ...);
virtual void SkipLn(); virtual void SkipLn();
}; };