C   MODIFIED FOR CROMEMCO'S Z80 FORTRAN, 20/9/1978
C   MODIFIED FOR GNU FORTRAN 77, UM 08/09/2008
C   DOESN'T WORK WITH MICROSOFT FORTRAN
      DIMENSION NICT(16)
      COMMON/BOARD/JBOARD(120)
      COMMON/WHITE/MYPCE(16),MYTYPE(16),MYVAL(6),MYMEN,MYQN,MYKG
      COMMON/BLACK/ISPCE(16),ISTYPE(16),ISVAL(6),ISMEN,ISQN,ISKG
      COMMON/BAL/MATBAL,LEV
      COMMON/KEY/KEY(8),NUMB(8),MEN(6),IA,IB,ID,IR,IO,IW,ISTR,MINUS
      LR=5
      LP=6
      WRITE(LP,101)
  101 FORMAT(1X//1X,19HMIKES CHESS PROGRAM//)
      KECK=0
  149 WRITE(LP,150)
  150 FORMAT(1X,14HLEVEL 0 OR 1 ?)
      READ(LR,160)LEV
  160 FORMAT(I1)
      IF(LEV.LT.0)GO TO 149
      IF(LEV.GT.1)GO TO 149
      MOVE=0
      WRITE(LP,102)
  102 FORMAT(1X,42HCOMPUTER TO PLAY WHITE (0) OR BLACK (1) ? )
      READ(LR,103)KOLOR
  103 FORMAT(I1)
      WRITE(LP,104)
  104 FORMAT(1X)
      IF(KOLOR)20,20,11
   20 CALL HEUR(MOVE)
      CALL TREE(MOV,MATE)
      IF(KECK)30,30,31
   30 IF(MATE)15,15,37
   31 IF(MATE)34,34,33
   33 WRITE(LP,105)
  105 FORMAT(1X,4HMATE/1X,16H  YOU WERE LUCKY)
      GO TO 26
   34 WRITE(LP,104)
      GO TO 32
   15 WRITE(LP,104)
   32 CALL MYGO(LSQ,NSQ,KAPT,MOV,KASTLE,IPROM,KECK)
      WRITE(LP,46)MOVE
   46 FORMAT(1X,I2,2H. ,10HMY MOVE:- )
      IF(KASTLE)55,57,56
   55 WRITE(LP,106)
  106 FORMAT(1X,4HO-OO)
      GO TO 24
   56 WRITE(LP,107)
  107 FORMAT(1X,3HO-O)
      GO TO 24
   57 IF(KAPT)27,27,28
   27 LD=MINUS
      GO TO 29
   28 LD=ISTR
   29 LSQ=LSQ-21
      DO 41 IJ=1,8
      IF(LSQ.LT.10)GO TO 42
      LSQ=LSQ-10
   41 CONTINUE
   42 NSQ=NSQ-21
      DO 43 KJ=1,8
      IF(NSQ.LT.10)GO TO 44
      NSQ=NSQ-10
   43 CONTINUE
   44 IF(KOLOR)71,71,70
   70 IJ=9-IJ
      KJ=9-KJ
   71 WRITE(LP,45)KEY(LSQ),IJ,LD,KEY(NSQ),KJ
   45 FORMAT(1X,A1,I1,A1,A1,I1)
      IF(IPROM)24,24,23
   23 WRITE(LP,108)
  108 FORMAT(1X,24H  PAWN PROMOTES TO QUEEN)
   24 IF(KECK)35,35,36
   35 IF(MATE)37,8,8
   36 IF(MATE)38,39,39
   37 WRITE(LP,109)
  109 FORMAT(1X,11H  STALEMATE)
      GO TO 26
   38 WRITE(LP,110)
  110 FORMAT(1X,11H  CHECKMATE/1X,11H  THANK YOU)
      GO TO 26
   39 WRITE(LP,111)
  111 FORMAT(1X,7H  CHECK)
    8 CONTINUE
   11 WRITE(LP,47)
   47 FORMAT(3X,12HYOUR MOVE:- )
      READ(LR,48)L1,N1,IL,L2,N2
   48 FORMAT(5A1)
      KASTLE=0
      IF(L1.EQ.IB.AND.IL.EQ.IA.AND.L2.EQ.IR)GO TO 200
      IF(L1.EQ.ID.AND.IL.EQ.IA.AND.L2.EQ.IW)GO TO 300
      IF(L1.EQ.IO.AND.IL.EQ.IO)KASTLE=1
      IF(KASTLE.EQ.1.AND.L2.EQ.IO)KASTLE=-1
      IF(KASTLE)63,62,63
   62 DO 401 IJ=1,8
      IF(N1.EQ.NUMB(IJ))GO TO 402
  401 CONTINUE
      GO TO 11
  402 DO 403 KJ=1,8
      IF(N2.EQ.NUMB(KJ))GO TO 404
  403 CONTINUE
      GO TO 11
  404 IF(KOLOR)73,73,72
   72 IJ=9-IJ
      KJ=9-KJ
   73 DO 49 I=1,8
      IF(L1.EQ.KEY(I))GO TO 50
   49 CONTINUE
      GO TO 11
   50 LSQ=10*(IJ-1)+I+21
      DO 51 I=1,8
      IF(L2.EQ.KEY(I))GO TO 52
   51 CONTINUE
      GO TO 11
   52 NSQ=10*(KJ-1)+I+21
   63 CALL ISGO(LSQ,NSQ,ILLEG,KASTLE,ILLCAS,IPROM,KECK)
      IF(IPROM)19,19,18
   18 WRITE(LP,108)
   19 IF(KECK)10,10,9
    9 WRITE(LP,25)
   25 FORMAT(3X,5HCHECK)
   10 IF(ILLCAS)61,61,60
   60 WRITE(LP,112)
  112 FORMAT(1X,27H  ILLEGAL ATTEMPT TO CASTLE)
      GO TO 11
   61 IF(ILLEG)20,13,12
   12 WRITE(LP,113)
  113 FORMAT(1X,14H  ILLEGAL MOVE)
      GO TO 11
   13 WRITE(LP,114)
  114 FORMAT(1X,25H  ILLEGAL MOVE INTO CHECK)
      GO TO 11
  200 WRITE(LP,104)
      IDOT=0
      IF(KOLOR)201,201,202
  201 WRITE(LP,115)
  115 FORMAT(1X,33H           H  G  F  E  D  C  B  A)
      NUM=0
      KL=1
      GO TO 203
  202 WRITE(LP,116)
  116 FORMAT(1X,33H           A  B  C  D  E  F  G  H)
      NUM=9
      KL=-1
  203 DO 216 LINE=21,100,10
      NUM=NUM+KL
      IDOT=1-IDOT
      DO 214 I=1,8
      IPC=ISTR
      KOL=ISTR
      IDOT=IDOT+1
      IF(IDOT-2)218,217,217
  217 IDOT=0
      IPC=MINUS
      KOL=MINUS
  218 IF(KOLOR)223,223,224
  223 IP=LINE+9-I
      GO TO 225
  224 IP=LINE+I
  225 JBI=JBOARD(IP)
      DO 207 IT=1,6
      IF(JBI.EQ.MYVAL(IT))GO TO 208
      IF(JBI.EQ.ISVAL(IT))GO TO 209
  207 CONTINUE
      GO TO 212
  208 IF(KOLOR)211,211,210
  209 IF(KOLOR)210,210,211
  210 KOL=IB
      GO TO 219
  211 KOL=IW
  219 IPC=MEN(IT)
  212 NICT(2*I-1)=KOL
      NICT(2*I)=IPC
  214 CONTINUE
      WRITE(LP,213)NUM,NICT,NUM
  213 FORMAT(8X,I1,1X,8(1X,2A1),3X,I1)
  216 CONTINUE
      IF(KOLOR)220,220,221
  220 WRITE(LP,115)
      GO TO 222
  221 WRITE(LP,116)
  222 WRITE(LP,104)
      GO TO 11
  300 IF(MATBAL+15)301,302,302
  301 WRITE(LP,117)
  117 FORMAT(1X,21H  YES - O.K. ACCEPTED)
      GO TO 26
  302 IF(MATBAL-70)303,304,304
  303 WRITE(LP,118)
  118 FORMAT(1X,21H  NO - OFFER DECLINED)
      GO TO 11
  304 WRITE(LP,119)
  119 FORMAT(1X,20H  YOU MUST BE JOKING)
      GO TO 11
   26 CALL EXIT
      END
      BLOCKDATA
      COMMON/INCRE/INK(16)
      COMMON/BOARD/JBOARD(120)
      COMMON/WHITE/MYPCE(16),MYTYPE(16),MYVAL(6),MYMEN,MYQN,MYKG
      COMMON/BLACK/ISPCE(16),ISTYPE(16),ISVAL(6),ISMEN,ISQN,ISKG
      COMMON/FIELD/KFLD(100),KENT(100),KPRI(6),IJK(10)
      COMMON/KEY/KEY(8),NUMB(8),MEN(6),IA,IB,ID,IR,IO,IW,ISTR,MINUS
      COMMON/LARGE/JBIG,JVBIG
      COMMON/NGAME/NGAME,LIMIT
      COMMON/BAL/MATBAL,LEV
      DATA INK/-9,-11,9,11,1,10,-1,-10,8,12,19,21,-8,-12,-19,-21/
      DATA JBOARD/
     +       1111,1111,1111,1111,1111,1111,1111,1111,1111,1111
     +      ,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111
     +      ,1111,  50,  33,  35,  90, 900,  35,  33,  50,1111
     +      ,1111,  10,  10,  10,  10,  10,  10,  10,  10,1111
     +      ,1111,   0,   0,   0,   0,   0,   0,   0,   0,1111
     +      ,1111,   0,   0,   0,   0,   0,   0,   0,   0,1111
     +      ,1111,   0,   0,   0,   0,   0,   0,   0,   0,1111
     +      ,1111,   0,   0,   0,   0,   0,   0,   0,   0,1111
     +      ,1111, -10, -10, -10, -10, -10, -10, -10, -10,1111
     +      ,1111, -50, -33, -35, -90,-900, -35, -33, -50,1111
     +      ,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111
     +      ,1111,1111,1111,1111,1111,1111,1111,1111,1111,1111/
      DATA MYPCE/36,35,23,28,34,37,24,27,25,22,29,33,38,32,39,26/
      DATA MYTYPE/6, 6, 4, 4, 6, 6, 3, 3, 1, 2, 2, 6, 6, 6, 6, 5/
      DATA NUMB/2H1 ,2H2 ,2H3 ,2H4 ,2H5 ,2H6 ,2H7 ,2H8 /
      DATA MYMEN,MYQN,MYKG,MYVAL/16,1,1,90,50,35,33,900,10/
      DATA ISPCE/86,85,93,98,84,87,94,97,95,92,99,83,88,82,89,96/
      DATA ISTYPE/6, 6, 4, 4, 6, 6, 3, 3, 1, 2, 2, 6, 6, 6, 6, 5/
      DATA ISMEN,ISQN,ISKG,ISVAL/16,1,1,-90,-50,-35,-33,-900,-10/
      DATA KENT/
     +            0, 0, 0, 0, 0, 0, 0, 0, 0, 0
     +          , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
     +          , 0, 0, 1, 2, 3, 3, 2, 1, 0, 0
     +          , 0, 1, 3, 4, 5, 5, 4, 3, 1, 0
     +          , 0, 2, 4, 6, 7, 7, 6, 4, 2, 0
     +          , 0, 3, 5, 7, 8, 8, 7, 5, 3, 0
     +          , 0, 3, 5, 7, 8, 8, 7, 5, 3, 0
     +          , 0, 2, 4, 6, 7, 7, 6, 4, 2, 0
     +          , 0, 1, 3, 4, 5, 5, 4, 3, 1, 0
     +          , 0, 0, 1, 2, 3, 3, 2, 1, 0, 0/
      DATA KFLD/100*0/,KPRI/2,0,3,4,0,1/,IJK/10,8,2,7*0/
      DATA KEY/2HA ,2HB ,2HC ,2HD ,2HE ,2HF ,2HG ,2HH /
      DATA MEN/2HQ ,2HR ,2HB ,2HN ,2HK ,2HP /
      DATA IA/2HA /,IB/2HB /,ID/2HD /,IR/2HR /,IO/2HO /,IW/2HW /
     +,ISTR/2H: /,MINUS/2H- /
      DATA NGAME/0/,LIMIT/1090/,MATBAL/0/,JBIG/10000/,JVBIG/30000/
      END
      SUBROUTINE HEUR(MOVE)
      COMMON MOVES(100,4),MARK(100),NMOVE
      COMMON/BOARD/JBOARD(120)
      COMMON/WHITE/MYPCE(16),MYTYPE(16),MYVAL(6),MYMEN,MYQN,MYKG
      COMMON/BLACK/ISPCE(16),ISTYPE(16),ISVAL(6),ISMEN,ISQN,ISKG
      COMMON/FIELD/KFLD(100),KENT(100),KPRI(6),IJK(10)
      COMMON/LARGE/JBIG,JVBIG
      COMMON/NGAME/NGAME,LIMIT
      MOVE=MOVE+1
      IF(MOVE-9)8,7,44
    7 KPRI(5)=1
      KPRI(2)=2
      KPRI(6)=3
   44 IF(NGAME.EQ.1)GO TO 104
      MYTOT=0
      DO 100 I=1,MYMEN
      NJ=MYTYPE(I)
  100 MYTOT=MYTOT+MYVAL(NJ)
      IF(MYTOT-LIMIT)103,103,101
  101 ISTOT=0
      DO 102 I=1,ISMEN
      NJ=ISTYPE(I)
  102 ISTOT=ISTOT+ISVAL(NJ)
      IF(ISTOT+LIMIT)104,103,103
  103 NGAME=1
      KPRI(1)=1
      KPRI(2)=1
      KPRI(5)=4
      KPRI(6)=0
  104 DO 47 I=1,ISMEN
      IF(ISTYPE(I)-5)47,46,47
   46 KI=ISPCE(I)
      GO TO 48
   47 CONTINUE
   48 KFLD(KI)=99
      DO 71 KJ=1,10
      IF(KI.LE.10)GO TO 72
      KI=KI-10
   71 CONTINUE
   72 IPR=0
   73 IPR=IPR+1
      IF(IPR.GT.10)GO TO 8
      I=KI-IPR
      IF(I.LE.0)GO TO 75
      DO 74 L=1,10
      LP=10*(L-1)+I
   74 KFLD(LP)=IJK(IPR)
   75 I=KI+IPR
      IF(I.GT.10)GO TO 77
      DO 76 L=1,10
      LP=10*(L-1)+I
   76 KFLD(LP)=IJK(IPR)
   77 J=KJ-IPR
      IF(J.LE.0)GO TO 79
      DO 78 L=1,10
      LP=10*(J-1)+L
   78 KFLD(LP)=IJK(IPR)
   79 J=KJ+IPR
      IF(J.GT.10)GO TO 73
      DO 80 L=1,10
      LP=10*(J-1)+L
   80 KFLD(LP)=IJK(IPR)
      GO TO 73
    8 NMOVE=0
      CALL MYCAS
      MAN=0
    1 CALL WMOVE(MAN,JV,LSQ,NSQ,KON,IPT,IFN,KC,NX,IP,MORE,0)
      IF(MORE)3,3,2
    2 NMOVE=NMOVE+1
      MOVES(NMOVE,1)=JV
      MOVES(NMOVE,2)=LSQ
      MOVES(NMOVE,3)=NSQ
      MOVES(NMOVE,4)=KON
      JT=MYTYPE(MAN)
      MARK(NMOVE)=KPRI(JT)*(KENT(NSQ)-KENT(LSQ)+KFLD(NSQ)-KFLD(LSQ))
      IBON=0
      IF(JT-6)6,4,4
    4 IF(KON)35,19,35
   19 IF(NSQ-56)24,20,24
   20 IF(LSQ-36)22,21,22
   21 IBON=30
      IF(JBOARD(65).EQ.ISVAL(6).OR.JBOARD(67).EQ.ISVAL(6))IBON=5
      GO TO 5
   22 IF(LSQ-46)5,28,5
   24 IF(NSQ-55)29,25,29
   25 IF(LSQ-35)27,26,27
   26 IBON=20
      IF(JBOARD(64).EQ.ISVAL(6).OR.JBOARD(66).EQ.ISVAL(6))IBON=5
      GO TO 5
   27 IF(LSQ-45)5,28,5
   28 IBON=2
      GO TO 5
   29 IF(LSQ-32)30,31,30
   30 IF(LSQ-39)39,31,39
   31 IBON=-5
      GO TO 5
   39 IF(LSQ-35)52,51,52
   52 IF(LSQ-36)5,51,5
   51 IBON=10
      GO TO 5
   35 IF(MARK(NMOVE))36,37,37
   36 IBON=-5
      GO TO 38
   37 IBON=5
   38 IF(JBOARD(NSQ-10).EQ.MYVAL(6))IBON=IBON-10
      IF(JBOARD(NSQ+10).EQ.MYVAL(6))IBON=IBON-10
      GO TO 5
    6 IF(MOVE.GE.9)GO TO 40
      IF(JT.EQ.4.AND.(NSQ.EQ.42.OR.NSQ.EQ.49))IBON=-15
      IF(NSQ.EQ.45.AND.JBOARD(35).EQ.MYVAL(6))IBON=-50
      IF(NSQ.EQ.46.AND.JBOARD(36).EQ.MYVAL(6))IBON=-50
      IF(JT.EQ.3.AND.LSQ.EQ.27)IBON=IBON+2
      IF(JT.EQ.4.AND.LSQ.EQ.28)IBON=IBON+2
      GO TO 50
    5 IF(MOVE.LT.9)GO TO 50
   40 M2=0
   41 CALL WMOVE(M2,JV2,LSQ2,NSQ2,KON2,IPT2,IFN2,KC2,NX2,IP2,MOR2,0)
      IF(MOR2)45,45,42
   42 IBON=IBON+1
      GO TO 41
   45 IF(LSQ.EQ.44.AND.JBOARD(34).EQ.MYVAL(6))IBON=IBON+5
      IF(LSQ.EQ.47.AND.JBOARD(37).EQ.MYVAL(6))IBON=IBON+5
      IF(NGAME)50,50,105
  105 IF(JT.NE.6)GO TO 50
      IBON=IBON+10
      IF(NSQ-LSQ.EQ.20)IBON=IBON+5
   50 MARK(NMOVE)=MARK(NMOVE)+IBON
      GO TO 1
    3 DO 14 I=1,NMOVE
      JB=-JBIG
      DO 12 J=I,NMOVE
      IF(MARK(J)-JB)12,12,11
   11 IP=J
      JB=MARK(J)
   12 CONTINUE
      DO 13 K=1,4
      INTER=MOVES(I,K)
      MOVES(I,K)=MOVES(IP,K)
   13 MOVES(IP,K)=INTER
      MARK(IP)=MARK(I)
   14 CONTINUE
      RETURN
      END
      SUBROUTINE MYCAS
      COMMON MOVES(100,4),MARK(100),NMOVE
      COMMON/WHITE/MYPCE(16),MYTYPE(16),MYVAL(6),MYMEN,MYQN,MYKG
      COMMON/BOARD/JBOARD(120)
      IF(MYQN)10,10,1
    1 DO 3 I=23,25
      IF(JBOARD(I))10,3,10
    3 CONTINUE
      MAN=0
    4 CALL BMOVE(MAN,JV,LSQ,NSQ,KON,IPT,IFN,KC,NX,IP,MORE,0)
      IF(MORE)6,10,5
    5 IF(NSQ.GE.24.AND.NSQ.LE.26)MORE=0
      GO TO 4
    6 NMOVE=NMOVE+1
      MOVES(NMOVE,1)=-1
      MARK(NMOVE)=40
   10 IF(MYKG)20,20,11
   11 DO 12 I=27,28
      IF(JBOARD(I))20,12,20
   12 CONTINUE
      MAN=0
   13 CALL BMOVE(MAN,JV,LSQ,NSQ,KON,IPT,IFN,KC,NX,IP,MORE,0)
      IF(MORE)15,20,14
   14 IF(NSQ.GE.26.AND.NSQ.LE.28)MORE=0
      GO TO 13
   15 NMOVE=NMOVE+1
      MOVES(NMOVE,1)=0
      MARK(NMOVE)=90
   20 RETURN
      END
C   CREATE AND SEARCH MOVE TREE
      SUBROUTINE TREE(MOV,MATE)
      COMMON/WHITE/MYPCE(16),MYTYPE(16),MYVAL(6),MYMEN,MYQN,MYKG
      COMMON/BLACK/ISPCE(16),ISTYPE(16),ISVAL(6),ISMEN,ISQN,ISKG
      COMMON/BAL/MATBAL,LEV
      COMMON/LARGE/JBIG,JVBIG
      MATE=0
      IJ=1
      IK=1
C  ADJUST DEPTH TO SUIT COMPUTER SPEED
C  LEV=0 FOR SLOW COMPUTERS; LEV=1 FOR FASTER COMPUTERS
      MYKING=MYVAL(5)
      ISKING=ISVAL(5)
      JAB1=-JVBIG
      MOR1=1
      NM=0
   11 CALL FMOVE(JV1,LSQ1,NSQ1,KON1,NM,KAS,IP1,MOR1)
      IF(MOR1)10,10,41
   41 JAB2=JVBIG
      M2=0
   12 CALL BMOVE(M2,JV2,LSQ2,NSQ2,KON2,IPT2,IFN2,KC2,NX2,IP2,MOR2,0)
      IF(MOR2)8,9,42
   42 IF(KON2-MYKING)61,60,61
   60 MOR2=0
      IJ=M2
      GO TO 12
   61 JAB3=JAB1
      M3=0
   13 CALL WMOVE(M3,JV3,LSQ3,NSQ3,KON3,IPT3,IFN3,KC3,NX3,IP3,MOR3,0)
      IF(MOR3)6,7,43
   43 IF(KON3-ISKING)63,62,63
   62 MOR3=0
      IK=M3
      GO TO 13
   63 JAB4=JAB2
      M4=0
      IF(MATBAL-JAB4)21,22,22
   21 JAB4=MATBAL
   22 IF(JAB4.LE.JAB3)GO TO 5
   14 CALL BMOVE(M4,JV4,LSQ4,NSQ4,KON4,IPT4,IFN4,KC4,NX4,IP4,MOR4,1)
      IF(MOR4)4,5,44
   44 IF(KON4-MYKING)70,69,70
   69 JAB4=-JBIG
      GO TO 3
   70 JAB5=JAB3
      M5=0
      IF(MATBAL-JAB5)24,24,23
   23 JAB5=MATBAL
   24 IF(JAB5.GE.JAB4)GO TO 3
   15 CALL WMOVE(M5,JV5,LSQ5,NSQ5,KON5,IPT5,IFN5,KC5,NX5,IP5,MOR5,1)
      IF(MOR5)2,3,45
   45 IF(LEV)46,46,101
   46 IF(MATBAL-JAB5)26,26,120
  120 JAB5=MATBAL
      GO TO 26
  101 IF(KON5-ISKING)103,102,103
  102 JAB5=JBIG
      GO TO 26
  103 JAB6=JAB4
      M6=0
      IF(MATBAL-JAB6)104,105,105
  104 JAB6=MATBAL
  105 IF(JAB6.LE.JAB5)GO TO 26
  106 CALL BMOVE(M6,JV6,LSQ6,NSQ6,KON6,IPT6,IFN6,KC6,NX6,IP6,MOR6,1)
      IF(MOR6)25,26,107
  107 IF(KON6-MYKING)109,108,109
  108 JAB6=-JBIG
      GO TO 117
  109 JAB7=JAB5
      M7=0
      IF(MATBAL-JAB7)111,111,110
  110 JAB7=MATBAL
  111 IF(JAB7.GE.JAB6)GO TO 117
  112 CALL WMOVE(M7,JV7,LSQ7,NSQ7,KON7,IPT7,IFN7,KC7,NX7,IP7,MOR7,1)
      IF(MOR7)116,117,113
  113 IF(MATBAL-JAB7)115,115,114
  114 JAB7=MATBAL
  115 IF(JAB7.GE.JAB6)MOR7=0
      GO TO 112
  116 JAB6=JAB7
  117 IF(JAB6.LE.JAB5)MOR6=0
      GO TO 106
   25 JAB5=JAB6
   26 IF(JAB5.GE.JAB4)MOR5=0
      GO TO 15
    2 JAB4=JAB5
    3 IF(JAB4.LE.JAB3)MOR4=0
      GO TO 14
    4 JAB3=JAB4
      IK=M3
    5 IF(JAB3.GE.JAB2)MOR3=0
      GO TO 13
    6 JAB2=JAB3
      IJ=M2
    7 IN3=MYPCE(IK)
      IN4=MYTYPE(IK)
   33 IF(IK.EQ.1)GO TO 34
      IK1=IK-1
      MYPCE(IK)=MYPCE(IK1)
      MYTYPE(IK)=MYTYPE(IK1)
      IK=IK1
      GO TO 33
   34 MYPCE(1)=IN3
      MYTYPE(1)=IN4
      IF(JAB2.LE.JAB1)MOR2=0
      GO TO 12
    8 JAB1=JAB2
      MOV=NM
    9 IN1=ISPCE(IJ)
      IN2=ISTYPE(IJ)
   31 IF(IJ.EQ.1)GO TO 32
      IJ1=IJ-1
      ISPCE(IJ)=ISPCE(IJ1)
      ISTYPE(IJ)=ISTYPE(IJ1)
      IJ=IJ1
      GO TO 31
   32 ISPCE(1)=IN1
      ISTYPE(1)=IN2
      GO TO 11
   10 IF(JAB1.EQ.-JVBIG)MATE=1
      IF(JAB1.EQ.JVBIG)MATE=-1
      RETURN
      END
      SUBROUTINE FMOVE(JV,LSQ,NSQ,KON,NM,KASTLE,IPROM,MORE)
      COMMON MOVES(100,4),MARK(100),NMOVE
      COMMON/BOARD/JBOARD(120)
      COMMON/BAL/MATBAL,LEV
      COMMON/WHITE/MYPCE(16),MYTYPE(16),MYVAL(6),MYMEN,MYQN,MYKG
      IF(MORE)4,4,5
    5 IF(NM)2,2,1
    1 IF(KASTLE)28,29,27
   27 JBOARD(26)=MYVAL(5)
      JBOARD(27)=0
      JBOARD(28)=0
      JBOARD(29)=MYVAL(2)
      DO 30 I=1,MYMEN
      IF(MYPCE(I).EQ.28)MYPCE(I)=26
      IF(MYPCE(I).EQ.27)MYPCE(I)=29
   30 CONTINUE
      GO TO 2
   28 JBOARD(22)=MYVAL(2)
      JBOARD(24)=0
      JBOARD(25)=0
      JBOARD(26)=MYVAL(5)
      DO 31 I=1,MYMEN
      IF(MYPCE(I).EQ.24)MYPCE(I)=26
      IF(MYPCE(I).EQ.25)MYPCE(I)=22
   31 CONTINUE
      GO TO 2
   29 DO 23 MAN=1,MYMEN
      IF(MYPCE(MAN).EQ.NSQ)GO TO 24
   23 CONTINUE
   24 IF(IPROM)25,25,26
   26 MATBAL=MATBAL-MYVAL(1)+MYVAL(6)
      JV=MYVAL(6)
      MYTYPE(MAN)=6
   25 MYPCE(MAN)=LSQ
      JBOARD(LSQ)=JV
      JBOARD(NSQ)=KON
      MATBAL=MATBAL+KON
    2 NM=NM+1
      IF(NM-NMOVE)4,4,3
    3 MORE=-1
      GO TO 7
    4 IPROM=0
      KASTLE=0
      JV=MOVES(NM,1)
      IF(JV)10,9,8
    9 KASTLE=1
      JBOARD(26)=0
      JBOARD(27)=MYVAL(2)
      JBOARD(28)=MYVAL(5)
      JBOARD(29)=0
      DO 11 I=1,MYMEN
      IF(MYPCE(I).EQ.26)MYPCE(I)=28
      IF(MYPCE(I).EQ.29)MYPCE(I)=27
   11 CONTINUE
      GO TO 7
   10 KASTLE=-1
      JBOARD(22)=0
      JBOARD(24)=MYVAL(5)
      JBOARD(25)=MYVAL(2)
      JBOARD(26)=0
      DO 12 I=1,MYMEN
      IF(MYPCE(I).EQ.26)MYPCE(I)=24
      IF(MYPCE(I).EQ.22)MYPCE(I)=25
   12 CONTINUE
      GO TO 7
    8 LSQ=MOVES(NM,2)
      NSQ=MOVES(NM,3)
      KON=MOVES(NM,4)
      DO 33 MAN=1,MYMEN
      IF(MYPCE(MAN).EQ.LSQ)GO TO 34
   33 CONTINUE
   34 IF(MYTYPE(MAN)-6)6,21,21
   21 IF(NSQ-90)6,22,22
   22 MATBAL=MATBAL+MYVAL(1)-MYVAL(6)
      JV=MYVAL(1)
      MYTYPE(MAN)=1
      IPROM=1
    6 MYPCE(MAN)=NSQ
      JBOARD(LSQ)=0
      JBOARD(NSQ)=JV
      MATBAL=MATBAL-KON
    7 RETURN
      END
C   GENERATE A WHITE MOVE
      SUBROUTINE WMOVE(MAN,JV,LSQ,NSQ,KON,IPT,IFN,KC,NEXT,IP,MORE,KP)
      COMMON/WHITE/MYPCE(16),MYTYPE(16),MYVAL(6),MYMEN,MYQN,MYKG
      COMMON/BOARD/JBOARD(120)
      COMMON/BAL/MATBAL,LEV
      COMMON/INCRE/INK(16)
      IF(MAN)86,86,81
   86 IP=0
      MORE=1
      GO TO 82
   81 IF(IP)65,65,64
   64 MATBAL=MATBAL-MYVAL(1)+MYVAL(6)
      JV=MYVAL(6)
      MYTYPE(MAN)=6
      IP=0
   65 MYPCE(MAN)=LSQ
      JBOARD(LSQ)=JV
      JBOARD(NSQ)=KON
      MATBAL=MATBAL+KON
      IF(MORE)38,38,83
   83 IF(NEXT)16,24,29
   82 MAN=MAN+1
      IF(MAN-MYMEN)84,84,85
   85 MORE=-1
      GO TO 38
   84 LSQ=MYPCE(MAN)
      JV=JBOARD(LSQ)
      NAME=MYTYPE(MAN)
      IF(JV-MYVAL(NAME))82,7,82
    7 GO TO(41,8,9,17,18,40),NAME
C     QUEEN,ROOK OR BISHOP MOVE
   41 IPT=0
      IFN=8
      GO TO 12
    8 IPT=4
      IFN=8
      GO TO 12
    9 IPT=0
      IFN=4
   12 NEXT=-1
   10 IPT=IPT+1
      IF(IPT.GT.IFN)GO TO 82
      KC=INK(IPT)
      NSQ=LSQ
   11 NSQ=NSQ+KC
      KON=JBOARD(NSQ)
      IF(KON)37,36,10
   16 IF(KON)10,11,10
C     KING OR KNIGHT MOVE
   17 IPT=8
      IFN=16
      GO TO 19
   18 IPT=0
      IFN=8
   19 NEXT=0
   24 IPT=IPT+1
      IF(IPT.GT.IFN)GO TO 82
      NSQ=LSQ+INK(IPT)
      KON=JBOARD(NSQ)
      IF(KON)37,36,24
C     PAWN MOVE
   40 NEXT=1
      IPT=0
   29 IPT=IPT+1
      IF(IPT.GT.4)GO TO 82
      IF(IPT-2)27,31,30
   27 NSQ=LSQ+10
      KON=JBOARD(NSQ)
      IF(KON)28,43,28
   43 IF(NSQ-90)36,51,51
   28 IPT=2
      GO TO 29
   31 IF(LSQ-40)32,32,29
   32 NSQ=LSQ+20
      KON=JBOARD(NSQ)
      IF(KON)29,36,29
   30 NSQ=LSQ+INK(IPT)
      KON=JBOARD(NSQ)
      IF(KON)44,29,29
   44 IF(NSQ-90)37,51,51
   36 IF(KP)37,37,83
   51 MATBAL=MATBAL+MYVAL(1)-MYVAL(6)
      JV=MYVAL(1)
      MYTYPE(MAN)=1
      IP=1
   37 MYPCE(MAN)=NSQ
      JBOARD(LSQ)=0
      JBOARD(NSQ)=JV
      MATBAL=MATBAL-KON
   38 RETURN
      END
C   GENERATE A BLACK MOVE
      SUBROUTINE BMOVE(MAN,JV,LSQ,NSQ,KON,IPT,IFN,KC,NEXT,IP,MORE,KP)
      COMMON/BLACK/ISPCE(16),ISTYPE(16),ISVAL(6),ISMEN,ISQN,ISKG
      COMMON/BOARD/JBOARD(120)
      COMMON/BAL/MATBAL,LEV
      COMMON/INCRE/INK(16)
      IF(MAN)86,86,81
   86 IP=0
      MORE=1
      GO TO 82
   81 IF(IP)65,65,64
   64 MATBAL=MATBAL-ISVAL(1)+ISVAL(6)
      JV=ISVAL(6)
      ISTYPE(MAN)=6
      IP=0
   65 ISPCE(MAN)=LSQ
      JBOARD(LSQ)=JV
      JBOARD(NSQ)=KON
      MATBAL=MATBAL+KON
      IF(MORE)38,38,83
   83 IF(NEXT)16,24,29
   82 MAN=MAN+1
      IF(MAN-ISMEN)84,84,85
   85 MORE=-1
      GO TO 38
   84 LSQ=ISPCE(MAN)
      JV=JBOARD(LSQ)
      NAME=ISTYPE(MAN)
      IF(JV-ISVAL(NAME))82,7,82
    7 GO TO(41,8,9,17,18,40),NAME
C     QUEEN,ROOK OR BISHOP MOVE
   41 IPT=0
      IFN=8
      GO TO 12
    8 IPT=4
      IFN=8
      GO TO 12
    9 IPT=0
      IFN=4
   12 NEXT=-1
   10 IPT=IPT+1
      IF(IPT.GT.IFN)GO TO 82
      KC=INK(IPT)
      NSQ=LSQ
   11 NSQ=NSQ+KC
      KON=JBOARD(NSQ)
      IF(KON)10,36,15
   15 IF(KON-1000)37,10,10
   16 IF(KON)10,11,10
C     KING OR KNIGHT MOVE
   17 IPT=8
      IFN=16
      GO TO 19
   18 IPT=0
      IFN=8
   19 NEXT=0
   24 IPT=IPT+1
      IF(IPT.GT.IFN)GO TO 82
      NSQ=LSQ+INK(IPT)
      KON=JBOARD(NSQ)
      IF(KON)24,36,25
   25 IF(KON-1000)37,24,24
C     PAWN MOVE
   40 NEXT=1
      IPT=0
   29 IPT=IPT+1
      IF(IPT.GT.4)GO TO 82
      IF(IPT-2)27,31,30
   27 NSQ=LSQ-10
      KON=JBOARD(NSQ)
      IF(KON)28,43,28
   43 IF(NSQ-30)51,51,36
   28 IPT=2
      GO TO 29
   31 IF(LSQ-80)29,32,32
   32 NSQ=LSQ-20
      KON=JBOARD(NSQ)
      IF(KON)29,36,29
   30 NSQ=LSQ-INK(IPT)
      KON=JBOARD(NSQ)
      IF(KON)29,29,42
   42 IF(KON-1000)44,29,29
   44 IF(NSQ-30)51,51,37
   36 IF(KP)37,37,83
   51 MATBAL=MATBAL+ISVAL(1)-ISVAL(6)
      JV=ISVAL(1)
      ISTYPE(MAN)=1
      IP=1
   37 ISPCE(MAN)=NSQ
      JBOARD(LSQ)=0
      JBOARD(NSQ)=JV
      MATBAL=MATBAL-KON
   38 RETURN
      END
      SUBROUTINE MYGO(LSQ,NSQ,KAPT,MOV,KASTLE,IPROM,KECK)
      COMMON/WHITE/MYPCE(16),MYTYPE(16),MYVAL(6),MYMEN,MYQN,MYKG
      COMMON/BLACK/ISPCE(16),ISTYPE(16),ISVAL(6),ISMEN,ISQN,ISKG
      CALL FMOVE(JV,LSQ,NSQ,KON1,MOV,KASTLE,IPROM,0)
      KAPT=0
      KECK=0
      MAN=0
    1 CALL WMOVE(MAN,JV,LSQ2,NSQ2,KON2,IPT,IFN,KC,NX,IP,MORE,1)
      IF(MORE)3,3,2
    2 IF(KON2.EQ.ISVAL(5))KECK=1
      GO TO 1
    3 IF(KASTLE)12,13,12
   12 MYQN=0
      MYKG=0
      GO TO 11
   13 IF(LSQ.EQ.22)MYQN=0
      IF(LSQ.EQ.29)MYKG=0
      IF(LSQ-26)16,15,16
   15 MYQN=0
      MYKG=0
   16 IF(KON1)7,11,11
    7 IF(NSQ.EQ.92)ISQN=0
      IF(NSQ.EQ.99)ISKG=0
      IJ=0
      KAPT=1
      DO 10 I=1,ISMEN
      IJ=IJ+1
      IF(ISPCE(I)-NSQ)9,8,9
    8 IJ=IJ-1
      GO TO 10
    9 ISPCE(IJ)=ISPCE(I)
      ISTYPE(IJ)=ISTYPE(I)
   10 CONTINUE
      ISMEN=ISMEN-1
   11 RETURN
      END
      SUBROUTINE ISGO(LSQ,NSQ,ILLEG,KASTLE,ILLCAS,IPROM,KECK)
      COMMON/WHITE/MYPCE(16),MYTYPE(16),MYVAL(6),MYMEN,MYQN,MYKG
      COMMON/BLACK/ISPCE(16),ISTYPE(16),ISVAL(6),ISMEN,ISQN,ISKG
      KECK=0
      ILLEG=-1
      ILLCAS=0
      IF(KASTLE)20,23,20
   20 CALL ISCAS(KASTLE,ILLCAS)
      IF(ILLCAS)21,21,19
   21 ISQN=0
      ISKG=0
      GO TO 8
   23 M1=0
    1 CALL BMOVE(M1,JV1,LSQ1,NSQ1,KON1,IPT,IFN,KC,NX1,IPROM,MORE,0)
      IF(MORE)3,7,2
    2 IF(LSQ1.EQ.LSQ.AND.NSQ1.EQ.NSQ)GO TO 4
      GO TO 1
    3 ILLEG=1
      GO TO 19
    4 M2=0
    5 CALL WMOVE(M2,JV2,LSQ2,NSQ2,KON2,IPT,IFN,KC,NX2,IP2,MORE,1)
      IF(MORE)8,1,6
    6 IF(KON2.EQ.ISVAL(5))MORE=0
      GO TO 5
    7 ILLEG=0
      GO TO 19
    8 M2=0
    9 CALL BMOVE(M2,JV2,LSQ2,NSQ2,KON2,IPT,IFN,KC,NX2,IP2,MORE,1)
      IF(MORE)14,14,10
   10 IF(KON2.EQ.MYVAL(5))KECK=1
      GO TO 9
   14 IF(KASTLE)19,22,19
   22 IF(LSQ.EQ.92)ISQN=0
      IF(LSQ.EQ.99)ISKG=0
      IF(LSQ-96)25,24,25
   24 ISQN=0
      ISKG=0
   25 IF(KON1)19,19,15
   15 IF(NSQ.EQ.22)MYQN=0
      IF(NSQ.EQ.29)MYKG=0
      IJ=0
      DO 18 I=1,MYMEN
      IJ=IJ+1
      IF(MYPCE(I)-NSQ)17,16,17
   16 IJ=IJ-1
      GO TO 18
   17 MYPCE(IJ)=MYPCE(I)
      MYTYPE(IJ)=MYTYPE(I)
   18 CONTINUE
      MYMEN=MYMEN-1
   19 RETURN
      END
      SUBROUTINE ISCAS(KASTLE,ILLCAS)
      COMMON/BLACK/ISPCE(16),ISTYPE(16),ISVAL(6),ISMEN,ISQN,ISKG
      COMMON/BOARD/JBOARD(120)
      IF(KASTLE)1,20,10
    1 IF(ISQN)9,9,3
    3 DO 5 I=93,95
      IF(JBOARD(I))9,5,9
    5 CONTINUE
      MAN=0
    6 CALL WMOVE(MAN,JV,LSQ,NSQ,KON,IPT,IFN,KC,NX,IP,MORE,0)
      IF(MORE)30,9,7
    7 IF(NSQ.GE.94.AND.NSQ.LE.96)MORE=0
      GO TO 6
   30 JBOARD(92)=0
      JBOARD(94)=ISVAL(5)
      JBOARD(95)=ISVAL(2)
      JBOARD(96)=0
      DO 31 I=1,ISMEN
      IF(ISPCE(I).EQ.96)ISPCE(I)=94
      IF(ISPCE(I).EQ.92)ISPCE(I)=95
   31 CONTINUE
      GO TO 20
   10 IF(ISKG)9,9,11
   11 DO 13 I=97,98
      IF(JBOARD(I))9,13,9
   13 CONTINUE
      MAN=0
   14 CALL WMOVE(MAN,JV,LSQ,NSQ,KON,IPT,IFN,KC,NX,IP,MORE,0)
      IF(MORE)40,9,15
   15 IF(NSQ.GE.96.AND.NSQ.LE.98)MORE=0
      GO TO 14
   40 JBOARD(96)=0
      JBOARD(97)=ISVAL(2)
      JBOARD(98)=ISVAL(5)
      JBOARD(99)=0
      DO 41 I=1,ISMEN
      IF(ISPCE(I).EQ.96)ISPCE(I)=98
      IF(ISPCE(I).EQ.99)ISPCE(I)=97
   41 CONTINUE
      GO TO 20
    9 ILLCAS=1
   20 RETURN
      END
