1 // license:BSD-3-Clause 2 // copyright-holders:David Haywood, Paul Priest 3 /************************************************************************* 4 5 Psikyo PS6807 (PS4) 6 7 *************************************************************************/ 8 9 #include "cpu/sh/sh2.h" 10 #include "sound/ymf278b.h" 11 #include "machine/eepromser.h" 12 #include "emupal.h" 13 #include "screen.h" 14 15 class psikyo4_state : public driver_device 16 { 17 public: psikyo4_state(const machine_config & mconfig,device_type type,const char * tag)18 psikyo4_state(const machine_config &mconfig, device_type type, const char *tag) : 19 driver_device(mconfig, type, tag), 20 m_spriteram(*this, "spriteram"), 21 m_vidregs(*this, "vidregs"), 22 m_bgpen(*this, "bgpen_%u", 1U), 23 m_paletteram(*this, "paletteram"), 24 m_gfxbank(*this, "gfxbank"), 25 m_ymf_bank(*this, "ymfbank%u", 0), 26 m_maincpu(*this, "maincpu"), 27 m_eeprom(*this, "eeprom"), 28 m_gfxdecode(*this, "gfxdecode"), 29 m_palette(*this, {"lpalette", "rpalette"}), 30 m_lscreen(*this, "lscreen"), 31 m_rscreen(*this, "rscreen"), 32 m_system(*this, "SYSTEM"), 33 m_keys(*this, "KEY.%u", 0) 34 { } 35 36 void ps4big(machine_config &config); 37 void ps4small(machine_config &config); 38 39 DECLARE_CUSTOM_INPUT_MEMBER(system_r); 40 template <int P> DECLARE_CUSTOM_INPUT_MEMBER(mahjong_ctrl_r); 41 42 private: 43 /* memory pointers */ 44 required_shared_ptr<uint32_t> m_spriteram; 45 required_shared_ptr<uint32_t> m_vidregs; 46 required_shared_ptr_array<uint32_t, 2> m_bgpen; 47 required_shared_ptr<uint32_t> m_paletteram; 48 49 required_memory_bank m_gfxbank; 50 required_memory_bank_array<4> m_ymf_bank; 51 52 uint16_t m_gfx_max_bank; 53 uint8_t m_ymf_max_bank; 54 uint8_t m_io_select; 55 56 /* video-related */ 57 double m_oldbrt[2]; 58 59 /* devices */ 60 required_device<sh2_device> m_maincpu; 61 required_device<eeprom_serial_93cxx_device> m_eeprom; 62 required_device<gfxdecode_device> m_gfxdecode; 63 required_device_array<palette_device, 2> m_palette; 64 required_device<screen_device> m_lscreen; 65 required_device<screen_device> m_rscreen; 66 optional_ioport m_system; 67 optional_ioport_array<8> m_keys; 68 69 void paletteram_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); 70 template<int Screen> void bgpen_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); 71 template<int Screen> void screen_brt_w(uint8_t data); 72 void vidregs_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); 73 void ymf_bank_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 74 void io_select_w(uint8_t data); 75 void eeprom_w(offs_t offset, uint8_t data, uint8_t mem_mask = ~0); 76 virtual void machine_start() override; 77 virtual void machine_reset() override; 78 virtual void video_start() override; 79 template<int Screen> uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 80 INTERRUPT_GEN_MEMBER(interrupt); 81 void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, uint32_t scr); 82 void ps4_map(address_map &map); 83 void ps4_ymf_map(address_map &map); 84 }; 85