Metropoli BBS
VIEWER: whirl.s MODE: TEXT (ASCII)
::
  CK0NOLASTWD
  RECLAIMDISP TURNMENUOFF
  CODE
WLIM+	EQU #040
WLIM-	EQU #020
WLIM0	EQU #008

	GOSBVL	=SAVPTR
	INTOFF
	GOSUB	Demo
	INTON
	GOVLNG	=GETPTRLOOP

Demo	GOSBVL	=clrbusy
	GOSBVL	=D0->Row1	->row1
	R1=A.F	A
	A=0	B
	R2=A.F	B
	R3=A.F	B
*********************************
* R1[A] ->display
* R2[B]
* R3[B]
*********************************
Whirl	GOSUB	TopUpRt
	GOSUB	DnRt
	GOSUB	BotDnLt
	GOSUB	StaLtUp
	GOSUB	Generate
	A=R2.F	B
	A=A+CON	B,11
	R2=A.F	B
	A=R3.F	B
	A=A+CON	B,11
	R3=A.F	B
	GOSUB	EndRtUp
	GOSUB	TopUpLt
	GOSUB	BegLtDn
	GOSUB	BotDnRt
	GOSUB	Generate
	A=R2.F	B
	A=A+CON	B,11
	R2=A.F	B
	A=R3.F	B
	A=A+CON	B,11
	R3=A.F	B
	GOSBVL	=chk_attn
	RTNC
	D0=(5)	=CRC
	A=DAT0	A
	LC(3)	WLIM+
	?A<C	X
	GOYES	+
	GOTO	Whirl
+	LC(3)	WLIM-
	?A>=C	X
	GOYES	Whirl-

Whirl+	GOSUB	TopUpRt
	GOSUB	DnRt
	GOSUB	BotDnLt
	GOSUB	StaLtUp
	GOSUB	Generate
	A=R2.F	B
	A=A+CON	B,9
	R2=A.F	B
	A=R3.F	B
	A=A+CON	B,9
	R3=A.F	B
	GOSBVL	=chk_attn
	RTNC
	D0=(5)	=CRC
	A=DAT0	A
	LC(3)	WLIM0
	?A>C	X
	GOYES	Whirl+
	GOTO	Whirl

Whirl-	GOSUB	EndRtUp
	GOSUB	TopUpLt
	GOSUB	BegLtDn
	GOSUB	BotDnRt
	GOSUB	Generate
	A=R2.F	B
	A=A+CON	B,9
	R2=A.F	B
	A=R3.F	B
	A=A+CON	B,9
	R3=A.F	B
	GOSBVL	=chk_attn
	RTNC
	D0=(5)	=CRC
	A=DAT0	X
	LC(3)	WLIM0
	?A>C	X
	GOYES	Whirl-
	GOTO	Whirl
*********************************
Generate
	D0=(5)	=CRC
	A=R1.F	A
	LC(5)	28*34+15
	A=A+C	A
	D1=A
	P=	16-8
-	A=DAT0	B
	C=DAT1	B
	CBIT=0	3
	?ABIT=0	3
	GOYES	+
	CBIT=1	3
+	CBIT=0	4
	?ABIT=0	4
	GOYES	+
	CBIT=1	4
+	DAT1=C	B
	D1=D1+	34
	P=P+1
	GONC	-
	AD1EX
	LC(5)	4*34
	A=A-C	A
	AD1EX
	P=	16-2
-	A=DAT0	B
	DAT1=A	B
	D0=D0-	34
	D1=D1-	34
	P=P+1
	GONC	-
	RTN
*********************************
* Move right R3 nibs down & right
*********************************
DnRt	A=R1.F	A
	LC(5)	34*64-3
	A=A+C	A
	C=0	A
	C=R3.F	P
	A=A-C	A
	D1=A
	LC(5)	34
	A=A-C	A
	D0=A
	LC(2)	64-2
	D=C	B
	C=R3.F	P
	P=C	0
-	C=DAT1	B
	A=DAT0	WP
	A=A+A	WP
	?CBIT=0	0
	GOYES	+
	A=A+1	B
+	DAT1=A	WP
	D0=D0-	34
	D1=D1-	34
	D=D-1	B
	GONC	-
	P=	0
	RTN
*********************************
* Move left R3 nibbles up & left
*********************************
StaLtUp	A=R1.F	A
	D1=A
	LC(5)	34
	A=A+C	A
	D0=A
	LC(2)	64-2
	D=C	B
	C=R3.F	P
	P=C	0
-	A=DAT0	WP
	C=DAT1	WP
	ASRB.F	WP
	C=C+C	WP
	GONC	+
	LCHEX	8
	A=A+C	P
