summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/ldpr8210.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/ldpr8210.h')
-rw-r--r--src/devices/machine/ldpr8210.h98
1 files changed, 52 insertions, 46 deletions
diff --git a/src/devices/machine/ldpr8210.h b/src/devices/machine/ldpr8210.h
index ed97f0f8fd2..7443a48bf39 100644
--- a/src/devices/machine/ldpr8210.h
+++ b/src/devices/machine/ldpr8210.h
@@ -44,22 +44,13 @@ public:
void control_w(uint8_t data);
protected:
- // timer IDs
- enum
- {
- TID_VSYNC_OFF = TID_FIRST_PLAYER_TIMER,
- TID_VBI_DATA_FETCH,
- TID_FIRST_SUBCLASS_TIMER
- };
-
pioneer_pr8210_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
// 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;
+ virtual void device_start() override ATTR_COLD;
+ virtual void device_reset() override ATTR_COLD;
+ virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
+ virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
// subclass overrides
virtual void player_vsync(const vbi_metadata &vbi, int fieldnum, const attotime &curtime) override;
@@ -67,6 +58,8 @@ protected:
virtual void player_overlay(bitmap_yuy16 &bitmap) override;
// internal helpers
+ TIMER_CALLBACK_MEMBER(process_vbi_data);
+ TIMER_CALLBACK_MEMBER(vsync_off);
bool focus_on() const { return !(m_i8049_port1 & 0x08); }
bool spdl_on() const { return !(m_i8049_port1 & 0x10); }
bool laser_on() const { return !(m_i8049_port2 & 0x01); }
@@ -75,13 +68,13 @@ protected:
virtual void update_audio_squelch() { set_audio_squelch((m_i8049_port1 & 0x40) || !(m_pia.portb & 0x01), (m_i8049_port1 & 0x40) || !(m_pia.portb & 0x02)); }
// internal read/write handlers
- DECLARE_READ8_MEMBER( i8049_pia_r );
- DECLARE_WRITE8_MEMBER( i8049_pia_w );
- DECLARE_READ8_MEMBER( i8049_bus_r );
- DECLARE_WRITE8_MEMBER( i8049_port1_w );
- DECLARE_WRITE8_MEMBER( i8049_port2_w );
- DECLARE_READ_LINE_MEMBER( i8049_t0_r );
- DECLARE_READ_LINE_MEMBER( i8049_t1_r );
+ uint8_t i8049_pia_r(offs_t offset);
+ void i8049_pia_w(offs_t offset, uint8_t data);
+ uint8_t i8049_bus_r();
+ void i8049_port1_w(uint8_t data);
+ void i8049_port2_w(uint8_t data);
+ int i8049_t0_r();
+ int i8049_t1_r();
// pioneer PIA subclass
class pioneer_pia
@@ -103,10 +96,26 @@ protected:
void overlay_erase(bitmap_yuy16 &bitmap, float xstart, float xend);
void overlay_draw_char(bitmap_yuy16 &bitmap, uint8_t ch, float xstart);
+ // LED outputs
+ output_finder<> m_audio1;
+ output_finder<> m_audio2;
+ output_finder<> m_clv;
+ output_finder<> m_cav;
+ output_finder<> m_srev;
+ output_finder<> m_sfwd;
+ output_finder<> m_play;
+ output_finder<> m_step;
+ output_finder<> m_pause;
+ output_finder<> m_standby;
+
+ // timers
+ emu_timer *m_process_vbi_timer;
+ emu_timer *m_vsync_off_timer;
+
// internal state
- uint8_t m_control; // control line state
- uint8_t m_lastcommand; // last command seen
- uint16_t m_accumulator; // bit accumulator
+ uint8_t m_control; // control line state
+ uint8_t m_lastcommand; // last command seen
+ uint16_t m_accumulator; // bit accumulator
attotime m_lastcommandtime; // time of the last command
attotime m_lastbittime; // time of last bit received
attotime m_firstbittime; // time of first bit in command
@@ -116,11 +125,11 @@ protected:
attotime m_slowtrg; // time of the last SLOW TRG
pioneer_pia m_pia; // PIA state
bool m_vsync; // live VSYNC state
- uint8_t m_i8049_port1; // 8049 port 1 state
- uint8_t m_i8049_port2; // 8049 port 2 state
+ uint8_t m_i8049_port1; // 8049 port 1 state
+ uint8_t m_i8049_port2; // 8049 port 2 state
private:
- void pr8210_portmap(address_map &map);
+ void pr8210_portmap(address_map &map) ATTR_COLD;
};
@@ -141,42 +150,39 @@ public:
void set_external_audio_squelch(int state);
protected:
- // timer IDs
- enum
- {
- TID_IRQ_OFF = TID_FIRST_SUBCLASS_TIMER,
- TID_LATCH_DATA
- };
-
// subclass overrides
virtual void player_vsync(const vbi_metadata &vbi, int fieldnum, const attotime &curtime) override;
// 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;
+ virtual void device_start() override ATTR_COLD;
+ virtual void device_reset() override ATTR_COLD;
+ virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
+ virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
// internal helpers
virtual bool override_control() const override { return m_controlthis; }
virtual void update_audio_squelch() override { set_audio_squelch(m_audio_squelch, m_audio_squelch); }
private:
+ TIMER_CALLBACK_MEMBER(irq_off);
+ TIMER_CALLBACK_MEMBER(latch_data);
+
// internal read/write handlers
- DECLARE_READ8_MEMBER( i8748_data_r );
- DECLARE_READ8_MEMBER( i8748_port2_r );
- DECLARE_WRITE8_MEMBER( i8748_port2_w );
- DECLARE_READ_LINE_MEMBER( i8748_t0_r );
+ uint8_t i8748_data_r();
+ uint8_t i8748_port2_r();
+ void i8748_port2_w(uint8_t data);
+ int i8748_t0_r();
- void simutrek_portmap(address_map &map);
+ void simutrek_portmap(address_map &map) ATTR_COLD;
// internal state
required_device<i8748_device> m_i8748_cpu;
- uint8_t m_audio_squelch; // audio squelch value
+ emu_timer *m_irq_off_timer;
+ emu_timer *m_latch_data_timer;
+ uint8_t m_audio_squelch; // audio squelch value
uint8_t m_data; // parallel data for simutrek
- bool m_data_ready; // ready flag for simutrek data
- uint8_t m_i8748_port2; // 8748 port 2 state
+ bool m_data_ready; // ready flag for simutrek data
+ uint8_t m_i8748_port2; // 8748 port 2 state
uint8_t m_controlnext; // latch to control next pair of fields
uint8_t m_controlthis; // latched value for our control over the current pair of fields
};