diff options
Diffstat (limited to 'src/devices/machine/generalplus_gpl16250soc.h')
-rw-r--r-- | src/devices/machine/generalplus_gpl16250soc.h | 77 |
1 files changed, 45 insertions, 32 deletions
diff --git a/src/devices/machine/generalplus_gpl16250soc.h b/src/devices/machine/generalplus_gpl16250soc.h index fa2b176e421..f50f2eeef60 100644 --- a/src/devices/machine/generalplus_gpl16250soc.h +++ b/src/devices/machine/generalplus_gpl16250soc.h @@ -27,33 +27,6 @@ public: { } - sunplus_gcm394_base_device(const machine_config& mconfig, device_type type, const char* tag, device_t* owner, uint32_t clock, address_map_constructor internal) : - unsp_20_device(mconfig, type, tag, owner, clock, internal), - device_mixer_interface(mconfig, *this, 2), - m_screen(*this, finder_base::DUMMY_TAG), - m_spg_video(*this, "spgvideo"), - m_spg_audio(*this, "spgaudio"), - m_internalrom(*this, "internal"), - m_mainram(*this, "mainram"), - m_porta_in(*this), - m_portb_in(*this), - m_portc_in(*this), - m_portd_in(*this), - m_porta_out(*this), - m_portb_out(*this), - m_portc_out(*this), - m_portd_out(*this), - m_nand_read_cb(*this), - m_csbase(0x20000), - m_cs_space(nullptr), - m_romtype(0), - m_space_read_cb(*this), - m_space_write_cb(*this), - m_boot_mode(0), - m_cs_callback(*this, DEVICE_SELF, FUNC(sunplus_gcm394_base_device::default_cs_callback)) - { - } - uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { return m_spg_video->screen_update(screen, bitmap, cliprect); } auto porta_in() { return m_porta_in.bind(); } @@ -71,7 +44,7 @@ public: auto nand_read_callback() { return m_nand_read_cb.bind(); } - DECLARE_WRITE_LINE_MEMBER(vblank) { m_spg_video->vblank(state); } + void vblank(int state) { m_spg_video->vblank(state); } virtual void device_add_mconfig(machine_config& config) override; @@ -88,12 +61,14 @@ public: //void set_pal_sprites_hack(int pal_sprites) { m_spg_video->set_pal_sprites(pal_sprites); } //void set_pal_back_hack(int pal_back) { m_spg_video->set_pal_back(pal_back); } void set_alt_extrasprite_hack(int alt_extrasprite_hack) { m_spg_video->set_alt_extrasprite(alt_extrasprite_hack); } + void set_legacy_video_mode() { m_spg_video->set_legacy_video_mode(); } void set_romtype(int romtype) { m_romtype = romtype; } inline uint16_t get_ram_addr(uint32_t addr) { return m_mainram[addr]; } protected: + sunplus_gcm394_base_device(const machine_config& mconfig, device_type type, const char* tag, device_t* owner, uint32_t clock, address_map_constructor internal); virtual void device_start() override; virtual void device_reset() override; @@ -193,7 +168,7 @@ protected: uint16_t m_system_dma_memtype; devcb_read16 m_nand_read_cb; - int m_csbase; + uint32_t m_csbase; uint16_t internalrom_lower32_r(offs_t offset); @@ -346,8 +321,8 @@ private: void unkarea_7961_w(uint16_t data); - DECLARE_WRITE_LINE_MEMBER(videoirq_w); - DECLARE_WRITE_LINE_MEMBER(audioirq_w); + void videoirq_w(int state); + void audioirq_w(int state); uint16_t system_7a35_r(); uint16_t system_7a37_r(); @@ -359,7 +334,8 @@ private: void checkirq6(); emu_timer *m_unk_timer; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + + TIMER_CALLBACK_MEMBER(unknown_tick); inline uint16_t read_space(uint32_t offset); inline void write_space(uint32_t offset, uint16_t data); @@ -463,10 +439,47 @@ private: uint16_t spi_unk_7943_r(); }; +class generalplus_gpspi_direct_device : public sunplus_gcm394_base_device +{ +public: + template <typename T> + generalplus_gpspi_direct_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&screen_tag) : + generalplus_gpspi_direct_device(mconfig, tag, owner, clock) + { + m_screen.set_tag(std::forward<T>(screen_tag)); + //m_csbase = 0x30000; + // TODO: is cs_space even used by this type? + m_csbase = 0xffffffff; + } + + generalplus_gpspi_direct_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + +protected: + void gpspi_direct_internal_map(address_map &map); + + virtual void device_start() override; + virtual void device_reset() override; + +private: + uint16_t ramread_r(offs_t offset); + void ramwrite_w(offs_t offset, uint16_t data); + uint16_t spi_direct_7b40_r(); + uint16_t spi_direct_7b46_r(); + uint16_t spi_direct_7af0_r(); + void spi_direct_7af0_w(uint16_t data); + uint16_t spi_direct_79f5_r(); + uint16_t spi_direct_78e8_r(); + void spi_direct_78e8_w(uint16_t data); + uint16_t spi_direct_79f4_r(); + + uint16_t m_7af0; +}; + DECLARE_DEVICE_TYPE(GCM394, sunplus_gcm394_device) DECLARE_DEVICE_TYPE(GPAC800, generalplus_gpac800_device) DECLARE_DEVICE_TYPE(GP_SPISPI, generalplus_gpspispi_device) +DECLARE_DEVICE_TYPE(GP_SPI_DIRECT, generalplus_gpspi_direct_device) #endif // MAME_MACHINE_GENERALPLUS_GPL16250SOC_H |