1 // license:BSD-3-Clause 2 // copyright-holders:Aaron Giles 3 /*************************************************************************** 4 5 Bally/Sente SAC-1 system 6 7 driver by Aaron Giles 8 9 ***************************************************************************/ 10 #ifndef MAME_INCLUDES_BALSENTE_H 11 #define MAME_INCLUDES_BALSENTE_H 12 13 #pragma once 14 15 #include "machine/6850acia.h" 16 #include "machine/timer.h" 17 #include "machine/x2212.h" 18 #include "machine/74259.h" 19 #include "emupal.h" 20 #include "screen.h" 21 22 #define BALSENTE_MASTER_CLOCK (20000000) 23 #define BALSENTE_CPU_CLOCK (BALSENTE_MASTER_CLOCK / 16) 24 #define BALSENTE_PIXEL_CLOCK (BALSENTE_MASTER_CLOCK / 4) 25 #define BALSENTE_HTOTAL (0x140) 26 #define BALSENTE_HBEND (0x000) 27 #define BALSENTE_HBSTART (0x100) 28 #define BALSENTE_VTOTAL (0x108) 29 #define BALSENTE_VBEND (0x010) 30 #define BALSENTE_VBSTART (0x100) 31 32 33 class balsente_state : public driver_device 34 { 35 static constexpr unsigned POLY17_BITS = 17; 36 static constexpr size_t POLY17_SIZE = (1 << POLY17_BITS) - 1; 37 static constexpr unsigned POLY17_SHL = 7; 38 static constexpr unsigned POLY17_SHR = 10; 39 static constexpr uint32_t POLY17_ADD = 0x18000; 40 41 public: balsente_state(const machine_config & mconfig,device_type type,const char * tag)42 balsente_state(const machine_config &mconfig, device_type type, const char *tag) 43 : driver_device(mconfig, type, tag) 44 , m_scanline_timer(*this, "scan_timer") 45 , m_spriteram(*this, "spriteram") 46 , m_videoram(*this, "videoram") 47 , m_shrike_io(*this, "shrike_io") 48 , m_shrike_shared(*this, "shrike_shared") 49 , m_maincpu(*this, "maincpu") 50 , m_audiocpu(*this, "audiocpu") 51 , m_68k(*this, "68k") 52 , m_screen(*this, "screen") 53 , m_palette(*this, "palette") 54 , m_outlatch(*this, "outlatch") 55 , m_novram(*this, "nov%u", 0U) 56 , m_acia(*this, "acia") 57 , m_generic_paletteram_8(*this, "paletteram") 58 , m_bankab(*this, "bankab") 59 , m_bankcd(*this, "bankcd") 60 , m_bankef(*this, "bankef") 61 { } 62 63 void shrike(machine_config &config); 64 void rescraid(machine_config &config); 65 void balsente(machine_config &config); 66 void teamht(machine_config &config); 67 void grudge(machine_config &config); 68 void st1002(machine_config &config); 69 void spiker(machine_config &config); 70 void triviamb(machine_config &config); 71 DECLARE_CUSTOM_INPUT_MEMBER(nstocker_bits_r); 72 void init_otwalls(); 73 void init_triviaes(); 74 void init_triviaes2(); 75 void init_nstocker(); 76 void init_sentetst(); 77 void init_rescraid(); 78 void init_minigolf(); 79 void init_stompin(); 80 void init_snakepit(); 81 void init_spiker(); 82 void init_hattrick(); 83 void init_toggle(); 84 void init_snakjack(); 85 void init_grudge(); 86 void init_sfootbal(); 87 void init_triviag2(); 88 void init_cshift(); 89 void init_gimeabrk(); 90 void init_stocker(); 91 void init_triviag1(); 92 void init_shrike(); 93 void init_minigolf2(); 94 void init_nametune(); 95 void init_gghost(); 96 97 private: 98 void random_reset_w(uint8_t data); 99 uint8_t random_num_r(); 100 void rombank_select_w(uint8_t data); 101 void rombank2_select_w(uint8_t data); 102 DECLARE_WRITE_LINE_MEMBER(out0_w); 103 DECLARE_WRITE_LINE_MEMBER(out1_w); 104 DECLARE_WRITE_LINE_MEMBER(out2_w); 105 DECLARE_WRITE_LINE_MEMBER(out3_w); 106 DECLARE_WRITE_LINE_MEMBER(out4_w); 107 DECLARE_WRITE_LINE_MEMBER(out5_w); 108 DECLARE_WRITE_LINE_MEMBER(out6_w); 109 DECLARE_WRITE_LINE_MEMBER(nvrecall_w); 110 uint8_t novram_8bit_r(address_space &space, offs_t offset); 111 void novram_8bit_w(offs_t offset, uint8_t data); 112 void acia_w(offs_t offset, uint8_t data); 113 uint8_t adc_data_r(); 114 void adc_select_w(offs_t offset, uint8_t data); 115 void spiker_expand_w(offs_t offset, uint8_t data); 116 uint8_t spiker_expand_r(); 117 uint8_t grudge_steering_r(); 118 uint8_t shrike_shared_6809_r(offs_t offset); 119 void shrike_shared_6809_w(offs_t offset, uint8_t data); 120 void shrike_io_68k_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 121 uint16_t shrike_io_68k_r(offs_t offset, uint16_t mem_mask = ~0); 122 uint8_t teamht_extra_r(); 123 void teamht_multiplex_select_w(offs_t offset, uint8_t data); 124 125 void videoram_w(offs_t offset, uint8_t data); 126 void palette_select_w(uint8_t data); 127 void paletteram_w(offs_t offset, uint8_t data); 128 void shrike_sprite_select_w(uint8_t data); 129 130 virtual void machine_start() override; 131 virtual void machine_reset() override; 132 virtual void video_start() override; 133 uint32_t screen_update_balsente(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 134 INTERRUPT_GEN_MEMBER(update_analog_inputs); 135 TIMER_CALLBACK_MEMBER(irq_off); 136 TIMER_CALLBACK_MEMBER(adc_finished); 137 TIMER_DEVICE_CALLBACK_MEMBER(interrupt_timer); 138 void draw_one_sprite(bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t *sprite); 139 void poly17_init(); 140 void update_grudge_steering(); 141 void expand_roms(uint8_t cd_rom_mask); 142 inline void config_shooter_adc(uint8_t shooter, uint8_t adc_shift); 143 144 void cpu1_base_map(address_map &map); 145 void cpu1_map(address_map &map); 146 void cpu1_teamht_map(address_map &map); 147 void cpu1_grudge_map(address_map &map); 148 void cpu1_st1002_map(address_map &map); 149 void cpu1_spiker_map(address_map &map); 150 void cpu1_shrike_map(address_map &map); 151 void cpu1_smudge_map(address_map &map); 152 void cpu1_triviamb_map(address_map &map); 153 void cpu2_triviamb_io_map(address_map &map); 154 void cpu2_triviamb_map(address_map &map); 155 void shrike68k_map(address_map &map); 156 157 required_device<timer_device> m_scanline_timer; 158 159 160 /* global data */ 161 uint8_t m_shooter; 162 uint8_t m_shooter_x; 163 uint8_t m_shooter_y; 164 uint8_t m_adc_shift; 165 166 /* random number generator states */ 167 uint8_t m_rand17[POLY17_SIZE + 1]; 168 169 /* ADC I/O states */ 170 int8_t m_analog_input_data[4]; 171 uint8_t m_adc_value; 172 173 /* game-specific states */ 174 uint8_t m_nstocker_bits; 175 uint8_t m_spiker_expand_color; 176 uint8_t m_spiker_expand_bgcolor; 177 uint8_t m_spiker_expand_bits; 178 uint8_t m_grudge_steering_result; 179 uint8_t m_grudge_last_steering[3]; 180 uint8_t m_teamht_input; 181 182 /* video data */ 183 uint8_t m_expanded_videoram[256*256]; 184 uint8_t *m_sprite_data; 185 uint32_t m_sprite_mask; 186 uint8_t *m_sprite_bank[2]; 187 188 uint8_t m_palettebank_vis; 189 190 required_shared_ptr<uint8_t> m_spriteram; 191 required_shared_ptr<uint8_t> m_videoram; 192 optional_shared_ptr<uint16_t> m_shrike_io; 193 optional_shared_ptr<uint16_t> m_shrike_shared; 194 required_device<cpu_device> m_maincpu; 195 optional_device<cpu_device> m_audiocpu; 196 optional_device<cpu_device> m_68k; 197 required_device<screen_device> m_screen; 198 required_device<palette_device> m_palette; 199 optional_device<ls259_device> m_outlatch; 200 optional_device_array<x2212_device, 2> m_novram; 201 optional_device<acia6850_device> m_acia; 202 optional_shared_ptr<uint8_t> m_generic_paletteram_8; 203 204 required_memory_bank m_bankab; 205 required_memory_bank m_bankcd; 206 required_memory_bank m_bankef; 207 }; 208 209 #endif // MAME_INCLUDES_BALSENTE_H 210