1 // license:BSD-3-Clause 2 // copyright-holders:Ernesto Corvi, Phil Stroffolino 3 /************************************************************************* 4 5 Taito Grand Champ hardware 6 7 *************************************************************************/ 8 #ifndef MAME_INCLUDES_GRCHAMP_H 9 #define MAME_INCLUDES_GRCHAMP_H 10 11 #pragma once 12 13 #include "machine/input_merger.h" 14 #include "machine/watchdog.h" 15 #include "sound/discrete.h" 16 #include "emupal.h" 17 #include "screen.h" 18 #include "tilemap.h" 19 20 class grchamp_state : public driver_device 21 { 22 public: grchamp_state(const machine_config & mconfig,device_type type,const char * tag)23 grchamp_state(const machine_config &mconfig, device_type type, const char *tag) : 24 driver_device(mconfig, type, tag), 25 m_maincpu(*this, "maincpu"), 26 m_audiocpu(*this, "audiocpu"), 27 m_subcpu(*this, "sub"), 28 m_watchdog(*this, "watchdog"), 29 m_discrete(*this, "discrete"), 30 m_gfxdecode(*this, "gfxdecode"), 31 m_palette(*this, "palette"), 32 m_screen(*this, "screen"), 33 m_soundnmi(*this, "soundnmi"), 34 m_radarram(*this, "radarram"), 35 m_videoram(*this, "videoram"), 36 m_spriteram(*this, "spriteram"), 37 m_leftram(*this, "leftram"), 38 m_rightram(*this, "rightram"), 39 m_centerram(*this, "centerram"), 40 m_digits(*this, "digit%u", 0U) 41 { } 42 43 void grchamp(machine_config &config); 44 45 protected: 46 virtual void machine_start() override; 47 virtual void machine_reset() override; 48 virtual void video_start() override; 49 50 private: 51 void cpu0_outputs_w(offs_t offset, uint8_t data); 52 void led_board_w(offs_t offset, uint8_t data); 53 void cpu1_outputs_w(offs_t offset, uint8_t data); 54 uint8_t pc3259_0_r(); 55 uint8_t pc3259_1_r(); 56 uint8_t pc3259_2_r(); 57 uint8_t pc3259_3_r(); 58 uint8_t sub_to_main_comm_r(); 59 void main_to_sub_comm_w(offs_t offset, uint8_t data); 60 uint8_t main_to_sub_comm_r(offs_t offset); 61 uint8_t get_pc3259_bits(int offs); 62 void left_w(offs_t offset, uint8_t data); 63 void center_w(offs_t offset, uint8_t data); 64 void right_w(offs_t offset, uint8_t data); 65 TIMER_CALLBACK_MEMBER(soundlatch_w_cb); 66 TIMER_CALLBACK_MEMBER(soundlatch_clear7_w_cb); 67 uint8_t soundlatch_r(); 68 void soundlatch_clear7_w(uint8_t data); 69 uint8_t soundlatch_flags_r(); 70 void portA_0_w(uint8_t data); 71 void portB_0_w(uint8_t data); 72 void portA_2_w(uint8_t data); 73 void portB_2_w(uint8_t data); 74 75 TILE_GET_INFO_MEMBER(get_text_tile_info); 76 TILE_GET_INFO_MEMBER(get_left_tile_info); 77 TILE_GET_INFO_MEMBER(get_right_tile_info); 78 TILE_GET_INFO_MEMBER(get_center_tile_info); 79 TILEMAP_MAPPER_MEMBER(get_memory_offset); 80 81 void grchamp_palette(palette_device &palette) const; 82 INTERRUPT_GEN_MEMBER(cpu0_interrupt); 83 INTERRUPT_GEN_MEMBER(cpu1_interrupt); 84 TIMER_CALLBACK_MEMBER(main_to_sub_comm_sync_w); 85 86 uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 87 void draw_objects(int y, uint8_t *objdata); 88 void main_map(address_map &map); 89 void main_portmap(address_map &map); 90 void sound_map(address_map &map); 91 void sub_map(address_map &map); 92 void sub_portmap(address_map &map); 93 94 uint8_t m_cpu0_out[16]; 95 uint8_t m_cpu1_out[16]; 96 97 uint8_t m_comm_latch; 98 uint8_t m_comm_latch2[4]; 99 100 uint16_t m_ledlatch; 101 uint8_t m_ledaddr; 102 uint16_t m_ledram[8]; 103 104 uint8_t m_soundlatch_data; 105 bool m_soundlatch_flag; 106 107 uint16_t m_collide; 108 uint8_t m_collmode; 109 110 bitmap_ind16 m_work_bitmap; 111 tilemap_t *m_text_tilemap; 112 tilemap_t *m_left_tilemap; 113 tilemap_t *m_center_tilemap; 114 tilemap_t *m_right_tilemap; 115 116 required_device<cpu_device> m_maincpu; 117 required_device<cpu_device> m_audiocpu; 118 required_device<cpu_device> m_subcpu; 119 required_device<watchdog_timer_device> m_watchdog; 120 required_device<discrete_device> m_discrete; 121 required_device<gfxdecode_device> m_gfxdecode; 122 required_device<palette_device> m_palette; 123 required_device<screen_device> m_screen; 124 required_device<input_merger_device> m_soundnmi; 125 126 required_shared_ptr<uint8_t> m_radarram; 127 required_shared_ptr<uint8_t> m_videoram; 128 required_shared_ptr<uint8_t> m_spriteram; 129 required_shared_ptr<uint8_t> m_leftram; 130 required_shared_ptr<uint8_t> m_rightram; 131 required_shared_ptr<uint8_t> m_centerram; 132 output_finder<8> m_digits; 133 }; 134 135 /* Discrete Sound Input Nodes */ 136 #define GRCHAMP_ENGINE_CS_EN NODE_01 137 #define GRCHAMP_SIFT_DATA NODE_02 138 #define GRCHAMP_ATTACK_UP_DATA NODE_03 139 #define GRCHAMP_IDLING_EN NODE_04 140 #define GRCHAMP_FOG_EN NODE_05 141 #define GRCHAMP_PLAYER_SPEED_DATA NODE_06 142 #define GRCHAMP_ATTACK_SPEED_DATA NODE_07 143 #define GRCHAMP_A_DATA NODE_08 144 #define GRCHAMP_B_DATA NODE_09 145 146 /*----------- defined in audio/grchamp.c -----------*/ 147 148 DISCRETE_SOUND_EXTERN( grchamp_discrete ); 149 150 #endif // MAME_INCLUDES_GRCHAMP_H 151