1
0
mirror of synced 2026-03-06 11:13:30 +00:00
Files
lisper.cpus-pdp8/tss8/system/ts8e.pal
brad 0e9bfd9d85
2010-04-02 12:36:00 +00:00

1329 lines
30 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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