mirror of
https://github.com/PDP-10/stacken.git
synced 2026-03-08 03:29:27 +00:00
9336 lines
220 KiB
Plaintext
9336 lines
220 KiB
Plaintext
/DN92 - NETWORK REMOTE STATION - 24 MAR 81
|
||
/
|
||
/THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
|
||
/ OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
|
||
/
|
||
/COPYRIGHT (C) 1978,1979,1980,1981 BY DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
|
||
/ DATE LOAD EDIT #
|
||
/ ---- ---- ------
|
||
/
|
||
/03-MAR-81 70143 22
|
||
/9600
|
||
/24-MAR-81 70146 23
|
||
/
|
||
/
|
||
/DAVE MCCLURE 20-FEB-1973
|
||
/KALMAN RETI 25-APR-1975
|
||
/MARILYN TOOMEY 29-MAR-1977
|
||
|
||
/ THE EXISTENCE OF A FEATURE TEST SWITCH IN THIS CODE DOES NOT IMPLY
|
||
/ THE SWITCH IS TESTED OR SUPPORTED.
|
||
/ E.G. FEATURE TEST SWITCHES ARE PROVIDED FOR STATIONS WITH A HIGH
|
||
/ SPEED PAPER TAPE READER/PUNCH OR A PLOTTER BUT THESE ARE NOT
|
||
/ SUPPORTED.
|
||
|
||
MAJOR=1;MINOR=23 /VERSION AND EDIT
|
||
|
||
VEDIT=MAJOR^100+MINOR /SOFTWARE VERSION NUMBER
|
||
|
||
/EDIT HISTORY
|
||
|
||
/0(13) KR 15-MAY-80 ADD "CAN SET HOST" BIT TO TTY CONNECT CONFIRM
|
||
/1(14) KR 9-JUN-80 MAKE TTY'S SEND CHARACTERISTICS TO HOST FOR
|
||
/ COMPATIBILITY WITH 7.01; ALSO MAKE NEILEN
|
||
/ IN THE CONFIGURATION FILE, ADD COMMENTS.
|
||
/1(15) KR 25-JUN-80 FIX BUG THAT COULD GET TWO LINES CONNECTED
|
||
/ TO SAME LAT
|
||
/1(16) KR 1-JUL-80 FIX RACE IN STORING ESCAPE CHARACTERS
|
||
/
|
||
/1(17) KR 3-JUL-80 BUM WORD FROM LPTOFN TO MAKE ALL CONFIGURATIONS
|
||
/ ASSEMBLE
|
||
/1(20) KR 8-JUL-80 FIX NOT CONNECTING TO HOST IF ONLY ONE
|
||
/ BUG (REPORTED BY DAVE NEWMAN)
|
||
/1(21) KR 15-JUL-80 MAKE TAB SIMULATION USE EVEN PARITY BLANK
|
||
/
|
||
/1(22) DWB 3-MAR-81 REMOVE CONDITIONAL AROUND BUGGER SO THAT
|
||
/ FTDEBUG=0 WILL WORK
|
||
/1(23) DAD 10-MAR-81 FIX CONNECT BUG WHERE ONE TTY MAY GET OUTPUT
|
||
/ MEANT FOR ANOTHER
|
||
/
|
||
/ (TO CONFORM TO -11 USAGE)
|
||
|
||
|
||
|
||
/STARTING INSTRUCTIONS
|
||
/ NORMAL STARTING ADDRESS IS 200
|
||
/ RESTART ADDRESS IS 200
|
||
|
||
/ASSEMBLY INSTRUCTIONS
|
||
/ .R PAL10
|
||
/ *DSK:DN92.BIN=DSK:C.PAL,DSK:DN92.PAL
|
||
/ WHERE C.PAL IS A CONFIGURATION FILE
|
||
/DEFAULT SWITCHES
|
||
|
||
|
||
IFNDEF NEILEN <NEILEN=20> /DEFAULT NETWORK SIZE [1(14)]
|
||
IFZERO NEILEN <NEILEN=20>/MAKE SURE NO TURKEY TRIES ZERO [1(14)]
|
||
ZZ=NEILEN&4000 /CHECK SIGN BIT [1(14)]
|
||
IFNZRO ZZ <NEILEN=20> /IF USER GAVE NEGATIVE NUMBER, SET TO DEFAULT [1(14)]
|
||
ZZ=100-NEILEN /CHECK AGAINST MAXIMUM NETWORK SIZE [1(14)]
|
||
ZZ=ZZ&4000 /GET SIGN BIT OF DIFFERENCE [1(14)]
|
||
IFNZRO ZZ <NEILEN=100> /IF IT WAS TOO BIG, CUT IT DOWN [1(14)]
|
||
|
||
IFNDEF TTYN <TTYN=20> /DEFAULT IS SIXTEEN TTY'S
|
||
/FOLLOWING INSURES TTYN=0,4,10,14,OR 20
|
||
ZZ=TTYN-20
|
||
IFNZRO ZZ <
|
||
ZZ=TTYN&3
|
||
IFNZRO ZZ <TTYN=TTYN&14+4>
|
||
TTYN=TTYN&34>
|
||
|
||
IFNDEF CDRN <CDRN=1> /DEFAULT IS ONE CDR
|
||
IFNZRO CDRN <CDRN=1> /AT MOST ONE CDR
|
||
|
||
IFNDEF LPTN <LPTN=1> /DEFAULT IS ONE LPT
|
||
IFNZRO LPTN <LPTN=1> /AT MOST 1
|
||
IFDEF LA180 <
|
||
IFNDEF FTLPLC < FTLPLC=1> /DEFAULT LOWER CASE FOR LA180
|
||
>/END OF IFDEF LA180
|
||
IFNDEF LA180 <
|
||
IFNDEF FTLPLC <FTLPLC=0> /1 IF LPT HANDLES LC CHARS
|
||
>/END OF IFNDEF LA180
|
||
IFNDEF LPTWID <LPTWID=204> /WIDTH OF LPT
|
||
/ 132 DECIMAL IS 204 OCTAL
|
||
/ 80 DECIMAL IS 120 OCTAL
|
||
IFNDEF LPTFAK <LPTFAK=0> /IF NONZERO THROW AWAY LPT OUTPUT
|
||
|
||
IFNDEF PTRN <PTRN=0> /DEFAULT IS NO PTR - NOT SUPPORTED
|
||
IFNZRO PTRN <PTRN=1> /AT MOST ONE PTR
|
||
IFNDEF PTPN <PTPN=0> /DEFAULT IS NO PTP - NOT SUPPORTED
|
||
IFNZRO PTPN <PTPN=1> /AT MOST ONE PTP
|
||
|
||
PLTN=0
|
||
IFNDEF PLTN <PLTN=0> /PLOTTER XY8/E - NOT SUPPORTED
|
||
IFNZRO PLTN <PLTN=1> /AT MOST ONE PLT
|
||
|
||
IFNDEF DTAN <DTAN=0> /DEFAULT IS NO DTA
|
||
/ NOT IMPLEMENTED
|
||
|
||
IFNDEF CNKSIZ <CNKSIZ=10> /SIZE OF CHUNKS - DEFAULT IS 8 WORDS
|
||
CNKSIZ=CNKSIZ&374 /MUST BE IN RANGE 4-200
|
||
IFZERO CNKSIZ <CNKSIZ=40>
|
||
Z=-CNKSIZ
|
||
CNKSIZ=CNKSIZ&Z / MUST BE A POWER OF 2
|
||
|
||
IFNDEF FTDEBUG <FTDEBUG=1> /1 FOR DEBUGGING FEATURES
|
||
IFNDEF FTLBACK <FTLBACK=0> /1 FOR LOOPBACK TEST
|
||
IFNDEF FTTRBL <FTTRBL=0> /1 FOR CTY MSG ON DEVICE TIMEOUT
|
||
IFNDEF FTBIGL <FTBIGL=0> /0 TO XLIST UNUSED CODE
|
||
|
||
IFNDEF CNKFLD <CNKFLD=1> /0 = KEEP CHUNKS IN FIRST FIELD
|
||
CNKFLD=CNKFLD&0007 / 1 = KEEP CHUNKS IN SECOND FIELD
|
||
/ 2 = KEEP CHUNKS IN THIRD FIELD
|
||
|
||
IFNDEF NUMSYN <NUMSYN=10> /NUMBER OF SYNCHS AT BEGINING OF MESSAGE
|
||
|
||
IFNDEF OURNNM <OURNNM=72>/OUR NODE NUMBER
|
||
IFNDEF MAXOLN <MAXOLN=240+4>/MAX OUTPUT MESSAGE LENGTH=CARD+OVRHEAD
|
||
DEVN=1+TTYN+CDRN+LPTN+PTRN+PTPN+PLTN+DTAN
|
||
CTRLN=1+LPTN+CDRN+PTPN+PTRN+PLTN/NUMBER OF CONTROLLERS(FOR DDCMP)
|
||
|
||
IFNDEF REPTIM <REPTIM=170> /REP TIMEOUT = 2 SECS
|
||
|
||
IFNZRO DTAN <CTRLN=CTRLN+1>
|
||
|
||
IFNDEF TTYMIC <TTYMIC=120> /MAXIMUM NUMBER OF INPUT CHARS FROM A TTY
|
||
|
||
ERSCNT=2
|
||
IFNZRO CDRN <ERSCNT=ERSCNT+CDRCNK>/WORST CASE CARD LENGTH
|
||
IFNZRO PTRN <ERSCNT=ERSCNT+1> /WORST CASE TO STOP PTR
|
||
|
||
IFNDEF DFLXMT <DFLXMT=156> /DEFAULT SPEED IS 110 BAUD
|
||
IFNDEF DFLRCV <DFLRCV=DFLXMT> /DEFAULT SPEED IS SAME AS TRANSMIT
|
||
|
||
/TRACE MODE NOT WORKING ON DAS92 FOLLOWING OVERRIDES ANY
|
||
/PARAMETER SET UP IN C.PAL
|
||
DP8ETR=0
|
||
|
||
|
||
/SOFTWARE IDENTIFICATION STRING (SID)
|
||
DEFINE SIDTXT <
|
||
"D;"N;"9;"2;" ;"V;"1;"(;"2;"3;")-200;"2;"4;"-;"M;"A;"R;"-;"8;"1-200
|
||
>/END SIDTXT DEFINITION
|
||
/ SET DEFAULT CHUNK COUNTS
|
||
IFNDEF LPTCHK <LPTCHK=-100>
|
||
IFNDEF TTYCHK <TTYCHK=-40>
|
||
IFNDEF DRQCT <DRQCT=5> /DATA REQ COUNT FOR ALL DEVICES
|
||
|
||
|
||
/ SET RESTRICTED NODE NUMBER TO 0 FOR ALL DEVICES
|
||
XLIST
|
||
IFNDEF CTYRNN <CTYRNN=0>
|
||
IFNDEF T00RNN <T00RNN=0>
|
||
IFNDEF T01RNN <T01RNN=0>
|
||
IFNDEF T02RNN <T02RNN=0>
|
||
IFNDEF T03RNN <T03RNN=0>
|
||
IFNDEF T04RNN <T04RNN=0>
|
||
IFNDEF T05RNN <T05RNN=0>
|
||
IFNDEF T06RNN <T06RNN=0>
|
||
IFNDEF T07RNN <T07RNN=0>
|
||
IFNDEF T10RNN <T10RNN=0>
|
||
IFNDEF T11RNN <T11RNN=0>
|
||
IFNDEF T12RNN <T12RNN=0>
|
||
IFNDEF T13RNN <T13RNN=0>
|
||
IFNDEF T14RNN <T14RNN=0>
|
||
IFNDEF T15RNN <T15RNN=0>
|
||
IFNDEF T16RNN <T16RNN=0>
|
||
IFNDEF T17RNN <T17RNN=0>
|
||
IFNDEF CDRRNN <CDRRNN=0>
|
||
IFNDEF LPTRNN <LPTRNN=0>
|
||
IFNDEF PTRRNN <PTRRNN=0>
|
||
IFNDEF PTPRNN <PTPRNN=0>
|
||
IFNDEF PLTRNN <PLTRNN=0>
|
||
XLIST
|
||
/SET DATASET LINE TTYDSL FOR ALL LINES
|
||
IFDEF LOOP < /ONLY DONE ON PASS 2
|
||
CTYDSL=0
|
||
IFDEF T00DSL <T00DSL=4002>
|
||
IFNDEF T00DSL <T00DSL=0>
|
||
XLIST /REST OF TTY LINES REPETITIVE
|
||
IFDEF T01DSL <T01DSL=4002>
|
||
IFNDEF T01DSL <T01DSL=0>
|
||
IFDEF T02DSL <T02DSL=4002>
|
||
IFNDEF T02DSL <T02DSL=0>
|
||
IFDEF T03DSL <T03DSL=4002>
|
||
IFNDEF T03DSL <T03DSL=0>
|
||
IFDEF T04DSL <T04DSL=4002>
|
||
IFNDEF T04DSL <T04DSL=0>
|
||
IFDEF T05DSL <T05DSL=4002>
|
||
IFNDEF T05DSL <T05DSL=0>
|
||
IFDEF T06DSL <T06DSL=4002>
|
||
IFNDEF T06DSL <T06DSL=0>
|
||
IFDEF T07DSL <T07DSL=4002>
|
||
IFNDEF T07DSL <T07DSL=0>
|
||
IFDEF T10DSL <T10DSL=4002>
|
||
IFNDEF T10DSL <T10DSL=0>
|
||
IFDEF T11DSL <T11DSL=4002>
|
||
IFNDEF T11DSL <T11DSL=0>
|
||
IFDEF T12DSL <T12DSL=4002>
|
||
IFNDEF T12DSL <T12DSL=0>
|
||
IFDEF T13DSL <T13DSL=4002>
|
||
IFNDEF T13DSL <T13DSL=0>
|
||
IFDEF T14DSL <T14DSL=4002>
|
||
IFNDEF T14DSL <T14DSL=0>
|
||
IFDEF T15DSL <T15DSL=4002>
|
||
IFNDEF T15DSL <T15DSL=0>
|
||
IFDEF T16DSL <T15DSL=4002>
|
||
IFNDEF T16DSL <T16DSL=0>
|
||
IFDEF T17DSL <T17DSL=4002>
|
||
IFNDEF T17DSL <T17DSL=0>
|
||
XLIST
|
||
>/END OF IFDEF LOOP
|
||
|
||
/CORE LAYOUT FOR THIS VERSION OF DC72 CODE
|
||
|
||
/PAGE 0
|
||
/ 0-7 INTERRUPT TRAP
|
||
/ 10-17 AUTOINDEX REGISTERS
|
||
/ 20-25 INTERRUPT DISSMISS ROUTINE
|
||
/ 26-177 COMMON VARIABLE STORAGE
|
||
/PAGE 1
|
||
/ 200 NORMAL STARTING ADDRESS
|
||
/ 201 HALT (FORMERLY DUMP STARTING ADDRESS)
|
||
/ 202 VERSION NUMBER OF DC72 CODE
|
||
/
|
||
/ DUMP ROUTINE
|
||
/ INITIALIZATION
|
||
/ NON-INTERRUPT LEVEL CODE
|
||
/ DEVICE INTERRUPT ROUTINES
|
||
/ * CHANGE TO CHUNK FIELD *
|
||
/ TABLE DATA = DEVICE BLOCKS, MESSAGES, PARITY TABLE, LPT VFU ETC.
|
||
/ SYSCHK - OVERWRITTEN LATER TO FORM CHUNKS
|
||
|
||
|
||
/EIA PINS FROM DP8E AND DP01
|
||
/ 1 PROTECTIVE GROUND
|
||
/ 2 TRANSMITTED DATA
|
||
/ 3 RECEIVED DATA
|
||
/ 4 REQUEST TO SEND
|
||
/ 5 CLEAR TO SEND
|
||
/ 6 DATA SET READY
|
||
/ 7 SIGNAL GROUND
|
||
/ 8 RECEIVED LINE SIGNAL DECTECTOR
|
||
/ 17 RECEIVED SIGNAL ELEMENT TIMING
|
||
/ 20 DATA TERMINAL READY
|
||
/ 21 SIGNAL QUALITY DETECTOR
|
||
/ 22 RING INDICATOR
|
||
/ 24 TRANSMIT SIGNAL ELEMENT TIMING
|
||
/CARD LOADER FOR DC71'S IS
|
||
/
|
||
/ 117570 6672 SELECT CARD READER AND SKIP IF READY
|
||
/ 117571 5370 JMP .-1
|
||
/ 117572 6631 SKIP ON DATA READY
|
||
/ 117573 5372 JMP .-1
|
||
/ 117574 6634 READ DATA BINARY
|
||
/ 117575 3270 DCA 7470
|
||
/ 117576 2375 ISZ .-1
|
||
/ 117577 5372 JMP 7572
|
||
|
||
|
||
/RIM LOADER FOR LOW SPEED PAPER TAPE IS
|
||
/ 117756 6032 /CLEAR KEYBOARD FLAG & ADVANCE READER
|
||
/ 117757 6031 /SKIP ON KEYBOARD FLAG
|
||
/ 117760 5357 /JMP .-1
|
||
/ 117761 6036 /READ KEYBOARD BUFFER, CLEAR FLAG
|
||
/ 117762 7106 /CLL RTL
|
||
/ 117763 7006 /RTL
|
||
/ 117764 7510 /SPA
|
||
/ 117765 5357 /JMP 117757 - SKIP LEADER, TRAILER
|
||
/ 117766 7006 /RTL
|
||
/ 117767 6031 /SKIP ON KEYBOARD FLAG
|
||
/ 117770 5367 /JMP .-1
|
||
/ 117771 6034 /READ KEYBOARD STATIC
|
||
/ 117772 7420 /SNL
|
||
/ 117773 3776 /DCA @117776
|
||
/ 117774 3376 /DCA 1176
|
||
/ 117775 5356 /JMP 117756
|
||
|
||
|
||
/RIM LOADER FOR HIGH SPEED PAPER TAPE IS
|
||
/ 117756 6014 /READER FETCH CHARACTER
|
||
/ 117757 6011 /SKIP ON READER FLAG
|
||
/ 117760 5357 /JMP .-1
|
||
/ 117761 6016 /READ READER BUFFER, AND FETCH NEW CHARACTER
|
||
/ 117762 7106 /CLL RTL
|
||
/ 117763 7006 /RTL
|
||
/ 117764 7510 /SPA
|
||
/ 117765 5374 /JMP 117774 - SKIP LEADER, TRAILER
|
||
/ 117766 7006 /RTL
|
||
/ 117767 6011 /SKIP ON READER FLAG
|
||
/ 117770 5367 /JMP .-1
|
||
/ 117771 6016 /READ READER STATIC
|
||
/ 117772 7420 /SNL
|
||
/ 117773 3776 /DCA @117776
|
||
/ 117774 3376 /DCA 1176
|
||
/ 117775 5357 /JMP 117757
|
||
/CODING CONVENTIONS
|
||
/
|
||
/ 1.) THE FIRST 3 CHARS OF A SYMBOL INDICATE WHEN THE LABEL IS USED
|
||
/ CLKXXX IS USED AT CLOCK LEVEL(I.E. EVERYTIME CLOCK TICKS)
|
||
/ INIXXX IS USED AT INITIALIZATION TIME.
|
||
/ INTXXX IS USED AT INTERRUPT LEVEL
|
||
/ IXXXXX IS USED AT INTERRUPT LEVEL
|
||
/ DEVXXX IS USED TO REFERENCE DATA IN DEVICE BLOCK
|
||
/ LDBXXX IS USED FOR A LDB ADDRESS
|
||
/ NLXXXX IS USED FOR A NUMERICAL LOAD INSTRUCTION
|
||
/
|
||
/ 2.) INTERRUPTS ALWAYS SAVE THE AC AND THE LINK
|
||
/ THE DC72NP ASSUMED ALL THE INSTRUCTIONS WERE IN FIELD 0 AND
|
||
/ ALL THE DATA WAS IN FIELD 1. HOWEVER, THE DAS92 CAN'T MAKE
|
||
/ THAT ASSUMPTION AND RESTORES THE LINK, DATA, AND INSTR FIELDS
|
||
/ BEFORE DISMISSING THE INTERRUPT
|
||
/
|
||
/ 3.) INSTRUCTIONS WHICH ARE CHANGED ARE FLAGED WITH ######## RH SIDE
|
||
/DEFINE CHAIN FOR INTERRUPTS & ONCE/TICK CODE
|
||
/
|
||
/ EVERY DEVICE IS TO HAVE A 3 LETTER MNEMNOIC "XYZ"
|
||
/
|
||
/ LABEL TO TEST FOR INTERUPTS FOR DEVICE IS INTXXX
|
||
/ WHEN TEST FAILS WILL BRANCH TO INTXY9
|
||
/
|
||
/ LABEL TO BRANCH TO ONCE / SECOND IS CLKXYZ
|
||
/ WHEN FINISHED WILL BRANCH TO CLKXY9
|
||
/ FOLLOWING ARE LABEL DEFINITIONS(MUST BE IN INCREASING PRIORITY):
|
||
|
||
IFDEF LOOP < /THIS IS ASSEMBLED ONLY FOR PASS 2
|
||
|
||
INTMT9=INTNOT
|
||
IFNDEF INTMTY < INTMTX=INTMT9>
|
||
INTMO9=INTMTX /MODEM TTY LINES
|
||
INTPL9=INTMOD
|
||
CLKPL9=LOOP /END OF CLOCK CHAIN
|
||
|
||
IFNDEF INTPLT < INTPLT=INTPL9
|
||
CLKPLT=CLKPL9
|
||
>/END OF IFNDEF INTPLT
|
||
INTPP9=INTPLT
|
||
CLKPP9=CLKPLT
|
||
|
||
IFNDEF INTPTP < INTPTP=INTPP9
|
||
CLKPTP=CLKPP9
|
||
>/END OF IFNDEF INTPTP
|
||
INTPR9=INTPTP
|
||
CLKPR9=CLKPTP
|
||
|
||
IFNDEF INTPTR < INTPTR=INTPR9
|
||
CLKPTR=CLKPR9
|
||
>/END OF IFNDEF INTPTR
|
||
INTCT9=INTPTR
|
||
CLKCT9=CLKPTR
|
||
|
||
INTCL9=INTCTY
|
||
|
||
INTLP9=INTCLK
|
||
CLKLP9=CLKPTR /NO SPECIAL CLOCK CODE FOR CTY
|
||
|
||
IFNDEF INTLPT < INTLPT=INTLP9
|
||
CLKLPT=CLKLP9
|
||
>/END OF IFNDEF INTLPT
|
||
INTTY9=INTLPT
|
||
CLKTY9=CLKLPT
|
||
|
||
IFNDEF INTTTY <INTTTY=INTTY9>
|
||
INTCD9=INTTTY
|
||
CLKCD9=CLKTTY
|
||
|
||
IFNDEF INTCDR < INTCDR=INTCD9
|
||
CLKCDR=CLKCD99
|
||
>/END OF IFNDEF INTCDR
|
||
INTDP9=INTCDR
|
||
|
||
SCHAIN=INTDPX /BEGIN SKIP CHAIN WITH SYNCHRONOUS INTERRUPTS
|
||
|
||
>/END OF IFDEF LOOP
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** DEVICE BLOCK DESCRIPTION ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
/DEFINITIONS OF DATA IN DEVICE BLOCK
|
||
/ ORDER IS IMPORTANT SO BE CAREFUL IF U CHANGE THEM
|
||
|
||
DEFINE X Q QQ <XLIST;QQ=QQ+1;XLIST
|
||
Q=QQ-1>/END OF DEFINE X
|
||
DDBSIZ=-5
|
||
/DEVICE USES LOC FOR SET HOST CONNECT LOGIC
|
||
X DEVRCN,DDBSIZ
|
||
DEVRCN=DDBSIZ-1
|
||
/ DEVICE DATA SET LINE
|
||
/ 4000 MEANS TTY HAS BEEN DEF AS DATA SET
|
||
/ 0000 MEANS NOT DATA SET LINE
|
||
/ 0100 CARRIER/RING IN DDCMP STATUS WORD
|
||
/ 0040 DTR FROM HOST
|
||
/ 0017 BITS USED FOR 6 SEC COUNT
|
||
X DEVDSL,DDBSIZ
|
||
|
||
/DEVICE RESTRICTED NODE NUMBER (NEGATIVE OF NUMBER OF
|
||
/ONLY NODE ALLOWED TO CONNECT TO DEVICE. 0 MEANS ANY NODE
|
||
/MAY CONNECT
|
||
X DEVRNN,DDBSIZ
|
||
|
||
/DEVICE CHUNK IN USE COUNT (USED BY OUTPUT DEVICES)
|
||
/ SET TO MINUS NUMBER OF CHUNKS ALLOWED TO BE TIED UP BY DEVICE
|
||
X DEVCHK,DDBSIZ
|
||
|
||
/DEVICE NUMBER (OCCUPIES WORD BEFORE DDB) - 0 EXCEPT FOR TTY'S
|
||
X DEVNUM,DDBSIZ
|
||
|
||
|
||
/DEVICE ID # FOR INPUT - LH IS OBJECT TYPE, RH IS CONNECT NUMBER
|
||
X DEVSID,DDBSIZ
|
||
|
||
/POINTER TO CURRENT OUTPUT CHAR
|
||
X DEVOAD,DDBSIZ
|
||
|
||
/POINTER TO LAST OUTPUT CHUNK
|
||
X DEVOLC,DDBSIZ
|
||
|
||
/DEVICE STATUS - FOR ALL DEVICES
|
||
X DEVSTS,DDBSIZ
|
||
/ 4000 DEVICE ACTIVE(NOT SET FOR TTY INPUT)
|
||
CONBIT=2000 / 2000 DEVICE IS CONNECTED
|
||
/ 1000 NEED TO SEND A CONNECT CONFIRM (IF 2000 BIT ON)
|
||
/ OR A DISCONNECT (IF 2000 BIT OFF)
|
||
CHRBIT=200 / 0200 NEED TO SEND CHARACTERISTICS (TTY ONLY) [1(14)]
|
||
OUTBIT=0100 / 0100 DEVICE IS OUTPUT(I.E. NEEDS TO SEND DATA REQUESTS)
|
||
TTYBIT=0040 / 0040 DEVICE IS A TTY
|
||
IRMBIT=0002 / 0002 IRMA BIT
|
||
STSBIT=0001 / 0001 MEANS SEND DEVICE STATUS
|
||
|
||
/DEVICE DATA REQUESTS
|
||
X DEVDRQ,DDBSIZ
|
||
|
||
/DDCMP DEVICE STATUS
|
||
X DEVDDC,DDBSIZ
|
||
|
||
/PRIMARY BUFFER ADR
|
||
X DEVBF1,DDBSIZ
|
||
|
||
/SECONDARY BUFFER ADR
|
||
X DEVBF2,DDBSIZ
|
||
|
||
/DEVICE INPUT CHAR ADR
|
||
X DEVIAD,DDBSIZ
|
||
X DEVIFC,DDBSIZ
|
||
|
||
/TIMER FOR DEVICE
|
||
X DEVTIM,DDBSIZ
|
||
|
||
/DDB LINK
|
||
X DEVLNK,DDBSIZ
|
||
/DEFINITIONS OF WORDS ONLY IN TTY DEVICE BLOCKS
|
||
|
||
LDBSIZ=DDBSIZ
|
||
|
||
/TTY ADDRESS
|
||
X LDBADR,LDBSIZ
|
||
/ HDW ADR FOR LINE
|
||
|
||
/TTY OUTPUT COLUMN - CHANGES AT INTERRUPT LEVEL
|
||
X LDBCOL,LDBSIZ
|
||
|
||
/TTY CARRIAGE WIDTH
|
||
X LDBWID,LDBSIZ
|
||
|
||
/TTY XOF POINTER - CHANGES AT INTERRUPT LEVEL
|
||
X LDBXPT,LDBSIZ
|
||
|
||
/TTY FILL POINTER - CHANGES AT INTERRUPT LEVEL
|
||
X LDBFPT,LDBSIZ
|
||
|
||
/CHAR TO TYPE NEXT - CHANGES AT INTERRUPT LEVEL
|
||
X LDBCHR,LDBSIZ
|
||
|
||
|
||
/POINTER TO LAST INPUT CHAR - CHANGES AT INTERRUPT LEVEL
|
||
X LDBIPT,LDBSIZ
|
||
|
||
|
||
/TTY ECHO PIPELINE MARKER
|
||
X LDBEPL,LDBSIZ
|
||
|
||
/TTY FILL COUNTS
|
||
X LDBFIL,LDBSIZ
|
||
LDBSIZ=LDBSIZ+5
|
||
/DEFINE OPCODES WHICH PAL10 DOESN'T KNOW ABOUT
|
||
|
||
ESC=33 /ESCAPE CHARACTER FOR EMBEDDING STATUS CHANGES
|
||
/IN DATA STREAM
|
||
RMF=6244 /RESTORE DATA, INSTR FIELD BEFORE INTR OCCURRED
|
||
SKON=6000 /SKIP IF INTERRUPTS ARE ON
|
||
GTF=6004 /READ MACHINE STATE INTO AC
|
||
CAF=6007 /CLEAR ALL FLAGS
|
||
MQL=7421 /MQ LOAD = AC TO MQ, AC CLEARED
|
||
MQA=7501 /MQ ORED INTO AC
|
||
SWP=7521 /SWAP AC AND MQ
|
||
CAM=7621 /CLEAR AC AND MQ
|
||
|
||
BSW=7002 /BYTE SWAP ON 8E
|
||
NEGATE=CML CMA IAC /NEGATE AC & LINK
|
||
NL0=CLA CLL /LOAD AC& LINK WITH ZERO
|
||
NL1=CLA CLL IAC /LOAD AC & LINK WITH 1
|
||
NL2=CLA CLL IAC RAL
|
||
NL3=CLA CLL CML IAC RAL
|
||
NL4=CLA CLL IAC RTL
|
||
NL6=CLA CLL CML IAC RTL
|
||
NL2000=CLL CLA CML RTR
|
||
NL3777=CLL CLA CMA RAR
|
||
NL4000=CLL CLA CML RAR
|
||
NL6000=CLL CLA CML IAC RTR
|
||
NL7775=CLL CLA CMA RTL
|
||
NL7776=CLL CLA CMA RAL
|
||
NL7777=CLL CLA CMA
|
||
NLM1=CLL CLA CML CMA /LOAD -1
|
||
NLM2=NL7776 /LOAD -2
|
||
NLM3=NL7775 /LOAD -3
|
||
|
||
DEFINE NLOAD X <XLIST
|
||
Z=7402
|
||
IFZERO X < Z=CLL CLA >
|
||
IFZERO X-1 < Z=CLL CLA IAC >
|
||
IFZERO X-2 < Z=CLL CLA IAC RAL >
|
||
IFZERO X-3 < Z=CLL CLA IAC CML RAL >
|
||
IFZERO X-4 < Z=CLL CLA IAC RTL >
|
||
IFZERO X-6 < Z=CLL CLA IAC CML RTL >
|
||
IFZERO X-2000 < Z=CLL CLA CML RTR >
|
||
IFZERO X-3777 < Z=CLL CLA CMA RAR >
|
||
IFZERO X-4000 < Z=CLL CLA CML RAR >
|
||
IFZERO X-5777 < Z=CLL CLA CMA RTR >
|
||
IFZERO X-6000 < Z=CLL CLA CML IAC RTR >
|
||
IFZERO X-7775 < Z=CLL CLA CMA RTL >
|
||
IFZERO X-7776 < Z=CLL CLA CMA RAL >
|
||
IFZERO X-7777 < Z=CLL CLA CML CMA >
|
||
IFZERO Z-7402 < ***** BUM NLOAD CALL >
|
||
XLIST; Z >/END OF DEFINE NLOAD
|
||
/MACRO DEFINITIONS
|
||
|
||
IFNZRO FTBIGL <
|
||
DEFINE LISTOG Q < >
|
||
DEFINE XISTOG Q < >
|
||
>/END OF IFNZRO FTBIGL
|
||
|
||
IFZERO FTBIGL <
|
||
DEFINE LISTOG Q <IFZERO Q < XLIST > >
|
||
DEFINE XISTOG Q <IFNZRO Q < XLIST > >
|
||
>/END OF IFZERO FTBIGL
|
||
|
||
DEFINE CREF X <XLIST;Z=X;XLIST>
|
||
|
||
DEFINE XOR Q <
|
||
TAD INTMP1
|
||
AND Q
|
||
CMA IAC
|
||
CLL RAL
|
||
TAD INTMP1
|
||
TAD Q
|
||
DCA Q
|
||
>/END OF DEFINE XOR
|
||
|
||
DEFINE BLOCK Q <XLIST
|
||
*.+Q
|
||
XLIST >/END OF DEFINE BLOCK
|
||
|
||
DEFINE REPEAT Q <XLIST
|
||
IFNZRO Z <XLIST
|
||
Q
|
||
XLIST
|
||
Z=Z-1
|
||
>/END OF IFNZRO Z
|
||
XLIST>/END OF DEFINE REPEAT
|
||
|
||
DEFINE HLT < XLIST
|
||
JMS I [DMPTRP
|
||
XLIST >/END OF DEFINE HLT
|
||
DEFINE INSRT2 <
|
||
DATDEC, 0
|
||
/ NLOAD DEVDRQ /POINT TO DATA REQUESTS
|
||
XXXX=DEVDRQ-4
|
||
IFNZRO XXXX <NLOAD DEVDRQ>
|
||
NL4
|
||
TAD DDB
|
||
DCA TEMP1
|
||
NLM1 /LOAD -1
|
||
TAD I TEMP1 /ADD DATA REQUEST
|
||
DCA I TEMP1 /STORE NEW ONE
|
||
JMP I DATDEC
|
||
INUSE, TAD TEMPA /GET DISPATCH ADDRESS
|
||
TAD (DEVN^2
|
||
DCA TEMP2 /MMLTAB ENTRY
|
||
NL1 /REASON (NOT AVAIL)
|
||
DCA I TEMP2 /SAVE IN MMLTAB
|
||
DCA I TEMPA /CLEAR DISPATCH ADDRESS TO
|
||
/INDICATE WE MUST SEND DISCONNECT
|
||
JMP RCVFLU
|
||
IFNZRO LPTN <
|
||
CLKLP7, SZA CLA /BE SURE THERE OUTPUT FOR LPT
|
||
JMS LPTOFN
|
||
JMP CLKLP8
|
||
>/END OF IFNZRO LPTN
|
||
IFNZRO DP8ETR <
|
||
ITRCRC, 0 /TRACE INPUT CHARACTERS
|
||
DCA TEMP1 /STORE CHARACTER
|
||
NL4000 /BIT TO INDICATE INPUT
|
||
TAD TEMP1 /+CHARACTER=TRACE ENTRY
|
||
JMS ITRCW /STORE IN TRACE BUFFER
|
||
TAD TEMP1 /GET CHARACTER
|
||
JMS CRCALC /ACCUMULATE CRC
|
||
JMP I ITRCRC /RETURN
|
||
ITRCR2, 0 /STORE CRC IN TRACE
|
||
TAD AUTO1 /ADDRESS BEFORE CRC
|
||
DCA TEMP5 /AT END TEMP5 WILL POINT AT CHUNK POINTER
|
||
ISZ TEMP5 /ADVANCE TO NEXT CRC CHARACTER
|
||
NL4000 /MASK FOR INPUT
|
||
TAD I TEMP5 /GET TRACE ENTRY
|
||
JMS ITRCW /STORE IN TRACE BUFFER
|
||
ISZ TEMP5 /ADVANCE TO NEXT CRC CHARACTER
|
||
NL4000 /MASK FOR INPUT
|
||
TAD I TEMP5 /GET TRACE ENTRY
|
||
JMS ITRCW /STORE IN TRACE BUFFER
|
||
ISZ TEMP5 /SKIP OVER CHUNK COUNT
|
||
ISZ TEMP5 /POINT TO CHUNKS
|
||
JMP I ITRCR2 /RETURN
|
||
ITRCR3, 0 /TRACE CRC OF DATA PART
|
||
JMS GETCHR /GET NEXT CRC CHARACTER
|
||
JMP NRMNAK /NO ROOM
|
||
DCA TEMPA /SAVE CHARACTER
|
||
NL4000 /INPUT MASK BIT
|
||
TAD TEMPA /+CHARACTER
|
||
JMS ITRCW /STORE IN TRACE BUFFER
|
||
TAD TEMPA /GET BACK CHARACTER
|
||
JMP I ITRCR3 /RETURN
|
||
ITRCW, 0 /TURN OFF INTERRUPTS AND TRACE
|
||
IOF
|
||
JMS TRACEW
|
||
ION
|
||
JMP I ITRCW
|
||
>/END OF IFNZRO DP8ETR
|
||
>/END OF DEFINE INSRT2
|
||
|
||
IFNZRO CNKFLD <
|
||
Z=CNKFLD^10
|
||
CDFCNK=CDF Z
|
||
CIFCNK=CIF Z
|
||
>/END OF IFNZRO CNKFLD
|
||
IFZERO CNKFLD <
|
||
DEFINE CDFCNK <>
|
||
DEFINE CIFCNK <>
|
||
>/END OF IFZERO CNKFLD
|
||
CDFTRC=CDFCNK
|
||
CDFINS=CDF 0
|
||
CIFINS=CIF 0
|
||
/CTY IOTS
|
||
CTYKCF=6030 /CLEAR KEYBOARD FLAG (PDP8E)
|
||
CTYTFL=6040 /SET TELEPRINTER FLAG (PDP8E)
|
||
CTYTSK=6045 /SKIP ON PRINTER OR KEYBOARD FLAG (PDP8E)
|
||
CTYKSF=6031 /SKIP ON KEYBOARD FLAG
|
||
CTYKCC=6032 /CLEAR KEYBOARD FLAG
|
||
CTYKRS=6034 /READ KEYBOARD STATIC
|
||
CTYKRB=6036 /READ KEYBOARD DYNAMIC(KRS+KCC)
|
||
CTYTSF=6041 /SKIP ON TELEPRINTER FLAG
|
||
CTYTCF=6042 /CLEAR TELEPRINTER FLAG
|
||
CTYTPC=6044 /LOAD TELEPRINTER AND PRINT
|
||
CTYTLS=6046 /LOAD TELEPRINTER SEQUENCE(TCF + TPC)
|
||
|
||
/CLOCK IOTS - DKC8-AA TICK EVERY 10MS EVERY OTHER TICK IGNORED
|
||
CLKECI=6135 /INTERRUPPT ENA/DISAB AC0
|
||
CLCL=6136 /CLEAR CLOCK FLAG
|
||
CLKSCF=6137 /SKIP IF FLAG SET
|
||
/POWER FAIL IOT'S
|
||
SPL=6102 /SKIP IF AC LOW FLAG SET
|
||
CAL=6103 /CLEAR INTERRUPT FROM ACLOW FLAG
|
||
SBE=6101 /SKIP IF BATTERY EMPTY FLAG SET(NOT USED IN DAS92)
|
||
IFNZRO CDRN <
|
||
/CDR IOTS
|
||
CDRSF=6631 /SKIP ON DATA READY
|
||
CDRCRB=6634 /READ CARD BINARY
|
||
CDRSD=6671 /SKIP ON CARD DONE FLAG
|
||
CDRCSE=6672 /SELECT CARD READER AND SKIP IF READY
|
||
CDRCRD=6674 /CLEAR CARD DONE FLAG
|
||
>/END OF IFNZRO CDRN
|
||
|
||
IFNZRO LPTN <
|
||
/LINE PRINTER IOT'S - LS8E & LE8=LP08
|
||
LPTSTF=6660 /SET THE FLAG (LS8E ONLY)
|
||
LPTSKF=6661 /SKIP ON FLAG
|
||
LPTCLF=6662 /CLEAR FLAG
|
||
LPTSKE=6663 /SKIP ON NOT READY
|
||
/ LPT=6664 /LOAD PRINT BUFFER
|
||
LPTSIE=6665 /SET PI ENABLE (LE8 ONLY)
|
||
/ IF AC11=1 SET PI ENABLE (LS8E ONLY)
|
||
/ IF AC11=0 CLEAR PI ENABLE (LS8E ONLY)
|
||
LPTSTB=6666 /LOAD DATA & CLEAR FLAG
|
||
LPTCIE=6667 /CLEAR PI ENABLE (LE8 ONLY)
|
||
/LA180 INTERFACE ON DAS92 USES PARALLEL INTERFACE ON KM8A OPTION
|
||
/NO ERROR STATUS IS AVAILABLE
|
||
PBST=6570 /SKIP ON DATA ACCEPTED,CLEAR DATA IN
|
||
/ AND DATA AVAILABLE FLIP FLOP
|
||
DBTD=6574 /LOAD AC0-11 WITH COMPL DATA AND TRANSMIT
|
||
DBSE=6575 /ENABLE INTERRUPT
|
||
DBCE=6576 /DISABLE INTERRUPT
|
||
>/END OF IFNZRO LPTN
|
||
LISTOG TTYN
|
||
IFNZRO TTYN <
|
||
/EQUATES FOR KL8A LINES
|
||
/FIRST KL8A HAS DEVICE CODE 52
|
||
MSIE=6520 /ENABLE INTR IF AC=1,DIASABLE IF =0
|
||
MSAB=6521 /BRANCH TO SERVICE RTE, LOAD AC WITH LINE #,
|
||
/ CLEAR XMT FLAG IF SET
|
||
MSRA=6522 /STATUS A REG TO AC
|
||
/0=SILO FILL
|
||
/1,2=SPARE
|
||
/3=RING LEVEL 0
|
||
/4=RING LEVEL 1
|
||
/5=RING LEVEL 2
|
||
/6=CARRIER LEVEL 0
|
||
/7=CARRIER LEVEL 1
|
||
/8=CARRIER LEVEL 2
|
||
/9=XMT FLAG
|
||
/10=REC FLAG
|
||
/11=INTR ENABLE
|
||
MSSR=6523 /SKIP IF RING, CLEAR IF SET
|
||
MSXD=6524 /TRANSFER CHAR AND LINE# FROM AC TO XMT BUFFFER
|
||
MSRD=6525 /CLEAR AC TRANSFER CHAR, LINE #,ERROR STATUS
|
||
/ FROM FIFO,CLEAR REC FLAG IF FIFO EMPTY
|
||
MSCT=6526 /CLEAR XMT FLAG
|
||
MCCD=6530 /CLEAR DEVICE FLAGS SILO ETC
|
||
MSLC=6531 /AC0-4 TO CONTROL REG FOR LINE #
|
||
/0=LOOP BACK MODE
|
||
/1=RTS
|
||
/2=DTR
|
||
/3=SPEED SELECT
|
||
/4=SECONDARY XMT
|
||
MSLB=6532 /TRANSFER BRANCH ADDRESS TO REG [AC0-8]
|
||
MSSB=6533 /SKIP RING LINE3, AND CLEAR
|
||
MSSS=6534 /SKIP CTS LINE 3, AND CLEAR
|
||
MSSC=6535 /SKIP CARRIER AND CLEAR
|
||
MSSV=6536 /SKIP SEC XMT LINE 3 AND CLEAR
|
||
MSRB=6537 /STATUS B TO AC
|
||
/0=CTS
|
||
/1=RTS
|
||
/2=DTR
|
||
/3=SPEED SELECT
|
||
/4=SEC TRANSMIT
|
||
/5=CARRIER FLIP FLOP
|
||
/6=SEC REC FF
|
||
/7=CTS FF
|
||
/8=DATA SET STATUS
|
||
/9=CARRIER LEVEL
|
||
/10=SEC REC LEVEL
|
||
/11=INTER ENABLE
|
||
/KL8A#1 SECOND KL8A
|
||
MSIE1=6540
|
||
MSAB1=6541
|
||
MSRA1=6542
|
||
MSSR1=6543
|
||
MSXD1=6544
|
||
MSRD1=6545
|
||
MSCT1=6546
|
||
MCCD1=6550
|
||
MSLC1=6551
|
||
MSLB1=6552
|
||
MSSB1=6553
|
||
MSSS1=6554
|
||
MSSC1=6555
|
||
MSSV1=6556
|
||
MSRB1=6557
|
||
/KL8A#2 THIRD KL8A DEVICE CODE 60
|
||
MSIE2=6600
|
||
MSAB2=6601
|
||
MSRA2=6602
|
||
MSSR2=6603
|
||
MSXD2=6604
|
||
MSRD2=6605
|
||
MSCT2=6606
|
||
MCCD2=6610
|
||
MSLC2=6611
|
||
MSLB2=6612
|
||
MSSB2=6613
|
||
MSSS2=6614
|
||
MSSC2=6615
|
||
MSSV2=6616
|
||
MSRB2=6617
|
||
/KL8A#3 DEVICE CODE 64
|
||
MSIE3=6640
|
||
MSAB3=6641
|
||
MSRA3=6642
|
||
MSSR3=6643
|
||
MSXD3=6644
|
||
MSRD3=6645
|
||
MSCT3=6646
|
||
MCCD3=6650
|
||
MSLC3=6651
|
||
MSLB3=6652
|
||
MSSB3=6653
|
||
MSSS3=6654
|
||
MSSC3=6655
|
||
MSSV3=6656
|
||
MSRB3=6657
|
||
/DEFINITION FOR KL8A IOT STORED IN DDB
|
||
/FORMAT:
|
||
/ IOT=6000
|
||
/ DEVICE CODE=0XX0 WHERE XX=52,54,60,64
|
||
/ TRANSMIT CODE=0004
|
||
/ LINE NUMBER=000X WHERE X=0,1,2,3
|
||
/
|
||
T00TSF=6524
|
||
T01TSF=6525
|
||
T02TSF=6526
|
||
T03TSF=6527
|
||
T04TSF=6544
|
||
T05TSF=6545
|
||
T06TSF=6546
|
||
T07TSF=6547
|
||
T10TSF=6604
|
||
T11TSF=6605
|
||
T12TSF=6606
|
||
T13TSF=6607
|
||
T14TSF=6644
|
||
T15TSF=6645
|
||
T16TSF=6646
|
||
T17TSF=6647
|
||
>/END OF IFNZRO TTYN
|
||
LISTOG TTYN
|
||
Z=PTRN+PTPN+PLTN
|
||
LISTOG Z
|
||
PTRPE=6010 /ENABLE READER/PUNCH INTERRUPT ENABLE
|
||
PTPCE=6020 /CLEAR READER/PUNCH INTERRUPT ENABLE
|
||
IFNZRO PTRN <
|
||
/HIGH SPEED PAPER TAPE READER IOTS - PC8-E OR
|
||
PTRSF=6011 /SKIP ON READER FLAG
|
||
PTRRB=6012 /OR READER BUFFER INTO AC & CLEAR FLAG
|
||
PTRFC=6014 /READER FETCH CHARACTER - GET NEXT CHAR
|
||
>/END OF IFNZRO PTRN
|
||
|
||
IFNZRO PTPN <
|
||
/HIGH SPEED PAPER TAPE PUNCH IOTS
|
||
PTPSF=6021 /SKIP ON PUNCH FLAG
|
||
PTPCF=6022 /CLEAR PUNCH FLAG
|
||
PTPPC=6024 /PUNCH CHARACTER
|
||
PTPLS=6026 /LOAD PUNCH BUFFER SEQUENCE
|
||
>/END OF IFNZRO PTPN
|
||
|
||
IFNZRO PLTN < /PLOTTER IOT'S - XY8/E
|
||
PLTCEN=6500 /CLEAR INTERRUPT ENABLE
|
||
PLTSKF=6501 /SKIP ON PLOTTER FLAG
|
||
PLTCLF=6502 /CLEAR PLOTTER FLAG
|
||
PLTPUP=6503 /PEN UP
|
||
PLTLLR=6504 /LOAD DIRECTION REGISTER
|
||
PLTPDN=6505 /PEN DOWN
|
||
PLTLCF=6506 /LOAD DIRECTION REGISTER AND CLEAR FLG
|
||
PLTSEN=6507 /SET INTERRUPT ENABLE
|
||
>/END OF IFNZRO PLTN
|
||
LISTOG Z
|
||
|
||
/IOTS FOR DP8E SYNCHRONOUS LINE INTERFACE
|
||
DPSGTT=6405 /TRANSMIT GO
|
||
DPSGRR=6404 /RECEIVE GO
|
||
DPSSCD=6400 /SKIP IF CHAR DETECTED
|
||
DPSCSD=6406 /CLEAR SYNC DETECT
|
||
DPSSRO=6402 /SKIP IF RECEIVE WORD COUNT OVERFLOW
|
||
DPSSTO=6403 /SKIP IF TRANSMIT WORD COUNT OVERFLOWS
|
||
DPSCSI=6401 /CLEAR SYNCHRONOUS INTERFACE
|
||
DPSRTA=6407 /READ TRANSFER ADDRESS REGISTER
|
||
DPSLCC=6412 /LOAD CONTROL
|
||
DPSSRG=6410 /SKIP IF RING FLAG
|
||
DPSSCA=6411 /SKIP IF CARRIER/AGC FLAG
|
||
DPSRS2=6414 /READ STATUS 2
|
||
/ AC00 CARRIER/AGC
|
||
/ AC01 REQUEST TO SEND
|
||
/ AC02 TERMINAL READY
|
||
/ AC03 CLEAR TO SEND
|
||
/ AC04 TEMA 0(TRANSMIT EXTENDED MEMORY ADDRESS)
|
||
/ AC05 TEMA 1
|
||
/ AC06 TEMA 2
|
||
/ AC07 RECEIVE DATA(INV)
|
||
DPSRS1=6415 /READ STATUS 1
|
||
/ AC00 R-RQST RECEIVE AND TRANSMIT
|
||
/ AC01 T-RQST BREAK REQUESTS
|
||
/ AC02 SYNC 2 RECEIVED SYNC
|
||
/ AC03 SYNC 1 CHARS
|
||
/ AC04 REMA 0
|
||
/ AC05 REMA 1
|
||
/ AC06 REMA 2
|
||
/ AC07 MODEM READY
|
||
DPSLFL=6413 /LOAD FIELD
|
||
DPSSBE=6416 /SKIP ON BUS ERROR
|
||
DPSRCD=6417 /READ CHAR DETECTED(IF AC0=0)
|
||
|
||
/FOLLOWING ARE IOTS FOR DP8-EP(KG8-EA) REDUNDANCY CHECK OPTION
|
||
/ 6110 /TEST VRC AND SKIP
|
||
BCCRDH=6111 /READ HIGH ORDER PORTION OF BCC INTO AC
|
||
BCCRDL=6112 /READ LOW ORDER PORTION OF BCC INTO AC
|
||
/ BCCVRC=6113 /COMPUTE VRC CHARACTER
|
||
BCCGEN=6114 /GENERATE BCC
|
||
BCCLCL=6115 /LOAD CONTROL REGISTER FROM AC
|
||
/ AC05=1: CRC; AC05=0: LRC
|
||
/ AC6-8=0: 16BIT BCC
|
||
/ AC6-8=1: 12BIT BCC
|
||
/ AC6-8=2: 8BIT BCC
|
||
/ AC6-8=3: 7BIT BCC
|
||
/ AC6-8=4: 6BIT BCC
|
||
/ AC9=0: PARITY TO AC4; AC9=1:PARITY TO AC11
|
||
/ AC10=1: 6114 ALSO CAUSES 6113
|
||
/ AC11=1: 6114 ALSO CAUSES 6110
|
||
BCCCLR=6116 /CLEAR ACCUMULATION
|
||
/ 6117 /MAINTENANCE TEST CLOCK
|
||
/THE FOLLOWING EQUATES ARE USED WHEN THE CHUNK
|
||
/FIELD IS LOCATED IN FIELD 2
|
||
RCKFLD=6221 /SET DATA FIELD TO 2,CHUNK AND REC FIELD
|
||
TABFLD=6211 /SET DATA FIELD TO 1; TRANSMIT AND TABLE FIELD
|
||
/PAGE 0 INSTRUCTIONS
|
||
|
||
FIELD 0
|
||
|
||
INTRAP=0 /TRAP TO FIELD 0 LOC 0 ON AN INTERRUPT
|
||
|
||
*1
|
||
DCA INSVAC /SAVE AC
|
||
CDFCNK /INTERRUPTS SET DF = 0
|
||
|
||
IFNZRO CDRN <
|
||
CDRSF /SKIP ON CARD READER COLUMN READY
|
||
JMP SCHAIN /NOT CARD READ - SO GO FIND WHAT
|
||
JMP ICDRD0 /GO READ COLUMN
|
||
>/END OF IFNZRO CDRN
|
||
|
||
IFZERO CDRN <
|
||
JMP SCHAIN /GO FIND WHAT INTERRUPTED
|
||
>/END OF IFZERO CDRN
|
||
|
||
INSVAC, 0 /SAVE INTERRUPTED AC HERE
|
||
INRCPV, 0 /PIVOT FOR DP01 INPUT
|
||
|
||
/AUTOINDEX REGISTERS
|
||
*10
|
||
|
||
BUGGER, 0
|
||
|
||
TIQPTR, 0 /POINTER TO PUT TTY CHARS INTO THE INPUT QUEUE
|
||
TIQTKR, 0 /POINTER TO TAKE TTY CHARS OUT OF INPUT QUEUE
|
||
AUTO1, 0 /MISC AUTOINDEXER FOR NON-INTERRUPT LEVEL CODE
|
||
IAUTO1, 0 /MISC AUTOINDEXER FOR INTERRUPT LEVEL CODE
|
||
IAUTO2, 0 / DITTO
|
||
|
||
SECFLG, 0 /SET NONZERO ONCE PER SECOND
|
||
CLKFLG, 0 /SET NONZERO WHEN CLOCK GOES OFF
|
||
|
||
FIRFRE, 0 /POINTER TO FIRST FREE CHUNK
|
||
FRECNT, 0 /COUNT OF FREE CHUNKS
|
||
FIRADR, FIRCNK /ADDRESS OF FIRST FREE CHUNK ########
|
||
|
||
TEMP1, 0 /TEMPORARY LOCATION FOR NONINTERRUPT LEVEL CODE
|
||
TEMP2, 0
|
||
TEMP3, 0
|
||
TEMP4, 0
|
||
TEMP5, 0
|
||
TEMP6, 0
|
||
TEMP7, 0
|
||
TEMP8, 0
|
||
TEMPA, 0 /ADDITIONAL TEMPS
|
||
TEMPB, 0
|
||
TEMPC, 0
|
||
TEMPD, 0
|
||
INTMP1, 0 /TEMPORARY LOCATION FOR INTERRUPT CODE
|
||
INTMP2, 0 / DITTO
|
||
INTMP3, 0 / DITTO
|
||
INTMP4, 0 / DITTO
|
||
INTMP5, 0 / DITTO
|
||
INTMP6, 0 / DITTO
|
||
INTMP7, 0 / DITTO
|
||
|
||
CRC1, 0 /FIRST HALF OF CRC-16
|
||
CRC2, 0 /2ND HALF OF CRC-16
|
||
|
||
INTDDB, 0 /ADDRESS OF CURRENT DEVICE BLOCK
|
||
IDBSTS, 0 /ADDRESS OF DEVSTS FOR INTDDB
|
||
DDB, 0 /ADDRESS OF CURRENT DEVICE BLOCK
|
||
DDBSTS, 0 /ADR OF DEVSTS
|
||
|
||
INTDIS, NL0 /CLEAR AC & LINK
|
||
TAD INSVAC /RESTORE AC
|
||
RMF /RESTORE DATA FIELD,INSTR FIELD
|
||
ION
|
||
JMP I INTRAP /RETURN TO INTERRUPTED PROCESS
|
||
|
||
ERRFLG, 0 /WHEN AN ERROR OCCURS PUT ADR OF MSG HERE
|
||
INTCNT, 0 /WATCHDOG FOR UNRECOGNIZED INTERRUPTS
|
||
|
||
WRKREQ, 0 /-1 WHEN INTERRUPT LEVEL HAS LEFT WORK FOR NON-INTERRUPT LEVEL
|
||
GFLG, 0 /FLAG USED TO TELL XMT A GOTO ACCEPT
|
||
|
||
IFNZRO CDRN <
|
||
CDREXT, 0 /**DECSYNC**SLOT TO PUT TRAILING PARTS OF CARDS
|
||
/**DDCMP**ADR OF COUNT FIELD
|
||
CDRNXT, 0 /POINTER TO BEGINING OF CURRENT CARD
|
||
CDRADR, 0 /POINTER INTO STRING BEING FILLED
|
||
CDCCNT, 0 /COMPRRESED CHAR COUNT
|
||
CDCCHR, 0 /LAST CARD COLUMN
|
||
>/END OF IFNZRO CDRN
|
||
|
||
IFNZRO LPTN <
|
||
LPTCCH, 0 /CHAR WE ARE UNCOMPRESSING
|
||
LPTCCN, 0 /COUNT OF CHARS TO UNCOMPRESS
|
||
LPTCNT, 0 /COUNT OF CHARS IN CHUNK STRING
|
||
LPTCOL, 0 /CURRENT OUTPUT COLUMN
|
||
LPTOCH, 0 /CHAR TO PRINT LATER
|
||
LPTZCT, 0 /REP COUNT AFTER TIMEOUT
|
||
LPTOPV, 0 /LAST VALUE OF PIVOT
|
||
LPTCHR, 0 /LAST CHAR OUTPUT TO LPT
|
||
LPTRCT, 0 /REPETITION COUNT FOR LPT CHARS(MAKES TABS ETC)
|
||
LPTLNE, 0 /INDEX TO LPTVFU
|
||
LPTHNG, LPTHN1 /PUT OUT A CR TO LEFT JUSTIFY THE PRINTER
|
||
LPTHN2 /PUT OUT SPACES TO GET INTO RIGHT COLUMN
|
||
>/END OF IFNZRO LPTN
|
||
|
||
RCVTKR, 0 /RECEIVED MESSAGE TAKER
|
||
RCVPTR, 0 /RECEIVED MESSAGE PUTTER
|
||
|
||
STACKF, 0 /-2 MEANS SENDING STARTS
|
||
/ -1 MEANS NEED TO SEND A STACK
|
||
/ 0 MEANS DOWN(NO ICM)
|
||
/ 1 MEANS HAVE RECEIVED ICM
|
||
NAKFLG, 0 /IF NONZERO REASON TO SEND A NAK MESSAGE
|
||
RECVOK, 0 /LAST MESSAGE # RECEIVED OK
|
||
/ SIGN BIT MEANS SEND ACK
|
||
REPTCK, 0 /TIMER FOR REPS
|
||
/ 0 MEANS SEND A REP
|
||
T10FLG, 0 /TRANSMITTER STATE
|
||
/ -2 MESSAGE READY TO GO
|
||
/ -1 ACTIVE
|
||
/ 0 IDLE
|
||
/ +1 SYNCH
|
||
CNTPNT, 0 /POINTER TO CHUNK COUNTER
|
||
T10AKR, 0 /POINTER TO LAST ACKED TO 10 REQUEST
|
||
/ T10AKR, T10TKR, & T10PTR ARE ALWAYS LEFT
|
||
/ SO THEY CAN BE USED WITHOUT CHECKING 1ST
|
||
T10LAN, 0 /LAST MESSAGE # TO 10 ACKED BY 10
|
||
T10TKR, 0 /POINTER TO TAKE TO 10 REQUESTS FROM QUEUE
|
||
T10HSN, 0 /HIGHEST MSG # SENT TO 10
|
||
T10PTR, 0 /POINTER TO PUT TO 10 REQUESTS INTO QUEUE
|
||
|
||
T10NCA, 0 /ADR OF NEXT BUFFER TO SEND
|
||
T10NWC, 0 /WC FOR NEXT BUFFER TO SEND
|
||
T10CLK, 0 /ISZ'ED BY CLOCK INTERRUPTS
|
||
|
||
F10TWC, 0 /TOTAL WC(POSITIVE) FOR DATA IN NUMBERED MSGS
|
||
|
||
RSNA, 0 /STORE SNA FIELD
|
||
RNCT, 0 /STORE NCT FIELD
|
||
RNOD, 0 /NODE NUMBER OF OTHER END OF LINE
|
||
DISSNA, 0 /FOR DISCONNECT
|
||
DISSLA, 0
|
||
DISREA, 0
|
||
DMPCHR, DMPCTY /WORD SET BY EITHER DMP000 OR CTYEXC
|
||
/DP8E USES LOC AT 7720-7731
|
||
*7720
|
||
F10TCH, ZBLOCK 4 /4 SPECIAL CHARS TO WATCH FOR ON INPUT
|
||
/ SET UP BY SYSCHK
|
||
F10WC, 0 /WORD COUNT FOR MESSAGES FROM 10
|
||
F10CA, 0 /CURRENT ADDRESS FOR MESSAGES FROM 10
|
||
0
|
||
T10WC, 0 /WORD COUNT FOR MESSAGES TO 10
|
||
T10CA, 0 /CURRENT ADDRESS FOR MESSAGES TO 10
|
||
0
|
||
/ALL GOOD PDP8 PROGRAMS BEGIN AT ADDRESS 200
|
||
|
||
*200
|
||
DC72, JMP INIALL
|
||
|
||
/HERE TO DUMP SYSTEM ONTO LPT
|
||
DUMP, CIF 10 /DUMP PROGRAM ASSEMBLED IF FIELD 1
|
||
JMP DUMPI
|
||
VEDIT /SOFTWARE VERSION NUMBER
|
||
DMPAC, 0 /AC WHEN AUTODUMP BEGAN
|
||
DMPLNK, 0 /FOR 8I'S THIS IS LINK
|
||
/ FOR 8E'S THIS IS LINK AND OTHER FLAGS
|
||
DMPTRP, 0 /JMS HERE FOR AN AUTODUMP
|
||
DCA DMPAC /SAVE AC
|
||
GTF /LOAD FLAGS AND LINK TO AC
|
||
AND (7770 /LOW ORDER BIT DUMMY INST FIELD
|
||
DCA DMPLNK /SAVE LINK
|
||
CAF /STOP THE WORLD
|
||
DMP2, TAD (DMPMSG-1 /TELL OPR WE ARE DIEING
|
||
JMS CTYEXC
|
||
TAD DMPLNK /OUTPUT INS FIELD
|
||
AND [0007
|
||
TAD [0060
|
||
JMS I DMPCHR
|
||
TAD DMPTRP
|
||
DCA DMPWRD /SAVE WORD TO DUMP
|
||
JMS DMPWDC
|
||
JMS DMPWDC
|
||
JMS DMPWDC
|
||
JMS DMPWDC
|
||
/DEFAULT ACTION WHEN STATION CRASHES IS TO JUMP TO ROM FOR RELOAD
|
||
IFNDEF DELROM <
|
||
CIF 70
|
||
JMP 0 /JUMP TO ROM IN FIELD 7
|
||
>/END OF IFNDEF DELROM
|
||
/CAN OVERRIDE ROM RESTARTING WHEN SYSTEM CRASHES BY DEFINING
|
||
/DELROM=1 IN C.PAL FILE
|
||
IFDEF DELROM <
|
||
7402
|
||
JMP DUMP
|
||
>/END OF IFDEF DELROM
|
||
DMPWDC, 0
|
||
TAD DMPWRD
|
||
RTL
|
||
RAL
|
||
DCA DMPWRD
|
||
TAD DMPWRD
|
||
RAL
|
||
AND [0007
|
||
TAD [0060
|
||
JMS I DMPCHR
|
||
JMP I DMPWDC
|
||
|
||
DMPWRD, 0
|
||
|
||
/HERE TO TYPE A MESSAGE ON CTY
|
||
/ ONLY USED WHEN STATION NOT RUNNING
|
||
CTYEXC, 0
|
||
DCA DMPWRD
|
||
TAD (DMPCTY
|
||
DCA DMPCHR
|
||
CDFCNK
|
||
CTYEX3, ISZ DMPWRD
|
||
TAD I DMPWRD
|
||
JMS I DMPCHR
|
||
TAD I DMPWRD /GET CHAR AGAIN
|
||
SMA CLA /ALL DONE ?
|
||
JMP CTYEX3 /NO
|
||
CDFINS
|
||
JMP I CTYEXC
|
||
DMPCTY, 0
|
||
CTYTLS
|
||
CTYTSF
|
||
JMP .-1
|
||
NL0
|
||
JMP I DMPCTY
|
||
DELTB, /DELETE NODE FROM NEI TABLE
|
||
NL0
|
||
TAD (NEITAB-1
|
||
DCA TEMPB
|
||
DEL2, ISZ TEMPB
|
||
DEL2B, TAD I TEMPB
|
||
SNA
|
||
JMP RCVFLU
|
||
AND (2000
|
||
SNA CLA
|
||
JMP DEL1
|
||
TAD (5777
|
||
AND I TEMPB
|
||
DCA I TEMPB
|
||
JMP DEL2
|
||
/DEL ENTRY
|
||
DEL1, TAD TEMPB
|
||
DCA TEMP1
|
||
NL1
|
||
TAD TEMPB
|
||
DCA TEMP2
|
||
DEL3, TAD I TEMP2 /MOVE UP 1 LOC
|
||
SNA
|
||
JMP DEL2A /CONTINUE SCAN
|
||
DCA I TEMP1
|
||
ISZ TEMP1
|
||
ISZ TEMP2
|
||
JMP DEL3
|
||
DEL2A, DCA I TEMP1
|
||
JMP DEL2B
|
||
/RECEIVE A STATION CONTROL GOTO
|
||
/PROCESS ONLY ONE AT A TIME
|
||
RGOTO, JMS BTSCN /SETUP IN CASE NEED A REJECT
|
||
TAD GTTAB
|
||
SZA CLA /SEE IF A GOTO PENDING
|
||
JMP RJT
|
||
TAD I TEMPB /GET DNA
|
||
DCA GTTAB
|
||
TAD (15
|
||
DCA GTTAB+1 /SET A GOTO ACCEPT
|
||
TAD (GTTAB+2
|
||
DCA TEMPA /SET UP ADDRESS IN TEMPA FOR RADR
|
||
JMS RADR
|
||
DCA I TEMPB /FREE LOC IN BTTAB
|
||
JMP RCVFLU
|
||
/RECEIVE EXAMINE DEVICE CTRL MSG HALF HERE DUR TO CORE PROB
|
||
RCVEX, JMS BTSCN /SCAN PLACE IN BOOT TABLE
|
||
TAD (12
|
||
DCA I TEMPA
|
||
JMP RCVE
|
||
/LOGIC TO TRY TO EST CONNECTION
|
||
/BROKEN UP DUE TO PAGE LIMITS
|
||
CONFD1, AND (4777
|
||
TAD (3000
|
||
DCA I DDBSTS
|
||
JMP CONDN
|
||
|
||
PAGE
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** INITIALIZATION ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
|
||
/HERE TO RESTART PROGRAM
|
||
INIALL, IOF /DISABLE INTERRUPTS
|
||
|
||
NLM2
|
||
DCA STACKF /FLAG TO SEND A START
|
||
INISUM,
|
||
/HERE TO INITIALIZE SOME OF STATION STUFF
|
||
|
||
CDFCNK
|
||
/ WILL BE A NOP
|
||
INICIF, CIF 20 / CHANGE INSTRUCTION FIELD ########
|
||
INIJMP, JMP I (SYSCHK /GO PERFORM SYSCHK ########
|
||
/ CHANGED TO CAF(OR 0) BY SYSCHK
|
||
|
||
|
||
/HERE TO INITIALIZE THE CLOCK
|
||
NL1
|
||
CLKECI /RESET CLOCK
|
||
|
||
/HERE TO INITIALIZE THE COMMUNICATIONS FLAGS
|
||
DCA REPTCK
|
||
|
||
/HERE TO INITIALIZE FROM 10 FLAGS
|
||
TAD (RCVQUE
|
||
DCA RCVPTR
|
||
TAD (RCVQUE
|
||
DCA RCVTKR
|
||
|
||
/HERE TO INITIALIZE TO 10 FLAGS
|
||
TAD (T10BF1
|
||
DCA T10AKR
|
||
DCA T10LAN /LAST ACKED POINTER
|
||
TAD (T10BF1
|
||
DCA T10TKR /LAST SENT POINTER
|
||
TAD (T10BF1+T10LEN
|
||
DCA T10PTR /HIGHEST SENT POINTER
|
||
NL1
|
||
DCA T10HSN /HIGHEST MSG# SENT
|
||
NL2 /FOR BCC
|
||
TAD I (NCLNID /GET NODE-ID MSG SIZE
|
||
NEGATE /MAKE ISZ COUNTER
|
||
DCA TEMP2 /SAVES COUNTER
|
||
TAD (NCLNID /POINT TO NODE ID MESSAGE
|
||
DCA IAUTO1 /SET UP POINTER TO MESSAGE
|
||
TAD (T10BF1+7
|
||
DCA AUTO1 /POINTER TO BUFFER
|
||
INIDD3, TAD I IAUTO1
|
||
DCA I AUTO1 /PUT NEXT CHAR INTO BLOCK
|
||
ISZ TEMP2
|
||
JMP INIDD3 /LOOP BACK FOR REST
|
||
TAD I (NCLNID /GET SIZE OF NODE-ID MSG
|
||
DCA I (T10BF1+1 /SET COUNT IN MSG
|
||
DCA I (T10BF1+2 /CLEAR HIGH ORDER COUNT
|
||
NL1
|
||
DCA I (T10BF1+4 /SET MESSAGE NUMBER
|
||
TAD (-DEVN
|
||
DCA TEMP1
|
||
TAD (RCVDSP
|
||
DCA AUTO1
|
||
TAD (CTRLTB-1
|
||
DCA IAUTO1
|
||
TAD (SNATAB-1 /POINT TO NODE TABLE
|
||
DCA IAUTO2 /PUT INTO AUTOINDEX REGISTER
|
||
INIDD4, TAD (RCVKRD /GET UNUSED DISPATCH ENTRY
|
||
DCA I AUTO1 /STORE AT RCVDSP
|
||
DCA I IAUTO1 /ZERO DDB FIELD
|
||
DCA I IAUTO2 /ZERO NODE FIELD
|
||
ISZ TEMP1 /UP COUNTER
|
||
JMP INIDD4 /CONTINUE IF NOT EXPIRED
|
||
/INITIALIZE MCR TABLE
|
||
TAD (NEITAB-1
|
||
DCA AUTO1
|
||
DCA GFLG /INIT GOTO FLAG
|
||
/TABLES ARE CONTIGUOUS
|
||
TAD (-NEILEN-1-BTLEN-1-GTLEN
|
||
DCA TEMP1
|
||
DCA I AUTO1
|
||
ISZ TEMP1
|
||
JMP .-2
|
||
JMP FUG /GO ON WITH INITIALIZATION
|
||
INIDDB, 0
|
||
ISZ TEMP6 /ADVANCE DEVICE NUMBER
|
||
TAD TEMP6 /GET NEW DEVICE NUMBER
|
||
JMS GETDDB /GET DEVICE BLOCK ADR AND SET UP DDBSTS
|
||
DCA AUTO1
|
||
TAD (1-DEVLNK /CLEAR ONLY PORTION
|
||
DCA INTMP1
|
||
INIDD0, DCA I AUTO1 /ZERO DEVICE BLOCK
|
||
ISZ INTMP1
|
||
JMP INIDD0
|
||
ISZ AUTO1 /SKIP LINK
|
||
TAD I DDB
|
||
AND (7700
|
||
DCA I DDB
|
||
TAD (DEVRCN /ZERO DEVRCN ON INITIALIZATION
|
||
TAD DDB
|
||
DCA INTMP1
|
||
DCA I INTMP1
|
||
JMP I INIDDB
|
||
/RECEIVE CONFIGURATION MESSAGE
|
||
/
|
||
RCVCFG, JMS GETCHR
|
||
JMP RCVFLU
|
||
SNA CLA
|
||
JMP RCVFND /MCR FOUND
|
||
IFDEF FTOLDC < JMS GTCHR /IF BIT PATTERN SENT IN CONF MSG EXT FIELD GREATER THAN 2 WORDS
|
||
AND (200
|
||
SZA CLA
|
||
JMP .-3
|
||
>/END OF IFDEF FTOLDC
|
||
IFNDEF FTOLDC <
|
||
JMS GETEXN /BYPASS NDV
|
||
>/END OF IFNDEF FTOLDC
|
||
JMS GETEXN /BYPASS PID
|
||
JMP RCVCFG
|
||
RCVFND, TAD RSNA
|
||
NEGATE
|
||
JMS NETSCN /LOOK FOR NODE IN NEIGHBORS TABLE
|
||
TAD RSNA /NF RETURN
|
||
TAD I TEMPB /F RET
|
||
AND (777
|
||
TAD (1000 /MASK AS MCR NODE
|
||
JMP NETAD /ADD AC TO TABLE
|
||
/FIELD 0 CALL FOR FRECKS CALL FROM FIELD 1
|
||
FRC, JMS FRECKS /[1(23)]
|
||
CIF 10 /[1(23)]
|
||
JMP FREC1 /[1(23)] RETURN TO FIELD 1
|
||
PAGE
|
||
IFNZRO TTYN <
|
||
INTMTX, CIF 30 /JUMP TO MODEM LOGIC FOR KL8A'S
|
||
JMP INTMTY >/END OF IFNZRO TTYN
|
||
FUG,
|
||
|
||
|
||
/HERE TO INITIALIZE THE SYNCHRONOUS LINE
|
||
DCA INRCPV /MIGHT BE USEFUL ON A RESTART
|
||
DCA NXTDDB /INITIALIZE ROUND ROBIN FOR SCHED XSTART
|
||
JMS INISYN
|
||
JMP INIDP9
|
||
|
||
/HERE TO INITIALIZE THE SYNCHRONOUS INTERFACE WHEN STATION RESTARTS
|
||
/ AND ALSO HERE WHEN TRANSMITTER TIMES OUT
|
||
INISYN, 0
|
||
TAD (CTLSIZ-1 /POINT TO CHUNKS
|
||
TAD RCVPTR /POINT THIS MESSAGE
|
||
DCA TEMP1
|
||
TAD INRCPV /GET STATE OF RECEIVER
|
||
TAD (-INRC70 /CHECK TO SEE IF RECEIVING NUMBERED MESSAGE
|
||
RCKFLD
|
||
SNA CLA /SKIP IN WE DON'T HAVE CHUNKS IN LIMBO
|
||
TAD I TEMP1 /GET ADR OF FIRST CHUNK
|
||
TABFLD
|
||
DCA TEMP1 /SAVE ADR OF FIRST CHUNK(OR ZERO)
|
||
DPSCSI /CLEAR INTERFACE
|
||
Z=2100 /REC FIELD-2,TRANSMIT FLD=1
|
||
TAD (Z
|
||
DPSLFL /SET FIELD FOR RECEIVE AND XMT BUFFERS
|
||
TAD (5400-Z
|
||
DPSLCC /LOAD CONTROL REGISTER
|
||
NL0
|
||
TAD (SYNBUF-1 /STRING OF 4 SYNCHS
|
||
CDFINS /WC AND CA ARE IN FIRST FIELD
|
||
DCA I [T10CA
|
||
TAD (-4
|
||
DCA I [T10WC
|
||
NLM3
|
||
DCA T10CLK
|
||
JMS I [INRCID /SET RECEIVER TO IDLE MODE
|
||
/ AND SET DATA FIELD TO CHUNK FIELD
|
||
NL1
|
||
DCA T10FLG /TRANSMITTER IS TRYING TO SYNCH LINE
|
||
DPSGTT /TRANSMIT GO
|
||
DPSGRR /AND RECEIVE GO
|
||
TAD TEMP1 /GET CHUNK ADR TO FREE(IF ANY)
|
||
SZA
|
||
JMS FRECKS
|
||
JMP I INISYN
|
||
|
||
INIDP9,
|
||
|
||
/HERE TO INITIALIZE THE CHUNKS
|
||
DCA FIRFRE /NO FREE CHUNKS YET
|
||
DCA FRECNT /COUNT OF FREE CHUNKS
|
||
|
||
TAD FIRADR /GET FIRST CHUNK ADDRESS
|
||
DCA INTMP2
|
||
INICNK, TAD INTMP2
|
||
JMS IFRCNK /PUT CHUNK INTO FREE LIST
|
||
TAD INTMP2 /GET LAST CHUNK ADR
|
||
TAD [CNKSIZ /ADVANCE 1 CHUNK
|
||
DCA INTMP2 /SAVE NEW CHUNK ADR
|
||
TAD INTMP2
|
||
Z=7760
|
||
TAD (-Z
|
||
SZA CLA
|
||
JMP INICNK
|
||
/HERE TO INITIALIZE ALL DEVICES AT STATION
|
||
NLM1 /START AT DDBTAB
|
||
DCA TEMP6 /SAVE DEVICE NUMBER
|
||
|
||
/INITIALIZE THE TTY INPUT CHAR QUEUE
|
||
TAD (TTIQUE-1
|
||
DCA TIQPTR
|
||
TAD (TTIQUE-1
|
||
DCA TIQTKR
|
||
|
||
/HERE TO INITIALIZE THE TTYS
|
||
|
||
TAD (-1-TTYN /COUNT OF CTY & TTYS
|
||
DCA TEMP8 /INITIALIZE TTY COUNTER
|
||
INITT0, JMS INITTY
|
||
ISZ TEMP8 /HAVE WE DONE ALL THE TTY'S ?
|
||
JMP INITT0 /NOT YET SO KEEP GOING
|
||
IFNZRO TTYN <
|
||
|
||
JMS KL8I
|
||
>/END OF IFNZRO TTYN
|
||
INICDR,
|
||
IFNZRO CDRN <
|
||
/HERE TO INITIALIZE THE CDR
|
||
DCA CDRNXT /NO CARD READY TO GO
|
||
JMS INIDDB /INITIALIZE DEVICE BLOCK
|
||
>/END OF IFNZRO CDRN
|
||
|
||
IFNZRO LPTN <
|
||
/HERE TO INITIALIZE THE LPT
|
||
/INILPT, JMS INIODB /INITIALIZE DDB
|
||
INILPT, JMS INIDDB
|
||
TAD (OUTBIT
|
||
DCA I DDBSTS
|
||
DCA LPTCCN /NO COMPRESSED CHAR COUNT YET
|
||
DCA LPTCNT /NO CHARS IN CHUNK STRING
|
||
DCA LPTCOL /WE ARE AT LEFT HAND MARGIN
|
||
TAD (LPTVFU-1 /INDEX TO VFU
|
||
DCA LPTLNE /WE ARE AT TOP OF FORM
|
||
TAD (SKP
|
||
CDFINS /WE ARE CHANGING AN INSTRUCTION
|
||
DCA LPTPIV
|
||
CDFCNK
|
||
TAD [LPTCHK
|
||
DCA I [LPTBLK+DEVCHK /STORE CHUNK COUNT
|
||
>/END OF IFNZRO LPTN
|
||
|
||
INIPTR,
|
||
IFNZRO PTRN <
|
||
/HERE TO INITIALIZE THE PTR
|
||
JMS INIDDB
|
||
>/END OF IFNZRO PTRN
|
||
|
||
PTPINI,
|
||
IFNZRO PTPN <
|
||
/HERE TO INITIALIZE THE PTP
|
||
JMS INIODB
|
||
>/END OF IFNZRO PTPN
|
||
|
||
INIPLT,
|
||
IFNZRO PLTN <
|
||
/HERE TO INITIALIZE THE PLT
|
||
JMS INIODB
|
||
>/END OF IFNZRO PLTN
|
||
|
||
|
||
JMP LOOP
|
||
|
||
/HERE TO INITIALIZE A TTY BLOCK
|
||
INITTY, 0
|
||
JMS INIDDB
|
||
TAD (4000+TTYBIT+OUTBIT+STSBIT
|
||
DCA I DDBSTS /SET INITIAL TTY STATUS WORD
|
||
ISZ AUTO1 /SKIP LDBADR
|
||
DCA I AUTO1 /SET LDBCOL
|
||
ISZ AUTO1 /SKIP LDBWID
|
||
TAD (RSTMSG-1
|
||
DCA I AUTO1 /SET LDBXPT
|
||
DCA I AUTO1 /CLEAR LDBFPT
|
||
DCA I AUTO1 /SET LDBCHR
|
||
DCA I AUTO1 / " LDBIPT
|
||
NLOAD DEVCHK
|
||
TAD DDB
|
||
DCA TEMPA
|
||
TAD [TTYCHK
|
||
DCA I TEMPA /STORE OUTPUT CHUNK LIMIT
|
||
JMP I INITTY
|
||
|
||
SECOND, DCA SECFLG
|
||
NL6000 /LIMIT # OF SPURIOUS INTRPS
|
||
DCA INTCNT
|
||
JMP SECDP
|
||
PAGE
|
||
DPSTS1, 0
|
||
DPSTS2, 0
|
||
/CHECK MODEM FOR SYNCHR LINE ONCE PER SECOND
|
||
SECDP, DPSRS1
|
||
DCA DPSTS1
|
||
DPSRS2
|
||
DCA DPSTS2
|
||
/ JMP IRMA
|
||
/IRMA CATCHER
|
||
/ COME HERE ONCE PER SECOND
|
||
/ IF A TTY IS ACTIVELY OUTPUTING SET IRMA BIT IN LDBSTS UNLESS
|
||
/ IRMA BIT IS STILL ON FROM LAST TIME, IN WHICH CASE TTY HAS LOST XMT SO FAKE ONE
|
||
DTR=1000 /DATA TER READY BIT IN DEVDDC
|
||
/CHECK DATA SET CARRIER ONCE PER SECOND
|
||
|
||
IRMA, /START WITH CTY
|
||
DCA TEMP5
|
||
IRMA1, TAD TEMP5 /GET NUMBER OF NEXT DEVICE
|
||
JMS GETDDB /GET ADDRESS OF BLOCK FOR THIS DEVICE
|
||
IOF /IN CASE OF XMT INTERRUPTS
|
||
DCA INTDDB /SAVE ADR OF DEVICE BLOCK
|
||
/CHECK CARRIER SIGNAL ON DATA SET LINES
|
||
TAD (DEVDSL
|
||
TAD INTDDB
|
||
DCA INTMP6 /SAVE FOR FUTURE REF
|
||
TAD I INTMP6 /CHECK TO SEE IF DATA SET
|
||
SMA CLA
|
||
JMP IRM1 /NOT DATA SET
|
||
TAD (LDBADR
|
||
TAD INTDDB /GENERATE ADDRESS OF HARDWARE INST
|
||
DCA INTMP2
|
||
TAD TEMP5 /GET TTY NO
|
||
AND (3
|
||
TAD (TALN /GET ADDRESS OF CARRIER MASK BITS FOR TTY LINES
|
||
DCA INTMP5 /SAVE ADDRESS
|
||
TAD TEMP5 /GET TTY NO
|
||
AND (3
|
||
SZA CLA /CHECK FOR LINE 3
|
||
JMP IRM6 /LINES 0,1, OR 2
|
||
TAD I INTMP2 /HARDWARE ADDRESS
|
||
AND (7770
|
||
TAD (17
|
||
IRM6A, DCA INST1
|
||
TAD I INTMP6
|
||
NEGATE
|
||
DCA INTMP7 /SAVE FOR LATER COMPARISON
|
||
TAD I INTMP6
|
||
AND (40 /SEE IF DTR ON
|
||
SNA CLA /NOT ACTIVE
|
||
JMP IRMC /TREAT AS LOCAL LINE
|
||
INST1, 0
|
||
AND I INTMP5 /CARRIER MASK TABLE
|
||
IRM7, SZA CLA /CARRIER GONE?
|
||
JMP IRMB /NO, SEE IF JUST COME ON
|
||
ISZ I INTMP6 /INCRE COUNTER 6 SEC
|
||
TAD (7
|
||
AND I INTMP6 /CARRIER LOST FOR 6 SEC?
|
||
SZA CLA
|
||
JMP IRM1 /NO
|
||
IRMC, TAD I INTMP6
|
||
AND (7637 /TURN CARRIER DTR BIT OFF AND INIT COUNT
|
||
DCA I INTMP6
|
||
NL1
|
||
AND INST1
|
||
SNA CLA /CHECK FOR LINE 3
|
||
JMP IRMA2
|
||
TAD INST1
|
||
AND (7771
|
||
DCA .+1
|
||
0
|
||
JMP IRMA2
|
||
IRM1B, TAD I INTMP6 /GET DEVDSL
|
||
AND (7760 /INIT COUNT
|
||
TAD (2
|
||
DCA I INTMP6
|
||
IRM1, TAD I DDBSTS
|
||
SMA /IS DEVICE ACTIVE ?
|
||
JMP IRMA7 /NO
|
||
AND [TTYBIT
|
||
SNA CLA /IS DEVICE A TTY ?
|
||
JMP IRMA9 /NO SO DONE
|
||
TAD (DEVTIM /RELATIVE ADR OF FILLER TIMER
|
||
TAD INTDDB /MAKE ABSOLUTE
|
||
DCA INTMP1 /SAVE POINTER TO FILLER
|
||
TAD I INTMP1 /GET FILL TIMER
|
||
SZA CLA /SKIP IF FILLING
|
||
JMP IRMA7
|
||
NLOAD IRMBIT /MASK FOR IRMA BIT
|
||
AND I DDBSTS /GET BIT FROM OLD STATUS
|
||
SZA CLA /SKIP IF WE LOST AN XMTINT
|
||
JMS XMTINT /FAKE A XMT INTERRUPT
|
||
NLOAD IRMBIT /GET BIT FOR IRMA
|
||
|
||
TAD I DDBSTS /PUT INTO STATUS WORD
|
||
DCA I DDBSTS
|
||
IRMA7, ION
|
||
NL0
|
||
ISZ TEMP5 /ADVANCE 1 DEVICE
|
||
TAD TEMP5
|
||
TAD [-DEVN
|
||
SZA CLA
|
||
JMP IRMA1
|
||
IRMA9, JMP LOOP /ALL DONE
|
||
IRM6, TAD I INTMP2 /GENERATE HARDWARE ADDRESS FOR LINE 0-2
|
||
AND (7770
|
||
TAD (2
|
||
JMP IRM6A
|
||
IRMB, TAD I INTMP6
|
||
AND (100 /WAS CARRIER ON
|
||
SZA CLA
|
||
JMP IRM1B
|
||
TAD (100 /NO TURN IT ON AND SEND TO 10
|
||
TAD I INTMP6
|
||
DCA I INTMP6
|
||
/ONLY SEND STATUS IF CHANGED
|
||
IRMA2, TAD I INTMP6 /NEW VALUE
|
||
TAD INTMP7
|
||
/DON'T WANT TO ISSUE STATUS WHEN NOT CHANGED
|
||
/SEC COUNTER SHOULD NOT CONFLICT AS
|
||
/IF THAT IS CHANGED MORE THAN LIKELY DTR CAR HAS CHANGED TOO
|
||
SNA CLA
|
||
JMP IRM1B /DTR OR CARRIER NOT CHANGE
|
||
NL7776
|
||
AND I DDBSTS
|
||
IAC
|
||
DCA I DDBSTS
|
||
JMP IRM1B
|
||
PAGE
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** DESCRIPTION ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
IFNZRO 0 <
|
||
|
||
|
||
SYNCHRONOUS OUTPUT:
|
||
A SIM IS ALWAYS IN ONE OF FOUR STATES:
|
||
T10FLG=-2 MESSAGE READY TO TRANSMIT
|
||
T10FLG=-1 MESSAGE IS BEING TRANSMITTED
|
||
T10FLG=0 LINE IS SENDING IDLES
|
||
T10FLG=1 LINE IS SENDING SYNCS
|
||
WHEN T10FLG IS -2 T10NWC(T0 10 NEXT WORD COUNT) AND T10NCA(TO 10 NEXT
|
||
CURRENT ADDRESS) DESCRIBE THE NEXT MESSAGE.
|
||
|
||
SYNCHRONOUS INPUT:
|
||
THE SIM IS ALWAYS IN ONE OF THREE STATES:
|
||
A.) IDLE
|
||
B.) RECEIVING A UNNUMBERED MESSAGE(ACK, NAK, ETC.).
|
||
C.) RECEIVING NUMBERED MESSAGE DATA.
|
||
THE STATE IS SET BY THE PM BY SETTING INRCPV TO BE:
|
||
A.) INRC10
|
||
B.) INRC20
|
||
C.) INRC70
|
||
WHEN THE SIM IS IN STATE C, AND ONLY THEN, INCOMING CHARS ARE PLACED
|
||
IN CHUNKS RATHER THAN A FIXED BUFFER.
|
||
THE SIM USES F10WC AND F10CA TO STORE THE DATA.
|
||
WORD COUNT OVERFLOWS WILL CAUSE THE SIM:
|
||
A.) RESETS TO JUNK BUFFER
|
||
B.) TRANSFERS TO INTP40
|
||
C.) TRANSFERS TO INTP60
|
||
WHEN THE RECEIVER IS IDLE AND ONE OF THE FOUR CHARS AT F10TCH IS
|
||
FOUND IN AN INPUT STREAM THE SIM NOTIFIES THE PM BY BRANCHING TO:
|
||
INTP00 WHEN FINDS CHAR AT F10TCH
|
||
INTP10 WHEN FINDS CHAR AT F10TCH+1
|
||
INTP20 WHEN FINDS CHAR AT F10TCH+2
|
||
INTP30 WHEN FINDS CHAR AT F10TCH+3
|
||
WHEN THE RECEIVER IS IN STATE B THE PM IS NOT NOTIFIED OF SPECIAL
|
||
CHARS.
|
||
WHEN THE RECEIVER IS IN STATE C THE SIM WILL NOTIFIY THE PM
|
||
OF SPECIAL CHARS BY JMPING TO INTP70(CHAR IN INTMP1, ADR IN INTMP5);
|
||
WHEN THE PM IS DONE WITH THE CALL TO INTP70 IT WILL RETURN TO INRC80.
|
||
>/END OF IFNZRO 0
|
||
/HERE AT INTERRUPT LEVEL WHEN RECEIVER HAS FOUND A SOH
|
||
INTP00, TAD (-7 /HEADER IS ALWAYS 8 CHARS
|
||
JMS INTP41
|
||
TAD (INRC70 /WE ARE NOW RECEIVING NUMBERED MSG DATA
|
||
DCA INRCPV /SET SIM MODE
|
||
|
||
TAD RCVPTR /GET ADR OF MESSAGE HEADER
|
||
RCKFLD
|
||
JMS GETLEN /GET LENGTH OF MESSAGE
|
||
TAD (0002 /FUDGE FOR CRC
|
||
DCA F10TWC
|
||
DCA INTMP1 /INITIALIZE FOR INRC80
|
||
TAD (0010 /DISPLACEMENT TO CHUNK COUNTER
|
||
TAD RCVPTR /ADD TO START OF BUFFER
|
||
DCA INTMP2 /SAVE CHUNK COUNTER ADDRESS
|
||
TAD INTMP2 /GET CHUNK COUNTER ADDRESS
|
||
DCA CNTPNT /STORE FOR INRC80
|
||
DCA I INTMP2 /CLEAR CHUNK COUNTER
|
||
ISZ INTMP2 /SKIP OVER CHUNK COUNTER TO LINK TO CHUNKS
|
||
DCA I INTMP2 /CLEAR LINK TO 1ST CHUNK
|
||
TABFLD
|
||
JMP INRC80
|
||
|
||
|
||
INTP20, /SHOULDN'T HAPPEN
|
||
INTP30, /SHOULDN'T HAPPEN !
|
||
/HERE AT INTERRUPT LEVEL WHEN RECEIVER DETECTS BEGINING OF UNNUMBERED MESSAGE = ENQ
|
||
INTP10, TAD (-7 /UNNUMBERED MESSAGES ARE ALWAYS 8 CHAR LONG
|
||
|
||
INTP31, JMS INTP41 /WAIT FOR REST OF MESSAGE FROM DECSYSTEM-10
|
||
INTP33, NLM1
|
||
DCA WRKREQ /SO NON-INTERRUPT LEVEL CODE WAKE UP
|
||
TAD (CTLSIZ /ADVANCE TO NEXT CTL BUFFER
|
||
TAD RCVPTR
|
||
TAD (-RCVLIM
|
||
SNA
|
||
TAD (RCVQUE-RCVLIM
|
||
TAD (RCVLIM
|
||
DCA RCVPTR
|
||
TAD RCVPTR
|
||
NEGATE
|
||
TAD RCVTKR
|
||
SNA CLA /DO WE HAVE TOO MANY MSGS READY
|
||
HLT
|
||
JMS I [INRCID /SET RECEIVER TO IDLE STATE
|
||
JMP INTP42
|
||
|
||
/HERE AT INTERRUPT LEVEL WITH WC OVERFLOW ON UNNUMBERED MESSAGE
|
||
INTP40, JMP I INTP41
|
||
INTP41, 0
|
||
CDFINS /NEED TO SET WC AND CA IN FIELD 0
|
||
DCA I [F10WC /SAVE LENGTH
|
||
TAD RCVPTR /ADR OF BUFFER FOR HEADER
|
||
DCA I [F10CA /SET BUFFER ADR FOR RECEIVER
|
||
TAD (INRC20
|
||
DCA INRCPV
|
||
CDFCNK /RESET NORMAL DATA FIELD
|
||
INTP42,
|
||
DPSGRR /ENABLE RECEIVER
|
||
JMP INTDIS
|
||
|
||
/HERE AT INTERRUPT LEVEL WITH WC OVERFLOW ON NUMBERED MSG DATA
|
||
INTP60=INTP33 /JUST CALL CURRENT MSG DONE
|
||
|
||
|
||
INTP70=INTDIS /NO SPECIAL CHAR HANDLING IN MIDDLE OF JUNK
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** DDCMP ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/THE PROTOCOL IS DESCRIBED IN FILE DN92.RNO ON THE DISTRIBUTION TAPE
|
||
/SOME OF THE PROTOCOL IS GIVEN BELOW
|
||
|
||
/MESSAGE PROTOCOL
|
||
SYN=226
|
||
IDLE=SYN /NO SPECIAL IDLE CHARACTER
|
||
ENQ=005 /1ST CHAR IN UNNUMBERED MESSAGES
|
||
DLE=220 /1ST CHAR IN BOOTSTRAP MESSAGES
|
||
SOH=201 /1ST CHAR IN NUMBERED MESSAGES
|
||
|
||
/UNNUMBERED MESSAGES
|
||
FILL=000 /FILL CHARACTER
|
||
A0=1 /DESTINATION STATION ADR
|
||
|
||
/ACK: ENQ ACK FILL MSG# FILL A0 BCC1 BCC2
|
||
ACK=001
|
||
/ MSG# IS LAST GOOD MSG RECEIVED
|
||
|
||
/NAK: ENQ NAK RNAK MSG# FILL A0 BCC1 BCC2
|
||
NAK=002 /NEGATIVE ACKNOWLEDGE
|
||
/ RNAK=1 BCC ERROR IN HEADER
|
||
/ RNAK=2 DATA BBC INCORRECT
|
||
/ RNAK=3 REP RESPONSE
|
||
/ RNAK=10 SHORT TERM HIGH LEVEL EXCEPTION
|
||
/ RNAK=11 RECEIVER OVERRUN
|
||
/ RNAK=20 MESSAGE TOO LONG
|
||
/ RNAK=21 HEADER FORMAT ERROR
|
||
/ MSG# IS LAST GOOD MSG RECEIVED
|
||
|
||
/REP: ENQ REP FILL FILL N A0 BCC1 BCC2
|
||
REP=003 /REPLY TYPE
|
||
/ N IS THE LAST MESSAGE# SENT
|
||
|
||
/RESET: ENQ RESET FILL FILL N A0 BCC1 BCC2
|
||
RESET=4 /DC72NP WILL NOT SEND THIS TYPE/WILL RESPOND WITH START
|
||
|
||
/RESAK: ENQ RESAK FILL R FILL A0 BCC1 BCC2
|
||
RESAK=5 /DC72NP WILL NOT SEND THIS TYPE/WILL RESPOND WITH START
|
||
|
||
/START: ENQ STRT FILL FILL FILL A0 BCC1 BCC2
|
||
STRT=006 /START TYPE
|
||
/ THE NEXT NUMBERED MESSAGE TO BE SENT IS 1
|
||
|
||
/STACK: ENQ STACK FILL FILL FILL A0 BCC1 BCC2
|
||
STACK=007 /START ACKNOWLEDGE
|
||
/ THE NEXT MESSAGE SENT, AND NEXT MESSAGE EXPECTED
|
||
/ ARE BOTH 1.
|
||
|
||
/BOOT: DLE CC1 CC2 FILL FILL A0 BCC1 BCC2 BOOTDATA BCC3 BCC4
|
||
|
||
/DEFINE MACRO USED TO ADJUST TRANSMIT BUFFER POINTERS
|
||
DEFINE T10ADJ Q < XLIST
|
||
TAD Q
|
||
TAD (-T10LST /CHECK FOR LAST BUF
|
||
SNA
|
||
TAD (T10BF1-T10LST-T10LEN /ADJUST IF LAST
|
||
TAD (T10LEN+T10LST
|
||
DCA Q /ADJUST & SAVE NEW VALUE
|
||
XLIST >/END OF T10CHK
|
||
|
||
MSNMAX=377 /MAXIMUM MESSAGE NUMBER
|
||
/HERE TO PROCESS MESSAGE RECEIVED FROM THE DECSYSTEM-10
|
||
RCVCHK, DCA CRC1
|
||
CRCXI1, DCA CRC2 /INITIALIZE CRC ########
|
||
TAD (-6
|
||
DCA TEMP3 /6 CHARS IN ALL MESSAGES
|
||
NLM1
|
||
TAD RCVTKR
|
||
DCA AUTO1 /MESSAGE POINTER
|
||
RCVCK2, RCKFLD
|
||
TAD I AUTO1
|
||
TABFLD
|
||
IFZERO DP8ETR <
|
||
JMS CRCALC /PUT NEXT CHAR INTO CRC
|
||
>/END OF IFZERO DP8ETR
|
||
IFNZRO DP8ETR <
|
||
JMS ITRCRC /TRACE AND ACCUM CRC
|
||
>/END OF IFNZRO DP8ETR
|
||
ISZ TEMP3
|
||
JMP RCVCK2
|
||
|
||
IFZERO DP8ETR <
|
||
NL4
|
||
TAD AUTO1
|
||
DCA TEMP5 /SAVE POINTER TO ADR OF CHUNK STRING
|
||
>/END OF IFZERO DP8ETR
|
||
IFNZRO DP8ETR <
|
||
JMS ITRCR2 /STASH CRC IN TRACE
|
||
>/END OF IFNZRO DP8ETR
|
||
RCKFLD
|
||
TAD I AUTO1
|
||
NEGATE
|
||
TAD CRC2 /COMPARE HALF OF CRC
|
||
SZA CLA
|
||
JMP BADCRC /BRANCH IF BUM CRC
|
||
RCKFLD
|
||
TAD I AUTO1
|
||
NEGATE
|
||
TAD CRC1 /GET SECOND HALF OF CRC
|
||
SZA CLA
|
||
JMP BADCRC /BRANCH IF BUM
|
||
TAD I RCVTKR
|
||
TABFLD
|
||
TAD (-SOH
|
||
SNA /TEST FOR NUMBERED MESSAGE
|
||
JMP RCVMSG
|
||
TAD (SOH-ENQ
|
||
SZA CLA
|
||
HLT /BE SURE IS ENQ
|
||
TAD RCVTKR
|
||
DCA AUTO1
|
||
RCKFLD
|
||
TAD I AUTO1 /GET MESSAGE TYPE CODE
|
||
TABFLD
|
||
SPA SNA
|
||
JMP RCVGAG /CHECK CODE LARGE ENOUGH
|
||
TAD (-10
|
||
SMA
|
||
JMP RCVGAG /CHECK FOR TOO LARGE
|
||
TAD (JMP I RCVTAB+7
|
||
DCA .+1
|
||
7402 /DISPATCH ON MESSAGE CODE
|
||
RCVTAB, RCVACK; RCVNAK; RCVREP; RRESET; RRSACK; RCVSRT; RCVSTK
|
||
BADTYP, NL1 /REASON CODE
|
||
JMP DISCON
|
||
|
||
|
||
PAGE
|
||
/HERE WHEN RECEIVE AN ACK MESSAGE
|
||
RCVACK, JMS RCVRCK /DO RIGHT THING BY MSG#
|
||
JMP RCVADV
|
||
|
||
|
||
/HERE WHEN RECEIVE A NAK MESSAGE
|
||
RCVNAK, JMS RCVRCK /DO RIGHT THING BY MSG#
|
||
TAD T10AKR
|
||
DCA T10TKR /RESET BUFFER TO SEND NEXT
|
||
JMP RCVADV
|
||
|
||
/HERE TO CHECK MSG# IN ACK OR NAK OR NUMBERED MSG
|
||
/ ADJUSTS QUEUE ETC.
|
||
RCVRCK, 0
|
||
NL3
|
||
TAD RCVTKR
|
||
DCA TEMP2 /POINTER TO MSG#
|
||
RCKFLD
|
||
TAD I TEMP2
|
||
TABFLD
|
||
JMS RCVRC8
|
||
DCA TEMP1 /SAVE ADJ #
|
||
TAD T10HSN
|
||
JMS RCVRC8
|
||
NEGATE
|
||
TAD TEMP1
|
||
SPA CLA
|
||
JMP RCVGAG /IF NOT REASONABLE RESTART
|
||
RCVRC0, RCKFLD
|
||
TAD I TEMP2
|
||
TABFLD
|
||
NEGATE
|
||
TAD T10LAN /COMPARE LAST ACKED & THIS
|
||
SNA CLA
|
||
JMP I RCVRCK /IF SAME DONE
|
||
TAD T10AKR
|
||
NEGATE
|
||
TAD T10TKR
|
||
SZA CLA
|
||
JMP RCVRC1
|
||
T10ADJ T10TKR
|
||
RCVRC1, TAD T10LAN
|
||
IAC
|
||
AND [0377
|
||
DCA T10LAN /ADJUST MSG #
|
||
T10ADJ T10AKR
|
||
TAD T10LAN
|
||
RCKFLD
|
||
DCA I TEMP2
|
||
TABFLD
|
||
TAD (-REPTIM /TIME TILL NEXT REP
|
||
DCA REPTCK
|
||
JMP RCVRC0
|
||
/FOLLOWING RETURNS LAN-N OR LAN-N-MSNMAX-1
|
||
RCVRC8, 0
|
||
NEGATE
|
||
TAD T10LAN /COMPARE TO LAST ACKED
|
||
SMA SZA
|
||
TAD (-MSNMAX-1
|
||
JMP I RCVRC8
|
||
|
||
|
||
/HERE WHEN RECEIVE A RESET MESSAGE
|
||
RRESET,
|
||
|
||
/HERE WHEN RECEIVE A RESET ACKNOWLEDGE MESSAGE
|
||
RRSACK,
|
||
/HERE WHEN RECEIVE A MESSAGE WITH TYPE OUT OF RANGE(E.G. POLL)
|
||
RCVGAG, IOF
|
||
NL0 /CLEAR AC & INTERRUPTS
|
||
TAD (BMTMSG-1
|
||
JMS CTYEXC /COMPLAIN TO OPERATOR
|
||
JMP INIALL /RESTART STATION
|
||
|
||
/HERE WHEN RECEIVE A START MESSAGE
|
||
RCVSRT, IOF /TURN INTERRUPTS OFF
|
||
NLM1 /FLAG TO SEND A STACK
|
||
DCA STACKF /SET FLAG
|
||
DCA RECVOK
|
||
JMP INISUM /REINITIALIZE STATION
|
||
|
||
/HERE WHEN RECEIVE A STACK MESSAGE
|
||
RCVSTK, DCA STACKF /FLAG WE ARE UP NOW
|
||
DCA RECVOK
|
||
JMP RCVADV
|
||
/HERE WHEN RECEIVE A NUMBERED MESSAGE
|
||
RCVMSG, JMS RCVRCK /DO RIGHT THING BY RESPONSE FIELD
|
||
NLM3
|
||
TAD AUTO1
|
||
DCA TEMP1 /POINTER TO MSG N#
|
||
TAD RECVOK
|
||
IAC
|
||
AND [0377
|
||
NEGATE /MAKE -# EXPECTED
|
||
RCKFLD
|
||
TAD I TEMP1
|
||
TABFLD
|
||
SZA CLA
|
||
JMP RCVFLU /IF NOT EXPECTED DONE
|
||
CRCXI2, DCA CRC1 /
|
||
DCA CRC2 /INITILAIZE CRC FOR MESSAGE
|
||
RCKFLD
|
||
TAD I TEMP5
|
||
TABFLD
|
||
DCA TEMP3 /ADR OF CHUNKS(IF ANY)
|
||
TAD RCVTKR /GET ADR OF MESSAGE HEADER
|
||
IOF
|
||
RCKFLD
|
||
JMS GETLEN /GET LENGTH OF MESSAGE
|
||
TABFLD
|
||
ION
|
||
NEGATE
|
||
DCA TEMP4 /AND SAVE DATA COUNT
|
||
TAD TEMP4
|
||
DCA TEMP2 /KEEP 2ND COPY OF COUNT
|
||
JMP RCMSG0
|
||
|
||
/HERE TO GET THE LENGTH FIELD FROM A MESSAGE HEADER
|
||
GETLEN, 0
|
||
DCA IAUTO1
|
||
TAD I IAUTO1
|
||
DCA INTMP1 /SAVE LOWORDER BITS
|
||
TAD I IAUTO1
|
||
AND (0007 /ONLY BELIVE 11BITS OF COUNT
|
||
BSW
|
||
CLL RTL
|
||
TAD INTMP1
|
||
JMP I GETLEN
|
||
|
||
PAGE
|
||
RCMSG0, JMS GETCHR
|
||
JMP NRMNAK /GET NEXT CHAR IF ANY
|
||
IFZERO DP8ETR <
|
||
JMS CRCALC
|
||
>/END OF IFZERO DP8ETR
|
||
IFNZRO DP8ETR <
|
||
JMS ITRCRC /TRACE AND ACCUM CRC
|
||
>/END OF IFNZRO DP8ETR
|
||
ISZ TEMP2
|
||
JMP RCMSG0 /LOOP BACK FOR REST OF DATA
|
||
TAD TEMP3 /GET ADR OF LAST DATA
|
||
DCA TEMP6 /SAVE IT
|
||
IFZERO DP8ETR <
|
||
JMS GETCHR
|
||
JMP NRMNAK
|
||
>/END OF IFZERO DP8ETR
|
||
IFNZRO DP8ETR <
|
||
JMS ITRCR3 /GET CRC CHAR AND TRACE IT
|
||
>/END OF IFNZRO DP8ETR
|
||
NEGATE /GET -CRC2
|
||
TAD CRC2 /GET LOW PART OF CRC
|
||
SZA CLA
|
||
JMP BADCRC
|
||
IFZERO DP8ETR <
|
||
JMS GETCHR
|
||
JMP NRMNAK
|
||
>/END OF IFZERO DP8ETR
|
||
IFNZRO DP8ETR <
|
||
JMS ITRCR3 /GET CRC CHARACTER AND TRACE IT
|
||
>/END OF IFNZRO DP8ETR
|
||
NEGATE /GET -CRC1
|
||
TAD CRC1 /GET HIGH ORDER PART OF CRC
|
||
SZA CLA
|
||
JMP BADCRC
|
||
/PREVENT LEADING 0 ERROR IN CRC16 CALCULATION
|
||
/DNA FIELD SHOULD ALWAYS EQUAL NODE NUMBER IN A SEQUENTIAL NADE
|
||
/EXCEPT FOR NODE ID MESSAGE
|
||
RCKFLD /CHANGE TO CHUNK FIELD
|
||
NL1
|
||
TAD I TEMP5 /NCT ADDRESS
|
||
DCA TEMP3
|
||
TAD I TEMP3 /CHECK FOR NODE ID MESSAGE
|
||
NEGATE
|
||
TAD (106 /NODE ID?
|
||
SNA CLA
|
||
JMP RCMOK /NOT NODE ID MESSAGE
|
||
ISZ TEMP3 /POINT TO DNA FIELD
|
||
TAD I TEMP3
|
||
Z=OURNNM&177
|
||
TAD (-Z
|
||
SZA CLA
|
||
JMP BADCRC
|
||
RCMOK,
|
||
NL4000 /LAST CHAR IN CHUNK FLAG
|
||
TAD I TEMP6
|
||
SPA /SKIP IF WAS ALREADY LAST CHAR IN CHUNK
|
||
DCA I TEMP6 /SET FLAG ON CHAR
|
||
NLM1
|
||
TAD TEMP5
|
||
DCA TEMP3 /STORE ADR OF CHUNK COUNT
|
||
TAD TEMP6 /GET ADDRESS OF LAST CHAR AGAIN
|
||
AND [-CNKSIZ
|
||
DCA TEMP6 /MAKE INTO CHUNK POINTER
|
||
TAD I TEMP6 /GET ADR OF CRC CHUNK IF NOT THIS ONE
|
||
TABFLD
|
||
SNA /SKIP IF THERE IS ONE FOR CRC
|
||
JMP RCMSG1 /OTHERWISE SKIP OVER FOLLOWING
|
||
JMS FRECKS /FREE CHUNK WITH CRC(MAYBE)
|
||
RCKFLD
|
||
DCA I TEMP6 /CLEAR LINK TO CRC CHUNKS
|
||
NLM1 /DECREMENT CHUNK COUNT
|
||
TAD I TEMP3
|
||
DCA I TEMP3
|
||
TABFLD
|
||
RCMSG1,
|
||
TAD RECVOK
|
||
IAC
|
||
AND [0377
|
||
TAD (4000
|
||
DCA RECVOK /AND SAVE IT W FLAG TO ACK
|
||
RCKFLD
|
||
TAD I TEMP5 /GET ADR OF 1ST CHUNK
|
||
TABFLD
|
||
DCA TEMP3 /SAVE ADR OF 1ST CHUNK
|
||
JMS GTCHR /GET NCT
|
||
DCA RNCT /STORE FOR A WHILE
|
||
TAD (10 /SELECT SNA/DNA PRESENT BIT
|
||
AND RNCT /TURN OFF REST
|
||
SNA /SHOULD BE ON
|
||
JMP NODNA /SKIP OVER DNA,SNA GETTING
|
||
JMS GTCHR /GET DNA
|
||
JMS GTCHR /GET SNA
|
||
NODNA,
|
||
DCA RSNA /SAVE IT FOR LATER
|
||
JMS GTCHR /GET NCA
|
||
JMS GTCHR /GET NCN
|
||
NL0
|
||
TAD [7 /MASK OF TYPE BITS FOR NCT
|
||
AND RNCT /TURN OFF ALL BUT LOW ORDER 3
|
||
SNA /SKIP IF UN-NUMBERED CONTROL
|
||
JMP NMBRED /HANDLE NUMBERED CONTROL OR DEVICE CONTROL
|
||
/ ONLY UN-NUMBERED CONTROL MESSAGE VALID IS NODE ID (6)
|
||
TAD (-6 /CODE FOR NODE ID
|
||
SZA CLA /SKIP IF OK
|
||
HLT /COULD DEFAULT THRU THIS PATH IF LEADING
|
||
/0 BIT IN DATA MESSAGE LOST, CRC DOES NOT CATCH THIS ERROR!!!
|
||
JMP NDID /FINISH PROCESSING NODE ID
|
||
/HERE TO ECHO A LOCAL CRLF
|
||
RECI36, TAD (CRLMSG-1 /CRLF STRING
|
||
DCA I TEMPA
|
||
JMS RECI37 /SET DEFERRED ECHO MODE
|
||
JMP TSTART
|
||
/HERE TO ACCUMULATE CRC
|
||
/ ALGORITHM IS:
|
||
/ XOR C,CRC
|
||
/ ANDI C,377
|
||
/ LSH CRC,-10
|
||
/ XOR CRC,TAB(C)
|
||
|
||
/SINCE THIS CODE IS DUPLICATED IN 2 PLACES IT IS DEFINED AS A MACRO
|
||
DEFINE CR0<
|
||
|
||
/XOR C,CRC
|
||
DCA TEMP1
|
||
TAD TEMP1
|
||
AND CRC2
|
||
CMA IAC
|
||
CLL RAL
|
||
TAD TEMP1
|
||
TAD CRC2
|
||
|
||
/ANDI C,377
|
||
/ AND [0377 /8 BITS ONLY
|
||
|
||
/LSH CRC,-10 & XOR CRC,TAB(C)
|
||
TAD (CRCTAB
|
||
DCA TEMP1
|
||
TAD I TEMP1
|
||
AND CRC1
|
||
CMA IAC
|
||
CLL RAL
|
||
TAD I TEMP1
|
||
TAD CRC1
|
||
DCA CRC2
|
||
TAD (400
|
||
TAD TEMP1
|
||
DCA TEMP1
|
||
TAD I TEMP1
|
||
DCA CRC1
|
||
>/END OF CR0 DEFINITION
|
||
CRCALC, 0
|
||
CR0
|
||
JMP I CRCALC
|
||
PAGE
|
||
RCVKRD, HLT /HERE WHEN YOU GET VARIOUS FLAVORS OF GARBAGE
|
||
|
||
/HERE WHEN RECEIVE A DISCONNECT
|
||
RCVDIS, JMS GTCHR /GET ADR OF DEVICE
|
||
TAD (CTRLTB-1
|
||
DCA TEMP1
|
||
TAD I TEMP1
|
||
IFNZRO FTDEBUG <
|
||
SNA
|
||
HLT
|
||
>/END OF IFNZRO FTDEBUG
|
||
DCA DDB
|
||
TAD DDB
|
||
TAD (DEVSTS
|
||
DCA DDBSTS
|
||
IFNZRO FTDEBUG <
|
||
NL2000
|
||
AND I DDBSTS
|
||
SNA CLA
|
||
HLT /NOT CONNECTED
|
||
>/END OF IFNZRO FTDEBUG
|
||
TAD (TTYBIT
|
||
AND I DDBSTS /CHECK TO SEE IF TTY
|
||
SNA CLA
|
||
JMP RCVDS1 /NOT TTY
|
||
TAD (DEVRCN
|
||
TAD DDB
|
||
DCA TEMP2
|
||
JMS GTCHR /GET SLA
|
||
JMS GTCHR /RSN FOR DISCONNECT
|
||
NEGATE
|
||
TAD (10
|
||
SNA CLA
|
||
JMP STHST /REASON FOR DISC IS A SET HOST CMD
|
||
TAD I TEMP2
|
||
SZA /SEE IF TRYING TO CONNECT
|
||
JMP RCVDS3 /WAS SO CONNECT REFUSED
|
||
RCVDS1, TAD I DDBSTS
|
||
AND (4577 /CLEAR CONNECT AND CHARACTERISTICS BITS [1(14)]
|
||
TAD (1000 /BIT TO SEND AN ACCEPT
|
||
DCA I DDBSTS
|
||
DCA I TEMP1 /NO LONGER CONNECTED
|
||
TAD TEMP1
|
||
TAD (RCVDSP-CTRLTB+1
|
||
DCA TEMP1
|
||
TAD (RCVKRD
|
||
DCA I TEMP1
|
||
JMP RCVFLU /DONE WITH MESSAGE
|
||
RCV5, TAD (NEITAB-1
|
||
JMP RCVD6
|
||
RCVDS3, NEGATE
|
||
JMS NETSCN /LOOK FOR ENTRY IN NEIGH TABLE
|
||
HLT /SHOULD BE FOUND
|
||
RCVD6, ISZ TEMPB /GET NEXT ENTRY IN NEITAB
|
||
TAD I TEMPB
|
||
SNA /END OF TABLE
|
||
JMP RCV5 /WRAP AROUND
|
||
AND (1000 /IS IT AN MCR
|
||
SNA CLA
|
||
JMP RCVD6 /NO CONTINUE SEARCH
|
||
TAD I TEMPB
|
||
AND (377
|
||
DCA I TEMP2 /SAVE NODE TO CONNECT TO NEXT TIME
|
||
TAD I DDBSTS
|
||
AND (4577 /CLEAR CONNECT AND CHARACTERISTICS BITS [1(14)]
|
||
TAD (3000 /FLAG TO ISSUE CONNECT
|
||
RCV4, DCA I DDBSTS
|
||
JMP RCVFLU
|
||
/HERE WHEN RECEIVE A CONNECT MESSAGE
|
||
RCVCON, JMS GETEXN /GET DLA
|
||
SNA /CHECK FOR 0
|
||
JMP RCVCN6 /YES SO MAKE ONE
|
||
/DAS 92 DOES ISSUE A CONNECT
|
||
TAD (SLATAB-1
|
||
DCA TEMPA /GET INTO 92 TABLE
|
||
JMS GETEXN
|
||
DCA I TEMPA /SAVE DISP INTO 10'S TABLES
|
||
TAD TEMPA
|
||
TAD (-DEVN-DEVN-1 /GET POINTER TO DDB
|
||
DCA TEMPA
|
||
TAD I TEMPA
|
||
TAD (DEVSTS
|
||
DCA TEMPA
|
||
TAD I TEMPA
|
||
AND (4776
|
||
TAD (2001 /CONNECT AND SEND STATUS
|
||
DCA I TEMPA
|
||
/ZERO RCN OF DEVICE TABLE
|
||
ISZ TEMPA /POINT TO DATA REQ
|
||
DCA I TEMPA /ZERO DATA REQ
|
||
ISZ TEMPA /POINT TO DDCMP STATUS
|
||
DCA I TEMPA /ZERO IT
|
||
TAD (DEVRCN-DEVDDC
|
||
TAD TEMPA
|
||
DCA TEMPA
|
||
DCA I TEMPA
|
||
JMP RCVFLU
|
||
BELTYP, NL0
|
||
TAD (TTOBEL-1 /THIS IS JUST A BELL
|
||
CNTYP2,
|
||
DCA I TEMP8 /SET LDBXPT
|
||
JMP TSTART
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** DP8E OUTPUT PROCESSING ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
/HERE AT INTERRUPT LEVEL TO HANDLE DP8E OUTPUT
|
||
|
||
INTDPO, DPSSTO /SKIP ON TRANSMIT WC OVERFLOW
|
||
JMP INTDP9 /NOT DP8E SO TRY CARD READER
|
||
|
||
TAD I (IDLBUF /IDLE BUFFER IS NEVER WRITTEN
|
||
TAD (-IDLE /SO LETS BE SURE IT STILL IS
|
||
SZA /SKIP IF OK
|
||
|
||
HLT /THIS IS VERY LIKELY A HARDWARE FAILURE
|
||
/ PLEASE CHECK ECO IS INSTALLED !
|
||
/ THE USUAL EXPLANATION FOR THIS FAILURE IS
|
||
/ THE DP8E HAS ADDED TO THE TRANSMIT BUFFER THE
|
||
/ LAST CHAR RECEIVED, USUALLY SYNC=226
|
||
JMP INTDP1
|
||
PAGE
|
||
/HERE TO FIND A VACANT SLOT FOR A CONNECT
|
||
RCVCN6, TAD (-DEVN
|
||
DCA TEMP2
|
||
TAD (RCVDSP+1
|
||
DCA TEMPA /BEGINNING OF DISPATCH TABLE + 1
|
||
RCVCN7, TAD I TEMPA /GET DISPATCH ADDRESS
|
||
TAD (-RCVKRD /IS IT UNUSED?
|
||
SNA CLA /SKIP IF NOT
|
||
JMP RCVCN2 /YES, WE'VE FOUND ONE
|
||
ISZ TEMPA /ADVANCE TO NEXT DISPATCH ENTRY
|
||
ISZ TEMP2 /HAVE WE CHECKED ALL SLOTS ?
|
||
JMP RCVCN7
|
||
JMP TOOMNY /SEND DISCONNECT
|
||
|
||
IFNZRO LPTN <
|
||
/HERE ON CONNECT FOR LPT
|
||
CONLPT, TAD (RCVLPT /GET WHERE TO GO ON MESSAGE
|
||
DCA I TEMPA /STORE IN RCVDSP TABLE
|
||
TAD (LPTBLK /POINT TO DEVICE BLOCK
|
||
JMP CONDEV /CONTINUE (I.E. SET CONNECT AND NEED-TO-ACCEPT BITS)
|
||
>/END OF IFNZRO LPTN
|
||
DVCTLM, /DEVICE CONTROL MESSAGE
|
||
/ AC HAS DLA IN IT
|
||
ZZ=CTRLN
|
||
ZZ=DEVN
|
||
TAD (-ZZ /NEGATIVE OF (NO. OF ENTRIES+1)
|
||
SMA SZA
|
||
JMP RCVKRD /OUT OF RANGE
|
||
TAD (RCVDSP+ZZ /POINT TO DISPATCH TABLE ENTRY
|
||
DCA TEMP1 /SAVE IT
|
||
TAD I TEMP1 /GET DISPATCH ADDRESS
|
||
DCA TEMP2 /SAVE IT
|
||
TAD TEMP1 /DISPATCH ADDRESS
|
||
TAD (-ZZ-1 /POINT TO DDB ADDRESS
|
||
DCA TEMP1 /SAVE ADDR OF DDB ADDRESS
|
||
TAD I TEMP1 /GET DDB ADDRESS
|
||
DCA DDB /STORE
|
||
TAD RNCT /GET NCT
|
||
AND [40 /SEE IF INTERRUPT MESSAGE
|
||
SNA CLA /SKIP IF YES
|
||
JMS DATDEC /DECREMENT DATA REQUESTS
|
||
JMS GETEXN /GET COUNT
|
||
NEGATE
|
||
DCA TEMP4 /SAVE MINUS COUNT
|
||
JMS GETEXN /GET DEVICE CTL MESSAGE TYPE
|
||
JMP I TEMP2
|
||
|
||
/DEVICE INDEPENDENT PORTION OF CONNECT
|
||
/ CALL WITH DEVICE BLOCK IN AC
|
||
CONDEV, DCA DDB /SAVE DEVICE ADR
|
||
NLOAD DEVSTS
|
||
TAD DDB
|
||
DCA DDBSTS
|
||
NLOAD DEVRNN /GET DISP OF RESTRICTED NODE NUMBER
|
||
TAD DDB /IN THIS DDB
|
||
DCA TEMP2 /STORE ADDRESS
|
||
TAD I TEMP2 /GET RNN
|
||
SNA /SKIP IF NOT ZERO
|
||
JMP CONANY /ZERO MEANS ANYONE CAN CONNECT
|
||
TAD RSNA /GET THIS NODE
|
||
SZA CLA /SKIP IF MATCHES
|
||
JMP INUSE /ELSE PRETEND ALREADY CONNECTED
|
||
CONANY,
|
||
|
||
TAD (CONBIT+1000 /CONNECTED AND ACCEPT BITS
|
||
AND I DDBSTS
|
||
SZA CLA
|
||
JMP INUSE /DEVICE NOT AVAILABLE
|
||
|
||
Q=DEVDRQ-DEVSTS
|
||
NLOAD Q
|
||
TAD DDBSTS
|
||
DCA TEMP2
|
||
DCA I TEMP2 /CLEAR DATA REQUESTS
|
||
ISZ TEMP2 /ADVANCE TO DEVDDC
|
||
DCA I TEMP2 /CLEAR DDCMP STATUS
|
||
TAD (4776 /MASK TO CLEAR CONNECT & ACCEPT & EOF BITS
|
||
AND I DDBSTS
|
||
TAD (3001 /CONNECT BIT & ACCEPT BIT & SEND STATUS
|
||
DCA I DDBSTS
|
||
|
||
TAD I DDB /GET OLD DEVICE ADR
|
||
AND (7700 /STRIP IT
|
||
TAD TEMPA /GET DISPATCH ADDRESS
|
||
TAD (-RCVDSP /MAKES CONNECT CODE
|
||
DCA I DDB /SAVE ADR
|
||
|
||
TAD TEMPA /GET DISPATCH ADDRESS
|
||
TAD (-DEVN-1
|
||
DCA TEMP1
|
||
TAD DDB
|
||
DCA I TEMP1
|
||
JMP RCVFLU
|
||
IFNZRO LPTN <
|
||
RCVLPT, /IGNORE MESSAGE TYPE
|
||
RCKFLD
|
||
NL6 /POINT TO COUNT
|
||
TAD I TEMP5
|
||
DCA TEMP3
|
||
TAD I TEMP5 /GET ADR OF FIRST CHUNK IN MESSAGE
|
||
DCA AUTO1 /POINTER TO SHUFFLE TO
|
||
RCVLP1, ISZ TEMP3
|
||
TAD I TEMP3
|
||
DCA I AUTO1 /PUT NEXT CHAR BACK INTO CHUNK
|
||
TAD I TEMP3 /GET CHAR AGAIN
|
||
SMA CLA
|
||
JMP RCVLP1
|
||
TABFLD
|
||
|
||
IOF
|
||
TAD I (LPTBLK+DEVOAD /GET CURRENT OUTPUT CHAR ADR
|
||
SZA CLA /IS THERE ONE ?
|
||
JMP RCVLP3 /YES
|
||
RCKFLD
|
||
TAD I TEMP5 /ADR OF NEW FIRST CHUNK
|
||
TABFLD
|
||
DCA I (LPTBLK+DEVOAD
|
||
JMP RCVLP5
|
||
RCVLP3, TAD I (LPTBLK+DEVOLC /GET ADR OF LAST CHUNK
|
||
DCA TEMP1 /SAVE IT
|
||
RCKFLD
|
||
TAD I TEMP5 /GET ADR OF 1ST CHAR WE ARE ADDING
|
||
DCA I TEMP1 /LINK INTO OUTPUT CHUNKS
|
||
RCVLP5, TAD TEMP6 /GET ADR OF LAST CHAR
|
||
TABFLD
|
||
DCA I (LPTBLK+DEVOLC /SET NEW LAST CHUNK ADR
|
||
JMP RCVLP6 /GO UPDATE CHUNK COUNT
|
||
>/END OF IFNZRO LPT
|
||
PAGE
|
||
IFNZRO CDRN <
|
||
/HERE WHEN RECEIVE A MESSAGE FOR THE CDR
|
||
/ REQUEST STATUS 7
|
||
/ REQUEST MODE 11
|
||
/ SET MODE 12
|
||
/ DATA REQUEST BY RECORD 13
|
||
/ NEGATIVE DATA REQUEST 15
|
||
RCVCDR, TAD (-3 /SEE IF STATUS
|
||
SNA
|
||
JMP RCDSTA /HANDLE STATUS
|
||
TAD (-1 /SEE IF CONTINUE
|
||
SZA /SKIP IF YES
|
||
JMP RCVFLU /IGNORE OTHER MSGS
|
||
RCDCON, /HERE TO PROCESS CONTINUE
|
||
TAD (CDRBLK
|
||
DCA INTDDB
|
||
NL3777
|
||
AND I (CDRBLK+DEVDDC
|
||
JMS ISTDDC
|
||
JMP RCVFLU
|
||
RCVDRQ, /HERE WHEN RECEIVE DATA REQUEST
|
||
JMS GETEXN /GET DLA
|
||
TAD (RCVDSP /ADD START OF DISPATCH TABLE
|
||
DCA TEMPA /SAVE THIS ENTRY ADDRESS
|
||
TAD I TEMPA /GET THIS ENTRY
|
||
TAD (-RCVCDR /IS IT CDR?
|
||
SZA CLA
|
||
JMP RCVFLU /NO, IGNORE
|
||
RCDDRQ, JMS GETEXN /GET DATA REQUEST
|
||
TAD I (CDRBLK+DEVDRQ
|
||
DCA I (CDRBLK+DEVDRQ
|
||
JMP RCVFLU /DISPOSE OF MESSAGE
|
||
>/END OF IFNZRO CDR
|
||
|
||
IFNZRO PLTN <
|
||
RCVPLT, HLT
|
||
>/END OF IFNZRO PLT
|
||
|
||
IFNZRO PTPN <
|
||
RCVPTP, HLT
|
||
>/END OF IFNZRO PTP
|
||
|
||
RCVTT0, JMS GETCHR
|
||
JMP RCVFLU
|
||
NEGATE
|
||
IAC
|
||
DCA TEMP4
|
||
JMS GTCHR
|
||
JMP RCVTT6
|
||
RCVTTY,
|
||
DCA TEMP1
|
||
NLOAD DEVSTS
|
||
TAD DDB
|
||
DCA DDBSTS
|
||
TAD DDB
|
||
IAC
|
||
DCA TEMP7 /STORE DEVOAD ADDRESS
|
||
TAD TEMP4 /GET COUNT
|
||
IAC /SUBTRACT ONE FOR TYPE
|
||
DCA TEMP4
|
||
NLOAD DEVDDC-DEVSTS
|
||
TAD DDBSTS
|
||
DCA TEMP6 /STORE DEVDDC ADDRESS
|
||
NLOAD DEVOLC /OFFSET FOR DEVOLC
|
||
TAD DDB /MAKE ABSOLUTE ADR
|
||
DCA TEMP8 /SAVE POINTER TO DEVOLC
|
||
NLOAD DEVCHK
|
||
TAD DDB
|
||
DCA TEMPA /STORE ADR OF CHUNK COUNT
|
||
TAD TEMP1 /GET TYPE
|
||
RCVTT6, TAD (-1 /TEST TYPE
|
||
SZA /SKIP IF DATA
|
||
JMP RCVTTC /NO, CONTROL OR STATUS
|
||
RCVTT1, JMS GTCHR /GET THE NEXT CHARACTER FROM MESSAGE
|
||
/INSERT ESC ESC FOR ESC CHAR, ESC 1 FOR SET IMAGE, ESC 2 FOR CLEAR IMAG
|
||
DCA TEMP1 /SAVE CHAR
|
||
TAD (-ESC
|
||
TAD TEMP1 /SEE IF ESC CHAR RECEIVED
|
||
SZA CLA /ESC RECD
|
||
JMP .+3 /NOT ESC SO ONLY STORE 1 CHAR
|
||
TAD TEMP1
|
||
JMS STCHR /STORE FIRST ESCAPE CHARACTER (TURNING OF INTERRUPTS) [1(16)]
|
||
TAD TEMP1
|
||
JMS STCHR /STORE SECOND ESCAPE
|
||
ION /ALLOW INTERRUPTS AGAIN [1(16)]
|
||
ISZ TEMP4 /COUNT CHAR OUT OF THE MESSAGE
|
||
JMP RCVTT1 /KEEP GETTING CHARACTERS
|
||
JMS TTYGO /START TTY IF IT NEEDS TO BE
|
||
JMP RCVTT0 /LOOP BACK FOR MORE KRUD
|
||
STCHR, 0 /STORE CHAR IN DATA STREAM
|
||
DCA TEMP1 /SAVE IT
|
||
IOF /INTERRUPTS OFF WHILE WE CHANGE THINGS
|
||
TAD I TEMP7 /GET DEVOAD
|
||
SZA CLA /SKIP IF NO OUTPUT CHUNKS YET
|
||
JMP RCVTT2 /ALREADY HAVE SOME CHUNKS
|
||
JMS ERSGET /GET A CHUNK
|
||
DCA I TEMP7 /SET DEVOAD
|
||
TAD I TEMP7
|
||
DCA I TEMP8 /SET DEVOLC
|
||
ISZ I TEMPA /INCREMENT CHUNK COUNT
|
||
NOP /MAY SKIP
|
||
RCVTT2, NL1
|
||
TAD I TEMP8 /GET DEVOLC
|
||
AND [CNKSIZ-1
|
||
SZA CLA /WAS THAT LAST SLOT IN CHUNK ?
|
||
JMP RCVTT3 /NO
|
||
TAD I TEMP8 /GET DEVOLC
|
||
AND [-CNKSIZ /MAKE INTO LINK ADR
|
||
DCA TEMP2 /SAVE LINK ADR
|
||
JMS ERSGET /GET ANOTHER CHUNK
|
||
RCKFLD
|
||
DCA I TEMP2 /SET LINK IN PREVIOUS CHUNK
|
||
TAD I TEMP2
|
||
TABFLD
|
||
DCA I TEMP8 /SET DEVOLC
|
||
ISZ I TEMPA /INCREMENT COUNT OF CHUNKS
|
||
NOP /MAY SKIP
|
||
RCVTT3, TAD I TEMP8 /GET DEVOLC
|
||
DCA TEMP2
|
||
NLOAD 3777 /MASK FOR LAST CHARACTER BIT
|
||
RCKFLD
|
||
AND I TEMP2 /STRIP LAST-CHAR BIT
|
||
DCA I TEMP2 /AND RESTORE TO CHUNK
|
||
ISZ TEMP2 /ADVANCE TO NEXT SLOT
|
||
NLOAD 4000 /MAKE LAST-CHAR BIT
|
||
TAD TEMP1 /ADD CHARACTER
|
||
DCA I TEMP2 /AND PUT INTO CHUNK
|
||
TABFLD
|
||
ISZ I TEMP8 /ADVANCE DEVOLC
|
||
JMP I STCHR /RETURN TO CALLER LEAVING INTERRUPTS OFF [1(16)]
|
||
PAGE
|
||
/TYPE 2 = ECHO PIPELINE MARKER
|
||
RCVEPL, TAD (LDBEPL /OFFSET FOR PIPELINE MARKER
|
||
TAD DDB
|
||
DCA TEMP1 /SAVE POINTER TO MARKER
|
||
JMS GTCHR /GET THE MARKER FROM THE MESSAGE
|
||
NEGATE /SO WE CAN COMPARE
|
||
TAD I TEMP1 /ADD IN WHAT WE SAID LAST
|
||
AND [0177 /SEVEN BITS ONLY
|
||
SZA CLA
|
||
JMP RCVTT0 /NOT THE SAME SO NO SPECIAL ACTION
|
||
TAD I AUTO1 /GET DEVBF1
|
||
SZA CLA /ARE WE HOLDING ANY INPUT CHARS ?
|
||
JMP RCVTT0 /YES SO CAN'T ENTER LOCAL ECHO MODE
|
||
NLOAD 7776 /MASK FOR DEFERRED ECHO BIT
|
||
IOF
|
||
AND I TEMP6 /GET DDCMP STATUS WORD
|
||
DCA I TEMP6 /RESTORE STATUS WORD
|
||
JMP RCTRQS /AND SEND STATUS TO 10
|
||
|
||
|
||
/TYPE 5 = SET BITS
|
||
RCVSBT, IOF
|
||
NL1
|
||
JMS RCTBIT /SET UP STUFF
|
||
TAD TEMP1 /ADD BITS
|
||
RCVSB1, DCA I TEMP6
|
||
JMS EXAD /SET DTR,RING,CARRIER BITS IN DEVDSL
|
||
JMP RCTRQ /SEND COPY OF UPDATED STATUS TO 10
|
||
|
||
/TYPE 6 = CLEAR BITS
|
||
RCVCBT, IOF
|
||
NL2
|
||
JMS RCTBIT /SET UP STUFF
|
||
DCA I TEMP6 /RESTORE STATUS WORD
|
||
RCTRQ, JMS TTYGO /IN CASE CLEARED OUTPUT STOPPED BY XOF BIT
|
||
/ JMP RCTRQS /AND SENDCOPY OF UPDATED STATUS TO 10
|
||
|
||
/TYPE 7 = REQUEST STATUS
|
||
RCTRQS, IOF /DISABLE INTERRUPTS FOR A WHILE
|
||
NLOAD 7776 /MASK FOR NEED TO SEND STATUS BIT
|
||
AND I DDBSTS /CLEAR BIT FROM STATUS WORD
|
||
IAC /ADD BIT TO WORD
|
||
DCA I DDBSTS
|
||
JMP RCVTT0 /THEN ON TO NEXT SUBMESSAGE
|
||
|
||
/TYPE 10 = CHARACTERISTICS
|
||
RCVCHR, TAD (LDBFIL-1 /RELATIVE ADR OF FILLER BLOCK
|
||
TAD DDB
|
||
DCA AUTO1
|
||
TAD (-6 /NUMBER OF FILLERS
|
||
DCA TEMP4
|
||
RCVCH2, JMS GETEXN /GET NEXT FILLER
|
||
SNA /SKIP IF NOT ZERO
|
||
JMP RCVCH3 /GO RIGHT TO NEGATE
|
||
TAD (17 /ROUND AND ADD 8
|
||
CLL RTR /CLOCK TICKS ONCE EVERY 10MS
|
||
CLL RAR /THEREFORE SHOULD DIVIDE BY 10.
|
||
/HOWEVER HAVE CHOSEN TO DIV BY 8 DUE
|
||
/TO MESSY DIVIDE ON PDP8
|
||
AND [377 /EIGHT BITS ONLY
|
||
RCVCH3,
|
||
NEGATE
|
||
DCA I AUTO1 /SET NEXT FILLER
|
||
ISZ TEMP4
|
||
JMP RCVCH2 /ON TO THE NEXT FILLER
|
||
TAD (LDBWID
|
||
TAD DDB
|
||
DCA TEMP4
|
||
JMS GETEXN /GET RECEIV SPEED
|
||
JMS GETEXN /GET TRANSMIT SPEED
|
||
JMS GETEXN /GET TTY WIDTH
|
||
DCA I TEMP4 /SAVE TTY WIDTH
|
||
JMS GETEXN /GET COLUMN WHERE BLANKS TURN TO CRLF
|
||
JMS GETEXN /GET 2741 TYPING ELEMENT
|
||
JMS GETEXN /GET 2741 BITS
|
||
JMP RCVTT0 /ON TO NEXT SUBMESSAGE
|
||
RCVNRM, 0 /HERE BECAUSE RAN OUT OF ROOM FOR A MESSAGE
|
||
NRMNAK, ISZ RCVNRM /COUNT TIMES WE NAKED BECAUSE OF NO ROOM
|
||
NOP
|
||
TAD (10
|
||
DCA NAKFLG /REASON FOR NAK
|
||
JMP RCVFLU
|
||
|
||
RCVBCR, 0 /COUNT OF BLOCKS RECEIVED WITH A BAD CRC
|
||
/HERE TO NAK A MSG(NUMBERED OR UNNUMBERED BECAUSE OF BAD CRC)
|
||
BADCRC, NL1
|
||
DCA NAKFLG /SEND A NAK TO 10
|
||
ISZ RCVBCR
|
||
NOP /COUNT BAD CRC'S RECEIVED
|
||
RCKFLD
|
||
TAD I RCVTKR
|
||
TAD (-SOH /CHECK FOR NUMBERED MESSAGE TYPE
|
||
SZA CLA
|
||
JMP .+3
|
||
RCVFLU, RCKFLD
|
||
TAD I TEMP5
|
||
TABFLD
|
||
JMS FRECKS /IF NUMBERED FREE CHUNKS
|
||
JMP RCVADV
|
||
|
||
/HERE WHEN SUBMESSAGE IS CONTROL
|
||
RCVTT5, TAD DDB /DEVICE BLOCK ADR
|
||
TAD (DEVBF1-1 /MAKE AUTO-INCREMENT POINTER TO BUFFERS
|
||
DCA AUTO1
|
||
JMS GTCHR /GET STATUS TYPE
|
||
TAD (-5 /HIGHEST LEGAL MESSAGE
|
||
SMA /SKIP IF MESSAGE TYPE IN RANGE
|
||
HLT
|
||
TAD (JMP I TTYDSP+5
|
||
DCA .+1
|
||
7402
|
||
TTYDSP, RCVEPL
|
||
RCVGOB
|
||
RCVCHR
|
||
RCVKRD /AUTO DIAL NOT SUPPORTED
|
||
XOFT /SEND XOF ASAP
|
||
STHST, JMS GETEXN
|
||
DCA I TEMP2 /SAVE NODE TO CONNECT TO
|
||
TAD I DDBSTS
|
||
AND (4577 /CLEAR CONNECT BITS AND "NEED
|
||
/CHARACTERISTICS" BIT [1(14)]
|
||
TAD (1000 /ISSUE DIS CONFIRM
|
||
JMP RCV4
|
||
|
||
NDID, JMS GETEXN /GET NODE NUMBER
|
||
DCA RNOD /STORE IT
|
||
JMP RCVFLU /FLUSH IT AND CONTINUE BIG LOOP
|
||
PAGE
|
||
NMBRED, JMS GETEXN /GET DLA
|
||
SZA /TEST IF NUMBERED CONTROL
|
||
JMP DVCTLM /NO, DEVICE CONTROL
|
||
/ DLA OF ZERO MEANS NCS NUMBERED CONTROL MESSAGE
|
||
/ LEGAL ONES FOR 72 ARE:
|
||
/ CONNECT (1)
|
||
/ DISCONNECT (2)
|
||
/ NEIGHBORS (3) [ONLY FROM 72'S NEIGHBOR]
|
||
/ DATA REQUEST (6)
|
||
/ REQUEST CONFIG (4)
|
||
JMS GETEXN /GET COUNT
|
||
NEGATE
|
||
DCA TEMP4 /SAVE IN TEMP4
|
||
JMS GTCHR /GET TYPE
|
||
AND [7 /CLEAR ALL BUT LOW ORDER
|
||
TAD (JMP I NBRDSP /ADD BEGINNING OF TABLE+INSTRUCTION
|
||
DCA NBRJMP /STORE DISPATCH ADDRESS
|
||
NBRJMP, 0 /DISPATCH
|
||
|
||
NBRDSP, RCVKRD /0 IS ILLEGAL
|
||
RCVCON /1 IS CONNECT
|
||
RCVDIS /2 IS DISCONNECT
|
||
RCVNEI /3 IS NEIGHBORS
|
||
RCVRQC /4 IS REQ CONFIG
|
||
RCVCFG /5 CONFIGURATION MSG
|
||
IFNZRO CDRN <
|
||
RCVDRQ /6 IS DATA REQUEST
|
||
>/END OF IFNZRO CDRN
|
||
IFZERO CDRN <
|
||
RCVFLU /6 (DATA REQUEST) INVALID UNLESS CDR
|
||
>/END OF IFZERO CDRN
|
||
RCVBOT /7 STA CTL
|
||
/FIELD 0 CALL FOR FRECKS CALL FROM FIELD 1
|
||
/[1(23)] MOVED TO AFTER RCVFND
|
||
/[1(23)]FRC, JMS FRECKS
|
||
/[1(23)] CIF 10
|
||
/[1(23)] JMP FREC1 /RETURN TO FIELD 1
|
||
/FIELD 0 LINK TO FIELD 1 CALL FOR MCRSCN
|
||
MCRS3, 0
|
||
JMS NETSCN
|
||
SKP
|
||
ISZ MCRS3
|
||
CIF 10
|
||
JMP I MCRS3
|
||
RCVRQC, TAD RSNA /GET SNA
|
||
NEGATE
|
||
JMS NETSCN /TRY TO FIND NODE INNEIGHBOR7S TABLE
|
||
JMP NEFD /NOT FOUND ADD TO TABLE
|
||
TAD I TEMPB /GET NODE NO
|
||
AND (7377 /TURN OFF RQCFG AND CONFIG FLAGS
|
||
TAD (400 /SET TO ISUUEBOTH CONF AND REQ CONF
|
||
DCA I TEMPB /STORE IN TABLE
|
||
JMP RCVFLU
|
||
NEFD, TAD RSNA
|
||
TAD (4400 /ADD TO TABLE AND SER RQCONF AND CONF BITS ON
|
||
JMP NETAD
|
||
NEIFLB, 0 /SUBROUTINE TO FLUSH BUFFERS
|
||
/TEMP1 = WHERE TO START CHAIN
|
||
/TEMP2 = 0 OR WHERE TO INCREMENT CHUNK COUNT
|
||
IOF
|
||
TAD I TEMP1 /GET START OF CHAIN
|
||
SNA /SEE IF ANY
|
||
JMP NEIFLR /NONE, SO RETURN
|
||
NEIFL1, DCA TEMP3 /STORE ADDRESS
|
||
DCA I TEMP1 /CLEAR POINTER
|
||
DCA I (FREDCK /CLEAR COUNT
|
||
TAD TEMP3 /GET ADDRESS
|
||
AND [-CNKSIZ /MAKE SURE AT BEGINNING OF CHUNK
|
||
JMS FRECKS /FREE CHUNKS
|
||
TAD TEMP2 /COUNTER SPECIFIED?
|
||
SNA CLA /COUNTER SPECIFIED?
|
||
JMP NEIFLR /NO, RETURN
|
||
IOF
|
||
TAD I (FREDCK /COUNT OF CHUNKS FREED
|
||
NEGATE
|
||
TAD I TEMP2 /PREVIOUS COUNT
|
||
DCA I TEMP2 /STORE NEW ONE
|
||
NEIFLR, ION /RESTORE INTERRUPTS
|
||
JMP I NEIFLB /RETURN
|
||
DOWN, /HERE WHEN WE DETERMINE NODE HAS GONE DOWN
|
||
NL0 /CLEAR AC
|
||
TAD TEMPB /GET SNATAB ENTRY
|
||
TAD (CTRLTB-SNATAB /GET CORRESPONDING CTRLTB ENTRY
|
||
DCA DDB /STORE ADDRESS OF DDB
|
||
TAD I DDB /GET DDB
|
||
SNA /MAKE SURE THERE IS ONE
|
||
JMP NEIG12 /NO, MUST HAVE BEEN A DEVICE DISCONNECT
|
||
DOWN1, /CONTINUATION OF DOWN ROUTINE
|
||
DCA DDB /SAVE DDB ADDRESS
|
||
NLOAD DEVSTS
|
||
TAD DDB /MAKE ABSOLUTE
|
||
DCA DDBSTS
|
||
IOF
|
||
TAD I DDBSTS /GET STATUS
|
||
AND (0772 /TURN OFF ACTIVE,CONNECTED,NEED CONNECT CONFIRM,TABBING, AND SEND STATUS
|
||
DCA I DDBSTS /PUT IT BACK
|
||
TAD I DDBSTS /CHECK TO SEE IF TTY
|
||
AND [TTYBIT
|
||
SZA CLA
|
||
JMP DWN1A
|
||
DWN1B, ION /RESTORE INTERRUPTS
|
||
NLOAD DEVCHK /DEVCHK DISPLACEMENT
|
||
TAD DDB /MAKE ABSOLUTE
|
||
DCA TEMP2 /SAVE
|
||
NLOAD DEVOAD /POINTER TO OUTPUT
|
||
TAD DDB
|
||
DCA TEMP1 /SAVE ITS ADDRESS
|
||
JMS NEIFLB /FLUSH ANY OUTPUT
|
||
NLOAD DEVBF1 /POINT TO INPUT STRING
|
||
TAD DDB /MAKE ABSOLUTE
|
||
DCA TEMP1 /STORE
|
||
DCA TEMP2 /DO NOT COUNT CHUNKS
|
||
JMS NEIFLB /FLUSH INPUT
|
||
NLOAD DEVDRQ /POINT TO DATA REQUESTS
|
||
TAD DDB /MAKE ABSOLUTE
|
||
DCA TEMP1 /STORE ADDRESS
|
||
DCA I TEMP1 /CLEAR DATA REQUESTS
|
||
JMS CLRCNT /[1(23)] 60 CLEAR CONNECT COUNT
|
||
/[1(23)] SOMEWHERE ELSE BECAUSE
|
||
/[1(23)] THERE IS NO ROOM HERE
|
||
TAD TEMPB /GET SNATAB ENTRY
|
||
JMP DOWN2 /GO CLEAR OUT RCVDSP ENTRY
|
||
DWN1A, TAD (LDBXPT
|
||
TAD DDB
|
||
DCA TEMP2
|
||
TAD (CONBKE /TYPE TTY CONNECTION BROKEN
|
||
DCA I TEMP2
|
||
NL4000
|
||
TAD I DDBSTS
|
||
DCA I DDBSTS /SET TO ACTIVE
|
||
JMP DWN1B
|
||
PAGE
|
||
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** DP8E MODEM HANDLING ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
INTMOD, DPSSRG /SKIP IF RING FLAG SET
|
||
JMP INTMD5
|
||
ISZ RNGCNT
|
||
JMP INTDIS
|
||
RNGCNT, 0
|
||
INTMD5, DPSSBE /SKIP ON BUS ERROR
|
||
JMP INTMD7
|
||
ISZ BERCNT /COUNT BUS ERROR
|
||
NOP
|
||
TAD (DBEMSG-1 /IF WE GET 4096 BUS ERRORS THIS WILL
|
||
/ BE SKIPPED (WHAT ME WORRY ?)
|
||
|
||
JMP INTMD8 /TYPE MESSAGE THEN JMP INTDIS
|
||
BERCNT, 0 /COUNT OF BUS ERROR COUNTS
|
||
|
||
INTMD7, DPSSCA /SKIP IF CARRIER FLAG FLIPPED
|
||
JMP INTMO9 /NOT MODEM SO ON DOWN SKIP CHAIN
|
||
DPSRS2
|
||
SMA CLA /SKIP ON CARRIER
|
||
TAD (LCRMSG-CARMSG /WE HAVE LOST CARRIER
|
||
TAD (CARMSG-1
|
||
INTMD8, DCA ERRFLG /LEAVE MSG FOR OPERATOR
|
||
JMP INTDIS
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** DP8E INPUT PROCESSING ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
/HERE TO SEE IF RECEIVER HAS INTERRUPTED
|
||
INTDPX, DPSSCD /SKIP IF SPECIAL CHAR DETECTED
|
||
SKP /NO
|
||
JMP INRC00 /WAS A SPECIAL CHARACTER
|
||
DPSSRO /SKIP ON RECEIVE WC OVERFLOW
|
||
JMP INTDPO /NOT RECEIVER SO TRY TRANSMITTER
|
||
JMP I INRCPV /WC OVERFLOW ON RECEIVER
|
||
|
||
/WC OVERFLOW WHILE RECEIVER IS IDLE
|
||
INRC10, DPSSCD /WAS IT A SPECIAL CHAR ?
|
||
JMP INRC11 /NO
|
||
|
||
/HERE FOR SPECIAL CHAR INTERRUPT
|
||
INRC00, DPSRCD /GET INDEX OF CHAR WHICH INTERRUPTED
|
||
TAD [F10TCH /ADD ADR OF TABLE OF SPECIAL CHARS
|
||
DCA INTMP1 /TO ADDRESS THIS SPECIAL CHAR
|
||
TAD INRCPV
|
||
TAD [-INRC10
|
||
SZA CLA /ARE WE IN STATE A (IDLE)?
|
||
JMP INTDIS /NO SO IGNORE INTERRUPT
|
||
DPSSRO
|
||
NOP
|
||
CDFINS
|
||
TAD I INTMP1 /GET SPECIAL CHAR FROM TABLE
|
||
NEGATE
|
||
RCKFLD
|
||
TAD I RCVPTR /GET SPECIAL CHAR AS RECEIVED
|
||
TABFLD
|
||
SZA CLA /ARE THEY THE SAME ?
|
||
JMP INRC01 /THIS IS EITHER A HDW PROBLEM
|
||
/ OR WE ARE TAKING TOO LONG TO SERVICE INTERRUPTS
|
||
TAD INTMP1 /GET F10TCH+INDEX
|
||
ZZ=JMP I INRC02
|
||
ZZ=ZZ-F10TCH
|
||
TAD (ZZ
|
||
DCA .+1
|
||
7402 /MODIFIED BY PROGRAM
|
||
INRC02, INTP00
|
||
INTP10
|
||
INTP20
|
||
INTP30
|
||
|
||
INERRC, 0 /COUNT OF SP. CHAR ERRORS
|
||
INRC01, ISZ INERRC /COUNT ERROR
|
||
JMP INTDIS /DISMISS INTERRUPT
|
||
|
||
/WC OVERFLOW ON UNNUMBERED MSG
|
||
INRC20, DPSSCD /CLEAR CHAR DETECTED FLAG
|
||
JMP INTP40
|
||
JMP INTP40
|
||
|
||
/HERE WITH WC OVERFLOW WHILE IDLE
|
||
INRC11, CDFINS
|
||
TAD I [F10CA
|
||
CDFCNK
|
||
DCA INTMP1
|
||
RCKFLD
|
||
TAD I INTMP1 /GET LAST CHAR
|
||
TABFLD
|
||
TAD [-SYN
|
||
SZA CLA /WAS RANDOM CHAR A SYNC ?
|
||
DPSCSD / NO - SO CLEAR SYNC DETECT
|
||
JMS I [INRCID /RESET WC AND CA
|
||
DPSGRR /ENABLE INPUT
|
||
JMP INTDIS
|
||
|
||
/WC OVERFLOW ON NUMBERED MSG DATA
|
||
INRC70, CDFINS
|
||
TAD I [F10CA /GET ADR OF LAST CHAR
|
||
/ CDFCNK
|
||
DCA INTMP1
|
||
NL4000
|
||
RCKFLD
|
||
TAD I INTMP1
|
||
DCA I INTMP1
|
||
TAD INTMP1 /ADR OF LAST DATA IN CHUNK
|
||
AND [-CNKSIZ /MAKES ADR OF LINK
|
||
DCA INTMP2
|
||
TAD I INTMP2
|
||
TABFLD
|
||
SZA CLA
|
||
HLT
|
||
TAD F10TWC
|
||
SNA CLA /MIGHT THERE BE MORE IN MESSAGE ?
|
||
JMP INTP60 /NO
|
||
|
||
INRC80, IFNZRO FTDEBUG <
|
||
RCKFLD
|
||
TAD I INTMP2 /GET LINK WORD IN LAST CHUNK
|
||
TABFLD
|
||
SZA
|
||
HLT
|
||
>/END OF IFNZRO FTDEBUG
|
||
JMS IGTCNK /TRY TO GET ANOTHER CHUNK
|
||
JMP INTP60 /NO SO PRETEND WC EXHAUSTED
|
||
RCKFLD
|
||
DCA I INTMP2 /SET LINK IN PREVIOUS CHUNK
|
||
TAD I INTMP2
|
||
ISZ I CNTPNT /INCREMENT NUMBER OF CHUNKS
|
||
CDFINS
|
||
DCA I [F10CA
|
||
TAD F10TWC
|
||
TAD [1-CNKSIZ
|
||
SPA
|
||
JMP INRC83
|
||
DCA F10TWC
|
||
TAD [1-CNKSIZ
|
||
DCA I [F10WC
|
||
JMP INRC84
|
||
|
||
INRC83, NL0
|
||
TAD F10TWC
|
||
NEGATE
|
||
DCA I [F10WC
|
||
DCA F10TWC
|
||
INRC84, CDFCNK
|
||
DPSGRR
|
||
JMP INTDIS
|
||
|
||
PAGE
|
||
|
||
/HERE AT INTERRUPT LEVEL TO HANDLE DP8E OUTPUT
|
||
/HERE WHEN CURRENT TRANSMIT BUFFER IS EMPTY
|
||
INTDP1, TAD T10FLG
|
||
SNA
|
||
JMP INTN97 /IDLING
|
||
SMA CLA
|
||
JMP INTN10 /WE ARE SYNCHING LINE
|
||
ISZ T10FLG /DID WE JUST COMPLETE A MESSAGE ?
|
||
JMP INTN20 /NO WE ARE JUST READY TO BEGIN
|
||
TAD GFLG /SEE IF GOTO ACCEPT JUST PROCESSED
|
||
SNA CLA /IF NOZRO GOTO
|
||
JMP INTN11
|
||
TAD GTTAB+3 /CHANGE DATA FIELD INST
|
||
IAC /MAKE IT INTO CHANGE INSTR FIELD
|
||
DCA .+1
|
||
0
|
||
TAD GTTAB+2 /GET ADDRESS BITS
|
||
DCA .+2
|
||
JMP I .+1
|
||
0
|
||
INTN11, ISZ T10FLG /STATE IS NOW SYNCHING
|
||
NLM1 /WE JUST FINISHED A MESSAGE(DAT ACK ETC)
|
||
DCA WRKREQ /WAKE NONINTERRUPT LEVEL CODE
|
||
INTN10, TAD [SYNBUF-1 /BUFFER OF SYNCHS
|
||
JMP INTN98 /SET UP CA, WC AND CLOCK FOR 1 CHAR
|
||
|
||
/HERE TO BEGIN A MESSAGE
|
||
INTN20, TAD T10NCA /ADR OF NEXT BUFFER TO SEND
|
||
CDFINS
|
||
DCA I [T10CA
|
||
TAD T10NWC /LENGTH OF NEW BUFFER
|
||
DCA I [T10WC
|
||
CDFCNK
|
||
TAD T10NWC
|
||
CLL CML RAR
|
||
INTN21, CLL CML RAR /FOR SPEED .LT. 2400 WILL BE NOP ########
|
||
TAD [-3
|
||
JMP INTN99
|
||
|
||
/HERE WHEN LINE IS IDLING
|
||
INTN97, TAD (IDLBUF-1
|
||
INTN98, CDFINS
|
||
DCA I [T10CA
|
||
TAD [-NUMSYN
|
||
DCA I [T10WC
|
||
CDFCNK
|
||
SYNCLK=NUMSYN^3 /3 PER CHARACTER
|
||
TAD [-SYNCLK /RESET CLOCK ON XMTR
|
||
INTN99, DCA T10CLK
|
||
DPSGTT /REENABLE XMTR
|
||
JMP INTDIS
|
||
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** NON-INTERRUPT LEVEL CODE ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
/ FIRST SCAN FOR THINGS TO DO LEFT BY INTERRUPT LEVEL CODE
|
||
/ THEN DISPLAY CONTENTS OF ADR IN SWITCHES
|
||
|
||
LOOP, ION
|
||
NL0 /RESET INTERRUPTS & AC
|
||
|
||
TAD CLKFLG
|
||
SZA CLA
|
||
JMP SCHED /CHECK FOR ONCE PER TICK DUTIES
|
||
|
||
TAD SECFLG
|
||
SZA CLA
|
||
JMP SECOND /CHECK FOR ONCE PER SECOND DUTIES
|
||
|
||
TAD TIQPTR
|
||
NEGATE
|
||
TAD TIQTKR /CHECK TTY RECEIVE QUEUE
|
||
SZA CLA
|
||
JMP RECINT /IF ANY RECEIVE STUFF HANDLE IT
|
||
|
||
TAD RCVTKR
|
||
NEGATE
|
||
TAD RCVPTR
|
||
SZA CLA
|
||
JMP RCVCHK /THERE IS INPUT FROM DECSYSTEM-10 WAITING
|
||
|
||
TAD T10FLG /CHECK SYNCHRONOUS TRANSMIT STATE
|
||
SMA CLA
|
||
JMP XSTAS /IDLE OR SYNCH
|
||
|
||
LOOP30, CIF 30
|
||
JMP ID1
|
||
XSTAS, CIF 10 /LINK TO INSTR ON FIELD 1
|
||
JMP XSTART
|
||
/HERE ONCE PER CLOCK TICK(UNLESS WE OVERRUN)
|
||
SCHED, DCA CLKFLG /MARK WE SAW FLAG
|
||
IOF
|
||
TAD REPTCK
|
||
SPA CLA /ARE WE TIMEING OUT ?
|
||
ISZ REPTCK /YES HAVE WE
|
||
JMP SCHED2 /NO TO ONE OF ABOVE
|
||
JMP SCHED2
|
||
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** COMMON SUBROUTINES ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
|
||
/HERE TO FREE A CHUNK
|
||
/CALL JMS FRECNK (CALL WITH CNK ADR IN AC
|
||
/ RETURN
|
||
/FRECNK, 0
|
||
/ IOF
|
||
/ JMS IFRCNK /RELEASE CHUNK
|
||
/ ION
|
||
/ JMP I FRECNK
|
||
|
||
/HERE TO FREE A NUMBER OF CHUNKS
|
||
/CALL JMS FRECKS (WITH ADR OF FIRST CHUNK IN AC)
|
||
/ RETURN
|
||
FRECKS, 0
|
||
ION
|
||
SNA /ANY CHUNKS LEFT ?
|
||
JMP I FRECKS /NO SO RETURN TO CALLER
|
||
IOF /FOR CALL TO IFRCNK
|
||
DCA INTMP1 /SAVE ADR OF THIS CHUNK
|
||
RCKFLD
|
||
TAD I INTMP1 /GET ADR OF NEXT CHUNK
|
||
DCA INTMP2 /SAVE IT
|
||
TAD INTMP1
|
||
JMS IFRCNK /RELEASE THIS CHUNK
|
||
ISZ I (FREDCK /COUNT THIS CHUNK
|
||
NOP /SINCE IT MIGHT SKIP
|
||
TAD INTMP2 /GET ADR OF NEXT CHUNK IN STRING
|
||
JMP FRECKS+1 /LOOP FOR NEXT CHUNK
|
||
RCX, NLOAD 4
|
||
JMS ISBDDC /FLAG OUTPUT IS FROZEN
|
||
JMS RECI42 /INSERT STATUS
|
||
JMP LOOP
|
||
/IF IDLE REP SEND ACK
|
||
RCVREP, RCKFLD
|
||
DCA I AUTO1
|
||
DCA I AUTO1
|
||
TAD RECVOK /LAST MSG REC OK
|
||
AND (3777 /ZERO MASK TO SEND ACK
|
||
NEGATE
|
||
TAD I AUTO1
|
||
TABFLD
|
||
SZA CLA
|
||
JMP REPNAK /SEND NAK AS MES # NOT THE SAME
|
||
NL4000
|
||
TAD RECVOK /DONT SET ACK BIT OFF IF ON
|
||
SPA
|
||
DCA RECVOK
|
||
JMP RCVADV /ACK TO BE SENT
|
||
|
||
PAGE
|
||
|
||
/HERE TO GET A FREE(NOT ERS) CHUNK AT INTERRUPT LEVEL
|
||
/ CALL JMS IGTCNK
|
||
/ ERROR RETURN
|
||
/ RETURN WITH CHUNK ADR IN AC
|
||
IGTCNK, 0
|
||
NL0
|
||
TAD (-ERSCNT
|
||
TAD FRECNT
|
||
SPA CLA
|
||
JMP I IGTCNK /NOT ENOUGH CHUNKS LEFT TO PASS ANY OUT
|
||
JMS ERSGET /GET A CHUNK
|
||
ISZ IGTCNK
|
||
JMP I IGTCNK
|
||
/HERE TO GET DDB ADR
|
||
/CALL JMS GETDDB (WITH DEVICE # IN AC)
|
||
/ RETURN WITH DDB, DDBSTS STEUP & BLOCK ADR IN AC
|
||
GETDDB, 0
|
||
SPA
|
||
HLT
|
||
TAD (-DEVN
|
||
SMA
|
||
HLT
|
||
TAD (DDBTAB+DEVN
|
||
DCA DDB
|
||
TAD I DDB
|
||
DCA DDB /SAVE DEVICE BLOCK ADR
|
||
NLOAD DEVSTS /RELATIVE ADR OF DEVICE STATUS WORD
|
||
TAD DDB
|
||
DCA DDBSTS /SAVE ADR OF STATUS WORD
|
||
TAD DDB
|
||
JMP I GETDDB
|
||
/HERE TO GET THE NEXT OUTPUT CHAR FROM CHUNK
|
||
/ USES INTMP1 - INTMP4
|
||
/CALL PUT DEVICE BLOCK ADR IN INTDDB
|
||
/ JMS IGTOCH
|
||
/ RETURN IF NONE( AC=0 )
|
||
/ RETURN WITH CHAR IN AC
|
||
|
||
IGTOCH, 0
|
||
NLOAD DEVOAD
|
||
TAD INTDDB /ADD DEVICE DATA
|
||
DCA INTMP3
|
||
TAD I INTMP3 /GET OUTPUT CHAR COUNT
|
||
SNA /DO WE HAVE ANY OUTPUT CHARS ?
|
||
JMP I IGTOCH /NO - DISMISS
|
||
ISZ IGTOCH /SKIP RETURN TO CALLER
|
||
ISZ I INTMP3 /ADVANCE CHAR POINTER
|
||
IAC /MAKE ADR OF CURRENT CHAR
|
||
DCA INTMP4
|
||
RCKFLD
|
||
TAD I INTMP4 /PICK UP CURRENT CHAR
|
||
TABFLD
|
||
SMA /ALL DONE WITH CURRENT CHUNK ?
|
||
JMP I IGTOCH /NO - EXIT ROUTINE
|
||
DCA INTMP2 /SAVE CHARCTER
|
||
TAD INTMP4 /CURRENT CHAR POINTER
|
||
AND [-CNKSIZ /MAKES POINTER TO LINK WORD
|
||
DCA INTMP4
|
||
RCKFLD
|
||
TAD I INTMP4 /GET ADR OF NEXT CHUNK
|
||
TABFLD
|
||
|
||
IFNZRO FTDEBUG <
|
||
SNA
|
||
JMP .+3
|
||
JMS ICNKCK /CHECK CHUNK ADR IS KOSHER
|
||
TAD INTMP1 /GET ADR OF CHUNK AGAIN
|
||
>/END OF IFNZRO FTDEBUG
|
||
|
||
DCA I INTMP3 /SET NEW CHAR POINTER
|
||
TAD INTMP4 /ADR OF USED CHUNK
|
||
JMS IFRCNK /FREE CURRENT CHUNK
|
||
NLOAD DEVCHK /DISPLACEMENT OF CHUNK COUNT
|
||
TAD INTDDB /PLUS DDB START
|
||
DCA INTMP3 /SAVE DEVCHK ADDRESS
|
||
NLM1 /DECREMENT
|
||
TAD I INTMP3 / CHUNK COUNT
|
||
DCA I INTMP3 / AND STORE
|
||
TAD INTMP2 /GET CURRENT CHAR AGAIN
|
||
AND (3777 /TURN OFF LAST CHAR BIT
|
||
JMP I IGTOCH /DONE
|
||
/HERE TO GET AN EXTENSIBLE NUMBER USING IGTOCH
|
||
IGTEXN, 0
|
||
JMS IGTOCH
|
||
JMP I IGTEXN /TRY AGAIN LATER
|
||
AND [0377
|
||
DCA INTMP5 /SAVE LOW ORDER BITS
|
||
TAD INTMP5
|
||
AND [0200
|
||
SNA CLA
|
||
JMP IGTEN9 /RETURN
|
||
JMS IGTOCH
|
||
HLT
|
||
CLL RAL /PUT SIGN BIT IN LINK
|
||
CLL RTL /CLEAR FORMER SIGN BIT
|
||
CLL RTL
|
||
IFNZRO FTDEBUG <
|
||
SZL /CHECK FOR 200 BIT WHICH SAYES EXTENSIBLE
|
||
HLT /CAN'T HACK NUMBERS THAT LARGE !
|
||
>/END OF IFNZRO FTDEBUG
|
||
CLL RTL
|
||
TAD (-200
|
||
IGTEN9, TAD INTMP5
|
||
ISZ IGTEXN /SKIP RETURN
|
||
JMP I IGTEXN
|
||
/HERE AT INTERRUPT LEVEL TO SET RECEIVER TO IDLE MODE
|
||
INRCID, 0
|
||
NLM1
|
||
CDFINS
|
||
DCA I [F10WC
|
||
NLM1
|
||
TAD RCVPTR
|
||
DCA I [F10CA
|
||
TAD (INRC10
|
||
DCA INRCPV
|
||
CDFCNK
|
||
JMP I INRCID
|
||
DOWN2, TAD (RCVDSP+1-SNATAB /POINT TO RCVDSP ENTRY
|
||
DCA TEMP1 /STORE ADDRESS
|
||
TAD (RCVKRD /UN-USED VALUE
|
||
DCA I TEMP1 /NOW THIS CONNECTION IS AVAIL
|
||
JMP NEIG13 /RETURN TO LOOP
|
||
SCHED2, ISZ T10CLK /HAS SYN TRANSMITTER TAKEN TOO LONG
|
||
JMP SCHED9 /NO
|
||
TAD (DPTMSG /LEAVE MESSAGE FOR OPERATOR
|
||
DCA ERRFLG
|
||
JMS INISYN
|
||
SCHED9, ION
|
||
JMP CLKCDR /TO CDR STUFF FIRST
|
||
REPNAK, NL3 /SEND NAK IN RESPONSE TO A REP
|
||
DCA NAKFLG /RESPONSE OF THREE
|
||
JMP RCVADV /DONE WITH MESSAGE
|
||
PAGE
|
||
|
||
|
||
/HERE TO GET A FREE CHUNK AT INTERRUPT LEVEL
|
||
/ (-) CYCLES + JMS CYCLES
|
||
/CALL JMS ERSGET
|
||
/ ERROR RETURN
|
||
/ SUCCESS RETURN WITH CHUNK ADR IN AC
|
||
|
||
ERSGET, 0
|
||
NL0
|
||
TAD FIRFRE /GET ADR OF 1ST CHUNK
|
||
SNA /IS THERE A FIRST CHUNK ?
|
||
HLT /MUST NEVER HAPPEN
|
||
/ IMPLIES STARTED SOMETHING WE CAN'T FINISH
|
||
|
||
IFNZRO FTDEBUG < JMS ICNKCK > /BE SURE ADR IS KOSHER
|
||
IFZERO FTDEBUG < DCA INTMP1 > /SAVE ADR OF FIRST CHUNK
|
||
RCKFLD
|
||
|
||
TAD I FIRFRE /AND GET ADR OF 2ND CHUNK
|
||
DCA FIRFRE /SET NEW FIRST FREE CHUNK
|
||
DCA I INTMP1 /CLEAR LINK IN THIS CHUNK
|
||
TABFLD
|
||
|
||
NLM1
|
||
TAD FRECNT /UPDATE FREE COUNT
|
||
IFNZRO FTDEBUG <
|
||
SPA
|
||
HLT /IT IS ALWAYS POSITIVE
|
||
>/END OF IFNZRO FTDEBUG
|
||
DCA FRECNT
|
||
|
||
TAD INTMP1 /GET ADR OF CHUNK WE ARE GETTING
|
||
JMP I ERSGET
|
||
|
||
/HERE TO FREE A CNK
|
||
/(12-16) CYCLES + JMS CYCLES
|
||
/CALL JMS IFRCNK (CALL WITH CNK ADR IN AC
|
||
/ RETURN AC WILL BE 0, LINK UNDEFINED
|
||
IFRCNK, 0
|
||
|
||
IFZERO FTDEBUG <
|
||
DCA INTMP1 /SAVE ADR OF CHUNK
|
||
>/END OF IFZERO FTDEBUG
|
||
|
||
IFNZRO FTDEBUG <
|
||
JMS ICNKCK /CHECK CHUNK ADR IS KOSHER
|
||
>/END OF IFNZRO FTDEBUG
|
||
|
||
TAD FIRFRE /ADR OF FIRST FREE CHUNK
|
||
RCKFLD
|
||
DCA I INTMP1 /SET LINK IN NEW FIRST CHUNK
|
||
TABFLD
|
||
TAD INTMP1
|
||
DCA FIRFRE
|
||
ISZ FRECNT /COUNT FREE CHUNKS
|
||
JMP I IFRCNK
|
||
HLT
|
||
/HERE TO CHECK A CHUNK ADR IS LEGAL
|
||
/ CALL JMS ICNKCK /WITH IOF AND ADR IN AC
|
||
/ RETURN /(AC)=0 AND ADR OF CHUNK IN INTMP1
|
||
ICNKCK, 0
|
||
DCA INTMP1 /SAVE CHUNK ADR
|
||
TAD INTMP1
|
||
AND [CNKSIZ-1
|
||
SZA /ALL CHUNKS BEGIN ON EVEN BOUNDRY
|
||
HLT /THIS ONE DOESN'T ?
|
||
CLL CLA /CLEAR LINK
|
||
TAD FIRADR /GET ADDRESS OF FIRST CHUNK
|
||
CMA IAC /CONVERT TO NEGATIVE
|
||
TAD INTMP1 /GET ADDR OF CHUNK AGAIN
|
||
SNL CLA
|
||
HLT
|
||
JMP I ICNKCK
|
||
|
||
/HERE TO SET DDCMP STATUS WORD
|
||
/ CALL SET UP INTDDB
|
||
/ LOAD NEW STATUS INTO AC
|
||
/ JMS ISTDDC
|
||
ISTDDC, 0
|
||
DCA INTMP3 /SAVE NEW DDCMP STATUS WORD
|
||
TAD (DEVDDC /OFFSET FOR DDCMP STATUS WORD
|
||
TAD INTDDB
|
||
DCA INTMP2
|
||
TAD I INTMP2
|
||
NEGATE
|
||
TAD INTMP3 /GET NEW DDCMP STATUS WORD
|
||
SNA CLA /ARE THEY DIFFERENT ?
|
||
JMP I ISTDDC /NO SO RETURN
|
||
TAD INTMP3 /GET NEW STATUS WORD
|
||
DCA I INTMP2 /AND SET IT
|
||
NLOAD DEVSTS
|
||
TAD INTDDB
|
||
DCA INTMP1 /SAVE ADR OF STATUS WORD
|
||
NL7776 /MASK FOR NEED-TO-SEND-STATUS BIT
|
||
AND I INTMP1 /CLEAR IT
|
||
IAC /SET IT
|
||
DCA I INTMP1 /SAVE IT
|
||
JMP I ISTDDC
|
||
|
||
/HERE TO SET A BIT IN THE DEVDDC WORD
|
||
/ CALL JMS ISBDDC /WITH INTDDB SETUP AND BITS IN AC
|
||
/ /USES INTMP1 - INTMP4
|
||
ISBDDC, 0
|
||
DCA INTMP1 /SAVE BITS
|
||
NLOAD DEVSTS /RELATIVE ADR OF STATUS WORD
|
||
TAD INTDDB
|
||
DCA INTMP3 /SAVE ADR OF STATUS WORD
|
||
Q=DEVDDC-DEVSTS
|
||
NLOAD Q
|
||
TAD INTMP3 /MAKES ADR OF DEVDDC
|
||
DCA INTMP4 /SAVE ADR OF DEVDDC
|
||
TAD I INTMP4 /GET OLD DEVDDC
|
||
DCA INTMP2 /SAVE FOR FUTURE REFERENCE
|
||
TAD INTMP1 /GET BITS TO SET
|
||
CMA /MAKE INTO A MASK
|
||
AND I INTMP4 /CLEAR BITS IN DEVDDC
|
||
TAD INTMP1 /ADD BITS
|
||
DCA I INTMP4 /AND SAVE IN DEVDDC
|
||
TAD INTMP2 /ONLY SHIP STATUS IF DIFFERENT
|
||
NEGATE
|
||
TAD I INTMP4 /NEW STATUS
|
||
SNA /SKIP IF DIFFERENT THAN OLD
|
||
JMP I ISBDDC /SAME SO DONT SEND TO HOST
|
||
NL7776 /MASK TO REQUEST STATUS
|
||
AND I INTMP3 /CLEAR BIT FROM DEVSTS
|
||
IAC /SET BIT
|
||
DCA I INTMP3
|
||
JMP I ISBDDC
|
||
/HERE TO GET THE NEXT CHAR FROM A STRING OF CHUNKS POINTED TO BY TEMP3
|
||
/CALL JMS GETCHR
|
||
/ RETURN WHEN NO MORE CHARS IN STRING(I.E. TEMP3 NOW 0
|
||
/ RETURN WITH CHAR IN AC(WILL BE 11 BITS ONLY)
|
||
GETCHR, 0
|
||
TAD TEMP3
|
||
SNA /IS STRING NULL ?
|
||
JMP I GETCHR /YES SO NONSKIP RETURN
|
||
AND [CNKSIZ-1
|
||
IOF
|
||
SNA CLA /ARE WE POINTING TO A LINK WORD ?
|
||
JMP GETCH3 /YES
|
||
RCKFLD
|
||
TAD I TEMP3 /GET THE LAST CHAR
|
||
TABFLD
|
||
SPA CLA /WAS LAST CHAR LAST IN ITS CHUNK ?
|
||
JMP GETCH7 /YES SO ADVANCE CHUNKS
|
||
|
||
IFNZRO FTDEBUG <
|
||
NL1
|
||
TAD TEMP3
|
||
AND [CNKSIZ-1
|
||
SNA CLA
|
||
HLT
|
||
>/END OF IFNZRO FTDEBUG
|
||
|
||
GETCH3, ISZ TEMP3 /ADVANCE TO NEXT CHAR
|
||
NL3777 /STRIP LAST DATA BIT IF PRESENT
|
||
RCKFLD
|
||
AND I TEMP3 /GET NEXT CHAR
|
||
TABFLD
|
||
ISZ GETCHR /SKIP RETURN
|
||
GETCH5, ION
|
||
JMP I GETCHR
|
||
GETCH7, TAD TEMP3 /GET POINTER TO CURRENT CHAR
|
||
AND [-CNKSIZ /MAKE POINTER TO FIRST WORD OF CHUNK
|
||
DCA TEMP3
|
||
RCKFLD
|
||
TAD I TEMP3 /GET ADR OF NEXT CHUNK
|
||
TABFLD
|
||
SNA
|
||
JMP GETCH5 /NO MORE CHUNKS SO DONE
|
||
|
||
IFNZRO FTDEBUG <
|
||
JMS ICNKCK /CHECK LINK HAD LEGAL CHUNK ADDRESS
|
||
TAD INTMP1
|
||
>/END OF INZRO FTDEBUG
|
||
|
||
DCA TEMP3
|
||
JMP GETCH3 /GO GET NEXT CHAR
|
||
PAGE
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** CTY SERVICE ***
|
||
/ *** GAS FOR LESS ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
|
||
/HERE AT INTERRUPT LEVEL TO TEST FOR CTY INTERRUPTS
|
||
INTCTY, CTYKSF /TYPING SOMETHING?
|
||
JMP INTCTO /NOT KEYBOARD - CHECK XMTR
|
||
TAD (CTYBLK /ADR OF DEVICE BLOCK
|
||
DCA I TIQPTR /SAVE ADR
|
||
CTYKRB /READ KEYBOARD & RESET FLAG
|
||
/HERE TO PUT CHAR INTO TTI QUEUE AND BE SURE QUEUE IS NOT GARBLED
|
||
INTYI9, DCA I TIQPTR /SAVE CHAR
|
||
TAD TIQPTR
|
||
TAD (1-TTIQUE-TIQLEN
|
||
SZA CLA /HAVE WE FILLED THE QUEUE ?
|
||
JMP .+3 /NO
|
||
TAD (TTIQUE-1
|
||
DCA TIQPTR
|
||
|
||
/NOW CHECK TO SEE QUEUE HASN'T OVERFLOWED
|
||
TAD TIQPTR
|
||
NEGATE
|
||
TAD TIQTKR /HAVE WE FILLED THE QUEUE
|
||
SNA CLA
|
||
HLT
|
||
NLM1
|
||
DCA WRKREQ /FIND THIS ASAP
|
||
JMP INTDIS
|
||
|
||
INTCTO, CTYTSF /SKIP ON CTY TRANSMIT FLAG
|
||
JMP INTCT9 /NOT CTY - CHECK NEXT DEVICE
|
||
TAD (CTYBLK
|
||
INTTYX, DCA INTDDB
|
||
JMS XMTINT /SEE WHAT IS LEFT TO GO
|
||
JMP INTDIS
|
||
/ CALL: JMS TTYGO WITH DDB& DDBSTS SETUP
|
||
/ RETURN /POSSIBLY WITH GARBAGE IN AC
|
||
/HERE AT NONINTERRUPT LEVEL TO START A TTY IF IT WERE INACTIVE
|
||
TTYGO, 0
|
||
TAD DDB /GET DEVICE BLOCK ADR
|
||
IOF
|
||
DCA INTDDB /SAVE IT WHERE XMTINT WANTS IT
|
||
NL4000
|
||
TAD I DDBSTS /MAKE ACTIVE STATUS
|
||
SMA
|
||
JMP .+3 /EXIT BECAUSE ALREADY ACTIVE
|
||
DCA I DDBSTS
|
||
JMS XMTINT
|
||
NL0 /CLEAR AC
|
||
JMP I TTYGO
|
||
|
||
GTCHR, 0
|
||
NL0 /CLEAR AC
|
||
JMS GETCHR
|
||
HLT
|
||
JMP I GTCHR
|
||
|
||
IFNZRO DP8ETR <
|
||
OTR, 0 /TRACE OUTPUT MESSAGE
|
||
TAD T10NWC /NUMBER OF CHARACTERS
|
||
DCA TEMP1 /SAVE FOR LOOP CONTROL
|
||
TAD T10NCA /BEGINNING OF MESSAGE
|
||
DCA AUTO1 / INTO AUTOINDEX POINTER
|
||
OTRL, TAD I AUTO1 /GET NEXT CHARACTER
|
||
IOF
|
||
JMS TRACEW /TRACE IT
|
||
ION
|
||
ISZ TEMP1 /SKIP IF FINISHED
|
||
JMP OTRL /ELSE CONTINUE
|
||
JMP I OTR
|
||
>/END OF IFNZRO DP8ETR
|
||
IFNZRO TTYN <
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** KL8A SERVICE ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
INTYI1, 0
|
||
CDFINS
|
||
NL0
|
||
TAD I INTYI1 /GET DDB ADR
|
||
SNA /DO WE BELIEVE IN HIM ?
|
||
JMP INTYI3 /NO SO FLUSH IT
|
||
DCA INTMP1
|
||
TAD INTMP1
|
||
CDFCNK /BACK TO NORMAL DATA FIELD
|
||
DCA I TIQPTR /PUT INTO TTY INPUT QUEUE
|
||
TAD [LDBADR
|
||
TAD INTMP1
|
||
DCA INTMP1
|
||
TAD I INTMP1
|
||
AND (7770
|
||
TAD (0005 /MAKES A KRB
|
||
DCA .+1
|
||
0
|
||
JMP INTYI9
|
||
|
||
INTYI3,
|
||
CDFCNK /BACK TO NORMAL DATA FIELD
|
||
JMP INTDIS
|
||
|
||
/HERE WHEN A KL8E LINE HAS AN XMT INTERRUPT
|
||
INTYO1, 0
|
||
CDFINS /CHANGE DATA FIELD TO PICK UP AN INSTRUCTION
|
||
NL0
|
||
TAD I INTYO1
|
||
CDFCNK /BACK TO NORMAL DATA FIELD
|
||
JMP INTTYX /POKE XMTINT
|
||
/HERE FROM CODE FOLLOWING XMTINT TO TYPE AN OUTPUT CHAR
|
||
INTYPE,
|
||
TAD [LDBADR /POINT TO ADDRESS FIELD
|
||
TAD INTDDB /IN DDB
|
||
DCA INTMP2 /STORE ADDRESS OF IOT INSTRUCTION
|
||
TAD I INTMP2 /GET IOT
|
||
AND (7774 /MASK LINE NO OUT
|
||
DCA .+11
|
||
TAD I INTMP2
|
||
AND (3
|
||
BSW
|
||
CLL RTL
|
||
DCA TEX
|
||
TAD (377
|
||
AND INTMP6
|
||
TAD TEX
|
||
0
|
||
JMP XMTDIS
|
||
TEX, 0
|
||
>/END OF IFNZRO TTYN
|
||
IFNZRO CDRN <
|
||
ICDC20, DCA CDCCHR
|
||
ISZ CDCCNT /COUNT REPETITION
|
||
ICDRD5, ISZ I (CDRBLK+DEVOLC
|
||
TAD I (CDRBLK+DEVOLC
|
||
TAD (-120
|
||
SNA CLA
|
||
JMS ICDC30
|
||
JMP INTDIS
|
||
>/END OF IFNZRO CDRN
|
||
RCVTTC, TAD (-2 /SEE IF STATUS
|
||
SZA CLA /SKIP IF YES
|
||
JMP RCVTT5 /MUST BE CONTROL
|
||
JMS GTCHR /STC
|
||
TAD (JMP I TTSDSP
|
||
DCA .+1
|
||
7402
|
||
TTSDSP, RCVKRD /TYPE 0=UNKNOWN
|
||
RCVSBT /TYPE 1=SET BITS
|
||
RCVCBT /TYPE 2=CLEAR BITS
|
||
RCVKRD /TYPE 3=FATAL ACCORDING TO NCL SPEC
|
||
/SET UP SO TTY NOT CONNECTED PRINTED
|
||
CONDN, TAD (NCOMSG-1
|
||
JMP CNTYP2
|
||
|
||
PAGE
|
||
IFNZRO TTYN <
|
||
ZZ=TTYN
|
||
/THE FOLLOWING CONDITIONAL SETS UP VECTORED ADDRESS FOR EACH TTY LINE ON KL8A
|
||
DEFINE KL8 Q QQ <
|
||
IFNZRO ZZ <
|
||
QQ, JMP Q /TRANSMIT ON LINE 0
|
||
JMP Q+2 /TRANS ON LINE 1
|
||
JMP Q+4 /TRANS ON LINE 2
|
||
JMP Q+6 /TRANS ON LINE 3
|
||
JMP Q+10 /RECEIVE ON LINE 0
|
||
JMP Q+12 /REC LINE 1
|
||
JMP Q+14 /REC LINE 2
|
||
JMP Q+16 /REC LINE 3
|
||
ZZ=ZZ-4
|
||
>/END IFNZRO ZZ
|
||
>/END OF DEF KL8
|
||
KL8 A8TM0,KL8A1
|
||
KL8 A8TM1,KL8A2
|
||
KL8 A8TM2,KL8A3
|
||
KL8 A8TM3,KL8A4
|
||
ZZ=TTYN
|
||
/DEFINES I/O PROCESSING FOR KL8A
|
||
/ QQ=VECTORED ADDRESS FOR KL8A
|
||
/ Q=DDB TABLE LINE 0
|
||
/ Q1=DDB TABLE LINE 1
|
||
/ Q2=DDB TABLE ADDRESS LINE 2
|
||
/ Q3=DDB TABLE ADDRESS LINE 3
|
||
DEFINE KL8A QQ Q Q1 Q2 Q3 <
|
||
IFNZRO ZZ <
|
||
QQ, JMS I [INTYO1
|
||
Q
|
||
JMS I [INTYO1
|
||
Q1
|
||
JMS I [INTYO1
|
||
Q2
|
||
JMS I [INTYO1
|
||
Q3
|
||
JMS I [INTYI1
|
||
Q
|
||
JMS I [INTYI1
|
||
Q1
|
||
JMS I [INTYI1
|
||
Q2
|
||
JMS I [INTYI1
|
||
Q3
|
||
ZZ=ZZ-4
|
||
>/END OF IFNZRO ZZ
|
||
>/END OF DEF KL8A
|
||
KL8A A8TM0,T00BLK,T01BLK,T02BLK,T03BLK
|
||
KL8A A8TM1,T04BLK,T05BLK,T06BLK,T07BLK
|
||
KL8A A8TM2,T10BLK,T11BLK,T12BLK,T13BLK
|
||
KL8A A8TM3,T14BLK,T15BLK,T16BLK,T17BLK
|
||
ZZ=TTYN
|
||
IFNZRO ZZ <
|
||
ZZ=ZZ-4
|
||
INTTTY, MSAB >
|
||
IFNZRO ZZ < MSAB1
|
||
ZZ=ZZ-4>
|
||
IFNZRO ZZ <
|
||
ZZ=ZZ-4
|
||
MSAB2>
|
||
IFNZRO ZZ <MSAB3>
|
||
JMP I [INTTY9
|
||
Z=TTYN
|
||
/INITIALIZE KL8AS
|
||
KL8I, 0
|
||
NL1 /ENABLE INTR
|
||
IFNZRO Z <MCCD
|
||
MSIE
|
||
Z=Z-4>
|
||
IFNZRO Z <MCCD1
|
||
MSIE1
|
||
Z=Z-4>
|
||
IFNZRO Z <MCCD2
|
||
MSIE2
|
||
Z=Z-4>
|
||
IFNZRO Z <MCCD3
|
||
MSIE3>
|
||
Z=TTYN
|
||
IFNZRO Z <TAD (KL8A1-1
|
||
MSLB
|
||
Z=Z-4>
|
||
IFNZRO Z <TAD (10 /KL8A2
|
||
MSLB1
|
||
Z=Z-4>
|
||
IFNZRO Z <TAD (10 /KL8A3
|
||
MSLB2
|
||
Z=Z-4>
|
||
IFNZRO Z <TAD (10 /KL8A4
|
||
MSLB3>
|
||
NL0
|
||
JMP I KL8I
|
||
|
||
|
||
>/END OF IF NZRO TTYN
|
||
/THE FOLLOWING IS AN INTERFACE TO FIELD0 FROM FIELD 1
|
||
F0I42, JMS RECI42
|
||
CIF 10 /RETURN TO FIELD 1
|
||
JMP XST41
|
||
PAGE
|
||
/SEND XOF TO TERMINAL ASAP
|
||
XOFT, TAD (LDBXPT
|
||
TAD DDB
|
||
DCA TEMP1
|
||
TAD (XOFMS-1
|
||
DCA I TEMP1
|
||
JMS TTYGO
|
||
JMP RCVTT0
|
||
/HERE TO SKIP AN EXTENSIBLE FIELD
|
||
GETEXN, 0
|
||
JMS GTCHR
|
||
DCA TEMP1
|
||
TAD TEMP1
|
||
AND (0200 /MASK OFF EXT BIT
|
||
SNA CLA
|
||
JMP GETEX2
|
||
DCA GTSAV /ZERO TEMP LOC FOR DTR/RING BITS
|
||
DCA GTSAV1
|
||
JMS GTCHR
|
||
CLL RTL
|
||
CLL RTL
|
||
SPA
|
||
HLT
|
||
CLL RTL
|
||
SZL /IS RING CARRIER BIT SET
|
||
ISZ GTSAV /YES
|
||
CLL RAL
|
||
SZL
|
||
ISZ GTSAV1 /DTR IF STAATUS
|
||
TAD (-200
|
||
TAD TEMP1
|
||
DCA TEMP1
|
||
TAD GTSAV
|
||
CLL RAL /LINK SHOULD CONTAIN DTR BIT
|
||
TAD GTSAV1
|
||
BSW
|
||
CLL RAR /SHIFT SO BIT ARE 140 AND SAVE OR
|
||
GETEX2, DCA GTSAV /CLEAR FOR LATER USE BY EXAD AND RCTBIT
|
||
TAD TEMP1
|
||
JMP I GETEXN
|
||
GTSAV, 0
|
||
GTSAV1, 0
|
||
EXPT, 0
|
||
EXAD, 0
|
||
TAD GTSAV
|
||
TAD I EXPT
|
||
DCA I EXPT /ADD BITS
|
||
JMP I EXAD /NO SO RETURN
|
||
RCTBIT, 0
|
||
DCA EXAD /SAVE 1 OR 2
|
||
JMS GETEXN /GET BITS 10 WANTS TO CHANGE
|
||
AND (20 /CHECK TO SEE IF STATUS IMAGE BIT INVOLVED
|
||
SNA CLA
|
||
JMP IMG1 /IMAGE BIT IS NOT INVOLVED [1(16)]
|
||
IMG, TAD TEMP1 /GET BITS
|
||
AND (7757 /MASK OUT IMAGE BIT
|
||
DCA EXPT /SAVE
|
||
TAD (ESC
|
||
JMS STCHR /STORE ESCAPE AND TURN OFF INTERRUPTS [1(16)]
|
||
TAD EXAD /GET 1 OR 2 AS SET IN AC ON CALL
|
||
JMS STCHR /STORE IN DATA STREAM
|
||
ION /TURN ON INTERRUPTS AGAIN [1(16)]
|
||
TAD EXPT /GET STATUS BIT PATTERN
|
||
DCA TEMP1
|
||
IMG1, TAD (DEVDSL
|
||
TAD DDB
|
||
DCA EXPT /SAVE LOC POINTER
|
||
TAD GTSAV /LOC HAS BEEN SET BY LAST CALL TO GETEXN
|
||
CMA
|
||
IOF /INTERRUPT OFF WHEN CHANGING STATUS
|
||
AND I EXPT
|
||
DCA I EXPT /SHUT OFF BITS IN STATUS IF MASK IN GTSAV 1
|
||
TAD TEMP1 /GET CHANGE BITS AGAIN
|
||
CMA /COMPLEMENT
|
||
AND I TEMP6 /GET DDCMP STATUS WORD WITHOUT BITS
|
||
JMP I RCTBIT
|
||
RCDSTA, JMS GTCHR /GET TYPE
|
||
TAD (-2 /CLEAR BITS?
|
||
SZA CLA
|
||
JMP RCVFLU
|
||
TAD (DEVDDC
|
||
TAD DDB
|
||
DCA TEMP6
|
||
JMS GETEXN
|
||
CMA
|
||
AND I TEMP6
|
||
DCA I TEMP6
|
||
JMP RCVFLU
|
||
/CALL WITH TEMP3 POINTING TO STRING OF CHUNKS
|
||
SKPEXN, 0
|
||
JMS GTCHR
|
||
AND (200 /CHECK EXTENSIBLE BIT
|
||
SZA /SKIP IF DONE
|
||
JMP SKPEXN+1 /OTHERWISE
|
||
JMP I SKPEXN /RETURN
|
||
INSRT2
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** RECINT-DDCMP ***
|
||
/ *** BASE LEVEL TTY INPUT HANDLING ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
/HERE TO HANDLE TTY INPUT
|
||
/ CALLED FROM LOOP - WILL RETURN TO LOOP
|
||
/ TAKES NEXT CHAR FROM TTIQUE AND PUTS IT INTO AN INPUT CHUNK
|
||
/TEMP USAGE IS
|
||
/ TEMP8 IS POINTER TO LDBXPT
|
||
/ TEMP7 ADR OF DDCMP STATUS WORD
|
||
/ TEMP6 ADR OF DEVBF1
|
||
/ TEMP5 CHAR
|
||
/ TEMP4 ADR OF CHRTAB BITS
|
||
|
||
/DEVDDC BITS
|
||
/ 0001 /DEFERED ECHO MODE
|
||
/ 0002 /TRANSLATE LOWER CASE TO UPPER
|
||
/ 0004 /OUTPUT HAS BEEN FROZEN BY TYPEIN OF XOF
|
||
/ 0010 /IMAGE MODE INPUT
|
||
/ 0020 /IMAGE MODE OUTPUT
|
||
/ 0040 /TTY PAGE IN EFFECT
|
||
/ 0100 /TTY TAPE FEATURE(IMPLIES SUPPRESS NORMAL CR HANDLING)
|
||
/ 0200 /TTY HAS HDW TAB
|
||
/ 0400 /INPUT STOPPED BY SENDING XOFF TO TTY
|
||
|
||
PAGE
|
||
RECIN0, ION /MATCHES IOF AT RECINT
|
||
TAD TEMP5 /GET CHARACTER
|
||
AND [0177 /SEVEN BITS ONLY
|
||
TAD (CHRTAB /SCNSER CHAR TABLE ADR
|
||
DCA TEMP4 /SAVE ADR OF CHAR TYPE BITS
|
||
|
||
NLOAD DEVSTS
|
||
TAD DDB /MAKE STATUS ADR
|
||
DCA DDBSTS /SAVE FOR TTYGO
|
||
|
||
Q=DEVBF1-DEVSTS
|
||
NLOAD Q
|
||
TAD DDBSTS
|
||
DCA TEMP6 /SAVE POINTER TO DEVBF1
|
||
|
||
TAD (LDBXPT
|
||
TAD DDB
|
||
DCA TEMP8 /SAVE POINTER TO XOF LEVEL STRING
|
||
|
||
Q=DEVDDC-DEVSTS
|
||
NLOAD Q
|
||
TAD DDBSTS /DEVICE STATUS
|
||
DCA TEMP7 /SAVE ADR OF DEVDDC
|
||
|
||
RECIN,
|
||
TAD (0010 /MASK FOR IMAGE MODE INPUT
|
||
AND I TEMP7 /COMPARE AGAINST DDCMP STATUS
|
||
SZA CLA /SKIP IF NOT IN IMAGE MODE INPUT
|
||
JMP RECIN1 /IMAGE MODE INPUT
|
||
TAD TEMP5 /GET CHARACTER
|
||
SNA CLA /CHECK FOR NULL
|
||
JMP LOOP /FLUSH NULLS
|
||
|
||
NLOAD CHRLC /MASK FOR CHAR IS LOWER CASE
|
||
AND I TEMP4 /TEST AGAIN CHRTAB
|
||
SNA CLA
|
||
JMP RECIN1 /CHAR IS NOT LOWER CASE
|
||
NLOAD 2 /MASK FOR SHOULD TRANSLATE
|
||
AND I TEMP7 /COMPARE AGAINST DDCMP STATUS
|
||
SZA CLA
|
||
TAD (-240 /CONVERT TO UPPER CASE
|
||
TAD TEMP5 / AND COMPLEMENT PARITY BIT
|
||
AND [0377 /CLEAR EXTRANEOUS BITS, INCLUDING "LAST IN CHUNK" FLAG
|
||
DCA TEMP5 / AND SAVE CHAR AGAIN
|
||
|
||
RECIN1, TAD (DEVRCN /POINT TO RCN IN DDB TO SEE IF TRIING TO CONNECT
|
||
TAD DDB
|
||
DCA TEMP3
|
||
TAD I TEMP3
|
||
SZA CLA /TRY TO ISSUE CONNECT
|
||
JMP CONDN /ALREADY TRIED TO ISSUE CONNECT
|
||
NLOAD CONBIT /MASK FOR DEVICE CONNECTED
|
||
AND I DDBSTS
|
||
SNA CLA /IS IT CONNECTED ?
|
||
JMP CONTYP /NO SO TELL USER
|
||
TAD (-ERSCNT
|
||
TAD FRECNT
|
||
SPA CLA
|
||
JMP BELTYP /NO FREE CHUNKS
|
||
TAD TEMP6 /DEVBF1
|
||
IAC /DEVBF2
|
||
DCA TEMP3
|
||
TAD I TEMP3
|
||
DCA TEMP3
|
||
JMS GETCHR
|
||
NL0
|
||
TAD (-30 /24 DECIMAL
|
||
SMA CLA /HAS USER TYPED FAR AHEAD ?
|
||
JMP BELTYP /YES SO DING HIM
|
||
RECIN2, JMS RECI42 /PUT STATUS INTO THE MESSAGE
|
||
NLOAD 1 /MASK FOR DEFERRED ECHO
|
||
AND I TEMP7 /COMPARE WITH DEVDDC
|
||
SZA CLA /SKIP IF NOT DEFERRED ECHO
|
||
JMP RECIN5 /ALREADY IN DEFERRED ECHO MODE
|
||
|
||
NLOAD DEVOAD /POINTER TO OUTPUT DATA
|
||
TAD DDB
|
||
DCA TEMP1
|
||
TAD I TEMP1
|
||
SZA CLA /IS THERE OUTPUT DATA WAITING ?
|
||
JMP RECIN4 /YES SO GO INTO DEFERRED ECHO MODE
|
||
Q=LDBFPT-LDBXPT
|
||
NLOAD Q
|
||
TAD TEMP8
|
||
IOF /WE WILL MODIFY INTERRUPT LOCATIONS
|
||
DCA TEMPA /SAVE POINTER TO LDBFPT
|
||
TAD TEMPA /GET LDBFPT
|
||
IAC
|
||
DCA TEMPB /SAVE POINTER TO LDBCHR
|
||
TAD I TEMPA /GET FILLER WAITING
|
||
TAD I TEMPB /ANY CHARS LEFT TO ECHO FROM BEFORE ?
|
||
SZA CLA
|
||
JMP RECIN4 /YES SO ENTER DEFERRED ECHO MODE
|
||
TAD I TEMP4 /GET CHRTAB BITS FOR THIS CHARACTER
|
||
SPA CLA /IS CHAR A BREAK CHAR ?
|
||
JMP RECIN4 /YES SO ENTER DEFERRED ECHO MODE
|
||
JMS RECIN6 /PUT CHAR INTO THE INPUT CHUNKS
|
||
TAD TEMP5 /GET CHAR TO ECHO
|
||
AND [0177 /SEVEN BITS ONLY
|
||
TAD (-15 /TEST FOR CARRIAGE RETURN
|
||
SNA CLA
|
||
JMP RECI36 /CHAR IS A CR
|
||
TAD TEMP5 /GET CHAR TO ECHO
|
||
DCA I TEMPB /AND PUT IT INTO LDBCHR
|
||
TSTART, JMS TTYGO /TRY TO START THE TTY
|
||
JMP LOOP /AND BACK TO THE BIG LOOP
|
||
/TRY TO ESTABLISH A CONNECT TO A HOST WITH AN MCR
|
||
CONTYP, TAD (NEITAB-1 /TRY TO FIND MCR IN NEITAB [1(20)]
|
||
DCA TEMPB
|
||
CONSC, ISZ TEMPB
|
||
TAD I TEMPB
|
||
AND (1000 /DOES IT HAVE AN MCR
|
||
SZA CLA /NO
|
||
JMP CONFD /MCR FOUND
|
||
TAD (-NEIEND /CHECK FOR END OF TABLE
|
||
TAD TEMPB
|
||
SZA CLA
|
||
JMP CONSC /CONTINUE SCAN
|
||
JMP CONDN
|
||
|
||
PAGE
|
||
|
||
/HERE TO SET DEFERRED ECHO MODE
|
||
RECI37, 0
|
||
TAD DDB
|
||
IOF /IN CASE NEED TO CALL ISBDDC
|
||
DCA INTDDB
|
||
NLOAD 1 /DEFERRED ECHO MODE BIT
|
||
JMS ISBDDC /SET BIT IN DEVDDC
|
||
JMS RECI42 /PUT STATUS INTO THE MESSAGE
|
||
JMP I RECI37
|
||
|
||
/HERE TO SET DEFERRED ECHO MODE
|
||
RECIN4, JMS RECI37 /SET DEFERRED-ECHO MODE
|
||
|
||
/HERE IF TTY IS IN DEFERRED ECHO MODE
|
||
RECIN5, JMS RECIN6 /PUT CHAR INTO THE INPUT CHUNKS
|
||
TAD DDB
|
||
IOF /IN CASE NEED TO CALL ISBDDC
|
||
DCA INTDDB
|
||
TAD (CHRXOF /MASK FORXOF BIT
|
||
AND I TEMP4 /MASK AGAINST CHRTAB BITS
|
||
SNA CLA
|
||
JMP LOOP /NOT AN XOF
|
||
TAD I TEMP7 /GET DEVDDC
|
||
AND [0040 /MASK FOR TTY PAGE
|
||
SNA CLA
|
||
JMP LOOP /NOT IN TTY PAGE
|
||
JMP RCX
|
||
|
||
/HERE TO PUT AN INPUT CHAR INTO THE CHUNKS
|
||
RECIN6, 0
|
||
TAD TEMP6 /GET ADR OF DEVBF1
|
||
IAC
|
||
DCA TEMP2 /SAVE POINTER TO DEVBF2
|
||
TAD I TEMP2 /GET DEVBF2(=POINTER TO DATA COUNT)
|
||
SZA CLA
|
||
JMP RECI62
|
||
NL1
|
||
JMS RECI70 /PUT COUNT INTO THE CHUNKS
|
||
TAD I TEMP3 /GET LDBIPT
|
||
DCA I TEMP2 /SET DEVBF2
|
||
NL1 /TYPE=1 FOR DATA
|
||
JMS RECI70 /PUT LINE NUMBER INTO THE CHUNKS
|
||
RECI62, TAD TEMP5 /GET THE CHARACTER WE JUST GOT
|
||
JMS RECI70 /PUT IT INTO THE CHUNKS
|
||
TAD I TEMP2 /GET DEVBF2
|
||
DCA TEMP2
|
||
RCKFLD
|
||
ISZ I TEMP2 /COUNT IT
|
||
TABFLD
|
||
JMP I RECIN6
|
||
|
||
/HERE TO PUT STATUS INTO INPUT STRING FOR A LINE
|
||
RECI42, 0
|
||
NLOAD 1 /MASK FOR NEED TO SEND STATUS
|
||
AND I DDBSTS /CHECK AGAINST DEVSTS
|
||
SNA CLA
|
||
JMP I RECI42 /DON'T NEED TO
|
||
TAD TEMP6 /GET POINTER TO DEVBF1
|
||
IAC /MAKE INTO POINTER TO DEVBF2
|
||
DCA TEMP1
|
||
DCA I TEMP1
|
||
NLOAD 4 /CHAR COUNT FOR STATUS IS ALWAYS 4 CHARS
|
||
JMS RECI70
|
||
NL3 /STATUS IS TYPE 3
|
||
JMS RECI70 /PUT CODE INTO THE MESSAGE
|
||
JMS RECI70 /STC=0
|
||
TAD (DEVDSL /GET EXTRA 2 BITS OF STATUS STORED
|
||
TAD DDB
|
||
DCA TEMP1 /SAVE ADDRESS TO STATUSBITS
|
||
TAD I TEMP1
|
||
AND (140 /MASK ONLY DESIRED BITS
|
||
DCA TEMP1 /SAVE BITS
|
||
TAD I TEMP7 /GET DEVDDC
|
||
AND [0177 /SEVEN BITS ONLY
|
||
TAD (0200 /ADD EXTENSIBLE BIT
|
||
JMS RECI70 /PUT 1ST HALF OF STATUS INTO STRING
|
||
TAD I TEMP7 /GET DEVDDC AGAIN
|
||
BSW
|
||
CLL RAR
|
||
AND (0037 /STRIP EXTRA BITS
|
||
TAD TEMP1 /ADD DTR R,C BITS
|
||
JMS RECI70 /PUT INTO THE STRING
|
||
NLOAD 7776 /MASK FOR NEED-TO-SEND-STATUS BIT
|
||
IOF
|
||
AND I DDBSTS
|
||
DCA I DDBSTS
|
||
JMP I RECI42
|
||
/HERE TO PUT A CHARACTER INTO THE CHUNKS
|
||
/ CALL JMS RECI70 WITH CHAR IN AC
|
||
/ RETURN
|
||
RECI70, 0
|
||
IOF
|
||
DCA INTMP4 /SAVE CHAR
|
||
TAD (LDBIPT
|
||
TAD DDB
|
||
DCA TEMP3 /SAVE POINTER TO LDBIPT
|
||
TAD I TEMP6 /GET DEVBF1
|
||
SZA CLA
|
||
JMP RECI72 /ALREADY HAVE AT LEAST ONE CHUNK
|
||
JMS ERSGET /GET A CHUNK
|
||
DCA I TEMP6 /SET DEVBF1
|
||
TAD I TEMP6 /GET DEVBF1 AGAIN
|
||
DCA I TEMP3 /SET LDBIPT
|
||
RECI72, TAD I TEMP3 /GET LDBIPT
|
||
IAC
|
||
AND [CNKSIZ-1
|
||
SZA CLA
|
||
JMP RECI75
|
||
TAD I TEMP3 /GET LDBIPT
|
||
AND [-CNKSIZ /MAKE ADR OF LINK WORD
|
||
DCA INTMP3 /SAVE ADR OF LINK WORD
|
||
JMS ERSGET /GET ANOTHER CHUNK
|
||
RCKFLD
|
||
DCA I INTMP3 /SET LINK ADR IN PREVIOUS CHUNK
|
||
TAD I INTMP3 /GET CHUNK ADR AGAIN
|
||
TABFLD
|
||
DCA I TEMP3 /SET LDBIPT
|
||
RECI75, TAD I TEMP3 /GET ADR OF PREVIOUS CHAR
|
||
DCA INTMP3
|
||
NLOAD 3777 /MASK FOR LAST DATA BIT
|
||
RCKFLD
|
||
AND I INTMP3 /STRIP PREVIOUS CHAR OF LAST BIT
|
||
DCA I INTMP3 /AND SAVE IT AGAIN WITHOUT BIT
|
||
ISZ INTMP3 /ADVANCE TO NEXT CHAR SLOT
|
||
NLOAD 4000 /MASK FOR LAST CHAR IN CHUNK
|
||
TAD INTMP4 /GET CHAR
|
||
DCA I INTMP3
|
||
TABFLD
|
||
ISZ I TEMP3 /ADVANCE LDBIPT
|
||
ION
|
||
JMP I RECI70 /RETURN TO CALLER
|
||
|
||
PAGE
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** DDCMP - XMTINT ***
|
||
/ *** INTERUPT LEVEL TTY HANDLING ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
/HERE AT INTERRUPT LEVEL TO GET NEXT CHAR TO SEND TO A TTY
|
||
/ CALL LOAD INTDDB WITH ADR OF BLOCK
|
||
/ JMS XMTINT WILL FIND NEXT CHAR AND TYPE IT
|
||
/ RETURN WILL CLRACT IF ALL DONE
|
||
/ AC MAY CONTAIN GARBAGE ON RETURN
|
||
/
|
||
/ TEMPORARY STOARAGE IS:
|
||
/ INTMP7 /POINTER TO DEVTIM
|
||
/ INTMP6 /CHAR TO TYPE
|
||
/ INTMP5 /POINTER TO DEVSTS
|
||
|
||
XMTDIS, JMP I XMTINT
|
||
XMTINT, 0
|
||
|
||
/CLEAR IRMA BIT
|
||
NLOAD DEVSTS /RELATIVE ADR OF STATUS WORD
|
||
TAD INTDDB
|
||
DCA INTMP5 /SAVE POINTER TO DEVSTS
|
||
TAD (DEVTIM /RELATIVE ADR OF DEVICE TIME
|
||
TAD INTDDB /MAKE ABSOLUTE
|
||
DCA INTMP7 /SAVE POINTER TO DEVTIM
|
||
|
||
/CLEAR THE IRMA BIT
|
||
Q=-IRMBIT-1
|
||
NLOAD Q /MASK TO CLEAR IRMA BIT
|
||
AND I INTMP5
|
||
DCA I INTMP5
|
||
|
||
/SEE IF WE ARE SIMULATING A TAB
|
||
TAD (CHRBLA /POINT TO A WORD WHICH HAS HORIZONTAL MOTION BIT ON
|
||
DCA INTMP1 /STORE ADDRESS OF THIS WORD
|
||
NL4 /MASK FOR TAB SIMULATION BIT
|
||
AND I INTMP5 /LOOK AT STATUS
|
||
SZA CLA
|
||
JMP IXMT33 /YES, CONTINUE
|
||
|
||
/CHECK TO SEE IF WE ARE TIMING A FILLER
|
||
TAD I INTMP7 /GET DEVTIM
|
||
SZA CLA /ARE WE DOING A FILLER ?
|
||
JMP IXMT92 /YES SO JUST CLEAR THE INTERRUPT
|
||
|
||
/FIRST CHECK IF THERE IS ANY XON/XOF LEVEL OUTPUT
|
||
TAD (LDBXPT
|
||
TAD INTDDB
|
||
DCA INTMP4
|
||
TAD I INTMP4 /PICK UP POINTER
|
||
SZA
|
||
JMP IXMT15 /YES THERE IS XON/XOF OUTPUT
|
||
ISZ INTMP4 /NOW TRY FILL CLASS POINTER
|
||
TAD I INTMP4
|
||
SNA /IS THIS POINTER READY ?
|
||
JMP IXMT17 /KEEP LOOKING
|
||
|
||
/FOLLOWING IS USED BOTH FOR XON/XOF LEVEL, AND FOR FILL LEVEL OUTPUT
|
||
IXMT15, ISZ I INTMP4 /ADVANCE MEMORY COPY OF POINTER
|
||
IAC /ADVANCE AC COPY OF POINTER
|
||
DCA INTMP1
|
||
TAD I INTMP1 /GET NEXT CHAR
|
||
SMA /IS THIS LAST CHAR IN STRING ?
|
||
JMP IXMT30 /NO SO JUST TYPE IT
|
||
IXMTA, DCA INTMP6 /SAVE CHAR
|
||
DCA I INTMP4 /CLEAR POINTER
|
||
JMP IXMT32 /GO TYPE THE CHAR
|
||
|
||
IXMT17, ISZ INTMP4 /ADVANCE TO LDBCHR
|
||
TAD I INTMP4 /SEE IF THERE IS A CHAR IN SLOT
|
||
SNA /WAS THERE A CHAR ?
|
||
JMP IXMT20 /NO - TRY FOR OUTPUT
|
||
JMP IXMTA
|
||
|
||
/CHECK TO SEE IF THERE ARE ANY OUTPUT CHARS
|
||
IXMT20, Q=DEVDDC-DEVSTS
|
||
NLOAD Q
|
||
TAD INTMP5 /MAKES ADR OF DEVDDC
|
||
DCA IXPT
|
||
NLOAD 4 /MASK FOR OUTPUT FROZEN WITH XOF
|
||
AND I IXPT /COMPARE AGAINST DEVDDC
|
||
SNA CLA /WAS OUTPUT FROZEN ?
|
||
IXMTC, JMS IGTOCH /TRY TO GET ANOTHER CHAR FROM THE CHUNKS
|
||
JMP IXMT90 /NONE LEFT OR OUTPUT FROZEN
|
||
DCA INTMP6 /SAVE CHAR
|
||
TAD (-ESC
|
||
TAD INTMP6 /CHECK FOR ESC CHAR
|
||
SZA CLA
|
||
JMP IXMT32 /NORMAL CHAR
|
||
/ESC ESC ESCAPE
|
||
/ESC 1 SET IMAGE MODE
|
||
/ESC 2 CLEAR IMAGE MODE
|
||
JMS IGTOCH
|
||
HLT /MUST HAVE CHAR FOLLOWING
|
||
TAD (-1
|
||
SNA
|
||
JMP SETIMG /SET IMAGE MODE
|
||
TAD (-1 /CLEAR IMAGE MODE
|
||
SZA CLA
|
||
JMP IXMT32 /OUTPUT ESC CHAR
|
||
CLRIMG, TAD (7757
|
||
AND I IXPT
|
||
CLRIM1, DCA I IXPT
|
||
JMP IXMTC
|
||
SETIMG, TAD (7757
|
||
AND I IXPT
|
||
TAD (20
|
||
JMP CLRIM1
|
||
IXPT, 0
|
||
|
||
/HERE TO TYPE NEXT CHAR
|
||
IXMT30, DCA INTMP6 /SAVE CHAR
|
||
IXMT31,
|
||
IXMT32, TAD INTMP6 /GET CHARACTER AGAIN
|
||
AND [0177 /7 BITS ONLY
|
||
TAD (CHRTAB /MAKE POINTER INTO THE CHARACTER TABLE
|
||
DCA INTMP1 /ADDRESS OF CHARACTER TABLE ENTRY
|
||
NLOAD Q
|
||
TAD INTMP5 /MAKES ADDR DEVDDC
|
||
DCA INTMP4 /SAVE
|
||
TAD I INTMP4 /SEE IF PIM MODE
|
||
AND (20
|
||
SZA CLA /NOT PIM MODE
|
||
JMP IXMTB /IF PIM SKIP CHK FOR TAB, FILLER
|
||
TAD (CHRHT
|
||
AND I INTMP1 /GET HT BIT
|
||
SNA CLA
|
||
JMP IXMT50
|
||
/HERE TO CHECK IF TTY HAS HARDWARE TABS
|
||
TAD I INTMP4 /DEVDDC
|
||
AND (200 /HDW TAB BIT OR IMAGE OUTPUT
|
||
SZA CLA /SKIP IF NEITHER
|
||
JMP IXMTD /EITHER OR BOTH, SO PRINT TAB
|
||
/START OF TAB SIMULATION
|
||
NL4
|
||
TAD I INTMP5
|
||
DCA I INTMP5
|
||
TAD (CHRBLA /POINT TO CHARACTER WITH HMO BIT ON
|
||
DCA INTMP1 /SAVE ADDRESS
|
||
JMP IXMT33
|
||
IXMTD, TAD (LDBCOL /ADD TO NEXT TAB COL WHEN ISSUE HARDWARE TAB
|
||
TAD INTDDB
|
||
DCA INTMP3
|
||
TAD I INTMP3 /GET COL POSITION
|
||
TAD (10
|
||
AND (7770
|
||
TAD (-1 /IXMT50 ADDS ONE TO LDBCOL
|
||
DCA I INTMP3
|
||
JMP IXMT50
|
||
PAGE
|
||
IXMT50,
|
||
NLOAD CHRFLL /MAKE MASK FOR CHAR NEEDS A FILLER
|
||
AND I INTMP1 /GET SPECIAL CHARACTER BITS
|
||
SNA CLA
|
||
JMP IXMT33 /DOESN'T NEED A FILLER
|
||
TAD INTMP6 /GET CHARACTER AGAIN(MUST BE IN RANGE 10-15)
|
||
AND [0007 /THREE BITS ONLY
|
||
TAD (LDBFIL
|
||
TAD INTDDB
|
||
DCA INTMP2
|
||
TAD I INTMP2 /GET TIME TO STALL ON THIS CHAR
|
||
SNA /IS THERE ANY FILLER FOR THIS ONE ?
|
||
JMP IXMT33 /NO
|
||
DCA I INTMP7 /AND SET DEVTIM
|
||
IXMT33, TAD (LDBCOL /RELATIVE ADR OF HORIZONTAL POSITION
|
||
TAD INTDDB /MAKE ABSOLUTE
|
||
DCA INTMP3 /SAVE LDBCOL ADDRESS
|
||
TAD I INTMP1 /GET CHRTAB BITS
|
||
AND (CHRHMO /MASK FOR HORIZONTAL MOTION
|
||
SZA CLA
|
||
ISZ I INTMP3 /INCREMENT HORIZONTAL POSITION
|
||
NL4 /TAB BIT MASK
|
||
AND I INTMP5 /SEE IF ON
|
||
SNA CLA /SKIP IF YES
|
||
JMP IXMT34 /JMP IF NOT
|
||
TAD I INTMP3 /GET POSITION
|
||
AND [7 /LOOK AT LOW ORDER BITS
|
||
SZA CLA /SKIP IF AT TAB STOP
|
||
JMP IXMT61
|
||
TAD I INTMP5 /GET STATUS
|
||
AND (7773
|
||
DCA I INTMP5
|
||
IXMT61, TAD (240 /GET EVEN PARITY BLANK [1(21)]
|
||
DCA INTMP6 /STORE AS CHARACTER
|
||
JMP IXMT38 /TYPE IT
|
||
IXMT34,
|
||
TAD I INTMP1 /GET CHRTAB BITS
|
||
AND (CHRCR /MASK FOR CARRIAGE RETURN
|
||
SZA CLA /IS CHAR A CR ?
|
||
DCA I INTMP3 /YES SO RESET TO COLUMN 0
|
||
|
||
IXMT38, TAD I INTMP3 /GET CHAR COUNT
|
||
ISZ INTMP3 /POINT TO WIDTH
|
||
NEGATE
|
||
TAD I INTMP3
|
||
SPA CLA /GT=0 OK
|
||
JMP FRCR /FORCE CARRIGE RETURN IF EXCEED LINE WIDTH
|
||
IXMTB, IFNZRO TTYN <
|
||
TAD INTDDB
|
||
TAD (-CTYBLK
|
||
SZA CLA /IS THIS CHAR FOR THE CTY
|
||
JMP INTYPE /NO SO BRANCH TO DC02F OR KL8E ROUTINE
|
||
>/END OF IFNZRO TTYN
|
||
|
||
TAD INTMP6 /RETREIVE CHAR
|
||
IXMT60, CTYTLS /ECHO IT
|
||
JMP XMTDIS
|
||
/HERE WHEN NOTHING FOR A TTY TO DO
|
||
IXMT90, NL3777 /MASK TO STRIP ACTIVE BIT
|
||
AND I INTMP5 /CLEAR ACTIVE BIT
|
||
DCA I INTMP5
|
||
|
||
IXMT92, IFNZRO TTYN <
|
||
TAD INTDDB
|
||
TAD (-CTYBLK
|
||
SZA CLA
|
||
JMP XMTDIS /CLEAR TTY
|
||
>/END OF IFZERO TTYN
|
||
|
||
CTYTCF /CLEAR TELEPRINTER FLAG
|
||
JMP XMTDIS /DISMISS CALL TO XMTINT
|
||
FRCR, TAD (LDBFPT /SET UP FILL POINTER
|
||
TAD INTDDB
|
||
DCA INTMP3
|
||
TAD I INTMP4 /CHECK FOR NO CRLF
|
||
SPA CLA
|
||
JMP IXMTB /NO AUTO CRLF
|
||
TAD (CRLMSG /POINT TO CRLF LITERAL
|
||
DCA I INTMP3 /STORE AT FILL POINTER
|
||
ISZ INTMP3 /POINT TO LDBCHR
|
||
TAD INTMP6 /CHAR TO BE TRANSMITTED AFTER CRLF
|
||
DCA I INTMP3 /SAVE AT LDBCHR
|
||
NL4 /CHECK TO SEE IF SIM TAB
|
||
AND I INTMP5
|
||
SNA CLA
|
||
JMP FRCR1 /SIMULATING TAB
|
||
TAD I INTMP5 /TURN OFF BIT TO SIMULATE TAB
|
||
AND (7773
|
||
DCA I INTMP5
|
||
TAD (11 /OUTPUT A TAB AFTER CR
|
||
DCA I INTMP3
|
||
FRCR1, TAD (15 /CARRIAGE RETURN
|
||
JMP IXMT30 /OUTPUT CHAR
|
||
/TYPE 4 = CHARACTER GOBBLER
|
||
RCVGOB,
|
||
RCGOB1, TAD DDB
|
||
IOF /DISABLE INTERRUPTS FOR A WHILE
|
||
DCA INTDDB /SETUP FOR CALL TO IGTOCH
|
||
JMS IGTOCH /GET ANY OUTPUT CHARS
|
||
JMP RCVTT0
|
||
NEGATE
|
||
TAD (ESC
|
||
SNA CLA
|
||
JMP CMP1 /ESC CHAR FOUND
|
||
RCGOB2, ION
|
||
CLA
|
||
JMP RCGOB1
|
||
/INSERT ESC 1 FOR SET IMAGE MODE
|
||
/ESC 2 MEANS CLEAR IMAGE MODE
|
||
CMP1, JMS IGTOCH
|
||
HLT /ALWAYS 2 CHAR IN ESC SEQUENCE
|
||
TAD (-1 /CHECK FOR 1
|
||
SNA
|
||
JMP SETI /SET IMAGE MODE
|
||
TAD (-1
|
||
SZA CLA /CLEAR IMAGE
|
||
JMP RCGOB2 /NEITHER JUST AN ESC CHAR
|
||
TAD I TEMP6 /GET STATUS
|
||
AND (7757 /CLEAR BIT
|
||
CLRI, DCA I TEMP6
|
||
JMP RCGOB2
|
||
SETI, TAD I TEMP6
|
||
AND (7757
|
||
TAD (20 /SET IMAGE MODE
|
||
JMP CLRI
|
||
PAGE
|
||
LISTOG LPTN
|
||
|
||
IFNZRO LPTN <
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** LPT SERVICE ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
/DDCMP COMPRESSES LINE PRINTER DATA AS FOLLOWS
|
||
/ 1CCCCCCC CCCCCCC IS CHARACTER
|
||
/ 01XXXXXX XXXXXX IS NUMBER OF BLANKS
|
||
/ 001XXXXX XXXXX IS REPETITION FOR FOLLOWING CHAR
|
||
/DEVDDC BITS
|
||
/ 0001 FATAL ERROR
|
||
/ 0002 OFF LINE
|
||
/ 0004 OUT OF PAPER
|
||
/ 0010 PAPER JAM
|
||
/ 0020 OFF LINE BECAUSE OF OPERATOR
|
||
/ 0040 SLEW ERROR
|
||
/ 0100 HAMMER FIRING ERROR
|
||
/ 0200 LOW ON PAPER
|
||
/ 0400 STACKER FULL
|
||
/ 1000 OUT OF INK
|
||
/ 2000 PRINT QUALITY BAD
|
||
|
||
LPTVTB, DCA INTMP1 /SAVE MASK FOR VFU SEARCH
|
||
TAD [0012 /LINE FEED
|
||
DCA LPTCHR
|
||
TAD LPTLNE /LINE # WE ARE ON
|
||
DCA INTMP3 /SAVE POINTER TO VFU TAPE
|
||
LPTVT3, ISZ LPTLNE
|
||
TAD I LPTLNE /GET CURRENT LINE STOPS
|
||
SPA
|
||
JMP LPTVT4 /END OF TAPE SO DO A FF
|
||
AND INTMP1 /USE MASK ON IT
|
||
SNA CLA /IS THIS HOLE PUNCHED ON TAPE ?
|
||
JMP LPTVT3
|
||
TAD LPTLNE /GET POINTER TO VFU TABLE
|
||
CMA /MAKE -LPTLNE-1
|
||
TAD INTMP3 /MAKES # OF LINES TO SKIP
|
||
JMP LPTX15 /ZERO LPTCOL THEN GO PRINT CHAR
|
||
LPTVT4, TAD LPTLNE
|
||
NEGATE
|
||
TAD INTMP3 /LEAVES NUMBER OF LINES TO SKIP-1
|
||
SZA CLA /WERE WE ON LAST LINE ?
|
||
JMP LPT014 /NO SO DO A FORM FEED
|
||
JMP LPTX14 /YES SO DO A LINE FEED
|
||
|
||
LPTHN2, TAD [0040
|
||
ISZ LPTZCT
|
||
JMP INTLP4 /PRINT SPACE
|
||
NL6000
|
||
TAD LPTOPV
|
||
CDFINS
|
||
DCA LPTPIV
|
||
CDFCNK
|
||
JMP INTLP0+1
|
||
|
||
LPTOFN, 0 /SEND OFFLINE MESSAGE FOR LPT
|
||
/ NL0 /CLEAR AC [1(17)] ALL CALLERS CLEAR AC
|
||
TAD (LPTBLK
|
||
DCA INTDDB
|
||
NL2
|
||
JMS ISBDDC
|
||
JMP I LPTOFN
|
||
INTLPT,
|
||
IFNDEF LA180 < LPTSKF /SKIP ON LPT FLAG
|
||
>/END OF IFNDEF LA180
|
||
IFDEF LA180 < PBST >/END OF IFDEF LA180 SKIP IF INTR FROM LPT
|
||
JMP INTLP8 /NOT LPT SO KEEP LOOKING
|
||
JMS INTLP0
|
||
JMP INTDIS
|
||
|
||
INTLP8, TAD I (LPTBLK+DEVSTS /GET LPT STATUS
|
||
SPA CLA /SKIP IF NOT ACTIVE
|
||
LPXXSE, LPTSKE /SKIP ON LPT ERROR ########
|
||
/ INSTRUCTION CHANGED BY SYSCHK FOR LS8E AND LA180
|
||
JMP INTLP9 /NOT LPT ERROR OR NOT ACTIVE
|
||
IFNDEF LA180 <
|
||
JMS LPTOFN /SEND OFF LINE MESSAGE
|
||
NL3777 /CLEAR ACTIVE
|
||
AND I (LPTBLK+DEVSTS
|
||
DCA I (LPTBLK+DEVSTS
|
||
LPTCIE /CLEAR INTERRUPT ENABLE
|
||
JMP INTDIS
|
||
>/END OF IFNDEF LA180
|
||
/HERE ONCE PER CLOCK TICK TO SEE IF LPT NEEDS SERVICE
|
||
CLKLPT, IOF /DISABLE INTERRUPTS WHILE CHECK LPT
|
||
TAD I (LPTBLK+DEVSTS /GET ACTIVE/INACTIVE STATUS
|
||
SMA CLA /IS LPT ACTIVE ?
|
||
JMP STRLPT /NO TRY TO START IT
|
||
ISZ I (LPTBLK+DEVTIM /YES HAVE WE TIMED OUT ?
|
||
JMP CLKLP8 /HASN'T TIMED OUT
|
||
/HERE WHEN LPT TIMES OUT
|
||
JMS LPTOFN /SEND OFF LINE MESSAGE
|
||
NL2000
|
||
CDFINS
|
||
TAD LPTPIV
|
||
SMA /IS PIVOT ALREADY A JMP(I.E. OPCODE 5) ?
|
||
DCA LPTOPV /NO SO SAVE PIVOT
|
||
NL0
|
||
TAD LPTCOL
|
||
CMA
|
||
DCA LPTZCT
|
||
TAD (JMP I LPTHNG
|
||
DCA LPTPIV
|
||
CDFCNK
|
||
IFNZRO FTTRBL <
|
||
TAD (LPTMSG-1
|
||
DCA ERRFLG /LEAVE MSG FOR OPERATOR
|
||
>/END OF IFNZRO FTTRBL
|
||
TAD [0015 /CARRIAGE RETURN
|
||
IFDEF LA180 <
|
||
CMA /LA180 INTERFACE REQUIRES COMP DATA
|
||
DBTD >/END OF IFDEF LA180 TRANSMIT DATA
|
||
IFNDEF LA180 < LPTSTB /PRINT IT
|
||
>/END OF IFNDEF LA180
|
||
JMP CLKLP8
|
||
|
||
/HERE TO TRY TO START LPT WHEN NOT ACTIVE
|
||
STRLPT,
|
||
TAD I (LPTBLK+DEVOAD /GET OUTPUT CHAR ADR
|
||
LPXYSE, LPTSKE /DON'T TRY IF LPT IS IN TROUBLE ########
|
||
/ INSTRUCTION CHANGED BY SYSCHK FOR LS8E AND LA180
|
||
SNA CLA /ANY OUTPUT FOR LPT ?
|
||
JMP CLKLP7 /NO
|
||
NL1 /NEED FOR LS8E
|
||
IFNDEF LA180 <
|
||
LPTSIE /SET INTERRUPT ENABLE
|
||
>/END OF IFNDEF LA180
|
||
IFDEF LA180 < DBSE >/ENABLE INTERRUPT END OF IFDEF LA180
|
||
NLOAD 4000 /FLAG DEVICE IS ACTIVE
|
||
TAD I (LPTBLK+DEVSTS
|
||
DCA I (LPTBLK+DEVSTS
|
||
JMS INTLP0 /BEGIN PRINTING
|
||
CLKLP8, ION
|
||
NL0 /BECAUSE THERE MAY BE GARBAGE IN AC
|
||
JMP CLKLP9
|
||
>/END OF IFNZRO LPTN
|
||
LISTOG LPTN
|
||
/HERE WHEN DONE WITH A MESSAGE(NUMBERED OR UNNUMBERED)
|
||
RCVADV,
|
||
NL0
|
||
IOF
|
||
TAD (CTLSIZ
|
||
TAD RCVTKR /ADVANCE TO NEXT SLOT
|
||
TAD (-RCVLIM
|
||
SNA /CHECK FOR OUT OF RANGE
|
||
TAD (RCVQUE-RCVLIM
|
||
TAD (RCVLIM /ADJUST
|
||
DCA RCVTKR /SAVE NEW SLOT ADR
|
||
JMP LOOP /REENTER HUGE LOOP
|
||
|
||
IACTCK, 0
|
||
DCA INTDDB /SAVE DEVICE BLOCK ADR
|
||
NLOAD DEVSTS
|
||
TAD INTDDB
|
||
DCA IDBSTS
|
||
TAD I IDBSTS /GET DEVSTS
|
||
SMA CLA /SKIP IF DEVICE IS ACTIVE
|
||
JMP INTDIS /DISMISS INTERRUPT
|
||
JMP I IACTCK /RETURN TO CALLER
|
||
LISTOG LPTN
|
||
IFNZRO LPTN < PAGE
|
||
LPTBBB, JMS IGTEXN /GET THE EXTENSIBLE NUMBER = COUNT
|
||
JMP LPTFIN /NONE SO DONE
|
||
IFNZRO FTDEBUG <
|
||
SNA
|
||
HLT
|
||
>/END OF IFNZRO FTDEBUG
|
||
TAD [-1
|
||
DCA LPTCNT
|
||
JMS IGTOCH
|
||
JMP LPTFIN
|
||
LPTGGG, NLM1 /PREPARE TO DECREMENT COUNT
|
||
TAD LPTCNT
|
||
SPA /ARE THERE CHARS LEFT ?
|
||
JMP LPTBBB /NO SO GET A COUNT
|
||
DCA LPTCNT /YES RESTORE COUNT
|
||
JMS IGTOCH /GET THE NEXT CHAR
|
||
JMP LPTFIN
|
||
DCA LPTCCH /SAVE CHAR AND FLAG BITS
|
||
TAD LPTCCH
|
||
AND [0200 /IS THIS A COMPRESSED CHAR ?
|
||
SZA CLA /IS THIS A NICE CHAR
|
||
JMP LPTFFF
|
||
LPTXXX, TAD LPTCCH /GET FLAG BITS AGAIN
|
||
AND (0100 /WAS THIS COMPRESSED BLANKS ?
|
||
SZA CLA
|
||
JMP LPTZZZ /YES
|
||
NLM1
|
||
TAD LPTCCH /GET COUNT
|
||
AND (0037
|
||
DCA LPTCCN
|
||
JMP LPTGGG /GO GET CHAR TO REPEAT
|
||
LPTZZZ, TAD LPTCCH
|
||
AND (0077 /LEAVE ONLY COUNT
|
||
DCA LPTCCN /SAVE COUNT
|
||
TAD [0040 /BLANK
|
||
LPTVVV, DCA LPTCCH
|
||
JMP INTLP0+1
|
||
>/END OF IFNZRO LPTN
|
||
LISTOG LPTN
|
||
/RECEIVE STATION CONTROL MSG FOR DEPOSIT
|
||
RCVDP, JMS BTSCN /SET UP ENTRY IN BOOT TABLE
|
||
TAD (11 /SET UP ACCEPT TYPE FOR TRANSMIT
|
||
DCA I TEMPA /PUT IN TABLE
|
||
ISZ TEMPA
|
||
JMS RADR /GO GET ADDRESS FOR MSG
|
||
/GET DATA FROM MSG AND DEPOSIT AS GO THRU IT
|
||
NLM1
|
||
TAD TEMPA /GET ADDRESS FROM TABLE
|
||
DCA TEMPA
|
||
TAD I TEMPA
|
||
DCA DFLD /CHANGE DATA FIELD INST
|
||
NLM1
|
||
TAD TEMPA
|
||
DCA TEMPA
|
||
TAD I TEMPA
|
||
DCA DADR /12 BITS OF DATA LOC
|
||
ISZ TEMPA
|
||
ISZ TEMPA /RE-ALLIGN POINTER
|
||
RCVDP2, JMS GETCHR
|
||
JMP RCVDP1 /DONE WITH MSG
|
||
DCA TEMP1 /SAVE LOW ORDER 6 BITS
|
||
JMS GETCHR /GET HIGH ORDER 6 BITS
|
||
JMP RJT /SEND REJECT IF MSG BAD
|
||
BSW
|
||
TAD TEMP1
|
||
DFLD, 0 /CHANGE DATA FIELD
|
||
DCA I DADR /SAVE VALUE
|
||
CDF 10 /POINT TO DEFAULT FIELD
|
||
ISZ DADR /BUMP ADDRESS
|
||
JMP RCVDP2 /CONTINUE
|
||
TAD DFLD
|
||
TAD (10 /BUMP TO NEXT FIELD
|
||
DCA DFLD /DONT CHECK FOR WRAP APOUND ASSUME FRIENDLY ENVIRONMENT
|
||
JMP RCVDP2
|
||
RCVDP1, TAD DADR
|
||
DCA I TEMPA /STORE IN TABLE FOR XMT OF ACCEPT
|
||
ISZ TEMPA
|
||
TAD DFLD
|
||
DCA I TEMPA
|
||
JMP RCVFLU
|
||
DADR, 0
|
||
/GET ADDRESS OF DATA FROM STATION CTRL MESSAGES
|
||
RADR, 0
|
||
JMS GETCHR /LOW ORDER 8 BITS
|
||
JMP RJT /SOMETHING WRONG
|
||
DCA I TEMPA /STORE IN TABLE
|
||
JMS GETCHR
|
||
JMP RJT
|
||
DCA TEMP1
|
||
TAD TEMP1
|
||
BSW
|
||
RTL
|
||
AND (7400
|
||
TAD I TEMPA
|
||
DCA I TEMPA
|
||
ISZ TEMPA
|
||
TAD TEMP1
|
||
RAR
|
||
AND (70
|
||
TAD (CDF
|
||
DCA I TEMPA
|
||
ISZ TEMPA
|
||
JMP I RADR
|
||
RJT, ISZ TEMPB /TEMPB POINTS TO BEG OF ENTRY IN TABLE
|
||
NL0
|
||
TAD (13 /SET UP REJECT
|
||
DCA I TEMPB
|
||
JMP RCVFLU
|
||
/BOOT TYPE STATION CONTROL MESGS
|
||
/ONLY 3 OF THESE MSG ARE PROCESSED
|
||
/EXAMINE,DEPOSIT, AND GOTO
|
||
RCVBOT, JMS GTCHR /GET SNA ALREADY STORED AT RSNA
|
||
JMS GTCHR /TYPE
|
||
TAD (-3
|
||
SMA SZA
|
||
JMP RCVFLU
|
||
JMP NJMPA
|
||
|
||
PAGE
|
||
LISTOG LPTN
|
||
IFNZRO LPTN <
|
||
|
||
/HERE WHEN USER SENT LINE LONGER THAN PRINTER LINE
|
||
LPTWRP, TAD LPTCHR
|
||
DCA LPTOCH
|
||
TAD [0012 /PUT OUT A LINE FEED
|
||
JMP INTLP1
|
||
|
||
/HERE WHEN OUTPUT DATA FOR LPT IS EXHAUSTED
|
||
/FOLLOWING INSTRUCTION CHANGED TO NOP BY SYSCHK FOR LA180
|
||
LPTFIN, LPTCLF /CLEAR ANY FLAGS
|
||
JMS CLRACT
|
||
JMS ISTDDC /UPDATE DDCMP STATUS
|
||
LPXXCE,
|
||
IFDEF LA180 < DBCE >/END OF IFDEF LA180 DISABLE INTERRUPT
|
||
IFNDEF LA180 < LPTCIE >/CLEAR INTERRUPT ENABLE ########
|
||
/ INSTRUCTION CHANGED BY SYSCHK FOR LS8E
|
||
JMP I INTLP0 /RETURN TO CALLER
|
||
|
||
/HERE AT INTERRUPT LEVEL WHEN LPT INTERRUPTS
|
||
INTLP0, 0
|
||
NL0 /IN CASE CAME FROM SPECIAL CHAR CODE
|
||
TAD (LPTBLK
|
||
DCA INTDDB
|
||
LPTPIV, 7402 /LPT PIVOT(SET TO NOP, SKP OR JMP)
|
||
JMP INTLP6 /DO TAB FUNCTION
|
||
NLM1 /GET SET TO DECREMENT
|
||
TAD LPTCCN /DECREMENT COMPRESSED CHAR COUNT
|
||
SPA /ARE WE DECOMPRESSING ?
|
||
JMP LPTGGG /NO SO GET A CHAR FROM CHUNKS
|
||
LPTYYY, DCA LPTCCN /SAVE COMPRESSED CHAR COUNT
|
||
LPTFFF,
|
||
TAD LPTCCH /GET CHAR AGAIN
|
||
AND [0177 /SEVEN BITS ONLY
|
||
INTLP1, DCA LPTCHR /SAVE CHAR
|
||
INTLPA,
|
||
TAD LPTCHR
|
||
TAD (CHRTAB
|
||
DCA INTMP1
|
||
TAD I INTMP1
|
||
RTR
|
||
SZL SPA /SKIP IF NORMAL CHAR
|
||
JMP INTLP5 /SPECIAL MOTION OR FLUSH
|
||
|
||
IFNZRO FTLPLC < NL0 >
|
||
IFZERO FTLPLC < /SPECIAL HANDLING FOR LPT'S WITHOUT LOWER CASE
|
||
RAR /SHIFT BIT FOR LC INTO POSITION
|
||
SNL CLA /IS CHAR LOWER CASE ?
|
||
JMP INTLP2 /NOT LOWER CASE
|
||
TAD LPTCHR /GET CHAR AGAIN
|
||
TAD (-40 /CONVERT TO UPPER CASE
|
||
DCA LPTCHR /AND SAVE CHAR
|
||
>/END OF IFZERO FTLPC
|
||
|
||
INTLP2,
|
||
ISZ LPTCOL /THIS ADVANCES PRINTER ONE COLUMN
|
||
TAD LPTCOL
|
||
TAD (-LPTWID
|
||
SMA SZA CLA
|
||
JMP LPTWRP /NEED TO DO WRAP AROUND
|
||
|
||
INTLP3, NL0
|
||
TAD LPTCHR /GET CHAR AGAIN
|
||
INTLP4,
|
||
IFNDEF LA180 <
|
||
LPTSTB
|
||
>/END OF IFNDEF LA180
|
||
IFDEF LA180 < CMA
|
||
DBTD /TRANSMIT DATA
|
||
CMA >/END OF IFDEF LA180
|
||
TAD (-14
|
||
SNA CLA /WAS THIS A FORM FEED ?
|
||
TAD LPTTFF /YES
|
||
TAD LPTTCH /TIME FOR NORMAL CHAR
|
||
DCA I (LPTBLK+DEVTIM
|
||
JMP I INTLP0
|
||
LPTTFF, -100 /TIME FOR A FORM FEED ########
|
||
LPTTCH, -32 /TIME FOR A NORMAL CHARACTER ########
|
||
|
||
/HERE WHEN CHAR MAY BE SPECIAL MOTION
|
||
INTLP5, /CHECK IF CHAR TO BE FLUSHED
|
||
SNL CLA /IS CHAR GARBAGE ?
|
||
JMP LPTFLS /FLUSH CHAR & RETURN TO CALLER
|
||
TAD LPTCHR /GET CHAR AGAIN
|
||
TAD (LPTTBL-11
|
||
DCA INTMP1
|
||
TAD I INTMP1
|
||
SNA /IS THIS A TAB ?
|
||
JMP LPT011 /YES
|
||
SMA /IS THIS A FF OR A CR ?
|
||
JMP LPTVTB /NO
|
||
IAC
|
||
SNA /IS CHAR A CARRIAGE RETURN ?
|
||
JMP LPT015 /YES
|
||
/HERE TO PRINT A FF ON LPT
|
||
LPT014, NL0
|
||
TAD [0014
|
||
DCA LPTCHR
|
||
LPTX14, TAD (LPTVFU-1
|
||
DCA LPTLNE /WE ARE AT LINE 0 AGAIN
|
||
NLM2 /SAYS PRINT ONCE
|
||
LPTX15, DCA LPTRCT /SET REPETITION COUNT
|
||
TAD (NOP
|
||
DCA LPTPIV
|
||
LPT015, DCA LPTCOL /SET COLUMN 0 AGAIN
|
||
TAD [0015 /CARRIAGE RETURN
|
||
JMP INTLP4
|
||
|
||
/HERE TO SIMULATE A HORIZONTAL TAB ON LPT
|
||
LPT011, TAD LPTCOL /GET CURRENT COLUMN
|
||
AND (0007
|
||
TAD (-10
|
||
DCA LPTRCT /REPETITION COUNT
|
||
TAD (10
|
||
TAD LPTCOL
|
||
AND (7770
|
||
DCA LPTCOL
|
||
TAD [0040 /SPACE
|
||
DCA LPTCHR
|
||
TAD (NOP
|
||
DCA LPTPIV
|
||
JMP INTLP3 /GO PRINT FIRST COPY
|
||
|
||
INTLP6, ISZ LPTRCT /INCREMENT COUNT
|
||
JMP INTLP3 /PRINT CHAR
|
||
TAD (SKP
|
||
DCA LPTPIV
|
||
TAD LPTOCH
|
||
SNA
|
||
JMP INTLP0+1
|
||
DCA LPTCHR
|
||
DCA LPTOCH
|
||
JMP INTLPA
|
||
|
||
/HERE ON HUNG LPT
|
||
LPTHN1, ISZ LPTPIV
|
||
JMP LPT015
|
||
|
||
LPTFLS, DCA LPTCCN /HERE TO FLUSH CHARACTER
|
||
IFNZRO CDRN <
|
||
TAD I (CDRBLK+DEVSTS /SEE IF CDR ACTIVE
|
||
SMA CLA /SKIP IF ACTIVE
|
||
>/END OF IFNZRO CDRN
|
||
JMP INTLP0+1 /DO NEXT CHARACTER
|
||
IFNZRO CDRN <
|
||
JMP LPTFIN /TURN OFF LPT ACTIVE; TICKS
|
||
/WILL START IT UP AGAIN
|
||
>/END OF IFNZRO CDRN
|
||
|
||
PAGE
|
||
>/END OF IFNZRO LPTN
|
||
LISTOG LPTN
|
||
DEFINE INSRT1 <
|
||
TOOMNY, JMS GETEXN /GET SLA
|
||
DCA TEMP2 /SAVE IT
|
||
NL2 /REASON
|
||
DISCON, DCA TEMPA /SAVE REASON
|
||
TAD DISREA /GET CURRENT REASON
|
||
SZA CLA /CHECK IF WE'VE GOT DISCONNECT WAITING
|
||
/ HLT /TOO MANY TOO FAST
|
||
JMS I [DMPTRP
|
||
TAD TEMP2 /PICK UP SLA
|
||
DCA DISSLA /SAVE IT
|
||
TAD RSNA
|
||
DCA DISSNA
|
||
TAD TEMPA /GET REASON
|
||
DCA DISREA /STORE AND INDICATE THAT WE NEED TO SEND DISCONNECT
|
||
JMP RCVFLU /GET RID OF MESSAGE
|
||
|
||
>/END OF DEFINE INSRT1
|
||
|
||
|
||
IFZERO LPTN <PAGE>
|
||
LISTOG CDRN
|
||
IFNZRO CDRN <
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** CDR SERVICE ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
/DATA SENT TO DECSYSTEM-10 IS ESSENTIALY IMAGE MODE
|
||
/ IF BIT 100 IS ZERO THEN DATA IS LOW ORDER 6BITS OF TWO CHARS
|
||
/ IF BIT 100 IS SET THEN DATA IS COMPRESSED:
|
||
/ BITS 060 SPECIFIY ZONE PUNCH:
|
||
/ 0 IS NO ZONE PUNCH
|
||
/ 1 IS 12 PUNCH
|
||
/ 2 IS 11 PUNCH
|
||
/ 3 IS 0 PUNCH
|
||
/ BITS 17 SPECIFY COLUMN PUNCH:
|
||
/ 0 IS NO PUNCH
|
||
/ 1 IS 1 PUNCH
|
||
/ 2 IS 2 PUNCH
|
||
/ ETC.
|
||
/ TRAILING BLANKS ARE NOT TRANSMITTED.
|
||
/ REPRESENTATION MEANING
|
||
/ 1CCCCCCC CCCCCCC = SEVEN BIT ENCODED CHARACTER
|
||
/ 01XXXXXX XXXXXX =COUNT OF BLANKS
|
||
/ 001XXXXX XXXXX = COUNT OF REPETITIONS, 0-31
|
||
/ 0000CCCC
|
||
/ CCCCCCCC CCCCCCCCCCCC = TWELVE BIT ENCODED CHARACTER
|
||
/
|
||
/ DEVDDC - DDCMP STATUS WORD
|
||
/ 0001 CARD READER ERROR(MASTER ERROR)
|
||
/ 0002 HOPPER EMPTY
|
||
/ 0004 REGISTRATION ERROR
|
||
/ 0010 INVALID PUNCH
|
||
/ 0020 STACKER FULL
|
||
/ 0040 JAM WHILE FEEDING
|
||
/ 0100 PICK FAILURE
|
||
/ 0200 END OF FILE CARD
|
||
/ 0400 HDW EOF
|
||
/ 1000 CDR OVERRAN THE PROCESSOR
|
||
/ 2000 CDR HAS GONE OFF LINE
|
||
/ 4000 CDR STOPPED(MAY BE CLEARED WITH A SET MODE)
|
||
/
|
||
/ DEVICE BLOCK
|
||
/ DEVOLC IS USED TO COUNT COLUMNS OF CARD
|
||
/ DEVOAD IS ADR OF LAST NONBLANK CHAR
|
||
/ DEVSTS USES EOFBIT
|
||
|
||
/CDRCNK IS WORST CASE NUMBER OF CHUNKS/CARD
|
||
Z=CNKSIZ-4; IFZERO Z <CDRCNK=66>
|
||
Z=CNKSIZ-10; IFZERO Z <CDRCNK=27>
|
||
Z=CNKSIZ-20; IFZERO Z <CDRCNK=13>
|
||
Z=CNKSIZ-40; IFZERO Z <CDRCNK=6>
|
||
Z=CNKSIZ-100; IFZERO Z <CDRCNK=3>
|
||
Z=CNKSIZ-200; IFZERO Z <CDRCNK=2>
|
||
/HERE FOR A DATA READY INTERRUPT FROM CARD READER
|
||
ICDRD0, CDRCRB /READ CARD COLUMN
|
||
DCA INTMP5 /SAVE IT
|
||
TAD I (CDRBLK+DEVSTS /GET STATUS WORD FOR THE CDR
|
||
SMA CLA /IS CARD READER ACTIVE ?
|
||
JMP INTDIS /NO - PROBABLY LOCAL MODE
|
||
TAD I (CDRBLK+DEVOLC /GET COUNT OF COLUMNS READ SO FAR
|
||
TAD (-120 /COMPARE COLUMN TO 80
|
||
SMA CLA /WAS IT GT 80 ?
|
||
JMP ICDRD5 /ONLY READ 80 COLUMNS !!
|
||
TAD I (CDRBLK+DEVOLC /GET CARD COLUMN COUNTER
|
||
SZA CLA /IS THIS THE FIRST COLUMN ?
|
||
JMP ICDC14
|
||
TAD INTMP5 /GET CHARACTER AGAIN
|
||
DCA I (CDRBLK+DEVOAD /SAVE COLUMN ONE
|
||
JMP ICDC19
|
||
ICDC14, TAD INTMP5 /GET THE CHARACTER AGAIN
|
||
NEGATE
|
||
TAD CDCCHR /GET LAST CHAR READ
|
||
SZA CLA /IS THIS A REPETITION
|
||
JMP ICDC18 /NO SO PUT PREVIOUS CHAR INTO CHUNKS
|
||
TAD CDCCNT /GET COUNT OF REPETITIONS
|
||
TAD (-37
|
||
SMA CLA /HAVE WE DONE AS MANY AS POSSIBLE
|
||
ICDC18, JMS ICDC30 /PUT PREVIOUS CHARS INTO CHUNKS
|
||
ICDC19, TAD INTMP5 /GET THIS COLUMN AGAIN
|
||
JMP ICDC20
|
||
|
||
ICDC30, 0
|
||
NLM1
|
||
TAD CDCCNT /GET COUNT FOR COMPRESSION
|
||
SNA /DID WE HAVE ANY REPETITIONS ?
|
||
JMP ICDC35 /NO JUST SEND THE CHAR
|
||
TAD (0041 /FLAG THIS IS A REPETION COUNT
|
||
JMS ICDRD6 /PUT COUNT INTO CHUNKS
|
||
ICDC35, NL6000
|
||
IAC CML RAR /SET LINK & LOAD 7000
|
||
AND CDCCHR /GET ROWS 12,11, & 0
|
||
RTR
|
||
RTR
|
||
RAR /POSITION BITS
|
||
DCA INTMP3 /AND SAVE FOR LATER USE
|
||
TAD CDCCHR /GET THE CHAR AGAIN
|
||
AND (0017 /GET ROWS 6,7,8,9
|
||
TAD (CD2TAB
|
||
DCA INTMP2
|
||
TAD CDCCHR /GET COLUMN AGAIN
|
||
AND (0760 /LEAVE ONLY ROWS 1/2/3/4/5
|
||
RTR
|
||
RTR
|
||
TAD (CD1TAB
|
||
DCA INTMP1
|
||
TAD I INTMP1
|
||
TAD I INTMP2
|
||
TAD INTMP3 /ADD ROWS 12/11/0
|
||
SMA SNL /CAN THE CHAR BE COMPRESSED ?
|
||
JMP ICDC39 /PUT CHAR INTO CHUNKS
|
||
NL6000 /BEGIN TO ASSEMBLE MASK
|
||
CLL CML IAC RTR /LEAVES 7400 IN AC
|
||
AND CDCCHR /GET THE CHARACTER AGAIN
|
||
RTL
|
||
RTL
|
||
RAL
|
||
JMS ICDRD6 /PUT HALF OF CHAR INTO THE CHUNKS
|
||
NL3777 /MASK TO STRIP SIGN BIT
|
||
AND CDCCHR
|
||
ICDC39, JMS ICDRD6 /PUT REST OF COLUMN INTO CHUNKS
|
||
DCA CDCCNT /INITIALIZE THE COUNT
|
||
JMP I ICDC30
|
||
/HERE TO PUT A CHAR INTO THE CHUNK BUFFER
|
||
ICDRD6, 0
|
||
DCA INTMP2 /SAVE CHAR
|
||
NL1
|
||
TAD CDRADR
|
||
AND [CNKSIZ-1
|
||
SZA CLA /HAVE WE HIT A CHUNK BOUNDRY ?
|
||
JMP ICDRD7 /NO
|
||
NL4000
|
||
RCKFLD
|
||
TAD I CDRADR
|
||
DCA I CDRADR /FLAG LAST CHAR IN CHUNK
|
||
TAD CDRADR
|
||
AND [-CNKSIZ
|
||
DCA CDRADR /MAKE POINTER TO LINK WORD
|
||
JMS ERSGET /GET ANOTHER CHUNK FROM ERS
|
||
RCKFLD
|
||
DCA I CDRADR
|
||
TAD INTMP1
|
||
DCA CDRADR /LINK CHUNK INTO STRING
|
||
|
||
ICDRD7, ISZ CDRADR /ADVANCE BUFFER POINTER
|
||
TAD INTMP2 /GET CHAR AGAIN
|
||
RCKFLD
|
||
DCA I CDRADR /SAVE CHAR IN BUFFER
|
||
ISZ I CDREXT /COUNT CHAR INTO CHUNKS
|
||
TABFLD
|
||
JMP I ICDRD6 /RETURN TO CALLER
|
||
/HERE TO CHECK FOR LOW PRIORITY CARD READER INTERRUPTS
|
||
INTCDR, CDRSD /SKIP ON CARD DONE FLAG
|
||
JMP INTCD9 /NO TRY NEXT DEVICE
|
||
CDRCRD /CLEAR DONE FLAG
|
||
TAD I (CDRBLK+DEVSTS
|
||
SMA CLA /IS READER SUPPOSED TO BE ACTIVE ?
|
||
JMP INTDIS /NO SO JUST DISMISS
|
||
TAD I (CDRBLK+DEVOLC /GET COUNT OF COLUMNS ON CARD
|
||
TAD (-120 /SHOULD BE 80 DECIMAL
|
||
SZA CLA /IS IT ?
|
||
JMP INTCD2 /NO
|
||
|
||
NL4000 /FLAG FOR LAST CHAR IN CHUNK
|
||
RCKFLD
|
||
TAD I CDRADR /GET LAST CHAR IN CARD
|
||
DCA I CDRADR /SAVE IT WITH FLAG
|
||
TAD (0200
|
||
AND I CDREXT /GET COUNT FOR BUFFER
|
||
TABFLD
|
||
JMP INTCD4
|
||
|
||
PAGE
|
||
INTCD4, SNA CLA
|
||
JMP INTCD1
|
||
ISZ CDREXT
|
||
NL1
|
||
SKP
|
||
INTCD1, TAD (0200
|
||
RCKFLD
|
||
TAD I CDREXT
|
||
DCA I CDREXT
|
||
TABFLD
|
||
TAD I (CDRBLK+DEVOAD /GET COLUMN 1
|
||
TAD (-7417 /COMPARE WITH EOF
|
||
SZA CLA
|
||
JMP INTCD0 /WASN'T EOF SO CONTINUE
|
||
TAD (CDRBLK /ADR OF DEVICE BLOCK
|
||
DCA INTDDB
|
||
TAD (4200 /FLAG CDR HAS STOPPED AND READ EOF
|
||
JMS ISBDDC /TELL 10 WE SAW IT AND STOPPED
|
||
INTCD0,
|
||
|
||
JMP INTCD3
|
||
|
||
INTCD3, JMS INTCD5 /TRY SEND CARD TO 10
|
||
JMS STCARD /TRY TO KEEP CDR MOVING
|
||
JMP INTDIS /DISMISS INTERRUPT
|
||
|
||
/HERE TO TRY TO SEND CARD TO 10
|
||
INTCD5, 0
|
||
|
||
|
||
TAD I (CDRBLK+DEVBF2
|
||
SZA CLA
|
||
JMP I INTCD5
|
||
TAD CDRNXT
|
||
DCA I (CDRBLK+DEVBF2
|
||
DCA CDRNXT
|
||
NLM1 /DECREMENT DATA REQUESTS
|
||
TAD I (CDRBLK+DEVDRQ
|
||
DCA I (CDRBLK+DEVDRQ
|
||
JMP I INTCD5
|
||
/HERE ONCE PER CLOCK TICK TO CHECK THE CARDREADER
|
||
/ IF ACTIVE SEE IF IT HAS TIMED OUT(PICK FAIL ?)
|
||
/ IF NOT ACTIVE TRY TO START IT
|
||
CLKCDR, IOF /LEAVE INTERRUPTS OFF FOR A WHILE
|
||
TAD (CDRBLK /IN CASE WE CALL ISTDDC, ETC.
|
||
DCA INTDDB
|
||
TAD I (CDRBLK+DEVBF1 /GET ADR OF 1ST CARD
|
||
SZA CLA
|
||
JMP CLKCD2
|
||
TAD I (CDRBLK+DEVBF2
|
||
DCA I (CDRBLK+DEVBF1
|
||
DCA I (CDRBLK+DEVBF2
|
||
CLKCD2, TAD I (CDRBLK+DEVSTS /GET DEVICE STATUS
|
||
SPA CLA /TEST FOR ACTIVE
|
||
JMP CLKCD5 /IS ACTIVE
|
||
NL1
|
||
AND I (CDRBLK+DEVDDC
|
||
SZA CLA /IS TROUBLE BIT UP ?
|
||
JMP CLKCD4 /YES SO CHECK IT
|
||
TAD I (CDRBLK+DEVDRQ
|
||
SNA CLA /DO WE HAVE ANY DATA REQUESTS ?
|
||
JMP CLKCD8 /NONE SO DONE
|
||
TAD CDRNXT
|
||
SZA CLA
|
||
JMS INTCD5 /IF HOLDING DUMP
|
||
NL4000 /ACTIVE FLAG
|
||
TAD I (CDRBLK+DEVSTS
|
||
DCA I (CDRBLK+DEVSTS /FLAG ACTIVE
|
||
JMS STCARD /TRY TO MOVE A CARD
|
||
CLKCD8, ION
|
||
NL0
|
||
JMP CLKCD9 /DONE FOR THIS TICK
|
||
|
||
CLKCD4, ISZ I (CDRBLK+DEVTIM /SEE IF WE HAVE WAITED A WHILE
|
||
JMP CLKCD8 /NO LONG ENOUGH YET
|
||
NL4000 /JUST STOP BIT
|
||
JMS ISTDDC /SET NEW DEVICE STATUS
|
||
JMP CLKCD8
|
||
|
||
/HERE AT ONCE PER TICK IF CDR IS ACTIVE
|
||
CLKCD5, ISZ I (CDRBLK+DEVTIM /INCREMENT TIMER
|
||
JMP CLKCD8 /HASN'T TIMED OUT SO WE ARE DONE
|
||
|
||
/CDR HAS TIMED OUT = PICK FAILURE
|
||
JMS CLRACT /CLEAR DEVICE ACTIVE
|
||
TAD (4101 /CDR STOPPED & PICK CHECK
|
||
JMS ISBDDC /SET DDCMP STATUS
|
||
NL6000 /THIS IS ABOUT 17 SECONDS(60HZ)
|
||
DCA I (CDRBLK+DEVTIM /SET TIMER
|
||
TAD CDRNXT /GET ADR OF CARD WE WERE TRYING TO READ
|
||
JMS FRECKS /FREE CHUNKS
|
||
DCA CDRNXT /FREE CURRENT BUFFER(& ION)
|
||
JMP CLKCD9 /ON TO NEXT DEVICE
|
||
>/ END OF IFNZRO CDRN
|
||
INSRT1
|
||
CONFD, TAD I TEMPB
|
||
AND (377 /MASK OFF EXTRANEOUS BITS IN MCR
|
||
DCA I TEMP3 /SAVE AT RCN OF DDB
|
||
TAD I DDBSTS
|
||
JMP CONFD1
|
||
NJMPA, TAD (JMP I NJMP+4
|
||
DCA NJMP
|
||
NJMP, 0
|
||
RCVKRD /BOOT ILLEGAL
|
||
RCVEX /RECEIVE EXAMINE
|
||
RCVDP /RECEIVE DEPOSIT
|
||
RGOTO /GOTO
|
||
|
||
PAGE
|
||
IFNZRO CDRN <
|
||
STCARD, 0
|
||
NLOAD STSBIT /MASK FOR HAVE TO SEND STS
|
||
AND I (CDRBLK+DEVSTS /GET CURRENT STATUS BITS
|
||
SZA CLA /CHECK FOR EOF OR NEED TO SEND STATUS
|
||
JMP STCDR8 /STSBIT MUST BE CLEARED BEFORE READING
|
||
TAD I (CDRBLK+DEVDDC /GET DDCMP STATUS
|
||
SPA CLA /TEST FOR CDR STOPPED BIT
|
||
JMP STCDR8 /HAS STOPPED
|
||
TAD I (CDRBLK+DEVDRQ /GET DATA REQUESTS
|
||
SNA CLA
|
||
JMP STCDR8 /NO DATA REQUESTS SO DON'T MOVE CARDS
|
||
TAD I (CDRBLK+DEVBF2
|
||
SNA CLA /CHECK TO SEE IF HOLDING
|
||
JMS IGTCNK /GET FIRST CHUNK TO STORE CARD IN
|
||
JMP STCDR8 /HOLDING OR OUT OF CORE
|
||
DCA CDRNXT
|
||
TAD CDRNXT /GET ADR OF LINK WORD
|
||
IAC /MAKES ADR OF COUNT FIELD
|
||
DCA CDREXT /SAVE ADR OF COUNT FIELD(LOW ORDER)
|
||
RCKFLD
|
||
DCA I CDREXT /CLEAR COUNT(LOW ORDER)
|
||
TAD CDREXT
|
||
IAC /MAKES ADR OF COUNT FIELD(HIGH ORDER)
|
||
DCA CDRADR /SAVE ADR
|
||
DCA I CDRADR /CLEAR HIGH ORDER COUNT
|
||
TABFLD
|
||
NL2 /DATA WITH EOR
|
||
JMS ICDRD6 /PUT CODE INTO CHUNKS
|
||
DCA CDCCNT /HAVE READ NO CHARS YET
|
||
TAD I (CDRBLK+DEVDDC /GET DEVICE STATUS BITS
|
||
AND (7177 /TURN OFF BOTH EOF BITS
|
||
DCA I (CDRBLK+DEVDDC /STASH BACK
|
||
CDRCSE
|
||
NOP /START CARD READER
|
||
TAD (-200
|
||
DCA I (CDRBLK+DEVTIM /TWO SECOND TIMEOUT
|
||
DCA I (CDRBLK+DEVOLC /INITIALIZE COLUMN COUNTER
|
||
JMP I STCARD
|
||
STCDR8, NL3777 /MASK TO CLEAR ACTIVE
|
||
AND I (CDRBLK+DEVSTS
|
||
DCA I (CDRBLK+DEVSTS /CLEAR ACTIVE
|
||
JMP I STCARD
|
||
CONCDR, TAD (RCVCDR /DISPATCH ADDRESS
|
||
DCA I TEMPA /INTO TABLE
|
||
TAD (CDRBLK /GET DDB ADDRESS
|
||
JMP CONDEV /DO REST
|
||
|
||
>/END OF IFNZRO CDRN
|
||
LISTOG CDRN
|
||
LISTOG PTRN
|
||
IFNZRO PTRN <
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** PTR SERVICE ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
PTRCNT, 0 /COUNT OF CHARS
|
||
|
||
/HERE AT INTERRUPT LEVEL WHEN PTR INTERRUPTS
|
||
INTPTR, PTRSF /SKIP ON PTR FLAG
|
||
JMP INTPR9 /NOT PTR CHECK NEXT DEVICE
|
||
PTRRB /GET FRAME FROM PTR AND CLEAR FLAG
|
||
DCA INTMP5 /SAVE CHAR
|
||
TAD (PTRBLK /ADDRESS OF DEVICE BLOCK
|
||
JMS IACTCK /CHECK DEVICE SHOULD BE ACTIVE
|
||
/ IF NOT DON'T RETURN
|
||
|
||
TAD INTMP5 /GET CHAR AGAIN
|
||
JMS IPUTCH /PUT CHAR INTO THE CHUNKS
|
||
NLOAD -1
|
||
TAD I (PTRBLK+DEVDRQ /UPDATE DATA REQUEST COUNT
|
||
DCA I (PTRBLK+DEVDRQ /AND SAVE NEW COUNT
|
||
ISZ PTRCNT /COUNT CHAR IN CURRENT BUFFER
|
||
TAD PTRCNT /GET CHAR COUNT
|
||
TAD (-240
|
||
SMA CLA
|
||
JMP INTPR5 /BRANCH IF HAVE ENOUGH
|
||
JMS PTRMOV /MOVE TAPE AGAIN
|
||
JMP INTDIS
|
||
|
||
INTPR5, JMS INTPR7 /QUEUE DATA TO 10
|
||
JMP INTDIS
|
||
|
||
/HERE TO SEND PTR DATA TO 10
|
||
INTPR7, 0
|
||
TAD PTRCNT
|
||
SNA CLA
|
||
JMP I INTPR7 /IF NO DATA DONE
|
||
JMS CLRACT /CLEAR DEVICE ACTIVE
|
||
TAD I (PTRBLK+DEVBF2
|
||
DCA I (PTRBLK+DEVBF1
|
||
DCA I (PTRBLK+DEVBF2
|
||
JMP I INTPR7
|
||
/HERE ONCE PER CLOCK TICK TO CHECK PTR
|
||
|
||
CLKPTR, IFZERO PDP8E <
|
||
PTRPE /REENABLE PTR/PTP INTS
|
||
>/END OF IFZERO PDP8E
|
||
TAD (PTRBLK /PREPARE
|
||
IOF
|
||
DCA INTDDB /FOR VARIOUS SUBROUTINES
|
||
TAD I (PTRBLK+DEVSTS /GET CURRENT STATUS
|
||
SMA CLA /IS DEVICE ACTIVE ?
|
||
JMP STRPTR /NO YET - TRY TO START IT
|
||
ISZ I (PTRBLK+DEVTIM /HAS DEVICE TIMED OUT ?
|
||
JMP CLKPR8 /NO
|
||
JMS INTPR7 /QUEUE DATA TO 10
|
||
TAD I (PTRBLK+DEVSTS
|
||
TAD (4001 /SET EOF & CLRACT
|
||
DCA I (PTRBLK+DEVSTS
|
||
CLKPR8, ION
|
||
JMP CLKPR9
|
||
|
||
/HERE TO PERHAPS START PTR MOVING
|
||
STRPTR,
|
||
TAD I (PTRBLK+DEVDRQ /GET DATA REQUEST COUNT
|
||
SNA CLA
|
||
JMP CLKPR8 /NONE SO DON'T START PTR
|
||
DCA PTRCNT /HAVE READ NOTHING YET
|
||
NLOAD 4000 /FLAG DEVICE IS ACTIVE
|
||
TAD I (PTRBLK+DEVSTS
|
||
DCA I (PTRBLK+DEVSTS
|
||
JMS PTRMOV /START TAPE MOVING
|
||
JMP CLKPR8
|
||
/SUBROUTINE TO MOVE THE TAPE
|
||
/ IF THERE AREN'T ENOUGH CHUNKS LEFT STOP READER
|
||
/ AND SEND WHAT WE HAVE SO FAR
|
||
PTRMOV, 0
|
||
TAD FRECNT
|
||
TAD (-ERSCNT
|
||
SPA CLA /SKIP IF HAVE CORE
|
||
JMP PRMOV3
|
||
PTRFC /START TAPE MOVING
|
||
TAD (-100
|
||
DCA I (PTRBLK+DEVTIM /RESET TIMER
|
||
JMP I PTRMOV
|
||
PRMOV3, JMS CLRACT /CLEAR DEVICE ACTIVE FLAG
|
||
JMS INTPR7 /SEND DATA TO 10
|
||
JMP I PTRMOV
|
||
|
||
PAGE
|
||
>/END OF IFNZRO PTRN
|
||
LISTOG PTRN
|
||
LISTOG PTPN
|
||
IFNZRO PTPN <
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** PTP SERVICE ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
PTPCNT, 0 /COUNTER FOR HEADER & TRAILER
|
||
|
||
/HERE AT INTERRUPT LEVEL TO CHECK FOR PTP INTERRUPTS
|
||
INTPTP, PTPSF /SKIP ON PTP FLAG
|
||
JMP INTPP9 /NOT PTP SO CHECK NEXT DEVICE
|
||
JMS INTPP0
|
||
JMP INTDIS
|
||
INTPP0, 0
|
||
TAD PTPCNT
|
||
SZA CLA /DO WE NEED HEADER/TRAILER ?
|
||
JMP INTPP5 /YES
|
||
TAD (PTPBLK
|
||
DCA INTDDB
|
||
JMS IGTOCH /GET NEXT CHAR IF ANY
|
||
JMP PTPFIN /NONE
|
||
CLL /CLEAR LINK
|
||
TAD (2000
|
||
SZL
|
||
JMP INTPP7 /THIS IS REALLY AN OPEN !
|
||
INTPP1, PTPLS /PUNCH CHAR
|
||
NLM3 /FOR TIMEOUT
|
||
DCA I (PTPBLK+DEVTIM
|
||
JMP I INTPP0
|
||
INTPP5, ISZ PTPCNT
|
||
JMP INTPP1 /GO PUNCH A 0
|
||
JMP INTPP1 / DITTO
|
||
INTPP7, NL0
|
||
TAD (-200 /THIS IS APP TWO FOLDS OF TAPE
|
||
DCA PTPCNT
|
||
JMP INTPP1 /GO PUNCH 1ST PART OF HEADER/TRAILER
|
||
/HERE WHEN DATA FOR PTP IS EXHAUSTED
|
||
PTPFIN, PTPCF /CLEAR ANY FLAGS
|
||
JMS CLRACT /MARK DEVICE AS NOT ACTIVE
|
||
JMP INTDIS
|
||
|
||
CLKPTP, IFZERO PTRN <
|
||
IFZERO PDP8E <
|
||
PTRPE /REENABLE READER/PUNCH INTERRUPTS
|
||
>/END OF IFZERO PDP8E
|
||
>/END OF IFZERO PTRN
|
||
TAD I (PTPBLK+DEVSTS
|
||
SMA CLA /IS PTP ACTIVE ?
|
||
JMP STRPTP /NO SO TRY TO START IT
|
||
ISZ I (PTPBLK+DEVTIM /YES - IS THIS TIMEOUT ?
|
||
JMP CLKPP9 /NO
|
||
IFNZRO FTTRBL <
|
||
TAD (PTPMSG-1
|
||
DCA ERRFLG /LEAVE MSG FOR OPERATOR
|
||
>/END OF IFNZRO FTTRBL
|
||
JMP CLKPP9
|
||
|
||
STRPTP, TAD I (PTPBLK+DEVOCN
|
||
SNA CLA
|
||
JMP CLKPP9 /NOTHING TO DO SO GO TO NEXT DEVICE
|
||
NL4000
|
||
IOF
|
||
TAD I (PTPBLK+DEVSTS
|
||
DCA I (PTPBLK+DEVSTS
|
||
JMS INTPP0
|
||
ION
|
||
JMP CLKPP9
|
||
|
||
/ PAGE
|
||
>/END OF IFNZRO PTPN
|
||
LISTOG PTPN
|
||
LISTOG PLTN
|
||
IFNZRO PLTN <
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** PLT SERVICE ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
|
||
/DATA FOR THE PLT COMES IN 10 FORMAT - I.E. 6 BIT BYTES AS FOLLOWS:
|
||
/ 0040 PEN UP
|
||
/ 0020 PEN DOWN
|
||
/ 0010 DRUM UP
|
||
/ 0004 DRUM DOWN
|
||
/ 0002 PEN LEFT
|
||
/ 0001 PEN RIGHT
|
||
|
||
/HERE AT INTERRUPT LEVEL TO CHECK FOR PLT INTERRUPTS
|
||
INTPLT, PLTSKF /SKIP ON PLOTTER FLAG
|
||
JMP INTPL9 /CHECK NEXT DEVICE
|
||
INTPL0, TAD (PLTBLK
|
||
DCA INTDDB
|
||
JMS IGTOCH /GET NEXT CHAR IF ANY
|
||
JMP PLTFIN /NONE
|
||
/ PLOT HERE
|
||
JMP INTDIS
|
||
PLTFIN, PLTCLF /CLEAR ANY FLAGS
|
||
JMS CLRACT /MARK DEVICE AS NOT ACTIVE
|
||
JMP INTDIS
|
||
|
||
|
||
CLKPLT, TAD I (PLTBLK+DEVSTS
|
||
SMA CLA /IS PLT ACTIVE ?
|
||
JMP CLKPL2 /NO TRY TO START IT
|
||
ISZ I (PLTBLK+DEVTIM /YES - IS THIS TIMEOUT ?
|
||
JMP CLKPL9 /NO
|
||
JMP CLKPL9
|
||
|
||
CLKPL2, JMP CLKPL9 /CAN'T START PLT
|
||
|
||
/ PAGE
|
||
>/END OF IFNZRO PLTN
|
||
LISTOG PLTN
|
||
/HERE ONCE PER TICK TO CHECK TTY'S
|
||
/ SEE IF THERE IS AN ERROR MESSAGE FOR THE CTY
|
||
/ CHECK FILLERS FOR ALL LINES
|
||
CLKTTY, TAD I (CTYBLK+LDBFPT
|
||
SZA CLA
|
||
JMP CLKTY2 /ALREADY TYPING
|
||
TAD ERRFLG
|
||
SNA
|
||
JMP CLKTY2 /NO MSG SO DONE
|
||
DCA I (CTYBLK+LDBFPT
|
||
DCA ERRFLG /SETUP MSG
|
||
TAD (CTYBLK
|
||
DCA DDB
|
||
TAD (CTYBLK+DEVSTS
|
||
DCA DDBSTS
|
||
JMS TTYGO /START CTY IF NEED TO
|
||
CLKTY2,
|
||
TAD (FIRTTY /GET ADR OF FIRST TTY BLOCK
|
||
CLKTY3, IOF /DISABLE INTERRUPTS FOR A WHILE
|
||
DCA INTDDB
|
||
TAD (DEVTIM /RELATIVE ADR OF TIMER
|
||
TAD INTDDB
|
||
DCA TEMP2 /SAVE POINTER TO TIMER
|
||
TAD I TEMP2 /GET TIMER FOR FILLER
|
||
SZA CLA
|
||
ISZ I TEMP2
|
||
JMP CLKTY5 /HASN'T TIMED OUT
|
||
JMS XMTINT
|
||
NL0 /BECAUSE XMTINT RETURNS GARBAGE
|
||
CLKTY5, ION
|
||
ISZ TEMP2 /DEVLNK IS ONE GREATER THAN DEVTIM
|
||
TAD I TEMP2
|
||
SZA
|
||
JMP CLKTY3
|
||
JMP CLKTY9
|
||
/HERE TO CLEAR THE CONNECT NUMBER IN THE DDB
|
||
CLRCNT, 0
|
||
TAD I DDB /[1(23)] GET THE DDB CONTENTS
|
||
AND (7700 /[1(23)] CLEAR THE CONNECT NUMBER
|
||
DCA I DDB /[1(23)] AND STORE BACK IN THE DDB
|
||
JMP I CLRCNT /[1(23)] RETURN TO CALLER
|
||
|
||
/HERE TO MARK A DEVICE AS NOT ACTIVE
|
||
/ CALL JMS CLRACT /WITH IOF AND INTDDB SETUP
|
||
/ RETURN
|
||
CLRACT, 0
|
||
NLOAD DEVSTS
|
||
TAD INTDDB /MAKE ADR OF DEVSTS
|
||
DCA INTMP1
|
||
NL3777 /MASK TO CLEAR ACTIVE BIT
|
||
AND I INTMP1
|
||
DCA I INTMP1 /SAVE NEW STATUS WORD
|
||
JMP I CLRACT
|
||
|
||
RECINT, IOF /SO WE DON'T MISS A QUEUE OVERFLOW
|
||
TAD I TIQTKR /GET LINE #
|
||
DCA DDB
|
||
TAD I TIQTKR /GET CHAR
|
||
AND [377 /8 BITS ONLY(THIS ISN'T NECESSARY)
|
||
DCA TEMP5 /SAVE CHAR
|
||
|
||
TAD TIQTKR
|
||
TAD (1-TTIQUE-TIQLEN
|
||
SZA CLA
|
||
JMP RECIN0 /DON'T NEED TO RESET POINTERS
|
||
TAD (TTIQUE-1
|
||
DCA TIQTKR
|
||
|
||
JMP RECIN0
|
||
PAGE
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** CLOCK SERVICE ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
/HERE AT INTERRUPT LEVEL WHEN CLOCK GOES OFF
|
||
|
||
/TEST FOR CLK INTERRUPTS
|
||
INTCLK, CLKSCF /DID CLOCK GO OFF?
|
||
JMP INTCL9 /NOT CLOCK SO CHECK NEXT DEVICE
|
||
CLCL
|
||
NL1 /IGNORE EVERY OTHER TICK
|
||
AND JIFSEC+1
|
||
SZA CLA
|
||
JMP INTCK4
|
||
|
||
ISZ CLKFLG /FLAG FOR NONINTERRUPT LEVEL CODE
|
||
SKP
|
||
HLT /WENT A MINUTE WITHOUT FINDING CLOCK FLAG ??
|
||
NLM1
|
||
DCA WRKREQ /SO WE FIND CLOCK FLAG
|
||
TAD JIFSEC+1
|
||
AND (0176
|
||
SZA CLA
|
||
JMP INTCK4
|
||
ISZ SECFLG /FLAG TIME FOR 64TH TICK CODE(APP. 1 / SEC)
|
||
|
||
IFNZRO FTDEBUG <
|
||
NLM1
|
||
CIF 30 /LOC IN FIELD 3
|
||
JMS TRACEW /PUT WORD INTO THE TRACE
|
||
>/END OF IFNZRO FTDEBUG
|
||
|
||
INTCK4, ISZ JIFSEC+1
|
||
JMP INTDIS
|
||
ISZ JIFSEC
|
||
JMP INTDIS
|
||
JMP INTDIS
|
||
JIFSEC, ZBLOCK 2 /TICKED ONCE PER JIFFY
|
||
RCVCN2,
|
||
JMS GETEXN /GET SLA
|
||
DCA TEMP2 /STORE IT
|
||
TAD (DEVN /LENGTH OF RCVDSP TABLE
|
||
TAD TEMPA /ADD RCVDSP ENTRY POINTER
|
||
DCA TEMP1 /STORE ADDRESS FOR SLA
|
||
TAD TEMP2 /PICK UP SLA
|
||
DCA I TEMP1 /STASH IT
|
||
TAD (DEVTYP-1 /GET ADR OF DEVICE TYPE TABLE
|
||
DCA AUTO1
|
||
TAD (-CTRLN /NUMBER OF POSSIBLE TYPES
|
||
DCA TEMPD /NUMBER OF POSSIBLE TYPES
|
||
JMS GTCHR /GET OBJECT TYPE (ONLY ONE BYTE)
|
||
/ LEGAL ARE 1=TTY,2=CARD READER,3=LINE PRINTER
|
||
RCVCN4, TAD I AUTO1
|
||
SNA
|
||
JMP RCVCN5 /THIS IS THE ONE WE NEEDED
|
||
ISZ AUTO1 /SKIP DISPATCH ADR
|
||
ISZ TEMPD /HAVE CHECK ALL POSSIBLE ?
|
||
JMP RCVCN4 /NO SO KEEP ON CHECKING
|
||
JMP BADTYP /SEND DISCONNECT
|
||
RCVCN5, TAD I AUTO1
|
||
DCA TEMPB
|
||
TAD (-CONTTY /SEE IF TTY
|
||
TAD TEMPB /WE ARE DISPATCHING TO
|
||
SNA CLA /SKIP IF NOT
|
||
JMP RCVCNT /HANDLE TTY CASE
|
||
JMS SKPEXN /SKIP PROCESS ID FIELD
|
||
RCVCN0,
|
||
JMS GETEXN /GET OBJECT TYPE OF SENDER
|
||
JMS SKPEXN /SKIP HIS PROCESS ID
|
||
JMS GETEXN /MAX MESSAGE LENGTH
|
||
DCA TEMP1 /STORE
|
||
TAD (DEVN
|
||
TAD (DEVN
|
||
TAD TEMPA /DISPATCH ADDRESS
|
||
DCA TEMP2 /STASH
|
||
TAD TEMP1 /GET MAX LENGTH
|
||
DCA I TEMP2 /STORE IT
|
||
TAD TEMP2 /GET ADDRESS
|
||
TAD (DEVN /POINT TO NEXT TABLE
|
||
DCA TEMP2 /STORE IT
|
||
TAD RSNA /GET SNA
|
||
DCA I TEMP2 /STORE IT
|
||
JMP I TEMPB /GO TO DEVICE DEPENDENT CONNECT
|
||
RCVCNT, JMS GETEXN /GET TTY NUMBER
|
||
DCA TTYNO
|
||
JMP RCVCN0 /CONTINUE
|
||
|
||
TTYNO, -1
|
||
CONTTY, TAD (RCVTTY /DISPATCH ADDRESS
|
||
DCA I TEMPA /SAVE IT
|
||
TAD TTYNO
|
||
TAD (-TTYN-1
|
||
SMA /SHOULD BE NEGATIVE
|
||
JMP BADTYP
|
||
TAD (TTYN+1
|
||
TAD (DDBTAB
|
||
DCA TEMPC /PROPER ENTRY
|
||
TAD I TEMPC /PROPER DDB
|
||
JMP CONDEV
|
||
IFNZRO CDRN <
|
||
/HERE TO START CARD MOVING
|
||
INTCD2, TAD (RCKMSG-1
|
||
DCA ERRFLG /COMPLAIN ABOUT CARD
|
||
JMP INTDIS / DEVICE WILL TIME OUT AND USER WILL GET MESSAGE FROM 10
|
||
>/END OF IFNZRO CDRN
|
||
/BOOT MESSAGES IE STATION CONTROL MSG ARE QUEUED
|
||
/IN THIS TABLE SO STATION CAN SEND HANDSHAKE TO DNA WHEN XMTTER IDLE
|
||
BTSCN, 0
|
||
TAD (BTTAB-GTLEN
|
||
DCA TEMPA
|
||
BTT1, TAD (GTLEN
|
||
TAD TEMPA
|
||
DCA TEMPA
|
||
TAD I TEMPA
|
||
SZA CLA /CHECK FOR FREE ENTRY
|
||
JMP BTT1
|
||
TAD (-BTEND
|
||
TAD TEMPA
|
||
SNA CLA /END OF TABLE
|
||
JMP RCVFLU /IGNORE MESSAGE
|
||
TAD TEMPA
|
||
DCA TEMPB /SAVE BEG OF ENTRY ADDRESS AT TEMPB
|
||
TAD RSNA
|
||
DCA I TEMPA
|
||
ISZ TEMPA
|
||
JMP I BTSCN
|
||
PAGE
|
||
/INTERRUPT FROM UNKNOWN DEVICE
|
||
/OR POWER FAIL INTERRUPT
|
||
INTNOT, SPL /SKIP IF POWER FAIL
|
||
JMP .+3 /NOT POWER UNDEFINED INTERRUPT
|
||
CAL /CLEAR INTERRUPT
|
||
HLT
|
||
ISZ INTCNT /COUNT IT
|
||
JMP INTDIS
|
||
TAD (INTMSG-1
|
||
JMS CTYEXC
|
||
HLT
|
||
RCVNEI, /HERE WHEN WE RECEIVE NEIGHBORS MESSAGE
|
||
TAD RNOD /GET OUR NEIGHBOR
|
||
NEGATE
|
||
TAD RSNA /GET WHO SENT NEIGHBORS
|
||
SZA CLA /ONLY BELIEVE HIM
|
||
JMP RCVFLU /IGNORE OTHERS
|
||
NEIG0,
|
||
JMS GETCHR /GET NNM
|
||
JMP NEIG10 /NONE, SO DONE
|
||
NEGATE /GET NEGATIVE
|
||
DCA TEMPA /SAVE
|
||
TAD TEMPA
|
||
JMS NETSCN
|
||
JMP NECT /NOT FOUND
|
||
TAD (2000
|
||
TAD I TEMPB /MARK AS FOUND
|
||
DCA I TEMPB
|
||
NECT, TAD (SNATAB /POINT TO START OF NODE TABLE
|
||
DCA TEMPB /STORE
|
||
TAD (-DEVN /NUMBER OF ENTRIES
|
||
DCA TEMPC /STORE
|
||
NEIG1, /LOOP TO MARK NODES UP
|
||
TAD I TEMPB /GET NODE TABLE ENTRY
|
||
SNA /ONLY TEST ONES THAT ARE THERE
|
||
JMP NEIG3 /ADVANCE TO NEXT ENTRY IF NOT USED
|
||
TAD TEMPA /ADD THE ONE WE ARE CONSIDERING
|
||
SNA CLA /SKIP IF NOT THE SAME
|
||
JMP NEIG2 /MARK AS UP IF THE SAME
|
||
NEIG3, ISZ TEMPB /ADVANCE NODE TABLE POINTER
|
||
ISZ TEMPC /ADVANCE COUNTER
|
||
JMP NEIG1 /CONTINUE IF COUNT NOT EXHAUSTED
|
||
JMS GTCHR /GET LVL TO THROW AWAY
|
||
NL0 /BE SURE AC IS 0 WHEN CALL GETCHR
|
||
JMP NEIG0 /DO NEXT
|
||
NEIG2, NL4000 /GET BIT TO MARK NODE UP
|
||
TAD I TEMPB /GET TABLE ENTRY
|
||
DCA I TEMPB /STORE IT AGAIN WITH UP BIT ON
|
||
JMP NEIG3 /CONTINUE
|
||
NEIG10, /HERE AFTER ALL NODES MARKED AS UP
|
||
TAD (SNATAB /GET START OF NODE TABLE
|
||
DCA TEMPB
|
||
TAD (-DEVN /GET NO OF ENTRIES
|
||
DCA TEMPC /SAVE
|
||
NEIG11, TAD I TEMPB /GET ENTRY
|
||
SMA SZA /EITHER 0 (NOT USED) OR MINUS (UP) IS OK
|
||
JMP DOWN /AC WILL BE ZERO WHEN ROUTINE JMPS TO NEIG13
|
||
NEIG13, AND (3777 /CLEAR UP BIT
|
||
DCA I TEMPB /STORE ENTRY BACK
|
||
NEIG12, ISZ TEMPB /ADVANCE TABLE POINTER
|
||
ISZ TEMPC /ADVANCE COUNTER
|
||
JMP NEIG11 /CONTINUE LOOP
|
||
JMP DELTB /DELETE ANY NEIGHBOURS WHO DISAPPEARED
|
||
/ IF WE WANT TO SEND CONFIGURATION, DO IT HERE
|
||
/CODE TA SCAN NEIGHBORS TABLE
|
||
/FORMAT OF NEIGHBORS TABLE IS
|
||
/ 4000 ENTRY HAS TO REQUEST CONF
|
||
/ 2000 PRESENT IN CURRENT NEI MSG
|
||
/ 1000 NODE HAS MCR HANDLER
|
||
/ 000 CONTAINS NODE NO
|
||
/ 0 MARKS END OF TABLE
|
||
/
|
||
NETSCN, 0
|
||
DCA NET1 /SAVE VALUE SCANNING FOR
|
||
TAD (NEITAB-1
|
||
DCA TEMPB
|
||
NET2, ISZ TEMPB /BUMP TO NEXT ENTRY
|
||
TAD I TEMPB
|
||
SNA /CHECK FOR END OF TABLE
|
||
JMP I NETSCN /NOT FOUND RETURN TEMPB POINTS TO FREE ENTRY
|
||
AND (377 /MASK AWAY ALL FLAGS
|
||
TAD NET1 /SEE IF THIS IS VALUE SEARCHING FOR
|
||
SZA CLA
|
||
JMP NET2 /NO, CONTINUE SCAN
|
||
ISZ NETSCN /FOUND RETURN
|
||
JMP I NETSCN
|
||
NET1, 0
|
||
NETAD, /AC CONTAINS VALUE TO ADD TO WHER E TEMPB POINTS
|
||
DCA I TEMPB
|
||
TAD TEMPB
|
||
NEGATE
|
||
TAD NTAD /SET UP SO ABLE TO STORE LIT AT 7717
|
||
SNA CLA
|
||
HLT /TABLE TOO SMALL
|
||
JMP RCVFLU
|
||
NTAD, NEIEND
|
||
|
||
|
||
/7720 THROUGH 7731 INCLUSIVE ARE USED BY DP8E
|
||
ZZ=.&4000
|
||
IFNZRO ZZ <
|
||
ZZ=7720-.
|
||
ZZ=ZZ&4000
|
||
IFNZRO ZZ <
|
||
ERROR /CODE OVERLAPS DP8E HARDWARE ADDRESSES
|
||
>/END OF IFNZRO ZZ
|
||
|
||
*7732 /SKIP DP8E ADDRESSES
|
||
|
||
>/END OF IFNZRO ZZ
|
||
|
||
RCVLP6, NLOAD DEVCHK /DISPLACEMENT OF CHUNK COUNT
|
||
TAD DDB
|
||
DCA TEMPA /SAVE ADR OF DDB CHUNK COUNT
|
||
NLM1
|
||
TAD TEMP5
|
||
DCA TEMPB /SAVE ADR OF MSG'S CHUNK COUNT
|
||
RCKFLD
|
||
TAD I TEMPB /NO OF CHUNKS IN THIS MESSAGE
|
||
TABFLD
|
||
TAD I TEMPA /PLUS PREVIOUS
|
||
DCA I TEMPA /STORE BACK
|
||
ION
|
||
JMP RCVADV /FORGET MESSAGE BUT NOT CHUNKS
|
||
RCVE, ISZ TEMPA
|
||
JMS RADR
|
||
JMS RADR
|
||
JMP RCVFLU
|
||
/THE FOLLOWING INSTRUCTIONS ARE AN INTERFACE TO FIELD 0
|
||
/ROUTINES NEEDED BY TRANSMITTER LOGIC MOVED TO FIELD 1
|
||
/
|
||
/
|
||
GETC1, 0
|
||
JMS GETCHR
|
||
SKP
|
||
ISZ GETC1 /INCR RET FOR SAME LOGIC RET AS IN GETCH
|
||
CIF 10 /RETURN TO CALLER
|
||
JMP I GETC1
|
||
FIELD 1
|
||
DEFINE HLT <JMS DMP1>
|
||
/NODEID MESSAGE
|
||
/PAGE0 EQUATES ARE THE SAME AS FIELD 0
|
||
/ONLY THE TEMP AREAS ARE USED
|
||
/THE LOC WHICH CONTAIN PERMANENT FLAGS ETC
|
||
/ARE LOADED FROM FIELD 0 BY CHANGING DATA FIELDS AND
|
||
/USING INDIRECT ADDRESSING
|
||
*DDBSTS+1 /GET PAST CRUCIAL PART OF PAGE 0
|
||
FNDSPD, 0 /SUBROUTINE TO FIND SPEED FOR [1(14)]
|
||
/TTY (USED BY XMTCHR) [1(14)]
|
||
TAD (DFAULT /ASSUME DEFAULT [1(14)]
|
||
DCA SPEED /STORE AT POINTER [1(14)]
|
||
TAD (SPDTAB /POINT TO EXCEPTION TABLE [1(14)]
|
||
DCA SPDPTR /STORE ADDRESS [1(14)]
|
||
FNDLOP, TAD I SPDPTR /GET -DDB ADDRESS FOR THIS TERMINAL [1(14)]
|
||
SNA /SKIP IF NOT END OF TABLE [1(14)]
|
||
JMP I FNDSPD /ELSE RETURN WITH DEFAULT POINTER [1(14)]
|
||
TAD I (DDB /COMPARE WITH OUR DDB [1(14)]
|
||
SNA CLA /SKIP IF NOT EQUAL [1(14)]
|
||
JMP FOUND /ELSE GO UPDATE POINTER AND EXIT [1(14)]
|
||
ISZ SPDPTR /POINT [1(14)]
|
||
ISZ SPDPTR / TO [1(14)]
|
||
ISZ SPDPTR / NEXT ENTRY [1(14)]
|
||
JMP FNDLOP /AND KEEP ON LOOKING [1(14)]
|
||
FOUND, ISZ SPDPTR /ADVANCE PAST DDB ADDRESS [1(14)]
|
||
TAD SPDPTR /GET ADDRESS OF FIRST SPEED [1(14)]
|
||
DCA SPEED /STORE IT [1(14)]
|
||
JMP I FNDSPD /RETURN TO CALLER [1(14)]
|
||
|
||
LOOPCT, /MULTIPLEXED LOCATION, LOOP COUNT [1(14)]
|
||
SPEED, 0 /ADDRESS OF SPEED RETURNED TO CALLER [1(14)]
|
||
LOOPPT, /MULTIPLEXED LOCATION, LOOP POINTER [1(14)]
|
||
SPDPTR, 0 /POINTER FOR ADVANCE THROUGH SPEED TABLE [1(14)]
|
||
|
||
XMTCR2, /CONTINUATION OF XMTCHR [1(14)]
|
||
TAD (LDBFIL /POINT TO FILLERS [1(14)]
|
||
TAD I (DDB
|
||
DCA LOOPPT /STORE FILLER ADDRESS [1(14)]
|
||
TAD (-6 /COUNT [1(14)]
|
||
DCA LOOPCT
|
||
FILLOP, TAD I LOOPPT /GET FILLER VALUE [1(14)]
|
||
ISZ LOOPPT /POINT TO NEXT ONE [1(14)]
|
||
JMS SNDEXN /PUT INTO MESSAGE [1(14)]
|
||
ISZ LOOPCT /INCREMENT COUNTER [1(14)]
|
||
JMP FILLOP /GO BACK AROUND IF NOT DONE [1(14)]
|
||
JMS FNDSPD /FIND SPEED [1(14)]
|
||
TAD SPEED /GET ADDRESS OF SPEED [1(14)]
|
||
DCA LOOPPT
|
||
NLM2 /GET COUNT [1(14)]
|
||
DCA LOOPCT
|
||
SPDLOP, TAD I LOOPPT
|
||
ISZ LOOPPT
|
||
JMS SNDEXN
|
||
ISZ LOOPCT
|
||
JMP SPDLOP
|
||
TAD (LDBWID /POINT TO WIDTH [1(14)]
|
||
TAD I (DDB
|
||
DCA LOOPPT
|
||
TAD I LOOPPT /GET WIDTH VALUE [1(14)]
|
||
JMS SNDEXN
|
||
JMS SNDCHR /0 AUTO-CRLF POINT [1(14)]
|
||
JMS SNDCHR /0 2741 ELEMENT [1(14)]
|
||
JMS SNDCHR /0 2741 BITS [1(14)]
|
||
JMP XMTCRT /GO RETURN [1(14)]
|
||
|
||
*200 /ORIGIN BEYOND PAGE 0 FIELD 0
|
||
NCLNID, BLOCK 100
|
||
|
||
/PER CONNECTION TABLES
|
||
CTRLTB, BLOCK DEVN
|
||
|
||
RCVDSP, BLOCK 1
|
||
BLOCK DEVN
|
||
|
||
/ THESE TABLES MUST FOLLOW AND BE SAME LENGTH
|
||
/ AS RCVDSP.
|
||
|
||
SLATAB,
|
||
BLOCK DEVN
|
||
MMLTAB,
|
||
BLOCK DEVN
|
||
SNATAB, /SOURCE NODE
|
||
BLOCK DEVN
|
||
/NEITAB AND BTTAB ARE TABLES SET UP FOR SET HOST AND BOOT MESSAGES
|
||
/NEILEN IS THE NUMBER OF NODES IN THE NETWORK DEFAULT VALUE IS 16
|
||
/FORMAT FOR NEITAB IS THE FOLLOWING:
|
||
/ONE WORD PER ENTRY
|
||
/ 4000 ISSUE REQ CONFIGURATION
|
||
/ 400 ISSUE CONFIG MESSAGE
|
||
/ 1000 NODE HAS MCR
|
||
/ XX NODE NUMBER
|
||
/
|
||
/
|
||
/BTTAB HAS 6 WORDS PER ENTRY
|
||
/ WORD 1=NODE NUMBER ISSUING BOOT MESSAGE
|
||
/ WORD 2=RESPONSE MESSAGE NEEDED
|
||
/ WORD 3=SOFTWARE INST TO SET DATA FIELD TO ADDR1(6201+N0)
|
||
/ WORD 4=12 BITS OF ADDRESS
|
||
/ WORD 5,6=SAME AS WORDS 3,4 FOR ADDRESS2
|
||
/NOENT=5 SETS THE BOOT QUEUE TO BE 5 MESSAGES
|
||
NOENT=5
|
||
GTLEN=6 /6 LOC PER ENTRY IN BOOT TABLE
|
||
BTLEN=NOENT^GTLEN
|
||
NEITAB,
|
||
BLOCK NEILEN
|
||
NEIEND, 0
|
||
BTTAB, BLOCK BTLEN
|
||
BTEND, 0
|
||
GTTAB, BLOCK GTLEN
|
||
|
||
|
||
ZZ=CTRLTB
|
||
ZZ=RCVDSP
|
||
ZZ=SLATAB
|
||
ZZ=MMLTAB
|
||
ZZ=SNATAB
|
||
ZZ=NEITAB
|
||
ZZ=BTTAB
|
||
ZZ=GTTAB
|
||
|
||
/ OUTPUT MESSAGE BUFFERS
|
||
|
||
CTLSIZ=12 /DDCMP HEADER (8) + CHUNK COUNT (1) + CHUNK POINTER
|
||
SYNCHS, BLOCK 20 /WHERE SYN BUF WILL GO
|
||
SYNBUF=.-NUMSYN
|
||
IDLBUF=SYNBUF /NO SPECIAL BUFFER FOR IDLE MODE
|
||
|
||
CTLBUF, BLOCK 10
|
||
Z=4+MAXOLN+6
|
||
T10LEN=12+MAXOLN
|
||
T10BF1, BLOCK Z
|
||
T10BF2, BLOCK Z
|
||
T10LST, BLOCK Z
|
||
|
||
ZZ=T10BF1
|
||
ZZ=T10BF2
|
||
ZZ=T10LST
|
||
|
||
/STORAGE FOR TTY'S
|
||
|
||
/QUEUE OF INPUT FROM TTY'S
|
||
/ FIRST WORD IS LINE #
|
||
/ SECOND IS 8BIT CHAR
|
||
IFNDEF TIQLEN <TIQLEN=100>
|
||
TTIQUE, BLOCK TIQLEN
|
||
/MACRO TO MAKE A DEVICE BLOCK FOR A TTY
|
||
/ 1ST ARG IS DEVICE BLOCK LABEL
|
||
/ 2ND ARG IS DEVICE ADR FOR DC02 TTY'S
|
||
/ NOLONGER USED ON DAS92
|
||
/ 3RD ARG IS DEVICE ADR FOR KL8A TTY'S
|
||
/ 4TH ARG IS NONZERO IF TTY HAS HDW TABS
|
||
/ 5TH ARG IS TTY CARRIAGE WIDTH
|
||
/ 6TH ARG IS TTY FILLER CLASS
|
||
/ 7TH ARG IS RESTRICTED NODE NUMBER
|
||
/ 8TH ARG IS DATA SET LINE FLAG
|
||
DEFINE TTBLK NAME Q QQ QQQ QQQQ QQQQQ QQQQQQ Q1 <XLIST
|
||
ZZ=QQ
|
||
TTYCNT=TTYCNT+1
|
||
XLIST
|
||
0 /DEVRCN=0
|
||
Q1
|
||
-QQQQQQ /DEVRNN
|
||
TTYCHK
|
||
TTYCNT-1
|
||
NAME, 100 /LH=OBJ TYPE,RH=CONNECT
|
||
XLIST
|
||
*.+DEVLNK-1
|
||
XLIST
|
||
FIRTTY /ADR OF PREVIOUS DEVICE BLOCK
|
||
XLIST
|
||
FIRTTY=.-DEVLNK-1
|
||
FIRDDB=FIRTTY
|
||
XLIST
|
||
ZZ /DEVICE ADDRESS
|
||
XLIST
|
||
ZZZ=ZZZ+1
|
||
*.+1 /SKIP LDBCOL
|
||
IFNDEF QQQQ < QQQQ=110 > /DEFAULT WIDTH IS 72
|
||
XLIST
|
||
QQQQ /TTY WIDTH
|
||
XLIST
|
||
ZZ=LDBFIL-1-LDBWID
|
||
*.+ZZ
|
||
-10 /FILLER FOR 10
|
||
-10 /FILLER FOR 11
|
||
-10 /FILLER FOR 12
|
||
-10 /FILLER FOR 13
|
||
-10 /FILLER FOR 14
|
||
-10 /FILLER FOR 15
|
||
Z=Z-1
|
||
IFNZRO Z <
|
||
XLIST >/END OF IFNZRO Z
|
||
>/END OF TTBLK
|
||
|
||
ZZZ=200 /DEVICE NUMBER FOR CTY
|
||
FIRTTY=0
|
||
|
||
Z=TTYN+1
|
||
/DEVICE DATA BLOCK FOR CTY
|
||
TTYCNT=0
|
||
TTBLK CTYBLK,0,0,CTYTAB,CTYWID,CTYFIL,CTYRNN,CTYDSL
|
||
|
||
IFNZRO Z < TTBLK T00BLK,4010,T00TSF,T00TAB,T00WID,T00FIL,T00RNN,T00DSL
|
||
>/END OF IFNZRO Z
|
||
IFNZRO Z < TTBLK T01BLK,2010,T01TSF,T01TAB,T01WID,T01FIL,T01RNN,T01DSL
|
||
>/END OF IFNZRO Z
|
||
IFNZRO Z < TTBLK T02BLK,1010,T02TSF,T02TAB,T02WID,T02FIL,T02RNN,T02DSL
|
||
>/END OF IFNZRO Z
|
||
IFNZRO Z < TTBLK T03BLK,0410,T03TSF,T03TAB,T03WID,T03FIL,T03RNN,T03DSL
|
||
>/END OF IFNZRO Z
|
||
IFNZRO Z < TTBLK T04BLK,0210,T04TSF,T04TAB,T04WID,T04FIL,T04RNN,T04DSL
|
||
>/END OF IFNZRO Z
|
||
IFNZRO Z < TTBLK T05BLK,0110,T05TSF,T05TAB,T05WID,T05FIL,T05RNN,T05DSL
|
||
>/END OF IFNZRO Z
|
||
IFNZRO Z < TTBLK T06BLK,0050,T06TSF,T06TAB,T06WID,T06FIL,T06RNN,T06DSL
|
||
>/END OF IFNZRO Z
|
||
IFNZRO Z < TTBLK T07BLK,0030,T07TSF,T07TAB,T07WID,T07FIL,T07RNN,T07DSL
|
||
>/END OF IFNZRO Z
|
||
IFNZRO Z < TTBLK T10BLK,4004,T10TSF,T10TAB,T10WID,T10FIL,T10RNN,T10DSL
|
||
>/END OF IFNZRO Z
|
||
IFNZRO Z < TTBLK T11BLK,2004,T11TSF,T11TAB,T11WID,T11FIL,T11RNN,T11DSL
|
||
>/END OF IFNZRO Z
|
||
IFNZRO Z < TTBLK T12BLK,1004,T12TSF,T12TAB,T12WID,T12FIL,T12RNN,T12DSL
|
||
>/END OF IFNZRO Z
|
||
IFNZRO Z < TTBLK T13BLK,0404,T13TSF,T13TAB,T13WID,T13FIL,T13RNN,T13DSL
|
||
>/END OF IFNZRO Z
|
||
IFNZRO Z < TTBLK T14BLK,0204,T14TSF,T14TAB,T14WID,T14FIL,T14RNN,T14DSL
|
||
>/END OF IFNZRO Z
|
||
IFNZRO Z < TTBLK T15BLK,0104,T15TSF,T15TAB,T15WID,T15FIL,T15RNN,T15DSL
|
||
>/END OF IFNZRO Z
|
||
IFNZRO Z < TTBLK T16BLK,0044,T16TSF,T16TAB,T16WID,T16FIL,T16RNN,T16DSL
|
||
>/END OF IFNZRO Z
|
||
IFNZRO Z < TTBLK T17BLK,0024,T17TSF,T17TAB,T17WID,T17FIL,T17RNN,T17DSL
|
||
>/END OF IFNZRO Z
|
||
IFZERO Z < XLIST >
|
||
|
||
TTYFEA, 3 /NUMBER OF CHARS IN FEATURES
|
||
5 /NOTHING FANCY
|
||
/THE FOLLOWING FIELDS ARE FILLED IN DYNAMICALLY WHEN SENDING CONNECT FOR
|
||
/EACH TTY LINE AT TAG "FEA2"
|
||
0 /CARRIAGE WIDTH
|
||
0 /=1 MEANS MODEM SUPPORT
|
||
/=100 MEANS STATION CAN SET HOST
|
||
/ MACRO TO MAKE DEVICE BLOCK FOR NON-TELETYPE DEVICES
|
||
/ 1ST ARGUMENT IS DDB LABEL NAME
|
||
/ 2ND ARGUMENT IS DEVICE TYPE CODE
|
||
/ 3RD ARGUMENT IS RESTRICTED NODE NUMBER
|
||
DEFINE DBLOCK NAME Q QQ <XLIST
|
||
ZZ=-1 /DEFAULT
|
||
IFNZRO LPTN <
|
||
IFZERO .+5-LPTBLK <ZZ=LPTCHK>/IF LPT, USE LPT VALUE
|
||
>/END OF IFNZRO LPTN
|
||
DEVCNT=DEVCNT+1
|
||
XLIST
|
||
0 /RCN HAS TO BE ZERO ALWAYS
|
||
0 /NEVER A DATA SET LINE
|
||
-QQ /DEVRNN
|
||
ZZ /MAX CHUNKS
|
||
DEVCNT-1
|
||
NAME, Q^100
|
||
XLIST
|
||
Z=DEVLNK-1
|
||
*.+Z
|
||
XLIST
|
||
FIRDDB /ADR OF PREVIOUS DEVICE BLOCK
|
||
XLIST
|
||
FIRDDB=.-DEVLNK-1
|
||
XLIST >/END OF DEFINE DBLOCK
|
||
|
||
|
||
IFNZRO CDRN <
|
||
/DEVICE DATA BLOCK FOR CDR
|
||
DEVCNT=0
|
||
DBLOCK CDRBLK,2,CDRRNN
|
||
3 /LENGTH OF FEATURES
|
||
1 /DECIMAGE
|
||
120 /COLUMNS/CARD=80
|
||
1 /LOW SPEED
|
||
>/END OF IFNZRO CDRN
|
||
|
||
IFNZRO LPTN <
|
||
/DEVICE DATA BLOCK FOR LPT
|
||
/ SPECIAL DEVSTS BITS:
|
||
/ LOW ORDER BIT IS A COUNT OF OPENS EXERCISED
|
||
DEVCNT=0
|
||
DBLOCK LPTBLK,3,LPTRNN
|
||
Z=LPTWID&7200
|
||
IFNZRO Z < 5 > /LENGTH OF FEATURES
|
||
IFZERO Z < 4 > /LENGTH OF FEATURES
|
||
IFZERO FTLPLC < 10 > /ANSI 68
|
||
IFNZRO FTLPLC < 12 > /ANSI 68, LOWER CASE
|
||
IFZERO Z < LPTWID > /CARRIAGE WIDTH
|
||
IFNZRO Z < Z=LPTWID&177; 200+Z; 1> /CARRIAGE WIDTH
|
||
|
||
305 /OVERPRINT, MULTIPART PAPER, LOWSPEED
|
||
4 /FORMS WIDTH CHANGEABLE,
|
||
>/END OF IFNZRO LPTN
|
||
|
||
IFNZRO PTRN <
|
||
/DEVICE DATA BLOCK FOR PTR
|
||
DEVCNT=0
|
||
DBLOCK PTRBLK,6,PTRRNN
|
||
1; 0 /FEATURES
|
||
>/END OF IFNZRO PTRN
|
||
|
||
IFNZRO PTPN <
|
||
/DEVICE DATA BLOCK FOR PTP
|
||
DEVCNT=0
|
||
DBLOCK PTPBLK,5,PTPRNN
|
||
1; 0 /FEATURES
|
||
>/END OF IFNZRO PTPN
|
||
|
||
IFNZRO PLTN <
|
||
/DEVICE DATA BLOCK FOR PLT
|
||
DEVCNT=0
|
||
DBLOCK PLTBLK,20,PLTRNN
|
||
1; 0 /FEATURES
|
||
>/END OF IFNZRO PLTN
|
||
NXTDDB, FIRDDB
|
||
SERDDB, 0 /FIRST DDB SERVICED IN LOOP
|
||
|
||
DEFINE X Q <IFDEF Q < Q >>
|
||
|
||
/TABLE OF DDB ADDRESSES
|
||
DDBTAB,
|
||
X CTYBLK
|
||
X T00BLK
|
||
X T01BLK
|
||
X T02BLK
|
||
X T03BLK
|
||
X T04BLK
|
||
X T05BLK
|
||
X T06BLK
|
||
X T07BLK
|
||
X T10BLK
|
||
X T11BLK
|
||
X T12BLK
|
||
X T13BLK
|
||
X T14BLK
|
||
X T15BLK
|
||
X T16BLK
|
||
X T17BLK
|
||
IFDEF CDRBLK < CDRBLK>
|
||
IFDEF LPTBLK < LPTBLK>
|
||
IFDEF PTRBLK < PTRBLK>
|
||
IFDEF PTPBLK < PTPBLK>
|
||
IFDEF PLTBLK < PLTBLK>
|
||
/STRINGS PUT OUT BY SCNSER
|
||
|
||
TALN, 4 /TABLE FOR CARRIER MASK FOR KL8A LINED
|
||
40 /LINE 0 CARRIER LEVEL IN STATUS RE
|
||
20 /LINE 1
|
||
10 /LINE 2
|
||
XOFMSG, 0223 /XOF = ^S
|
||
4377 /FILLER (WITHOUT REGARD FOR RACE CREED OR CLASS)
|
||
|
||
TTOSPC, " /BLANK
|
||
" /BLANK
|
||
" /BLANK
|
||
" /BLANK
|
||
" /BLANK
|
||
" /BLANK
|
||
" /BLANK
|
||
4000+" /FINAL BLANK
|
||
|
||
CRLMSG, 0215 /CARRIAGE RETURN
|
||
4012 /LINE FEED
|
||
|
||
DEFINE DC7MSG < XLIST
|
||
0104 /ASCII "D"
|
||
0116 /ASCII "N"
|
||
0071 /ASCII "9"
|
||
0262 /ASCII "2"
|
||
XLIST>/END OF DEFINE DC7MSG
|
||
|
||
DEFINE DPMSG < XLIST
|
||
0104 /ASCII "D"
|
||
0120 /ASCII "P"
|
||
0270 /ASCII "8"
|
||
0305 /ASCII "E"
|
||
0040
|
||
XLIST>/END OF DEFINE DPMSG
|
||
|
||
DEFINE BEGMSG < XLIST
|
||
0215 /CARRIAGE RETURN
|
||
0207 /BELL AND FILLER
|
||
0012 /LINE FEED
|
||
0207 /BELL
|
||
0245 /ASCII "%"
|
||
0245 /ASCII "%"
|
||
XLIST >/END OF DEFINE BEGMSG
|
||
|
||
/COMMON MESSAGE BEGINNER FOR FATAL MESSAGES
|
||
DEFINE FATMSG < XLIST
|
||
0215 /CARRIAGE RETURN
|
||
0215 / EXTRA CR FOR FILLER
|
||
0012 /LINE FEED
|
||
0207 /BELL
|
||
0207 /BELL
|
||
0077 /ASCII "?"
|
||
0077 /ASCII "?"
|
||
XLIST >/END OF DEFINE FATMSG
|
||
/MESSAGE SENT WHEN STATION RESTARTS
|
||
RSTMSG, 377
|
||
0012 /EXTRA LINE FEED
|
||
207 /EXTRA BELL
|
||
0012 /EXTRA LINE FEED
|
||
BEGMSG
|
||
"R
|
||
0145 /E
|
||
0363 /S
|
||
0164 /T
|
||
0341 /A
|
||
0162 /R
|
||
0164 /T
|
||
0151 /I
|
||
0356 /N
|
||
0347 /G
|
||
" /BLANK
|
||
DC7MSG
|
||
" /BLANK
|
||
0116 /N
|
||
0117 /O
|
||
0104 /D
|
||
0105 /E
|
||
" /BLANK
|
||
0042 /"
|
||
OURID,
|
||
IFDEF DC92ID <
|
||
DC92ID
|
||
>/END OF IFDEF DC92ID
|
||
IFNDEF DC92ID <
|
||
"D;"N;"9;"2
|
||
>/END OF IFNDEF DC92ID
|
||
0042 /"
|
||
240 /SPACE
|
||
215
|
||
012
|
||
TTOBEL, 4207 /BELL
|
||
CONBKE,NCOMSG, BEGMSG
|
||
"T;"T;"Y;" ;"N;"O;"T;" ;"C;"O;"N;"N;"E;"C;"T;"E;"D;215;4012
|
||
|
||
|
||
|
||
BMTMSG, 377 /SPECIAL FILLER
|
||
FATMSG
|
||
"B;"A;"D;" ;"M;"S;"G;" ;"T;"Y;"P;4000+"E
|
||
|
||
/UNRECOGNIZED INTERRUPT MSG
|
||
INTMSG, 377 /SPECIAL FILLER TO START
|
||
FATMSG
|
||
DC7MSG
|
||
" ;"I;"N;"T;" ;"E;"R;4000+"R
|
||
|
||
/AUTODUMP MESSAGE
|
||
DMPMSG, 377 /RUBOUT TO BEGIN
|
||
FATMSG
|
||
DC7MSG
|
||
" ;"C;"R;"A;"S;"H;" ;"P;"C;4000+"=
|
||
DPTMSG, BEGMSG
|
||
DPMSG
|
||
" ;"T;"I;"M;"E;"O;"U;4000+"T
|
||
|
||
XOFMS, 4023 /XOF CHAR
|
||
IFNZRO CDRN < /MESSAGE WHEN GET READ CHECK ON CARDREADER
|
||
RCKMSG, BEGMSG
|
||
"R;"D;"C;"H;"K;" ;"-;" ;"R;"E;"F;"E;"E;"D;" ;"C;"A;"R;"D;215;4012
|
||
>/END OFIFNZRO CDRN
|
||
|
||
IFNZRO FTTRBL <
|
||
IFNZRO LPTN <
|
||
/MESSAGE WHEN LPT TIMES OUT
|
||
LPTMSG, BEGMSG
|
||
"L;"P;"T;" ;"T;"R;"B;4000+"L
|
||
>/END OF IFNZRO LPTN
|
||
|
||
IFNZRO PTPN <
|
||
/MSG WHEN PTP TIMES OUT
|
||
PTPMSG, BEGMSG
|
||
"P;"T;"P;" ;"T;"R;"B;4000+"L
|
||
>/END OF IFNZRO PTPN
|
||
>/END OF IFNZRO FTTRBL
|
||
|
||
|
||
/MESSAGE IF DP8E GETS A BUS ERROR
|
||
DBEMSG, BEGMSG
|
||
DPMSG
|
||
" ;"B;"U;"S;" ;"E;"R;4000+"R
|
||
|
||
/MESSAGE WHEN CARRIER LOST
|
||
LCRMSG, BEGMSG
|
||
"C;"A;"R;"R;"I;"E;"R;" ;"L;"O;"S;"T;215;4012
|
||
CARMSG, BEGMSG
|
||
"C;"A;"R;"R;"I;"E;"R;" ;"B;"A;"C;"K;215;4012
|
||
IFNZRO CDRN <
|
||
/CARD CODE TRANSLATION TABLES
|
||
/ TRICK IS USE ROWS TO INDEX INTO THE TABLES
|
||
/ IF THE RESULT HAS THE SIGN BIT ON CAN'T COMPRESS COLUMN
|
||
/TABLE TO TRANSLATE ROWS 1/2/3/4/5
|
||
CD1TAB, 0000; 2005; 2004; 4000; 2003; 4000; 4000; 4000
|
||
2002; 4000; 4000; 4000; 4000; 4000; 4000; 4000
|
||
3001; 4000; 4000; 4000; 4000; 4000; 4000; 4000
|
||
4000; 4000; 4000; 4000; 4000; 4000; 4000; 4000
|
||
|
||
/TABLE TO TRANSLATE ROWS 6/7/8/9
|
||
CD2TAB, 0000; 2011; 1010; 4000; 2007; 4000; 2017; 4000
|
||
2006; 4000; 2016; 4000; 4000; 4000; 4000; 4000
|
||
>/END OF IFNZRO CDRN
|
||
/TABLE FOR INTERPRETING TTY & LPT CHAR FUNCTIONS
|
||
/ BIT DEFINITIONS ARE:
|
||
CHRBRK=0
|
||
CHRARR=0
|
||
CHRSUP=0
|
||
CHRALT=0
|
||
CHRFLL=2000
|
||
CHRDEF=4000 /GO INTO DEFERRED ECHO
|
||
CHRXOF=0200 /CHAR IS AN XOF
|
||
CHRHT=0040 /CHAR IS AN HT
|
||
CHRHMO=0020 /CHAR PERFORMS HORIZONTAL MOTION
|
||
CHRCR=0010 /CHAR IS A CARRIAGE RETURN
|
||
CHRLC=0004 /CHAR IS LOWER CASE
|
||
/ 0002 /FOR LPT CHAR IS SPECIAL MOTION
|
||
/ 0001 /FOR LPT FLUSH CHAR
|
||
|
||
CHRTAB, 0001 /ASCII 0
|
||
CHRDEF+CHRARR+0001 /ASCII 1 = ^A
|
||
CHRDEF+CHRARR+0001 /ASCII 2 = ^B
|
||
CHRDEF+CHRBRK+CHRARR+0001 /ASCII 3 = ^C
|
||
CHRDEF+CHRARR+0001 /ASCII 4 = ^D
|
||
CHRDEF+CHRARR+0001 /ASCII 5 = ^E
|
||
CHRDEF+CHRARR+0001 /ASCII 6 = ^F
|
||
CHRDEF+CHRBRK+0001 /ASCII 7 = ^G = BELL
|
||
CHRDEF+CHRFLL+0001 /ASCII 10 = ^H
|
||
CHRFLL+CHRHT+0002+CHRHMO /ASCII 11 = ^I = HORIZONTAL TAB
|
||
CHRDEF+CHRBRK+CHRFLL+0002 /ASCII 12 = LINE FEED
|
||
CHRDEF+CHRBRK+CHRFLL+0002 /ASCII 13 = VERT TAB
|
||
CHRDEF+CHRBRK+CHRFLL+0002 /ASCII 14 = FORM FEED
|
||
CHRFLL+CHRCR+0002 /ASCII 15 = CARRIAGE RETURN
|
||
CHRDEF+CHRARR+0001 /ASCII 16 = ^N
|
||
CHRDEF+CHRARR+0001 /ASCII 17 = ^O
|
||
CHRDEF+CHRARR+0002 /ASCII 20 = ^P
|
||
CHRDEF+CHRARR+0002 /ASCII 21 = ^Q = XON
|
||
CHRDEF+CHRARR+0002 /ASCII 22 = ^R
|
||
CHRDEF+CHRARR+CHRXOF+0002 /ASCII 23 = ^S = XOF
|
||
CHRDEF+CHRARR+0002 /ASCII 24 = ^T
|
||
CHRDEF+CHRSUP+0001 /ASCII 25 = ^U - NOT CHRARR BECAUSE SPECIAL HANDLING
|
||
CHRDEF+CHRARR+0001 /ASCII 26 = ^V
|
||
CHRDEF+CHRARR+0001 /ASCII 27 = ^W
|
||
CHRDEF+CHRARR+0001 /ASCII 30 = ^X
|
||
CHRDEF+CHRARR+0001 /ASCII 31 = ^Y
|
||
CHRDEF+CHRBRK+CHRARR+0001 /ASCII 32 = ^Z
|
||
CHRDEF+CHRBRK+CHRALT+0001 /ASCII 33 = ALTMODE
|
||
CHRDEF+CHRARR+0001 /ASCII 34 = ^\
|
||
CHRDEF+CHRARR+0001 /ASCII 35 = ^]
|
||
CHRDEF+CHRARR+0001 /ASCII 36 = ^^
|
||
CHRDEF+CHRARR+0001 /ASCII 37 = ^_
|
||
CHRBLA, /CHARACTER WITH CHRHMO BIT SET FOR TAB SIMULATION
|
||
CHRHMO /ASCII 40 =
|
||
CHRHMO /ASCII 41 = !
|
||
CHRHMO /ASCII 42 = "
|
||
CHRHMO /ASCII 43 = #
|
||
CHRHMO /ASCII 44 = $
|
||
CHRHMO /ASCII 45 = %
|
||
CHRHMO /ASCII 46 = &
|
||
CHRHMO /ASCII 47 = '
|
||
CHRHMO /ASCII 50 = (
|
||
CHRHMO /ASCII 51 = )
|
||
CHRHMO /ASCII 52 = *
|
||
CHRHMO /ASCII 53 = +
|
||
CHRHMO /ASCII 54 = ,
|
||
CHRHMO /ASCII 55 = -
|
||
CHRHMO /ASCII 56 = .
|
||
CHRHMO /ASCII 57 = /
|
||
CHRHMO /ASCII 60 = 0
|
||
CHRHMO /ASCII 61 = 1
|
||
CHRHMO /ASCII 62 = 2
|
||
CHRHMO /ASCII 63 = 3
|
||
CHRHMO /ASCII 64 = 4
|
||
CHRHMO /ASCII 65 = 5
|
||
CHRHMO /ASCII 66 = 6
|
||
CHRHMO /ASCII 67 = 7
|
||
CHRHMO /ASCII 70 = 8
|
||
CHRHMO /ASCII 71 = 9
|
||
CHRHMO /ASCII 72 = :
|
||
CHRHMO /ASCII 73 = ;
|
||
CHRHMO /ASCII 74 = <
|
||
CHRHMO /ASCII 75 = =
|
||
CHRHMO /ASCII 76 = >
|
||
CHRHMO /ASCII 77 = ?
|
||
CHRHMO /ASCII 100 = @
|
||
CHRHMO /ASCII 101 = A
|
||
CHRHMO /ASCII 102 = B
|
||
CHRHMO /ASCII 103 = C
|
||
CHRHMO /ASCII 104 = D
|
||
CHRHMO /ASCII 105 = E
|
||
CHRHMO /ASCII 106 = F
|
||
CHRHMO /ASCII 107 = G
|
||
CHRHMO /ASCII 110 = H
|
||
CHRHMO /ASCII 111 = I
|
||
CHRHMO /ASCII 112 = J
|
||
CHRHMO /ASCII 113 = K
|
||
CHRHMO /ASCII 114 = L
|
||
CHRHMO /ASCII 115 = M
|
||
CHRHMO /ASCII 116 = N
|
||
CHRHMO /ASCII 117 = O
|
||
CHRHMO /ASCII 120 = P
|
||
CHRHMO /ASCII 121 = Q
|
||
CHRHMO /ASCII 122 = R
|
||
CHRHMO /ASCII 123 = S
|
||
CHRHMO /ASCII 124 = T
|
||
CHRHMO /ASCII 125 = U
|
||
CHRHMO /ASCII 126 = V
|
||
CHRHMO /ASCII 127 = W
|
||
CHRHMO /ASCII 130 = X
|
||
CHRHMO /ASCII 131 = Y
|
||
CHRHMO /ASCII 132 = Z
|
||
CHRHMO /ASCII 133 = [
|
||
CHRHMO /ASCII 134 = \
|
||
CHRHMO /ASCII 135 = ]
|
||
CHRHMO /ASCII 136 = ^
|
||
CHRHMO /ASCII 137 = _
|
||
CHRHMO /ASCII 140 =
|
||
CHRLC+CHRHMO /ASCII 141 = LC A
|
||
CHRLC+CHRHMO /ASCII 142 = LC B
|
||
CHRLC+CHRHMO /ASCII 143 = LC C
|
||
CHRLC+CHRHMO /ASCII 144 = LC D
|
||
CHRLC+CHRHMO /ASCII 145 = LC E
|
||
CHRLC+CHRHMO /ASCII 146 = LC F
|
||
CHRLC+CHRHMO /ASCII 147 = LC G
|
||
CHRLC+CHRHMO /ASCII 150 = LC H
|
||
CHRLC+CHRHMO /ASCII 151 = LC I
|
||
CHRLC+CHRHMO /ASCII 152 = LC J
|
||
CHRLC+CHRHMO /ASCII 153 = LC K
|
||
CHRLC+CHRHMO /ASCII 154 = LC L
|
||
CHRLC+CHRHMO /ASCII 155 = LC M
|
||
CHRLC+CHRHMO /ASCII 156 = LC N
|
||
CHRLC+CHRHMO /ASCII 157 = LC O
|
||
CHRLC+CHRHMO /ASCII 160 = LC P
|
||
CHRLC+CHRHMO /ASCII 161 = LC Q
|
||
CHRLC+CHRHMO /ASCII 162 = LC R
|
||
CHRLC+CHRHMO /ASCII 163 = LC S
|
||
CHRLC+CHRHMO /ASCII 164 = LC T
|
||
CHRLC+CHRHMO /ASCII 165 = LC U
|
||
CHRLC+CHRHMO /ASCII 166 = LC V
|
||
CHRLC+CHRHMO /ASCII 167 = LC W
|
||
CHRLC+CHRHMO /ASCII 170 = LC X
|
||
CHRLC+CHRHMO /ASCII 171 = LC Y
|
||
CHRLC+CHRHMO /ASCII 172 = LC Z
|
||
CHRDEF /ASCII 173 =
|
||
CHRDEF /ASCII 174 =
|
||
CHRDEF+CHRBRK+CHRALT /ASCII 175 = ALTMODE
|
||
CHRDEF+CHRBRK+CHRALT /ASCII 176 = ALTMODE
|
||
CHRDEF+CHRSUP+0001 /ASCII 177 = RUBOUT
|
||
LISTOG LPTN
|
||
IFNZRO LPTN <
|
||
LPTTBL, 0 /CHAR 11 = HORIZONTAL TAB
|
||
0001 /CHAR 12 = LF = CHANNEL 8
|
||
0002 /CHAR 13 = VT = CHANNEL 7
|
||
-2 /CHAR 14 = FORM FEED = CHANNEL 1
|
||
-1 /CHAR 15 = CARRIAGE RETURN
|
||
0 /CHAR 16 = CHANGE RIBBON TO RED
|
||
0 /CHAR 17 = CHANGE RIBBON TO BLACK
|
||
0100 /CHAR 20 = DC0 = CHANNEL 2
|
||
0040 /CHAR 21 = DC1 = CHANNEL 3
|
||
0020 /CHAR 22 = DC2 = CHANNEL 4
|
||
0010 /CHAR 23 = DC3 = CHANNEL 5
|
||
0004 /CHAR 24 = DC4 = CHANNEL 6
|
||
|
||
|
||
/SIMULATED CARRIAGE CONTROL TAPE FOR LPT
|
||
|
||
LPTVFU, 011 / 5-8
|
||
051 / 3-5-8
|
||
031 / 4-5-8
|
||
051 / 3-5-8
|
||
011 / 5-8
|
||
071 / 3-4-5-8
|
||
011 / 5-8
|
||
|
||
051 / 3-5-8
|
||
031 / 4-5-8
|
||
055 / 3-5-6-8
|
||
011 / 5-8
|
||
071 / 3-4-5-8
|
||
011 / 5-8
|
||
051 / 3-5-8
|
||
031 / 4-5-8
|
||
|
||
051 / 3-5-8
|
||
011 / 5-8
|
||
071 / 3-4-5-8
|
||
011 / 5-8
|
||
057 / 3-5-6-7-8
|
||
031 / 4-5-8
|
||
051 / 3-5-8
|
||
011 / 5-8
|
||
|
||
071 / 3-4-5-8
|
||
011 / 5-8
|
||
051 / 3-5-8
|
||
031 / 4-5-8
|
||
051 / 3-5-8
|
||
011 / 5-8
|
||
175 / 2-3-4-5-6-8
|
||
011 / 5-8
|
||
|
||
051 / 3-5-8
|
||
031 / 4-5-8
|
||
051 / 3-5-8
|
||
011 / 5-8
|
||
071 / 3-4-5-8
|
||
011 / 5-8
|
||
051 / 3-5-8
|
||
031 / 4-5-8
|
||
|
||
057 / 3-5-6-7-8
|
||
011 / 5-8
|
||
071 / 3-4-5-8
|
||
011 / 5-8
|
||
051 / 3-5-8
|
||
031 / 4-5-8
|
||
051 / 3-5-8
|
||
011 / 5-8
|
||
|
||
071 / 3-4-5-8
|
||
011 / 5-8
|
||
055 / 3-5-6-8
|
||
031 / 4-5-8
|
||
051 / 3-5-8
|
||
011 / 5-8
|
||
071 / 3-4-5-8
|
||
011 / 5-8
|
||
|
||
051 / 3-5-8
|
||
031 / 4-5-8
|
||
051 / 3-5-8
|
||
011 / 5-8
|
||
010 / 5
|
||
010 / 5
|
||
010 / 5
|
||
010 / 5
|
||
|
||
010 / 5
|
||
010 / 5
|
||
-1 /FLAG END OF TAPE
|
||
>/END OF IFNZRO LPTN
|
||
LISTOG LPTN
|
||
STARTC, ENQ;6;0;0;0;1;111;225 /DDCMP START MESSAGE
|
||
STARTD, SOH;0;0;0;0;1 /START OF DATA MESSAGE
|
||
SID, 0 /LENGTH OF STRING
|
||
SIDTXT
|
||
SIDEND,
|
||
*SID
|
||
ZZ=SID+1-SIDEND
|
||
ZZ
|
||
*SIDEND
|
||
DEFINE VAL Q < Q
|
||
XLIST; ZZZ=ZZZ+1; XLIST>/END OF DEFINE VAL
|
||
ZZZZ=.
|
||
CNF, 0 /LENGTH
|
||
ZZZ=0
|
||
VAL 5 /MESSAGE TYPE
|
||
IFNZRO LPTN <
|
||
VAL 3 /OBJECT CLASS
|
||
VAL LPTN
|
||
VAL 0 /DESCRIPTION
|
||
>/END OF IFNZRO LPTN
|
||
VAL 1 /OBJECT TYPE
|
||
IFNDEF FTOLDC < VAL TTYN+1 >
|
||
IFDEF FTOLDC <
|
||
Z=TTYN+1
|
||
Z=Z-1
|
||
IFZERO Z < 1 >
|
||
Z=Z-4
|
||
IFZERO Z < 37 >
|
||
Z=Z-4
|
||
IFZERO Z < 377
|
||
3 >
|
||
Z=Z-4
|
||
IFZERO Z < 377
|
||
77 >
|
||
Z=Z-4
|
||
IFZERO Z < 377
|
||
377
|
||
3 >
|
||
>/END OF IFDEF FTOLDC GENERATES BIT PATTERN FOR CONF MSG
|
||
VAL 0 /DESCRIPTION
|
||
IFNZRO CDRN <
|
||
VAL 2 /OBJECT TYPE
|
||
VAL CDRN
|
||
VAL 0 /DESCRIPTION
|
||
>/END OF IFNZRO CDRN
|
||
ZZZZZ=.
|
||
*ZZZZ
|
||
ZZZ
|
||
*ZZZZZ
|
||
|
||
FREDCK, 0 /COUNT OF CHUNKS FREED BY FRECKS
|
||
|
||
|
||
DEFINE X Q QQ QQQ <XLIST
|
||
IFNZRO Q <XLIST
|
||
Z-QQ
|
||
QQQ
|
||
XLIST
|
||
Z=QQ >/END OF IFNZRO Q
|
||
XLIST >/END OF X
|
||
Z=0
|
||
DEVTYP, X 1,1,CONTTY /CONNECT FOR TTY
|
||
X CDRN,2,CONCDR
|
||
X LPTN,3,CONLPT
|
||
/TABLE OF TTY SPEEDS FOR CHARACTERISTICS MESSAGE [1(14)]
|
||
/
|
||
DEFINE SPD BLK RCV XMT <XLIST
|
||
Z=Z-1 /DECREMENT COUNTER
|
||
IFDEF XMT <
|
||
IFNDEF RCV < RCV=XMT >
|
||
>
|
||
IFDEF RCV <
|
||
IFNDEF XMT < XMT=RCV >
|
||
>
|
||
XLIST
|
||
IFDEF RCV <
|
||
-BLK /NEGATIVE OF DDB ADDRESS
|
||
RCV /RECEIVE SPEED
|
||
XMT /TRANSMIT SPEED
|
||
>
|
||
>/END DEFINE SPD
|
||
|
||
DFAULT, /DEFAULT SPEED ENTRY
|
||
DFLRCV
|
||
DFLXMT
|
||
|
||
SPDTAB, /SPEED TABLE
|
||
Z=TTYN+1 /TOTAL NUMBER OF TTY'S
|
||
SPD CTYBLK,CTYRCV,CTYXMT
|
||
IFNZRO Z < SPD T00BLK,T00RCV,T00XMT
|
||
>
|
||
IFNZRO Z < SPD T01BLK,T01RCV,T01XMT
|
||
>
|
||
IFNZRO Z < SPD T02BLK,T02RCV,T02XMT
|
||
>
|
||
IFNZRO Z < SPD T03BLK,T03RCV,T03XMT
|
||
>
|
||
IFNZRO Z < SPD T04BLK,T04RCV,T04XMT
|
||
>
|
||
IFNZRO Z < SPD T05BLK,T05RCV,T05XMT
|
||
>
|
||
IFNZRO Z < SPD T06BLK,T06RCV,T06XMT
|
||
>
|
||
IFNZRO Z < SPD T07BLK,T07RCV,T07XMT
|
||
>
|
||
IFNZRO Z < SPD T10BLK,T10RCV,T10XMT
|
||
>
|
||
IFNZRO Z < SPD T11BLK,T11RCV,T11XMT
|
||
>
|
||
IFNZRO Z < SPD T12BLK,T12RCV,T12XMT
|
||
>
|
||
IFNZRO Z < SPD T13BLK,T13RCV,T13XMT
|
||
>
|
||
IFNZRO Z < SPD T14BLK,T14RCV,T14XMT
|
||
>
|
||
IFNZRO Z < SPD T15BLK,T15RCV,T15XMT
|
||
>
|
||
IFNZRO Z < SPD T16BLK,T16RCV,T16XMT
|
||
>
|
||
IFNZRO Z < SPD T17BLK,T17RCV,T17XMT
|
||
>
|
||
0 /TO END TABLE
|
||
|
||
/CONSIDER THE FOLLOWING METHOD OF CACULATING CRC-16
|
||
/ CALL: PUSHJ P,CRCALC
|
||
/ CRCALC: XOR C,CRC
|
||
/ ANDI C,377
|
||
/ LSH CRC,-10
|
||
/ XOR CRC,TAB(C)
|
||
/RH OF TABLE FOLLOWS IMMEDIATELY, LH IS CRCTAB+400
|
||
CRCTAB, BLOCK 1000
|
||
CRCTBE=. /CURRENT LOCATION IS END OF CRCTAB [1(14)]
|
||
CRCTBC=5200-CRCTBE /CALCULATE FREE WORDS [1(14)]
|
||
CRCTBC=CRCTBC&4000 /GET SIGN BIT [1(14)]
|
||
|
||
IFNZRO CRCTBC <
|
||
CRCTBG /GENERATE ERROR IF CRC TABLE OVERLAPS [1(14)]
|
||
>
|
||
|
||
*5200
|
||
|
||
NCSDLA, 0 /SEND DLA
|
||
TAD TEMPB /INDEX INTO TABLE
|
||
TAD (SLATAB-1 /GET LINK ADDRESS
|
||
DCA TEMPA
|
||
TAD I TEMPA /DLA
|
||
JMS SNDEXN
|
||
JMP I NCSDLA /RETURN
|
||
|
||
XMTCR1, /HERE FOR PART OF XMTCHR [1(14)]
|
||
TAD I TEMPA /GET DLA FROM NCSDLA [1(14)]
|
||
SNA CLA /MAKE SURE IT IS NON-ZERO [1(14)]
|
||
JMP XSTRT1 /IF NOT, SKIP THIS TTY ENTIRELY [1(14)]
|
||
IOF /DON'T CHANGE BITS ON INTERRUPT LEVEL [1(14)]
|
||
TAD I DDBSTS /GET CURRENT STATUS BITS [1(14)]
|
||
AND (-CHRBIT-1 /CLEAR CHARACTERISTICS BIT [1(14)]
|
||
DCA I DDBSTS /STORE IT BACK [1(14)]
|
||
ION /ALLOW INTERRUPTS AGAIN [1(14)]
|
||
TAD (27 /COUNT FOR SUB-MESSAGE [1(14)]
|
||
JMS SNDCHR
|
||
NL4 /CONTROL TYPE CODE (4) [1(14)]
|
||
JMS SNDCHR
|
||
NL2 /CHARACTERISTICS SUB-TYPE (2) [1(14)]
|
||
JMS SNDCHR
|
||
JMP XMTCR2 /GO TO NEXT PART OF ROUTINE [1(14)]
|
||
|
||
/HERE WHEN SYNCHRONOUS TRANSMITTER IS IDLE TO TRY TO START IT
|
||
/ FIRST SEE IF WE NEED TO SEND A START OR STACK MESSAGE
|
||
/ THEN SEE IF WE NEED TO SEND A NAK MESSAGE
|
||
/ THEN SEE IF WE HAVE A NUMBERED MESSAGE TO SEND
|
||
/ THEN SEE IF WE NEED TO SEND AN ACK
|
||
/ THEN SEE IF WE SHOULD SEND A REP
|
||
|
||
XSTART, JMS XSTRT0 /SET UP TO SEND A CTL MESSAGE
|
||
CDF 0 /SET DATA FIELD TO ZERO
|
||
TAD (SYNBUF-1 /POINT TO ONE BEFORE SYN'S
|
||
DCA I [T10NCA /ADR OF MESSAGE
|
||
TAD (-10-NUMSYN /NEGATIVE OF NUMBER OF SYN'S
|
||
DCA I [T10NWC /NEXT WC
|
||
TAD I [STACKF /GET STACK FLAG (-1 FOR STACK, -2 FOR START)
|
||
SPA CLA
|
||
JMP SNDSTK /NEED TO SEND START OR STACK
|
||
TAD I [NAKFLG
|
||
SZA CLA
|
||
JMP SNDNAK /CHECK FOR NEED NAK
|
||
TAD I [T10TKR
|
||
NEGATE
|
||
TAD I [T10PTR /CHECK FOR RETRANSMISSIONS
|
||
SZA CLA /DO WE HAVE A MESSAGE TO RETRANSMIT
|
||
JMP SNDMSG /IF HAVE A MESSAGE SEND IT
|
||
TAD I [T10PTR
|
||
TAD (-T10LST /SEE IF TIME TO WRAP AROUND
|
||
SNA
|
||
TAD (T10BF1-T10LST-T10LEN
|
||
TAD (T10LEN+T10LST
|
||
NEGATE
|
||
TAD I [T10AKR /COMPARE TO LAST ACKED
|
||
SNA CLA /HAVE SENT ALL WE CAN ?
|
||
JMP XSTRT9
|
||
TAD I [DISREA /SEE IF WE NEED TO SEND DISCONNECT
|
||
SZA CLA /ZERO MEANS NO
|
||
JMP XDISCN /SEND IT
|
||
CDF 10 /CHANGE BACK TO DEF DATA FIELD
|
||
JMS RCCOF /CHECK TO SEE IF NEED TO REQ CONF
|
||
JMS XMBT /SEE IF ANY STATION CTRL MSGS NEED TO BE XMTTED
|
||
JMS DISCHK /SEE IF NEED TO SEND DISCONNECT
|
||
TAD NXTDDB /INITIALIZE LOOP CHECK
|
||
SNA /SKIP IF NOT FIRST TIME OR WRAP AROUND
|
||
TAD (FIRDDB /FIRST TIME OR WRAP AROUND, POINT TO LAST DDB
|
||
DCA SERDDB /START OF DDB STRING
|
||
TAD SERDDB /GET ADDRESS OF DDB TO SERVICE
|
||
DCA DDB /SAVE IT
|
||
JMP XSTA /AND JUMP INTO THE THICK OF THINGS
|
||
XSTRT1, TAD I (NXTDDB /GET DDB TO BE SERVICED NEXT
|
||
SNA /CHECK FOR BEG OF CHAIN
|
||
TAD (FIRDDB /INITIALIZE TO FIRST OF CHAIN
|
||
DCA DDB /SET UP FOR SERVICING
|
||
TAD DDB /CHECK FOR END OF LOOP
|
||
NEGATE
|
||
TAD SERDDB
|
||
ION
|
||
SNA CLA /SKIP IF NOT END
|
||
JMP XSTRT9 /WE HAVE LOOKED AT ALL DDBS
|
||
XSTA,
|
||
TAD (DEVLNK /POINTER TO NEXT DDB
|
||
TAD DDB
|
||
DCA TEMP1 /ADDR OF NEXT DDB TO BE SERVICED
|
||
TAD I TEMP1
|
||
DCA NXTDDB /SAVE FOR NEXT TIME AROUND
|
||
/IF WE SERVICE DDB, THEN NEXT TIME WE
|
||
/COME TO XSTART WE WILL START WITH
|
||
/THIS ONE
|
||
NLOAD DEVSTS
|
||
TAD DDB
|
||
DCA DDBSTS /SAVE ADR OF STATUS WORD
|
||
TAD (3000 /MASK FOR CONNECT & ACCEPT BIT
|
||
AND I DDBSTS
|
||
SNA /CHECK TO SEE IF 10 KNOWS ABOUT DEVICE
|
||
JMP XSTRT1 /LEAVE THIS ORPHAN ALONE
|
||
AND (1000 /DO WE NEED AN ACCEPT ?
|
||
IOF
|
||
SNA CLA /SKIP IF WE HAVE TO SEND CONNECT CONFIRM OR DISCONNECT
|
||
JMP XSTRT2 /NO, TRY SOMETHING ELSE
|
||
NL2000
|
||
AND I DDBSTS
|
||
SNA CLA
|
||
JMP XSDIS0
|
||
TAD I DDBSTS /GET STATUS
|
||
AND (6777 /TURN OFF NEED-TO-ACCEPT BIT
|
||
DCA I DDBSTS /UPDATE STATUS
|
||
JMS XSTMSG /SET UP TO SEND A MESSAGE
|
||
JMP XS1CON /CONTINUE OVER PAGE
|
||
PAGE
|
||
XS1CON,
|
||
/92 CAN BE ISSUING A CONNECT CONF OR CONNECT INITIATE
|
||
TAD DDB
|
||
TAD (DEVRCN
|
||
DCA TEMP2
|
||
TAD I TEMP2
|
||
SZA CLA
|
||
JMP XS2 /ISSUE CONNECT INITIATE
|
||
/HERE ON CONNECT CONFIRM FROM ABOVE, AND ON CONNECT INITIATE FROM
|
||
/XS2 IF DEVRNN IS COMPATIBLE TO FINISH SENDING CONNECT
|
||
XS3, JMS FEAPNT
|
||
TAD (10
|
||
JMS NCSBEG
|
||
TAD (12 /LENGTH OF CONNECT (EXCLUSIVE OF FEATURES)
|
||
/NOTE: ASSUMES EXTENSIBLE FIELDS ALWAYS SENT AS TWO BYTES
|
||
TAD I TEMP2 /ADD FEATURE LENGTH
|
||
JMS SNDEXN /SEND COUNT (EXTENSIBLE NUMBER)
|
||
NL1 /CONNECT=1
|
||
JMS SNDCHR /TYPE
|
||
JMS NCSDLA /SEND DLA (OR 0 IF CONNECT INITIATE)
|
||
TAD TEMPB /OUR LINK VALUE
|
||
JMS SNDCHR /SLA
|
||
JMS SNDCHR /DEST OBJ TYPE
|
||
JMS SNDCHR /DEST PID
|
||
JMS SNDOBJ /SEND OBJECT TYPE
|
||
NLM1 /GET ADDRESS OF DEVICE NUMBER
|
||
TAD DDB /WHICH IS ONE BEFORE START OF DDB
|
||
DCA TEMP1 /STORE ADDRESS
|
||
TAD I TEMP1 /GET DEVICE NUMBER
|
||
JMS SNDCHR /PID
|
||
TAD TEMPB /GET OUR INDEX
|
||
TAD (MMLTAB-1 /INTO MMLTAB
|
||
DCA TEMP3 /STORE TO GET INDIRECT
|
||
TAD I TEMP3 /GET MML
|
||
JMS SNDEXN /SEND AS TWO BYTE FIELD
|
||
TAD TEMP2
|
||
DCA TEMP3
|
||
TAD I TEMP2 /GET COUNT
|
||
NEGATE
|
||
DCA TEMP2
|
||
ISZ TEMP3
|
||
TAD I TEMP3 /GET NEXT CHAR
|
||
JMS SNDCHR
|
||
ISZ TEMP2
|
||
JMP .-4
|
||
TAD I DDBSTS /GET STATUS BITS [1(14)]
|
||
AND (TTYBIT /CHECK FOR TTY DDB [1(14)]
|
||
SNA CLA /SKIP IF TTY [1(14)]
|
||
JMP FINMSG /WE ARE DONE IF NOT [1(14)]
|
||
TAD (CHRBIT /GET "NEED TO SEND CHARACTERISTICS" BIT [1(14)]
|
||
TAD I DDBSTS / AND OLD STATUS BITS [1(14)]
|
||
DCA I DDBSTS /STORE THEM BACK [1(14)]
|
||
JMP FINMSG /FINISH SETTING UP MESSAGE
|
||
|
||
/BEFORE CONNECT MAKE SURE DEVRNN IS COMPATIBLE
|
||
/DEVRRN MUST BE ZERO OR CODE WILL FORCE DEVRCN TO HOST
|
||
/SPECIFIED IN DEVRRN (DEVRRN CONTAINS NEG VALUE OF LEGAL HOST
|
||
/WHICH LINE MAY BE CONNECTED TO LEGALLY)
|
||
XS2, TAD DDB
|
||
TAD (DEVRNN
|
||
DCA TEMPA
|
||
TAD I TEMPA
|
||
SZA
|
||
JMP RNNCK
|
||
XS2A, TAD I DDB
|
||
AND (77 /GET DISP INTO TABLE
|
||
SNA
|
||
JMP FNDRM
|
||
DCA TEMPA
|
||
FNDRM4, TAD I TEMP2
|
||
CIF 0 /GO TO FIELD 0 FOR ROUTINE
|
||
JMS MCRS3 /FIELD 0 CALL TO MCRSCN
|
||
JMP .+2
|
||
JMP XS4
|
||
TAD (SLATAB-1
|
||
TAD TEMPA
|
||
DCA TEMPB
|
||
DCA I TEMPB
|
||
TAD TEMPA
|
||
TAD (SNATAB-1
|
||
DCA TEMPB
|
||
TAD I TEMP2
|
||
DCA I TEMPB
|
||
TAD TEMPA
|
||
TAD (RCVDSP
|
||
DCA TEMPB
|
||
TAD (RCVTTY
|
||
DCA I TEMPB
|
||
TAD (CTRLTB-1
|
||
TAD TEMPA
|
||
DCA TEMPB
|
||
TAD DDB
|
||
DCA I TEMPB
|
||
JMP XS3
|
||
XS4, DCA I TEMP2 /0 RCN
|
||
TAD TEMPA
|
||
TAD (RCVDSP
|
||
DCA TEMPB
|
||
TAD (RCVKRD
|
||
DCA I TEMPB
|
||
TAD (4777
|
||
AND I DDBSTS
|
||
DCA I DDBSTS
|
||
JMP XSTRT1
|
||
RNNCK, NEGATE /FORCE RCN TO BE HOST LINE IS ABLE TO CONNECT TO
|
||
DCA I TEMP2 /STORE AT DEVRCN
|
||
JMP XS2A
|
||
|
||
XSTRT4, JMS XSTMSG
|
||
TAD (50 /GET NCT
|
||
JMP XSTR4A /JUMP OVER PAGE BOUNDARY [1(14)]
|
||
PAGE
|
||
XSTR4A, /CONTINUED FROM PREVIOUS PAGE [1(14)]
|
||
JMS NCSBG
|
||
JMS NCSDLA
|
||
JMS XMTCHR /SEND CHARACTERISTICS IF NECESSARY [1(14)]
|
||
TAD DDB /SET UP LINKS IN FIELD 0 FOR RECI42!
|
||
CDF 0
|
||
DCA I [DDB
|
||
TAD DDBSTS
|
||
DCA I [DDBSTS
|
||
TAD (DEVDDC
|
||
TAD DDB
|
||
DCA TEMP7
|
||
TAD TEMP7
|
||
DCA I [TEMP7
|
||
TAD (DEVBF1 /ADR OF BUFFER
|
||
TAD DDB
|
||
DCA I [TEMP6
|
||
CDF 10
|
||
CIF 0
|
||
JMP F0I42 /FIELD 0 LINK TO RECI42
|
||
XST41, TAD DDB
|
||
DCA TEMP4 /SAVE ADR OF DDCMP ADR
|
||
CDF 0 /RESTORE FIELD 1 LOC
|
||
TAD I [TEMP6
|
||
DCA TEMP6
|
||
CDF 10
|
||
|
||
/HERE TO THINK ABOUT SENDING CHARACTERS TO THE 10
|
||
XSTTRD, TAD I TEMP6 /GET DATA ADR(IF ANY)
|
||
SNA /IS THERE ANY ?
|
||
JMP XSTTDN
|
||
CDF 0 /SET UP FIELD 0 TEMP3 FOR GETCH
|
||
DCA I [TEMP3
|
||
JMS GETC /FIELD 1 LINK TO GETCH
|
||
HLT /ERROR CHAR SHOULD BE THERE
|
||
TAD TEMP5
|
||
TAD (-MAXOLN+20
|
||
SMA CLA /ROOM ENOUGH FOR THIS DATA ?
|
||
JMP XSTTDN /NOT NOW SEND WITH THE NEXT MESSAGE
|
||
CDF 0 /RESTORE TEMP3 FIELD 0 TO FIELD 1
|
||
TAD I [TEMP3
|
||
DCA TEMP3
|
||
RCKFLD
|
||
TAD I TEMP3 /GET THE CHARACTER COUNT AGAIN
|
||
TABFLD
|
||
JMS SNDCHR /PUT THE CHAR INTO THE MESSAGE
|
||
JMS GETC /GET THE NEXT CHARACTER, IF ANY
|
||
SKP
|
||
JMP .-3
|
||
TAD I TEMP6 /GET FIRST CHUNK ADR AGAIN
|
||
JMS FREC /AND RELEASE THE CHUNKS
|
||
DCA I TEMP6 /CLEAR DEVBF1
|
||
ISZ TEMP6 /ADVANCE TO DEVBF2
|
||
DCA I TEMP6 /CLEAR DEVBF2
|
||
|
||
/HERE TO SEND AN ECHO-PIPELINE-MARKER(MAYBE)
|
||
NL1 /MASK FOR DEFERRED ECHO MODE
|
||
AND I TEMP7 /SEE IF WE ARE IN THAT WAY
|
||
SNA CLA /SKIP IF TRUE
|
||
JMP XSTTDN
|
||
NL3 /COUNT
|
||
JMS SNDCHR
|
||
NL4 /TYPE
|
||
JMS SNDCHR
|
||
JMS SNDCHR
|
||
TAD (LDBEPL /OFFSET FOR PIPELINE MARKER
|
||
TAD DDB
|
||
DCA TEMP1 /SAVE POINTER TO MARKER
|
||
ISZ I TEMP1 /ADVANCE MARKER
|
||
TAD I TEMP1 /GET IT IF NOT ZERO
|
||
AND (0177 /7 BITS ONLY PLEASE
|
||
JMS SNDCHR /PUT MARKER INTO THE MESSAGE
|
||
/HERE WHEN DONE WITH A LINE
|
||
XSTTDN, ION
|
||
TAD TEMP5 /GET CURRENT MESSAGE SIZE
|
||
TAD (-MAXOLN+20 /COMPARE TO MAX
|
||
SMA CLA
|
||
JMP FINMSG /SEND MESSAGE AS IS
|
||
TAD (-7
|
||
TAD TEMP5 /GET MESSAGE SIZE
|
||
SZA CLA /TEST FOR REAL MESSAGE
|
||
JMP FINMSG /REAL SO SEND MESSAGE
|
||
JMS XDRQ
|
||
JMP XSTRT1 /NOT REAL SO DON'T SEND IT
|
||
RCCOF, 0 /CHECK TO SEE IF NEED TO REQ CONF FROM ANY NODES
|
||
TAD (NEITAB-1
|
||
DCA TEMPB
|
||
RCCOF1, ISZ TEMPB
|
||
NL0
|
||
TAD I TEMPB
|
||
SNA /END OF TABLE
|
||
JMP I RCCOF /RETURN
|
||
AND [400 /CONF REQUIRED
|
||
SZA CLA
|
||
JMP XSCONF /YES
|
||
TAD I TEMPB
|
||
SMA
|
||
JMP RCCOF1 /CONT LOOKING
|
||
AND (3777 /TURN OFF BIT
|
||
DCA I TEMPB
|
||
TAD I TEMPB
|
||
AND [377 /TURN OFF ANY EXTRANEOUS BITS
|
||
CDF 0
|
||
DCA I [DISSNA /STORE FOR SUBR TO START MSG
|
||
CDF 10
|
||
JMS XDISBG
|
||
NL1
|
||
JMS SNDCHR /COUNT IS 1
|
||
NL4 /TYPE IS 4 REQ CONFIG
|
||
JMS SNDCHR
|
||
JMP FINMSG
|
||
PAGE
|
||
XSD1, NL2000 /SET CONNECT BIT
|
||
TAD I DDBSTS /GET REST OF BITS
|
||
DCA I DDBSTS / AND STORE RESULT
|
||
JMP FINMSG
|
||
XDISCN, CDF 10
|
||
JMS XDISBG /SEND BEGINNING OF MSG
|
||
TAD (5 /COUNT
|
||
JMS SNDCHR /COUNT
|
||
NL2
|
||
JMS SNDCHR /TYPE=DISCONNECT
|
||
CDF 0
|
||
TAD I [DISSLA /GET LINK WHO REQUESTED CONNECT
|
||
CDF 10
|
||
JMS SNDEXN /DLA
|
||
JMS SNDCHR /SLA=0
|
||
CDF 0
|
||
TAD I [DISREA /PICK UP REASON
|
||
JMS SNDCHR /RSN
|
||
CDF 0
|
||
DCA I [DISREA /CLEAR REASON
|
||
CDF 10
|
||
JMP FINMSG /FINISH MESSAGE
|
||
/HERE TO SEE IF WE NEED TO SEND A STATUS MESSAGE TO THE 10
|
||
XSTRT7, NL1 /MASK FOR NEED TO SEND STATUS BIT
|
||
AND I DDBSTS
|
||
SZA CLA /SKIP IF WE DON'T NEED TO SEND STATUS
|
||
JMP SNDSTS /SEND STATUS TO THE 10
|
||
|
||
JMP XSTRT1 /CHECK IT FOR POSSIBLE SERVICE
|
||
XSTRT0, 0 /MOVE FROM PREV LOC BEFORE XDISBG
|
||
TAD (CTLBUF /POINT TO BEG OF CONTROL BUFFER
|
||
DCA AUTO1 /ASSUME UNNUMBERED
|
||
CRCXI3, DCA CRC1 /CLEAR CRC
|
||
DCA CRC2
|
||
TAD (ENQ /FIRST CHAR TO CRC
|
||
JMS CRCA /CALCULATE CRC
|
||
JMP I XSTRT0
|
||
|
||
XSTRT9, CDF 10
|
||
JMS XSTRT0
|
||
CDF 0
|
||
TAD I [RECVOK
|
||
SPA CLA
|
||
JMP SNDACK /CHECK FOR NEED ACK
|
||
|
||
/HERE TO SEND A REP MESSAGE
|
||
SNDREP, JMS CKREPT /CHECK REP TIMER
|
||
NLOAD REP
|
||
JMS SNDCHR /2ND CHAR IS REP
|
||
SNDRP3, JMS SNDFIL
|
||
JMS SNDFIL /3RD & 4TH ARE FILLS
|
||
SNDRP5, CDF 0
|
||
TAD I [T10HSN
|
||
JMS SNDCHR /5TH CHAR IS HIGHEST MSG # SENT
|
||
JMP SNDAK6 /REST IS LIKE AN ACK MSG
|
||
|
||
/HERE TO SEE IF REP TIMER HAS GONE OFF
|
||
CKREPT, 0
|
||
TAD I [REPTCK
|
||
SPA CLA
|
||
JMP ALP30 /IF STILL COUNTING DON'T SEND
|
||
TAD (-REPTIM
|
||
DCA I [REPTCK /RESET TIMER
|
||
JMP I CKREPT
|
||
ALP30, CDF 10
|
||
CIF 0
|
||
JMP LOOP30
|
||
|
||
|
||
SNDSTS, NL7776 /MASK TO CLEAR NEED TO SEND STATUS BIT
|
||
AND I DDBSTS /CLEAR BIT FROM WORD
|
||
DCA I DDBSTS /SAVE UPDATED WORD
|
||
JMS XSTMSG /BEGIN BUILDING MESSAGE
|
||
TAD (50 /NCT FOR STATUS MESSAGE
|
||
JMS NCSBG /BEGINNING OF DEVICE CONTROL MSG
|
||
JMS NCSDLA /DLA
|
||
NL4 /COUNT
|
||
JMS SNDCHR
|
||
NL3 /TYPE
|
||
JMS SNDCHR
|
||
JMS SNDCHR
|
||
TAD (DEVDSL /GET 2 EXTRA STATUS BITS TO SEND TO 10
|
||
TAD DDB
|
||
DCA TEMP3
|
||
TAD I TEMP3
|
||
AND (140
|
||
DCA TEMP2 /SAVE TO ADD LATER
|
||
TAD (DEVDDC
|
||
TAD DDB
|
||
DCA TEMP3
|
||
TAD I TEMP3
|
||
AND (0177 /STRIP EXTRA BITS
|
||
TAD (0200 /ADD EXTENSIBLE BIT
|
||
JMS SNDCHR
|
||
TAD I TEMP3 /GET HIGH ORDER BITS OF STATUS WORD
|
||
BSW
|
||
CLL RAR
|
||
AND (0037 /CLEAR EXTRA BITS
|
||
TAD TEMP2 /GET EXTRA 2 STATUS BITS
|
||
JMS SNDCHR
|
||
JMP FINMSG /SEND MESSAGE
|
||
/TEMP CONVENTIONS WHEN BUILDING MESSAGES
|
||
/ TEMP5 IS COUNT OF DATA PORTION
|
||
XSTMSG, 0
|
||
ION
|
||
CRCXI4, DCA CRC1 /CLEAR 1ST HALF OF CRC ########
|
||
DCA CRC2 /CLEAR 2ND HALF OF CRC
|
||
CDF 0
|
||
TAD I [T10PTR /POINTER TO NEW MESSAGE
|
||
CDF 10
|
||
TAD (7 /MAKES POINTER TO DATA
|
||
DCA AUTO1
|
||
DCA TEMP5
|
||
JMP I XSTMSG
|
||
|
||
PAGE
|
||
/HERE TO SEND A STACK MESSAGE
|
||
SNDSTK, CDF 0
|
||
TAD I [STACKF /GET START-STACK FLAG
|
||
IAC
|
||
SPA CLA /SKIP TO SEND A STACK
|
||
JMP SNDSRT /NEED TO SEND A START
|
||
DCA I [STACKF /DONE WHEN HAVE RESPONDED
|
||
TAD (STACK
|
||
JMS SNDCHR /2ND CHAR IS STACK
|
||
JMS SNDFIL /3RD CHAR IS A FILL
|
||
JMS SNDCHR /4TH CHAR IS A FILL
|
||
SNDSK5,
|
||
JMS SNDCHR /5TH CHAR IS A FILL
|
||
JMP SNDAK6 /6TH IS DEST STA ADR
|
||
|
||
|
||
/HERE TO SEND A START MESSAGE
|
||
SNDSRT, JMS CKREPT /CHECK REP TIMMER
|
||
TAD (STRT
|
||
JMS SNDCHR /2ND WORD IS START
|
||
JMS SNDFIL
|
||
JMS SNDFIL /3RD & 4TH ARE FILLS
|
||
JMP SNDSK5 /REST IS LIKE A STACK
|
||
|
||
/HERE TO SEND A NAK MESSAGE
|
||
SNDNAK, NLOAD NAK
|
||
JMS SNDCHR /2ND CHAR IS A NAK
|
||
CDF 0
|
||
TAD I [NAKFLG
|
||
JMS SNDCHR /3RD IS REASON
|
||
CDF 0
|
||
DCA I [NAKFLG /CLEAR NAK FLAG
|
||
JMP SNDAK4 /REST IS LIKE AN ACK MSG
|
||
|
||
/HERE TO SEND AN ACK MESSAGE
|
||
SNDACK, NL3777
|
||
CDF 0
|
||
AND I [RECVOK
|
||
DCA I [RECVOK /CLEAR NEED ACK FLAG
|
||
NLOAD ACK
|
||
JMS SNDCHR /2ND CHAR IS ACK
|
||
JMS SNDFIL /3RD IS FILL
|
||
SNDAK4, CDF 0
|
||
TAD I [RECVOK
|
||
JMS SNDCHR /4TH IS LAST GOOD MSG #
|
||
JMS SNDFIL /5TH CHAR IS FILL
|
||
/HERE TO PUT DESTINATION STATION ADR AND CRC ON MESSAGE
|
||
SNDAK6, NL1
|
||
JMS SNDCHR /6TH CHAR IS ALWAYS 1
|
||
TAD CRC2 /GET LOW PART OF CRC
|
||
DCA I AUTO1 /PUT HALF OF CRC IN MSG
|
||
TAD CRC1 /GET HIGH PART OF CRC
|
||
DCA I AUTO1 / DITTO
|
||
IFNZRO DP8ETR <
|
||
JMS OTR /TRACE MESSAGE
|
||
>/END OF IFNZRO DP8ETR
|
||
NLM2
|
||
CDF 0
|
||
DCA I [T10FLG
|
||
JMP ALP /FLAG FOR XMITTER
|
||
|
||
/HERE TO PUT A FILL CHARACTER INTO A MESSAGE
|
||
SNDFIL,
|
||
|
||
/HERE TO PUT A CHAR INTO A MESSAGE
|
||
SNDCHR, 0
|
||
CDF 10
|
||
AND (0377 /STRIP EXTRA BITS IF ANY
|
||
DCA TEMP1 /SAVE COPY OF CHAR
|
||
TAD TEMP1 /GET CHAR AGAIN
|
||
DCA I AUTO1 /PUT CHARACTER INTO MESSAGE
|
||
|
||
TAD TEMP1 /GET CHARACTER AGAIN
|
||
JMS CRCA /PUT INTO CRC CALCULATION
|
||
ISZ TEMP5 /COUNT CHAR
|
||
JMP I SNDCHR
|
||
JMP I SNDCHR
|
||
SNDEXN, 0 /SEND EXTENSIBLE NUMBER
|
||
/ NOTE: ALWAYS SENDS TWO BYTE EXTENSIBLE NUMBER, SINCE
|
||
/ OTHERWISE TOO HARD TO CALCULATE COUNTS.
|
||
DCA TEMPD /SAVE IT
|
||
TAD TEMPD /GET IT AGAIN
|
||
AND (177 /TURN OFF ALL BUT BOTTOM SEVEN
|
||
TAD (200 /TURN ON EXTENSIBLE BIT
|
||
JMS SNDCHR /SEND LOW BITS
|
||
TAD TEMPD /GET CHARACTER
|
||
AND (7600 /TURN OFF BOTTOM 7 BITS
|
||
BSW
|
||
CLL RAR
|
||
JMS SNDCHR /SEND HIGH BITS
|
||
JMP I SNDEXN /RETURN
|
||
/HERE TO SEND A NUMBERED MESSAGE TO 10
|
||
SNDMSG, NLM1
|
||
CDF 0
|
||
TAD I [T10TKR
|
||
DCA I [T10NCA /ADR OF BUFFER
|
||
TAD I [T10TKR
|
||
DCA AUTO1
|
||
CDF 10
|
||
TAD I AUTO1 /GET LENGTH OF DATA
|
||
TAD (12
|
||
NEGATE
|
||
CDF 0
|
||
DCA I [T10NWC /SET WC FOR BLOCK
|
||
CRCXI5, DCA CRC1 / ########
|
||
DCA CRC2 /INITIALIZE THE CRC
|
||
TAD I [T10TKR
|
||
DCA TEMP1
|
||
CDF 10
|
||
TAD TEMP1
|
||
DCA AUTO1
|
||
TAD I TEMP1
|
||
CDF 0
|
||
SPA CLA
|
||
ISZ I [GFLG
|
||
CDF 10
|
||
TAD (SOH
|
||
DCA I TEMP1
|
||
TAD (SOH
|
||
JMS CRCA /FIRST CHAR IS ALWAYS SOH
|
||
TAD I AUTO1
|
||
JMS CRCA /2ND IS HALF OF LENGTH
|
||
TAD I AUTO1
|
||
JMS CRCA /3RD IS HALF OF LENGTH
|
||
CDF 0
|
||
TAD I [RECVOK
|
||
JMS SNDCHR /4TH IS LAST # RECEIVED
|
||
TAD I AUTO1 /5TH CHAR IS MESSAGE NUMBER
|
||
JMS CRCA /PUT INTO CRC
|
||
CDF 0
|
||
TAD I [T10TKR
|
||
TAD (-T10LST
|
||
SNA
|
||
TAD (T10BF1-T10LST-T10LEN
|
||
JMP SD1
|
||
PAGE
|
||
SD1, TAD (T10LEN+T10LST
|
||
DCA I [T10TKR
|
||
CDF 10
|
||
JMP SNDAK6 /REST IS LIKE AN ACK
|
||
GETC, 0
|
||
CIF 0
|
||
JMS GETC1
|
||
JMP I GETC
|
||
ISZ GETC
|
||
JMP I GETC
|
||
FREC, 0
|
||
CIF 0
|
||
JMP FRC
|
||
FREC1, JMP I FREC
|
||
DMP1, 0 /HALT MSG FROM FIELD 1
|
||
CDF 0
|
||
DCA I [DMPAC
|
||
GTF
|
||
AND (7770 /GENERATE FIELD 1 FOR INST FIELD
|
||
IAC
|
||
DCA I [DMPLNK
|
||
CAF
|
||
TAD DMP1
|
||
DCA I [DMPTRP
|
||
CIF 0
|
||
JMP DMP2 /GO TO PRINT MESSAGE
|
||
NCSBEG, 0 /PUT OUT BEG OF NCS CONTROL MESSAGE
|
||
JMS NCSBG /BEGINNING (AC HOLDS NCT)
|
||
JMS SNDCHR /ZERO DLA
|
||
JMP I NCSBEG /EXIT
|
||
NCSBG, 0 /BEGINNING OF NCL MESSAGE MINUS DLA
|
||
JMS SNDCHR /PUT NCT (IN AC) INTO MESSAGE
|
||
TAD I DDB /GET FIRST WORD OF DDB
|
||
AND (0077 /CLEAR LEFT HALF
|
||
DCA TEMPB /SAVE LINK NUMBER
|
||
TAD TEMPB /GET IT
|
||
TAD (SNATAB-1 /GET DESTINATION NODE ADDR
|
||
DCA TEMPA /SAVE ADDR
|
||
TAD I TEMPA /GET DNA
|
||
JMS SNDCHR /PUT INTO MESSAGE
|
||
Z=OURNNM&177
|
||
TAD (Z
|
||
JMS SNDCHR /SNA
|
||
JMS SNDCHR /NCA
|
||
JMS SNDCHR /NCN
|
||
JMP I NCSBG /RETURN
|
||
CRCA, 0
|
||
CR0 /MACRO USED SO CODE ONLY IN ONE PLACE
|
||
JMP I CRCA
|
||
FEAPNT, 0 /SUBROUTINE TO POINT TO FEATURES
|
||
TAD I DDBSTS /GET DDB STATUS
|
||
AND (TTYBIT
|
||
SZA CLA
|
||
JMP FEA2
|
||
TAD [DDBSIZ
|
||
TAD DDB
|
||
FEA1, DCA TEMP2
|
||
JMP I FEAPNT
|
||
FEA2, TAD (LDBWID
|
||
TAD DDB
|
||
DCA TEMP3
|
||
TAD I TEMP3
|
||
DCA TTYFEA+2
|
||
TAD (DEVDSL
|
||
TAD DDB
|
||
DCA TEMP3
|
||
TAD I TEMP3
|
||
SPA CLA
|
||
NL1 /MODEM LINE
|
||
TAD (100 /ADD "CAN SET HOST" BIT [0(13)]
|
||
DCA TTYFEA+3
|
||
TAD (TTYFEA
|
||
JMP FEA1
|
||
DISCHK, 0 /CHECK IF A DEVICE CONNECTED DISCONNECT MUST BE SENT
|
||
TAD (-DEVN /LOOP CONTROL
|
||
DCA TEMPD / INITIALIZATION
|
||
TAD (RCVDSP+1 /FIRST ENTRY
|
||
DCA TEMPC
|
||
DISCLP, TAD I TEMPC /GET ENTRY
|
||
SNA CLA /SKIP UNLESS DISCONNECT REQUIRED
|
||
JMP DISSND /SEND DISCONNECT
|
||
ISZ TEMPC /ADVANCE POINTER
|
||
ISZ TEMPD /UP COUNTER AND SKIP IF DONE
|
||
JMP DISCLP /CONTINUE
|
||
JMP I DISCHK /RETURN TO CALLER
|
||
PAGE
|
||
FINMSG, /END UP MESSAGE
|
||
TAD CRC2 /GET LOW PART OF CRC
|
||
DCA I AUTO1
|
||
TAD CRC1 /GET HIGH PART OF CRC
|
||
DCA I AUTO1
|
||
CDF 0
|
||
TAD I [T10PTR
|
||
CDF 10
|
||
DCA AUTO1
|
||
TAD TEMP5 /GET SIZE OF MESSAGE
|
||
DCA I AUTO1 /PUT INTO HEADER
|
||
TAD TEMP5 /GET MESSAGE SIZE AGAIN
|
||
CLL RTR
|
||
CLL RTR
|
||
CLL RTR
|
||
CLL RTR
|
||
AND (0017 /ONLY 4 BITS ARE REAL
|
||
DCA I AUTO1 /PUT REST OF COUNT IN
|
||
ISZ AUTO1 /SKIP RESPONSE FIELD
|
||
CDF 0
|
||
TAD I [T10HSN /GET HIGHEST MESSAGE NUMBER SENT SO FAR
|
||
IAC
|
||
AND (0377
|
||
DCA I [T10HSN
|
||
TAD I [T10HSN
|
||
CDF 10
|
||
DCA I AUTO1 /PUT MESSAGE NUMBER INTO HEADER
|
||
CDF 0 /ADJUST T10PTR
|
||
TAD I [T10PTR
|
||
TAD (-T10LST
|
||
SNA
|
||
TAD (T10BF1-T10LST-T10LEN /ADJ IF LAST
|
||
TAD (T10LEN+T10LST
|
||
DCA I [T10PTR
|
||
ALP, CDF 10
|
||
CIF 0
|
||
JMP LOOP /RETURN TO FIELD 0 PROCESSING
|
||
XSCONF, TAD I TEMPB /GET NODE NO TO TRANSMIT CONF TO
|
||
AND (7377 /RESET FLAG
|
||
DCA I TEMPB /SAVE IN NEITAB
|
||
TAD I TEMPB
|
||
AND (377 /MASK OFF EXTRANEOUS BITS
|
||
CDF 0
|
||
DCA I [DISSNA /STORE FOR SUBR USE
|
||
CDF 10
|
||
JMS XDISBG /DO START OF MESSAGE
|
||
TAD (CNF /POINT TO DATA PART OF MESSAGE
|
||
DCA TEMPC /SAVE ADDRESS
|
||
TAD I TEMPC /GET COUNT
|
||
IAC /INCLUDE ITSELF
|
||
NEGATE /FOR ISZ
|
||
DCA TEMPB /LOOP CONTROL
|
||
XSCNF1, TAD I TEMPC /GET NEXT CHARACTER
|
||
ISZ TEMPC /POINT TO NEXT ONE
|
||
JMS SNDCHR /PUT INTO MESSAGE
|
||
ISZ TEMPB /CHECK IF DONE
|
||
JMP XSCNF1 /NO, CONTINUE
|
||
JMP FINMSG /END IT
|
||
SNDOBJ, 0 /SEND OBJECT TYPE
|
||
TAD I DDB /FIRST WORD OF DDB
|
||
AND (7700 /CLEAR RIGHT HALF
|
||
BSW
|
||
JMS SNDCHR /OBJECT TYPE
|
||
JMP I SNDOBJ /RETURN
|
||
DISSND, /SEND DEVICE UNAVAILABLE DISCONNECT
|
||
TAD TEMPC /RCVDSP TABLE ENTRY
|
||
TAD (-RCVDSP-1+SNATAB/POINT TO SNATAB ENTRY
|
||
DCA TEMP1
|
||
TAD I TEMP1 /GET DNA
|
||
CDF 0
|
||
DCA I [DISSNA /STORE FOR XDISBG
|
||
CDF 10
|
||
DCA I TEMP1 /CLEAR SNATAB ENTRY
|
||
JMS XDISBG /BEGINNING OF DISCONNECT
|
||
TAD (5 /COUNT
|
||
JMS SNDCHR
|
||
NL2
|
||
JMS SNDCHR /TYPE=DISCONNECT
|
||
TAD TEMPC /RCVDSP ENTRY
|
||
TAD (-RCVDSP-1+SLATAB/SLATAB ENTRY
|
||
DCA TEMP1
|
||
TAD I TEMP1 /GET DLA
|
||
JMS SNDEXN
|
||
JMS SNDCHR /SLA=0
|
||
TAD TEMPC
|
||
TAD (-RCVDSP-1+MMLTAB/MMLTAB HOLDS REASON
|
||
DCA TEMP1
|
||
TAD I TEMP1
|
||
JMS SNDCHR
|
||
TAD (RCVKRD /UNUSED VALUE
|
||
DCA I TEMPC /INTO RCVDSP
|
||
JMP FINMSG
|
||
/MUST FIND ROOM IN STATION TABLES IF DEV NEVER BEEN CONNECTED
|
||
FNDRM, CLA
|
||
TAD (-DEVN
|
||
DCA TEMP3
|
||
TAD (RCVDSP+1
|
||
DCA TEMPA
|
||
FNDRM1, TAD I TEMPA
|
||
TAD (-RCVKRD /LOOK FOR FREE ENTRY
|
||
SNA CLA
|
||
JMP FNDRM2
|
||
ISZ TEMPA
|
||
ISZ TEMP3
|
||
JMP FNDRM1
|
||
JMP XSTRT1 /NO ROOM
|
||
PAGE
|
||
XDRQ, 0
|
||
NLOAD DEVCHK /POINT TO CHUNK COUNT
|
||
TAD DDB
|
||
DCA TEMP3
|
||
TAD I TEMP3 /GET CHUNK COUNT
|
||
SMA CLA /ONLY SEND DATA REQUEST IF MINUS
|
||
JMP I XDRQ /RETURN
|
||
NLOAD DEVDRQ /ADDRESS OF DATA REQUEST COUNT WITHIN DDB
|
||
TAD DDB /DDB ADDRESS
|
||
DCA TEMP3 /STORE
|
||
TAD I TEMP3 /GET DATA REQ SENT
|
||
NEGATE
|
||
TAD (DRQCT /GET MAX ALLOWED
|
||
SPA SNA
|
||
JMP I XDRQ /NO DATA REQUEST TO SEND
|
||
DCA TEMP2 /SAVE NO. OF DATA REQ TO SEND
|
||
TAD (DRQCT /SET TO MAX NO.
|
||
DCA I TEMP3
|
||
JMS XSTMSG
|
||
TAD (50 /INTERRUPT NCT
|
||
JMS NCSBEG /BEGINNING OF MESSAGE
|
||
NL4 /COUNT ASSUMES DLA IS 2 BYTE FIELD
|
||
JMS SNDCHR /COUNT
|
||
NL6 /DATA REQUEST
|
||
JMS SNDCHR /TYPE
|
||
JMS NCSDLA /DLA
|
||
TAD TEMP2 /GET NO. OF DATA REQUESTS TO SEND
|
||
JMS SNDCHR /DRQ
|
||
JMP FINMSG
|
||
|
||
XSDIS0, JMS XSTMSG
|
||
TAD (50
|
||
JMS NCSBEG
|
||
TAD (5
|
||
JMS SNDCHR /COUNT
|
||
NL2
|
||
JMS SNDCHR /TYPE=DISCONNECT
|
||
JMS NCSDLA /DLA
|
||
TAD TEMPB
|
||
JMS SNDCHR /SLA
|
||
JMS SNDCHR /REASON=0
|
||
TAD (DEVRCN
|
||
TAD DDB
|
||
DCA TEMPA
|
||
TAD I TEMPA /SEE IF HAVE TO ISSUE CON AFTER DIS
|
||
SZA CLA /SKIP IF NOT
|
||
JMP XSD1
|
||
TAD TEMPB /INDEX
|
||
TAD (RCVDSP
|
||
DCA TEMPB
|
||
TAD (RCVKRD
|
||
DCA I TEMPB
|
||
TAD (6577 /ALL EXCEPT ACCEPT BIT AND "NEED CHARAC-
|
||
/TERISTICS" BITS [1(14)]
|
||
AND I DDBSTS /GET REST OF STATUS BITS
|
||
DCA I DDBSTS /STORE THEM BACK
|
||
TAD I DDB /[1(23)] GET DDB CONTENTS
|
||
AND (7700 /[1(23)] CLEAR CONNECT NUMBER
|
||
DCA I DDB /[1(23)] STORE BACK IN DDB
|
||
JMP FINMSG
|
||
XSTRT3, TAD (DEVBF1
|
||
TAD DDB
|
||
DCA TEMP4
|
||
TAD I TEMP4
|
||
SNA
|
||
IFNZRO CDRN<JMP XCDRCK>
|
||
IFZERO CDRN<JMP XSTRT7> /CHECK TO SEE IF THIS IS THE CDR
|
||
CDF 0 /WANT TO SET UP TEMP3 FOR GETCHR CALL IN FIELD 0
|
||
DCA I [TEMP3
|
||
CDF 10
|
||
JMS XSTMSG /SET UP TO SEND A MESSAGE
|
||
TAD (10 /NCT
|
||
JMS NCSBG /BEGINNING MINUS DLA
|
||
JMS NCSDLA /DLA
|
||
SKP
|
||
JMS SNDCHR /PUT IN MESSAGE
|
||
JMS GETC /FIELD 1 CALL TO GETCH
|
||
SKP
|
||
JMP .-3 /CONTINUE
|
||
TAD I TEMP4 /GET CHUNK STRING ADDRESS AGAIN
|
||
JMS FREC /FIELD 1 CALL TO FRECKS
|
||
DCA I TEMP4
|
||
JMP FINMSG /FINISH OFF MESSAGE
|
||
XDISBG, 0 /SUBR TO BEGIN DISCON OR CONF
|
||
JMS XSTMSG /START OF DISCONNECT
|
||
TAD (10 /MAKE NCT
|
||
JMS SNDCHR /NCT
|
||
CDF 0
|
||
TAD I [DISSNA
|
||
JMS SNDCHR /DNA
|
||
Z=OURNNM&177
|
||
TAD (Z
|
||
JMS SNDCHR /SNA
|
||
JMS SNDCHR /NCA
|
||
JMS SNDCHR /NCN
|
||
JMS SNDCHR /DLA
|
||
JMP I XDISBG /RETURN
|
||
IFNZRO CDRN<
|
||
XCDRCK, TAD DDB /GET THE DDB AGAIN
|
||
TAD (-CDRBLK /SEE IF CDR
|
||
SZA CLA /SKIP IF CDR
|
||
JMP XSTRT7 /NOT CDR. SEE IF NEED TO SEND STATUS
|
||
TAD (CDRBLK+DEVBF2 /GET SECOND BUFFER ADDRESS
|
||
DCA TEMP4
|
||
TAD I TEMP4
|
||
SNA CLA /NONZERO MEANS CARDS ARE WAITING
|
||
JMP XSTRT7 /NO CARDS WAITING. SEE IF WE NEED TO SEND STATUS
|
||
JMP XSTRT1 /CARDS ARE WAITING SO LET CLOCK LEVEL SET UP BUFFERS
|
||
>/END OF IFNZRO CDRN
|
||
PAGE
|
||
/ROUTINE CHECKS TO SEE IF ANY STATION CONTROL MESSAGES ARE PENDING
|
||
/
|
||
/
|
||
XMBT, 0
|
||
NL0
|
||
TAD (BTTAB-GTLEN /SET UP POINTERS TO CHECK TABLE
|
||
DCA TEMPB
|
||
XMBT2, TAD (GTLEN
|
||
TAD TEMPB
|
||
DCA TEMPB
|
||
TAD I TEMPB
|
||
SZA
|
||
JMP XMBTS /TRANSMISSION NEEDED
|
||
TAD (-BTEND /CHECK FOR END OF TABLE
|
||
TAD TEMPB
|
||
SZA CLA /DONE
|
||
JMP XMBT2 /CONTINUE SCAN OF TABLE
|
||
TAD (GTTAB
|
||
DCA TEMPB /CHECK FOR GOTOS
|
||
TAD I TEMPB
|
||
SNA CLA
|
||
JMP I XMBT /NO MSGS TO XMIT
|
||
XMBTS, CDF 0
|
||
DCA I [DISSNA /SET UP DNA FOR NCL MESSAGE
|
||
CDF 10
|
||
DCA I TEMPB /ZERO TABLE ENTRY IN BTTAB
|
||
JMS XDISBG /SET UP BEG OF MSG THRU DLA OF 0
|
||
ISZ TEMPB
|
||
TAD I TEMPB /GET TYPE OF STATION CTRL TO BE SENT
|
||
TAD (-13 /CHECK FOR REJECT
|
||
SNA CLA
|
||
JMP XRJT /TRANSMIT REJECT MESSAGE
|
||
TAD I TEMPB
|
||
AND (4
|
||
SZA CLA /4 BIT ON MEANS GOTO ACCEPT
|
||
JMP XGTO1
|
||
/EX DATA AND ACCEPT DEPOSIT THE SAME
|
||
/COUNT=5+DATA WORDS,COUNT SENT AS AN EXT FIELD
|
||
NL1
|
||
TAD TEMPB
|
||
DCA TEMPA /CALCULATE DATA COUNT
|
||
TAD I TEMPA
|
||
NEGATE
|
||
ISZ TEMPA
|
||
ISZ TEMPA
|
||
TAD I TEMPA /ASSUMES ADR1<ADR2, FRIEND!
|
||
SPA
|
||
JMP RRJ /TOO LARGE COUNT
|
||
CLL RAL /MULTIPLY BY 2
|
||
TAD (5
|
||
DCA BTCT
|
||
Z=T10LEN-22 /8 DDCMP,8 NCL ,2 COUNT
|
||
TAD (-Z-1
|
||
TAD BTCT
|
||
SMA CLA /COUNT TOO LARGE
|
||
JMP RRJ /ISSUE REJECT
|
||
TAD BTCT
|
||
JMS XRTE /COUNT,STAT CTRL,DNA,TYPE
|
||
JMS XADR /SHIP ADDRESS
|
||
NLM1
|
||
TAD TEMPB
|
||
DCA TEMPB
|
||
TAD I TEMPB
|
||
DCA XAR1
|
||
ISZ TEMPB
|
||
TAD I TEMPB
|
||
DCA XFR1 /FIELD SPECIFIED
|
||
ISZ TEMPB
|
||
TAD I TEMPB /ADDRESS
|
||
DCA XAR2
|
||
ISZ TEMPB
|
||
TAD I TEMPB
|
||
DCA XFR2
|
||
XFR1, 0 /CHANGE DATA FIELD
|
||
TAD I XAR1
|
||
CDF 10
|
||
DCA XBTSV
|
||
TAD XBTSV
|
||
AND (77
|
||
JMS SNDCHR
|
||
TAD XBTSV
|
||
BSW
|
||
AND (77
|
||
JMS SNDCHR
|
||
ISZ XAR1 /BUMP ADDRESS
|
||
JMP XCHK /CHECK FOR END
|
||
TAD XFR1
|
||
TAD (10 /BUMP TO NEXT FIELD
|
||
AND (7277 /ASSUMES FIELD 7 BUMPS TO FIELD 0
|
||
DCA XFR1
|
||
XCHK, TAD XAR1
|
||
NEGATE
|
||
TAD XAR2
|
||
SZA CLA
|
||
JMP XFR1 /CONTINUE
|
||
TAD XFR1
|
||
NEGATE
|
||
TAD XFR2
|
||
SZA CLA
|
||
JMP XFR1
|
||
JMP FINMSG
|
||
XBTSV, 0
|
||
XAR2, 0
|
||
BTCT, 0
|
||
XAR1, 0
|
||
XFR2, 0
|
||
XMTCHR, 0 /SEND A CHARACTERISTICS MESSAGE [1(14)]
|
||
TAD (CHRBIT /GET "NEED TO SEND CHARACTERISTICS" BIT [1(14)]
|
||
AND I DDBSTS /CLEAR REST [1(14)]
|
||
SNA CLA /SKIP IF IT WAS ON [1(14)]
|
||
XMTCRT, JMP I XMTCHR /RETURN TO CALLER IF NOT [1(14)]
|
||
JMP XMTCR1 /GO TO CONTINUATION [1(14)]
|
||
PAGE
|
||
/TRANSMIT A GOTO
|
||
XGTO1, TAD (5
|
||
JMS XRTE /SET UP COUNT,STA CTRL,DNA,TTYPE
|
||
JMS XADR /GET ADDRESS
|
||
CDF 0
|
||
TAD I [T10PTR
|
||
CDF 10
|
||
DCA TEMPA
|
||
NL4000 /FLAG TO SIGNAL SNDMSG GOO BEING XMTED
|
||
TAD I TEMPA
|
||
DCA I TEMPA
|
||
JMP FINMSG
|
||
/TRANSMIT A REJECT
|
||
RRJ, TAD (13
|
||
DCA I TEMPB
|
||
XRJT, NL3 /COUNT IS 3
|
||
JMS XRTE /COUNT STAT CTL,DNA,TYPE
|
||
JMP FINMSG
|
||
/COMMON ROUTINE TO SET UP COUNT,STATION CTRL,DNA,TYPE
|
||
/
|
||
XRTE, 0
|
||
JMS SNDEXN /AC HAS COUNT ALWAYS EXT
|
||
TAD (7 /STATION CTRL
|
||
JMS SNDCHR
|
||
NL0 /SET TO ZERO FOR SELF
|
||
JMS SNDCHR
|
||
TAD I TEMPB /TYPE
|
||
AND (13
|
||
JMS SNDCHR
|
||
JMP I XRTE
|
||
/GET ADDRESS FROM TABLE TO MESSAGE
|
||
/
|
||
XADR, 0
|
||
ISZ TEMPB
|
||
TAD (377
|
||
AND I TEMPB
|
||
JMS SNDCHR /SEND LOW ORDER BITS
|
||
TAD (7400
|
||
AND I TEMPB
|
||
BSW
|
||
CLL RTR /INSERT 4 HIGH ORDER BITS
|
||
DCA TEMPA /SAVE IT
|
||
ISZ TEMPB
|
||
TAD (70 /GET FIELD DESIGNATOR
|
||
AND I TEMPB
|
||
CLL RAL
|
||
TAD TEMPA
|
||
JMS SNDCHR
|
||
JMP I XADR
|
||
XSTRT2, TAD I DDBSTS
|
||
AND (OUTBIT+TTYBIT /MASK FOR OUTPUT DEVICES
|
||
SNA /SKIP IF EITHER OUTPUT OR TTY
|
||
JMP XSTRT3 /NEITHER, SEE IF MESSAGE TO BE SENT
|
||
AND (TTYBIT /SEE IF TTY
|
||
SZA CLA /SKIP IF NOT (I.E. OUTPUT)
|
||
JMP XSTRT4 /DEVICE IS A TTY SO DO TTY STUFF
|
||
JMS XDRQ /SEND DATA REQUEST IF NECESSARY
|
||
JMP XSTRT7 /WON'T RETURN IF DATA REQUEST SENT
|
||
EXFLD=1 /EXEC IN FIELD 1
|
||
FIELDS=4
|
||
IFNZRO DP8ETR <EIELDS=4>
|
||
|
||
ALPWD, 0
|
||
ALPCT, 0
|
||
DMPALP, 0
|
||
RDF /GET DATA FIELD
|
||
TAD (CDF /CONVERT TO INSTRUCTION
|
||
DCA DMPAL2 /STASH
|
||
TAD DMPAL2 /GET IT AGAIN
|
||
DCA ALPFLD /STORE IN ALP SUBROUTINE
|
||
QQ=EXFLD^10
|
||
CDF+QQ /SET TO FIELD IN WHICH CODE RESIDES
|
||
TAD DMPWAD /GET CURRENT ADDRESS
|
||
SNA /TEST FOR 0
|
||
JMP DMPAL2 /ZERO, SO JUST DO CRLF
|
||
TAD (-1
|
||
JMS ALP1
|
||
DMPAL2, 0 /WILL CHANGE DATA FIELD
|
||
JMS DMPCRL
|
||
JMP I DMPALP
|
||
ALP1, 0
|
||
AND (7760
|
||
DCA ALPWD
|
||
ALPFLD, 0 /WILL CHANGE DATA FIELD
|
||
JMS DMPSP
|
||
JMS DMPSP
|
||
TAD (-20
|
||
DCA ALPCT
|
||
ALPL, TAD I ALPWD
|
||
AND (3577 /TURN OFF SIGN AND EXTENSIBLE BITS
|
||
TAD (-40
|
||
SMA CLA
|
||
JMP ALPL1
|
||
ALPBL, TAD (56
|
||
JMP ALPLP
|
||
ALPL1, TAD I ALPWD
|
||
AND (3577
|
||
TAD (-141
|
||
SMA CLA
|
||
JMP ALPBL
|
||
TAD I ALPWD
|
||
AND (3577
|
||
ALPLP, JMS DMP
|
||
ISZ ALPWD
|
||
NOP
|
||
ISZ ALPCT
|
||
JMP ALPL
|
||
JMS DMPSP
|
||
JMP I ALP1
|
||
PAGE
|
||
DUMPI, /START OF DUMP
|
||
IOF
|
||
CLA
|
||
DMP000, DCA DMPWAD /START BY DUMPING WORD 0
|
||
DCA DMPFLD
|
||
JMP DMPPAG
|
||
DMP010, TAD DMPFLD
|
||
CLL RTL
|
||
RAL
|
||
TAD (CDF
|
||
DCA .+1
|
||
0
|
||
DMPLOP,
|
||
IFNZRO LPTN <
|
||
AND (0017 /CR AFTER EVERY 20 WORDS
|
||
>/END OF IFNZRO LPTN
|
||
IFZERO LPTN <
|
||
AND (0007 /CR AFTER EVERY 10 WORDS
|
||
>/END OF IFZERO LPTN
|
||
SZA
|
||
JMP DMPLP3
|
||
|
||
IFZERO LPTN <
|
||
DMPLP1, TAD I DMPWAD /GET NEXT WORD
|
||
SZA CLA
|
||
JMP DMPLP2
|
||
ISZ DMPWAD
|
||
JMP DMPLP1
|
||
JMP DMPINC /ALL DONE WITH INCE
|
||
DMPLP2, TAD DMPWAD
|
||
AND (7770
|
||
DCA DMPWAD
|
||
>/END OF IFZERO LPTN
|
||
|
||
JMS I (DMPALP
|
||
TAD DMPWAD
|
||
AND (0177 /SKIP EXTRA LINE EVERY 100 WORDS
|
||
SNA CLA
|
||
JMS DMPCRL
|
||
IFNZRO LPTN < JMS DMPTAB > /TAB IN CASE RIBBON SKEWED
|
||
TAD DMPFLD
|
||
TAD (0060
|
||
JMS DMP
|
||
TAD DMPWAD /ADR OF WORD BEING DUMPED
|
||
JMS DMPWDO
|
||
DMPLP3, AND (0007
|
||
SNA CLA
|
||
JMS DMPTAB
|
||
TAD I DMPWAD /GET NEXT WORD TO DUMP
|
||
JMS DMPWDO
|
||
JMS DMPSP
|
||
ISZ DMPWAD
|
||
TAD DMPWAD
|
||
SZA /WAS THAT LAST WORD IN FIELD ?
|
||
JMP DMPLOP
|
||
DMPINC, ISZ DMPFLD /ADVANCE FIELD
|
||
DMPPAG, TAD (0015 /CARRIAGE RETURN
|
||
JMS DMP
|
||
TAD (0014 /FORM FEED
|
||
JMS DMP
|
||
DMPTRC, TAD (-FIELDS /NEG NO OF FIELDS TO DUMP
|
||
TAD DMPFLD
|
||
SMA CLA
|
||
JMP DONE
|
||
JMP DMP010
|
||
DMPWDO, 0
|
||
DCA DMPWR /SAVE WORD TO DUMP
|
||
JMS DMPWD
|
||
JMS DMPWD
|
||
JMS DMPWD
|
||
JMS DMPWD
|
||
JMP I DMPWDO
|
||
DMPWD, 0
|
||
TAD DMPWR
|
||
RTL
|
||
RAL
|
||
DCA DMPWR
|
||
TAD DMPWR
|
||
RAL
|
||
AND (0007
|
||
TAD (0060
|
||
JMS DMP
|
||
JMP I DMPWD
|
||
DMPTAB, 0
|
||
IFNZRO LPTN <
|
||
JMS DMPSP
|
||
JMS DMPSP
|
||
>/END OF IFNZRO LPTN
|
||
JMS DMPSP
|
||
JMS DMPSP
|
||
JMP I DMPTAB
|
||
DMPSP, 0 /HERE TO PRINT A SPACE
|
||
TAD (0040
|
||
JMS DMP
|
||
JMP I DMPSP
|
||
DMPCRL, 0
|
||
TAD (0015 /CARRIAGE RETURN
|
||
JMS DMP
|
||
TAD (0012 /LINE FEED
|
||
JMS DMP
|
||
TAD (0012
|
||
JMS DMP
|
||
JMP I DMPCRL
|
||
|
||
IFNZRO LPTN <
|
||
DMP, 0
|
||
IFNDEF LA180 <
|
||
LPTSTB
|
||
LPTSKF /WAIT FOR LPT
|
||
>/END OF IFNDEF LA180
|
||
IFDEF LA180 <
|
||
CMA
|
||
DBTD /TRANSMIT DATA
|
||
PBST /SKIP WHEN DONE
|
||
>/END OF IFDEF LA180
|
||
JMP .-1
|
||
NLOAD 0
|
||
JMP I DMP
|
||
>/END OF IFNZRO LPTN
|
||
|
||
DMPFLD, 0 /FIELD TO DUMP
|
||
DMPWAD, 0 /ADR OF CURRENT WORD BEING DUMPED
|
||
DMPWR, 0
|
||
IFZERO LPTN <
|
||
DMP, 0
|
||
CTYTLS
|
||
CTYTSF
|
||
JMP .-1
|
||
NLOAD 0
|
||
JMP I DMP
|
||
>/END OF IFZERO LPTN
|
||
DONE, CIF 0
|
||
JMP INIALL /RESTART SOFTWARE
|
||
FNDRM2, NL1 /GET ANY OLD CRUD VALUE [1(15)]
|
||
DCA I TEMPA /AND STORE IT IN THE SLOT TO RESERVE IT [1(15)]
|
||
TAD TEMPA
|
||
TAD (-RCVDSP
|
||
DCA TEMPA
|
||
TAD I DDB
|
||
AND (7700
|
||
TAD TEMPA
|
||
DCA I DDB
|
||
JMP FNDRM4
|
||
FIELD 2
|
||
DEFINE HLT <7402>
|
||
CHK1=1
|
||
CHK2=2
|
||
CHK3=3
|
||
CHK4=4
|
||
CHK5=5
|
||
CHK6=6
|
||
CHK7=7
|
||
CHAUTO=17
|
||
*20
|
||
RCVQUE,
|
||
ZZ=CTLSIZ^10
|
||
BLOCK ZZ
|
||
RCVLIM,
|
||
ZZ=RCVQUE
|
||
ZZ=RCVLIM
|
||
Z=.+CNKSIZ-1
|
||
ZZ=-CNKSIZ
|
||
*Z&ZZ
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** SYSCHK - ONCE ONLY SYSTEM DIAGNOSTIC ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
/ONCE ONLY SYSTEM ANALYZER
|
||
/ CODE IS OVERWRITTEN BY CHUNKS SO CAN ONLY BE EXECUTED ONCE
|
||
|
||
FIRCNK, 0
|
||
*100 /ORIGIN FOR PAGE 0 LIT USED BY SYSCHK
|
||
FLG, 0
|
||
CHKST1, 0
|
||
|
||
CHKST2, 0
|
||
CHOCNT, 0
|
||
T10LCA, 0
|
||
INISEC, 0
|
||
0
|
||
PAGE
|
||
SYSCHK, SKP /TRY TO SKIP
|
||
7402 /IT DIDN'T WORK ? ! ?
|
||
NL0 /ZERO AC
|
||
SZA /SKIP IF AC IS ZERO
|
||
7402 /HARDWARE FAILURE
|
||
SPA /SKIP IF AC IS POSITIVE
|
||
7402 /HARDWARE FAILURE
|
||
SMA /SKIP IF AC IS NEGATIVE
|
||
SKP /SHOULDN'T HAVE SKIPPED SO OK
|
||
7402 /HARDWARE FAILURE
|
||
NL1 /PUT 1 IN AC
|
||
SNA /BE SURE AC IS NON ZERO
|
||
7402
|
||
|
||
BSW /IF AN 8E SWAP HALVES
|
||
TAD (7700
|
||
SNA CLA
|
||
JMP SCHK00 /CODE IS FOR RIGHT MACHINE
|
||
JMS INFTYP /TYPE CR/LF/?
|
||
JMS INLTYP /TRYING TO RUN 8I CODE ON AN 8E(OR VICE VERSA)
|
||
DC7MSG
|
||
" ;"W;"O;"N;47;"T;" ;"R;"U;"N;" ;"O;"N;" ;"A;" ;"P;"D;"P;"8
|
||
4000+"I
|
||
HLT /RETURNS HERE AFTER TYPEING MESSAGE
|
||
JMP SYSCHK /IF OPERATOR CONTINUES TEST AGAIN
|
||
SCHK00, JMS INLTYP
|
||
15;15;207;12;377
|
||
"[;"I;"N;"I;"T;"I;"A;"L;"I;"Z;"I;"N;"G
|
||
" ;
|
||
IFNZRO FTLBACK < "L;"O;"O;"B;"A;"C;"K;" ;"T;"E;"S;"T;" >
|
||
IFZERO FTLBACK < DC7MSG >
|
||
" ;4366
|
||
CDFINS /PICK UP WORD FROM INSTRUCTION FIELD
|
||
TAD I (203 /GET VERSION NUMBER
|
||
DCA CHK1 /SAVE IT
|
||
CDFCNK
|
||
TAD CHK1 /GET VERSION
|
||
AND (7700
|
||
CLL RTR
|
||
RTR
|
||
RTR
|
||
JMS INIOCT
|
||
JMS INLTYP
|
||
"(+4000
|
||
TAD CHK1
|
||
AND (0077
|
||
JMS INIOCT /TYPE VERSION NUMBER
|
||
JMS INLTYP
|
||
|
||
");" ;"N;"O;"D;"E
|
||
240 /BLANK
|
||
42
|
||
IFDEF DC92ID <
|
||
DC92ID
|
||
>/END OF IFDEF DC92ID
|
||
IFNDEF DC92ID <
|
||
"D;"N;"9;"2
|
||
>/END OF IFNDEF DC92ID
|
||
4042
|
||
JMS INLTYP
|
||
"];15;15;12;4012
|
||
JMP SCHK01
|
||
|
||
|
||
PAGE
|
||
SCHK01, CAF /CLEAR ALL FLAGS
|
||
|
||
/HERE TO CHECK SYSTEM CLOCK IS PRESENT AND ACCURATE
|
||
NL1 /RESET THE CLOCK
|
||
CLKECI /RESET THE CLOCK
|
||
JMS SCHK02 /GO GET 1ST TICK
|
||
CLKSCF /AND THERE SHOULD NOT BE ANOTHER FLAG UP YET
|
||
SKP /OK IT WASN'T UP AGAIN
|
||
JMP SCHK03 /IT DID COME UP AGAIN ??
|
||
|
||
/ASSUME LINE FREQUENCY IS 50CYCLE
|
||
TAD (-5153-240 /5153 = 2667. (LOOP = 7.5)
|
||
JMS SCHK02 /TIME TICK
|
||
TAD CHK1
|
||
SMA /BE SURE IT ALMOST TOOK UP ALL OF TIME
|
||
JMP SCHK03 /NO WHERE NEAR RIGHT
|
||
TAD (500
|
||
SMA CLA /IS THIS IN RANGE FOR 50 CYCLE ?
|
||
JMP SCHK04 /YES
|
||
JMP SCHK03
|
||
|
||
/HERE TO WAIT FOR A CLOCK TICK
|
||
/ LOOP TAKES 10.25US ON PDP8I
|
||
/ LOOP TAKES 6.2US ON A PDP8E
|
||
SCHK02, 0
|
||
DCA CHK1 /SAVE MAX COUNT
|
||
|
||
/TIME TWO TICKS FOR PDP8A
|
||
CLKSCF /(1.2US)IS CLOCK FLAG UP ?
|
||
SKP /(1.2US) NO
|
||
JMP .+4 /HAVE SEEN ONE CLOCK TICK
|
||
ISZ CHK1 /(2.6US)
|
||
JMP .-4 /(1.2US)KEEP WAITING FOR CLOCK
|
||
JMP SCHK03 /TIMED OUT ON FIRST TICK !?!
|
||
CLCL
|
||
|
||
WT, CLKSCF /(1.2 OR 4.25US)IS CLOCK FLAG UP ?
|
||
JMP .+3
|
||
CLCL
|
||
JMP I SCHK02 /HAVE SEEN ONE CLOCK TICK
|
||
ISZ CHK1 /(2.6 OR 3.0US)
|
||
JMP WT /(1.2 OR 1.5US)KEEP WAITING FOR CLOCK
|
||
|
||
/HERE WHEN CLOCK IS MISBEHAVING
|
||
SCHK03, JMS INBTYP /TYPE A CR/LF/%
|
||
JMS INLTYP
|
||
"D;"K;"C;"8;" ;"C;"L;"O;"C;"K;
|
||
" ;"E;"R;"R;"O;"R;215;4012
|
||
HLT
|
||
JMP SCHK01 /TRY AGAIN IF HE INSISTS
|
||
|
||
HERTZF, 6 /NONZERO MEANS RUNNING ON 50 CYCLE
|
||
/MEMORY PARITY CHECK
|
||
|
||
SCHK04,
|
||
|
||
/HERE TO SEE IF MEMORY PARITY OPTION IS PRESENT
|
||
/ NOT NECESSARY ON PDP8A'S
|
||
|
||
JMP SCHK06
|
||
|
||
SCHK05, 0
|
||
/HERE TO SEE HOW MUCH MEMORY IS PRESENT
|
||
/ ADJUST DISMAX, DISCDF AND TRACE CODE ACCORDINGLY
|
||
|
||
SCHK06, TAD (177
|
||
CDF 30 /BUGGER PAGE 0 FIELD 3 LOC
|
||
IFNZRO FTDEBUG < DCA I (BUG >/INITIALIZE BUGGER FOR TRACE
|
||
IFZERO FTEDEBUG < CLL CLA > /CLEAR AC FOR NEXT INSTR
|
||
DCA I (DISMAX /INITIALIZE MAX FIELD WE HAVE
|
||
SCHK07, TAD I (DISMAX
|
||
CLL RAL
|
||
CLL RTL
|
||
TAD (CDF
|
||
DCA .+1
|
||
CDFINS
|
||
TAD (7402 /BIT PATTERN TO STORE INTO FIELD
|
||
DCA I (0 /AND STORE IN MEMORY
|
||
TAD (-7402
|
||
TAD I (0 /WILL LEAVE 0 IF THERE BANK PRESENT
|
||
CDF 30
|
||
SZA CLA /IS THIS MEMORY BANK THERE ?
|
||
JMP SCHK08 /NO
|
||
ISZ I (DISMAX
|
||
TAD I (DISMAX
|
||
TAD (-10
|
||
SZA CLA
|
||
JMP SCHK07
|
||
SCHK08, TAD I (DISMAX
|
||
NEGATE
|
||
TAD (0010
|
||
DCA I (DISMIN
|
||
|
||
JMP SCHK10 /TEST TTY LINES
|
||
|
||
PAGE
|
||
SCHK10,
|
||
LISTOG TTYN
|
||
IFNZRO TTYN <
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** SYSCHK FOR TTY LINES ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
/HERE TO CHECK TTYS ARE REASONABLE
|
||
/ FIRST CHECK THAT CHAR OUTPUT DOES NOT RAISE FLAG IMMEDIATELY
|
||
/ AND THAT IT DOES RAISE FLAG A REASONABLE AMOUNT OF TIME
|
||
|
||
CDFCNK
|
||
|
||
/NECESSARY TO INITIALIZE TRANSMIT/RECEIVE SERVICE ADDRESS
|
||
/IF KL8A IS USED FOR TTY LINES.
|
||
ZZ=TTYN
|
||
NL0
|
||
TAD (KL8AS
|
||
IFNZRO ZZ <
|
||
ZZ=ZZ-4
|
||
MCCD /INIT FIRST KL8A
|
||
MSLB /SET UP ADDRESS
|
||
>/END OF IFNZRO ZZ
|
||
IFNZRO ZZ <
|
||
ZZ=ZZ-4
|
||
MCCD1
|
||
MSLB1 >/END OF IFNZRO ZZ
|
||
IFNZRO ZZ <
|
||
ZZ=ZZ-4
|
||
MCCD2
|
||
MSLB2 >/END OF KL8A2
|
||
IFNZRO ZZ <
|
||
ZZ=ZZ-4
|
||
MCCD3
|
||
MSLB3 >/KL8A#3
|
||
NL0
|
||
DCA CHK1 /START WITH TTY0
|
||
SCHK11, CDFCNK /SET TO CHUNK DATAFIELD
|
||
TAD CHK1
|
||
TAD (DDBTAB+1
|
||
DCA CHK2
|
||
TAD I CHK2 /GET ADR OF DEVICE BLOCK
|
||
TAD [LDBADR /POINT TO DEVICE ADDRESS WORD
|
||
DCA CHK2 /SAVE ADR OF WORD WITH DEVICE ADR
|
||
TAD (-15 /GIVE TTY .208 SEC TO XMT FLAG
|
||
DCA INISEC
|
||
DCA CHK5 /SET NONZERO TO FLAG LINE IS RUNNING OPEN
|
||
|
||
TAD (207 /ASCII BELL
|
||
|
||
|
||
/HERE TO TYPE A CHAR
|
||
DCA CHK3 /SAVE CHAR
|
||
TAD I CHK2 /GET TLS FOR LINE
|
||
/KL8A PROCESSING
|
||
AND (7774 /GENERATE INSTR FOR TRANSMISSION
|
||
DCA INST
|
||
NLM2 /GENERATE A READ STATUS INSTR
|
||
TAD INST
|
||
DCA INST2
|
||
TAD I CHK2 /GET LINE #
|
||
AND (3
|
||
BSW
|
||
CLL RTL /PUT INTO HIGH ORDER BITS
|
||
TAD CHK3 /INCLUDE CHAR
|
||
INST, 0
|
||
NL0
|
||
INST2, 0 /READ STATUS
|
||
AND (4 /TRANSMIT FLAG SET ALREADY?
|
||
SZA CLA /NO THAT IS AS IT SHOULD BE
|
||
JMP SCHK29 /MUCH TOO FAST
|
||
SCHK12, JMS SCHK17 /SEE IF LINE HAS XMT INTERRUPTED YET
|
||
JMP SCHK20 /IT HAS
|
||
|
||
SCHK13, JMS SCHK98 /HAVE WE WAITED TOO LONG ?
|
||
JMP SCHK12 /NO KEEP WAITING
|
||
JMS SCHK28 /GIVE TTY ID
|
||
JMS INLTYP
|
||
"N;"O;" ;"X;"M;"T;" ;"F;"L;"A;4000+"G
|
||
JMP SCHK22
|
||
SCHK20, JMS SCHK17
|
||
JMP .+2
|
||
|
||
JMP SCHK21 /NONE
|
||
TAD FLG
|
||
SNA CLA
|
||
JMP SCHK20
|
||
SCHK18, TAD CHK3 /GET CHAR IF RCV INTERRUPT
|
||
SNA /IS IT NULL
|
||
ISZ CHK5 /YES
|
||
TAD (-207
|
||
SNA CLA /IS TTY IN LOOPBACK MODE ?
|
||
JMP SCHK26 /YES SO TELL OPERATOR
|
||
SCHK21, JMS SCHK98 /CHECK CLOCK
|
||
JMP SCHK20 / KEEP WAITING TO TEST FOR LOOP BACK MODE
|
||
SCHK22, NL0
|
||
JMS SCHK17 /CLEAR XMT FLAG IF UP
|
||
NOP
|
||
TAD CHK5 /IS LINE RUNNING OPEN ?
|
||
SNA CLA
|
||
JMP SCHK23 /NOT RUNNING OPEN
|
||
JMS SCHK28 /TYPE TTY LINE #
|
||
TAD (ERR23-1
|
||
JMS INITYP
|
||
|
||
SCHK23, ISZ CHK1 /ADVANCE TO NEXT TTY #
|
||
TAD CHK1 /GET NEW LINE #
|
||
TAD (-TTYN
|
||
SZA CLA /HAVE WE DONE ALL OF THE LINES ?
|
||
JMP SCHK11 /GO DO NEXT TTY LINE
|
||
JMP SCHK30
|
||
|
||
|
||
PAGE
|
||
|
||
/HERE TO SEE IF TTY HAS XMT INTERRUPTED
|
||
SCHK17, 0
|
||
SCHKC, TAD I CHK2 /GET THE TLS INSTRUCTION
|
||
AND (7770 /MASK TO MAKE MSAB TO JUMP TO ADDRESS
|
||
IAC
|
||
DCA .+1
|
||
0
|
||
ISZ SCHK17 /NORMAL(I.E. SKIP) RETURN
|
||
JMP I SCHK17
|
||
|
||
/HERE WHEN TTY IS APPARENTLY IN LOOP BACK MODE
|
||
SCHK26, JMS SCHK28 /TYPE TTYP#
|
||
JMS INLTYP
|
||
"I;"S;" ;"I;"N;" ;"L;"O;"O;"P;"B;"A;"C;"K;" ;"M;"O;"D;4000+"E
|
||
HLT
|
||
JMP SCHK23 /WE ARE DONE WITH THIS LINE
|
||
|
||
|
||
/HERE TO TYPE TTY IDENTIFICATION
|
||
SCHK28, 0
|
||
JMS INBTYP /TYPE A CR/LF/%
|
||
JMS INLTYP
|
||
"T;"T;4000+"Y
|
||
TAD CHK1 /GET LINE NUMBER
|
||
JMS INIOCT /TYPE OCTAL NUMBER
|
||
JMS INLTYP
|
||
4240 /SPACE
|
||
JMP I SCHK28
|
||
|
||
SCHK29,
|
||
TAD FLG
|
||
SZA CLA
|
||
JMP SCHK12 /END OF IFDEF BA892
|
||
JMS SCHK28 /TYPE TTY NAME
|
||
JMS INLTYP
|
||
"X;"M;"T;4240
|
||
JMS SCHK93 /TYPE "FLAG WON'T CLEAR"
|
||
HLT
|
||
JMP SCHK10 /REDO SYSCHK FOR TTY'S
|
||
|
||
SCHK24, JMS SCHK28 /TYPE TTY ID
|
||
JMS INLTYP
|
||
"R;"C;"V;4240
|
||
JMS SCHK93 /TYPE "FLAG WON'T CLEAR
|
||
HLT
|
||
JMP SCHK10 /TRY AGAIN IF HE INSISTS
|
||
|
||
|
||
KL8AT, 0
|
||
AND (3 /SAVE LINE THAT CAUSE JUMP
|
||
NEGATE
|
||
DCA TM /LINE NO FOR TRANSMIT
|
||
DCA FLG
|
||
SCHKS, TAD I CHK2
|
||
AND (3 /GET LINE NO
|
||
TAD TM
|
||
SZA CLA /IF SAME TRANSMIT DONE
|
||
ISZ SCHK17 /NO TRANS FOR LINE YET
|
||
JMP I SCHK17
|
||
KL8AR, 0
|
||
AND (3
|
||
NEGATE
|
||
DCA TM
|
||
NLM1 /NONZERO MEANS REC CHAR FLAG, 0 FOR XMT
|
||
DCA FLG
|
||
TAD I CHK2
|
||
AND (7770
|
||
TAD (5
|
||
DCA .+1
|
||
0
|
||
AND (377
|
||
DCA CHK3
|
||
JMP SCHKS
|
||
TM, 0
|
||
PAGE
|
||
>/END OF IFNZRO TTYN
|
||
LISTOG TTYN
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** SYSCHK FOR SYNCHRONOUS INTERFACET ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
/HERE TO CHECK SYNCHRONOUS INTERFACE
|
||
/ CHK6 IS A FLAG FOR XMT TEST
|
||
/ CHK5 IS A FLAG FOR ANY CHAR RECEIVED
|
||
/ CHK4 IS A FLAG FOR NONSYNCH RECEIVED TEST
|
||
|
||
CHKDPT=200 /TIME FOR SYNCHRONOUS INTERFACE TO COME ALIVE
|
||
/ APP 2 SECONDS
|
||
|
||
SKP
|
||
HLT
|
||
|
||
SCHK30, CDFCNK /SET RIGHT DATA FIELD
|
||
JMS SCHKA1 /INITIALIZE BUFFERS
|
||
NLM1
|
||
DCA CHK6 /FLAG 1ST TIME THROUGH XMT TEST
|
||
TAD (0020
|
||
DCA CHKST1 /INITIAL STS1
|
||
TAD (5400
|
||
DCA CHKST2 /INITIAL STS2
|
||
|
||
CDFINS
|
||
TAD (F10TCH-1 /POINTER TO TEST CHARS
|
||
DCA AUTO1
|
||
DCA I AUTO1
|
||
DCA I AUTO1
|
||
DCA I AUTO1
|
||
TAD (SYN
|
||
DCA I AUTO1
|
||
CDFCNK
|
||
|
||
SCHK31, NLM1
|
||
DCA CHK5 /FLAG FIRST TIME THROUGH BASIC REC TEST
|
||
NLM1
|
||
DCA CHK4
|
||
SCHK32,
|
||
DPSCSI /CLEAR SYNCHRONOUS INTERFACE
|
||
TAD (5400 /TERMINAL READY; INTERFACE ENABLE; TRANS REQ
|
||
DPSLCC /SET INITIAL CONDITIONS
|
||
NL0
|
||
Z=2100 /RECEIVE FIELD=2,TRANSMIT FIELD=1
|
||
TAD (Z
|
||
DPSLFL
|
||
NL0
|
||
|
||
CDFINS
|
||
TAD (SYNBUF-1
|
||
DCA I (T10CA /SET UP BUFFER TO SEND SYNCHS
|
||
TAD (-4
|
||
DCA I (T10WC /SET UP WC TO SEND SYNCHS
|
||
DCA I (T10NCA /SEND SYNCH'S WHEN DONE
|
||
CDFCNK
|
||
DCA CHOCNT /NO CHARS SEND YET
|
||
TAD (-SYNBUF-3
|
||
DCA T10LCA
|
||
DPSGTT /ENABLE DP8E TRANSMITTER
|
||
JMS SCHK77 /ENABLE RECEIVER
|
||
|
||
TAD (-CHKDPT
|
||
DCA INISEC /TIME FOR INTERFACE TO COME ALIVE
|
||
|
||
SCHK33,
|
||
|
||
Z=CNKFLD^40
|
||
DPSRS1 /GET TRANSMIT FIELD SELECT
|
||
AND (0340
|
||
TAD (-Z
|
||
SZA /IS IT OK ?
|
||
JMS SCHK39
|
||
DPSRS2 /GET RECEIVE FIELD SELECT
|
||
AND (0340
|
||
Z=100 /RECEIVE FIELD =2
|
||
TAD (-Z
|
||
SZA /IS IT OK ?
|
||
JMS SCHK39
|
||
|
||
DPSRS1 /GET STATUS 1
|
||
AND (0020 /MASK FOR MODEM READY
|
||
SNA CLA
|
||
JMP SCHK35
|
||
|
||
DPSRS2
|
||
AND (5400 /MASK FOR TERMINAL READY,CARRIER, &CLEAR TO SEND
|
||
TAD (-5400
|
||
SZA CLA
|
||
JMP SCHK35 /WAIT A WHILE
|
||
|
||
JMS SCHK75
|
||
NOP
|
||
NL0 /CHECK RECEIVER
|
||
JMS SCHK66 /SERVICE TRANSMITTER
|
||
TAD CHOCNT
|
||
TAD (40 /SEE HOW MANY CHARS SENT
|
||
SPA CLA
|
||
JMP SCHK40 /BRANCH IF XMTTER GOING
|
||
SCHK35, JMS SCHK98 /SEE IF CLOCK HAS TIMED OUT
|
||
JMP SCHK33 /NOT YET
|
||
|
||
/HERE IF TIMER GOES OFF WHILE TRYING TO INITIALIZE DP01 OR DP8E
|
||
NL0
|
||
|
||
DPSRS1
|
||
AND (0020
|
||
NEGATE /GET MODEM READY BIT
|
||
TAD CHKST1
|
||
SZA CLA
|
||
JMP SCHK36 /IF STATUS CHANGED DISPLAY IT
|
||
DPSRS2
|
||
AND (5400
|
||
NEGATE /GET STS2 BITS
|
||
TAD CHKST2
|
||
SZA CLA
|
||
JMP SCHK36
|
||
TAD CHKST1
|
||
SNA CLA
|
||
JMP SCHK31 /KEEP ONWAITING
|
||
TAD CHKST2
|
||
TAD (-5400 /CHECK OTHER STS WORD
|
||
SZA CLA
|
||
JMP SCHK31
|
||
JMP SCHK37
|
||
|
||
PAGE
|
||
SCHK36, NLM1
|
||
DCA CHK6 /ENABLE SCHK37
|
||
DPSRS1
|
||
AND (0020
|
||
DCA CHKST1 /GET 1ST STATUS
|
||
DPSRS2
|
||
AND (5400
|
||
DCA CHKST2 /GET 2ND STATUS
|
||
TAD CHKST1
|
||
SZA CLA
|
||
JMP SCHKX1
|
||
JMS INBTYP /TYPE A CR/LF/%
|
||
JMS INDTYP /TYPE DP8E OR DP01
|
||
JMS INLTYP
|
||
"M;"O;"D;"E;"M;" ;"N;"O;"T;" ;"R;"E;"A;"D;4000+"Y
|
||
SCHKX1, NL4000
|
||
AND CHKST2 /MASK FOR CARRIER
|
||
SZA CLA
|
||
JMP SCHKX2
|
||
JMS INBTYP /TYPE A CR/LF/%
|
||
JMS INDTYP /TYPE DP8E OR DP01
|
||
JMS INLTYP
|
||
"N;"O;" ;"C;"A;"R;"R;"I;"E;4000+"R
|
||
SCHKX2, TAD (1000
|
||
AND CHKST2 /MASK FOR TERMINAL READY
|
||
SZA CLA
|
||
JMP SCHKX3
|
||
JMS INBTYP /TYPE A CR/LF/%
|
||
JMS INDTYP /TYPE DP8E OR DP01
|
||
JMS INLTYP
|
||
"T;"E;"R;"M;" ;"N;"O;"T;" ;"R;"E;"A;"D;4000+"Y
|
||
SCHKX3, TAD (0400
|
||
AND CHKST2 /MASK FOR CLEAR TO SEND
|
||
SZA CLA
|
||
JMP SCHKX4
|
||
JMS INBTYP /TYPE A CR/LF/%
|
||
JMS INDTYP /TYPE DP8E OR DP01
|
||
JMS INLTYP
|
||
"N;"O;"T;" ;"C;"L;"E;"A;"R;" ;"T;"O;" ;"S;"E;"N;4000+"D
|
||
SCHKX4, JMP SCHK31 /KEEP TRYING
|
||
SCHK37, ISZ CHK6 /HAVE WE COMPLAINED ONCE ALREADY ?
|
||
JMP SCHK31 /YES SO JUST KEEP TRYING
|
||
JMS INBTYP /TYPE A CR/LF/%
|
||
JMS INDTYP /TYPE DP8E OR DP01
|
||
JMS INLTYP
|
||
"X;"M;"T;" ;"N;"O;"T;" ;"R;"E;"A;"D;4000+"Y
|
||
JMP SCHK31
|
||
|
||
PAGE
|
||
/HERE BECAUSE WC OR CA DOESN'T LOOK RIGHT AT END OF XMISSION
|
||
0 /PUT AC HERE WHEN CALLED
|
||
SCHK38, 0
|
||
CDFCNK
|
||
DCA SCHK38-1 /SAVE AC CONTENTS
|
||
JMS INFTYP /TYPE CR/LF/?
|
||
JMS INDTYP /TYPE DP8E OR DP01
|
||
JMS INLTYP
|
||
"W;"C;" ;"O;"R;" ;"C;"A;" ;"W;"R;"O;"N;4000+"G
|
||
JMP SCHK30-1 /TRY ALL OVER AGAIN IF HE CONTINUES
|
||
|
||
/HERE BECAUSE FIELD SELECT FAILED
|
||
SCHK39, 0
|
||
DCA CHK3
|
||
JMS INFTYP /TYPE CR/LF/?
|
||
JMS INDTYP /TYPE DP8E OR DP01
|
||
JMS INLTYP
|
||
"F;"I;"E;"L;"D;" ;"S;"E;"L;"E;"C;"T;" ;"F;"A;"I;"L;"E;4000+"D
|
||
TAD CHK3 /GET BAD VALUE-CNKFLD
|
||
TAD (CNKFLD /LEAVES ONLY BAD VALUE
|
||
JMS INIOCT /TYPE IT
|
||
TAD (257 /ASCII /
|
||
JMS INITY8
|
||
NL0
|
||
TAD (CNKFLD /GET RIGHT VALUE
|
||
JMS INIOCT /AND TYPE IT
|
||
JMP SCHK30-1 /TRY ALL OVER AGAIN IF HE INSISTS
|
||
|
||
|
||
/HERE WHEN SPECIAL CHAR DETECT FAILS
|
||
SCHK57, 0
|
||
JMS INFTYP /TYPE CR/LF/?
|
||
JMS INDTYP /TYPE DP8E OR DP01
|
||
JMS INLTYP
|
||
"C;"H;"A;"R;" ;"D;"E;"T;"E;"C;"T;" ;"S;"K;"I;"P;" ;"F;"A;"I;"L;"E;4000+"D
|
||
JMP SCHK30-1 /TRY AGAIN IF HE INSISTS
|
||
|
||
SCHK55, JMS INFTYP /TYPE CR/LF/?
|
||
JMS INDTYP /TYPE DP8E OR DP01
|
||
JMS INLTYP
|
||
"R;"E;"A;"D;" ;"C;"H;"A;"R;" ;"D;"E;"T;"E;"C;"T;"E;"D;4240
|
||
TAD CHK1
|
||
JMS INIOCT
|
||
NL0
|
||
JMS INLTYP
|
||
" ;"R;"I;"G;"H;"T;4000+"=
|
||
NL3
|
||
JMS INIOCT
|
||
JMP SCHK30-1 /TRY AGAIN IF HE INSISTS
|
||
|
||
PAGE
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** SYSCHK FOR SYNCHRONOUS INTERFACE - RECEIVE ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
/HERE TO SEE WHAT WE ARE RECEIVING
|
||
/ BE SURE STUFF IS ALSO GOING OUT(TO EXECISE LOOPBACK, CROSSTALK, ETC.)
|
||
SCHK40, NLM1
|
||
DCA CHK6 /FLAG 1ST TIME THROUGH XMT TEST
|
||
TAD (-CHKDPT
|
||
DCA INISEC /TIME TO COME ALIVE
|
||
|
||
SCHK42, JMS SCHK66 /CHECK SYNCHRONOUS TRANSMITTER
|
||
|
||
JMS SCHK75 /GET NEXT CHAR FROM RECEIVER
|
||
JMP SCHK45 /NONE FOR A WHILE
|
||
DCA RCVQUE /SAVE CHAR
|
||
NLM1
|
||
DCA CHK5 /FLAG FOR BASIC REC TEST
|
||
TAD RCVQUE
|
||
TAD (-SYN
|
||
SZA CLA /WAS CHAR A SYNC ?
|
||
JMP SCHK44 /NO SO COMPLAIN
|
||
|
||
DPSSCD /SKIP ON SPECIAL CHAR DETECT
|
||
JMS SCHK57 /SHOULD HAVE SKIPPED
|
||
DPSSCD /SKIP ABOVE SHOULD HAVE CLEARED FLAG
|
||
SKP CLA
|
||
JMS SCHK57 /IT DIDN'T SO COMPLAIN
|
||
DPSRCD /GET SPECIAL CHAR INDEX
|
||
DCA CHK1
|
||
NLM3 /SHOULD BE 3
|
||
TAD CHK1
|
||
SZA CLA
|
||
JMP SCHK55 /IT WASN'T ?
|
||
|
||
JMP SCHK50 /YES SO ON TO NEXT TEST
|
||
|
||
SCHK44,
|
||
TAD RCVQUE
|
||
NEGATE
|
||
TAD CHK4
|
||
SNA CLA /HAVE WE DISPLAYED THIS ONE ALREADY ?
|
||
JMP SCHK32 /YES SO DON'T SHOW AGAIN
|
||
TAD RCVQUE
|
||
DCA CHK4
|
||
JMS INBTYP /TYPE CR/LF/%
|
||
JMS INDTYP /TYPE DP8E OR DP01
|
||
JMS INLTYP
|
||
"R;"C;"V;"';"D;4000+"
|
||
TAD RCVQUE
|
||
JMS INIOCT
|
||
JMP SCHK32 /LOOP ON ERROR
|
||
|
||
/HERE TO CHECK SYNCHRONOUS TRANSMITTER
|
||
/ IF T10WC HAS EXPIRED USE T10NWC&T10NCA TO REFRESH IT
|
||
/ ELSE SEND SYNCH'S
|
||
SCHK66, 0
|
||
|
||
DPSSTO
|
||
JMP I SCHK66 /CHECK DP8E FOR WC OVERFLOW
|
||
DPSSTO
|
||
SKP CLA
|
||
JMS SCHK56 /BE SURE FLAG CLEARED
|
||
CDFINS
|
||
TAD I (T10CA
|
||
TAD T10LCA /CHECK CA
|
||
SZA
|
||
JMS SCHK38 /BE SURE IT IS KOSHER
|
||
TAD I (T10WC
|
||
SZA
|
||
JMS SCHK38 /CHECK WC ALSO
|
||
|
||
TAD I (T10NCA
|
||
SNA
|
||
JMP SCHK67
|
||
DCA I (T10CA
|
||
DCA I (T10NCA
|
||
TAD I (T10NWC
|
||
DCA I (T10WC
|
||
JMP SCHK68
|
||
SCHK67, TAD (SYNBUF-1
|
||
DCA I (T10CA /NO MSG SO SEND SYNCS
|
||
NLM1
|
||
DCA I (T10WC
|
||
SCHK68, TAD I (T10WC
|
||
TAD CHOCNT
|
||
DCA CHOCNT
|
||
TAD I (T10CA
|
||
NEGATE
|
||
TAD I (T10WC
|
||
DCA T10LCA
|
||
DPSGTT
|
||
SCHK69, CDFCNK
|
||
JMP I SCHK66 /RETURN
|
||
ERR23, "I;"S;" ;"R;"U;"N;"N;"I;"N;"G;" ;"O;"P;"E;4000+"N
|
||
|
||
|
||
PAGE
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** CHECK TO SEE IF SYN LINK IS LOOPED BACK ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
SCHK50, TAD (-CHKDPT
|
||
DCA INISEC /TIME TO HEAR LOOPBACK
|
||
|
||
SCHK51, TAD (SCHKRD
|
||
DCA CHK2 /POINTER TO WATCH RECEIVE
|
||
|
||
SCHK52, CDFINS
|
||
TAD (SCHKRD-5
|
||
DCA I (T10NCA /SET UP JUNK TO GO
|
||
TAD (-7
|
||
DCA I (T10NWC /WC FOR JUNK
|
||
CDFCNK
|
||
|
||
JMS SCHK66 /SERVICE TRANSMITTER
|
||
|
||
JMS SCHK75 /TRY TO GET ANOTHER CHAR FROM THE SYN RECEIVER
|
||
JMP SCHK54 /NOT READY YET
|
||
NEGATE
|
||
TAD I CHK2
|
||
SZA CLA /IS THIS ONE OF JUNK CHARS ?
|
||
JMP SCHK51 /NO
|
||
ISZ CHK2 /ADVANCE STATE
|
||
TAD CHK2
|
||
TAD (-SCHKRD-3
|
||
SZA CLA
|
||
JMP SCHK54 /STILL NOT FATAL
|
||
IFNZRO FTLBACK <JMP SCHK60 > /MODEM IS IN LOOPBACK MODE
|
||
|
||
SCHK53, JMS INFTYP /TYPE CR/LF/?
|
||
JMS INDTYP /TYPE DP8E OR DP01
|
||
JMS INLTYP
|
||
"I;"S
|
||
IFNZRO FTLBACK < " ;"N;"O;"T >
|
||
" ;"I;"N;" ;"L;"O;"O;"P;"B;"A;"C;"K;" ;"M;"O;"D;4000+"E
|
||
JMP SCHK30-1 /RECHECK ALL SYNCHRONOUS STUFF
|
||
|
||
SCHK54, JMS SCHK98
|
||
JMP SCHK52 /CHECK CLOCK
|
||
IFNZRO FTLBACK < JMP SCHK53 > /MUST BE FOR LOOPBACK TEST
|
||
|
||
SCHK60, CDF 20
|
||
TAD HERTZF
|
||
CDF 10
|
||
TAD (-36
|
||
DCA INISEC /HALF SECOND
|
||
DCA CHOCNT /SO WE CAN COUNT CHARS
|
||
JMS SCHK75 /CHECK RECEIVER
|
||
JMS SCHK66 /SERVICE TRANSMITER
|
||
NL0
|
||
JMS SCHK98
|
||
JMP .-4
|
||
TAD CHOCNT
|
||
TAD (207
|
||
SPA CLA
|
||
JMP SCHK61
|
||
CDFINS
|
||
TAD (NOP
|
||
DCA INTN21
|
||
CDFCNK
|
||
SCHK61,
|
||
TAD CHOCNT
|
||
TAD (1200 /COMPARE TO 640.
|
||
CDF 20 /INCASE HAVE TO STORE INTO SCHK62
|
||
SPA CLA
|
||
DCA SCHK62
|
||
CDF 10
|
||
JMP SCHK70
|
||
|
||
/JUNK CHARACTERS TO SEND TO 10
|
||
/ NOTE THAT ONLY BITS USED ARE BITS WE KNOW DP01/DP8E CAN SEE
|
||
SYN ; SYN ; SYN ; SYN
|
||
SCHKRD, 206; 202; 220
|
||
/JMS HERE IF CAN'T CLEAR FLAG ON DP01 OR DP8E
|
||
SCHK56, 0
|
||
JMS INFTYP /TYPE CR/LF/?
|
||
JMS INDTYP /TYPE DP8E OR DP01
|
||
JMS SCHK93 /TYPE FLAG WON'T CLEAR
|
||
JMP SCHK30-1 /TRY AGAIN
|
||
|
||
PAGE
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
/ *** ***
|
||
/ *** CHECK TO BE SURE 10 ANSWERS ***
|
||
/ *** ***
|
||
/ ***********************************************************
|
||
/ ***********************************************************
|
||
|
||
/HERE TO SEND A START(REP) MESSAGE TO 10 AND AWAIT A STACK(RACK)
|
||
|
||
SCHK70, TAD (-CHKDPT
|
||
DCA INISEC /TIME TO GET A STACK(RACK)
|
||
|
||
|
||
/SEND START MSG
|
||
CDFINS
|
||
TAD (-10-NUMSYN
|
||
DCA I (T10NWC
|
||
TAD (SYNBUF-1
|
||
DCA I (T10NCA
|
||
CDFCNK
|
||
|
||
SCHK71, TAD (JMP I SCHK73+1
|
||
DCA SCHK73
|
||
|
||
SCHK72, JMS SCHK66 /CHECK TRANSMITTER
|
||
JMS SCHK75
|
||
JMP SCHK74 /GET NEXT CHAR FROM RECEIVER
|
||
SCHK73, 7402 /WILL BE A JMP I SCHK73+#
|
||
|
||
|
||
CHKENQ; CHKSTK; CHKFLL
|
||
SCHK62
|
||
SCHK62, JMP SCHK80
|
||
JMS INBTYP
|
||
JMS INDTYP
|
||
JMS INLTYP
|
||
"G;"T;" ;"9;"6;"0;"0;" ;"B;"A;"U;4000+"D
|
||
JMP SCHK80
|
||
SCHK74, JMS SCHK98
|
||
JMP SCHK72 /CHECK CLOCK
|
||
|
||
JMS INBTYP /TYPE CR/LF/%
|
||
JMS INLTYP
|
||
"N;"O;" ;"R;"E;"S;"P;"O;"N;"S;"E;" ;"T;"O
|
||
" ;"S;"T;"A;"R;4000+"T
|
||
JMP SCHK30 /KEEP TRYING
|
||
|
||
CHKSTK, TAD (ENQ-STACK
|
||
CHKENQ, TAD (-ENQ
|
||
CHKFIL, SZA CLA
|
||
JMP SCHK71
|
||
ISZ SCHK73
|
||
JMP SCHK74
|
||
CHKFLL, AND (077 /STRIP SELECT AND QSYNC BITS
|
||
JMP CHKFIL
|
||
SCHK45, JMS SCHK98 /CHECK CLOCK
|
||
JMP SCHK42 /KEEP WAITING
|
||
NLM1
|
||
DCA CHK4 /FLAG TO DISPLAY ANY RECEIVED CHAR
|
||
ISZ CHK5
|
||
JMP SCHK32 /DON'T COMPLAIN EVERY TIME
|
||
JMS INBTYP /TYPE A CR/LF/%
|
||
JMS INDTYP /TYPE DP8E OR DP01
|
||
JMS INLTYP
|
||
"N;"O;"T;" ;"R;"E;"C;"E;"I;"V;"I;"N;"G
|
||
JMP SCHK32
|
||
|
||
PAGE
|
||
/HERE TO ACCUMULATE A CRC IN CHK6 & CHK7
|
||
SCHK78, 0
|
||
DCA CHK1
|
||
TAD (-10
|
||
DCA CHK2
|
||
TAD CHK6
|
||
CLL RAR
|
||
DCA CHK6
|
||
SZL
|
||
TAD (0400
|
||
TAD CHK7
|
||
CLL RAR
|
||
DCA CHK7
|
||
SZL
|
||
JMS SCHKCC
|
||
TAD CHK1
|
||
CLL RAR
|
||
DCA CHK1
|
||
SZL
|
||
JMS SCHKCC
|
||
ISZ CHK2
|
||
JMP SCHK78+4
|
||
JMP I SCHK78
|
||
|
||
SCHKCC, 0
|
||
TAD CHK7
|
||
CLL RAR
|
||
CML
|
||
RAL
|
||
DCA CHK7
|
||
TAD CHK6
|
||
AND (240
|
||
CMA IAC
|
||
CLL RAL
|
||
TAD CHK6
|
||
TAD (240
|
||
DCA CHK6
|
||
JMP I SCHKCC
|
||
/HERE TO GET THE NEXT CHAR FROM THE SYNCHRONOUS RECEIVER
|
||
/ CALL JMS SCHK75
|
||
/ RETURN /IF NOTHING HAPPENING
|
||
/ RETURN WITH RECEIVED CHAR IN AC
|
||
SCHK75, 0
|
||
|
||
DPSSRO
|
||
JMP I SCHK75 /CHECK FOR FLAG
|
||
DPSSRO
|
||
SKP
|
||
JMS SCHK56 /FLAG IS SUPPOSED TO HAVE CLEARED
|
||
CDFINS
|
||
TAD I (F10WC /CHECK TO BE SURE HDW MEANT IT
|
||
SZA
|
||
JMS SCHK38 /COMPLAIN WC ISN'T RIGHT
|
||
TAD I (F10CA
|
||
TAD (-RCVQUE
|
||
SZA
|
||
JMS SCHK38
|
||
JMS SCHK76 /REENABLE RECEIVER
|
||
TAD RCVQUE /GET CHAR
|
||
|
||
ISZ SCHK75
|
||
JMP I SCHK75 /SKIP RETURN WITH CHAR
|
||
|
||
/HERE TO ENABLE DP8E RECEIVER
|
||
SCHK76, 0
|
||
CDFINS
|
||
NLM1
|
||
DCA I (F10WC /RESET RECEIVE WC
|
||
TAD (RCVQUE-1
|
||
DCA I (F10CA
|
||
CDFCNK /RESET RECEIVE CA
|
||
DPSGRR /REENABLE RECEIVER
|
||
JMP I SCHK76
|
||
|
||
/HERE TO INITIALIZE THE SYNCHRONOUS RECEIVER
|
||
/ CALL JMS SCHK77
|
||
/ RETURN
|
||
SCHK77, 0
|
||
|
||
DPSCSD /CLEAR SYNC DETECT
|
||
JMS SCHK76 /RESET WC & CA
|
||
|
||
JMP I SCHK77
|
||
|
||
/ SUBROUTINE TO BUILD BEGINNING OF OUTPUT BUFFERS
|
||
SCHKA1, 0
|
||
TAD (SYNCHS-1
|
||
DCA CHAUTO
|
||
TAD (-20 /16
|
||
DCA CHK6
|
||
SCHKA2, TAD (SYN
|
||
DCA I CHAUTO
|
||
ISZ CHK6
|
||
JMP SCHKA2
|
||
TAD (STARTC-1 /BEGINNING OF CONTROL
|
||
DCA CHAUTO
|
||
TAD (CTLBUF-1 /WHERE IT HAS TO GO
|
||
DCA CHAUTO-1
|
||
TAD (-10-6 /BOTH CTL AND 1ST DATA BUFFER
|
||
JMS CHCOPY /COPY IT
|
||
TAD (STARTD-1
|
||
DCA CHAUTO
|
||
TAD (T10BF2-1
|
||
DCA CHAUTO-1
|
||
TAD (-6
|
||
JMS CHCOPY
|
||
TAD (T10LST-1
|
||
DCA CHAUTO-1
|
||
TAD (STARTD-1
|
||
DCA CHAUTO
|
||
TAD (-6
|
||
JMS CHCOPY
|
||
JMP I SCHKA1
|
||
CHCOPY, 0
|
||
DCA CHK6
|
||
CHCOPL, TAD I CHAUTO
|
||
DCA I CHAUTO-1
|
||
ISZ CHK6
|
||
JMP CHCOPL
|
||
JMP I CHCOPY
|
||
|
||
PAGE
|
||
SCHK80,
|
||
JMP SCHK90
|
||
/HERE TO SEE IF LINE PRINTER IS LS8E(CENTRONICS) OR LE8(LP02)
|
||
|
||
SCHK90, CDFCNK /RESET NORMAL DATA FIELD
|
||
LISTOG LPTN
|
||
IFNZRO LPTN <
|
||
IFNDEF LA180 < LPTCLF /CLEAR LPT FLAG
|
||
LPTSKF /IS FLAG STILL UP ?
|
||
JMP SCHK92 /NO SO OK
|
||
>/END OF IFNDEF LA1180
|
||
IFDEF LA180 <
|
||
NL0
|
||
PBST /SKIP ON DATA ACCEPTED AND CLEAR
|
||
NOP
|
||
PBST /ERROR IF SKIP
|
||
JMP SCH180
|
||
>/END OF IFDEF LA180
|
||
SCHK91, JMS INFTYP /TYPE CR/LF/?
|
||
JMS INLTYP
|
||
"L;"P;"T;4240
|
||
JMS SCHK93 /TYPE FLAG WON'T CLEAR
|
||
HLT
|
||
JMP SCHK90 /TRY AGAIN IF HE CONTINUES
|
||
IFNDEF LA180 <
|
||
|
||
SCHK92, LPTSTF /SET THE FLAG IF THIS IS AN LS8E
|
||
LPTSKF /SKIP ON FLAG
|
||
JMP SCHK96 /THIS IS AN LE8=LP08
|
||
/CENTRONICS PRINTER SO ADJUST TIMEOUTS
|
||
LPTCLF
|
||
LPTSKF
|
||
SKP /GOOD - WE CLEARED FLAG
|
||
JMP SCHK91 /FATAL - CAN'T CLEAR FLAG
|
||
CDFINS /WE ARE CHANGING DATA IN FIRST FIELD
|
||
TAD (LPTSIE /USE THIS TO CLEAR INTERRUPT ENABLE
|
||
DCA I (LPXXCE /SET IN LPTFIN
|
||
>/END IFNDEF LA180
|
||
IFDEF LA180 <
|
||
SCH180, CDFINS
|
||
TAD (NOP
|
||
DCA I (LPTFIN
|
||
>/END OF LA180
|
||
TAD (NOP
|
||
DCA I (LPXXSE
|
||
TAD (NOP
|
||
DCA I (LPXYSE
|
||
TAD (-200 /TWO SECONDS ON A FORM FEED
|
||
DCA I (LPTTFF
|
||
TAD (-100 /ONE SECOND ON RANDOM CHAR
|
||
DCA I (LPTTCH
|
||
CDFCNK /BACK TO NORMAL DATA FIELD
|
||
|
||
>/END OF IFNZRO LPTN
|
||
LISTOG LPTN
|
||
|
||
SCHK96,
|
||
|
||
TAD (377 /START WITH THE LAST ENTRY IN THE TABLE
|
||
DCA CHK3
|
||
DCA CHK6 /CLEAR HALF OF CRC
|
||
DCA CHK7 /CLEAR REST OF CRC
|
||
TAD CHK3 /GET CHAR TO MAKE CRC FOR
|
||
JMS SCHK78 /GO COMPUTE THE CRC FOR IT
|
||
TAD CHK3
|
||
TAD (CRCTAB
|
||
DCA CHK1
|
||
TAD CHK7
|
||
DCA I CHK1
|
||
TAD CHK1
|
||
TAD (400
|
||
DCA CHK1
|
||
TAD CHK6
|
||
DCA I CHK1
|
||
NLM1
|
||
TAD CHK3
|
||
SMA /HAVE WE FILLED THE TABLE ?
|
||
JMP SCHK96+1 /NOT YET SO KEEP ON
|
||
NL0
|
||
|
||
JMP SCHK94
|
||
|
||
SCHK93, 0
|
||
JMS INLTYP
|
||
"F;"L;"A;"G;" ;"W;"O;"N;"';"T;" ;"C;"L;"E;"A;4000+"R
|
||
JMP I SCHK93
|
||
|
||
PAGE
|
||
/HERE WHEN DONE CHECKING SYSTEM
|
||
SCHK94, CDFINS
|
||
|
||
NL0
|
||
TAD (F10TCH-1 /ADDRESS OF TEST CHAR TABLE
|
||
DCA AUTO1
|
||
|
||
/FILL OUT THE SPECIAL CHAR TABLE
|
||
|
||
TAD (SOH /START OF A NUMBERED MESSAGE
|
||
DCA I AUTO1
|
||
TAD (ENQ
|
||
DCA I AUTO1
|
||
TAD (ENQ
|
||
DCA I AUTO1 /PAD OUT TABLE
|
||
TAD (ENQ
|
||
DCA I AUTO1 /PAD OUT TABLE
|
||
|
||
/HERE TO BUILD NODE ID MESSAGE
|
||
CDFCNK /POINT TO DATA FIELD
|
||
DCA CHK6 /INITIALIZE THE CRC CALCULATION
|
||
DCA CHK7
|
||
TAD (NCLNID /ADDRESS OF MESSAGE
|
||
DCA AUTO1 /SET UP AUTO INDEX REGISTER
|
||
DCA I (NCLNID /CLEAR COUNTER
|
||
NL6 /NCL-NODE-ID MSG TYPE IS 6
|
||
JMS SCHK95 /PUT INTO MSG
|
||
JMS SCHK95 /FIELD FOR #
|
||
JMS SCHK95 /FIELD FOR #
|
||
Z=OURNNM&177 /ONLY 7 BITS
|
||
TAD (Z /OUR NODE NUMBER
|
||
JMS SCHK95 /PUT INTO NODE ID MSG
|
||
TAD (OURID /POINTER TO NAME FIELD
|
||
DCA CHK3 /SAVE POINTER
|
||
SCHKNI, TAD CHK3
|
||
IAC
|
||
DCA CHK1
|
||
TAD I CHK1
|
||
AND (200
|
||
SNA CLA
|
||
JMP SCHKSI /PUT SOFTWARE ID IN NOW
|
||
TAD I CHK3 /GET NEXT CHAR
|
||
AND (177 /STRIP EXTRA BITS
|
||
TAD (200 /FLAG FOR EXTENSIBLE FIELD
|
||
JMS SCHK95 /PUT INTO THE MESSAGE
|
||
ISZ CHK3 /ADVANCE CHAR POINTER
|
||
JMP SCHKNI /AND BACK FOR MORE
|
||
SCHKSI, TAD I CHK3 /GET LAST CHAR OF NAME
|
||
AND (177 /STRIP EXTRA BITS
|
||
JMS SCHK95 /AND PUT INTO NODEID
|
||
TAD (SID-1 /POINT TO SOFTWARE ID
|
||
DCA CHAUTO /SAVE ADDRESS OF COUNT
|
||
TAD I CHAUTO /GET COUNT (NEG NO OF CHARACTERS)
|
||
DCA CHK3 /STORE FOR LOOP CONTROL
|
||
SCHSID, TAD I CHAUTO /GET NEXT CHARACTER
|
||
JMS SCHK95 /PUT CHARACTER INTO MESSAGE
|
||
ISZ CHK3 /TEST IF LAST
|
||
JMP SCHSID /ELSE GO BACK FOR MORE
|
||
TAD CHK7 /GET HALF OF BCC
|
||
DCA I AUTO1 /PUT AFTER MSG
|
||
TAD CHK6 /GET REST OF BCC
|
||
DCA I AUTO1 /PUT AFTER MSG ALSO
|
||
JMP SCHK97
|
||
SCHK95, 0
|
||
DCA CHK1 /HOLD CHAR A SEC
|
||
TAD CHK1 / GET IT AGAIN
|
||
DCA I AUTO1 /PUT NEXT CHAR INTO THE MESSAGE
|
||
TAD CHK1 /GET CHAR AGAIN
|
||
JMS SCHK78 /INCLUDE IN BCC
|
||
ISZ I (NCLNID /COUNT CHAR
|
||
JMP I SCHK95
|
||
SCHK97,
|
||
CDFINS
|
||
|
||
NL0 /DEFENSIVE CODE
|
||
DCA I (INICIF /CHANGE CIFCNK TO AND 0
|
||
TAD (CAF /MAKE INTO CAF FOR PDP8A
|
||
DCA I (INIJMP /CHANGE JMP I (SYSCHK TO 0
|
||
CDFCNK /SET NORMAL CHUNK FIELD
|
||
CIFINS /SET NORMAL INSTRUCTION FIELD
|
||
JMP I (INIJMP /RETURN TO INITIALIZATION
|
||
/HERE TO SEE IF CLOCK HAS TIMED OUT
|
||
/ CALL JMS SCHK98
|
||
/ RETURN /IF INISEC HAS NOT TIMED OUT
|
||
/ RETURN /IF INISEC WENT TO ZERO
|
||
SCHK98, 0
|
||
NL0
|
||
CLKSCF /SKIP ON CLOCK FLAG
|
||
JMP I SCHK98 /HASN'T TICKED
|
||
|
||
CLCL
|
||
ISZ INISEC+1 / COUNT INISEC+1 EVERY TICK
|
||
NOP / AND INISEC ON EVERY OTHER TICK
|
||
NL1
|
||
AND INISEC+1
|
||
SNA CLA
|
||
JMP I SCHK98
|
||
|
||
ISZ INISEC /CLOCK HAS TICKED - DID TIMER EXPIRE ?
|
||
JMP I SCHK98 /NO SO JUSTRETURN
|
||
ISZ SCHK98 /YES SO SKIP RETURN
|
||
JMP I SCHK98
|
||
|
||
|
||
PAGE
|
||
/HERE TO TYPE A MESSAGE WHILE IN THE SYSCHK CODE
|
||
/ CALL JMS INITYP /WITH MSG ADR-1 IN AC
|
||
/ RETURN /AFTER MSG IS TYPED
|
||
INITYP, 0
|
||
DCA AUTO1 /SAVE MSG ADR IN AUTOINDEX REGISTER
|
||
INITY1, CDF 20
|
||
TAD I AUTO1 /GET NEXT CHAR FROM MSG
|
||
JMS INITY8
|
||
SMA CLA /IS MESSAGE FINISHED ?
|
||
JMP INITY1
|
||
CDF 10
|
||
JMP I INITYP
|
||
INITY8, 0
|
||
DCA INICHR /SAVE CHAR TO TYPE
|
||
TAD INICHR
|
||
AND (0177 /STRIP PARITY
|
||
TAD (-40
|
||
SPA CLA /IS CHAR A CR/LF(MAYBE) ?
|
||
DCA INIFLG /YES SO TURN OFF ^O IF IT WAS ON
|
||
TAD INIFLG /GET CONTROL O FLAG
|
||
SZA CLA /IF IT IS ON DON'T TYPE CHAR
|
||
JMP INITY9 /IT WAS ON
|
||
TAD INICHR
|
||
CTYTLS
|
||
CTYTSF
|
||
JMP .-1
|
||
CTYTCF /CLEAR FLAG
|
||
|
||
CTYKSF /SKIP ON KEYBOARD FLAG
|
||
JMP INITY9
|
||
CTYKRB /GET CHAR
|
||
NLM1
|
||
DCA INIFLG
|
||
INITY9, NL0
|
||
TAD INICHR /GET CHAR AGAIN
|
||
JMP I INITY8
|
||
INIFLG, 0 /SET NONZERO IF USER TYPES IN WHILE SYSCHK IS TYPING OUT
|
||
/ WILL FLUSH TTY OUTPUT TO NEXT CR/LF
|
||
INICHR, 0 /CHAR TO TYPE
|
||
INITMP, 0 /LOCATION TO GO INDIRECT ON TO GET PARITY FOR CHAR
|
||
|
||
INIOCT, 0
|
||
DCA CHK3
|
||
TAD CHK3
|
||
AND (7000
|
||
SZA CLA
|
||
JMP INIOC4 /PRINT ALL FOUR DIGITS
|
||
TAD CHK3
|
||
AND (0700
|
||
SZA CLA
|
||
JMP INIOC3 /PRINT THREE DIGITS ONLY
|
||
TAD CHK3
|
||
AND (0070
|
||
SZA CLA
|
||
JMP INIOC2 /PRINT TWO DIGITS ONLY
|
||
JMP INIOC1 /ONLY ONE DIGIT
|
||
INIOC4, TAD CHK3
|
||
RTL
|
||
RTL
|
||
JMS INITYO
|
||
INIOC3, TAD CHK3
|
||
RTR
|
||
RTR
|
||
RTR
|
||
JMS INITYO
|
||
INIOC2, TAD CHK3
|
||
RTR
|
||
RAR
|
||
JMS INITYO
|
||
INIOC1, TAD CHK3
|
||
JMS INITYO
|
||
JMP I INIOCT
|
||
|
||
INITYO, 0
|
||
AND (0007
|
||
TAD (0060 /CONVERT TO OCTAL
|
||
JMS INITY8 /TYPE CHAR
|
||
NL0
|
||
JMP I INITYO
|
||
|
||
/ROUTINE TO TYPE INLINE MESSAGE
|
||
INLTYP, 0
|
||
NL0
|
||
CDF 20 /MESSAGES STORED IN FIELD SYSCHK LOC
|
||
INLTY2, TAD I INLTYP
|
||
JMS INITY8
|
||
ISZ INLTYP /TYPE NEXT CHAR
|
||
SMA CLA
|
||
JMP INLTY2
|
||
CDF 10 /RESTORE TO DEFAULT FIELD
|
||
JMP I INLTYP
|
||
|
||
/HERE TO TYPE CR/LF??
|
||
INFTYP, 0
|
||
JMS INLTYP
|
||
FATMSG
|
||
4207 /FINAL BELL
|
||
JMP I INFTYP
|
||
|
||
/HERE TO TYPE CR/LF/%
|
||
INBTYP, 0
|
||
JMS INLTYP
|
||
215;215;215;12;207;207;"%;4000+"%
|
||
JMP I INBTYP
|
||
|
||
/HERE TO TYPE DP8E OR DP01
|
||
INDTYP, 0
|
||
JMS INLTYP
|
||
"D;"P;"8;"E;4240
|
||
JMP I INDTYP
|
||
IFNZRO TTYN <
|
||
PAGE
|
||
KL8AS, JMS KL8AT
|
||
JMS KL8AT
|
||
JMS KL8AT
|
||
JMS KL8AT
|
||
JMS KL8AR
|
||
JMS KL8AR
|
||
JMS KL8AR
|
||
JMS KL8AR
|
||
>/END OF IFNZRO TTYN
|
||
FIELD 3
|
||
*7200
|
||
/CHECK FOR MODEM TYPE INTERRUPTS ON KL8A'S
|
||
/DEFINE MACRO TO GENERATE CHECK
|
||
IFNZRO TTYN <
|
||
DEFINE MODM Q Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 <
|
||
/Q=RING ON LINE 0-2
|
||
/Q1=DDBTAB ADDRESS OF FIRST TTY ON MODULE
|
||
/Q2=HARDWARE INST TO READ STATUS REG A
|
||
/Q3=HARDWARE INST TO LOAD CONTROL REG FOR LINE 3
|
||
/Q4=RING ON LINE 3
|
||
/Q5=CARRIER LINE THREE
|
||
/Q6=SEC REC LINE 3
|
||
/Q7=CTS LINE 3
|
||
/Q8=HARDWARE INSTRUCTION FOR READING STATUS REG B
|
||
TAD (Q1 /GET POINTER TO DDB ADR
|
||
DCA INTMP3 /SAVE FOR COMMON ROUTINE
|
||
Q /INST TO TEST RING ON LIES 0-2
|
||
JMP .+3 /RING NOT ON LINES 0-2
|
||
Q2 /READ STATUS REG
|
||
JMP MM /PROCESS IT
|
||
Q4 /RING ON LINE 3
|
||
JMP .+10
|
||
Q8 /READ STAUS REG B
|
||
AND (1000 /DTR ON
|
||
SZA CLA /IF NOT ON PROCESS INTERUPT
|
||
JMP INTA /OTHERWISE IGNORE INTER
|
||
TAD (3000 /TURN DTR RTS ON
|
||
Q3
|
||
JMP MM2
|
||
Q5 /CHECK CARRIER LINE 3
|
||
JMP .+2 /NO
|
||
JMP INTA
|
||
Q6 /CHECK SEC RECV
|
||
JMP .+2 /NO
|
||
JMP INTA
|
||
Q7 /CHECK CLEAR TO SEND
|
||
JMP .+2
|
||
JMP INTA
|
||
>/END OF DEFINE MODM
|
||
INTMTY, NL0
|
||
MODM MSSR,DDBTAB+1,MSRA,MSLC,MSSB,MSSC,MSSV,MSSS,MSRB
|
||
ZZ=TTYN
|
||
ZZ=ZZ-4
|
||
IFNZRO ZZ < MODM MSSR1,DDBTAB+5,MSRA1,MSLC1,MSSB1,MSSC1,MSSV1,MSSS1,MSRB1
|
||
ZZ=ZZ-4>
|
||
IFNZRO ZZ < MODM MSSR2,DDBTAB+11,MSRA2,MSLC2,MSSB2,MSSC2,MSSV2,MSSS2,MSRB2
|
||
ZZ=ZZ-4>
|
||
IFNZRO ZZ < MODM MSSR3,DDBTAB+15,MSRA3,MSLC3,MSSB3,MSSC3,MSSV3,MSSS3,MSRB3
|
||
>/END OF IF NZRO ZZ
|
||
CIF 0
|
||
|
||
JMP INTMT9
|
||
PAGE
|
||
MM, DCA INTMP4 /SAVE STATUS REG
|
||
DCA INTMP2 /INIT COUNT
|
||
TAD INTMP4
|
||
RTL
|
||
RAL /GET STATUS OF RING IN HIGH ORDER 3 BITS
|
||
AND (7000 /MASK OUT REST
|
||
MM1, CLL RAL
|
||
SZL
|
||
JMP .+3 /FOUND SET BIT
|
||
ISZ INTMP2
|
||
JMP MM1
|
||
NL0 /CLEAR AC
|
||
TAD INTMP2
|
||
MM3, TAD INTMP3 /CONTAINS DDBTAB ADDR
|
||
DCA INTMP1
|
||
TAD I INTMP1 /GET DDB ADDRESS
|
||
TAD (DEVDSL
|
||
DCA INTMP2 /SAVE ADDRESS OF DEVDSL
|
||
TAD (7637 /SET DTR OFF RING ON
|
||
AND I INTMP2
|
||
TAD (100 /RING ON
|
||
DCA I INTMP2
|
||
TAD (DEVSTS-DEVDSL
|
||
TAD INTMP2
|
||
DCA INTMP2
|
||
NL7776
|
||
AND I INTMP2
|
||
IAC
|
||
DCA I INTMP2 /SHIP STATUS
|
||
INTA, CIF 0
|
||
JMP INTDIS
|
||
MM2, NL3
|
||
JMP MM3
|
||
>/END OF IFNZRO TTYN
|
||
IFNZRO FTDEBUG <
|
||
/HERE TO PUT A WORD INTO THE TRACE
|
||
TRACEW, 0
|
||
CDF 30 /DAS92 TRACE FIELD IS 3
|
||
ISZ BUG
|
||
DCA I BUG
|
||
CDFCNK /CHANGE TO NORMAL DATA FIELD
|
||
TAD BUG /CHECK FOR WRAP AROUND
|
||
TAD (-7177
|
||
SZA CLA
|
||
JMP TRACEX
|
||
TAD (177 /WRAP AROUND
|
||
DCA BUG
|
||
TRACEX, CIF 0
|
||
JMP I TRACEW /RETURN TO CALLER FROM FIELD 0
|
||
BUG, 0
|
||
>/END OF IFZERO FTDEBUG
|
||
/IDLE - SO DISPLAY DATA ADDRESSED BY CONSOL SWITCHES
|
||
ID1, CLA OSR /GET CONTENTS OF SWITCHES
|
||
DCA TEMP1
|
||
TAD TEMP1
|
||
TAD DISMIN
|
||
SMA
|
||
JMP LOOP90
|
||
TAD DISMAX /LIMIT TEST FOR DISPLAY FIELD
|
||
SPA
|
||
JMP LOOP90 /OUT OF RANGE
|
||
CLL RTL
|
||
CLL RAL
|
||
TAD (CDF
|
||
DCA LOOP90
|
||
LOOP90, CDFINS /INITIALLY DISPLAY INSTRUCTION FIELD
|
||
NL0
|
||
TAD I TEMP1
|
||
MQL /LOAD INTO MQ
|
||
LOOP99, CDF 0
|
||
ISZ I (WRKREQ /DISPLAY 4096 TIMES OR UNTIL INTERRUPTED
|
||
JMP LOOP99
|
||
CIF 0 /CHANGE INSTR FIELD TO RETURN TO FIELD 0
|
||
CDFCNK /BACK TO NORMAL DATA FIELD
|
||
JMP LOOP
|
||
|
||
/NOTE THAT DISMIN+DISMAX MUST = 0010
|
||
DISMIN, 10
|
||
DISMAX, 0 /FIRST FIELD WHICH MAY NOT BE DISPLAYED
|
||
|
||
FIELD 0
|
||
*DC72 /STARTING ADDRESS FOR LOADER
|
||
|
||
$
|