+	DAT1=A	WP
	D0=D0+	34
	D1=D1+	34
	D=D-1	B
	GONC	-
	P=	0
	RTN
*********************************
* Shift R2 bot rows down & left
*********************************
BotDnLt	C=R2.F	B
	LA(2)	#1F
	C=C&A	B
	?C=0	B
	RTNYES
	C=C-1	B
	D=C	B
	A=R1.F	A	->display
	LC(5)	64*34-18
	A=A+C	A
	D1=A		->lastrow
	A=R1.F	A
	LC(5)	63*34-18
	A=A+C	A
	D0=A

-	A=DAT0	W
	D0=D0-	16
	C=DAT0	W
	D0=D0-	18
	CSRB
	?ABIT=0	0
	GOYES	+
	C=C+CON	S,8
+	ASRB
	DAT1=A	W
	D1=D1-	16
	DAT1=C	W
	D1=D1-	18
	D=D-1	B
	GONC	-
	RTN
*********************************
* Shift R2 top rows up & right
*********************************
TopUpRt	C=R2.F	B
	LA(2)	#1F
	C=C&A	B
	?C=0	B
	RTNYES
	C=C-1	B
	D=C	B
	A=R1.F	A
	D0=A		->row1
	LC(5)	34
	A=A+C	A
	D1=A		->row2
-	A=DAT1	W	word1
	D1=D1+	16
	C=DAT1	W	word2
	D1=D1+	18	->row3
	C=C+C	W	word2 << 1
	A=A+A	W
	GONC	+
	C=C+1	B
+	DAT0=A	W
	D0=D0+	16
	DAT0=C	W
	D0=D0+	18
	D=D-1	B
	GONC	-
	RTN
*********************************
* Move right R3 nibs up & right
*********************************
EndRtUp	A=R1.F	A
	LC(5)	34-3
	A=A+C	A
	C=0	A
	C=R3.F	P
	A=A-C	A
	D1=A
	LC(5)	34
	A=A+C	A
	D0=A
	LC(2)	64-2
	D=C	B
	C=R3.F	P
	P=C	0
-	C=DAT1	B
	A=DAT0	WP
	A=A+A	WP
	?CBIT=0	0
	GOYES	+
	A=A+1	B
+	DAT1=A	WP
	D0=D0+	34
	D1=D1+	34
	D=D-1	B
	GONC	-
	P=	0
	RTN
*********************************
* Move left R3 nibbles down & left
*********************************
BegLtDn	A=R1.F	A
	LC(5)	63*34
	A=A+C	A
	D1=A
	LC(5)	34
	A=A-C	A
	D0=A
	LC(2)	64-2
	D=C	B
	C=R3.F	P
	P=C	0
-	A=DAT0	WP
	C=DAT1	WP
	ASRB.F	WP
	C=C+C	WP
	GONC	+
	LCHEX	8
	A=A+C	P
+	DAT1=A	WP
	D0=D0-	34
	D1=D1-	34
	D=D-1	B
	GONC	-
	P=	0
	RTN
*********************************
* Shift R2 bot rows down & right
*********************************
BotDnRt	C=R2.F	B
	LA(2)	#1F
	C=C&A	B
	?C=0	B
	RTNYES
	C=C-1	B
	D=C	B
	A=R1.F	A	->display
	LC(5)	64*34-18
	A=A+C	A
	D1=A		->lastrow
	A=R1.F	A
	LC(5)	63*34-18
	A=A+C	A
	D0=A

-	A=DAT0	W
	D0=D0-	16
	C=DAT0	W
	D0=D0-	18
	A=A+A	W
	C=C+C	W
	GONC	+
	A=A+1	B
+	DAT1=A	W
	D1=D1-	16
	DAT1=C	W
	D1=D1-	18
	D=D-1	B
	GONC	-
	RTN
*********************************
* Shift R2 top rows up & left
*********************************
TopUpLt	C=R2.F	B
	LA(2)	#1F
	C=C&A	B
	?C=0	B
	RTNYES
	C=C-1	B
	D=C	B
	A=R1.F	A
	D1=A		->row1
	LC(5)	34
	A=A+C	A
	D0=A		->row2
-	A=DAT0	W
	D0=D0+	16
	C=DAT0	W
	D0=D0+	18
	ASRB
	?CBIT=0	0
	GOYES	+
	A=A+CON	S,8
+	CSRB
	DAT1=A	W
	D1=D1+	16
	DAT1=C	W
	D1=D1+	18
	D=D-1	B
	GONC	-
	RTN
*********************************
ENDCODE
;
[ RETURN TO DIRECTORY ]