1 // license:BSD-3-Clause 2 // copyright-holders:Nicola Salmoria 3 /************************************************************************* 4 5 Atari Centipede hardware 6 7 *************************************************************************/ 8 #ifndef MAME_INCLUDES_CENTIPED_H 9 #define MAME_INCLUDES_CENTIPED_H 10 11 #pragma once 12 13 #include "machine/74259.h" 14 #include "machine/eepromser.h" 15 #include "machine/er2055.h" 16 #include "machine/timer.h" 17 #include "sound/ay8910.h" 18 #include "emupal.h" 19 #include "screen.h" 20 #include "tilemap.h" 21 22 class centiped_state : public driver_device 23 { 24 public: centiped_state(const machine_config & mconfig,device_type type,const char * tag)25 centiped_state(const machine_config &mconfig, device_type type, const char *tag) : 26 driver_device(mconfig, type, tag), 27 m_rambase(*this, "rambase"), 28 m_videoram(*this, "videoram"), 29 m_spriteram(*this, "spriteram"), 30 m_paletteram(*this, "paletteram"), 31 m_bullsdrt_tiles_bankram(*this, "bullsdrt_bank"), 32 m_maincpu(*this, "maincpu"), 33 m_outlatch(*this, "outlatch"), 34 m_earom(*this, "earom"), 35 m_eeprom(*this, "eeprom"), 36 m_gfxdecode(*this, "gfxdecode"), 37 m_screen(*this, "screen"), 38 m_palette(*this, "palette"), 39 m_aysnd(*this, "aysnd") 40 { } 41 42 void centiped_base(machine_config &config); 43 void milliped(machine_config &config); 44 void bullsdrt(machine_config &config); 45 void centipdb(machine_config &config); 46 void magworm(machine_config &config); 47 void caterplr(machine_config &config); 48 void centiped(machine_config &config); 49 void centipedj(machine_config &config); 50 void mazeinv(machine_config &config); 51 void warlords(machine_config &config); 52 void multiped(machine_config &config); 53 54 void init_multiped(); 55 void init_bullsdrt(); 56 57 private: 58 optional_shared_ptr<uint8_t> m_rambase; 59 required_shared_ptr<uint8_t> m_videoram; 60 required_shared_ptr<uint8_t> m_spriteram; 61 optional_shared_ptr<uint8_t> m_paletteram; 62 optional_shared_ptr<uint8_t> m_bullsdrt_tiles_bankram; 63 64 required_device<cpu_device> m_maincpu; 65 required_device<ls259_device> m_outlatch; 66 optional_device<er2055_device> m_earom; 67 optional_device<eeprom_serial_93cxx_device> m_eeprom; 68 required_device<gfxdecode_device> m_gfxdecode; 69 required_device<screen_device> m_screen; 70 required_device<palette_device> m_palette; 71 optional_device<ay8910_device> m_aysnd; 72 73 uint8_t m_oldpos[4]; 74 uint8_t m_sign[4]; 75 uint8_t m_dsw_select; 76 uint8_t m_control_select; 77 uint8_t m_flipscreen; 78 uint8_t m_prg_bank; 79 uint8_t m_gfx_bank; 80 uint8_t m_bullsdrt_sprites_bank; 81 uint8_t m_penmask[64]; 82 tilemap_t *m_bg_tilemap; 83 84 // drivers/centiped.cpp 85 void irq_ack_w(uint8_t data); 86 uint8_t centiped_IN0_r(); 87 uint8_t centiped_IN2_r(); 88 uint8_t milliped_IN1_r(); 89 uint8_t milliped_IN2_r(); 90 DECLARE_WRITE_LINE_MEMBER(input_select_w); 91 DECLARE_WRITE_LINE_MEMBER(control_select_w); 92 uint8_t mazeinv_input_r(); 93 void mazeinv_input_select_w(offs_t offset, uint8_t data); 94 uint8_t bullsdrt_data_port_r(); 95 DECLARE_WRITE_LINE_MEMBER(coin_counter_left_w); 96 DECLARE_WRITE_LINE_MEMBER(coin_counter_center_w); 97 DECLARE_WRITE_LINE_MEMBER(coin_counter_right_w); 98 DECLARE_WRITE_LINE_MEMBER(bullsdrt_coin_count_w); 99 uint8_t earom_read(); 100 void earom_write(offs_t offset, uint8_t data); 101 void earom_control_w(uint8_t data); 102 uint8_t caterplr_unknown_r(); 103 void caterplr_AY8910_w(offs_t offset, uint8_t data); 104 uint8_t caterplr_AY8910_r(offs_t offset); 105 uint8_t multiped_eeprom_r(); 106 void multiped_eeprom_w(offs_t offset, uint8_t data); 107 void multiped_prgbank_w(uint8_t data); 108 109 // video/centiped.cpp 110 void centiped_videoram_w(offs_t offset, uint8_t data); 111 DECLARE_WRITE_LINE_MEMBER(flip_screen_w); 112 void multiped_gfxbank_w(uint8_t data); 113 void bullsdrt_tilesbank_w(offs_t offset, uint8_t data); 114 void bullsdrt_sprites_bank_w(uint8_t data); 115 void centiped_paletteram_w(offs_t offset, uint8_t data); 116 void milliped_paletteram_w(offs_t offset, uint8_t data); 117 void mazeinv_paletteram_w(offs_t offset, uint8_t data); 118 TILE_GET_INFO_MEMBER(centiped_get_tile_info); 119 TILE_GET_INFO_MEMBER(warlords_get_tile_info); 120 TILE_GET_INFO_MEMBER(milliped_get_tile_info); 121 TILE_GET_INFO_MEMBER(bullsdrt_get_tile_info); 122 DECLARE_MACHINE_START(centiped); 123 DECLARE_MACHINE_RESET(centiped); 124 DECLARE_VIDEO_START(centiped); 125 DECLARE_VIDEO_START(bullsdrt); 126 DECLARE_MACHINE_RESET(magworm); 127 DECLARE_VIDEO_START(milliped); 128 DECLARE_VIDEO_START(warlords); 129 void warlords_palette(palette_device &palette) const; 130 uint32_t screen_update_centiped(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 131 uint32_t screen_update_bullsdrt(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 132 uint32_t screen_update_milliped(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 133 uint32_t screen_update_warlords(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 134 TIMER_DEVICE_CALLBACK_MEMBER(generate_interrupt); 135 void init_penmask(); 136 void init_common(); 137 void milliped_set_color(offs_t offset, uint8_t data); 138 inline int read_trackball(int idx, int switch_port); 139 void bullsdrt_data_map(address_map &map); 140 void bullsdrt_map(address_map &map); 141 void bullsdrt_port_map(address_map &map); 142 void caterplr_map(address_map &map); 143 void centipdb_map(address_map &map); 144 void centiped_base_map(address_map &map); 145 void centiped_map(address_map &map); 146 void centipedj_map(address_map &map); 147 void magworm_map(address_map &map); 148 void mazeinv_map(address_map &map); 149 void milliped_map(address_map &map); 150 void multiped_map(address_map &map); 151 void warlords_map(address_map &map); 152 }; 153 154 #endif // MAME_INCLUDES_CENTIPED_H 155