1
0
mirror of https://github.com/PDP-10/its.git synced 2026-02-18 21:47:28 +00:00
Files
PDP-10.its/src/chprog/chnet.29
Lars Brinkhoff c6ae98e915 OCM chess.
2018-02-16 06:55:54 -08:00

396 lines
9.4 KiB
Plaintext
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
;CHAOSNET ROUTINES, BASICALLY FROM MC:MOON;NNETWK >
.INSRT SYSTEM; CHSDEF >
DEFINE SYSCAL NAME,ARGS
.CALL [SETZ ? SIXBIT /NAME/ ? ARGS ((SETZ))]
TERMIN
;CHESS PACKET TYPES
PKTPOS==1 ;SEND OVER POSITION
PKTRQR==2 ;REQUEST RESULT
PKTRES==3 ;RETURNNED RESULTS
PKTBKS==4 ;CLOSE RING AND START BACKGROUND
;FORMATING OF PACKET FOR TRANSFERING A CHESS POSITION:
$CXPKT==242000,,%CPKDT ;PACKET TYPE
$CXBFM==042000,,%CPKDT ;CHEOPS BUFFER MEMORY LOCN
$CXPRI==242000,,%CPKDT+1 ;PRIORITY OPTION
$CXMOD==042000,,%CPKDT+1 ;MODES (WD2 OF CHEOPS ARG BLOCK)
$CXSTD==242000,,%CPKDT+2 ;SETD (WD3)
$CXALP==042000,,%CPKDT+2 ;ALPHA (WD4)
$CXBET==242000,,%CPKDT+3 ;BETA (WD5)
$CXFLG==042000,,%CPKDT+3 ;FLAGWORD (WD6)
$CXCHN==242000,,%CPKDT+4 ;CHAIN WORD (WD7)
$CXPOS==$CXCHN ;FIRST DATA WORD OF POSITION. NOTE IDPB THIS..
%CXPKL==<10.*2>+<33.*2> ;MAX BYTE LENGTH OF MESSAGE. THIS IS HOW LONG POSITION PACKETS
; ACTUALLY ARE
;FORMATTING FOR CHEOPS RESULT PACKET
$CRPKT==242000,,%CPKDT ;PACKET TYPE, SAME AS ABOVE
$CRBFM==042000,,%CPKDT ;BUFFER ADR, SAME AS ABOVE
$CRSTD==242000,,%CPKDT+1 ;SETD FROM WD3 OF PARAM BLOCK
$CRPAD==042000,,%CPKDT+1 ;PADDING TO MAKE FOLLOWING ALIGN ON PDP10 WORD BOUNDARIES.
;MUST ALIGN ON WORD BOUNDARY
$CRSTA==242000,,%CPKDT+2 ;WD16 STATA (LOW ORDER)
$CRSTB==042000,,%CPKDT+2 ;WD17 STATB (HIGH ORDER)
$CRVAL==242000,,%CPKDT+3 ;WD20 VALUE
$CRIVL==042000,,%CPKDT+3 ;WD21 INITIAL VALUE
$CRPV1==%CPKDT+4 ;WD22,23 PV1
$CRPV2==%CPKDT+5 ;WD24,25 PV2
$CRPV3==%CPKDT+6 ;WD26,27 PV3
$CRPH1==%CPKDT+7 ;WD30,31 PV1 WITH HIM TO MOVE
$CRPH2==%CPKDT+10 ;WD32,33 PV2 "
$CRPH3==%CPKDT+11 ;WD34,35 PV3 "
$CRHVL==242000,,%CPKDT+12 ;VALUE WITH HIM TO MOVE
;FORMATTING FOR CLOSE RING AND START BACKGROUND PACKET
$CCPKT==242000,,%CPKDT ;PACKET TYPE, SAME AS ABOVE
$CCBFM==042000,,%CPKDT ;BUFFER ADR, HEAD OF RING
$CCBF1==242000,,%CPKDT+1 ;BUFFER ADR OF BLOCK TO RING TO HEAD BUFFER
;PV WITH OTHER SIDE TO MOVE
;CHAOS NETWORK CONNECT ROUTINE
;
;Call:
; MOVEI B,host ;host number to connect to
; MOVEI C,contact name ;an ASCIZ string
; MOVEI D,window size
; PUSHJ P,CHACON
; lossage ;you may call ANALYZE to get an error message.
; ;If $$ERRHAN is nonzero, we call ANALYZE for you.
;
;Clobbers only T and TT.
;
.VECTOR PKTBUF(%CPMXW) ;Buffer used by Open, Close, and Analyze
CHACON: MOVEI TT,%CORFC
SETZM PKTBUF
MOVE T,[PKTBUF,,PKTBUF+1]
BLT T,PKTBUF+%CPMXW-1 ;For extra luck, clear the packet buffer
DPB B,[$CPKDA+PKTBUF] ;Destination host
DPB TT,[$CPKOP+PKTBUF]
PUSHJ P,CHSTNG ;Store string from C
SYSCAL CHAOSO,[MOVEI CHNETI ? MOVEI CHNETO] ;Assign Chaos index
JRST CHACNL
SYSCAL PKTIOT,[MOVEI CHNETO ? MOVEI PKTBUF] ;Send RFC or LSN
.LOSE 1000
MOVEI TT,30.*30. ;30-second timeout
SKIPE DEBUG
MOVSI TT,177777 ;Or infinite, in debug mode
LDB T,[$CPKOP+PKTBUF]
CAIE T,%COLSN ;Get the boring state
SKIPA T,[%CSRFS]
MOVEI T,%CSLSN
SYSCAL NETBLK,[MOVEI CHNETO ? T ? TT ? MOVEM TT] ;Await completion of connection
JRST CHACNL
CAIE TT,%CSOPN
JRST CHACNL
JRST POPJ1 ;CHACON done
CHACNL: ;CHACON lost
MOVEI A,CHNETI
PUSHJ P,ANALYZE
JFCL ;SKIPS SOMETIMES
.CLOSE CHNETI,
POPJ P,
;Send CLOSE packet, then close connection
;Call: MOVEI C,message ;asciz string
; PUSHJ P,CHACLS
; lossage
CHACLS: MOVEI T,%COCLS
DPB T,[$CPKOP+PKTBUF]
PUSHJ P,CHSTNG
SYSCAL PKTIOT,[MOVEI CHNETO ? MOVEI PKTBUF]
SKIPA
AOS (P)
.CLOSE CHNETI,
.CLOSE CHNETO,
JRST POPJ1
CHSDTO: MOVEI T,%CODAT ;FINISH FORMATING AND SEND DATA PACKET
DPB T,[$CPKOP+PKTBUF] ;-NOTE--BYTE LENGTH SHOULD ALREADY BE IN [$CPKNB+PKTBUF]
SYSCAL PKTIOT,[MOVEI CHNETO ? MOVEI PKTBUF]
.VALUE
POPJ P,
;Store string from C into PKTBUF. Bash T, TT
CHSTNG: PUSH P,B
PUSH P,C
MOVE B,[440800,,PKTBUF+%CPKDT]
MOVEI TT,0
HRLI C,440700
CHSTG1: ILDB T,C
JUMPE T,CHSTG2
IDPB T,B
CAIGE TT,%CPMXC-1
AOJA TT,CHSTG1
CHSTG2: DPB TT,[$CPKNB+PKTBUF]
POP P,C
POP P,B
POPJ P,
; Network error analysis.
;Call: MOVEI A,pin ;channel number that is losing
; PUSHJ P,ANALYZE
; .VALUE ;always skip-returns
;
;Clobbers only T and TT. Uses the PUTCHR routine to type out its messages.
.VECTOR WHYINT(4) ;Cruft returned from WHYINT
ANALYZE:
AOS (P)
PUSH P,B
PUSH P,C
ANALN1: SYSCAL WHYINT,[A ? MOVEM T ;Get device type
MOVEM WHYINT ? MOVEM WHYINT+1 ? MOVEM WHYINT+2 ? MOVEM WHYINT+3 ]
MOVEI T,0 ;Channel not open, probably
CAIN T,%WYCHA
JRST ANLCHA ;Chaos net channel open, further info available
SYSCAL USRVAR,[MOVEI %JSELF ? MOVEI .RIOS(A) ? MOVEM T] ;Get I/O status wd for channel
.LOSE 1000
LDB TT,[220600,,T] ;only the open-loss code is available
CAIE TT,%ENAPP ;Other end of pipeline gone, or
CAIN TT,%ENSDR ;No such directory
JRST [ JSP TT,SPEAK ;means destination host dead
ASCIZ\Destination Host dead.\ ]
CAIN TT,%EFLDV ;Device full (this one applies to both Arpanet & Chaos net)
JRST [ JSP TT,SPEAK
ASCIZ \All sockets in use.\ ]
CAIN TT,%ENRDV ;Device not ready
JRST [ JSP TT,SPEAK
ASCIZ \Network down.\ ]
CAIN TT,%ESCO ;Self-contradictory open
JRST [ JSP TT,SPEAK
ASCIZ \Connection cannot be opened because of inconsistent byte sizes.\ ]
.CALL [ SETZ ;Some other error - get ITS error message
'IOPUSH
SETZ A ]
.LOSE 1000
.CALL [ SETZ
SIXBIT/OPEN/
MOVEI (A) ;here we rely on .UAI=0
['ERR,,]
MOVEI 3
SETZ T ]
.LOSE 1400
MOVEI TT,[ASCIZ\? Internal error - \]
PUSHJ P,ZTYPE
ANAL0: .CALL [ SETZ ;copy error message to output device
'IOT,,
MOVEI (A)
SETZM T ]
.LOSE 1000
CAIGE T,40
JRST ANALYX
PUSHJ P,PUTCHR
JRST ANAL0
ANALYX: .CALL [ SETZ
SIXBIT/IOPOP/
SETZI (A) ]
.LOSE 1000
ANALX: MOVEI TT,[ASCIZ /
/]
PUSHJ P,ZTYPE
POP P,C
POP P,B
POPJ P,
ANALT: MOVEI TT,[ASCIZ /Attempt to open connection timed out./]
SPEAK: PUSHJ P,ZTYPE ;send message from TT
JRST ANALX ; and return
;Analyze on chaos channel, still open
ANLCHA: MOVE TT,WHYINT ;Connection state
CAIE TT,%CSLOS
CAIN TT,%CSCLS
JRST ANLCH1
CAIE TT,%CSINC
JRST ANLCH0 ;Still open
JSP TT,SPEAK
ASCIZ /Connection broken -- foreign host not communicating./
ANLCH0: PUSH P,CHSTTB(TT)
MOVEI TT,[ASCIZ/Timed-out while connection /]
PUSHJ P,ZTYPE
POP P,TT
JRST SPEAK
CHSTTB: [ASCIZ/closed/]
[ASCIZ/listening/]
[ASCIZ/has received RFC/]
[ASCIZ/has sent RFC/]
[ASCIZ/open/]
[ASCIZ/lost/]
[ASCIZ/broken/]
ANLCH1: PUSH P,CHSTTB(TT)
MOVEI TT,[ASCIZ/Connection /]
PUSHJ P,ZTYPE
POP P,TT
PUSHJ P,ZTYPE
MOVEI TT,[ASCIZ/ -- /]
PUSHJ P,ZTYPE
HLRZ TT,WHYINT+1 ;get number of input packets
ANLCH2: SOJL TT,ANALX ;scan input looking for CLS, LOS
HLRZ T,WHYINT+3 ;Pick up input channel number
SYSCAL PKTIOT,[T ? MOVEI PKTBUF]
.LOSE 1000
LDB T,[$CPKOP+PKTBUF]
CAIE T,%COCLS
CAIN T,%COLOS
SKIPA B,[440800,,PKTBUF+%CPKDT]
JRST ANLCH2
LDB C,[$CPKNB+PKTBUF]
ANLCH3: SOJL C,ANALX
ILDB T,B
PUSHJ P,PUTCHR
JRST ANLCH3
ZTYPE: PUSH P,B
PUSH P,A
MOVEI B,TYO
SOUT (TT)
POP P,A
POP P,B
POPJ P,
PUTCHR: PUSH P,A
MOVE A,T
PUSHJ P,TYO
POP P,A
POPJ P,
DEBUG: 0 ;NON-ZERO -> INIFINITE TIMEOUT ON RFC
NSTRT: MOVEI C,CBABL ;PRIORITY BLOCK, WANT 16 BIT WORD ADR
MOVEI T,CHXTB
MOVEI D,1 ;USE PRIORITY POINTER
CXTPO1: PUSHJ P,CXNPOS
MOVEI ZR,%CXPKL
DPB ZR,[$CPKNB+PKTBUF] ;SET # BYTES TO SOMETHING BIG ENUF
PUSHJ P,CHSDTO
POPJ P,
CXTPOS: MOVEI D,2 ;ADD TO BACKGROUND
JRST CXTPO1
CXNPOS: MOVEI ZR,PKTPOS ;FOLLOWING ROUTINE SEMI-COMPATABLE WITH CXBPOS
DPB ZR,[$CXPKT+PKTBUF] ;CHEOPS PACKET TYPE
MOVE ZR,C
LSH ZR,1 ;LISPM ADDRESS 1 UNIBUS LOCN PER ADR, NOT TWO
DPB ZR,[$CXBFM+PKTBUF] ;CHEOPS BUFFER ADR
DPB D,[$CXPRI+PKTBUF] ;PRIORITY OPTION
MOVE TT,[$CXPOS+PKTBUF]
MOVE B,[-NPC,,1]
CXPK1: SKIPN A,PIECEL(B)
JRST CXPK2
SKIPGE D,CHEOPC(B)
JRST [ LDB ZR,[PTID,,PIECE(B)]
CAIE ZR,PID
TRO D,40 ;THIS P PROMOTED
JRST .+1]
MOVE ZR,CHEOSQ(A)
DPB D,[101000,,ZR]
IDPB ZR,TT
CXPK2: AOBJN B,CXPK1
MOVEI ZR,0
IDPB ZR,TT ;TERMINATE LIST
MOVE ZR,-1(T) ;BITS AND MODES WD
DPB ZR,[$CXMOD+PKTBUF]
MOVE ZR,-5(T) ;DEPTH
DPB ZR,[$CXSTD+PKTBUF]
MOVE ZR,-4(T) ;INITIAL ALPHA
DPB ZR,[$CXALP+PKTBUF]
MOVE ZR,-3(T) ;INITIAL BETA
DPB ZR,[$CXBET+PKTBUF]
MOVE ZR,-2(T) ;INITIAL FLAGWORD
DPB ZR,[$CXFLG+PKTBUF]
MOVE ZR,-6(T) ;CHAIN WORD
DPB ZR,[$CXCHN+PKTBUF]
POPJ P,
CXBFNT: MOVE C,CBBIP ;CLOSE RING, AND START BACKGROUND SEARCH
LSH C,1
MOVE T,CBBBP
SUBI T,40
LSH T,1
MOVEI ZR,PKTBKS
DPB ZR,[$CCPKT+PKTBUF]
DPB C,[$CCBFM+PKTBUF]
DPB T,[$CCBF1+PKTBUF]
MOVEI ZR,3*2
DPB ZR,[$CPKNB+PKTBUF] ;DATA BYTES IN PACKET
PUSHJ P,CHSDTO
POPJ P,
;REQUEST RESULTS FROM CHEOPS
NGTV: MOVEI C,CBABL
CXGVN: MOVEI ZR,PKTRQR
DPB ZR,[$CXPKT+PKTBUF]
MOVE ZR,C
LSH ZR,1
DPB ZR,[$CXBFM+PKTBUF]
MOVEI ZR,2*2
DPB ZR,[$CPKNB+PKTBUF] ;PACKET DATA LENGTH IN BYTES
PUSHJ P,CHSDTO ;SEND REQUEST FOR RESULTS.
SYSCAL PKTIOT,[MOVEI CHNETI ? MOVEI PKTBUF]
;FOLLOWING SEMI-COMPATABLE WITH HCHGVR
LDB T,[$CPKOP+PKTBUF]
CAIE T,%CODAT
.VALUE ;NOT DATA PACKET
LDB T,[$CXPKT+PKTBUF]
CAIE T,PKTRES
.VALUE ;NOT RESULT PACKET
LDB J,[$CRSTD+PKTBUF]
MOVEM J,HCHSTD
MOVEM J,CHXSTD
MOVE J,$CRPV1+PKTBUF
SOSL HCHSTD
TLNN J,777774
JRST [ CLEARM CHXPV1
CLEARM CHXPV2
CLEARM CHXPV3
JRST NTGV1]
PUSHJ P,HCHMMV
MOVEM R,CHXPV1
MOVE J,$CRPV2+PKTBUF
SOSL HCHSTD
TLNN J,777774
JRST [ CLEARM CHXPV2
CLEARM CHXPV3
JRST NTGV1]
PUSHJ P,HCHMMV
MOVEM R,CHXPV2
MOVE J,$CRPV3+PKTBUF
SOSL HCHSTD
TLNN J,777774
JRST [ CLEARM CHXPV3
JRST NTGV1]
PUSHJ P,HCHMMV
MOVEM R,CHXPV3
NTGV1: LDB R,[$CRIVL+PKTBUF]
TRNE R,100000
ORCMI R,77777
MOVEM R,CHXIMB
LDB R,[$CRSTA+PKTBUF]
LDB J,[$CRSTB+PKTBUF]
LSH J,20
IOR J,R
MOVEM J,CHXSTA
LDB R,[$CRVAL+PKTBUF]
TRNE R,100000
ORCMI R,77777
MOVEM R,CHXVAL
POPJ P,