1 // license:BSD-3-Clause 2 // copyright-holders:Pierpaolo Prazzoli 3 #ifndef MAME_INCLUDES_N8080_H 4 #define MAME_INCLUDES_N8080_H 5 6 #pragma once 7 8 #include "cpu/i8085/i8085.h" 9 #include "cpu/mcs48/mcs48.h" 10 #include "machine/timer.h" 11 #include "sound/dac.h" 12 #include "sound/sn76477.h" 13 #include "emupal.h" 14 #include "screen.h" 15 16 class n8080_state : public driver_device 17 { 18 public: n8080_state(const machine_config & mconfig,device_type type,const char * tag)19 n8080_state(const machine_config &mconfig, device_type type, const char *tag) : 20 driver_device(mconfig, type, tag), 21 m_videoram(*this, "videoram"), 22 m_maincpu(*this, "maincpu"), 23 m_audiocpu(*this, "audiocpu"), 24 m_n8080_dac(*this, "n8080_dac"), 25 m_sn(*this, "snsnd"), 26 m_screen(*this, "screen"), 27 m_palette(*this, "palette") 28 { } 29 30 protected: 31 virtual void machine_start() override; 32 virtual void machine_reset() override; 33 34 virtual void sound_pins_changed(); 35 virtual void update_SN76477_status(); 36 virtual void delayed_sound_1(int data); 37 virtual void delayed_sound_2(int data); 38 39 //private: 40 /* memory pointers */ 41 required_shared_ptr<uint8_t> m_videoram; 42 43 /* video-related */ 44 int m_sheriff_color_mode; 45 int m_sheriff_color_data; 46 47 /* sound-related */ 48 emu_timer* m_sound_timer[3]; 49 uint16_t m_prev_sound_pins; 50 uint16_t m_curr_sound_pins; 51 int m_mono_flop[3]; 52 uint8_t m_prev_snd_data; 53 54 /* other */ 55 unsigned m_shift_data; 56 unsigned m_shift_bits; 57 int m_inte; 58 59 /* devices */ 60 required_device<i8080_cpu_device> m_maincpu; 61 required_device<i8035_device> m_audiocpu; 62 optional_device<dac_bit_interface> m_n8080_dac; 63 optional_device<sn76477_device> m_sn; 64 required_device<screen_device> m_screen; 65 required_device<palette_device> m_palette; 66 67 void n8080_shift_bits_w(uint8_t data); 68 void n8080_shift_data_w(uint8_t data); 69 uint8_t n8080_shift_r(); 70 void n8080_video_control_w(uint8_t data); 71 void n8080_sound_1_w(uint8_t data); 72 void n8080_sound_2_w(uint8_t data); 73 uint8_t n8080_8035_p1_r(); 74 DECLARE_READ_LINE_MEMBER(n8080_8035_t0_r); 75 DECLARE_READ_LINE_MEMBER(n8080_8035_t1_r); 76 void n8080_dac_w(uint8_t data); 77 DECLARE_WRITE_LINE_MEMBER(n8080_inte_callback); 78 void n8080_status_callback(uint8_t data); 79 void n8080_palette(palette_device &palette) const; 80 TIMER_DEVICE_CALLBACK_MEMBER(rst1_tick); 81 TIMER_DEVICE_CALLBACK_MEMBER(rst2_tick); 82 void start_mono_flop( int n, const attotime &expire ); 83 void stop_mono_flop( int n ); 84 TIMER_CALLBACK_MEMBER( stop_mono_flop_callback ); 85 TIMER_CALLBACK_MEMBER( delayed_sound_1_callback ); 86 TIMER_CALLBACK_MEMBER( delayed_sound_2_callback ); 87 88 void main_cpu_map(address_map &map); 89 void main_io_map(address_map &map); 90 void n8080_sound_cpu_map(address_map &map); 91 }; 92 93 class spacefev_state : public n8080_state 94 { 95 public: spacefev_state(const machine_config & mconfig,device_type type,const char * tag)96 spacefev_state(const machine_config &mconfig, device_type type, const char *tag) : 97 n8080_state(mconfig, type, tag) 98 { } 99 100 void spacefev(machine_config &config); 101 102 protected: 103 virtual void machine_reset() override; 104 virtual void sound_start() override; 105 virtual void sound_reset() override; 106 virtual void video_start() override; 107 108 virtual void sound_pins_changed() override; 109 virtual void update_SN76477_status() override; 110 virtual void delayed_sound_1(int data) override; 111 virtual void delayed_sound_2(int data) override; 112 113 private: 114 void spacefev_sound(machine_config &config); 115 116 TIMER_DEVICE_CALLBACK_MEMBER(vco_voltage_timer); 117 118 TIMER_CALLBACK_MEMBER(stop_red_cannon); 119 void start_red_cannon(); 120 uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 121 122 emu_timer* m_cannon_timer; 123 int m_red_screen; 124 int m_red_cannon; 125 }; 126 127 class sheriff_state : public n8080_state 128 { 129 public: sheriff_state(const machine_config & mconfig,device_type type,const char * tag)130 sheriff_state(const machine_config &mconfig, device_type type, const char *tag) : 131 n8080_state(mconfig, type, tag) 132 { } 133 134 void sheriff(machine_config &config); 135 void westgun2(machine_config &config); 136 137 protected: 138 virtual void machine_reset() override; 139 virtual void sound_start() override; 140 virtual void sound_reset() override; 141 virtual void video_start() override; 142 143 virtual void sound_pins_changed() override; 144 virtual void update_SN76477_status() override; 145 146 private: 147 void sheriff_sound(machine_config &config); 148 149 uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 150 }; 151 152 class helifire_state : public n8080_state 153 { 154 public: helifire_state(const machine_config & mconfig,device_type type,const char * tag)155 helifire_state(const machine_config &mconfig, device_type type, const char *tag) : 156 n8080_state(mconfig, type, tag), 157 m_dac(*this, "helifire_dac"), 158 m_colorram(*this, "colorram") 159 { } 160 161 void helifire(machine_config &config); 162 163 protected: 164 virtual void machine_reset() override; 165 virtual void sound_start() override; 166 virtual void sound_reset() override; 167 virtual void video_start() override; 168 169 virtual void sound_pins_changed() override; 170 virtual void delayed_sound_2(int data) override; 171 172 private: 173 void helifire_sound(machine_config &config); 174 175 TIMER_DEVICE_CALLBACK_MEMBER(dac_volume_timer); 176 DECLARE_READ_LINE_MEMBER(helifire_8035_t0_r); 177 DECLARE_READ_LINE_MEMBER(helifire_8035_t1_r); 178 uint8_t helifire_8035_external_ram_r(); 179 uint8_t helifire_8035_p2_r(); 180 void sound_ctrl_w(uint8_t data); 181 void sound_io_map(address_map &map); 182 183 void helifire_palette(palette_device &palette) const; 184 void next_line(); 185 DECLARE_WRITE_LINE_MEMBER(screen_vblank); 186 uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 187 void main_cpu_map(address_map &map); 188 189 required_device<dac_8bit_r2r_device> m_dac; 190 required_shared_ptr<uint8_t> m_colorram; 191 192 int m_dac_phase; 193 double m_dac_volume; 194 double m_dac_timing; 195 196 int m_flash; 197 uint8_t m_LSFR[63]; 198 unsigned m_mv; 199 unsigned m_sc; // IC56 200 }; 201 202 203 #endif // MAME_INCLUDES_N8080_H 204