.TITLE CD.... CR15/UC15 CARD READER EDIT #020 / / / FIRST PRINTING, FEBRUARY 1974 / / THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO / CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED / AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. / DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPON- / SIBILITY FOR ANY ERRORS THAT MAY APPEAR IN THIS / DOCUMENT. / / THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FUR- / NISHED TO THE PURCHASER UNDER A LICENSE FOR USE ON / A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH / INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR / USE IN SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PRO- / VIDED IN WRITING BY DIGITAL. / / DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY / FOR THE USE OR RELIABILITY OF ITS SOFTWARE ON EQUIP- / MENT THAT IS NOT SUPPLIED BY DIGITAL. / / COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION / / .EJECT / /EDIT #022 8/11/75 MJH XVM MOVEBYTE FIX /EDIT #021 4/22/75 SCR UC15 EOF CARD FIX /EDIT #020 2/2/74 SCR CLEANUP /EDIT #019 SCR CR15 ERROR HANDLING; RRN SWITCH! /EDIT #018 SCR FIX CDON HANDLING CR15 VERSION /EDIT #017 SCR CLEANUP, !BOTH! DEVICES /EDIT #016 SCR MORE UC15 CODE /EDIT #015 SCR START TO PUT IN UC15 CODE /EDIT #013 1-18-72 /EDIT #14 6-26-73 /COPYRIGHT 1973, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. /C.W. KEMP ---- W.A. DESIMONE. ---- G. M. COLE / /CR15 CARD READER CONTROL HANDLER TASK. THIS CONTROL WILL /SUPPORT SORBAN AND DOCUMATION READERS. / CR15 CODE IS OBTAINED WITH NO ASSEMBLY PPARAMETERS / / TO OBTAIN UC15 CODE DEFINE UC15=0. / ADDITIONAL UC15 PARAMETERS: / DEFINE NOSPL=0 TO DISABLE SPOOLING FOR CARD READER. FOR INSTANCE / IF SPOOLER PACKAGE DOESN'T HAVE CARD READER ASSEMBLED IN FOR SPACE REASONS. / AN EQUATE FOR APILVL IS NECESSARY TO SET UP / IOT'S FOR CORRECT PRIORITY LEVEL TO CLEAR PIREX REQUEST. / PRESENTLY LEVEL 1 IS THE CARD READER ASSIGNMENT. / / W A R N I N G ! ! / / IN ORDER FOR THE UC15 HANDLER TO FUNCTION PROPERLY, THE / PDP11 MUST BE ABLE TO ACCESS OUR INTERNAL BUFFER / AND TCB'S. THIS MEANS THAT THEIR ADDRESS MUST BE LESS THAN / 28K TO THE PDP11. THUS, IF THE PDP-11 LOCAL MEMORY IS 8K, / THIS HANDLER MUST RESIDE BELOW 20K IN PDP15 CORE!! THIS / IS EQUIVALENT TO 50000 OCTAL. SIMILARLY , IF THE LOCAL / PDP-11 MEMORY IS 12K, THE HANDLER MUST RESIDE BELOW / 40000 OCTAL. / .IFDEF UC15 / / APISLT=55 APILVL=1 CRSI=APILVL*20+706101 SIOA=706001 LIOR=706006 CAPI=APILVL*20+706104 / .IFUND NOSPL DEVCOD=5 .ENDC .IFDEF NOSPL DEVCOD=205 .ENDC .ENDC / /EDIT 14 ADDS ASSEMBLY PARAMETER ERRLUN TO SPECIFY LOGICAL UNIT / FOR ALL ERROR MESSAGES, THE IS SET TO 3 IF USED INTERACTIVELY / MOST OF THE TIME OR TO 100 WHEN USED WITH PHASE / III BATCH. LUN 100 IS DEFINED TO BE THE BATCH OPERATOR DEVICE. / .IFUND ERRLUN ERRLUN=100 .ENDC /THIS IS AN IOPS ASCII ONLY HANDLER TASK. /IT CAN BE ASSEMBLED TO READ 029 OR 026 IBM KEYPUNCHED CARDS. /DEFINE DEC026 TO READ 026 PUNCHED CARDS. /DEC026 UNDEFINED TO READ 029 PUNCHED CARDS. / / / / THE FOLLOWING QUEUE I/O DIRECTIVES ARE IMPLEMENTED / / CPB 3600 HANDLER INFORMATION (HINF) / EVA / LUN / / FOR HINF THE FOLLOWING INFORMATION IS RETURNED IN THE EV / / BIT 0 UNUSED / BIT 1 = 1 INPUT DEVICE / BIT 2 = 0 NOT OUTPUT DEVICE / BIT 3 = 0 NOT FILE-ORIENTED / BITS 4-11 UNIT NUMBER 'ZERO' / BITS 12-17 DEVICE CODE = 7 CARD READER / / / CPB 2400 ATTACH CARD READER / EVA / LUN / / CPB 2500 DETACH CARD READER / EVA / LUN / / CPB 2600 READ CARD / (1) EVA / (2) LUN / (3) MODE / (4) BUFF / (5) SIZE / /IF A REQUEST CANNOT BE QUEUED, THE FOLLOWING EVENT VARIABLE /VALUES ARE RETURNED: / / -101 -- INDICATED LUN DOES NOT EXITS. / -102 -- INDICATED LUN IS NOT ASSIGNED TO PHYSICAL DEVICE. / -103 -- HANDLER TASK IS NOT CORE RESIDENT. / -777 -- NODE FOR REQUEST QUEUE NOT AVAILABLE. / / /IF THE QUEUED I/O REQUEST CANNOT BE SUCCESSFULLY DEQUEUED, /THE FOLLOWING EVENT VARIABLE VALUES ARE RETURNED: / / -7 -- ILLEGAL DATA MODE. / -6 -- UNIMPLEMENTED FUNCTION. / -24 -- LUN REASSIGNED WHILE ATTACH/DETACH REQUEST IN QUEUE. / -30 -- OUT OF PARTITION TRANSFER (NORMAL MODE). / -203 -- CAL NOT TASK ISSUED. / / .EJECT / / ***** CONSTANTS ***** / X12=12 /AUTO-INDEXREG. 12 X13=13 /AUTO-INDEXREG. 13 R1=101 /RE-ENTRANT REG. 1 R2=102 /RE-ENTRANT REG. 2 R3=103 /RE-ENTRANT REG. 3 R4=104 /RE-ENTRANT REG. 4 NADD=107 /NODE ADDITION ROUTINE ENTRY POINT SNAM=123 /NAME SCAN ROUTINE ENTRY POINT POOL=240 /LISTHEAD FOR POOL OF EMPTY NODES PDVL=252 /LISTHEAD FOR PHYSICAL DEVICE LIST ALAD=325 /ATTACH LUN & DEVICE ENTRY POINT DLAD=332 /DETACH LUN & DEVICE ENTRY POINT DQRQ=337 /DE-QUEUE REQUEST ENTRY POINT VAJX=342 /VERIFY AND ADJUST I/O PARAMS. IOCD=345 /DECREMENT TRANSFERS PENDING COUNT. DMTQ=361 /DE-QUEUE I/O REQUEST (FOR ABORTING). D.TG=10 /POSITION OF TRIGER EVENT VARIABLE IN PDVL NODE / .IFUND UC15 / CWC=22 /WC DCH ADDRESS. CCA=23 /CA DCH ADDRESS. / /PSUEDO-INSTR. FOR WF.SW SUBR. / WFOFF=SNA /WAITFOR CR15 NOT READY. WFON=SZA /WAITFOR CR15 READY. / / /CONDITIONS FOR LOAD READER CONDITION IOT (CRLC). / CC1=20 /CLEAR STATUS,DISABLE INTERRUPT AND DATA CHANNEL. CC2=27 /CLEAR STATUS,START READ,ENABLE INTERRUPT AND DATA CHANNEL. CC3=26 /CLEAR STATUS,ENABLE INTERRUPT,ENABLE DATA CHANNEL. CC4=04 /ENABLE INTERRS. DISABLES DCH / / ***** IOT INSTRUCTIONS ***** / CRPC=706724 /CLEAR STATUS EXCEPT CARD DONE.(ALSO DISABLES INTERR.) CRLC=706704 /LOAD READER CONDITIONS. CRRS=706732 /READ STATUS INTO AC. / .ENDC / .INH=705522 /INHIBIT INTERRUPTS. .ENB=705521 /ENABLE INTERRUPTS. / .EJECT /----CR15 STATUS AND AC BIT ASSIGNMENTS. / /STATUS REGISTER BIT ASSIGNMENTS: / / BIT TRANSLATION / / 17 COLUMN READY / 16 END OF CARD / 15 DATA CHANNEL OVERFLOW / 14 DATA CHANNEL ENABLED / 13 READY TO READ / 12 ON LINE / 11 END OF FILE / 10 BUSY / 09 TROUBLE (= IOR OF BITS 4 - 8) / 08 DATA MISSED / 07 HOOPER EMPTY/STACKER FULL / 06 PICK ERROR / 05 MOTION ERROR / 04 PHOTO ERROR / 03-00 UNUSED / /AC BIT ASSIGNMENTS FOR LOAD CONDITION FUNCTION (CRLC) / / BIT FUNCTION / / 17 START READ / 16 DATA CHANNEL ENABLE / 15 INTERRUPT ENABLE / 14 OFFSET CARD / 13 CLEAR STATUS REGISTER / / STATUS REGISTER BITS CONNECTED TO FLAG AND INTERRUPT REQUEST: / / 17 DATA READY(ONLY IF DATA CHANNEL NOT ENABLED) / 16 CARD DONE / 15 DATA CHANNEL OVERFLOW / 09 ERROR CONDITION / /MACRO DEFINITIONS: / /CP MACRO FOR CARD COLUMN TO ASCII TRANSLATION TABLE 026/029 CONDITIONALIZATION / .IFDEF DEC026 .DEFIN CP,C26,C29 C26\7777+1 .ENDM .ENDC .IFUND DEC026 .DEFIN CP,C26,C29 C29\7777+1 .ENDM .ENDC / / .EJECT / / / ***** HANDLER INITIALIZATION ***** (ONCE ONLY CODE) / /START /STORAGE FOR AC IN INTERR. SERVICE. /IBUF /TOP OF INTERNAL BUFFER. / / START LAC (PDVL) /SCAN PDVL FOR THIS DEVICE'S NODE IBUF DAC* (R1) LAC (HNAM) DAC* (R2) JMS* (SNAM) /R, R2, R6, XR, & AC ARE ALTERED /NODE FOUND? CAL (10) /NO -- EXIT DAC PDVNA /YES -- PDVL NODE ADDRESS IN AC. AAC D.TG /SAVE NODE ADDRESS AND DAC PDVTA /TRIGGER EVENT VARIABLE ADDRESS CAL CCPB /CONNECT INTERRUPT LINE LAC EV /CONNECT OK? SPA CAL (10) /NO -- EXIT LAC (TG) /YES -- SET TEV ADDRESS DAC* PDVTA AND (70000) /DETERMINE 'XR-ADJ' TCA DAC XADJ / .IFUND UC15 LAC (CC1) /CLEAR STATUS, DISABLE INTER, AND DCH. CRLC /LOAD FUNCTION. .ENDC .IFDEF UC15 JMS CLEAR /CLEAR OUT PIREX DEVICE, WAIT FOR COMPLETE LAC EV11K /FIND OUT IF OK RTL /PDP11 SIGN BIT TO OURS SMA /SKIP IF TROUBLE JMP WFTGR /NOT, GO WAIT FOR WORK CAL MSINIT /PRINT PIREX HAS NO CD MESSAGE CAL WFMS /WAIT FOR MESSAGE COMPLETION CAL (10 /EXIT / WFMS 20 EV MSINIT 2700 EV ERRLUN 2 INITMS INITMS 004002; 000000; .ASCII "*** NO CD IN PIREX"<15> .ENDC JMP WFTGR /WAIT FOR TRIGGER / HNAM .SIXBT 'CD@@@@' /HANDLER TASK NAME / .IFUND UC15 / .BLOCK 121+START-. / .ENDC / .IFDEF UC15 / .BLOCK 53+START-. / .ENDC / ***** END OF INITIALIZATION CODE ***** / /******** THE ABOVE CODE IS OVERLAYED BY THE INTERNAL BUFFER ****** /****************************************************************** / / UC15 INTERRUPT-CAL INTERACTION WILL BE DIFFERENT / KEEP INITIAL PART SEPARATE / .IFUND UC15 / WFTGR CAL WFTCPB /WAIT FOR TEV TO BE SET / / ***** THE TASK HAS BEEN TRIGGERED -- PICK A REQUEST FROM QUEUE / DZM TG /CLEAR TRIGGER PQ LAC PDVNA /DEQUE A REQUEST DAC* (R1) JMS* (DQRQ) /R1, R2, R4, R5, R6, XR & AC ARE ALTERED /WAS A REQUEST FOUND? JMP WFTGR /NO -- WAIT FOR TRIGGER / .ENDC / .IFDEF UC15 / UC15 CODE / / THE GENERAL IDEA IS THAT ALL WAITS ARE DONE THRU / THE TRIGGER, WE FIGURE OUT HERE WHO SET THE TRIGGER. THIS / ALLOWS US TO GET OUT OF HUNG DEVICE, SINCE WE WAIT HERE, / AND CAN SEE AN ABORT COMING THRU. / WFTGR CAL WFTCPB /WAIT FOR EVENT VARIABLE TG PQ LAC TG /FIND OUT WHO IS CALLING DZM TG /RESET RTL /ABORT BIT TO SIGN BIT SPA!CLA!IAC /SKIP IF NOT ABORT, 1 IN AC. JMP PQ1 /GO DO ABORT IN REGULAR WAY. THE HANGING / /READ IS REMEMBERED IN RRN! SAD CDON /HAS A CARD BEEN DECLARED DONE BY INTERRUPT JMP GOTCRD /YEAH, GO TRANSLATE IT SAD POST /ARE WE WAITING FOR INTERRUPT JMP WFTGR /YES, AND IT HASN'T HAPPENED YET, SINCE / /CDON NOT SET. WAIT ON THIS CAL REQ, TO BE / /DONE AFTER THE INTERRUPT HAPPENS. IF ABORT / /COMES IN THE MEANTIME, HE IS PUT AT HEAD / /OF DEQUE OF WAITING REQ.'S SO WE DO HIM. / PQ1 LAC PDVNA /TRY TO DEQUE AFTER OPERATION BEFORE WAITING DAC* (R1 /IN CASE WAITING FOR INTERRUPT HAS HELD OFF JMS* (DQRQ /A REQUEST. JMP WFTGR /DIDN'T FIND ONE, GO WAIT / .ENDC / DAC RN /YES -- SAVE ADDRESS OF REQUEST NODE TAD XADJ /SETUP XR TO ACCESS NODE PAX / / ***** I/O REQUEST NODE FORMAT ***** / / (0) FORWARD LINK / (1) BACKWARD LINK / (2) STL PTR. / (3) PART. BLK PTR. (0 IF EXM TSK). / (4) TASK PRIORITY / (5) I/O FCN CODE IN BITS 9-17 AND LUN IN BITS 0-8 / (6) -- EVENT VARIABLE ADDRESS / (7) CTB PTR. / (10) EXTRA / (11) EXTRA / LAC 5,X /FETCH I/O FCN CODE AND (777) SAD (024) /ATTACH REQUEST? JMP ATTACH /YES -- ATTACH TO TASK SAD (025) /NO -- DETACH REQUEST? JMP DETACH /YES -- DETACH FROM TASK SAD (026) /NO -- READ REQUST? JMP READ /YES -- READ CARD SAD (036) /NO -- HANDLER INFO.? JMP HINF /YES -- RETURN INFO IN EV SAD (777) /NO -- EXIT (DEASSIGNED) REQUEST? JMP DAEX /YES -- DEATTACH & EXIT SAD (017) /ABORT REQUEST? JMP CDABRT /YES. EVM6 LAW -6 /NO -- UNIMPLEMENTED FUNCTION -- SET JMP SEV /EVENT VARIABLE TO -6 / / ATTACH TO A TASK / ATTACH LAC PDVNA /ATTACH LUN & DEVICE DAC* (R1) LAC RN DAC* (R2) JMS* (ALAD) /R3, R4, R5, R6, X10, X11, XR & AC ARE ALTERED /WAS LUN ATTACHED? JMP SEV /NO -- SET REQUESTOR'S EV TO -24 JMP REQCMP /YES REQUEST COMPLETED / / DETACH FROM TASK / DETACH LAC PDVNA /DETACH LUN & DEVICE DAC* (R1) LAC RN DAC* (R2) JMS* (DLAD) /R3, R4, R5, R6, X10, X11, XR & AC ARE ALTERED /WAS LUN ATTACHED JMP SEV /NO -- SET REQUESTOR'S EV TO -24 JMP REQCMP /YES -- REQUEST COMPLETED / .EJECT / / RETURN HANDLER INFORMATION / HINF LAC (200007) JMP SEV / /READ CARD / READ LAW -2 /CHK. FOR IOPS ASCII DATA MODE. TAD 7,X SZA /IOPS ASCII? JMP EVM7 /NO, RETURN -5 EV. LAC 2,X /SAVE STL NODE PTR. FOR TASK IDENTIF. DAC STLA /SAVE VALID STL PTR. LAC 10,X /YES. VAL/ADJ. HEADER ADDRESS DAC* (R3) /HEADER ADDRESS. LAC 11,X /WORD COUNT DAC* (R4) TCA /SETUP COUNTER SINCE AAC +2 /OFFSET FOR CR APPENDAGE. DAC CDWDCT /VAJX ALTERS THE XR. DAC TCWC /SAVE IN CASE RETRY. LAC RN /REQ. NODE ADDRESS. DAC RRN /SAVE READ REQ. NODE ADDR. FOR ABORT. DAC* (R2) JMS* (VAJX) /VAL/ADJ. (ALTERS XR,AC,R3,R5) JMP EVM30 /RETS. HERE IF ERROR (I/O PARAM. OUT /OF PARTITION. LAC* (R3) /ADJUSTED HEADER ADDRESS -1 TO X12 TEMP. AAC -1 DAC TX12 AAC +2 /TEXT ADDRESS-1 TO X13 TEMP. DAC TX13 / DZM CDRVAL /INIT. VALID. BITS. .IFUND UC15 LAC CDON /HAS CARD DONE FLAG COME UP SINCE SNA /LAST CARD READ? CAL WFCRCD /NO. WAITFOR CARD DONE. DZM CDON /YES. CLEAR CARD DONE FLAG. RETRY LAC (IBUF-1) /SET INTERN. BUFF ADDR-1 TO DCH CA. DAC* (CCA) DZM* (CWC) /PREVENTS DOUBLE INTERRUPTS ON ERRORS!!!! LAC TCWC /RESTORE REQ. WC. DAC CDWDCT DZM EV1 /REINIT EV. RETRY FROM ERROR. CRRS /READ STATUS IN ORDER TO CHECK FOR READER READY AND (60) /AND ON-LINE. SAD (60) /STATUS BITS 12, 13 SET? SKP /YES, ON-LINE AND READY FOR READ. JMP ERR1 /NO, NOT READY. TYPE MSG1 AND WAIT FOR READY. LAC (CC2) /CONDITION CODE 2 -- READ CARD. CRLC /LOAD CONDITIONS. CAL WFCRCB /WAIT FOR INTERRUPT. / / / /UPON RESUMPTION FOLLOWING WAITFOR, EXAMINE EV AND TAKE THE FOLLOWING /ACTION: / /IF EV BIT 9 = 0 (TROUBLE BIT), NO ERRORS. TRANSLATE CARD PUNCHES /TO ASCII AND PASS TO USER AS 5/7 PACKED ASCII. /IF BIT 9 = 1 (TROUBLE BIT), ERROR BITS 08 TO 04 ARE CHECKED IN /DESCENDING NUMERICAL ORDER. THE FOLLOWING ERROR MESSAGES FOR THE /GIVEN ERROR CONDITIONS ARE OUTPUT: / /DATA MISSED OR PHOTO ERROR - '*** CD DATA MISSED/PHOTO ERROR' /PICK OR MOTION ERROR - '*** CD PICK ERROR' /HOPPER EMPTY OR STACKER FULL - IGNORED. CAUGHT ON SUBSEQ. /READ AS A READER NOT READY CONDITION. /IN ALL CASES WHERE A MESSAGE IS TYPED, THIS HANDLER TASK MARKS TIME /UNTIL THE ERROR IS REMEDIED. AT THIS POINT, THE CARD IS REREAD. / LAC EV1 /EV SET AT INTERR. LEVEL TO CONTENTS OF DAC TST /STATUS. SAVE TEMP. SWHA /SWAP HALVES FOR TROUBLE BIT CHECK. SMA!RAR /IF NEG.,TROUBLE. JMP TRANS /NO TROUBLE. GO TRANSLATE. SZL!RAR /DATA MISSED? JMP ERR4 /YES. SZL!RAR /NO. HOPPER EMPTY/STACK. FULL? JMP TRANS /YES. IGNORE. WHEN NEXT CRD. READ CAUGHT AS NOT READY. SZL!RAR /PICK ERROR? JMP ERR3 /YES. SZL!RAR /MOTION ERROR? JMP ERR3 /YES. JMP ERR4 /NO. MUST BE PHOTO ERROR. / / ERR4 ISZ ERRPT ERR3 ISZ ERRPT ERR2 ISZ ERRPT ERR1 LAC* ERRPT /ERRMSG. BUFFER ADDR. TO AC. JMS TTYOUT /TYPE MESSAAE. JMS WF.SW /WAITFOR READER READY. WFON LAC (ERRPT+1) /REINIT. ERRPT. DAC ERRPT JMP RETRY /READ ANOTHER CARD. / .EJECT TRANS LAC TX12 /SET AUTO INDEX REG. DAC* (X12) LAC TX13 DAC* (X13) / / NOW BRING BACK RN FROM RRN, IN CASE RN DESTROYED IN MEANTIME / LAC RRN DAC RN LAC (IBUF) /TOP OF INTERNAL BUFFER DAC ICA /PTR TO BUFFER LAW -20 DAC CDCOLC /CARD COL COUNT CDRM5 LAW -5 DAC CDR5CT CDML2 LAC* ICA /GET SAD CDRALT /ALT MODE (12,1,8 PUNCH)? JMP CDGALT /YES -- TERMINATE BUFFER SAD (7777 /NO -- IS IT AN EOF? JMP EOF /YES. LAC CDTABL /NO -- TRANSLATE TO ASCII DAC CDTPTR /GET TOP OF TABLE AND SET PTR LAC CDTLN1 /SET TABLE LENGTH CDML4 DAC CDTLEN /CURRENT LENGTH/2 ADD CDTPTR /CURRENT TABLE TOP + LENGTH/2 DAC CDCPTR LAC* CDCPTR /GET CURRENT ITEM AND (7777 SZA!CLL ADD CD7700 /ADD IN REST OF 2'S COMPLEMENT WORD TAD* ICA /CURRENT COLUMN SNA!CLA /MATCH FOUND? JMP CDCFND /YES SAD CDTLEN /CURRENT TABLE LENGTH =0? /THIS MEANS AN UNKNOWN CARD PUNCH JMP ILLCP /GO OUTPUT 'ILLEGAL CARD PUNCH'. SNL /L=0 JUMP UP, L=1 JUMP DOWN TABLE JMP CDDPTR LAC CDCPTR /SET TABLE TOP TO LOWER HALF DAC CDTPTR CDDPTR LAC CDTLEN /UPDATE TABLE LENGTH CLL!RAR JMP CDML4 CDGALT LAW 4000 /ALT MODE JMP CDCPUT / EOF LAC (1005 JMP REQCMA /SET HDR WDI TO EOF /REQUEST COMPLETE / /COME HERE ON MATCH FOUND / CDCFND LAC* CDCPTR /GET CURRENT ENTRY CMA!CLL /GEN. LEFTMOST BIT TAD CDTABL+1 /ADD 4000000 CMA XOR CDTABL+1 /RESTORE SIXTH BIT RAR CDCPUT DAC CDRWD3 /PUT IN TOP OF 3 WORD SHIFT BLOCK CDCLAW LAW -7 DAC CDR7CT CDCPL1 LAC CDRWD3 /CDEWD3,CDRWD2 & CDRWD1 SHIFT AS A UNIT USING /THE LINK TO PASS BITS FROM WORD TO WORD RAL DAC CDRWD3 LAC CDRWD2 RAL DAC CDRWD2 LAC CDRWD1 RAL DAC CDRWD1 ISZ CDR7CT JMP CDCPL1 ISZ ICA /POINT TO NEXT CARD COL ISZ CDR5CT /HAVE WE PROCESSED 5 WORDS? JMP CDML2 /NO GET ANOTHER ONE LAC CDWDCT /YES -- UPDATE WORD COUNT AND TAD (2 /CHECK TO SEE IF WE HAVE OVERFLOWED THE DAC CDWDCT /USER'S BUFFER SMA JMP CDVER2 /YES -- WE HAVE OVERFLOWED LAC CDRWD2 /NO -- INSERT 5/7 WORDS IN USER'S BUFFER CLL!RAL DAC CDRWD2 LAC CDRWD1 RAL DAC* X13 /STORE FIRST WORD LAC CDRWD2 DAC* X13 /STORE SECOND WORD ISZ CDCOLC JMP CDRM5 / .ENDC / .IFDEF UC15 / / IN THE CASE OF THE UNICHANNEL, WE RECIEVE A 42(10) WORD / BUFFER. THE FIRST WORD IS A BYTE COUNT (NOW ALWAYS 80(10)). / NOTE THAT AN EOF CARD HAS A BYTE COUNT OF 1!! / SPOOLER DOES CHECKSUM CALCULATION, NOT US. / THE SECOND IS A CHECKSUM SO ENTIRE BUFFER ADDS TO 0 / !!!###MODULO 2^16 THAT IS###!!!. THEN ARE 40(10) WORDS / OF 'COMPRESSED COLUMN'. (SEE CR-11 DRIVER MANUAL). EACH / WORD HAS TWO EXTRANEOUS BITS AT LEFT, THE !SECOND CHAR! / OF THE PAIR, AND FINALLY THE FIRST CHAR OF PAIR AT RIGHTMOST / OF WORD. THE PDP-11 HAS ALREADY CHECKED FOR VALID PUNCH / COMBINATIONS (64 VALID CARD ASCII, PLUS 12-1-8 FOR ALTMODE). / RETRY CLA!IAC /SET VARIABLE SAY8ING WE'RE WAITING FOR DAC POST /INTERRUPT DZM CDON /AND SAY WE HAVEN'T GOTTEN IT YET LAC TCBP /ADDR OF TABLE TELLING PDP-11 TO READ CARD JMS CDIU /ROUTINE TO SEND REQUEST TO PDP-11 JMP WFTGR /WAIT FOR COMPLETION INTERRUPT / / COME BACK HERE WHEN CARD IS READ / GOTCRD LAC RRN /RESTORE RN NODE DAC RN DZM POST /CLEAR INTERRUPT FLAGS DZM CDON /BEST TO CLEAR POST FIRST! LAC EV11 /EVENT VARIABLE FROM PDP-11 RTL /PDP-11 SIGN BIT TO OUR SIGN BIT SPA!CLL!RAR /SKIP IF OK, START CLEARING HIGH BITS JMP CDUCEC /GO CHECK WHICH KIND OF PIREX ERROR LAC TX12 /SETUP X12,X13 FOR USER BUFFER DAC* (X12 /MANIPULATIONS. X12 HEADER POINTER LAC TX13 /X13 DATA POINTER DAC* (X13 LAC* (IBUF+2 /GET FIRST CHARACTER PAIR (2 WORD HDR) AND (177777 /AND OFF MOVEBYTE BITS (EDIT 22) SAD (104611 /SPOOLER USES AN ALT-ALT CARD AS AN END / /OF DECK CARD, WE SHOULD IGNORE IT!! JMP RETRY /IT WAS ONE, JUST READ THE NEXT CARD AND (340 /12,11,0 PUNCHES IN FIRST COLM.=EOF TAD (445 /IF IT IS ONE, MAKE A 1005 SAD (1005 /WELL, IF SO GO LACE 1005 AS HEADER JMP REQCMA /EOF CARD, JUST SET HEADER. / LAC (IBUF+2 /DATA STARTS AT BUFF+2 CLL!RAL /TOP 17 BITS ADDRESS, LAST IS RIGHT-LEFT FLOP DAC CDIPTR /TO GET INCOMING CHAR'S LAW -120 /80 CHAR'S DAC CDCOLC /NOTE WE USE COUNTERS DIFERENT ALSO PKINT LAC PAKI /INIT 5/7 PACKER TO EXPECT DAC PAKSW /1ST CHAR OF A BUNCH OF FIVE LAC CDWDCT /WE USE AS COUNT OF PAIRS, NOT WORDS CLL!RAR /SO DIVIDE BY TWO DAC CDWDCT CDRML2 LAC CDIPTR /WATCH IT! TOP 17 BITS ADDR, LOW BIT LEFT ISZ CDIPTR /RIGHT FLIP-FLOP. AND!! POINTER POINTS TO / /NEXT CHAR, NOT LAST ONE RETREIVED. CLL!RAR /FLIP-FLOP TO LINK, ADDR AC DAC CDT1 /HOLD POINTER IN TEMPORARY LAC* CDT1 /GET CHARACTER PAIR SZL!RAL /THESE THREE GET CORRECT CHAR SWHA!SKP /TO LOW ORDER 8 BITS OF WORD RAR AND (377 /STRIP OTHER CHARACTER / /AT THIS POINT HAVE CLOMNS 12,11,0,9,8,1-7 / /WHERE 1-7 CODED IN THREE BITS DAC CDT1 /HOLD SAD CDALT /ALT MODE SPECIAL CASE, NO REMAP JMP CDGALT /REJOIN AS SPECIAL CASE AND (20 /IF NINE PUNCH, PECIAL CASE, REMAP TO 8,1 PUNCH SZA /COMBO FOR OUR TRANSLATE. SKIP IF NOT NINE LAW -7 /ADDED TO '9' GIVES '8' AND '1' TAD CDT1 /REMAPPED, DAC CDT1 /SAVE, NOW TO MOVE BOTTOM FOUR BITS LEFT ONE AND (17 /POSITION (9 POSITION NOW VACATED!) TAD CDT1 /THIS DOES IT, LEAVING LOW ORDER BIT ZERO / /NOW COLUMNS 12,11,0,8,1-7,ZERO BIT! SKP!CLL /HIDE YOUR HEAD. CLL FOR COMING RTR.SKIP / /OVER ALT-MODE RE-ENTRY CDGALT LAC (240 /INDEX TO ALT MODE RTR /RIGHT-LEFT TO LINK, INDEX TO AC TAD (CDTABL /TABLE ADDR DAC CDT1 LAC* CDT1 /GET PAIR FROM TRANSLATE TABLE SNL /HERE 0 IS LEFT, IN NORMAL SENSE SWHA JMS PAK57 /5/7/ PACKER (IT STRIPS XTRA BITS) ISZ CDCOLC /80? JMP CDRML2 /NO JMP CDCLOS /YES / / TRANSLATE TABLE 4 GROUPS OF 16 CHAR'S, TWO PER WORD. 8 WORD / SPACE BETWEEN LAST TWO GROUPS, IN WHICH WE PUT OTHER STUFF / CONDITIONALIZED FOR 026-029 OF COURSE. LEFT HAND CHAR IS FIRST. / .IFUND DEC026 CDTABL 040061 /BLANK, 1-PUNCH 062063 /2-PUNCH,3-PUNCH 064065 /4,5 066067 /6,7 070071 /8,9(ORDERED AS 8-1) 072043 /8-2,8-3 100047 /8-4,8-5 075042 /8-6,8-7 060057 /0,0-1 123124 /0-2,0-3 125126 /0-4,0-5 127130 /0-6,0-7 131132 /0-8,0-9(ORDERED AS 0-8-1) 135054 /0-8-2,0-8-3 045137 /0-8-4,0-8-5 076077 /0-8-6,0-8-7 055112 /11,11-1 113114 /11-2,11-3 115116 /11-4,11-5 117120 /11-6,11-7 121122 /11-8,11-9(ORDERED AS 11-8-1) 041044 /11-8-2,11-8-3 052051 /11-8-4,11-8-5 073134 /11-8-6,11-8-7 .ENDC .IFDEF DEC026 CDTABL 040061 062063 064065 066067 070071 137075 100136 047134 060057 123124 125126 127130 131132 073054 050042 043045 055112 113114 115116 117120 121122 072044 052133 076046 .ENDC / / NOW THE 8 LOC. BREAK IN THE TABLE / / THE 5/7 PACKER, A LITTLE TRICKY PAKSW KEEPS A PC WHICH / 'REMEMBERS' WHICH CHARQCTER OF 5 WE ARE AT. TO INIT PACKER, / SEE TWO LINES OF CODE AT PAKINT. NORMAL 'FLUSH' OUT WOULD / BE TO SEND NUL CHAR'S UNTIL PAKSW=PAKI. IN THIS / HANDLER, PAST HISTORY SAYS WE TRUNCATE ALWAYS AT A WORD / PAIR BOUNDARY, EVEN FOR SHORT BUFFERS. I AM AFRAID TO / CHANGE THIS, EVEN THOUGH I DON'T LIKE IT. / PAK57 0 /CALL WITH CHAR IN AC, (DESTROYED) / /PUSHES CHAR'S THRU X13. EARLY END CHECK / /IN CDWDCT. AND (177 /STIP XTRA CLL /FOR ALL ROTATES AND SWAPS! JMP* PAKSW /TO WHATEVER ACTION THIS CHAR. NEEDS. PAKSW HLT /POINTER TO ACTINS FOR CHARACTER JMP* PAK57 /THAT'S ALL, OUT PAKI PAKST /INIT PAKSW FOR FIRST CHAR. PAKT 0 /TEMPORARY FOR PARTIAL WORDS / / REST OF TRANSLATE TABLE / .IFUND DEC026 046101 /12,12-1 102103 /12-2,12-3 104105 /12-4,12-5 106107 /12-6,12-7 110111 /12-8,12-9(ORDERED AS 12-8-1) 133056 /12-8-2,12-8-3 074050 /12-8-4,12-8-5 053136 /12-8-6,12-8-7 .ENDC .IFDEF DEC026 053101 102103 104105 106107 110111 077056 051135 074041 .ENDC 175000 /ALT MODE, FOR BOTH PUNCH SETS. / / NOW REST OF 5/7 PACKER / PAKQ JMS PAKSW /5TH CHAR WRAP BACK TO 1ST. JMS TO PAKSW / /LEAVES ADDR OF ACTION FOR 1ST.!. PAKST RTL /1ST CHARACTER ACTION, MOVE TO LEFT OF WORD SWHA DAC PAKT /HOLD AS PARTIALLY ASSEMBLED WORD JMS PAKSW /LEAVE POINTER TO 2ND CHAR / RTL /2ND CHAR ACTION RTL XOR PAKT /MARGE WITH FIRST DAC PAKT /WAIT FOR PART OF 3RD TO FILL WORD JMS PAKSW /LEAVE POINTER TO THIRD / RTR /3RD, TWO PARTS, FIRST IS TOP 4 BITS RAR /RIGHT JUSTIFIED 1ST WORD OF PAIR DAC PAKSW /VERY-TEMPORARY IN HERE AND (17 /ZAP OTHER BITS XOR PAKT /COMPLETE 1ST WORD OF PAIR DAC* X13 /PLACE IN USER BUFFER LAC PAKSW /GET BACK THIRD CHAR (LINK STILL OK!!!) RAR /2ND JOB, LOW THREE BITS OF CHAR TOP OF AND (700000 /2ND WORD OF PAIR DAC PAKT /WHEW!, HOLD THAT IN PARTIAL WORD JMS PAKSW /LEAVE POINTER FOR FOURTH / SWHA /4TH, SNUG UP TO 3 BITS ON TOP RAR XOR PAKT /TOGETHER DAC PAKT JMS PAKSW /LEAVE POINTER FOR 5TH / ISZ CDWDCT /OVERFLOW SHORT BUFFER? SKP!RAL /NO, RAL LEAVE XTRA BIT OF PAIR ON RIGHT JMP CDVER2 /UH-OH, GO CORRECT XOR PAKT /COMPLETE 2ND WORD OF PAIR DAC* X13 /PLACE JMP PAKQ /GO PLACE PAKSW FOR FIRST CHAR OF FIVE / CDALT 211 CDIPTR 0 /POINTER TO INPUT DATA IN INPUT BUFFER / /FRMAT. LOW BIT RIGHT-LEFT FLIPFLOP / /TOP 17 BITS ADDRESS CDT1 0 /TEMPORARY FOR TRANSLATION POST 0 /0 WHEN NOT WAITING FOR INTERRUPT, 1 WHEN YES. .ENDC / THE BUFFER HAS BEEN REMAPPED -- STORE A 'CR' IN THE TRAILER / WORD AND SET UP THE HEADER WORD / CDCLOS LAC (64000 DAC* X13 /SET 'CR' IN USER BUFFER LAC CDCOLC /CDCOLC IS NEGATIVE AAC 22 CLL /ROTATE INTO PLACE ALS 11 /SHIFT INTO POSITION TAD CDRVAL /ADD IN BUFFER OVERFLOW IF ANY (BITS 12 & 13 =1) AAC 2 REQCMA DAC* X12 /SET HEADER WORD ONE REDCOM LAW -1 /SET RRN, SAYING NO MORE READ OUTSTANDING DAC RRN REQCMP CLA!IAC SEV JMS SEVRN /SUB. TO SET EV, RETURN NODE JMP PQ /GO LOOK FOR MORE WORK / / / SEVRN / / / ROUTINE IS CALLED WITH VALE FOR EV IN AC / THE NODE ADDR. IS IN RN / / EV IS SET, SIGNIFICANT EVENT DECLARED, IOCD ODOE, NODE RETURNED. / SEVRN 0 PAL /SAVE AC VALUE LAC RN /NODE ADDR DAC* (R2 /SYSTEM ARGUMENT HOLDER TAD XADJ /ADJUST FOR PREESENT PAGE PAX /FOR XR ADDRESSING LAC 6,X /EVENT VARIABLE ADDRESS SNA /SKIP IF REALLY ONE JMP NOSET /NOPE, SO DON'T SET TAD XADJ /MODIFY IT FOR ADDRESSING PAX PLA /BRING BACK SETTING VALUE DAC 0,X /THERE IT GOES! NOSET LAC (401000 /DECLARE A SIGNIFICANT EVENT ISA LAC (POOL /GIVE NODE TO POOL DAC* (R1 /SYSTEM ARGUMENT REG JMS* (IOCD /DECREMENT IO COUNT JMS* (NADD /GIVE BACK NODE JMP* SEVRN /THAT/S IT / / / / ***** BUFFER OVERFLOW / CDVER2 LAW -2 /BACKUP USER BUFFER PTR TAD* (X13) DAC* (X13) LAC (60) /SET OVERFLOW BITS FOR USE BY CDCLOS DAC CDRVAL JMP CDCLOS / EVM7 LAW -7 /ILLEGAL DATA MODE. JMP SEV EVM30 LAW -30 /I/O PARAM. OUT OF PARTITION. JMP SEV / .IFUND UC15 / AEVM6 LAW -6 /ILLEGAL FUNCTION. JMP SAEV /SET ABORT EV. / /ON ILLEGAL CARD PUNCH, WAIT FOR READER NOT READY FOLLOWED BY /READER READY SEQUENCE BEFORE READING ANOTHER CARD. / ILLCP LAC (ERRMG2) /TYPE 'ILLEGAL CARD PUNCH'. JMS TTYOUT JMS WF.SW /WAIT FOR READER NOT READY. WFOFF /PSUEDO INSTR. FOR WF.SW. JMS WF.SW /WAIT FOR READER READY. WFON /PSUEDO INSTR. FOR WF.SW. JMP RETRY /READ ANOTHER CARD. / / SUBR. TO WAIT FOR READER NOT READY OR READY FOR READ / PER PSUEDO INSTR. IN CALLING SEQUENCE. AFTER MARK TIME REQS., / THE TRIG. EV. IS CHECKED FOR AN ABORT REQ. IN THE QUEUE. / IF TASK REQ. READ IS TO BE ABORTED, THE SUBR. DOESN'T / RETURN NORMALLY,BUT EVENTUALLY JUMPS TO CDABRT. / CALLING SEQUENCE: / / JMS WF.SW / PSUED. INSTR. (WFOFF OR WFON) / SUBR. RETURN ,IF NO INTERVENING ABORT FOR THIS TASK. / WF.SW 0 LAC* WF.SW /GET PSUEDO INSTR. DAC PV1 ISZ WF.SW /BUMP EXIT. WF.SWA CRRS /READ CARD READER STATUS. AND (20) /CHECK FOR READER READY FOR READ. PV1 XX /SNA OR SZA. (READER READY IF NON-ZERO AC). JMP* WF.SW /EXIT. CAL MTCPB /MARK TIME FOR WAIT. CAL WFECB /WAIT FOR MARK TIME INTERVAL. DZM EV LAC TG /CHECK FOR ABORT REQ. IN QUEUE. RTL SMA /ABORT REQ.? JMP WF.SWA /CHECK AGAIN. DZM TG /YES. DEQUEUE ABORT REQ. LAC PDVNA /PDVL NODE ADDR. DAC* (R1) JMS* (DQRQ) /DEQUEUE ABRT. REQ. R1,R2,R4,R5,R6,XR,AC NOP /ALTERED. ASSUME ABRT. REQ. IN QUEUE. DAC RN /SAVE ABORT REQ. NODE ADDR. TAD XADJ /SET XR. PAX LAC 6,X /GET ABRT. REQ. EV. DAC ARE LAC 5,X /CHECK FOR ZERO LUN. AND (777000) /BITS 0-8 SZA JMP AEVM6 /ERROR. NON-ZERO LUN. LAC 2,X /GET STL. NODE PTR. AND CHECK AGAINST SAD STLA /READ REQ. STL NODE PTR. SAME? JMP CDARD /YES. ABORT READ REQ. AND CLEAN UP. LAC PDVNA /NO. CLEAN UP QUEUE OF TASK TO BE ABRTED. DAC* (R1) /ALSO RETR. ABRT. REQ. NODE TO POOL AND LAC RN /DECR. TRANSF. PEND. CNT. ABRT. REQ. NODE DAC* (R2) /ADDR. TO R2. JMS* (DMTQ) /EMPTY REQ. QUEUE OF ALL I/O /REQ.'S MADE BY TASK BEING ABORTED. /R1,R2,R3,R5,R6,X10,X11,X12,XR,AC ALTERED. LAC (1) /SET ABRT. REQ. EV TO +1. SAEV PAL LAC ARE /ABORT REQ. EV. TAD XADJ PAX PLA DAC 0,X LAC (401000) ISA /DECLARE SIGNIF. EVENT. LAC RN /RETRN. ABRT. REQ. NODE TO POOL. DAC* (R2) LAC (POOL) DAC* (R1) JMS* (IOCD) /DECR. TRANSF. PEND. CNT. JMS* (NADD) /RETRN. NODE TO POOL. JMP WF.SWA /CHECK AGAIN. CDARD CLA!IAC /SET CARD DONE FLAG. DAC CDON JMP CDABRT /PROCEED WITH ABORT. / .ENDC .EJECT / / EXIT REQUEST (FROM TASK "....REA") / DAEX LAC (POOL) /RETURN REQUEST NODE TO POOL DAC* (R1) LAC RN DAC* (R2) JMS* (IOCD) /DECREMENT TRANSF. PENDING COUNT JMS* (NADD) .IFUND UC15 LAC (CC1) /CONDITION CODE 1 -- CLEAR CONTROL. CRLC CAL DCPB /DISCONNECT .ENDC .IFDEF UC15 JMS CLEAR /CLEAR DEVICE , WAIT FOR COMPLETION ISZ CCPB /MAKE CONNECT A DISCONNECT (BURP) CAL CCPB /DISCONNECT .ENDC ISZ PDVTA /POINT TO ASSIGN INHIBIT FLAG .INH /INHIBIT INTERRUPTS. DZM* PDVTA ///ZERO IT .ENB ///ENABLE INTERRUPTS. CAL (10) ///EXIT / / /ABORT REQUEST. / CDABRT LAW 17000 /MASK TO KEEP HALF WORD TO CHECK ABORT VALIDITY AND 5,X /HAS TO BE ZERO TO BE OK SZA /SO SKIP IF OK JMP EVM6 /ERROR RETURNED IF NOT LAC PDVNA /MT THE DEQUE FOR THE ABORTED TASK DAC* (R1 LAC RN /ABORT NODE DAC* (R2 JMS* (DMTQ /THIS ROUTINE DOES ALL WORK / / NOW WAS THIS ABORT FOR AN OUTSTANDING READ? / LAC RN /2+RN IS STL NODE ADDR TAD XADJ /USE AS IDENTIFIER PAX LAC 2,X SAD STLA /SAME ADDR FOR LAST READ DONE SKP!CLA!CMA /SKIP IF SAME, SET UP -1 JMP REQCMP /NOPE, WE'RE DONE, GO GIVE BACK NODE ETC. XOR RRN /NASTY, MAKES 0 IF NO READ NOW! IN PROGRESS SNA!CMA /SKIP IF READ IN PROGRESS, RECREATE ITS NODE ADDR! JMP REQCMP /NOPE, JUST COMPLETE DAC* (R2 /GIVE BACK NODE AND IOCD FOR SUSPENDED READ LAC (POOL DAC* (R1 JMS* (IOCD JMS* (NADD CLA!CMA /SET READ NOT HERE SWITCH DAC RRN .IFUND UC15 LAC (CC1 /CLEAR DEVICE CRLC .ENDC .IFDEF UC15 JMS CLEAR /AND CLEAR FOR UNICHANNEL .ENDC JMP REQCMP /DONE / / / / .EJECT / / INTERRUPT SERVICE ROUTINE / INT 0 DBA DAC START /SAVE AC .IFUND UC15 CRRS /READ STATUS INTO AC. DAC EV1 /SAVE FOR TASK LEVEL PROCESSING. AND (2) /CARD DONE? BIT 16. SNA JMP INT1 /NO. DON'T CLEAR CARD DONE. DAC CDON /PLACE 2 INTO CDON TO SAY DONE LAC (CC3) /YES. CLEAR CARD DONE. LEAVE CRLC /INTERR. AND DCH ENABLED. INT1 CRPC /CLEAR ALL BUT CARD DONE. LAC (CC4) /ENABLE INTERRS. DISABLE DCH CRLC /NEEDED SINCE CRPC DISABLES INTERRS. .ENDC / .IFDEF UC15 CAPI /CLEAR FLAG FROM PDP-11 LAC POST /ARE WE WANTING AN INTERRUPT SNA /SKIP IF YES/USE VALUE TO SET JMP INTAC /NO DO NOTHING DAC CDON /AS FLAG TO DISTINGUISH CARD DONE FROM CAL DAC TG /AND SET TG TO WAKE UP CAL LEVEL .ENDC LAC (401000) /DECLARE SIGNIF. EVENT. ISA INTAC LAC START /RESTORE AC. DBR JMP* INT .EJECT / .IFUND UC15 /SUBR. TO OUTPUT ERROR MESSAGES VIA ERRLUN. AC SHOULD CONTAIN /ADDRESS OF ERROR MESSAGE BUFFER. / TTYOUT 0 DAC TECPB4 /SET CPB BUFFER ADDRESS. CAL TE /TYPE ERROR MESSAGE. CAL WFECB /WAITFOR EV. JMP* TTYOUT / /ERROR MESSAGE BUFFERS AND TABLE OF PTRS.: / ERRPT .+1 ERRMG1 ERRMG2 ERRMG3 ERRMG4 ERRMG5 / / / ERRMG1 ERRMG2-ERRMG1*1000/2+2 0 .ASCII '*** CD READER NOT READY'<15> ERRMG2 ERRMG3-ERRMG2*1000/2+2 0 .ASCII '*** CD ILLEGAL PUNCH'<15> ERRMG3 ERRMG4-ERRMG3*1000/2+2 0 .ASCII '*** CD PICK ERROR'<15> ERRMG4 ERRMG5-ERRMG4*1000/2+2 0 .ASCII '*** CD DATA MISSED/PHOTO ERROR'<15> ERRMG5=. .EJECT / ***** CARD COL TO ASCII TRANSLATION TABLE ***** / /EACH TABLE ENTRY REPRESENTS VALID ASCII CARD PUNCHES WITH /THE FOLLOWING FORMAT: / /BITS 0 - 5 SIXBIT ASCII CHARACTER. /BITS 6 - 17 CARD PUNCHES WITH THE FOLLOWING MAPPING: / /BIT 6 = ZONE 12 /BIT 7 = ZONE 11 /BITS 8 - 17 = ZONES 0 - 9. /THE ASSEMBLER BUILDS THE TWOS COMPLEMENT OF BITS 6-17 VIA THE /7777\+1 OPERATION. THE TABLE IS ORDERED ACCORDING TO INCREASING /MAGNITUDE OF CARD PUNCHES(CONSIDERED AS 12 BIT RIGHT JUSTIFIED /INTEGER VALUES). /EXAMPLE: ASCII '9' HAS FOLLOWING TABLE REPRESENTATION: / / 710001\7777+1 / /WHERE 0001 INDICATES ZONE 9 PUNCHED AND 71 IS SIXBIT ASCII '9'. / /GRAPHIC CHARACTERS FOR 026 PUNCHES ARE IN PARENTHESES BELOW: / CDTABL CDTABL+1 400000 /BLANK 710001\7777+1 /9 700002\7777+1 /8 670004\7777+1 /7 CP 340006,420006 /" (\) 660010\7777+1 /6 CP 470012,750012 /= (') 650020\7777+1 /5 CP 360022,470022 /, (^) 640040\7777+1 /4 000042\7777+1 /@ 630100\7777+1 /3 CP 750102,430102 /# (=) 620200\7777+1 /2 CP 370202,720202 /: (_) 610400\7777+1 /1 601000\7777+1 /0 321001\7777+1 /Z 311002\7777+1 /Y 301004\7777+1 /X CP 451006,771006 /? (%) 271010\7777+1 /W CP 431012,761012 /> (#) 261020\7777+1 /V CP 421022,371022 /RIGHT ARROW (") 251040\7777+1 /U CP 501042,451042 /% (() 241100\7777+1 /T 541102\7777+1 /' 231200\7777+1 /S CP 731202,351202 /](;) 571400\7777+1 // 552000\7777+1 /- 222001\7777+1 /R 212002\7777+1 /Q 202004\7777+1 /P CP 462006,342006 /\ (&) 172010\7777+1 /O CP 762012,732012 /; (>) 162020\7777+1 /N CP 332022,512022 /) ([) 152040\7777+1 /M 522042\7777+1 /* 142100\7777+1 /L 442102\7777+1 /$ 132200\7777+1 /K CP 722202,412202 /! (:) 122400\7777+1 /J CP 534000,464000 /& (+) 114001\7777+1 /I 104002\7777+1 /H 074004\7777+1 /G CP 414006,364006 /^ (!) 064010\7777+1 /F CP 744012,534012 /+ (<) 054020\7777+1 /E CP 354022,504022 /( (]) 044040\7777+1 /D CP 514042,744042 /< ()) 034100\7777+1 /C 564102\7777+1 /. 024200\7777+1 /B CP 774202,334202 /[ (?) 014400\7777+1 /2 CDTLN1 .-1-CDTABL/2 CDRALT 4402 .ENDC .EJECT / / ***** INTERNAL VARIABLES ***** / CDON 1 /CARD DONE FLAG. TST 0 /TEMP STORAGE FOR STATUS. STLA 0 /STL NODE. ADDR. ARE 0 /ABORT REQ. EV. CDCOLC 0 /CARD COL COUNT USED IN TRANSLATING CARDS EV 0 /INTERNAL EVENT VARIABLE TG 0 /TRIGGER EVENT VARIABLE XADJ 0 /XR ADJUST CONSTANT TO SUBTRACT PAGE BITS RN 0 /ADDRESS OF THE REQUEST NODE PICKED FROM AUEUE CDRVAL 0 /BUFFER OVERFLOW FLAG WORD CDWDCT 0 /WORD COUNT CHECK WORD SET FROM I/O REQUEST / .IFUND UC15 / / SAVE SOME ROOM FOR UC15, THESE ARE NOT NEEDED / ICA 0 /INTERNAL BUFFER CURRENT ADDRESS POINTER CDR7CT 0 /SEVEN COUNTER USED BY THE 5/7 ASCII PACKING ROUTINE CDR5CT 0 /COUNTER FOR 5/7 ASCII PACKING CDTPTR 0 /POINTER TO TRANSLATION TABLE CDTLEN 0 /TRANSLATION TABLE LENGTH CD7700 770000 /USED IN CARD TRANSLATION CDCPTR 0 /POINTER TO CURRENT INTEM IN TRANSLATION TABLE CDRWD3 0 // CDRWD2 0 // THREE WORD SHIFT REG. FOR 5/7 ASCII PACKING CDRWD1 0 // EV1 0 /CARD READER EV. / .ENDC / PDVNA 0 /PHYSICAL DEVICE NODE ADDRESS PDVTA 0 /ADDRESS OF ADDRESS OF TEV IN PHY DEV NODE RRN 777777 /READ BEING PROC. FLAG. -1 IF NOT BEING /PROCESSED. READ REQ. NODE ADDRESS IF BEING /PROCESSED. TX12 0 /TEMP. FOR X12 STOR. TX13 0 /TEMP. FOR X13 STOR. TCWC 0 /TEMP. FOR REQ. WC. / .EJECT / / ***** CAL PARAMETER BLOCKS ***** / / WFTCPB 20 /WAIT FOR TRIGGER CPB TG / CCPB 11 /CONNECT CPB EV 15 /LINENUMBER INT /ENTRY ADDRESS OF INTERRUPT SERVICE ROUTINE / .IFUND UC15 / / UC15 SAVE SPACE BY LEAVING OUT SOME CAL'S / / / WFECB 20 /WAIT FOR EV CPB EV / DCPB 12 /DISCONNECT CPB 0 /EV ADDRESS 15 /INTERRUPT LINE NUMBER INT /CURRENT INTERRUPT TRANSFER ADDRESS / TE 2700 /WRITE TO ERRLUN. EV ERRLUN /WRITE OUT THE ERROR MESSAG TO THE DESIRED /TELETYPE 2 TECPB4 XX / MTCPB 13 /MARK TIME REQ. EV 12 /12 UNITS. 1 /UNIT (TICK). / WFCRCB 20 /WAIRFOR CR INTERRS. EV1 / WFCRCD 20 /WAIT FOR CARD DONE FLAG TO BE SET. CDON / .ENDC / / .IFDEF UC15 / / I/O INFORMATION , ROUTINES , ETC. FOR UC15 / / TCB (TASK CONTROL BLOCK) TELLING PDP-11 TO SEND US A CARD / TCB APISLT*400+APILVL /TELL PDP-11 WHERE TO COME BACK DEVCOD /PIREX CODE FOR CD;THE 200 BIT SAYS / /WE ARE NOT TO BE SPOOLED. EV11 0 /EVENT VARIABLE FROM PDP11 TO US 0 /DUMMY, HIGH PORTION OF 18 BIT / /ADRESS. NOT PRESENTLY USED IBUF /POINTER TO BUFFER TO PUT CARD IN 0 /UNIT #; FOR FUTURE GENERATIONS. / / TCB TO TELL PDP11 TO CLEAR OUT CARD READER DEVICE / TCBK 0 /THIS WORKS, SEE PIREX FOR INFO. DEVCOD&177*400+200 EV11K 0 /EVENT VARIABLE FOR CLEAR OPERTAION / / POINTERS TO TCB, TDBK / TCBP TCB TCBKP TCBK / / / CDIU IS THE SUBROUTINE TO SEND A TCB TO THE PDP-11 / / CAL WITH THE ADRESS OF THE TCB IN THE AC / CDIU 0 DZM EV11 /CLEAR ONE COMING FROM PDP-11 DZM EV11K /AND THE OTHER ONE, IN CASE IT USED SIOA /SKIP IF PDP-11 CAN TAKE REQUEST JMP .-1 LIOR /TELL IT TO DO TCB WHOSE ADDRESS IN AC JMP* CDIU /THAT'S ALL THERE IS TO IT. / / / CLEAR CLEARS SWITCHES, AND CD IN PIREX, WAITS FOR COMPLETE / CLEAR 0 DZM POST DZM CDON LAC TCBKP /TCB FOR CLEAR JMS CDIU CAL WFCLER /WAIT FOR CLEAROUT JMP* CLEAR / WFCLER 20 EV11K / CDUCEC EXAMINES NEGATIVE EVENT VARIABLES FROM PIREX / CDUCEC CLL!RAR /CLEAR OTHER TOP BIT TAD (600000 /SIGN EXTEND TO PDP-15 WORD SAD (777001 /THIS ONLY 'LEGAL' VALUE AT PRESENT JMP RETRY /THAT SAYS PIREX IS OUT OF NODES, / /WE SHOULD TRY AGAIN TO GET ONE JMS SEVRN /OTHERS, RETURN NEG VARIABLE AS EV. / /THIS IS SLIGHTLY FLAKEY, BUT WE / /REALLY SHOULD NEVER GET HERE!?!? LAW -1 /SAY NO MORE READ OUTSTANDING DAC RRN JMP PQ /BACK TO LOOK FOR MORE WORK / / .ENDC .END START