Laserdiscs are now devices. Updated all drivers accordingly.

This commit is contained in:
Aaron Giles 2008-07-21 17:02:59 +00:00
parent de171027cc
commit 2f823ff24f
13 changed files with 1220 additions and 1075 deletions

File diff suppressed because it is too large Load Diff

View File

@ -21,11 +21,14 @@
***************************************************************************/
/* types of players supported */
#define LASERDISC_TYPE_PR7820 1 /* Pioneer PR-7820 */
#define LASERDISC_TYPE_LDV1000 2 /* Pioneer LD-V1000 */
#define LASERDISC_TYPE_22VP932 3 /* Phillips 22VP932 (PAL) */
#define LASERDISC_TYPE_LDP1450 4 /* Sony LDP-1450 */
#define LASERDISC_TYPE_PR8210 5 /* Pioneer PR-8210 / LD-V1100 */
enum
{
LASERDISC_TYPE_PIONEER_PR7820, /* Pioneer PR-7820 */
LASERDISC_TYPE_PIONEER_PR8210, /* Pioneer PR-8210 / LD-V1100 */
LASERDISC_TYPE_PIONEER_LDV1000, /* Pioneer LD-V1000 */
LASERDISC_TYPE_PHILLIPS_22VP932, /* Phillips 22VP932 (PAL) */
LASERDISC_TYPE_SONY_LDP1450, /* Sony LDP-1450 */
};
/* laserdisc control lines */
#define LASERDISC_LINE_ENTER 0 /* "ENTER" key/line */
@ -46,13 +49,40 @@
#define LASERDISC_CODE_LINE17 3
#define LASERDISC_CODE_LINE18 4
/* device configuration */
enum
{
LDINFO_INT_TYPE = DEVINFO_INT_DEVICE_SPECIFIC
};
/***************************************************************************
TYPE DEFINITIONS
***************************************************************************/
typedef struct _laserdisc_info laserdisc_info;
typedef struct _laserdisc_config laserdisc_config;
struct _laserdisc_config
{
int type;
int disknum;
const char *soundtag;
};
/***************************************************************************
DEVICE CONFIGURATION MACROS
***************************************************************************/
#define MDRV_LASERDISC_ADD(_tag, _type, _disknum, _soundtag) \
MDRV_DEVICE_ADD(_tag, LASERDISC) \
MDRV_DEVICE_CONFIG_DATA32(laserdisc_config, type, LASERDISC_TYPE_##_type) \
MDRV_DEVICE_CONFIG_DATA32(laserdisc_config, disknum, _disknum) \
MDRV_DEVICE_CONFIG_DATAPTR(laserdisc_config, soundtag, _soundtag)
#define MDRV_LASERDISC_REMOVE(_tag, _type) \
MDRV_DEVICE_REMOVE(_tag, _type)
@ -68,19 +98,23 @@ extern const struct CustomSound_interface laserdisc_custom_interface;
FUNCTION PROTOTYPES
***************************************************************************/
laserdisc_info *laserdisc_init(running_machine *machine, int type, chd_file *chd, int custom_index);
void laserdisc_reset(laserdisc_info *info, int type);
void laserdisc_exit(laserdisc_info *info);
void laserdisc_vsync(laserdisc_info *info);
const char *laserdisc_describe_state(laserdisc_info *info);
UINT32 laserdisc_get_video(laserdisc_info *info, bitmap_t **bitmap);
UINT32 laserdisc_get_field_code(laserdisc_info *info, UINT8 code);
void laserdisc_vsync(const device_config *device);
const char *laserdisc_describe_state(const device_config *device);
UINT32 laserdisc_get_video(const device_config *device, bitmap_t **bitmap);
UINT32 laserdisc_get_field_code(const device_config *device, UINT8 code);
void laserdisc_data_w(laserdisc_info *info, UINT8 data);
void laserdisc_line_w(laserdisc_info *info, UINT8 line, UINT8 newstate);
UINT8 laserdisc_data_r(laserdisc_info *info);
UINT8 laserdisc_line_r(laserdisc_info *info, UINT8 line);
void laserdisc_data_w(const device_config *device, UINT8 data);
void laserdisc_line_w(const device_config *device, UINT8 line, UINT8 newstate);
UINT8 laserdisc_data_r(const device_config *device);
UINT8 laserdisc_line_r(const device_config *device, UINT8 line);
void pr7820_set_slow_speed(laserdisc_info *info, double frame_rate_scaler);
void pr7820_set_slow_speed(const device_config *device, double frame_rate_scaler);
/* ----- device interface ----- */
/* device get info callback */
#define LASERDISC DEVICE_GET_INFO_NAME(laserdisc)
DEVICE_GET_INFO( laserdisc );
#endif /* __LASERDSC_H__ */

View File

@ -268,7 +268,7 @@ static const raster_info predef_raster_table[] =
/*-------------------------------------------------
get_safe_token - makes sure that the passed
in device is, in fact, an IDE controller
in device is, in fact, a voodoo device
-------------------------------------------------*/
INLINE voodoo_state *get_safe_token(const device_config *device)

View File

@ -27,7 +27,7 @@
#include "machine/laserdsc.h"
static laserdisc_info *discinfo;
static const device_config *laserdisc;
static emu_timer *serial_timer;
static UINT8 serial_timer_active;
static UINT16 input_select;
@ -124,7 +124,7 @@ static VIDEO_UPDATE( alg )
fixedvis.max_y++;
/* first lay down the video data */
laserdisc_get_video(discinfo, &vidbitmap);
laserdisc_get_video(laserdisc, &vidbitmap);
if (video_texture == NULL)
video_texture = render_texture_alloc(NULL, NULL);
render_texture_set_bitmap(video_texture, vidbitmap, NULL, 0, TEXFORMAT_YUY16);
@ -140,8 +140,8 @@ static VIDEO_UPDATE( alg )
render_screen_add_quad(screen, 0.0f, 0.0f, 1.0f, 1.0f, MAKE_ARGB(0xff,0xff,0xff,0xff), overlay_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_SCREENTEX(1));
/* display disc information */
if (discinfo != NULL)
popmessage("%s", laserdisc_describe_state(discinfo));
if (laserdisc != NULL)
popmessage("%s", laserdisc_describe_state(laserdisc));
}
return 0;
@ -157,7 +157,8 @@ static VIDEO_UPDATE( alg )
static MACHINE_START( alg )
{
discinfo = laserdisc_init(machine, LASERDISC_TYPE_LDP1450, get_disk_handle(0), 1);
laserdisc = device_list_find_by_tag(machine->config->devicelist, LASERDISC, "laserdisc");
serial_timer = timer_alloc(response_timer, NULL);
serial_timer_active = FALSE;
}
@ -166,7 +167,6 @@ static MACHINE_START( alg )
static MACHINE_RESET( alg )
{
MACHINE_RESET_CALL(amiga);
laserdisc_reset(discinfo, 0);
}
@ -180,16 +180,16 @@ static MACHINE_RESET( alg )
static TIMER_CALLBACK( response_timer )
{
/* if we still have data to send, do it now */
if (laserdisc_line_r(discinfo, LASERDISC_LINE_DATA_AVAIL) == ASSERT_LINE)
if (laserdisc_line_r(laserdisc, LASERDISC_LINE_DATA_AVAIL) == ASSERT_LINE)
{
UINT8 data = laserdisc_data_r(discinfo);
UINT8 data = laserdisc_data_r(laserdisc);
if (data != 0x0a)
mame_printf_debug("Sending serial data = %02X\n", data);
amiga_serial_in_w(data);
}
/* if there's more to come, set another timer */
if (laserdisc_line_r(discinfo, LASERDISC_LINE_DATA_AVAIL) == ASSERT_LINE)
if (laserdisc_line_r(laserdisc, LASERDISC_LINE_DATA_AVAIL) == ASSERT_LINE)
timer_adjust_oneshot(serial_timer, amiga_get_serial_char_period(), 0);
else
serial_timer_active = FALSE;
@ -199,10 +199,10 @@ static TIMER_CALLBACK( response_timer )
static void vsync_callback(void)
{
/* only clock the disc every other frame */
laserdisc_vsync(discinfo);
laserdisc_vsync(laserdisc);
/* if we have data available, set a timer to read it */
if (!serial_timer_active && laserdisc_line_r(discinfo, LASERDISC_LINE_DATA_AVAIL) == ASSERT_LINE)
if (!serial_timer_active && laserdisc_line_r(laserdisc, LASERDISC_LINE_DATA_AVAIL) == ASSERT_LINE)
{
timer_adjust_oneshot(serial_timer, amiga_get_serial_char_period(), 0);
serial_timer_active = TRUE;
@ -213,10 +213,10 @@ static void vsync_callback(void)
static void serial_w(UINT16 data)
{
/* write to the laserdisc player */
laserdisc_data_w(discinfo, data & 0xff);
laserdisc_data_w(laserdisc, data & 0xff);
/* if we have data available, set a timer to read it */
if (!serial_timer_active && laserdisc_line_r(discinfo, LASERDISC_LINE_DATA_AVAIL) == ASSERT_LINE)
if (!serial_timer_active && laserdisc_line_r(laserdisc, LASERDISC_LINE_DATA_AVAIL) == ASSERT_LINE)
{
timer_adjust_oneshot(serial_timer, amiga_get_serial_char_period(), 0);
serial_timer_active = TRUE;
@ -471,6 +471,8 @@ static MACHINE_DRIVER_START( alg_r1 )
MDRV_MACHINE_START(alg)
MDRV_MACHINE_RESET(alg)
MDRV_NVRAM_HANDLER(generic_0fill)
MDRV_LASERDISC_ADD("laserdisc", SONY_LDP1450, 0, "laserdisc")
/* video hardware */
MDRV_VIDEO_ATTRIBUTES(VIDEO_SELF_RENDER)

View File

@ -82,7 +82,7 @@ Side 2 = 0x8F7DDD (or 0x880000 | ( 0x77 << 12 ) | 0x0DDD)
#define CLIFF_ENABLE_SND_1 NODE_01
#define CLIFF_ENABLE_SND_2 NODE_02
static laserdisc_info *discinfo = NULL;
static const device_config *laserdisc;
static int port_bank = 0;
static int phillips_code = 0;
@ -101,7 +101,6 @@ static void video_cleanup(running_machine *machine)
render_texture_free(video_texture);
if (overlay_texture != NULL)
render_texture_free(overlay_texture);
laserdisc_exit(discinfo);
}
static VIDEO_UPDATE( cliff )
@ -109,14 +108,14 @@ static VIDEO_UPDATE( cliff )
/* update the TMS9928A video */
VIDEO_UPDATE_CALL(tms9928a);
if (discinfo != NULL)
if (laserdisc != NULL)
{
bitmap_t *vidbitmap;
rectangle fixedvis = *TMS9928A_get_visarea();
fixedvis.max_x++;
fixedvis.max_y++;
laserdisc_get_video(discinfo, &vidbitmap);
laserdisc_get_video(laserdisc, &vidbitmap);
/* first lay down the video data */
if (video_texture == NULL)
@ -138,8 +137,8 @@ static VIDEO_UPDATE( cliff )
}
/* display disc information */
if (discinfo != NULL)
popmessage("%s", laserdisc_describe_state(discinfo));
if (laserdisc != NULL)
popmessage("%s", laserdisc_describe_state(laserdisc));
return 0;
}
@ -175,7 +174,7 @@ static READ8_HANDLER( cliff_port_r )
static READ8_HANDLER( cliff_phillips_code_r )
{
if ( discinfo != NULL )
if ( laserdisc != NULL )
{
return ( phillips_code >> (8*offset) ) & 0xff;
}
@ -219,7 +218,7 @@ static WRITE8_HANDLER( cliff_irqack_w )
static WRITE8_HANDLER( cliff_ldwire_w )
{
laserdisc_line_w(discinfo,LASERDISC_LINE_CONTROL,(data&1) ? ASSERT_LINE : CLEAR_LINE );
laserdisc_line_w(laserdisc,LASERDISC_LINE_CONTROL,(data&1) ? ASSERT_LINE : CLEAR_LINE );
}
@ -228,7 +227,7 @@ static WRITE8_HANDLER( cliff_ldwire_w )
static INTERRUPT_GEN( cliff_vsync )
{
/* clock the laserdisc and video chip every 60Hz */
laserdisc_vsync(discinfo);
laserdisc_vsync(laserdisc);
TMS9928A_interrupt(machine);
}
@ -239,12 +238,12 @@ static TIMER_CALLBACK( cliff_irq_callback )
switch (param)
{
case 17:
phillips_code = laserdisc_get_field_code(discinfo, LASERDISC_CODE_LINE17);
phillips_code = laserdisc_get_field_code(laserdisc, LASERDISC_CODE_LINE17);
param = 18;
break;
case 18:
phillips_code = laserdisc_get_field_code(discinfo, LASERDISC_CODE_LINE18);
phillips_code = laserdisc_get_field_code(laserdisc, LASERDISC_CODE_LINE18);
param = 17;
break;
}
@ -265,7 +264,7 @@ static void vdp_interrupt (running_machine *machine, int state)
static MACHINE_START( cliffhgr )
{
discinfo = laserdisc_init(machine, LASERDISC_TYPE_PR8210, get_disk_handle(0), 0);
laserdisc = device_list_find_by_tag(machine->config->devicelist, LASERDISC, "laserdisc");
irq_timer = timer_alloc(cliff_irq_callback, NULL);
}
@ -746,6 +745,8 @@ static MACHINE_DRIVER_START( cliffhgr )
MDRV_NVRAM_HANDLER(generic_0fill)
MDRV_LASERDISC_ADD("laserdisc", PIONEER_PR8210, 0, "laserdisc")
/* start with the TMS9928a video configuration */
MDRV_IMPORT_FROM(tms9928a)
@ -758,13 +759,11 @@ static MACHINE_DRIVER_START( cliffhgr )
/* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("left", "right")
/* laserdisc audio */
MDRV_SOUND_ADD("laserdisc", CUSTOM, 0)
MDRV_SOUND_CONFIG(laserdisc_custom_interface)
MDRV_SOUND_ROUTE(0, "left", 1.0)
MDRV_SOUND_ROUTE(1, "right", 1.0)
/* discrete sounds */
MDRV_SOUND_ADD("discrete", DISCRETE, 0)
MDRV_SOUND_CONFIG_DISCRETE(cliffhgr)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 1.0)

View File

@ -54,8 +54,8 @@
#define MASTER_CLOCK_US 16000000
#define MASTER_CLOCK_EURO 14318180
#define LASERDISC_TYPE_MASK 0x7f
#define LASERDISC_TYPE_VARIABLE 0x80
#define LASERDISC_TYPE_FIXED 0
#define LASERDISC_TYPE_VARIABLE 1
@ -65,7 +65,7 @@
*
*************************************/
static laserdisc_info *discinfo;
static const device_config *laserdisc;
static UINT8 last_misc;
static UINT8 laserdisc_type;
@ -96,15 +96,15 @@ static void dleuro_interrupt(running_machine *machine, int state)
static WRITE8_HANDLER( serial_transmit )
{
laserdisc_data_w(discinfo, data);
laserdisc_data_w(laserdisc, data);
}
static int serial_receive(int ch)
{
/* if we still have data to send, do it now */
if (ch == 0 && laserdisc_line_r(discinfo, LASERDISC_LINE_DATA_AVAIL) == ASSERT_LINE)
return laserdisc_data_r(discinfo);
if (ch == 0 && laserdisc_line_r(laserdisc, LASERDISC_LINE_DATA_AVAIL) == ASSERT_LINE)
return laserdisc_data_r(laserdisc);
return -1;
}
@ -155,9 +155,6 @@ static void video_cleanup(running_machine *machine)
render_texture_free(video_texture);
if (overlay_texture != NULL)
render_texture_free(overlay_texture);
/* ensure all async laserdisc activity is complete */
laserdisc_exit(discinfo);
}
@ -166,7 +163,7 @@ static VIDEO_START( dlair )
bitmap_t *vidbitmap;
/* create textures */
last_seqid = laserdisc_get_video(discinfo, &vidbitmap);
last_seqid = laserdisc_get_video(laserdisc, &vidbitmap);
video_texture = render_texture_alloc(NULL, NULL);
render_texture_set_bitmap(video_texture, vidbitmap, NULL, 0, TEXFORMAT_YUY16);
overlay_bitmap = NULL;
@ -210,7 +207,7 @@ static VIDEO_UPDATE( dlair )
UINT32 seqid;
/* get the current video and update the bitmap if different */
seqid = laserdisc_get_video(discinfo, &vidbitmap);
seqid = laserdisc_get_video(laserdisc, &vidbitmap);
if (seqid != last_seqid)
render_texture_set_bitmap(video_texture, vidbitmap, NULL, 0, TEXFORMAT_YUY16);
last_seqid = seqid;
@ -219,8 +216,7 @@ static VIDEO_UPDATE( dlair )
render_container_empty(render_container_get_screen(screen));
render_screen_add_quad(screen, 0.0f, 0.0f, 1.0f, 1.0f, MAKE_ARGB(0xff,0xff,0xff,0xff), video_texture, PRIMFLAG_BLENDMODE(BLENDMODE_NONE) | PRIMFLAG_SCREENTEX(1));
if (discinfo != NULL)
popmessage("%s", laserdisc_describe_state(discinfo));
popmessage("%s", laserdisc_describe_state(laserdisc));
return 0;
}
@ -244,7 +240,7 @@ static VIDEO_UPDATE( dleuro )
render_texture_set_bitmap(overlay_texture, overlay_bitmap, video_screen_get_visible_area(screen), 0, TEXFORMAT_PALETTE16);
/* get the current video and update the bitmap if different */
seqid = laserdisc_get_video(discinfo, &vidbitmap);
seqid = laserdisc_get_video(laserdisc, &vidbitmap);
if (seqid != last_seqid)
render_texture_set_bitmap(video_texture, vidbitmap, NULL, 0, TEXFORMAT_YUY16);
last_seqid = seqid;
@ -256,8 +252,7 @@ static VIDEO_UPDATE( dleuro )
else
render_screen_add_quad(screen, 0.0f, 0.0f, 1.0f, 1.0f, MAKE_ARGB(0xff,0xff,0xff,0xff), overlay_texture, PRIMFLAG_BLENDMODE(BLENDMODE_NONE) | PRIMFLAG_SCREENTEX(1));
if (discinfo != NULL)
popmessage("%s", laserdisc_describe_state(discinfo));
popmessage("%s", laserdisc_describe_state(laserdisc));
return 0;
}
@ -272,31 +267,30 @@ static VIDEO_UPDATE( dleuro )
static MACHINE_START( dlair )
{
discinfo = laserdisc_init(machine, laserdisc_type & LASERDISC_TYPE_MASK, get_disk_handle(0), 0);
laserdisc = device_list_find_by_tag(machine->config->devicelist, LASERDISC, "laserdisc");
}
static MACHINE_START( dleuro )
{
laserdisc = device_list_find_by_tag(machine->config->devicelist, LASERDISC, "laserdisc");
/* initialize the CTC and SIO peripherals */
ctc_intf.baseclock = cpunum_get_clock(0);
sio_intf.baseclock = cpunum_get_clock(0);
z80ctc_init(0, &ctc_intf);
z80sio_init(0, &sio_intf);
discinfo = laserdisc_init(machine, laserdisc_type & LASERDISC_TYPE_MASK, get_disk_handle(0), 0);
}
static MACHINE_RESET( dlair )
{
/* determine the laserdisc player from the DIP switches */
if (laserdisc_type & LASERDISC_TYPE_VARIABLE)
if (laserdisc_type == LASERDISC_TYPE_VARIABLE)
{
laserdisc_type &= ~LASERDISC_TYPE_MASK;
laserdisc_type |= (input_port_read(machine, "DSW2") & 0x08) ? LASERDISC_TYPE_LDV1000 : LASERDISC_TYPE_PR7820;
int newtype = (input_port_read(machine, "DSW2") & 0x08) ? LASERDISC_TYPE_PIONEER_LDV1000 : LASERDISC_TYPE_PIONEER_PR7820;
device_set_info_int(laserdisc, LDINFO_INT_TYPE, newtype);
}
laserdisc_reset(discinfo, laserdisc_type & LASERDISC_TYPE_MASK);
}
@ -310,7 +304,7 @@ static MACHINE_RESET( dlair )
static INTERRUPT_GEN( vblank_callback )
{
/* update the laserdisc */
laserdisc_vsync(discinfo);
laserdisc_vsync(laserdisc);
/* also update the speaker on the European version */
if (sndti_exists(SOUND_BEEP, 0))
@ -344,10 +338,10 @@ static WRITE8_HANDLER( misc_w )
/* on bit 5 going low, push the data out to the laserdisc player */
if ((diff & 0x20) && !(data & 0x20))
laserdisc_data_w(discinfo, laserdisc_data);
laserdisc_data_w(laserdisc, laserdisc_data);
/* on bit 6 going low, we need to signal enter */
laserdisc_line_w(discinfo, LASERDISC_LINE_ENTER, (data & 0x40) ? CLEAR_LINE : ASSERT_LINE);
laserdisc_line_w(laserdisc, LASERDISC_LINE_ENTER, (data & 0x40) ? CLEAR_LINE : ASSERT_LINE);
}
@ -371,10 +365,10 @@ static WRITE8_HANDLER( dleuro_misc_w )
/* on bit 5 going low, push the data out to the laserdisc player */
if ((diff & 0x20) && !(data & 0x20))
laserdisc_data_w(discinfo, laserdisc_data);
laserdisc_data_w(laserdisc, laserdisc_data);
/* on bit 6 going low, we need to signal enter */
laserdisc_line_w(discinfo, LASERDISC_LINE_ENTER, (data & 0x40) ? CLEAR_LINE : ASSERT_LINE);
laserdisc_line_w(laserdisc, LASERDISC_LINE_ENTER, (data & 0x40) ? CLEAR_LINE : ASSERT_LINE);
}
@ -399,18 +393,15 @@ static WRITE8_HANDLER( led_den2_w )
static CUSTOM_INPUT( laserdisc_status_r )
{
if (discinfo == NULL)
return 0;
switch (laserdisc_type & LASERDISC_TYPE_MASK)
switch (device_get_info_int(laserdisc, LDINFO_INT_TYPE))
{
case LASERDISC_TYPE_PR7820:
case LASERDISC_TYPE_PIONEER_PR7820:
return 0;
case LASERDISC_TYPE_LDV1000:
return (laserdisc_line_r(discinfo, LASERDISC_LINE_STATUS) == ASSERT_LINE) ? 0 : 1;
case LASERDISC_TYPE_PIONEER_LDV1000:
return (laserdisc_line_r(laserdisc, LASERDISC_LINE_STATUS) == ASSERT_LINE) ? 0 : 1;
case LASERDISC_TYPE_22VP932:
case LASERDISC_TYPE_PHILLIPS_22VP932:
return 0;
}
return 0;
@ -419,18 +410,15 @@ static CUSTOM_INPUT( laserdisc_status_r )
static CUSTOM_INPUT( laserdisc_command_r )
{
if (discinfo == NULL)
return 0;
switch (laserdisc_type & LASERDISC_TYPE_MASK)
switch (device_get_info_int(laserdisc, LDINFO_INT_TYPE))
{
case LASERDISC_TYPE_PR7820:
return (laserdisc_line_r(discinfo, LASERDISC_LINE_READY) == ASSERT_LINE) ? 0 : 1;
case LASERDISC_TYPE_PIONEER_PR7820:
return (laserdisc_line_r(laserdisc, LASERDISC_LINE_READY) == ASSERT_LINE) ? 0 : 1;
case LASERDISC_TYPE_LDV1000:
return (laserdisc_line_r(discinfo, LASERDISC_LINE_COMMAND) == ASSERT_LINE) ? 0 : 1;
case LASERDISC_TYPE_PIONEER_LDV1000:
return (laserdisc_line_r(laserdisc, LASERDISC_LINE_COMMAND) == ASSERT_LINE) ? 0 : 1;
case LASERDISC_TYPE_22VP932:
case LASERDISC_TYPE_PHILLIPS_22VP932:
return 0;
}
return 0;
@ -439,7 +427,7 @@ static CUSTOM_INPUT( laserdisc_command_r )
static READ8_HANDLER( laserdisc_r )
{
UINT8 result = laserdisc_data_r(discinfo);
UINT8 result = laserdisc_data_r(laserdisc);
mame_printf_debug("laserdisc_r = %02X\n", result);
return result;
}
@ -679,7 +667,6 @@ static INPUT_PORTS_START( dlaire )
INPUT_PORTS_END
#ifdef UNUSED_DEFINITION
static INPUT_PORTS_START( dleuro )
PORT_START /* IN0 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
@ -751,7 +738,7 @@ static INPUT_PORTS_START( dleuro )
PORT_DIPSETTING( 0x80, DEF_STR( Easy ) ) PORT_CONDITION("DSW1",0x04,PORTCOND_EQUALS,0x04)
PORT_DIPSETTING( 0x90, DEF_STR( Easy ) ) PORT_CONDITION("DSW1",0x04,PORTCOND_EQUALS,0x04)
INPUT_PORTS_END
#endif
/*************************************
@ -800,7 +787,7 @@ static const struct AY8910interface ay8910_interface =
*
*************************************/
static MACHINE_DRIVER_START( dlair )
static MACHINE_DRIVER_START( dlair_base )
/* basic machine hardware */
MDRV_CPU_ADD("main", Z80, MASTER_CLOCK_US/4)
@ -838,6 +825,18 @@ static MACHINE_DRIVER_START( dlair )
MACHINE_DRIVER_END
static MACHINE_DRIVER_START( dlair_pr7820 )
MDRV_IMPORT_FROM(dlair_base)
MDRV_LASERDISC_ADD("laserdisc", PIONEER_PR7820, 0, "laserdisc")
MACHINE_DRIVER_END
static MACHINE_DRIVER_START( dlair_ldv1000 )
MDRV_IMPORT_FROM(dlair_base)
MDRV_LASERDISC_ADD("laserdisc", PIONEER_LDV1000, 0, "laserdisc")
MACHINE_DRIVER_END
static MACHINE_DRIVER_START( dleuro )
/* basic machine hardware */
@ -852,6 +851,8 @@ static MACHINE_DRIVER_START( dleuro )
MDRV_MACHINE_START(dleuro)
MDRV_MACHINE_RESET(dlair)
MDRV_LASERDISC_ADD("laserdisc", PHILLIPS_22VP932, 0, "laserdisc")
/* video hardware */
MDRV_SCREEN_ADD("main", RASTER)
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
@ -1058,27 +1059,15 @@ ROM_END
*
*************************************/
static DRIVER_INIT( pr7820 )
static DRIVER_INIT( fixed )
{
laserdisc_type = LASERDISC_TYPE_PR7820;
}
static DRIVER_INIT( ldv1000 )
{
laserdisc_type = LASERDISC_TYPE_LDV1000;
laserdisc_type = LASERDISC_TYPE_FIXED;
}
static DRIVER_INIT( variable )
{
laserdisc_type = LASERDISC_TYPE_VARIABLE | LASERDISC_TYPE_LDV1000;
}
static DRIVER_INIT( 22vp932 )
{
laserdisc_type = LASERDISC_TYPE_22VP932;
laserdisc_type = LASERDISC_TYPE_VARIABLE;
}
@ -1089,17 +1078,17 @@ static DRIVER_INIT( 22vp932 )
*
*************************************/
GAMEL( 1983, dlair, 0, dlair, dlaire, variable, ROT0, "Cinematronics", "Dragon's Lair (US Rev. F2)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, dlairf, dlair, dlair, dlaire, variable, ROT0, "Cinematronics", "Dragon's Lair (US Rev. F)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, dlaire, dlair, dlair, dlaire, variable, ROT0, "Cinematronics", "Dragon's Lair (US Rev. E)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, dlaird, dlair, dlair, dlair, ldv1000, ROT0, "Cinematronics", "Dragon's Lair (US Rev. D, Pioneer LD-V1000)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, dlairc, dlair, dlair, dlair, pr7820, ROT0, "Cinematronics", "Dragon's Lair (US Rev. C, Pioneer PR-7820)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, dlairb, dlair, dlair, dlair, pr7820, ROT0, "Cinematronics", "Dragon's Lair (US Rev. B, Pioneer PR-7820)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, dlaira, dlair, dlair, dlair, pr7820, ROT0, "Cinematronics", "Dragon's Lair (US Rev. A, Pioneer PR-7820)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, dleuro, dlair, dleuro, dlair, 22vp932, ROT0, "Atari", "Dragon's Lair (European)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, dlital, dlair, dleuro, dlair, 22vp932, ROT0, "Sidam", "Dragon's Lair (Italian)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, dlair, 0, dlair_ldv1000, dlaire, variable, ROT0, "Cinematronics", "Dragon's Lair (US Rev. F2)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, dlairf, dlair, dlair_ldv1000, dlaire, variable, ROT0, "Cinematronics", "Dragon's Lair (US Rev. F)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, dlaire, dlair, dlair_ldv1000, dlaire, variable, ROT0, "Cinematronics", "Dragon's Lair (US Rev. E)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, dlaird, dlair, dlair_ldv1000, dlair, fixed, ROT0, "Cinematronics", "Dragon's Lair (US Rev. D, Pioneer LD-V1000)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, dlairc, dlair, dlair_pr7820, dlair, fixed, ROT0, "Cinematronics", "Dragon's Lair (US Rev. C, Pioneer PR-7820)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, dlairb, dlair, dlair_pr7820, dlair, fixed, ROT0, "Cinematronics", "Dragon's Lair (US Rev. B, Pioneer PR-7820)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, dlaira, dlair, dlair_pr7820, dlair, fixed, ROT0, "Cinematronics", "Dragon's Lair (US Rev. A, Pioneer PR-7820)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, dleuro, dlair, dleuro, dleuro, fixed, ROT0, "Atari", "Dragon's Lair (European)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, dlital, dlair, dleuro, dleuro, fixed, ROT0, "Sidam", "Dragon's Lair (Italian)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, spaceace, 0, dlair, dlaire, variable, ROT0, "Cinematronics", "Space Ace (US Rev. A3)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, spaceaa2, spaceace, dlair, dlaire, variable, ROT0, "Cinematronics", "Space Ace (US Rev. A2)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, spaceaa, spaceace, dlair, dlaire, variable, ROT0, "Cinematronics", "Space Ace (US Rev. A)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, saeuro, spaceace, dleuro, dlair, 22vp932, ROT0, "Atari", "Space Ace (European)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, spaceace, 0, dlair_ldv1000, dlaire, variable, ROT0, "Cinematronics", "Space Ace (US Rev. A3)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, spaceaa2, spaceace, dlair_ldv1000, dlaire, variable, ROT0, "Cinematronics", "Space Ace (US Rev. A2)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, spaceaa, spaceace, dlair_ldv1000, dlaire, variable, ROT0, "Cinematronics", "Space Ace (US Rev. A)", GAME_NOT_WORKING, layout_dlair )
GAMEL( 1983, saeuro, spaceace, dleuro, dleuro, fixed, ROT0, "Atari", "Space Ace (European)", GAME_NOT_WORKING, layout_dlair )

View File

@ -30,7 +30,7 @@ Todo:
/* Misc variables */
static laserdisc_info *discinfo;
static const device_config *laserdisc;
static UINT8 *tile_ram;
static UINT8 *tile_control_ram;
@ -46,8 +46,8 @@ static VIDEO_UPDATE( esh )
fillbitmap(bitmap, 0, cliprect);
/* display disc information */
if (discinfo != NULL && ld_video_visible)
popmessage("%s", laserdisc_describe_state(discinfo));
if (ld_video_visible)
popmessage("%s", laserdisc_describe_state(laserdisc));
/* Draw tiles */
for (charx = 0; charx < 32; charx++)
@ -77,12 +77,12 @@ static VIDEO_UPDATE( esh )
/* MEMORY HANDLERS */
static READ8_HANDLER(ldp_read)
{
return laserdisc_data_r(discinfo);
return laserdisc_data_r(laserdisc);
}
static WRITE8_HANDLER(ldp_write)
{
laserdisc_data_w(discinfo,data);
laserdisc_data_w(laserdisc,data);
}
static WRITE8_HANDLER(misc_write)
@ -258,12 +258,6 @@ static GFXDECODE_START( esh )
GFXDECODE_ENTRY(REGION_GFX1, 0, esh_gfx_layout, 0x0, 0x100)
GFXDECODE_END
static MACHINE_START( esh )
{
discinfo = laserdisc_init(machine, LASERDISC_TYPE_LDV1000, get_disk_handle(0), 0);
return;
}
static TIMER_CALLBACK( irq_stop )
{
cpunum_set_input_line(machine, 0, 0, CLEAR_LINE);
@ -275,7 +269,12 @@ static INTERRUPT_GEN( vblank_callback_esh )
cpunum_set_input_line(machine, 0, 0, ASSERT_LINE);
timer_set(ATTOTIME_IN_USEC(50), NULL, 0, irq_stop);
laserdisc_vsync(discinfo);
laserdisc_vsync(laserdisc);
}
static MACHINE_START( esh )
{
laserdisc = device_list_find_by_tag(machine->config->devicelist, LASERDISC, "laserdisc");
}
@ -287,8 +286,11 @@ static MACHINE_DRIVER_START( esh )
MDRV_CPU_IO_MAP(z80_0_io,0)
MDRV_CPU_VBLANK_INT("main", vblank_callback_esh)
MDRV_MACHINE_START(esh)
MDRV_NVRAM_HANDLER(generic_0fill)
MDRV_MACHINE_START(esh)
MDRV_LASERDISC_ADD("laserdisc", PIONEER_LDV1000, 0, "laserdisc")
/* video */
@ -306,6 +308,12 @@ static MACHINE_DRIVER_START( esh )
MDRV_VIDEO_UPDATE(esh)
/* sound */
MDRV_SPEAKER_STANDARD_STEREO("left", "right")
MDRV_SOUND_ADD("laserdisc", CUSTOM, 0)
MDRV_SOUND_CONFIG(laserdisc_custom_interface)
MDRV_SOUND_ROUTE(0, "left", 1.0)
MDRV_SOUND_ROUTE(1, "right", 1.0)
MACHINE_DRIVER_END

View File

@ -54,7 +54,7 @@ static UINT8* tile_RAM;
static UINT8* sprite_RAM;
static UINT8* palette_RAM;
static laserdisc_info *discinfo;
static const device_config *laserdisc;
/* VIDEO GOODS */
@ -209,13 +209,17 @@ static VIDEO_UPDATE( gpworld )
gpworld_draw_sprites(screen->machine, bitmap, cliprect);
/* display disc information */
if (discinfo != NULL)
popmessage("%s", laserdisc_describe_state(discinfo));
popmessage("%s", laserdisc_describe_state(laserdisc));
return 0;
}
static MACHINE_START( gpworld )
{
laserdisc = device_list_find_by_tag(machine->config->devicelist, LASERDISC, "laserdisc");
}
/* MEMORY HANDLERS */
/* READS */
@ -384,12 +388,6 @@ static INPUT_PORTS_START( gpworld )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
static MACHINE_START( gpworld )
{
discinfo = laserdisc_init(machine, LASERDISC_TYPE_LDV1000, get_disk_handle(0), 0);
return;
}
static TIMER_CALLBACK( irq_stop )
{
cpunum_set_input_line(machine, 0, 0, CLEAR_LINE);
@ -400,8 +398,8 @@ static INTERRUPT_GEN( vblank_callback_gpworld )
/* Do an NMI if the enabled bit is set */
if (nmi_enable)
{
laserdisc_data_w(discinfo,ldp_write_latch);
ldp_read_latch = laserdisc_data_r(discinfo);
laserdisc_data_w(laserdisc,ldp_write_latch);
ldp_read_latch = laserdisc_data_r(laserdisc);
cpunum_set_input_line(machine, 0, INPUT_LINE_NMI, PULSE_LINE);
}
@ -409,7 +407,7 @@ static INTERRUPT_GEN( vblank_callback_gpworld )
cpunum_set_input_line(machine, 0, 0, ASSERT_LINE);
timer_set(ATTOTIME_IN_USEC(100), NULL, 0, irq_stop);
laserdisc_vsync(discinfo);
laserdisc_vsync(laserdisc);
}
static const gfx_layout gpworld_tile_layout =
@ -437,6 +435,8 @@ static MACHINE_DRIVER_START( gpworld )
MDRV_MACHINE_START(gpworld)
MDRV_LASERDISC_ADD("laserdisc", PIONEER_LDV1000, 0, "laserdisc")
/* video */
MDRV_SCREEN_ADD("main", RASTER)
@ -450,6 +450,13 @@ static MACHINE_DRIVER_START( gpworld )
MDRV_PALETTE_LENGTH(1024)
MDRV_VIDEO_UPDATE(gpworld)
/* sound */
MDRV_SPEAKER_STANDARD_STEREO("left", "right")
MDRV_SOUND_ADD("laserdisc", CUSTOM, 0)
MDRV_SOUND_CONFIG(laserdisc_custom_interface)
MDRV_SOUND_ROUTE(0, "left", 1.0)
MDRV_SOUND_ROUTE(1, "right", 1.0)
MACHINE_DRIVER_END

View File

@ -30,7 +30,7 @@ Todo:
/* Misc variables */
static laserdisc_info *discinfo;
static const device_config *laserdisc;
static UINT8 *tile_ram;
static UINT8 *tile_control_ram;
@ -50,8 +50,7 @@ static VIDEO_UPDATE( istellar )
fillbitmap(bitmap, 0, cliprect);
/* display disc information */
if (discinfo != NULL)
popmessage("%s", laserdisc_describe_state(discinfo));
popmessage("%s", laserdisc_describe_state(laserdisc));
/* DEBUG */
/*
@ -83,6 +82,12 @@ static VIDEO_UPDATE( istellar )
}
static MACHINE_START( istellar )
{
laserdisc = device_list_find_by_tag(machine->config->devicelist, LASERDISC, "laserdisc");
}
/* MEMORY HANDLERS */
/* Z80 0 R/W */
@ -113,7 +118,7 @@ static WRITE8_HANDLER(z80_0_latch2_write)
/* Z80 2 R/W */
static READ8_HANDLER(z80_2_ldp_read)
{
UINT8 readResult = laserdisc_data_r(discinfo);
UINT8 readResult = laserdisc_data_r(laserdisc);
logerror("CPU2 : reading LDP : %x\n", readResult);
return readResult;
}
@ -146,7 +151,7 @@ static WRITE8_HANDLER(z80_2_latch1_write)
static WRITE8_HANDLER(z80_2_ldp_write)
{
logerror("CPU2 : writing LDP : 0x%x\n", data);
laserdisc_data_w(discinfo,data);
laserdisc_data_w(laserdisc,data);
}
@ -306,11 +311,6 @@ static GFXDECODE_START( istellar )
GFXDECODE_ENTRY( REGION_GFX1, 0, istellar_gfx_layout, 0x0, 0x100 )
GFXDECODE_END
static MACHINE_START( istellar )
{
discinfo = laserdisc_init(machine, LASERDISC_TYPE_LDV1000, get_disk_handle(0), 0);
}
static INTERRUPT_GEN( vblank_callback_istellar )
{
/* Interrupt presumably comes from VBlank */
@ -321,7 +321,7 @@ static INTERRUPT_GEN( vblank_callback_istellar )
/* Only do the LDP's sync once */
if (cpunum == 0)
laserdisc_vsync(discinfo);
laserdisc_vsync(laserdisc);
}
@ -342,9 +342,11 @@ static MACHINE_DRIVER_START( istellar )
MDRV_CPU_ADD("sub", Z80, GUESSED_CLOCK)
MDRV_CPU_PROGRAM_MAP(z80_2_mem,0)
MDRV_CPU_IO_MAP(z80_2_io,0)
MDRV_MACHINE_START(istellar)
MDRV_LASERDISC_ADD("laserdisc", PIONEER_LDV1000, 0, "laserdisc")
/* video */
MDRV_SCREEN_ADD("main", RASTER)
@ -361,6 +363,12 @@ static MACHINE_DRIVER_START( istellar )
MDRV_VIDEO_UPDATE(istellar)
/* sound */
MDRV_SPEAKER_STANDARD_STEREO("left", "right")
MDRV_SOUND_ADD("laserdisc", CUSTOM, 0)
MDRV_SOUND_CONFIG(laserdisc_custom_interface)
MDRV_SOUND_ROUTE(0, "left", 1.0)
MDRV_SOUND_ROUTE(1, "right", 1.0)
MACHINE_DRIVER_END

View File

@ -72,7 +72,7 @@ Dumping Notes:
#define SOUND_PCB_CLOCK (6000000)
/* Misc variables */
static laserdisc_info *discinfo;
static const device_config *laserdisc;
static UINT8 *tile_ram;
static UINT8 *tile_control_ram;
@ -87,8 +87,7 @@ static VIDEO_UPDATE( lgp )
fillbitmap(bitmap, 0, cliprect);
/* display disc information */
if (discinfo != NULL)
popmessage("%s", laserdisc_describe_state(discinfo));
popmessage("%s", laserdisc_describe_state(laserdisc));
/* Draw tiles */
for (charx = 0; charx < 32; charx++)
@ -114,12 +113,12 @@ static VIDEO_UPDATE( lgp )
/* Main Z80 R/W */
static READ8_HANDLER(ldp_read)
{
return laserdisc_data_r(discinfo);
return laserdisc_data_r(laserdisc);
}
static WRITE8_HANDLER(ldp_write)
{
laserdisc_data_w(discinfo,data);
laserdisc_data_w(laserdisc,data);
}
@ -315,11 +314,6 @@ static GFXDECODE_START( lgp )
GFXDECODE_ENTRY(REGION_GFX4, 0, lgp_gfx_layout_16x32, 0x0, 0x100)
GFXDECODE_END
static MACHINE_START( lgp )
{
discinfo = laserdisc_init(machine, LASERDISC_TYPE_LDV1000, get_disk_handle(0), 0);
}
static TIMER_CALLBACK( irq_stop )
{
cpunum_set_input_line(machine, 0, 0, CLEAR_LINE);
@ -334,7 +328,13 @@ static INTERRUPT_GEN( vblank_callback_lgp )
cpunum_set_input_line(machine, 0, 0, ASSERT_LINE);
timer_set(ATTOTIME_IN_USEC(50), NULL, 0, irq_stop);
laserdisc_vsync(discinfo);
laserdisc_vsync(laserdisc);
}
static MACHINE_START( lgp )
{
laserdisc = device_list_find_by_tag(machine->config->devicelist, LASERDISC, "laserdisc");
}
@ -353,6 +353,8 @@ static MACHINE_DRIVER_START( lgp )
MDRV_MACHINE_START(lgp)
MDRV_LASERDISC_ADD("laserdisc", PIONEER_LDV1000, 0, "laserdisc")
/* video */
MDRV_SCREEN_ADD("main", RASTER)
@ -369,6 +371,12 @@ static MACHINE_DRIVER_START( lgp )
MDRV_VIDEO_UPDATE(lgp)
/* sound */
MDRV_SPEAKER_STANDARD_STEREO("left", "right")
MDRV_SOUND_ADD("laserdisc", CUSTOM, 0)
MDRV_SOUND_CONFIG(laserdisc_custom_interface)
MDRV_SOUND_ROUTE(0, "left", 1.0)
MDRV_SOUND_ROUTE(1, "right", 1.0)
MACHINE_DRIVER_END

View File

@ -30,7 +30,7 @@ static UINT8* color_RAM;
static UINT8* fix_RAM;
static UINT8* out_RAM;
static laserdisc_info *discinfo;
static const device_config *laserdisc;
static UINT8 ldv1000_input_latch;
static UINT8 ldv1000_output_latch;
@ -86,8 +86,7 @@ static VIDEO_UPDATE( astron )
astron_draw_sprites(bitmap, cliprect);
/* display disc information */
if (discinfo != NULL)
popmessage("%s", laserdisc_describe_state(discinfo));
popmessage("%s", laserdisc_describe_state(laserdisc));
return 0;
}
@ -99,7 +98,7 @@ static VIDEO_UPDATE( astron )
static READ8_HANDLER( astron_DISC_read )
{
if (nmi_enable)
ldv1000_input_latch = laserdisc_data_r(discinfo);
ldv1000_input_latch = laserdisc_data_r(laserdisc);
logerror("DISC read (0x%04x) @ 0x%04x [0x%x]\n", ldv1000_input_latch, offset, activecpu_get_pc());
@ -133,7 +132,7 @@ static WRITE8_HANDLER( astron_DISC_write )
ldv1000_output_latch = data;
if (nmi_enable)
laserdisc_data_w(discinfo, ldv1000_output_latch);
laserdisc_data_w(laserdisc, ldv1000_output_latch);
}
static WRITE8_HANDLER( astron_OUT_write )
@ -323,14 +322,9 @@ static INPUT_PORTS_START( astron )
PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) /* SW15 = nonJAMMA pin W = unused? */
INPUT_PORTS_END
static MACHINE_START( astron )
{
discinfo = laserdisc_init(machine, LASERDISC_TYPE_LDV1000, get_disk_handle(0), 0);
}
static INTERRUPT_GEN( vblank_callback_astron )
{
laserdisc_vsync(discinfo);
laserdisc_vsync(laserdisc);
}
static GFXDECODE_START( segald )
@ -339,6 +333,12 @@ static GFXDECODE_START( segald )
GFXDECODE_END
static MACHINE_START( astron )
{
laserdisc = device_list_find_by_tag(machine->config->devicelist, LASERDISC, "laserdisc");
}
/* DRIVER */
static MACHINE_DRIVER_START( astron )
/* main cpu */
@ -350,6 +350,8 @@ static MACHINE_DRIVER_START( astron )
MDRV_MACHINE_START(astron)
MDRV_LASERDISC_ADD("laserdisc", PIONEER_LDV1000, 0, "laserdisc")
/* video */
MDRV_SCREEN_ADD("main", RASTER)
@ -363,6 +365,13 @@ static MACHINE_DRIVER_START( astron )
MDRV_PALETTE_LENGTH(256)
MDRV_VIDEO_UPDATE(astron)
/* sound hardare */
MDRV_SPEAKER_STANDARD_STEREO("left", "right")
MDRV_SOUND_ADD("laserdisc", CUSTOM, 0)
MDRV_SOUND_CONFIG(laserdisc_custom_interface)
MDRV_SOUND_ROUTE(0, "left", 1.0)
MDRV_SOUND_ROUTE(1, "right", 1.0)
MACHINE_DRIVER_END

