1372 lines
33 KiB
Plaintext
1372 lines
33 KiB
Plaintext
/EDUSYSTEM 50 MONITOR FOR MELROSE HIGH SCHOOL #495AB
|
||
/COPYRIGHT 1975
|
||
/DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
|
||
/
|
||
/THIS SECTION DEFINES THE HARDWARE CONFIGURATION ON WHICH INDIVIDUAL
|
||
/EDUSYSTEM 50 MONITORS ARE TO RUN.
|
||
/FOR EACH STATEMENT, THE COMMENT INDICATES THE POSSIBLE RESPONSES.
|
||
|
||
CPU=2 /1 IF CPU IS PDP-8; 0 IF CPU IS PDP-8/I;
|
||
/2 IF CPU IS PDP-8/E
|
||
|
||
CORMEM=70 /HIGHEST DATA FIELD SELECT. FOR 12K SYSTEM,
|
||
/RESPOND 20. FOR 16K SYSTEM, RESPOND 30, ETC. (70 MAX)
|
||
|
||
PHONES=0 /1 IF DC08 INCLUDES 689AG;
|
||
/0 IF IT DOES NOT OR IF TTY INTERFACING IS OTHER THAN DC08
|
||
|
||
EAE=0 /20 IF PROCESSOR INCLUDES EAE; 0 IF IT DOES NOT
|
||
|
||
RF08=0 /40 IF SYSTEM DISC IS DF32; 0 IF SYSTEM DISK IS RF08
|
||
|
||
RS08=1 /NUMBER OF DISCS ON THE SYSTEM, WHETHER DF/DS OR RF/RS.
|
||
/RESPOND WITH 1, 2, 3, OR 4.
|
||
|
||
PUNCH=1 /1 IS SYSTEM INCLUDES PUNCH; 0 IF IT DOES NOT
|
||
|
||
TC01=1 /1 IF SYSTEM INCLUDES DECTAPE(S); 0 IF IT DOES NOT
|
||
|
||
RK05=1 /NUMBER OF RK05 CARTRIDGE DISK DRIVES ON THE SYSTEM; 0 TO 4
|
||
|
||
CDR=1 /1 IF SYSTEM INCLUDES CARD READER; 0 IF IT DOES NOT
|
||
|
||
LPT=1 /1 IF SYSTEM INCLUDES LINE PRINTER; 0 IF NO LINE PRINTER
|
||
|
||
DECIMAL /MONITOR CAPACITY FOR THIS SYSTEM
|
||
|
||
JOBMAX=20 /NUMBER OF SIMULTANEOUS USERS (20 MAXIMUM)
|
||
|
||
/THE FOLLOWING ENTRIES DEFINE THE NUMBER OF TERMINALS
|
||
/ATTACHED TO THE SYSTEM, AND ALSO THE METHOD OF INTERFACING
|
||
|
||
CONTTY=1 /WE ALWAYS HAVE A CONSOLE ( K00 )
|
||
|
||
DC08A=0 /NUMBER OF TERMINALS INTERFACED VIA DC08A (PDP-8/I ONLY, 19 MAX.)
|
||
|
||
DC08LO=0 /LOWEST HARDWARE LINE NUMBER UTILIZED ON DC08A; USUALLY 0
|
||
|
||
PT08=0 /NUMBER OF TERMINALS INTERFACED VIA PT08 (PDP-8 & PDP-8/I ONLY)
|
||
|
||
KL8=16 /NUMBER OF ADDITIONAL TERMINALS INTERFACED VIA KL8 (PDP-8/E ONLY, 19 MAX.)
|
||
/PARAMETERS VERSION 8.24 (01-JANUARY-75)
|
||
/
|
||
/
|
||
/
|
||
/
|
||
/COPYRIGHT (C) 1975
|
||
/DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
|
||
/
|
||
/
|
||
/THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY
|
||
/ON A SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH
|
||
/THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS
|
||
/SOFTWARE, OR ANY OTHER COPIES THEREOF, MAY NOT BE PRO-
|
||
/VIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON
|
||
/EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO
|
||
/THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE
|
||
/SOFTWARE SHALL REMAIN IN DEC.
|
||
/
|
||
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE
|
||
/WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COM-
|
||
/MITMENT BY DIGITAL EQUIPMENT CORPORATION.
|
||
/
|
||
/DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR
|
||
/RELIABILITY OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT
|
||
/SUPPLIED BY DEC.
|
||
OCTAL
|
||
PLT=0
|
||
IFNZRO CPU < IFNZRO DC08A <ILLEGAL CONFIGURATION>>
|
||
IFNZRO 24-JOBMAX&4000 <ILLEGAL CONFIGURATION>
|
||
IFNZRO 23-KL8-PT08&4000 <ILLEGAL CONFIGURATION>
|
||
IFNZRO 24-DC08A&4000 <ILLEGAL CONFIGURATION>
|
||
IFZERO DC08A <D689=0>
|
||
IFNZRO DC08A < IFNZRO PHONES <D689=4>
|
||
IFZERO PHONES <D689=0>>
|
||
NULINE=DC08A+PT08+KL8 /EVERY TERMINAL EXCEPT THE CONSOLE
|
||
SWDEX=5 /DISK TRACK OF THE FIRST USER SWAP TRACK
|
||
STOMIN=5 /MINIMUM # FREE STORAGE BLOCK FORR NEW JOB
|
||
IFZERO RF08-40 <
|
||
IFZERO RS08-1 <DSKSIZ=10>
|
||
IFZERO RS08-2 <DSKSIZ=20>
|
||
IFZERO RS08-3 <DSKSIZ=30>
|
||
IFZERO RS08-4 <DSKSIZ=40>
|
||
DSKEXT=DSKSIZ-1>
|
||
IFZERO RF08 <DSKSIZ=RS08^100 /# 4K DISC TRACKS
|
||
DSKEXT=RS08^100+77>
|
||
CLOCKR=144 /MILLISECONDS PER TICK
|
||
TICMIN=1130 /600 TICKS PER MINUTE
|
||
INCLK2=0322 /INITIAL CLOCK
|
||
INCLK1=7400
|
||
TICSPS=12 /NUMBER OF SYSTEM TICKS PER SECOND
|
||
INIDEX=10 /INIT DISC EXTENSION
|
||
TS8DEX=30 /FIELD 0 DISC EXTENSION*2^3
|
||
ERPDEX=0 /ERPDISK EXTENSION*4
|
||
ERPWC=0 /ERP WORD COUNT
|
||
FIPDEX=4 /FIP DISC EXTENSION*4
|
||
FIPWC=0 /FIP WORD COUNT
|
||
SIDEX=ERPDEX /SI DISC EXTENSION*4
|
||
SIWC=ERPWC /SI WORD COUNT
|
||
LIBACT=2 /LIBRARY ACCOUNT #
|
||
BRKINI=4000 /INITIAL USER BREAK MASK
|
||
/IOT DEFINITIONS
|
||
|
||
IFNZRO DC08A < /DC08A,DL8I IOTS
|
||
TTIL=6401 /INCREMENT LINE REGISTER
|
||
TTI=6402 /TELETYPE INPUT COMMAND
|
||
TTO=6404 /TELETYPE OUTPUT COMMAND
|
||
TTCL=6411 /CLEAR LINE REGISTER
|
||
TTLL=6412 /LOAD LINE REGISTER, CLEAR AC
|
||
TTRL=6414 /READ LINE REGISTER
|
||
T1SKP=6421 /SKIP ON CLOCK FLAG
|
||
T1OFF=6422 /TURN CLOCK OFF
|
||
T1ON=6424 /TURN CLOCK ON
|
||
TTIR=6461 /INCREMENT THE R REG.
|
||
TTCR=6471 /CLEAR THE R REG.
|
||
TTLR=6472 > /LOAD THE R REG.
|
||
/EXTENDED MEMORY
|
||
|
||
CDF=6201 /CHANGE TO DATA FIELD 0
|
||
CIF=6202 /CHANGE TO INSTRUCTION FIELD 0
|
||
CINT=6204 /CLEAR USER IOT
|
||
|
||
RDF=6214 /READ DATA FIELD
|
||
RIF=6224 /READ INSTRUCTION FIELD
|
||
RIB=6234 /READ INTERRUPT BUFFER
|
||
RMF=6244 /RESTORE MEMORY FIELD
|
||
SINT=6254 /SKIP ON USER IOT
|
||
CUF=6264 /USER FLAG OFF
|
||
SUF=6274 /USER FLAG ON
|
||
|
||
|
||
/EAE
|
||
MUY=7405 /MULTIPLY
|
||
DVI=7407 /DIVIDE
|
||
NMI=7411 /NORMALIZE
|
||
SHL=7413 /SHIFT ARITHMETIC LEFT
|
||
ASR=7415 /ARITHMETIC SHIFT RIGHT
|
||
LSR=7417 /LOGICAL SHIFT RIGHT
|
||
MQL=7421 /LOAD MQ
|
||
SCL=7403 /STEP COUNTER LOAD FROM MEMORY
|
||
SCA=7441 /STEP COUNTER TO AC
|
||
MQA=7501 /MQ TO AC
|
||
|
||
IFZERO CPU-2 <
|
||
|
||
DPSZ=7451 /MODE B ONLY - SKIP IF AC&MQ ARE CLEAR
|
||
SWBA=7447 /CHANGE MODE TO A
|
||
SWAB=7431 /CHANGE MODE TO B (ALSO DOES MQL)
|
||
ACS=7403 /AC(7:11) TO SC; AC CLEARED
|
||
SGT=6006 /SKIP ON GT FLAG
|
||
>
|
||
|
||
|
||
|
||
/LINE PRINTER IOTS
|
||
LSF=6661 /SKIP ON CHAR FLAG SET
|
||
LCF=6662 /CLEAR CHAR FLAG
|
||
LSRP=6663 /SKIP ON NOT READY OR ON ERROR
|
||
LLC=6664 /TRANSMIT CHAR TO PRINTER
|
||
LSP=6665 /SET PROGRAM INTERRUPT; LP08/LE8
|
||
LPC=6666 /TRANSMIT CHAR & CLEAR FLAG
|
||
LCP=6667 /CLEAR PROGRAM INTERRUPT
|
||
LIE=6665 /AC11 TO INTERRUPT ENABLE; LS08/LS8E
|
||
|
||
/CTY
|
||
|
||
TPC=6044 /LOAD TELEPRINTER AND PRINT
|
||
|
||
/DISC (DF32)
|
||
|
||
DCMA=6601 /CLEAR
|
||
DMAR=6603 /READ
|
||
DMAW=6605 /WRITE
|
||
DCEA=6611 /CLEAR DISC EXTENDED ADDRESS
|
||
DEAL=6615 /LOAD EXTENDED ADDRESS
|
||
DFSE=6621 /SKIP ON ERROR
|
||
DFSC=6622 /SKIP ON COMPLETION
|
||
DEAC=6616 /READ EXTENDED ADDRESS
|
||
|
||
/DISC (RF08)
|
||
|
||
DSAC=6612
|
||
DORS=6614
|
||
DIML=6615
|
||
DIMA=6616
|
||
DCXA=6641
|
||
DXAL=6643
|
||
|
||
/CARD READER IOT'S
|
||
RCSF=6631
|
||
RCRA=6632
|
||
RCRB=6634
|
||
RCNO=6635 /8E ONLY
|
||
RCRC=6636 /8E ONLY
|
||
RCNI=6637 /8E ONLY
|
||
RCSD=6671
|
||
RCSE=6672
|
||
RCRD=6674
|
||
RCSI=6675 /8E ONLY
|
||
RCTF=6677 /8E ONLY
|
||
|
||
/RK05 IOT'S
|
||
|
||
IFZERO PHONES<
|
||
DSKP= 6741
|
||
CDLR= 6742
|
||
DLAG= 6743
|
||
DLCA= 6744
|
||
DRST= 6745
|
||
DLDC= 6746
|
||
DMAINT= 6747 >
|
||
IFNZRO PHONES <
|
||
DSKP= 6751
|
||
DCLR= 6752
|
||
DLAG= 6753
|
||
DLCA= 6754
|
||
DRST= 6755
|
||
DLDC= 6756
|
||
DMAINT= 6757 >
|
||
|
||
/DECTAPE
|
||
|
||
DTRA=6761
|
||
DTCA=6762
|
||
DTXA=6764
|
||
DTSF=6771
|
||
DTRB=6772
|
||
DTLB=6774
|
||
|
||
|
||
IFZERO CPU <
|
||
/KW8I REAL TIME CLOCK
|
||
|
||
CECI=6137 /CLEAR AND ENABLE CLOCK AND INTERRUPT
|
||
CSCF=6133 /SKIP AND CLEAR FLAG IF FLAG
|
||
>
|
||
IFZERO CPU-1 <
|
||
CECI=6315 /CLOCK ENABLE
|
||
CSCF=6301 /SKIP ON CLOCK FLAG
|
||
CCF=6302 /CLEAR CLOCK FLAG, CLEAR ENABLE AND CLEAR BUFFER
|
||
CLB=6304 > /LOAD BUFFER FROM AC
|
||
|
||
IFZERO CPU-2 <
|
||
CECI=6131 /CLOCK ENABLE
|
||
CSCF=6133 /SKIP AND CLEAR FLAG IF FLAG
|
||
|
||
/POWER FAIL IOT
|
||
|
||
SPL=6102 /SKIP IF POWER LOW
|
||
|
||
/ 8/E PROCESSOR IOT
|
||
SRQ=6003 /SKIP ON INTERRUPT REQUEST
|
||
GTF=6004 /LINK TO AC0, GT FLAG TO AC1
|
||
RTF=6005 /AC0 TO LINK, AC1 TO GT FLAG
|
||
CAF=6007 > /CLEAR ALL FLAGS
|
||
|
||
IFZERO CPU-4 <
|
||
CLLE=6135 /AC11 TO INTERRUPT ENABLE FOR CLOCK
|
||
CLCL=6136 /CLEAR CLOCK FLAG
|
||
CLSK=6137 /SKIP ON CLOCK FLAG
|
||
SPL=6102 /SKIP POWER LOW
|
||
CAL=6133 > /CLEAR AC LOW FLAG
|
||
|
||
IFNZRO DC08A <
|
||
|
||
/689AG
|
||
|
||
SRF=6701 /SKIP IF RING FLAG
|
||
SCF=6711 /SKIP IF CARRIER FLAG
|
||
DFCRF=6742 /CLEAR RING FLAG
|
||
CTG=6721 /CLEAR GROUP COUNTER
|
||
RRS=6702 /READ RING STATUS
|
||
ITG=6731 /INCREMENT GROUP COUNTER
|
||
STR=6722 /SET TERMINAL READY
|
||
EDF=6704 /ENABLE DATAPHONE FEATURES
|
||
DDF=6714 /DISABLE DATAPHONE FEATURES
|
||
CTR=6724 /CLEAR TERMINAL FLAG
|
||
CCF=6741 /CLEAR CARRIER FLAG
|
||
RCS=6712 /READ CARRIER STATUS
|
||
>
|
||
/FIP IOTS (IN ABBREVIATED FORM)
|
||
|
||
SEGS=0006 /RETURN NUMBER OF FREE SEGMENTS ON DISK
|
||
ASD=0040 /ASSIGN
|
||
REL=0042 /RELEASE
|
||
REN=0200 /RENAME
|
||
OPEN=0201 /OPEN
|
||
CLOS=0202 /CLOSE
|
||
RFILE=6603 /READ FILE
|
||
PROT=0204 /PROTECT
|
||
WFILE=6605 /WRITE FILE
|
||
CRF=0210 /CREATE
|
||
EXT=0211 /EXTEND
|
||
RED=0212 /REDUCE
|
||
FINF=6613 /FILE INFORMATION
|
||
LIN=0214 /LOGIN
|
||
LOUT=0215 /LOGOUT
|
||
WHO=6616 /WHO
|
||
/DEVICE DATA BLOCK
|
||
|
||
DDBSTS=0 /WORD 1, STATUS AND UNIT NUMBER
|
||
DXON=2000 /XOFF SENT FLAG
|
||
DSI=1000 /DESTINATION IS S.I. FLAG
|
||
DFULL=400 /KEYBOARD BUFFER IS FULL
|
||
DUPL=200 /CONSOLE IN DUPLEX MODE
|
||
SICOM=100 /COMMAND WAITING
|
||
DECHO=400 /CAUSE SI TO RE-ECHO CURRENT INPUT BUFFER
|
||
|
||
/DEVICE UNIT NUMBER IS IN BITS 6-11
|
||
|
||
DDBJN=1 /WORD 2, JOB NUMBER IN 7-11
|
||
DDBBRK=2 /BREAK MASK
|
||
DDBTIM=3 /TIME THAT DEVICE WAS ASSIGNED
|
||
DDBINP=4 /BUFFER FILL POINTER
|
||
DDBINC=5 /BUFFER TOTAL COUNT
|
||
DDBOUC=6 /BUFFER EMPTY COUNT
|
||
DDBOUP=7 /BUFFER EMPTY POINTER
|
||
/JOB DATA AREA
|
||
|
||
JOBSTS=0 /STATUS
|
||
/STR0
|
||
JSRUN=4000 /RUN BIT
|
||
JSEREN=2000 /USER ERROR ENABLE
|
||
JCOMBD=1000 /LAST TIME THE JOB RAN AS COMPUTE BOUND
|
||
JSPEEK=400 /ALLOW "PEEK" AND "LOGOUT" IOT'S
|
||
JSACC=200 /JOB LOGGED IN UNDER PRIVILEGED ACCOUNT (1, 2, OR 3)
|
||
JSIOT=100 /NON-RESIDENT IOT
|
||
JSIOTC=40 /COPY IOT RESULT TO USER
|
||
JSEXON=20 /EXECUTE ONLY
|
||
JSINER=10 /INHIBIT ERROR REPORT FROM SI. (UNTIL NEXT COMMAND)
|
||
/BITS 9-11 ARE SYSTEM ERROR CODE
|
||
UUOERF=1 /IOT ERROR
|
||
SWPRER=2 /SWAP READ ERROR
|
||
SWPWER=3 /SWAP WRITE ERROR
|
||
DSKERR=5 /DISC ERROR
|
||
HUNGDV=6 /HUNG DEVICE
|
||
|
||
/STR1
|
||
JSTIME=4000 /TIME IS UP
|
||
JSF0=2000 /FILE 0 IS NOT BUSY
|
||
JSF1=1000 /FILE 1 IS NOT BUSY
|
||
JSF2=400 /FILE 2 IS NOT BUSY
|
||
JSF3=200 /FILE 3 IS NOT BUSY
|
||
JSDEL=100 /KEYBOARD DELIMITER SEEN
|
||
JSLPT=40 /LINE PRINTER BUFFER IN USE BUT NOT FULL
|
||
JSTEL=20 /TELEPRINTER OUTPUT BUFFER IN USE BUT NOT FULL
|
||
JSPTR=10 /CHARACTERS IN READER BUFFER
|
||
JSPTP=4 /PUNCH BUFFER IN USE BUT IS NOT FULL
|
||
JSERR=2 /SYSTEM ERROR DETECTED
|
||
JSWAIT=1 /JOB NOT IN WAIT STATE
|
||
|
||
|
||
JOBSTB=2 /DEVICE STATUS REGISTER (FOR RK05, DECTAPE, AND CARD READER)
|
||
JOBWMK=3 /WAIT MASK
|
||
JOBSRA=5 /JOB RESTART ADDRESS
|
||
JOBERR=6 /JOB ERROR RESTART ADDRESS
|
||
JOBLNK=7 /IOT LINKAGE
|
||
JOBSWR=10 /SWITCH REGISTER
|
||
JOBREG=11 /PC LINK AC
|
||
JOBEAE=14 /MQ MODE GT SC
|
||
JOBACC=16 /ACCOUNT NUMBER
|
||
JOBF0=17 /POINTER TO FILE 0 CONTROL
|
||
JOBF1=20 /POINTER TO FILE 1 CONTROL
|
||
JOBF2=21 /POINTER TO FILE 2 CONTROL
|
||
JOBF3=22 /POINTER TO FILE 3 CONTROL
|
||
JOBRTM=23 /LOW ORDER RUN TIME
|
||
JOBRTH=24 /HI ORDER RUN TIME
|
||
/FILE CONTROL BLOCK - POINTED TO BY JOBFX, X=0,1,2,3
|
||
FILWPT=0 /POINTER TO FILE RETRIEVAL WINDOW
|
||
FILSCT=1 /SEGMENT NUMBER OF FIRST WINDOW ENTRY
|
||
FILPRO=2 /FILE PROTECTION - BIT 9
|
||
FILPAR=3 /POINTER TO RFILE OR WFILE PARAMETER BLOCK
|
||
FILDA=4 /DISC ADDRESS OF RFILE OR WFILE
|
||
FILWC=6 /-WORD COUNT OF RFILE OR WFILE
|
||
FILRES=7 /POINTER TO FILPIF IN USER AREA
|
||
|
||
/FILE RETRIEVAL WINDOW
|
||
/WORD 0: UFD LINK TO NEXT GROUP OF 7 SEGMENT POINTERS
|
||
/WORDS 1-7: SEVEN SEGMENT ADDRESSES
|
||
|
||
/RFILE OR WFILE PARAMETER BLOCK - POINTED AT BY FILPAR
|
||
|
||
FILPFN=0 /FUNCTION: 0603 OR 0605
|
||
FILPDX=1 /DISC EXTENSION
|
||
FILPIF=2 /INTERNAL FILE # (BITS 10-11) AND FIELD # (BITS 7-9)
|
||
FILPWC=3 /-WORD COUNT FOR THIS TRANSFER
|
||
FILPCA=4 /CORE ADDRESS FOR THIS TRANSFER
|
||
FILPDA=5 /DISC ADDRESS
|
||
FILPRA=6 /EXEC RETURN ADDRESS FOR THIS TRANSFER
|
||
FILPCT=7 /POINTER TO FILE CONTROL BLOCK
|
||
|
||
|
||
/CORE TABLE CONTROL FLAGS
|
||
|
||
SWAP=4000 /SWAP REQUEST
|
||
LOCK=2000 /LOCK IN CORE
|
||
NOTRUN=1000 /HAS NOT BEEN SCHEDULED TO RUN
|
||
FIP=400 /FILE PHANTOM
|
||
SI=200 /SYSTEM INTERPRETER
|
||
NOHOLD=140 /INHIBIT "NOTRUN" STATUS AFTER FOUR CONSECUTIVE FILE TRANSFERS
|
||
CJOB=37 /BITS 7-11 CONTAIN THE JOB #
|
||
|
||
|
||
|
||
/FIP TABLE DEFINITIONS
|
||
|
||
SATSIZ=530
|
||
JTABLE=6000
|
||
ENTABL=JTABLE+JOBMAX+1
|
||
UTABLE=ENTABL+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX
|
||
RTABLE=UTABLE+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX+JOBMAX
|
||
|
||
/TABLES
|
||
CORTBL=7001 /CORE ASSIGNMENT TABLE
|
||
L2QTB=CORTBL+7
|
||
IFZERO DC08A <DCSIZE=0>
|
||
IFNZRO DC08A <DCSIZE=400> /SIZE OF FIELD 1 DC08A CODE PLUS 689AG CODE
|
||
|
||
OUTREG=200 /ACTIVE OUTPUT REGISTERS (TTY'S, LPT & PTP)
|
||
SKPTBL=OUTREG+NULINE+3 /START OF IOT SKIP TABLE
|
||
SKPTP=SKPTBL+NULINE+NULINE+3 /POSITION OF PUNCH SKIP IN SKIP TABLE
|
||
RINGIN=SKPTP+3 /KEYBOARD INPUT RING BUFFER
|
||
ENDBUF=OUTREG+200 /END OF KEYBOARD INPUT BUFFER
|
||
INPUTS=ENDBUF-RINGIN%2 /NUMBER OF POSSIBLE ENTRIES IN THE KEYBOARD RING BUFFER
|
||
|
||
DATFLD=CDF 10 /MONITOR DATA FIELD SELECT
|
||
|
||
IFZERO EAE-20 <MQREG=1>
|
||
IFZERO EAE <IFNZRO CPU&7776 <MQREG=1>
|
||
IFZERO CPU&7776 <MQREG=0>>
|
||
IFNZRO OUTREG&1 <YOU GOOFED>
|
||
/SUPER CRITICAL LOCATIONS
|
||
/THESE LOCATIONS ARE USED TO LINK TS8, TS8II, FIP, SI AND INIT.
|
||
|
||
/IT MAY BE NECESSARY TO ADJUST THEM ACCORDINGLY
|
||
|
||
/DEFINED IN TS8:
|
||
|
||
WSCHED=2573 /ADDRESS FOR WAIT
|
||
GETJTB=401 /GETJTA
|
||
CORSRC=1317 /SEARCH CORE TABLE
|
||
OVERLA=5171 /FILE STUFF
|
||
READFI=574 /MORE FILE STUFF
|
||
CONDBA=132 /DEVTBL POINTER USED BY "PRINT" ETC.
|
||
RETB=611 /RETURN A BLOCK TO FREE CORE
|
||
GETB=1405 /GET A BLOCK OF FREE CORE
|
||
GETDB0=1447 /GET A DDB
|
||
CLK1=51 /LOW ORDER DAYTIME CLOCK
|
||
CLK2=50 /HIGH ORDER DAYTIME CLOCK
|
||
DATE=166 /12 BIT DATE WORD
|
||
TTCHAR=31 /SAVE REG. FOR CONSOLE CHARACTERS
|
||
KBD00=3201 /PROCESS KEYBOARD INPUT
|
||
PRINT0=1205 /TYPE OUT A CHARACTER
|
||
OVRLA1=562 /MORE FILE STUFF
|
||
RUNFI=605 /SI FILE TRANSFER INITIALIZER
|
||
L2SF=103 /LEVEL 2 SAVED MODE AND FIELD
|
||
SICLR=6572 /SI CLEAR LINKED BUFFER
|
||
TIMSI=2421 /TIMER FOR SI "COMWAT"
|
||
SIWAIT=1702 /NUMBER OF SI COMMANDS BEING WAITED ON
|
||
TIMFIP=2423 /TIMER FOR FIPLOCK
|
||
FIPLOK=2724 /CORTBL STATUS CHECK FOR FORCE OUT
|
||
CLKINI=322 /CONVERT HARDWARE CLOCK TO SYSTEM-TICKS (100 MS)
|
||
BLT0=1602 /BLOCK TRANSFER FROM CORE TO CORE
|
||
KBDSQ=3213 /ADDRESS OF JMS TO ^S/^Q CODE
|
||
|
||
/DEFINED IN TS8II:
|
||
|
||
F1TCNT=175 /SI DDB CHARACTER COUNT
|
||
F1ECNT=176 /SI DDB EMPTY COUNT
|
||
F1BUF=177 /SI DDB EMPTY BLOCK POINTER
|
||
DTJOB=20 /JOB OWNING THE DECTAPE CONTROLLER
|
||
RKJOB=54 /JOB OWNING RK05 CONTROLLER
|
||
DTSI=1175 /SI TERMINATE A DECTAPE ON TIMER
|
||
DATA1=2200+DCSIZE
|
||
DEVTBL=DATA1+140
|
||
DEVTBE=DEVTBL+NULINE+NULINE+2
|
||
JOBTBL=DEVTBE+22
|
||
CLKTBL=JOBTBL+JOBMAX+1
|
||
TTYTBL=CLKTBL+JOBMAX+1
|
||
PRGTBL=TTYTBL+JOBMAX+1
|
||
DSUTBL=PRGTBL+JOBMAX+JOBMAX+JOBMAX-7
|
||
FIPBLK=7720 /FIXED BLOCK FOR FIP IO
|
||
WINBAS=7730 /ADDRESS OF THE BASIC WINDOW
|
||
OUTDIF=-OUTREG^2+DEVTBL /FOR LINKING BETWEEN OUTREG AND DEVTBL
|
||
F1OFFJ=164 /FOR OFF/ON COMMANDS USED BY SI
|
||
IFNZRO DEVTBL&1 <YOU GOOFED>
|
||
|
||
/DEFINED IN SI
|
||
|
||
DTSIDT=7270 /RETURN FROM STOPPING A DECTAPE ON TIMER
|
||
VERBRK=7600 /START OF INSTALLATION DEFINED LOGIN MESSAGE
|
||
/TS8 VERSION 8.24 (01-JANUARY-75)
|
||
/
|
||
/
|
||
/
|
||
/
|
||
/COPYRIGHT (C) 1975
|
||
/DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
|
||
/
|
||
/
|
||
/THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY
|
||
/ON A SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH
|
||
/THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS
|
||
/SOFTWARE, OR ANY OTHER COPIES THEREOF, MAY NOT BE PRO-
|
||
/VIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON
|
||
/EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO
|
||
/THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE
|
||
/SOFTWARE SHALL REMAIN IN DEC.
|
||
/
|
||
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE
|
||
/WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COM-
|
||
/MITMENT BY DIGITAL EQUIPMENT CORPORATION.
|
||
/
|
||
/DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR
|
||
/RELIABILITY OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT
|
||
/SUPPLIED BY DEC.
|
||
VERNUM=30
|
||
/PAGE 0
|
||
FIELD 3 /LOAD THIS INTO TRACK 3 ON DISK
|
||
|
||
*1
|
||
JMP I .+1
|
||
|
||
C0200, 200
|
||
WS0, 0 /WORKING STORAGE FOR MAIN FLOW
|
||
WS1, 0
|
||
JOBSWA, 0
|
||
|
||
|
||
*10
|
||
ACX10, 0 /FOR INTERRUPT SERVICE
|
||
ACX11, RINGIN-1 /INPUT RING BUFFER POINTER (LEVEL 1)
|
||
DSPAR, 0 /DISK HANDLER
|
||
L2Q, L2QTB-1 /LEVEL 2 QUEUE
|
||
L2QE, L2QTB-1 /LEVEL 2 EMPTY POINTER
|
||
AXS1, 0 /MISCELLANEOUS LEVEL 2 AUTO-INDEX
|
||
AXS2, 0 / "
|
||
DSKPTR, DSUTBL+6 /DISK REQUEST QUEUE POINTER
|
||
|
||
|
||
SIDATA=20 /SYSTEM INTERPRETER DATA
|
||
*SIDATA
|
||
|
||
COMPTR, DEVTBL /POINTER TO LAST DEVTBL ENTRY SCANNED
|
||
SIBUF, 0 /BUFFER STATE
|
||
SICNT, 0
|
||
COMDSP, 0 /FIP RETURN DISPATCH
|
||
SIFLG, 0 /COMMAND FLAGS
|
||
SICHAR, 0 /SAVE LAST CHAR FROM COMMAND SCAN
|
||
SIREG, 0 /USER AC, LINK, PC
|
||
0
|
||
0
|
||
TTCHAR, 0 /TTY CHARACTER
|
||
|
||
CONSTANTS=SIDATA+12
|
||
*CONSTANTS
|
||
C0002, 2
|
||
C0003, 3
|
||
C0004, 4
|
||
C0007, 7
|
||
C0037, 37
|
||
C0100, 100
|
||
C1000, 1000
|
||
C7770, 7770
|
||
|
||
JOBCON=CONSTANTS+11 /JOB CONTROL
|
||
*JOBCON
|
||
|
||
JOBTIM, 0 /NUMBER OF TICKS RUN
|
||
JOBTBA, JOBTBL /JOB TABLE ADDRESS
|
||
|
||
FRSTOR=JOBCON+3
|
||
*FRSTOR
|
||
|
||
FREE, 0 /POINTER TO HEAD OF FREE STORAGE
|
||
FRECNT, 0 /# FREE BLOCKS AVAILABLE
|
||
|
||
|
||
TIMDAT=FRSTOR+2 /CLOCK AND DATE
|
||
*TIMDAT
|
||
|
||
/CLOCK
|
||
CLK2, 0
|
||
CLK1, 0
|
||
|
||
|
||
SCHDAT=TIMDAT+2
|
||
*SCHDAT /SCHEDULING DATA
|
||
|
||
COMCNT, 0 /NUMBER OF COMMANDS AWAITING EXECUTION
|
||
SQREQ, 0 /SWAP REQUEST FLAG
|
||
FINISH, 0 /+(I)-(O) FIELD OF JOB BEING SWAPPED
|
||
FIT, 0 /JOB # TO BE SWAPPED IN
|
||
FORCE, 0 /FIELD TO BE SWAPPED OUT
|
||
|
||
DATEND=60 /END OF FIELD 0 PAGE 0 DATA
|
||
|
||
|
||
|
||
FIPDAT=155 /DATA REFERENCED BY FIP
|
||
*FIPDAT
|
||
|
||
FIPJOB, 0 /JOB NOW (OR SOON TO BE) RUNNING FIP
|
||
C0400, 400
|
||
SEGSIZ=C0400 /# WORDS PER SEGMENT
|
||
*160
|
||
JOB, 0 /# OF CURRENT JOB
|
||
JOBDAT, . /ADDRESS OF CURRENT JOB DATA LIST. MUST RESIDE IN DATA FIELD.
|
||
C7000,
|
||
CORTBA, CORTBL-1 /CORE ALLOCATION TABLE
|
||
DEVTBA, DEVTBL /DEVICE TABLE
|
||
DSUTBA, DSUTBL /USER DISC REQUEST QUEUE
|
||
DSBUSY, -1 /DISC BUSY COUNT
|
||
|
||
/THE DATE IS KEPT AS A 12 BIT NUMBER IN THE FORMAT
|
||
/DATE=((YEAR-1974)*12+(MONTH-1))*31+DAY-1
|
||
|
||
DATE, 0
|
||
|
||
|
||
FISUBL=400
|
||
|
||
BLTA, BLT0 /BLOCK TRANSFER
|
||
BLT=JMS I BLTA
|
||
CORSRA, CORSRC
|
||
CORE=JMS I CORSRA
|
||
GETBA, GETB
|
||
GETBLK=JMS I GETBA
|
||
GETDBA, GETDB0 /GET A DATA BLOCK
|
||
GETDDB=JMS I GETDBA
|
||
PRINTA, PRINT0 /TYPE OUT A CHARACTER
|
||
PRINT=JMS I PRINTA
|
||
GETJT0, GETJTB /GET JOB DATA TABLE ADDRESS
|
||
GETJTA=JMS I GETJT0
|
||
GIRSCA, GIRSC /STORE CHARACTER IN BUFFER
|
||
STORE=JMS I GIRSCA
|
||
RETBA, RETB /RETURN BLOCK TO FREE STORAGE
|
||
RETBLK=JMS I RETBA
|
||
WAITA, WSCHED
|
||
WAIT=JMP I WAITA
|
||
/SUBROUTINE DISPATCHES
|
||
|
||
SUBDSP=DATEND
|
||
*SUBDSP
|
||
|
||
IOR=JMS I .
|
||
IOR0 /INCLUSIVE OR
|
||
UUOEXT=JMP I .
|
||
UUDEX1 /UUO EXIT
|
||
FIUSER, DSUSER /QUEUE FILE REQUEST IN DSUBTL
|
||
ERROR=JMS I .
|
||
SYSERR /SYSTEM ERROR
|
||
TTYUSE=JMS I .
|
||
TTYSRC /FIND USER TTY
|
||
SCHED=JMP I .
|
||
SCHEDA, SCHEDI /SCHEDULE NEXT JOB NOW CORE RESIDENT
|
||
RSCHED=JMP I .
|
||
RSCHEA, SCHED0 /FIND NEXT JOB TO BE RUN
|
||
EXIT=JMP I .
|
||
EXITA, L2EXIT /LEAVE LEVEL 2
|
||
REDO=JMP I .
|
||
REDO0 /REPEAT IOT LATER WHEN (HOPEFULLY) IT CAN BE COMPLETED
|
||
KEY=JMS I .
|
||
KBD00 /PROCESS KEYBOARD INPUT INTO A USER'S INPUT BUFFER
|
||
SAVJOB=JMS I .
|
||
SAVJO0 /SAVE THE STATUS OF THE CURRENT JOB
|
||
RESJOB=JMS I .
|
||
RESJO0 /RESTORE THE PREVIOUSLY SAVED STATUS
|
||
START=JMP I . /START USER JOB
|
||
SUJ
|
||
DSGO=JMS I .
|
||
DSGO0 /START DISK REQUEST
|
||
GETJTW=JMS I .
|
||
GETJW0 /GET CONTENT OF JOB STATUS WORD (CURRENT JOB)
|
||
GETJTI=JMS I .
|
||
GETJI0 /GET CONTENT OF JOB STATUS WORD (ANY JOB)
|
||
DISMIS=JMP I .
|
||
DISMI0 /DISMISS INTERRUPTS
|
||
RUNABL=JMS I .
|
||
RUNTST /TEST IF SPECIFIED JOB IS RUNNABLE
|
||
|
||
SETFLG, PTSTAR
|
||
|
||
L2CON=SUBDSP+23 /LEVEL 2 (EXEC) CONTROL
|
||
*L2CON
|
||
|
||
L2SF, 100 /RELOCATION AND MODE
|
||
L2SV0, NULJOB /SAVED PC
|
||
L2SVLK, 0 /SAVED LINK
|
||
L2SA, 0 /SAVED ACCUMULATOR
|
||
|
||
FETCH=JMS I .
|
||
TOF /RETRIEVE A CHARACTER FROM A LINKED FREE CORE BLOCK
|
||
CLOCK, -1 /NUMBER OF SYSTEM TICKS PENDING ON LEVEL 2 (MINUS 1)
|
||
DEAD, 0 /CORTBL-1 OF JOB THAT SHOULD BE PUSHED OUT
|
||
SCHNEW, 0 /-1 TO ALLOW FULL TIME SLICES
|
||
C0010, 10
|
||
IFNZRO DC08A <
|
||
D6FLAG, -1 /ALLOW 689 ANSWER ONLY ONE TIME IN L2Q
|
||
D6ANSR, ANSWER >
|
||
|
||
|
||
/ROOM FOR PATCHES!!
|
||
*CONDBA
|
||
0 /POINTER TO DEVTBL POSITION CURRENTLY UNDER CONSIDERATION
|
||
CONDDB, 0 /ADDRESS OF DDB UNDER CONSIDERATION
|
||
SEGLMK, 7400 /-WRDSEG
|
||
C7400=SEGLMK
|
||
BASWIN, -WINBAS-1
|
||
CJOBDA= JOBDAT
|
||
C0006, 6
|
||
C0070, 70
|
||
SEGSM1, /WRDSEG-1
|
||
C0377, 377
|
||
C0005, 5
|
||
C0600, 600
|
||
C3777, 3777
|
||
C6203, 6203
|
||
QUANTM,
|
||
C7776, 7776
|
||
C0177, 177
|
||
CURJOB, 0 /NUMBER OF JOB INTERRUPTED BY FILE TRANSFER
|
||
*150
|
||
UDF=JMS . /SELECT FIELD OF CURRENT JOB
|
||
WS2, 0
|
||
UUDF, 0 /DATA FIELD SELECT FOR FIELD OF CURRENT JOB
|
||
JMP I .-2
|
||
INTRC, 0 /TRACK # TO BE SWAPPED IN (DF32 0X00) (RF08 000X)
|
||
OUTTRC, 0 /TRACK # TO BE SWAPPED OUT
|
||
*42
|
||
FANCOR, CORTBL+1 /FIELD OF PHANTOM I.E. FIELD 2
|
||
*57
|
||
BONUS, 0 /JOB # JUST BROKEN OUT OF I/O WAIT
|
||
|
||
*157
|
||
SWPIOA, SWPIO
|
||
*45
|
||
SWPREA, SWPRET
|
||
|
||
/FIELD 0 PAGE DIRECTORY
|
||
IOTS=4000
|
||
DISC=IOTS+1400 /DISC CONTROL
|
||
*200
|
||
|
||
/PRIORITY LEVEL 0 (HIGHEST PRIORITY)
|
||
/KEEPS TRACK OF REAL TIME
|
||
/ALWAYS ENTERED BY CLOCK FLAG
|
||
/DISMISSES TO LEVEL 1 IF INTERRUPT WAS NOT FROM LEVEL 1
|
||
/OTHERWISE, DISMISSES TO INTERRUPTED LOCATION.
|
||
|
||
INT,
|
||
IFZERO CPU-2 <
|
||
SPL /POWER FAILURE?
|
||
JMP INTX0 /NO
|
||
JMP I .+1 /YES, HURRY UP AND SERVICE IT
|
||
POWINT
|
||
INTX0, >
|
||
IFZERO CPU-4 <
|
||
SPL /POWER LOW
|
||
SKP /NO
|
||
JMP .-2 /WAIT FOR POWER
|
||
CAL > /CLEAR POWER LOW CONDITION
|
||
SINT /USER IOT? (HAS TO BE CHECKED FIRST!!!)
|
||
IFZERO DC08A <JMP INT0 >
|
||
IFNZRO DC08A <SKP >/DC08?
|
||
JMP I UUOA /YES, GO SAVE LEVEL 2 STUFF
|
||
IFNZRO DC08A <
|
||
T1SKP /CLOCK?
|
||
JMP INT0 /NO, KEEP LOOKING
|
||
ISZ CLKCNT /YES, IS A SYSTEM TICK UP YET?
|
||
JMP I T8DISA /NO, RUN DC08 INTERRUPT SERVICE
|
||
DCA CLKIT /SAVE AC AT INTERRUPT
|
||
TAD L2TIMA /SCHEDULE L2TIME ON L2QUE
|
||
ISZ CLOCK /BUMP NUMBER OF TICKS TO COUNT AT LEVEL 2
|
||
CLA SKP /ALREADY SCHEDULED
|
||
DCA I L2Q
|
||
TAD CLKINI /RESET TIMER FOR NEXT TICK
|
||
DCA CLKCNT
|
||
TAD CLKIT /GET AC AT INTERRUPT
|
||
JMP I T8DISA /RUN DC08 SERVICE
|
||
T8DISA, T8DIS>
|
||
/INTERRUPTS OTHER THAN 680 (LEVEL 1)
|
||
/DISMISSES TO LEVEL 2 IF NOT FROM LEVEL 1 OR 2.
|
||
|
||
INTAC, 0 /AC AT LEVEL 1
|
||
INTLK, 0 /LINK AT LEVEL 1
|
||
UUOA, UUO0
|
||
|
||
|
||
|
||
INT0, DCA INTAC /SAVE AC AND LINK
|
||
RAR
|
||
DCA INTLK
|
||
|
||
IFZERO DC08A <
|
||
IFNZRO CPU-4 <CSCF> /SKIP AND CLEAR FLAG IF FLAG
|
||
IFZERO CPU-4 <CLSK> /SKIP IF CLOCK FLAG
|
||
JMP DTINT
|
||
IFZERO CPU-4 <CLCL> /CLEAR CLOCK FLAG
|
||
IFZERO CPU-1 <
|
||
CLA CMA /KW08
|
||
CCF CLB /CLEAR FLAG AND LOAD BUFFER
|
||
CECI > /ENABLE
|
||
|
||
ISZ CLKCNT /IT WAS CLOCK - WAS IT A SYSTEM TICK
|
||
JMP DISMI1 /NO - NOTHING TO DO THEN
|
||
TAD CLKINI /YES - SET FOR NEXT SYSTEM TICK
|
||
DCA CLKCNT
|
||
ISZ CLOCK
|
||
JMP DISMI1
|
||
TAD L2TIMA /SCHEDULE A SYSTEM TICK ON LEVEL 2
|
||
JMP DISMI0 >
|
||
|
||
|
||
|
||
DTINT, JMS DTCHK
|
||
DISMIS
|
||
IFNZRO D689 <
|
||
SRF
|
||
JMP D6CF
|
||
DFCRF /CLEAR THE RING FLAG
|
||
ISZ D6FLAG /HAVE WE GOTTEN MORE THAN ONE FLAG?
|
||
DISMIS /YES! DON'T OVERFLOW L2Q
|
||
TAD D6ANSR
|
||
DISMIS /SCHEDULE PHONE ANSWERING ON L2Q
|
||
D6CF, SCF
|
||
JMP RFINT
|
||
CCF /A CARRIER HAS CHANGED
|
||
TAD DFM4
|
||
DCA I TIM68A /TAKE A LOOK AT IT IN FOUR SECONDS
|
||
DISMIS
|
||
DFM4, -4
|
||
TIM68A, TIM689 >
|
||
RFINT,
|
||
IFZERO RF08-40 <DFSE /DF32 DISK ERROR?
|
||
JMP I DSWAIT /YES
|
||
DFSC /DF32 DISK COMPLETION FLAG?
|
||
JMP I INT2 /NOPE
|
||
>
|
||
IFZERO RF08 <DFSC DFSE /RF08 DISK?
|
||
JMP I INT2 /NO
|
||
DFSE > /RF08 ERROR?
|
||
ISZ DSWAIT /NO ERROR - TRANSFER OK
|
||
|
||
JMP I DSWAIT
|
||
DSWAIT, 0 /SET BY DISK SERVICE
|
||
INT2,
|
||
IFNZRO CDR <INTCDR> /CONTINUE IN THE INTERRUPT CHAIN
|
||
IFZERO CDR <RINT>
|
||
DTCHK, 0
|
||
IFNZRO CDR <RCSF > /CARD READER?
|
||
IFZERO CDR <JMP .+6 >
|
||
JMP .+5
|
||
CIF DATFLD-1
|
||
CDF
|
||
JMP I .+1
|
||
CDL11
|
||
IFNZRO RK05 < DSKP > /RK05?
|
||
IFZERO RK05 < JMP .+5 >
|
||
JMP .+4
|
||
CIF DATFLD
|
||
JMP I .+1
|
||
RKL11
|
||
IFNZRO TC01 <DTSF > /DECTAPE?
|
||
IFZERO TC01 <JMP .+11 >
|
||
JMP .+10
|
||
DTRA
|
||
AND C0004
|
||
SNA CLA
|
||
JMP .+4
|
||
CIF DATFLD
|
||
JMP I .+1
|
||
DTL11
|
||
ISZ DTCHK
|
||
F1RTN, JMP I DTCHK /THESE 3 DEVICES RETURN HERE FROM FIELD 1
|
||
INT7, TAD CLKIT
|
||
DCA I L2Q /QUEUE REQUEST
|
||
DISMI1, TAD INTLK /RESTORE LINK AND AC
|
||
CLL RAL
|
||
TAD INTAC
|
||
DISMI2, RMF /RESTORE IF, DF, & MODE
|
||
ION
|
||
JMP I 0 /BACK TO INTERRUPTED PROGRAM
|
||
|
||
L2TIMA, L2TIME
|
||
REST0,
|
||
CLKIT, 0 /TEMPORARY FOR AC
|
||
CLKCNT, -3 /WILL INITIALIZE ITSELF TO THE CORRECT VALUE
|
||
|
||
*322
|
||
CLKINI, 0 /SET BY INIT TO CAUSE 1 SYSTEM TICK TO = 100 M.S.
|
||
/DISMIS ROUTINE
|
||
/ENTERED FROM INTERRUPT HANDLER TO ENTER LEVEL 2 FROM LEVEL 1
|
||
/AC = ADDRESS OF LEVEL 2 SERVICE ROUTINE
|
||
/ OR 0 IF NO LEVEL 2 SERVICE REQUIRED
|
||
|
||
DISMI0,
|
||
C6201, CDF
|
||
SNA /DISMISS INTERRUPTS?
|
||
JMP DISMI1 /NO - BACK TO WHATEVER WAS GOING ON BEFORE
|
||
DCA CLKIT /SAVE DISPATCH
|
||
RIB /MODE BIT = 100
|
||
AND C0100
|
||
SNA CLA /FROM USER MODE?
|
||
JMP INT7 /NO - QUEUE REQUEST UNTIL LATER
|
||
TAD INTAC /MOVE THE AC TO LEVEL 2
|
||
DCA L2SA
|
||
TAD INTLK /MOVE LINK TO LEVEL 2
|
||
DCA L2SVLK
|
||
TAD 0 /MOVE PC TO LEVEL 2
|
||
DCA L2SV0
|
||
RIB
|
||
DCA L2SF /FIELDS AND MODE TO LEVEL 2
|
||
ION /DISMISS TO EXEC MODE, FIELD 0, LEVEL 2
|
||
JMP I CLKIT
|
||
|
||
|
||
/RESTORE INTERRUPTED STATE
|
||
|
||
RESTOR, DCA REST0 /POINTER TO SAVED INFO
|
||
TAD I REST0 /SAVED FIELDS AND STATE
|
||
AND C0070 /GET INSTRUCTION FIELD
|
||
TAD C6203
|
||
DCA RCIF /CIF FOR PROPER FIELD
|
||
TAD I REST0
|
||
CLL RTL
|
||
RAL
|
||
AND C0070 /CDF FOR RETURN
|
||
TAD C6201 /NOT NECESSARILLY EQUAL TO INSTRUCTION FIELD
|
||
DCA RCDF
|
||
TAD I REST0
|
||
AND C0100 /USER PROGRAM, FIP OR SI?
|
||
SZA CLA
|
||
SUF /USER MODE; SET USER FLAG
|
||
ISZ REST0
|
||
TAD I REST0 /PC
|
||
DCA 0
|
||
ISZ REST0
|
||
TAD I REST0 /LINK
|
||
CLL RAL
|
||
ISZ REST0
|
||
CLA
|
||
TAD I REST0 /AC
|
||
RCIF, 0
|
||
RCDF, 0
|
||
ION
|
||
JMP I 0 /BACK TO INTERRUPTED PROGRAM
|
||
/RETURN ADDRESS OF LINKED TABLE ENTRY
|
||
/CALL TAD TABLE ENTRY ADDRESS
|
||
/ GETJTA
|
||
/ ENTRY NAME (NUMBER)
|
||
/ RETURN
|
||
|
||
GETJTB, 0
|
||
DCA GETJT1 /SAVE JOBTABLE ADDRESS
|
||
TAD I GETJTB /ENTRY #
|
||
DCA GETJT2
|
||
RDF /FIELD CALLED FROM
|
||
TAD C6203
|
||
DCA GETJT3 /SO WE CAN GET BACK
|
||
DATFLD /CHANGE TO DATA FIELD
|
||
DCA I GETJTZ /CLEAR FLD 1 LOC. 0
|
||
GETJ1, TAD I GETJT1 /GET JOBTBL ENTRY
|
||
CLL /TO LET CALLER KNOW IT DOESN'T EXIST
|
||
SNA /LINK 0?
|
||
JMP GETJ3 /YES - RETURN 0
|
||
DCA GETJT1 /NO, JOB DATA ADDRESS
|
||
TAD GETJM7
|
||
TAD GETJT2 /ARE WE IN PROPER BLOCK?
|
||
SPA /ENTRY<7?
|
||
JMP .+3 /YES
|
||
DCA GETJT2 /NO, LINK TO NEXT
|
||
JMP GETJ1 /AND TRY AGAIN
|
||
STL CLA IAC /SET LINK TO LET CALLER KNOW WE WERE SUCCESSFUL
|
||
TAD GETJT2 /INDEX INTO BLOCK
|
||
TAD GETJT1 /START OF BLOCK
|
||
GETJ3, ISZ GETJTB /SKIP CALLING ARGUMENT
|
||
GIRSB,
|
||
GETJT3, 0 /BACK TO CALLING FIELD
|
||
JMP I GETJTB
|
||
GETJTZ, 0 /POINTER TO LOC. 0 OF FIELD 1 (NOT FOR TEMPORARY STORAGE)
|
||
|
||
GIRSCT, /POINTER TO ITEM COUNT
|
||
GETJT1, 0
|
||
GIRST,
|
||
GETJT2, 0
|
||
GETJM7, -7
|
||
/STORE CHARACTER
|
||
/CALL WITH ADDRESS OF DDB IN AC, CHARACTER IN TTCHAR
|
||
/ STORE
|
||
/ ADDRESS OF ROUTINE TO CHECK BUFFER SIZE
|
||
/ WON'T FIT
|
||
/ OK
|
||
EMPTY=WS1
|
||
DBINPA=C0004
|
||
|
||
GIRSC, 0
|
||
TAD DBINPA
|
||
DCA GIRSB /POINTS TO ADDRESS OF BUFFER
|
||
TAD I GIRSB
|
||
SNA /IS BUFFER SET UP? (I.E. IS FILL POINTER NON ZERO?)
|
||
JMP GIRSC8 /NO - GO GET A BUFFER
|
||
DCA GIRSCT /POINTER TO FILL COUNT
|
||
ISZ I GIRSCT /ANY ROOM LEFT?
|
||
JMP GIRSC1 /YES
|
||
CDF
|
||
TAD I GIRSC /GET ADDRESS OF SIZE SUBROUTINE
|
||
DATFLD
|
||
DCA GIRST
|
||
TAD GIRSB
|
||
IAC /POINT TO CHARACTER COUNT
|
||
JMS I GIRST /GO CHECK BUFFER SIZE
|
||
JMP GIRSC0 /BUFFER ALREADY FULL - NO ROOM FOR THIS ENTRY
|
||
GIRS11, CLL CLA CMA RTL /IS THERE ENOUGH (I.E. 3 BLOCKS) FREE CORE LEFT?
|
||
TAD FRECNT
|
||
SPA SNA CLA
|
||
JMP GIRSC0 /NO - DON'T GIVE HIM ANOTHER BUFFER NOW
|
||
TAD GIRSCT /OK - GET A BUFFER
|
||
CDF
|
||
GETBLK /NO, LINK NEW BUFFER
|
||
JMP GIRSC0 /NONE AVAILABLE
|
||
DATFLD
|
||
TAD I GIRSCT /POINTER TO HEAD OF NEW BUFFER
|
||
DCA I GIRSB /BUFFERS NOW CHAINED TOGETHER
|
||
GIRSC7, TAD I GIRSB
|
||
DCA GIRSCT /POINT TO NEW FILL COUNT
|
||
TAD GIRSIZ /INITIALIZE CHAR COUNT TO -12
|
||
DCA I GIRSCT /AND SAVE IN NEW BLOCK
|
||
GIRSC1, TAD I GIRSCT /ARE WE DOING LAST THREE CHARACTERS IN BLOCK?
|
||
TAD C0003
|
||
SMA
|
||
STL RAL /YES SO MULT. BY 2 THEN ADD 1
|
||
SPA /PACK?
|
||
STL CIA /NO - GET ADDRESS WITHIN BUFFER
|
||
TAD I GIRSB /START OF BUFFER
|
||
DCA GIRSCT /ADDRESS TO STORE CHARACTER
|
||
TAD TTCHAR
|
||
SNL /PACK?
|
||
JMP GIRSC4 /YES
|
||
AND C0377
|
||
GIRSC5, DCA I GIRSCT /STORE CHARACTER
|
||
ISZ GIRSB /POINT TO CHARACTER COUNT
|
||
ISZ I GIRSB /COUNT THIS ENTRY
|
||
ISZ GIRSC /INDICATE SUCCESS
|
||
GIRSC3, ISZ GIRSC /TO SKIP PAST ARG.
|
||
JMP I GIRSC
|
||
GIRSC4, RTL /SHIFT BITS TO LEFT
|
||
RTL
|
||
AND C7400
|
||
TAD I GIRSCT /AND SAVE IN CURRENT LOCATION IN BUFFER
|
||
DCA I GIRSCT
|
||
ISZ GIRSCT /NEXT LOCATION IN BUFFER
|
||
TAD TTCHAR /GET LOW 4 BITS FROM CHARACTER
|
||
RTR
|
||
RTR
|
||
RAR
|
||
AND C7400 /AND COMBINE WITH PREVIOUS CHARACTER
|
||
TAD I GIRSCT /SAVE THE WHOLE MESS
|
||
JMP GIRSC5 /AND AWAY
|
||
|
||
GIRSC8, CDF /ATTACH A BUFFER TO FILL POINTER
|
||
TAD GIRSB /LINK ADDRESS
|
||
GETBLK
|
||
JMP GIRSC3 /CAN'T GET ONE - TOO BAD
|
||
DATFLD /OK - SET UP POINTERS
|
||
STL RTL / 2 PLUS
|
||
TAD GIRSB /ADDRESS OF FILL POINTER
|
||
DCA EMPTY / = ADDRESS OF EMPTY COUNT
|
||
STA
|
||
TAD GIRSIZ /-13 TO THE EMPTY COUNT
|
||
DCA I EMPTY
|
||
ISZ EMPTY /NOW INITIALIZE THE EMPTY POINTER
|
||
TAD I GIRSB /SET EMPTY POINTER EQUAL TO FILL POINTER
|
||
DCA I EMPTY /SINCE IT'S THE ONLY BUFFER
|
||
JMP GIRSC7
|
||
GIRSC0, DATFLD /COULDN'T SQUEEZE CHARACTER IN
|
||
STA /BUT WE ALREADY BUMPED FILL COUNT
|
||
DCA I GIRSCT /INDICATE CURRENT BLOCK IS STILL FULL
|
||
JMP GIRSC3 /AND EXIT WITHOUT SKIPPING
|
||
|
||
GIRSIZ, -12 /10 (DECIMAL) CHARACTERS/BLOCK
|
||
|
||
OVRLA1, JMS I FIUSER
|
||
WAIT
|
||
|
||
REMJOB, 0
|
||
TAD SCHNEW /GET NEW JOB MASK
|
||
AND JOB /AND THE CURRENT JOB
|
||
DCA CURJOB /IF THERE'S A JOB; REMEMBER HIM/HER
|
||
SAVJOB /SAVE HIS/HER STATE
|
||
STA
|
||
DCA SCHNEW /SET MASK FOR FULL SLICE
|
||
JMP I REMJOB
|
||
|
||
READFI, TAD SIREG /FIND RESIDENT FIELD FOR THIS JOB
|
||
FILCON, DCA WS0
|
||
JMS REMJOB /BUMP OFF THE PRESENT USER - BUT MAYBE REMEMBER WHO [S]HE IS
|
||
TAD WS0
|
||
CORE
|
||
CJOB /ANY FIELD WITH THIS JOB IN IT IS OK
|
||
HLT /IF IT'S NOT THERE IT'S DOOMS DAY FOR ALL
|
||
DCA L2SF /RESTORE FOR THIS JOB
|
||
TAD WS0
|
||
RUNFI, RESJOB /RESTORE LEVEL TWO FOR THIS JOB
|
||
GETJTW /GET ADDRESS OF FILE PARAMETER BLOCK
|
||
JOBLNK
|
||
JMP I SIFILA /AND OFF TO THE FILE HANDLER
|
||
/RETURN BLOCK TO FREE LIST
|
||
/CALL TAD BLOCK ADDRESS
|
||
/ RETBLK
|
||
/ RETURN WITH LINK IN AC
|
||
|
||
RETB, 0
|
||
DCA RETB1 /SAVE BLOCK ADDRESS
|
||
RDF
|
||
TAD C6203
|
||
DCA RETF /FOR RETURNING TO CALLER
|
||
TAD RETB1
|
||
CLL
|
||
TAD RETEND /SEE IF IT'S FIP'S BLOCK OR A FILL COUNT FOR A LINKED BUFFER
|
||
SZL CLA
|
||
JMP RETF /IT IS - DON'T RELEASE IT
|
||
TAD RETB1
|
||
SNA
|
||
HLT /SHOULD NEVER RETURN 0000
|
||
AND C0007
|
||
SZA
|
||
HLT /SHOULD ALWAYS BE XXX0
|
||
DATFLD
|
||
TAD I RETB1 /NOW GET THE LINK, IF ANY
|
||
DCA RETBL /SAVE IT
|
||
TAD FREE /GET OLD START OF FREE LIST
|
||
DCA I RETB1 /PUT IT IN LINK
|
||
TAD RETB1 /PUT ADDRESS OF THIS BLOCK
|
||
DCA FREE /AS START OF FREE LIST
|
||
ISZ FRECNT /INCREMENT FREE
|
||
TAD RETBL
|
||
RETF, 0 /RETURN WITH LINK
|
||
JMP I RETB
|
||
|
||
RETEND, -FIPBLK
|
||
|
||
|
||
SIFILA, SIFILE
|
||
SJCOPY, JSIOTC
|
||
|
||
SUJERR= C0007
|
||
/RESTART USER JOB AT RESTART ADDRESS
|
||
|
||
GIR90, CIA /NEGATE THE JOB NUMBER
|
||
TAD JOB /IS THE JOB CURRENTLY RUNNING?
|
||
SZA CLA
|
||
JMP GIR91 /NO
|
||
TAD I WS0
|
||
DCA L2SV0 /SET PC=RESTART ADDRESS
|
||
DCA L2SVLK /SET LINK=0
|
||
DCA L2SA /SET AC=0
|
||
JMP I GIR0A /LEAVE
|
||
GIR91, TAD I WS0
|
||
DCA I JOBSWA /SET PC=RESTART ADD
|
||
ISZ JOBSWA
|
||
STA
|
||
DCA I JOBSWA /SET LINK=-1 SO WE'LL REMEMBER TO CLEAR HIS'HER LINK & AC LATER
|
||
JMP I GIR0A
|
||
GIR0A, KBD01
|
||
CNOTR, -NOTRUN-1
|
||
|
||
/START USER JOB
|
||
|
||
SUJ, TAD L2SF /CLEAR NOTRUN FLAG SO JOB CAN BE SWAPPED
|
||
AND C0007 /GET CORTBL INDEX
|
||
TAD CORTBA
|
||
DCA SUJSRC /POINTS TO ENTRY IN CORTBL FOR THIS JOB
|
||
TAD I SUJSRC /GET CORTBL ENTRY
|
||
AND CNOTR /CLEAR NOT RUN BIT
|
||
DCA I SUJSRC /SAVE ENTRY
|
||
TAD JOB /IS IT A PHANTOM?
|
||
AND C0600
|
||
SUJ2, SZA CLA
|
||
EXIT /YES - WE'RE ALL SET
|
||
SUJ5, GETJTW /NO, IOT RESULTS TO USER?
|
||
JOBSTS
|
||
AND SJCOPY /IOTC BIT IN STR0
|
||
DATFLD
|
||
SNA
|
||
JMP SUJ4 /NO - WAS THERE A SYSTEM ERROR?
|
||
CMA /CLEAR THE BIT
|
||
AND I JOBSWA /JSIOTC:=0
|
||
DCA I JOBSWA /SAVE NEW STR0
|
||
CDF /GET # ARGUMENTS TO RETURN
|
||
GETJTW
|
||
JOBLNK
|
||
DCA SUJSRC /POINTS TO WORD1 OF PARAMETER BLOCK
|
||
DATFLD
|
||
TAD I SUJSRC /IOT IN QUESTION
|
||
CDF
|
||
RAR /SAVE "WHO FINF" INDICATOR IN LINK
|
||
AND C0004
|
||
SNA CLA /WAS BIT 8 ON?
|
||
JMP SUJ3 /NO - MUST HAVE BEEN AN RFILE OR WFILE WINDOW TURN
|
||
CML CMA RAL
|
||
CLL RTL /CA=-3 FOR "WHO"; AC=-7 FOR "FINF"
|
||
DCA SUJCNT /SAVE COUNT
|
||
TAD SUJSRC /RETURN PARAMETER BLOCK
|
||
RETBLK
|
||
CLA
|
||
ISZ SUJSRC /POINTS TO WORD 2 OF BLOCK
|
||
TAD UUDF /TRANSFER RESULTS TO USER'S FIELD
|
||
DCA SUJDFS /...SET FIELD IN BLT CALL
|
||
TAD L2SA /POINTS TO USER'S PARAMETERS
|
||
DCA SUJDES /SAVE FOR BLT
|
||
DCA L2SA /CLEAR HIS/HER AC
|
||
BLT /MOVE RESULTS TO USER
|
||
DATFLD /FROM FIELD 1
|
||
SUJSRC, 0 /SOURCE ADDRESS
|
||
RETBL,
|
||
SUJDFS, 0 /TO USER FIELD
|
||
RETB1,
|
||
SUJDES, 0 /AT THIS ADDRESS
|
||
SUJCNT, 0 /-WORD COUNT
|
||
TAD JOB
|
||
RUNABL /IS [S]HE STILL RUNNABLE?
|
||
WAIT /NO - JUST NEEDED TO PASS THE INFO TO HIM/HER
|
||
JMP SUJ5
|
||
|
||
SUJ3, TAD SUJSRC /UFILE RETURN
|
||
JMP I SIFILA
|
||
|
||
SUJ4, ISZ JOBSWA /POINT AT STR1
|
||
TAD I JOBSWA
|
||
STL RTR /PLACE SYSTEM ERROR PENDING BIT IN LINK
|
||
SNL /IS THERE AN ERROR?
|
||
JMP SUJ2 /NO; GO CLEAR AC AND EXIT
|
||
/ROUTINE TO START USER JOB AT ERROR ADDRESS
|
||
/DOES A JMS TO ERROR ADDRESS
|
||
/USER PC AT TIME OF ERROR TO ADDRESS; JMP TO ADD+1
|
||
CLL RTL /CLEAR THE ERROR PENDING BIT
|
||
DCA I JOBSWA /TO AVOID A SECOND JMS TO HIS ERROR ROUTINE
|
||
TAD JOBSWA
|
||
TAD C0005
|
||
DCA JOBSWA /POINTS TO ERROR RESTART ADD
|
||
TAD I JOBSWA /ERROR ADDRESS
|
||
DCA WS0
|
||
TAD L2SV0 /OLD PC
|
||
UDF /GET USER'S FIELD
|
||
DCA I WS0 /SAVE OLD PC
|
||
IAC
|
||
TAD WS0 /ERROR ADDRESS + 1
|
||
DCA L2SV0 /NEW PC
|
||
EXIT
|
||
|
||
/PAPER TAPE READER SERVICE FOR TSS/8
|
||
|
||
UPTR, JMS I PTRCHK /DOES [S]HE OWN DEVICE?
|
||
PTRDEV, DEVTBE /POINTS TO READER ENTRY IN DEVTBL
|
||
TAD URCBI /CHECK FOR "RCB"
|
||
TAD UUOCAL
|
||
SNA CLA
|
||
JMP URCB /IT IS!
|
||
JMS I PTRIOT /ANALYZE IOT
|
||
JMP URRS /READ A STRING
|
||
PTRFL, JSPTR /READER FLAG
|
||
JMP I PTRSKP /WE ALWAYS SKIP
|
||
SNL CLA /RRB?
|
||
UUOEXT /NO - MUST HAVE BEEN RFC - SO WHAT!
|
||
DCA WS0 /SET READER'S BREAK MASK TO 0
|
||
DATFLD
|
||
TAD I PTRDEV /ADDRESS OF DDB
|
||
FETCH /FETCH A CHARACTER FROM READER BUFFER
|
||
JMP PSTWT0 /NONE AVAILABLE - START READER
|
||
DCA PTRCH /SAVE FOR NEXT RRB
|
||
CDF
|
||
TAD PTRACA /POINTS TO L2SA
|
||
IOR /OR CHARACTER INTO L2SA
|
||
PTRCH, 0
|
||
UUOEXT /EXIT TO USER
|
||
PTRSKP, UUOEX2
|
||
|
||
URRS, DATFLD
|
||
TAD I PTRDEV /GET DDB ADDRESS
|
||
DCA CONDDB
|
||
JMS I PSTRIN /TRANSFER STRING TO USER
|
||
JMP PSTWT0 /INSUFFICIENT NUMBER OF CHARACTERS IN BUFFER
|
||
UUOEXT
|
||
|
||
URCB, DATFLD
|
||
TAD I PTRDEV /CLEAR THE ENTIRE READER BUFFER
|
||
JMS I PTRCLR
|
||
UUOEXT
|
||
PSTWT0, STA
|
||
L2PTR1, DCA PTRSET /REMEMBER WHY WE ARE HERE
|
||
CDF CIF /SELECT F0 AND INHIBIT INTERRUPTS
|
||
TAD I PTRTIM /IS THE READER BUSY?
|
||
SNA CLA
|
||
RFC /START THE READER
|
||
CLL STA RAL /AC=-2
|
||
DCA I PTRTIM /SET READER TIMER
|
||
DCA I RCNTA /NO LIMIT UNTIL IT'S READ AT LEAST ONE BLOCK WORTH
|
||
ISZ PTRSET /FROM UUO OR LEVEL 2?
|
||
EXIT /LEVEL 2 - FINISHED
|
||
STA
|
||
TAD L2SV0 /BACK UP HIS PC FOR A REDO
|
||
DCA L2SV0
|
||
TAD PTRFL
|
||
UUOEXT /NOW WAIT FOR THE READER
|
||
|
||
PTRSIZ, 0
|
||
DCA PTRSET /SAVE POINTER TO CHARACTER COUNT
|
||
ISZ PTRSIZ /WE ALWAYS SUCCEED
|
||
CDF CIF /NO INTERRUPTS WHILE WE CHECK THE READER'S STATUS
|
||
TAD I PTRTIM
|
||
SMA CLA /IS IT STILL RUNNING?
|
||
JMP PTRSI2 /NO - JUST MAKE SURE THE FLAG IS SET
|
||
TAD FRECNT /HOW'S THE SUPPLY OF FREE CORE?
|
||
TAD C7770
|
||
SMA SZA CLA
|
||
TAD PTRFUL /MINUS NUMBER ALLOWED
|
||
DATFLD
|
||
TAD I PTRSET /PLUS CURRENT CHARACTER COUNT
|
||
CDF
|
||
SMA
|
||
STA /SHUT DOWN THE READER AFTER THE NEXT CHARACTER
|
||
DCA I RCNTA
|
||
TAD I RCNTA
|
||
TAD C0100
|
||
SMA CLA
|
||
PTRSI2, JMS PTRSET /SET THE READER FLAG IN STR1
|
||
JMP I PTRSIZ
|
||
|
||
L2PTR, JMS PTRSET /WAKE HIM/HER UP - [S]HE'S HUNG
|
||
TAD I PTRDEV /DDB?
|
||
SNA
|
||
EXIT /NO
|
||
DCA AXS2 /YES - SAVE IT, WE'LL NEED THE JOB # FROM IT
|
||
TAD AXS2
|
||
TAD C0004
|
||
DCA WS0
|
||
TAD I WS0 /IS IT EMPTY?
|
||
SZA CLA
|
||
EXIT /NO - SO IT ISN'T OFFICIALLY HUNG YET
|
||
TAD I AXS2 /JOB OWNING PTR
|
||
CDF
|
||
ERROR /REPORT THE HUNG READER TO HIM/HER
|
||
HUNGDV
|
||
EXIT
|
||
|
||
PTRSET, 0
|
||
DATFLD
|
||
TAD PTRDEV /READER'S POSITION IN DEVTBL
|
||
DCA CONDBA
|
||
TAD PTRFL
|
||
JMS I SETFLG /SET JSPTR IN STR1
|
||
JMP I PTRSET
|
||
|
||
PTRCHK, DEVCHK
|
||
PTRIOT, UKT1
|
||
PSTRIN, UKREAD
|
||
PTRTIM, TIMPTR
|
||
RCNTA, RCNT
|
||
URCBI, -6017
|
||
PTRCLR, CLRBUF
|
||
PTRFUL, -240
|
||
|