Changed Cube Quest laserdisc override logic. It's still a little hacky but

this works better than the previous attempt.
This commit is contained in:
Aaron Giles 2008-10-10 14:41:22 +00:00
parent 6d8fbd09cf
commit 1a720bdf32
2 changed files with 15 additions and 5 deletions

View File

@ -91,7 +91,8 @@ struct _simutrek_data
UINT8 data; /* parallel data for simutrek */ UINT8 data; /* parallel data for simutrek */
UINT8 data_ready; /* ready flag for simutrek data */ UINT8 data_ready; /* ready flag for simutrek data */
UINT8 port2; /* 8748 port 2 state */ UINT8 port2; /* 8748 port 2 state */
UINT8 jumphack; UINT8 controlnext; /* latch to control next pair of fields */
UINT8 controlthis; /* latched value for our control over the current pair of fields */
}; };
@ -797,12 +798,11 @@ static WRITE8_HANDLER( pr8210_port1_w )
if (!(data & 0x01) && (prev & 0x01)) if (!(data & 0x01) && (prev & 0x01))
{ {
/* special override for the Simutrek, which takes over control of this is some situations */ /* special override for the Simutrek, which takes over control of this is some situations */
if (player->simutrek.cpunum == -1 || (player->simutrek.port2 & 0x04) != 0 || player->simutrek.jumphack) if (player->simutrek.cpunum == -1 || !player->simutrek.controlthis)
{ {
if (LOG_SIMUTREK) if (LOG_SIMUTREK)
printf("%3d:JUMP TRG\n", video_screen_get_vpos(ld->screen)); printf("%3d:JUMP TRG\n", video_screen_get_vpos(ld->screen));
ldcore_advance_slider(ld, direction); ldcore_advance_slider(ld, direction);
player->simutrek.jumphack = 0;
} }
else if (LOG_SIMUTREK) else if (LOG_SIMUTREK)
printf("%3d:Skipped JUMP TRG\n", video_screen_get_vpos(ld->screen)); printf("%3d:Skipped JUMP TRG\n", video_screen_get_vpos(ld->screen));
@ -1070,6 +1070,8 @@ void simutrek_set_audio_squelch(const device_config *device, int state)
{ {
laserdisc_state *ld = ldcore_get_safe_token(device); laserdisc_state *ld = ldcore_get_safe_token(device);
ldplayer_data *player = ld->player; ldplayer_data *player = ld->player;
if (LOG_SIMUTREK && player->simutrek.audio_squelch != (state == 0))
printf("--> audio squelch = %d\n", state == 0);
player->simutrek.audio_squelch = (state == 0); player->simutrek.audio_squelch = (state == 0);
update_audio_squelch(ld); update_audio_squelch(ld);
} }
@ -1111,6 +1113,12 @@ static void simutrek_vsync(laserdisc_state *ld, const vbi_metadata *vbi, int fie
{ {
ldplayer_data *player = ld->player; ldplayer_data *player = ld->player;
if (fieldnum == 1)
{
player->simutrek.controlthis = player->simutrek.controlnext;
player->simutrek.controlnext = 0;
}
if (LOG_SIMUTREK) if (LOG_SIMUTREK)
printf("%3d:VSYNC(%d)\n", video_screen_get_vpos(ld->screen), fieldnum); printf("%3d:VSYNC(%d)\n", video_screen_get_vpos(ld->screen), fieldnum);
pr8210_vsync(ld, vbi, fieldnum, curtime); pr8210_vsync(ld, vbi, fieldnum, curtime);
@ -1231,8 +1239,9 @@ static WRITE8_HANDLER( simutrek_port2_w )
} }
/* bit $04 controls who owns the JUMP TRG command */ /* bit $04 controls who owns the JUMP TRG command */
if (!(data & 0x04) && (prev & 0x04)) if (LOG_SIMUTREK && ((data ^ prev) & 0x04))
player->simutrek.jumphack = 1; printf("%3d:Simutrek ownership line = %d (Simutrek PC=%03X)\n", video_screen_get_vpos(ld->screen), (data >> 2) & 1, activecpu_get_pc());
player->simutrek.controlnext = (~data >> 2) & 1;
/* bits $03 control something (status?) */ /* bits $03 control something (status?) */
if (LOG_SIMUTREK && ((data ^ prev) & 0x03)) if (LOG_SIMUTREK && ((data ^ prev) & 0x03))

View File

@ -404,6 +404,7 @@ INPUT_PORTS_END
*************************************/ *************************************/
static ADDRESS_MAP_START( m68k_program_map, ADDRESS_SPACE_PROGRAM, 16 ) static ADDRESS_MAP_START( m68k_program_map, ADDRESS_SPACE_PROGRAM, 16 )
ADDRESS_MAP_GLOBAL_MASK(0x03ffff)
AM_RANGE(0x000000, 0x01ffff) AM_ROM AM_RANGE(0x000000, 0x01ffff) AM_ROM
AM_RANGE(0x020000, 0x027fff) AM_READWRITE(read_rotram, write_rotram) AM_RANGE(0x020000, 0x027fff) AM_READWRITE(read_rotram, write_rotram)
AM_RANGE(0x028000, 0x028fff) AM_READWRITE(read_sndram, write_sndram) AM_RANGE(0x028000, 0x028fff) AM_READWRITE(read_sndram, write_sndram)