1 // license:BSD-3-Clause 2 // copyright-holders:David Graves 3 /************************************************************************* 4 5 World Grand Prix 6 7 *************************************************************************/ 8 #ifndef MAME_INCLUDES_WGP_H 9 #define MAME_INCLUDES_WGP_H 10 11 #pragma once 12 13 #include "audio/taitosnd.h" 14 #include "machine/taitoio.h" 15 #include "video/tc0100scn.h" 16 #include "emupal.h" 17 #include "tilemap.h" 18 19 20 class wgp_state : public driver_device 21 { 22 public: wgp_state(const machine_config & mconfig,device_type type,const char * tag)23 wgp_state(const machine_config &mconfig, device_type type, const char *tag) : 24 driver_device(mconfig, type, tag), 25 m_spritemap(*this, "spritemap"), 26 m_spriteram(*this, "spriteram"), 27 m_pivram(*this, "pivram"), 28 m_piv_ctrlram(*this, "piv_ctrlram"), 29 m_maincpu(*this, "maincpu"), 30 m_audiocpu(*this, "audiocpu"), 31 m_subcpu(*this, "sub"), 32 m_tc0100scn(*this, "tc0100scn"), 33 m_tc0140syt(*this, "tc0140syt"), 34 m_tc0220ioc(*this, "tc0220ioc"), 35 m_gfxdecode(*this, "gfxdecode"), 36 m_palette(*this, "palette"), 37 m_z80bank(*this, "z80bank"), 38 m_steer(*this, "STEER"), 39 m_unknown(*this, "UNKNOWN"), 40 m_fake(*this, "FAKE") 41 { } 42 43 void wgp2(machine_config &config); 44 void wgp(machine_config &config); 45 46 void init_wgp(); 47 void init_wgp2(); 48 49 protected: 50 enum 51 { 52 TIMER_INTERRUPT4, 53 TIMER_CPUB_INTERRUPT6 54 }; 55 56 virtual void machine_start() override; 57 virtual void machine_reset() override; 58 virtual void video_start() override; 59 virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; 60 virtual void device_post_load() override; 61 62 private: 63 void coins_w(u8 data); 64 void cpua_ctrl_w(u16 data); 65 u16 lan_status_r(); 66 void rotate_port_w(offs_t offset, u16 data); 67 u8 accel_r(); 68 u8 steer_r(); 69 u8 steer_offset_r(); 70 u8 accel_offset_r(); 71 u8 brake_r(); 72 u8 unknown_r(); 73 void sound_bankswitch_w(u8 data); 74 void pivram_word_w(offs_t offset, u16 data, u16 mem_mask = ~0); 75 void piv_ctrl_word_w(offs_t offset, u16 data, u16 mem_mask = ~0); 76 77 DECLARE_VIDEO_START(wgp2); 78 u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 79 INTERRUPT_GEN_MEMBER(cpub_interrupt); 80 81 void cpu2_map(address_map &map); 82 void main_map(address_map &map); 83 void z80_sound_map(address_map &map); 84 85 template<unsigned Offset> TILE_GET_INFO_MEMBER(get_piv_tile_info); 86 87 void core_vh_start(int piv_xoffs, int piv_yoffs); 88 void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int y_offs); 89 void piv_layer_draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int layer, int flags, u32 priority); 90 void parse_control(); 91 92 /* memory pointers */ 93 required_shared_ptr<u16> m_spritemap; 94 required_shared_ptr<u16> m_spriteram; 95 required_shared_ptr<u16> m_pivram; 96 required_shared_ptr<u16> m_piv_ctrlram; 97 98 /* video-related */ 99 tilemap_t *m_piv_tilemap[3]; 100 u16 m_piv_ctrl_reg; 101 u16 m_piv_zoom[3]; 102 u16 m_piv_scrollx[3]; 103 u16 m_piv_scrolly[3]; 104 u16 m_rotate_ctrl[8]; 105 int m_piv_xoffs; 106 int m_piv_yoffs; 107 u8 m_dislayer[4]; 108 109 /* misc */ 110 u16 m_cpua_ctrl; 111 u16 m_port_sel; 112 emu_timer *m_cpub_int6_timer; 113 114 /* devices */ 115 required_device<cpu_device> m_maincpu; 116 required_device<cpu_device> m_audiocpu; 117 required_device<cpu_device> m_subcpu; 118 required_device<tc0100scn_device> m_tc0100scn; 119 required_device<tc0140syt_device> m_tc0140syt; 120 required_device<tc0220ioc_device> m_tc0220ioc; 121 required_device<gfxdecode_device> m_gfxdecode; 122 required_device<palette_device> m_palette; 123 required_memory_bank m_z80bank; 124 optional_ioport m_steer; 125 optional_ioport m_unknown; 126 optional_ioport m_fake; 127 }; 128 129 #endif // MAME_INCLUDES_WGP_H 130