summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2008-10-10 14:41:22 +0000
committer Aaron Giles <aaron@aarongiles.com>2008-10-10 14:41:22 +0000
commit1a720bdf325efae313f45d4bb1bf6df5290d0c94 (patch)
treed718d78464f29fa1e23c8c0cbabc7661c731a417
parent6d8fbd09cf8961fc0b570520f513b0e196550d8e (diff)
Changed Cube Quest laserdisc override logic. It's still a little hacky but
this works better than the previous attempt.
-rw-r--r--src/emu/machine/ldpr8210.c19
-rw-r--r--src/mame/drivers/cubeqst.c1
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)