mirror of
https://github.com/PDP-10/its.git
synced 2026-02-16 12:53:06 +00:00
473 lines
8.9 KiB
Groff
Executable File
473 lines
8.9 KiB
Groff
Executable File
;;;MODIFICATION HISTORY
|
||
;;;
|
||
;;; 15 NOV 75 OBTAINED FROM DEC (KLDCP REV 7)
|
||
;;; 15 NOV 75 CONVERTED TO PALX FORMAT
|
||
;;;
|
||
|
||
.SBTTL APT10 PDP-11 PROCESS, 13-AUG-75
|
||
|
||
ACTFIL: CMP #5,LDCNTL ;LOADING ".BIN" ?
|
||
BNE 1$
|
||
MOV #1,LDCNTL ;YES, ACT10 CONVERTS TO ".A11"
|
||
1$: COMENQ ;REQUEST APT10 SERVICE
|
||
MOV #$INBUF,R0
|
||
COMCMD ;SEND COMMAND TO REMOTE
|
||
BCS 2$ ;C-BIT SET, FILE NOT FOUND
|
||
CLR ARETRY ;CLEAR RETRY COUNTER
|
||
BR ACTLD1 ;GO TO LOAD PROCESS
|
||
2$: JMP $NONXF
|
||
|
||
ACTLD2: TST DEVTYP
|
||
BMI 1$ ;ACT10
|
||
JMP LLD2 ;DECTAPE/RP04
|
||
1$: COMACK ;ACK PREVIOUS LINE
|
||
BCS ACTEOF ;C-BIT SET, EOF
|
||
CLR ARETRY ;CLEAR RETRY COUNTER
|
||
|
||
ACTLD1: INC DEVLC ;COUNT LINE
|
||
MOV DEVLC,SWR ;DISPLAY
|
||
TST LDCNTL ;DOING A "HELP" ?
|
||
BPL 1$ ;NO
|
||
DAHLP=.
|
||
TST DIAFLG ;DOING DIAMON
|
||
BEQ 30$ ;NO
|
||
TST DEVLC ;YES, FIRST LINE ?
|
||
BNE 31$ ;NO
|
||
JMP DIAFND ;YES, DIAMON FILE FOUND
|
||
31$: JMP DIARNL ;DIAMON READ NEW LINE
|
||
30$: TST IFILEF ;DOING AN INDIRECT FILE ?
|
||
BEQ 4$
|
||
JMP IFILEP ;YES, STORE INPUT
|
||
4$: SETFLG
|
||
HLPPNT ;NORMAL BACKSLASHES
|
||
MOV #$INBUF,R0 ;YES, PRINT INPUT LINE
|
||
TST DEVTYP
|
||
BPL 41$
|
||
MOV #CINBF,R0
|
||
41$: PNTAL
|
||
CLR HLPPNT
|
||
BR ACTLD2 ;REPEAT TILL "EOT"
|
||
|
||
1$: JMP LDPROC ;GO TO LOAD PROCESS
|
||
|
||
ACTEOF: COMCLR
|
||
|
||
DAHLPD=.
|
||
TST DIAFLG ;DOING DIAMON ?
|
||
BEQ 10$ ;NO
|
||
JMP DIAEOF ;YES, SEND DIAMON END OF FILE
|
||
10$: TST IFILEF ;INDIRECT/DOUBLE INDIRECT ?
|
||
BNE 21$ ;YES
|
||
PCRLF ;NO, JUST HELP
|
||
BR 23$ ;BACK TO CONSOLE
|
||
|
||
21$: TST JFILEF ;DOUBLE INDIRECT ?
|
||
BPL 22$ ;NO
|
||
TSTB JFILEF ;PRESENT JUST INDIRECT ?
|
||
BEQ 22$ ;YES
|
||
CLRB JFILEF ;SET DONE WITH READING "J"
|
||
MOV #TOUTBF+5000,JFINP ;SET "J" POINTER TO BEGINNING
|
||
JMP CONSL ;START RUNNING
|
||
|
||
22$: MOV #TOUTBF,IFINP ;SET POINTER TO BEGINNING
|
||
CLRB IFILEF
|
||
23$: JMP $CONSL ;GO PROCESS INDIRECT FILE
|
||
|
||
ACTDON: COMACK ;ACK TRANSFER BLOCK
|
||
BCC 3$
|
||
DADONE=.
|
||
TST SRTFLG ;SELF START ?
|
||
BEQ 1$
|
||
JMP $$GO ;YES
|
||
1$: JMP $CONSL ;NO
|
||
|
||
3$: PMSG <?EOF,ERR>
|
||
$$C2: JMP $CNTLC
|
||
|
||
ACTLDC: PMSG <?LOAD CHR>
|
||
BR ACTERR
|
||
|
||
ACTBCK: PMSG <?CKSUM>
|
||
BR ACTERR
|
||
|
||
ACTLDF: PMSG <?FORMAT>
|
||
|
||
ACTERR: PMSG < ERR: LOAD LINE >
|
||
MOV DEVLC,R0
|
||
PNTDEC ;PRINT LOAD LINE NUMBER
|
||
PCRLF
|
||
TST DEVTYP
|
||
BPL 2$ ;DECTAPE/RP04
|
||
INC ARETRY
|
||
CMP #4,ARETRY ;REACHED RETRY LIMIT ?
|
||
BEQ 1$ ;YES
|
||
COMNAK ;NO, NAK MESSAGE & TRY AGAIN
|
||
DEC DEVLC ;DECREMENT LINE COUNT
|
||
JMP ACTLD1
|
||
|
||
1$: PMSG <CAN'T LOAD>
|
||
2$: BR $$C2
|
||
|
||
.SBTTL COMMUNICATIONS ROUTINES
|
||
|
||
$COMACK:INC MSGNBR ;COUNT MESSAGE
|
||
$$CMACK:MOV #ACKMSG,R5 ;MESSAGE ACKNOWLEDGE
|
||
BR $COMCX
|
||
|
||
$COMNAK:MOV #NAKMSG,R5 ;MESSAGE NEGATIVE ACKNOWLEDGE
|
||
BR $COMCX
|
||
|
||
$COMCMD:CLR R5 ;MESSAGE COMMAND
|
||
|
||
$COMCX: MOV #3,R4 ;RETRY 3 TIMES
|
||
|
||
1$: TST R5
|
||
BNE 2$
|
||
|
||
COMSND ;COMMAND SEND
|
||
BR 3$
|
||
|
||
2$: MOV R5,R0
|
||
COMCTL ;CONTROL SEQUENCE SEND
|
||
|
||
3$: COMLIN ;GET REPLY
|
||
BCS 5$ ;ERROR
|
||
BPL 7$ ;CONTROL SEQUENCE
|
||
|
||
MOV #136,R3 ;NORMAL MESSAGE
|
||
BIT #1,MSGNBR ;ODD OR EVEN MESSAGE NUMBER
|
||
BEQ 4$
|
||
MOV #041,R3
|
||
4$: CMP R3,COMNBR ;CORRECT MESSAGE NUMBER ?
|
||
BNE $$CMACK ;NO, MUST BE REPEAT
|
||
CLR R0
|
||
41$: EXIT ;NEW MESSAGE READY FOR PROCESS
|
||
|
||
5$: DEC R4 ;EXCEEDED RETRY LIMIT ?
|
||
BNE 6$ ;NO, TRY AGAIN
|
||
JMP $COMERR ;YES, REPORT ERROR & ABORT
|
||
|
||
6$: TST R5
|
||
BNE 61$ ;CONTROL REPEAT
|
||
CMP #-5,R0 ;RECIEVED CHECKSUM ERROR ?
|
||
BEQ 61$ ;YES, SEND NAK
|
||
COMRTRY ;COMMAND RETRY
|
||
BR 3$
|
||
|
||
61$: MOV #NAKMSG,R5
|
||
BR 2$
|
||
|
||
7$: TTICHR ;GET CONTROL SEQUENCE CHARACTER
|
||
CMPB #'A,R0
|
||
BEQ 41$ ;A, ACKNOWLEDGE
|
||
CMPB #'Z,R0
|
||
BEQ 8$ ;Z, END OF TRANSMISSION
|
||
CMPB #'N,R0
|
||
BNE 71$
|
||
MOV #-7,R0 ;N, NEGATIVE ACKNOWLEDGE
|
||
BR 5$
|
||
|
||
71$: MOV #-10,R0 ;UNKNOWN RESPONSE
|
||
BR 5$
|
||
|
||
8$: EXITERR ;END OF FILE
|
||
|
||
$COMERR:PUSH R0
|
||
PMSG <?COMM ERR >
|
||
POP R0
|
||
NEG R0
|
||
MOV R0,R1
|
||
PNTOCS
|
||
PNTCI
|
||
",
|
||
DEC R1
|
||
SL R1,1
|
||
MOV CMERTB(R1),R0
|
||
PNTAL
|
||
JMP $CNTLC
|
||
|
||
CMERTB: CMER1
|
||
CMER2
|
||
CMER3
|
||
CMER4
|
||
CMER5
|
||
CMER6
|
||
CMER7
|
||
CMER10
|
||
|
||
CMER1: .ASCIZ %NO RESPONSE%
|
||
CMER2: .ASCIZ %LONG LINE%
|
||
CMER3: .ASCIZ %MSG NBR%
|
||
CMER4: .ASCIZ %NO CR%
|
||
CMER5: .ASCIZ %MSG CKSUM%
|
||
CMER6: .ASCIZ %FORMAT%
|
||
CMER7: .ASCIZ %NAK%
|
||
CMER10: .ASCIZ %UNKNOWN%
|
||
.EVEN
|
||
|
||
$COMSND:MOV #COUTBF,R5
|
||
CLR R3
|
||
|
||
1$: CMPB (R0),#CR ;REACHED CR YET ?
|
||
BEQ 2$ ;YES
|
||
CMPB (R0),#ALTMOD ;OR ALTMODE ?
|
||
BEQ 12$ ;YES, SUBSTITUTE CR
|
||
|
||
TSTB (R0) ;REACHED NULL BYTE ?
|
||
BNE 11$
|
||
MOV #-6,R0 ;YES, INCORRECT MESSAGE FORMAT
|
||
BR $COMERR
|
||
|
||
11$: MOVB (R0),R2
|
||
ADD R2,R3 ;ACCUMULATE CHECKSUM
|
||
MOVB (R0)+,(R5)+ ;TRANSFER MSG TO OUTPUT BUFFER
|
||
BR 1$
|
||
|
||
12$: MOV #ALTMOD,(R5)+
|
||
BR 22$
|
||
2$: MOVB (R0)+,(R5)+ ;PUT CR IN OUTPUT
|
||
22$: CLRB (R5) ;FOLLOW WITH NULL
|
||
|
||
MOV #COUTBF-4,R5 ;SETUP MESSAGE START
|
||
MOVB #136,(R5)
|
||
BIT #1,MSGNBR ;SET UP MESSAGE NUMBER CHAR
|
||
BEQ 21$
|
||
MOVB #041,(R5)
|
||
21$: INC R5
|
||
|
||
NEG R3 ;NEGATE CHECKSUM
|
||
|
||
MOV R3,R0
|
||
SWAB R0
|
||
BIC #177400,R0
|
||
SHIFTR
|
||
4
|
||
JSR PC,COMASC
|
||
MOVB R0,(R5)+ ;INSERT 1ST CHECK CHAR
|
||
|
||
MOV R3,R0
|
||
SHIFTR
|
||
6
|
||
JSR PC,COMASC
|
||
MOVB R0,(R5)+ ;INSERT 2ND CHECK CHAR
|
||
|
||
MOV R3,R0
|
||
JSR PC,COMASC
|
||
MOVB R0,(R5)+ ;INSERT 3RD CHECK CHAR
|
||
|
||
$CMRTRY:MOV #COUTBF-4,R0 ;SETUP MESSAGE POINTER
|
||
|
||
$COMCTL:TSTB @$CMTKS ;ANY OLD CHARS ?
|
||
BPL 1$
|
||
MOVB @$CMTKB,$TTYIN ;YES, GET GET OF IT
|
||
BR $COMCTL
|
||
|
||
1$: TSTB @$CMTPS ;WAIT TILL OUTPUT IS READY
|
||
BPL $COMCTL
|
||
|
||
MOV #2,R1 ;SEND 2 SYNC CHARACTERS
|
||
2$: MOVB #SYN,@$CMTPB
|
||
3$: TSTB @$CMTPS
|
||
BPL 3$
|
||
DEC R1
|
||
BNE 2$
|
||
|
||
4$: MOVB (R0)+,R1 ;GET MESSAGE CHAR
|
||
BEQ 6$ ;IF NULL, DONE
|
||
|
||
MOVB R1,@$CMTPB ;SEND CHAR
|
||
5$: TSTB @$CMTPS ;WAIT TILL OUTPUT READY
|
||
BPL 5$
|
||
BR 4$ ;SEND TILL NULL
|
||
|
||
6$: EXIT ;COMPLETED
|
||
|
||
COMASC: BIC #177700,R0 ;KEEP 6 BITS
|
||
CMP R0,#74 ;LEAVE 75,76,77 ALONE
|
||
BGT 1$
|
||
BIS #100,R0 ;SET BIT 7 FOR ASCIIZE
|
||
1$: RTS PC
|
||
|
||
$COMLIN:MOV #CINBF-4,R1 ;START BUFFER ADDRESS
|
||
CLR $TTYTIM ;CLEAR TIMEOUT
|
||
CLR R5 ;CLEAR IN SYNC FLAG
|
||
|
||
1$: JSR PC,C10COP ;PERFORM CLOCK OPERATIONS
|
||
CMP $TTYTIM,#<20.*60.> ;20 SECS
|
||
BGT 90$ ;TIMED OUT
|
||
|
||
TSTB @$CMTKS ;COMM IN FLAG SET ?
|
||
BMI 2$ ;YES
|
||
|
||
JSR PC,$PTTYC ;ANY OPERATOR INTERRUPT ?
|
||
BR 1$ ;NO
|
||
|
||
2$: MOVB @$CMTKB,(R1) ;MOVE CHAR TO BUFFER
|
||
BICB #200,(R1)
|
||
TSTB (R1)
|
||
BEQ 1$ ;IGNORE NULLS
|
||
|
||
CMPB (R1),#SYN ;SYNC CHAR ?
|
||
BEQ 21$ ;YES
|
||
|
||
TST R5 ;RECIEVED SYNC YET ?
|
||
BEQ 1$ ;NO, DUMP GARBAGE CHARS
|
||
|
||
CMPB (R1),#ALTMOD
|
||
BEQ 3$ ;ALTMODE, CONTROL SEQUENCE
|
||
|
||
CMPB (R1),#'$ ;DOLLAR, PDP-10 SENDS THIS FOR ALTMODE
|
||
BNE 22$
|
||
CMP R1,#CINBF ;LEGAL ONLY IF IN CONTROL SEQUENCE
|
||
BLT 3$
|
||
|
||
22$: CMPB (R1),#LF
|
||
BEQ 4$ ;LF, MESSAGE SEGMENT
|
||
|
||
INC R1
|
||
CMP R1,#CINBF+140.
|
||
BLE 1$ ;STILL ROOM
|
||
BR 91$ ;NO, LINE TOO LONG
|
||
|
||
21$: MOV #-1,R5 ;SYNC, SET IN SYNC FLAG
|
||
BR 1$
|
||
|
||
3$: INC R1 ;NULL TO END BUFFER
|
||
CLRB (R1)
|
||
MOV R1,$INPTR ;SETUP INPUT POINTERS
|
||
MOV #CINBF-4,$INPTC
|
||
EXIT ;CONTROL SEQUENCE RETURN
|
||
|
||
4$: INC R1
|
||
CLRB (R1)
|
||
MOV R1,$INPTR ;SETUP INPUT POINTERS
|
||
MOV #CINBF-4,R1
|
||
CMPB #041,(R1)
|
||
BEQ 41$
|
||
CMPB #136,(R1)
|
||
BEQ 41$
|
||
BR 92$ ;MESSAGE NUMBER INCORRECT
|
||
|
||
41$: MOVB (R1)+,COMNBR ;SAVE MESSAGE NUMBER
|
||
CLR R0 ;SETUP FOR MESSAGE CHECKSUM
|
||
MOV #3,R5 ;CHARS 2,3,4 ARE CHECKSUM
|
||
|
||
42$: SL R0,6
|
||
MOVB (R1)+,R4 ;GET 1ST CHECK CHAR
|
||
BIC #100,R4 ;CLEAR ASCIIZE BIT
|
||
BIS R4,R0 ;INSERT IN 16 BIT CHECKSUM
|
||
DEC R5
|
||
BGT 42$ ;DO 3 CHARS
|
||
|
||
43$: CMPB (R1),#CR ;REACHED EOL ?
|
||
BEQ 44$ ;YES
|
||
TSTB (R1) ;PAST EOL WITHOUT CR ?
|
||
BEQ 93$ ;YES, NO CR ERROR
|
||
|
||
MOVB (R1)+,R3
|
||
ADD R3,R0 ;ACCUMULATE CHECKSUM
|
||
BR 43$
|
||
|
||
44$: TST R0 ;DID CHECKSUM COMPUTE TO 0 ?
|
||
BNE 94$ ;NO, CHECKSUM ERROR
|
||
|
||
MOV #CINBF,$INPTC ;MESSAGE SEGMENT OK
|
||
BIS #NBIT,14(SP) ;SET NORMAL MESSAGE INDICATOR
|
||
EXIT
|
||
|
||
90$: MOV #-1,R0 ;NO RESPONSE ERROR
|
||
BR 99$
|
||
|
||
91$: MOV #-2,R0 ;LINE TOO LONG ERROR
|
||
BR 99$
|
||
|
||
92$: CMPB #'?,(R1) ;IS MESSAGE NUMBER QUESTION MARK ?
|
||
BEQ COMQ ;YES, HOST ERROR
|
||
MOV #-3,R0 ;MESSAGE NUMBER CHAR ERROR
|
||
BR 99$
|
||
|
||
93$: MOV #-4,R0 ;NO CARRIAGE RETURN ERROR
|
||
BR 99$
|
||
|
||
94$: MOV #-5,R0 ;MESSAGE CHECKSUM ERROR
|
||
|
||
99$: EXITERR ;ERROR EXIT, C-BIT SET, CODE IN R0
|
||
|
||
COMQ: $PMSG ;PRINT ERROR REPLY
|
||
CINBF-4
|
||
JMP $CNTLC
|
||
|
||
$COMENQ:COMCLR ;CLEAR COMMUNICATIONS
|
||
SETFLG
|
||
ENQFLG ;SET APT10 IN PROGRESS
|
||
MOV #3,R4
|
||
10$: CLR MSGNBR ;INITIALIZE MESSAGE NUMBER
|
||
MOV #ENQMSG,R0
|
||
COMCTL ;SEND "ENQ" MESSAGE
|
||
|
||
COMLIN ;WAIT FOR REPLY
|
||
BCS 1$ ;ERROR, CODE IN R0
|
||
BMI 3$ ;NORMAL MESSAGE REPLY ?
|
||
TTICHR
|
||
CMPB #'A,R0 ;A, ACKNOWLEDGE
|
||
BNE 1$
|
||
EXIT ;ACKED, GO AHEAD
|
||
|
||
1$: TST R0 ;IS REPLY CODE NEGATIVE ?
|
||
BMI 4$ ;YES, COMLIN ERROR
|
||
|
||
CMPB #'Z,R0 ;IS REPLY EOT, WAIT ?
|
||
BNE 3$ ;NO
|
||
|
||
CLR $TTYTIM ;YES, WAIT 10 SECONDS
|
||
2$: JSR PC,$PTTYC
|
||
JSR PC,C10COP
|
||
CMP $TTYTIM,#<10.*60.>
|
||
BLE 2$
|
||
BR $COMENQ ;THEN TRY AGAIN
|
||
|
||
3$: PMSG <?APT10 ENQ>
|
||
JMP $CNTLC
|
||
|
||
4$: DEC R4
|
||
BNE 10$ ;RETRY
|
||
JMP $COMERR ;COMMUNICATIONS ERROR
|
||
|
||
$COMEOT:MOV #EOTMSG,R0
|
||
COMCTL
|
||
EXIT
|
||
|
||
$COMCLR:CLR ENQFLG
|
||
MOV #CANMSG,R0
|
||
COMCTL
|
||
MOV #100000,R1
|
||
1$: TSTB @$CMTKS ;ANY INPUT IN PROGRESS ?
|
||
BPL 2$
|
||
MOVB @$CMTKB,R0 ;IF SO, GET RID OF IT
|
||
BR 1$
|
||
2$: DEC R1
|
||
BNE 1$ ;A LITTLE DELAY
|
||
EXIT
|
||
|
||
ENQMSG: .BYTE 'E,33,0
|
||
ACKMSG: .BYTE 'A,33,0
|
||
NAKMSG: .BYTE 'N,33,0
|
||
CANMSG: .BYTE 'C,33,0
|
||
EOTMSG: .BYTE 'Z,33,0
|
||
|
||
.EVEN
|
||
|
||
IFILEP: MOV #$INBUF,R0 ;SETUP POINTERS
|
||
TST DEVTYP
|
||
BPL 10$
|
||
MOV #CINBF,R0
|
||
10$: MOV IFINP,R1
|
||
1$: MOVB (R0)+,(R1)+ ;TRANSFER CHARS TO STORAGE
|
||
BNE 1$ ;TILL NULL
|
||
CLRB (R1) ;THEN STORE 2ND NULL
|
||
MOV R1,IFINP ;RESAVE POINTER
|
||
CMP R1,#TOUTBF+10000-200
|
||
BLE 2$ ;EXCEEDED BUFFER ROOM ?
|
||
JMP $LINERR ;YES
|
||
2$: JMP ACTLD2 ;REPEAT TILL EOF
|
||
|