diff options
Diffstat (limited to 'src/devices/bus/interpro/sr/edge.h')
-rw-r--r-- | src/devices/bus/interpro/sr/edge.h | 97 |
1 files changed, 27 insertions, 70 deletions
diff --git a/src/devices/bus/interpro/sr/edge.h b/src/devices/bus/interpro/sr/edge.h index 5f3247b5158..e8a66459271 100644 --- a/src/devices/bus/interpro/sr/edge.h +++ b/src/devices/bus/interpro/sr/edge.h @@ -14,52 +14,11 @@ #include "machine/z80scc.h" #include "bus/interpro/keyboard/keyboard.h" -enum control_mask -{ - NO_HOLD = 0x01, // release DSP hold - DSP_1_HOLD_L = 0x02, // hold DSP 1 - // 0x04 maybe reset? - FIFO_LW_ENB = 0x08, // fifo low water interrupt enable - HOLD_ENB = 0x10, // DSP hold interrupt enable - HOLDA_INT_H = 0x20, // DSP hold interrupt asserted (aka HOLD_INTR) - FIFO_LW_INTR = 0x40, // fifo low water interrupt asserted (ififo) - FIFO_HW_INTR = 0x80, // fifo high water interrupt asserted (ififo) -}; - -enum status_mask -{ - DSP_1_HOLDA_H = 0x01, // aka DSP_HOLDA - FIFO_EMPTY = 0x02, // aka IFIFO_EMPTY? - FIFO_HFULL = 0x04, - KREG_OUT_FULL = 0x08, - KREG_IN_FULL = 0x10, - - // SRX_INT0_H - // SRX_PORT_RDY -}; - -enum attention_mask -{ -}; - -enum reg0_mask -{ -/* - 0x08, - 0x10, // mouse button interrupt? - 0x20, - 0x40, -*/ - SCC_INT = 0x80, // serial controller - VBLANK = 0x1000, // vertical blank? -}; - -class edge1_device_base : public device_t, public srx_card_device_base +class edge1_device_base : public device_t, public device_srx_card_interface { public: - const char *tag() const { return device_t::tag(); } - DECLARE_WRITE_LINE_MEMBER(holda); + DECLARE_WRITE_LINE_MEMBER(vblank); protected: edge1_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); @@ -70,9 +29,9 @@ protected: u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - DECLARE_WRITE_LINE_MEMBER(scc_irq) { if (state) m_reg0 |= SCC_INT; else m_reg0 &= ~SCC_INT; irq0(state); } + DECLARE_WRITE_LINE_MEMBER(scc_irq); - DECLARE_READ32_MEMBER(reg0_r) { return ((m_reg0 & ~VBLANK) | (m_screen->vblank() ? VBLANK : 0)); } + DECLARE_READ32_MEMBER(reg0_r); DECLARE_WRITE32_MEMBER(reg0_w) { COMBINE_DATA(&m_reg0); } DECLARE_READ32_MEMBER(control_r) { return m_control; }; @@ -82,7 +41,7 @@ protected: DECLARE_READ32_MEMBER(fifo_r) { return m_fifo; }; DECLARE_WRITE32_MEMBER(fifo_w) { COMBINE_DATA(&m_fifo); } DECLARE_READ32_MEMBER(kernel_r) { return m_kernel; }; - DECLARE_WRITE32_MEMBER(kernel_w) { COMBINE_DATA(&m_kernel); m_status |= KREG_IN_FULL; } // FIXME: what clears this? + DECLARE_WRITE32_MEMBER(kernel_w); DECLARE_READ32_MEMBER(attention_r) { return m_attention; }; DECLARE_WRITE32_MEMBER(attention_w) { COMBINE_DATA(&m_attention); } @@ -90,6 +49,9 @@ protected: DECLARE_WRITE32_MEMBER(ififo_lwm_w) { COMBINE_DATA(&m_ififo_lwm); } DECLARE_WRITE32_MEMBER(ififo_hwm_w) { COMBINE_DATA(&m_ififo_hwm); } + DECLARE_READ32_MEMBER(srx_master_control_r) { return m_srx_master_control; } + DECLARE_WRITE32_MEMBER(srx_master_control_w) { COMBINE_DATA(&m_srx_master_control); } + required_device<screen_device> m_screen; required_device<ram_device> m_sram; required_device<ram_device> m_vram; @@ -108,57 +70,54 @@ private: u32 m_ififo_lwm; u32 m_ififo_hwm; + + u32 m_srx_master_control; }; -class edge2_processor_device_base : public device_t, public srx_card_device_base +class edge2_processor_device_base : public device_t, public device_srx_card_interface { -public: - const char *tag() const { return device_t::tag(); } - protected: edge2_processor_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); virtual void map(address_map &map) override; - virtual void device_start() override; + virtual void device_start() override {}; }; -class edge2_framebuffer_device_base : public device_t, public srx_card_device_base +class edge2_framebuffer_device_base : public device_t, public device_srx_card_interface { -public: - const char *tag() const { return device_t::tag(); } - protected: edge2_framebuffer_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); virtual void map(address_map &map) override; - virtual void device_start() override; + virtual void device_start() override {}; }; -class edge2plus_processor_device_base : public device_t, public srx_card_device_base +class edge2plus_processor_device_base : public device_t, public device_srx_card_interface { public: - const char *tag() const { return device_t::tag(); } - - void register_screen(screen_device *screen) { m_screen = screen; } + void register_screen(screen_device *screen, ram_device *ram) { m_screen = screen; m_sram = ram; } + required_device<tms3203x_device> m_dsp1; protected: edge2plus_processor_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); virtual void map(address_map &map) override; - virtual void device_start() override; + void dsp1_map(address_map &map); + + virtual void device_start() override {}; DECLARE_WRITE_LINE_MEMBER(holda); - DECLARE_WRITE_LINE_MEMBER(scc_irq) { if (state) m_reg0 |= SCC_INT; else m_reg0 &= ~SCC_INT; irq0(state); } + DECLARE_WRITE_LINE_MEMBER(scc_irq); DECLARE_READ32_MEMBER(control_r) { return m_control; }; DECLARE_WRITE32_MEMBER(control_w); DECLARE_READ32_MEMBER(status_r) { return m_status; }; DECLARE_WRITE32_MEMBER(status_w) { COMBINE_DATA(&m_status); } DECLARE_READ32_MEMBER(kernel_r) { return m_kernel; }; - DECLARE_WRITE32_MEMBER(kernel_w) { COMBINE_DATA(&m_kernel); m_status |= KREG_IN_FULL; } // FIXME: what clears this? + DECLARE_WRITE32_MEMBER(kernel_w); DECLARE_WRITE32_MEMBER(mapping_w) { COMBINE_DATA(&m_mapping); } DECLARE_READ32_MEMBER(attention_r) { return m_attention; }; DECLARE_WRITE32_MEMBER(attention_w) { COMBINE_DATA(&m_attention); } @@ -166,11 +125,9 @@ protected: DECLARE_WRITE32_MEMBER(ififo_lwm_w) { COMBINE_DATA(&m_ififo_lwm); } DECLARE_WRITE32_MEMBER(ififo_hwm_w) { COMBINE_DATA(&m_ififo_hwm); } - DECLARE_READ32_MEMBER(reg0_r) { m_reg0 ^= VBLANK; return m_reg0; } - //DECLARE_READ32_MEMBER(reg0_r) { logerror("reg0_r vblank %d\n", m_screen->vblank()); return (m_screen == nullptr) ? (m_reg0 & ~VBLANK) : ((m_reg0 & ~VBLANK) | (m_screen->vblank() ? VBLANK : 0)); } + DECLARE_READ32_MEMBER(reg0_r); DECLARE_WRITE32_MEMBER(reg0_w) { COMBINE_DATA(&m_reg0); } - required_device<tms3203x_device> m_dsp1; private: u32 m_control; @@ -185,14 +142,14 @@ private: u32 m_reg0; screen_device *m_screen; + ram_device *m_sram; }; -class edge2plus_framebuffer_device_base : public device_t, public srx_card_device_base +class edge2plus_framebuffer_device_base : public device_t, public device_srx_card_interface { -public: - const char *tag() const { return device_t::tag(); } - protected: + friend class edge2plus_processor_device_base; + edge2plus_framebuffer_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); virtual void map(address_map &map) override; |