;------------------------------------------------------------ ; b_line ; Mikolaj Felix 03/11/01 ; mfelix@polbox.com ;------------------------------------------------------------ .model tiny .386 locals .code org 100h start: call alloc_seg or ax,ax jz quit_me mov buffer_seg,ax call calc_way ; init palette mov di,offset fire_pal xor ax,ax mov cx,64 sp1: mov al,ah stosb xor al,al stosb stosb inc ah loop sp1 xor ax,ax mov cx,64 sp2: mov al,63 stosb mov al,ah stosb xor al,al stosb inc ah loop sp2 xor ax,ax mov cx,64 sp3: mov al,63 stosb stosb mov al,ah stosb inc ah loop sp3 mov al,63 mov cx,64*3 cld rep stosb mov ax,13h int 10h mov si,offset fire_pal call set_palette call clear_buffer main_loop: ; color push word ptr 255 ; x2, y2 mov bx,way_pos mov di,bx and bx,255 shl bx,2 push word ptr line_way[bx+2] push word ptr line_way[bx] ; x1, y1 sub di,128 and di,255 shl di,2 push word ptr line_way[di+2] push word ptr line_way[di] call draw_line call blur call retrace call copy_buffer inc way_pos in al,60h dec al jnz main_loop mov ax,03h int 10h mov ax,buffer_seg call free_seg quit_me: mov ah,4ch int 21h blur proc push ds push es mov ax,buffer_seg mov ds,ax mov es,ax xor di,di xor ax,ax xor bx,bx @@do_blur: mov al,byte ptr [di-1] mov bl,byte ptr [di+1] add ax,bx mov bl,byte ptr [di-320] add ax,bx mov bl,byte ptr [di+320] add ax,bx shr ax,2 stosb or di,di jnz @@do_blur pop es pop ds ret endp ;------------------------------------------------------------ ; in: x1,y1,x2,y2,color ; out: none ;------------------------------------------------------------ draw_line proc @@x1 equ word ptr [bp+4] @@y1 equ word ptr [bp+6] @@x2 equ word ptr [bp+8] @@y2 equ word ptr [bp+10] @@color equ word ptr [bp+12] push bp mov bp,sp push es mov es,buffer_seg mov ax,@@x1 cmp ax,@@x2 je @@ver_line mov ax,@@y1 cmp ax,@@y2 je @@hor_line mov ax,@@x2 sub ax,@@x1 or ax,ax jge @@ok1 neg ax @@ok1: mov bx,@@y2 sub bx,@@y1 or bx,bx jge @@ok2 neg bx @@ok2: cmp ax,bx jb @@dy_bigger ; line is more horizontal mov ax,@@x1 cmp ax,@@x2 jl @@ok3 xchg ax,@@x2 mov @@x1,ax mov ax,@@y1 xchg ax,@@y2 mov @@y1,ax @@ok3: mov ax,@@y2 sub ax,@@y1 movsx eax,ax shl eax,SHIFT_CONST cdq mov bx,@@x2 sub bx,@@x1 movsx ebx,bx idiv ebx mov edx,eax ; edx - delta_y ; = ((y2-y1)<