1 // license:BSD-3-Clause 2 // copyright-holders:Aaron Giles 3 4 /*************************************************************************** 5 6 HAR MadMax hardware 7 8 **************************************************************************/ 9 #ifndef MAME_INCLUDES_DCHEESE_H 10 #define MAME_INCLUDES_DCHEESE_H 11 12 #pragma once 13 14 #include "machine/gen_latch.h" 15 #include "sound/bsmt2000.h" 16 #include "emupal.h" 17 #include "screen.h" 18 19 class dcheese_state : public driver_device 20 { 21 public: dcheese_state(const machine_config & mconfig,device_type type,const char * tag)22 dcheese_state(const machine_config &mconfig, device_type type, const char *tag) : 23 driver_device(mconfig, type, tag), 24 m_palrom(*this, "palrom"), 25 m_gfxrom(*this, "gfx"), 26 m_eepromout_io(*this, "EEPROMOUT"), 27 m_2a0002_io(*this, "2a0002"), 28 m_2a000e_io(*this, "2a000e"), 29 m_maincpu(*this, "maincpu"), 30 m_audiocpu(*this, "audiocpu"), 31 m_screen(*this, "screen"), 32 m_bsmt(*this, "bsmt"), 33 m_soundlatch(*this, "soundlatch") 34 { } 35 36 void fredmem(machine_config &config); 37 void dcheese(machine_config &config); 38 39 protected: 40 enum 41 { 42 TIMER_BLITTER_SCANLINE, 43 TIMER_SIGNAL_IRQ 44 }; 45 46 virtual void machine_start() override; 47 virtual void video_start() override; 48 49 virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; 50 51 private: 52 required_region_ptr<u16> m_palrom; 53 required_region_ptr<u8> m_gfxrom; 54 required_ioport m_eepromout_io; 55 required_ioport m_2a0002_io; 56 required_ioport m_2a000e_io; 57 58 /* video-related */ 59 u16 m_blitter_color[2]; 60 u16 m_blitter_xparam[16]; 61 u16 m_blitter_yparam[16]; 62 u16 m_blitter_vidparam[32]; 63 64 std::unique_ptr<bitmap_ind16> m_dstbitmap; 65 emu_timer *m_blitter_timer; 66 emu_timer *m_signal_irq_timer; 67 68 /* misc */ 69 u8 m_irq_state[5]; 70 u8 m_sound_control; 71 u8 m_sound_msb_latch; 72 73 /* devices */ 74 required_device<cpu_device> m_maincpu; 75 required_device<cpu_device> m_audiocpu; 76 required_device<screen_device> m_screen; 77 required_device<bsmt2000_device> m_bsmt; 78 required_device<generic_latch_8_device> m_soundlatch; 79 80 void eeprom_control_w(offs_t offset, u16 data, u16 mem_mask = ~0); 81 u8 sound_status_r(); 82 void sound_control_w(u8 data); 83 void bsmt_data_w(offs_t offset, u8 data); 84 void blitter_color_w(offs_t offset, u16 data, u16 mem_mask = ~0); 85 void blitter_xparam_w(offs_t offset, u16 data, u16 mem_mask = ~0); 86 void blitter_yparam_w(offs_t offset, u16 data, u16 mem_mask = ~0); 87 void blitter_vidparam_w(offs_t offset, u16 data, u16 mem_mask = ~0); 88 void blitter_unknown_w(offs_t offset, u16 data, u16 mem_mask = ~0); 89 u16 blitter_vidparam_r(offs_t offset); 90 void dcheese_palette(palette_device &palette) const; 91 u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 92 DECLARE_WRITE_LINE_MEMBER(vblank); 93 void signal_irq(u8 which); 94 void update_irq_state(); 95 uint8_t iack_r(offs_t offset); 96 void update_scanline_irq(); 97 void do_clear(); 98 void do_blit(); 99 100 void main_cpu_map(address_map &map); 101 void main_fc7_map(address_map &map); 102 void sound_cpu_map(address_map &map); 103 }; 104 105 #endif // MAME_INCLUDES_DCHEESE_H 106