;--------------------- ; Spiral.asm - Author unknown. Flushes screen display down the drain. .model tiny .code public _Spiral start: call _Spiral mov ax,4C00h int 21h _Spiral proc far push ax bx cx dx es ds si di push cs pop ds mov ax,0B800h mov es,ax ;Set ES = Screen mov word ptr ds:[Spiral_Count],0Ch mov word ptr ds:[Starting_Point],0D0h Spiral_Loop: mov ax,ds:[Starting_Point] mov ds:[Step_Count],ax One_Step_Loop: mov word ptr ds:[Horiz_Line_Length],39h mov word ptr ds:[Vert_Line_Length],1 mov di,798h mov ax,ds:[Spiral_Count] mov ds:[Line_Count],ax Move_Horiz_Line_Left: mov cx,ds:[Horiz_Line_Length] dec cx push ds push es pop ds mov si,di add si,2 cld rep movsw pop ds mov cx,ds:[Vert_Line_Length] push ds push es pop ds mov si,di sub si,0A0h mov ax,0A2h cld Move_Vert_Line_Up: movsw sub di,ax sub si,ax loop Move_Vert_Line_Up Move_Horiz_Line_Right: pop ds mov cx,ds:[Horiz_Line_Length] push ds push es pop ds mov si,di sub si,2 std rep movsw pop ds mov cx,ds:[Vert_Line_Length] inc cx push ds push es pop ds mov si,di add si,0a0h mov ax,0A2h std Move_Vert_Line_Down: movsw add di,ax add si,ax loop Move_Vert_Line_Down pop ds add word ptr ds:[Horiz_Line_Length],2 add word ptr ds:[Vert_Line_Length],2 dec word ptr ds:[Line_Count] jnz Move_Horiz_Line_Left dec word ptr ds:[Step_Count] jz Done_One_Spiral jmp One_Step_Loop Done_One_Spiral: sub word ptr ds:[Starting_Point],8 dec word ptr ds:[Spiral_Count] jz Done_Spiral jmp Spiral_Loop Done_Spiral: pop di si ds es dx cx bx ax ret Starting_Point dw ? Spiral_Count dw ? Horiz_Line_Length dw ? Vert_Line_Length dw ? Step_Count dw ? Line_Count dw ? endp _Spiral end start