View File

@ -27,7 +27,7 @@
#include "machine/laserdsc.h"
#include "video/resnet.h"
static laserdisc_info *discinfo;
static const device_config *laserdisc;
static UINT8 superdq_ld_in_latch = 0, superdq_ld_out_latch = 0xff;
static tilemap *superdq_tilemap;
@ -63,14 +63,14 @@ static VIDEO_UPDATE( superdq )
{
tilemap_draw(bitmap,cliprect,superdq_tilemap,0,0);
if (!video_skip_this_frame() && discinfo != NULL)
if (!video_skip_this_frame())
{
bitmap_t *vidbitmap;
rectangle fixedvis = *video_screen_get_visible_area(screen);
fixedvis.max_x++;
fixedvis.max_y++;
laserdisc_get_video(discinfo, &vidbitmap);
laserdisc_get_video(laserdisc, &vidbitmap);
/* first lay down the video data */
if (video_texture == NULL)
@ -92,8 +92,7 @@ static VIDEO_UPDATE( superdq )
}
/* display disc information */
if (discinfo != NULL)
popmessage("%s", laserdisc_describe_state(discinfo));
popmessage("%s", laserdisc_describe_state(laserdisc));
return 0;
}
@ -145,24 +144,19 @@ static PALETTE_INIT( superdq )
}
}
static MACHINE_START( superdq )
{
discinfo = laserdisc_init(machine, LASERDISC_TYPE_LDV1000, get_disk_handle(0), 0);
}
static INTERRUPT_GEN( superdq_vblank )
{
laserdisc_vsync(discinfo);
laserdisc_vsync(laserdisc);
/* status is read when the STATUS line from the laserdisc
toggles (600usec after the vblank). We could set up a
timer to do that, but this works as well */
superdq_ld_in_latch = laserdisc_data_r(discinfo);
superdq_ld_in_latch = laserdisc_data_r(laserdisc);
/* command is written when the COMMAND line from the laserdisc
toggles (680usec after the vblank). We could set up a
timer to do that, but this works as well */
laserdisc_data_w(discinfo, superdq_ld_out_latch);
laserdisc_data_w(laserdisc, superdq_ld_out_latch);
cpunum_set_input_line(machine, 0, 0, ASSERT_LINE);
}
@ -329,6 +323,12 @@ GFXDECODE_END
*
*************************************/
static MACHINE_START( superdq )
{
laserdisc = device_list_find_by_tag(machine->config->devicelist, LASERDISC, "laserdisc");
}
static MACHINE_DRIVER_START( superdq )
/* basic machine hardware */
@ -336,9 +336,11 @@ static MACHINE_DRIVER_START( superdq )
MDRV_CPU_PROGRAM_MAP(superdq_map,0)
MDRV_CPU_IO_MAP(superdq_io,0)
MDRV_CPU_VBLANK_INT("main", superdq_vblank)
MDRV_MACHINE_START(superdq)
MDRV_LASERDISC_ADD("laserdisc", PIONEER_LDV1000, 0, "laserdisc")
/* video hardware */
MDRV_VIDEO_ATTRIBUTES(VIDEO_SELF_RENDER)

