diff options
Diffstat (limited to 'src/devices/machine/ldpr8210.h')
-rw-r--r-- | src/devices/machine/ldpr8210.h | 98 |
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 }; |