diff options
Diffstat (limited to 'src/devices/machine/vrender0.h')
-rw-r--r-- | src/devices/machine/vrender0.h | 164 |
1 files changed, 70 insertions, 94 deletions
diff --git a/src/devices/machine/vrender0.h b/src/devices/machine/vrender0.h index 3efb859938b..ca418101959 100644 --- a/src/devices/machine/vrender0.h +++ b/src/devices/machine/vrender0.h @@ -20,20 +20,6 @@ #include "diserial.h" //************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define IDLE_LOOP_SPEEDUP - - - -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - - - -//************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -48,28 +34,28 @@ public: // construction/destruction vr0uart_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - void regs_map(address_map &map); + void regs_map(address_map &map) ATTR_COLD; void set_channel_num(int ch) { m_channel_num = ch; } void set_parent(vrender0soc_device *parent) { m_parent = parent; } protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; private: - DECLARE_READ32_MEMBER( control_r ); - DECLARE_WRITE32_MEMBER( control_w ); - DECLARE_READ32_MEMBER( baud_rate_div_r ); - DECLARE_WRITE32_MEMBER( baud_rate_div_w ); - DECLARE_READ32_MEMBER( status_r ); - DECLARE_WRITE32_MEMBER( transmit_buffer_w ); - DECLARE_READ32_MEMBER( receive_buffer_r ); + uint32_t control_r(); + void control_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); + uint32_t baud_rate_div_r(); + void baud_rate_div_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); + uint32_t status_r(); + void transmit_buffer_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); + uint32_t receive_buffer_r(offs_t offset, uint32_t mem_mask = ~0); TIMER_CALLBACK_MEMBER( break_timer_cb ); - uint32_t m_ucon; // control - uint32_t m_ubdr; // baud rate - uint32_t m_ustat; // status + uint32_t m_ucon = 0; // control + uint32_t m_ubdr = 0; // baud rate + uint32_t m_ustat = 0; // status util::fifo<uint8_t, 16> m_urxb_fifo; // receive FIFO void update_serial_config(); @@ -95,26 +81,28 @@ public: // construction/destruction vrender0soc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - void regs_map(address_map &map); - void audiovideo_map(address_map &map); + void regs_map(address_map &map) ATTR_COLD; + void audiovideo_map(address_map &map) ATTR_COLD; + void texture_map(address_map &map) ATTR_COLD; + void frame_map(address_map &map) ATTR_COLD; template<class T> void set_host_cpu_tag(T &&tag) { m_host_cpu.set_tag(std::forward<T>(tag)); } void set_external_vclk(const uint32_t vclk) { m_ext_vclk = vclk; } void set_external_vclk(const XTAL vclk) { m_ext_vclk = vclk.value(); } bool crt_is_blanked() { return ((m_crtcregs[0] & 0x0200) == 0x0200); } bool crt_active_vblank_irq(); void IntReq( int num ); - int irq_callback(); + uint8_t irq_callback(); bool irq_pending() { return m_intst; } void write_line_tx(int port, uint8_t value); template <int Port> auto tx_callback() { return write_tx[Port].bind(); } - template <int Port> DECLARE_WRITE_LINE_MEMBER(rx_w) { m_uart[Port]->rx_w((uint8_t)state); } + template <int Port> void rx_w(int state) { m_uart[Port]->rx_w((uint8_t)state); } protected: // device-level overrides //virtual void device_validity_check(validity_checker &valid) const override; - virtual void device_add_mconfig(machine_config &config) override; - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; private: required_device <se3208_device> m_host_cpu; @@ -122,84 +110,78 @@ private: required_device <palette_device> m_palette; required_device <vr0video_device> m_vr0vid; required_device <vr0sound_device> m_vr0snd; - required_device <speaker_device> m_lspeaker; - required_device <speaker_device> m_rspeaker; + required_device <speaker_device> m_speaker; required_device_array <vr0uart_device, 2> m_uart; required_shared_ptr <uint32_t> m_crtcregs; - uint16_t *m_textureram; - uint16_t *m_frameram; + std::unique_ptr<uint16_t []> m_textureram; + std::unique_ptr<uint16_t []> m_frameram; - address_space *m_host_space; - uint32_t m_ext_vclk; + address_space *m_host_space = nullptr; + uint32_t m_ext_vclk = 0; - devcb_write_line write_tx[2]; + devcb_write_line::array<2> write_tx; // INTC - uint32_t m_inten; - DECLARE_READ32_MEMBER(inten_r); - DECLARE_WRITE32_MEMBER(inten_w); + uint32_t m_inten = 0; + uint32_t inten_r(); + void inten_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); + + uint32_t intvec_r(); + void intvec_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); - DECLARE_READ32_MEMBER(intvec_r); - DECLARE_WRITE32_MEMBER(intvec_w); + uint8_t m_IntHigh = 0; + uint32_t m_intst = 0; + uint32_t intst_r(); + void intst_w(uint32_t data); - uint8_t m_IntHigh; - uint32_t m_intst; - DECLARE_READ32_MEMBER(intst_r); - DECLARE_WRITE32_MEMBER(intst_w); + void soundirq_cb(int state); // Timer - template<int Which> DECLARE_WRITE32_MEMBER(tmcon_w); - template<int Which> DECLARE_READ32_MEMBER(tmcon_r); - template<int Which> DECLARE_WRITE16_MEMBER(tmcnt_w); - template<int Which> DECLARE_READ16_MEMBER(tmcnt_r); - TIMER_CALLBACK_MEMBER(Timercb); - - uint32_t m_timer_control[4]; - uint16_t m_timer_count[4]; - emu_timer *m_Timer[4]; + template<int Which> void tmcon_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); + template<int Which> uint32_t tmcon_r(); + template<int Which> void tmcnt_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + template<int Which> uint16_t tmcnt_r(); + template<int Which> TIMER_CALLBACK_MEMBER(Timercb); + + uint32_t m_timer_control[4] = { 0, 0, 0, 0 }; + uint16_t m_timer_count[4] = { 0, 0, 0, 0 }; + emu_timer *m_Timer[4] = { nullptr, nullptr, nullptr, nullptr }; void TimerStart(int which); // DMAC - template<int Which> DECLARE_READ32_MEMBER(dmac_r); - template<int Which> DECLARE_WRITE32_MEMBER(dmac_w); - template<int Which> DECLARE_READ32_MEMBER(dmatc_r); - template<int Which> DECLARE_WRITE32_MEMBER(dmatc_w); - template<int Which> DECLARE_READ32_MEMBER(dmasa_r); - template<int Which> DECLARE_WRITE32_MEMBER(dmasa_w); - template<int Which> DECLARE_READ32_MEMBER(dmada_r); - template<int Which> DECLARE_WRITE32_MEMBER(dmada_w); + template<int Which> uint32_t dmac_r(); + template<int Which> void dmac_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); + template<int Which> uint32_t dmatc_r(); + template<int Which> void dmatc_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); + template<int Which> uint32_t dmasa_r(); + template<int Which> void dmasa_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); + template<int Which> uint32_t dmada_r(); + template<int Which> void dmada_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); inline int dma_setup_hold(uint8_t setting, uint8_t bitmask); struct { - uint32_t src; - uint32_t dst; - uint32_t size; - uint32_t ctrl; + uint32_t src = 0; + uint32_t dst = 0; + uint32_t size = 0; + uint32_t ctrl = 0; }m_dma[2]; // CRTC - DECLARE_READ32_MEMBER(crtc_r); - DECLARE_WRITE32_MEMBER(crtc_w); + uint32_t crtc_r(offs_t offset); + void crtc_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); void crtc_update(); inline bool crt_is_interlaced(); // Misc - DECLARE_READ32_MEMBER( sysid_r ); - DECLARE_READ32_MEMBER( cfgr_r ); + uint32_t sysid_r(); + uint32_t cfgr_r(); uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_WRITE_LINE_MEMBER(screen_vblank); - - DECLARE_READ16_MEMBER( textureram_r ); - DECLARE_WRITE16_MEMBER( textureram_w ); - DECLARE_READ16_MEMBER( frameram_r ); - DECLARE_WRITE16_MEMBER( frameram_w ); - - // Hacks -#ifdef IDLE_LOOP_SPEEDUP - uint8_t m_FlipCntRead; - DECLARE_WRITE_LINE_MEMBER(idle_skip_resume_w); - DECLARE_WRITE_LINE_MEMBER(idle_skip_speedup_w); -#endif + void screen_vblank(int state); + + uint16_t textureram_r(offs_t offset); + void textureram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + uint16_t frameram_r(offs_t offset); + void frameram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); }; @@ -207,10 +189,4 @@ private: DECLARE_DEVICE_TYPE(VRENDER0_SOC, vrender0soc_device) - -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - - #endif // MAME_MACHINE_VRENDER0_H |