Dev branch: Fix the GUS MAX's CS4231 using the wrong DMA channel
This commit is contained in:
@@ -111,6 +111,7 @@ typedef struct gus_t {
|
|||||||
int irq;
|
int irq;
|
||||||
int dma;
|
int dma;
|
||||||
int irq_midi;
|
int irq_midi;
|
||||||
|
int dma2;
|
||||||
uint16_t base;
|
uint16_t base;
|
||||||
int latch_enable;
|
int latch_enable;
|
||||||
|
|
||||||
@@ -600,9 +601,17 @@ writegus(uint16_t addr, uint8_t val, void *priv)
|
|||||||
gus->sb_nmi = val & 0x80;
|
gus->sb_nmi = val & 0x80;
|
||||||
} else {
|
} else {
|
||||||
gus->dma = gus_dmas[val & 7];
|
gus->dma = gus_dmas[val & 7];
|
||||||
|
|
||||||
|
if (val & 0x40) {
|
||||||
|
if (gus->dma == -1)
|
||||||
|
gus->dma = gus->dma2 = gus_dmas[(val >> 3) & 7];
|
||||||
|
else
|
||||||
|
gus->dma2 = gus->dma;
|
||||||
|
} else
|
||||||
|
gus->dma2 = gus_dmas[(val >> 3) & 7];
|
||||||
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
||||||
if (gus->type == GUS_MAX)
|
if (gus->type == GUS_MAX)
|
||||||
ad1848_setdma(&gus->ad1848, gus->dma);
|
ad1848_setdma(&gus->ad1848, gus->dma2);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -664,7 +673,9 @@ writegus(uint16_t addr, uint8_t val, void *priv)
|
|||||||
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
||||||
if (gus->type == GUS_MAX) {
|
if (gus->type == GUS_MAX) {
|
||||||
if (gus->dma >= 4)
|
if (gus->dma >= 4)
|
||||||
val |= 0x30;
|
val |= 0x10;
|
||||||
|
if (gus->dma2 >= 4)
|
||||||
|
val |= 0x20;
|
||||||
gus->max_ctrl = (val >> 6) & 1;
|
gus->max_ctrl = (val >> 6) & 1;
|
||||||
if (val & 0x40) {
|
if (val & 0x40) {
|
||||||
if ((val & 0xF) != ((addr >> 4) & 0xF)) {
|
if ((val & 0xF) != ((addr >> 4) & 0xF)) {
|
||||||
|
Reference in New Issue
Block a user