1329 lines
30 KiB
Plaintext
1329 lines
30 KiB
Plaintext
VERNUM
|
||
UTSS, TAD .-1 /SKIP ON TSS/8
|
||
DCA L2SA /AND RETURN VERSION # IN AC
|
||
UUOEX2, ISZ L2SV0 /POSITIVE FLAG TEST EXIT
|
||
NOP
|
||
|
||
/ENTRY FOR UUOEXT
|
||
/SETS UP WAIT MASK 1 IF THERE ARE ANY WAIT CONDITIONS FOR STR1
|
||
/IF THERE IS NOTHING TO WAIT FOR, WE EXIT BACK TO THE USER
|
||
|
||
|
||
UUOEX1, SNA
|
||
JMP UUOEX3 /NO WAIT CONDITIONS
|
||
CDF
|
||
DCA WS0 /SAVE BITS TO CLEAR
|
||
GETJTW /SET UP WAIT MASK
|
||
JOBWMK
|
||
CLA IAC
|
||
TAD WS0 /WAIT ON THIS FLAG+JSWAIT
|
||
DATFLD
|
||
DCA I JOBSWA /SET WAIT MASK 1
|
||
TAD I JOBSWA
|
||
JMS I CLEAR1 /CLEAR SAME BITS IN STR1
|
||
WAIT
|
||
CLEAR1, CLSTR1
|
||
|
||
UUOEX3, DATFLD
|
||
TAD I JOBDAT
|
||
IAC
|
||
DCA JOBSWA /POINTS TO STR0
|
||
TAD I JOBSWA
|
||
SMA CLA /STILL RUNNABLE?
|
||
WAIT /NO
|
||
ISZ JOBSWA
|
||
CLL STA RAL /AC=7776
|
||
AND I JOBSWA
|
||
IAC /MAKE SURE JSWAIT IS SET
|
||
DCA I JOBSWA
|
||
ISZ JOBSWA
|
||
ISZ JOBSWA /POINT TO WAIT MASK
|
||
IAC
|
||
DCA I JOBSWA /FORCE DUMMY WAIT BIT ONLY
|
||
EXIT
|
||
/SET SWITCH REGISTER, RESTART ADD, ERROR ADD, OR KEYBOARD BREAK
|
||
|
||
UKSBRK= C0002 /DDBBRK
|
||
|
||
UKSB, TAD JOB
|
||
TTYUSE /FIND USER INPUT TTY DDB
|
||
TAD UKSBRK
|
||
DCA JOBSWA /POINTS TO BREAK MASK IN DDB
|
||
TAD L2SA /USER AC
|
||
DATFLD
|
||
SZA
|
||
JMP UKSB1 /[S]HE HAS NEW MASK -- GO PICK IT UP
|
||
TAD I JOBSWA /[S]HE WANTS TO READ OLD MASK
|
||
JMP UKSB1+1 /GIVE IT TO HIM/HER
|
||
USSW, TAD C0002 /SET AC=2
|
||
USEA1, IAC /AC=AC+1
|
||
USRA, TAD C0005 /AC=AC+5
|
||
DCA .+2 /SAVE RELATIVE ADDRESS
|
||
GETJTW /GET POINTER
|
||
0 /POSITION IN LIST
|
||
CLA /WE ONLY WANTED POINTER
|
||
TAD L2SA /GET CONTENTS OF USER AC
|
||
DATFLD
|
||
UKSB1, DCA I JOBSWA /SAVE IN JOB DATA AREA
|
||
DCA L2SA
|
||
UUOEXT /AND AWAY
|
||
|
||
|
||
RINTA, RINT
|
||
CDTIMA, TIMCDR
|
||
INTCDR, RCSD
|
||
JMP I RINTA /CONTINUE IN INTERRUPT SKIP CHAIN
|
||
RCRD /CLEAR CARD DONE FLAG
|
||
TAD I CDTIMA
|
||
SNA CLA /WERE WE EXPECTING AN INTERRUPT?
|
||
DISMIS /NO
|
||
DCA I CDTIMA /NO MORE INTERRUPTS ALLOWED - WE FINISHED THIS CARD
|
||
TAD .+2
|
||
DISMIS /SCHEDULE LEVEL 2
|
||
CDL20
|
||
/ACCOUNT NUMBER
|
||
UACC, TAD L2SA
|
||
JMS JOBCHK /SEE IF IT'S A VALID JOB
|
||
JMP UACC0 /IT WASN'T - RETURN A ZERO
|
||
TAD JOBTBA
|
||
GETJTI /GET THE ACCOUNT NUMBER OF THE JOB
|
||
JOBACC
|
||
UACC0, DCA L2SA /RETURN IT TO HIM/HER
|
||
UUOEXT
|
||
IOR1,
|
||
JOBCHK, 0
|
||
SNA /SPECIFIC JOB?
|
||
TAD JOB /NO - HIS/HER OWN JOB
|
||
DCA WS1
|
||
TAD WS1
|
||
CLL
|
||
TAD JOBS /IS IT REALLY A JOB?
|
||
SNL CLA
|
||
TAD WS1
|
||
TAD JOBTBA
|
||
DCA JOBSWA
|
||
DATFLD
|
||
TAD I JOBSWA /IS THERE REALLY A JOB?
|
||
SNA CLA
|
||
JMP I JOBCHK /NO - RETURN WITHOUT SKIP
|
||
ISZ JOBCHK
|
||
TAD WS1 /JOB NUMBER REQUESTED
|
||
JMP I JOBCHK
|
||
JOBS, -JOBMAX-1
|
||
|
||
DTRKHG, 0
|
||
ERROR /DECTAPE OR RK05 IS HUNG
|
||
HUNGDV /REPORT IT TO THE USER
|
||
CIF DATFLD /BACK TO FIELD 1
|
||
JMP I DTRKHG
|
||
/INCLUSIVE OR
|
||
/CALL TAD ADDRESS OF WORD TO SET
|
||
/ IOR
|
||
/ BITS TO SET
|
||
/ RETURN
|
||
|
||
IOR0, 0
|
||
DCA IOR1 /SAVE ADDRESS TO SET
|
||
RDF /FIELD TO SET IT IN
|
||
TAD .+2 /COMPUTE FIELD SELECT - FOR THAT FIELD
|
||
DCA IOR2 /SAVE IT
|
||
CDF
|
||
TAD I IOR0 /GET BITS TO SET
|
||
IOR2, 0 /SET FIELD AGAIN
|
||
DCA IOR2 /SAVE THEM
|
||
TAD IOR2
|
||
CMA
|
||
AND I IOR1 /CLEAR THE BITS IF ALREADY SET
|
||
TAD IOR2 /NOW SET THEM
|
||
DCA I IOR1 /SAVE NEW VALUE
|
||
ISZ IOR0 /SKIP ARGUMENT IN CALL
|
||
JMP I IOR0 /RETURN
|
||
|
||
*7400
|
||
IFNZRO DC08A <
|
||
JMPDC8= JMP I . /SKIP OVER DC08A VECTORS
|
||
.+3
|
||
DC8REG= JMP . /SKIP OVER DC08A ACTIVE REGISTERS
|
||
IAC
|
||
ISZ ACFLG /SWITCH TO OUTPUT SIDE
|
||
TAD DCCNT
|
||
TAD ACX10
|
||
DCA ACX10 /SKIP OVER THE DC08A ENTRIES IN THE TABLE
|
||
JMP ACINT1 /BACK TO WORK
|
||
DCCNT, DC08A-1 >
|
||
*7410
|
||
|
||
RINT, DCA SRVFLG /CLEAR LEVEL 2 REQUEST FLAG
|
||
DATFLD
|
||
RSF
|
||
JMP ACINT
|
||
RRB /GET CHARACTER FROM THE READER
|
||
DCA I ACX11 /PUT IT IN THE RING BUFFER
|
||
CDF
|
||
ISZ RCNT /ENOUGH??
|
||
JMP RINT1 /NO - SEE IF THERE'S STILL ROOM IN THE RING BUFFER
|
||
RINT0, DCA I RTIM
|
||
DATFLD
|
||
CMA
|
||
JMP ACINT8 /READER IS LINE # 7777
|
||
RINT1, TAD KEYC /IS THERE ENOUGH ROOM LEFT IN THE RING-BUFFER?
|
||
TAD RLIM
|
||
SMA CLA
|
||
JMP RINT2
|
||
RFC /KEEP THE READER GOING
|
||
CLL CMA RAL /SET TIMER FOR 2 MORE SECONDS
|
||
JMP RINT0
|
||
RINT2, TAD RL2A
|
||
DCA I L2Q /SCHEDULE THE READER TO BE RESTARTED AFTER THE BUFFER HAS BEEN EMPTIED
|
||
ISZ SRVFLG /REMEMBER WE WANT LEVEL 2
|
||
JMP RINT0
|
||
|
||
RLIM, -NULINE-1
|
||
RL2A, L2PTR1
|
||
RTIM, TIMPTR
|
||
RCNT, 0
|
||
|
||
OUTIOT= ISZ ACFLG
|
||
ENDIOT= JMP ACINT6
|
||
ACINT, CLL STA RAL /AC=-2
|
||
DCA ACFLG /START BY CHECKING FOR INPUT
|
||
TAD ACTBLA /ADDRESS OF THE SKIP IOT'S
|
||
DCA ACX10
|
||
STL RTL
|
||
ACINT0, TAD HIPRO
|
||
DCA HICNT /SHORT LOOP COUNT TO PROTECT HI-PRIORITY DEVICES
|
||
DATFLD
|
||
ACINT1, ISZ HICNT
|
||
JMP ACINT2-2
|
||
JMS I HIPRIA /GO CHECK RK, DT, & CDR
|
||
SNA /ANYTHING REQUESTED?
|
||
JMP ACINT0 /NO
|
||
DCA I L2Q /QUEUE THEIR REQUEST FOR THEM
|
||
ISZ SRVFLG /REMEMBER IT
|
||
JMP ACINT0 /RE-INITIALIZE THE COUNT
|
||
TAD I ACX10
|
||
DCA ACINT2
|
||
ACINT2, .-. /DEVICE SKIP
|
||
JMP ACINT1 /NOT THIS ONE
|
||
TAD ACINT2
|
||
TAD C0005 /GENERATE READ OR SEND IOT
|
||
ISZ ACFLG
|
||
JMP ACINT7 /MUST BE A KEYBOARD
|
||
DCA ACINT3 /SAVE THE TLS, PLS, OR LPC
|
||
TAD ACX10
|
||
TAD ACOUT /DETERMINE THE LINE NUMBER
|
||
DCA ACFLG /THIS LINE'S OUTPUT REGISTER
|
||
TAD I ACFLG
|
||
RAR
|
||
SNL
|
||
JMP ACINT5 /NOTHING WAITING TO GO
|
||
ACINT3, .-.
|
||
CLA STL IAC
|
||
RTR
|
||
DCA I ACFLG /HARDWARE BUSY AND REQUEST FLAGS SET
|
||
DCA TTOFLG /SCHEDULE LEVEL 2
|
||
ACINT4, TAD L2Q /POSITION OF FILL POINTER
|
||
TAD L2QBOT /MINUS L2QTB-1
|
||
CIA
|
||
TAD SRVFLG /DON'T COUNT THE ONES WE JUST PUT IN
|
||
SNA CLA /SHOULD WE SCHEDULE LEVEL 2?
|
||
TAD EXITA /YES
|
||
DISMIS
|
||
ACINT5, CLA IAC
|
||
TAD ACINT2
|
||
DCA .+1
|
||
HICNT, .-. /TCF, PCF, OR LCF
|
||
STL CLA RAR /AC=4000
|
||
AND I ACFLG
|
||
DCA I ACFLG /NO MORE INTERRUPTS EXPECTED FROM THIS LINE
|
||
ACEXIT, TAD SRVFLG /ANY REQUESTS?
|
||
SZA CLA
|
||
JMP ACINT4 /YES - MAKE SURE THEY'RE SCHEDULED
|
||
DISMIS /NOTHING SPECIAL
|
||
|
||
ACINT6, LSRP /LP08/LE8 ERROR?
|
||
JMP ACEXIT /NO, MUST BE AN UNDEFINED INTERRUPT
|
||
LCP /CLEAR INTERRUPT ENABLE
|
||
JMP ACEXIT
|
||
|
||
ACINT7, DCA ACFLG /SAVE THE KRB IOT
|
||
ACFLG, .-.
|
||
SNA
|
||
JMP ACEXIT /THROW AWAY NULL CHARACTERS
|
||
AND C0177
|
||
TAD C0200 /FORCE ON THE "PARITY" BIT
|
||
DCA I ACX11 /STASH IT IN THE RING BUFFER
|
||
TAD ACTBLA
|
||
CMA
|
||
TAD ACX10 /LINE NUMBER CAUSING INTERRUPT
|
||
ACINT8, JMS ACINT9 /STASH LINE NUMBER & UPDATE POINTERS ETC.
|
||
JMP ACINT4 /SCHEDULE LEVEL 2 IF WE WERE IN USER MODE
|
||
ACINT9, 0
|
||
DCA I ACX11 /STASH AWAY THE LINE NUMBER
|
||
ISZ KEYC /COUNT THE ENTRY
|
||
ISZ ACCNT /END OF RING BUFFER
|
||
JMP I ACINT9 /NO
|
||
TAD ACRING
|
||
DCA ACX11 /YES - RESET POINTER
|
||
TAD ACSIZE
|
||
DCA ACCNT /AND THE COUNT
|
||
JMP I ACINT9
|
||
|
||
SRVFLG, 0
|
||
TTOFLG, 1 /NON-ZERO WHEN SERVICE IS NOT REQUIRED
|
||
ACRING, RINGIN-1
|
||
ACCNT, -INPUTS
|
||
ACSIZE, -INPUTS
|
||
KEYC, 0
|
||
HIPRO,
|
||
IFNZRO CPU-2 < -4 >
|
||
IFZERO CPU-2 < -6 >
|
||
HIPRIA, DTCHK
|
||
ACTBLA, SKPTBL-1
|
||
ACOUT, OUTREG-SKPTBL-NULINE-2
|
||
L2QBOT, -L2QTB+1
|
||
*7600
|
||
/SYSTEM DISK HANDLERS FOR TSS/8
|
||
/ SWPIO - HANDLES ALL SWAPS (ONLY SWAPS)
|
||
/ DSGO0 - HANDLES ALL OTHER TRANSFERS INCLUDING OVERLAYS
|
||
|
||
SWPIO, 0 /
|
||
CLA CLL CMA RTL /=3 IN AC
|
||
DCA DSERRI /# OF TRIES
|
||
JMS SWPIT /START THE SWAP
|
||
JMP I SWPIO /RETURN
|
||
|
||
SWPIT, 0
|
||
TAD SWPA /RETURN ADDRESS FOR INTERRUPT CHAIN
|
||
DCA I DSWATA /SAVE IT
|
||
IFZERO RF08 <
|
||
TAD SQREQ /FIELD TO BE SWAPPED OUT
|
||
TAD C0500 /INTERRUPT ON ERROR AND ON COMPLETION
|
||
DIML >
|
||
DCA DSWC /WORD COUNT
|
||
CMA
|
||
DCA DSMA /CORE ADDRESS
|
||
TAD FINISH /IN OR OUT?
|
||
SMA CLA
|
||
JMP SWPIN /IN
|
||
TAD OUTTRC /GET THE TRACK # TO BE SWAPPED OUT
|
||
IFZERO RF08-40 <
|
||
TAD SQREQ /FIELD TO BE SWAPPED OUT
|
||
DEAL
|
||
CLA >
|
||
IFZERO RF08 <
|
||
DXAL >
|
||
DMAW
|
||
JMP I SWPIT
|
||
SWPIN, TAD INTRC /GET THE TRACK TO READ IN
|
||
IFZERO RF08-40 <
|
||
TAD SQREQ /FIELD TO BE SWAPPED OUT
|
||
DEAL
|
||
CLA >
|
||
IFZERO RF08 <
|
||
DXAL >
|
||
DMAR
|
||
JMP I SWPIT
|
||
|
||
|
||
SWPA, SWPTR /RETURN ADDRESS AFTER SWAP
|
||
|
||
SWPTR, JMP SWPERR /OOPS
|
||
TAD FINISH /DID WE JUST SWAP IN OR OUT?
|
||
SMA
|
||
JMP SWPOK /IN; SO WE'RE FINISHED
|
||
CIA
|
||
DCA FINISH /SAVE IT
|
||
JMS SWPIO /START SWAP IN
|
||
DISMIS /GO BACK TO WHAT WE WERE DOING
|
||
|
||
SWPERR, JMS DSERR /GO TO COMMON ERROR ROUTINE
|
||
JMP SWPBAD /SORRY - IT'S OFFICIALLY BAD
|
||
JMS SWPIT /TRY AGAIN
|
||
JMP DSERRX /GO TO COMMON RETRY EXIT
|
||
|
||
SWPOK, CLA IAC /SWAP OK; SKIP ON RETURN
|
||
SWPBAD, TAD SWPREA /DISPATCH TO LEVEL 2 SWAP COMPLETION
|
||
JMP OK /CLEAR DISK FLAG AND EXIT
|
||
|
||
DSERR, 0
|
||
IFZERO RF08 <
|
||
STA /SET WC TO CAUSE IMMEDIATE OVERFLOW
|
||
DCA DSWC /ONLY SAFE WAY TO STOP THIS DISK
|
||
DSAC /SEE IF THE DISK IS STILL BUSY
|
||
SKP /THINGS ARE QUIET OUT THERE
|
||
DISMIS /WAIT A FEW MICRO-SECONDS
|
||
DORS /GET THE STATUS BITS
|
||
DCMA /CLEAR EVERYTHING
|
||
DCXA /INCLUDING THE TRACK ADDRESS
|
||
AND C0004 /DO WE HAVE DRL?
|
||
SNA >
|
||
IFZERO RF08-40 <DCMA > /STOP DF32
|
||
ISZ DSERRI /NO; SO COUNT IT AS AN ERROR
|
||
ISZ DSERR /OK TO RETRY ON RETURN
|
||
IFZERO RF08 <
|
||
SZA CLA
|
||
TAD SLEEPA > /BETTER KNOCK OFF THE EAE USER
|
||
DCA DSGO0 /SAVE ADDRESS; IF ANY
|
||
JMP I DSERR /BACK TO CALLER
|
||
/START DISC TRANSFER
|
||
/CALL TAD ADDRESS OF PARAMETERS
|
||
/ DSGO
|
||
/ RETURN
|
||
|
||
DSGO0, 0
|
||
DCA DSPARM
|
||
CLA CLL CMA RTL
|
||
DCA DSERRI
|
||
JMS DSTRYA
|
||
JMP I DSGO0
|
||
|
||
DSTRYA, 0
|
||
TAD DSRETA
|
||
DCA I DSWATA
|
||
CLA CMA /ADDRESS OF PARA-1 FOR INDEX REGISTER
|
||
TAD DSPARM
|
||
DCA DSPAR
|
||
DATFLD
|
||
TAD I DSPAR /FUNCTION
|
||
DCA DSRORW
|
||
TAD I DSPAR /DISC EXTENSION
|
||
IFZERO RF08-40 <
|
||
CLL RTL
|
||
CLL RAL
|
||
TAD I DSPAR /MEMORY EXTENSION
|
||
CLL RAL
|
||
DEAL
|
||
CLA>
|
||
IFZERO RF08 <
|
||
CLL RTR
|
||
DXAL
|
||
TAD I DSPAR
|
||
CLL RAL
|
||
AND C0070
|
||
TAD C0500
|
||
DIML /LOAD INTERRUPT ENNABLE AND MEMORY EXTENSION
|
||
>
|
||
TAD I DSPAR
|
||
DCA DSWC
|
||
TAD I DSPAR
|
||
DCA DSMA
|
||
TAD I DSPAR
|
||
CDF
|
||
DSRORW, 0
|
||
JMP I DSTRYA
|
||
DSERR1, JMS DSERR /DO COMMON ERROR ROUTINE
|
||
JMP DSGBAD /GIVE UP
|
||
JMS DSTRYA /TRY AGAIN
|
||
DSERRX, TAD DSGO0 /POSSIBLY AN EAE JOB TO GO TO SLEEP
|
||
DISMIS
|
||
|
||
DSRET, JMP DSERR1 /ERROR
|
||
IAC
|
||
DSGBAD, DATFLD
|
||
TAD I DSPAR
|
||
OK, DCMA
|
||
DISMIS /BACK TO MONITOR
|
||
|
||
DSPARM, 0
|
||
DSRETA, DSRET
|
||
DSWATA, DSWAIT
|
||
C0500, 500
|
||
|
||
*7750
|
||
DSWC, DSMA /FOR LOADING INTO FIELD 0 ON INITIALIZATION
|
||
DSMA, DSMA /(SINCE THE 4K TRANSFER OVERWRITES THE DATA BREAK LOCATIONS)
|
||
SLEEPA, SLEEP
|
||
DSERRI, 0
|
||
0 /FOR DECTAPE SERVICE
|
||
0 /FOR DECTAPE SERVICE
|
||
FIELD 4 /FORCE TS8II INTO TRACK 4 AT BUILD TIME
|
||
/TS8II 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.
|
||
*0
|
||
ZBLOCK 10 /IF ANY OF THESE BECOMES NON-ZERO, FIND OUT WHY!
|
||
|
||
*10
|
||
K0030, 30
|
||
K0614, 614
|
||
K0500, 500
|
||
IX3, 0
|
||
|
||
IX4, JOBTBL /WAIT 2 UNQUEUER POINTER
|
||
A15, 0 /DECTAPE - FOR EXTRACTING USER INFO. FROM DDB
|
||
A16, 0 /BLTF1 - USER FIELD POINTER
|
||
A17, 0 /BLTF1 - DATFLD POINTER
|
||
|
||
DTJOB, 0
|
||
DTBUF, 0
|
||
DTST, 0
|
||
DTBLKP, 0
|
||
DTBLK, 0
|
||
DTCOM, 0
|
||
DTUCA, 0
|
||
DTTIME, 0
|
||
DTREMB, 0
|
||
DTGOA, DTGO
|
||
DTERRA, DTERR
|
||
DTBUFA, ENDBUF-1
|
||
DTCAP, 7755
|
||
M2702, -2702
|
||
M201, -201
|
||
K0214, 214
|
||
K0070, 70
|
||
K0400, 400
|
||
K7400, 7400
|
||
K0002, 2
|
||
K0037, 37
|
||
K0005, 5
|
||
K0020, 20
|
||
K7770, 7770
|
||
K0377, 377
|
||
K0006, 6
|
||
K1000, 1000
|
||
K0600, 600
|
||
RKJOB, 0
|
||
RKCORE, 0
|
||
RKCOM, 0
|
||
RKSECT, 0
|
||
RKCNT, 0
|
||
RKBLKS, 0
|
||
RKTIME, 0
|
||
SLEEPB, SLEEP
|
||
RKERRA, RKERR
|
||
DTRKHA, DTRKHG
|
||
WAIT2, WAITS2
|
||
AWAKEN, WAKEUP
|
||
DTCHKA, DEVCHK
|
||
QUEUE1, QUEUE0
|
||
BLTF1A, BLTF1
|
||
JOBTAB, JOBTBL
|
||
|
||
INTS1, 0 /INTERRUPT TEMPORARY STORAGE
|
||
INTS2, 0
|
||
TEMP0, 0 /WORKING STORAGE
|
||
TEMP1, 0
|
||
TEMP2, 0
|
||
TEMP3, 0
|
||
TEMP4, 0
|
||
K0007, 7
|
||
K0010, 10
|
||
K0200, 200
|
||
K0204, 204
|
||
K0040, 40
|
||
K0004, 4
|
||
K6201, 6201
|
||
K7000, 7000
|
||
K7700, 7700
|
||
K7774, 7774
|
||
K0003, 3
|
||
L2SAP, L2SV0+2 /POINTS TO L2SA IN FIELD 0
|
||
UDF1, 0 /SELECT USER FIELD
|
||
0
|
||
JMP I .-2
|
||
|
||
JOBCNT, -JOBMAX
|
||
UDFP, UUDF
|
||
DTRKJA, DTRKJB
|
||
|
||
F1SCH, 0
|
||
EXITF1= JMP .
|
||
K6203, CIF CDF
|
||
TAD F1SCH
|
||
SNA CLA /ANYTHING JUST OUT OF WAIT?
|
||
JMP I .+4 /NO - NORMAL LEVEL 2 EXIT
|
||
DCA F1SCH /YES - CLEAR FLAG
|
||
JMP I .+1 /IF NULL JOB IS RUNNING RE-SCHEDULE
|
||
SCHED0
|
||
L2EXIT
|
||
|
||
INTRTN= JMP .
|
||
CIF CDF
|
||
JMP I .+1
|
||
F1RTN /DISMISS INTERRUPT FROM HI-PRIORITY DEVICE
|
||
/JOB TABLE ADDRESS TO TEMP0
|
||
/CALL TAD JOB #
|
||
/ JMS GETTBA
|
||
/ TABLE ENTRY
|
||
/ RETURN WITH ADDRESS IN TEMP0
|
||
|
||
GETTBA, 0
|
||
DATFLD
|
||
DCA TEMP0 /SAVE JOB #
|
||
TAD I GETTBA /PICK UP ARGUMENT
|
||
DCA .+5
|
||
TAD TEMP0 /JOB #
|
||
TAD JOBTAB /START OF JOBTBL
|
||
CIF
|
||
JMS I GETTB1 /GETJTA
|
||
0
|
||
DCA TEMP0 /ADDRESS TO TEMP0
|
||
ISZ GETTBA
|
||
JMP I GETTBA
|
||
GETTB1, GETJTB
|
||
|
||
|
||
*160
|
||
JOB, . /POINTER TO CURRENT JOB NUMBER
|
||
CJOBDA, 0 /POINTER TO JOB STATUS BLOCK, CURRENT JOB
|
||
CORTBA, CORTBL-1
|
||
DEVTBA, DEVTBL
|
||
F1OFFJ, 0 /MASK FOR LOGIN; MODIFIED BY THE "ON & OFF" COMMANDS (ON=0; OFF=7774)
|
||
WAITF1= JMP .
|
||
CIF CDF
|
||
JMP I WAIT1
|
||
WAIT1, WSCHED
|
||
|
||
*170
|
||
NULINE /SYSTEM PARAMETERS CONVENIENT FOR SYSTAT
|
||
JOBMAX
|
||
DEVTBL
|
||
UPTIM2, 0 /HIGH ORDER UPTIME IN SECONDS
|
||
UPTIM1, 0 /LOW ORDER UPTIME IN SECONDS
|
||
|
||
/DDB POINTERS FOR USE BY SI
|
||
F1TCNT, 0 /DDB CHARACTER COUNT
|
||
F1ECNT, 0 /DDB EMPTY COUNT
|
||
F1BUF, 0 /DDB EMPTY BLOCK
|
||
*OUTREG
|
||
ZBLOCK SKPTBL-OUTREG
|
||
|
||
KSKIP= KSF-30
|
||
TSKIP= TSF-40
|
||
*SKPTBL
|
||
|
||
KSF /K00 /SKIP IOT FOR CONSOLE KEYBOARD
|
||
IFZERO DC08A <
|
||
KSKIP+400 /K01 /KEYBOARD SKIP IOTS FOR PT08 AND KL8E
|
||
KSKIP+420 /K02
|
||
KSKIP+440 /K03
|
||
KSKIP+460 > /K04
|
||
KSKIP+340 /K05; K01 IF DC08A WITH PT08'S
|
||
KSKIP+110 /K06; K02 IF DC08A WITH PT08'S
|
||
IFNZRO CPU-1 <
|
||
KSKIP+300 > /K07; K03 IF DC08A WITH PT08'S
|
||
KSKIP+320 /K10; K04 IF DC08A WITH PT08'S
|
||
KSKIP+500 /K11; K05 IF DC08A WITH PT08'S
|
||
KSKIP+520 /K12; K06 IF DC08A WITH PT08'S
|
||
KSKIP+540 /K13; K07 IF DC08A WITH PT08'S
|
||
KSKIP+560 /K14; K10 IF DC08A WITH PT08'S
|
||
KSKIP+700 /K15
|
||
KSKIP+360 /K16
|
||
KSKIP+720 /K17
|
||
KSKIP+060 /K20
|
||
KSKIP+140 /K21
|
||
KSKIP+160 /K22
|
||
KSKIP+050 /K23
|
||
|
||
|
||
IFNZRO DC08A <
|
||
*SKPTBL+PT08+KL8+1
|
||
DC8REG
|
||
ZBLOCK DC08A > /DC08A ACTIVE OUTPUT REGISTERS
|
||
|
||
|
||
IFZERO DC08A <*SKPTBL+NULINE+1
|
||
OUTIOT > /SWITCH TO OUTPUT SIDE
|
||
TSF /K00 /SKIP IOT FOR CONSOLE TELEPRINTER
|
||
IFZERO DC08A <
|
||
TSKIP+410 /K01 /TELEPRINTER SKIP IOTS FOR PT08 AND KL8E
|
||
TSKIP+430 /K02
|
||
TSKIP+450 /K03
|
||
TSKIP+470 > /K04
|
||
TSKIP+350 /K05; K01 IF DC08A WITH PT08'S
|
||
TSKIP+120 /K06; K02 IF DC08A WITH PT08'S
|
||
IFNZRO CPU-1 <
|
||
TSKIP+310 > /K07; K03 IF DC08A WITH PT08'S
|
||
TSKIP+330 /K10; K04 IF DC08A WITH PT08'S
|
||
TSKIP+510 /K11; K05 IF DC08A WITH PT08'S
|
||
TSKIP+530 /K12; K06 IF DC08A WITH PT08'S
|
||
TSKIP+550 /K13; K07 IF DC08A WITH PT08'S
|
||
TSKIP+570 /K14; K10 IF DC08A WITH PT08'S
|
||
TSKIP+710 /K15
|
||
TSKIP+370 /K16
|
||
TSKIP+730 /K17
|
||
TSKIP+070 /K20
|
||
TSKIP+150 /K21
|
||
TSKIP+170 /K22
|
||
TSKIP+650 /K23
|
||
IFNZRO DC08A <
|
||
*SKPTBL+NULINE+PT08+KL8+3
|
||
JMPDC8 /DC08A OUTPUT VECTOR
|
||
JMPDC8 /DC08A OUTPUT VECTOR
|
||
JMPDC8 /DC08A OUTPUT VECTOR
|
||
JMPDC8 /DC08A OUTPUT VECTOR
|
||
JMPDC8 /DC08A OUTPUT VECTOR
|
||
JMPDC8 /DC08A OUTPUT VECTOR
|
||
JMPDC8 /DC08A OUTPUT VECTOR
|
||
JMPDC8 /DC08A OUTPUT VECTOR
|
||
JMPDC8 /DC08A OUTPUT VECTOR
|
||
JMPDC8 /DC08A OUTPUT VECTOR
|
||
JMPDC8 /DC08A OUTPUT VECTOR
|
||
JMPDC8 /DC08A OUTPUT VECTOR
|
||
JMPDC8 /DC08A OUTPUT VECTOR
|
||
JMPDC8 /DC08A OUTPUT VECTOR
|
||
JMPDC8 /DC08A OUTPUT VECTOR
|
||
JMPDC8 /DC08A OUTPUT VECTOR
|
||
JMPDC8 /DC08A OUTPUT VECTOR
|
||
JMPDC8 /DC08A OUTPUT VECTOR
|
||
JMPDC8 /DC08A OUTPUT VECTOR
|
||
JMPDC8 > /DC08A OUTPUT VECTOR
|
||
*SKPTP
|
||
IFNZRO PUNCH <PSF> /PUNCH
|
||
IFZERO PUNCH <NOP>
|
||
IFNZRO LPT <LSF> /LINE PRINTER
|
||
IFZERO LPT <NOP>
|
||
ENDIOT /TERMINATES LIST
|
||
*RINGIN
|
||
/ADDITIONAL FREE CORE GENERATION TABLE
|
||
/REFERENCED BY INIT AT START TIME
|
||
/ THE FOLLOWING AREAS WILL BECOME PART OF FREE CORE:
|
||
|
||
IFZERO TC01 RK05 CDR <
|
||
ENNDBUF;FCE4 >
|
||
|
||
IFNZRO TC01 RK05 CDR <
|
||
IFZERO TC01 <
|
||
ENDBUF;FCE1 >
|
||
IFZERO RK05 <
|
||
FCB2;FCE2
|
||
FCB4;FCE4 >
|
||
IFZERO CDR <
|
||
FCB3;FCE3 > >
|
||
IFNZRO DC08A <
|
||
IFNZRO D689 <
|
||
FCB5;FCE5 >
|
||
IFZERO D689 <
|
||
FCB5;DATA1 > >
|
||
0 /TO TERMINATE THE LIST
|
||
NOPUNCH
|
||
ZBLOCK ENDBUF-. /KEYBOARD INPUT RING BUFFER
|
||
ENPUNCH
|
||
*ENDBUF
|
||
NOPUNCH
|
||
ZBLOCK 201 /DECTAPE BUFFER
|
||
ENPUNCH
|
||
*.
|
||
|
||
/DECTAPE LEVEL 1 ENTRY
|
||
|
||
DTL11, TAD DTREMB /PREVIOUS ERRORS FROM THIS TRANSFER
|
||
DTRB /"OR'ED" WITH ANY NEW ERRORS
|
||
DCA DTREMB
|
||
DTRB /WERE THERE ANY ERRORS?
|
||
SMA
|
||
JMP I DTXOR /A-OK!
|
||
AND K0500 /WHAT WAS IT?
|
||
SNA /SELECT ERROR OR TIMING ERROR
|
||
JMP DTSR0 /NO - MUST BE MARK, END, OR PARITY
|
||
AND K0400
|
||
SZA CLA /TIMING ERROR?
|
||
JMP DTSR1 /NO - SELECT ERROR - DON'T RETRY
|
||
CLL CMA RAL /AC=-2
|
||
TAD I DTERRA /TIMING ERROR WAS OUR FAULT - INTERRUPT OFF TOO LONG
|
||
DCA I DTERRA /DON'T CHARGE HIM/HER FOR THE TURN-AROUNDS
|
||
DTSR0, ISZ I DTERRA /COUNT A TURN-AROUND
|
||
JMP DTSR2 /OK - CONTINUE SEARCHING
|
||
DTSR1, TAD DTREMB /ACCUMULATED ERROR STATUS
|
||
RAL
|
||
STL RAR /MAKE SURE THE ERROR BIT IS SET
|
||
JMP DTSTOP /SHUT HIM/HER DOWN
|
||
DTSR2, CDF
|
||
TAD DTBLKP
|
||
DCA I DTCAP /RESTORE CA TO POINT INTO WORD 2 OF HIS/HER DDB
|
||
DTRA /CURRENT STATUS
|
||
AND K0377
|
||
DTXA /CLEAR GO, FUNCTION, AND INTERRUPT ENABLE
|
||
TAD K0614 /SWITCH DIRECTIONS, GO, SEARCH AND ENABLE
|
||
DTSRCH, JMS DTXOR /CONTINUE SEARCHING
|
||
DTSR3, TAD DTCOM
|
||
RTL
|
||
RTL
|
||
STA CML RAL /AC=-1 IF FORWARDS R/W; AC=-2 IF REVERSE R/W
|
||
DCA DTDIR
|
||
TAD I DTBLKP
|
||
TAD M2702
|
||
SNL CLA /ARE WE AT A REASONABLE BLOCK NUMBER?
|
||
JMP DTSR0 /NO -- TURN AROUND
|
||
TAD DTBLK
|
||
TAD M2702
|
||
SNL CLA /DOES [S]HE WANT A REASONABLE BLOCK?
|
||
JMP DTSR1 /NO -- QUIT LOOKING FOR IT
|
||
DTRA /WHICH WAY ARE WE GOING?
|
||
RTL
|
||
RTL
|
||
CLA /PRESENT DIRECTION IS IN THE LINK
|
||
TAD DTBLK /BLOCK WANTED
|
||
CIA
|
||
TAD I DTBLKP /BLOCK FOUND
|
||
SNA /ARE WE THERE?
|
||
JMP DTSR5 /YES - SEE IF WE ARE GOING IN THE RIGHT DIRECTION
|
||
ISZ DTDIR /NO
|
||
CIA /REVERSE R/W - NEGATE AC
|
||
SMA
|
||
JMP DTSR4 /SKIP SOME CODE - WE'RE ON THE WRONG SIDE OF THE BLOCK
|
||
SZL /L=1 MEANS WE'RE GOING THE WRONG WAY
|
||
TAD K0003 /MAKE ROOM FOR TURN-AROUND
|
||
CMA
|
||
AND K7770
|
||
SNA /ARE WE CLOSE?
|
||
JMS DTSR7 /YES - GO CHECK BUFFER STATUS
|
||
DTSR4, AND K7700 /ARE WE TOO FAR AWAY?
|
||
SZA SNL SMA
|
||
JMP DTSR6 /PUT HIM/HER ON THE TIMER
|
||
SNL CLA /ARE WE GOING IN THE RIGHT DIRECTION?
|
||
JMP DTSRCH /CONTINUE IN THE SAME DIRECTION
|
||
JMP DTSR0 /GO TURN AROUND
|
||
|
||
DTSR5, JMS DTSR7 /CHECK ON BUFFER STATUS
|
||
ISZ DTDIR
|
||
CML /CORRECT LINK FOR REVERSE R/W
|
||
SNL /ARE WE GOING IN THE RIGHT DIRECTION?
|
||
JMP DTSRCH /NO - CAUSE OVER-SHOOT FOR TURN-AROUND
|
||
TAD M201
|
||
CDF
|
||
DCA I DTWCP /SET UP DECTAPE WORD COUNT
|
||
TAD DTBUFA
|
||
DCA I DTCAP /SET UP DECTAPE CURRENT ADDRESS
|
||
TAD DTCOM
|
||
AND K0040 /READ OR WRITE?
|
||
CLL RAR
|
||
TAD K0030
|
||
JMS DTXOR /CHANGE FROM SEARCH TO READ OR WRITE
|
||
DTSTOP, ISZ DTBUF /ASSIGN THE BUFFER - IF [S]HE DOESN'T ALREADY HAVE IT
|
||
AND K7701
|
||
DCA I DTERRA /SAVE STATUS B FOR HIM/HER
|
||
DTRA
|
||
AND K0400
|
||
SZA CLA /WHICH WAY ARE WE GOING?
|
||
TAD K7774
|
||
TAD K0002
|
||
TAD I DTBLKP /REMEMBER WHERE WE WILL FINALLY STOP
|
||
DCA I DTBLKP
|
||
DTRA
|
||
AND K0204 /CLEAR GO & INTERRUPT ENABLE
|
||
JMP DTSRCH /TO STOP THE TAPE
|
||
DTWCP, 7754
|
||
K7701, 7701
|
||
K0014, 14
|
||
|
||
DTSR6, RTR /DIVIDE BY 100
|
||
RTR
|
||
RTR
|
||
CIA
|
||
DCA DTBUF /-SECONDS TO WIND ON TIMER
|
||
TAD K0003
|
||
TAD I DTST
|
||
DCA DTDIR /POINTS TO USER WORD 1
|
||
DTRA
|
||
AND K0400
|
||
SZA CLA /WHICH WAY SHOULD WE SET THE BRAKES LATER?
|
||
ISZ I DTDIR /SET BIT 11 TO SHOW REVERSE
|
||
TAD K0014
|
||
JMP DTSRCH /KEEP HIM/HER MOVING WITH INT. DISABLED
|
||
|
||
DTSR7, 0
|
||
TAD DTCOM
|
||
AND K0020 /IS THIS A READ?
|
||
TAD DTBUF /OR - IS THE BUFFER LOADED FOR A WRITE?
|
||
SZA CLA
|
||
JMP I DTSR7 /PROCEED
|
||
JMP DTSTOP+2 /STOP AND WAIT FOR THE BUFFER TO BE LOADED
|
||
|
||
DTDIR,
|
||
DTXOR, DTSTOP /WHERE TO RETURN ON SUCCESSFUL INTERRUPT
|
||
DTXA /ZAP IN THE NEW FUNCTION
|
||
DTRA
|
||
RTR
|
||
RAR
|
||
SZL CLA /DID WE STOP?
|
||
CML CMA RTL
|
||
DCA DTTIME /LOAD THE CONTROLLER TIMER
|
||
SNL
|
||
TAD DTL2 /WE'RE DONE - SCHEDULE LEVEL 2
|
||
INTRTN
|
||
DTL2, DTL20
|
||
/DECTAPE LEVEL 2 COMPLETION
|
||
DTL21, TAD DTBUF /WHAT KIND OF COMPLETION?
|
||
SNA
|
||
JMP DTEND4 /END OF A SEARCH - TAPE NOW IN POSITION FOR THE WRITE
|
||
SPA CLA
|
||
JMP DTEND6 /THIS DRIVE HAS BEEN PUT ON TIMER
|
||
TAD DTCOM
|
||
AND K0020
|
||
SNA /WAS IT A READ OR WRITE?
|
||
JMP DTEND3 /WRITE - [S]HE'S ALL DONE
|
||
JMS DTDATA /READ - TRANSFER HIS/HER DATA BACK TO HIM/HER
|
||
EXITF1 /WAIT FOR DISK TO FINISH
|
||
DTEND3, TAD DTJOB
|
||
JMS I AWAKEN /TAKE HIM/HER OUT OF WAIT STATUS
|
||
DTERR, 0
|
||
DTEND4, DCA DTJOB /CONTROLLER IS FREE
|
||
DTEND5, JMS I DTGOA /TRY TO START A DECTAPE TRANSFER
|
||
EXITF1
|
||
|
||
DTEND6, TAD DTBUF
|
||
DCA I A15 /SAVE -SECONDS TO WIND TAPE
|
||
ISZ I DTST /CHANGE TO DECTAPE TIMER WAIT
|
||
JMP DTEND4 /FIND SOMETHING ELSE TO DO
|
||
|
||
/MOVE 201 WORDS TO/FROM USER, FROM/TO DATFLD
|
||
/USER MAY BE IN CORE OR ON HIS/HER SWAP TRACK
|
||
DTDATA, 0
|
||
DCA TEMP1 /SAVE READ/WRITE INDICATOR: 0=WRITE, 20=READ
|
||
CIF
|
||
TAD DTJOB
|
||
JMS I COREA /NOW FIND OUT WHERE [S]HE IS
|
||
SWAP LOCK FIP SI CJOB
|
||
JMP DTDA1 /[S]HE'S IN HIS/HER SWAP TRACK
|
||
AND K0070 /SAVE HIS/HER FIELD
|
||
TAD K6201
|
||
DCA UDF1+1 /UDF1 IS FIXED FOR BLTF1
|
||
TAD DTBUFA
|
||
DCA A17 /POINTS TO DECTAPE BUFFER IN DATFLD
|
||
TAD DTUCA
|
||
DCA A16 /USER BUFFER POINTER
|
||
TAD TEMP1
|
||
CLL CMA RTR
|
||
RTR
|
||
RAR
|
||
JMS I BLTF1A /L=0 FOR READ, L=1 FOR WRITE; AC=-201
|
||
ISZ DTDATA /SKIP - DATA HAS ALREADY BEEN MOVED
|
||
JMP I DTDATA
|
||
DTDA1, IAC
|
||
TAD DTUCA
|
||
CLL IAC
|
||
TAD K0200
|
||
SNL /DO WE HAVE A WRAP-AROUNND SITUATION?
|
||
CLA /NO - WE CAN DO THE WHOLE THING AT ONCE
|
||
TAD M201
|
||
DCA DTDWC /WC FOR DISK TRANSFER
|
||
TAD DTBUFA
|
||
DCA DTDCA /CA FOR DISK TRANSFER
|
||
TAD DTJOB
|
||
TAD K0004
|
||
CLL RTL
|
||
DCA DTDHI /TRACK ADDRESS FOR DISK TRANSFER
|
||
TAD TEMP1
|
||
SZA CLA
|
||
STL RTL
|
||
TAD DTDMAR
|
||
DCA DTDIOT /DMAR OR DMAW FOR DISK TRANSFER
|
||
IAC
|
||
TAD DTUCA
|
||
JMS DTDGO /START THE DISK
|
||
JMP I DTDATA /EXIT - NO SKIP - MUST WAIT FOR DISK
|
||
|
||
/DISK PARAMETER BLOCK FOR DECTAPE HANDLER
|
||
DTDIOT, 0
|
||
DTDHI, 0
|
||
7
|
||
DTDWC, 0
|
||
DTDCA, 0
|
||
DTDLO, 0
|
||
DTDSK
|
||
DTDPAR, DTDIOT
|
||
|
||
COREA, CORSRC
|
||
DTDMAR, DMAR
|
||
DTDISK, DTDSF0
|
||
|
||
DTDGO, 0
|
||
DCA DTDLO /DISK ADDRESS TO START AT
|
||
TAD DTDPAR
|
||
CIF
|
||
JMS I DTDISK /NOW GO TO TS8 TO START OUR REQUEST
|
||
JMP I DTDGO /RETURN HERE AFTER STARTING THE DISK
|
||
JMP DTDCMP /RETURN HERE AFTER A GOOD DISK TRANSFER
|
||
SKP /RETURN HERE AFTER A BAD DISK TRANSFER
|
||
JMP DTEND3 /RETURN HERE AFTER REPORTING THE DISK ERROR
|
||
TAD DTJOB /JOB IN TROUBLE
|
||
CIF CDF
|
||
JMP I .+1 /GO REPORT THE ERROR - MAKE IT SWPRER
|
||
DTDEF0
|
||
|
||
DTDCMP, TAD DTDWC
|
||
CIA
|
||
TAD M201
|
||
SNA /DO WE NEED A SECOND PASS?
|
||
JMP DTDCM0 /NO - IT'S DONE
|
||
DCA DTDWC
|
||
TAD DTDLO /YES - HAVE WE ALREADY DONE IT?
|
||
SNA
|
||
JMP DTDCM0 /ALL FINISHED!
|
||
CIA
|
||
TAD DTDCA /UPDATE THE DISK'S C.A.
|
||
DCA DTDCA
|
||
JMS DTDGO /START THE DISK AGAIN
|
||
EXITF1
|
||
|
||
DTDCM0, TAD DTBUF /WAS IT A READ OR A WRITE?
|
||
SZA CLA
|
||
JMP DTEND3 /READ - WE'RE FINISHED
|
||
ISZ DTBUF /ASSIGN THE BUFFER TO HIM/HER NOW
|
||
TAD A15 /GO RESTART HIS/HER WRITE
|
||
JMP DTEND5
|
||
|
||
DTLOAD, 0
|
||
DCA DTDGO /SAVE THE DESIRED STATUS A
|
||
DTRA
|
||
DCA DTDATA /AND THE PRESENT STATUS A
|
||
TAD DTDGO
|
||
AND DTDATA /WHERE WILL CARRIES BE GENERATED
|
||
CIA
|
||
CLL RAL /WE WANT TO CANCEL THE CARRIES
|
||
TAD DTDGO /NOW ADD THEM TOGETHER
|
||
TAD DTDATA /NOW WE HAVE THE "XOR" OF THE "PRESENT" AND THE "DESIRED" STATUS A
|
||
DTXA /"XOR" IT INTO THE CONTROLLER
|
||
JMP I DTLOAD /THE RESULT WILL BE THE DESIRED STATUS A
|
||
|
||
STSI, DCA IX4 /SI - WANTS TO STOP A TAPE ON TIMER
|
||
CLL CMA RAL
|
||
DCA TEMP1 /ONLY STOP ONE TAPE
|
||
DCA TEMP2 /PREVENT HIM/HER FROM GOING BACK INTO DECTAPE CONTROLLER WAIT
|
||
K7001, IAC
|
||
JMS DTIMER /STOP HIM/HER
|
||
CIF 20
|
||
JMP I .+1 /BACK TO SI
|
||
DTSIDT
|
||
/START OR RESTART A DECTAPE READ OR WRITE FOR THE USER
|
||
|
||
DTGO, 0
|
||
SZA /ARE WE RESTARTING AFTER A TIMER KILLED US?
|
||
JMP DTGO1 /YES - SO WE DON'T NEED TO LOOK AT THE QUEUE
|
||
TAD DTJOB
|
||
SZA CLA /IS THE CONTROLLER BUSY?
|
||
JMP I DTGO /CONTROLLER IS ALREADY BUSY
|
||
DCA DTBUF /BUFFER IS EMPTY
|
||
JMS I DTRKJA /FIND SOMEONE WAITING FOR THE CONTROLLER
|
||
-1
|
||
JMP I DTGO /NOTHING WAITING
|
||
DTGO1, AND K7770
|
||
DCA A15
|
||
TAD I A15 /PULL JOB NUMBER FROM DDB
|
||
DCA DTJOB
|
||
TAD DTJOB
|
||
JMS GETTBA /FIND WAIT 2
|
||
JOBWMK+1
|
||
TAD TEMP0
|
||
DCA DTST /SAVE ITS POINTER FOR LATER
|
||
ISZ A15
|
||
TAD A15 /ADDRESS TO DUMP BLOCK NUMBERS INTO
|
||
DCA DTBLKP
|
||
ISZ A15
|
||
TAD I A15 /USER WORD 1 -- UNIT, DIR, FUNC.
|
||
DCA DTCOM
|
||
TAD I A15 /USER WORD 2 -- BLOCK NUMBER WANTED
|
||
DCA DTBLK
|
||
TAD I A15 /USER WORD 3 -- USER'S C.A.
|
||
DCA DTUCA
|
||
TAD DTCOM /DIRECTION FOR THIS OPERATION
|
||
AND K0400
|
||
K7740, SZA SMA CLA
|
||
TAD DTREV
|
||
TAD K0006 /AC=-5 FOR REVERSE R/W; AC=+6 FOR FORWARD R/W
|
||
TAD I DTBLKP /GET BLOCK FROM LAST TIME
|
||
TAD K0020 /BIAS BY 20 TO AVOID NEG. NUMBERS AND ZERO
|
||
STL CIA
|
||
TAD K0020
|
||
TAD DTBLK /BLOCK WE WANT
|
||
SZL
|
||
CIA /AC=ABSOLUTE VALUE OF DIFFERENCE
|
||
AND K7740
|
||
DCA TEMP4 /SAVE THAT RESULT FOR LATER
|
||
TAD DTCOM
|
||
AND K7000 /SAVE ONLY THE UNIT
|
||
SZL /LINK=INITIAL SEARCH DIRECTION
|
||
TAD K0400 /SEARCH REVERSE INITIALLY
|
||
JMS I DTLOAA /LOAD THE CONTROLLER
|
||
TAD DTCOM /LOAD THE DECTAPE BUFFER IF:
|
||
AND K0020 / ******* [S]HE'S DOING A WRITE
|
||
TAD TEMP4 / ******* THE DESIRED BLOCK IS FAIRLY CLOSE
|
||
TAD DTBUF / ******* THE BUFFER IS EMPTY
|
||
SZA CLA
|
||
JMP DTGO2 /AT LEAST ONE OF THE ABOVE IS FALSE
|
||
JMS I DTGETW /MOVE 201 WORDS FROM USER (CORE OR SWAP TRACK) TO DATFLD
|
||
JMP DTGO3 /WAIT FOR THE DISK TO FINISH
|
||
ISZ DTBUF /ASSIGN THE BUFFER TO HIM/HER
|
||
DTGO2, TAD DTSR3A
|
||
DCA I DTXORA /SET UP FOR SEARCH MODE
|
||
DCA DTREMB /CLEAR ERROR ACCUMULATOR
|
||
CDF
|
||
TAD DTBLKP
|
||
DCA I DTCAP /SET UP CA FOR THE BLOCK NUMBERS
|
||
CIF DATFLD /INHIBIT INTERRUPTS
|
||
TAD K0010 /ALL DATA BREAKS ARE TO DATFLD
|
||
DTLB
|
||
TAD K7770
|
||
DCA I DTERRA /ALLOW 10 CHANGES OF DIRECTION
|
||
TAD K0214
|
||
DTXA /GO, SEARCH, INT. ENABLE
|
||
CLL CMA RTL /SET CONTROLLER TIMER FOR 3 SECONDS
|
||
DTGO3, DCA DTTIME
|
||
JMP I DTGO
|
||
|
||
DTREV, -13
|
||
DTSR3A, DTSR3
|
||
DTGETW, DTDATA
|
||
DTXORA, DTXOR
|
||
DTLOAA, DTLOAD
|
||
DTIMER, 0
|
||
JMS I DTRKJA /FIND A JOB IN DECTAPE TIMER WAIT
|
||
-2
|
||
JMP DTIME3 /ALL DONE
|
||
TAD K0005
|
||
DCA TEMP3 /POINTER TO TIMER COUNT
|
||
DTIME1, CLL CMA RTL /AC=-3
|
||
ISZ I TEMP3 /IS HIS/HER TIMER UP?
|
||
JMP DTIMER+1
|
||
TAD TEMP3 /YES - JAM ON THE BRAKES
|
||
DCA TEMP4 /POINT TO USER WORD 1
|
||
CIF DATFLD /INHIBIT INTERRUPTS
|
||
DTRA /GET STATUS OF CURRENT UNIT
|
||
AND K0004 /SAVE ENABLE
|
||
SZA /IS IT REALLY DOING SOMETHING?
|
||
TAD K0200 /YES - CLEAR GO AND ENABLE
|
||
DTXA
|
||
TAD I TEMP4
|
||
AND K7001 /SAVE UNIT AND CURRENT DIRECTION
|
||
TAD K0377 /MOVE THE DIRECTION BIT INTO POSITION
|
||
AND K7400
|
||
JMS I DTLOAA /STOP HIM/HER!!!
|
||
TAD K7770
|
||
AND I TEMP4
|
||
DCA I TEMP4 /CLEAR "BRAKE" BIT
|
||
TAD TEMP2
|
||
TAD I TEMP0
|
||
DCA I TEMP0 /PUT HIM/HER BACK IN DECTAPE WAIT
|
||
JMP DTIME1 /CHECK FOR OTHER DRIVES TO STOP
|
||
DTIME3, TAD TEMP4
|
||
SNA CLA
|
||
JMP DTIME4 /NOTYING STOPPED THIS TIME
|
||
TAD DTTIME /WAS ANYTHING IMPORTANT GOING ON?
|
||
SZA CLA
|
||
TAD A15 /YES - LET'S GET BACK TO IT
|
||
JMS I DTGOA /START SOMETHING
|
||
DTIMEX, JMP I DTIMER
|
||
DTIME4, CIF DATFLD /INHIBIT INTERRUPTS
|
||
TAD DTTIME /IS THE CONTROLLER BUSY?
|
||
SZA CLA /NO
|
||
ISZ DTTIME /YES - BUMP CONTROLLER TIMER
|
||
JMP I DTIMER
|
||
DTRA /IT'S HUNG
|
||
AND K0204
|
||
DTXA /STOP THE TAPE (IF IT'S EVEN MOVING)
|
||
STA
|
||
DCA I DTERRA /LET HIM/HER KNOW THE TRANSFER PROBABLY DIDN'T HAPPEN
|
||
IAC
|
||
DCA DTBUF
|
||
DCA DTCOM
|
||
TAD DTJOB
|
||
JMS DTRKER /REPORT THE ERROR & SCHEDULE LEVEL 2
|
||
DTL20
|
||
JMP I .+1 /BACK THROUGH THE TIMER CODE
|
||
DTIMEX
|
||
FCE1= .+1&7770
|
||
DTRKER, 0
|
||
CIF CDF
|
||
JMS I DTRKHA /REPORT THE HUNG DEVICE
|
||
TAD I DTRKER /GET THE L2 DISPATCH ADDRESS
|
||
ISZ DTRKER /BUMP PAST THE ARG.
|
||
CIF CDF
|
||
JMS I QUEUE1 /PUT IT ON LEVEL 2 QUEUE
|
||
JMP I DTRKER
|
||
|
||
UUDTRK, DCA TEMP2
|
||
TAD I L2SAP /GET USER AC
|
||
DCA TEMP1
|
||
SNL /DON'T CLEAR THE AC IF IT'S AN RK05 REQUEST
|
||
DCA I L2SAP /CLEAR HIS/HER AC
|
||
TAD I UDFP /GET THE "CDF" FOR HIS/HER FIELD
|
||
DCA UDF1+1
|
||
JMS UDF1 /CHANGE TO USER FIELD
|
||
TAD I TEMP1 /GET WORD 1 OF HIS/HER PARAMETERS
|
||
SZL /RK05?
|
||
JMP URK05 /YES
|
||
RTL
|
||
RTL
|
||
AND K0007 /AC=UNIT NUMBER
|
||
UDTXAD, TAD DTDEVA /INDEX INTO THE DEVICE TABLE
|
||
DCA UDTDDB
|
||
DATFLD
|
||
CIF /FIELD 0 ROUTINE
|
||
JMS I DTCHKA /SEE IF [S]HE OWNS THIS UNIT
|
||
UDTDDB, 0
|
||
STA
|
||
TAD TEMP1
|
||
DCA A16
|
||
TAD I UDTDDB
|
||
TAD K0003 /SET UP TO MOVE PARAMETERS
|
||
DCA A17
|
||
CLL CMA RTL /L=1; AC=-3
|
||
JMS I BLTF1A /MOVE 3 WORDS FROM UDF TO DATFLD
|
||
TAD I UDTDDB
|
||
TAD TEMP2
|
||
JMS I WAIT2 /SET WAIT 2 CONDITION FOR DECTAPE OR RK05
|
||
TAD TEMP2
|
||
CLL RTR
|
||
SZL CLA /RK05?
|
||
JMP RK05GO /YES
|
||
JMS I DTGOA /NO - TRY TO START THE DECTAPE
|
||
WAITF1
|
||
|
||
URK05, CLL RAR
|
||
AND K0003 /RK05 UNIT #
|
||
TAD K0010 /DISPLACE TO RK05 DDB'S
|
||
JMP UDTXAD
|
||
DTDEVA, DEVTBE+5
|
||
/SEARCH FOR A JOB WAITING FOR A "WAIT 2" CONDITION
|
||
/CALLING SEQUENCE:
|
||
/ AC=0 COMPLETE PASS; AC NON-ZERO FINISH CURRENT PASS
|
||
/ JMS DTRKJB
|
||
/ MINUS WAIT CONDITION NUMBER
|
||
/ RETURN - NO JOBS FOUND
|
||
/ RETURN - CONTENTS OF WAIT 2 IN AC
|
||
|
||
DTRKJB, 0
|
||
SZA CLA /DO WE WANT A FULL PASS?
|
||
JMP DTRK2 /NO - JUST COMPLETE FROM WHERE WE LEFT OFF
|
||
TAD JOBCNT
|
||
DCA TEMP1 /SET COUNT FOR JOBMAX
|
||
DTRK1, TAD IX4 /CHECK POSITION OF RING POINTER
|
||
TAD DTRKEN
|
||
SZA CLA
|
||
JMP .+3
|
||
TAD JOBTAB /RESET RING POINTER
|
||
DCA IX4
|
||
TAD I IX4
|
||
SNA /IS THIS JOB DEFINED?
|
||
JMP DTRK2 /NO
|
||
TAD K0005 /POINT AT WAIT 2
|
||
DCA TEMP0
|
||
TAD I TEMP0
|
||
AND K0007
|
||
TAD I DTRKJB
|
||
SZA CLA /IS [S]HE WAITING FOR OUR CONDITION?
|
||
JMP DTRK2 /NOPE
|
||
TAD I TEMP0 /PUT THE CONTENTS OF WAIT 2 IN THE AC
|
||
ISZ DTRKJB /CAUSE SKIP ON EXIT
|
||
JMP DTRK3
|
||
DTRK2, ISZ TEMP1 /MORE?
|
||
JMP DTRK1
|
||
DTRK3, ISZ DTRKJB /INDEX PAST ARGUMENT ON RETURN
|
||
JMP I DTRKJB
|
||
|
||
DTRKEN, -CLKTBL+1
|
||
/MOVE DATA TO/FROM DATFLD FROM/TO USER CORE
|
||
/ USER'S POINTER IN "A16"
|
||
/ DATFLD POINTER IN "A17"
|
||
/CALLING SEQUENCE:
|
||
/ AC=-NUMBER OF WORDS; LINK=0 FROM DATFLD TO USER, LINK=1 FROM USER TO DATFLD
|
||
/ JMS BLTF1
|
||
/ RETURN
|
||
BLTF1, 0
|
||
DCA TEMP1 /SAVE NUMBER OF WORDS TO MOVE
|
||
BL0, SNL /WHICH DIRECTION?
|
||
JMP BL1
|
||
JMS UDF1 /FROM USER
|
||
TAD I A16
|
||
DATFLD /TO DATFLD
|
||
DCA I A17
|
||
JMP BL2
|
||
BL1, TAD I A17 /FROM DATFLD
|
||
JMS UDF1
|
||
DCA I A16 /TO USER
|
||
DATFLD
|
||
BL2, ISZ TEMP1 /MORE?
|
||
JMP BL0 /YES
|
||
JMP I BLTF1
|
||
|
||
WAKEUP, 0
|
||
ISZ F1SCH /SET FLAG TO SCHEDULE THIS USER IMMEDIATELY IF POSSIBLE
|
||
JMS GETTBA /FIND STR1
|
||
JOBSTS+1
|
||
CLL STA RAL /AC=7776
|
||
AND I TEMP0 /CLEAR JSWAIT
|
||
IAC
|
||
DCA I TEMP0 /NOW WE CAN BE SURE THAT IT IS SET
|
||
ISZ TEMP0 /NOW UPDATE THE DEVICE STATUS REGISTER
|
||
TAD I WAKEUP
|
||
DCA I TEMP0 /THE NEW D.S.R.
|
||
ISZ TEMP0
|
||
ISZ I TEMP0 /TURN ON DUMMY WAIT BIT IN WAIT MASK 1
|
||
ISZ TEMP0
|
||
DCA I TEMP0 /TAKE HIM/HER OUT OF WAIT
|
||
ISZ WAKEUP
|
||
JMP I WAKEUP
|
||
FCB2= .+7&7770
|
||
RKREDO, REDO0
|
||
RK05GO, CIF CDF
|
||
TAD RKJOB /WHO OWNS THE CONTROLLER?
|
||
SZA CLA
|
||
JMP I RKREDO /[S]HE'LL HAVE TO WAIT
|
||
TAD I JOB
|
||
DCA RKJOB /[S]HE NOW OWNS THE CONTROLLER
|
||
DCA I L2SAP /ZERO AC IN CASE TRANSFER DOESN'T START
|
||
CIF DATFLD
|
||
TAD RKJOB
|
||
JMS GETTBA /GET WAIT 2
|
||
JOBWMK+1
|
||
CLL CMA RTL /AC=-3
|
||
DCA RKERR /3 TRIES ON ERROR
|
||
DCA RKBLKS /CLEAR SUCCESSFULL TRANSFER COUNTER
|
||
JMS USRLOK /LOCK HIM/HER IN HIS/HER FIELD
|
||
DCA RKCORE /SAVE THE CORTBL POINTER
|
||
TAD I TEMP0 /POINTS TO DDB WORD 4 (-1)
|
||
JMS I RKGOA /START UP THE RK05 DISK
|
||
SZA CLA
|
||
JMP RKL21 /DIDN'T EVEN GET OFF THE GROUND
|
||
CLL STA RAL
|
||
DCA RKTIME /SET TIMER FOR 2 SECONDS
|
||
WAITF1
|
||
RKL21, ION
|
||
CDF
|
||
CLL STA RTR
|
||
AND I RKCORE
|
||
DCA I RKCORE /UNLOCK HIS/HER FIELD
|
||
DCA RKCORE
|
||
TAD RKJOB
|
||
JMS GETTBA /FIND HIS/HER AC
|
||
JOBREG+2
|
||
TAD RKBLKS
|
||
DCA I TEMP0 /PASS NUMBER OF BLOCKS TRANSFERRED BACK TO THE USER
|
||
TAD RKJOB
|
||
RKEND2, JMS I AWAKEN /TAKE HIM/HER OUT OF WAIT STATUS
|
||
RKERR, 0
|
||
DCA RKJOB /FREE THE CONTROLLER
|
||
JMS I DTRKJA /LOOK FOR OTHERS WAITING FOR THE CONTROLLER
|
||
-3
|
||
EXITF1 /NOBODY ELSE WANTS IT
|
||
AND K7770
|
||
DCA IX3
|
||
TAD I IX3 /EXTRACT THE JOB # FROM THE DDB
|
||
JMP RKEND2
|
||
RKGOA, RKGO
|
||
FCE2= .+1&7770
|
||
|