1 // license:BSD-3-Clause 2 // copyright-holders:Jarek Parchanski 3 4 #include "machine/bankdev.h" 5 #include "machine/timer.h" 6 #include "video/jalblend.h" 7 #include "emupal.h" 8 #include "tilemap.h" 9 10 class psychic5_state : public driver_device 11 { 12 public: psychic5_state(const machine_config & mconfig,device_type type,const char * tag)13 psychic5_state(const machine_config &mconfig, device_type type, const char *tag) 14 : driver_device(mconfig, type, tag), 15 m_maincpu(*this, "maincpu"), 16 m_audiocpu(*this, "audiocpu"), 17 m_gfxdecode(*this, "gfxdecode"), 18 m_palette(*this, "palette"), 19 m_vrambank(*this, "vrambank"), 20 m_blend(*this, "blend"), 21 m_spriteram(*this, "spriteram"), 22 m_fg_videoram(*this, "fg_videoram"), 23 m_bg_videoram(*this, "bg_videoram"), 24 m_bg_control(*this, "bg_control"), 25 m_ps5_palette_ram_bg(*this, "palette_ram_bg"), 26 m_ps5_palette_ram_sp(*this, "palette_ram_sp"), 27 m_ps5_palette_ram_tx(*this, "palette_ram_tx") 28 29 { } 30 31 void psychic5(machine_config &config); 32 void bombsa(machine_config &config); 33 34 private: 35 required_device<cpu_device> m_maincpu; 36 required_device<cpu_device> m_audiocpu; 37 required_device<gfxdecode_device> m_gfxdecode; 38 required_device<palette_device> m_palette; 39 optional_device<address_map_bank_device> m_vrambank; 40 optional_device<jaleco_blend_device> m_blend; 41 42 required_shared_ptr<uint8_t> m_spriteram; 43 required_shared_ptr<uint8_t> m_fg_videoram; 44 required_shared_ptr<uint8_t> m_bg_videoram; 45 required_shared_ptr<uint8_t> m_bg_control; 46 required_shared_ptr<uint8_t> m_ps5_palette_ram_bg; 47 required_shared_ptr<uint8_t> m_ps5_palette_ram_sp; 48 required_shared_ptr<uint8_t> m_ps5_palette_ram_tx; 49 50 uint8_t m_bank_latch; 51 uint8_t m_ps5_vram_page; 52 uint8_t m_bg_clip_mode; 53 uint8_t m_title_screen; 54 tilemap_t *m_bg_tilemap; 55 tilemap_t *m_fg_tilemap; 56 uint16_t m_palette_intensity; 57 uint8_t m_bombsa_unknown; 58 int m_sx1; 59 int m_sy1; 60 int m_sy2; 61 62 uint8_t bankselect_r(); 63 uint8_t vram_page_select_r(); 64 void vram_page_select_w(uint8_t data); 65 void fg_videoram_w(offs_t offset, uint8_t data); 66 void bg_videoram_w(offs_t offset, uint8_t data); 67 void sprite_col_w(offs_t offset, uint8_t data); 68 void bg_col_w(offs_t offset, uint8_t data); 69 void tx_col_w(offs_t offset, uint8_t data); 70 71 /* psychic5 specific */ 72 void psychic5_coin_counter_w(uint8_t data); 73 void psychic5_bankselect_w(uint8_t data); 74 void psychic5_title_screen_w(uint8_t data); 75 76 /* bombsa specific */ 77 void bombsa_bankselect_w(uint8_t data); 78 void bombsa_flipscreen_w(uint8_t data); 79 void bombsa_unknown_w(uint8_t data); 80 81 TILE_GET_INFO_MEMBER(get_bg_tile_info); 82 TILE_GET_INFO_MEMBER(get_fg_tile_info); 83 84 virtual void machine_reset() override; 85 DECLARE_MACHINE_START(psychic5); 86 DECLARE_MACHINE_START(bombsa); 87 virtual void video_start() override; 88 DECLARE_VIDEO_START(psychic5); 89 DECLARE_VIDEO_START(bombsa); 90 virtual void video_reset() override; 91 92 TIMER_DEVICE_CALLBACK_MEMBER(scanline); 93 94 uint32_t screen_update_psychic5(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 95 uint32_t screen_update_bombsa(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 96 void change_palette(int offset, uint8_t* palram, int palbase); 97 void change_bg_palette(int color, int lo_offs, int hi_offs); 98 void set_background_palette_intensity(); 99 void draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect); 100 void bombsa_main_map(address_map &map); 101 void bombsa_sound_map(address_map &map); 102 void bombsa_soundport_map(address_map &map); 103 void bombsa_vrambank_map(address_map &map); 104 void psychic5_main_map(address_map &map); 105 void psychic5_sound_map(address_map &map); 106 void psychic5_soundport_map(address_map &map); 107 void psychic5_vrambank_map(address_map &map); 108 void draw_background(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); //only used by psychic5 109 }; 110