.TITLE *** CP.... / / / 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, BY DIGITAL EQUIPMENT CORPORATION / / .EJECT / / EDIT #1 12 JUN 72 D. WARD - CSS / / /COPYRIGHT 1972, DIGITAL EQUIPMENT CORP., MAYNARD MASS. / /THIS HANDLER DRIVES THE SP120 CARD PUNCH. IT IS CAPATIBLE /WITH NORMAL OUTPUT FROM MACRO AND FORTRAN /WRITTEN PROGRAMS. / /TO SATISFY A PUNCH REQUEST, THE LINE IS MOVED TO A BUFFER IN /THE HANDLER TASK WHERE IT IS UNPACKED FROM AN IOPS PACKED ASCII /FORMAT (5/7 BIT CHARS IN 2 18 BITS WORDS) INTO SINGLE CHARACTER /PER WORD HOLLERITH FORMAT. THE NORMAL MODE REQUESTOR MUST NOT BE /ABLE TO MODIFY THE LINE AFTER THE HARDWARE HAS BEGUN TO READ IT. / /THE FOLLOWING CAL PARAMETER BLOCKS ARE USED TO QUEUE /REQUESTS FOR PUNCH SERVICE / / CPB 3600 HANDLER INFORMATION (NONF) / EVA EVENT VARIABLE ADDRESS / LUN LOGICAL UNIT NUMBER / / CPB 2400 ATTACH PUNCH / EVA EVENT VARIABLE ADDRESS / LUN LOGICAL UNIT NUMBER / / CPB 2700 PUNCH LINE / EVA EVENT VARIABLE ADDRESS / LUN LOGICAL UNIT NUMBER / MODE DATA MODE (IOPS ASCII = 2) / LINE LINE BUFFER ADDRESS / / CPB 3400 CLOSE PUNCH FILE / EVA EVENT VARIABLE ADDRESS / LUN LOGICAL UNIT NUMBER / / CPB 2500 DETACH PUNCH / EVA EVENT VARIABLE ADDRESS / LUN LOGICAL UNIT NUMBER / / CPB 1700 ABORT TASK I/O / EVA EVENT VARIABLE ADDRESS / LUN LOGICAL UNIT NUMBER / / /THE REQUESTOR'S EVENT VARIABLE IS CLEARED (ZEROED) WHEN THE /REQUEST IS QUEUED BY THE "QUEUE I/O" DIRECTIVE. IF THE REQUEST /CANNOT BE PERFORMED, THE EVENT VARIABLE IS SET TO ONE OF THE /FOLLOWING NEGATIVE VALUES: / / -6 ILLEGAL REQUEST FUNCTION / -7 ILLEGAL DATA MODE / -16 ILLEGAL OUTPUT HEADER WORD-PAIR-COUNT (<1) / -24 LUN HAS BEEN REASSIGNED WHILE REQUEST WAS IN QUEUE / -30 OUT-OF-PARTITION TRANSFER (NORMAL MODE) / -203 ILLEGAL TO ATTACH OR DETACH FROM OTHER THAN TASK LEVEL / /IF THE REQUEST IS PERFORMED SUCCESSFULLY, THE EVENT VARIABLE IS SET /TO ONE (+1) UPON COMPLETION. IF THE PUNCH OPERATION FAILED /TO PUNCH OR SHOWED AN ERROR, THE EVENT VARIABLE IS SET TO /MINUS (400000) TO ALLOW THE USER TO REQUEUE CARD I/O / / / CONDITIONAL ASSEMBLY PARAMETERS / CP029=1 /CP029 = 1 FOR 029 PUNCH CODE /CP029 = 0 FOR 026 PUNCH CODE INTLN=22 /API INTERRUPT LINE NUMBER (MODULO 40) / / / / / / CONSTANTS AND EQUATES / / / X12=12 /AUTO-INCREMENT REG 12 X13=13 /AUTO-INCREMENT REG 13 R1=101 /RE-ENTRANT REG ONE R2=102 /RE-ENTRANT REG TWO R3=103 /RE-ENTRANT REG THREE R4=104 /RE-ENTRANT REG FOUR 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 AND DEVICE ENTRY POINT DLAD=332 /DETACH LUN AND DEVICE ENTRY POINT DQRQ=337 /DE-QUEUE REQUEST ENTRY POINT VAJX=342 /VERIFY I/O REQUEST ENTRY POINT IOCD=345 /DECLARE I/O REQUEST COMPLETE ENTRY POINT DMTQ=361 /DETACH & EMPTY QUEUE ENTRY POINT D.TG=10 /POSITION OF TRIGGER EVENT VARIABLE IN PDVL NODE LUN=3 /LUN FOR NOT-READY MESSAGE /LUN 3 COULD BE MCR OUTPUT WCA=34 /WORD COUNT ADDRESS (NOT USED BY CP CONTROLLER) CAA=35 /CURRENT ADDRESS REGISTER ADDRESS / PSKD=705001 /SKIP ON DATA REQUEST FLAG PSTA=705012 /READ PUNCH STATUS PCMD=705004 /LOAD COMMAND REGISTER SKDN=705041 /SKIP ON CARD DONE SKER=705061 /SKIP ON ERROR FLAG PCLR=705042 /CLEAR PUNCH FLAGS PLDD=705044 /LOAD PUNCH DATA / .INH=705521 /INHIBIT INTERRUPTS .ENB=705521 /ENABLE INTERRUPTS / / .DEC LBZ=80 /DEFINE PUNCH BUFFER SIZE .OCT / / LBF=. /DEFINE START OF PUNCH BUFFER / / / /HANDLER INITIALIZATION / / START LAC (PDVL) /SCAN PHYSICAL DEVICE LIST DAC* (R1) /FOR THIS DEVICE LAC (HNAM) DAC* (R2) JMS* (SNAM) /R1, R2, R6, XR, AND AC ARE ALTERED /NODE FOUND? CAL (10) /NO, EXIT DAC PDVNA /SAVE PDVL NODE ADDRESS AAC +D.TG /GET TRIGGER EVENT VAR ADDR DAC PDVTA /SAVE IT / CAL CCPB /CONNECT INTERRUPT LINE LAC EV /IS CONNECT OK? SPA /SKIP IF AC POSITIVE (OK) CAL (10) /NOT OK, EXIT / DZM EV /RESET EV FOR LATER LAC (TG) /SET TRIGGER EVENT VARIABLE ADDR DAC* PDVTA /IN PHYSICAL DEVICE NODE AND (070000) /DETERMINE "XR-ADJ" TCA /COMPLEMENT RESULT DAC XADJ /SAVE PAGE BIT ADJUST PARAMETER / PCLR /CLEAR CP CONTROLLER JMP WFTGR /WAIT FOR TRIGER / HNAM .SIXBT "CP@@@@" /HANDLER TASK NAME / /END OF INITALIZATION CODE / .BLOCK LBZ+LBF-. / / /*****THE ABOVE CODE BECOMES THE PUNCH***** /*****XMIT BUFFER AFTER THE FIRST PASS***** / / /WAIT FOR TASK TO BE TRIGGERED /TO SIGNAL THAT A REQUEST HAS BEEN QUEUED / / WFTGR CAL WFTCPB /WAIT FOR TRIGGER EVENT VARIABLE TO BE SET / /THE TASK HAS BEEN TRIGGERED /PICK REQUEST FROM QUEUE / / DZM TG /CLEAR TRIGGER FOR THIS PASS. / PQ LAC PDVNA /DEQUEUE A REQUEST DAC* (R1) JMS* (DQRQ) /R1, R2, R4, R5, R6, XR AND AC ALTERED JMP WFTGR /NO, WAIT FOR TRIGGER / DAC RN TAD XADJ /SETUP XFER TO ACCESS NODE PAX /SAVE ADDR IN INDEX REG. / LAC 5,X /FETCH CAL FUNCTION CODE AND (777) /MASK FOR LOWER BITS / SAD (017) /ABORT REQUEST? JMP ABORT /YES, DO IT / SAD (024) /ATTACH REQUEST? JMP ATTACH /YES, DO IT / SAD (025) /DETACH REQUEST? JMP DETACH /YES, DO IT / SAD (027) /PUNCH REQUEST? JMP PUNCH /YES, DO IT / SAD (034) /CLOSE REQUEST? JMP CLOSE /YES, DO IT / SAD (036) /HANDLER INFO REQUEST? JMP HINF /YES, DO IT / SAD (777) /EXIT (DEASSIGNED) REQUEST? JMP DAEX /YES, DO IT / ILFUNC LAW -6 /UNIMPLEMENTED FUNCTION JMP SEV /SET EVEN VARIABLE TO -6 / / / /COMMON CODE FOR THE FOLLOWING FUNCTIONS / / / SETADR 0 LAC PDVNA DAC* (R1) LAC RN DAC* (R2) JMP* SETADR / / / RPOOL 0 LAC (POOL) DAC* (R1) LAC RN DAC* (R2) JMS* (NADD) JMP* RPOOL / /ABORT ALL I/O INITIATED BY THE INDICATED TASK / ABORT XOR 5,X /ABORT IS AN ILLEGAL FUNCTION FOR ALL TASKS SZA /EXCEPT 'IORD', WHO SETS THE LUN=0 JMP ILFUNC / JMS SETADR /SET UP REQUESTOR NODE ADDRESSES JMS* (DMTQ) /DETACH LUN & DEVICE, IF NECESSARY, AND THEN /EMPTY THE QUEUE OF ALL I/O REQUESTS MADE /BY THE TASK BEING ABORTED. R1, R2, R3, /R5, R6, X10, X11, X12, X4 & AC ARE ALTERED. JMP SEV1 /DONE / / / / / /ATTACH TO A TASK / ATTACH JMS SETADR JMS* (ALAD) /ATTACH LUN AND DEVICE /R3, R4, R5, R6, X10, X11, XR & AC ALTERED /WAS LUN ATTACHED? JMP SEV /NO, SET REV TO -24 OR -203 JMP SEV1 /YES, SET REV TO +1 / / / / / /CLOSE THE PUNCH FILE WITH AN EOF MARK / CLOSE LAC (LBF-1) /SET UP FOR PUNCH BUFFER STORE DAC* (X13) LAC (7777) /GET EOF MARK DAC* X13 /PUT IT INTO PUNCH BUFFER JMP PUN04 /PUNCH IT OUT / / / / / /DETACH FROM A TASK / DETACH JMS SETADR JMS* (DLAD) /DETACH LUN AND DEVICE /R3, R4, R5, R6, X10, X11, XR & AC ALTERED /WAS LUN DETACHED JMP SEV /NO, SET REV TO -24 OR -203 JMP SEV1 / / / / / /RETURN HANDLER INFO IN EVENT VARIABLE / HINF LAC (100000!INTLN) /SET INFO FOR DEVICE INTLN JMP SEV / / / / / /EXIT REQUEST (FROM TASK"...REA") / DAEX JMS RPOOL /RETURN REQUEST NODE TO POOL / LAC (20) /DISABLE CP INTERRUPTS PCMD / CAL DCPB /DISCONNECT INTERRUPT LINE / ISZ PDVTA /CLEAR ASSIGN INHIBIT FLAG IN PDVL NODE .INH DZM* PDVTA .ENB / CAL (10) /EXIT / /WFAB /SUBROUTINE TO WAIT FOR EVENT VARIABLE TO BE SET AND THEN TO /CHECK THE TRIGGER EVENT VARIABLE TO SEE IF AN ABORT REQUEST /SHOULD BE PROCESSED. / / WFAB 0 CAL WFECPB /WAIT FOR EV TO BE SET / LAC EV /SAVE EV VALUE DAC EVSTAT DZM EV /RESET EV FOR THIS PASS LAC TG /TEST TRIGGER BIT 2 FOR ABORT RTL SMA JMP* WFAB /NOT SET, RETURN / /REQUEUE THE ABORT REQUEST / DZM TG JMS SETADR JMS* (DQRQ) /REQUEUE THE REQUEST /R1, R2, R4, R5, XR & AC ALTERED /REQUEST FOUND? JMP* WFAB /NO, EXIT / DAC RN /SAVE NODE ADDR JMS SETADR JMS* (DMTQ) /DEQUEUE REQUEST JMS SEVRN /CLEAN UP JMP* WFAB /EXIT / / /COMMON TERMINATION OF NON PRINTING REQUESTS / / SEV1 CLA!IAC /SET REV TO +1 SEV JMS SEVRN JMP PQ / / SEVRN 0 PAL /SAVE EV VALUE LAC RN /REQUEST NODE ADDR TAD XADJ PAX / LAC 6,X /GET REQUESTS EV ADDR SNA JMP NOSET /NO REQ EV SPECIFIED / TAD XADJ /SET PARAM TO POINT AT REQ EV PAX PLA /RETRIEVE EV VALUE DAC 0,X /INSERT IT / NOSET JMS SETADR JMS* (IOCD) /DECLARE I/0 REQUEST COMPLETED /DECREMENT TRANSFERS ENDING COUNT /R4, XR, & AC ALTERED / LAC SIGEVT /DECLARE A SIGNIFICANT EVENT ISA / JMS RPOOL /RETURN REQUEST NODE TO OPOOL JMP* SEVRN /EXIT ROUTINE / / /INTERRUPT SERVICE ROUTINE / / CPINT 0 /INTERRUPT ENTRY POINT DBA /ENTER INDEX MODE DAC TEMP1 /SAVE AC / SKER /SKIP ON PUNCH ERROR JMP CPDONE /JUMP TO CONTINUE / CPERR LAC (400000) /SET AC TO 400000 FOR ERROR CPOUT DAC EV /PUT IT IN EVENT VARIABLE PCLR /CLEAR ALL PUNCH FLAGS / LAC SIGEVT /DECLARE A SIGNIFICANT EVENT ISA / CPEXIT LAC TEMP1 /RESTORE AC DBR /RETURN TO INTERRUPTED PROGRAM JMP* CPINT / CPDONE SKDN /SKIP ON CARD DONE JMP CPDATA /JUMP IF NOT CARD DONE / LAC PUNERR /TEST FOR FIRST CARD ERROR EJECT SZA /NO JMP CPSTRT /YES, GO TO START UP PUNCH / CLA!IAC /SET AC TO +1 FOR OK EXIT JMP CPOUT /GO AND SET CARD DONE / CPDATA PSKD /SKIP ON DATA REQUEST FLAG JMP CPERR /JUMP TO SOME ERROR / LAC PUNERR /TEST PUNCH ERROR FLAG FOR EJECT SZA /NO, PUNCH OUT CARD DATA JMP CPEJOF /YES, EJECT / ISZ DATACT /TRY FOR NEXT CHARACTER JMP CPCHAR /GO TO OUTPUT NEXT CHAR CPDAT1 LAC PEJECT /SET PUNCH EJECT PCMD JMP CPEXIT /GO TO EXIT / CPCHAR LAC* DATAP1 /GET NEXT CHAR PLDD /AND PUNCH IT ISZ DATAP1 /STEP TO NEXT CHAR POSITION JMP CPEXIT /GO TO EXIT / CPSTRT PCLR /CLEAR PUNCH FLAGS LAC PSTART /START PUNCH AND SET INTERRUPTS PCMD DZM PUNERR /RESET PUNCH ERROR FLAG JMP CPEXIT /GO TO EXIT / CPEJOF LAC PEJOFF /EGECT FIRST CARD WITH OFFSET JMP CPDAT1 / / / /PUNCH A CARD / / PUNCH LAC 7,X /GET REQUESTOR DATA MODE INDICATOR DAC MI AND (3) /MASK FOR MOVE INDICATOR SAD (2) /TEST FOR IOPS ASCII JMP PUN01 /YES, CONTINUE / LAW -7 /NO, SET REQUESTOR EV TO -7 JMP SEV / PUN01 LAC RN /GET REQ NODE ADDR DAC* (R2) /PUT IN R2 LAC 10,X /GET LINE BUFFER ADDRESS DAC* (R3) /PUT IN R3 DAC TEMP1 /AND SAVE IT CLA!IAC /SET AC TO 1 DAC* (R4) /PUT IN R4 JMS* (VAJX) /GO TO VERIFY & ADJUST HEADER ADDR /IS BEGINNING ADDR OK JMP ERR30 /NO, SET REQ EV TO -30 / LAW -1 /POINT X12 TO LINE ADDR -1 TAD* (R3) /GET ADJUSTED LINE BUFFER ADDR DAC* (X12) /SET X12 TO DAT / LAC* X12 /MOVE FIRST HEADER LINE TO AC LRS 10 /SHIFT TO GET ACTUAL WORD COUNT AND (776) /MASK TO GET COUNT DAC* (R4) /PUT IN R4 / AAC -2 /TEST FOR LESS THAN 2 WORDS SMA /IS IT LESS THAN 2 JMP PUN02 /NO, CONTINUE / LAW -16 /SET REQUESTORS EV TO -16 JMP SEV / PUN02 LAC TEMP1 /VERIFY LINE SIZE DAC* (R3) JMS* (VAJX) /R3, R5, XR & AC ALTERED /IS LINE SIZE OK? JMP ERR30 /NO, GO TO SET REV TO -30 / LAC* (R4) /GET WORD COUNT RCR /MODIFY TO WORD-PAIR COUNT TCA /GET COMPLEMENT AAC 1 /MODIFY COUNT TO JUST DATA DAC DATACT /SAVE IT AS -WC / AAC 16 /ADD MAX COUNT AS TEST SMA /SKIP IF BUFFER IS TO BIG JMP PUN03 LAW -20 /TRIM BUFFER OUTPUT TO 80 COLUMNS DAC DATACT / PUN03 LAC (LBF-1) /SETUP X13 AS DESTINATION INDEX FOR MOVE DAC* (X13) LAC* X12 /STEP X12 TO FIRST DATA WORD / JMS MOVASC /MOVE ASCII CHARACTERS TO HOL BUFFER / PUN04 LAC (LBF) /GET BUFFER START LOCATION DAC DATAP1 /SAVE IT FOR INTERRUPT ROUTINE LAC* (X13) /GET LAST WORD ADDR AAC 2 /ADJUST IT FOR INTERRUPT ROUTINE TCA /INVERT IT TAD DATAP1 /SUBTRACT START ADDR DAC DATACT /SAVE IT FOR INTERRUPT ROUTINE / / PUN05 PCLR /CLEAR PUNCH FLAGS / LAC PSTART /START PUNCH OPERATION AND TURN /ON INTERRUPT PCMD / JMS WFAB /WAIT FOR COMPLETION / LAC EVSTAT /CARD DONE, LOOK AT STATUS SMA /SKIP IF PUNCH IN ERROR / JMP SEV /PUT STATUS IN REQUESTORS EV /RETURN NODE TO POOL /AND TRY FOR ANOTHER QUEUED REQ. / / RETRY LAC PUNERR /CHECK FOR PREVIOUS ERROR RCL /MASK OFF 1ST PASS FLAG SZA /SKIP IF ERROR MSG TO BE PRINTED JMP PUN06 /OLD ERROR, DELAY AND RETRY / CAL TEMCPB /TYPE ERROR MESSAGE JMS WFAB /WAIT FOR COMPLETE ISZ PUNERR /SET NEW ERROR FLAG / PUN06 CAL MTCPB /DELAY JMS WFAB /WAIT FOR COMPLETE JMP PUN05 /TRY FOR PUNCH OK AGAIN / / / / / / ERR30 LAW -30 /SET EV TO -30 AND EXIT JMP SEV / / MOVASC 0 /ENTERED WITH DATACT = NEG WORD PAIR COUNT /OF DATA, X12 = LINE BUFFER POINTER, /AND X13 = HANDLER HOLLERITH BUFFER /FOR XMIT -1 / MOV01 JMS UNPACK /UNPACK NEXT WORD PAIR / ISZ DATACT /REDUCE PAIR COUNT TO CONVERT JMP MOV01 /GO DO IT AGAIN / JMP* MOVASC /EXIT SUBROUTINE / / / / / / CONVRT 0 /CONVERTS ASCII CHARACTER TO HOLLERITH /AND PLACES IT IN OUTPUT BUFFER IN /CARD PUNCH HANDLER AND (177) /MASK FOR CHARACTER PAX /PUT IN INDEX REG. LAC ATH,X /GET HOLLERITH CHARACTER CONV03 DAC* X13 /PUT IT IN OUTPUT BUFFER JMP* CONVRT /EXIT FROM SUBROUTINE / / / / / / UNPACK 0 LAC* X12 /GET 1ST WORD OF PAIR DAC DATAP1 /SAVE IT LAC* X12 /GET 2ND WORD OF PAIR DAC DATAP2 /SAVE IT / LAC DATAP1 /GET FIRST CHARACTER LRS 13 JMS CONVRT /CONVERT AND STORE IT / LAC DATAP1 /GET 2ND CHARACTER LRS 4 JMS CONVRT / LAC DATAP2 /GET 2ND WORD OF PAIR LMQ /PUT IT IN MQ REG LAC DATAP1 /GET 1ST WORD AGAIN LLS 3 /GET 3RD CHAR JMS CONVRT / LAC DATAP2 /GET 4TH CHARACTER LRS 10 JMS CONVRT / LAC DATAP2 /GET 5TH CHARACTER LRS 1 JMS CONVRT / JMP* UNPACK /EXIT SUBROUTINE / / / / /CONSTANTS / / CCPB 11 /CONNECT CPB EV /EVENT VARIABLE ADDR INTLN /INTERRUPT LINE NUMBER CPINT /INTERRUPT ROUTINE ADR / DCPB 12 /DISCONNECT CPB EV / INTLN / CPINT / / MTCPB 13 /MARK TIME CPB EV / 12 /DELTA TIME (12 TICKS) 1 /DELTA UNITS (1-TICKS) / WFTCPB 20 /WAIT FOR TRIGGER CPB TG / WFECPB 20 /WAIT FOR EVENT VARIABLE CPB EV / TEMCPB 2700 /TYPE ERR MESSAGE EV LUN 2 ERRMES / ERRMES 005002; 000000; .ASCII "*** CP NOT READY"<15> / / / PDVNA 0 /PDVL NODE ADDRESS PDVTA 0 /PDVL TRIGGER EVENT VARIABLE ADDRESS EV 0 /EVENT VARIABLE EVSTAT 0 /EV VALUE SAVE LOCATION TG 0 /TRIGGER EVENT VARIABLE XADJ 0 /PAGE BIT ADJUST PARAMETER RN 0 /REQUEST NODE ADDRESS SIGEVT 401000 /SIGNIFICANT EVENT VALUE TEMP1 0 /TEMPORY CELL DATAP1 0 /BUFFER WORD POINTER DATAP2 0 /BUFFER WORD POINTER DATACT 0 /DATA BUFFER WORD PAIR COUNT MI 0 /DATA MODE INDICATOR PUNERR 400000 /NEW ERROR FLAG PSTART 50 /START PUNCH AND ENABLE INTERRUPTS PEJECT 110 /EJECT CARD AND ENABLE INTERRUPTS PEJOFF 310 /EJECT CARD WITH OFFSET AND INTERRUPTS / / .EJECT /ASCII TO HOLLERITH CONVERSION TABLE (029 CODE) / .IFNZR CP029 / ATH 0 /NULL SHOULD BE 5403 4401 /SOH (CTRL A) 4201 /STX (CTRL B) 4101 /ETX (CTRL C) 5 /EOT (CTRL D) 1023 /ENQ (CTRL E) 1013 /ACK (CTRL F) 1007 /BEL (CTRL G) /010 2011 /BS (CTRL H) 4021 /HT (CTRL I) 1021 /LF (CTRL J) 4103 /VT (CTRL K) 4043 /FF (CTRL L) 0 /CR (CTRL H) SHOULD BE 4023 4013 /SO (CTRL N) 4007 /SI (CTRL O) /020 6403 /DLE (CTRL P) 2401 /DC1 (CTRL Q) 2201 /DC2 (CTRL R) 2101 /DC3 (CTRL S) 43 /DC4 (CTRL T) 23 /NAK (CTRL U) 201 /SYN (CTRL V) 1011 /ETB (EOB) (CTRL W) /030 2003 /CAN (CTRL X) 2403 /EM (CTRL Y) 3 /SUB (CTRL Z) 1005 /ESC (PRE) 1201 /FS (CRTL ) 2023 /GS 21 /RS 2007 /US /040 0 /BLANK 2202 /! 6 /" 102 /# 2102 /$ 1042 /% 4000 /& 22 /' /050 4022 /( 2022 /) 2042 /* 4012 /+ 1102 /, 2000 /- 4102 /. 1400 // /060 1000 /0 400 /1 200 /2 100 /3 40 /4 20 /5 10 /6 4 /7 /070 2 /8 1 /9 202 /: 2012 /; 4042 /< 12 /= 1012 /> 1006 /? /100 42 /@ 4400 /A 4200 /B 4100 /C 4040 /D 4020 /E 4010 /F 4004 /G /110 4002 /H 4001 /I 2400 /J 2200 /K 2100 /L 2040 /M 2020 /N 2010 /O /120 2004 /P 2002 /Q 2001 /R 1200 /S 1100 /T 1040 /U 1020 /V 1010 /W /130 1004 /X 1002 /Y 1001 /Z 4202 / (DEC CENT SIGN) 2006 / (DEC LOGICAL NOT) 1202 / 4006 /^ 1022 /_ /140 5402 / 5400 /SMALL A 5200 /SMALL B 5100 /SMALL C 5040 /SMALL D 5020 /SMALL E 5010 /SMALL F 5004 /SMALL G /150 5002 /SMALL H 5001 /SMALL I 6400 /SMALL J 6200 /SMALL K 6100 /SMALL L 6040 /SMALL M 6020 /SMALL N 6010 /SMALL O /160 6004 /SMALL P 6002 /SMALL Q 6001 /SMALL R 3200 /SMALL S 3100 /SMALL T 3040 /SMALL U 3020 /SMALL V 3010 /SMALL W /170 3004 /SMALL X 3002 /SMALL Y 3001 /SMALL Z 5202 / 5102 / 4402 /ALTMODE 5042 / 4005 /DEL / .ENDC / .EJECT /ASCII TO HOLLERITH CONVERSION TABLE (026 CODE) / .IFZER CP029 / ATH 0 /NULL SHOULD BE 5403 4401 /SOH (CTRL A) 4201 /STX (CTRL B) 4101 /ETX (CTRL C) 5 /EOT (CTRL D) 1023 /ENQ (CTRL E) 1013 /ACK (CTRL F) 1007 /BEL (CTRL G) /010 2011 /BS (CTRL H) 4021 /HT (CTRL I) 1021 /LF (CTRL J) 4103 /VT (CTRL K) 4043 /FF (CTRL L) 0 /CR (CTRL M) SHOULD BE 4023 4013 /SO (CTRL N) 4007 /SI (CTRL O) /020 6403 /DLE (CTRL P) 2401 /DC1 (CTRL Q) 2201 /DC2 (CTRL R) 2101 /DC3 (CTRL S) 43 /DC4 (CTRL T) 23 /NAK (CTRL U) 201 /SYN (CTRL V) 1011 /ETB (EOB) (CTRL W) /030 2003 /CAN (CTRL X) 2403 /EM (CTRL Y) 3 /SUB (CTRL Z) 1005 /ESC (PRE) 1201 /FS (CTRL ) 2023 /GS 21 /RS 2007 /US /040 0 /BLANK 4006 /! 1022 /" 112 /# 1006 /$ 1042 /% 2006 /& 12 /' /050 1042 /( 4042 /) 2042 /* 4000 /+ 1102 /, 2000 /- 4102 /. 1400 // /060 1000 /0 400 /1 200 /2 100 /3 40 /4 20 /5 10 /6 4 /7 /070 2 /8 1 /9 2202 /: 1202 /; 4012 /< 102 /= 2012 /> 4202 /? /100 42 /@ 4400 /A 4200 /B 4100 /C 4040 /D 4020 /E 4010 /F 4004 /G /110 4002 /H 4001 /I 2400 /J 2200 /K 2100 /L 2040 /M 2020 /N 2010 /O /120 2004 /P 2002 /Q 2001 /R 1200 /S 1100 /T 1040 /U 1020 /V 1010 /W /130 1004 /X 1002 /Y 1001 /Z 2022 / (DEC CENT SIGN) 6 / (DEC LOGICAL NOT) 4022 / 22 /^ 202 /_ /140 5402 / 5400 /SMALL A 5200 /SMALL B 5100 /SMALL C 5040 /SMALL D 5020 /SMALL E 5010 /SMALL F 5004 /SMALL G /150 5002 /SMALL H 5001 /SMALL I 6400 /SMALL J 6200 /SMALL K 6100 /SMALL L 6040 /SMALL M 6020 /SMALL N 6010 /SMALL O /160 6004 /SMALL P 6002 /SMALL Q 6001 /SMALL R 3200 /SMALL S 3100 /SMALL T 3040 /SMALL U 3020 /SMALL V 3010 /SMALL W /170 3004 /SMALL X 3002 /SMALL Y 3001 /SMALL Z 5202 / 5102 / 4402 /ALTMODE 5042 / 4005 /DEL / .ENDC / / / / .END START