mirror of
https://github.com/holub/mame
synced 2025-05-29 17:13:05 +03:00
Added basic ADPCM support to Grand Cross [Angelo Salese]
This commit is contained in:
parent
aa7b8f9323
commit
728b617f74
@ -38,7 +38,8 @@ Stephh's notes (based on the game M68000 code and some tests) :
|
||||
|
||||
/* M6585 */
|
||||
|
||||
static int start, end, bank;
|
||||
static UINT32 msm_start, msm_end, msm_bank;
|
||||
static UINT32 adpcm_start, adpcm_end, adpcm_idle;
|
||||
|
||||
/***********************************************************
|
||||
INTERRUPTS
|
||||
@ -119,7 +120,7 @@ static WRITE16_HANDLER( ioc_w )
|
||||
switch (offset)
|
||||
{
|
||||
// these are all written every frame
|
||||
/*case 0x3b:
|
||||
case 0x3b:
|
||||
case 0xa:
|
||||
case 0xc:
|
||||
case 0xb:
|
||||
@ -127,21 +128,17 @@ static WRITE16_HANDLER( ioc_w )
|
||||
case 0xe:
|
||||
case 0xf:
|
||||
case 0x10:
|
||||
break;
|
||||
case 0x47:
|
||||
popmessage("%04x",data);
|
||||
break;*/
|
||||
break;
|
||||
|
||||
// MSM6585 bank, coin LEDs, maybe others?
|
||||
case 0x44:
|
||||
if (data & 0x10) // Check this, this looks a 8-bit port so it must be bit 12, not 4 -AS
|
||||
bank = 0x100000;
|
||||
else
|
||||
bank = 0;
|
||||
msm_bank = data & 0x1000 ? 0x100000 : 0;
|
||||
okim6295_set_bank_base(devtag_get_device(space->machine, "oki"), 0x40000 * ((data & 0x800)>>11));
|
||||
break;
|
||||
|
||||
case 0x45:
|
||||
//adpcm_idle = 1;
|
||||
break;
|
||||
|
||||
// OKIM6295
|
||||
@ -152,32 +149,38 @@ static WRITE16_HANDLER( ioc_w )
|
||||
|
||||
// MSM6585 ADPCM - mini emulation
|
||||
case 0x60:
|
||||
start &= 0xffff00;
|
||||
start |= (data>>8);
|
||||
msm_start &= 0xffff00;
|
||||
msm_start |= (data>>8);
|
||||
break;
|
||||
case 0x61:
|
||||
start &= 0xff00ff;
|
||||
start |= data;
|
||||
msm_start &= 0xff00ff;
|
||||
msm_start |= data;
|
||||
break;
|
||||
case 0x62:
|
||||
start &= 0x00ffff;
|
||||
start |= (data<<8);
|
||||
msm_start &= 0x00ffff;
|
||||
msm_start |= (data<<8);
|
||||
break;
|
||||
case 0x63:
|
||||
end &= 0xffff00;
|
||||
end |= (data>>8);
|
||||
msm_end &= 0xffff00;
|
||||
msm_end |= (data>>8);
|
||||
break;
|
||||
case 0x64:
|
||||
end &= 0xff00ff;
|
||||
end |= data;
|
||||
msm_end &= 0xff00ff;
|
||||
msm_end |= data;
|
||||
break;
|
||||
case 0x65:
|
||||
end &= 0x00ffff;
|
||||
end |= (data<<8);
|
||||
msm_end &= 0x00ffff;
|
||||
msm_end |= (data<<8);
|
||||
break;
|
||||
case 0x66:
|
||||
if (start < end)
|
||||
if (msm_start < msm_end)
|
||||
{
|
||||
/* data written here is adpcm param? */
|
||||
//popmessage("%08x %08x",msm_start+msm_bank,msm_end);
|
||||
adpcm_idle = 0;
|
||||
msm5205_reset_w(devtag_get_device(space->machine, "msm"),0);
|
||||
adpcm_start = msm_start+msm_bank;
|
||||
adpcm_end = msm_end;
|
||||
// ADPCM_stop(0);
|
||||
// ADPCM_play(0, start+bank, end-start);
|
||||
}
|
||||
@ -197,7 +200,28 @@ static WRITE16_HANDLER( ioc_w )
|
||||
|
||||
|
||||
/* Controlled through ioc? */
|
||||
static void gcp_adpcm_int(const device_config *device)
|
||||
{
|
||||
static UINT8 trigger,adpcm_data;
|
||||
|
||||
if (adpcm_idle)
|
||||
msm5205_reset_w(device,1);
|
||||
if (adpcm_start >= 0x200000 || adpcm_start > adpcm_end)
|
||||
{
|
||||
//msm5205_reset_w(device,1);
|
||||
adpcm_start = msm_start+msm_bank;
|
||||
trigger = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
UINT8 *ROM = memory_region(device->machine, "msm");
|
||||
|
||||
adpcm_data = ((trigger ? (ROM[adpcm_start] & 0x0f) : (ROM[adpcm_start] & 0xf0)>>4) );
|
||||
msm5205_data_w(device,adpcm_data & 0xf);
|
||||
trigger^=1;
|
||||
if(trigger == 0) { adpcm_start++; }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************
|
||||
@ -357,10 +381,15 @@ GFXDECODE_END
|
||||
|
||||
static const msm5205_interface msm5205_config =
|
||||
{
|
||||
NULL, /* VCK function */
|
||||
gcp_adpcm_int, /* VCK function */
|
||||
MSM5205_S48_4B /* 8 kHz */
|
||||
};
|
||||
|
||||
static MACHINE_RESET( gcpinbal )
|
||||
{
|
||||
adpcm_idle = 1;
|
||||
}
|
||||
|
||||
/***********************************************************
|
||||
MACHINE DRIVERS
|
||||
***********************************************************/
|
||||
@ -383,6 +412,8 @@ static MACHINE_DRIVER_START( gcpinbal )
|
||||
MDRV_GFXDECODE(gcpinbal)
|
||||
MDRV_PALETTE_LENGTH(4096)
|
||||
|
||||
MDRV_MACHINE_RESET(gcpinbal)
|
||||
|
||||
MDRV_VIDEO_START(gcpinbal)
|
||||
MDRV_VIDEO_UPDATE(gcpinbal)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user