View File

@ -18,8 +18,7 @@
extern const char layout_dlair[];
static laserdisc_info *discinfo;
static UINT8 laserdisc_type;
static const device_config *laserdisc;
static UINT8 laserdisc_data;
static int rx_bit;
@ -44,8 +43,7 @@ static const UINT8 led_map[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x0
static VIDEO_UPDATE( thayers )
{
/* display disc information */
if (discinfo != NULL)
popmessage("%s", laserdisc_describe_state(discinfo));
popmessage("%s", laserdisc_describe_state(laserdisc));
return 0;
}
@ -324,7 +322,7 @@ static READ8_HANDLER( dsw_b_r )
static READ8_HANDLER( laserdsc_data_r )
{
return laserdisc_data_r(discinfo);
return laserdisc_data_r(laserdisc);
}
static WRITE8_HANDLER( laserdsc_data_w )
@ -353,21 +351,21 @@ static WRITE8_HANDLER( laserdsc_control_w )
if (BIT(data, 5))
{
laserdisc_data_w(discinfo, laserdisc_data);
laserdisc_data_w(laserdisc, laserdisc_data);
}
switch (laserdisc_type)
switch (device_get_info_int(laserdisc, LDINFO_INT_TYPE))
{
case LASERDISC_TYPE_PR7820:
case LASERDISC_TYPE_PIONEER_PR7820:
pr7820_enter = BIT(data, 6) ? CLEAR_LINE : ASSERT_LINE;
laserdisc_line_w(discinfo, LASERDISC_LINE_ENTER, pr7820_enter);
laserdisc_line_w(laserdisc, LASERDISC_LINE_ENTER, pr7820_enter);
// BIT(data, 7) is INT/_EXT, but there is no such input line in laserdsc.h
break;
case LASERDISC_TYPE_LDV1000:
laserdisc_line_w(discinfo, LASERDISC_LINE_ENTER, BIT(data, 7) ? CLEAR_LINE : ASSERT_LINE);
case LASERDISC_TYPE_PIONEER_LDV1000:
laserdisc_line_w(laserdisc, LASERDISC_LINE_ENTER, BIT(data, 7) ? CLEAR_LINE : ASSERT_LINE);
break;
}
}
@ -599,16 +597,13 @@ ADDRESS_MAP_END
static CUSTOM_INPUT( laserdisc_enter_r )
{
if (discinfo == NULL)
return 0;
switch (laserdisc_type)
switch (device_get_info_int(laserdisc, LDINFO_INT_TYPE))
{
case LASERDISC_TYPE_PR7820:
return pr7820_enter;
case LASERDISC_TYPE_PIONEER_PR7820:
return pr7820_enter;
case LASERDISC_TYPE_LDV1000:
return (laserdisc_line_r(discinfo, LASERDISC_LINE_STATUS) == ASSERT_LINE) ? 0 : 1;
case LASERDISC_TYPE_PIONEER_LDV1000:
return (laserdisc_line_r(laserdisc, LASERDISC_LINE_STATUS) == ASSERT_LINE) ? 0 : 1;
}
return 0;
@ -616,16 +611,13 @@ static CUSTOM_INPUT( laserdisc_enter_r )
static CUSTOM_INPUT( laserdisc_ready_r )
{
if (discinfo == NULL)
return 0;
switch (laserdisc_type)
switch (device_get_info_int(laserdisc, LDINFO_INT_TYPE))
{
case LASERDISC_TYPE_PR7820:
return (laserdisc_line_r(discinfo, LASERDISC_LINE_READY) == ASSERT_LINE) ? 0 : 1;
case LASERDISC_TYPE_PIONEER_PR7820:
return (laserdisc_line_r(laserdisc, LASERDISC_LINE_READY) == ASSERT_LINE) ? 0 : 1;
case LASERDISC_TYPE_LDV1000:
return (laserdisc_line_r(discinfo, LASERDISC_LINE_COMMAND) == ASSERT_LINE) ? 0 : 1;
case LASERDISC_TYPE_PIONEER_LDV1000:
return (laserdisc_line_r(laserdisc, LASERDISC_LINE_COMMAND) == ASSERT_LINE) ? 0 : 1;
}
return 0;
@ -736,23 +728,19 @@ INPUT_PORTS_END
static MACHINE_START( thayers )
{
laserdisc_type = LASERDISC_TYPE_LDV1000;
discinfo = laserdisc_init(machine, laserdisc_type, get_disk_handle(0), 0);
laserdisc = device_list_find_by_tag(machine->config->devicelist, LASERDISC, "laserdisc");
memset(&ssi263, 0, sizeof(ssi263));
}
static MACHINE_RESET( thayers )
{
laserdisc_type = (input_port_read(machine, "DSWB") & 0x18) ? LASERDISC_TYPE_LDV1000 : LASERDISC_TYPE_PR7820;
laserdisc_reset(discinfo, laserdisc_type);
int newtype = (input_port_read(machine, "DSWB") & 0x18) ? LASERDISC_TYPE_PIONEER_LDV1000 : LASERDISC_TYPE_PIONEER_PR7820;
device_set_info_int(laserdisc, LDINFO_INT_TYPE, newtype);
}
static INTERRUPT_GEN( vblank_callback_thayers )
{
laserdisc_vsync(discinfo);
laserdisc_vsync(laserdisc);
}
/* COP400 Interface */
@ -773,14 +761,16 @@ static MACHINE_DRIVER_START( thayers )
MDRV_CPU_IO_MAP(thayers_io_map, 0)
MDRV_CPU_VBLANK_INT("main", vblank_callback_thayers)
MDRV_MACHINE_START(thayers)
MDRV_MACHINE_RESET(thayers)
MDRV_CPU_ADD("mcu", COP421, XTAL_4MHz/2) // COP421L-PCA/N
MDRV_CPU_PROGRAM_MAP(thayers_cop_map, 0)
MDRV_CPU_IO_MAP(thayers_cop_io_map, 0)
MDRV_CPU_CONFIG(thayers_cop_intf)
MDRV_MACHINE_START(thayers)
MDRV_MACHINE_RESET(thayers)
MDRV_LASERDISC_ADD("laserdisc", PIONEER_PR7820, 0, "laserdisc")
/* video hardware */
MDRV_SCREEN_ADD("main", RASTER)
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)