1 // license:BSD-3-Clause 2 // copyright-holders:Quench 3 /*************************************************************************** 4 Twincobr/Flying Shark/Wardner game hardware from 1986-1987 5 ----------------------------------------------------------- 6 ****************************************************************************/ 7 #ifndef MAME_INCLUDES_TWINCOBR_H 8 #define MAME_INCLUDES_TWINCOBR_H 9 10 #pragma once 11 12 #include "cpu/tms32010/tms32010.h" 13 #include "machine/74259.h" 14 #include "video/mc6845.h" 15 #include "video/bufsprite.h" 16 #include "video/toaplan_scu.h" 17 #include "emupal.h" 18 #include "screen.h" 19 #include "tilemap.h" 20 21 class twincobr_state : public driver_device 22 { 23 public: twincobr_state(const machine_config & mconfig,device_type type,const char * tag)24 twincobr_state(const machine_config &mconfig, device_type type, const char *tag) : 25 driver_device(mconfig, type, tag), 26 m_sharedram(*this, "sharedram"), 27 m_spriteram8(*this, "spriteram8"), 28 m_spriteram16(*this, "spriteram16"), 29 m_maincpu(*this, "maincpu"), 30 m_dsp(*this, "dsp"), 31 m_spritegen(*this, "scu"), 32 m_gfxdecode(*this, "gfxdecode"), 33 m_screen(*this, "screen"), 34 m_palette(*this, "palette"), 35 m_mainlatch(*this, "mainlatch"), 36 m_coinlatch(*this, "coinlatch") 37 { } 38 39 void twincobr(machine_config &config); 40 void twincobrw(machine_config &config); 41 void fsharkbt(machine_config &config); 42 void fshark(machine_config &config); 43 44 void init_twincobr(); 45 46 protected: 47 virtual void device_post_load() override; 48 virtual void machine_reset() override; 49 virtual void video_start() override; 50 51 optional_shared_ptr<u8> m_sharedram; 52 optional_device<buffered_spriteram8_device> m_spriteram8; 53 optional_device<buffered_spriteram16_device> m_spriteram16; 54 55 u32 m_fg_rom_bank; 56 u32 m_bg_ram_bank; 57 int m_intenable; 58 int m_dsp_on; 59 int m_dsp_bio; 60 int m_fsharkbt_8741; 61 int m_dsp_execute; 62 u32 m_dsp_addr_w; 63 u32 m_main_ram_seg; 64 std::unique_ptr<u16[]> m_bgvideoram16; 65 std::unique_ptr<u16[]> m_fgvideoram16; 66 std::unique_ptr<u16[]> m_txvideoram16; 67 size_t m_bgvideoram_size; 68 size_t m_fgvideoram_size; 69 size_t m_txvideoram_size; 70 s32 m_txscrollx; 71 s32 m_txscrolly; 72 s32 m_fgscrollx; 73 s32 m_fgscrolly; 74 s32 m_bgscrollx; 75 s32 m_bgscrolly; 76 s32 m_txoffs; 77 s32 m_fgoffs; 78 s32 m_bgoffs; 79 s32 m_display_on; 80 tilemap_t *m_bg_tilemap; 81 tilemap_t *m_fg_tilemap; 82 tilemap_t *m_tx_tilemap; 83 84 void twincobr_dsp_addrsel_w(u16 data); 85 u16 twincobr_dsp_r(); 86 void twincobr_dsp_w(u16 data); 87 void wardner_dsp_addrsel_w(u16 data); 88 u16 wardner_dsp_r(); 89 void wardner_dsp_w(u16 data); 90 void twincobr_dsp_bio_w(u16 data); 91 u16 fsharkbt_dsp_r(); 92 void fsharkbt_dsp_w(u16 data); 93 DECLARE_READ_LINE_MEMBER(twincobr_bio_r); 94 DECLARE_WRITE_LINE_MEMBER(int_enable_w); 95 DECLARE_WRITE_LINE_MEMBER(dsp_int_w); 96 DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); 97 DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); 98 DECLARE_WRITE_LINE_MEMBER(coin_lockout_1_w); 99 DECLARE_WRITE_LINE_MEMBER(coin_lockout_2_w); 100 u8 twincobr_sharedram_r(offs_t offset); 101 void twincobr_sharedram_w(offs_t offset, u8 data); 102 void twincobr_txoffs_w(offs_t offset, u16 data, u16 mem_mask = ~0); 103 u16 twincobr_txram_r(); 104 void twincobr_txram_w(offs_t offset, u16 data, u16 mem_mask = ~0); 105 void twincobr_bgoffs_w(offs_t offset, u16 data, u16 mem_mask = ~0); 106 u16 twincobr_bgram_r(); 107 void twincobr_bgram_w(offs_t offset, u16 data, u16 mem_mask = ~0); 108 void twincobr_fgoffs_w(offs_t offset, u16 data, u16 mem_mask = ~0); 109 u16 twincobr_fgram_r(); 110 void twincobr_fgram_w(offs_t offset, u16 data, u16 mem_mask = ~0); 111 void twincobr_txscroll_w(offs_t offset, u16 data, u16 mem_mask = ~0); 112 void twincobr_bgscroll_w(offs_t offset, u16 data, u16 mem_mask = ~0); 113 void twincobr_fgscroll_w(offs_t offset, u16 data, u16 mem_mask = ~0); 114 void twincobr_exscroll_w(offs_t offset, u16 data); 115 void wardner_txlayer_w(offs_t offset, u8 data); 116 void wardner_bglayer_w(offs_t offset, u8 data); 117 void wardner_fglayer_w(offs_t offset, u8 data); 118 void wardner_txscroll_w(offs_t offset, u8 data); 119 void wardner_bgscroll_w(offs_t offset, u8 data); 120 void wardner_fgscroll_w(offs_t offset, u8 data); 121 void wardner_exscroll_w(offs_t offset, u8 data); 122 u8 wardner_videoram_r(offs_t offset); 123 void wardner_videoram_w(offs_t offset, u8 data); 124 u8 wardner_sprite_r(offs_t offset); 125 void wardner_sprite_w(offs_t offset, u8 data); 126 TILE_GET_INFO_MEMBER(get_bg_tile_info); 127 TILE_GET_INFO_MEMBER(get_fg_tile_info); 128 TILE_GET_INFO_MEMBER(get_tx_tile_info); 129 u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 130 DECLARE_WRITE_LINE_MEMBER(twincobr_vblank_irq); 131 DECLARE_WRITE_LINE_MEMBER(wardner_vblank_irq); 132 void twincobr_create_tilemaps(); 133 DECLARE_WRITE_LINE_MEMBER(display_on_w); 134 DECLARE_WRITE_LINE_MEMBER(flipscreen_w); 135 DECLARE_WRITE_LINE_MEMBER(bg_ram_bank_w); 136 DECLARE_WRITE_LINE_MEMBER(fg_rom_bank_w); 137 void log_vram(); 138 void driver_savestate(); 139 required_device<cpu_device> m_maincpu; 140 required_device<tms32010_device> m_dsp; 141 required_device<toaplan_scu_device> m_spritegen; 142 required_device<gfxdecode_device> m_gfxdecode; 143 required_device<screen_device> m_screen; 144 required_device<palette_device> m_palette; 145 required_device<ls259_device> m_mainlatch; 146 required_device<ls259_device> m_coinlatch; 147 148 void dsp_io_map(address_map &map); 149 void dsp_program_map(address_map &map); 150 void fsharkbt_i8741_io_map(address_map &map); 151 void main_program_map(address_map &map); 152 void sound_io_map(address_map &map); 153 void sound_program_map(address_map &map); 154 }; 155 156 #endif // MAME_INCLUDES_TWINCOBR_H 157