1 // license:BSD-3-Clause 2 // copyright-holders:Alex Pasadyn, Zsolt Vasvari, Ernesto Corvi, Aaron Giles 3 // thanks-to:Kurt Mahan 4 /************************************************************************* 5 6 Williams/Midway Y/Z-unit system 7 8 **************************************************************************/ 9 #ifndef MAME_INCLUDES_MIDYUNIT_H 10 #define MAME_INCLUDES_MIDYUNIT_H 11 12 #pragma once 13 14 #include "audio/williams.h" 15 16 #include "cpu/tms34010/tms34010.h" 17 #include "machine/adc0844.h" 18 #include "machine/gen_latch.h" 19 #include "machine/nvram.h" 20 #include "sound/okim6295.h" 21 #include "emupal.h" 22 23 24 class midyunit_state : public driver_device 25 { 26 public: midyunit_state(const machine_config & mconfig,device_type type,const char * tag)27 midyunit_state(const machine_config &mconfig, device_type type, const char *tag) 28 : driver_device(mconfig, type, tag) 29 , m_maincpu(*this, "maincpu") 30 , m_audiocpu(*this, "audiocpu") 31 , m_oki(*this, "oki") 32 , m_palette(*this, "palette") 33 , m_narc_sound(*this, "narcsnd") 34 , m_cvsd_sound(*this, "cvsd") 35 , m_adpcm_sound(*this, "adpcm") 36 , m_soundlatch(*this, "soundlatch") 37 , m_term2_adc(*this, "adc") 38 , m_nvram(*this, "nvram") 39 , m_generic_paletteram_16(*this, "paletteram") 40 , m_gfx_rom(*this, "gfx_rom", 16) 41 , m_mainram(*this, "mainram") 42 , m_ports(*this, { { "IN0", "IN1", "IN2", "DSW", "UNK0", "UNK1" } }) 43 { 44 } 45 46 void term2(machine_config &config); 47 void yunit_cvsd_4bit_fast(machine_config &config); 48 void yunit_adpcm_6bit_fast(machine_config &config); 49 void yunit_cvsd_6bit_slow(machine_config &config); 50 void yunit_cvsd_4bit_slow(machine_config &config); 51 void mkyawdim(machine_config &config); 52 void yunit_core(machine_config &config); 53 void zunit(machine_config &config); 54 void yunit_adpcm_6bit_faster(machine_config &config); 55 56 void init_smashtv(); 57 void init_strkforc(); 58 void init_narc(); 59 void init_term2(); 60 void init_term2la1(); 61 void init_term2la3(); 62 void init_mkyunit(); 63 void init_trog(); 64 void init_totcarn(); 65 void init_mkyawdim(); 66 void init_mkyawdim2(); 67 void init_shimpact(); 68 void init_hiimpact(); 69 void init_mkyturbo(); 70 void init_term2la2(); 71 72 DECLARE_READ_LINE_MEMBER(narc_talkback_strobe_r); 73 DECLARE_CUSTOM_INPUT_MEMBER(narc_talkback_data_r); 74 DECLARE_READ_LINE_MEMBER(adpcm_irq_state_r); 75 76 private: 77 /* protection data types */ 78 struct protection_data 79 { 80 uint16_t reset_sequence[3]; 81 uint16_t data_sequence[100]; 82 }; 83 84 struct dma_state_t 85 { 86 uint32_t offset; // source offset, in bits 87 int32_t rowbytes; // source bytes to skip each row 88 int32_t xpos; // x position, clipped 89 int32_t ypos; // y position, clipped 90 int32_t width; // horizontal pixel count 91 int32_t height; // vertical pixel count 92 uint16_t palette; // palette base 93 uint16_t color; // current foreground color with palette 94 }; 95 96 enum 97 { 98 TIMER_DMA, 99 TIMER_AUTOERASE_LINE 100 }; 101 102 required_device<tms34010_device> m_maincpu; 103 optional_device<cpu_device> m_audiocpu; 104 optional_device<okim6295_device> m_oki; 105 required_device<palette_device> m_palette; 106 optional_device<williams_narc_sound_device> m_narc_sound; 107 optional_device<williams_cvsd_sound_device> m_cvsd_sound; 108 optional_device<williams_adpcm_sound_device> m_adpcm_sound; 109 optional_device<generic_latch_8_device> m_soundlatch; 110 optional_device<adc0844_device> m_term2_adc; 111 required_device<nvram_device> m_nvram; 112 113 required_shared_ptr<uint16_t> m_generic_paletteram_16; 114 optional_shared_ptr<uint8_t> m_gfx_rom; 115 required_shared_ptr<uint16_t> m_mainram; 116 optional_ioport_array<6> m_ports; 117 118 std::unique_ptr<uint16_t[]> m_cmos_ram; 119 uint32_t m_cmos_page; 120 uint16_t m_prot_result; 121 uint16_t m_prot_sequence[3]; 122 uint8_t m_prot_index; 123 const struct protection_data *m_prot_data; 124 uint8_t m_cmos_w_enable; 125 uint8_t m_chip_type; 126 uint16_t *m_t2_hack_mem; 127 uint8_t *m_cvsd_protection_base; 128 uint8_t m_autoerase_enable; 129 uint32_t m_palette_mask; 130 std::unique_ptr<pen_t[]> m_pen_map; 131 std::unique_ptr<uint16_t[]> m_local_videoram; 132 uint8_t m_videobank_select; 133 uint8_t m_yawdim_dma; 134 uint16_t m_dma_register[16]; 135 dma_state_t m_dma_state; 136 emu_timer *m_dma_timer; 137 emu_timer *m_autoerase_line_timer; 138 void midyunit_cmos_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 139 uint16_t midyunit_cmos_r(offs_t offset); 140 void midyunit_cmos_enable_w(address_space &space, uint16_t data); 141 uint16_t midyunit_protection_r(); 142 uint16_t midyunit_input_r(offs_t offset); 143 void midyunit_sound_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 144 uint16_t term2_input_r(offs_t offset); 145 void term2_sound_w(offs_t offset, uint16_t data); 146 void term2_hack_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 147 void term2la3_hack_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 148 void term2la2_hack_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 149 void term2la1_hack_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 150 void cvsd_protection_w(offs_t offset, uint8_t data); 151 uint16_t mkturbo_prot_r(); 152 uint16_t midyunit_gfxrom_r(offs_t offset); 153 void midyunit_vram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 154 uint16_t midyunit_vram_r(offs_t offset); 155 void midyunit_control_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 156 void midyunit_paletteram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 157 uint16_t midyunit_dma_r(offs_t offset); 158 void midyunit_dma_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 159 void yawdim_oki_bank_w(uint8_t data); 160 void yawdim2_oki_bank_w(uint8_t data); 161 uint8_t yawdim2_soundlatch_r(); 162 TMS340X0_TO_SHIFTREG_CB_MEMBER(to_shiftreg); 163 TMS340X0_FROM_SHIFTREG_CB_MEMBER(from_shiftreg); 164 TMS340X0_SCANLINE_IND16_CB_MEMBER(scanline_update); 165 DECLARE_MACHINE_RESET(midyunit); 166 DECLARE_VIDEO_START(midzunit); 167 DECLARE_VIDEO_START(midyunit_4bit); 168 DECLARE_VIDEO_START(midyunit_6bit); 169 DECLARE_VIDEO_START(mkyawdim); 170 DECLARE_VIDEO_START(common); 171 TIMER_CALLBACK_MEMBER(dma_callback); 172 TIMER_CALLBACK_MEMBER(autoerase_line); 173 174 void main_map(address_map &map); 175 void yawdim_sound_map(address_map &map); 176 177 virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; 178 void dma_draw(uint16_t command); 179 void init_generic(int bpp, int sound, int prot_start, int prot_end); 180 void term2_init_common(write16s_delegate hack_w); 181 }; 182 183 #endif // MAME_INCLUDES_MIDYUNIT_H 184