www.pudn.com > sn068s.zip > TILES.NI
%ifndef SNEeSe_tiles_ni %define SNEeSe_tiles_ni %ifndef SNEeSe_tiles_asm extern Tile_Line_8_2,Tile_Line_8_4 extern Tile_Line_16_2_Even,Tile_Line_16_4_Even extern Tile_Line_16_2,Tile_Line_16_4 extern Sprite_Tile_Plot_8_4,Sprite_Tile_Plot_16_4 extern Sprite_Tile_Plot_32_4,Sprite_Tile_Plot_64_4 extern Tile_Line_8_8,Tile_Line_16_8 extern _TileCache2,_TileCache4,_TileCache8 extern _TileTag2,_TileTag4,_TileTag8 extern TilesetAddress extern ColourBase extern PixMask extern Recache_Tile_Set extern Invalidate_Tile_Caches %endif ;Plot_2 and Plot_2_Z assume the following register contents: ; ebx = destination address of line-of-tile (Z-buffer) ; esi = line-of-tile address ; edi = destination address of line-of-tile (display surface) ; cl = Z-position of pixels plotted ; Additionally, al & dl are trashed ;Plot_2_Paletted and Plot_2_Z_Paletted also assume: ; dh = palette mask ;All plotters read from [esi+%1,%2], write to [edi+%3,%4], and do ; not plot zero pixels ;The sprite plotters in tiles.asm read from [ebx+%3,%4], checks Z value, ; and if pixels read are to be plotted, their Z-positions are tagged with ; a high value, even if they are not plotted - used to emulate sprite's ; first-come-first-serve pixel allocation. ;Pixel_1_in, Pixel_2_in, Pixel_1_out, Pixel_2_out %macro Plot_2_Z_Paletted 4 mov al,[ebx + %3] cmp al,cl jae %%no_plot_1 mov al,[esi + %1] and al,dh jz %%no_plot_1 mov [ebx + %3],cl mov [edi + %3],al %%no_plot_1: mov dl,[ebx + %4] cmp dl,cl jae %%no_plot_2 mov dl,[esi + %2] and dl,dh jz %%no_plot_2 mov [ebx + %4],cl mov [edi + %4],dl %%no_plot_2: %endmacro ;Pixel_1_in, Pixel_2_in, Pixel_1_out, Pixel_2_out %macro Plot_2_Z 4 mov al,[ebx + %3] cmp al,cl jae %%no_plot_1 mov al,[esi + %1] test al,al jz %%no_plot_1 mov [ebx + %3],cl mov [edi + %3],al %%no_plot_1: mov dl,[ebx + %4] cmp dl,cl jae %%no_plot_2 mov dl,[esi + %2] test dl,dl jz %%no_plot_2 mov [ebx + %4],cl mov [edi + %4],dl %%no_plot_2: %endmacro ;Pixel_1_in, Pixel_2_in, Pixel_1_out, Pixel_2_out %macro Plot_2_Paletted 4 mov al,[esi + %1] and al,dh jz %%no_plot_1 ;mov [ebx + %3],cl mov [edi + %3],al %%no_plot_1: mov dl,[esi + %2] and dl,dh jz %%no_plot_2 ;mov [ebx + %4],cl mov [edi + %4],dl %%no_plot_2: %endmacro ;Pixel_1_in, Pixel_2_in, Pixel_1_out, Pixel_2_out %macro Plot_2 4 mov al,[esi + %1] test al,al jz %%no_plot_1 ;mov [ebx + %3],cl mov [edi + %3],al %%no_plot_1: mov dl,[esi + %2] test dl,dl jz %%no_plot_2 ;mov [ebx + %4],cl mov [edi + %4],dl %%no_plot_2: %endmacro ;First_pixel_out %macro Plot_4_base 1-2 1 Plot_4_base_%2 %1 %endmacro %macro Plot_4_base_1 1 mov edx,eax shr edx,16 test eax,0xFFFF jz %%skip2_not34 test al,al jz %%skip1 test ah,ah jz %%put1 test dl,dl jz %%put12_skip3 test dh,dh jz %%put123_skip4 mov [edi + (%1)],eax jmp short %%skip4 %%put12_skip3: mov [edi + (%1)],ax test dh,dh jnz %%skip3 jmp short %%skip4 %%put123_skip4: mov [edi + (%1)],ax mov [edi + (%1) + 2],dl jmp short %%skip4 %%skip1: mov [edi + (%1) + 1],ah jmp short %%skip2 %%put1: mov [edi + (%1)],al %%skip2: test edx,edx jz %%skip4 %%skip2_not34: test dl,dl jz %%skip3 test dh,dh jz %%put3_skip4 mov [edi + (%1) + 2],dx jmp short %%skip4 %%put3_skip4: mov [edi + (%1) + 2],dl jmp short %%skip4 %%skip3: mov [edi + (%1) + 3],dh %%skip4: %endmacro %macro Plot_4_base_2 1 mov edx,eax shr edx,16 test eax,0xFFFF jz %%skip2_not34 test al,al jz %%skip1 test ah,ah jz %%put1 test dl,dl jz %%put12_skip3 test dh,dh jz %%put123_skip4 mov [edi + (%1)],eax mov [edi + (%1) + GfxBufferLinePitch * 1],eax jmp short %%skip4 %%put12_skip3: mov [edi + (%1)],ax mov [edi + (%1) + GfxBufferLinePitch * 1],ax test dh,dh jnz %%skip3 jmp short %%skip4 %%put123_skip4: mov [edi + (%1)],ax mov [edi + (%1) + GfxBufferLinePitch * 1],ax mov [edi + (%1) + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 1 + 2],dl jmp short %%skip4 %%skip1: mov [edi + (%1) + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 1 + 1],ah jmp short %%skip2 %%put1: mov [edi + (%1)],al mov [edi + (%1) + GfxBufferLinePitch * 1],al %%skip2: test edx,edx jz %%skip4 %%skip2_not34: test dl,dl jz %%skip3 test dh,dh jz %%put3_skip4 mov [edi + (%1) + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 1 + 2],dx jmp short %%skip4 %%put3_skip4: mov [edi + (%1) + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 1 + 2],dl jmp short %%skip4 %%skip3: mov [edi + (%1) + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 1 + 3],dh %%skip4: %endmacro %macro Plot_4_base_3 1 mov edx,eax shr edx,16 test eax,0xFFFF jz near %%skip2_not34 test al,al jz %%skip1 test ah,ah jz %%put1 test dl,dl jz %%put12_skip3 test dh,dh jz %%put123_skip4 mov [edi + (%1)],eax mov [edi + (%1) + GfxBufferLinePitch * 1],eax mov [edi + (%1) + GfxBufferLinePitch * 2],eax jmp %%skip4 %%put12_skip3: mov [edi + (%1)],ax mov [edi + (%1) + GfxBufferLinePitch * 1],ax mov [edi + (%1) + GfxBufferLinePitch * 2],ax test dh,dh jnz %%skip3 jmp %%skip4 %%put123_skip4: mov [edi + (%1)],ax mov [edi + (%1) + GfxBufferLinePitch * 1],ax mov [edi + (%1) + GfxBufferLinePitch * 2],ax mov [edi + (%1) + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 1 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 2 + 2],dl jmp short %%skip4 %%skip1: mov [edi + (%1) + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 1 + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 2 + 1],ah jmp short %%skip2 %%put1: mov [edi + (%1)],al mov [edi + (%1) + GfxBufferLinePitch * 1],al mov [edi + (%1) + GfxBufferLinePitch * 2],al %%skip2: test edx,edx jz %%skip4 %%skip2_not34: test dl,dl jz %%skip3 test dh,dh jz %%put3_skip4 mov [edi + (%1) + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 1 + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 2 + 2],dx jmp short %%skip4 %%put3_skip4: mov [edi + (%1) + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 1 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 2 + 2],dl jmp short %%skip4 %%skip3: mov [edi + (%1) + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 1 + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 2 + 3],dh %%skip4: %endmacro %macro Plot_4_base_4 1 mov edx,eax shr edx,16 test eax,0xFFFF jz near %%skip2_not34 test al,al %if %1 == 0 jz %%skip1 %else jz near %%skip1 %endif test ah,ah jz near %%put1 test dl,dl jz %%put12_skip3 test dh,dh jz %%put123_skip4 mov [edi + (%1)],eax mov [edi + (%1) + GfxBufferLinePitch * 1],eax mov [edi + (%1) + GfxBufferLinePitch * 2],eax mov [edi + (%1) + GfxBufferLinePitch * 3],eax jmp %%skip4 %%put12_skip3: mov [edi + (%1)],ax mov [edi + (%1) + GfxBufferLinePitch * 1],ax mov [edi + (%1) + GfxBufferLinePitch * 2],ax mov [edi + (%1) + GfxBufferLinePitch * 3],ax test dh,dh jnz near %%skip3 jmp %%skip4 %%put123_skip4: mov [edi + (%1)],ax mov [edi + (%1) + GfxBufferLinePitch * 1],ax mov [edi + (%1) + GfxBufferLinePitch * 2],ax mov [edi + (%1) + GfxBufferLinePitch * 3],ax mov [edi + (%1) + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 1 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 2 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 3 + 2],dl jmp short %%skip4 %%skip1: mov [edi + (%1) + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 1 + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 2 + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 3 + 1],ah jmp short %%skip2 %%put1: mov [edi + (%1)],al mov [edi + (%1) + GfxBufferLinePitch * 1],al mov [edi + (%1) + GfxBufferLinePitch * 2],al mov [edi + (%1) + GfxBufferLinePitch * 3],al %%skip2: test edx,edx jz %%skip4 %%skip2_not34: test dl,dl jz %%skip3 test dh,dh jz %%put3_skip4 mov [edi + (%1) + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 1 + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 2 + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 3 + 2],dx jmp short %%skip4 %%put3_skip4: mov [edi + (%1) + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 1 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 2 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 3 + 2],dl jmp short %%skip4 %%skip3: mov [edi + (%1) + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 1 + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 2 + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 3 + 3],dh %%skip4: %endmacro %macro Plot_4_base_5 1 mov edx,eax shr edx,16 test eax,0xFFFF jz near %%skip2_not34 test al,al jz near %%skip1 test ah,ah jz near %%put1 test dl,dl jz %%put12_skip3 test dh,dh jz %%put123_skip4 mov [edi + (%1)],eax mov [edi + (%1) + GfxBufferLinePitch * 1],eax mov [edi + (%1) + GfxBufferLinePitch * 2],eax mov [edi + (%1) + GfxBufferLinePitch * 3],eax mov [edi + (%1) + GfxBufferLinePitch * 4],eax jmp %%skip4 %%put12_skip3: mov [edi + (%1)],ax mov [edi + (%1) + GfxBufferLinePitch * 1],ax mov [edi + (%1) + GfxBufferLinePitch * 2],ax mov [edi + (%1) + GfxBufferLinePitch * 3],ax mov [edi + (%1) + GfxBufferLinePitch * 4],ax test dh,dh jnz near %%skip3 jmp %%skip4 %%put123_skip4: mov [edi + (%1)],ax mov [edi + (%1) + GfxBufferLinePitch * 1],ax mov [edi + (%1) + GfxBufferLinePitch * 2],ax mov [edi + (%1) + GfxBufferLinePitch * 3],ax mov [edi + (%1) + GfxBufferLinePitch * 4],ax mov [edi + (%1) + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 1 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 2 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 3 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 4 + 2],dl jmp %%skip4 %%skip1: mov [edi + (%1) + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 1 + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 2 + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 3 + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 4 + 1],ah jmp short %%skip2 %%put1: mov [edi + (%1)],al mov [edi + (%1) + GfxBufferLinePitch * 1],al mov [edi + (%1) + GfxBufferLinePitch * 2],al mov [edi + (%1) + GfxBufferLinePitch * 3],al mov [edi + (%1) + GfxBufferLinePitch * 4],al %%skip2: test edx,edx jz %%skip4 %%skip2_not34: test dl,dl jz %%skip3 test dh,dh jz %%put3_skip4 mov [edi + (%1) + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 1 + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 2 + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 3 + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 4 + 2],dx jmp short %%skip4 %%put3_skip4: mov [edi + (%1) + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 1 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 2 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 3 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 4 + 2],dl jmp short %%skip4 %%skip3: mov [edi + (%1) + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 1 + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 2 + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 3 + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 4 + 3],dh %%skip4: %endmacro %macro Plot_4_base_6 1 mov edx,eax shr edx,16 test eax,0xFFFF jz near %%skip2_not34 test al,al jz near %%skip1 test ah,ah jz near %%put1 test dl,dl jz %%put12_skip3 test dh,dh jz %%put123_skip4 mov [edi + (%1)],eax mov [edi + (%1) + GfxBufferLinePitch * 1],eax mov [edi + (%1) + GfxBufferLinePitch * 2],eax mov [edi + (%1) + GfxBufferLinePitch * 3],eax mov [edi + (%1) + GfxBufferLinePitch * 4],eax mov [edi + (%1) + GfxBufferLinePitch * 5],eax jmp %%skip4 %%put12_skip3: mov [edi + (%1)],ax mov [edi + (%1) + GfxBufferLinePitch * 1],ax mov [edi + (%1) + GfxBufferLinePitch * 2],ax mov [edi + (%1) + GfxBufferLinePitch * 3],ax mov [edi + (%1) + GfxBufferLinePitch * 4],ax mov [edi + (%1) + GfxBufferLinePitch * 5],ax test dh,dh jnz near %%skip3 jmp %%skip4 %%put123_skip4: mov [edi + (%1)],ax mov [edi + (%1) + GfxBufferLinePitch * 1],ax mov [edi + (%1) + GfxBufferLinePitch * 2],ax mov [edi + (%1) + GfxBufferLinePitch * 3],ax mov [edi + (%1) + GfxBufferLinePitch * 4],ax mov [edi + (%1) + GfxBufferLinePitch * 5],ax mov [edi + (%1) + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 1 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 2 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 3 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 4 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 5 + 2],dl jmp %%skip4 %%skip1: mov [edi + (%1) + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 1 + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 2 + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 3 + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 4 + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 5 + 1],ah jmp short %%skip2 %%put1: mov [edi + (%1)],al mov [edi + (%1) + GfxBufferLinePitch * 1],al mov [edi + (%1) + GfxBufferLinePitch * 2],al mov [edi + (%1) + GfxBufferLinePitch * 3],al mov [edi + (%1) + GfxBufferLinePitch * 4],al mov [edi + (%1) + GfxBufferLinePitch * 5],al %%skip2: test edx,edx jz %%skip4 %%skip2_not34: test dl,dl jz %%skip3 test dh,dh jz %%put3_skip4 mov [edi + (%1) + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 1 + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 2 + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 3 + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 4 + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 5 + 2],dx jmp short %%skip4 %%put3_skip4: mov [edi + (%1) + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 1 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 2 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 3 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 4 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 5 + 2],dl jmp short %%skip4 %%skip3: mov [edi + (%1) + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 1 + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 2 + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 3 + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 4 + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 5 + 3],dh %%skip4: %endmacro %macro Plot_4_base_7 1 mov edx,eax shr edx,16 test eax,0xFFFF jz near %%skip2_not34 test al,al jz near %%skip1 test ah,ah jz near %%put1 test dl,dl jz %%put12_skip3 test dh,dh jz %%put123_skip4 mov [edi + (%1)],eax mov [edi + (%1) + GfxBufferLinePitch * 1],eax mov [edi + (%1) + GfxBufferLinePitch * 2],eax mov [edi + (%1) + GfxBufferLinePitch * 3],eax mov [edi + (%1) + GfxBufferLinePitch * 4],eax mov [edi + (%1) + GfxBufferLinePitch * 5],eax mov [edi + (%1) + GfxBufferLinePitch * 6],eax jmp %%skip4 %%put12_skip3: mov [edi + (%1)],ax mov [edi + (%1) + GfxBufferLinePitch * 1],ax mov [edi + (%1) + GfxBufferLinePitch * 2],ax mov [edi + (%1) + GfxBufferLinePitch * 3],ax mov [edi + (%1) + GfxBufferLinePitch * 4],ax mov [edi + (%1) + GfxBufferLinePitch * 5],ax mov [edi + (%1) + GfxBufferLinePitch * 6],ax test dh,dh jnz near %%skip3 jmp %%skip4 %%put123_skip4: mov [edi + (%1)],ax mov [edi + (%1) + GfxBufferLinePitch * 1],ax mov [edi + (%1) + GfxBufferLinePitch * 2],ax mov [edi + (%1) + GfxBufferLinePitch * 3],ax mov [edi + (%1) + GfxBufferLinePitch * 4],ax mov [edi + (%1) + GfxBufferLinePitch * 5],ax mov [edi + (%1) + GfxBufferLinePitch * 6],ax mov [edi + (%1) + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 1 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 2 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 3 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 4 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 5 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 6 + 2],dl jmp %%skip4 %%skip1: mov [edi + (%1) + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 1 + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 2 + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 3 + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 4 + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 5 + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 6 + 1],ah jmp short %%skip2 %%put1: mov [edi + (%1)],al mov [edi + (%1) + GfxBufferLinePitch * 1],al mov [edi + (%1) + GfxBufferLinePitch * 2],al mov [edi + (%1) + GfxBufferLinePitch * 3],al mov [edi + (%1) + GfxBufferLinePitch * 4],al mov [edi + (%1) + GfxBufferLinePitch * 5],al mov [edi + (%1) + GfxBufferLinePitch * 6],al %%skip2: test edx,edx jz near %%skip4 %%skip2_not34: test dl,dl jz %%skip3 test dh,dh jz %%put3_skip4 mov [edi + (%1) + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 1 + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 2 + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 3 + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 4 + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 5 + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 6 + 2],dx jmp short %%skip4 %%put3_skip4: mov [edi + (%1) + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 1 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 2 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 3 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 4 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 5 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 6 + 2],dl jmp short %%skip4 %%skip3: mov [edi + (%1) + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 1 + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 2 + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 3 + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 4 + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 5 + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 6 + 3],dh %%skip4: %endmacro %macro Plot_4_base_8 1 mov edx,eax shr edx,16 test eax,0xFFFF jz near %%skip2_not34 test al,al jz near %%skip1 test ah,ah jz near %%put1 test dl,dl jz %%put12_skip3 test dh,dh jz %%put123_skip4 mov [edi + (%1)],eax mov [edi + (%1) + GfxBufferLinePitch * 1],eax mov [edi + (%1) + GfxBufferLinePitch * 2],eax mov [edi + (%1) + GfxBufferLinePitch * 3],eax mov [edi + (%1) + GfxBufferLinePitch * 4],eax mov [edi + (%1) + GfxBufferLinePitch * 5],eax mov [edi + (%1) + GfxBufferLinePitch * 6],eax mov [edi + (%1) + GfxBufferLinePitch * 7],eax jmp %%skip4 %%put12_skip3: mov [edi + (%1)],ax mov [edi + (%1) + GfxBufferLinePitch * 1],ax mov [edi + (%1) + GfxBufferLinePitch * 2],ax mov [edi + (%1) + GfxBufferLinePitch * 3],ax mov [edi + (%1) + GfxBufferLinePitch * 4],ax mov [edi + (%1) + GfxBufferLinePitch * 5],ax mov [edi + (%1) + GfxBufferLinePitch * 6],ax mov [edi + (%1) + GfxBufferLinePitch * 7],ax test dh,dh jnz near %%skip3 jmp %%skip4 %%put123_skip4: mov [edi + (%1)],ax mov [edi + (%1) + GfxBufferLinePitch * 1],ax mov [edi + (%1) + GfxBufferLinePitch * 2],ax mov [edi + (%1) + GfxBufferLinePitch * 3],ax mov [edi + (%1) + GfxBufferLinePitch * 4],ax mov [edi + (%1) + GfxBufferLinePitch * 5],ax mov [edi + (%1) + GfxBufferLinePitch * 6],ax mov [edi + (%1) + GfxBufferLinePitch * 7],ax mov [edi + (%1) + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 1 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 2 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 3 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 4 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 5 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 6 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 7 + 2],dl jmp %%skip4 %%skip1: mov [edi + (%1) + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 1 + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 2 + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 3 + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 4 + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 5 + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 6 + 1],ah mov [edi + (%1) + GfxBufferLinePitch * 7 + 1],ah jmp short %%skip2 %%put1: mov [edi + (%1)],al mov [edi + (%1) + GfxBufferLinePitch * 1],al mov [edi + (%1) + GfxBufferLinePitch * 2],al mov [edi + (%1) + GfxBufferLinePitch * 3],al mov [edi + (%1) + GfxBufferLinePitch * 4],al mov [edi + (%1) + GfxBufferLinePitch * 5],al mov [edi + (%1) + GfxBufferLinePitch * 6],al mov [edi + (%1) + GfxBufferLinePitch * 7],al %%skip2: test edx,edx jz near %%skip4 %%skip2_not34: test dl,dl jz %%skip3 test dh,dh jz %%put3_skip4 mov [edi + (%1) + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 1 + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 2 + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 3 + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 4 + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 5 + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 6 + 2],dx mov [edi + (%1) + GfxBufferLinePitch * 7 + 2],dx jmp short %%skip4 %%put3_skip4: mov [edi + (%1) + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 1 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 2 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 3 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 4 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 5 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 6 + 2],dl mov [edi + (%1) + GfxBufferLinePitch * 7 + 2],dl jmp short %%skip4 %%skip3: mov [edi + (%1) + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 1 + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 2 + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 3 + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 4 + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 5 + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 6 + 3],dh mov [edi + (%1) + GfxBufferLinePitch * 7 + 3],dh %%skip4: %endmacro ;Source_address, First_pixel_in, First_pixel_out %macro Plot_4_Paletted_noflip 3-4 1 mov eax,[%1 + %2] and eax,ebp %if (%4) > 1 jz near %%skip4 %else jz %%skip4 %endif Plot_4_base %3,%4 %%skip4: %endmacro ;Source_address, First_pixel_in, First_pixel_out %macro Plot_4_Paletted_Xflip 3-4 1 mov eax,[%1 + %2] and eax,ebp %if (%4) > 1 jz near %%skip4 %else jz %%skip4 %endif bswap eax Plot_4_base %3,%4 %%skip4: %endmacro ;Source_address, First_pixel_in, First_pixel_out %macro Plot_4_noflip 3-4 1 mov eax,[%1 + %2] test eax,eax %if (%4) > 1 jz near %%skip4 %else jz %%skip4 %endif Plot_4_base %3,%4 %%skip4: %endmacro ;Source_address, First_pixel_in, First_pixel_out %macro Plot_4_Xflip 3-4 1 mov eax,[%1 + %2] test eax,eax %if (%4) > 1 jz near %%skip4 %else jz %%skip4 %endif bswap eax Plot_4_base %3,%4 %%skip4: %endmacro ;Soure_address, First_pixel_in, First_pixel_out %macro Plot_4_Paletted_noflip_84 3-4 1 mov eax,[%1 + %2] and cl,1 jz %%no_shift shr eax,4 %%no_shift: and eax,0x0F0F0F0F jz %%skip4 Plot_4_base %3,%4 %%skip4: %endmacro ;Soure_address, First_pixel_in, First_pixel_out %macro Plot_4_Paletted_Xflip_84 3-4 1 mov eax,[%1 + %2] and cl,1 bswap eax jz %%no_shift shr eax,4 %%no_shift: and eax,0x0F0F0F0F jz %%skip4 Plot_4_base %3,%4 %%skip4: %endmacro %macro Plot_8_Paletted_Lines_noflip 3-4 0 %if (%1) > 1 push edi %endif %%loop: Plot_4_Paletted_noflip (%2),0,(%3)+0 Plot_4_Paletted_noflip (%2),4,(%3)+4 %if (%1) > 1 add esi,ecx add edi,GfxBufferLinePitch dec ebx jnz near %%loop pop edi %endif %if ((%4) != 0) sub edi,byte - (%4) %endif %endmacro %macro Plot_8_Paletted_Lines_Xflip 3-4 0 %if (%1) > 1 push edi %endif %%loop: Plot_4_Paletted_Xflip (%2),4,(%3)+0 Plot_4_Paletted_Xflip (%2),0,(%3)+4 %if (%1) > 1 add esi,ecx add edi,GfxBufferLinePitch dec ebx jnz near %%loop pop edi %endif %if ((%4) != 0) sub edi,byte - (%4) %endif %endmacro %macro Plot_8_Lines_noflip 3-4 0 %if (%1) > 1 push edi %endif %%loop: Plot_4_noflip (%2),0,(%3)+0 Plot_4_noflip (%2),4,(%3)+4 %if (%1) > 1 add esi,ecx add edi,GfxBufferLinePitch dec ebx jnz near %%loop pop edi %endif %if ((%4) != 0) sub edi,byte - (%4) %endif %endmacro %macro Plot_8_Lines_Xflip 3-4 0 %if (%1) > 1 push edi %endif %%loop: Plot_4_Xflip (%2),4,(%3)+0 Plot_4_Xflip (%2),0,(%3)+4 %if (%1) > 1 add esi,ecx add edi,GfxBufferLinePitch dec ebx jnz near %%loop pop edi %endif %if ((%4) != 0) sub edi,byte - (%4) %endif %endmacro %macro Plot_8_Paletted_Mosaic_Lines_noflip 3-4 1 Plot_4_Paletted_noflip (%2),0,(%3)+0,%1 Plot_4_Paletted_noflip (%2),4,(%3)+4,%1 %if ((%4) != 0) add edi,(%4) %endif %endmacro %macro Plot_8_Paletted_Mosaic_Lines_Xflip 3-4 0 Plot_4_Paletted_Xflip (%2),4,(%3)+0,%1 Plot_4_Paletted_Xflip (%2),0,(%3)+4,%1 %if ((%4) != 0) add edi,(%4) %endif %endmacro %macro Plot_8_Mosaic_Lines_noflip 3-4 0 Plot_4_noflip (%2),0,(%3)+0,%1 Plot_4_noflip (%2),4,(%3)+4,%1 %if ((%4) != 0) add edi,(%4) %endif %endmacro %macro Plot_8_Mosaic_Lines_Xflip 3-4 0 Plot_4_Xflip (%2),4,(%3)+0,%1 Plot_4_Xflip (%2),0,(%3)+4,%1 %if ((%4) != 0) add edi,(%4) %endif %endmacro %endif ; SNEeSe_tiles_ni