diff options
Diffstat (limited to 'src/mame/includes/taito_f3.h')
-rw-r--r-- | src/mame/includes/taito_f3.h | 439 |
1 files changed, 215 insertions, 224 deletions
diff --git a/src/mame/includes/taito_f3.h b/src/mame/includes/taito_f3.h index fff482d847c..787d2ca8554 100644 --- a/src/mame/includes/taito_f3.h +++ b/src/mame/includes/taito_f3.h @@ -60,19 +60,28 @@ public: taito_f3_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), - m_audiocpu(*this, "taito_en:audiocpu"), - m_taito_en(*this, "taito_en"), m_watchdog(*this, "watchdog"), - m_oki(*this, "oki"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), m_eeprom(*this, "eeprom"), - m_f3_ram(*this,"f3_ram"), - m_paletteram32(*this, "paletteram"), + m_spriterom_hi(*this, "sprites_hi"), + m_tilemaprom_hi(*this, "tilemap_hi"), + m_textram(*this, "textram", 0), + m_spriteram(*this, "spriteram", 0), + m_charram(*this, "charram", 0), + m_line_ram(*this, "line_ram", 0), + m_pf_ram(*this, "pf_ram", 0), + m_pivot_ram(*this, "pivot_ram", 0), m_input(*this, "IN.%u", 0), m_dial(*this, "DIAL.%u", 0), - m_eepromin(*this, "EEPROMIN") + m_eepromin(*this, "EEPROMIN"), + m_eepromout(*this, "EEPROMOUT"), + m_audiocpu(*this, "taito_en:audiocpu"), + m_taito_en(*this, "taito_en"), + m_oki(*this, "oki"), + m_paletteram32(*this, "paletteram"), + m_okibank(*this, "okibank") { } void f3_eeprom(machine_config &config); @@ -132,75 +141,103 @@ protected: TIMER_F3_INTERRUPT3 }; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_post_load(void) override; + + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void video_start() override; + required_device<cpu_device> m_maincpu; - optional_device<cpu_device> m_audiocpu; - optional_device<taito_en_device> m_taito_en; optional_device<watchdog_timer_device> m_watchdog; - optional_device<okim6295_device> m_oki; required_device<gfxdecode_device> m_gfxdecode; required_device<screen_device> m_screen; required_device<palette_device> m_palette; optional_device<eeprom_serial_base_device> m_eeprom; - optional_shared_ptr<uint32_t> m_f3_ram; - optional_shared_ptr<uint32_t> m_paletteram32; + optional_region_ptr<u8> m_spriterom_hi; // all but 2mindril, bubsymphb + optional_region_ptr<u8> m_tilemaprom_hi; + + required_shared_ptr<u16> m_textram; + required_shared_ptr<u16> m_spriteram; + required_shared_ptr<u16> m_charram; + required_shared_ptr<u16> m_line_ram; + required_shared_ptr<u16> m_pf_ram; + required_shared_ptr<u16> m_pivot_ram; + optional_ioport_array<6> m_input; optional_ioport_array<2> m_dial; optional_ioport m_eepromin; + optional_ioport m_eepromout; + emu_timer *m_interrupt3_timer; + u32 m_coin_word[2]; - std::unique_ptr<uint16_t[]> m_videoram; - std::unique_ptr<uint16_t[]> m_spriteram; - std::unique_ptr<uint16_t[]> m_f3_vram; - std::unique_ptr<uint16_t[]> m_f3_line_ram; - std::unique_ptr<uint16_t[]> m_f3_pf_data; - std::unique_ptr<uint16_t[]> m_f3_pivot_ram; + struct tempsprite + { + int code, color; + int flipx, flipy; + int x, y; + int zoomx, zoomy; + int pri; + }; - emu_timer *m_interrupt3_timer; - uint32_t m_coin_word[2]; - int m_f3_game; - tilemap_t *m_pf1_tilemap; - tilemap_t *m_pf2_tilemap; - tilemap_t *m_pf3_tilemap; - tilemap_t *m_pf4_tilemap; - tilemap_t *m_pf5_tilemap; - tilemap_t *m_pf6_tilemap; - tilemap_t *m_pf7_tilemap; - tilemap_t *m_pf8_tilemap; + struct f3_playfield_line_inf + { + int alpha_mode[256]; + int pri[256]; + + /* use for draw_scanlines */ + u16 *src[256], *src_s[256], *src_e[256]; + u8 *tsrc[256], *tsrc_s[256]; + int x_count[256]; + u32 x_zoom[256]; + u32 clip0[256]; + u32 clip1[256]; + }; + + struct f3_spritealpha_line_inf + { + u16 alpha_level[256]; + u16 spri[256]; + u16 sprite_alpha[256]; + u32 sprite_clip0[256]; + u32 sprite_clip1[256]; + s16 clip0_l[256]; + s16 clip0_r[256]; + s16 clip1_l[256]; + s16 clip1_r[256]; + }; + + int m_game; + tilemap_t *m_tilemap[8]; tilemap_t *m_pixel_layer; tilemap_t *m_vram_layer; - std::unique_ptr<uint16_t[]> m_spriteram16_buffered; - uint16_t m_f3_control_0[8]; - uint16_t m_f3_control_1[8]; + std::unique_ptr<u16[]> m_spriteram16_buffered; + u16 m_control_0[8]; + u16 m_control_1[8]; int m_flipscreen; - uint8_t m_sprite_extra_planes; - uint8_t m_sprite_pen_mask; - uint16_t *m_f3_pf_data_1; - uint16_t *m_f3_pf_data_2; - uint16_t *m_f3_pf_data_3; - uint16_t *m_f3_pf_data_4; - uint16_t *m_f3_pf_data_5; - uint16_t *m_f3_pf_data_6; - uint16_t *m_f3_pf_data_7; - uint16_t *m_f3_pf_data_8; + u8 m_sprite_extra_planes; + u8 m_sprite_pen_mask; + u16 *m_pf_data[8]; int m_sprite_lag; - uint8_t m_sprite_pri_usage; + u8 m_sprite_pri_usage; bitmap_ind8 m_pri_alp_bitmap; - int m_f3_alpha_level_2as; - int m_f3_alpha_level_2ad; - int m_f3_alpha_level_3as; - int m_f3_alpha_level_3ad; - int m_f3_alpha_level_2bs; - int m_f3_alpha_level_2bd; - int m_f3_alpha_level_3bs; - int m_f3_alpha_level_3bd; + int m_alpha_level_2as; + int m_alpha_level_2ad; + int m_alpha_level_3as; + int m_alpha_level_3ad; + int m_alpha_level_2bs; + int m_alpha_level_2bd; + int m_alpha_level_3bs; + int m_alpha_level_3bd; int m_alpha_level_last; int m_width_mask; int m_twidth_mask; int m_twidth_mask_bit; - std::unique_ptr<uint8_t[]> m_tile_opaque_sp; - std::unique_ptr<uint8_t[]> m_tile_opaque_pf[8]; - uint8_t m_add_sat[256][256]; + std::unique_ptr<u8[]> m_tile_opaque_sp; + std::unique_ptr<u8[]> m_tile_opaque_pf[8]; + u8 m_add_sat[256][256]; int m_alpha_s_1_1; int m_alpha_s_1_2; int m_alpha_s_1_4; @@ -221,197 +258,151 @@ protected: int m_alpha_s_3b_0; int m_alpha_s_3b_1; int m_alpha_s_3b_2; - uint32_t m_dval; - uint8_t m_pval; - uint8_t m_tval; - uint8_t m_pdest_2a; - uint8_t m_pdest_2b; + u32 m_dval; + u8 m_pval; + u8 m_tval; + u8 m_pdest_2a; + u8 m_pdest_2b; int m_tr_2a; int m_tr_2b; - uint8_t m_pdest_3a; - uint8_t m_pdest_3b; + u8 m_pdest_3a; + u8 m_pdest_3b; int m_tr_3a; int m_tr_3b; - uint16_t *m_src0; - uint16_t *m_src_s0; - uint16_t *m_src_e0; - uint16_t m_clip_al0; - uint16_t m_clip_ar0; - uint16_t m_clip_bl0; - uint16_t m_clip_br0; - uint8_t *m_tsrc0; - uint8_t *m_tsrc_s0; - uint32_t m_x_count0; - uint32_t m_x_zoom0; - uint16_t *m_src1; - uint16_t *m_src_s1; - uint16_t *m_src_e1; - uint16_t m_clip_al1; - uint16_t m_clip_ar1; - uint16_t m_clip_bl1; - uint16_t m_clip_br1; - uint8_t *m_tsrc1; - uint8_t *m_tsrc_s1; - uint32_t m_x_count1; - uint32_t m_x_zoom1; - uint16_t *m_src2; - uint16_t *m_src_s2; - uint16_t *m_src_e2; - uint16_t m_clip_al2; - uint16_t m_clip_ar2; - uint16_t m_clip_bl2; - uint16_t m_clip_br2; - uint8_t *m_tsrc2; - uint8_t *m_tsrc_s2; - uint32_t m_x_count2; - uint32_t m_x_zoom2; - uint16_t *m_src3; - uint16_t *m_src_s3; - uint16_t *m_src_e3; - uint16_t m_clip_al3; - uint16_t m_clip_ar3; - uint16_t m_clip_bl3; - uint16_t m_clip_br3; - uint8_t *m_tsrc3; - uint8_t *m_tsrc_s3; - uint32_t m_x_count3; - uint32_t m_x_zoom3; - uint16_t *m_src4; - uint16_t *m_src_s4; - uint16_t *m_src_e4; - uint16_t m_clip_al4; - uint16_t m_clip_ar4; - uint16_t m_clip_bl4; - uint16_t m_clip_br4; - uint8_t *m_tsrc4; - uint8_t *m_tsrc_s4; - uint32_t m_x_count4; - uint32_t m_x_zoom4; + u16 *m_src[5]; + u16 *m_src_s[5]; + u16 *m_src_e[5]; + u16 m_clip_al[5]; + u16 m_clip_ar[5]; + u16 m_clip_bl[5]; + u16 m_clip_br[5]; + u8 *m_tsrc[5]; + u8 *m_tsrc_s[5]; + u32 m_x_count[5]; + u32 m_x_zoom[5]; struct tempsprite *m_spritelist; const struct tempsprite *m_sprite_end; struct f3_playfield_line_inf *m_pf_line_inf; struct f3_spritealpha_line_inf *m_sa_line_inf; - const struct F3config *m_f3_game_config; - int (taito_f3_state::*m_dpix_n[8][16])(uint32_t s_pix); - int (taito_f3_state::**m_dpix_lp[5])(uint32_t s_pix); - int (taito_f3_state::**m_dpix_sp[9])(uint32_t s_pix); - - DECLARE_READ32_MEMBER(f3_control_r); - DECLARE_WRITE32_MEMBER(f3_control_w); - DECLARE_WRITE32_MEMBER(f3_sound_reset_0_w); - DECLARE_WRITE32_MEMBER(f3_sound_reset_1_w); - DECLARE_WRITE32_MEMBER(f3_sound_bankswitch_w); - DECLARE_WRITE16_MEMBER(f3_unk_w); - DECLARE_READ32_MEMBER(bubsympb_oki_r); - DECLARE_WRITE32_MEMBER(bubsympb_oki_w); - DECLARE_READ16_MEMBER(f3_pf_data_r); - DECLARE_WRITE16_MEMBER(f3_pf_data_w); - DECLARE_WRITE16_MEMBER(f3_control_0_w); - DECLARE_WRITE16_MEMBER(f3_control_1_w); - DECLARE_READ16_MEMBER(f3_spriteram_r); - DECLARE_WRITE16_MEMBER(f3_spriteram_w); - DECLARE_READ16_MEMBER(f3_videoram_r); - DECLARE_WRITE16_MEMBER(f3_videoram_w); - DECLARE_READ16_MEMBER(f3_vram_r); - DECLARE_WRITE16_MEMBER(f3_vram_w); - DECLARE_READ16_MEMBER(f3_pivot_r); - DECLARE_WRITE16_MEMBER(f3_pivot_w); - DECLARE_READ16_MEMBER(f3_lineram_r); - DECLARE_WRITE16_MEMBER(f3_lineram_w); - DECLARE_WRITE32_MEMBER(f3_palette_24bit_w); - - TILE_GET_INFO_MEMBER(get_tile_info1); - TILE_GET_INFO_MEMBER(get_tile_info2); - TILE_GET_INFO_MEMBER(get_tile_info3); - TILE_GET_INFO_MEMBER(get_tile_info4); - TILE_GET_INFO_MEMBER(get_tile_info5); - TILE_GET_INFO_MEMBER(get_tile_info6); - TILE_GET_INFO_MEMBER(get_tile_info7); - TILE_GET_INFO_MEMBER(get_tile_info8); - TILE_GET_INFO_MEMBER(get_tile_info_vram); + const struct F3config *m_game_config; + int (taito_f3_state::*m_dpix_n[8][16])(u32 s_pix); + int (taito_f3_state::**m_dpix_lp[5])(u32 s_pix); + int (taito_f3_state::**m_dpix_sp[9])(u32 s_pix); + + u16 pf_ram_r(offs_t offset); + void pf_ram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void control_0_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void control_1_w(offs_t offset, u16 data, u16 mem_mask = ~0); + u16 spriteram_r(offs_t offset); + void spriteram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + u16 textram_r(offs_t offset); + void textram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + u16 charram_r(offs_t offset); + void charram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + u16 pivot_r(offs_t offset); + void pivot_w(offs_t offset, u16 data, u16 mem_mask = ~0); + u16 lineram_r(offs_t offset); + void lineram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + + template<unsigned Layer> TILE_GET_INFO_MEMBER(get_tile_info); + TILE_GET_INFO_MEMBER(get_tile_info_text); TILE_GET_INFO_MEMBER(get_tile_info_pixel); - uint32_t screen_update_f3(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - DECLARE_WRITE_LINE_MEMBER(screen_vblank_f3); - INTERRUPT_GEN_MEMBER(f3_interrupt2); + u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + DECLARE_WRITE_LINE_MEMBER(screen_vblank); void bubsympb_map(address_map &map); void f3_map(address_map &map); - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; + void tile_decode(); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; - virtual void device_post_load(void) override; - - inline void get_tile_info(tile_data &tileinfo, int tile_index, uint16_t *gfx_base); - inline void f3_drawgfx(bitmap_rgb32 &dest_bmp,const rectangle &clip,gfx_element *gfx,int code,int color,int flipx,int flipy,int sx,int sy,uint8_t pri_dst); - inline void f3_drawgfxzoom(bitmap_rgb32 &dest_bmp,const rectangle &clip,gfx_element *gfx,int code,int color,int flipx,int flipy,int sx,int sy,int scalex,int scaley,uint8_t pri_dst); + inline void f3_drawgfx(bitmap_rgb32 &dest_bmp, const rectangle &clip, gfx_element *gfx, int code, int color, int flipx, int flipy, int sx, int sy, u8 pri_dst); + inline void f3_drawgfxzoom(bitmap_rgb32 &dest_bmp, const rectangle &clip, gfx_element *gfx, int code, int color, int flipx, int flipy, int sx, int sy, int scalex, int scaley, u8 pri_dst); void draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect); - void get_sprite_info(const uint16_t *spriteram16_ptr); + void get_sprite_info(const u16 *spriteram16_ptr); void print_debug_info(bitmap_rgb32 &bitmap); - inline void f3_alpha_set_level(); - inline void f3_alpha_blend32_s(int alphas, uint32_t s); - inline void f3_alpha_blend32_d(int alphas, uint32_t s); - inline void f3_alpha_blend_1_1(uint32_t s); - inline void f3_alpha_blend_1_2(uint32_t s); - inline void f3_alpha_blend_1_4(uint32_t s); - inline void f3_alpha_blend_1_5(uint32_t s); - inline void f3_alpha_blend_1_6(uint32_t s); - inline void f3_alpha_blend_1_8(uint32_t s); - inline void f3_alpha_blend_1_9(uint32_t s); - inline void f3_alpha_blend_1_a(uint32_t s); - inline void f3_alpha_blend_2a_0(uint32_t s); - inline void f3_alpha_blend_2a_4(uint32_t s); - inline void f3_alpha_blend_2a_8(uint32_t s); - inline void f3_alpha_blend_2b_0(uint32_t s); - inline void f3_alpha_blend_2b_4(uint32_t s); - inline void f3_alpha_blend_2b_8(uint32_t s); - inline void f3_alpha_blend_3a_0(uint32_t s); - inline void f3_alpha_blend_3a_1(uint32_t s); - inline void f3_alpha_blend_3a_2(uint32_t s); - inline void f3_alpha_blend_3b_0(uint32_t s); - inline void f3_alpha_blend_3b_1(uint32_t s); - inline void f3_alpha_blend_3b_2(uint32_t s); - int dpix_1_noalpha(uint32_t s_pix); - int dpix_ret1(uint32_t s_pix); - int dpix_ret0(uint32_t s_pix); - int dpix_1_1(uint32_t s_pix); - int dpix_1_2(uint32_t s_pix); - int dpix_1_4(uint32_t s_pix); - int dpix_1_5(uint32_t s_pix); - int dpix_1_6(uint32_t s_pix); - int dpix_1_8(uint32_t s_pix); - int dpix_1_9(uint32_t s_pix); - int dpix_1_a(uint32_t s_pix); - int dpix_2a_0(uint32_t s_pix); - int dpix_2a_4(uint32_t s_pix); - int dpix_2a_8(uint32_t s_pix); - int dpix_3a_0(uint32_t s_pix); - int dpix_3a_1(uint32_t s_pix); - int dpix_3a_2(uint32_t s_pix); - int dpix_2b_0(uint32_t s_pix); - int dpix_2b_4(uint32_t s_pix); - int dpix_2b_8(uint32_t s_pix); - int dpix_3b_0(uint32_t s_pix); - int dpix_3b_1(uint32_t s_pix); - int dpix_3b_2(uint32_t s_pix); - int dpix_2_0(uint32_t s_pix); - int dpix_2_4(uint32_t s_pix); - int dpix_2_8(uint32_t s_pix); - int dpix_3_0(uint32_t s_pix); - int dpix_3_1(uint32_t s_pix); - int dpix_3_2(uint32_t s_pix); - inline void dpix_1_sprite(uint32_t s_pix); - inline void dpix_bg(uint32_t bgcolor); + inline void alpha_set_level(); + inline void alpha_blend32_s(int alphas, u32 s); + inline void alpha_blend32_d(int alphas, u32 s); + inline void alpha_blend_1_1(u32 s); + inline void alpha_blend_1_2(u32 s); + inline void alpha_blend_1_4(u32 s); + inline void alpha_blend_1_5(u32 s); + inline void alpha_blend_1_6(u32 s); + inline void alpha_blend_1_8(u32 s); + inline void alpha_blend_1_9(u32 s); + inline void alpha_blend_1_a(u32 s); + inline void alpha_blend_2a_0(u32 s); + inline void alpha_blend_2a_4(u32 s); + inline void alpha_blend_2a_8(u32 s); + inline void alpha_blend_2b_0(u32 s); + inline void alpha_blend_2b_4(u32 s); + inline void alpha_blend_2b_8(u32 s); + inline void alpha_blend_3a_0(u32 s); + inline void alpha_blend_3a_1(u32 s); + inline void alpha_blend_3a_2(u32 s); + inline void alpha_blend_3b_0(u32 s); + inline void alpha_blend_3b_1(u32 s); + inline void alpha_blend_3b_2(u32 s); + int dpix_1_noalpha(u32 s_pix); + int dpix_ret1(u32 s_pix); + int dpix_ret0(u32 s_pix); + int dpix_1_1(u32 s_pix); + int dpix_1_2(u32 s_pix); + int dpix_1_4(u32 s_pix); + int dpix_1_5(u32 s_pix); + int dpix_1_6(u32 s_pix); + int dpix_1_8(u32 s_pix); + int dpix_1_9(u32 s_pix); + int dpix_1_a(u32 s_pix); + int dpix_2a_0(u32 s_pix); + int dpix_2a_4(u32 s_pix); + int dpix_2a_8(u32 s_pix); + int dpix_3a_0(u32 s_pix); + int dpix_3a_1(u32 s_pix); + int dpix_3a_2(u32 s_pix); + int dpix_2b_0(u32 s_pix); + int dpix_2b_4(u32 s_pix); + int dpix_2b_8(u32 s_pix); + int dpix_3b_0(u32 s_pix); + int dpix_3b_1(u32 s_pix); + int dpix_3b_2(u32 s_pix); + int dpix_2_0(u32 s_pix); + int dpix_2_4(u32 s_pix); + int dpix_2_8(u32 s_pix); + int dpix_3_0(u32 s_pix); + int dpix_3_1(u32 s_pix); + int dpix_3_2(u32 s_pix); + inline void dpix_1_sprite(u32 s_pix); + inline void dpix_bg(u32 bgcolor); void init_alpha_blend_func(); - inline void draw_scanlines(bitmap_rgb32 &bitmap, int xsize, int16_t *draw_line_num, const struct f3_playfield_line_inf **line_t, const int *sprite, uint32_t orient, int skip_layer_num); - void visible_tile_check(struct f3_playfield_line_inf *line_t, int line, uint32_t x_index_fx,uint32_t y_index, uint16_t *f3_pf_data_n); - void calculate_clip(int y, uint16_t pri, uint32_t* clip0, uint32_t* clip1, int* line_enable); + inline void draw_scanlines(bitmap_rgb32 &bitmap, int xsize, s16 *draw_line_num, const struct f3_playfield_line_inf **line_t, const int *sprite, u32 orient, int skip_layer_num); + void visible_tile_check(struct f3_playfield_line_inf *line_t, int line, u32 x_index_fx, u32 y_index, u16 *pf_data_n); + void calculate_clip(int y, u16 pri, u32* clip0, u32* clip1, int *line_enable); void get_spritealphaclip_info(); - void get_line_ram_info(tilemap_t *tmap, int sx, int sy, int pos, uint16_t *f3_pf_data_n); + void get_line_ram_info(tilemap_t *tmap, int sx, int sy, int pos, u16 *pf_data_n); void get_vram_info(tilemap_t *vram_tilemap, tilemap_t *pixel_tilemap, int sx, int sy); void scanline_draw(bitmap_rgb32 &bitmap, const rectangle &cliprect); + +private: + optional_device<cpu_device> m_audiocpu; + optional_device<taito_en_device> m_taito_en; + optional_device<okim6295_device> m_oki; + + optional_shared_ptr<u32> m_paletteram32; + optional_memory_bank m_okibank; + + void bubsympb_oki_w(u8 data); + u32 f3_control_r(offs_t offset); + void f3_control_w(offs_t offset, u32 data, u32 mem_mask = ~0); + void f3_unk_w(offs_t offset, u16 data); + void sound_reset_0_w(u32 data); + void sound_reset_1_w(u32 data); + void sound_bankswitch_w(offs_t offset, u32 data, u32 mem_mask = ~0); + void palette_24bit_w(offs_t offset, u32 data, u32 mem_mask = ~0); + + INTERRUPT_GEN_MEMBER(interrupt2); + + void bubsympb_oki_map(address_map &map); }; #endif // MAME_INCLUDES_TAITO_F3_H |