1
0
mirror of https://github.com/PDP-10/its.git synced 2026-03-06 19:31:20 +00:00

ITSCOM - ITS-SITS communication.

This commit is contained in:
Lars Brinkhoff
2022-11-03 08:35:46 +01:00
parent 5fc1e4987b
commit 6f3a50c4c6
4 changed files with 260 additions and 1 deletions

View File

@@ -44,7 +44,7 @@ SRC = syseng sysen1 sysen2 sysen3 sysnet kshack dragon channa \
mits_s rab stan_k bs cstacy kp dcp2 -pics- victor imlac rjl mb bh \
lars drnil radia gjd maint bolio cent shrdlu vis cbf digest prs jsf \
decus bsg muds54 hello rrs 2500 minsky danny survey librm3 librm4 \
klotz atlogo clusys cprog r eb cpm mini nova sits nlogo
klotz atlogo clusys cprog r eb cpm mini nova sits nlogo bee
DOC = info _info_ sysdoc sysnet syshst kshack _teco_ emacs emacs1 c kcc \
chprog sail draw wl pc tj6 share _glpr_ _xgpr_ inquir mudman system \
xfont maxout ucode moon acount alan channa fonts games graphs humor \

View File

@@ -1680,6 +1680,11 @@ expect ":KILL"
respond "*" ":palx hlogo_@hlogo\r"
expect ":KILL"
# ITSCOM, ITS-SITS communication.
respond "*" ":cwd bee\r"
respond "*" ":palx itscom\r"
expect ":KILL"
# TORTIS
respond "*" ":midas;324 radia;_tortis\r"
expect ":KILL"

View File

@@ -54,6 +54,7 @@ bawden/probe.258 198906261502.52
bawden/shutdn.6 199002020121.48
bawden/u.14 198502212133.11
bawden/uptime.1 198606230218.09
bee/itscom.20 197509130056.46
bkph/bull.43 197507160659.47
bkph/grade.30 197507160700.38
bkph/lines.138 197011230739.11

253
src/bee/itscom.20 Executable file
View File

