Innovation SSI-2001 emulation. Using ReSID-FP.
This commit is contained in:
parent
8c8d70c3cf
commit
2ff2210b3b
59 changed files with 16165 additions and 14 deletions
79
src/sound_ssi2001.c
Normal file
79
src/sound_ssi2001.c
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
#include <stdlib.h>
|
||||
#include "ibm.h"
|
||||
#include "device.h"
|
||||
#include "sound.h"
|
||||
|
||||
#include "sound_resid.h"
|
||||
#include "sound_ssi2001.h"
|
||||
|
||||
typedef struct ssi2001_t
|
||||
{
|
||||
void *psid;
|
||||
int16_t buffer[SOUNDBUFLEN * 2];
|
||||
int pos;
|
||||
} ssi2001_t;
|
||||
|
||||
static void ssi2001_poll(void *p)
|
||||
{
|
||||
ssi2001_t *ssi2001 = (ssi2001_t *)p;
|
||||
|
||||
if (ssi2001->pos >= SOUNDBUFLEN) return;
|
||||
|
||||
sid_fillbuf(&ssi2001->buffer[ssi2001->pos], 1, ssi2001->psid);
|
||||
ssi2001->pos++;
|
||||
}
|
||||
|
||||
static void ssi2001_get_buffer(int16_t *buffer, int len, void *p)
|
||||
{
|
||||
ssi2001_t *ssi2001 = (ssi2001_t *)p;
|
||||
int c;
|
||||
|
||||
for (c = 0; c < len * 2; c++)
|
||||
buffer[c] += ssi2001->buffer[c >> 1] / 2;
|
||||
|
||||
ssi2001->pos = 0;
|
||||
}
|
||||
|
||||
static uint8_t ssi2001_read(uint16_t addr, void *p)
|
||||
{
|
||||
return sid_read(addr, p);
|
||||
}
|
||||
|
||||
static void ssi2001_write(uint16_t addr, uint8_t val, void *p)
|
||||
{
|
||||
return sid_write(addr, val, p);
|
||||
}
|
||||
|
||||
void *ssi2001_init()
|
||||
{
|
||||
ssi2001_t *ssi2001 = malloc(sizeof(ssi2001_t));
|
||||
memset(ssi2001, 0, sizeof(ssi2001_t));
|
||||
|
||||
pclog("ssi2001_init\n");
|
||||
ssi2001->psid = sid_init();
|
||||
sid_reset(ssi2001->psid);
|
||||
io_sethandler(0x0280, 0x0020, ssi2001_read, NULL, NULL, ssi2001_write, NULL, NULL, &ssi2001);
|
||||
sound_add_handler(ssi2001_poll, ssi2001_get_buffer, ssi2001);
|
||||
return ssi2001;
|
||||
}
|
||||
|
||||
void ssi2001_close(void *p)
|
||||
{
|
||||
ssi2001_t *ssi2001 = (ssi2001_t *)p;
|
||||
|
||||
sid_close(ssi2001->psid);
|
||||
|
||||
free(ssi2001);
|
||||
}
|
||||
|
||||
device_t ssi2001_device =
|
||||
{
|
||||
"Innovation SSI-2001",
|
||||
0,
|
||||
ssi2001_init,
|
||||
ssi2001_close,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
Loading…
Reference in a new issue