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; /* 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))
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user