ASMB,R HED * RTE HP2892A CARD READER DRIVER, DVR11 *** NAM DVR11 29030-60001 REV 1710 3-1-77 ENT I.11,C.11 EXT $UPIO * SUP * SPC 4 * *************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * *************************************************************** * ***HP 2892A RTE DVR 11*** * * SOURCE TAPE: 29030-80001 * RELOC. TAPE: 29030-60001 * SMALL PROG.MANUAL: 29030-95001 * * REVISION B * JUNE 1974 A.M. WERNICK * * REV. 1710 3-1-77 * * * THIS DRIVER CAN CONVERT EITHER EBCDIC OR BCD CARDS: SPC 1 * WHEN CONFIGURING THIS DRIVER INTO RTE SYSTEM, * ASSIGN CARD READER THREE LOGICAL UNIT NUMBERS * LU#N = READER,SUBCHANNEL 0 * LU#M = READER,SUBCHANNEL 1 * LU#L = READER,SUBCHANNEL 2 * TO CONVERT EBCDIC PUNCH SET - ADDRESS READER AS SUBCHANNEL 0 * TO CONVERT BCD PUNCH SET - ADDRESS READER AS SUBCHANNEL 1 * TO CONVERT EBCDIC-RDTS PUNCH SET - ADDRS READER AS SUBCHN 2 SPC 2 * THIS CARD READER DRIVER PROCESSES READ AND CONTROL REQ'S. * WRITE REQ'S AND ILLEGAL CONTROL REQ'S ARE REJECTED. SPC 1 * TO PROCESS A READ, STATUS IS FIRST CHECKED. IF IT IS * "OK TO PICK" A PICK COMMAND IS ISSUED AND A DMA TRANSFER * IS BEGUN. IF STATUS IS NOT "OK TO PICK" A NOT READY * RETURN IS MADE TO THE SYSTEM. * THE DMA TRANSFER IS INTO THE DRIVER'S INTERNAL BUFFER. * THE DRIVER IS ENTERED UPON DEVICE CONTROLLER INTERRUPT. * THE CARD DATA IS CONVERTED FROM COLUMN IMAGE TO THE FORMAT * * SPECIFIED BY THE READ REQUEST AND STORED INTO THE CALLING * PROGRAM'S BUFFER. * THE THREE FORMATS A READ REQUEST CAN SPECIFY ARE: * ASCII SUBFUNCTION 0 * PACKED BINARY SUBFUNCTION 3 * COLUMN BINARY SUBFUNCTION 1 SPC 1 * NO CONTROL REQUESTS ARE PROCESSED * * * *****EQT USAGE***** * * EQT5 STATUS BITS HAVE THE FOLLOWING * MEANINGS WHEN SET TO 1 : * * BIT 0 CARD READER IS ON LINE BUT NOT READY * OR CARD READER IS OFF LINE. * BIT 1 AN ILLEGAL CARD CODE WAS ENCOUNTERED * DURING THE PREVIOUS READ OPERATON OR * THE CARD READER HAD HARDWARE TROUBLE. * BIT 2 CARD READER IS OFF LINE. * BIT 3 TIMING ERROR OR PICK FAILURE WAS SENSED * DURING PREVIOUS READ OPERATION. * BIT 4 PICK FAILURE OR CARD MOTION ERROR WAS * SENSED DURING PREVIOUS READ OPERATION. * BIT 5 IF BOTH BITS 3 & 5 ARE ON, NO DATA WAS * TRANSMITTED DURING PREVIOUS READ OPERATION. * IF BIT 3 IS OFF & BIT 5 IS ON, THE PREVIOUS * READ REQUEST WAS REJECTED BECAUSE THE HOPPER * WAS EMPTY OR THE STACKER WAS FULL. * BIT 6 STACKER IS FULL. * BIT 7 THE PREVIOUS READ OPERATION LEFT THE INPUT * HOPPER EMPTY AND THE END OF FILE SWITCH * WAS ON DURING THE READ OPERATION. * * EQT6 FUNCTION BITS HAVE THE FOLLOWING MEANINGS: * * BIT 6 MODE BIT: 0=ASCII,1=BINARY * BIT 7 'V' BIT: 0=COLUMN BINARY,1=PACKED BINARY * * EQT7 USER BUFFER ADDRESS * * EQT8 USER BUFFER LENGTH * * EQT9 CURRENT DMA CHANNEL * * EQT10 CARD READER STATUS BITS ARE DEFINED AS FOLLOWS: * * BIT 0 CARD READER NOT READY,OFF LINE, OR BUSY * BIT 1 TROUBLE DURING READ * BIT 2 CARD READER OFF LINE * BIT 3 DATA LOST * BIT 4 NOT USED * BIT 5 HOPPER EMPTY OR STACKER FULL * BIT 6 STACKER FULL * BIT 7 END OF FILE AND HOPPER EMPTY * BIT 8 PICK STATUS * BIT 9 LIGHT/DARK READ ERROR * BIT 10 NOT USED * BIT 11 MOTION/PICK FAILURE * BIT 12 COMPUTER POWER TURN-ON/PRESET OR * END OF OPERATION INTERRUPT * BIT 13 NOT USED * BIT 14 NOT USED * BIT 15 END OF OPERATION * * EQT11 SUBCHANNEL FOR CONVERSION:0=STD EBCDIC * 1=BCD * 2=RDTS EBCDIC * * EQT12 END OF FILE/HOPPER EMPTY FLAG * * EQT13 CARD READER NOT READY/OFF LINE FLAG * * EQT15 DEVICE TIME OUT CLOCK * SKP * INITIATION SECTION. * * I.11 NOP ENTRY POINT. LDB CHAN STB EQT9,I STORE CURRENT DMA CHN JSB SETIO SET I/O INSTRUCTIONS FOR CR. STA EQT5,I SET NEW STATUS IN EQT TABLE LDA EQT4,I SET UP EQT4 SO THAT DRIVER IOR BIT12 CAN HANDLE ITS OWN STA EQT4,I TIME OUTS LDA I.11 SET COMMON EXIT STA C.11 LDA EQT6,I LOAD THE REQUEST CONTROL WORD. AND DEC3 ISOLATE THE REQUEST CODE. CPA DEC3 IS REQUEST A CONTROL REQUEST? JMP I.A.4 YES, EXIT SLA,ARS NO; IS THE REQUEST TO READ? JMP READ YES, CONTINUE. JMP C.11,I RETURN TO THE USER. A=1 ILL. R\W SPC 1 A.2 LDA DEC2 NO, LOAD DECIMAL 2 INTO A REG. JMP C.11,I RETURN TO THE USER. SPC 1 READ LDA EQT12,I GET EOF/HOPR EMTY FLG AND B200 GET BIT 7 SZA EOF AND HOPR EMTY? JMP EOF YES,EXIT STA EQT15,I CLEAR TO CLOCK READ0 STB EQT13,I CR NOT RDY/OFF LINE FLAG SLB IS THE CR NOT READY OR OFF-LINE? JMP NR YES, GO DOWN THE UNIT. LDA EQT4,I SAVE AND B100 SUBCHANNEL RAR FOR STA EQT11,I CONVERSION LDA INDEX LOAD THE CR CHANNEL NUMBER. DMA EQU 06B STANDARD "DMA" CHANNEL NUMBER. DMA.0 OTA DMA ASSIGN THE "DMA" CHANNEL. LDA BUFAD LOAD THE INTERNAL BUFFER ADDRESS. DMA.1 CLC DMA-4 PREPARE THE ADDRESS REGISTER. DMA.2 OTA DMA-4 OUTPUT THE BUFFER ADDRESS. LDA DM80 LOAD: A-80. DMA.3 STC DMA-4 PREPARE DMA FOR WORD COUNT DMA.6 OTA DMA-4 OUTPUT THE NEGATIVE WORD LENGTH. CR.0 STC CR,C ISSUE A PICK COMMAND TO THE CR. DMA.7 STC DMA,C ACTIVATE THE "DMA" CHANNEL. * DMA10 CLC DMA INHIBIT DMA INTERRUPT A.0 CLA,RSS CLEAR A REG. A.3 LDA DEC3 LOAD: A3. JMP C.11,I RETURN TO THE USER. SPC 1 NR LDB DM80 SET UP TIME OUT STB EQT15,I LDB EQT11 BYPASS TIMEOUT STB EQT15 CLEAR JMP A.3 EXIT SPC 1 EOF IOR EQT5,I UPDATE STATUS BIT 7 STA EQT5,I STORE NEW STATUS CLB STB EQT12,I CLEAR EOF/HOPR EMTY FLG ** JMP ON1 I.A.4 LDA EQT12,I GET EOF FLAG AND B200 LOOK AT BIT 7 (EOF) XOR EQT5,I IF SET WE HAVE NOT YET ISSUED NEXT READ TO RETURN STA EQT5,I EOF. IF NOT SET LEAVE STATUS AS IS ON1 LDA DEC4 JMP C.11,I RETURN ** SPC 2 BIT12 OCT 10000 SPC 2 SETIO NOP ENTRY POINT. STA INDEX STORE THE CR CHANNEL NUMBER. IOR LIA.0 MAKE LIA INSTRUCTION STA LIA.1 STA CR.3 ADA B100 OTA CARD READER STA CR.2 STA OTA.2 IOR B1100 STC,C CARD READER STA CR.0 ** LDA INDEX SET CLC ON CR FLAG IOR CLC.0 STA CLCCR ** LDA STF.0 CONFIGURE DMA STF INSTRUCTION IOR EQT9,I STA DMA.8 CR.2 OTA CR UPDATE THE CR STATUS REGISTER. ADA B500 OTA DMA STA DMA.0 IOR B1100 STC,C DMA STA DMA.7 ADA B3000 CLC DMA (10670D - 4 ) STA DMA10 LDA EQT9,I GET DMA CHANNEL ADA N4 IOR LIA.0 LIA DMA-4 STA DMA.9 ADA B100 OTA DMA-4 STA DMA.2 STA DMA.6 ADA B100 STA DMA.3 STC DMA-4 IOR CLC.0 CLC DMA-4 STA DMA.1 CR.3 LIA CR LOAD THE CR STATUS REGISTER. STA EQT10,I SAVE STATUS WORD AND M377 GET BITS 0 - 7 ONLY CPA DEC3 ARE BITS 0 AND 1 0N , OTHERS OFF LDA B50 YES, SET BITS 3 AND 5 ON IOR EQT10,I ADD ORIGINAL STATUS BACK IN ALF PUT BIT 11 IN BIT 15 SSA PICK OR MOTION CHECK?? IOR B1400 YES, SET BITS 4 AND 5 TO 1 RAL PUT BIT 10 TO BIT 15 SSA COMPARE CHECK IOR B40 YES, SET BIT ZERO TO 1 ALF,ALF RESET STATUS WORD ALF,RAR TO ITS NORMAL CONFIGURATION ELA,RAR SHIFT THE "EOP" BIT TO "E". AND M377 ISOLATE BITS 7-0. LDB A SAVE THE STATUS IN "B". LDA EQT5,I LOAD THE STATUS WORD. AND M1774 REMOVE THE OLD STATUS. IOR B INCLUDE THE NEW STATUS. JMP SETIO,I RETURN. STF.0 STF 0 CLC.0 CLC 0 LIA.0 LIA 0 SPC 2 B100 OCT 100 B200 OCT 200 B700 OCT 700 CRSET NOP LAST EBCDIC CHAR SET SPC 2 * STD HP EBCDIC CHARS HWPTB DEF *+1 ASC 1,!$ ASC 1,;] ASC 1,+^ SPC 1 * RDTS EBCDIC CHARS OCT 56444 RDTS CHAR = VERT BAR,$ OCT 35536 RDTS CHAR = ;,] OCT 25441 RDTS CHAR = +,UNDERSCORE SPC 2 READ2 RBR,SLB WERE THERE ANY I/O ERRORS? JMP OPERR YES, GO FLAG OPERATOR ATTENTION. CPA EQT8,I NO; WAS A RECORD BEING SKIPPED? JMP R.ERR YES, GO INITIALIZE ONLINE FLAG. STA DMA.7 NO, INITIALIZE THE WORD COUNTER. DMA.9 LIA DMA-4 LOAD THE WORD COUNT REGISTER. CPA DM80 WAS ANY DATA TRANSMITTED? JMP NREDY NO, GO SET I/O ERROR STATUS. CMA,INA YES, WORD COUNT RESIDUE POSITIVE. ADA DM80 "SUBTRACT": 80 - RESIDUE. STA DMA.9 STORE THE WORD COUNT INDEX. LDB BUF LOAD INTERNAL BUFFER ADDRESS. STB DMA.8 STORE BUFFER ADDRESS INDEX. LDB EQT6,I LOAD THE FUNCTION REQUEST CODE. BLF,BLF SHIFT "M-BIT" TO BIT 15. RBL SHIFT "M-BIT" TO BIT 15. SSB IS THE MODE BINARY? JMP BINRY YES, GO PROCESS BINARY CARD. CLB NO, ENTER: B0. STB DMA.2 INITIALIZE THE COLUMN COUNTER. STB DMA.1 INITIALIZE THE CHARACTER COUNTER. LDA EQT4,I GET THE SUBCHANNEL NO. AND B700 CPA B100 BCD? JMP OUTS YES-DONT FUSS WITH TABLE AND B200 STD EBCDIC OR RDTS EBCDIC? CPA CRSET SAME AS LAST CHAR SET? JMP OUTS YES, DONT OVERLAY TABLE STA CRSET STORE LAST CHAR SET FLG LDB HWPTB ADDRESS OF STD EBCDIC TABLE CPA B200 RDTS EBCDIC? ADB DEC3 YES, USE RDTS CHARS LDA 1,I GET 1ST CHAR FOR OVERLAY STA LASC1 OVERLAY 1ST CHAR INB ADDRESS OF NEXT CHAR LDA 1,I GET 2ND CHAR FOR OVERLAY STA LASC2 INB LDA 1,I STA LASC3 OUTS LDA DMA.9 RESTORE A REG SPC 1 LDB EQT8,I LOAD THE ORIGINAL REQUEST LENGTH. SSB IS THE REQUEST IN WORDS? CMB,INB,RSS NO, COMPLEMENT CHARACTER COUNT. RBL YES, CONVERT WORDS TO CHARACTERS. SSB CHARACTER LENGTH OVERFLOW? JMP .16K YES, CONTINUE. ADA B "SUBTRACT": REQUEST- CARD LENGTH. CMB,INB NEGATE THE CHARACTER COUNT. SSA IS THE REQUEST LESS THAN CARD? STB DMA.9 YES, STORE THE WORD COUNT INDEX. .16K LDA EQT7,I LOAD THE USER BUFFER ADDRESS. CLE,ELA SHIFT TO FORM CHARACTER ADDRESS. STA DMA.6 SAVE THE CHARACTER ADDRESS. LOOP LDA DMA.8,I LOAD THE DATA COLUMN. ISZ DMA.2 INCREMENT THE COLUMN COUNTER. SZA,RSS IF CHARACTER IS BLANK, MAKE IT ONE. JMP ZERO SET CHARACTER A BLANK. LDB DMA.2 LOAD THE CURRENT COLUMN COUNTER. STB DMA.1 UPDATE RETURN COLUMN COUNT. * AND B7000 MASK OFF ALL BUT BITS 12,11,0 CLB CLEAR B FOR LATER SZA,RSS ANY HIGH PUNCHES ? JMP NOHI NO, TEST FOR LOW PUNCHES * CPA B1000 BIT 0 PUNCHED ? LDB B40 YES, LOAD 32 CPA B2000 BIT 11 PUNCHED ? LDB DEC16 YES, LOAD 16 CPA B4000 BIT 12 PUNCHED ? LDB DEC48 YES, LOAD 48 SZB,RSS WAS ONLY ONE COLUMN PUNCHED ? JMP BAD NO, ILLEGAL PUNCH * NOHI STB DMA.0 SET HIGH FIELD WEIGHT XOR DMA.8,I ISOLATE LOWER BITS OF COLUMN SZA,RSS ANY LOW BITS PUNCHED ? JMP NOLOW NO, CHARACTER COMPLETED. * CCE,SLA BIT 9 SET ? LDB DEC9 YES, LOAD WEIGHT SLA,ARS BIT 9 SET ? JMP SET YES, TEST FOR MORE BITS. * SLA,ARS BIT 8 SET ? CLB,RSS YES,CLEAR B FOR LATER JMP CONTN BIT 8 WAS NOT SET. CLE,SZA,RSS WAS ONLY BIT 8 SET ? JMP BIT8 YES, EXIT TO FORM CHARACTER. * CONTN BSS 0 * LDB DEC7 LOAD WEIGHT COUNTER SLA,ARS IS BIT 7 SET ? JMP SET YES, CHECK FOR OTHER PUNCHES * LDB DEC6 SIX SLA,ARS IS BIT 6 SET ? JMP SET YES LDB DEC5 FIVE SLA,ARS IS BIT 5 SET ? JMP SET YES LDB DEC4 FOUR SLA,ARS IS BIT 4 SET ? JMP SET YES LDB DEC3 THREE SLA,ARS IS BIT 3 SET ? JMP SET YES LDB DEC2 TWO SLA,ARS IS BIT 2 SET ? RSS YES,SKIP JUMP. JMP ONE NO, BIT 1 MUST BE. SET SZA ANY OTHER PUNCHES ? JMP BAD.1 YES, ILLEGAL COMBINATION SEZ,RSS IS THE BIT 8 FLAG ON ? BIT8 ADB D8 YES, ADD WEIGHT FOR IT. BIT1 ADB DMA.0 ADD WEIGHT FOR FIELD BITS. NOLOW SLB,BRS PLACE ODD BIT IN A-REG. CLA,INA SET ODD CHARACTER FLAG ADB TABLE FIND PLACE IN TABLE. ADB EQT11,I ADDS 40 FOR BCD IF REQUESTED CLE,SZA ODD CHARACTER ? CCE LDA B,I GET WORD WITH TWO CHARS. SEZ,RSS ODD CHARACTER ? ALF,ALF YES, PUT IT INTO BOTTOM. AND M377 ISOLATE THE CHARACTER. LEGAL BSS 0 ISZ DMA.8 INCREMENT BUFFER ADDRESS POINTER. LDB DMA.6 LOAD CHARACTER BUFFER ADDRESS. CLE,ERB SHIFT, FORM WORD BUFFER ADDRESS. SEZ,RSS IS NEW CHARACTER TO BE LOWER? ALF,SLA,ALF NO, SHIFT TO HIGH ORDER; SKIP. IOR B,I YES, INCLUDE THE HIGH ORDER PART. STA B,I STORE THE WORD IN USER BUFFER. ISZ DMA.6 INCREMENT BUFFER ADDRESS POINTER. ISZ DMA.9 IS THE BUFFER EXHAUSTED? JMP LOOP NO, GO PROCESS NEXT COLUMN. LDB DMA.1 YES, LOAD # NON-BLANK CHARACTERS. LDA EQT8,I LOAD THE ORIGINAL REQUEST TYPE. CLE,SSA,RSS WAS THE REQUEST IN CHARACTERS? ERB NO, CONVERT CHARACTERS TO WORDS. END CLA,SEZ WAS THE CHARACTER COUNT ODD? INB YES, INCREMENT THE WORD COUNT. JMP C.11,I GO TO COMPLETION RETURN. * ZERO LDA B40 LOAD ASCII BLANK JMP LEGAL STORE LEGAL CHARACTER * BAD LDB EQT11,I DO EXTRA SZB,RSS BCD TESTS? JMP BAD.1 NO * * CPA B3000 11 - 0 PUNCH ? JMP BCDEX YES, MAY BE ! CPA B5000 12 - 0 PUNCH ? JMP BCDQU YES, MAY BE ? * BAD.1 LDA EQT5,I SET ILLEGAL PUNCH STATUS IOR DEC2 STA EQT5,I QUES LDA M77 LOAD ASCII QUESTION MARK. JMP LEGAL STORE CHARACTER * ONE CLB,SEZ,INB,RSS SET WEIGHT, TEST BIT 8 FLAG ON ? JMP BAD.1 BIT 8 FLAG WAS ON, ILLEGAL PUNCH. JMP BIT1 JUST BIT 1 PUNCHED * DEC5 DEC 5 DEC6 DEC 6 B3000 OCT 3000 * * BCDEX XOR DMA.8,I TEST FOR OTHER BITS SZA JMP BAD.1 ILLEGAL PUNCHES LDA B41 LOAD ! JMP LEGAL STORE SPECIAL CHARACTER * BCDQU XOR DMA.8,I TEST FOR OTHER PUNCHES SZA JMP BAD.1 JMP QUES GO LOAD AND STORE ? * B41 OCT 41 ! B5000 OCT 5000 SKP BINRY CCE,SLB CONVERT FROM PACKED BINARY? JMP PAK.B YES, GO PROCESS PACKED BINARY. JSB INDEX NO, GO COMPUTE WORD COUNT INDEX. COL.B LDA DMA.8,I LOAD THE DATA COLUMN. ISZ DMA.8 INCREMENT BUFFER ADDRESS POINTER. STA DMA.6,I STORE THE WORD IN USER BUFFER. ISZ DMA.6 INCREMENT BUFFER ADDRESS POINTER. ISZ DMA.7 INCREMENT THE WORD COUNTER. ISZ DMA.9 IS THE BUFFER EXHAUSTED? JMP COL.B NO, CONTINUE. TLOG LDA EQT8,I LOAD THE ORIGINAL REQUEST TYPE. LDB DMA.7 LOAD THE TRANSMISSION LOG. CLE,SSA WAS THE REQUEST IN CHARACTERS? BLS YES, CONVERT WORDS TO CHARACTERS. JMP END GO ISSUE A COMPLETION RETURN. SPC 2 INDEX NOP ENTRY POINT. LDB EQT7,I LOAD THE USER BUFFER ADDRESS. STB DMA.6 SAVE THE USER BUFFER ADDRESS. LDB EQT8,I LOAD THE ORIGINAL REQUEST LENGTH. SSB,RSS IS THE REQUEST IN WORDS? CMB,INB,RSS YES, COMPLEMENT WORD COUNT; SKIP. BRS NO, CONVERT CHARACTERS TO WORDS. CMA,INA MAKE THE RECORD LENGTH POSITIVE. ADA B "SUBTRACT": RECORD COUNT-REQUEST. SSA,RSS IS THE REQUEST LESS THAN RECORD? STB DMA.9 YES, STORE THE REQUEST LENGTH. JMP INDEX,I RETURN. SPC 1 PAK.B LDA DMA.8,I LOAD THE FIRST DATA COLUMN. RAR,RAR SHIFT ROWS 12-5 TO LOWER. RAR,RAR SHIFT ROWS 12-5 TO LOWER. AND M377 ISOLATE THE RECORD WORD LENGTH. CMA,INA,SZA,RSS IS THE RECORD LENGTH ZERO(0)? JMP NREDY YES, GO FLAG WORD COUNT ERROR. STA DMA.9 NO, SAVE THE RECORD WORD LENGTH. JSB INDEX GO COMPUTE THE WORD COUNT INDEX. LDA DMA.9 LOAD THE WORD COUNT INDEX. ADA D60 "SUBTRACT": 60- WORD COUNT INDEX. SSA IS THE WORD COUNT > 60? JMP NREDY YES, GO FLAG WORD COUNT ERROR. LDB DMA.8,I NO, LOAD DATA COLUMN 1 OF 4. ISZ DMA.8 INCREMENT BUFFER ADDRESS POINTER. UNPAK BLF SHIFT COLUMN TO BITS 15-4. STB DMA.1 SAVE THE DATA COLUMN. LDA DMA.8,I LOAD DATA COLUMN 2 OF 4. ISZ DMA.8 INCREMENT BUFFER ADDRESS POINTER. ALF,ALF SHIFT ROW 12 TO BIT 3. LDB A SAVE THE DATA COLUMN. AND M17 ISOLATE ROWS 12-1. IOR DMA.1 INCLUDE COLUMN #1. JSB STORE GO STORE DATA WORD 1 OF 3. AND M1774 ISOLATE ROWS 2-9. STA DMA.1 SAVE THE PARTIAL DATA COLUMN. BLF,BLF SHIFT ROW 12 TO BIT 7. BLF SHIFT ROW 12 TO BIT 7. LDA B LOAD DATA COLUMN 3 OF 4. AND M377 ISOLATE ROWS 12-5. IOR DMA.1 INCLUDE COLUMN #2. JSB STORE GO STORE DATA WORD 2 OF 3. AND B17 ISOLATE ROWS 6-9. IOR B INCLUDE DATA COLUMN 4 OF 4. JSB STORE GO STORE DATA WORD 3 OF 3. JMP UNPAK GO PROCESS THE NEXT 4 COLUMNS. SPC 2 STORE NOP ENTRY POINT. STA DMA.6,I STORE THE BINARY DATA WORD. ISZ DMA.6 INCREMENT BUFFER ADDRESS POINTER. ISZ DMA.7 INCREMENT THE WORD COUNTER. LDA B LOAD THE PREVIOUS DATA COLUMN. LDB DMA.8,I LOAD THE NEXT DATA COLUMN. ISZ DMA.8 INCREMENT BUFFER ADDRESS POINTER. ISZ DMA.9 IS THE BUFFER EXHAUSTED? JMP STORE,I NO, RETURN. JMP TLOG YES, GO LOAD TRANSMISSION LOG. SPC 1 OPERR LDA DEC3 LOAD: A3. JMP R.ERR GO INITIALIZE THE ONLINE FLAG. SPC 1 NREDY LDA EQT5,I LOAD THE STATUS WORD. IOR DEC2 INCLUDE THE I/O ERROR STATUS. STA EQT5,I UPDATE THE STATUS WORD. JMP R.ERR NO, GO INITIALIZE ONLINE FLAG. SPC 1 NEOF OCT 177537 BIT 7 MASK SKP * COMPLETION SECTION. SPC 1 C.11 NOP ENTRY POINT. * * A REG CONTAINS INTERRUPT SLOT * LDB EQT13,I IS AN INTERRUPT EXPECTED ? SLB JMP EXTRA NO, SET UP TIMEOUT & EXIT. ** LDB EQT1,I CHECK FOR SPURIOUS INTERRUPT. I.E SZB,RSS WHEN POWER TURNED OFF JMP EXTRA SPURIOUS INTERRUPT ** JSB SETIO SET I/O INSTRUCTIONS FOR CR. STA EQT12,I SAVE STATUS WORD IN EQT12 ALF,ALF PUT BIT 7 TO BIT 15 SSA IF BIT 7 NOT SET SKIP JMP BY IF SET THEN SKIP OTHER TESTS RAL,RAL SET BIT 5 TO 15 POSITION SSA,RSS IF NOT SET THEN NO CHANGE JMP BY CONTINUE RAL,RAL SET BIT 3 TO 15 POSITION SSA IS BIT 3 SET 1 JMP BY YES, SKIP CHANGE CLB NO,SET EQT10,I STB EQT10,I FOR HOP MTY/STACK FUL LDA EQT12,I RESTORE STATUS TO A-REGISTER AND BIT51 CLEAR BITS 5 AND 1 RSS SKIP NEXT LOAD BY LDA EQT12,I RESTORE STATUS TO A-REGISTER AND NEOF INCLUDE EOF/HOPR EMTY STATUS STA EQT5,I RESET EQT WORD TO NEW STATUS CLA,CME ENTER: A0; COMPLEMENT "EOP". DMA.8 STF DMA SET FLAG ELA,SLA IS THE END-OF-OPERATION FLAG ON? R.ERR CLB,RSS ENTER: B0; SKIP. JMP READ2 YES, GO PROCESS THE CARD IMAGE. LDA EQT10,I LOAD HE/SF FLAG WORD SZA,RSS IF SET 0 JMP A.2 THEN HE/SF, EXIT A 2 LDA EQT5,I GET STATUS WORD SLA,RSS IS BIT 0 SET TO 1 JMP A.0 YES, NO TROUBLE, EXIT A 0 RAR PUT BIT 1 TO 0 POSITION D8 SLA IS BIT 1 SET TO 0 ? JMP A.3 EXIT A - 3 CLA,INA IF NONE OF ABOVE EXIT A - 1 JMP C.11,I SPC 1 EXTRA ISZ C.11 ADVANCE TO CONT. RETURN CLA CLEAR TO CLOCK STA EQT15,I ** OTA.2 OTA CR UPDATE CR STATUS LIA.1 LIA CR IF STILL NOT SLA,RSS READY IF BIT ZERO CLR JMP $UPIO GO UP CR CLCCR CLC CR INHIBIT ANY MORE SPURIOUS INTERRUPTS JMP NR NOW SET FOR NOT READY ** SKP CR EQU 11B FAKE CARD READER SELECT CODE BUF DEF I.BUF INPUT BUFFER ADDRESS DEFINITION. BUFAD DEF I.BUF,I "DMA" BUFFER ADDRESS FOR INPUT. B17 OCT 170000 N4 DEC -4 DEC2 DEC 2 DEC3 DEC 3 DEC4 DEC 4 DEC7 DEC 7 DEC9 DEC 9 DEC16 DEC 16 DEC48 DEC 48 M17 OCT 17 M377 OCT 000377 M1774 OCT 177400 D60 DEC 60 B40 OCT 40 B1400 OCT 1400 B50 OCT 50 B1000 OCT 1000 B2000 OCT 2000 B4000 OCT 4000 B7000 OCT 7000 B1100 OCT 1100 B500 OCT 500 M77 OCT 77 ASCII QUESTION MARK BIT51 OCT 177735 MASK FOR BITS 5 AND 1 DM80 DEC -80 I.BUF BSS 80 INTERNAL DATA BUFFER. LAST BSS 0 SPC 1 TABLE DEF *+1 ASCII LOOKUP TABLE START * * EBCDIC CARD PUNCH CHARACTER SET * ASC 13, 123456789:#@'="-JKLMNOPQR LASC1 ASC 1,!$ ASC 1,*) LASC2 ASC 1,;] ASC 15,0/STUVWXYZ\,%_>?&ABCDEFGHI[.<( LASC3 ASC 1,+^ SKP * BCD CARD PUNCH CHARACTER SET * ASC 16, 123456789?=':>?-JKLMNOPQR?$*];] ASC 16,0/STUVWXYZ?,(_\?+ABCDEFGHI[.)[<^ SKP SPC 2 EQT1 EQU 1660B EQT4 EQU 1663B EQT5 EQU 1664B EQT6 EQU 1665B EQT7 EQU 1666B EQT8 EQU 1667B EQT9 EQU 1670B EQT10 EQU 1671B EQT11 EQU 1672B EBCDIC OR BCD CHAN EQU 1673B CURRENT "DMA" CHANNEL NUMBER. EQT12 EQU 1771B EOF/HOPR EMTY FLAG EQT13 EQU EQT12+1 CR NOT RDY/OFF LINE FLAG EQT15 EQU EQT12+3 A EQU 0 B EQU 1 END