aboutsummaryrefslogtreecommitdiff
path: root/src/SPU.h
diff options
context:
space:
mode:
authorStapleButter <thetotalworm@gmail.com>2017-04-06 22:38:46 +0200
committerStapleButter <thetotalworm@gmail.com>2017-04-06 22:38:46 +0200
commit76c4e576086c59a96020676bb4eb497111349f2a (patch)
tree57ed10494d15992c046b0d6d0e3fbac68ff58fea /src/SPU.h
parent8d66beba6bc49f8d1f6cb443745bfd1ffe4008a3 (diff)
preliminary audio. only supports PSG (and handles all channels as such). drops out every once in a while.
Diffstat (limited to 'src/SPU.h')
-rw-r--r--src/SPU.h20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/SPU.h b/src/SPU.h
index 5b762bd..6554864 100644
--- a/src/SPU.h
+++ b/src/SPU.h
@@ -44,21 +44,39 @@ public:
~Channel();
void Reset();
+ u32 Num;
+
u32 Cnt;
u32 SrcAddr;
u16 TimerReload;
u32 LoopPos;
u32 Length;
+ u32 Timer;
+ u32 Pos;
+ s16 CurSample;
+
void SetCnt(u32 val)
{
+ if ((val & (1<<31)) && !(Cnt & (1<<31)))
+ {
+ Start();
+ }
+
Cnt = val & 0xFF7F837F;
+ //if(Num==8)printf("chan %d volume: %d\n", Num, val&0x7F);
}
void SetSrcAddr(u32 val) { SrcAddr = val & 0x07FFFFFF; }
- void SetTimerReload(u32 val) { TimerReload = val & 0xFFFF; }
+ void SetTimerReload(u32 val) { TimerReload = val & 0xFFFF;if(Num==8) printf("chan8 timer %04X\n", TimerReload);}
void SetLoopPos(u32 val) { LoopPos = (val & 0xFFFF) << 2; }
void SetLength(u32 val) { Length = (val & 0x001FFFFF) << 2; }
+
+ void Start();
+
+ void NextSample_PSG();
+
+ void Run(s32* buf, u32 samples);
};
}