trunk/src/mame/video/taito_f3.c
| r32522 | r32523 | |
| 320 | 320 | 1111 1111 opaque pixel |
| 321 | 321 | */ |
| 322 | 322 | |
| 323 | | static void init_alpha_blend_func(running_machine &machine); |
| 324 | | |
| 325 | 323 | /******************************************************************************/ |
| 326 | 324 | |
| 327 | | static void print_debug_info(running_machine &machine, bitmap_rgb32 &bitmap) |
| 325 | void taito_f3_state::print_debug_info(bitmap_rgb32 &bitmap) |
| 328 | 326 | { |
| 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; |
| 331 | 328 | int l[16]; |
| 332 | 329 | char buf[64*16]; |
| 333 | 330 | char *bufptr = buf; |
| 334 | 331 | |
| 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]); |
| 339 | 336 | |
| 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]); |
| 343 | 340 | |
| 344 | 341 | l[0]=f3_line_ram[0x0040*2]&0xffff; |
| 345 | 342 | l[1]=f3_line_ram[0x00c0*2]&0xffff; |
| r32522 | r32523 | |
| 395 | 392 | l[3]=f3_line_ram[0x15e0*2]&0xffff; |
| 396 | 393 | bufptr += sprintf(bufptr,"5000: %04x %04x %04x %04x\n",l[0],l[1],l[2],l[3]); |
| 397 | 394 | |
| 398 | | machine.ui().draw_text(&machine.render().ui_container(), buf, 60, 40); |
| 395 | machine().ui().draw_text(&machine().render().ui_container(), buf, 60, 40); |
| 399 | 396 | } |
| 400 | 397 | |
| 401 | 398 | /******************************************************************************/ |
| r32522 | r32523 | |
| 659 | 656 | |
| 660 | 657 | m_sprite_lag=m_f3_game_config->sprite_lag; |
| 661 | 658 | |
| 662 | | init_alpha_blend_func(machine()); |
| 659 | init_alpha_blend_func(); |
| 663 | 660 | |
| 664 | 661 | { |
| 665 | 662 | gfx_element *sprite_gfx = m_gfxdecode->gfx(2); |
| r32522 | r32523 | |
| 895 | 892 | d = level+1; \ |
| 896 | 893 | } |
| 897 | 894 | |
| 898 | | INLINE void f3_alpha_set_level(taito_f3_state *state) |
| 895 | inline void taito_f3_state::f3_alpha_set_level() |
| 899 | 896 | { |
| 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) |
| 914 | 911 | |
| 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) |
| 918 | 915 | |
| 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) |
| 922 | 919 | |
| 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) |
| 926 | 923 | |
| 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) |
| 930 | 927 | } |
| 931 | 928 | #undef SET_ALPHA_LEVEL |
| 932 | 929 | |
| r32522 | r32523 | |
| 938 | 935 | |
| 939 | 936 | |
| 940 | 937 | |
| 941 | | INLINE void f3_alpha_blend32_s( taito_f3_state *state, int alphas, UINT32 s ) |
| 938 | inline void taito_f3_state::f3_alpha_blend32_s(int alphas, UINT32 s) |
| 942 | 939 | { |
| 943 | 940 | UINT8 *sc = (UINT8 *)&s; |
| 944 | | UINT8 *dc = (UINT8 *)&state->m_dval; |
| 941 | UINT8 *dc = (UINT8 *)&m_dval; |
| 945 | 942 | dc[COLOR1] = (alphas * sc[COLOR1]) >> 8; |
| 946 | 943 | dc[COLOR2] = (alphas * sc[COLOR2]) >> 8; |
| 947 | 944 | dc[COLOR3] = (alphas * sc[COLOR3]) >> 8; |
| 948 | 945 | } |
| 949 | 946 | |
| 950 | | INLINE void f3_alpha_blend32_d( taito_f3_state *state, int alphas, UINT32 s ) |
| 947 | inline void taito_f3_state::f3_alpha_blend32_d(int alphas, UINT32 s) |
| 951 | 948 | { |
| 952 | 949 | 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]; |
| 957 | 954 | } |
| 958 | 955 | |
| 959 | 956 | /*============================================================================*/ |
| 960 | 957 | |
| 961 | | INLINE void f3_alpha_blend_1_1( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_1_1,s);} |
| 962 | | INLINE void f3_alpha_blend_1_2( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_1_2,s);} |
| 963 | | INLINE void f3_alpha_blend_1_4( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_1_4,s);} |
| 964 | | INLINE void f3_alpha_blend_1_5( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_1_5,s);} |
| 965 | | INLINE void f3_alpha_blend_1_6( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_1_6,s);} |
| 966 | | INLINE void f3_alpha_blend_1_8( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_1_8,s);} |
| 967 | | INLINE void f3_alpha_blend_1_9( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_1_9,s);} |
| 968 | | INLINE void f3_alpha_blend_1_a( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_1_a,s);} |
| 958 | inline void taito_f3_state::f3_alpha_blend_1_1(UINT32 s){f3_alpha_blend32_d(m_alpha_s_1_1,s);} |
| 959 | inline void taito_f3_state::f3_alpha_blend_1_2(UINT32 s){f3_alpha_blend32_d(m_alpha_s_1_2,s);} |
| 960 | inline void taito_f3_state::f3_alpha_blend_1_4(UINT32 s){f3_alpha_blend32_d(m_alpha_s_1_4,s);} |
| 961 | inline void taito_f3_state::f3_alpha_blend_1_5(UINT32 s){f3_alpha_blend32_d(m_alpha_s_1_5,s);} |
| 962 | inline void taito_f3_state::f3_alpha_blend_1_6(UINT32 s){f3_alpha_blend32_d(m_alpha_s_1_6,s);} |
| 963 | inline void taito_f3_state::f3_alpha_blend_1_8(UINT32 s){f3_alpha_blend32_d(m_alpha_s_1_8,s);} |
| 964 | inline void taito_f3_state::f3_alpha_blend_1_9(UINT32 s){f3_alpha_blend32_d(m_alpha_s_1_9,s);} |
| 965 | inline void taito_f3_state::f3_alpha_blend_1_a(UINT32 s){f3_alpha_blend32_d(m_alpha_s_1_a,s);} |
| 969 | 966 | |
| 970 | | INLINE void f3_alpha_blend_2a_0( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_s(state, state->m_alpha_s_2a_0,s);} |
| 971 | | INLINE void f3_alpha_blend_2a_4( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_2a_4,s);} |
| 972 | | INLINE void f3_alpha_blend_2a_8( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_2a_8,s);} |
| 967 | inline void taito_f3_state::f3_alpha_blend_2a_0(UINT32 s){f3_alpha_blend32_s(m_alpha_s_2a_0,s);} |
| 968 | inline void taito_f3_state::f3_alpha_blend_2a_4(UINT32 s){f3_alpha_blend32_d(m_alpha_s_2a_4,s);} |
| 969 | inline void taito_f3_state::f3_alpha_blend_2a_8(UINT32 s){f3_alpha_blend32_d(m_alpha_s_2a_8,s);} |
| 973 | 970 | |
| 974 | | INLINE void f3_alpha_blend_2b_0( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_s(state, state->m_alpha_s_2b_0,s);} |
| 975 | | INLINE void f3_alpha_blend_2b_4( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_2b_4,s);} |
| 976 | | INLINE void f3_alpha_blend_2b_8( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_2b_8,s);} |
| 971 | inline void taito_f3_state::f3_alpha_blend_2b_0(UINT32 s){f3_alpha_blend32_s(m_alpha_s_2b_0,s);} |
| 972 | inline void taito_f3_state::f3_alpha_blend_2b_4(UINT32 s){f3_alpha_blend32_d(m_alpha_s_2b_4,s);} |
| 973 | inline void taito_f3_state::f3_alpha_blend_2b_8(UINT32 s){f3_alpha_blend32_d(m_alpha_s_2b_8,s);} |
| 977 | 974 | |
| 978 | | INLINE void f3_alpha_blend_3a_0( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_s(state, state->m_alpha_s_3a_0,s);} |
| 979 | | INLINE void f3_alpha_blend_3a_1( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_3a_1,s);} |
| 980 | | INLINE void f3_alpha_blend_3a_2( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_3a_2,s);} |
| 975 | inline void taito_f3_state::f3_alpha_blend_3a_0(UINT32 s){f3_alpha_blend32_s(m_alpha_s_3a_0,s);} |
| 976 | inline void taito_f3_state::f3_alpha_blend_3a_1(UINT32 s){f3_alpha_blend32_d(m_alpha_s_3a_1,s);} |
| 977 | inline void taito_f3_state::f3_alpha_blend_3a_2(UINT32 s){f3_alpha_blend32_d(m_alpha_s_3a_2,s);} |
| 981 | 978 | |
| 982 | | INLINE void f3_alpha_blend_3b_0( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_s(state, state->m_alpha_s_3b_0,s);} |
| 983 | | INLINE void f3_alpha_blend_3b_1( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_3b_1,s);} |
| 984 | | INLINE void f3_alpha_blend_3b_2( taito_f3_state *state, UINT32 s ){f3_alpha_blend32_d(state, state->m_alpha_s_3b_2,s);} |
| 979 | inline void taito_f3_state::f3_alpha_blend_3b_0(UINT32 s){f3_alpha_blend32_s(m_alpha_s_3b_0,s);} |
| 980 | inline void taito_f3_state::f3_alpha_blend_3b_1(UINT32 s){f3_alpha_blend32_d(m_alpha_s_3b_1,s);} |
| 981 | inline void taito_f3_state::f3_alpha_blend_3b_2(UINT32 s){f3_alpha_blend32_d(m_alpha_s_3b_2,s);} |
| 985 | 982 | |
| 986 | 983 | /*============================================================================*/ |
| 987 | 984 | |
| 988 | | static int dpix_1_noalpha(taito_f3_state *state, UINT32 s_pix) {state->m_dval = s_pix; return 1;} |
| 989 | | static int dpix_ret1(taito_f3_state *state, UINT32 s_pix) {return 1;} |
| 990 | | static int dpix_ret0(taito_f3_state *state, UINT32 s_pix) {return 0;} |
| 991 | | static int dpix_1_1(taito_f3_state *state, UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_1(state, s_pix); return 1;} |
| 992 | | static int dpix_1_2(taito_f3_state *state, UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_2(state, s_pix); return 1;} |
| 993 | | static int dpix_1_4(taito_f3_state *state, UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_4(state, s_pix); return 1;} |
| 994 | | static int dpix_1_5(taito_f3_state *state, UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_5(state, s_pix); return 1;} |
| 995 | | static int dpix_1_6(taito_f3_state *state, UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_6(state, s_pix); return 1;} |
| 996 | | static int dpix_1_8(taito_f3_state *state, UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_8(state, s_pix); return 1;} |
| 997 | | static int dpix_1_9(taito_f3_state *state, UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_9(state, s_pix); return 1;} |
| 998 | | static int dpix_1_a(taito_f3_state *state, UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_a(state, s_pix); return 1;} |
| 985 | int taito_f3_state::dpix_1_noalpha(UINT32 s_pix) {m_dval = s_pix; return 1;} |
| 986 | int taito_f3_state::dpix_ret1(UINT32 s_pix) {return 1;} |
| 987 | int taito_f3_state::dpix_ret0(UINT32 s_pix) {return 0;} |
| 988 | int taito_f3_state::dpix_1_1(UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_1(s_pix); return 1;} |
| 989 | int taito_f3_state::dpix_1_2(UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_2(s_pix); return 1;} |
| 990 | int taito_f3_state::dpix_1_4(UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_4(s_pix); return 1;} |
| 991 | int taito_f3_state::dpix_1_5(UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_5(s_pix); return 1;} |
| 992 | int taito_f3_state::dpix_1_6(UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_6(s_pix); return 1;} |
| 993 | int taito_f3_state::dpix_1_8(UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_8(s_pix); return 1;} |
| 994 | int taito_f3_state::dpix_1_9(UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_9(s_pix); return 1;} |
| 995 | int taito_f3_state::dpix_1_a(UINT32 s_pix) {if(s_pix) f3_alpha_blend_1_a(s_pix); return 1;} |
| 999 | 996 | |
| 1000 | | static int dpix_2a_0(taito_f3_state *state, UINT32 s_pix) |
| 997 | int taito_f3_state::dpix_2a_0(UINT32 s_pix) |
| 1001 | 998 | { |
| 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;} |
| 1005 | 1002 | return 1; |
| 1006 | 1003 | } |
| 1007 | | static int dpix_2a_4(taito_f3_state *state, UINT32 s_pix) |
| 1004 | int taito_f3_state::dpix_2a_4(UINT32 s_pix) |
| 1008 | 1005 | { |
| 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;} |
| 1011 | 1008 | return 1; |
| 1012 | 1009 | } |
| 1013 | | static int dpix_2a_8(taito_f3_state *state, UINT32 s_pix) |
| 1010 | int taito_f3_state::dpix_2a_8(UINT32 s_pix) |
| 1014 | 1011 | { |
| 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;} |
| 1017 | 1014 | return 1; |
| 1018 | 1015 | } |
| 1019 | 1016 | |
| 1020 | | static int dpix_3a_0(taito_f3_state *state, UINT32 s_pix) |
| 1017 | int taito_f3_state::dpix_3a_0(UINT32 s_pix) |
| 1021 | 1018 | { |
| 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;} |
| 1025 | 1022 | return 1; |
| 1026 | 1023 | } |
| 1027 | | static int dpix_3a_1(taito_f3_state *state, UINT32 s_pix) |
| 1024 | int taito_f3_state::dpix_3a_1(UINT32 s_pix) |
| 1028 | 1025 | { |
| 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;} |
| 1031 | 1028 | return 1; |
| 1032 | 1029 | } |
| 1033 | | static int dpix_3a_2(taito_f3_state *state, UINT32 s_pix) |
| 1030 | int taito_f3_state::dpix_3a_2(UINT32 s_pix) |
| 1034 | 1031 | { |
| 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;} |
| 1037 | 1034 | return 1; |
| 1038 | 1035 | } |
| 1039 | 1036 | |
| 1040 | | static int dpix_2b_0(taito_f3_state *state, UINT32 s_pix) |
| 1037 | int taito_f3_state::dpix_2b_0(UINT32 s_pix) |
| 1041 | 1038 | { |
| 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;} |
| 1045 | 1042 | return 1; |
| 1046 | 1043 | } |
| 1047 | | static int dpix_2b_4(taito_f3_state *state, UINT32 s_pix) |
| 1044 | int taito_f3_state::dpix_2b_4(UINT32 s_pix) |
| 1048 | 1045 | { |
| 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;} |
| 1051 | 1048 | return 1; |
| 1052 | 1049 | } |
| 1053 | | static int dpix_2b_8(taito_f3_state *state, UINT32 s_pix) |
| 1050 | int taito_f3_state::dpix_2b_8(UINT32 s_pix) |
| 1054 | 1051 | { |
| 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;} |
| 1057 | 1054 | return 1; |
| 1058 | 1055 | } |
| 1059 | 1056 | |
| 1060 | | static int dpix_3b_0(taito_f3_state *state, UINT32 s_pix) |
| 1057 | int taito_f3_state::dpix_3b_0(UINT32 s_pix) |
| 1061 | 1058 | { |
| 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;} |
| 1065 | 1062 | return 1; |
| 1066 | 1063 | } |
| 1067 | | static int dpix_3b_1(taito_f3_state *state, UINT32 s_pix) |
| 1064 | int taito_f3_state::dpix_3b_1(UINT32 s_pix) |
| 1068 | 1065 | { |
| 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;} |
| 1071 | 1068 | return 1; |
| 1072 | 1069 | } |
| 1073 | | static int dpix_3b_2(taito_f3_state *state, UINT32 s_pix) |
| 1070 | int taito_f3_state::dpix_3b_2(UINT32 s_pix) |
| 1074 | 1071 | { |
| 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;} |
| 1077 | 1074 | return 1; |
| 1078 | 1075 | } |
| 1079 | 1076 | |
| 1080 | | static int dpix_2_0(taito_f3_state *state, UINT32 s_pix) |
| 1077 | int taito_f3_state::dpix_2_0(UINT32 s_pix) |
| 1081 | 1078 | { |
| 1082 | | UINT8 tr2=state->m_tval&1; |
| 1079 | UINT8 tr2=m_tval&1; |
| 1083 | 1080 | if(s_pix) |
| 1084 | 1081 | { |
| 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;} |
| 1087 | 1084 | } |
| 1088 | 1085 | else |
| 1089 | 1086 | { |
| 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;} |
| 1092 | 1089 | } |
| 1093 | 1090 | return 0; |
| 1094 | 1091 | } |
| 1095 | | static int dpix_2_4(taito_f3_state *state, UINT32 s_pix) |
| 1092 | int taito_f3_state::dpix_2_4(UINT32 s_pix) |
| 1096 | 1093 | { |
| 1097 | | UINT8 tr2=state->m_tval&1; |
| 1094 | UINT8 tr2=m_tval&1; |
| 1098 | 1095 | if(s_pix) |
| 1099 | 1096 | { |
| 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;} |
| 1102 | 1099 | } |
| 1103 | 1100 | else |
| 1104 | 1101 | { |
| 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;} |
| 1107 | 1104 | } |
| 1108 | 1105 | return 0; |
| 1109 | 1106 | } |
| 1110 | | static int dpix_2_8(taito_f3_state *state, UINT32 s_pix) |
| 1107 | int taito_f3_state::dpix_2_8(UINT32 s_pix) |
| 1111 | 1108 | { |
| 1112 | | UINT8 tr2=state->m_tval&1; |
| 1109 | UINT8 tr2=m_tval&1; |
| 1113 | 1110 | if(s_pix) |
| 1114 | 1111 | { |
| 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;} |
| 1117 | 1114 | } |
| 1118 | 1115 | else |
| 1119 | 1116 | { |
| 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;} |
| 1122 | 1119 | } |
| 1123 | 1120 | return 0; |
| 1124 | 1121 | } |
| 1125 | 1122 | |
| 1126 | | static int dpix_3_0(taito_f3_state *state, UINT32 s_pix) |
| 1123 | int taito_f3_state::dpix_3_0(UINT32 s_pix) |
| 1127 | 1124 | { |
| 1128 | | UINT8 tr2=state->m_tval&1; |
| 1125 | UINT8 tr2=m_tval&1; |
| 1129 | 1126 | if(s_pix) |
| 1130 | 1127 | { |
| 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;} |
| 1133 | 1130 | } |
| 1134 | 1131 | else |
| 1135 | 1132 | { |
| 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;} |
| 1138 | 1135 | } |
| 1139 | 1136 | return 0; |
| 1140 | 1137 | } |
| 1141 | | static int dpix_3_1(taito_f3_state *state, UINT32 s_pix) |
| 1138 | int taito_f3_state::dpix_3_1(UINT32 s_pix) |
| 1142 | 1139 | { |
| 1143 | | UINT8 tr2=state->m_tval&1; |
| 1140 | UINT8 tr2=m_tval&1; |
| 1144 | 1141 | if(s_pix) |
| 1145 | 1142 | { |
| 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;} |
| 1148 | 1145 | } |
| 1149 | 1146 | else |
| 1150 | 1147 | { |
| 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;} |
| 1153 | 1150 | } |
| 1154 | 1151 | return 0; |
| 1155 | 1152 | } |
| 1156 | | static int dpix_3_2(taito_f3_state *state, UINT32 s_pix) |
| 1153 | int taito_f3_state::dpix_3_2(UINT32 s_pix) |
| 1157 | 1154 | { |
| 1158 | | UINT8 tr2=state->m_tval&1; |
| 1155 | UINT8 tr2=m_tval&1; |
| 1159 | 1156 | if(s_pix) |
| 1160 | 1157 | { |
| 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;} |
| 1163 | 1160 | } |
| 1164 | 1161 | else |
| 1165 | 1162 | { |
| 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;} |
| 1168 | 1165 | } |
| 1169 | 1166 | return 0; |
| 1170 | 1167 | } |
| 1171 | 1168 | |
| 1172 | | INLINE void dpix_1_sprite(taito_f3_state *state, UINT32 s_pix) |
| 1169 | inline void taito_f3_state::dpix_1_sprite(UINT32 s_pix) |
| 1173 | 1170 | { |
| 1174 | 1171 | if(s_pix) |
| 1175 | 1172 | { |
| 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); |
| 1185 | 1182 | } |
| 1186 | 1183 | } |
| 1187 | 1184 | |
| 1188 | | INLINE void dpix_bg(taito_f3_state *state, UINT32 bgcolor) |
| 1185 | inline void taito_f3_state::dpix_bg(UINT32 bgcolor) |
| 1189 | 1186 | { |
| 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); |
| 1200 | 1197 | } |
| 1201 | 1198 | |
| 1202 | 1199 | /******************************************************************************/ |
| 1203 | 1200 | |
| 1204 | | static void init_alpha_blend_func(running_machine &machine) |
| 1201 | void taito_f3_state::init_alpha_blend_func() |
| 1205 | 1202 | { |
| 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; |
| 1208 | 1219 | |
| 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; |
| 1225 | 1236 | |
| 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; |
| 1242 | 1253 | |
| 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; |
| 1259 | 1270 | |
| 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; |
| 1276 | 1287 | |
| 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; |
| 1293 | 1304 | |
| 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; |
| 1310 | 1321 | |
| 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; |
| 1327 | 1338 | |
| 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; |
| 1348 | 1342 | } |
| 1349 | 1343 | |
| 1350 | 1344 | /******************************************************************************/ |
| r32522 | r32523 | |
| 1352 | 1346 | #define GET_PIXMAP_POINTER(pf_num) \ |
| 1353 | 1347 | { \ |
| 1354 | 1348 | 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; \ |
| 1366 | 1360 | } |
| 1367 | 1361 | |
| 1368 | 1362 | #define CULC_PIXMAP_POINTER(pf_num) \ |
| 1369 | 1363 | { \ |
| 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) \ |
| 1372 | 1366 | { \ |
| 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;} \ |
| 1377 | 1371 | } \ |
| 1378 | 1372 | } |
| 1379 | 1373 | |
| 1380 | 1374 | #define UPDATE_PIXMAP_SP(pf_num) \ |
| 1381 | 1375 | if(cx>=clip_als && cx<clip_ars && !(cx>=clip_bls && cx<clip_brs)) \ |
| 1382 | 1376 | { \ |
| 1383 | | sprite_pri=sprite[pf_num]&state->m_pval; \ |
| 1377 | sprite_pri=sprite[pf_num]&m_pval; \ |
| 1384 | 1378 | if(sprite_pri) \ |
| 1385 | 1379 | { \ |
| 1386 | 1380 | if(sprite[pf_num]&0x100) break; \ |
| 1387 | | if(!state->m_dpix_sp[sprite_pri]) \ |
| 1381 | if(!m_dpix_sp[sprite_pri]) \ |
| 1388 | 1382 | { \ |
| 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;} \ |
| 1391 | 1385 | } \ |
| 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;} \ |
| 1393 | 1387 | } \ |
| 1394 | 1388 | } |
| 1395 | 1389 | |
| 1396 | 1390 | #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)) \ |
| 1398 | 1392 | { \ |
| 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;} \ |
| 1402 | 1396 | } |
| 1403 | 1397 | |
| 1404 | 1398 | |
| 1405 | 1399 | /*============================================================================*/ |
| 1406 | 1400 | |
| 1407 | | INLINE 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) |
| 1401 | inline 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) |
| 1413 | 1407 | { |
| 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); |
| 1416 | 1409 | UINT32 bgcolor=clut[0]; |
| 1417 | 1410 | int length; |
| 1418 | 1411 | |
| r32522 | r32523 | |
| 1428 | 1421 | UINT8 *dstp0,*dstp; |
| 1429 | 1422 | |
| 1430 | 1423 | int yadv = bitmap.rowpixels(); |
| 1431 | | int yadvp = state->m_pri_alp_bitmap.rowpixels(); |
| 1424 | int yadvp = m_pri_alp_bitmap.rowpixels(); |
| 1432 | 1425 | int i=0,y=draw_line_num[0]; |
| 1433 | 1426 | int ty = y; |
| 1434 | 1427 | |
| r32522 | r32523 | |
| 1439 | 1432 | yadvp = -yadvp; |
| 1440 | 1433 | } |
| 1441 | 1434 | |
| 1442 | | dstp0 = &state->m_pri_alp_bitmap.pix8(ty, x); |
| 1435 | dstp0 = &m_pri_alp_bitmap.pix8(ty, x); |
| 1443 | 1436 | |
| 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; |
| 1452 | 1445 | |
| 1453 | 1446 | { |
| 1454 | 1447 | UINT32 *dsti0,*dsti; |
| r32522 | r32523 | |
| 1457 | 1450 | { |
| 1458 | 1451 | int cx=0; |
| 1459 | 1452 | |
| 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; |
| 1464 | 1457 | |
| 1465 | 1458 | length=xsize; |
| 1466 | 1459 | dsti = dsti0; |
| r32522 | r32523 | |
| 1477 | 1470 | |
| 1478 | 1471 | while (1) |
| 1479 | 1472 | { |
| 1480 | | state->m_pval=*dstp; |
| 1481 | | if (state->m_pval!=0xff) |
| 1473 | m_pval=*dstp; |
| 1474 | if (m_pval!=0xff) |
| 1482 | 1475 | { |
| 1483 | 1476 | UINT8 sprite_pri; |
| 1484 | 1477 | switch(skip_layer_num) |
| r32522 | r32523 | |
| 1489 | 1482 | case 3: UPDATE_PIXMAP_SP(3) UPDATE_PIXMAP_LP(3) |
| 1490 | 1483 | case 4: UPDATE_PIXMAP_SP(4) UPDATE_PIXMAP_LP(4) |
| 1491 | 1484 | 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; |
| 1495 | 1488 | } |
| 1496 | 1489 | } |
| 1497 | 1490 | |
| r32522 | r32523 | |
| 1533 | 1526 | |
| 1534 | 1527 | /******************************************************************************/ |
| 1535 | 1528 | |
| 1536 | | static 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) |
| 1529 | void 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) |
| 1541 | 1534 | { |
| 1542 | | taito_f3_state *state = machine.driver_data<taito_f3_state>(); |
| 1543 | 1535 | UINT16 *pf_base; |
| 1544 | 1536 | int i,trans_all,tile_index,tile_num; |
| 1545 | 1537 | int alpha_type,alpha_mode; |
| r32522 | r32523 | |
| 1549 | 1541 | alpha_mode=line_t->alpha_mode[line]; |
| 1550 | 1542 | if(!alpha_mode) return; |
| 1551 | 1543 | |
| 1552 | | total_elements=state->m_gfxdecode->gfx(1)->elements(); |
| 1544 | total_elements=m_gfxdecode->gfx(1)->elements(); |
| 1553 | 1545 | |
| 1554 | 1546 | tile_index=x_index_fx>>16; |
| 1555 | 1547 | tile_num=(((line_t->x_zoom[line]*320+(x_index_fx & 0xffff)+0xffff)>>16)+(tile_index%16)+15)/16; |
| 1556 | 1548 | tile_index/=16; |
| 1557 | 1549 | |
| 1558 | | if (state->m_flipscreen) |
| 1550 | if (m_flipscreen) |
| 1559 | 1551 | { |
| 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; |
| 1562 | 1554 | } |
| 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); |
| 1564 | 1556 | |
| 1565 | 1557 | |
| 1566 | 1558 | trans_all=1; |
| r32522 | r32523 | |
| 1568 | 1560 | alpha_type=0; |
| 1569 | 1561 | for(i=0;i<tile_num;i++) |
| 1570 | 1562 | { |
| 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]); |
| 1572 | 1564 | UINT8 extra_planes = (tile>>(16+10)) & 3; |
| 1573 | 1565 | if(tile&0xffff) |
| 1574 | 1566 | { |
| 1575 | 1567 | trans_all=0; |
| 1576 | 1568 | if(opaque_all) |
| 1577 | 1569 | { |
| 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; |
| 1579 | 1571 | } |
| 1580 | 1572 | |
| 1581 | 1573 | if(alpha_mode==1) |
| r32522 | r32523 | |
| 1610 | 1602 | |
| 1611 | 1603 | /******************************************************************************/ |
| 1612 | 1604 | |
| 1613 | | static void calculate_clip(taito_f3_state *state, int y, UINT16 pri, UINT32* clip0, UINT32* clip1, int* line_enable) |
| 1605 | void taito_f3_state::calculate_clip(int y, UINT16 pri, UINT32* clip0, UINT32* clip1, int* line_enable) |
| 1614 | 1606 | { |
| 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]; |
| 1616 | 1608 | |
| 1617 | 1609 | switch (pri) |
| 1618 | 1610 | { |
| r32522 | r32523 | |
| 1714 | 1706 | } |
| 1715 | 1707 | } |
| 1716 | 1708 | |
| 1717 | | static void get_spritealphaclip_info(taito_f3_state *state) |
| 1709 | void taito_f3_state::get_spritealphaclip_info() |
| 1718 | 1710 | { |
| 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]; |
| 1720 | 1712 | |
| 1721 | 1713 | int y,y_end,y_inc; |
| 1722 | 1714 | |
| r32522 | r32523 | |
| 1728 | 1720 | int alpha_level=0; |
| 1729 | 1721 | UINT16 sprite_alpha=0; |
| 1730 | 1722 | |
| 1731 | | if (state->m_flipscreen) |
| 1723 | if (m_flipscreen) |
| 1732 | 1724 | { |
| 1733 | 1725 | spri_base=0x77fe; |
| 1734 | 1726 | clip_base_low=0x51fe; |
| r32522 | r32523 | |
| 1754 | 1746 | { |
| 1755 | 1747 | /* The zoom, column and row values can latch according to control ram */ |
| 1756 | 1748 | { |
| 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; |
| 1763 | 1755 | |
| 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; |
| 1772 | 1764 | } |
| 1773 | 1765 | |
| 1774 | 1766 | |
| r32522 | r32523 | |
| 1793 | 1785 | else if (sprite_clip&0x33) |
| 1794 | 1786 | { |
| 1795 | 1787 | 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); |
| 1797 | 1789 | if (line_enable==0) |
| 1798 | 1790 | line_t->sprite_clip0[y]=0x7fff7fff; |
| 1799 | 1791 | } |
| r32522 | r32523 | |
| 1811 | 1803 | } |
| 1812 | 1804 | |
| 1813 | 1805 | /* sx and sy are 16.16 fixed point numbers */ |
| 1814 | | static void get_line_ram_info(running_machine &machine, tilemap_t *tmap, int sx, int sy, int pos, UINT16 *f3_pf_data_n) |
| 1806 | void taito_f3_state::get_line_ram_info(tilemap_t *tmap, int sx, int sy, int pos, UINT16 *f3_pf_data_n) |
| 1815 | 1807 | { |
| 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]; |
| 1818 | 1809 | |
| 1819 | 1810 | int y,y_start,y_end,y_inc; |
| 1820 | 1811 | int line_base,zoom_base,col_base,pri_base,inc; |
| r32522 | r32523 | |
| 1831 | 1822 | |
| 1832 | 1823 | sx+=((46<<16)); |
| 1833 | 1824 | |
| 1834 | | if (state->m_flipscreen) |
| 1825 | if (m_flipscreen) |
| 1835 | 1826 | { |
| 1836 | 1827 | line_base=0xa1fe + (pos*0x200); |
| 1837 | 1828 | zoom_base=0x81fe;// + (pos*0x200); |
| r32522 | r32523 | |
| 1842 | 1833 | y_end=-1; |
| 1843 | 1834 | y_inc=-1; |
| 1844 | 1835 | |
| 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 */ |
| 1846 | 1837 | y_index_fx=-sy-(256<<16); /* Adjust for flipped scroll position */ |
| 1847 | 1838 | } |
| 1848 | 1839 | else |
| r32522 | r32523 | |
| 1865 | 1856 | { |
| 1866 | 1857 | /* The zoom, column and row values can latch according to control ram */ |
| 1867 | 1858 | { |
| 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; |
| 1872 | 1863 | |
| 1873 | 1864 | // Zoom for playfields 1 & 3 is interleaved, as is the latch select |
| 1874 | 1865 | switch (pos) |
| 1875 | 1866 | { |
| 1876 | 1867 | 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; |
| 1879 | 1870 | break; |
| 1880 | 1871 | 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); |
| 1885 | 1876 | break; |
| 1886 | 1877 | 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; |
| 1889 | 1880 | break; |
| 1890 | 1881 | 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); |
| 1895 | 1886 | break; |
| 1896 | 1887 | default: |
| 1897 | 1888 | break; |
| 1898 | 1889 | } |
| 1899 | 1890 | |
| 1900 | 1891 | // 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; |
| 1903 | 1894 | } |
| 1904 | 1895 | |
| 1905 | | if (!pri || (!state->m_flipscreen && y<24) || (state->m_flipscreen && y>231) || |
| 1896 | if (!pri || (!m_flipscreen && y<24) || (m_flipscreen && y>231) || |
| 1906 | 1897 | (pri&0xc000)==0xc000 || !(pri&0x2000)/**/) |
| 1907 | 1898 | line_enable=0; |
| 1908 | 1899 | else if(pri&0x4000) //alpha1 |
| r32522 | r32523 | |
| 1922 | 1913 | else if (pri&0x0330) |
| 1923 | 1914 | { |
| 1924 | 1915 | //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); |
| 1926 | 1917 | } |
| 1927 | 1918 | else |
| 1928 | 1919 | { |
| r32522 | r32523 | |
| 1966 | 1957 | |
| 1967 | 1958 | if (cs&0x200) |
| 1968 | 1959 | { |
| 1969 | | if (state->m_pf5_tilemap && state->m_pf6_tilemap) |
| 1960 | if (m_pf5_tilemap && m_pf6_tilemap) |
| 1970 | 1961 | { |
| 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) |
| 1973 | 1964 | } |
| 1974 | 1965 | } |
| 1975 | 1966 | else |
| r32522 | r32523 | |
| 1986 | 1977 | UINT16 *src_s; |
| 1987 | 1978 | UINT8 *tsrc_s; |
| 1988 | 1979 | |
| 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); |
| 1990 | 1981 | y_index = ((y_index_fx>>16)+_colscroll[y])&0x1ff; |
| 1991 | 1982 | |
| 1992 | 1983 | /* 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); |
| 1994 | 1985 | |
| 1995 | 1986 | /* If clipping enabled for this line have to disable 'all opaque' optimisation */ |
| 1996 | 1987 | if (line_t->clip0[y]!=0x7fff0000 || line_t->clip1[y]!=0) |
| r32522 | r32523 | |
| 1999 | 1990 | /* set pixmap index */ |
| 2000 | 1991 | line_t->x_count[y]=x_index_fx & 0xffff; // Fractional part |
| 2001 | 1992 | 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]; |
| 2003 | 1994 | line_t->src[y]=&src_s[x_index_fx>>16]; |
| 2004 | 1995 | |
| 2005 | 1996 | line_t->tsrc_s[y]=tsrc_s=&flagsbitmap.pix8(y_index); |
| r32522 | r32523 | |
| 2011 | 2002 | } |
| 2012 | 2003 | } |
| 2013 | 2004 | |
| 2014 | | static void get_vram_info(running_machine &machine, tilemap_t *vram_tilemap, tilemap_t *pixel_tilemap, int sx, int sy) |
| 2005 | void taito_f3_state::get_vram_info(tilemap_t *vram_tilemap, tilemap_t *pixel_tilemap, int sx, int sy) |
| 2015 | 2006 | { |
| 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]; |
| 2019 | 2009 | |
| 2020 | 2010 | int y,y_start,y_end,y_inc; |
| 2021 | 2011 | int pri_base,inc; |
| r32522 | r32523 | |
| 2026 | 2016 | |
| 2027 | 2017 | const int vram_width_mask=0x3ff; |
| 2028 | 2018 | |
| 2029 | | if (state->m_flipscreen) |
| 2019 | if (m_flipscreen) |
| 2030 | 2020 | { |
| 2031 | 2021 | pri_base =0x73fe; |
| 2032 | 2022 | inc=-2; |
| r32522 | r32523 | |
| 2049 | 2039 | { |
| 2050 | 2040 | /* The zoom, column and row values can latch according to control ram */ |
| 2051 | 2041 | { |
| 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); |
| 2054 | 2044 | } |
| 2055 | 2045 | |
| 2056 | 2046 | |
| 2057 | | if (!pri || (!state->m_flipscreen && y<24) || (state->m_flipscreen && y>231) || |
| 2047 | if (!pri || (!m_flipscreen && y<24) || (m_flipscreen && y>231) || |
| 2058 | 2048 | (pri&0xc000)==0xc000 || !(pri&0x2000)/**/) |
| 2059 | 2049 | line_enable=0; |
| 2060 | 2050 | else if(pri&0x4000) //alpha1 |
| r32522 | r32523 | |
| 2072 | 2062 | else if (pri&0x0330) |
| 2073 | 2063 | { |
| 2074 | 2064 | //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); |
| 2076 | 2066 | } |
| 2077 | 2067 | else |
| 2078 | 2068 | { |
| r32522 | r32523 | |
| 2133 | 2123 | |
| 2134 | 2124 | /******************************************************************************/ |
| 2135 | 2125 | |
| 2136 | | static void scanline_draw(running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect) |
| 2126 | void taito_f3_state::scanline_draw(bitmap_rgb32 &bitmap, const rectangle &cliprect) |
| 2137 | 2127 | { |
| 2138 | | taito_f3_state *state = machine.driver_data<taito_f3_state>(); |
| 2139 | 2128 | int i,j,y,ys,ye; |
| 2140 | 2129 | int y_start,y_end,y_start_next,y_end_next; |
| 2141 | 2130 | UINT8 draw_line[256]; |
| r32522 | r32523 | |
| 2143 | 2132 | |
| 2144 | 2133 | UINT32 rot=0; |
| 2145 | 2134 | |
| 2146 | | if (state->m_flipscreen) |
| 2135 | if (m_flipscreen) |
| 2147 | 2136 | { |
| 2148 | 2137 | rot=ORIENTATION_FLIP_Y; |
| 2149 | 2138 | ys=0; |
| r32522 | r32523 | |
| 2169 | 2158 | int spri; |
| 2170 | 2159 | int alpha; |
| 2171 | 2160 | 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; |
| 2174 | 2163 | int count_skip_layer=0; |
| 2175 | 2164 | int sprite[6]={0,0,0,0,0,0}; |
| 2176 | 2165 | const struct f3_playfield_line_inf *line_t[5]; |
| r32522 | r32523 | |
| 2245 | 2234 | (sprite_alpha&0xff) != 0xff ) |
| 2246 | 2235 | { |
| 2247 | 2236 | /* set alpha level */ |
| 2248 | | if(alpha_level!=state->m_alpha_level_last) |
| 2237 | if(alpha_level!=m_alpha_level_last) |
| 2249 | 2238 | { |
| 2250 | 2239 | int al_s,al_d; |
| 2251 | 2240 | int a=alpha_level; |
| r32522 | r32523 | |
| 2259 | 2248 | al_d = ( (15-b)*256) / 8; |
| 2260 | 2249 | if(al_s>255) al_s = 255; |
| 2261 | 2250 | 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; |
| 2266 | 2255 | |
| 2267 | 2256 | al_s = ( (15-c)*256) / 8; |
| 2268 | 2257 | al_d = ( (15-a)*256) / 8; |
| 2269 | 2258 | if(al_s>255) al_s = 255; |
| 2270 | 2259 | 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; |
| 2275 | 2264 | |
| 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; |
| 2278 | 2267 | } |
| 2279 | 2268 | |
| 2280 | 2269 | /* set sprite alpha mode */ |
| 2281 | 2270 | sprite_alpha_check=0; |
| 2282 | 2271 | 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; |
| 2287 | 2276 | for(i=0;i<4;i++) /* i = sprite priority offset */ |
| 2288 | 2277 | { |
| 2289 | 2278 | UINT8 sprite_alpha_mode=(sprite_alpha>>(i*2))&3; |
| 2290 | 2279 | UINT8 sftbit=1<<i; |
| 2291 | | if(state->m_sprite_pri_usage&sftbit) |
| 2280 | if(m_sprite_pri_usage&sftbit) |
| 2292 | 2281 | { |
| 2293 | 2282 | if(sprite_alpha_mode==1) |
| 2294 | 2283 | { |
| 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 |
| 2297 | 2286 | else |
| 2298 | 2287 | { |
| 2299 | | state->m_dpix_sp[sftbit]=state->m_dpix_n[2]; |
| 2288 | m_dpix_sp[sftbit]=m_dpix_n[2]; |
| 2300 | 2289 | sprite_alpha_check|=sftbit; |
| 2301 | 2290 | } |
| 2302 | 2291 | } |
| r32522 | r32523 | |
| 2304 | 2293 | { |
| 2305 | 2294 | if(sprite_alpha&0xff00) |
| 2306 | 2295 | { |
| 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; |
| 2308 | 2297 | else |
| 2309 | 2298 | { |
| 2310 | | state->m_dpix_sp[sftbit]=state->m_dpix_n[3]; |
| 2299 | m_dpix_sp[sftbit]=m_dpix_n[3]; |
| 2311 | 2300 | sprite_alpha_check|=sftbit; |
| 2312 | 2301 | sprite_alpha_all_2a=0; |
| 2313 | 2302 | } |
| 2314 | 2303 | } |
| 2315 | 2304 | else |
| 2316 | 2305 | { |
| 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; |
| 2318 | 2307 | else |
| 2319 | 2308 | { |
| 2320 | | state->m_dpix_sp[sftbit]=state->m_dpix_n[5]; |
| 2309 | m_dpix_sp[sftbit]=m_dpix_n[5]; |
| 2321 | 2310 | sprite_alpha_check|=sftbit; |
| 2322 | 2311 | sprite_alpha_all_2a=0; |
| 2323 | 2312 | } |
| r32522 | r32523 | |
| 2336 | 2325 | { |
| 2337 | 2326 | if(alpha_type==1) |
| 2338 | 2327 | { |
| 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) |
| 2340 | 2329 | * alpha_mode[i]=3; alpha_mode_flag[i] |= 0x80;} |
| 2341 | 2330 | * 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; |
| 2344 | 2333 | } |
| 2345 | 2334 | else if(alpha_type==2) |
| 2346 | 2335 | { |
| 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; |
| 2350 | 2339 | } |
| 2351 | 2340 | else if(alpha_type==3) |
| 2352 | 2341 | { |
| 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; |
| 2357 | 2346 | } |
| 2358 | 2347 | } |
| 2359 | 2348 | else if(alpha_mode[i]==3) |
| 2360 | 2349 | { |
| 2361 | 2350 | if(alpha_type==1) |
| 2362 | 2351 | { |
| 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; |
| 2365 | 2354 | } |
| 2366 | 2355 | else if(alpha_type==2) |
| 2367 | 2356 | { |
| 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; |
| 2371 | 2360 | } |
| 2372 | 2361 | else if(alpha_type==3) |
| 2373 | 2362 | { |
| 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; |
| 2378 | 2367 | } |
| 2379 | 2368 | } |
| 2380 | 2369 | } |
| r32522 | r32523 | |
| 2387 | 2376 | sprite_alpha_all_2a ) |
| 2388 | 2377 | { |
| 2389 | 2378 | 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) ) |
| 2393 | 2382 | { |
| 2394 | 2383 | if(alpha_mode[0]>1) alpha_mode[0]=1; |
| 2395 | 2384 | if(alpha_mode[1]>1) alpha_mode[1]=1; |
| r32522 | r32523 | |
| 2397 | 2386 | if(alpha_mode[3]>1) alpha_mode[3]=1; |
| 2398 | 2387 | if(alpha_mode[4]>1) alpha_mode[4]=1; |
| 2399 | 2388 | 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; |
| 2404 | 2393 | } |
| 2405 | 2394 | } |
| 2406 | 2395 | } |
| 2407 | 2396 | else |
| 2408 | 2397 | { |
| 2409 | 2398 | 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; |
| 2414 | 2403 | } |
| 2415 | 2404 | |
| 2416 | 2405 | |
| r32522 | r32523 | |
| 2481 | 2470 | for(i=0;i<4;i++) /* i = sprite priority offset */ |
| 2482 | 2471 | { |
| 2483 | 2472 | int sp,sflg=1<<i; |
| 2484 | | if(!(state->m_sprite_pri_usage & sflg)) continue; |
| 2473 | if(!(m_sprite_pri_usage & sflg)) continue; |
| 2485 | 2474 | sp=pri_sp[i]; |
| 2486 | 2475 | |
| 2487 | 2476 | /* |
| r32522 | r32523 | |
| 2491 | 2480 | DARIUSG (ZONE V' BOSS) ---> playfield |
| 2492 | 2481 | */ |
| 2493 | 2482 | |
| 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) |
| 2496 | 2485 | |
| 2497 | 2486 | if( sp>l0) sprite[0]|=sflg; |
| 2498 | 2487 | else if(sp<=l0 && sp>l1) sprite[1]|=sflg; |
| r32522 | r32523 | |
| 2517 | 2506 | if(alpha_mode[pos]>1) |
| 2518 | 2507 | { |
| 2519 | 2508 | 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]; |
| 2521 | 2510 | alpha=1; |
| 2522 | 2511 | } |
| 2523 | 2512 | else |
| 2524 | 2513 | { |
| 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]; |
| 2527 | 2516 | } |
| 2528 | 2517 | } |
| 2529 | 2518 | if(sprite[5]&sprite_alpha_check) alpha=1; |
| 2530 | 2519 | else if(!alpha) sprite[5]|=0x100; |
| 2531 | 2520 | |
| 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); |
| 2533 | 2522 | if(y_start<0) break; |
| 2534 | 2523 | } |
| 2535 | 2524 | } |
| r32522 | r32523 | |
| 3186 | 3175 | draw_sprites(bitmap,cliprect); |
| 3187 | 3176 | |
| 3188 | 3177 | /* Parse sprite, alpha & clipping parts of lineram */ |
| 3189 | | get_spritealphaclip_info(this); |
| 3178 | get_spritealphaclip_info(); |
| 3190 | 3179 | |
| 3191 | 3180 | /* 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]); |
| 3197 | 3186 | |
| 3198 | 3187 | /* Draw final framebuffer */ |
| 3199 | | scanline_draw(machine(), bitmap,cliprect); |
| 3188 | scanline_draw(bitmap,cliprect); |
| 3200 | 3189 | |
| 3201 | 3190 | if (VERBOSE) |
| 3202 | | print_debug_info(machine(), bitmap); |
| 3191 | print_debug_info(bitmap); |
| 3203 | 3192 | return 0; |
| 3204 | 3193 | } |