mirror of
https://github.com/PDP-10/stacken.git
synced 2026-02-18 21:36:58 +00:00
1126 lines
25 KiB
Plaintext
1126 lines
25 KiB
Plaintext
/ BOOT 0.5 -- DOWN-LINE BOOTSTRAP FOR DC72NP 01 MAR 77
|
||
/ KALMAN RETI
|
||
|
||
/*** COPYRIGHT 1977 DIGITAL EQUIPMENT CORP., MAYNARD, MASS. ***
|
||
|
||
MAJOR=0
|
||
MINOR=5
|
||
|
||
IFNDEF PDP8 <PDP8=2> /FOR PDP8I USE 1
|
||
/FOR PDP8E USE 2
|
||
PDP8I=PDP8-1
|
||
PDP8E=PDP8-2
|
||
|
||
IFNDEF FTDP01 <
|
||
IFZERO PDP8I <FTDP01=-1>/DEFAULT IS DP01 HDW
|
||
IFZERO PDP8E <FTDP01=0> /DEFAULT FOR 8E IS DP8E
|
||
>/END OF IFNDEF FTDP01
|
||
IFNZRO FTDP01 <FTDP8E=0>
|
||
IFZERO FTDP01 <FTDP8E=-1>
|
||
|
||
|
||
IFNDEF KG8E <
|
||
KG8E=0
|
||
IFZERO FTDP01 <
|
||
/KG8E=1
|
||
>/END OF IFZERO FTDP01
|
||
>/END OF IFNDEF KG8E
|
||
|
||
IFNDEF FTMIM <FTMIM=0> /MIMIC SWITCH OFF BY DEFAULT
|
||
|
||
IFNDEF EFIELD <EFIELD=1> /FIELD WHERE LOADED
|
||
|
||
IFNDEF FTBIGL <FTBIGL=0>
|
||
|
||
IFNDEF MAXLEN <MAXLEN=177+12>
|
||
|
||
IFNDEF FTDEBUG <FTDEBUG=0>
|
||
|
||
IFNDEF START <START=0>
|
||
|
||
IFNDEF NAME <
|
||
NAMXXX=1 /SWITCH TO TELL NAME MACRO UNDEFINED
|
||
DEFINE NAME <> /NULL NAME TO SEND IN REQUEST LOAD MESSAGE
|
||
>/END OF IFNDEF NAME
|
||
|
||
IFNDEF SERIAL <SERIAL=0> /SERIAL NUMBER OF MACHINE
|
||
IFNDEF NODE <NODE=0> /NODE TO SEND REQUEST LOAD TO
|
||
|
||
/ USEFUL OPCODES
|
||
NEGATE=CML CMA IAC /NEGATE AC & LINK
|
||
ZZ=EFIELD^10
|
||
CDFINS=CDF+ZZ /FIELD WE ARE EXECUTING IN
|
||
NL0=CLA CLL
|
||
NL1=CLA CLL IAC
|
||
NL2=CLA CLL IAC RAL
|
||
NLM1=CLA CLL CMA CML
|
||
NLM2=CLL CLA CMA RAL
|
||
BSW=7002
|
||
CAF=6007
|
||
|
||
IFZERO FTBIGL <DEFINE XL <XLIST>>
|
||
IFNZRO FTBIGL <DEFINE XL <>>
|
||
|
||
|
||
|
||
/ EQUATES
|
||
ACCPT=11
|
||
EXDATA=12
|
||
RJCT=13
|
||
AUTO1=10
|
||
AUTO2=11
|
||
|
||
IFNZRO FTDEBUG <
|
||
/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)
|
||
LPTWID=204
|
||
IFNZRO FTMIM <
|
||
LPTSTB=6046
|
||
LPTSTF=6040
|
||
LPTSKF=6041
|
||
LPTWID=110
|
||
>/END OF IFNZRO FTMIM
|
||
>/END OF IFNZRO FTDEBUG
|
||
/MACROS
|
||
|
||
DEFINE HGHADR <
|
||
CLL RTR
|
||
RTR
|
||
RAR>
|
||
/IFZERO PDP8E <
|
||
/ DEFINE HGHADR <
|
||
/E BSW
|
||
/ CLL RTL>
|
||
/>/END OF IFZERO PDP8E
|
||
XL
|
||
IFNZRO FTDP01 <
|
||
XL
|
||
/IOTS FOR DP01
|
||
DPTAC=6301 /TRANSMIT A CHARACTER
|
||
DPCTF=6302 /CLEAR TRANSMIT FLAG & SKIP IF TRANSMIT ACTIVE FLAG SET
|
||
DPCIM=6304 /CLEAR IDLE MODE
|
||
DPSTF=6311 /SKIP ON TRANSMIT FLAG NOT SET
|
||
DPSIM=6314 /SET IDLE MODE
|
||
DPSRF=6351 /SKIP ON RECEIVE FLAG NOT SET
|
||
DPRRB=6312 /READ RECEIVE BUFFER(AND CLEAR FLAG)
|
||
DPSEF=6321 /SKIP ON RECEIVE END FLAG
|
||
DPCEF=6322 /CLEAR END FLAG
|
||
DPSRE=6324 /SET RING ENABLE
|
||
DPCRE=6344 /CLEAR RING ENABLE
|
||
DPSRI=6331 /SKIP ON RING INDICATOR
|
||
DPCRF=6332 /CLEAR RING FLAG
|
||
DPSTR=6334 /SET TERMINAL READY
|
||
DPCTR=6342 /CLEAR TERMINAL READY
|
||
DPSSR=6341 /SKIP ON DATASET READY
|
||
DPCRA=6352 /CLEAR RECEIVER ACTIVE
|
||
XL
|
||
>/END OF IFNZRO FTDP01
|
||
XL
|
||
/
|
||
XL
|
||
IFZERO FTDP01 <
|
||
XL
|
||
/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
|
||
XL
|
||
>/END OF IFZERO FTDP01
|
||
XL
|
||
|
||
/BOOT: DLE CC1 CC2 0 0 A0 BCC1 BCC2
|
||
/ CODE DATA BCC3 BCC4
|
||
/
|
||
/CODE:
|
||
/
|
||
/BOOT: SNA <000> BOOTSTRAP-DATA
|
||
/EXAMINE SNA <001> ADDR1 ADDR2
|
||
/DEPOSIT SNA <002> ADDR1 DEPOSIT-DATA
|
||
/GOTO SNA <003> ADDR1
|
||
/CLEAR SNA <004> ADDR1 ADDR2
|
||
/DEBUG SNA <005>
|
||
/RESERVED <006>-<010>
|
||
/ACCEPT DNA <011> (ADDR1 DATA)
|
||
/EXAM DATA DNA <012> ADDR1 DATA
|
||
/REJECT DNA <013>
|
||
/REQUEST BOOT DNA <014> MACH SERIAL PROG
|
||
/REQUEST LOAD DNA <015> MACH SERIAL PROG
|
||
/
|
||
/
|
||
/ADDR1 = FIRST ADDRESS IN A RANGE, OR ONLY ADDRESS
|
||
/ FIRST LOW ORDER EIGHT BITS, THEN HIGH 4 + FIELD
|
||
/DATA = DATA FOR EXAMINE OR DEPOSIT, SIX BITS PER BYTE,
|
||
/ LOW ORDER BYTE FIRST
|
||
/DNA = DESTINATION NODE ADDRESS
|
||
/MACH = EXTENSIBLE BINARY FIELD GIVING A CODE FOR WHICH
|
||
/ MACHINE
|
||
/ 1=71
|
||
/ 2=72
|
||
/ 3=82,WITH DU11
|
||
/ 4=82,WITH DQ11
|
||
/NODE = EXTENSIBLE BINARY NODE NUMBER
|
||
/PROG = EXTENSIBLE ASCII PROGRAM NAME
|
||
/SERIAL = SERIAL NUMBER OF MACHINE, EXTENSIBLE BINARY
|
||
/SNA = SOURCE NODE ADDRESS
|
||
/
|
||
/
|
||
/ THE BOOT MESSAGE IS INTENDED TO CONTAIN A SHORT
|
||
/ BOOTSTRAP PROGRAM WHICH WILL BE USED TO LOAD A
|
||
/ MORE SOPHISTICATED ONE -- THE DATA FIELD IS THE
|
||
/ PROGRAM ITSELF, AND THE START ADDRESS IS THE FIRST
|
||
/ WORD.
|
||
/ A BOOT MESSAGE IS SENT IN RESPONSE TO A REQUEST BOOT.
|
||
/
|
||
/ THE REQUEST LOAD MESSAGE SAYS THAT THE NODE
|
||
/ WANTS TO BE EITHER DUMPED OR LOADED OR BOTH.
|
||
/ SPECIFICALLY, IT CAN HANDLE EXAMINE, DEPOSIT AND
|
||
/ GOTO MESSAGES.
|
||
/
|
||
/ THE EXAMINE MESSAGE GIVES THE ADDRESS RANGE
|
||
/ FOR WHICH THE SENDER WOULD LIKE AN EXAMINE-DATA MESSAGE
|
||
/ WITH THE CONTENTS.
|
||
/
|
||
/ THE RESPONSE TO A DEPOSIT MESSAGE IS AN ACCEPT
|
||
/ WITH THE DATA THAT WAS DEPOSITED.
|
||
/
|
||
/ A REJECT IS SENT WHENEVER AN ADDRESS
|
||
/ IS OUTSIDE THE RANGE OF THE MACHINE.
|
||
/
|
||
/ THE CLEAR MESSAGE IS USED TO ZERO OUT A RANGE
|
||
/ OF CORE. IT IS CURRENTLY UNIMPLEMENTED.
|
||
FIELD EFIELD
|
||
*START
|
||
TEMP1, 0
|
||
TEMP2, 0
|
||
TEMP3, 0
|
||
FLD1, 0
|
||
ADR1, 0
|
||
FLD2, 0
|
||
ADR2, 0
|
||
POINT, 0
|
||
0;0;0;0;0;0;0;0 /AUTOINCREMENT REGISTERS
|
||
ENDMSG, 0
|
||
BOOT, /START OF BOOTSTRAP
|
||
JMP INIT /INITIALIZE THINGS
|
||
XMIT, /TRANSMIT MESSAGE IN BUFF
|
||
IFNZRO FTDEBUG <JMS LPTRAC>
|
||
JMS SNDMSG /SEND IT
|
||
RCV, /GET A MESSAGE
|
||
JMS GETMSG /READ MESSAGE INTO BUFF
|
||
IFNZRO FTDEBUG <JMS LPTRAC>
|
||
JMS CHKCRC /CHECK CRC'S
|
||
JMP BOOT /START OVER IF BAD
|
||
TAD (BUFF+11 /POINT TO MESSAGE TYPE CODE
|
||
DCA POINT /STORE ADDRESS OF CODE
|
||
JMS RNGCHK /CHECK GOODNESS OF CODE
|
||
TAD (JMP I DSP /MAKE DISPATCH INSTRUCTION
|
||
DCA .+1 /STORE
|
||
0 /SET TO JMP I DSP+CODE
|
||
DSP, BOOT /0=BOOT, WE DON'T HANDLE IT
|
||
EXAM /1=EXAMINE
|
||
DEP /2=DEPOSIT
|
||
GOTO /3=GOTO
|
||
|
||
/ STORAGE
|
||
|
||
GETWD, 0 /GET NEXT WORD FROM MESSAGE
|
||
/ CALL IS:
|
||
/
|
||
/ JMS GETWD
|
||
/ ERROR RETURN (NONE LEFT)
|
||
/ NORMAL RETURN (AC HAS WORD)
|
||
/
|
||
/ POINT HOLDS CURRENT CHARACTER ADDRESS
|
||
/ ENDMSG HOLDS NEGATIVE OF LAST ADDRESS+1
|
||
/ WORD IS RETURNED IN AC (WHICH SHOULD BE ZERO AT ENTRY)
|
||
TAD POINT /GET CURRENT ADDRESS
|
||
TAD ENDMSG /SEE IF FINISHED
|
||
SNA CLA /NO, SKIP
|
||
JMP I GETWD /YES, RETURN
|
||
ISZ GETWD /MAKE SKIP RETURN
|
||
TAD I POINT /GET WORD FROM MESSAGE
|
||
ISZ POINT /POINT TO NEXT WORD
|
||
JMP I GETWD /RETURN WITH WORD
|
||
|
||
PUTCHR, 0 /SUBROUTINE TO PUT A WORD
|
||
/ POINT POINTS TO NEXT AVAILABLE ADDRESS
|
||
/ ENDMSG HOLDS NEGATIVE OF LAST ADDRESS+1
|
||
/ IF SPACE RUNS OUT, THE MESSAGE WILL BE SENT
|
||
/ AS IS.
|
||
AND (377 /ONLY 8 BITS
|
||
DCA I POINT /STORE CHARACTER IN MESSAGE
|
||
ISZ POINT /INCREMENT POINTER
|
||
TAD POINT /GET ADDRESS
|
||
TAD ENDMSG /IS IT END?
|
||
SZA CLA /SKIP IF YES
|
||
JMP I PUTCHR /NO, RETURN
|
||
JMP EXDONE /YES, FINISH MESSAGE AND RETURN
|
||
|
||
GETADR, 0 /GET ADDRESS FROM MESSAGE
|
||
/ USES GETWD TO GET INDIVIDUAL WORDS
|
||
/ FORMAT OF ADDRESS IS:
|
||
/ FIRST WORD, BITS 4-11: EIGHT LOW ORDER BITS OF ADDRESS
|
||
/ SECOND WORD, BITS 8-11 HIGH ORDER 4 BITS OF ADDRESS
|
||
/ BITS 5-7: FIELD
|
||
/ CALL IS
|
||
/ TAD ADDR WHERE FIELD INSTRUCTION IS TO GO
|
||
/ JMS GETADR
|
||
/ ERROR RETURN
|
||
/ NORMAL RETURN (FIELD CHANGE INSTRUCTION STORED WHERE
|
||
/ AC POINTED AT ENTRY, AC HAS ADDRESS
|
||
/ WITHIN FIELD)
|
||
DCA TEMP3 /SAVE ADDRESS TO PUT FIELD INSTRUCTION
|
||
JMS GETWD /GET FIRST WORD OF ADDRESS
|
||
JMP I GETADR /ERROR IF NOT THERE
|
||
DCA TEMP1 /SAVE LOW ORDER 8 ADDRESS BITS
|
||
JMS GETWD /GET 2ND ADDRESS WORD
|
||
JMP I GETADR /ERROR IF NOT THERE
|
||
DCA TEMP2 /SAVE FIELD AND HIGH ORDER ADDRESS BITS
|
||
TAD TEMP2 /GET THEM BACK
|
||
RAR /PUT INTO CORRECT POSITION
|
||
AND (0070 /CLEAR OTHER BITS
|
||
TAD (CDF /TURN INTO CHANGE FIELD INSTRUCTION
|
||
DCA I TEMP3 /STORE
|
||
TAD TEMP2 /GET HIGH ORDER BITS AGAIN
|
||
HGHADR /SHIFT TO HIGH ORDER BITS
|
||
AND (7400 /TURN OFF OTHERS
|
||
TAD TEMP1 /ADD IN LOW ORDER 8
|
||
ISZ GETADR /SET TO SKIP RETURN
|
||
JMP I GETADR /RETURN
|
||
|
||
PUTADR, 0 /PUT AN ADDRESS
|
||
/ THE ADDRESS IS IN ADR1 AND FLD1
|
||
TAD ADR1 /GET LOW ORDER
|
||
JMS PUTCHR /WILL ONLY PUT 8 BITS
|
||
TAD ADR1 /GET REST
|
||
IFZERO PDP8I <
|
||
CLL RTL
|
||
RTL
|
||
RAL /PUT IN RIGHT PLACE
|
||
>/END OF IFZERO PDP8I
|
||
IFZERO PDP8E <
|
||
BSW
|
||
RTR
|
||
>/END OF IFZERO PDP8E
|
||
AND (0017 /CLEAR EXTRA BITS
|
||
DCA TEMP1 /STORE
|
||
TAD FLD1 /GET FIELD
|
||
AND (0070 /CLEAR EXTRA BITS
|
||
CLL RAL
|
||
TAD TEMP1 /ADD TO REST
|
||
JMS PUTCHR /PUT INTO MESSAGE
|
||
JMP I PUTADR /RETURN
|
||
|
||
INCADR, 0 /INCREMENT ADDRESS
|
||
/ THIS SUBROUTINE INCREMENTS ADDRESS CONTAINED IN ADR1 AND
|
||
/ FLD1.
|
||
ISZ ADR1 /INCREMENT ADDRESS PART
|
||
JMP I INCADR /IF NOT ZERO, WE ARE DONE
|
||
TAD FLD1 /GET FIELD INSTRUCTION
|
||
TAD (10 /INCREMENT FIELD
|
||
AND (0070 /IN CASE OF OVERFLOW
|
||
TAD (CDF /DITTO
|
||
DCA FLD1 /STORE BACK
|
||
JMP I INCADR
|
||
|
||
READ, 0 /GET WORD POINTED AT BY ADR1 AND FLD1
|
||
TAD FLD1 /GET FIELD INSTRUCTION
|
||
DCA .+1 /STORE IT
|
||
0
|
||
TAD I ADR1 /GET WORD
|
||
CDFINS /GET BACK TO INSTRUCTION FIELD
|
||
JMP I READ /RETURN
|
||
WRITE, 0 /STORES A WORD AT ADR1 + FLD1
|
||
DCA WRITE1 /STORE WORD
|
||
TAD FLD1
|
||
DCA .+1
|
||
0
|
||
TAD WRITE1 /GET WORD AGAIN
|
||
DCA I ADR1 /STORE IT
|
||
CDFINS /GO TO NORMAL FIELD
|
||
JMP I WRITE
|
||
WRITE1=READ /SAVE WORD TO BE STORED
|
||
|
||
PAGE
|
||
ALTSTR, JMP BOOT /ALTERNATE START (TO CONFORM TO PDP8 CONVENTION)
|
||
ZZ=MAJOR^100+MINOR
|
||
ZZ /VERSION
|
||
EXAM, /EXAMINE ROUTINE
|
||
TAD (FLD1 /WHERE FIELD SHOULD GO
|
||
JMS GETADR /GET START ADDRESS
|
||
JMP REJCT /IF BAD, REJECT
|
||
DCA ADR1 /SAVE ADDRESS
|
||
TAD (FLD2 /WHERE FIELD SHOULD GO
|
||
JMS GETADR /GET STOP ADDRESS+1
|
||
JMP REJCT /REJECT IF BAD
|
||
NEGATE /GET INTO PROPER FORM
|
||
DCA ADR2 /STORE
|
||
TAD FLD2 /GET FIELD
|
||
NEGATE /NEGATE IT AS WELL
|
||
DCA FLD2 /STORE BACK
|
||
JMS MSGBEG /START MESSAGE
|
||
TAD (EXDATA /EXAMINE DATA CODE
|
||
JMS PUTCHR /STORE IN MESSAGE
|
||
EXADR,
|
||
JMS PUTADR /STORE ADDRESS IN MESSAGE
|
||
EXLOOP, TAD ADR1 /GET ADDRESS
|
||
TAD ADR2 /COMPARE WITH STOP
|
||
SZA CLA /SKIP IF SEEMS TO BE END
|
||
JMP EXGET /GO GET THIS WORD
|
||
TAD FLD1 /GET FIELD
|
||
TAD FLD2 /COMPARE WITH STOP
|
||
SNA CLA /IF NON-ZERO, WASN'T REALLY END
|
||
JMP EXDONE /FINISHED
|
||
EXGET, /GET VALUE AND PUT INTO MESSAGE
|
||
JMS READ /GET VALUE OF WORD
|
||
DCA TEMP1 /SAVE
|
||
TAD TEMP1 /GET BACK AGAIN
|
||
AND (0077 /ONLY LOW ORDER BYT
|
||
JMS PUTCHR /SEND IT
|
||
TAD TEMP1 /GET BACK
|
||
IFZERO PDP8I <
|
||
RTR
|
||
RTR
|
||
RTR
|
||
>/END OF IFZERO PDP8I
|
||
IFZERO PDP8E <
|
||
BSW
|
||
>/END OF IFZERO PDP8E
|
||
AND (0077
|
||
JMS PUTCHR
|
||
JMS INCADR /INCREMENT ADDRESS
|
||
JMP EXLOOP
|
||
EXDONE, /FINISHED WITH MESSAGE
|
||
JMS MSGEND /CALC BCC, SET UP WC
|
||
JMP XMIT /SEND IT
|
||
DEP, /DEPOSIT
|
||
TAD (FLD2 /POINT TO WHERE FIELD SHOULD GO
|
||
JMS GETADR /GET ADDRESS
|
||
JMP REJCT
|
||
DCA ADR2 /SAVE ADDRESS
|
||
TAD ADR2 /GET IT AGAIN
|
||
DCA ADR1 /INTO RIGHT PLACE
|
||
TAD FLD2 /AND FIELD
|
||
DCA FLD1
|
||
DPLOOP, /DEPOSIT LOOP
|
||
JMS GETWD /TRY TO GET A DATA WORD
|
||
JMP DPEND /END OF DEPOSIT WHEN NONE LEFT
|
||
DCA TEMP3 /LOW ORDER BYTE
|
||
JMS GETWD /GET HIGH ORDER
|
||
JMP BOOT /SOMETHING'S WRONG
|
||
IFZERO PDP8I <
|
||
RTL
|
||
RTL
|
||
RTL
|
||
>/END OF IFZERO PDP8I
|
||
IFZERO PDP8E <
|
||
BSW
|
||
>/END OF IFZERO PDP8E
|
||
AND (7700
|
||
TAD TEMP3 /NOW HAVE WHOLE WORD
|
||
JMS WRITE /STORE THIS WORD
|
||
JMS INCADR /INCREMENT ADDRESS
|
||
JMP DPLOOP /CONTINUE
|
||
DPEND, /NOW SEND ACCEPT WITH THE DATA
|
||
TAD ADR1 /ADR1 IS LAST ADDRESS + 1
|
||
NEGATE
|
||
DCA TEMP1 /SAVE
|
||
TAD ADR2
|
||
DCA ADR1
|
||
TAD TEMP1
|
||
DCA ADR2
|
||
TAD FLD1 /NOW SWITCH FIELDS ALSO
|
||
NEGATE
|
||
DCA TEMP1 /SAVE
|
||
TAD FLD2
|
||
DCA FLD1
|
||
TAD TEMP1
|
||
DCA FLD2
|
||
JMS MSGBEG /START MESSAGE
|
||
TAD (ACCPT /ACCEPT CODE
|
||
JMS PUTCHR
|
||
JMP EXADR /PUT EXAMINE DATA IN REST
|
||
|
||
GOTO, /GOTO MESSAGE
|
||
TAD (FLD1 /POINT TO FIELD
|
||
JMS GETADR /GET ADDRESS
|
||
JMP REJCT
|
||
DCA ADR1
|
||
ACCEPT, JMS MSGBEG
|
||
TAD (ACCPT
|
||
JMS PUTCHR
|
||
JMS PUTADR /PUT ADDR1 AND FLD1 ADDRESS
|
||
JMS MSGEND
|
||
IFNZRO FTDEBUG < JMS LPTRAC>
|
||
JMS SNDMSG
|
||
DOGOTO, TAD FLD1 /GET FIELD
|
||
DCA .+5
|
||
TAD FLD1
|
||
IAC /CHANGE TO CIF
|
||
DCA .+1
|
||
0
|
||
0
|
||
JMP I ADR1 /GOTO
|
||
REJCT, JMS MSGBEG
|
||
TAD (RJCT
|
||
JMS PUTCHR
|
||
JMP EXDONE
|
||
|
||
PAGE
|
||
CHKCRC, 0 /SUBROUTINE TO CHECK CRC
|
||
JMS CRCCLR /CLEAR CRC
|
||
TAD (-10 /GET LENGTH
|
||
DCA TMP1 /STORE
|
||
TAD (BUFF /GET ADDRESS
|
||
DCA TMP2 /STORE
|
||
JMS CRC /CALCULATE CRC
|
||
JMS CRCUNL /GET CRC
|
||
JMP I CHKCRC /ERROR RETURN IF NOT GOOD
|
||
TAD LEN /GET LENGTH OF DATA PART
|
||
TAD (2 /ADD CRC
|
||
NEGATE
|
||
DCA TMP1 /STORE
|
||
TAD (BUFF+10 /POINT TO START
|
||
DCA TMP2 /STORE
|
||
JMS CRC
|
||
JMS CRCUNL /GET CRC
|
||
JMP I CHKCRC /ERROR RETURN IF BAD
|
||
ISZ CHKCRC /SKIP RETURN
|
||
JMP I CHKCRC
|
||
IFZERO KG8E <
|
||
DEFINE CRCALG <
|
||
DCA CRCTMP
|
||
TAD (-7
|
||
DCA CRCCNT
|
||
TAD CRCTMP
|
||
AND CRC2
|
||
CIA
|
||
CLL RAL
|
||
TAD CRCTMP
|
||
TAD CRC2
|
||
CLL RTR
|
||
LPCRC,
|
||
SPA
|
||
CML
|
||
RAR
|
||
ISZ CRCCNT
|
||
JMP LPCRC
|
||
DCA CRCT2
|
||
TAD CRCT2
|
||
CLL RTL
|
||
AND (301
|
||
DCA CRC2
|
||
TAD CRC1
|
||
AND CRC2
|
||
CIA
|
||
CLL RAL
|
||
TAD CRC1
|
||
TAD CRC2
|
||
DCA CRC2
|
||
TAD CRCT2
|
||
CLL RTR
|
||
DCA CRC1
|
||
TAD CRC1
|
||
AND CRCT2
|
||
CIA
|
||
CLL RAL
|
||
TAD CRC1
|
||
TAD CRCT2
|
||
CLL RTR
|
||
CLL RAR
|
||
CLL RAR
|
||
DCA CRC1
|
||
/ TAD CRCTMP /PUT BACK IF CHARACTER TO REMAIN IN AC
|
||
>/END OF DEFINE CRCALG
|
||
CRCINI, 0 /NULL INITIALIZATION SUBROUTINE
|
||
CRCCLR, 0 /CLEAR CRC
|
||
CLA
|
||
DCA CRC1
|
||
DCA CRC2
|
||
JMP I CRCCLR
|
||
CRCUNL, 0 /UNLOAD CRC
|
||
TAD CRC1 /GET SECOND HALF
|
||
SZA CLA
|
||
JMP I CRCUNL /ERROR RETURN
|
||
TAD CRC2
|
||
SZA CLA
|
||
JMP I CRCUNL /ERROR RETURN
|
||
ISZ CRCUNL
|
||
JMP I CRCUNL /GOOD RETURN
|
||
CRCACC, 0 /ACCUMULATE CRC
|
||
CRCALG
|
||
JMP I CRCACC /LEAVE AC 0
|
||
CRC1, 0
|
||
CRC2, 0
|
||
CRCTMP, 0
|
||
CRCT2, 0
|
||
CRCCNT, 0
|
||
GCR1, 0 /GET FIRST CRC CHAR
|
||
TAD CRC2
|
||
JMP I GCR1
|
||
GCR2, 0
|
||
TAD CRC1
|
||
JMP I GCR2
|
||
>/END OF IFZERO KG8E
|
||
|
||
IFNZRO KG8E <
|
||
CRCINI, 0 /INITIALIZE CRC
|
||
TAD (100 /SET TO CRC-16
|
||
BCCLCL /LOAD CONTROL REG
|
||
CLA /CLEAR AC
|
||
JMP I CRCINI /RETURN
|
||
|
||
CRCCLR, 0 /ROUTINE TO INITIALIZE THE CRC
|
||
BCCCLR /CLEAR BCC ACCUMULATION
|
||
NL0 /RETURN GOOD AC
|
||
JMP I CRCCLR /RETURN
|
||
|
||
CRCUNL, 0 /UNLOAD CRC
|
||
BCCRDH /READ HIGH PART
|
||
SZA CLA /SKIP IF OK
|
||
JMP I CRCUNL /GIVE ERROR RETURN
|
||
BCCRDL /READ LOW PART
|
||
SZA CLA /SKIP IF OK
|
||
JMP I CRCUNL /ERROR
|
||
IFZERO PDP8E <
|
||
CAF
|
||
>/END OF IFZERO PDP8E
|
||
ISZ CRCUNL /SKIP RETURN
|
||
JMP I CRCUNL
|
||
|
||
CRCACC, 0 /ACCUMULATE CRC CHARACTERS
|
||
BCCGEN /ADD TO CRC
|
||
NL0
|
||
|
||
JMP I CRCACC /RETURN
|
||
GCR1, 0 /GET LOW CRC BYTE
|
||
BCCRDL /READ IT
|
||
JMP I GCR1
|
||
GCR2, 0 /GET HIGH BYTE
|
||
BCCRDH
|
||
JMP I GCR2
|
||
|
||
>/END OF IFNZRO KG8E
|
||
|
||
CRC, 0 /CALCULATE A CRC
|
||
TAD I TMP2 /GET CHARACTER
|
||
JMS CRCACC /ADD TO CRC
|
||
ISZ TMP2 /ADVANCE POINTER
|
||
ISZ TMP1 /ADVANCE COUNT
|
||
JMP CRC+1 /LOOP TILL DONE
|
||
JMP I CRC /RETURN
|
||
TMP1=GCR1 /TEMPORARIES FOR CRC
|
||
TMP2=GCR2
|
||
/ SYNCHRONOUS LINE SUBROUTINES
|
||
IFNZRO FTDP01 <
|
||
F10CA=10 /USE AUTOINDEX REG FOR WC
|
||
|
||
DEFINE WCR < JMS WCRSUB>/END OF DEFINE WCR
|
||
INISYN, 0 /INITIALIZE
|
||
/ DPSIM /SET IDLE MODE
|
||
DPSTR /TERMINAL READY
|
||
DPSSR /SKIP OF MODEM READY
|
||
JMP .-1 /WAIT FOR IT
|
||
JMP I INISYN /RETURN
|
||
SNDMSG, 0 /SUBROUTINE TO SEND A MESSAGE
|
||
DPSTR
|
||
DPSSR
|
||
JMP .-1
|
||
TAD (226 /GET SYN
|
||
JMP SNDLP1
|
||
SNDLP, TAD I T10CA /GET CHARACTER
|
||
DPSTF /SKIP ON NOT TRANSMIT
|
||
SNDLP1, DPTAC DPCTF /SEND IT AND CLEAR FLAG
|
||
JMP .-2
|
||
CLA
|
||
ISZ T10CA
|
||
ISZ T10WC
|
||
JMP SNDLP
|
||
JMP I SNDMSG
|
||
T10WC, 0
|
||
T10CA, 0
|
||
PAGE
|
||
GETMSG, 0 /SUBROUTINE TO READ MESSAGE
|
||
DPSTR
|
||
DPCRA
|
||
DPSSR
|
||
JMP .-1
|
||
TAD (7400 /HALF OF SECOND ISZ
|
||
DCA COUNT2
|
||
DCA COUNT1
|
||
GETMS1, CLA /FOR BAD MESSAGES
|
||
TAD (BUFF-1
|
||
DCA F10CA
|
||
DPCRA /CLEAR RECEIVE ACTIVE
|
||
STMSG, DPSRF /SKIP ON NOT RECEIVE FLAG
|
||
JMP STMSG1 /GOT ONE
|
||
ISZ COUNT1
|
||
JMP STMSG
|
||
ISZ COUNT2
|
||
JMP STMSG
|
||
JMP BOOT /START AGAIN, IF TAKES TOO LONG
|
||
STMSG1, DPRRB /READ CHARACTER
|
||
TAD (-226 /SEE IF SYN
|
||
SNA /SKIP ONLY IF NOT
|
||
JMP STMSG /STILL NOT START OF MESSAGE
|
||
TAD (6 /IF FIRST CHAR WAS 220, WILL
|
||
SZA CLA /WILL NOW BE ZERO
|
||
JMP GETMS1 /NO, SORRY
|
||
TAD (220 /1ST CHARACTER
|
||
DCA I F10CA /STORE
|
||
WCR
|
||
DCA LOWCNT /LOW BYTE OF COUNT
|
||
TAD LOWCNT /GET BACK
|
||
DCA I F10CA /STORE
|
||
WCR /THIRD CHARACTER
|
||
DCA HGHCNT
|
||
TAD HGHCNT
|
||
DCA I F10CA
|
||
WCR
|
||
DCA I F10CA /STORE FOURTH CHARACTER
|
||
TAD HGHCNT
|
||
RTR
|
||
DCA HGHCNT
|
||
WCR /5TH
|
||
DCA I F10CA
|
||
TAD HGHCNT
|
||
RTR
|
||
DCA HGHCNT
|
||
WCR /6TH
|
||
DCA I F10CA
|
||
TAD HGHCNT
|
||
RAR
|
||
DCA HGHCNT
|
||
WCR /7TH
|
||
DCA I F10CA
|
||
TAD HGHCNT
|
||
AND (7400 /CLEAR USELESS BITS
|
||
DCA HGHCNT
|
||
WCR /8TH
|
||
DCA I F10CA
|
||
TAD HGHCNT
|
||
TAD LOWCNT /NOW HAVE REAL COUNT
|
||
DCA COUNT
|
||
WCR /9TH
|
||
DCA I F10CA
|
||
TAD COUNT
|
||
DCA LEN /SAVE FOR LATER
|
||
WCR /10TH
|
||
DCA I F10CA
|
||
TAD COUNT
|
||
NEGATE
|
||
DCA COUNT
|
||
MSGLP, WCR
|
||
DCA I F10CA
|
||
TAD F10CA /GET ADDRESS
|
||
TAD (-BUFFRE /COMPARE WITH END
|
||
SNA CLA /SKIP IF STILL OK
|
||
JMP MSGFOR /BETTER FORCE END
|
||
ISZ COUNT
|
||
JMP MSGLP
|
||
MSGFOR, DPCTR
|
||
CLA CMA /GET MINUS 1
|
||
TAD F10CA /GET CURRENT ADDRESS (ACTUALLY AFTER LAST CHAR)
|
||
NEGATE /CONVERT TO NEGATIVE
|
||
DCA ENDMSG /REMEMBER END OF MESSAGE
|
||
JMP I GETMSG
|
||
|
||
WCRSUB, 0 /SUBROUTINE TO WAIT FOR CHARACTER
|
||
DPSRF /SKIP ON NOT RECEIVE FLAG
|
||
SKP /GOT CHARACTER
|
||
JMP .-2 /LOOP
|
||
DPRRB /READ CHARACTER
|
||
JMP I WCRSUB /RETURN
|
||
|
||
HGHCNT, 0 /HIGH ORDER COUNT FROM MESSAGE
|
||
LOWCNT, 0 /LOWER ORDER COUNT FROM MESSAGE
|
||
COUNT=LOWCNT
|
||
LEN=HGHCNT
|
||
COUNT1, 0 /INNER ISZ LOOP COUNTER
|
||
COUNT2, 0 /OUTER ISZ LOOP COUNTER
|
||
>/END OF IFNZRO DP01
|
||
INIT, /INITIALIZE
|
||
CLA /START WITH GOOD AC
|
||
CDFINS /SET DATA FIELD TO INSTRUCTION FIELD
|
||
XL
|
||
IFNZRO KG8E <
|
||
XL
|
||
JMS CRCINI /INITIALIZE KG
|
||
XL
|
||
>/END OF IFNZRO KG8E
|
||
XL
|
||
JMS INISYN /INITIALIZE SYNCHRONOUS LINE
|
||
/ MOVE REQUEST LOAD MESSAGE INTO BUFF
|
||
TAD (RQL-1 /POINT TO MESSAGE
|
||
DCA AUTO1 /STORE IN AUTOINCREMENT LOCATION
|
||
TAD (BUFF-1 /POINT TO DESTINATION
|
||
DCA AUTO2 /STORE IN AUTOINCREMENT LOCATION
|
||
TAD (RQL-RQLE /LENGTH FOR ISZ LOOP
|
||
DCA TEMP1 /STORE
|
||
MOVLP, TAD I AUTO1 /GET WORD
|
||
DCA I AUTO2 /STORE IT
|
||
ISZ TEMP1 /COUNT
|
||
JMP MOVLP /CONTINUE TILL DONE
|
||
TAD AUTO2 /END OF MESSAGE
|
||
IAC /MSGEND EXPECTS IT TO POINT PAST
|
||
DCA POINT /STORE
|
||
JMP EXDONE /PUT ON CRC'S AND GO TO XMIT
|
||
IFZERO FTDP01 <
|
||
PAGE
|
||
F10CA=7725
|
||
F10WC=7724
|
||
T10CA=7730
|
||
T10WC=7727
|
||
INISYN, 0 /INITIALIZE DP8E
|
||
DPSCSI /CLEAR SYNCHRONOUS LINE
|
||
TAD (5400 /TRANSMIT RQ,TERMINAL READY,IDLE
|
||
DPSLCC
|
||
ZZ=EFIELD^1100
|
||
TAD (ZZ-5400 /FIELDS
|
||
DPSLFL
|
||
TAD (7720-ZZ-1
|
||
DCA AUTO1
|
||
CDF
|
||
DCA I AUTO1
|
||
DCA I AUTO1
|
||
DCA I AUTO1
|
||
DCA I AUTO1
|
||
CDFINS
|
||
JMP I INISYN
|
||
SNDMSG, 0 /SEND A MESSAGE
|
||
DPSGTT
|
||
DPSSTO /SEE IF FLAG UP
|
||
JMP .-1
|
||
JMP I SNDMSG /RETURN
|
||
GETMSG, 0 /RECEIVE A MESSAGE
|
||
TAD (7400 /TIMER
|
||
DCA COUNT2
|
||
DCA COUNT1
|
||
GETMS0, CLA /JUNK HERE SOMETIMES
|
||
DPSCSD /CLEAR SYNCH DETECT
|
||
GETMS1, CDF /WE ARE MODIFYING FIELD 0
|
||
NLM1 /LENGTH OF FIRST PIECE
|
||
DCA F10WC
|
||
TAD (BUFF-1 /START ADDRESS
|
||
DCA F10CA /ADDRESS
|
||
CDFINS /BACK TO OUR FIELD
|
||
DPSGRR /START RECEIVER
|
||
GETM1, /LOOK FOR DONE
|
||
DPSSRO /SKIP IF DONE
|
||
JMP GETL1 /ELSE DECREMENT TIMER, THINK
|
||
TAD BUFF /GET CHARACTER GOTTEN
|
||
TAD (-226 /CHECK IF SYN
|
||
SNA /SKIP IF NOT
|
||
JMP GETMS1 /GO TRY AGAIN
|
||
TAD (6 /WAS IT DLE (220)?
|
||
SZA CLA /SKIP IF YES
|
||
JMP GETMS0 /NO, JUNK MEANS CLEAR SYNCH DETECT
|
||
TAD (-7 /LENGTH OF REST OF HEADER
|
||
CDF /HAS TO GO INTO FIELD 0
|
||
DCA F10WC /STORE
|
||
CDFINS
|
||
DPSGRR /START RECEIVER
|
||
GETM2, /WAIT FOR SECOND PART TO COMPLETE
|
||
DPSSRO /SKIP ON DONE
|
||
JMP GETL2 /IF NOT, DECREMENT COUNTER
|
||
NL2 /TWO FOR CRC
|
||
TAD LEN /+LENGTH
|
||
NEGATE
|
||
CDF
|
||
DCA F10WC
|
||
CDFINS
|
||
DPSGRR /GET DATA PART
|
||
GETM3, DPSSRO /SKIP IF ALL DONE
|
||
JMP GETL3
|
||
CDF
|
||
NLM1 /SUBTRACT CRC
|
||
TAD F10CA /LAST ADDRESS + 1
|
||
NEGATE
|
||
CDFINS
|
||
DCA ENDMSG
|
||
JMP I GETMSG
|
||
GETL1, TAD (GETM1 /POINT TO DPSSRO
|
||
JMP ISZ1
|
||
GETL3, TAD (GETM3
|
||
JMP ISZ1
|
||
GETL2, TAD BUFF+2 /GET HIGH ORDER OF LENGTH
|
||
HGHADR
|
||
AND (7400
|
||
TAD BUFF+1 /ADD LOW ORDER
|
||
DCA LEN /SAVE
|
||
TAD LEN /GET IT AGAIN
|
||
SPA /IF NEGATIVE, WAY TOO BIG
|
||
JMP REPL /MAKE A MORE REASONABLE LENGTH
|
||
NEGATE
|
||
TAD (MAXLEN-12
|
||
SPA CLA /STILL TOO BIG IF NOT POSITIVE
|
||
JMP REPL
|
||
ISZ2, TAD (GETM2 /POINT TO DPSSRO
|
||
ISZ1, DCA PVT /WHERE TO GO
|
||
ISZ COUNT1 /INNER COUNTER
|
||
JMP I PVT
|
||
ISZ COUNT2 /OUTER COUNTER
|
||
JMP I PVT
|
||
JMP BOOT /TOOK TOO LONG, START OVER
|
||
REPL, NL0 /BECAUSE AC MIGHT HAVE JUNK
|
||
TAD (MAXLEN-12 /BETTER LENGTH
|
||
DCA LEN
|
||
JMP ISZ2
|
||
|
||
COUNT1=INISYN /INNER ISZ LOOP
|
||
COUNT2=CRC /OUTER ISZ LOOP
|
||
LEN=CRCINI /LENGTH STORED HERE
|
||
PVT=SNDMSG /POINTER TO RETURN FROM ISZ'ING
|
||
>/END OF IFZERO FTDP01
|
||
PAGE
|
||
RNGCHK, 0 /SUBROUTINE TO VALIDATE CODE
|
||
JMS GETWD /GET NEXT WORD
|
||
JMP BOOT /IF NONE LEFT
|
||
SPA /BETTER BE POSITIVE
|
||
JMP BOOT /ELSE START OVER
|
||
TAD (-4 /NEGATIVE OF FIRST ILLEGAL CODE
|
||
SMA /BETTER BE NEGATIVE
|
||
JMP BOOT /ELSE START OVER
|
||
TAD (4 /GET ORIGINAL CODE BACK
|
||
JMP I RNGCHK /RETURN
|
||
MSGBEG, 0 /SUBROUTINE TO START MESSAGE
|
||
|
||
TAD (BUFF-1 /ADDRESS FOR AUTO POINTER
|
||
DCA AUTO1 /STORE
|
||
TAD (220 /DLE
|
||
DCA I AUTO1 /STORE DLE
|
||
DCA I AUTO1 /COUNT (LOW ORDER)
|
||
DCA I AUTO1 /COUNT (HIGH ORDER)
|
||
DCA I AUTO1 /FILL
|
||
DCA I AUTO1 /FILL
|
||
IAC /STATION 1
|
||
DCA I AUTO1 /A0
|
||
DCA I AUTO1 /BCC1
|
||
DCA I AUTO1 /BCC2
|
||
DCA I AUTO1 /DNA
|
||
IAC /GET A 1
|
||
TAD AUTO1 /TO ADD TO CURRENT POSITION
|
||
DCA POINT /STORE FOR PUTCHR
|
||
TAD (-BUFFE /END OF DATA PART OF MESSAGE
|
||
DCA ENDMSG /STORE FOR PUTCHR
|
||
JMP I MSGBEG /RETURN
|
||
MSGEND, 0 /SUBROUTINE TO END A MESSAGE
|
||
TAD POINT /GET POINTER TO NEXT SLOT
|
||
TAD (-BUFF-10 /GET MESSAGE LENGTH
|
||
DCA LEN /STORE
|
||
TAD LEN /GET BACK
|
||
AND (7400 /SEE IF WILL FIT IN ONE WORD
|
||
SNA /SKIP IF NOT
|
||
JMP MSGE1 /YEAH, HAVE TO DO LOW PART ONLY
|
||
RTL /SHIFT TO RIGHT PLACE
|
||
RTL
|
||
RAL
|
||
DCA I (BUFF+2 /STORE IN SECOND COUNT WORD
|
||
MSGE1, TAD LEN /GET LOW ORDER
|
||
DCA I (BUFF+1 /STORE IT
|
||
JMS CRCCLR /CLEAR CRC
|
||
TAD (-6 /COUNT
|
||
DCA TMP1
|
||
TAD (BUFF /STARTING ADDRESS
|
||
DCA TMP2
|
||
JMS CRC /CALC CRC
|
||
JMS GCR1 /GET LOW ORDER
|
||
DCA I (BUFF+6 /STASH
|
||
JMS GCR2 /GET HIGH ORDER
|
||
DCA I (BUFF+7 /STASH
|
||
TAD LEN /GET LENGTH
|
||
NEGATE /FOR ISZ LOOPING
|
||
DCA TMP1 /STORE AS COUNT
|
||
TAD (BUFF+10 /START OF DATA PORTION
|
||
DCA TMP2 /STORE
|
||
JMS CRCCLR /CLEAR CRC
|
||
JMS CRC /CALC DATA CRC
|
||
TAD TMP2 /GET POINTER
|
||
DCA MTMP /STORE IN THIS PAGE
|
||
JMS GCR1 /GET LOW ORDER CRC CHAR
|
||
DCA I MTMP /PUT INTO MESSAGE
|
||
ISZ MTMP /BUMP POINTER
|
||
JMS GCR2 /GET HIGH ORDER CRC
|
||
DCA I MTMP /PUT INTO MESSAGE
|
||
TAD LEN /GET LENGTH OF DATA
|
||
TAD (2+10+4 /ADD BCC,HEADER,AND SYNCHS
|
||
NEGATE /INTO PROPER FORM
|
||
IFZERO FTDP01 <CDF /CHANGE TO RIGHT FIELD>
|
||
DCA T10WC /FOR WORD COUNT
|
||
TAD (SYNBUF /POINT TO START
|
||
DCA T10CA /STORE
|
||
IFZERO FTDP01 <CDFINS /GO BACK>
|
||
JMP I MSGEND
|
||
MTMP, 0 /TEMP LOCATION
|
||
IFNZRO FTDEBUG <
|
||
PAGE
|
||
LPTRAC, 0 /SUBROUTINE TO TRACE MESSAGES
|
||
TAD (15
|
||
LPTSTB /START
|
||
JMS TADR /PUT OUT ADDRESS
|
||
TAD (40
|
||
JMS LPTC /PUT OUT CHARACTER
|
||
TAD (BUFF-1 /POINT TO MESSAGE
|
||
DCA LPTAUT /STORE IN AUTO
|
||
TAD BUFF+2
|
||
HGHADR /SHIFT TO HIGH ADDRESS
|
||
TAD BUFF+1 /ADD LOW
|
||
TAD (12 /HEADER+CRC
|
||
NEGATE
|
||
DCA TCNT /TRACE COUNTER
|
||
JMP LPTLP1 /START OUTPUTTING
|
||
LPTLP, TAD (", /COMMA
|
||
JMS LPTC /PRINT IT
|
||
TAD LPTCOL /GET COLUMN
|
||
TAD (6 /WHERE AFTER NEXT OCTAL CHAR
|
||
TAD (-LPTWID /END OF LINE
|
||
SMA CLA /SKIP IF OK
|
||
JMS LCRLF /OTHERWISE END THIS LINE
|
||
LPTLP1, TAD I LPTAUT /GET MESSAGE CHARACTER
|
||
JMS TOCT /PUT OUT OCTAL
|
||
ISZ TCNT
|
||
JMP LPTLP
|
||
JMP I LPTRAC /RETURN
|
||
TADR, 0 /PUT OUT ADDRESS
|
||
CLA
|
||
TAD (15
|
||
JMS LPTC
|
||
TAD (12
|
||
JMS LPTC
|
||
DCA LPTCOL /NOW AT BEGINNING
|
||
TAD (60+EFIELD
|
||
JMS LPTC
|
||
TAD LPTRAC /GET RETURN ADDRESS
|
||
TAD (-1 /GET ADDRESS OF CALL
|
||
DCA LPTWK /SAVE
|
||
TAD (-4
|
||
DCA LPTCNT
|
||
ADRL, TAD LPTWK /GET CURRENT VERSION
|
||
AND (7000
|
||
RTL
|
||
RTL
|
||
AND (7
|
||
TAD (60
|
||
JMS LPTC
|
||
TAD LPTWK
|
||
CLL RTL
|
||
RAL
|
||
DCA LPTWK
|
||
ISZ LPTCNT
|
||
JMP ADRL
|
||
JMP I TADR
|
||
TOCT, 0 /PUT OUT OCTAL BYTE
|
||
AND (377 /ONLY 8 BITS
|
||
DCA LPTWK /SAVE WORD
|
||
TAD ("<
|
||
JMS LPTC
|
||
TAD (TOCT1
|
||
DCA TADR
|
||
TAD LPTWK
|
||
CLL RTL
|
||
CLL RAL
|
||
DCA LPTWK
|
||
TAD (-3
|
||
DCA LPTCNT
|
||
JMP ADRL
|
||
TOCT1, TAD (">
|
||
JMS LPTC
|
||
JMP I TOCT
|
||
LPTC, 0
|
||
LPTSKF
|
||
JMP .-1
|
||
LPTSTB
|
||
CLA
|
||
ISZ LPTCOL
|
||
JMP I LPTC
|
||
LCRLF, 0
|
||
TAD (15
|
||
JMS LPTC
|
||
TAD (12
|
||
JMS LPTC
|
||
DCA LPTCOL
|
||
TAD (-6
|
||
DCA LCRCNT
|
||
LCRLFL, TAD (40
|
||
JMS LPTC
|
||
ISZ LCRCNT
|
||
JMP LCRLFL
|
||
JMP I LCRLF
|
||
LPTCOL, 0
|
||
LPTCNT, 0
|
||
LCRCNT, 0
|
||
LPTWK, 0
|
||
TCNT, 0
|
||
LPTAUT=12
|
||
>/END OF IFNZRO FTDEBUG
|
||
RQL, 220;RQLE-RQL-10;0;0;0;1;0;0;NODE;15;PDP8;SERIAL
|
||
NAME
|
||
IFDEF NAMXXX <XLIST>
|
||
RQLE,
|
||
PAGE
|
||
SYNBUF, 226;226;226;226 /FOUR SYNCHS
|
||
BUFF=.
|
||
BUFFE=.+MAXLEN /END OF BUFFER
|
||
BUFFRE=BUFFE+2 /REAL END (ROOM FOR CORC)
|
||
FIELD EFIELD
|
||
*INIT /FOR LOADER
|
||
|
||
$
|