;;;
;;;	ASCIIART
;;;

	CPU	MN1613

C_WSTART: EQU	X'0011'
C_CONOUT: EQU	X'0012'
C_CRLF:	EQU	X'001D'

	ORG	X'0800'

	L	R0,YMIN
	ST	R0,TY
YLOOP:
	L	R0,TY
	FLT	DR0,R0
	MVWI	X0,COEFB
	FM	DR0,(X0)
	ST	R0,TCB
	ST	R1,TCB+1

	L	R0,XMIN
	ST	R0,TX
XLOOP:
	L	R0,TX
	FLT	DR0,R0
	MVWI	X0,COEFA
	FM	DR0,(X0)
	ST	R0,TCA
	ST	R1,TCA+1
	ST	R0,TA
	ST	R1,TA+1
	L	R2,TCB
	ST	R2,TB
	L	R2,TCB+1
	ST	R2,TB+1

	CLR	R4		; I = 0
ILOOP:
	;; T = A * A
	L	R0,TA
	L	R1,TA+1
	MVWI	X0,TA
	FM	DR0,(X0)
	ST	R0,TT
	ST	R1,TT+1

	;; T = B * B - T
	L	R0,TB
	L	R1,TB+1
	MVWI	X0,TB
	FM	DR0,(X0)
	MVWI	X0,TT
	FS	DR0,(X0)
	ST	R0,0(X0)
	ST	R1,1(X0)

	;; T = CA - T
	L	R0,TCA
	L	R1,TCA+1
	FS	DR0,(X0)
	ST	R0,0(X0)
	ST	R1,1(X0)

	;; B = 2 * A * B + CB
	MVWI	R0,2
	FLT	DR0,R0
	MVWI	X0,TA
	FM	DR0,(X0)
	MVWI	X0,TB
	FM	DR0,(X0)
	MVWI	X0,TCB
	FA	DR0,(X0)
	ST	R0,TB
	ST	R1,TB+1

	;; A = T
	L	R0,TT
	L	R1,TT+1
	ST	R0,TA
	ST	R1,TA+1

	;; T = A * A
	MVWI	X0,TA
	L	R0,0(X0)
	L	R1,1(X0)
	FM	DR0,(X0)
	ST	R0,TT
	ST	R1,TT+1

	;;  (DR0) = B * B + T
	MVWI	X0,TB
	L	R0,0(X0)
	L	R1,1(X0)
	FM	DR0,(X0)
	MVWI	X0,TT
	FA	DR0,(X0)

	MVWI	X0,THRES
	FS	DR0,(X0),P
	B	NEXT

	MV	R0,R4
	MVI	R1,'0'
	A	R0,R1
	MVI	R1,'9'
	CB	R0,R1,LP
	B	SKIP
	MVI	R1,'A'-'9'-1
	A	R0,R1
SKIP:
	B	BREAK

NEXT:	
	AI	R4,1
	MVI	R0,15
	CB	R4,R0,LP
	B	ILOOP

	MVI	R0,' '
BREAK:	
	BAL	(C_CONOUT)

	L	R0,TX
	AI	R0,1
	ST	R0,TX
	L	R1,XMAX
	C	R0,R1,P
	B	XLOOP

	BAL	(C_CRLF)

	L	R0,TY
	AI	R0,1
	ST	R0,TY
	L	R1,YMAX
	C	R0,R1,P
	B	YLOOP

	B	(C_WSTART)

YMIN:	DC	-12
YMAX:	DC	12
XMIN:	DC	-39
XMAX:	DC	39

COEFA:	DC	0.0458
COEFB:	DC	0.08333
THRES:	DC	4.0

TX:	DS	1
TY:	DS	1
TA:	DS	2
TB:	DS	2
TCA:	DS	2
TCB:	DS	2
TT:	DS	2
