1 // license:BSD-3-Clause 2 // copyright-holders:smf, Nicola Salmoria, Couriersud 3 // thanks-to: Marc Lafontaine 4 #ifndef MAME_INCLUDES_POPEYE_H 5 #define MAME_INCLUDES_POPEYE_H 6 7 #pragma once 8 9 #include "cpu/z80/z80.h" 10 #include "sound/ay8910.h" 11 #include "video/resnet.h" 12 #include "emupal.h" 13 #include "tilemap.h" 14 15 #include <array> 16 17 class tnx1_state : public driver_device 18 { 19 public: tnx1_state(const machine_config & mconfig,device_type type,const char * tag)20 tnx1_state(const machine_config &mconfig, device_type type, const char *tag) : 21 driver_device(mconfig, type, tag), 22 m_maincpu(*this, "maincpu"), 23 m_aysnd(*this, "aysnd"), 24 m_gfxdecode(*this, "gfxdecode"), 25 m_palette(*this, "palette"), 26 m_dmasource(*this, "dmasource"), 27 m_videoram(*this, "videoram"), 28 m_colorram(*this, "colorram"), 29 m_color_prom(*this, "proms"), 30 m_color_prom_spr(*this, "sprpal"), 31 m_io_mconf(*this, "MCONF"), 32 m_io_dsw1(*this, "DSW1"), 33 m_background_scroll{0,0,0}, 34 m_fg_tilemap(nullptr), 35 m_palette_bank(0), 36 m_palette_bank_cache(0), 37 m_prot0(0), 38 m_prot1(0), 39 m_prot_shift(0), 40 m_dswbit(0), 41 m_nmi_enabled(false), 42 m_field(0) 43 { } 44 45 DECLARE_READ_LINE_MEMBER(dsw1_read); 46 DECLARE_READ_LINE_MEMBER(pop_field_r); 47 48 virtual void config(machine_config &config); 49 50 protected: 51 required_device<z80_device> m_maincpu; 52 required_device<ay8910_device> m_aysnd; 53 required_device<gfxdecode_device> m_gfxdecode; 54 required_device<palette_device> m_palette; 55 required_shared_ptr<uint8_t> m_dmasource; 56 required_shared_ptr<uint8_t> m_videoram; 57 required_shared_ptr<uint8_t> m_colorram; 58 required_region_ptr<uint8_t> m_color_prom; 59 required_region_ptr<uint8_t> m_color_prom_spr; 60 required_ioport m_io_mconf; 61 required_ioport m_io_dsw1; 62 63 static const res_net_decode_info mb7051_decode_info; 64 static const res_net_decode_info mb7052_decode_info; 65 static const res_net_info txt_mb7051_net_info; 66 static const res_net_info tnx1_bak_mb7051_net_info; 67 static const res_net_info obj_mb7052_net_info; bak_mb7051_net_info()68 virtual const res_net_info bak_mb7051_net_info() { return tnx1_bak_mb7051_net_info; }; 69 70 std::unique_ptr<bitmap_ind16> m_sprite_bitmap; 71 std::vector<uint8_t> m_sprite_ram; 72 std::vector<uint8_t> m_background_ram; 73 uint8_t m_background_scroll[3]; 74 tilemap_t *m_fg_tilemap; 75 uint8_t m_palette_bank; 76 uint8_t m_palette_bank_cache; 77 uint8_t m_prot0; 78 uint8_t m_prot1; 79 uint8_t m_prot_shift; 80 uint8_t m_dswbit; 81 bool m_nmi_enabled; 82 int m_field; 83 std::array<bitmap_ind16, 2> m_bitmap; // bitmaps for fields 84 85 virtual void refresh_w(offs_t offset, uint8_t data); 86 uint8_t protection_r(offs_t offset); 87 void protection_w(offs_t offset, uint8_t data); 88 void popeye_videoram_w(offs_t offset, uint8_t data); 89 void popeye_colorram_w(offs_t offset, uint8_t data); 90 virtual void background_w(offs_t offset, uint8_t data); 91 void popeye_portB_w(uint8_t data); 92 TILE_GET_INFO_MEMBER(get_fg_tile_info); 93 virtual void driver_start() override; 94 virtual void video_start() override; 95 virtual void tnx1_palette(palette_device &palette); 96 uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 97 virtual DECLARE_WRITE_LINE_MEMBER(screen_vblank); 98 void update_palette(); 99 virtual void decrypt_rom(); 100 virtual void draw_background(bitmap_ind16 &bitmap, const rectangle &cliprect); 101 void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); 102 void draw_field(bitmap_ind16 &bitmap, const rectangle &cliprect); 103 104 virtual void maincpu_program_map(address_map &map); 105 void maincpu_io_map(address_map &map); 106 bootleg_sprites()107 virtual bool bootleg_sprites() const { return false; } 108 }; 109 110 class tpp1_state : public tnx1_state 111 { 112 using tnx1_state::tnx1_state; 113 protected: 114 virtual void tnx1_palette(palette_device &palette) override; 115 virtual void draw_background(bitmap_ind16 &bitmap, const rectangle &cliprect) override; 116 117 static const res_net_info tpp1_bak_mb7051_net_info; bak_mb7051_net_info()118 virtual const res_net_info bak_mb7051_net_info() override { return tpp1_bak_mb7051_net_info; }; 119 }; 120 121 class popeyebl_state : public tpp1_state 122 { 123 using tpp1_state::tpp1_state; 124 public: 125 virtual void config(machine_config& config) override; 126 protected: 127 virtual void decrypt_rom() override; 128 virtual void maincpu_program_map(address_map &map) override; 129 void decrypted_opcodes_map(address_map& map); 130 bootleg_sprites()131 virtual bool bootleg_sprites() const override { return true; } 132 }; 133 134 class tpp2_state : public tpp1_state 135 { 136 using tpp1_state::tpp1_state; 137 public: 138 virtual void config(machine_config &config) override; 139 protected: 140 bool m_watchdog_enabled; 141 uint8_t m_watchdog_counter; 142 143 virtual void driver_start() override; 144 virtual void refresh_w(offs_t offset, uint8_t data) override; 145 virtual DECLARE_WRITE_LINE_MEMBER(screen_vblank) override; 146 virtual void maincpu_program_map(address_map &map) override; 147 virtual void decrypt_rom() override; 148 virtual void draw_background(bitmap_ind16 &bitmap, const rectangle &cliprect) override; 149 virtual void background_w(offs_t offset, uint8_t data) override; 150 }; 151 152 class tpp2_noalu_state : public tpp2_state 153 { 154 using tpp2_state::tpp2_state; 155 156 protected: 157 virtual void maincpu_program_map(address_map &map) override; 158 }; 159 160 #endif // MAME_INCLUDES_POPEYE_H 161