summaryrefslogtreecommitdiffstatshomepage
path: root/trunk/src/emu/machine/laserdsc.h
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/emu/machine/laserdsc.h')
-rw-r--r--trunk/src/emu/machine/laserdsc.h240
1 files changed, 240 insertions, 0 deletions
diff --git a/trunk/src/emu/machine/laserdsc.h b/trunk/src/emu/machine/laserdsc.h
new file mode 100644
index 00000000000..09a3549d1b7
--- /dev/null
+++ b/trunk/src/emu/machine/laserdsc.h
@@ -0,0 +1,240 @@
+/*************************************************************************
+
+ laserdsc.h
+
+ Generic laserdisc support.
+
+ Copyright Nicola Salmoria and the MAME Team.
+ Visit http://mamedev.org for licensing and usage restrictions.
+
+*************************************************************************/
+
+#pragma once
+
+#ifndef __LASERDSC_H__
+#define __LASERDSC_H__
+
+#include "chd.h"
+
+
+
+/***************************************************************************
+ CONSTANTS
+***************************************************************************/
+
+/* types of players supported */
+enum
+{
+ LASERDISC_TYPE_UNKNOWN,
+ LASERDISC_TYPE_PIONEER_PR7820, /* Pioneer PR-7820 */
+ LASERDISC_TYPE_PIONEER_PR8210, /* Pioneer PR-8210 / LD-V1100 */
+ LASERDISC_TYPE_SIMUTREK_SPECIAL, /* Pioneer PR-8210 with mods */
+ LASERDISC_TYPE_PIONEER_LDV1000, /* Pioneer LD-V1000 */
+ LASERDISC_TYPE_PHILLIPS_22VP931, /* Phillips 22VP931 */
+ 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 */
+#define LASERDISC_LINE_CONTROL 1 /* "CONTROL" line */
+#define LASERDISC_LINE_RESET 2 /* "RESET" line */
+#define LASERDISC_INPUT_LINES 3
+
+/* laserdisc status lines */
+#define LASERDISC_LINE_READY 0 /* "READY" line */
+#define LASERDISC_LINE_STATUS 1 /* "STATUS STROBE" line */
+#define LASERDISC_LINE_COMMAND 2 /* "COMMAND STROBE" line */
+#define LASERDISC_LINE_DATA_AVAIL 3 /* data available "line" */
+#define LASERDISC_OUTPUT_LINES 4
+
+/* laserdisc field codes */
+#define LASERDISC_CODE_WHITE_FLAG 11 /* boolean white flag */
+#define LASERDISC_CODE_LINE16 16 /* 24-bit line 16 code */
+#define LASERDISC_CODE_LINE17 17 /* 24-bit line 17 code */
+#define LASERDISC_CODE_LINE18 18 /* 24-bit line 18 code */
+#define LASERDISC_CODE_LINE1718 1718 /* 24-bit best of line 17/18 code */
+
+
+
+/***************************************************************************
+ TYPE DEFINITIONS
+***************************************************************************/
+
+typedef chd_file *(*laserdisc_get_disc_func)(device_t *device);
+
+typedef void (*laserdisc_audio_func)(device_t *device, int samplerate, int samples, const INT16 *ch0, const INT16 *ch1);
+
+typedef void (*vp931_data_ready_func)(device_t *device, int state);
+
+typedef struct _laserdisc_config laserdisc_config;
+struct _laserdisc_config
+{
+ laserdisc_get_disc_func getdisc;
+ laserdisc_audio_func audio;
+ const char * sound;
+ const char * screen;
+
+ /* overlay information */
+ screen_update_func overupdate;
+ UINT32 overwidth, overheight, overformat;
+ rectangle overclip;
+ float overposx, overposy;
+ float overscalex, overscaley;
+};
+
+
+
+/***************************************************************************
+ DEVICE CONFIGURATION MACROS
+***************************************************************************/
+
+#define MCFG_LASERDISC_ADD(_tag, _type, _screen, _sound) \
+ MCFG_DEVICE_ADD(_tag, _type, 0) \
+ MCFG_DEVICE_CONFIG_DATAPTR(laserdisc_config, screen, _screen) \
+ MCFG_DEVICE_CONFIG_DATAPTR(laserdisc_config, sound, _sound) \
+
+#define MCFG_LASERDISC_GET_DISC(_func) \
+ MCFG_DEVICE_CONFIG_DATAPTR(laserdisc_config, getdisc, _func)
+
+#define MCFG_LASERDISC_AUDIO(_func) \
+ MCFG_DEVICE_CONFIG_DATAPTR(laserdisc_config, audio, _func)
+
+#define MCFG_LASERDISC_OVERLAY(_update, _width, _height, _format) \
+ MCFG_DEVICE_CONFIG_DATAPTR(laserdisc_config, overupdate, SCREEN_UPDATE_NAME(_update)) \
+ MCFG_DEVICE_CONFIG_DATA32(laserdisc_config, overwidth, _width) \
+ MCFG_DEVICE_CONFIG_DATA32(laserdisc_config, overheight, _height) \
+ MCFG_DEVICE_CONFIG_DATA32(laserdisc_config, overformat, _format)
+
+#define MCFG_LASERDISC_OVERLAY_CLIP(_minx, _maxx, _miny, _maxy) \
+ MCFG_DEVICE_CONFIG_DATA32(laserdisc_config, overclip.min_x, _minx) \
+ MCFG_DEVICE_CONFIG_DATA32(laserdisc_config, overclip.max_x, _maxx) \
+ MCFG_DEVICE_CONFIG_DATA32(laserdisc_config, overclip.min_y, _miny) \
+ MCFG_DEVICE_CONFIG_DATA32(laserdisc_config, overclip.max_y, _maxy)
+
+#define MCFG_LASERDISC_OVERLAY_POSITION(_posx, _posy) \
+ MCFG_DEVICE_CONFIG_DATAFP32(laserdisc_config, overposx, _posx, 24) \
+ MCFG_DEVICE_CONFIG_DATAFP32(laserdisc_config, overposy, _posy, 24)
+
+#define MCFG_LASERDISC_OVERLAY_SCALE(_scalex, _scaley) \
+ MCFG_DEVICE_CONFIG_DATAFP32(laserdisc_config, overscalex, _scalex, 24) \
+ MCFG_DEVICE_CONFIG_DATAFP32(laserdisc_config, overscaley, _scaley, 24)
+
+
+/* use these to add laserdisc screens with proper video update parameters */
+#define MCFG_LASERDISC_SCREEN_ADD_NTSC(_tag, _overlayformat) \
+ MCFG_VIDEO_ATTRIBUTES(VIDEO_SELF_RENDER) \
+ \
+ MCFG_SCREEN_ADD(_tag, RASTER) \
+ MCFG_SCREEN_FORMAT(_overlayformat) \
+ MCFG_SCREEN_RAW_PARAMS(XTAL_14_31818MHz*2, 910, 0, 704, 525, 44, 524) \
+ MCFG_SCREEN_UPDATE(laserdisc) \
+
+/* not correct yet; fix me... */
+#define MCFG_LASERDISC_SCREEN_ADD_PAL(_tag, _format) \
+ MCFG_VIDEO_ATTRIBUTES(VIDEO_SELF_RENDER) \
+ \
+ MCFG_SCREEN_ADD(_tag, RASTER) \
+ MCFG_SCREEN_FORMAT(_format) \
+ MCFG_SCREEN_RAW_PARAMS(XTAL_14_31818MHz, 910, 0, 704, 525.0/2, 0, 480/2) \
+ MCFG_SCREEN_UPDATE(laserdisc) \
+
+
+
+/***************************************************************************
+ FUNCTION PROTOTYPES
+***************************************************************************/
+
+
+/* ----- core control and status ----- */
+
+/* get a bitmap for the current frame; return TRUE if valid or FALSE if video off */
+int laserdisc_get_video(device_t *device, bitmap_t **bitmap);
+
+/* return the raw philips or white flag codes */
+UINT32 laserdisc_get_field_code(device_t *device, UINT32 code, UINT8 zero_if_squelched);
+
+
+
+/* ----- input and output ----- */
+
+/* write to the parallel data port of the player */
+void laserdisc_data_w(device_t *device, UINT8 data);
+
+/* assert or clear a signal line connected to the player */
+void laserdisc_line_w(device_t *device, UINT8 line, UINT8 newstate);
+
+/* read from the parallel data port of the player */
+UINT8 laserdisc_data_r(device_t *device);
+
+/* read the state of a signal line connected to the player */
+UINT8 laserdisc_line_r(device_t *device, UINT8 line);
+
+
+
+/* ----- player specifics ----- */
+
+/* specify the "slow" speed of the Pioneer PR-7820 */
+void pr7820_set_slow_speed(device_t *device, double frame_rate_scaler);
+
+/* set a callback for data ready on the Phillips 22VP931 */
+void vp931_set_data_ready_callback(device_t *device, vp931_data_ready_func callback);
+
+/* control the audio squelch of the Simutrek modified players */
+void simutrek_set_audio_squelch(device_t *device, int state);
+
+
+
+/* ----- video interface ----- */
+
+/* enable/disable the video */
+void laserdisc_video_enable(device_t *device, int enable);
+
+/* enable/disable the overlay */
+void laserdisc_overlay_enable(device_t *device, int enable);
+
+/* video update callback */
+SCREEN_UPDATE( laserdisc );
+
+
+
+/* ----- configuration ----- */
+
+/* return a copy of the current live configuration settings */
+void laserdisc_get_config(device_t *device, laserdisc_config *config);
+
+/* change the current live configuration settings */
+void laserdisc_set_config(device_t *device, const laserdisc_config *config);
+
+
+
+/* ----- device interface ----- */
+
+/* device get info callback */
+DECLARE_LEGACY_DEVICE(PIONEER_PR7820,pioneer_pr7820);
+DECLARE_LEGACY_DEVICE(PIONEER_PR8210,pioneer_pr8210);
+DECLARE_LEGACY_DEVICE(SIMUTREK_SPECIAL,simutrek_special);
+DECLARE_LEGACY_DEVICE(PIONEER_LDV1000,pioneer_ldv1000);
+DECLARE_LEGACY_DEVICE(PHILLIPS_22VP931,phillips_22vp931);
+DECLARE_LEGACY_DEVICE(PHILLIPS_22VP932,phillips_22vp932);
+DECLARE_LEGACY_DEVICE(SONY_LDP1450,sony_ldp1450);
+
+/* audio get info callback */
+DECLARE_LEGACY_SOUND_DEVICE(LASERDISC_SOUND, laserdisc_sound);
+
+/* type setter */
+int laserdisc_get_type(device_t *device);
+void laserdisc_set_type(device_t *device, int type);
+
+INLINE bool device_is_laserdisc(device_t *device)
+{
+ return(device->type() == PIONEER_PR7820 ||
+ device->type() == PIONEER_PR8210 ||
+ device->type() == SIMUTREK_SPECIAL ||
+ device->type() == PIONEER_LDV1000 ||
+ device->type() == PHILLIPS_22VP931 ||
+ device->type() == PHILLIPS_22VP932 ||
+ device->type() == SONY_LDP1450);
+}
+
+#endif /* __LASERDSC_H__ */