summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/Src/Fifo.cpp
diff options
context:
space:
mode:
authormemberTwo.mb2 <memberTwo.mb2@gmail.com>2008-10-30 18:13:13 +0000
committermemberTwo.mb2 <memberTwo.mb2@gmail.com>2008-10-30 18:13:13 +0000
commita5ca940d649a30f899527ba18512ffd87a2ed385 (patch)
tree441cecdfb27b19ed16ebaf3905fb1047fa92a6db /Source/Core/VideoCommon/Src/Fifo.cpp
parent50e413ff7771bfd9c5d9aface439754b4fecf092 (diff)
A bit more proper GP fifo emulation: some DC fixes, some hacks too, more comments and TODOs.
TODO: the linux part. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1017 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/VideoCommon/Src/Fifo.cpp')
-rw-r--r--Source/Core/VideoCommon/Src/Fifo.cpp30
1 files changed, 9 insertions, 21 deletions
diff --git a/Source/Core/VideoCommon/Src/Fifo.cpp b/Source/Core/VideoCommon/Src/Fifo.cpp
index 09b927351f..0e0f454f25 100644
--- a/Source/Core/VideoCommon/Src/Fifo.cpp
+++ b/Source/Core/VideoCommon/Src/Fifo.cpp
@@ -75,10 +75,10 @@ void Video_SendFifoData(u8* _uData)
if (size + 32 >= FIFO_SIZE)
{
int pos = (int)(g_pVideoData-videoBuffer);
- //if (size-pos > pos)
- //{
- // PanicAlert("FIFO out of bounds (sz = %i, at %08x)", FAKE_GetFifoSize(), readptr);
- //}
+ if (size-pos > pos)
+ {
+ PanicAlert("FIFO out of bounds (sz = %i, at %08x)", size, pos);
+ }
memmove(&videoBuffer[0], &videoBuffer[pos], size - pos );
size -= pos;
g_pVideoData = FAKE_GetFifoStartPtr();
@@ -108,7 +108,8 @@ void Fifo_EnterLoop(const SVideoInitialize &video_initialize)
if (MsgWaitForMultipleObjects(1, &hEventOnIdle, FALSE, 1L, QS_ALLEVENTS) == WAIT_ABANDONED)
break;
#endif
- if (_fifo.CPReadWriteDistance < 1) //fifo.CPLoWatermark)
+ if (_fifo.CPReadWriteDistance < 1)
+ //if (_fifo.CPReadWriteDistance < _fifo.CPLoWatermark)
#if defined(THREAD_VIDEO_WAKEUP_ONIDLE) && defined(_WIN32)
continue;
#else
@@ -122,8 +123,6 @@ void Fifo_EnterLoop(const SVideoInitialize &video_initialize)
#if defined(THREAD_VIDEO_WAKEUP_ONIDLE) && defined(_WIN32)
while(_fifo.CPReadWriteDistance > 0)
#else
- //int count = 200;
- //while(_fifo.CPReadWriteDistance > 0 && count)
while(_fifo.bFF_GPReadEnable && (_fifo.CPReadWriteDistance > 0) )// && count)
#endif
{
@@ -132,9 +131,9 @@ void Fifo_EnterLoop(const SVideoInitialize &video_initialize)
{
if (_fifo.CPReadPointer == _fifo.CPBreakpoint)
{
- //_fifo.bFF_Breakpoint = 1;
+ video_initialize.pLog("!!! BP irq raised",FALSE);
#ifdef _WIN32
- InterlockedExchange((LONG*)&_fifo.bFF_Breakpoint, true);
+ InterlockedExchange((LONG*)&_fifo.bFF_Breakpoint, 1);
#else
_fifo.bFF_Breakpoint = true;
#endif
@@ -150,8 +149,8 @@ void Fifo_EnterLoop(const SVideoInitialize &video_initialize)
#else
_fifo.sync->Enter();
#endif
- //_fifo.CPReadPointer += 32;
Video_SendFifoData(uData);
+ // increase the ReadPtr
u32 readPtr = _fifo.CPReadPointer+32;
if (readPtr >= _fifo.CPEnd)
readPtr = _fifo.CPBase;
@@ -164,17 +163,6 @@ void Fifo_EnterLoop(const SVideoInitialize &video_initialize)
Common::InterlockedExchangeAdd((int*)&_fifo.CPReadWriteDistance, -32);
_fifo.sync->Leave();
#endif
-
- // increase the ReadPtr
- /*if (_fifo.CPReadPointer >= _fifo.CPEnd)
- {
- //_fifo.CPReadPointer = _fifo.CPBase;
- InterlockedExchange((LONG*)&_fifo.CPReadPointer, _fifo.CPBase);
- //LOG(COMMANDPROCESSOR, "BUFFER LOOP");
- }/**/
-#ifndef THREAD_VIDEO_WAKEUP_ONIDLE
- //count--;
-#endif
}
}