Minor changes
This commit is contained in:
@@ -73,13 +73,13 @@ uint8_t cs423x_read(uint16_t addr, void *p)
|
|||||||
cs423x_t *cs423x = (cs423x_t *)p;
|
cs423x_t *cs423x = (cs423x_t *)p;
|
||||||
uint8_t temp = 0xff;
|
uint8_t temp = 0xff;
|
||||||
|
|
||||||
if(cs423x->initb)
|
if (cs423x->initb)
|
||||||
return 0x80;
|
return 0x80;
|
||||||
|
|
||||||
switch (addr & 3)
|
switch (addr & 3)
|
||||||
{
|
{
|
||||||
case 0: /*Index*/
|
case 0: /*Index*/
|
||||||
if(cs423x->mode2)
|
if (cs423x->mode2)
|
||||||
temp = cs423x->index | cs423x->trd | cs423x->mce | cs423x->ia4 | cs423x->initb;
|
temp = cs423x->index | cs423x->trd | cs423x->mce | cs423x->ia4 | cs423x->initb;
|
||||||
else
|
else
|
||||||
temp = cs423x->index | cs423x->trd | cs423x->mce | cs423x->initb;
|
temp = cs423x->index | cs423x->trd | cs423x->mce | cs423x->initb;
|
||||||
@@ -118,7 +118,7 @@ void cs423x_write(uint16_t addr, uint8_t val, void *p)
|
|||||||
switch (cs423x->index)
|
switch (cs423x->index)
|
||||||
{
|
{
|
||||||
case 8:
|
case 8:
|
||||||
freq = (double) ((val & 1) ? 16934400LL : 24576000LL);
|
freq = (double)((val & 1) ? 16934400LL : 24576000LL);
|
||||||
switch ((val >> 1) & 7)
|
switch ((val >> 1) & 7)
|
||||||
{
|
{
|
||||||
case 0: freq /= 3072; break;
|
case 0: freq /= 3072; break;
|
||||||
@@ -179,8 +179,8 @@ void cs423x_update(cs423x_t *cs423x)
|
|||||||
{
|
{
|
||||||
for (; cs423x->pos < sound_pos_global; cs423x->pos++)
|
for (; cs423x->pos < sound_pos_global; cs423x->pos++)
|
||||||
{
|
{
|
||||||
cs423x->buffer[cs423x->pos*2] = cs423x->out_l;
|
cs423x->buffer[cs423x->pos * 2] = cs423x->out_l;
|
||||||
cs423x->buffer[cs423x->pos*2 + 1] = cs423x->out_r;
|
cs423x->buffer[cs423x->pos * 2 + 1] = cs423x->out_r;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -199,7 +199,7 @@ static void cs423x_poll(void *p)
|
|||||||
{
|
{
|
||||||
int32_t temp;
|
int32_t temp;
|
||||||
|
|
||||||
if(!(cs423x->mode2)) {
|
if (!(cs423x->mode2)) {
|
||||||
switch (cs423x->regs[8] & 0x70)
|
switch (cs423x->regs[8] & 0x70)
|
||||||
{
|
{
|
||||||
case 0x00: /*Mono, 8-bit PCM*/
|
case 0x00: /*Mono, 8-bit PCM*/
|
||||||
|
|||||||
@@ -147,9 +147,9 @@ typedef struct {
|
|||||||
} gus_t;
|
} gus_t;
|
||||||
|
|
||||||
|
|
||||||
static const int gus_irqs[8] = {-1, 2, 5, 3, 7, 11, 12, 15};
|
static const int gus_irqs[8] = { -1, 2, 5, 3, 7, 11, 12, 15 };
|
||||||
static const int gus_irqs_midi[8] = {-1, 2, 5, 3, 7, 11, 12, 15};
|
static const int gus_irqs_midi[8] = { -1, 2, 5, 3, 7, 11, 12, 15 };
|
||||||
static const int gus_dmas[8] = {-1, 1, 3, 5, 6, 7, -1, -1};
|
static const int gus_dmas[8] = { -1, 1, 3, 5, 6, 7, -1, -1 };
|
||||||
static const int gusfreqs[] = {
|
static const int gusfreqs[] = {
|
||||||
44100, 41160, 38587, 36317, 34300, 32494, 30870, 29400,
|
44100, 41160, 38587, 36317, 34300, 32494, 30870, 29400,
|
||||||
28063, 26843, 25725, 24696, 23746, 22866, 22050, 21289,
|
28063, 26843, 25725, 24696, 23746, 22866, 22050, 21289,
|
||||||
@@ -223,13 +223,15 @@ midi_update_int_status(gus_t *dev)
|
|||||||
if ((dev->midi_ctrl & MIDI_CTRL_TRANSMIT_MASK) == MIDI_CTRL_TRANSMIT && (dev->midi_status & MIDI_INT_TRANSMIT)) {
|
if ((dev->midi_ctrl & MIDI_CTRL_TRANSMIT_MASK) == MIDI_CTRL_TRANSMIT && (dev->midi_status & MIDI_INT_TRANSMIT)) {
|
||||||
dev->midi_status |= MIDI_INT_MASTER;
|
dev->midi_status |= MIDI_INT_MASTER;
|
||||||
dev->irqstatus |= GUS_INT_MIDI_TRANSMIT;
|
dev->irqstatus |= GUS_INT_MIDI_TRANSMIT;
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
dev->irqstatus &= ~GUS_INT_MIDI_TRANSMIT;
|
dev->irqstatus &= ~GUS_INT_MIDI_TRANSMIT;
|
||||||
|
|
||||||
if ((dev->midi_ctrl & MIDI_CTRL_RECEIVE) && (dev->midi_status & MIDI_INT_RECEIVE)) {
|
if ((dev->midi_ctrl & MIDI_CTRL_RECEIVE) && (dev->midi_status & MIDI_INT_RECEIVE)) {
|
||||||
dev->midi_status |= MIDI_INT_MASTER;
|
dev->midi_status |= MIDI_INT_MASTER;
|
||||||
dev->irqstatus |= GUS_INT_MIDI_RECEIVE;
|
dev->irqstatus |= GUS_INT_MIDI_RECEIVE;
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
dev->irqstatus &= ~GUS_INT_MIDI_RECEIVE;
|
dev->irqstatus &= ~GUS_INT_MIDI_RECEIVE;
|
||||||
|
|
||||||
if ((dev->midi_status & MIDI_INT_MASTER) && (dev->irq_midi != -1)) {
|
if ((dev->midi_status & MIDI_INT_MASTER) && (dev->irq_midi != -1)) {
|
||||||
@@ -264,7 +266,8 @@ gus_write(uint16_t addr, uint8_t val, void *priv)
|
|||||||
if (dev->midi_loopback) {
|
if (dev->midi_loopback) {
|
||||||
dev->midi_status |= MIDI_INT_RECEIVE;
|
dev->midi_status |= MIDI_INT_RECEIVE;
|
||||||
dev->midi_data = val;
|
dev->midi_data = val;
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
dev->midi_status |= MIDI_INT_TRANSMIT;
|
dev->midi_status |= MIDI_INT_TRANSMIT;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -283,29 +286,29 @@ gus_write(uint16_t addr, uint8_t val, void *priv)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 1: /*Frequency control*/
|
case 1: /*Frequency control*/
|
||||||
dev->freq[dev->voice] = (dev->freq[dev->voice]&0xFF00)|val;
|
dev->freq[dev->voice] = (dev->freq[dev->voice] & 0xFF00) | val;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: /*Start addr high*/
|
case 2: /*Start addr high*/
|
||||||
dev->startx[dev->voice] = (dev->startx[dev->voice]&0xF807F)|(val<<7);
|
dev->startx[dev->voice] = (dev->startx[dev->voice] & 0xF807F) | (val << 7);
|
||||||
dev->start[dev->voice] = (dev->start[dev->voice]&0x1F00FFFF)|(val<<16);
|
dev->start[dev->voice] = (dev->start[dev->voice] & 0x1F00FFFF) | (val << 16);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3: /*Start addr low*/
|
case 3: /*Start addr low*/
|
||||||
dev->start[dev->voice] = (dev->start[dev->voice]&0x1FFFFF00)|val;
|
dev->start[dev->voice] = (dev->start[dev->voice] & 0x1FFFFF00) | val;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4: /*End addr high*/
|
case 4: /*End addr high*/
|
||||||
dev->endx[dev->voice] = (dev->endx[dev->voice]&0xF807F)|(val<<7);
|
dev->endx[dev->voice] = (dev->endx[dev->voice] & 0xF807F) | (val << 7);
|
||||||
dev->end[dev->voice] = (dev->end[dev->voice]&0x1F00FFFF)|(val<<16);
|
dev->end[dev->voice] = (dev->end[dev->voice] & 0x1F00FFFF) | (val << 16);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5: /*End addr low*/
|
case 5: /*End addr low*/
|
||||||
dev->end[dev->voice] = (dev->end[dev->voice]&0x1FFFFF00)|val;
|
dev->end[dev->voice] = (dev->end[dev->voice] & 0x1FFFFF00) | val;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x6: /*Ramp frequency*/
|
case 0x6: /*Ramp frequency*/
|
||||||
dev->rfreq[dev->voice] = (int)( (double)((val & 63)*512)/(double)(1 << (3*(val >> 6))));
|
dev->rfreq[dev->voice] = (int)((double)((val & 63) * 512) / (double)(1 << (3 * (val >> 6))));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x9: /*Current volume*/
|
case 0x9: /*Current volume*/
|
||||||
@@ -313,20 +316,20 @@ gus_write(uint16_t addr, uint8_t val, void *priv)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xA: /*Current addr high*/
|
case 0xA: /*Current addr high*/
|
||||||
dev->cur[dev->voice] = (dev->cur[dev->voice]&0x1F00FFFF)|(val<<16);
|
dev->cur[dev->voice] = (dev->cur[dev->voice] & 0x1F00FFFF) | (val << 16);
|
||||||
dev->curx[dev->voice] = (dev->curx[dev->voice]&0xF807F00)|((val<<7)<<8);
|
dev->curx[dev->voice] = (dev->curx[dev->voice] & 0xF807F00) | ((val << 7) << 8);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xB: /*Current addr low*/
|
case 0xB: /*Current addr low*/
|
||||||
dev->cur[dev->voice] = (dev->cur[dev->voice]&0x1FFFFF00)|val;
|
dev->cur[dev->voice] = (dev->cur[dev->voice] & 0x1FFFFF00) | val;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x42: /*DMA address low*/
|
case 0x42: /*DMA address low*/
|
||||||
dev->dmaaddr = (dev->dmaaddr&0xFF000)|(val<<4);
|
dev->dmaaddr = (dev->dmaaddr & 0xFF000) | (val << 4);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x43: /*Address low*/
|
case 0x43: /*Address low*/
|
||||||
dev->addr = (dev->addr&0xFFF00)|val;
|
dev->addr = (dev->addr & 0xFFF00) | val;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x45: /*Timer control*/
|
case 0x45: /*Timer control*/
|
||||||
@@ -338,7 +341,7 @@ gus_write(uint16_t addr, uint8_t val, void *priv)
|
|||||||
case 0x345: /*Global high*/
|
case 0x345: /*Global high*/
|
||||||
switch (dev->global) {
|
switch (dev->global) {
|
||||||
case 0: /*Voice control*/
|
case 0: /*Voice control*/
|
||||||
if (!(val&1) && dev->ctrl[dev->voice]&1) {
|
if (!(val & 1) && dev->ctrl[dev->voice] & 1) {
|
||||||
}
|
}
|
||||||
|
|
||||||
dev->ctrl[dev->voice] = val & 0x7f;
|
dev->ctrl[dev->voice] = val & 0x7f;
|
||||||
@@ -350,31 +353,31 @@ gus_write(uint16_t addr, uint8_t val, void *priv)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 1: /*Frequency control*/
|
case 1: /*Frequency control*/
|
||||||
dev->freq[dev->voice] = (dev->freq[dev->voice]&0xFF)|(val<<8);
|
dev->freq[dev->voice] = (dev->freq[dev->voice] & 0xFF) | (val << 8);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: /*Start addr high*/
|
case 2: /*Start addr high*/
|
||||||
dev->startx[dev->voice] = (dev->startx[dev->voice]&0x07FFF)|(val<<15);
|
dev->startx[dev->voice] = (dev->startx[dev->voice] & 0x07FFF) | (val << 15);
|
||||||
dev->start[dev->voice] = (dev->start[dev->voice]&0x00FFFFFF)|((val&0x1F)<<24);
|
dev->start[dev->voice] = (dev->start[dev->voice] & 0x00FFFFFF) | ((val & 0x1F) << 24);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3: /*Start addr low*/
|
case 3: /*Start addr low*/
|
||||||
dev->startx[dev->voice] = (dev->startx[dev->voice]&0xFFF80)|(val&0x7F);
|
dev->startx[dev->voice] = (dev->startx[dev->voice] & 0xFFF80) | (val & 0x7F);
|
||||||
dev->start[dev->voice] = (dev->start[dev->voice]&0x1FFF00FF)|(val<<8);
|
dev->start[dev->voice] = (dev->start[dev->voice] & 0x1FFF00FF) | (val << 8);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4: /*End addr high*/
|
case 4: /*End addr high*/
|
||||||
dev->endx[dev->voice] = (dev->endx[dev->voice]&0x07FFF)|(val<<15);
|
dev->endx[dev->voice] = (dev->endx[dev->voice] & 0x07FFF) | (val << 15);
|
||||||
dev->end[dev->voice] = (dev->end[dev->voice]&0x00FFFFFF)|((val&0x1F)<<24);
|
dev->end[dev->voice] = (dev->end[dev->voice] & 0x00FFFFFF) | ((val & 0x1F) << 24);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5: /*End addr low*/
|
case 5: /*End addr low*/
|
||||||
dev->endx[dev->voice] = (dev->endx[dev->voice]&0xFFF80)|(val&0x7F);
|
dev->endx[dev->voice] = (dev->endx[dev->voice] & 0xFFF80) | (val & 0x7F);
|
||||||
dev->end[dev->voice] = (dev->end[dev->voice]&0x1FFF00FF)|(val<<8);
|
dev->end[dev->voice] = (dev->end[dev->voice] & 0x1FFF00FF) | (val << 8);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x6: /*Ramp frequency*/
|
case 0x6: /*Ramp frequency*/
|
||||||
dev->rfreq[dev->voice] = (int)( (double)((val & 63) * (1 << 10))/(double)(1 << (3 * (val >> 6))));
|
dev->rfreq[dev->voice] = (int)((double)((val & 63) * (1 << 10)) / (double)(1 << (3 * (val >> 6))));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x7: /*Ramp start*/
|
case 0x7: /*Ramp start*/
|
||||||
@@ -390,13 +393,13 @@ gus_write(uint16_t addr, uint8_t val, void *priv)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xA: /*Current addr high*/
|
case 0xA: /*Current addr high*/
|
||||||
dev->cur[dev->voice] = (dev->cur[dev->voice]&0x00FFFFFF)|((val&0x1F)<<24);
|
dev->cur[dev->voice] = (dev->cur[dev->voice] & 0x00FFFFFF) | ((val & 0x1F) << 24);
|
||||||
dev->curx[dev->voice] = (dev->curx[dev->voice]&0x07FFF00)|((val<<15)<<8);
|
dev->curx[dev->voice] = (dev->curx[dev->voice] & 0x07FFF00) | ((val << 15) << 8);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xB: /*Current addr low*/
|
case 0xB: /*Current addr low*/
|
||||||
dev->cur[dev->voice] = (dev->cur[dev->voice]&0x1FFF00FF)|(val<<8);
|
dev->cur[dev->voice] = (dev->cur[dev->voice] & 0x1FFF00FF) | (val << 8);
|
||||||
dev->curx[dev->voice] = (dev->curx[dev->voice]&0xFFF8000)|((val&0x7F)<<8);
|
dev->curx[dev->voice] = (dev->curx[dev->voice] & 0xFFF8000) | ((val & 0x7F) << 8);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0xC: /*Pan*/
|
case 0xC: /*Pan*/
|
||||||
@@ -414,8 +417,8 @@ gus_write(uint16_t addr, uint8_t val, void *priv)
|
|||||||
|
|
||||||
case 0xE:
|
case 0xE:
|
||||||
dev->voices = (val & 63) + 1;
|
dev->voices = (val & 63) + 1;
|
||||||
if (dev->voices>32) dev->voices = 32;
|
if (dev->voices > 32) dev->voices = 32;
|
||||||
if (dev->voices<14) dev->voices = 14;
|
if (dev->voices < 14) dev->voices = 14;
|
||||||
dev->global = val;
|
dev->global = val;
|
||||||
if (dev->voices < 14)
|
if (dev->voices < 14)
|
||||||
dev->samp_latch = (int)(TIMER_USEC * (1000000.0 / 44100.0));
|
dev->samp_latch = (int)(TIMER_USEC * (1000000.0 / 44100.0));
|
||||||
@@ -424,7 +427,7 @@ gus_write(uint16_t addr, uint8_t val, void *priv)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x41: /*DMA*/
|
case 0x41: /*DMA*/
|
||||||
if (val&1 && dev->dma != -1) {
|
if (val & 1 && dev->dma != -1) {
|
||||||
if (val & 2) {
|
if (val & 2) {
|
||||||
c = 0;
|
c = 0;
|
||||||
while (c < 65536) {
|
while (c < 65536) {
|
||||||
@@ -438,7 +441,8 @@ gus_write(uint16_t addr, uint8_t val, void *priv)
|
|||||||
dma_result = dma_channel_write(dev->dma, d);
|
dma_result = dma_channel_write(dev->dma, d);
|
||||||
if (dma_result == DMA_NODATA)
|
if (dma_result == DMA_NODATA)
|
||||||
break;
|
break;
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
d = dev->ram[dev->dmaaddr];
|
d = dev->ram[dev->dmaaddr];
|
||||||
if (val & 0x80)
|
if (val & 0x80)
|
||||||
d ^= 0x80;
|
d ^= 0x80;
|
||||||
@@ -455,7 +459,8 @@ gus_write(uint16_t addr, uint8_t val, void *priv)
|
|||||||
dev->dmactrl = val & ~0x40;
|
dev->dmactrl = val & ~0x40;
|
||||||
if (val & 0x20)
|
if (val & 0x20)
|
||||||
dev->irqnext = 1;
|
dev->irqnext = 1;
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
c = 0;
|
c = 0;
|
||||||
while (c < 65536) {
|
while (c < 65536) {
|
||||||
d = dma_channel_read(dev->dma);
|
d = dma_channel_read(dev->dma);
|
||||||
@@ -466,8 +471,9 @@ gus_write(uint16_t addr, uint8_t val, void *priv)
|
|||||||
if (val & 0x80)
|
if (val & 0x80)
|
||||||
d ^= 0x8080;
|
d ^= 0x8080;
|
||||||
dev->ram[gus_addr] = d & 0xff;
|
dev->ram[gus_addr] = d & 0xff;
|
||||||
dev->ram[gus_addr +1] = (d >> 8) & 0xff;
|
dev->ram[gus_addr + 1] = (d >> 8) & 0xff;
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
if (val & 0x80)
|
if (val & 0x80)
|
||||||
d ^= 0x80;
|
d ^= 0x80;
|
||||||
dev->ram[dev->dmaaddr] = d;
|
dev->ram[dev->dmaaddr] = d;
|
||||||
@@ -486,25 +492,25 @@ gus_write(uint16_t addr, uint8_t val, void *priv)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x42: /*DMA address low*/
|
case 0x42: /*DMA address low*/
|
||||||
dev->dmaaddr = (dev->dmaaddr&0xFF0)|(val<<12);
|
dev->dmaaddr = (dev->dmaaddr & 0xFF0) | (val << 12);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x43: /*Address low*/
|
case 0x43: /*Address low*/
|
||||||
dev->addr = (dev->addr&0xF00FF)|(val<<8);
|
dev->addr = (dev->addr & 0xF00FF) | (val << 8);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x44: /*Address high*/
|
case 0x44: /*Address high*/
|
||||||
dev->addr = (dev->addr&0xFFFF)|((val<<16)&0xF0000);
|
dev->addr = (dev->addr & 0xFFFF) | ((val << 16) & 0xF0000);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x45: /*Timer control*/
|
case 0x45: /*Timer control*/
|
||||||
if (! (val & 4)) dev->irqstatus &= ~4;
|
if (!(val & 4)) dev->irqstatus &= ~4;
|
||||||
if (! (val & 8)) dev->irqstatus &= ~8;
|
if (!(val & 8)) dev->irqstatus &= ~8;
|
||||||
if (! (val & 0x20)) {
|
if (!(val & 0x20)) {
|
||||||
dev->ad_status &= ~0x18;
|
dev->ad_status &= ~0x18;
|
||||||
nmi = 0;
|
nmi = 0;
|
||||||
}
|
}
|
||||||
if (! (val & 0x02)) {
|
if (!(val & 0x02)) {
|
||||||
dev->ad_status &= ~0x01;
|
dev->ad_status &= ~0x01;
|
||||||
nmi = 0;
|
nmi = 0;
|
||||||
}
|
}
|
||||||
@@ -548,10 +554,12 @@ gus_write(uint16_t addr, uint8_t val, void *priv)
|
|||||||
else if (dev->irq != -1)
|
else if (dev->irq != -1)
|
||||||
picint(1 << dev->irq);
|
picint(1 << dev->irq);
|
||||||
}
|
}
|
||||||
} else if (!(dev->tctrl & GUS_TIMER_CTRL_AUTO) && dev->adcommand == 4) {
|
}
|
||||||
|
else if (!(dev->tctrl & GUS_TIMER_CTRL_AUTO) && dev->adcommand == 4) {
|
||||||
if (val & 0x80) {
|
if (val & 0x80) {
|
||||||
dev->ad_status &= ~0x60;
|
dev->ad_status &= ~0x60;
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
dev->ad_timer_ctrl = val;
|
dev->ad_timer_ctrl = val;
|
||||||
|
|
||||||
if (val & 0x01)
|
if (val & 0x01)
|
||||||
@@ -588,7 +596,8 @@ gus_write(uint16_t addr, uint8_t val, void *priv)
|
|||||||
dev->irq = dev->irq_midi = gus_irqs[(val >> 3) & 7];
|
dev->irq = dev->irq_midi = gus_irqs[(val >> 3) & 7];
|
||||||
else
|
else
|
||||||
dev->irq_midi = dev->irq;
|
dev->irq_midi = dev->irq;
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
dev->irq_midi = gus_irqs_midi[(val >> 3) & 7];
|
dev->irq_midi = gus_irqs_midi[(val >> 3) & 7];
|
||||||
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
||||||
cs423x_setirq(&dev->cs423x, dev->irq);
|
cs423x_setirq(&dev->cs423x, dev->irq);
|
||||||
@@ -663,10 +672,10 @@ gus_write(uint16_t addr, uint8_t val, void *priv)
|
|||||||
if (dev->dma >= 4)
|
if (dev->dma >= 4)
|
||||||
val |= 0x30;
|
val |= 0x30;
|
||||||
dev->max_ctrl = (val >> 6) & 1;
|
dev->max_ctrl = (val >> 6) & 1;
|
||||||
pclog (0,"Enable CS4231 %X, val %02X\n", dev->max_ctrl,val);
|
pclog(0, "Enable CS4231 %X, val %02X\n", dev->max_ctrl, val);
|
||||||
if (val & 0x40) {
|
if (val & 0x40) {
|
||||||
if ((val & 0xF) != ((addr >> 4) & 0xF))
|
if ((val & 0xF) != ((addr >> 4) & 0xF))
|
||||||
pclog(0,"DOS application is attempting to relocate the CS4231 codec\n");
|
pclog(0, "DOS application is attempting to relocate the CS4231 codec\n");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -701,7 +710,7 @@ gus_read(uint16_t addr, void *priv)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x24F:
|
case 0x24F:
|
||||||
if(dev->max_ctrl)
|
if (dev->max_ctrl)
|
||||||
val = 0x02;
|
val = 0x02;
|
||||||
else
|
else
|
||||||
val = 0x00;
|
val = 0x00;
|
||||||
@@ -718,23 +727,23 @@ gus_read(uint16_t addr, void *priv)
|
|||||||
case 0x344: /*Global low*/
|
case 0x344: /*Global low*/
|
||||||
switch (dev->global) {
|
switch (dev->global) {
|
||||||
case 0x82: /*Start addr high*/
|
case 0x82: /*Start addr high*/
|
||||||
val = dev->start[dev->voice]>>16;
|
val = dev->start[dev->voice] >> 16;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x83: /*Start addr low*/
|
case 0x83: /*Start addr low*/
|
||||||
val = dev->start[dev->voice]&0xFF;
|
val = dev->start[dev->voice] & 0xFF;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x89: /*Current volume*/
|
case 0x89: /*Current volume*/
|
||||||
val = dev->rcur[dev->voice]>>6;
|
val = dev->rcur[dev->voice] >> 6;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x8A: /*Current addr high*/
|
case 0x8A: /*Current addr high*/
|
||||||
val = dev->cur[dev->voice]>>16;
|
val = dev->cur[dev->voice] >> 16;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x8B: /*Current addr low*/
|
case 0x8B: /*Current addr low*/
|
||||||
val = dev->cur[dev->voice]&0xFF;
|
val = dev->cur[dev->voice] & 0xFF;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x8F: /*IRQ status*/
|
case 0x8F: /*IRQ status*/
|
||||||
@@ -756,27 +765,27 @@ gus_read(uint16_t addr, void *priv)
|
|||||||
case 0x345: /*Global high*/
|
case 0x345: /*Global high*/
|
||||||
switch (dev->global) {
|
switch (dev->global) {
|
||||||
case 0x80: /*Voice control*/
|
case 0x80: /*Voice control*/
|
||||||
val = dev->ctrl[dev->voice]|(dev->waveirqs[dev->voice]?0x80:0);
|
val = dev->ctrl[dev->voice] | (dev->waveirqs[dev->voice] ? 0x80 : 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x82: /*Start addr high*/
|
case 0x82: /*Start addr high*/
|
||||||
val = dev->start[dev->voice]>>24;
|
val = dev->start[dev->voice] >> 24;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x83: /*Start addr low*/
|
case 0x83: /*Start addr low*/
|
||||||
val = dev->start[dev->voice]>>8;
|
val = dev->start[dev->voice] >> 8;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x89: /*Current volume*/
|
case 0x89: /*Current volume*/
|
||||||
val = dev->rcur[dev->voice]>>14;
|
val = dev->rcur[dev->voice] >> 14;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x8A: /*Current addr high*/
|
case 0x8A: /*Current addr high*/
|
||||||
val = dev->cur[dev->voice]>>24;
|
val = dev->cur[dev->voice] >> 24;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x8B: /*Current addr low*/
|
case 0x8B: /*Current addr low*/
|
||||||
val = dev->cur[dev->voice]>>8;
|
val = dev->cur[dev->voice] >> 8;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x8C: /*Pan*/
|
case 0x8C: /*Pan*/
|
||||||
@@ -784,18 +793,18 @@ gus_read(uint16_t addr, void *priv)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x8D:
|
case 0x8D:
|
||||||
val = dev->rctrl[dev->voice]|(dev->rampirqs[dev->voice]?0x80:0);
|
val = dev->rctrl[dev->voice] | (dev->rampirqs[dev->voice] ? 0x80 : 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x8F: /*IRQ status*/
|
case 0x8F: /*IRQ status*/
|
||||||
val = dev->irqstatus2;
|
val = dev->irqstatus2;
|
||||||
dev->rampirqs[dev->irqstatus2&0x1F] = 0;
|
dev->rampirqs[dev->irqstatus2 & 0x1F] = 0;
|
||||||
dev->waveirqs[dev->irqstatus2&0x1F] = 0;
|
dev->waveirqs[dev->irqstatus2 & 0x1F] = 0;
|
||||||
poll_irqs(dev);
|
poll_irqs(dev);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x41: /*DMA control*/
|
case 0x41: /*DMA control*/
|
||||||
val = dev->dmactrl|((dev->irqstatus&0x80)?0x40:0);
|
val = dev->dmactrl | ((dev->irqstatus & 0x80) ? 0x40 : 0);
|
||||||
dev->irqstatus &= ~0x80;
|
dev->irqstatus &= ~0x80;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -999,30 +1008,33 @@ poll_wave(void *priv)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
for (d = 0; d < 32; d++) {
|
for (d = 0; d < 32; d++) {
|
||||||
if (! (dev->ctrl[d] & 3)) {
|
if (!(dev->ctrl[d] & 3)) {
|
||||||
if (dev->ctrl[d] & 4) {
|
if (dev->ctrl[d] & 4) {
|
||||||
addr = dev->cur[d] >> 9;
|
addr = dev->cur[d] >> 9;
|
||||||
addr = (addr & 0xC0000) | ((addr << 1) & 0x3FFFE);
|
addr = (addr & 0xC0000) | ((addr << 1) & 0x3FFFE);
|
||||||
|
|
||||||
if (! (dev->freq[d] >> 10)) { /*Interpolate*/
|
if (!(dev->freq[d] >> 10)) { /*Interpolate*/
|
||||||
vl = (int16_t)(int8_t)((dev->ram[(addr + 1) & 0xFFFFF] ^ 0x80) - 0x80) * (511 - (dev->cur[d] & 511));
|
vl = (int16_t)(int8_t)((dev->ram[(addr + 1) & 0xFFFFF] ^ 0x80) - 0x80) * (511 - (dev->cur[d] & 511));
|
||||||
vl += (int16_t)(int8_t)((dev->ram[(addr + 3) & 0xFFFFF] ^ 0x80) - 0x80) * (dev->cur[d] & 511);
|
vl += (int16_t)(int8_t)((dev->ram[(addr + 3) & 0xFFFFF] ^ 0x80) - 0x80) * (dev->cur[d] & 511);
|
||||||
v = vl >> 9;
|
v = vl >> 9;
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
v = (int16_t)(int8_t)((dev->ram[(addr + 1) & 0xFFFFF] ^ 0x80) - 0x80);
|
v = (int16_t)(int8_t)((dev->ram[(addr + 1) & 0xFFFFF] ^ 0x80) - 0x80);
|
||||||
} else {
|
}
|
||||||
if (! (dev->freq[d] >> 10)) { /*Interpolate*/
|
else {
|
||||||
|
if (!(dev->freq[d] >> 10)) { /*Interpolate*/
|
||||||
vl = ((int8_t)((dev->ram[(dev->cur[d] >> 9) & 0xFFFFF] ^ 0x80) - 0x80)) * (511 - (dev->cur[d] & 511));
|
vl = ((int8_t)((dev->ram[(dev->cur[d] >> 9) & 0xFFFFF] ^ 0x80) - 0x80)) * (511 - (dev->cur[d] & 511));
|
||||||
vl += ((int8_t)((dev->ram[((dev->cur[d] >> 9) + 1) & 0xFFFFF] ^ 0x80) - 0x80)) * (dev->cur[d] & 511);
|
vl += ((int8_t)((dev->ram[((dev->cur[d] >> 9) + 1) & 0xFFFFF] ^ 0x80) - 0x80)) * (dev->cur[d] & 511);
|
||||||
v = vl >> 9;
|
v = vl >> 9;
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
v = (int16_t)(int8_t)((dev->ram[(dev->cur[d] >> 9) & 0xFFFFF] ^ 0x80) - 0x80);
|
v = (int16_t)(int8_t)((dev->ram[(dev->cur[d] >> 9) & 0xFFFFF] ^ 0x80) - 0x80);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((dev->rcur[d] >> 14) > 4095)
|
if ((dev->rcur[d] >> 14) > 4095)
|
||||||
v = (int16_t)((float)v * 24.0 * vol16bit[4095]);
|
v = (int16_t)((float)v * 24.0 * vol16bit[4095]);
|
||||||
else
|
else
|
||||||
v = (int16_t)((float)v * 24.0 * vol16bit[(dev->rcur[d]>>10) & 4095]);
|
v = (int16_t)((float)v * 24.0 * vol16bit[(dev->rcur[d] >> 10) & 4095]);
|
||||||
|
|
||||||
dev->out_l += (v * dev->pan_l[d]) / 7;
|
dev->out_l += (v * dev->pan_l[d]) / 7;
|
||||||
dev->out_r += (v * dev->pan_r[d]) / 7;
|
dev->out_r += (v * dev->pan_r[d]) / 7;
|
||||||
@@ -1033,10 +1045,11 @@ poll_wave(void *priv)
|
|||||||
int diff = dev->start[d] - dev->cur[d];
|
int diff = dev->start[d] - dev->cur[d];
|
||||||
|
|
||||||
if (dev->ctrl[d] & 8) {
|
if (dev->ctrl[d] & 8) {
|
||||||
if (dev->ctrl[d]&0x10)
|
if (dev->ctrl[d] & 0x10)
|
||||||
dev->ctrl[d]^=0x40;
|
dev->ctrl[d] ^= 0x40;
|
||||||
dev->cur[d] = (dev->ctrl[d] & 0x40) ? (dev->end[d] - diff) : (dev->start[d] + diff);
|
dev->cur[d] = (dev->ctrl[d] & 0x40) ? (dev->end[d] - diff) : (dev->start[d] + diff);
|
||||||
} else if (! (dev->rctrl[d] & 4)) {
|
}
|
||||||
|
else if (!(dev->rctrl[d] & 4)) {
|
||||||
dev->ctrl[d] |= 1;
|
dev->ctrl[d] |= 1;
|
||||||
dev->cur[d] = (dev->ctrl[d] & 0x40) ? dev->end[d] : dev->start[d];
|
dev->cur[d] = (dev->ctrl[d] & 0x40) ? dev->end[d] : dev->start[d];
|
||||||
}
|
}
|
||||||
@@ -1046,17 +1059,19 @@ poll_wave(void *priv)
|
|||||||
update_irqs = 1;
|
update_irqs = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
dev->cur[d] += (dev->freq[d] >> 1);
|
dev->cur[d] += (dev->freq[d] >> 1);
|
||||||
|
|
||||||
if (dev->cur[d] >= dev->end[d]) {
|
if (dev->cur[d] >= dev->end[d]) {
|
||||||
int diff = dev->cur[d] - dev->end[d];
|
int diff = dev->cur[d] - dev->end[d];
|
||||||
|
|
||||||
if (dev->ctrl[d] & 8) {
|
if (dev->ctrl[d] & 8) {
|
||||||
if (dev->ctrl[d]&0x10)
|
if (dev->ctrl[d] & 0x10)
|
||||||
dev->ctrl[d]^=0x40;
|
dev->ctrl[d] ^= 0x40;
|
||||||
dev->cur[d] = (dev->ctrl[d] & 0x40) ? (dev->end[d] - diff) : (dev->start[d] + diff);
|
dev->cur[d] = (dev->ctrl[d] & 0x40) ? (dev->end[d] - diff) : (dev->start[d] + diff);
|
||||||
} else if (! (dev->rctrl[d] & 4)) {
|
}
|
||||||
|
else if (!(dev->rctrl[d] & 4)) {
|
||||||
dev->ctrl[d] |= 1;
|
dev->ctrl[d] |= 1;
|
||||||
dev->cur[d] = (dev->ctrl[d] & 0x40) ? dev->end[d] : dev->start[d];
|
dev->cur[d] = (dev->ctrl[d] & 0x40) ? dev->end[d] : dev->start[d];
|
||||||
}
|
}
|
||||||
@@ -1069,16 +1084,17 @@ poll_wave(void *priv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! (dev->rctrl[d] & 3)) {
|
if (!(dev->rctrl[d] & 3)) {
|
||||||
if (dev->rctrl[d] & 0x40) {
|
if (dev->rctrl[d] & 0x40) {
|
||||||
dev->rcur[d] -= dev->rfreq[d];
|
dev->rcur[d] -= dev->rfreq[d];
|
||||||
if (dev->rcur[d] <= dev->rstart[d]) {
|
if (dev->rcur[d] <= dev->rstart[d]) {
|
||||||
int diff = dev->rstart[d] - dev->rcur[d];
|
int diff = dev->rstart[d] - dev->rcur[d];
|
||||||
|
|
||||||
if (! (dev->rctrl[d] & 8)) {
|
if (!(dev->rctrl[d] & 8)) {
|
||||||
dev->rctrl[d] |= 1;
|
dev->rctrl[d] |= 1;
|
||||||
dev->rcur[d] = (dev->rctrl[d] & 0x40) ? dev->rstart[d] : dev->rend[d];
|
dev->rcur[d] = (dev->rctrl[d] & 0x40) ? dev->rstart[d] : dev->rend[d];
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
if (dev->rctrl[d] & 0x10)
|
if (dev->rctrl[d] & 0x10)
|
||||||
dev->rctrl[d] ^= 0x40;
|
dev->rctrl[d] ^= 0x40;
|
||||||
dev->rcur[d] = (dev->rctrl[d] & 0x40) ? (dev->rend[d] - diff) : (dev->rstart[d] + diff);
|
dev->rcur[d] = (dev->rctrl[d] & 0x40) ? (dev->rend[d] - diff) : (dev->rstart[d] + diff);
|
||||||
@@ -1089,15 +1105,17 @@ poll_wave(void *priv)
|
|||||||
update_irqs = 1;
|
update_irqs = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
dev->rcur[d] += dev->rfreq[d];
|
dev->rcur[d] += dev->rfreq[d];
|
||||||
if (dev->rcur[d] >= dev->rend[d]) {
|
if (dev->rcur[d] >= dev->rend[d]) {
|
||||||
int diff = dev->rcur[d] - dev->rend[d];
|
int diff = dev->rcur[d] - dev->rend[d];
|
||||||
|
|
||||||
if (! (dev->rctrl[d] & 8)) {
|
if (!(dev->rctrl[d] & 8)) {
|
||||||
dev->rctrl[d] |= 1;
|
dev->rctrl[d] |= 1;
|
||||||
dev->rcur[d] = (dev->rctrl[d] & 0x40) ? dev->rstart[d] : dev->rend[d];
|
dev->rcur[d] = (dev->rctrl[d] & 0x40) ? dev->rstart[d] : dev->rend[d];
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
if (dev->rctrl[d] & 0x10)
|
if (dev->rctrl[d] & 0x10)
|
||||||
dev->rctrl[d] ^= 0x40;
|
dev->rctrl[d] ^= 0x40;
|
||||||
dev->rcur[d] = (dev->rctrl[d] & 0x40) ? (dev->rend[d] - diff) : (dev->rstart[d] + diff);
|
dev->rcur[d] = (dev->rctrl[d] & 0x40) ? (dev->rend[d] - diff) : (dev->rstart[d] + diff);
|
||||||
@@ -1124,7 +1142,7 @@ get_buffer(int32_t *buffer, int len, void *priv)
|
|||||||
int c;
|
int c;
|
||||||
|
|
||||||
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
||||||
if(dev->max_ctrl)
|
if (dev->max_ctrl)
|
||||||
cs423x_update(&dev->cs423x);
|
cs423x_update(&dev->cs423x);
|
||||||
#endif
|
#endif
|
||||||
gus_update(dev);
|
gus_update(dev);
|
||||||
@@ -1138,7 +1156,7 @@ get_buffer(int32_t *buffer, int len, void *priv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
||||||
if(dev->max_ctrl)
|
if (dev->max_ctrl)
|
||||||
dev->cs423x.pos = 0;
|
dev->cs423x.pos = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1161,7 +1179,7 @@ gus_init(const device_t *info)
|
|||||||
for (c = 0; c < 32; c++) {
|
for (c = 0; c < 32; c++) {
|
||||||
dev->ctrl[c] = 1;
|
dev->ctrl[c] = 1;
|
||||||
dev->rctrl[c] = 1;
|
dev->rctrl[c] = 1;
|
||||||
dev->rfreq[c] = 63*512;
|
dev->rfreq[c] = 63 * 512;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (c = 4095; c >= 0; c--) {
|
for (c = 4095; c >= 0; c--) {
|
||||||
@@ -1169,21 +1187,21 @@ gus_init(const device_t *info)
|
|||||||
out /= 1.002709201; /* 0.0235 dB Steps */
|
out /= 1.002709201; /* 0.0235 dB Steps */
|
||||||
}
|
}
|
||||||
|
|
||||||
// DEBUG("GUS: top volume %f %f %f %f\n",vol16bit[4095],vol16bit[3800],vol16bit[3000],vol16bit[2048]);
|
// DEBUG("GUS: top volume %f %f %f %f\n",vol16bit[4095],vol16bit[3800],vol16bit[3000],vol16bit[2048]);
|
||||||
dev->voices=14;
|
dev->voices = 14;
|
||||||
|
|
||||||
dev->samp_timer = dev->samp_latch = (int64_t)(TIMER_USEC * (1000000.0 / 44100.0));
|
dev->samp_timer = dev->samp_latch = (int64_t)(TIMER_USEC * (1000000.0 / 44100.0));
|
||||||
|
|
||||||
dev->t1l = dev->t2l = 0xff;
|
dev->t1l = dev->t2l = 0xff;
|
||||||
|
|
||||||
io_sethandler(0x0240, 16,
|
io_sethandler(0x0240, 16,
|
||||||
gus_read,NULL,NULL, gus_write,NULL,NULL, dev);
|
gus_read, NULL, NULL, gus_write, NULL, NULL, dev);
|
||||||
io_sethandler(0x0340, 16,
|
io_sethandler(0x0340, 16,
|
||||||
gus_read,NULL,NULL, gus_write,NULL,NULL, dev);
|
gus_read, NULL, NULL, gus_write, NULL, NULL, dev);
|
||||||
io_sethandler(0x0746, 1,
|
io_sethandler(0x0746, 1,
|
||||||
gus_read,NULL,NULL, gus_write,NULL,NULL, dev);
|
gus_read, NULL, NULL, gus_write, NULL, NULL, dev);
|
||||||
io_sethandler(0x0388, 2,
|
io_sethandler(0x0388, 2,
|
||||||
gus_read,NULL,NULL, gus_write,NULL,NULL, dev);
|
gus_read, NULL, NULL, gus_write, NULL, NULL, dev);
|
||||||
|
|
||||||
timer_add(poll_wave, &dev->samp_timer, TIMER_ALWAYS_ENABLED, dev);
|
timer_add(poll_wave, &dev->samp_timer, TIMER_ALWAYS_ENABLED, dev);
|
||||||
timer_add(poll_timer_1, &dev->timer_1, TIMER_ALWAYS_ENABLED, dev);
|
timer_add(poll_timer_1, &dev->timer_1, TIMER_ALWAYS_ENABLED, dev);
|
||||||
@@ -1207,18 +1225,18 @@ gus_max_init(const device_t *info)
|
|||||||
dev->ram = (uint8_t *)mem_alloc(1 << 20); // Maximum 1 Mb RAM
|
dev->ram = (uint8_t *)mem_alloc(1 << 20); // Maximum 1 Mb RAM
|
||||||
memset(dev->ram, 0x00, 1 << 20);
|
memset(dev->ram, 0x00, 1 << 20);
|
||||||
|
|
||||||
for (c=0;c<32;c++) {
|
for (c = 0;c < 32;c++) {
|
||||||
dev->ctrl[c]=1;
|
dev->ctrl[c] = 1;
|
||||||
dev->rctrl[c]=1;
|
dev->rctrl[c] = 1;
|
||||||
dev->rfreq[c]=63*512;
|
dev->rfreq[c] = 63 * 512;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (c=4095;c>=0;c--) {
|
for (c = 4095;c >= 0;c--) {
|
||||||
vol16bit[c]=out;
|
vol16bit[c] = out;
|
||||||
out/=1.002709201;
|
out /= 1.002709201;
|
||||||
}
|
}
|
||||||
|
|
||||||
dev->voices=14;
|
dev->voices = 14;
|
||||||
|
|
||||||
dev->samp_timer = dev->samp_latch = (int)(TIMER_USEC * (1000000.0 / 44100.0));
|
dev->samp_timer = dev->samp_latch = (int)(TIMER_USEC * (1000000.0 / 44100.0));
|
||||||
|
|
||||||
@@ -1229,11 +1247,11 @@ gus_max_init(const device_t *info)
|
|||||||
cs423x_setdma(&dev->cs423x, 3);
|
cs423x_setdma(&dev->cs423x, 3);
|
||||||
|
|
||||||
io_sethandler(0x0240, 16,
|
io_sethandler(0x0240, 16,
|
||||||
gus_read,NULL,NULL, gus_write,NULL,NULL, dev);
|
gus_read, NULL, NULL, gus_write, NULL, NULL, dev);
|
||||||
io_sethandler(0x0340, 9,
|
io_sethandler(0x0340, 9,
|
||||||
gus_read,NULL,NULL, gus_write,NULL,NULL, dev);
|
gus_read, NULL, NULL, gus_write, NULL, NULL, dev);
|
||||||
io_sethandler(0x0746, 1,
|
io_sethandler(0x0746, 1,
|
||||||
gus_read,NULL,NULL, gus_write,NULL,NULL, dev);
|
gus_read, NULL, NULL, gus_write, NULL, NULL, dev);
|
||||||
io_sethandler(0x0388, 2,
|
io_sethandler(0x0388, 2,
|
||||||
gus_read, NULL, NULL, gus_write, NULL, NULL, dev);
|
gus_read, NULL, NULL, gus_write, NULL, NULL, dev);
|
||||||
io_sethandler(0x034c, 4,
|
io_sethandler(0x034c, 4,
|
||||||
|
|||||||
Reference in New Issue
Block a user