;       non-hyperbolic
;       by lord Kelvin

	org 0x100		; .COM

	mov al,0x13		; \ MCGA
	int 0x10		; /
	push 0xA000		; \ es points to video memory segment
	pop es			; /
here:	inc bx			; to change colors
	dec cx			; cx = 65535, that is something near 320 * 200
scene:	mov ax,di		; \ ax = di / 320;
	xor dx,dx		; | dx = di % 320;
	mov bp,320		; |
	div bp			; /
	pusha			; \ This circle-checking procedure with integer
	add dx,127		; |  overflow produces rings
	imul ax,ax		; |
	imul dx,dx		; |
	add ax,dx		; |
	a equ 100		; |
	cmp ax,a*a		; |
	popa			; |
	jna there		; /
	imul dx 		; \ al = abs( ( ax * dx + bp ) / 4 % 32 - 16 ) + 32;
there:	add ax,bx		; |
	shr ax,2		; |
	and al,31		; |
	sub al,16		; |
	jge plus		; |
	neg al			; |
plus:	add al,32		; /
	stosb			; putpixel
	loop scene		; draw all the screen
	in al,0x60		; \ Continue while not esc.
	cmp al,1		; |
	jne here		; /
	ret			; exit