;; video.asm :	asm video function

	;; nasm macro
	%include 'c32.mac'

	;; global definition
	global draw_tile_i386
	global draw_tile_i386_50
	global draw_one_char_i386
	global draw_scanline_tile_i386_norm
	global draw_scanline_tile_i386_50
	
	;; extern definition
	extern dda_y_skip	; y zoom table
	extern dda_x_skip	; x zoom table
	extern current_pc_pal	; palette
	extern mem_gfx		; &memory.gfx
	extern mem_video	; &memory.video
	extern current_fix
	extern fix_usage


	;; macro/constant/variable definiton
	align 2
full_y_skip :	db 	0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
	
	%define BUFX 352
	%define BUFY 256

	%define BUFX_2 704
	%define BUFX_2_MINUS_32 672
	%define BUFX_2_PLUS_32  736
	%define	BUFX_2_MINUS_16 688


	%include 'video_i386.inc'

	draw_tile_i386 norm
	draw_tile_i386 50
	draw_scanline_tile_i386 norm
	draw_scanline_tile_i386 50


;;; draw one char
	align 2
	%macro draw_char_line 1
		mov eax,[ecx + %1]
		draw_pixel_norm 0,0
		draw_pixel_norm 4,0
		draw_pixel_norm 8,0
		draw_pixel_norm 12,0
		draw_pixel_norm 16,0
		draw_pixel_norm 20,0
		draw_pixel_norm 24,0
		draw_pixel_norm 28,0
		add edi,BUFX_2_MINUS_16
	%endmacro
	
	proc draw_one_char_i386
	%$byte1   arg
	%$byte2   arg
	%$dest    arg	; destination buffer 352x256x16
	
	pusha

	mov edi,[ebp + %$dest]	; esi=pointer on dest buffer
	
	mov ebx,[current_pc_pal]; pointer on char pal
	mov eax,[ebp + %$byte2]
	shl eax,5
	add ebx,eax

	mov ecx,[current_fix]	;  pointer on char data
	mov eax,[ebp + %$byte1]
	shl eax,5
	add ecx,eax
	
	draw_char_line 0
	draw_char_line 4
	draw_char_line 8
	draw_char_line 12
	draw_char_line 16
	draw_char_line 20
	draw_char_line 24
	draw_char_line 28
	
	popa
	endproc