1 // license:BSD-3-Clause 2 // copyright-holders:Alex Pasadyn,Zsolt Vasvari,Aaron Giles 3 /************************************************************************* 4 5 Gottlieb Exterminator hardware 6 7 *************************************************************************/ 8 #ifndef MAME_INCLUDES_EXTERM_H 9 #define MAME_INCLUDES_EXTERM_H 10 11 #pragma once 12 13 #include "cpu/tms34010/tms34010.h" 14 #include "machine/gen_latch.h" 15 #include "machine/timer.h" 16 #include "sound/ym2151.h" 17 #include "emupal.h" 18 19 class exterm_state : public driver_device 20 { 21 public: exterm_state(const machine_config & mconfig,device_type type,const char * tag)22 exterm_state(const machine_config &mconfig, device_type type, const char *tag) : 23 driver_device(mconfig, type, tag), 24 m_maincpu(*this, "maincpu"), 25 m_audiocpu(*this, "audiocpu"), 26 m_audioslave(*this, "audioslave"), 27 m_soundlatch(*this, "soundlatch%u", 1), 28 m_slave(*this, "slave"), 29 m_ym2151(*this, "ymsnd"), 30 m_nmi_timer(*this, "snd_nmi_timer"), 31 m_master_videoram(*this, "master_videoram"), 32 m_slave_videoram(*this, "slave_videoram"), 33 m_dial(*this, "DIAL%u", 0U), 34 m_input(*this, "P%u", 1U) 35 { } 36 37 void exterm(machine_config &config); 38 39 protected: 40 virtual void machine_start() override; 41 42 private: 43 required_device<tms34010_device> m_maincpu; 44 required_device<cpu_device> m_audiocpu; 45 required_device<cpu_device> m_audioslave; 46 required_device_array<generic_latch_8_device, 2> m_soundlatch; 47 required_device<tms34010_device> m_slave; 48 required_device<ym2151_device> m_ym2151; 49 required_device<timer_device> m_nmi_timer; 50 51 required_shared_ptr<uint16_t> m_master_videoram; 52 required_shared_ptr<uint16_t> m_slave_videoram; 53 54 required_ioport_array<2> m_dial; 55 required_ioport_array<2> m_input; 56 57 uint8_t m_aimpos[2]; 58 uint8_t m_trackball_old[2]; 59 uint8_t m_sound_control; 60 uint16_t m_last; 61 62 void host_data_w(offs_t offset, uint16_t data); 63 uint16_t host_data_r(offs_t offset); 64 template<uint8_t Which> uint16_t trackball_port_r(); 65 void output_port_0_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 66 void sound_latch_w(uint8_t data); 67 void sound_nmi_rate_w(uint8_t data); 68 uint8_t sound_nmi_to_slave_r(); 69 void sound_control_w(uint8_t data); 70 void ym2151_data_latch_w(uint8_t data); 71 void exterm_palette(palette_device &palette) const; 72 TIMER_DEVICE_CALLBACK_MEMBER(master_sound_nmi_callback); 73 TMS340X0_SCANLINE_IND16_CB_MEMBER(scanline_update); 74 TMS340X0_TO_SHIFTREG_CB_MEMBER(to_shiftreg_master); 75 TMS340X0_FROM_SHIFTREG_CB_MEMBER(from_shiftreg_master); 76 TMS340X0_TO_SHIFTREG_CB_MEMBER(to_shiftreg_slave); 77 TMS340X0_FROM_SHIFTREG_CB_MEMBER(from_shiftreg_slave); 78 void master_map(address_map &map); 79 void slave_map(address_map &map); 80 void sound_master_map(address_map &map); 81 void sound_slave_map(address_map &map); 82 }; 83 84 #endif // MAME_INCLUDES_EXTERM_H 85