aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorArisotura <thetotalworm@gmail.com>2019-08-18 11:31:03 +0200
committerArisotura <thetotalworm@gmail.com>2019-08-18 11:31:03 +0200
commit626a9c13859b556a19abbf2212233a834e11f022 (patch)
tree9d15b5b70faa612a1e43054ded072f3289393b6d /src
parent78ff4165edaccf995b646b095abbc63b441b7d23 (diff)
my bad.
Diffstat (limited to 'src')
-rw-r--r--src/SPU.cpp22
-rw-r--r--src/SPU.h1
2 files changed, 16 insertions, 7 deletions
diff --git a/src/SPU.cpp b/src/SPU.cpp
index 2dfdf44..b25b8d0 100644
--- a/src/SPU.cpp
+++ b/src/SPU.cpp
@@ -26,7 +26,7 @@
// * capture addition modes, overflow bugs
// * channel hold
// * 'length less than 4' glitch
-
+int brap = 0;
namespace SPU
{
@@ -63,7 +63,7 @@ const s16 PSGTable[8][8] =
const u32 kSamplesPerRun = 1;
-const u32 OutputBufferSize = 2*1024;
+const u32 OutputBufferSize = 2*2*1024;
s16 OutputBuffer[2 * OutputBufferSize];
u32 OutputReadOffset;
u32 OutputWriteOffset;
@@ -101,7 +101,7 @@ void Reset()
{
memset(OutputBuffer, 0, 2*OutputBufferSize*2);
OutputReadOffset = 0;
- OutputWriteOffset = OutputBufferSize;
+ OutputWriteOffset = 0;//OutputBufferSize;
Cnt = 0;
MasterVolume = 0;
@@ -579,7 +579,7 @@ void CaptureUnit::Run(s32 sample)
}
}
-
+int zog = 0, zig = 0;
void Mix(u32 samples)
{
s32 channelbuf[32];
@@ -734,15 +734,23 @@ void Mix(u32 samples)
OutputBuffer[OutputWriteOffset + 1] = r >> 1;
OutputWriteOffset += 2;
OutputWriteOffset &= ((2*OutputBufferSize)-1);
- if (OutputWriteOffset == OutputReadOffset) printf("!! SOUND FIFO OVERFLOW\n");
+ if (OutputWriteOffset == OutputReadOffset) printf("!! SOUND FIFO OVERFLOW %d\n", OutputWriteOffset>>1);
+ zog++; zig++; brap++;
}
NDS::ScheduleEvent(NDS::Event_SPU, true, 1024*kSamplesPerRun, Mix, kSamplesPerRun);
}
+int GetOutputSize()
+{
+ return zog; // derp
+}
+
int ReadOutput(s16* data, int samples)
{
+ printf("ReadOutput(%d): wrote=%d level=%d ReadOffset=%d WriteOffset=%d\n", samples, zog, zig, OutputReadOffset>>1, OutputWriteOffset>>1);
+ zog = 0; zig -= (zig<samples ? zig : samples);
if (OutputReadOffset == OutputWriteOffset)
return 0;
@@ -908,8 +916,8 @@ void Write16(u32 addr, u16 val)
return;
case 0xA: chan->SetLoopPos(val); return;
- case 0xC: chan->SetLength((chan->Length & 0xFFFF0000) | val); return;
- case 0xE: chan->SetLength((chan->Length & 0x0000FFFF) | (val << 16)); return;
+ case 0xC: chan->SetLength(((chan->Length >> 2) & 0xFFFF0000) | val); return;
+ case 0xE: chan->SetLength(((chan->Length >> 2) & 0x0000FFFF) | (val << 16)); return;
}
}
else
diff --git a/src/SPU.h b/src/SPU.h
index 3cd5df3..ddd235a 100644
--- a/src/SPU.h
+++ b/src/SPU.h
@@ -35,6 +35,7 @@ void SetBias(u16 bias);
void Mix(u32 samples);
+int GetOutputSize();
int ReadOutput(s16* data, int samples);
u8 Read8(u32 addr);