@@ -0,0 +1,253 @@
.TITLE 10-11 COMUNICATIONS PACKAGE
.INSRT SITS;SITMAC >
.INSRT SITS;SITSS SYMS
FOO==0
.MACRO CROCK A,MESSAGE
MES'A=.
FOOBAR==.
.ASCII ÍESSAGEŠ MES'A'L==.-FOOBAR
.EVEN
.ENDM
.MACRO MESS MESSAGE
CROCK \FOO,^/MESSAGE/
FOO==FOO+1
.ENDM
MESS ^/INPUT TO LONGî/
MESS ^/DISK NUMBER: /
MESS ^/DIRECTORY: /
MESS ^/FILE NAME: /
MESS ^/INPUT FILE: /
MESS ^/CANT COPY ROOTî/
MESS ^/CANT MUTATE TO DIRECTORYî/
MESS ^/CANT ADD FILE TO DIRECTORYî/
MESS ^/CANT OPEN ITSî/
MESS ^/PDP11U/
MESS ^/NLODER /
.BLKW 40
PDL:
.BLKW 2 ;FOR THE INTERRRUPT PROCESSOR
PDL1:
ITSTTY: 1 ;TTY FOR ITS
ITSCAP: 0
OLDPTR: .BLKW 2 ;STORAGE FOR THE POINTER TO THE START OF LAST BLOCK IN FILE
SYMFLG: 0 ;ZERO MEANS NO SYMBOLS YET
TTYCAP==3
FILLEN==40.
FILBLK: .BLKB FILLEN+2 ;PLACE FOR FILE NAME AND EXTRA BYTE FOR SURE
FILCAP: 0
PATCH: .BLKW 100
START: MOV #PDL,P
SAVE <,#.TIECM!.TICVM!.TLIPM!.TIRST,#TTYCAP>
BIS #.TTMOV,(P) ;SET THE TTY STATUS
$INVOK
SAVE <#-1,ITSTTY,#.TTCAP*400>
.INVOK ;CREATE THE ITS TTY
BNE ITSOPN ;GOT IT
ADD #6,P ;POP ARGUMENTS
SAVE <#MES10,#-MES10L,#TTYCAP> ;OUTPUT ERROR MESSAGE
$BLKO
BPT
BR START
ITSOPN: REST ITSCAP ;SAVE IT
SAVE <,#.TIMGO!.TIMGI!.TIRST,ITSCAP> ;SET IT TO IMAGE IN IMAGE OUT
BIS #.TTMOV,(P) ;SET THE STATUS
$INVOK
TRYAGA: SAVE <#MES1,#-MES1L,#TTYCAP>
$BLKO ;FIND OUT WHICH DISK
JSR PC,GETLIN ;GET THE LINE
BEQ TRYAGA ;TRY AGAIN
MOV #4,B ;THE DEFAULT DIRECTORY
CMP A,#FILBLK ;IS IT NULL?
BEQ DEFDIR ;JUST USE THE DEFAULT
CMP A,#FILBLK+1 ;BETTER BE ONLY ONE BYTE
BNE TRYAGA ;TRY AGAIN
MOV FILBLK,B ;GET THE BYTE
SUB #'0-10,B ;TURN IT INTO CAPABILITY INDEX
DEFDIR: SAVE <#-1,,B> ;COPY THE APPROPRIATE ROOT CAPABILITY
BIS #.CPYCP,(P) ;COPY IT
.INVOK
BNE GODROT ;SO FAR OKAY
ADD #6,P ;POP OFF STUFF
SAVE <#MES5,#-MES5L,#TTYCAP>
$BLKO ;SAY ERROR IN ROOT COPY
BR TRYAGA ;AND TRY AGAIN
GODROT: REST FILCAP ;THE FILE CAPABILITY
SAVE <#MES2,#-MES2L,#TTYCAP>
$BLKO ;ASK FOR DIRECTORY
JSR PC,GETLIN ;GET THE LINE FROM TTY
BNE MUTRUT ;NO
CMP A,#FILBLK ;ANY INPUT
BEQ GODMUT ;DONT MUTATE IT
ERR: SAVE <,,FILCAP> ;DELETE THE FILE CAPABILITY
BIS #.DELCP,(P) ;DELETE IT
$INVOK
BR TRYAGA ;TRY AGAIN
MUTRUT: CMP A,#FILBLK ;ANY INPUT
SAVE <,#FILBLK,FILCAP> ;MUTATE THE RUT TO THE DIRECTORY
BIS #.FAMU,(P)
.INVOK
BNE GODMUT ;GOT IT
ADD #6,P ;POP JUNK
SAVE <#MES6,#-MES6L,#TTYCAP>
$BLKO ;OUTPUT MESSAGE
BR ERR ;DELETE CAPABILITY AND TRY AGAIN
GODMUT: SAVE <#MES3,#-MES3L,#TTYCAP>
$BLKO ;ASK FOR THE FILE NAME
JSR PC,GETLIN ;GET THE LINE
BEQ ERR ;FAILED SO DELETE AND TRY AGAIN
SAVE <#0,#FILBLK,FILCAP>
BIS #.FAAD,(P) ;ADD THE FILE WITH THAT NAME TO THE DIRECTORY
.INVOK ;ADD IT
BNE GODADD ;ADDED IT SUCESSFULLY
ADD #6,P ;GO IT
SAVE <#MES7,#-MES7L,#TTYCAP>
$BLKO ;COMPLAIN ABOUT NOT ADDING IT
BR ERR
GODADD: SAVE <,#FILBLK,FILCAP> ;TRY TO MUTATE TO IT
BIS #.FAMU,(P)
$INVOK ;MUTATE TO IT.
SAVE <#MES4,#-MES4L,#TTYCAP>
$BLKO ;ASK FOR ITS FILE NAME
JSR PC,GETLIN ;GET THE ITS FILE LINE
SUB #FILBLK,A ;GET THE NUMBER OF BYTES
MOV A,F ;SAVE IT
BEQ ERR ;GOT TO HAVE A FILE NAME
SAVE <#32,ITSCAP> ;OUTPUT A ^Z TO ITS
$BYTO
JSR PC,WAIT10 ;WAIT FOR THE 10 TO RESPOND
SAVE <#MES11,#-MES11L,ITSCAP> ;OUTPUT STRING TO LOG IN AS PDP11
$BLKO
NEG F ;NEGATIVE BYTE COUNT
JSR PC,WAIT10 ;WAIT FOR THE 10
SAVE <#MES12,#-MES12L,ITSCAP> ;OUTPUT THE STRING TO START NLODER
$BLKO
SAVE <#FILBLK,F,ITSCAP> ;OUTPUT FILE NAME
$BLKO ;OUTPUT THE FILE NAME TO ITS
SAVE <,#.TIRST,ITSCAP> ;RESET THE INPUT BUFFER
BIS #.TTBIS,(P) ;JUST SET THE FLAG
$INVOK
SAVE <#15,ITSCAP> ;OUTPUT CR
$BYTO
SAVE #INTRUP ;FOR THE INTERRUPT HANDLER
$FORK ;START IT UP
CLR SYMFLG ;SAY WE HAVEN'T LOADED SYMBOLS YET
WATLOP: CLR F ;THE CHECKSUM
JSR PC,REDBYT ;READ A BYTE
CMP D,#1 ;IS IT THE START OF A BLOCK
BNE WATLOP ;YES
JSR PC,REDBYT ;THROW AWAY A 0
MOV #OLDPTR,D ;POINT TO THE STORAGE FOR IT
SAVE <,,FILCAP> ;READ THE POINTER
BIS #.FARP,(P)
$INVOK
REST <(D)+,(D)+> ;PUT AWAY THE POINTER
SAVE <#1,FILCAP> ;OUTPUT TO THE FILE
$BYTO ;OUTPUT THE BYTE TO START
MOV #5,E ;THE NUMBER OF BYTES LEFT (JUST A KLUDGE TO GET CONSTANT 3)
JSR PC,GWORD ;GET A WORD INTO A
SUB E,A ;ALREADY GRABBED 3 BYTES
CMP E,A ;IS IT NOW 3 (IMPLYING LENGTH OF 6)
BEQ CHKDON ;SEE IF WE ARE DONE
MOV A,E ;NEW BYTE COUNT
RECEV: JSR PC,GWORD ;GET WORD INTO A
TST E ;ANY MORE BYTES
BGT RECEV
INCB F ;IS THE CHECKSUM 0?
BNE BADBLK ;NO
SAVE <#4,ITSCAP> ;SEND A GOOD ACKNOWLEDGE
$BYTO
BR WATLOP ;GET THE NEXT BLOCK
BADBLK: SAVE <#6,ITSCAP> ;SEND A BAD ACKNOWLEDGE
$BYTO
MOV #OLDPTR+4,E ;POINT TO START OF THIS BLOCK IN THE FILE
SAVE <-(E),-(E),FILCAP> ;RESET THE POINTER TO POINT TO THE START (OVERWRITE THE
;BAD BLOCK
BIS #.FASP,(P) ;SET THE POINTER
$INVOK
BR WATLOP ;TRY AGAIN
CHKDON: TST SYMFLG ;HAVE WE RECEIVED THE SYMBOLS YET?
BEQ .+4 ;NO
FINIS: BPT ;DONE
COM SYMFLG ;SET THE FLAG
BR WATLOP ;PRETEND TO RECEIVE A NEW PROGRAM (MAINLY THE SYMBOL TABLE)
WAIT10: SAVE <ITSCAP,(P),(P)> ;FOR THE 3 BYTI'S
$BYTI ;INPUT 3 BYTES
TST (P)+
$BYTI
TST (P)+
$BYTI
TST (P)+
SAVE <#23,ITSCAP> ;OUTPUT A ^S
$BYTO
RTS PC
;THE 10 PROGRAM SENDS LOW 6 BITS, THEN 4 BITS, THEN 6 BITS =>16 BITS
GWORD: JSR PC,REDBYT ;READ A BYTE
MOV D,A ;PLACE TO RETURN THE WORD OR BYTE
JSR PC,REDBYT ;GET THE TOP OF THIS BYTE
SWAB D ;PUT INTO THE TOP BYTE
ASR D
ASR D ;SHIFT IT DOWN TO COVER TOP 2 BITS OF BOTTOM BYTE
BIS D,A ;SET IT IN
MOV A,D ;COPY IT
BIC #177400,D ;CLEAR THE TOP BYTE
ADD D,F ;FIX UP THE CHECKSUM
SAVE <D,FILCAP> ;THE FILE CAPABILITY
$BYTO ;WRITE OUT THE BYTE
DEC E ;DECREMENT THE BYTE COUNT
BEQ DONE ;DONE NO MORE BYTES
JSR PC,REDBYT ;GET THE OTHER BYTE
SWAB D ;PUT INTO THE TOP BYTE
ASL D
ASL D ;PUT THE CHAR INTO THE TOP 6 BITS
BIS D,A ;SET IT INTO THE TOTAL WORD
MOV A,D ;COPY IT AGAIN
SWAB D ;WANT THE TOP BYTE THIS TIME
BIC #177400,D ;CLEAR THE BOTTOM BYTE (REMEMBER THEY ARE SWABBED HERE)
ADD D,F ;FIX UP CHECKSUM
SAVE <D,FILCAP> ;OUTPUT THIS BYTE TO
$BYTO
DONE: DEC E ;ONE LESS BYTE
RTS PC
REDBYT: SAVE ITSCAP
$BYTI
REST D
BIC #177600,D ;CLEAR ALL BUT THE BOTTOM BITS
SUB #40,D ;THIS IS A KLUDGE TO AVOID CONTROL CHARACTERS
RTS PC
INTRUP: MOV #PDL1,P ;SET UP P
SAVE <,#.TIRST,#TTYCAP>
BIS #.TTBIS,(P) ;BIS SET THE RESET FLAG
$INVOK ;RESET THE TTY
CTZLOP: SAVE #TTYCAP
$BYTI
CMPB (P)+,#32 ;IS IT CONTROL Z?
BNE .+4 ;NO
BPT
BR CTZLOP ;JUST CONTINUE
GETLIN: MOV #FILBLK,A ;THE POINTER TO WHERE TO PUT THE DATA
MOV #FILLEN,B ;NUMBER OF BYTES IN INPUT BUFFER
CHARLP: SAVE #TTYCAP
$BYTI ;GET A BYTE
CMPB (P),#15 ;IS IT CARRIAGE RETURN
BEQ CHARDN ;YES, WE ARE DONE
MOVB (P)+,(A)+ ;PUT IT INTO THE BUFFER
SOB B,CHARLP ;TRY UNTIL IT IS FULL
SAVE <#MES0,#-MES0L,#TTYCAP>
$BLKO ;OUTPUT LINE TO LONG
SEZ
RTS PC
CHARDN: TST (P)+ ;POP CHARCTER
CLRB (A) ;MAKE SURE THERE IS A ZERO BYTE
CLZ
RTS PC
.END START