IMD 1.15: 16/05/2007 8:03:06 fog gam 002         *+8f"""go"22!"{?No Start Addres?Loading Erro?Fatal Table Collisio!@o!Ou!2*22ͤr,  /rM­G@RSUE =O2Hr2G:2:>`r,xrrÏ"z2ļ2!~wJJ:ʗ~wY:Äʹ YYyȷYͺ y~@Y"Y͊Y*~ ‰::ʬ͘G@•x xԘÝ?Command Erro~9#~#  ` +!~G#~ kCHESS COML CHESS DOC TTT ASMDTTT COM-FOG/GAM002CHESS FORH !"#$%&'()*DISK DOC+  '!~ '6R#6E#6Ly$K[O0OAK:O/O:o|~_q#Vpa- := >8:=ʈ>ͺ ڿ/o/g ~@wq+p*}| ""* "6DM+!  >/9[9">2<7*"`~W+++~9+ %2nd COMMON Larger * ""> Åz"ɯͺ ~@† ~@w+:i ~_q+e:=b >86+p+q+6+r+s!  `%Mult. Def. Globalůͺ ~++ #N+F@ : x PYOG |}|: #q+p:\-<7|*>]9`FORLIB RE ,x*:9*!w#Kͺ i~@i+^+V"!x !o?Start symbol - - undefine72**6~G~@#/2:`#~> >/9+^+V+~9/9~@>*297<~ X - >8:= >w+r+s+6+r+s:=Q 2͈ |Q : ^#VV E z :=2͈ : ~s#_~rWV f :=* DM*"!~#4  6+w͑ xG © ɯ2͑ ͥ 7ͧ $ ͧ   ͧ $  ͧ !w 47+^+V<7:?2`~*<</O à|}:a)09) P09M|f}Gqx0:|9`͊Ägo"2"*"*"""{_zW{_#"">22"oʹ m!U ~#foBK:2#:=#6 _ ͥ w# ! "O<2ͥ Xͥ PG O! N#F :S  ff L ff, Ru C > :ʆ > *">ͺ f+^+V":2=:* **|G} ~O  A+++ + ~ y5*|}"*|&} op#p#*|CMH}M"*|[)`})*DM ͥ ):ʟ:=“>8͆w+p+q#B++ss#r#,:7>»C?@2,x  > 6 #=y.,x/O ÿ Ow+w+w+w+  . w+w+"7Ɏ  :ȯ2**"6] ܠ **|l }~ _a +!6 ^#V+++a V+^+*ڝ N#F r+sV+^++F+N+"* 2: ~s#_~rWV V+^++F+N+"՟2: : r+s^x+#$~`>*9 j> 9:k!lo>g6 > _!Po?File Not Foun> 9> 9P/e SS,A:FORLIB/S >2!w#!w!2:_<2!~  ,19HMIKES CHESS PROGRAM//)(1X,14HLEVEL 0 OR 1 ?)(I1)FCD(1X,42HCOMPUTER TO PLAY WHITE (0) OR BLACK (1) ? )04(I1)(1X)C0F7(1X,4HMATE/1X,16H YOU WERE LUCKY)!!u(1X,I2,2H. ,10HMY MOVE:- )(1X,4HO-OO)(1X,3HO-O)!$A "(1X,A1,I1,A1,A1,I1)(DM*`i"**6l|&} *6 /O* "*6Z* DMͥ :=yoxg":=|*!"oš*{OzGDM7'e'e'e$DCOF88fn REL.*+,-./-'eoo'e'eHo[1X,24H PAWN PROMOTES TO QUEEN)(1X,11H STALEMATE)(1X,11H CHECKMATE/1X,11H THANK YOU)(1X,7H CHECK)(3X,12HYOUR MOVE:- )$I$D{}(5A1)UUU@$(3X,5HCHECK)(1X,27H ILLEGAL ATTEMPT TO CASTLE)(1X,14H ILLEGAL MOVE)(1X,25H ILLEGAL MOVE INT0 S ^#V#! ))))oͅ  s#r#!34ͅ !36# } ,V >23Y  - } ͅ  - } ͅ  - S 3S !kXN!~͋ ʦ Þ !f_^!ͩ ^#V~o x ͛ ͞ >=o !~ͭ ͺ ![ͽ #x O CHECK)"H(1X,33H H G F E D C B A)D!(1X,33H A B C D E F G H)"!(8X,I1,1X,8(1X,2A1),3X,I1)(1X,21H YES - O.K. ACCEPTED)(1X,21H NO - OFFER DECLINED)(1X,20H YOU MUST BE JOKING)!"!"!.Q'X!"!WWWWWWWWWWWWWWWWWWWWW2!#Z#!2WW WWWWWWWWWWWW|WWWWWWWWWWWWWWWWWWWWW$#"%.Q'X2!+Q!>ͽP'X*}26*+}=26!"79!.Q'Xm!+Qk!>ͽP'Xq!.Q'X*k}/<!7#w!u51*}/<*w}/<*w}/<y!.Q'XØq!.Q'Xq!.Q'X!DH!!& 'Z2#! VU]bTW^a_\cSXRY`|A B C D E F G H 1 2 3 4 5 6 7 8 Q R B N K P A B D R O W : - <7*%|!$N*!>#(1X//1X.Q7!>ͽP'X*}?0!.Q'X^!.Q'X^*}/>i*"!"*}26*"*#>>*k}/<! *{ozg"! *{oz#VV Fr#Nsp+qF+N++V+^+* DM~_q+Vp~_q#. :H DM* *{OzG**c ##|j }ʔ #ya #xb #~c :c ~@w"2}7>2*DM*^*6" z¼ {¼ `i"**6l**DM*^6{OzG* "   *~#fo{ozg}26Y*j)"*h*~#fo{ozg}26j*j#>>Ö*k}/>vn!.Q3!>ͽP!>ͽP3!>ͽP'X*`{ozg}2*y*{ozg}!!62**{ozg}26*}*{ozg}2*y*{ozg}!!62E*}*{ozg}26*y*{ozg}!62!"**{ozg}26*+}!62! >d>U*k}/<* !.Q'X67!.Q'Xq!.Q'Xô*"}g!.Q'XØ*"}!.Q'Xô!.Q'Xô e e   "*}u!"*)"*{*~#fo{ozg}26S*#>>ô!"*)"**~#fo{ozg}26•*#>>Vô*k}/<! *{ozg"! *{ozg"!"*)"*y*~#fo{ozg}26*#>>ô*+! ͢P*"!"*)"**~#fo{ozg}26^*#>>ô*+! ͢P*"!J*}/<!.Q'X*}/<!.Q'X*}/<!.Q'Xô*}!.Q'Xô!.Q'Xô '0uB222og"%"'k 2~ OG:¯ 2'<2>2y._!:!y'2=2>2:%r :y+l -l xa yZX* 'q!.Q'X!"*k}/<: !.Q'X!"3!"5R7!.Q'X! "3!"5!"`*5*3"3!*{ozg"!"*"b*"d*#"++"}!"*"b*"d*k}/<*` *{ozg"f*`*"f*f)~#fo"h!"j*j)."*h' *|* *"2<2<2a 2o!6yI; O; 5>2!yh w+F $F >2SA:u2%Ï:%2E2oa !6:“!'4A#} :E02#ғ#>2Óx@":EE D >2!:[h>2>2"- "+": 2o: g"!.Q*)"*!>ͽP*)"*!>ͽP'X*}/<^!.Q'X*}/<{*w}ô*w}è!.Q'XØ2!.Q'XØW!.Q'Xe!.Q'X!+Qy!>ͽP'X!"**{ozg}26*}*  "h#*w#)\~#fo*h#s#r*y##> >%*w#*s#"m#}=2j#‡&!"y#*y#+! ͢P*m#"{#*{#)"h#*w#)\~#fo*h#s#r*y##> >F&*u#*w#{ozg"}#}=Ɓ2j#&!"y#*}#+! ͢P*y#"{#*{#)"h#*w#)\~#fo*h#s#r*y##> >&*w#*u#"}#}-d md !&4 !(~  w:E0 w":&!(~I"/2':|"!'5 #2#h"!(~""5#+A###!'>wh" 4#+A##+A>P##=¶"###h"} >2#">2!'4 !ͣ :%-?:o=2j#¢%!"y#*}#+! ͢P*y#"{#*{#)"h#*w#)\~#fo*h#s#r*y##> >'â%!"c#`.!"###!#<*#}/<-*c##"c#)"h#y"#*#*#s#r*h#A "#*#*#s#r*h# !"#*#*#s#r*h#!"#*#*#s#r*#)~#fo"#*h#""#*#)P"#*#)"#:'g"L!k L!!~w+#!w#(#!~w#8#+A2#2##2#!~w+X# R#&:dҀ#:ao-'2"I*]"2"#########.#&̓#z:E=#2+Ago"I#:q@'#########.!4"f#*f#~#f"#*#)"#"#*#"#*#~#fo*#~#fo{ozg*#~#fo*#~#fo{ozg*#~#fo͢Pog*#s#r!"#*#"#}**#})*#"h#})*#"h#}(!"#**{ozg}2j#**{ozg}!j#2#(!"#+*#o#*f#s#r"h#}S'/$!"Z!"T!"\*v+}2j#%!"k#!"m#*m#)~#fo"o#*o#).~#fo*k#"k#*m##*<{zL$*k#*x{ozg"h#}/<$!"q#!"m#*m#)`~#fo"o#*o#)~#fo*q#"q#*m##*{z$*q#*x"h#}%!"v!"R!""h#}ʒ)+*#"h#}›)*#"h#})!"#**{ozg}2j#*~*{ozg}!j#2#|)!"#+*#"h#}+!"#+*#"h#})*#"h#})!"#+*#"h#})*#"h#}+! "#+*c#)"T!"Z!"\!"m#*m#)`~#fo"h#}B%*m#)@~#fo"s#R%*m##*{z%*s#)"h#!c*h#s#r!"u#*s#}=Ɓ2j#œ%*s#"s#*u##> >j%!"w#*w##"w#}=2j#S'*s#*w#{ozg"m#}=Ɓ2j##&!"y#*y#+! ͢P*m#"{#*{#)"h#*h#~#fo}*!"##*!"#*#)~#fo*:{ozg}2j#S**#"#*#)~#fo*:{ozg}2j#ʃ**#"#+*f#~#fo}?2j#+*#}2j#*#}!j#2#*#}!#2#*!"#*D*:{ozg}Q . > 22>2*|* *} *| ":%-*A":a d 2o͆Ad ~ @">2:´ <2o:ENY!>,!v# ʼ!!{# >22>2=2<2a .ʩ! x!yH´ 2>2=2*|* *} *| ":%  !`e 000/0 0/|00*|30:F0 0"0$0&0(0*0,0.07 2<9`00=–0:L0N0P0R0T0V0X0Z0\07aB:23‡0͘Tͯ͡.qT*:y0{0}00000007aO!a:Gw#°0000000007|:0aB͘T!J20000000007!y2Ͳ9`/<,*##"#+*B*:{ozg}2j#*#}!j#2#P,*#"#*H*:{ozg}2j#*#}!j#2#ʎ,*#"#*v}/<,*#}2j#,*# "#*#*#{ozg}2j#,*#"#*c#)""h#~#fo*#*h#$11:a001111 1 1 171͘T!2Ͳ269`"/"/!*/s#r!"/!"/*8"/*"/*tog"/!"/!"/ 00!037*/}/<6*t"0!"0000!0DB*.0}&666*"0*/{ozg"D0}1!".0*0"/Ü1*/"F0!"H0^0J0!H0<*\0}s#rb'!"m#*rog"#*m#"}#*}#)"~#fo*#{ozg"h#}/>j-*#)""h#*m#)"~#fo*hc5o5*P0*/{ozg"D0}.2!"\0*H0"/1*0"r0!"t0**r0{ozg"D0}Y2*"r0*r0*F0{ozg}=Ɓ2v0=50w0!t0DB*0}15=5*}0*/{ozg"D0}º2*rog"r0 5*F0"0!"0**0{ozg"D0}/<2*"0*0*r0{ozg}?2v0#s#r*m##*c#{z - Name ExpecteIllegal Argum .".$.&.(.*.,...0./qT: .".$.&.(.*.,...0./*>}/<%/!".*.)".*.~#fo}%/*.#>>q.!".2..!.DB*0.}.%/*".}=Ɓ2F.*".}?!F.2G..!"0.â.*c##"c#)". 500!0<*0}5 5*}/>6/!".L..!.DB*0.}//*".}=Ɓ2F.*".}?!F.2G.ʷ/!"0.g/*c##"c#)".y"H.!*H.s#r*.""J.!Z*J.s#r0/ *aB*w0"0!"0**0{ozg"D0}/<,4*"0*0*0{ozg}?2v0±410!0<* 1}4ʱ4**0{ozg"D0}/<4*"0*0*0{ozg}?2v0ʨ4!" 1I4*0"0*0*0{ozg}=Ɓ2v04!"0ü3*0"0*0*r0{ozg}?2v05!"2j#*#}!j#2#&+!"#*F*:{ozg}2j#*#}!j#2#`+!"#*#}2j#*#+++}!j#2#ʕ+*###"#*#}2j#*#}!j#2#+*###"#,*f#~#fo}2j#,!"###!#<*#}  :N;!*"7s#r!"2*2"4*8"6!"8!"(7*(7)~#fo}2*7a:*(7)"+7!*+7s#r*(7)~#fo}2*7ʖ:*(7)"+7!*+7s#r*(7#*<{z):ç!7^*&7~#fo}/<9* 7~#fo}/<9*"7~#fo}8ʯ8*8"2!"4!"6*2"8!"(7*(7)~#fo}2*77*(7)"+7!*+7s#r*(7)~#fo}2*78*(7)"+7!*+7s#D<*0*:{ozg*"*0*7s#r*-7)"+7!*+7s#r!*$7s#r*-7)"+7*7~#fo*+7s#r*7~#fo)"/7!*/7s#r*7~#fo)"17*7~#fo*17s#r**7~#fo{ozg"!"3!43:/3<~<="<"<> !<^*<~#fo}/<=!*!*>>{?? @!*!*!* !'B^*#B~#fo}/<|B!*5Bs#r!*7Bs#r^C*5B~#fo}/|A#fo*=Bs#r*)B~#fo)"?B*+B~#fo*?Bs#r**+B~#fo"*7B~#fo}/gOJ>}AA:3B>oAHHHHHHHH!HMJ>TA>]A>"G"G>!G^*G"H*G"H*G" H*G" HH*G!G37!*Gs#r!*Gs#r!"H#HG!H<*!H}/!"@LJ*G~#fo=2<=*<~#fo)~#fo**<~#fo}0?>!*_>#N!"MMM!M<*M}NrP*M}=Ɓ2M*M}?!M2MʤN!"MTN!"*"*"!"!"M*M)@~#fo}2MN*M)@"M!^*Ms#r*M)@">H*Hs#r*8H`"BH*@H`~#fo*BHs#r*!VJ^!*^Js#r!*VJs#r!*ZJs#r*XJ~#fo~#fo}2M/O*M)@"M!_*Ms#r*M#*{zN|P*}/b>SO!"MMM!M<*M}OrP*M}=Ɓ2M*M}?!M2MO!"MÄO!"*"*"!"!"M*M)@~#f}4K*ZJ*XJM*ZJ~#fo}/))ҸP =°P>P>P>P>2f0^D^~#fo"eD^"+e*e"/e:#fPeRPdZM!"JJJ!JDB*rJ}/*TJ~#fo}P{c>2f2f<2eDQ>2f3Q2f<3Q>2f2f2e~#fo"$f!Se"2e~#+RQ!"e:fjQgo"e"e"eØQ!e>^*e~#€Qgo"e*e~#ŽQgo"e*e~#fo"e2f2!f2#f2f2fgo"e"/e*e|QZ*e"f(2Z{c25e24e<2#f:f>W̓]UQi[wQ:Me/<RRi[=Q2JM!"@!"J!"J*J#"J*J)~#fo*TJ~#fo{ozg"J}SM*J+"JÓM*J)"J"J*J)"J~#fo*Js#r*J"J*J~#fo*Js#r*J#*<{zM*<+"<K*"-ëM!N:C=BNݼMMMMMMMMM}PռMMMMMMMMM}P"M"M*2Me:fʄ\/ ʄ\i[=R̓]:Me3R3R $Y='R2Me:fER>i[=>R:fG$Yi[ER!f0fw# [R:fʋR:5eO:4e2)f*2e *+eͩRy25e"+e:4eO>2)f*+e*2e ͩRy24eÇR:fG:)f=R:fR:)f24e>W*2eéR>W:4e2)f*2eéRw# ­R*/e+"/e|©R}27HI!">*G~#fo}27H7I!"@*G~#fo"8H}ZI!">!"@*H}LJ*G~#fo}27HʇI!"*G~#fo}27HʨI!"!":H!*Gs#r!"W! f~YXx8NXG@G͑[>XdX~[YXx|“XzXƒXŒXejSXÓXÓXch|X{_zW}o|gÔX"f"fx!Je5X:f*$Y!f50$Y*PeF#"Pe$Y!e~!f!Je2fXY2Je/Y:f-$Y!Oe]{0G$Y}0G$Y:f.Vͬ\:LeG!Me:fw3TS2Oe:Le2Je:MeLT2Oe!JewX:Me/vT*f"f!"fͱX!Me4fT*f"fͱXvT:f.Vͬ\:Me}S!Le/<}Sw!e~w2e!f~w<2fT2f2f>2e $YþT*e*eDM*fDU+|T"f"eÙ[*e*eF$Y*e#5 Y.$YͱXX{c $Y!f5YX:4e!5e?Y^4*2ep!e5CY{c:f:fʙ[HZ!f~4aY{c *f"f*f"fÙ[!"e*e*e:fʧY~'ʘYDUw#ÅY#~'ʋY"eÙ[~'ʾYG$Y*e#"e#çY*e#"e#~'ʭYÙ[:f=Y!!f4*f"eUZ2f™[*f+"f|ʙ[*f"e!f"e*f+"f|#TÙ[!e:5eO5:U:4e?U?U*2e ~ 2"f!5eq>1U> 1UUMU !e4DU:eI”U:LegU{c!fxU{c}U#mU:fʄ\*f|/g}/o#"fÄ\>21e!Le:Ne®U:e®U:Rew~/Z>24eZ25eÙ[!!f~UZwdZ*/e+"/e|dZ:!fZ*f|ʙ[+"f:Re2Le2f2Me21ego"f"f" f" f:e!ew:fʨZ4*f:fG*+efºZ f~#ºZ"+eäZ:eWɯ21ego"f*e*e~# Z-Z1e Z"e2"fGfo:fV}o:1eg" fÄ\!U]]:f=2V==V{c:fog"fgo"f" f2 f>2 fͬ\:MeS:Me2Je2OeXDU nV>00V:V02"f>ɯ2Le2NenW-šV>2fßV+¢VnW\!5e5!e45W:"f.V>2Ne2Me5W:"fTUEVDVnW+V-V>21enWy2e!5e5!e40[ [*fT])))_Z*f|%[#x:1e6[o>g"f|x! f~w+ @[:[! f~w+S[!7fP[^[f!fw#r[6 !f~w#…[~[‘[Z"f¶[,ʙ[/Z)Y'pYP[:f2fÙ[|[{c!"f2e!R\[# [{cyO!p\:f[!\\ ^#dVWOx W{c> GV:1ex(W/<2MeG!Le~wTUdV: f5W X~[~[RR~[:"f!0fw#wZWRR!Le:Mew5WDU nW:e2enW.VFʐWT.V>2fDUWÄ\!f~ʨW>T>Fw> #w#w#wR> W> W>O}2$fO!]:$fQQ=_^#V ^#VWW*e| X{c*V"fy\*e"f!"eZ$\{c}2e2Rey D\:"f.N\Z*f}2Re*e+"eHZ{cXH(AILEFGDN]TTYQVwWVVVVm]TTYR#VWnST|TkS:fG*+ef–\ fw#–\"+e*f|ʙ[HZ! f~6]x21ew:f=\=\+>2f>w\!f~1]/W+~/_s#r>2f7]G!6e60#͑]!Me4: f0w͏[S"f~:CS w+3Sw!6e|XS}XS!Me4#"Pe|/W}/_*f"f>2Ke:f.Vͬ\:LeG:fSx2JeS:fS2OeX:fS0$Y!Je5S<¨S:JeSSͱXûSE:KeSD$Y:Me!f2MeS+S-/<2Me$Y:Me_!   ^_#>Wɇb> a>a!^:$f_~6ͼbo&?b6#<4b+ͯb^2^^ww!^~{2$f``{ ^b~ ^2$f^_^ w ʝb#w‘b:$f_!]^p+qͼb:$f_!^^#V!ccccccb:bc> eczc2b:b*b> ec> ^7>{_zW}o|g=]|g}o`iN#F#q#p#=!^2'e"f"f`i"(e2*e:*eY^!f_m^:'e*(er^_~#fo:*e<2*eW:'e҅^e c^!`"w"*G#"G>Ae !"! FORTDATQca````^``!^:$f_~!^:$f_^#Vec* eb|c}c"b" eQ:brc:4e*2e=> ec~+Wc1Gc> ecWc> ec~0Wc> ec#~#ec=Yc_>2bc~#O!c ^#V"e!e ~td#•c:e<2e e eIDF0MPIRFWITEXDOMLDZLGSQIBTLOBDEISBEINOVCNGLGSSNA2IODTBIRCEFd/dcccccQ2^2^^_@~¯_:$f_!^6* e[b|/_}2_"^" e^*e|D_+)|! w#w#M__ͯb td~+fd1Qd> tdfd> td~ fd0fd> td#~#td=hd_*e~ ̔d#~"e d!d^#6 #> tdwP *}/<*w}*w}!{~2!ͳͶfO s#r!^r+s6#^w#`:$fG 1wx 6`0#w> #w#^w#B`w">wT] 6^^6q`b^ͯb! w^@``ɯ^(w*2e*4e&`w#æ`^77^8w*2e^>24e?ɯ^2^:4e*2e~~W!d&e!e* e>2$f> td> tdy!\>a!"**{ozg}26*}*{ozg}2*y*{ozg}!!62**{ozg}26*}*{ozg}2*y*{ozg}!!62*} **{** g}264w:4e~+)a1a> a)a0> a> a#=7a~a)a> a:^7:^aa^b^2^<2^7^ w24e2^Ͱaڥasaʮa*4e&*2ew"4e ʥa}sa{c:^?ɷ!^:$f_~a5!^/Ɓ_#>Wͯb^2^>w7!^:$f_~@b4!*y*{ozg}!62!"**{ozg}26*+}!62!"*}!"*)"*{*~#fo{ozg}26*#>>6!"*)"**~#fo{ozg}26*#>>x*k}/<! ]͑]\)]!&ffX͑]\!f&fX!Me4/G:[+\21e!fw#>]!Me4>W*f5e|b]b]Ù[{c :4eÙ[ $Y*f+"f|n]Ù[:fG:e2Me!1e>w!Me5:[ X:[RR cbccc^^^^^M[ XM[RR X\[RR]M[M[M[!Me4|/G}/O!>^    CAPITAL LETTERS, FORTRAN-CHESS DOES NOT ACCEPT LOWER CASE. I HAVE RUN SEVERAL GAMES COMPARING THE FORTRAN-CHESS (FC) PROGRAM AGAINST FIDELITY ELECTRONICS' CHESS CHALLENGER 7 (CC7) (C) 1978 FIDELITY ELECTRONICS. WITH FC AT LEVEL 0 (IT ONLY HAS 0 AND 1) AND CC7 AT LEVEL 1 (CC7 HAS 6 LEVELS OF PLAY) FC WINS. WITH FC AT LEVEL 0 AND CC7 AT LEVEL 2 CC7 WINS. FC'S RESPONSE TIME AT LEVEL 0 VARIES BUT IS NEVER MORE THAN 90 SECONDS. I HAVE NOT YET CLOCKED IT AT LEVEL 1, BUT IT HAS A SIGNIFICANTLY LONGECHESS.DOC DOCUMENTATION FOR CHESS.COM (SOURCE CODE WRITTEN IN FORTRAN) DECEMBER 25, 1979 CHESS.COM USES ALGEBRAIC NOTATION AND A BOARD DISPLAY SIMILAR TO MICROCHESS: A B C D E F G H 8 BR BN BB BQ BK BB BN BR 8 7 BP BP BP BP BP R RESPONSE TIME (AT LEAST AS MUCH AS SEVERAL MINUTES -- ESTIMATION). HAVE FUN! JIM MILLS C.A.C.H.E. MEMBER E AT LEVEL 0 VARIES BUT IS NEVER MORE THAN 90 SECONDS. I HAVE NOT YET CLOCKED IT AT LEVEL 1, BUT IT HAS A SIGNIFICANTLY LONGEBP BP BP 7 6 -- :: -- :: -- :: -- :: 6 5 :: -- :: -- :: -- :: -- 5 4 -- :: -- :: -- :: -- :: 4 3 :: -- :: -- :: -- :: -- 3 2 WP WP WP WP WP WP WP WP 2 1 WR WN WB WQ WK WB WN WR 1 A B C D E F G H THERE ARE TWO OTHER COMMANDS WHICH DISPLAY THE BOARD AND ASK THE COMPUTER IF IT WILL ACCEPT A DRAW. THEY ARE "BOARD" AND "DRAW", RESPECTIVELY. TO CASTLE KING-SIDE, TYPE IN O-O TO CASTLE QUEEN-SIDE TYPE IN O-OO IF YOU TRY O-O-O IT SAYS "ILLEGAL ATTEMPT TO CASTLE" ALWAYS USE  ; IF (AND IT'S A BIG IF) YOU WIN, THE COMPUTER WILL ACKNOWLEDGE IT. ; IF YOU LOSE, THE CURSOR WILL ROTATE THRU THE BOARD FLASHING THE WINNING ; COMBINATION. (FOR THE FULL EFFECT, THE PROGRAM SHOULD BE RUN AT 9600 ; BAUD). I RUN MY HAZELTINE AT 4800 BA/M BY ; ; RON WILLIAMS ; 1845 COCHRAN RD. ; MORGAN HILL, CA. 95037 ; (408) 779-8655 ; ; VER 2.0 7/5/78 ; ; Revised for Osborne 1 by Jim Woolley, FOG Librarian, 7/82 ; ;*****************************************************UD, AND IT WORKS OK). ; ; TO START A NEW GAME, JUST PRESS . ; THE PROGRAM WILL RESET THE BOARD, AND YOU'RE OFF TO ANOTHER DEFEAT! ; ; TO RETURN TO CP/M, TYPE CONTROL/C WHENEVER IT'S YOUR MOVE. ; ; ENJOY!! ; ;*********************************************** ; ; ; THIS VERSION OF 3-DIMENSIONAL TIC-TAC-TOE RUNS UNDER THE CP/M ; DISKETTE OPERATING SYSTEM. THE PROGRAM IS INVOKED BY SIMPLY ; TYPING 'TTT'. ; ; THE USER ALWAYS PLAYS THE 'X' AND ALWAYS GOES FIRST. MOVES ; ARE MADE BY PO********************************************** ; ; SINCE I USE A HAZELTINE 1500, THE CURSOR CONTROL CODES ARE, OF COURSE, ; SET UP FOR THE HAZELTINE. MOST HOBBIEST TERMINALS USE SOME SORT OF ; ESCAPE-SEQUENCE TO ACCOMPLISH CURSOR MOVEMENT, SO IT SHOULSITIONING THE CURSOR UNDER THE SQUARE IN WHICH ; YOU WANT YOUR 'X' PUT. THE COMPUTER THEN MAKES ITS MOVE ; AUTOMATICALLY AND THEN PROMPTS YOU FOR YOUR NEXT ; MOVE. ; ; POSITIONING THE CURSOR IS ACCOMPLISHED BY TYPING IN ANY ; OF THE KEYS L(EFT), R(ID BE FAIRLY ; EASY TO MODIFY THE CONTROL CODES WHICH WILL BE FOUND IN THE ; LIST OF EQUATE STATEMENTS AT THE BEGINNING OF THE PROGRAM PROPER. ; ; Modified for Osborne 1. ; ;*****************************************************************************GHT), U(P) OR D(OWN). ; Osborne 1 arrow keys (CP/M setup) will work, too. ; THE CURSOR WILL BE MOVED ONE SQUARE IN THE DESIGNATED ; DIRECTION. WHEN YOU HAVE THE CURSOR WHERE YOU WANT IT, ; TYPE 'X' AND IT WILL REPLACE THE '+' SIGN IN THAT SQUARE. ;  ; ; ORG 100H ; BDOS EQU 5 ;CP/M ENTRY POINT ; CR EQU 0DH LF EQU 0AH ESC EQU 1BH ;ESCAPE CHAR FOR CURSOR CONTROL BSPACE EQU 08 ;BACKSPACE TAB EQU 09H CUP EQU 0BH ;CURSOR UP CDOWN EQU 0AH ;*********************************************************************** ; ; THREE DIMENSIONAL TIC - TAC - TOE ; ; ORIGINALLY WRITTEN FOR THE INTELLEC MDS BY ; TOM ROLLANDER - INTEL CORP. ; ; ; ALGORITHMS MODIFIED AND REWRITTEN FOR CP  TION CALL CI ; THEN GET PLAYERS KEYBOARD INPUT MOV B,A ; RESPONSE WILL BE SAVED IN B LXI D,CHARLIST-2 ; SCAN LIST OF OK CHARS & JUMP GLOOP: INX D ; PRE-INCREMENT CONSOLE READ ROUTINE DOES AN AUTOMATIC ECHO OF ; THE INPUT CHARACTER, WE CAN'T CALL IT VIA THE NORMAL ; CALLING SEQUENCE. INSTEAD, WE FIND THE ADDRESS OF THE READ ROUTINE ; IN THE USER'S BIOS, AND JUMP TO IT DIRECTLY AVOIDING THE ECHO. ; THIS WAY, USE INX D LDAX D ; GET CHAR FROM TABLE ORA A ; TEST FOR END OF LIST GETERROR: LXI H,MSG2 ; JUST IN CASE BAD CHAR JZ GETX ; BAD CHAR -> GO PRINT "TRS DO NOT HAVE TO REWRITE THE I/O ROUTINES. ; ; TTT3D: LXI D,WBOOTX LHLD 1 MVI B,9 LDADDR: MOV A,M STAX D INX D INX H DCR B JNZ LDADDR ; BEGIN: LXI SP,STACK ; SET STACK POINTER MVI B,65 ; CLEARY AGAIN" INX D ; NOW POINT TO JUMP ADDRESS CMP B ; COMPARE CHAR TO THAT KEY'D IN JNZ GLOOP ; NO LUCK ?! LDAX D ; EL-KLUGE-O INDIRECT JUMP MOV R THE BOARD LXI H,MOVEARY XRA A CLOOP: MOV M,A INX H DCR B ; CLEAR ALL 64 SQUARES JNZ CLOOP LXI H,MSG0 ; CLEAR SCREEN AND PRINT BOARD  L,A INX D LDAX D MOV H,A LXI D,GETNEXT ; SET-UP FAKE 'CALL' RETURN PUSH D PCHL ; WHITHER WANDEREST THOU ..... ; CHARLIST: DB CUP DW UP DB CDOWN  CALL MESAG CALL BDHOME ; MOVE CURSOR TO LOWER LEFT CORNER GETMOVE: LXI H,MSG1 ; PRINT "ENTER YOUR MOVE" GETX: CALL PRINTMESAG GETNEXT: CALL COPYPOSITION ; START BY DEFAULTING TO CURRENT POSI DW DOWN DB CLEFT DW LEFT DB CRIGHT DW RIGHT DB 'U' DW UP DB 'D' DW DOWN DB 'L' DW LEFT DB 'R' DW RIGHT DB;CURSOR DOWN CRIGHT EQU 0CH ;CURSOR RIGHT CLEFT EQU 08 ;CURSOR LEFT CHOME EQU 1EH ;CURSOR HOME CLRS EQU 1AH ;CLEAR SCREEN DIM EQU 29H ;HALF-INTENSITY BRIGHT EQU 28H ;FULL-INTENSITY ; WIDTH EQU 14 SPACING EQU 3 ; ; SINCE THE CP/M    ; NOPE -> SIMPLY GO MOVE MVI M,1 ; END UP IN COLUMN ONE ; BDINC: LXI H,NBP ; INCREMENT NEW BOARD POINTER MOV A,M INR A MOV M,A CPI 5 +++++++++++++++++++++++++++++++++ ; ; JUMP TABLE HANDLERS ; ; ++++++++++++++++++++++++++++++++++++++++++++++++ ; ; UP: LXI H,NRP ; INCREMENT NEW ROW POINTER MOV A,M INR A MOV  ; GOING BEYOUND BOARD #4 ?! JC MOVE ; NOPE SIMPLY GO MOVE MVI M,1 ; ELSE WRAPAROUND TO BD # 1 JMP MOVE ; ; LEFT: LXI H,NCP ; DECREMENT NEW COLUMN POINTER M,A CPI 5 ; DO WE HAVE TO BUMP TO NEXT BOARD ?! JC MOVE ; NOPE -> SIMPLY GO MOVE MVI M,1 ; GOING TO ROW 1 OF NEXT BOARD JMP BDINC ; INCREMENT BD, TESTING FODCR M JNZ MOVE ; OK -> NOT GOING TO BD #0 MVI M,4 ; ELSE WRAPAROUND ; BDDEC: LXI H,NBP ; DECREMENT NEW BOARD POINTER DCR M JNZ MOVE ; OK NO WR WRAPAROUND ; ; DOWN: LXI H,NRP ; DECREMENT NEW ROW POINTER DCR M JNZ MOVE ; OK -> STILL ON SAME BOARD MVI M,4 ; TOP ROW OF NEXT BOARD JMP BDDEC RAPPING MVI M,4 JMP MOVE ; GO AND WRAP IT ; ; YOUMOVE: POP D ; POP PHONNEY RETURN ADDR JMP STRCALL ; GO CALL STRAT SUBR. ; ; GOTMV: POP D  ; GO DECREMENT BD PTR, TESTING FRO WRAPAROUND ; ; RIGHT: LXI H,NCP ; INCREMENT NEW COLUMN POINTER MOV A,M INR A MOV M,A CPI 5 ; OFF BOARD ?! JC MOVE ; POP PHONNEY RETURN ADDR LXI H,BP ; CONVERT BOARD POSITION INTO INDEX MOV A,M DCR A ; 16*(BP-1) ADD A ADD A ADD A ADD A MOV B, 'X' DW GOTMV DB CR DW BEGIN DB 'C' AND NOT 40H DW 0000H ;RETURN TO BDOS DB 'O' DW YOUMOVE DB 0 ; ; ; +++++++++++++++   POP D POP H LDA K8 MOV C,A CALL CO MVI C,BSPACE CALL CO DCR D INX H JNZ L16 LDA K8 CPI ' ' JZ  MOV L,A MOV A,M ORA A JNZ GETERROR ; SQUARE ALREADY OCCUPIED ! MVI M,1 ; ELSE LET'M HAVE IT MVI C,'X' CALL CO MVI C,BSPACE ; PRI L17A STA J8 MVI A,' ' JMP L17B L17A: LDA J8 L17B: STA K8 CALL CSTS ORA A JZ L15E JMP BEGIN L18: LDA M1 ORA A NT HIS "X" CALL CO ; AND BACK SPACE CURSOR OVER POSITION STRCALL: LXI H,MSG3 ; PRINT CALL PRINTMESAG ; "I'M THINKING" CALL STRAT ; CALL STRATEGY ROUTINE LDA M3 CPI 3 JP L18 JNZ L13A LDA CBP MOV E,A MVI D,0 L14: LXI H,WAIT DAD D MOV C,M MVI B,0 LXI H,MOVEARY ; WE'RE GETTING A WAITING MOVE DAD  CPI 1 MVI A,'O' LXI H,MSG5 JNZ L15 ; JUMP IF WE'VE WON MVI A,'X' LXI H,MSG6 ;HE WON L15: STA K8 CALL PRINTMESAG L15E: LDA M1 DCR A MOV L,A B MOV A,M ORA A JZ L13 INX D MVI A,21 CMP E JNZ L14 LXI H,MSG4 CALL PRINTMESAG ; PRINT "TIE GAME" CALL CI ; WAIT FOR INP MVI H,0 DAD H DAD H INX H LXI D,ROW DAD D MVI D,4 L16: MOV A,M CALL PLACEIT PUSH H PUSH D CALL MOVE UT JMP BEGIN L13A: MOV C,A LXI H,MOVEARY ADD L MOV L,A L13: MVI M,5 ; CLAIM SQUARE FOR US MOV A,C CALL PLACEIT CALL MOVE A INX H MOV A,M DCR A ; + 4*(CRP-1) ADD A ADD A INX H ADD M ; + CCP ADD B LXI H,MOVEARY ADD L    MVI B,WIDTH CALL CURSRT ; MOVE CURSOR RIGHT INTO POSTION MVI B,2 CALL CURSUP ; MOVE CURSOR UP INTO POSITION JMP MBP ; LOOP TILL NEW BD # = CURRENT BD # MBPL: BROUTINES ; ; ++++++++++++++++++++++++++++++++++++++++++++++++ ; ; PRINTMESAG: PUSH H ; SAVE ADDR OF MESAG CALL REMEMBERPOSITION ;WE WANT TO COME BACK HERE CALL BDHOME ; HOME CURSOR TO L DCR M ; FIRST UPDATE CURRENT BD # MVI B,WIDTH CALL CURSLT ; MOVE CURSOR LEFT INTO POSITION MVI B,2 CALL CURSDN ; MOVE CURSOR DOWN INTO POSITION JMP MBP OWER LEFT BD POSITION MVI B,24 CALL CURSRT ; MOVE CURSOR TO MESSAGE POSITION POP H CALL MESAG CALL BDHOME ; HOME CURSOR AGAIN JMP MOVE ; & RETURN TO WH ; LOOP TIL NEW BD # = CURRENT BD # ; MBPD: INX H INX D ; MEM ORGANIZED AS BP,RP,CP MRP: MVI B,1 LDAX D ; GET NEW ROW POINTER CMP M ; COMERE WE WERE ; ; MESAG: MOV A,M INX H ORA A RZ MOV C,A CALL CO JMP MESAG ; ; MOVE: LXI H,BP ; START BY GOING TO CORRECT BD LXI D,NBP ; DE=NEW POSITION, HL=CURRENT POSITION MBP: LDAPARE TO CURRENT ROW POINTER JZ MRPD ; -> ON MATCH JM MRPL ; GO MOVE DOWN INR M ; FIRST INCREMENT CURRENT ROW POINTER CALL CURSUP ; MOVE UP ONE ROW JMX D ; GET NEW BD # CMP M ; COMPARE TO CURRENP B@ # JZ MBPD ; -> ON MATCH JM MBPL ; WE'RE GOING LEFT INR M ; FIRST UPDATE CURRENT BD # P MRP ; LOOP UNTIL NEW ROW PTR = CURRENT ROW PTR MRPL: DCR M ; FIRST DECREMENT CURRENT ROW POINTER CALL CURSDN ; MOVE DOWN ONE ROW JMP MRP ; LOOP UNTIL NEW ROW PTR =  MVI C,'O' ; SHOW OUR "O" CALL CO MVI C,BSPACE CALL CO JMP GETMOVE ; GET OPPONENTS RESPONSE ; ; ; ++++++++++++++++++++++++++++++++++++++++++++++++ ; ; SUPPORTING SU   MVI B,3 COPYLOOP: LDAX D ; GET BP(I) MOV M,A ; PUT NBP(I) INX D INX H DCR B ; LOOP FOR THREE BYTES JNZ COPYLOOP RET ;  ; DONE MOVING WITH A MATCH JM MCPL ; GO MOVE CURSOR LEFT INR M ; FIRST INCREMENT CURRENT COLUMN POINTER CALL CURSRT ; MOVE CURSOR RIGHT ONE COLUMN JMP MCP  ; STRAT: MVI B,1 L15A: MOV A,B LXI H,SUM ADD L MOV L,A MVI M,0 PUSH H MOV L,B MVI H,0 DAD H DAD H DCX ; LOOP UNTIL NEW COLUMN PTR = CURRENT COLUMN PTR MCPL: DCR M ; FIRST DECREMNT CURRENT COLUMN POINTER CALL CURSLT ; MOVE CURSOR LEFT ONE COLUMN JMP MCP ; LOOP UNTIL NEW COLUMN PTR = C H DCX H DCX H XCHG MVI C,4 L15B: LXI H,ROW DAD D MOV A,M LXI H,MOVEARY ADD L MOV L,A MOV A,M ; DROPPED INSTRUCTION ??????URRENT COLUM PTR ; ; BDHOME: CALL CURSHOME ; POSITION THE CURSOR AT TRUE "HOME" MVI B,9 CALL CURSDN ; MOVE DOWN TO ROW 1, COL 1 BD 1 LXI H,BP MVI A,1 MOV M,A ; BP = 1 ?!!!!!!!!!! POP H PUSH H ADD M MOV M,A INX D DCR C JNZ L15B POP H INR B MVI A,77 CMP B JNZ L15A ;  INX H MOV M,A ; RP = 1 INX H MOV M,A ; CP = 1 RET ; ; REMEMBERPOSITION: COPYPOSITION: LXI D,BP LXI H,NBP ; COP] BP(ETC) -> NBP(ETC)  MVI B,1 ; B = J1 ; DO21: MOV A,B STA M3 LXI H,TSTA1 ADD L MOV L,A MOV A,M STA TST1 ORA A JM END21 MOV CURRENT ROW PTR ; MRPD: INX H INX D MCP: MVI B,SPACING LDAX D ; GET NEW COLUMN POINTER CMP M ; COMPARE WITH CURRENT COLUMN POINTER RZ    MVI H,0 DAD H DAD H DCX H DCX H DCX H SHLD J5 SHLD L5 MVI A,4 STA K5 ; DO25: LHLD J5 LXI D,ROW DAVI C,1 ; C = J2 ; DO22: MOV A,C LXI H,SUM ADD L MOV L,A LDA TST1 CMP M JNZ END22 MOV A,B SUI 3 JC S18 MOV L,C D D LDA M1 CMP M JNZ END25 LDA TST3 ORA A JM S17 LHLD L5 SHLD J6 MVI A,4 STA K6 ; DO26: LHLD J6 LXI  MVI H,0 DAD H DAD H DCX H DCX H DCX H SHLD J3 MVI A,4 STA K3 ; DO23: LHLD J3 LXI D,ROW DAD D M D,ROW DAD D MOV A,M STA M2 LXI H,MOVEARY ADD L MOV L,A MOV A,M ORA A JNZ END26 ; MVI A,1 STA J7 ; DO27: OV A,M STA M1 LXI H,MOVEARY ADD L MOV L,A MOV A,M ORA A JNZ END23 LDA TST2 ORA A JM S17 ; MVI A,1  LDA J7 MOV D,A LXI H,SUM ADD L MOV L,A LDA TST3 CMP M JNZ END27 MOV A,D CMP C JZ END27 LDA J4 STA J4 DO24: LDA J4 LXI H,SUM ADD L MOV L,A LDA TST2 CMP M JNZ END24 LDA J4 CMP C JZ END24 ; MOV L,A  CMP D JZ END27 MOV L,D MVI H,0 DAD H DAD H DCX H DCX H DCX H SHLD J8 MVI A,4 STA K8 ; DO28: LHLD A,B LXI H,TSTA2 ADD L MOV L,A MOV A,M STA TST2 MOV A,B LXI H,TSTA3 ADD L MOV L,A MOV A,M STA TST3 ; M  ,A DCR A RRC RRC RRC RRC ANI 0FH INR A STA NBP DCR A ADD A ADD A ADD A ADD A MOV C,A  LXI H,J7 INR M MVI A,77 CMP M JNZ DO27 ; END26: LHLD J6 INX H SHLD J6 LXI H,K6 DCR M JNZ DO26 ; END25: LH MOV A,B SUB C MOV B,A DCR A RRC RRC ANI 3FH INR A STA NRP DCR A ADD A ADD A MOV C,A MOV LD J5 INX H SHLD J5 LXI H,K5 DCR M JNZ DO25 ; END24: LXI H,J4 INR M MVI A,77 CMP M JNZ DO24 ; END23: LHLD J3 A,B SUB C STA NCP RET ; ; ; ++++++++++++++++++++++++++++++++++++++++++++++++ ; ; CURSOR CONTROL SUBROUTINES ; ; ++++++++++++??++++++?+++++++??++++++?++/+++++++ ; ; CURSUP: ; MVI C,E INX H SHLD J3 LXI H,K3 DCR M JNZ DO23 ; END22: INR C MVI A,77 CMP C JNZ DO22 ; END21: INR B MVI A,16 SC ; CALL CO MVI C,CUP CALL CO DCR B ; B CONTAINS CNTR FOR ALL CRSR SUB'S JNZ CURSUP RET ; ; CURSDN: ; MVI C,ESC ; CALL CO MVI C,CDOWN CALL CO DCR B  CMP B JNZ DO21 ; ; XRA A STA M1 JMP S17 ; S18: MOV A,C STA M1 ; S17: XRA A STA M2 ; S16: RET ; ; ; PLACEIT: MOV B JNZ CURSDN RET ; ; CURSLT: MVI C,BSPACE CALL CO DCR B JNZ CURSLT RET ; ; CURSRT: MVI C,CRIGHT CALL CO DCR B JNZ CURSRT J8 LXI D,ROW DAD D LDA M2 CMP M JZ S16 ; END28: LHLD J8 INX H SHLD J8 LXI H,K8 DCR M JNZ DO28 ; END27:    !',0 MSG4: DB 'TIE GAME !!!!!!',0 MSG5: DB 'YOU HAVE LOST !',0 MSG6: DB 'CONGRATULATIONS',0 ; ; ; ++++++++++++++++++++++++++++++++++++++++++++++++ ; ; RAM BUFFER SPACE ; ; ++++++++++++++++++++++++++++++++++ PUSH B PUSH D PUSH H MVI C,11 CALL BDOS POP H POP D POP B RET ; ; MSG0: DB CLRS,ESC,DIM DB 'THREE DIMENSIONAL' DB ' + + + +',CR,LF DB ' TIC - TAC - TOE ' ++++++++++++++ ; ; ; BP: CBP: DS 1 ; CURRENT BOARD POINTER CRP: DS 1 ; CURRENT ROW POINTER CCP: DS 1 ; CURRENT COLUMN POINTER ; NBP: DS 1 ; NEW BOARD POINTER  DB ' + + + +',CR,LF DB ' + + + + ' DB ' + + + +',CR,LF DB ' + + + + ' DB ' + + + +',CR,LF NRP: DS 1 ; NEW ROW POINTER NCP: DS 1 ; NEW COLUMN POINTER ; MOVEARY: DS 65 SUM: DS 77 TST1: DS 1 TST2: DS 1 TST3: DS 1 M1:  DB ' + + + + ' DB ' + + + +',CR,LF DB ' + + + + ' DB ' + + + +',CR,LF DB '+ + + + ' DB ' + + + +',CR,LF DB '+ +  DS 1 M2: DS 1 M3: DS 1 J3: DS 2 K3: DS 1 J4: DS 1 J5: DS 2 K5: DS 1 L5: DS 2 J6: DS  + + ' DB ' + + + +',CR,LF DB '+ + + +',CR,LF DB '+ + + +' DB ESC,BRIGHT DB 0 ; MSG1: DB 'ENTER YOUR MOVE',0 MSG2: DB 'TRY AGAIN ',0 MSG3: DB 'I AM THINKING2 K6: DS 1 J7: DS 1 J8: DS 2 K8: DS 1 ; WAIT: DB 0,22,43,23,42,26,39,27 DB 38,1,64,13,52,4 DB 61,16,49,22,43,23,42 ; TSTA1: DB 0, 4,15, 3,10,10, 2, 2  RET ; ; CURSHOME: ; MVI C,ESC ; CALL CO MVI C,CHOME JMP CO ; CI: CALL CIX ANI 7FH RET ; CO: PUSH B PUSH D PUSH H MOV E,C MVI C,2 CALL BDOS POP H POP D POP B RET ; CSTS:   DB 18,34,50, 2,19,35,51, 3 DB 21,37,53, 5,24,40,56, 8 DB 25,41,57, 9,28,44,60,12 DB 30,46,62,14,31,47,63,15 DB 6, 7, 8, 5,10,11,12, 9 DB 6,10,14, 2, 7,11,15, 3 DB  DB 26,39,52,13,27,38,49,16 DB 22,42,62, 2,23,43,63, 3 DB 23,38,53, 8,27,42,57,12 DB 26,38,50,14,27,39,51,15 DB 22,39,56, 5,26,43,60, 9 DB 22,38,54, 6,23,39,55, 7 DB  18,19,20,17,30,31,32,29 DB 21,25,29,17,24,28,32,20 DB 34,35,36,33,46,47,48,45 DB 37,41,45,33,40,44,48,36 DB 54,55,56,53,58,59,60,57 DB 54,58,62,50,55,59,63,51 ; DS 128 ;64-WORD ST 26,42,58,10,27,43,59,11 DB 22,23,24,21,26,27,28,25 DB 22,26,30,18,23,27,31,19 DB 22,27,32,17,23,26,29,20 DB 38,39,40,37,42,43,44,41 DB 38,42,46,34,39,43,47,35 DB 38,43,48ACK STACK: ; RESERVE 9 BYTES TO HOLD USER'S WBOOT, CSTS AND CI ENTRY POINTS ; WBOOTX: DS 3 CSTSX: DS 3 CIX: DS 3 ; END TTT3D ,33,39,42,45,36 DB 61, 1,21,41,64, 4,24,44 DB 49, 4,19,34,61,16,31,46 DB 49,13,25,37,52,16,28,40 DB 52, 1,18,35,64,13,30,47 DB 49, 1,17,33,52, 4,20,36 DB 61,13,29,45,64,16,32,48 DB 4, 1, 2, 3,16,13,14,15 DB 13, 1, 5, 9,16, 4, 8,12 DB 16, 1, 6,11,13, 4, 7,10 DB 52,49,50,51,64,61,62,63 DB 61,49,53,57,64,52,56,60 DB 64,49,54,59,61,52,55,58  DB 2, 2, 1, 5, 5, 5, 5,0FFH TSTA2: DB 0,0FFH,0FFH,0FFH,10, 5, 2, 1 DB 1, 0, 1, 5, 5, 0, 0,0FFH TSTA3: DB 0,0FFH,0FFH,0FFH,0FFH,10,0FFH, 2 DB 1, 2, 1,10, 5,10, 5,0FFH ; ROW: DB 0 DB 22,43,64, 1,23,42,61, 4   c>O!">X!22ͯ:=o&))#1~:OQQ#': S2> V:2^:“:B_!N!H ~ʙ>p!ͯKO!Ho6yOQQ(?,<,~#OQ!BE4<52(# 45(#%4<52F (!B>w#w#wB!Ew#Gx!o6h&))+++!1~!Ho~w f>MRx2!o~2x!o~2x!!o~2y!o:xi&))+++">2*1~2!Ho~:>2:!o::o&))+++"">2*1:²:*">2*1~2!Ho~¤>2:W!o:šzʚ:ʚj&))+++">2*1:*#"!5~!4>MR*#"!58*#"!5!4>M*#"!5 >M«>„2y22G=<2E=OxG=?<2F=Ox2G Q Q(Q2 Q<Q Y )THREE DIMENSIONAL + + + + TIC - TAC - TOE + + + + + + + +  * ~#1 A!Hw#!j,!ͯ?KGO!+8og. v  UvDLRX O!F~+?&5*9 &2'3'8+< &6'7*: +;  &'(%*+,)&*."'+/#&+0!'*-$=)@,1"=.1 %4(4#@ /1!4$= -@ 0      4123@=>?=159@48<@16;=47:"2#3%5(8)9 ,< .>/?     "#$!./0-%)-!(,0$6785:;<96:>27;?3 &'(%*+,)&*."'+/#&+0!'*-$=)@,1"=.1 %4(4#@ /1!4$= -@ 0      4123@=>?=159@48<@16;=4 I AM THINKING !TIE GAME !!!!!!YOU HAVE LOST !CONGRATULATIONS+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +(ENTER YOUR+*'&@ 4=1+   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 DAL/MATBAL,LEV COMMON/KEY/KEY(8),NUMB(8),MEN(6),IA,IB,ID,IR,IO,IW,ISTR,MINUS LR=1 LP=1 WRITE(LP,101) 101 FORMAT(1X//1X,19HMIKES CHESS PROGRAM//) KECK=0 149 WRITE(LP,150) 150 FORMAT(1X,14HLEVEL 0 OR 1 ?) REAO 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) D(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) 1 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)04 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 WRI 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 2TE(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 00 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 1C MODIFIED FOR CROMEMCO'S Z80 FORTRAN, 20/9/1978 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/B   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 CONTI 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) NUE 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, 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) 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)  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(L 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 P,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 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/K1 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   3,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 + ,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, 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,, 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 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 , -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,3,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 SUBR5,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,9OUTINE 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),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  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) M 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 ARK(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  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 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=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) ,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))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 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).EQENT(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    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 2 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 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),MY=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,KVAL(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;)=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 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/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 ,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,4.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,4   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)M 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,IPOR3=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 MYT5,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 YPE(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 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(MATBATO 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 L-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  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(283 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) !  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) 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 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) )+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=MO 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=MATBALVES(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 -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 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  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 )=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) "   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 GHT 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  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= 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) 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 NE 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 XT=-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  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  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= 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 KNI#  SQ.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 ON)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  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(KASTLISPCE(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/ISPE)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 CE(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=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 B1 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(NMOVE(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 ISIPT+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(K$   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  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 41KG=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%  Tic-Tac-Toe (TTT) came from -CPMUG.029. To run CHESS, place CHESS.COM in drive A. At the A> prompt, type CHESS To run TTT, place TTT.COM in drive A. At the A> prompt, type TTT Jim Woolley FOG Disk Librarian August, 1982 To run TTT, place TTT.COM in drive A. At the A> prompt, type TTT Jim Woolley F DISK.DOC -FOG/GAM.002 First Osborne Group (FOG) Games Disk This disk contains CHESS, previously found on -FOG.018. The FORTRAN source code (CHESS.FOR) has been added from -CPMUG.041. Three-D &  '