Fix sound warnings and remove catweasel support

This commit is contained in:
simon.kagstrom 2010-02-07 17:20:47 +00:00
parent 0777b096dd
commit 9e3796d44d
2 changed files with 12 additions and 90 deletions

View File

@ -996,11 +996,15 @@ void DigitalRenderer::WriteRegister(uint16 adr, uint8 byte)
case 18: case 18:
voice[v].wave = (byte >> 4) & 0xf; voice[v].wave = (byte >> 4) & 0xf;
if ((byte & 1) != voice[v].gate) if ((byte & 1) != voice[v].gate)
{
if (byte & 1) // Gate turned on if (byte & 1) // Gate turned on
voice[v].eg_state = EG_ATTACK; voice[v].eg_state = EG_ATTACK;
else // Gate turned off else // Gate turned off
{
if (voice[v].eg_state != EG_IDLE) if (voice[v].eg_state != EG_IDLE)
voice[v].eg_state = EG_RELEASE; voice[v].eg_state = EG_RELEASE;
}
}
voice[v].gate = byte & 1; voice[v].gate = byte & 1;
voice[v].mod_by->sync = byte & 2; voice[v].mod_by->sync = byte & 2;
voice[v].ring = byte & 4; voice[v].ring = byte & 4;
@ -1172,10 +1176,12 @@ void DigitalRenderer::calc_filter(void)
// Stabilize filter // Stabilize filter
if (fabs(g1) >= g2 + 1.0) if (fabs(g1) >= g2 + 1.0)
{
if (g1 > 0.0) if (g1 > 0.0)
g1 = g2 + 0.99; g1 = g2 + 0.99;
else else
g1 = -(g2 + 0.99); g1 = -(g2 + 0.99);
}
// Calculate roots (filter characteristic) and input attenuation // Calculate roots (filter characteristic) and input attenuation
switch (f_type) { switch (f_type) {
@ -1437,10 +1443,6 @@ void MOS6581::open_close_renderer(int old_type, int new_type)
#ifdef AMIGA #ifdef AMIGA
else if (new_type == SIDTYPE_SIDCARD) else if (new_type == SIDTYPE_SIDCARD)
the_renderer = new SIDCardRenderer; the_renderer = new SIDCardRenderer;
#endif
#ifdef __linux__
else if (new_type == SIDTYPE_SIDCARD)
the_renderer = new CatweaselRenderer;
#endif #endif
else else
the_renderer = NULL; the_renderer = NULL;

View File

@ -23,17 +23,7 @@
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include <linux/soundcard.h> #include <linux/soundcard.h>
// Catweasel ioctls (included here for convenience) #include "utils.hh"
#include <linux/ioctl.h>
#define CWSID_IOCTL_TYPE ('S')
#define CWSID_IOCTL_RESET _IO(CWSID_IOCTL_TYPE, 0)
#define CWSID_IOCTL_CARDTYPE _IOR(CWSID_IOCTL_TYPE, 4, int)
#define CWSID_IOCTL_PAL _IO(CWSID_IOCTL_TYPE, 0x11)
#define CWSID_IOCTL_NTSC _IO(CWSID_IOCTL_TYPE, 0x12)
#define CWSID_IOCTL_DOUBLEBUFFER _IOW(CWSID_IOCTL_TYPE, 0x21, int)
#define CWSID_IOCTL_DELAY _IOW(CWSID_IOCTL_TYPE, 0x22, int)
#define CWSID_MAGIC 0x100
#define HAVE_CWSID 1
#include "VIC.h" #include "VIC.h"
#include "Network.h" #include "Network.h"
@ -133,9 +123,13 @@ void DigitalRenderer::PushVolume(uint8 vol)
// the buffer entirely // the buffer entirely
if ((buffer_pos + to_output) >= sndbufsize) { if ((buffer_pos + to_output) >= sndbufsize) {
int datalen = sndbufsize - buffer_pos; int datalen = sndbufsize - buffer_pos;
ssize_t written;
to_output -= datalen; to_output -= datalen;
calc_buffer(sound_buffer + buffer_pos, datalen*2); calc_buffer(sound_buffer + buffer_pos, datalen*2);
write(devfd, sound_buffer, sndbufsize*2); written = write(devfd, sound_buffer, sndbufsize*2);
if (written < 0)
warning("Failed to write sound\n");
buffer_pos = 0; buffer_pos = 0;
} }
} }
@ -146,77 +140,3 @@ void DigitalRenderer::EmulateLine(void)
return; return;
this->PushVolume(volume); this->PushVolume(volume);
} }
/*
* Renderer for Catweasel card
*/
// Renderer class
class CatweaselRenderer : public SIDRenderer {
public:
CatweaselRenderer();
virtual ~CatweaselRenderer();
virtual void Reset(void);
virtual void EmulateLine(void) {}
virtual void PushVolume(uint8) {}
virtual void WriteRegister(uint16 adr, uint8 byte);
virtual void NewPrefs(Prefs *prefs) {}
virtual void Pause(void) {}
virtual void Resume(void) {}
private:
int cwsid_fh; // Catweasel device file handle
};
// Constructor: Open Catweasel device and reset SID
CatweaselRenderer::CatweaselRenderer()
{
cwsid_fh = open("/dev/sid", O_WRONLY);
if (cwsid_fh >= 0) {
int i;
if (ioctl(cwsid_fh, CWSID_IOCTL_CARDTYPE, &i) < 0 || i != CWSID_MAGIC) {
close(cwsid_fh);
cwsid_fh = -1;
} else {
ioctl(cwsid_fh, CWSID_IOCTL_RESET);
ioctl(cwsid_fh, CWSID_IOCTL_DOUBLEBUFFER, 0);
}
}
Reset();
}
// Destructor: Reset SID and close Catweasel device
CatweaselRenderer::~CatweaselRenderer()
{
Reset();
if (cwsid_fh >= 0) {
close(cwsid_fh);
cwsid_fh = -1;
}
}
// Reset SID
void CatweaselRenderer::Reset(void)
{
if (cwsid_fh >= 0) {
uint8 zero = 0;
ioctl(cwsid_fh, CWSID_IOCTL_RESET);
lseek(cwsid_fh, 24, SEEK_SET);
write(cwsid_fh, &zero, 1);
}
}
// Write to register
void CatweaselRenderer::WriteRegister(uint16 adr, uint8 byte)
{
if (cwsid_fh >= 0 && adr < 0x1a) {
lseek(cwsid_fh, adr, SEEK_SET);
write(cwsid_fh, &byte, 1);
lseek(cwsid_fh, adr, SEEK_SET);
write(cwsid_fh, &byte, 1);
}
}