From 1a720bdf325efae313f45d4bb1bf6df5290d0c94 Mon Sep 17 00:00:00 2001 From: Aaron Giles Date: Fri, 10 Oct 2008 14:41:22 +0000 Subject: [PATCH] Changed Cube Quest laserdisc override logic. It's still a little hacky but this works better than the previous attempt. --- src/emu/machine/ldpr8210.c | 19 ++++++++++++++----- src/mame/drivers/cubeqst.c | 1 + 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/emu/machine/ldpr8210.c b/src/emu/machine/ldpr8210.c index 790752e367e..1cb6d616091 100644 --- a/src/emu/machine/ldpr8210.c +++ b/src/emu/machine/ldpr8210.c @@ -91,7 +91,8 @@ struct _simutrek_data UINT8 data; /* parallel data for simutrek */ UINT8 data_ready; /* ready flag for simutrek data */ 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)) { /* 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) printf("%3d:JUMP TRG\n", video_screen_get_vpos(ld->screen)); ldcore_advance_slider(ld, direction); - player->simutrek.jumphack = 0; } else if (LOG_SIMUTREK) 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); 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); 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; + if (fieldnum == 1) + { + player->simutrek.controlthis = player->simutrek.controlnext; + player->simutrek.controlnext = 0; + } + if (LOG_SIMUTREK) printf("%3d:VSYNC(%d)\n", video_screen_get_vpos(ld->screen), fieldnum); 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 */ - if (!(data & 0x04) && (prev & 0x04)) - player->simutrek.jumphack = 1; + if (LOG_SIMUTREK && ((data ^ prev) & 0x04)) + 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?) */ if (LOG_SIMUTREK && ((data ^ prev) & 0x03)) diff --git a/src/mame/drivers/cubeqst.c b/src/mame/drivers/cubeqst.c index a8cac7ca8c8..77dfcd1f3e7 100644 --- a/src/mame/drivers/cubeqst.c +++ b/src/mame/drivers/cubeqst.c @@ -404,6 +404,7 @@ INPUT_PORTS_END *************************************/ static ADDRESS_MAP_START( m68k_program_map, ADDRESS_SPACE_PROGRAM, 16 ) + ADDRESS_MAP_GLOBAL_MASK(0x03ffff) AM_RANGE(0x000000, 0x01ffff) AM_ROM AM_RANGE(0x020000, 0x027fff) AM_READWRITE(read_rotram, write_rotram) AM_RANGE(0x028000, 0x028fff) AM_READWRITE(read_sndram, write_sndram)