#include "externals.h"
#include "registers.h"
-#include "dsoundoss.h"
+#include "out.h"
+#include "arm_features.h"
#ifdef ENABLE_NLS
#include <libintl.h>
// helpers for gauss interpolation
#define gval0 (((short*)(&s_chan[ch].SB[29]))[gpos])
-#define gval(x) (((short*)(&s_chan[ch].SB[29]))[(gpos+x)&3])
+#define gval(x) ((int)((short*)(&s_chan[ch].SB[29]))[(gpos+x)&3])
#include "gauss_i.h"
int vl, vr;int gpos;
vl = (spos >> 6) & ~3;
gpos = s_chan[ch].SB[28];
- vr=(gauss[vl]*gval0)&~2047;
+ vr=(gauss[vl]*(int)gval0)&~2047;
vr+=(gauss[vl+1]*gval(1))&~2047;
vr+=(gauss[vl+2]*gval(2))&~2047;
vr+=(gauss[vl+3]*gval(3))&~2047;
return ret;
}
-#ifdef __arm__
+#ifdef HAVE_ARMV5
// asm code; lv and rv must be 0-3fff
extern void mix_chan(int start, int count, int lv, int rv);
extern void mix_chan_rvb(int start, int count, int lv, int rv);
int ch,d,silentch;
int bIRQReturn=0;
- while(1)
+ while(!bIRQReturn)
{
// ok, at the beginning we are looking if there is
// enuff free place in the dsound/oss buffer to
// until enuff free place is available/a new channel gets
// started
- if(!forced_updates && SoundGetBytesBuffered()) // still enuff data in sound buffer?
+ if(!forced_updates && out_current->busy()) // still enuff data in sound buffer?
{
return 0;
}
{
//printf("decoder irq %x\n", decode_pos);
do_irq();
+ bIRQReturn = 1;
}
}
decode_pos = (decode_pos + NSSIZE) & 0x1ff;
// wanna have around 1/60 sec (16.666 ms) updates
if (iCycle++ > 16/FRAG_MSECS)
{
- SoundFeedStreamData((unsigned char *)pSpuBuffer,
+ out_current->feed(pSpuBuffer,
((unsigned char *)pS) - ((unsigned char *)pSpuBuffer));
pS = (short *)pSpuBuffer;
iCycle = 0;
bSPUIsOpen = 0; // no more open
- RemoveSound(); // no more sound handling
+ out_current->finish(); // no more sound handling
return 0;
}