1 // license:BSD-3-Clause 2 // copyright-holders:Aaron Giles 3 /************************************************************************* 4 5 BattleToads 6 7 Common definitions 8 9 *************************************************************************/ 10 11 #include "cpu/tms34010/tms34010.h" 12 #include "cpu/z80/z80.h" 13 #include "video/tlc34076.h" 14 #include "sound/bsmt2000.h" 15 #include "machine/nvram.h" 16 #include "emupal.h" 17 #include "screen.h" 18 19 class btoads_state : public driver_device 20 { 21 public: btoads_state(const machine_config & mconfig,device_type type,const char * tag)22 btoads_state(const machine_config &mconfig, device_type type, const char *tag) 23 : driver_device(mconfig, type, tag), 24 m_vram_fg0(*this, "vram_fg0", 32), 25 m_vram_fg1(*this, "vram_fg1", 32), 26 m_vram_fg_data(*this, "vram_fg_data", 32), 27 m_vram_bg0(*this, "vram_bg0", 32), 28 m_vram_bg1(*this, "vram_bg1", 32), 29 m_sprite_scale(*this, "sprite_scale", 32), 30 m_sprite_control(*this, "sprite_control", 32), 31 m_maincpu(*this, "maincpu"), 32 m_audiocpu(*this, "audiocpu"), 33 m_bsmt(*this, "bsmt"), 34 m_tlc34076(*this, "tlc34076"), 35 m_screen(*this, "screen") { } 36 37 DECLARE_READ_LINE_MEMBER( main_to_sound_r ); 38 DECLARE_READ_LINE_MEMBER( sound_to_main_r ); 39 40 void btoads(machine_config &config); 41 42 protected: 43 // device overrides 44 virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; 45 46 // driver_device overrides 47 virtual void machine_start() override; 48 virtual void video_start() override; 49 50 private: 51 // timer IDs 52 enum 53 { 54 TIMER_ID_NOP, 55 TIMER_ID_DELAYED_SOUND 56 }; 57 58 // shared pointers 59 required_shared_ptr<uint8_t> m_vram_fg0; 60 required_shared_ptr<uint8_t> m_vram_fg1; 61 required_shared_ptr<uint16_t> m_vram_fg_data; 62 required_shared_ptr<uint16_t> m_vram_bg0; 63 required_shared_ptr<uint16_t> m_vram_bg1; 64 required_shared_ptr<uint16_t> m_sprite_scale; 65 required_shared_ptr<uint16_t> m_sprite_control; 66 67 // state 68 uint8_t m_main_to_sound_data; 69 uint8_t m_main_to_sound_ready; 70 uint8_t m_sound_to_main_data; 71 uint8_t m_sound_to_main_ready; 72 uint8_t m_sound_int_state; 73 uint8_t *m_vram_fg_draw; 74 uint8_t *m_vram_fg_display; 75 int32_t m_xscroll0; 76 int32_t m_yscroll0; 77 int32_t m_xscroll1; 78 int32_t m_yscroll1; 79 uint8_t m_screen_control; 80 uint16_t m_sprite_source_offs; 81 uint8_t *m_sprite_dest_base; 82 uint16_t m_sprite_dest_offs; 83 uint16_t m_misc_control; 84 int m_xcount; 85 std::unique_ptr<uint8_t[]> m_nvram_data; 86 87 // in drivers/btoads 88 void nvram_w(offs_t offset, uint8_t data); 89 uint8_t nvram_r(offs_t offset); 90 void main_sound_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 91 uint16_t main_sound_r(); 92 void sound_data_w(uint8_t data); 93 uint8_t sound_data_r(); 94 uint8_t sound_ready_to_send_r(); 95 uint8_t sound_data_ready_r(); 96 void sound_int_state_w(uint8_t data); 97 uint8_t bsmt_ready_r(); 98 void bsmt2000_port_w(offs_t offset, uint8_t data); 99 100 // in video/btoads 101 void misc_control_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 102 void display_control_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 103 void scroll0_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 104 void scroll1_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 105 void vram_bg0_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 106 void vram_bg1_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 107 uint16_t vram_bg0_r(offs_t offset); 108 uint16_t vram_bg1_r(offs_t offset); 109 void vram_fg_display_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 110 void vram_fg_draw_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 111 uint16_t vram_fg_display_r(offs_t offset); 112 uint16_t vram_fg_draw_r(offs_t offset); 113 void render_sprite_row(uint16_t *sprite_source, uint32_t address); 114 TMS340X0_TO_SHIFTREG_CB_MEMBER(to_shiftreg); 115 TMS340X0_FROM_SHIFTREG_CB_MEMBER(from_shiftreg); 116 TMS340X0_SCANLINE_RGB32_CB_MEMBER(scanline_update); 117 118 // devices 119 required_device<tms34020_device> m_maincpu; 120 required_device<z80_device> m_audiocpu; 121 required_device<bsmt2000_device> m_bsmt; 122 required_device<tlc34076_device> m_tlc34076; 123 required_device<screen_device> m_screen; 124 125 void main_map(address_map &map); 126 void sound_io_map(address_map &map); 127 void sound_map(address_map &map); 128 }; 129