Fixed CMS/Game Blaster detection.
This commit is contained in:
parent
9a2f541898
commit
1e75653c5c
1 changed files with 30 additions and 10 deletions
|
|
@ -22,6 +22,8 @@ typedef struct cms_t
|
||||||
uint16_t noisefreq[2][2];
|
uint16_t noisefreq[2][2];
|
||||||
int noisecount[2][2];
|
int noisecount[2][2];
|
||||||
int noisetype[2][2];
|
int noisetype[2][2];
|
||||||
|
|
||||||
|
uint8_t latched_data;
|
||||||
|
|
||||||
int16_t buffer[MAXSOUNDBUFLEN * 2];
|
int16_t buffer[MAXSOUNDBUFLEN * 2];
|
||||||
|
|
||||||
|
|
@ -106,12 +108,18 @@ void cms_write(uint16_t addr, uint8_t val, void *p)
|
||||||
int voice;
|
int voice;
|
||||||
int chip = (addr & 2) >> 1;
|
int chip = (addr & 2) >> 1;
|
||||||
|
|
||||||
pclog("cms_write : addr %04X val %02X\n", addr, val);
|
// pclog("cms_write : addr %04X val %02X\n", addr, val);
|
||||||
|
|
||||||
if (addr & 1)
|
switch (addr & 0xf)
|
||||||
cms->addrs[chip] = val & 31;
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
|
case 1:
|
||||||
|
cms->addrs[0] = val & 31;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
cms->addrs[1] = val & 31;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0: case 2:
|
||||||
cms_update(cms);
|
cms_update(cms);
|
||||||
cms->regs[chip][cms->addrs[chip] & 31] = val;
|
cms->regs[chip][cms->addrs[chip] & 31] = val;
|
||||||
switch (cms->addrs[chip] & 31)
|
switch (cms->addrs[chip] & 31)
|
||||||
|
|
@ -140,18 +148,30 @@ void cms_write(uint16_t addr, uint8_t val, void *p)
|
||||||
cms->noisetype[chip][1] = (val >> 4) & 3;
|
cms->noisetype[chip][1] = (val >> 4) & 3;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case 0x6: case 0x7:
|
||||||
|
cms->latched_data = val;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t cms_read(uint16_t addr, void *p)
|
uint8_t cms_read(uint16_t addr, void *p)
|
||||||
{
|
{
|
||||||
cms_t *cms = (cms_t *)p;
|
cms_t *cms = (cms_t *)p;
|
||||||
int chip = (addr & 2) >> 1;
|
|
||||||
|
|
||||||
if (addr & 1)
|
// pclog("cms_read : addr %04X\n", addr);
|
||||||
return cms->addrs[chip];
|
switch (addr & 0xf)
|
||||||
|
{
|
||||||
return cms->regs[chip][cms->addrs[chip] & 31];
|
case 0x1:
|
||||||
|
return cms->addrs[0];
|
||||||
|
case 0x3:
|
||||||
|
return cms->addrs[1];
|
||||||
|
case 0x4:
|
||||||
|
return 0x7f;
|
||||||
|
case 0xa: case 0xb:
|
||||||
|
return cms->latched_data;
|
||||||
|
}
|
||||||
|
return 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *cms_init()
|
void *cms_init()
|
||||||
|
|
@ -160,7 +180,7 @@ void *cms_init()
|
||||||
memset(cms, 0, sizeof(cms_t));
|
memset(cms, 0, sizeof(cms_t));
|
||||||
|
|
||||||
pclog("cms_init\n");
|
pclog("cms_init\n");
|
||||||
io_sethandler(0x0220, 0x0004, cms_read, NULL, NULL, cms_write, NULL, NULL, cms);
|
io_sethandler(0x0220, 0x0010, cms_read, NULL, NULL, cms_write, NULL, NULL, cms);
|
||||||
sound_add_handler(cms_get_buffer, cms);
|
sound_add_handler(cms_get_buffer, cms);
|
||||||
return cms;
|
return cms;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue