summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/ldv1000.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/ldv1000.h')
-rw-r--r--src/devices/machine/ldv1000.h45
1 files changed, 21 insertions, 24 deletions
diff --git a/src/devices/machine/ldv1000.h b/src/devices/machine/ldv1000.h
index 2d19b81c4e3..7c4fb58425a 100644
--- a/src/devices/machine/ldv1000.h
+++ b/src/devices/machine/ldv1000.h
@@ -35,7 +35,7 @@ DECLARE_DEVICE_TYPE(PIONEER_LDV1000, pioneer_ldv1000_device)
// ======================> pioneer_ldv1000_device
// base ldv1000 class
-class pioneer_ldv1000_device : public laserdisc_device
+class pioneer_ldv1000_device : public parallel_laserdisc_device
{
public:
// construction/destruction
@@ -44,25 +44,16 @@ public:
auto command_strobe_callback() { return m_command_strobe_cb.bind(); }
// input and output
- void data_w(uint8_t data);
- void enter_w(uint8_t data);
- uint8_t status_r() const { return m_status; }
- uint8_t status_strobe_r() const { return (m_portc1 & 0x20) ? ASSERT_LINE : CLEAR_LINE; }
- uint8_t command_strobe_r() const { return (m_portc1 & 0x10) ? ASSERT_LINE : CLEAR_LINE; }
+ virtual void data_w(uint8_t data) override;
+ virtual void enter_w(int state) override { }
+ virtual uint8_t data_r() override { return m_status; }
+ virtual int status_strobe_r() override { return BIT(m_portc1, 5); }
+ virtual int ready_r() override { return BIT(m_portc1, 4); }
protected:
- // timer IDs
- enum
- {
- TID_MULTIJUMP = TID_FIRST_PLAYER_TIMER,
- TID_VSYNC_OFF,
- TID_VBI_DATA_FETCH
- };
-
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
virtual const tiny_rom_entry *device_rom_region() const override;
virtual void device_add_mconfig(machine_config &config) override;
@@ -71,6 +62,10 @@ protected:
virtual int32_t player_update(const vbi_metadata &vbi, int fieldnum, const attotime &curtime) override;
virtual void player_overlay(bitmap_yuy16 &bitmap) override { }
+ TIMER_CALLBACK_MEMBER(vsync_off);
+ TIMER_CALLBACK_MEMBER(multijump_tick);
+ TIMER_CALLBACK_MEMBER(process_vbi_data);
+
private:
// internal helpers
bool focus_on() const { return !(m_portb1 & 0x01); }
@@ -97,19 +92,21 @@ private:
void ldv1000_portmap(address_map &map);
// internal state
- required_device<z80_device> m_z80_cpu; /* CPU index of the Z80 */
- required_device<z80ctc_device> m_z80_ctc; /* CTC device */
- emu_timer * m_multitimer; /* multi-jump timer device */
+ required_device<z80_device> m_z80_cpu; /* CPU index of the Z80 */
+ required_device<z80ctc_device> m_z80_ctc; /* CTC device */
+ emu_timer * m_multitimer; /* multi-jump timer device */
+ emu_timer * m_vsync_off_timer; /* vsync-shutoff timer device */
+ emu_timer * m_process_vbi_timer; /* VBI processing timer device */
devcb_write_line m_command_strobe_cb;
/* communication status */
- uint8_t m_command; /* command byte to the player */
+ uint8_t m_command; /* command byte to the player */
uint8_t m_status; /* status byte from the player */
- bool m_vsync; /* VSYNC state */
+ bool m_vsync; /* VSYNC state */
/* I/O port states */
uint8_t m_counter_start; /* starting value for counter */
- uint8_t m_counter; /* current counter value */
+ uint8_t m_counter; /* current counter value */
uint8_t m_portc0; /* port C on PPI 0 */
uint8_t m_portb1; /* port B on PPI 1 */
uint8_t m_portc1; /* port C on PPI 1 */
@@ -118,9 +115,9 @@ private:
uint8_t m_portselect; /* selection of which port to access */
uint8_t m_display[2][20]; /* display lines */
uint8_t m_dispindex; /* index within the display line */
- uint8_t m_vbi[7*3]; /* VBI data */
- bool m_vbiready; /* VBI ready flag */
- uint8_t m_vbiindex; /* index within the VBI data */
+ uint8_t m_vbi[7*3]; /* VBI data */
+ bool m_vbiready; /* VBI ready flag */
+ uint8_t m_vbiindex; /* index within the VBI data */
};