1 // license:BSD-3-Clause 2 // copyright-holders:Luca Elia 3 4 #include "machine/gen_latch.h" 5 #include "video/ms32_sprite.h" 6 #include "emupal.h" 7 #include "tilemap.h" 8 9 class tetrisp2_state : public driver_device 10 { 11 public: tetrisp2_state(const machine_config & mconfig,device_type type,const char * tag)12 tetrisp2_state(const machine_config &mconfig, device_type type, const char *tag) : 13 driver_device(mconfig, type, tag), 14 m_maincpu(*this, "maincpu"), 15 m_subcpu(*this, "sub"), 16 m_sprite(*this, "sprite"), 17 m_rocknms_sub_sprite(*this, "sub_sprite"), 18 m_spriteram(*this, "spriteram"), 19 m_spriteram2(*this, "spriteram2"), 20 m_vram_fg(*this, "vram_fg"), 21 m_vram_bg(*this, "vram_bg"), 22 m_vram_rot(*this, "vram_rot"), 23 m_nvram(*this, "nvram"), 24 m_scroll_fg(*this, "scroll_fg"), 25 m_scroll_bg(*this, "scroll_bg"), 26 m_rotregs(*this, "rotregs"), 27 m_rocknms_sub_priority(*this, "sub_priority"), 28 m_rocknms_sub_vram_rot(*this, "sub_vram_rot"), 29 m_rocknms_sub_vram_fg(*this, "sub_vram_fg"), 30 m_rocknms_sub_vram_bg(*this, "sub_vram_bg"), 31 m_rocknms_sub_scroll_fg(*this, "sub_scroll_fg"), 32 m_rocknms_sub_scroll_bg(*this, "sub_scroll_bg"), 33 m_rocknms_sub_rotregs(*this, "sub_rotregs"), 34 m_gfxdecode(*this, "gfxdecode"), 35 m_sub_gfxdecode(*this, "sub_gfxdecode"), 36 m_palette(*this, "palette"), 37 m_sub_palette(*this, "sub_palette"), 38 m_paletteram(*this, "paletteram"), 39 m_sub_paletteram(*this, "sub_paletteram"), 40 m_leds(*this, "led%u", 0U) 41 { } 42 43 void rockn2(machine_config &config); 44 void tetrisp2(machine_config &config); 45 void nndmseal(machine_config &config); 46 void rocknms(machine_config &config); 47 void rockn(machine_config &config); 48 49 void init_rockn2(); 50 void init_rockn1(); 51 void init_rockn(); 52 void init_rockn3(); 53 void init_rocknms(); 54 55 DECLARE_CUSTOM_INPUT_MEMBER(rocknms_main2sub_status_r); 56 57 TILE_GET_INFO_MEMBER(get_tile_info_bg); 58 TILE_GET_INFO_MEMBER(stepstag_get_tile_info_fg); 59 TILE_GET_INFO_MEMBER(get_tile_info_rot); 60 61 protected: 62 void rockn_systemregs_w(offs_t offset, u16 data, u16 mem_mask = ~0); 63 void rocknms_sub_systemregs_w(offs_t offset, u16 data, u16 mem_mask = ~0); 64 u16 rockn_adpcmbank_r(); 65 void rockn_adpcmbank_w(u16 data); 66 void rockn2_adpcmbank_w(u16 data); 67 u16 rockn_soundvolume_r(); 68 void rockn_soundvolume_w(u16 data); 69 void nndmseal_sound_bank_w(offs_t offset, u16 data, u16 mem_mask = ~0); 70 u16 tetrisp2_ip_1_word_r(); 71 u16 rockn_nvram_r(offs_t offset); 72 u16 rocknms_main2sub_r(); 73 void rocknms_main2sub_w(offs_t offset, u16 data, u16 mem_mask = ~0); 74 void rocknms_sub2main_w(offs_t offset, u16 data, u16 mem_mask = ~0); 75 void tetrisp2_coincounter_w(u16 data); 76 void nndmseal_coincounter_w(offs_t offset, u16 data, u16 mem_mask = ~0); 77 void nndmseal_b20000_w(u16 data); 78 void tetrisp2_systemregs_w(offs_t offset, u16 data, u16 mem_mask = ~0); 79 u16 tetrisp2_nvram_r(offs_t offset); 80 void tetrisp2_nvram_w(offs_t offset, u16 data, u16 mem_mask = ~0); 81 void tetrisp2_palette_w(offs_t offset, u16 data, u16 mem_mask = ~0); 82 void rocknms_sub_palette_w(offs_t offset, u16 data, u16 mem_mask = ~0); 83 void tetrisp2_priority_w(offs_t offset, u16 data, u16 mem_mask = ~0); 84 void rocknms_sub_priority_w(offs_t offset, u16 data, u16 mem_mask = ~0); 85 u16 tetrisp2_priority_r(offs_t offset); 86 void tetrisp2_vram_bg_w(offs_t offset, u16 data, u16 mem_mask = ~0); 87 void tetrisp2_vram_fg_w(offs_t offset, u16 data, u16 mem_mask = ~0); 88 void tetrisp2_vram_rot_w(offs_t offset, u16 data, u16 mem_mask = ~0); 89 void rocknms_sub_vram_bg_w(offs_t offset, u16 data, u16 mem_mask = ~0); 90 void rocknms_sub_vram_fg_w(offs_t offset, u16 data, u16 mem_mask = ~0); 91 void rocknms_sub_vram_rot_w(offs_t offset, u16 data, u16 mem_mask = ~0); 92 93 TILE_GET_INFO_MEMBER(get_tile_info_fg); 94 95 TILE_GET_INFO_MEMBER(get_tile_info_rocknms_sub_bg); 96 TILE_GET_INFO_MEMBER(get_tile_info_rocknms_sub_fg); 97 TILE_GET_INFO_MEMBER(get_tile_info_rocknms_sub_rot); 98 99 DECLARE_VIDEO_START(tetrisp2); 100 DECLARE_VIDEO_START(nndmseal); 101 DECLARE_VIDEO_START(rockntread); 102 DECLARE_VIDEO_START(rocknms); 103 u32 screen_update_tetrisp2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 104 u32 screen_update_rockntread(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 105 u32 screen_update_rocknms_left(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 106 u32 screen_update_rocknms_right(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 107 TIMER_CALLBACK_MEMBER(rockn_timer_level4_callback); 108 TIMER_CALLBACK_MEMBER(rockn_timer_sub_level4_callback); 109 TIMER_CALLBACK_MEMBER(rockn_timer_level1_callback); 110 TIMER_CALLBACK_MEMBER(rockn_timer_sub_level1_callback); 111 void init_rockn_timer(); 112 113 void nndmseal_map(address_map &map); 114 void rockn1_map(address_map &map); 115 void rockn2_map(address_map &map); 116 void rocknms_main_map(address_map &map); 117 void rocknms_sub_map(address_map &map); 118 void tetrisp2_map(address_map &map); 119 machine_start()120 virtual void machine_start() override { m_leds.resolve(); } 121 122 required_device<cpu_device> m_maincpu; 123 optional_device<cpu_device> m_subcpu; 124 125 required_device<ms32_sprite_device> m_sprite; 126 optional_device<ms32_sprite_device> m_rocknms_sub_sprite; 127 128 required_shared_ptr<u16> m_spriteram; 129 optional_shared_ptr<u16> m_spriteram2; 130 131 u16 m_systemregs[0x10]; 132 required_shared_ptr<u16> m_vram_fg; 133 required_shared_ptr<u16> m_vram_bg; 134 required_shared_ptr<u16> m_vram_rot; 135 required_shared_ptr<u16> m_nvram; 136 required_shared_ptr<u16> m_scroll_fg; 137 required_shared_ptr<u16> m_scroll_bg; 138 required_shared_ptr<u16> m_rotregs; 139 std::unique_ptr<u8[]> m_priority; 140 optional_shared_ptr<u16> m_rocknms_sub_priority; 141 optional_shared_ptr<u16> m_rocknms_sub_vram_rot; 142 optional_shared_ptr<u16> m_rocknms_sub_vram_fg; 143 optional_shared_ptr<u16> m_rocknms_sub_vram_bg; 144 optional_shared_ptr<u16> m_rocknms_sub_scroll_fg; 145 optional_shared_ptr<u16> m_rocknms_sub_scroll_bg; 146 optional_shared_ptr<u16> m_rocknms_sub_rotregs; 147 required_device<gfxdecode_device> m_gfxdecode; 148 optional_device<gfxdecode_device> m_sub_gfxdecode; 149 required_device<palette_device> m_palette; 150 optional_device<palette_device> m_sub_palette; 151 required_shared_ptr<u16> m_paletteram; 152 optional_shared_ptr<u16> m_sub_paletteram; 153 output_finder<45> m_leds; 154 155 u16 m_rocknms_sub_systemregs[0x10]; 156 u16 m_rockn_protectdata; 157 u16 m_rockn_adpcmbank; 158 u16 m_rockn_soundvolume; 159 emu_timer *m_rockn_timer_l4; 160 emu_timer *m_rockn_timer_sub_l4; 161 emu_timer *m_rockn_timer_l1; 162 emu_timer *m_rockn_timer_sub_l1; 163 int m_bank_lo; 164 int m_bank_hi; 165 u16 m_rocknms_main2sub; 166 u16 m_rocknms_sub2main; 167 int m_flipscreen_old; 168 tilemap_t *m_tilemap_bg; 169 tilemap_t *m_tilemap_fg; 170 tilemap_t *m_tilemap_rot; 171 tilemap_t *m_tilemap_sub_bg; 172 tilemap_t *m_tilemap_sub_fg; 173 tilemap_t *m_tilemap_sub_rot; 174 }; 175 176 class stepstag_state : public tetrisp2_state 177 { 178 public: stepstag_state(const machine_config & mconfig,device_type type,const char * tag)179 stepstag_state(const machine_config &mconfig, device_type type, const char *tag) : 180 tetrisp2_state(mconfig, type, tag), 181 m_vj_sprite_l(*this, "sprite_l"), 182 m_vj_sprite_m(*this, "sprite_m"), 183 m_vj_sprite_r(*this, "sprite_r"), 184 m_spriteram1(*this, "spriteram1"), 185 m_spriteram3(*this, "spriteram3"), 186 m_vj_palette_l(*this, "lpalette"), 187 m_vj_palette_m(*this, "mpalette"), 188 m_vj_palette_r(*this, "rpalette"), 189 m_vj_paletteram_l(*this, "paletteram1"), 190 m_vj_paletteram_m(*this, "paletteram2"), 191 m_vj_paletteram_r(*this, "paletteram3"), 192 m_soundlatch(*this, "soundlatch") 193 { } 194 195 void stepstag(machine_config &config); 196 void vjdash(machine_config &config); 197 198 void init_stepstag(); 199 200 DECLARE_VIDEO_START(stepstag); 201 202 private: 203 u16 stepstag_coins_r(); 204 u16 vj_upload_idx; 205 bool vj_upload_fini; 206 void stepstag_b00000_w(u16 data); 207 void stepstag_b20000_w(offs_t offset, u16 data, u16 mem_mask = ~0); 208 void stepstag_main2pc_w(u16 data); 209 u16 unknown_read_0xc00000(); 210 u16 unknown_read_0xffff00(); 211 u16 stepstag_pc2main_r(); 212 void stepstag_soundlatch_word_w(u16 data); 213 void stepstag_neon_w(offs_t offset, u16 data, u16 mem_mask = ~0); 214 void stepstag_step_leds_w(offs_t offset, u16 data, u16 mem_mask = ~0); 215 void stepstag_button_leds_w(offs_t offset, u16 data, u16 mem_mask = ~0); 216 void stepstag_palette_left_w(offs_t offset, u16 data, u16 mem_mask = ~0); 217 void stepstag_palette_mid_w(offs_t offset, u16 data, u16 mem_mask = ~0); 218 void stepstag_palette_right_w(offs_t offset, u16 data, u16 mem_mask = ~0); 219 220 u32 screen_update_stepstag_left(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 221 u32 screen_update_stepstag_mid(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 222 u32 screen_update_stepstag_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 223 u32 screen_update_stepstag_main(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 224 // inline int mypal(int x); 225 226 void stepstag_map(address_map &map); 227 void stepstag_sub_map(address_map &map); 228 void vjdash_map(address_map &map); 229 230 optional_device<ms32_sprite_device> m_vj_sprite_l; 231 optional_device<ms32_sprite_device> m_vj_sprite_m; 232 optional_device<ms32_sprite_device> m_vj_sprite_r; 233 required_shared_ptr<u16> m_spriteram1; 234 required_shared_ptr<u16> m_spriteram3; 235 optional_device<palette_device> m_vj_palette_l; 236 optional_device<palette_device> m_vj_palette_m; 237 optional_device<palette_device> m_vj_palette_r; 238 optional_shared_ptr<u16> m_vj_paletteram_l; 239 optional_shared_ptr<u16> m_vj_paletteram_m; 240 optional_shared_ptr<u16> m_vj_paletteram_r; 241 required_device<generic_latch_16_device> m_soundlatch; 242 void convert_yuv422_to_rgb888(palette_device *paldev, u16 *palram,u32 offset); 243 }; 244