Simplified IRQ routine on PC Engine CD

This commit is contained in:
Angelo Salese 2013-01-03 02:12:16 +00:00
parent 3973d15188
commit 7fba1bbe48
4 changed files with 17 additions and 56 deletions

View File

@ -674,15 +674,15 @@ ROM_END
#define rom_sgx rom_pce
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
CONS( 1987, pce, 0, 0, pce, pce, pce_state, mess_pce, "Nippon Electronic Company", "PC Engine", GAME_IMPERFECT_SOUND)
CONS( 1989, tg16, pce, 0, tg16, pce, pce_state, tg16, "Nippon Electronic Company", "TurboGrafx 16", GAME_IMPERFECT_SOUND)
CONS( 1989, sgx, pce, 0, sgx, pce, pce_state, sgx, "Nippon Electronic Company", "SuperGrafx", GAME_IMPERFECT_SOUND)
CONS( 1987, pce, 0, 0, pce, pce, pce_state, mess_pce, "Nippon Electronic Company", "PC Engine", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND)
CONS( 1989, tg16, pce, 0, tg16, pce, pce_state, tg16, "Nippon Electronic Company", "TurboGrafx 16",GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND)
CONS( 1989, sgx, pce, 0, sgx, pce, pce_state, sgx, "Nippon Electronic Company", "SuperGrafx",GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND)
/* Experimental versions of drivers using newer but slower device implementation of the video chips */
#define rom_pce_new rom_pce
#define rom_tg16_new rom_pce
#define rom_sgx_new rom_pce
CONS( 1987, pce_new, 0, 0, pce_new, pce, pce_state, mess_pce, "Nippon Electronic Company", "PC Engine", GAME_IMPERFECT_SOUND)
CONS( 1989, tg16_new, pce_new, 0, tg16_new, pce, pce_state, tg16, "Nippon Electronic Company", "TurboGrafx 16", GAME_IMPERFECT_SOUND)
CONS( 1989, sgx_new, pce_new, 0, sgx_new, pce, pce_state, sgx, "Nippon Electronic Company", "SuperGrafx", GAME_IMPERFECT_SOUND)
CONS( 1987, pce_new, 0, 0, pce_new, pce, pce_state, mess_pce, "Nippon Electronic Company", "PC Engine (NEW video core)", GAME_IMPERFECT_SOUND)
CONS( 1989, tg16_new, pce_new, 0, tg16_new, pce, pce_state, tg16, "Nippon Electronic Company", "TurboGrafx 16 (NEW video core)", GAME_IMPERFECT_SOUND)
CONS( 1989, sgx_new, pce_new, 0, sgx_new, pce, pce_state, sgx, "Nippon Electronic Company", "SuperGrafx (NEW video core)", GAME_IMPERFECT_SOUND)

View File

@ -21,7 +21,7 @@
- telerobo: hangs after winning first match;
- vlab: doesn't boot (irq issue?)
- wariolnd: brightness gets suddently darker during intro.
\
****************************************************************************/
#include "emu.h"

View File

@ -69,6 +69,7 @@ CD Interface Register 0x0f - ADPCM fade in/out register
#define PCE_CD_IRQ_TRANSFER_READY 0x40
#define PCE_CD_IRQ_TRANSFER_DONE 0x20
#define PCE_CD_IRQ_BRAM 0x10 /* ??? */
#define PCE_CD_IRQ_SAMPLE_FULL_PLAY 0x08
#define PCE_CD_IRQ_SAMPLE_HALF_PLAY 0x04
@ -454,7 +455,7 @@ static void pce_cd_msm5205_int(device_t *device)
static void pce_cd_reply_status_byte( pce_state *state, UINT8 status )
{
pce_cd_t &pce_cd = state->m_cd;
logerror("Setting CD in reply_status_byte\n");
logerror("Setting CD in reply_status_byte\n");
pce_cd.scsi_CD = pce_cd.scsi_IO = pce_cd.scsi_REQ = 1;
pce_cd.scsi_MSG = 0;
pce_cd.message_after_status = 1;
@ -1060,56 +1061,15 @@ static void pce_cd_set_irq_line( running_machine &machine, int num, int state )
{
pce_state *drvstate = machine.driver_data<pce_state>();
pce_cd_t &pce_cd = drvstate->m_cd;
switch( num )
{
case PCE_CD_IRQ_TRANSFER_DONE:
if ( state == ASSERT_LINE )
{
pce_cd.regs[0x03] |= PCE_CD_IRQ_TRANSFER_DONE;
}
else
{
pce_cd.regs[0x03] &= ~ PCE_CD_IRQ_TRANSFER_DONE;
}
break;
case PCE_CD_IRQ_TRANSFER_READY:
if ( state == ASSERT_LINE )
{
pce_cd.regs[0x03] |= PCE_CD_IRQ_TRANSFER_READY;
}
else
{
pce_cd.regs[0x03] &= ~ PCE_CD_IRQ_TRANSFER_READY;
}
break;
case PCE_CD_IRQ_SAMPLE_FULL_PLAY:
if ( state == ASSERT_LINE )
{
pce_cd.regs[0x03] |= PCE_CD_IRQ_SAMPLE_FULL_PLAY;
//printf("x %02x %02x\n",pce_cd.regs[0x02],pce_cd.regs[0x03]);
}
else
{
pce_cd.regs[0x03] &= ~ PCE_CD_IRQ_SAMPLE_FULL_PLAY;
}
break;
case PCE_CD_IRQ_SAMPLE_HALF_PLAY:
if ( state == ASSERT_LINE )
{
pce_cd.regs[0x03] |= PCE_CD_IRQ_SAMPLE_HALF_PLAY;
//printf("y %02x %02x\n",pce_cd.regs[0x02],pce_cd.regs[0x03]);
}
else
{
pce_cd.regs[0x03] &= ~ PCE_CD_IRQ_SAMPLE_HALF_PLAY;
}
break;
default:
break;
}
if ( pce_cd.regs[0x02] & pce_cd.regs[0x03] & ( PCE_CD_IRQ_TRANSFER_DONE | PCE_CD_IRQ_TRANSFER_READY | PCE_CD_IRQ_SAMPLE_HALF_PLAY | PCE_CD_IRQ_SAMPLE_FULL_PLAY) )
if(state == ASSERT_LINE)
pce_cd.regs[0x03] |= num;
else
pce_cd.regs[0x03] &= ~num;
if ( pce_cd.regs[0x02] & pce_cd.regs[0x03] & 0x7c )
{
//printf("IRQ PEND = %02x MASK = %02x IRQ ENABLE %02X\n",pce_cd.regs[0x02] & pce_cd.regs[0x03] & 0x7c,pce_cd.regs[0x02] & 0x7c,pce_cd.regs[0x03] & 0x7c);
machine.device("maincpu")->execute().set_input_line(1, ASSERT_LINE );
}
else

View File

@ -219,6 +219,7 @@ tg16 // Turbo Grafix-16 NEC 1989-1993
sgx // SuperGrafX NEC 1989
pcfx // PC-FX NEC 1994
pcfxga // PC-FX NEC 199? (PC-FX on a PC ISA Card)
//pce_new
// Arcadia 2001 family
advsnha // Advision Home Arcade