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