100 REM DERIVE SP-ID FROM CHESS960 POS 110 READ A$: IF A$="" THEN END 120 PRINT A$":"; 130 GOSUB 170 140 PRINT SP 150 GOTO 110 160 DATA QNRBBNKR, RNBQKBNR, RQNBBKRN, RNQBBKRN, 170 IF LEN(A$)=8 THEN 190 180 PRINT "ARRAY MUST BE 8 PIECES.": SP=-1: RETURN 190 K=0:Q=0:B=0:N=0:R=0 200 FOR I=0 TO 7 210 : K(I)=0:Q(I)=0:B(I)=0:N(I)=0:R(I)=0 220 NEXT I 230 FOR I=1 TO 8 240 : P$=MID$(A$,I,1) 250 : IF P$="Q" THEN Q(Q)=I: Q=Q+1: GOTO 310 260 : IF P$="K" THEN K(K)=I: K=K+1: GOTO 310 270 : IF P$="B" THEN B(B)=I: B=B+1: GOTO 310 280 : IF P$="N" THEN N(N)=I: N=N+1: GOTO 310 290 : IF P$="R" THEN R(R)=I: R=R+1: GOTO 310 300 : PRINT "ILLEGAL PIECE '"P$"'.": SP=-1: RETURN 310 NEXT I 320 IF K<>1 THEN PRINT "THERE MUST BE EXACTLY ONE KING.": SP=-1: RETURN 330 IF Q<>1 THEN PRINT "THERE MUST BE EXACTLY ONE QUEEN.": SP=-1: RETURN 340 IF B<>2 THEN PRINT "THERE MUST BE EXACTLY TWO BISHOPS.": SP=-1: RETURN 350 IF N<>2 THEN PRINT "THERE MUST BE EXACTLY TWO KNIGHTS.": SP=-1: RETURN 360 IF R<>2 THEN PRINT "THERE MUST BE EXACTLY TWO ROOKS.": SP=-1: RETURN 370 IF (K(0) > R(0)) AND (K(0) < R(1)) THEN 390 380 PRINT "KING MUST BE BETWEEN THE ROOKS.": SP=-1: RETURN 390 IF (B(0) AND 1) <> (B(1) AND 1) THEN 410 400 PRINT "BISHOPS MUST BE ON OPPOSITE COLORS.": SP=-1: RETURN 410 FOR I=0 TO 1 420 : N=N(I) 430 : IF N(I)>Q(I) THEN N=N-1 440 : FOR J=0 TO 1 450 : IF N(I)>B(J) THEN N=N-1 460 : NEXT J 470 : N(I)=N 480 NEXT I 490 N0=1: N1=2 500 FOR N=0 TO 9 510 : IF N0=N(0) AND N1=N(1) THEN 550 520 : N1=N1+1 530 : IF N1>5 THEN N0=N0+1: N1=N0+1 540 NEXT N 550 Q=Q(0)-1 560 FOR I=0 TO 1 570 : IF Q(0)>B(I) THEN Q=Q-1 580 NEXT I 590 FOR I=0 TO 1 600 : B=B(I)-1 610 : IF B AND 1 THEN L=INT(B/2) 620 : IF (B AND 1)=0 THEN D=B/2 630 NEXT I 640 SP = 96*N+16*Q+4*D+L 650 RETURN