mirror of
https://github.com/holub/mame
synced 2025-10-07 09:25:34 +03:00
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:
parent
6d8fbd09cf
commit
1a720bdf32
@ -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))
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user