1 // license:GPL-2.0+ 2 // copyright-holders:Jarek Burczynski 3 #ifndef MAME_INCLUDES_TUBEP_H 4 #define MAME_INCLUDES_TUBEP_H 5 6 #pragma once 7 8 #include "cpu/m6800/m6800.h" 9 #include "machine/gen_latch.h" 10 #include "sound/msm5205.h" 11 #include "emupal.h" 12 #include "screen.h" 13 14 class tubep_state : public driver_device 15 { 16 public: tubep_state(const machine_config & mconfig,device_type type,const char * tag)17 tubep_state(const machine_config &mconfig, device_type type, const char *tag) : 18 driver_device(mconfig, type, tag), 19 m_maincpu(*this, "maincpu"), 20 m_soundcpu(*this, "soundcpu"), 21 m_slave(*this, "slave"), 22 m_mcu(*this, "mcu"), 23 m_soundlatch(*this, "soundlatch"), 24 m_msm(*this, "msm"), 25 m_screen(*this, "screen"), 26 m_textram(*this, "textram"), 27 m_backgroundram(*this, "backgroundram"), 28 m_sprite_colorsharedram(*this, "sprite_color"), 29 m_rjammer_backgroundram(*this, "rjammer_bgram") 30 { } 31 32 void tubepb(machine_config &config); 33 void tubep(machine_config &config); 34 void rjammer(machine_config &config); 35 36 private: 37 enum 38 { 39 TIMER_TUBEP_SCANLINE, 40 TIMER_RJAMMER_SCANLINE, 41 TIMER_SPRITE 42 }; 43 44 required_device<cpu_device> m_maincpu; 45 required_device<cpu_device> m_soundcpu; 46 required_device<cpu_device> m_slave; 47 required_device<m6802_cpu_device> m_mcu; 48 required_device<generic_latch_8_device> m_soundlatch; 49 optional_device<msm5205_device> m_msm; 50 required_device<screen_device> m_screen; 51 required_shared_ptr<uint8_t> m_textram; 52 optional_shared_ptr<uint8_t> m_backgroundram; 53 required_shared_ptr<uint8_t> m_sprite_colorsharedram; 54 optional_shared_ptr<uint8_t> m_rjammer_backgroundram; 55 56 uint8_t m_ls74; 57 uint8_t m_ls377; 58 emu_timer *m_interrupt_timer; 59 emu_timer *m_sprite_timer; 60 int m_curr_scanline; 61 std::unique_ptr<uint8_t[]> m_spritemap; 62 uint8_t m_prom2[32]; 63 uint32_t m_romD_addr; 64 uint32_t m_romEF_addr; 65 uint32_t m_E16_add_b; 66 uint32_t m_HINV; 67 uint32_t m_VINV; 68 uint32_t m_XSize; 69 uint32_t m_YSize; 70 uint32_t m_mark_1; 71 uint32_t m_mark_2; 72 uint32_t m_colorram_addr_hi; 73 uint32_t m_ls273_g6; 74 uint32_t m_ls273_j6; 75 uint32_t m_romHI_addr_mid; 76 uint32_t m_romHI_addr_msb; 77 uint8_t m_DISP; 78 uint8_t m_background_romsel; 79 uint8_t m_color_A4; 80 uint8_t m_ls175_b7; 81 uint8_t m_ls175_e8; 82 uint8_t m_ls377_data; 83 uint32_t m_page; 84 DECLARE_WRITE_LINE_MEMBER(coin1_counter_w); 85 DECLARE_WRITE_LINE_MEMBER(coin2_counter_w); 86 void main_cpu_irq_line_clear_w(uint8_t data); 87 void second_cpu_irq_line_clear_w(uint8_t data); 88 uint8_t tubep_soundlatch_r(); 89 uint8_t tubep_sound_irq_ack(); 90 void rjammer_voice_input_w(uint8_t data); 91 void rjammer_voice_intensity_control_w(uint8_t data); 92 void tubep_textram_w(offs_t offset, uint8_t data); 93 DECLARE_WRITE_LINE_MEMBER(screen_flip_w); 94 DECLARE_WRITE_LINE_MEMBER(background_romselect_w); 95 DECLARE_WRITE_LINE_MEMBER(colorproms_A4_line_w); 96 void tubep_background_a000_w(uint8_t data); 97 void tubep_background_c000_w(uint8_t data); 98 void tubep_sprite_control_w(offs_t offset, uint8_t data); 99 void rjammer_background_LS377_w(uint8_t data); 100 void rjammer_background_page_w(uint8_t data); 101 void rjammer_voice_startstop_w(uint8_t data); 102 void rjammer_voice_frequency_select_w(uint8_t data); 103 void ay8910_portA_0_w(uint8_t data); 104 void ay8910_portB_0_w(uint8_t data); 105 void ay8910_portA_1_w(uint8_t data); 106 void ay8910_portB_1_w(uint8_t data); 107 void ay8910_portA_2_w(uint8_t data); 108 void ay8910_portB_2_w(uint8_t data); 109 DECLARE_MACHINE_START(tubep); 110 DECLARE_MACHINE_RESET(tubep); 111 virtual void video_start() override; 112 virtual void video_reset() override; 113 void tubep_palette(palette_device &palette); 114 DECLARE_MACHINE_START(rjammer); 115 DECLARE_MACHINE_RESET(rjammer); 116 void rjammer_palette(palette_device &palette) const; 117 uint32_t screen_update_tubep(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 118 uint32_t screen_update_rjammer(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 119 TIMER_CALLBACK_MEMBER(tubep_scanline_callback); 120 TIMER_CALLBACK_MEMBER(rjammer_scanline_callback); 121 void draw_sprite(); 122 void tubep_vblank_end(); 123 void tubep_setup_save_state(); 124 DECLARE_WRITE_LINE_MEMBER(rjammer_adpcm_vck); 125 126 void nsc_map(address_map &map); 127 void rjammer_main_map(address_map &map); 128 void rjammer_main_portmap(address_map &map); 129 void rjammer_second_map(address_map &map); 130 void rjammer_second_portmap(address_map &map); 131 void rjammer_sound_map(address_map &map); 132 void rjammer_sound_portmap(address_map &map); 133 void tubep_main_map(address_map &map); 134 void tubep_main_portmap(address_map &map); 135 void tubep_second_map(address_map &map); 136 void tubep_second_portmap(address_map &map); 137 void tubep_sound_map(address_map &map); 138 void tubep_sound_portmap(address_map &map); 139 140 virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; 141 }; 142 143 #endif // MAME_INCLUDES_TUBEP_H 144