1 // license:BSD-3-Clause 2 // copyright-holders:Nicola Salmoria 3 #ifndef MAME_INCLUDES_GALAGA_H 4 #define MAME_INCLUDES_GALAGA_H 5 6 #pragma once 7 8 #include "video/starfield_05xx.h" 9 #include "machine/74259.h" 10 #include "sound/discrete.h" 11 #include "sound/namco.h" 12 #include "sound/samples.h" 13 #include "emupal.h" 14 #include "screen.h" 15 #include "tilemap.h" 16 17 18 class galaga_state : public driver_device 19 { 20 public: galaga_state(const machine_config & mconfig,device_type type,const char * tag)21 galaga_state(const machine_config &mconfig, device_type type, const char *tag) 22 : driver_device(mconfig, type, tag) 23 , m_videoram(*this, "videoram") 24 , m_galaga_ram1(*this, "galaga_ram1") 25 , m_galaga_ram2(*this, "galaga_ram2") 26 , m_galaga_ram3(*this, "galaga_ram3") 27 , m_videolatch(*this, "videolatch") 28 , m_maincpu(*this, "maincpu") 29 , m_subcpu(*this, "sub") 30 , m_subcpu2(*this, "sub2") 31 , m_namco_sound(*this, "namco") 32 , m_gfxdecode(*this, "gfxdecode") 33 , m_screen(*this, "screen") 34 , m_palette(*this, "palette") 35 , m_leds(*this, "led%u", 0U) 36 , m_starfield(*this, "starfield") 37 , m_galaga_gfxbank(0) 38 , m_main_irq_mask(0) 39 , m_sub_irq_mask(0) 40 , m_sub2_nmi_mask(0) 41 { } 42 43 uint8_t bosco_dsw_r(offs_t offset); 44 DECLARE_WRITE_LINE_MEMBER(flip_screen_w); 45 DECLARE_WRITE_LINE_MEMBER(irq1_clear_w); 46 DECLARE_WRITE_LINE_MEMBER(irq2_clear_w); 47 DECLARE_WRITE_LINE_MEMBER(nmion_w); 48 void galaga_videoram_w(offs_t offset, uint8_t data); 49 DECLARE_WRITE_LINE_MEMBER(gatsbee_bank_w); 50 void out(uint8_t data); 51 DECLARE_WRITE_LINE_MEMBER(lockout); 52 uint8_t namco_52xx_rom_r(offs_t offset); 53 uint8_t namco_52xx_si_r(); 54 void init_galaga(); 55 void init_gatsbee(); 56 TILEMAP_MAPPER_MEMBER(tilemap_scan); 57 TILE_GET_INFO_MEMBER(get_tile_info); 58 DECLARE_VIDEO_START(galaga); 59 void galaga_palette(palette_device &palette) const; 60 uint32_t screen_update_galaga(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 61 DECLARE_WRITE_LINE_MEMBER(screen_vblank_galaga); 62 DECLARE_WRITE_LINE_MEMBER(vblank_irq); 63 TIMER_CALLBACK_MEMBER(cpu3_interrupt_callback); 64 void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect ); 65 uint16_t get_next_lfsr_state(uint16_t lfsr); 66 void draw_stars(bitmap_ind16 &bitmap, const rectangle &cliprect ); 67 void galaga(machine_config &config); 68 void gatsbee(machine_config &config); 69 void galagab(machine_config &config); 70 void dzigzag_mem4(address_map &map); 71 void galaga_map(address_map &map); 72 void galaga_mem4(address_map &map); 73 void gatsbee_main_map(address_map &map); 74 75 protected: 76 virtual void machine_start() override; 77 virtual void machine_reset() override; 78 79 /* memory pointers, devices */ 80 optional_shared_ptr<uint8_t> m_videoram; 81 optional_shared_ptr<uint8_t> m_galaga_ram1; 82 optional_shared_ptr<uint8_t> m_galaga_ram2; 83 optional_shared_ptr<uint8_t> m_galaga_ram3; 84 optional_device<ls259_device> m_videolatch; // not present on Xevious 85 required_device<cpu_device> m_maincpu; 86 required_device<cpu_device> m_subcpu; 87 required_device<cpu_device> m_subcpu2; 88 required_device<namco_device> m_namco_sound; 89 required_device<gfxdecode_device> m_gfxdecode; 90 required_device<screen_device> m_screen; 91 required_device<palette_device> m_palette; 92 output_finder<2> m_leds; 93 optional_device<starfield_05xx_device> m_starfield; // not present on battles, digdug, xevious 94 emu_timer *m_cpu3_interrupt_timer; 95 96 uint32_t m_galaga_gfxbank; // used by gatsbee 97 98 /* shared */ 99 tilemap_t *m_fg_tilemap; 100 tilemap_t *m_bg_tilemap; 101 102 uint8_t m_main_irq_mask; 103 uint8_t m_sub_irq_mask; 104 uint8_t m_sub2_nmi_mask; 105 }; 106 107 DISCRETE_SOUND_EXTERN( galaga_discrete ); 108 DISCRETE_SOUND_EXTERN( bosco_discrete ); 109 110 #endif // MAME_INCLUDES_GALAGA_H 111