Fixed CMS/Game Blaster detection.

This commit is contained in:
SarahW 2017-10-17 21:39:37 +01:00
commit 1e75653c5c

View file

@ -23,6 +23,8 @@ typedef struct cms_t
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];
int pos; int pos;
@ -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;
} }