Previous 199869 Revisions Next

r32523 Saturday 4th October, 2014 at 06:28:27 UTC by Osso
taito_f3: moved video functions into the driver class (nw)
[src/mame/includes]taito_f3.h
[src/mame/video]taito_f3.c

trunk/src/mame/includes/taito_f3.h
r32522r32523
214214   struct f3_playfield_line_inf *m_pf_line_inf;
215215   struct f3_spritealpha_line_inf *m_sa_line_inf;
216216   const struct F3config *m_f3_game_config;
217   int (*m_dpix_n[8][16])(taito_f3_state *state, UINT32 s_pix);
218   int (**m_dpix_lp[5])(taito_f3_state *state, UINT32 s_pix);
219   int (**m_dpix_sp[9])(taito_f3_state *state, UINT32 s_pix);
217   int (taito_f3_state::*m_dpix_n[8][16])(UINT32 s_pix);
218   int (taito_f3_state::**m_dpix_lp[5])(UINT32 s_pix);
219   int (taito_f3_state::**m_dpix_sp[9])(UINT32 s_pix);
220220
221221   DECLARE_READ32_MEMBER(f3_control_r);
222222   DECLARE_WRITE32_MEMBER(f3_control_w);
r32522r32523
307307   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 pri_dst);
308308   void draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect);
309309   void get_sprite_info(const UINT16 *spriteram16_ptr);
310   void print_debug_info(bitmap_rgb32 &bitmap);
311   inline void f3_alpha_set_level();
312   inline void f3_alpha_blend32_s(int alphas, UINT32 s);
313   inline void f3_alpha_blend32_d(int alphas, UINT32 s);
314   inline void f3_alpha_blend_1_1(UINT32 s);
315   inline void f3_alpha_blend_1_2(UINT32 s);
316   inline void f3_alpha_blend_1_4(UINT32 s);
317   inline void f3_alpha_blend_1_5(UINT32 s);
318   inline void f3_alpha_blend_1_6(UINT32 s);
319   inline void f3_alpha_blend_1_8(UINT32 s);
320   inline void f3_alpha_blend_1_9(UINT32 s);
321   inline void f3_alpha_blend_1_a(UINT32 s);
322   inline void f3_alpha_blend_2a_0(UINT32 s);
323   inline void f3_alpha_blend_2a_4(UINT32 s);
324   inline void f3_alpha_blend_2a_8(UINT32 s);
325   inline void f3_alpha_blend_2b_0(UINT32 s);
326   inline void f3_alpha_blend_2b_4(UINT32 s);
327   inline void f3_alpha_blend_2b_8(UINT32 s);
328   inline void f3_alpha_blend_3a_0(UINT32 s);
329   inline void f3_alpha_blend_3a_1(UINT32 s);
330   inline void f3_alpha_blend_3a_2(UINT32 s);
331   inline void f3_alpha_blend_3b_0(UINT32 s);
332   inline void f3_alpha_blend_3b_1(UINT32 s);
333   inline void f3_alpha_blend_3b_2(UINT32 s);
334   int dpix_1_noalpha(UINT32 s_pix);
335   int dpix_ret1(UINT32 s_pix);
336   int dpix_ret0(UINT32 s_pix);
337   int dpix_1_1(UINT32 s_pix);
338   int dpix_1_2(UINT32 s_pix);
339   int dpix_1_4(UINT32 s_pix);
340   int dpix_1_5(UINT32 s_pix);
341   int dpix_1_6(UINT32 s_pix);
342   int dpix_1_8(UINT32 s_pix);
343   int dpix_1_9(UINT32 s_pix);
344   int dpix_1_a(UINT32 s_pix);
345   int dpix_2a_0(UINT32 s_pix);
346   int dpix_2a_4(UINT32 s_pix);
347   int dpix_2a_8(UINT32 s_pix);
348   int dpix_3a_0(UINT32 s_pix);
349   int dpix_3a_1(UINT32 s_pix);
350   int dpix_3a_2(UINT32 s_pix);
351   int dpix_2b_0(UINT32 s_pix);
352   int dpix_2b_4(UINT32 s_pix);
353   int dpix_2b_8(UINT32 s_pix);
354   int dpix_3b_0(UINT32 s_pix);
355   int dpix_3b_1(UINT32 s_pix);
356   int dpix_3b_2(UINT32 s_pix);
357   int dpix_2_0(UINT32 s_pix);
358   int dpix_2_4(UINT32 s_pix);
359   int dpix_2_8(UINT32 s_pix);
360   int dpix_3_0(UINT32 s_pix);
361   int dpix_3_1(UINT32 s_pix);
362   int dpix_3_2(UINT32 s_pix);
363   inline void dpix_1_sprite(UINT32 s_pix);
364   inline void dpix_bg(UINT32 bgcolor);
365   void init_alpha_blend_func();
366   inline void draw_scanlines(bitmap_rgb32 &bitmap, int xsize, INT16 *draw_line_num, const struct f3_playfield_line_inf **line_t, const int *sprite, UINT32 orient, int skip_layer_num);
367   void visible_tile_check(struct f3_playfield_line_inf *line_t, int line,   UINT32 x_index_fx,UINT32 y_index, UINT16 *f3_pf_data_n);
368   void calculate_clip(int y, UINT16 pri, UINT32* clip0, UINT32* clip1, int* line_enable);
369   void get_spritealphaclip_info();
370   void get_line_ram_info(tilemap_t *tmap, int sx, int sy, int pos, UINT16 *f3_pf_data_n);
371   void get_vram_info(tilemap_t *vram_tilemap, tilemap_t *pixel_tilemap, int sx, int sy);
372   void scanline_draw(bitmap_rgb32 &bitmap, const rectangle &cliprect);
310373};
trunk/src/mame/video/taito_f3.c
r32522r32523
3203201111 1111    opaque pixel
321321*/
322322
323static void init_alpha_blend_func(running_machine &machine);
324
325323/******************************************************************************/
326324
327static void print_debug_info(running_machine &machine, bitmap_rgb32 &bitmap)
325void taito_f3_state::print_debug_info(bitmap_rgb32 &bitmap)
328326{
329   taito_f3_state *state = machine.driver_data<taito_f3_state>();
330   UINT16 *f3_line_ram = state->m_f3_line_ram;
327   UINT16 *f3_line_ram = m_f3_line_ram;
331328   int l[16];
332329   char buf[64*16];
333330   char *bufptr = buf;
334331
335   bufptr += sprintf(bufptr,"%04X %04X %04X %04X\n",state->m_f3_control_0[0]>>6,state->m_f3_control_0[1]>>6,state->m_f3_control_0[2]>>6,state->m_f3_control_0[3]>>6);
336   bufptr += sprintf(bufptr,"%04X %04X %04X %04X\n",state->m_f3_control_0[4]>>7,state->m_f3_control_0[5]>>7,state->m_f3_control_0[6]>>7,state->m_f3_control_0[7]>>7);
337   bufptr += sprintf(bufptr,"%04X %04X %04X %04X\n",state->m_f3_control_1[0],state->m_f3_control_1[1],state->m_f3_control_1[2],state->m_f3_control_1[3]);
338   bufptr += sprintf(bufptr,"%04X %04X %04X %04X\n",state->m_f3_control_1[4],state->m_f3_control_1[5],state->m_f3_control_1[6],state->m_f3_control_1[7]);
332   bufptr += sprintf(bufptr,"%04X %04X %04X %04X\n",m_f3_control_0[0]>>6,m_f3_control_0[1]>>6,m_f3_control_0[2]>>6,m_f3_control_0[3]>>6);
333   bufptr += sprintf(bufptr,"%04X %04X %04X %04X\n",m_f3_control_0[4]>>7,m_f3_control_0[5]>>7,m_f3_control_0[6]>>7,m_f3_control_0[7]>>7);
334   bufptr += sprintf(bufptr,"%04X %04X %04X %04X\n",m_f3_control_1[0],m_f3_control_1[1],m_f3_control_1[2],m_f3_control_1[3]);
335   bufptr += sprintf(bufptr,"%04X %04X %04X %04X\n",m_f3_control_1[4],m_f3_control_1[5],m_f3_control_1[6],m_f3_control_1[7]);
339336
340   bufptr += sprintf(bufptr,"%04X %04X %04X %04X %04X %04X %04X %04X\n",state->m_spriteram16_buffered[0],state->m_spriteram16_buffered[1],state->m_spriteram16_buffered[2],state->m_spriteram16_buffered[3],state->m_spriteram16_buffered[4],state->m_spriteram16_buffered[5],state->m_spriteram16_buffered[6],state->m_spriteram16_buffered[7]);
341   bufptr += sprintf(bufptr,"%04X %04X %04X %04X %04X %04X %04X %04X\n",state->m_spriteram16_buffered[8],state->m_spriteram16_buffered[9],state->m_spriteram16_buffered[10],state->m_spriteram16_buffered[11],state->m_spriteram16_buffered[12],state->m_spriteram16_buffered[13],state->m_spriteram16_buffered[14],state->m_spriteram16_buffered[15]);
342   bufptr += sprintf(bufptr,"%04X %04X %04X %04X %04X %04X %04X %04X\n",state->m_spriteram16_buffered[16],state->m_spriteram16_buffered[17],state->m_spriteram16_buffered[18],state->m_spriteram16_buffered[19],state->m_spriteram16_buffered[20],state->m_spriteram16_buffered[21],state->m_spriteram16_buffered[22],state->m_spriteram16_buffered[23]);
337   bufptr += sprintf(bufptr,"%04X %04X %04X %04X %04X %04X %04X %04X\n",m_spriteram16_buffered[0],m_spriteram16_buffered[1],m_spriteram16_buffered[2],m_spriteram16_buffered[3],m_spriteram16_buffered[4],m_spriteram16_buffered[5],m_spriteram16_buffered[6],m_spriteram16_buffered[7]);
338   bufptr += sprintf(bufptr,"%04X %04X %04X %04X %04X %04X %04X %04X\n",m_spriteram16_buffered[8],m_spriteram16_buffered[9],m_spriteram16_buffered[10],m_spriteram16_buffered[11],m_spriteram16_buffered[12],m_spriteram16_buffered[13],m_spriteram16_buffered[14],m_spriteram16_buffered[15]);
339   bufptr += sprintf(bufptr,"%04X %04X %04X %04X %04X %04X %04X %04X\n",m_spriteram16_buffered[16],m_spriteram16_buffered[17],m_spriteram16_buffered[18],m_spriteram16_buffered[19],m_spriteram16_buffered[20],m_spriteram16_buffered[21],m_spriteram16_buffered[22],m_spriteram16_buffered[23]);
343340
344341   l[0]=f3_line_ram[0x0040*2]&0xffff;
345342   l[1]=f3_line_ram[0x00c0*2]&0xffff;
r32522r32523
395392   l[3]=f3_line_ram[0x15e0*2]&0xffff;
396393   bufptr += sprintf(bufptr,"5000: %04x %04x %04x %04x\n",l[0],l[1],l[2],l[3]);
397394
398   machine.ui().draw_text(&machine.render().ui_container(), buf, 60, 40);
395   machine().ui().draw_text(&machine().render().ui_container(), buf, 60, 40);
399396}
400397
401398/******************************************************************************/
r32522r32523
659656
660657   m_sprite_lag=m_f3_game_config->sprite_lag;
661658
662   init_alpha_blend_func(machine());
659   init_alpha_blend_func();
663660
664661   {
665662      gfx_element *sprite_gfx = m_gfxdecode->gfx(2);
r32522r32523
895892   d = level+1;                        \
896893}
897894
898INLINE void f3_alpha_set_level(taito_f3_state *state)
895inline void taito_f3_state::f3_alpha_set_level()
899896{
900//  SET_ALPHA_LEVEL(state->m_alpha_s_1_1, state->m_f3_alpha_level_2ad)
901   SET_ALPHA_LEVEL(state->m_alpha_s_1_1, 255-state->m_f3_alpha_level_2as)
902//  SET_ALPHA_LEVEL(state->m_alpha_s_1_2, state->m_f3_alpha_level_2bd)
903   SET_ALPHA_LEVEL(state->m_alpha_s_1_2, 255-state->m_f3_alpha_level_2bs)
904   SET_ALPHA_LEVEL(state->m_alpha_s_1_4, state->m_f3_alpha_level_3ad)
905//  SET_ALPHA_LEVEL(state->m_alpha_s_1_5, state->m_f3_alpha_level_3ad*state->m_f3_alpha_level_2ad/255)
906   SET_ALPHA_LEVEL(state->m_alpha_s_1_5, state->m_f3_alpha_level_3ad*(255-state->m_f3_alpha_level_2as)/255)
907//  SET_ALPHA_LEVEL(state->m_alpha_s_1_6, state->m_f3_alpha_level_3ad*state->m_f3_alpha_level_2bd/255)
908   SET_ALPHA_LEVEL(state->m_alpha_s_1_6, state->m_f3_alpha_level_3ad*(255-state->m_f3_alpha_level_2bs)/255)
909   SET_ALPHA_LEVEL(state->m_alpha_s_1_8, state->m_f3_alpha_level_3bd)
910//  SET_ALPHA_LEVEL(state->m_alpha_s_1_9, state->m_f3_alpha_level_3bd*state->m_f3_alpha_level_2ad/255)
911   SET_ALPHA_LEVEL(state->m_alpha_s_1_9, state->m_f3_alpha_level_3bd*(255-state->m_f3_alpha_level_2as)/255)
912//  SET_ALPHA_LEVEL(state->m_alpha_s_1_a, state->m_f3_alpha_level_3bd*state->m_f3_alpha_level_2bd/255)
913   SET_ALPHA_LEVEL(state->m_alpha_s_1_a, state->m_f3_alpha_level_3bd*(255-state->m_f3_alpha_level_2bs)/255)
897//  SET_ALPHA_LEVEL(m_alpha_s_1_1, m_f3_alpha_level_2ad)
898   SET_ALPHA_LEVEL(m_alpha_s_1_1, 255-m_f3_alpha_level_2as)
899//  SET_ALPHA_LEVEL(m_alpha_s_1_2, m_f3_alpha_level_2bd)
900   SET_ALPHA_LEVEL(m_alpha_s_1_2, 255-m_f3_alpha_level_2bs)
901   SET_ALPHA_LEVEL(m_alpha_s_1_4, m_f3_alpha_level_3ad)
902//  SET_ALPHA_LEVEL(m_alpha_s_1_5, m_f3_alpha_level_3ad*m_f3_alpha_level_2ad/255)
903   SET_ALPHA_LEVEL(m_alpha_s_1_5, m_f3_alpha_level_3ad*(255-m_f3_alpha_level_2as)/255)
904//  SET_ALPHA_LEVEL(m_alpha_s_1_6, m_f3_alpha_level_3ad*m_f3_alpha_level_2bd/255)
905   SET_ALPHA_LEVEL(m_alpha_s_1_6, m_f3_alpha_level_3ad*(255-m_f3_alpha_level_2bs)/255)
906   SET_ALPHA_LEVEL(m_alpha_s_1_8, m_f3_alpha_level_3bd)
907//  SET_ALPHA_LEVEL(m_alpha_s_1_9, m_f3_alpha_level_3bd*m_f3_alpha_level_2ad/255)
908   SET_ALPHA_LEVEL(m_alpha_s_1_9, m_f3_alpha_level_3bd*(255-m_f3_alpha_level_2as)/255)
909//  SET_ALPHA_LEVEL(m_alpha_s_1_a, m_f3_alpha_level_3bd*m_f3_alpha_level_2bd/255)
910   SET_ALPHA_LEVEL(m_alpha_s_1_a, m_f3_alpha_level_3bd*(255-m_f3_alpha_level_2bs)/255)
914911
915   SET_ALPHA_LEVEL(state->m_alpha_s_2a_0, state->m_f3_alpha_level_2as)
916   SET_ALPHA_LEVEL(state->m_alpha_s_2a_4, state->m_f3_alpha_level_2as*state->m_f3_alpha_level_3ad/255)
917   SET_ALPHA_LEVEL(state->m_alpha_s_2a_8, state->m_f3_alpha_level_2as*state->m_f3_alpha_level_3bd/255)
912   SET_ALPHA_LEVEL(m_alpha_s_2a_0, m_f3_alpha_level_2as)
913   SET_ALPHA_LEVEL(m_alpha_s_2a_4, m_f3_alpha_level_2as*m_f3_alpha_level_3ad/255)
914   SET_ALPHA_LEVEL(m_alpha_s_2a_8, m_f3_alpha_level_2as*m_f3_alpha_level_3bd/255)
918915
919   SET_ALPHA_LEVEL(state->m_alpha_s_2b_0, state->m_f3_alpha_level_2bs)
920   SET_ALPHA_LEVEL(state->m_alpha_s_2b_4, state->m_f3_alpha_level_2bs*state->m_f3_alpha_level_3ad/255)
921   SET_ALPHA_LEVEL(state->m_alpha_s_2b_8, state->m_f3_alpha_level_2bs*state->m_f3_alpha_level_3bd/255)
916   SET_ALPHA_LEVEL(m_alpha_s_2b_0, m_f3_alpha_level_2bs)
917   SET_ALPHA_LEVEL(m_alpha_s_2b_4, m_f3_alpha_level_2bs*m_f3_alpha_level_3ad/255)
918   SET_ALPHA_LEVEL(m_alpha_s_2b_8, m_f3_alpha_level_2bs*m_f3_alpha_level_3bd/255)
922919
923   SET_ALPHA_LEVEL(state->m_alpha_s_3a_0, state->m_f3_alpha_level_3as)
924   SET_ALPHA_LEVEL(state->m_alpha_s_3a_1, state->m_f3_alpha_level_3as*state->m_f3_alpha_level_2ad/255)
925   SET_ALPHA_LEVEL(state->m_alpha_s_3a_2, state->m_f3_alpha_level_3as*state->m_f3_alpha_level_2bd/255)
920   SET_ALPHA_LEVEL(m_alpha_s_3a_0, m_f3_alpha_level_3as)
921   SET_ALPHA_LEVEL(m_alpha_s_3a_1, m_f3_alpha_level_3as*m_f3_alpha_level_2ad/255)
922   SET_ALPHA_LEVEL(m_alpha_s_3a_2, m_f3_alpha_level_3as*m_f3_alpha_level_2bd/255)
926923
927   SET_ALPHA_LEVEL(state->m_alpha_s_3b_0, state->m_f3_alpha_level_3bs)
928   SET_ALPHA_LEVEL(state->m_alpha_s_3b_1, state->m_f3_alpha_level_3bs*state->m_f3_alpha_level_2ad/255)
929   SET_ALPHA_LEVEL(state->m_alpha_s_3b_2, state->m_f3_alpha_level_3bs*state->m_f3_alpha_level_2bd/255)
924   SET_ALPHA_LEVEL(m_alpha_s_3b_0, m_f3_alpha_level_3bs)
925   SET_ALPHA_LEVEL(m_alpha_s_3b_1, m_f3_alpha_level_3bs*m_f3_alpha_level_2ad/255)
926   SET_ALPHA_LEVEL(m_alpha_s_3b_2, m_f3_alpha_level_3bs*m_f3_alpha_level_2bd/255)
930927}
931928#undef SET_ALPHA_LEVEL
932929
r32522r32523
938935
939936
940937
941INLINE void f3_alpha_blend32_s( taito_f3_state *state, int alphas, UINT32 s )
938inline void taito_f3_state::f3_alpha_blend32_s(int alphas, UINT32 s)
942939{
943940   UINT8 *sc = (UINT8 *)&s;
944   UINT8 *dc = (UINT8 *)&state->m_dval;
941   UINT8 *dc = (UINT8 *)&m_dval;
945942   dc[COLOR1] = (alphas * sc[COLOR1]) >> 8;
946943   dc[COLOR2] = (alphas * sc[COLOR2]) >> 8;
947944   dc[COLOR3] = (alphas * sc[COLOR3]) >> 8;
948945}
949946
950INLINE void f3_alpha_blend32_d( taito_f3_state *state, int alphas, UINT32 s )
947inline void taito_f3_state::f3_alpha_blend32_d(int alphas, UINT32 s)
951948{
952949   UINT8 *sc = (UINT8 *)&s;
953   UINT8 *dc = (UINT8 *)&state->m_dval;
954   dc[COLOR1] = state->m_add_sat[dc[COLOR1]][(alphas * sc[COLOR1]) >> 8];
955   dc[COLOR2] = state->m_add_sat[dc[COLOR2]][(alphas * sc[COLOR2]) >> 8];
956   dc[COLOR3] = state->m_add_sat[dc[COLOR3]][(alphas * sc[COLOR3]) >> 8];
950   UINT8 *dc = (UINT8 *)&m_dval;
951   dc[COLOR1] = m_add_sat[dc[COLOR1]][(alphas * sc[COLOR1]) >> 8];
952   dc[COLOR2] = m_add_sat[dc[COLOR2]][(alphas * sc[COLOR2]) >> 8];
953   dc[COLOR3] = m_add_sat[dc[COLOR3]][(alphas * sc[COLOR3]) >> 8];
957954}
958955
959956/*============================================================================*/
960957
961INLINE void f3_alpha_blend_1_1( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_1_1,s);}
962INLINE void f3_alpha_blend_1_2( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_1_2,s);}
963INLINE void f3_alpha_blend_1_4( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_1_4,s);}
964INLINE void f3_alpha_blend_1_5( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_1_5,s);}
965INLINE void f3_alpha_blend_1_6( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_1_6,s);}
966INLINE void f3_alpha_blend_1_8( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_1_8,s);}
967INLINE void f3_alpha_blend_1_9( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_1_9,s);}
968INLINE void f3_alpha_blend_1_a( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_1_a,s);}
958inline void taito_f3_state::f3_alpha_blend_1_1(UINT32 s){f3_alpha_blend32_d(m_alpha_s_1_1,s);}
959inline void taito_f3_state::f3_alpha_blend_1_2(UINT32 s){f3_alpha_blend32_d(m_alpha_s_1_2,s);}
960inline void taito_f3_state::f3_alpha_blend_1_4(UINT32 s){f3_alpha_blend32_d(m_alpha_s_1_4,s);}
961inline void taito_f3_state::f3_alpha_blend_1_5(UINT32 s){f3_alpha_blend32_d(m_alpha_s_1_5,s);}
962inline void taito_f3_state::f3_alpha_blend_1_6(UINT32 s){f3_alpha_blend32_d(m_alpha_s_1_6,s);}
963inline void taito_f3_state::f3_alpha_blend_1_8(UINT32 s){f3_alpha_blend32_d(m_alpha_s_1_8,s);}
964inline void taito_f3_state::f3_alpha_blend_1_9(UINT32 s){f3_alpha_blend32_d(m_alpha_s_1_9,s);}
965inline void taito_f3_state::f3_alpha_blend_1_a(UINT32 s){f3_alpha_blend32_d(m_alpha_s_1_a,s);}
969966
970INLINE void f3_alpha_blend_2a_0( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_s(state, state->m_alpha_s_2a_0,s);}
971INLINE void f3_alpha_blend_2a_4( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_2a_4,s);}
972INLINE void f3_alpha_blend_2a_8( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_2a_8,s);}
967inline void taito_f3_state::f3_alpha_blend_2a_0(UINT32 s){f3_alpha_blend32_s(m_alpha_s_2a_0,s);}
968inline void taito_f3_state::f3_alpha_blend_2a_4(UINT32 s){f3_alpha_blend32_d(m_alpha_s_2a_4,s);}
969inline void taito_f3_state::f3_alpha_blend_2a_8(UINT32 s){f3_alpha_blend32_d(m_alpha_s_2a_8,s);}
973970
974INLINE void f3_alpha_blend_2b_0( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_s(state, state->m_alpha_s_2b_0,s);}
975INLINE void f3_alpha_blend_2b_4( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_2b_4,s);}
976INLINE void f3_alpha_blend_2b_8( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_2b_8,s);}
971inline void taito_f3_state::f3_alpha_blend_2b_0(UINT32 s){f3_alpha_blend32_s(m_alpha_s_2b_0,s);}
972inline void taito_f3_state::f3_alpha_blend_2b_4(UINT32 s){f3_alpha_blend32_d(m_alpha_s_2b_4,s);}
973inline void taito_f3_state::f3_alpha_blend_2b_8(UINT32 s){f3_alpha_blend32_d(m_alpha_s_2b_8,s);}
977974
978INLINE void f3_alpha_blend_3a_0( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_s(state, state->m_alpha_s_3a_0,s);}
979INLINE void f3_alpha_blend_3a_1( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_3a_1,s);}
980INLINE void f3_alpha_blend_3a_2( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_3a_2,s);}
975inline void taito_f3_state::f3_alpha_blend_3a_0(UINT32 s){f3_alpha_blend32_s(m_alpha_s_3a_0,s);}
976inline void taito_f3_state::f3_alpha_blend_3a_1(UINT32 s){f3_alpha_blend32_d(m_alpha_s_3a_1,s);}
977inline void taito_f3_state::f3_alpha_blend_3a_2(UINT32 s){f3_alpha_blend32_d(m_alpha_s_3a_2,s);}
981978
982INLINE void f3_alpha_blend_3b_0( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_s(state, state->m_alpha_s_3b_0,s);}
983INLINE void f3_alpha_blend_3b_1( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_3b_1,s);}
984INLINE void f3_alpha_blend_3b_2( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_3b_2,s);}
979inline void taito_f3_state::f3_alpha_blend_3b_0(UINT32 s){f3_alpha_blend32_s(m_alpha_s_3b_0,s);}
980inline void taito_f3_state::f3_alpha_blend_3b_1(UINT32 s){f3_alpha_blend32_d(m_alpha_s_3b_1,s);}
981inline void taito_f3_state::f3_alpha_blend_3b_2(UINT32 s){f3_alpha_blend32_d(m_alpha_s_3b_2,s);}
985982
986983/*============================================================================*/
987984
988static int dpix_1_noalpha(taito_f3_state *state, UINT32 s_pix) {state->m_dval = s_pix; return 1;}
989static int dpix_ret1(taito_f3_state *state, UINT32 s_pix) {return 1;}
990static int dpix_ret0(taito_f3_state *state, UINT32 s_pix) {return 0;}
991static int dpix_1_1(taito_f3_state *state, UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_1(state, s_pix); return 1;}
992static int dpix_1_2(taito_f3_state *state, UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_2(state, s_pix); return 1;}
993static int dpix_1_4(taito_f3_state *state, UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_4(state, s_pix); return 1;}
994static int dpix_1_5(taito_f3_state *state, UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_5(state, s_pix); return 1;}
995static int dpix_1_6(taito_f3_state *state, UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_6(state, s_pix); return 1;}
996static int dpix_1_8(taito_f3_state *state, UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_8(state, s_pix); return 1;}
997static int dpix_1_9(taito_f3_state *state, UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_9(state, s_pix); return 1;}
998static int dpix_1_a(taito_f3_state *state, UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_a(state, s_pix); return 1;}
985int taito_f3_state::dpix_1_noalpha(UINT32 s_pix) {m_dval = s_pix; return 1;}
986int taito_f3_state::dpix_ret1(UINT32 s_pix) {return 1;}
987int taito_f3_state::dpix_ret0(UINT32 s_pix) {return 0;}
988int taito_f3_state::dpix_1_1(UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_1(s_pix); return 1;}
989int taito_f3_state::dpix_1_2(UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_2(s_pix); return 1;}
990int taito_f3_state::dpix_1_4(UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_4(s_pix); return 1;}
991int taito_f3_state::dpix_1_5(UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_5(s_pix); return 1;}
992int taito_f3_state::dpix_1_6(UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_6(s_pix); return 1;}
993int taito_f3_state::dpix_1_8(UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_8(s_pix); return 1;}
994int taito_f3_state::dpix_1_9(UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_9(s_pix); return 1;}
995int taito_f3_state::dpix_1_a(UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_a(s_pix); return 1;}
999996
1000static int dpix_2a_0(taito_f3_state *state, UINT32 s_pix)
997int taito_f3_state::dpix_2a_0(UINT32 s_pix)
1001998{
1002   if(s_pix) f3_alpha_blend_2a_0(state, s_pix);
1003   else      state->m_dval = 0;
1004   if(state->m_pdest_2a) {state->m_pval |= state->m_pdest_2a;return 0;}
999   if(s_pix) f3_alpha_blend_2a_0(s_pix);
1000   else      m_dval = 0;
1001   if(m_pdest_2a) {m_pval |= m_pdest_2a;return 0;}
10051002   return 1;
10061003}
1007static int dpix_2a_4(taito_f3_state *state, UINT32 s_pix)
1004int taito_f3_state::dpix_2a_4(UINT32 s_pix)
10081005{
1009   if(s_pix) f3_alpha_blend_2a_4(state, s_pix);
1010   if(state->m_pdest_2a) {state->m_pval |= state->m_pdest_2a;return 0;}
1006   if(s_pix) f3_alpha_blend_2a_4(s_pix);
1007   if(m_pdest_2a) {m_pval |= m_pdest_2a;return 0;}
10111008   return 1;
10121009}
1013static int dpix_2a_8(taito_f3_state *state, UINT32 s_pix)
1010int taito_f3_state::dpix_2a_8(UINT32 s_pix)
10141011{
1015   if(s_pix) f3_alpha_blend_2a_8(state, s_pix);
1016   if(state->m_pdest_2a) {state->m_pval |= state->m_pdest_2a;return 0;}
1012   if(s_pix) f3_alpha_blend_2a_8(s_pix);
1013   if(m_pdest_2a) {m_pval |= m_pdest_2a;return 0;}
10171014   return 1;
10181015}
10191016
1020static int dpix_3a_0(taito_f3_state *state, UINT32 s_pix)
1017int taito_f3_state::dpix_3a_0(UINT32 s_pix)
10211018{
1022   if(s_pix) f3_alpha_blend_3a_0(state, s_pix);
1023   else      state->m_dval = 0;
1024   if(state->m_pdest_3a) {state->m_pval |= state->m_pdest_3a;return 0;}
1019   if(s_pix) f3_alpha_blend_3a_0(s_pix);
1020   else      m_dval = 0;
1021   if(m_pdest_3a) {m_pval |= m_pdest_3a;return 0;}
10251022   return 1;
10261023}
1027static int dpix_3a_1(taito_f3_state *state, UINT32 s_pix)
1024int taito_f3_state::dpix_3a_1(UINT32 s_pix)
10281025{
1029   if(s_pix) f3_alpha_blend_3a_1(state, s_pix);
1030   if(state->m_pdest_3a) {state->m_pval |= state->m_pdest_3a;return 0;}
1026   if(s_pix) f3_alpha_blend_3a_1(s_pix);
1027   if(m_pdest_3a) {m_pval |= m_pdest_3a;return 0;}
10311028   return 1;
10321029}
1033static int dpix_3a_2(taito_f3_state *state, UINT32 s_pix)
1030int taito_f3_state::dpix_3a_2(UINT32 s_pix)
10341031{
1035   if(s_pix) f3_alpha_blend_3a_2(state, s_pix);
1036   if(state->m_pdest_3a) {state->m_pval |= state->m_pdest_3a;return 0;}
1032   if(s_pix) f3_alpha_blend_3a_2(s_pix);
1033   if(m_pdest_3a) {m_pval |= m_pdest_3a;return 0;}
10371034   return 1;
10381035}
10391036
1040static int dpix_2b_0(taito_f3_state *state, UINT32 s_pix)
1037int taito_f3_state::dpix_2b_0(UINT32 s_pix)
10411038{
1042   if(s_pix) f3_alpha_blend_2b_0(state, s_pix);
1043   else      state->m_dval = 0;
1044   if(state->m_pdest_2b) {state->m_pval |= state->m_pdest_2b;return 0;}
1039   if(s_pix) f3_alpha_blend_2b_0(s_pix);
1040   else      m_dval = 0;
1041   if(m_pdest_2b) {m_pval |= m_pdest_2b;return 0;}
10451042   return 1;
10461043}
1047static int dpix_2b_4(taito_f3_state *state, UINT32 s_pix)
1044int taito_f3_state::dpix_2b_4(UINT32 s_pix)
10481045{
1049   if(s_pix) f3_alpha_blend_2b_4(state, s_pix);
1050   if(state->m_pdest_2b) {state->m_pval |= state->m_pdest_2b;return 0;}
1046   if(s_pix) f3_alpha_blend_2b_4(s_pix);
1047   if(m_pdest_2b) {m_pval |= m_pdest_2b;return 0;}
10511048   return 1;
10521049}
1053static int dpix_2b_8(taito_f3_state *state, UINT32 s_pix)
1050int taito_f3_state::dpix_2b_8(UINT32 s_pix)
10541051{
1055   if(s_pix) f3_alpha_blend_2b_8(state, s_pix);
1056   if(state->m_pdest_2b) {state->m_pval |= state->m_pdest_2b;return 0;}
1052   if(s_pix) f3_alpha_blend_2b_8(s_pix);
1053   if(m_pdest_2b) {m_pval |= m_pdest_2b;return 0;}
10571054   return 1;
10581055}
10591056
1060static int dpix_3b_0(taito_f3_state *state, UINT32 s_pix)
1057int taito_f3_state::dpix_3b_0(UINT32 s_pix)
10611058{
1062   if(s_pix) f3_alpha_blend_3b_0(state, s_pix);
1063   else      state->m_dval = 0;
1064   if(state->m_pdest_3b) {state->m_pval |= state->m_pdest_3b;return 0;}
1059   if(s_pix) f3_alpha_blend_3b_0(s_pix);
1060   else      m_dval = 0;
1061   if(m_pdest_3b) {m_pval |= m_pdest_3b;return 0;}
10651062   return 1;
10661063}
1067static int dpix_3b_1(taito_f3_state *state, UINT32 s_pix)
1064int taito_f3_state::dpix_3b_1(UINT32 s_pix)
10681065{
1069   if(s_pix) f3_alpha_blend_3b_1(state, s_pix);
1070   if(state->m_pdest_3b) {state->m_pval |= state->m_pdest_3b;return 0;}
1066   if(s_pix) f3_alpha_blend_3b_1(s_pix);
1067   if(m_pdest_3b) {m_pval |= m_pdest_3b;return 0;}
10711068   return 1;
10721069}
1073static int dpix_3b_2(taito_f3_state *state, UINT32 s_pix)
1070int taito_f3_state::dpix_3b_2(UINT32 s_pix)
10741071{
1075   if(s_pix) f3_alpha_blend_3b_2(state, s_pix);
1076   if(state->m_pdest_3b) {state->m_pval |= state->m_pdest_3b;return 0;}
1072   if(s_pix) f3_alpha_blend_3b_2(s_pix);
1073   if(m_pdest_3b) {m_pval |= m_pdest_3b;return 0;}
10771074   return 1;
10781075}
10791076
1080static int dpix_2_0(taito_f3_state *state, UINT32 s_pix)
1077int taito_f3_state::dpix_2_0(UINT32 s_pix)
10811078{
1082   UINT8 tr2=state->m_tval&1;
1079   UINT8 tr2=m_tval&1;
10831080   if(s_pix)
10841081   {
1085      if(tr2==state->m_tr_2b)     {f3_alpha_blend_2b_0(state, s_pix);if(state->m_pdest_2b) state->m_pval |= state->m_pdest_2b;else return 1;}
1086      else if(tr2==state->m_tr_2a)    {f3_alpha_blend_2a_0(state, s_pix);if(state->m_pdest_2a) state->m_pval |= state->m_pdest_2a;else return 1;}
1082      if(tr2==m_tr_2b)     {f3_alpha_blend_2b_0(s_pix);if(m_pdest_2b) m_pval |= m_pdest_2b;else return 1;}
1083      else if(tr2==m_tr_2a)    {f3_alpha_blend_2a_0(s_pix);if(m_pdest_2a) m_pval |= m_pdest_2a;else return 1;}
10871084   }
10881085   else
10891086   {
1090      if(tr2==state->m_tr_2b)     {state->m_dval = 0;if(state->m_pdest_2b) state->m_pval |= state->m_pdest_2b;else return 1;}
1091      else if(tr2==state->m_tr_2a)    {state->m_dval = 0;if(state->m_pdest_2a) state->m_pval |= state->m_pdest_2a;else return 1;}
1087      if(tr2==m_tr_2b)     {m_dval = 0;if(m_pdest_2b) m_pval |= m_pdest_2b;else return 1;}
1088      else if(tr2==m_tr_2a)    {m_dval = 0;if(m_pdest_2a) m_pval |= m_pdest_2a;else return 1;}
10921089   }
10931090   return 0;
10941091}
1095static int dpix_2_4(taito_f3_state *state, UINT32 s_pix)
1092int taito_f3_state::dpix_2_4(UINT32 s_pix)
10961093{
1097   UINT8 tr2=state->m_tval&1;
1094   UINT8 tr2=m_tval&1;
10981095   if(s_pix)
10991096   {
1100      if(tr2==state->m_tr_2b)     {f3_alpha_blend_2b_4(state, s_pix);if(state->m_pdest_2b) state->m_pval |= state->m_pdest_2b;else return 1;}
1101      else if(tr2==state->m_tr_2a)    {f3_alpha_blend_2a_4(state, s_pix);if(state->m_pdest_2a) state->m_pval |= state->m_pdest_2a;else return 1;}
1097      if(tr2==m_tr_2b)     {f3_alpha_blend_2b_4(s_pix);if(m_pdest_2b) m_pval |= m_pdest_2b;else return 1;}
1098      else if(tr2==m_tr_2a)    {f3_alpha_blend_2a_4(s_pix);if(m_pdest_2a) m_pval |= m_pdest_2a;else return 1;}
11021099   }
11031100   else
11041101   {
1105      if(tr2==state->m_tr_2b)     {if(state->m_pdest_2b) state->m_pval |= state->m_pdest_2b;else return 1;}
1106      else if(tr2==state->m_tr_2a)    {if(state->m_pdest_2a) state->m_pval |= state->m_pdest_2a;else return 1;}
1102      if(tr2==m_tr_2b)     {if(m_pdest_2b) m_pval |= m_pdest_2b;else return 1;}
1103      else if(tr2==m_tr_2a)    {if(m_pdest_2a) m_pval |= m_pdest_2a;else return 1;}
11071104   }
11081105   return 0;
11091106}
1110static int dpix_2_8(taito_f3_state *state, UINT32 s_pix)
1107int taito_f3_state::dpix_2_8(UINT32 s_pix)
11111108{
1112   UINT8 tr2=state->m_tval&1;
1109   UINT8 tr2=m_tval&1;
11131110   if(s_pix)
11141111   {
1115      if(tr2==state->m_tr_2b)     {f3_alpha_blend_2b_8(state, s_pix);if(state->m_pdest_2b) state->m_pval |= state->m_pdest_2b;else return 1;}
1116      else if(tr2==state->m_tr_2a)    {f3_alpha_blend_2a_8(state, s_pix);if(state->m_pdest_2a) state->m_pval |= state->m_pdest_2a;else return 1;}
1112      if(tr2==m_tr_2b)     {f3_alpha_blend_2b_8(s_pix);if(m_pdest_2b) m_pval |= m_pdest_2b;else return 1;}
1113      else if(tr2==m_tr_2a)    {f3_alpha_blend_2a_8(s_pix);if(m_pdest_2a) m_pval |= m_pdest_2a;else return 1;}
11171114   }
11181115   else
11191116   {
1120      if(tr2==state->m_tr_2b)     {if(state->m_pdest_2b) state->m_pval |= state->m_pdest_2b;else return 1;}
1121      else if(tr2==state->m_tr_2a)    {if(state->m_pdest_2a) state->m_pval |= state->m_pdest_2a;else return 1;}
1117      if(tr2==m_tr_2b)     {if(m_pdest_2b) m_pval |= m_pdest_2b;else return 1;}
1118      else if(tr2==m_tr_2a)    {if(m_pdest_2a) m_pval |= m_pdest_2a;else return 1;}
11221119   }
11231120   return 0;
11241121}
11251122
1126static int dpix_3_0(taito_f3_state *state, UINT32 s_pix)
1123int taito_f3_state::dpix_3_0(UINT32 s_pix)
11271124{
1128   UINT8 tr2=state->m_tval&1;
1125   UINT8 tr2=m_tval&1;
11291126   if(s_pix)
11301127   {
1131      if(tr2==state->m_tr_3b)     {f3_alpha_blend_3b_0(state, s_pix);if(state->m_pdest_3b) state->m_pval |= state->m_pdest_3b;else return 1;}
1132      else if(tr2==state->m_tr_3a)    {f3_alpha_blend_3a_0(state, s_pix);if(state->m_pdest_3a) state->m_pval |= state->m_pdest_3a;else return 1;}
1128      if(tr2==m_tr_3b)     {f3_alpha_blend_3b_0(s_pix);if(m_pdest_3b) m_pval |= m_pdest_3b;else return 1;}
1129      else if(tr2==m_tr_3a)    {f3_alpha_blend_3a_0(s_pix);if(m_pdest_3a) m_pval |= m_pdest_3a;else return 1;}
11331130   }
11341131   else
11351132   {
1136      if(tr2==state->m_tr_3b)     {state->m_dval = 0;if(state->m_pdest_3b) state->m_pval |= state->m_pdest_3b;else return 1;}
1137      else if(tr2==state->m_tr_3a)    {state->m_dval = 0;if(state->m_pdest_3a) state->m_pval |= state->m_pdest_3a;else return 1;}
1133      if(tr2==m_tr_3b)     {m_dval = 0;if(m_pdest_3b) m_pval |= m_pdest_3b;else return 1;}
1134      else if(tr2==m_tr_3a)    {m_dval = 0;if(m_pdest_3a) m_pval |= m_pdest_3a;else return 1;}
11381135   }
11391136   return 0;
11401137}
1141static int dpix_3_1(taito_f3_state *state, UINT32 s_pix)
1138int taito_f3_state::dpix_3_1(UINT32 s_pix)
11421139{
1143   UINT8 tr2=state->m_tval&1;
1140   UINT8 tr2=m_tval&1;
11441141   if(s_pix)
11451142   {
1146      if(tr2==state->m_tr_3b)     {f3_alpha_blend_3b_1(state, s_pix);if(state->m_pdest_3b) state->m_pval |= state->m_pdest_3b;else return 1;}
1147      else if(tr2==state->m_tr_3a)    {f3_alpha_blend_3a_1(state, s_pix);if(state->m_pdest_3a) state->m_pval |= state->m_pdest_3a;else return 1;}
1143      if(tr2==m_tr_3b)     {f3_alpha_blend_3b_1(s_pix);if(m_pdest_3b) m_pval |= m_pdest_3b;else return 1;}
1144      else if(tr2==m_tr_3a)    {f3_alpha_blend_3a_1(s_pix);if(m_pdest_3a) m_pval |= m_pdest_3a;else return 1;}
11481145   }
11491146   else
11501147   {
1151      if(tr2==state->m_tr_3b)     {if(state->m_pdest_3b) state->m_pval |= state->m_pdest_3b;else return 1;}
1152      else if(tr2==state->m_tr_3a)    {if(state->m_pdest_3a) state->m_pval |= state->m_pdest_3a;else return 1;}
1148      if(tr2==m_tr_3b)     {if(m_pdest_3b) m_pval |= m_pdest_3b;else return 1;}
1149      else if(tr2==m_tr_3a)    {if(m_pdest_3a) m_pval |= m_pdest_3a;else return 1;}
11531150   }
11541151   return 0;
11551152}
1156static int dpix_3_2(taito_f3_state *state, UINT32 s_pix)
1153int taito_f3_state::dpix_3_2(UINT32 s_pix)
11571154{
1158   UINT8 tr2=state->m_tval&1;
1155   UINT8 tr2=m_tval&1;
11591156   if(s_pix)
11601157   {
1161      if(tr2==state->m_tr_3b)     {f3_alpha_blend_3b_2(state, s_pix);if(state->m_pdest_3b) state->m_pval |= state->m_pdest_3b;else return 1;}
1162      else if(tr2==state->m_tr_3a)    {f3_alpha_blend_3a_2(state, s_pix);if(state->m_pdest_3a) state->m_pval |= state->m_pdest_3a;else return 1;}
1158      if(tr2==m_tr_3b)     {f3_alpha_blend_3b_2(s_pix);if(m_pdest_3b) m_pval |= m_pdest_3b;else return 1;}
1159      else if(tr2==m_tr_3a)    {f3_alpha_blend_3a_2(s_pix);if(m_pdest_3a) m_pval |= m_pdest_3a;else return 1;}
11631160   }
11641161   else
11651162   {
1166      if(tr2==state->m_tr_3b)     {if(state->m_pdest_3b) state->m_pval |= state->m_pdest_3b;else return 1;}
1167      else if(tr2==state->m_tr_3a)    {if(state->m_pdest_3a) state->m_pval |= state->m_pdest_3a;else return 1;}
1163      if(tr2==m_tr_3b)     {if(m_pdest_3b) m_pval |= m_pdest_3b;else return 1;}
1164      else if(tr2==m_tr_3a)    {if(m_pdest_3a) m_pval |= m_pdest_3a;else return 1;}
11681165   }
11691166   return 0;
11701167}
11711168
1172INLINE void dpix_1_sprite(taito_f3_state *state, UINT32 s_pix)
1169inline void taito_f3_state::dpix_1_sprite(UINT32 s_pix)
11731170{
11741171   if(s_pix)
11751172   {
1176      UINT8 p1 = state->m_pval&0xf0;
1177      if     (p1==0x10)   f3_alpha_blend_1_1(state, s_pix);
1178      else if(p1==0x20)   f3_alpha_blend_1_2(state, s_pix);
1179      else if(p1==0x40)   f3_alpha_blend_1_4(state, s_pix);
1180      else if(p1==0x50)   f3_alpha_blend_1_5(state, s_pix);
1181      else if(p1==0x60)   f3_alpha_blend_1_6(state, s_pix);
1182      else if(p1==0x80)   f3_alpha_blend_1_8(state, s_pix);
1183      else if(p1==0x90)   f3_alpha_blend_1_9(state, s_pix);
1184      else if(p1==0xa0)   f3_alpha_blend_1_a(state, s_pix);
1173      UINT8 p1 = m_pval&0xf0;
1174      if     (p1==0x10)   f3_alpha_blend_1_1(s_pix);
1175      else if(p1==0x20)   f3_alpha_blend_1_2(s_pix);
1176      else if(p1==0x40)   f3_alpha_blend_1_4(s_pix);
1177      else if(p1==0x50)   f3_alpha_blend_1_5(s_pix);
1178      else if(p1==0x60)   f3_alpha_blend_1_6(s_pix);
1179      else if(p1==0x80)   f3_alpha_blend_1_8(s_pix);
1180      else if(p1==0x90)   f3_alpha_blend_1_9(s_pix);
1181      else if(p1==0xa0)   f3_alpha_blend_1_a(s_pix);
11851182   }
11861183}
11871184
1188INLINE void dpix_bg(taito_f3_state *state, UINT32 bgcolor)
1185inline void taito_f3_state::dpix_bg(UINT32 bgcolor)
11891186{
1190   UINT8 p1 = state->m_pval&0xf0;
1191   if(!p1)         state->m_dval = bgcolor;
1192   else if(p1==0x10)   f3_alpha_blend_1_1(state, bgcolor);
1193   else if(p1==0x20)   f3_alpha_blend_1_2(state, bgcolor);
1194   else if(p1==0x40)   f3_alpha_blend_1_4(state, bgcolor);
1195   else if(p1==0x50)   f3_alpha_blend_1_5(state, bgcolor);
1196   else if(p1==0x60)   f3_alpha_blend_1_6(state, bgcolor);
1197   else if(p1==0x80)   f3_alpha_blend_1_8(state, bgcolor);
1198   else if(p1==0x90)   f3_alpha_blend_1_9(state, bgcolor);
1199   else if(p1==0xa0)   f3_alpha_blend_1_a(state, bgcolor);
1187   UINT8 p1 = m_pval&0xf0;
1188   if(!p1)         m_dval = bgcolor;
1189   else if(p1==0x10)   f3_alpha_blend_1_1(bgcolor);
1190   else if(p1==0x20)   f3_alpha_blend_1_2(bgcolor);
1191   else if(p1==0x40)   f3_alpha_blend_1_4(bgcolor);
1192   else if(p1==0x50)   f3_alpha_blend_1_5(bgcolor);
1193   else if(p1==0x60)   f3_alpha_blend_1_6(bgcolor);
1194   else if(p1==0x80)   f3_alpha_blend_1_8(bgcolor);
1195   else if(p1==0x90)   f3_alpha_blend_1_9(bgcolor);
1196   else if(p1==0xa0)   f3_alpha_blend_1_a(bgcolor);
12001197}
12011198
12021199/******************************************************************************/
12031200
1204static void init_alpha_blend_func(running_machine &machine)
1201void taito_f3_state::init_alpha_blend_func()
12051202{
1206   taito_f3_state *state = machine.driver_data<taito_f3_state>();
1207   int i,j;
1203   m_dpix_n[0][0x0]=&taito_f3_state::dpix_1_noalpha;
1204   m_dpix_n[0][0x1]=&taito_f3_state::dpix_1_noalpha;
1205   m_dpix_n[0][0x2]=&taito_f3_state::dpix_1_noalpha;
1206   m_dpix_n[0][0x3]=&taito_f3_state::dpix_1_noalpha;
1207   m_dpix_n[0][0x4]=&taito_f3_state::dpix_1_noalpha;
1208   m_dpix_n[0][0x5]=&taito_f3_state::dpix_1_noalpha;
1209   m_dpix_n[0][0x6]=&taito_f3_state::dpix_1_noalpha;
1210   m_dpix_n[0][0x7]=&taito_f3_state::dpix_1_noalpha;
1211   m_dpix_n[0][0x8]=&taito_f3_state::dpix_1_noalpha;
1212   m_dpix_n[0][0x9]=&taito_f3_state::dpix_1_noalpha;
1213   m_dpix_n[0][0xa]=&taito_f3_state::dpix_1_noalpha;
1214   m_dpix_n[0][0xb]=&taito_f3_state::dpix_1_noalpha;
1215   m_dpix_n[0][0xc]=&taito_f3_state::dpix_1_noalpha;
1216   m_dpix_n[0][0xd]=&taito_f3_state::dpix_1_noalpha;
1217   m_dpix_n[0][0xe]=&taito_f3_state::dpix_1_noalpha;
1218   m_dpix_n[0][0xf]=&taito_f3_state::dpix_1_noalpha;
12081219
1209   state->m_dpix_n[0][0x0]=dpix_1_noalpha;
1210   state->m_dpix_n[0][0x1]=dpix_1_noalpha;
1211   state->m_dpix_n[0][0x2]=dpix_1_noalpha;
1212   state->m_dpix_n[0][0x3]=dpix_1_noalpha;
1213   state->m_dpix_n[0][0x4]=dpix_1_noalpha;
1214   state->m_dpix_n[0][0x5]=dpix_1_noalpha;
1215   state->m_dpix_n[0][0x6]=dpix_1_noalpha;
1216   state->m_dpix_n[0][0x7]=dpix_1_noalpha;
1217   state->m_dpix_n[0][0x8]=dpix_1_noalpha;
1218   state->m_dpix_n[0][0x9]=dpix_1_noalpha;
1219   state->m_dpix_n[0][0xa]=dpix_1_noalpha;
1220   state->m_dpix_n[0][0xb]=dpix_1_noalpha;
1221   state->m_dpix_n[0][0xc]=dpix_1_noalpha;
1222   state->m_dpix_n[0][0xd]=dpix_1_noalpha;
1223   state->m_dpix_n[0][0xe]=dpix_1_noalpha;
1224   state->m_dpix_n[0][0xf]=dpix_1_noalpha;
1220   m_dpix_n[1][0x0]=&taito_f3_state::dpix_1_noalpha;
1221   m_dpix_n[1][0x1]=&taito_f3_state::dpix_1_1;
1222   m_dpix_n[1][0x2]=&taito_f3_state::dpix_1_2;
1223   m_dpix_n[1][0x3]=&taito_f3_state::dpix_ret1;
1224   m_dpix_n[1][0x4]=&taito_f3_state::dpix_1_4;
1225   m_dpix_n[1][0x5]=&taito_f3_state::dpix_1_5;
1226   m_dpix_n[1][0x6]=&taito_f3_state::dpix_1_6;
1227   m_dpix_n[1][0x7]=&taito_f3_state::dpix_ret1;
1228   m_dpix_n[1][0x8]=&taito_f3_state::dpix_1_8;
1229   m_dpix_n[1][0x9]=&taito_f3_state::dpix_1_9;
1230   m_dpix_n[1][0xa]=&taito_f3_state::dpix_1_a;
1231   m_dpix_n[1][0xb]=&taito_f3_state::dpix_ret1;
1232   m_dpix_n[1][0xc]=&taito_f3_state::dpix_ret1;
1233   m_dpix_n[1][0xd]=&taito_f3_state::dpix_ret1;
1234   m_dpix_n[1][0xe]=&taito_f3_state::dpix_ret1;
1235   m_dpix_n[1][0xf]=&taito_f3_state::dpix_ret1;
12251236
1226   state->m_dpix_n[1][0x0]=dpix_1_noalpha;
1227   state->m_dpix_n[1][0x1]=dpix_1_1;
1228   state->m_dpix_n[1][0x2]=dpix_1_2;
1229   state->m_dpix_n[1][0x3]=dpix_ret1;
1230   state->m_dpix_n[1][0x4]=dpix_1_4;
1231   state->m_dpix_n[1][0x5]=dpix_1_5;
1232   state->m_dpix_n[1][0x6]=dpix_1_6;
1233   state->m_dpix_n[1][0x7]=dpix_ret1;
1234   state->m_dpix_n[1][0x8]=dpix_1_8;
1235   state->m_dpix_n[1][0x9]=dpix_1_9;
1236   state->m_dpix_n[1][0xa]=dpix_1_a;
1237   state->m_dpix_n[1][0xb]=dpix_ret1;
1238   state->m_dpix_n[1][0xc]=dpix_ret1;
1239   state->m_dpix_n[1][0xd]=dpix_ret1;
1240   state->m_dpix_n[1][0xe]=dpix_ret1;
1241   state->m_dpix_n[1][0xf]=dpix_ret1;
1237   m_dpix_n[2][0x0]=&taito_f3_state::dpix_2a_0;
1238   m_dpix_n[2][0x1]=&taito_f3_state::dpix_ret0;
1239   m_dpix_n[2][0x2]=&taito_f3_state::dpix_ret0;
1240   m_dpix_n[2][0x3]=&taito_f3_state::dpix_ret0;
1241   m_dpix_n[2][0x4]=&taito_f3_state::dpix_2a_4;
1242   m_dpix_n[2][0x5]=&taito_f3_state::dpix_ret0;
1243   m_dpix_n[2][0x6]=&taito_f3_state::dpix_ret0;
1244   m_dpix_n[2][0x7]=&taito_f3_state::dpix_ret0;
1245   m_dpix_n[2][0x8]=&taito_f3_state::dpix_2a_8;
1246   m_dpix_n[2][0x9]=&taito_f3_state::dpix_ret0;
1247   m_dpix_n[2][0xa]=&taito_f3_state::dpix_ret0;
1248   m_dpix_n[2][0xb]=&taito_f3_state::dpix_ret0;
1249   m_dpix_n[2][0xc]=&taito_f3_state::dpix_ret0;
1250   m_dpix_n[2][0xd]=&taito_f3_state::dpix_ret0;
1251   m_dpix_n[2][0xe]=&taito_f3_state::dpix_ret0;
1252   m_dpix_n[2][0xf]=&taito_f3_state::dpix_ret0;
12421253
1243   state->m_dpix_n[2][0x0]=dpix_2a_0;
1244   state->m_dpix_n[2][0x1]=dpix_ret0;
1245   state->m_dpix_n[2][0x2]=dpix_ret0;
1246   state->m_dpix_n[2][0x3]=dpix_ret0;
1247   state->m_dpix_n[2][0x4]=dpix_2a_4;
1248   state->m_dpix_n[2][0x5]=dpix_ret0;
1249   state->m_dpix_n[2][0x6]=dpix_ret0;
1250   state->m_dpix_n[2][0x7]=dpix_ret0;
1251   state->m_dpix_n[2][0x8]=dpix_2a_8;
1252   state->m_dpix_n[2][0x9]=dpix_ret0;
1253   state->m_dpix_n[2][0xa]=dpix_ret0;
1254   state->m_dpix_n[2][0xb]=dpix_ret0;
1255   state->m_dpix_n[2][0xc]=dpix_ret0;
1256   state->m_dpix_n[2][0xd]=dpix_ret0;
1257   state->m_dpix_n[2][0xe]=dpix_ret0;
1258   state->m_dpix_n[2][0xf]=dpix_ret0;
1254   m_dpix_n[3][0x0]=&taito_f3_state::dpix_3a_0;
1255   m_dpix_n[3][0x1]=&taito_f3_state::dpix_3a_1;
1256   m_dpix_n[3][0x2]=&taito_f3_state::dpix_3a_2;
1257   m_dpix_n[3][0x3]=&taito_f3_state::dpix_ret0;
1258   m_dpix_n[3][0x4]=&taito_f3_state::dpix_ret0;
1259   m_dpix_n[3][0x5]=&taito_f3_state::dpix_ret0;
1260   m_dpix_n[3][0x6]=&taito_f3_state::dpix_ret0;
1261   m_dpix_n[3][0x7]=&taito_f3_state::dpix_ret0;
1262   m_dpix_n[3][0x8]=&taito_f3_state::dpix_ret0;
1263   m_dpix_n[3][0x9]=&taito_f3_state::dpix_ret0;
1264   m_dpix_n[3][0xa]=&taito_f3_state::dpix_ret0;
1265   m_dpix_n[3][0xb]=&taito_f3_state::dpix_ret0;
1266   m_dpix_n[3][0xc]=&taito_f3_state::dpix_ret0;
1267   m_dpix_n[3][0xd]=&taito_f3_state::dpix_ret0;
1268   m_dpix_n[3][0xe]=&taito_f3_state::dpix_ret0;
1269   m_dpix_n[3][0xf]=&taito_f3_state::dpix_ret0;
12591270
1260   state->m_dpix_n[3][0x0]=dpix_3a_0;
1261   state->m_dpix_n[3][0x1]=dpix_3a_1;
1262   state->m_dpix_n[3][0x2]=dpix_3a_2;
1263   state->m_dpix_n[3][0x3]=dpix_ret0;
1264   state->m_dpix_n[3][0x4]=dpix_ret0;
1265   state->m_dpix_n[3][0x5]=dpix_ret0;
1266   state->m_dpix_n[3][0x6]=dpix_ret0;
1267   state->m_dpix_n[3][0x7]=dpix_ret0;
1268   state->m_dpix_n[3][0x8]=dpix_ret0;
1269   state->m_dpix_n[3][0x9]=dpix_ret0;
1270   state->m_dpix_n[3][0xa]=dpix_ret0;
1271   state->m_dpix_n[3][0xb]=dpix_ret0;
1272   state->m_dpix_n[3][0xc]=dpix_ret0;
1273   state->m_dpix_n[3][0xd]=dpix_ret0;
1274   state->m_dpix_n[3][0xe]=dpix_ret0;
1275   state->m_dpix_n[3][0xf]=dpix_ret0;
1271   m_dpix_n[4][0x0]=&taito_f3_state::dpix_2b_0;
1272   m_dpix_n[4][0x1]=&taito_f3_state::dpix_ret0;
1273   m_dpix_n[4][0x2]=&taito_f3_state::dpix_ret0;
1274   m_dpix_n[4][0x3]=&taito_f3_state::dpix_ret0;
1275   m_dpix_n[4][0x4]=&taito_f3_state::dpix_2b_4;
1276   m_dpix_n[4][0x5]=&taito_f3_state::dpix_ret0;
1277   m_dpix_n[4][0x6]=&taito_f3_state::dpix_ret0;
1278   m_dpix_n[4][0x7]=&taito_f3_state::dpix_ret0;
1279   m_dpix_n[4][0x8]=&taito_f3_state::dpix_2b_8;
1280   m_dpix_n[4][0x9]=&taito_f3_state::dpix_ret0;
1281   m_dpix_n[4][0xa]=&taito_f3_state::dpix_ret0;
1282   m_dpix_n[4][0xb]=&taito_f3_state::dpix_ret0;
1283   m_dpix_n[4][0xc]=&taito_f3_state::dpix_ret0;
1284   m_dpix_n[4][0xd]=&taito_f3_state::dpix_ret0;
1285   m_dpix_n[4][0xe]=&taito_f3_state::dpix_ret0;
1286   m_dpix_n[4][0xf]=&taito_f3_state::dpix_ret0;
12761287
1277   state->m_dpix_n[4][0x0]=dpix_2b_0;
1278   state->m_dpix_n[4][0x1]=dpix_ret0;
1279   state->m_dpix_n[4][0x2]=dpix_ret0;
1280   state->m_dpix_n[4][0x3]=dpix_ret0;
1281   state->m_dpix_n[4][0x4]=dpix_2b_4;
1282   state->m_dpix_n[4][0x5]=dpix_ret0;
1283   state->m_dpix_n[4][0x6]=dpix_ret0;
1284   state->m_dpix_n[4][0x7]=dpix_ret0;
1285   state->m_dpix_n[4][0x8]=dpix_2b_8;
1286   state->m_dpix_n[4][0x9]=dpix_ret0;
1287   state->m_dpix_n[4][0xa]=dpix_ret0;
1288   state->m_dpix_n[4][0xb]=dpix_ret0;
1289   state->m_dpix_n[4][0xc]=dpix_ret0;
1290   state->m_dpix_n[4][0xd]=dpix_ret0;
1291   state->m_dpix_n[4][0xe]=dpix_ret0;
1292   state->m_dpix_n[4][0xf]=dpix_ret0;
1288   m_dpix_n[5][0x0]=&taito_f3_state::dpix_3b_0;
1289   m_dpix_n[5][0x1]=&taito_f3_state::dpix_3b_1;
1290   m_dpix_n[5][0x2]=&taito_f3_state::dpix_3b_2;
1291   m_dpix_n[5][0x3]=&taito_f3_state::dpix_ret0;
1292   m_dpix_n[5][0x4]=&taito_f3_state::dpix_ret0;
1293   m_dpix_n[5][0x5]=&taito_f3_state::dpix_ret0;
1294   m_dpix_n[5][0x6]=&taito_f3_state::dpix_ret0;
1295   m_dpix_n[5][0x7]=&taito_f3_state::dpix_ret0;
1296   m_dpix_n[5][0x8]=&taito_f3_state::dpix_ret0;
1297   m_dpix_n[5][0x9]=&taito_f3_state::dpix_ret0;
1298   m_dpix_n[5][0xa]=&taito_f3_state::dpix_ret0;
1299   m_dpix_n[5][0xb]=&taito_f3_state::dpix_ret0;
1300   m_dpix_n[5][0xc]=&taito_f3_state::dpix_ret0;
1301   m_dpix_n[5][0xd]=&taito_f3_state::dpix_ret0;
1302   m_dpix_n[5][0xe]=&taito_f3_state::dpix_ret0;
1303   m_dpix_n[5][0xf]=&taito_f3_state::dpix_ret0;
12931304
1294   state->m_dpix_n[5][0x0]=dpix_3b_0;
1295   state->m_dpix_n[5][0x1]=dpix_3b_1;
1296   state->m_dpix_n[5][0x2]=dpix_3b_2;
1297   state->m_dpix_n[5][0x3]=dpix_ret0;
1298   state->m_dpix_n[5][0x4]=dpix_ret0;
1299   state->m_dpix_n[5][0x5]=dpix_ret0;
1300   state->m_dpix_n[5][0x6]=dpix_ret0;
1301   state->m_dpix_n[5][0x7]=dpix_ret0;
1302   state->m_dpix_n[5][0x8]=dpix_ret0;
1303   state->m_dpix_n[5][0x9]=dpix_ret0;
1304   state->m_dpix_n[5][0xa]=dpix_ret0;
1305   state->m_dpix_n[5][0xb]=dpix_ret0;
1306   state->m_dpix_n[5][0xc]=dpix_ret0;
1307   state->m_dpix_n[5][0xd]=dpix_ret0;
1308   state->m_dpix_n[5][0xe]=dpix_ret0;
1309   state->m_dpix_n[5][0xf]=dpix_ret0;
1305   m_dpix_n[6][0x0]=&taito_f3_state::dpix_2_0;
1306   m_dpix_n[6][0x1]=&taito_f3_state::dpix_ret0;
1307   m_dpix_n[6][0x2]=&taito_f3_state::dpix_ret0;
1308   m_dpix_n[6][0x3]=&taito_f3_state::dpix_ret0;
1309   m_dpix_n[6][0x4]=&taito_f3_state::dpix_2_4;
1310   m_dpix_n[6][0x5]=&taito_f3_state::dpix_ret0;
1311   m_dpix_n[6][0x6]=&taito_f3_state::dpix_ret0;
1312   m_dpix_n[6][0x7]=&taito_f3_state::dpix_ret0;
1313   m_dpix_n[6][0x8]=&taito_f3_state::dpix_2_8;
1314   m_dpix_n[6][0x9]=&taito_f3_state::dpix_ret0;
1315   m_dpix_n[6][0xa]=&taito_f3_state::dpix_ret0;
1316   m_dpix_n[6][0xb]=&taito_f3_state::dpix_ret0;
1317   m_dpix_n[6][0xc]=&taito_f3_state::dpix_ret0;
1318   m_dpix_n[6][0xd]=&taito_f3_state::dpix_ret0;
1319   m_dpix_n[6][0xe]=&taito_f3_state::dpix_ret0;
1320   m_dpix_n[6][0xf]=&taito_f3_state::dpix_ret0;
13101321
1311   state->m_dpix_n[6][0x0]=dpix_2_0;
1312   state->m_dpix_n[6][0x1]=dpix_ret0;
1313   state->m_dpix_n[6][0x2]=dpix_ret0;
1314   state->m_dpix_n[6][0x3]=dpix_ret0;
1315   state->m_dpix_n[6][0x4]=dpix_2_4;
1316   state->m_dpix_n[6][0x5]=dpix_ret0;
1317   state->m_dpix_n[6][0x6]=dpix_ret0;
1318   state->m_dpix_n[6][0x7]=dpix_ret0;
1319   state->m_dpix_n[6][0x8]=dpix_2_8;
1320   state->m_dpix_n[6][0x9]=dpix_ret0;
1321   state->m_dpix_n[6][0xa]=dpix_ret0;
1322   state->m_dpix_n[6][0xb]=dpix_ret0;
1323   state->m_dpix_n[6][0xc]=dpix_ret0;
1324   state->m_dpix_n[6][0xd]=dpix_ret0;
1325   state->m_dpix_n[6][0xe]=dpix_ret0;
1326   state->m_dpix_n[6][0xf]=dpix_ret0;
1322   m_dpix_n[7][0x0]=&taito_f3_state::dpix_3_0;
1323   m_dpix_n[7][0x1]=&taito_f3_state::dpix_3_1;
1324   m_dpix_n[7][0x2]=&taito_f3_state::dpix_3_2;
1325   m_dpix_n[7][0x3]=&taito_f3_state::dpix_ret0;
1326   m_dpix_n[7][0x4]=&taito_f3_state::dpix_ret0;
1327   m_dpix_n[7][0x5]=&taito_f3_state::dpix_ret0;
1328   m_dpix_n[7][0x6]=&taito_f3_state::dpix_ret0;
1329   m_dpix_n[7][0x7]=&taito_f3_state::dpix_ret0;
1330   m_dpix_n[7][0x8]=&taito_f3_state::dpix_ret0;
1331   m_dpix_n[7][0x9]=&taito_f3_state::dpix_ret0;
1332   m_dpix_n[7][0xa]=&taito_f3_state::dpix_ret0;
1333   m_dpix_n[7][0xb]=&taito_f3_state::dpix_ret0;
1334   m_dpix_n[7][0xc]=&taito_f3_state::dpix_ret0;
1335   m_dpix_n[7][0xd]=&taito_f3_state::dpix_ret0;
1336   m_dpix_n[7][0xe]=&taito_f3_state::dpix_ret0;
1337   m_dpix_n[7][0xf]=&taito_f3_state::dpix_ret0;
13271338
1328   state->m_dpix_n[7][0x0]=dpix_3_0;
1329   state->m_dpix_n[7][0x1]=dpix_3_1;
1330   state->m_dpix_n[7][0x2]=dpix_3_2;
1331   state->m_dpix_n[7][0x3]=dpix_ret0;
1332   state->m_dpix_n[7][0x4]=dpix_ret0;
1333   state->m_dpix_n[7][0x5]=dpix_ret0;
1334   state->m_dpix_n[7][0x6]=dpix_ret0;
1335   state->m_dpix_n[7][0x7]=dpix_ret0;
1336   state->m_dpix_n[7][0x8]=dpix_ret0;
1337   state->m_dpix_n[7][0x9]=dpix_ret0;
1338   state->m_dpix_n[7][0xa]=dpix_ret0;
1339   state->m_dpix_n[7][0xb]=dpix_ret0;
1340   state->m_dpix_n[7][0xc]=dpix_ret0;
1341   state->m_dpix_n[7][0xd]=dpix_ret0;
1342   state->m_dpix_n[7][0xe]=dpix_ret0;
1343   state->m_dpix_n[7][0xf]=dpix_ret0;
1344
1345   for(i=0;i<256;i++)
1346      for(j=0;j<256;j++)
1347         state->m_add_sat[i][j] = (i + j < 256) ? i + j : 255;
1339   for(int i = 0; i < 256; i++)
1340      for(int j = 0; j < 256; j++)
1341         m_add_sat[i][j] = (i + j < 256) ? i + j : 255;
13481342}
13491343
13501344/******************************************************************************/
r32522r32523
13521346#define GET_PIXMAP_POINTER(pf_num) \
13531347{ \
13541348   const struct f3_playfield_line_inf *line_tmp=line_t[pf_num]; \
1355   state->m_src##pf_num=line_tmp->src[y]; \
1356   state->m_src_s##pf_num=line_tmp->src_s[y]; \
1357   state->m_src_e##pf_num=line_tmp->src_e[y]; \
1358   state->m_tsrc##pf_num=line_tmp->tsrc[y]; \
1359   state->m_tsrc_s##pf_num=line_tmp->tsrc_s[y]; \
1360   state->m_x_count##pf_num=line_tmp->x_count[y]; \
1361   state->m_x_zoom##pf_num=line_tmp->x_zoom[y]; \
1362   state->m_clip_al##pf_num=line_tmp->clip0[y]&0xffff; \
1363   state->m_clip_ar##pf_num=line_tmp->clip0[y]>>16; \
1364   state->m_clip_bl##pf_num=line_tmp->clip1[y]&0xffff; \
1365   state->m_clip_br##pf_num=line_tmp->clip1[y]>>16; \
1349   m_src##pf_num=line_tmp->src[y]; \
1350   m_src_s##pf_num=line_tmp->src_s[y]; \
1351   m_src_e##pf_num=line_tmp->src_e[y]; \
1352   m_tsrc##pf_num=line_tmp->tsrc[y]; \
1353   m_tsrc_s##pf_num=line_tmp->tsrc_s[y]; \
1354   m_x_count##pf_num=line_tmp->x_count[y]; \
1355   m_x_zoom##pf_num=line_tmp->x_zoom[y]; \
1356   m_clip_al##pf_num=line_tmp->clip0[y]&0xffff; \
1357   m_clip_ar##pf_num=line_tmp->clip0[y]>>16; \
1358   m_clip_bl##pf_num=line_tmp->clip1[y]&0xffff; \
1359   m_clip_br##pf_num=line_tmp->clip1[y]>>16; \
13661360}
13671361
13681362#define CULC_PIXMAP_POINTER(pf_num) \
13691363{ \
1370   state->m_x_count##pf_num += state->m_x_zoom##pf_num; \
1371   if(state->m_x_count##pf_num>>16) \
1364   m_x_count##pf_num += m_x_zoom##pf_num; \
1365   if(m_x_count##pf_num>>16) \
13721366   { \
1373      state->m_x_count##pf_num &= 0xffff; \
1374      state->m_src##pf_num++; \
1375      state->m_tsrc##pf_num++; \
1376      if(state->m_src##pf_num==state->m_src_e##pf_num) {state->m_src##pf_num=state->m_src_s##pf_num; state->m_tsrc##pf_num=state->m_tsrc_s##pf_num;} \
1367      m_x_count##pf_num &= 0xffff; \
1368      m_src##pf_num++; \
1369      m_tsrc##pf_num++; \
1370      if(m_src##pf_num==m_src_e##pf_num) {m_src##pf_num=m_src_s##pf_num; m_tsrc##pf_num=m_tsrc_s##pf_num;} \
13771371   } \
13781372}
13791373
13801374#define UPDATE_PIXMAP_SP(pf_num) \
13811375   if(cx>=clip_als && cx<clip_ars && !(cx>=clip_bls && cx<clip_brs)) \
13821376   { \
1383      sprite_pri=sprite[pf_num]&state->m_pval; \
1377      sprite_pri=sprite[pf_num]&m_pval; \
13841378      if(sprite_pri) \
13851379      { \
13861380         if(sprite[pf_num]&0x100) break; \
1387         if(!state->m_dpix_sp[sprite_pri]) \
1381         if(!m_dpix_sp[sprite_pri]) \
13881382         { \
1389            if(!(state->m_pval&0xf0)) break; \
1390            else {dpix_1_sprite(state, *dsti);*dsti=state->m_dval;break;} \
1383            if(!(m_pval&0xf0)) break; \
1384            else {dpix_1_sprite(*dsti);*dsti=m_dval;break;} \
13911385         } \
1392         if(state->m_dpix_sp[sprite_pri][state->m_pval>>4](state, *dsti)) {*dsti=state->m_dval;break;} \
1386         if((this->*m_dpix_sp[sprite_pri][m_pval>>4])(*dsti)) {*dsti=m_dval;break;} \
13931387      } \
13941388   }
13951389
13961390#define UPDATE_PIXMAP_LP(pf_num) \
1397   if (cx>=state->m_clip_al##pf_num && cx<state->m_clip_ar##pf_num && !(cx>=state->m_clip_bl##pf_num && cx<state->m_clip_br##pf_num)) \
1391   if (cx>=m_clip_al##pf_num && cx<m_clip_ar##pf_num && !(cx>=m_clip_bl##pf_num && cx<m_clip_br##pf_num)) \
13981392   { \
1399      state->m_tval=*state->m_tsrc##pf_num; \
1400      if(state->m_tval&0xf0) \
1401         if(state->m_dpix_lp[pf_num][state->m_pval>>4](state, clut[*state->m_src##pf_num])) {*dsti=state->m_dval;break;} \
1393      m_tval=*m_tsrc##pf_num; \
1394      if(m_tval&0xf0) \
1395         if((this->*m_dpix_lp[pf_num][m_pval>>4])(clut[*m_src##pf_num])) {*dsti=m_dval;break;} \
14021396   }
14031397
14041398
14051399/*============================================================================*/
14061400
1407INLINE void draw_scanlines(running_machine &machine,
1408      bitmap_rgb32 &bitmap,int xsize,INT16 *draw_line_num,
1409      const struct f3_playfield_line_inf **line_t,
1410      const int *sprite,
1411      UINT32 orient,
1412      int skip_layer_num)
1401inline void taito_f3_state::draw_scanlines(   
1402                     bitmap_rgb32 &bitmap,int xsize,INT16 *draw_line_num,
1403                     const struct f3_playfield_line_inf **line_t,
1404                     const int *sprite,
1405                     UINT32 orient,
1406                     int skip_layer_num)
14131407{
1414   taito_f3_state *state = machine.driver_data<taito_f3_state>();
1415   const pen_t *clut = &state->m_palette->pen(0);
1408   const pen_t *clut = &m_palette->pen(0);
14161409   UINT32 bgcolor=clut[0];
14171410   int length;
14181411
r32522r32523
14281421   UINT8 *dstp0,*dstp;
14291422
14301423   int yadv = bitmap.rowpixels();
1431   int yadvp = state->m_pri_alp_bitmap.rowpixels();
1424   int yadvp = m_pri_alp_bitmap.rowpixels();
14321425   int i=0,y=draw_line_num[0];
14331426   int ty = y;
14341427
r32522r32523
14391432      yadvp = -yadvp;
14401433   }
14411434
1442   dstp0 = &state->m_pri_alp_bitmap.pix8(ty, x);
1435   dstp0 = &m_pri_alp_bitmap.pix8(ty, x);
14431436
1444   state->m_pdest_2a = state->m_f3_alpha_level_2ad ? 0x10 : 0;
1445   state->m_pdest_2b = state->m_f3_alpha_level_2bd ? 0x20 : 0;
1446   state->m_tr_2a =(state->m_f3_alpha_level_2as==0 && state->m_f3_alpha_level_2ad==255) ? -1 : 0;
1447   state->m_tr_2b =(state->m_f3_alpha_level_2bs==0 && state->m_f3_alpha_level_2bd==255) ? -1 : 1;
1448   state->m_pdest_3a = state->m_f3_alpha_level_3ad ? 0x40 : 0;
1449   state->m_pdest_3b = state->m_f3_alpha_level_3bd ? 0x80 : 0;
1450   state->m_tr_3a =(state->m_f3_alpha_level_3as==0 && state->m_f3_alpha_level_3ad==255) ? -1 : 0;
1451   state->m_tr_3b =(state->m_f3_alpha_level_3bs==0 && state->m_f3_alpha_level_3bd==255) ? -1 : 1;
1437   m_pdest_2a = m_f3_alpha_level_2ad ? 0x10 : 0;
1438   m_pdest_2b = m_f3_alpha_level_2bd ? 0x20 : 0;
1439   m_tr_2a =(m_f3_alpha_level_2as==0 && m_f3_alpha_level_2ad==255) ? -1 : 0;
1440   m_tr_2b =(m_f3_alpha_level_2bs==0 && m_f3_alpha_level_2bd==255) ? -1 : 1;
1441   m_pdest_3a = m_f3_alpha_level_3ad ? 0x40 : 0;
1442   m_pdest_3b = m_f3_alpha_level_3bd ? 0x80 : 0;
1443   m_tr_3a =(m_f3_alpha_level_3as==0 && m_f3_alpha_level_3ad==255) ? -1 : 0;
1444   m_tr_3b =(m_f3_alpha_level_3bs==0 && m_f3_alpha_level_3bd==255) ? -1 : 1;
14521445
14531446   {
14541447      UINT32 *dsti0,*dsti;
r32522r32523
14571450      {
14581451         int cx=0;
14591452
1460         clip_als=state->m_sa_line_inf[0].sprite_clip0[y]&0xffff;
1461         clip_ars=state->m_sa_line_inf[0].sprite_clip0[y]>>16;
1462         clip_bls=state->m_sa_line_inf[0].sprite_clip1[y]&0xffff;
1463         clip_brs=state->m_sa_line_inf[0].sprite_clip1[y]>>16;
1453         clip_als=m_sa_line_inf[0].sprite_clip0[y]&0xffff;
1454         clip_ars=m_sa_line_inf[0].sprite_clip0[y]>>16;
1455         clip_bls=m_sa_line_inf[0].sprite_clip1[y]&0xffff;
1456         clip_brs=m_sa_line_inf[0].sprite_clip1[y]>>16;
14641457
14651458         length=xsize;
14661459         dsti = dsti0;
r32522r32523
14771470
14781471         while (1)
14791472         {
1480            state->m_pval=*dstp;
1481            if (state->m_pval!=0xff)
1473            m_pval=*dstp;
1474            if (m_pval!=0xff)
14821475            {
14831476               UINT8 sprite_pri;
14841477               switch(skip_layer_num)
r32522r32523
14891482                  case 3: UPDATE_PIXMAP_SP(3) UPDATE_PIXMAP_LP(3)
14901483                  case 4: UPDATE_PIXMAP_SP(4) UPDATE_PIXMAP_LP(4)
14911484                  case 5: UPDATE_PIXMAP_SP(5)
1492                        if(!bgcolor) {if(!(state->m_pval&0xf0)) {*dsti=0;break;}}
1493                        else dpix_bg(state, bgcolor);
1494                        *dsti=state->m_dval;
1485                        if(!bgcolor) {if(!(m_pval&0xf0)) {*dsti=0;break;}}
1486                        else dpix_bg(bgcolor);
1487                        *dsti=m_dval;
14951488               }
14961489            }
14971490
r32522r32523
15331526
15341527/******************************************************************************/
15351528
1536static void visible_tile_check(running_machine &machine,
1537                        struct f3_playfield_line_inf *line_t,
1538                        int line,
1539                        UINT32 x_index_fx,UINT32 y_index,
1540                        UINT16 *f3_pf_data_n)
1529void taito_f3_state::visible_tile_check(
1530                  struct f3_playfield_line_inf *line_t,
1531                  int line,
1532                  UINT32 x_index_fx,UINT32 y_index,
1533                  UINT16 *f3_pf_data_n)
15411534{
1542   taito_f3_state *state = machine.driver_data<taito_f3_state>();
15431535   UINT16 *pf_base;
15441536   int i,trans_all,tile_index,tile_num;
15451537   int alpha_type,alpha_mode;
r32522r32523
15491541   alpha_mode=line_t->alpha_mode[line];
15501542   if(!alpha_mode) return;
15511543
1552   total_elements=state->m_gfxdecode->gfx(1)->elements();
1544   total_elements=m_gfxdecode->gfx(1)->elements();
15531545
15541546   tile_index=x_index_fx>>16;
15551547   tile_num=(((line_t->x_zoom[line]*320+(x_index_fx & 0xffff)+0xffff)>>16)+(tile_index%16)+15)/16;
15561548   tile_index/=16;
15571549
1558   if (state->m_flipscreen)
1550   if (m_flipscreen)
15591551   {
1560      pf_base=f3_pf_data_n+((31-(y_index/16))<<state->m_twidth_mask_bit);
1561      tile_index=(state->m_twidth_mask-tile_index)-tile_num+1;
1552      pf_base=f3_pf_data_n+((31-(y_index/16))<<m_twidth_mask_bit);
1553      tile_index=(m_twidth_mask-tile_index)-tile_num+1;
15621554   }
1563   else pf_base=f3_pf_data_n+((y_index/16)<<state->m_twidth_mask_bit);
1555   else pf_base=f3_pf_data_n+((y_index/16)<<m_twidth_mask_bit);
15641556
15651557
15661558   trans_all=1;
r32522r32523
15681560   alpha_type=0;
15691561   for(i=0;i<tile_num;i++)
15701562   {
1571      UINT32 tile=(pf_base[(tile_index*2+0)&state->m_twidth_mask]<<16)|(pf_base[(tile_index*2+1)&state->m_twidth_mask]);
1563      UINT32 tile=(pf_base[(tile_index*2+0)&m_twidth_mask]<<16)|(pf_base[(tile_index*2+1)&m_twidth_mask]);
15721564      UINT8  extra_planes = (tile>>(16+10)) & 3;
15731565      if(tile&0xffff)
15741566      {
15751567         trans_all=0;
15761568         if(opaque_all)
15771569         {
1578            if(state->m_tile_opaque_pf[extra_planes][(tile&0xffff)%total_elements]!=1) opaque_all=0;
1570            if(m_tile_opaque_pf[extra_planes][(tile&0xffff)%total_elements]!=1) opaque_all=0;
15791571         }
15801572
15811573         if(alpha_mode==1)
r32522r32523
16101602
16111603/******************************************************************************/
16121604
1613static void calculate_clip(taito_f3_state *state, int y, UINT16 pri, UINT32* clip0, UINT32* clip1, int* line_enable)
1605void taito_f3_state::calculate_clip(int y, UINT16 pri, UINT32* clip0, UINT32* clip1, int* line_enable)
16141606{
1615   const struct f3_spritealpha_line_inf *sa_line_t=&state->m_sa_line_inf[0];
1607   const struct f3_spritealpha_line_inf *sa_line_t=&m_sa_line_inf[0];
16161608
16171609   switch (pri)
16181610   {
r32522r32523
17141706   }
17151707}
17161708
1717static void get_spritealphaclip_info(taito_f3_state *state)
1709void taito_f3_state::get_spritealphaclip_info()
17181710{
1719   struct f3_spritealpha_line_inf *line_t=&state->m_sa_line_inf[0];
1711   struct f3_spritealpha_line_inf *line_t=&m_sa_line_inf[0];
17201712
17211713   int y,y_end,y_inc;
17221714
r32522r32523
17281720   int alpha_level=0;
17291721   UINT16 sprite_alpha=0;
17301722
1731   if (state->m_flipscreen)
1723   if (m_flipscreen)
17321724   {
17331725      spri_base=0x77fe;
17341726      clip_base_low=0x51fe;
r32522r32523
17541746   {
17551747      /* The zoom, column and row values can latch according to control ram */
17561748      {
1757         if (state->m_f3_line_ram[0x100+(y)]&1)
1758            clip0_low=(state->m_f3_line_ram[clip_base_low/2]>> 0)&0xffff;
1759         if (state->m_f3_line_ram[0x000+(y)]&4)
1760            clip0_high=(state->m_f3_line_ram[clip_base_high/2]>> 0)&0xffff;
1761         if (state->m_f3_line_ram[0x100+(y)]&2)
1762            clip1_low=(state->m_f3_line_ram[(clip_base_low+0x200)/2]>> 0)&0xffff;
1749         if (m_f3_line_ram[0x100+(y)]&1)
1750            clip0_low=(m_f3_line_ram[clip_base_low/2]>> 0)&0xffff;
1751         if (m_f3_line_ram[0x000+(y)]&4)
1752            clip0_high=(m_f3_line_ram[clip_base_high/2]>> 0)&0xffff;
1753         if (m_f3_line_ram[0x100+(y)]&2)
1754            clip1_low=(m_f3_line_ram[(clip_base_low+0x200)/2]>> 0)&0xffff;
17631755
1764         if (state->m_f3_line_ram[(0x0600/2)+(y)]&0x8)
1765            spri=state->m_f3_line_ram[spri_base/2]&0xffff;
1766         if (state->m_f3_line_ram[(0x0600/2)+(y)]&0x4)
1767            sprite_clip=state->m_f3_line_ram[(spri_base-0x200)/2]&0xffff;
1768         if (state->m_f3_line_ram[(0x0400/2)+(y)]&0x1)
1769            sprite_alpha=state->m_f3_line_ram[(spri_base-0x1600)/2]&0xffff;
1770         if (state->m_f3_line_ram[(0x0400/2)+(y)]&0x2)
1771            alpha_level=state->m_f3_line_ram[(spri_base-0x1400)/2]&0xffff;
1756         if (m_f3_line_ram[(0x0600/2)+(y)]&0x8)
1757            spri=m_f3_line_ram[spri_base/2]&0xffff;
1758         if (m_f3_line_ram[(0x0600/2)+(y)]&0x4)
1759            sprite_clip=m_f3_line_ram[(spri_base-0x200)/2]&0xffff;
1760         if (m_f3_line_ram[(0x0400/2)+(y)]&0x1)
1761            sprite_alpha=m_f3_line_ram[(spri_base-0x1600)/2]&0xffff;
1762         if (m_f3_line_ram[(0x0400/2)+(y)]&0x2)
1763            alpha_level=m_f3_line_ram[(spri_base-0x1400)/2]&0xffff;
17721764      }
17731765
17741766
r32522r32523
17931785      else if (sprite_clip&0x33)
17941786      {
17951787         int line_enable=1;
1796         calculate_clip(state, y, ((sprite_clip&0x33)<<4), &line_t->sprite_clip0[y], &line_t->sprite_clip1[y], &line_enable);
1788         calculate_clip(y, ((sprite_clip&0x33)<<4), &line_t->sprite_clip0[y], &line_t->sprite_clip1[y], &line_enable);
17971789         if (line_enable==0)
17981790            line_t->sprite_clip0[y]=0x7fff7fff;
17991791      }
r32522r32523
18111803}
18121804
18131805/* sx and sy are 16.16 fixed point numbers */
1814static void get_line_ram_info(running_machine &machine, tilemap_t *tmap, int sx, int sy, int pos, UINT16 *f3_pf_data_n)
1806void taito_f3_state::get_line_ram_info(tilemap_t *tmap, int sx, int sy, int pos, UINT16 *f3_pf_data_n)
18151807{
1816   taito_f3_state *state = machine.driver_data<taito_f3_state>();
1817   struct f3_playfield_line_inf *line_t=&state->m_pf_line_inf[pos];
1808   struct f3_playfield_line_inf *line_t=&m_pf_line_inf[pos];
18181809
18191810   int y,y_start,y_end,y_inc;
18201811   int line_base,zoom_base,col_base,pri_base,inc;
r32522r32523
18311822
18321823   sx+=((46<<16));
18331824
1834   if (state->m_flipscreen)
1825   if (m_flipscreen)
18351826   {
18361827      line_base=0xa1fe + (pos*0x200);
18371828      zoom_base=0x81fe;// + (pos*0x200);
r32522r32523
18421833      y_end=-1;
18431834      y_inc=-1;
18441835
1845      if (state->m_f3_game_config->extend)    sx=-sx+((188-512)<<16); else sx=-sx+(188<<16); /* Adjust for flipped scroll position */
1836      if (m_f3_game_config->extend)    sx=-sx+((188-512)<<16); else sx=-sx+(188<<16); /* Adjust for flipped scroll position */
18461837      y_index_fx=-sy-(256<<16); /* Adjust for flipped scroll position */
18471838   }
18481839   else
r32522r32523
18651856   {
18661857      /* The zoom, column and row values can latch according to control ram */
18671858      {
1868         if (state->m_f3_line_ram[0x600+(y)]&bit_select)
1869            x_offset=(state->m_f3_line_ram[line_base/2]&0xffff)<<10;
1870         if (state->m_f3_line_ram[0x700+(y)]&bit_select)
1871            pri=state->m_f3_line_ram[pri_base/2]&0xffff;
1859         if (m_f3_line_ram[0x600+(y)]&bit_select)
1860            x_offset=(m_f3_line_ram[line_base/2]&0xffff)<<10;
1861         if (m_f3_line_ram[0x700+(y)]&bit_select)
1862            pri=m_f3_line_ram[pri_base/2]&0xffff;
18721863
18731864         // Zoom for playfields 1 & 3 is interleaved, as is the latch select
18741865         switch (pos)
18751866         {
18761867         case 0:
1877            if (state->m_f3_line_ram[0x400+(y)]&bit_select)
1878               line_zoom=state->m_f3_line_ram[(zoom_base+0x000)/2]&0xffff;
1868            if (m_f3_line_ram[0x400+(y)]&bit_select)
1869               line_zoom=m_f3_line_ram[(zoom_base+0x000)/2]&0xffff;
18791870            break;
18801871         case 1:
1881            if (state->m_f3_line_ram[0x400+(y)]&0x2)
1882               line_zoom=((state->m_f3_line_ram[(zoom_base+0x200)/2]&0xffff)&0xff00) | (line_zoom&0x00ff);
1883            if (state->m_f3_line_ram[0x400+(y)]&0x8)
1884               line_zoom=((state->m_f3_line_ram[(zoom_base+0x600)/2]&0xffff)&0x00ff) | (line_zoom&0xff00);
1872            if (m_f3_line_ram[0x400+(y)]&0x2)
1873               line_zoom=((m_f3_line_ram[(zoom_base+0x200)/2]&0xffff)&0xff00) | (line_zoom&0x00ff);
1874            if (m_f3_line_ram[0x400+(y)]&0x8)
1875               line_zoom=((m_f3_line_ram[(zoom_base+0x600)/2]&0xffff)&0x00ff) | (line_zoom&0xff00);
18851876            break;
18861877         case 2:
1887            if (state->m_f3_line_ram[0x400+(y)]&bit_select)
1888               line_zoom=state->m_f3_line_ram[(zoom_base+0x400)/2]&0xffff;
1878            if (m_f3_line_ram[0x400+(y)]&bit_select)
1879               line_zoom=m_f3_line_ram[(zoom_base+0x400)/2]&0xffff;
18891880            break;
18901881         case 3:
1891            if (state->m_f3_line_ram[0x400+(y)]&0x8)
1892               line_zoom=((state->m_f3_line_ram[(zoom_base+0x600)/2]&0xffff)&0xff00) | (line_zoom&0x00ff);
1893            if (state->m_f3_line_ram[0x400+(y)]&0x2)
1894               line_zoom=((state->m_f3_line_ram[(zoom_base+0x200)/2]&0xffff)&0x00ff) | (line_zoom&0xff00);
1882            if (m_f3_line_ram[0x400+(y)]&0x8)
1883               line_zoom=((m_f3_line_ram[(zoom_base+0x600)/2]&0xffff)&0xff00) | (line_zoom&0x00ff);
1884            if (m_f3_line_ram[0x400+(y)]&0x2)
1885               line_zoom=((m_f3_line_ram[(zoom_base+0x200)/2]&0xffff)&0x00ff) | (line_zoom&0xff00);
18951886            break;
18961887         default:
18971888            break;
18981889         }
18991890
19001891         // Column scroll only affects playfields 2 & 3
1901         if (pos>=2 && state->m_f3_line_ram[0x000+(y)]&bit_select)
1902            colscroll=(state->m_f3_line_ram[col_base/2]>> 0)&0x3ff;
1892         if (pos>=2 && m_f3_line_ram[0x000+(y)]&bit_select)
1893            colscroll=(m_f3_line_ram[col_base/2]>> 0)&0x3ff;
19031894      }
19041895
1905      if (!pri || (!state->m_flipscreen && y<24) || (state->m_flipscreen && y>231) ||
1896      if (!pri || (!m_flipscreen && y<24) || (m_flipscreen && y>231) ||
19061897         (pri&0xc000)==0xc000 || !(pri&0x2000)/**/)
19071898         line_enable=0;
19081899      else if(pri&0x4000) //alpha1
r32522r32523
19221913      else if (pri&0x0330)
19231914      {
19241915         //fast path todo - remove line enable
1925         calculate_clip(state, y, pri&0x0330, &line_t->clip0[y], &line_t->clip1[y], &line_enable);
1916         calculate_clip(y, pri&0x0330, &line_t->clip0[y], &line_t->clip1[y], &line_enable);
19261917      }
19271918      else
19281919      {
r32522r32523
19661957
19671958      if (cs&0x200)
19681959      {
1969         if (state->m_pf5_tilemap && state->m_pf6_tilemap)
1960         if (m_pf5_tilemap && m_pf6_tilemap)
19701961         {
1971            if (tmap == state->m_pf3_tilemap) tmap = state->m_pf5_tilemap; // pitch -> crowd
1972            if (tmap == state->m_pf4_tilemap) tmap = state->m_pf6_tilemap; // corruption on goals -> blank (hthero94)
1962            if (tmap == m_pf3_tilemap) tmap = m_pf5_tilemap; // pitch -> crowd
1963            if (tmap == m_pf4_tilemap) tmap = m_pf6_tilemap; // corruption on goals -> blank (hthero94)
19731964         }
19741965      }
19751966      else
r32522r32523
19861977         UINT16 *src_s;
19871978         UINT8 *tsrc_s;
19881979
1989         x_index_fx = (sx+_x_offset[y]-(10*0x10000)+(10*line_t->x_zoom[y]))&((state->m_width_mask<<16)|0xffff);
1980         x_index_fx = (sx+_x_offset[y]-(10*0x10000)+(10*line_t->x_zoom[y]))&((m_width_mask<<16)|0xffff);
19901981         y_index = ((y_index_fx>>16)+_colscroll[y])&0x1ff;
19911982
19921983         /* check tile status */
1993         visible_tile_check(machine, line_t,y,x_index_fx,y_index,f3_pf_data_n);
1984         visible_tile_check(line_t,y,x_index_fx,y_index,f3_pf_data_n);
19941985
19951986         /* If clipping enabled for this line have to disable 'all opaque' optimisation */
19961987         if (line_t->clip0[y]!=0x7fff0000 || line_t->clip1[y]!=0)
r32522r32523
19991990         /* set pixmap index */
20001991         line_t->x_count[y]=x_index_fx & 0xffff; // Fractional part
20011992         line_t->src_s[y]=src_s=&srcbitmap.pix16(y_index);
2002         line_t->src_e[y]=&src_s[state->m_width_mask+1];
1993         line_t->src_e[y]=&src_s[m_width_mask+1];
20031994         line_t->src[y]=&src_s[x_index_fx>>16];
20041995
20051996         line_t->tsrc_s[y]=tsrc_s=&flagsbitmap.pix8(y_index);
r32522r32523
20112002   }
20122003}
20132004
2014static void get_vram_info(running_machine &machine, tilemap_t *vram_tilemap, tilemap_t *pixel_tilemap, int sx, int sy)
2005void taito_f3_state::get_vram_info(tilemap_t *vram_tilemap, tilemap_t *pixel_tilemap, int sx, int sy)
20152006{
2016   taito_f3_state *state = machine.driver_data<taito_f3_state>();
2017   const struct f3_spritealpha_line_inf *sprite_alpha_line_t=&state->m_sa_line_inf[0];
2018   struct f3_playfield_line_inf *line_t=&state->m_pf_line_inf[4];
2007   const struct f3_spritealpha_line_inf *sprite_alpha_line_t=&m_sa_line_inf[0];
2008   struct f3_playfield_line_inf *line_t=&m_pf_line_inf[4];
20192009
20202010   int y,y_start,y_end,y_inc;
20212011   int pri_base,inc;
r32522r32523
20262016
20272017   const int vram_width_mask=0x3ff;
20282018
2029   if (state->m_flipscreen)
2019   if (m_flipscreen)
20302020   {
20312021      pri_base =0x73fe;
20322022      inc=-2;
r32522r32523
20492039   {
20502040      /* The zoom, column and row values can latch according to control ram */
20512041      {
2052         if (state->m_f3_line_ram[(0x0600/2)+(y)]&0x2)
2053            pri=(state->m_f3_line_ram[pri_base/2]&0xffff);
2042         if (m_f3_line_ram[(0x0600/2)+(y)]&0x2)
2043            pri=(m_f3_line_ram[pri_base/2]&0xffff);
20542044      }
20552045
20562046
2057      if (!pri || (!state->m_flipscreen && y<24) || (state->m_flipscreen && y>231) ||
2047      if (!pri || (!m_flipscreen && y<24) || (m_flipscreen && y>231) ||
20582048         (pri&0xc000)==0xc000 || !(pri&0x2000)/**/)
20592049         line_enable=0;
20602050      else if(pri&0x4000) //alpha1
r32522r32523
20722062      else if (pri&0x0330)
20732063      {
20742064         //fast path todo - remove line enable
2075         calculate_clip(state, y, pri&0x0330, &line_t->clip0[y], &line_t->clip1[y], &line_enable);
2065         calculate_clip(y, pri&0x0330, &line_t->clip0[y], &line_t->clip1[y], &line_enable);
20762066      }
20772067      else
20782068      {
r32522r32523
21332123
21342124/******************************************************************************/
21352125
2136static void scanline_draw(running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect)
2126void taito_f3_state::scanline_draw(bitmap_rgb32 &bitmap, const rectangle &cliprect)
21372127{
2138   taito_f3_state *state = machine.driver_data<taito_f3_state>();
21392128   int i,j,y,ys,ye;
21402129   int y_start,y_end,y_start_next,y_end_next;
21412130   UINT8 draw_line[256];
r32522r32523
21432132
21442133   UINT32 rot=0;
21452134
2146   if (state->m_flipscreen)
2135   if (m_flipscreen)
21472136   {
21482137      rot=ORIENTATION_FLIP_Y;
21492138      ys=0;
r32522r32523
21692158      int spri;
21702159      int alpha;
21712160      int layer_tmp[5];
2172      struct f3_playfield_line_inf *pf_line_inf = state->m_pf_line_inf;
2173      struct f3_spritealpha_line_inf *sa_line_inf = state->m_sa_line_inf;
2161      struct f3_playfield_line_inf *pf_line_inf = m_pf_line_inf;
2162      struct f3_spritealpha_line_inf *sa_line_inf = m_sa_line_inf;
21742163      int count_skip_layer=0;
21752164      int sprite[6]={0,0,0,0,0,0};
21762165      const struct f3_playfield_line_inf *line_t[5];
r32522r32523
22452234         (sprite_alpha&0xff) != 0xff  )
22462235      {
22472236         /* set alpha level */
2248         if(alpha_level!=state->m_alpha_level_last)
2237         if(alpha_level!=m_alpha_level_last)
22492238         {
22502239            int al_s,al_d;
22512240            int a=alpha_level;
r32522r32523
22592248            al_d = ( (15-b)*256) / 8;
22602249            if(al_s>255) al_s = 255;
22612250            if(al_d>255) al_d = 255;
2262            state->m_f3_alpha_level_3as = al_s;
2263            state->m_f3_alpha_level_3ad = al_d;
2264            state->m_f3_alpha_level_2as = al_d;
2265            state->m_f3_alpha_level_2ad = al_s;
2251            m_f3_alpha_level_3as = al_s;
2252            m_f3_alpha_level_3ad = al_d;
2253            m_f3_alpha_level_2as = al_d;
2254            m_f3_alpha_level_2ad = al_s;
22662255
22672256            al_s = ( (15-c)*256) / 8;
22682257            al_d = ( (15-a)*256) / 8;
22692258            if(al_s>255) al_s = 255;
22702259            if(al_d>255) al_d = 255;
2271            state->m_f3_alpha_level_3bs = al_s;
2272            state->m_f3_alpha_level_3bd = al_d;
2273            state->m_f3_alpha_level_2bs = al_d;
2274            state->m_f3_alpha_level_2bd = al_s;
2260            m_f3_alpha_level_3bs = al_s;
2261            m_f3_alpha_level_3bd = al_d;
2262            m_f3_alpha_level_2bs = al_d;
2263            m_f3_alpha_level_2bd = al_s;
22752264
2276            f3_alpha_set_level(state);
2277            state->m_alpha_level_last=alpha_level;
2265            f3_alpha_set_level();
2266            m_alpha_level_last=alpha_level;
22782267         }
22792268
22802269         /* set sprite alpha mode */
22812270         sprite_alpha_check=0;
22822271         sprite_alpha_all_2a=1;
2283         state->m_dpix_sp[1]=0;
2284         state->m_dpix_sp[2]=0;
2285         state->m_dpix_sp[4]=0;
2286         state->m_dpix_sp[8]=0;
2272         m_dpix_sp[1]=0;
2273         m_dpix_sp[2]=0;
2274         m_dpix_sp[4]=0;
2275         m_dpix_sp[8]=0;
22872276         for(i=0;i<4;i++)    /* i = sprite priority offset */
22882277         {
22892278            UINT8 sprite_alpha_mode=(sprite_alpha>>(i*2))&3;
22902279            UINT8 sftbit=1<<i;
2291            if(state->m_sprite_pri_usage&sftbit)
2280            if(m_sprite_pri_usage&sftbit)
22922281            {
22932282               if(sprite_alpha_mode==1)
22942283               {
2295                  if(state->m_f3_alpha_level_2as==0 && state->m_f3_alpha_level_2ad==255)
2296                     state->m_sprite_pri_usage&=~sftbit;  // Disable sprite priority block
2284                  if(m_f3_alpha_level_2as==0 && m_f3_alpha_level_2ad==255)
2285                     m_sprite_pri_usage&=~sftbit;  // Disable sprite priority block
22972286                  else
22982287                  {
2299                     state->m_dpix_sp[sftbit]=state->m_dpix_n[2];
2288                     m_dpix_sp[sftbit]=m_dpix_n[2];
23002289                     sprite_alpha_check|=sftbit;
23012290                  }
23022291               }
r32522r32523
23042293               {
23052294                  if(sprite_alpha&0xff00)
23062295                  {
2307                     if(state->m_f3_alpha_level_3as==0 && state->m_f3_alpha_level_3ad==255) state->m_sprite_pri_usage&=~sftbit;
2296                     if(m_f3_alpha_level_3as==0 && m_f3_alpha_level_3ad==255) m_sprite_pri_usage&=~sftbit;
23082297                     else
23092298                     {
2310                        state->m_dpix_sp[sftbit]=state->m_dpix_n[3];
2299                        m_dpix_sp[sftbit]=m_dpix_n[3];
23112300                        sprite_alpha_check|=sftbit;
23122301                        sprite_alpha_all_2a=0;
23132302                     }
23142303                  }
23152304                  else
23162305                  {
2317                     if(state->m_f3_alpha_level_3bs==0 && state->m_f3_alpha_level_3bd==255) state->m_sprite_pri_usage&=~sftbit;
2306                     if(m_f3_alpha_level_3bs==0 && m_f3_alpha_level_3bd==255) m_sprite_pri_usage&=~sftbit;
23182307                     else
23192308                     {
2320                        state->m_dpix_sp[sftbit]=state->m_dpix_n[5];
2309                        m_dpix_sp[sftbit]=m_dpix_n[5];
23212310                        sprite_alpha_check|=sftbit;
23222311                        sprite_alpha_all_2a=0;
23232312                     }
r32522r32523
23362325            {
23372326               if(alpha_type==1)
23382327               {
2339                  /* if (state->m_f3_alpha_level_2as==0   && state->m_f3_alpha_level_2ad==255)
2328                  /* if (m_f3_alpha_level_2as==0   && m_f3_alpha_level_2ad==255)
23402329                   *     alpha_mode[i]=3; alpha_mode_flag[i] |= 0x80;}
23412330                   * will display continue screen in gseeker (mt 00026) */
2342                  if     (state->m_f3_alpha_level_2as==0   && state->m_f3_alpha_level_2ad==255) alpha_mode[i]=0;
2343                  else if(state->m_f3_alpha_level_2as==255 && state->m_f3_alpha_level_2ad==0  ) alpha_mode[i]=1;
2331                  if     (m_f3_alpha_level_2as==0   && m_f3_alpha_level_2ad==255) alpha_mode[i]=0;
2332                  else if(m_f3_alpha_level_2as==255 && m_f3_alpha_level_2ad==0  ) alpha_mode[i]=1;
23442333               }
23452334               else if(alpha_type==2)
23462335               {
2347                  if     (state->m_f3_alpha_level_2bs==0   && state->m_f3_alpha_level_2bd==255) alpha_mode[i]=0;
2348                  else if(state->m_f3_alpha_level_2as==255 && state->m_f3_alpha_level_2ad==0 &&
2349                        state->m_f3_alpha_level_2bs==255 && state->m_f3_alpha_level_2bd==0  ) alpha_mode[i]=1;
2336                  if     (m_f3_alpha_level_2bs==0   && m_f3_alpha_level_2bd==255) alpha_mode[i]=0;
2337                  else if(m_f3_alpha_level_2as==255 && m_f3_alpha_level_2ad==0 &&
2338                        m_f3_alpha_level_2bs==255 && m_f3_alpha_level_2bd==0  ) alpha_mode[i]=1;
23502339               }
23512340               else if(alpha_type==3)
23522341               {
2353                  if     (state->m_f3_alpha_level_2as==0   && state->m_f3_alpha_level_2ad==255 &&
2354                        state->m_f3_alpha_level_2bs==0   && state->m_f3_alpha_level_2bd==255) alpha_mode[i]=0;
2355                  else if(state->m_f3_alpha_level_2as==255 && state->m_f3_alpha_level_2ad==0   &&
2356                        state->m_f3_alpha_level_2bs==255 && state->m_f3_alpha_level_2bd==0  ) alpha_mode[i]=1;
2342                  if     (m_f3_alpha_level_2as==0   && m_f3_alpha_level_2ad==255 &&
2343                        m_f3_alpha_level_2bs==0   && m_f3_alpha_level_2bd==255) alpha_mode[i]=0;
2344                  else if(m_f3_alpha_level_2as==255 && m_f3_alpha_level_2ad==0   &&
2345                        m_f3_alpha_level_2bs==255 && m_f3_alpha_level_2bd==0  ) alpha_mode[i]=1;
23572346               }
23582347            }
23592348            else if(alpha_mode[i]==3)
23602349            {
23612350               if(alpha_type==1)
23622351               {
2363                  if     (state->m_f3_alpha_level_3as==0   && state->m_f3_alpha_level_3ad==255) alpha_mode[i]=0;
2364                  else if(state->m_f3_alpha_level_3as==255 && state->m_f3_alpha_level_3ad==0  ) alpha_mode[i]=1;
2352                  if     (m_f3_alpha_level_3as==0   && m_f3_alpha_level_3ad==255) alpha_mode[i]=0;
2353                  else if(m_f3_alpha_level_3as==255 && m_f3_alpha_level_3ad==0  ) alpha_mode[i]=1;
23652354               }
23662355               else if(alpha_type==2)
23672356               {
2368                  if     (state->m_f3_alpha_level_3bs==0   && state->m_f3_alpha_level_3bd==255) alpha_mode[i]=0;
2369                  else if(state->m_f3_alpha_level_3as==255 && state->m_f3_alpha_level_3ad==0 &&
2370                        state->m_f3_alpha_level_3bs==255 && state->m_f3_alpha_level_3bd==0  ) alpha_mode[i]=1;
2357                  if     (m_f3_alpha_level_3bs==0   && m_f3_alpha_level_3bd==255) alpha_mode[i]=0;
2358                  else if(m_f3_alpha_level_3as==255 && m_f3_alpha_level_3ad==0 &&
2359                        m_f3_alpha_level_3bs==255 && m_f3_alpha_level_3bd==0  ) alpha_mode[i]=1;
23712360               }
23722361               else if(alpha_type==3)
23732362               {
2374                  if     (state->m_f3_alpha_level_3as==0   && state->m_f3_alpha_level_3ad==255 &&
2375                        state->m_f3_alpha_level_3bs==0   && state->m_f3_alpha_level_3bd==255) alpha_mode[i]=0;
2376                  else if(state->m_f3_alpha_level_3as==255 && state->m_f3_alpha_level_3ad==0   &&
2377                        state->m_f3_alpha_level_3bs==255 && state->m_f3_alpha_level_3bd==0  ) alpha_mode[i]=1;
2363                  if     (m_f3_alpha_level_3as==0   && m_f3_alpha_level_3ad==255 &&
2364                        m_f3_alpha_level_3bs==0   && m_f3_alpha_level_3bd==255) alpha_mode[i]=0;
2365                  else if(m_f3_alpha_level_3as==255 && m_f3_alpha_level_3ad==0   &&
2366                        m_f3_alpha_level_3bs==255 && m_f3_alpha_level_3bd==0  ) alpha_mode[i]=1;
23782367               }
23792368            }
23802369         }
r32522r32523
23872376               sprite_alpha_all_2a                     )
23882377         {
23892378            int alpha_type = (alpha_mode_flag[0] | alpha_mode_flag[1] | alpha_mode_flag[2] | alpha_mode_flag[3])&0x30;
2390            if(     (alpha_type==0x10 && state->m_f3_alpha_level_2as==255) ||
2391                  (alpha_type==0x20 && state->m_f3_alpha_level_2as==255 && state->m_f3_alpha_level_2bs==255) ||
2392                  (alpha_type==0x30 && state->m_f3_alpha_level_2as==255 && state->m_f3_alpha_level_2bs==255)  )
2379            if(     (alpha_type==0x10 && m_f3_alpha_level_2as==255) ||
2380                  (alpha_type==0x20 && m_f3_alpha_level_2as==255 && m_f3_alpha_level_2bs==255) ||
2381                  (alpha_type==0x30 && m_f3_alpha_level_2as==255 && m_f3_alpha_level_2bs==255)  )
23932382            {
23942383               if(alpha_mode[0]>1) alpha_mode[0]=1;
23952384               if(alpha_mode[1]>1) alpha_mode[1]=1;
r32522r32523
23972386               if(alpha_mode[3]>1) alpha_mode[3]=1;
23982387               if(alpha_mode[4]>1) alpha_mode[4]=1;
23992388               sprite_alpha_check=0;
2400               state->m_dpix_sp[1]=0;
2401               state->m_dpix_sp[2]=0;
2402               state->m_dpix_sp[4]=0;
2403               state->m_dpix_sp[8]=0;
2389               m_dpix_sp[1]=0;
2390               m_dpix_sp[2]=0;
2391               m_dpix_sp[4]=0;
2392               m_dpix_sp[8]=0;
24042393            }
24052394         }
24062395      }
24072396      else
24082397      {
24092398         sprite_alpha_check=0;
2410         state->m_dpix_sp[1]=0;
2411         state->m_dpix_sp[2]=0;
2412         state->m_dpix_sp[4]=0;
2413         state->m_dpix_sp[8]=0;
2399         m_dpix_sp[1]=0;
2400         m_dpix_sp[2]=0;
2401         m_dpix_sp[4]=0;
2402         m_dpix_sp[8]=0;
24142403      }
24152404
24162405
r32522r32523
24812470         for(i=0;i<4;i++)    /* i = sprite priority offset */
24822471         {
24832472            int sp,sflg=1<<i;
2484            if(!(state->m_sprite_pri_usage & sflg)) continue;
2473            if(!(m_sprite_pri_usage & sflg)) continue;
24852474            sp=pri_sp[i];
24862475
24872476            /*
r32522r32523
24912480                    DARIUSG (ZONE V' BOSS) ---> playfield
24922481            */
24932482
2494            if (state->m_f3_game == BUBSYMPH ) sp++;        //BUBSYMPH (title)
2495            if (state->m_f3_game == GSEEKER ) sp++;     //GSEEKER (plane leaving hangar)
2483            if (m_f3_game == BUBSYMPH ) sp++;        //BUBSYMPH (title)
2484            if (m_f3_game == GSEEKER ) sp++;     //GSEEKER (plane leaving hangar)
24962485
24972486                  if(       sp>l0) sprite[0]|=sflg;
24982487            else if(sp<=l0 && sp>l1) sprite[1]|=sflg;
r32522r32523
25172506         if(alpha_mode[pos]>1)
25182507         {
25192508            int alpha_type=(((alpha_mode_flag[pos]>>4)&3)-1)*2;
2520            state->m_dpix_lp[i]=state->m_dpix_n[alpha_mode[pos]+alpha_type];
2509            m_dpix_lp[i]=m_dpix_n[alpha_mode[pos]+alpha_type];
25212510            alpha=1;
25222511         }
25232512         else
25242513         {
2525            if(alpha) state->m_dpix_lp[i]=state->m_dpix_n[1];
2526            else      state->m_dpix_lp[i]=state->m_dpix_n[0];
2514            if(alpha) m_dpix_lp[i]=m_dpix_n[1];
2515            else      m_dpix_lp[i]=m_dpix_n[0];
25272516         }
25282517      }
25292518      if(sprite[5]&sprite_alpha_check) alpha=1;
25302519      else if(!alpha) sprite[5]|=0x100;
25312520
2532      draw_scanlines(machine, bitmap,320,draw_line_num,line_t,sprite,rot,count_skip_layer);
2521      draw_scanlines(bitmap,320,draw_line_num,line_t,sprite,rot,count_skip_layer);
25332522      if(y_start<0) break;
25342523   }
25352524}
r32522r32523
31863175   draw_sprites(bitmap,cliprect);
31873176
31883177   /* Parse sprite, alpha & clipping parts of lineram */
3189   get_spritealphaclip_info(this);
3178   get_spritealphaclip_info();
31903179
31913180   /* Parse playfield effects */
3192   get_line_ram_info(machine(), m_pf1_tilemap,sx_fix[0],sy_fix[0],0,m_f3_pf_data_1);
3193   get_line_ram_info(machine(), m_pf2_tilemap,sx_fix[1],sy_fix[1],1,m_f3_pf_data_2);
3194   get_line_ram_info(machine(), m_pf3_tilemap,sx_fix[2],sy_fix[2],2,m_f3_pf_data_3);
3195   get_line_ram_info(machine(), m_pf4_tilemap,sx_fix[3],sy_fix[3],3,m_f3_pf_data_4);
3196   get_vram_info(machine(), m_vram_layer,m_pixel_layer,sx_fix[4],sy_fix[4]);
3181   get_line_ram_info(m_pf1_tilemap,sx_fix[0],sy_fix[0],0,m_f3_pf_data_1);
3182   get_line_ram_info(m_pf2_tilemap,sx_fix[1],sy_fix[1],1,m_f3_pf_data_2);
3183   get_line_ram_info(m_pf3_tilemap,sx_fix[2],sy_fix[2],2,m_f3_pf_data_3);
3184   get_line_ram_info(m_pf4_tilemap,sx_fix[3],sy_fix[3],3,m_f3_pf_data_4);
3185   get_vram_info(m_vram_layer,m_pixel_layer,sx_fix[4],sy_fix[4]);
31973186
31983187   /* Draw final framebuffer */
3199   scanline_draw(machine(), bitmap,cliprect);
3188   scanline_draw(bitmap,cliprect);
32003189
32013190   if (VERBOSE)
3202      print_debug_info(machine(), bitmap);
3191      print_debug_info(bitmap);
32033192   return 0;
32043193}

Previous 199869 Revisions Next


© 1997-2024 The MAME Team