CLS
DIM B(3):DIM BK(3)
DIM D(16):DIM V(16)
*NEWGM
D(0)= &B110000000011
D(1)= &B110000000011
D(2)= &B110000000011
D(3)= &B110000000011
D(4)= &B110000000011
D(5)= &B110000000011
D(6)= &B110000000011
D(7)= &B110000000011
D(8)= &B110000000011
D(9)= &B110000000011
D(10)= &B110000000011
D(11)= &B110000000011
D(12)= &B110000000011
D(13)= &B110000000011
D(14)= &B111111111111
D(15)= &B111111111111
GOSUB *BORN
CNTD=0:LVL=10
*MAIN
CX=X:CY=Y
IF SW AND 2 THEN CNTD=LVL
IF SW AND 4 THEN
CX=CX-1:GOSUB *HITCK
IF HIT=0 THEN X=CX
ENDIF
IF SW AND 8 THEN
CX=CX+1:GOSUB *HITCK
IF HIT=0 THEN X=CX
ENDIF
IF SW AND 16 THEN
GOSUB *TURN
GOSUB *HITCK
IF HIT THEN
FOR H=0 TO 2
B(H)=BK(H)
NEXT
ENDIF
ENDIF
CNTD=CNTD+1
IF CNTD > LVL THEN
CNTD=0
CX=X:CY=CY+1
GOSUB *HITCK
IF HIT THEN
GOSUB *FIX
IF D(0) AND &H3FC THEN GOTO *NEWGM
ELSE
Y=CY
ENDIF
ENDIF
FOR H=0 TO 15
V(H)=D(H)
NEXT
FOR I=0 TO 2
V(I+Y)=B(I) << X OR V(I+Y)
NEXT
FOR H=0 TO 15
FOR I=0 TO 11
IF 1<<I AND V(H) THEN
PSET I,H,1
ELSE
PSET I,H,0
ENDIF
NEXT
NEXT
GOTO *MAIN
*TURN
FOR H=0 TO 2
BK(H)=B(H):B(H)=0
NEXT
FOR H=0 TO 2
FOR H2=0 TO 2
B(H)=B(H) << 1
MSK=BK(H2) >> H AND 1
B(H)=B(H) OR MSK
NEXT
NEXT
RETURN
*HITCK
HIT=0
FOR H=0 TO 2
MSK=B(H)<<CX AND D(H+CY)
HIT=HIT OR MSK
NEXT
RETURN
*FIX
FOR H=0 TO 2
D(H+Y)=B(H)<<X OR D(H+Y)
NEXT
FOR H=0 TO 13
IF D(H)=&HFFF THEN
FOR I=H TO 1 STEP -1
D(I)=D(I-1)
NEXT
D(0)= &HC03
IF LVL>0 THEN LVL=LVL-1
ENDIF
NEXT
GOSUB *BORN
RETURN
*BORN
I=RND % 7
IF I=0 THEN
B(0)=&B010
B(1)=&B010
B(2)=&B010
ENDIF
IF I=1 THEN
B(0)=&B010
B(1)=&B010
B(2)=&B110
ENDIF
IF I=2 THEN
B(0)=&B010
B(1)=&B010
B(2)=&B011
ENDIF
IF I=3 THEN
B(0)=&B000
B(1)=&B111
B(2)=&B010
ENDIF
IF I=4 THEN
B(0)=&B110
B(1)=&B011
B(2)=&B000
ENDIF
IF I=5 THEN
B(0)=&B011
B(1)=&B110
B(2)=&B000
ENDIF
IF I=6 THEN
B(0)=&B110
B(1)=&B110
B(2)=&B000
ENDIF
I=RND % 4
WHILE(I>0)
GOSUB *TURN
I=I-1
WEND
X=5:Y=0
RETURN
