.TITLE PRA. /COPYRIGHT 1969, 1970, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. /PRA. --- BACKGROUND/FOREGROUND MONITOR SYSTEM. /PRA.=IOPS PAPER TAPE READER HANDLER /M. SIFNAS/D. LENEY /5 SEP 69 /CALLING SEQUENCE: /.INIT /CAL+.DAT SLOT(9-17) /1 /0 /0 /.READ /CAL+D.M.(6-8)+.DAT SLOT (9-17) /10 /LINE BUF. ADDR. /-WC OF L.B. (2'S COMP) /.WAIT /CAL+.DAT SLOT (9-17) /12 RSF=700101 RCF=700102 RRB=700112 RSA=700104 RSB=700144 .SCOM=100 .GLOBL PRA. PRA. JMS PRSWAP 0 /FGD BUSY REG 0 /BGD BUSY REG 0 /FGD CLOSE REG 0 /BGD CLOSE REG PRSWCH XX /ION OR IOF PRWRD6 XX /ION OR IOF OR DBR PROUT XX /RETURN POINTER /START OF LIVE/BACKUP DATA REGISTERS PRWD10 XX /JMP TO FUNCTION XX /WHOSE CAL (0=FGD,1=BGD) PR8CT XX /.DAT SLOT# - 8TH BIT COUNT PARER XX /UNIT # AND CAL ADDRESS - PARITY COUNT PTRDM XX /WD 14 - DATA MODE PRLBHP XX /WD 15 - LINE BUFFER ADDR PTRWC XX /-WC OR BUFFER SIZE POINTER PRWD17 XX /WD 17 - REAL TIME REQUEST /END OF DATA REGISTERS /START OF FUNCTION DISPATCH TABLE JMP PRIN /1=.INIT JMP PRIGN /2=.OPER-IGNORED JMP PRIGN /3=.SEEK-IGNORED JMP PRER6 /4=.ENTER-ERROR JMP PRER6 /5=.CLEAR-ERROR JMP PRIGN /6=.CLOSE-IGNORED JMP PRIGN /7=.MTAPE-IGNORED PREAD JMP PRRED /10=.READ,.REALR JMP PRER6 /11=.WRITE,.REALW - ERROR PTR57 0 /12=.WAIT,.WAITR-BY CAL HANDLER - 5/7 CHAR POS JMP PRER6 /13=.TRAN-ERROR PRSC35 0 /SAVED .SCOM+35 (USED BY CAL HANDLER) PRSTOP /STOP FGD I/O PRSTOP /STOP BGD I/O 0 /HANDLER ID = 0 PRER7 LAW 7 /ILLEGAL DATA MODE SKP PRER6 LAW 6 /ILLEGAL FUNCTION DAC PRCHAR LAC PARER DAC PREROR+2 /PRINT CAL ADDR LAC PRCHAR XOR (4000 /SET TERMINAL ERROR BIT JMS PRERRQ JMP PRIGN PRTMP1 0 /INIT PTR ROUTINE PRIN LAC (64 DAC* PRA.+16 /STANDARD BUFFER SIZE=52(10) PRNIT LAC* (.SCOM+55 PRDTCT DAC PR8CT /DATA WORD COUNT PRCCT JMS* PR8CT /.SETUP - CHAR COUNT PRDBP RSF /LATER DATA WORD POINTER PRCKSM PTRINT /CHECKSUM (IOPS ASCII) PRCNT LAC .+2 /PARITY CHECK COUNTER PTRAC DAC PRNIT /SAVED AC PRCHAR JMP PRIGN /CHAR PROCEESSED /PAPER TAPE .READ OR .REALR ROUTINE PRRED LAW -1 DAC PRIOHC /IOPS BIN WD COUNT LAC PRLBHP /LINE BUFFER HEADER DAC PRDBP /DATA DZM PRDTCT /CLEAR DATA COUNT LAC PTRDM /DATA MODE AND (3 SNA JMP PRNXR1 /IOPS BIN- DO NOT INDEX DATA AREA POINTER-DUMP MODE JMS PRNXWD /INDEX PAST L. B. HEADER JMS PRNXWD /FOR IOPS ASCII OR IMAGE MODES. PR1CR=. PRNXR1 LAC PTRDM /DATA MODE TAD (LAC PTRIOT DAC .+1 XX DAC PRIOT SMA JMP PRER7 LAW 17773 /5/7 CHAR. DAC PTR57 /COUNTER. DZM PRCCT /CLEAR CHAR CT. DZM PRCKSM /CLEAR CHECKSUM DZM PR8CT /CLEAR ASCII 8TH BIT SET COUNTER DZM PARER /CLEAR PARITY ERR. SWITCH LAC PRIOB4 /LAC* PRDBP DAC PRIOB7 PRIOB6 DZM* PRDBP /CLEAR NEXT DATA WORD. LAW 17775 /IOPS 3 BYTE DAC PRIOBN /BIN COUNT. PROUT2 IORS AND (1000 SZA JMP PREOM /COMMON EXIT SEQUENCE FOR CAL LEVEL. /AND INTERRUPT LEVEL ENTRIES. / / PRNOR LAC* (.SCOM+54 /ADDRESS DAC PRTMP1 /OF CALL4 LAC (400200 /RAISE TO API LEVEL 0. ISA PRIOF IOF /TURN PIC OFF. LAC PRWRD6 SAD (DBR SKP /INTERRUPT JMP PRT.6 /CAL JMS* PRTMP1 PRA.+7 /PC PRSC35 /SAVED .SCOM+35 PRT.6 LAC PRSC35 /RESTORE IN INTERRUPT DAC* (.SCOM+35 /HANDLER FLAG. PRFCLR SKP /NOP IF FLAG TO BE CLEARED DZM PRA.+1 /FOREGROUND BUSY FLAG. PRBCLR SKP /NOP IF FLAG TO BE CLEARED DZM PRA.+2 /BACKGROUND BUSY FLAG. LAC (SKP /RESET DAC PRFCLR /SWITCHES. DAC PRBCLR PRIOT XX /IOF OR IOT LAC PTRAC /RESTORE AC. DBK /FROM LEVEL 0. XCT PRA.+5 /ION OR IOF XCT PRA.+6 /ION OR IOF OR DBR XCT .+1 JMP* PRA.+7 /RETURN POINTER. / / PTRIOT RSA /IOPS BIN RSB /IMAGE BIN RSA /IOPS ASCII RSA /IMAGE ALPHA RSB /DUMP PRER7 /ILLEGAL MODE PRER7 /ILLEGAL MODE PRER7 /ILLEGAL MODE /PTR INTERRUPT SERVICE PTRINT JMP PTRPIC /PIC ENTRY DAC PTRAC /API ENTRY, SAVE AC LAC PTRINT /PIC OR API, L, EM, MP DAC PROUT DZM PTRINT /0=API ENTRY IORS SMA!CLA LAW 17740 /PIC OFF TAD PRION /PIC ON JMP PRSION PTRPIC DAC PTRAC /SAVE AC LAC* (0 /PIC-PC, L, EM, MP DAC PROUT /SAVE FOR EXIT LAC PRION PRSION DAC PRSWCH RRB /READ PTR BUFFER DAC PRCHAR LAC* (.SCOM+35 /GET CURRENT INTERRUPT FLAG DAC PRSC35 /SAVE IT CLA!CMA /SET INTERRUPT FLAG FOR THIS ENTRY DAC* (.SCOM+35 LAC PTRINT SZA /IF ENTRY WAS NOT ON API, THEN CLEAR 0 DZM* (0 /PIC ENTRY PRION ION LAC (DBR DAC PRWRD6 DZM PRSTPS /CLEAR STOP SWITCH LAC PRA.+1 /CHECK FOR STOP SINCE LAST SELECT TAD PRA.+2 SNA /OK? JMP PRIGN /IGNORE LAST READ, STOP I/O IORS AND (1000 /PTR NOT READY? (IORS8=1) SZA JMP PREOM /SET EOM IN D.B., STOP READING* LAC PTRDM TAD (JMP PRDIS1 DAC .+2 LAC PRCHAR XX /SERVICE ACCORDING TO D.M. PRDIS1 JMP PRIOB /IOPS BIN JMP PRIMB /IMAGE BIN JMP PRIOA /IOPS ASCII NOP /IMAGE ASCII /PROCESS IMAGE BINARY OR IMAGE ASCII OR DUMP PRIMB DAC* PRDBP /STORE CHAR OR BIN WD D. B. JMS PRNXWD /WORD COMPLETE SUBR JMP PROUT2 /NEXT CHAR /PROCESS IPS BIN PRIOB JMS PRPAR /COMPUTE PARITY AND EXIT IF NULL SNL!RAL!CLL /BIT 8=1 (BIN FRAME?) JMP PROUT2 /NON-BIN FRAME (IGNORE) DAC PRCHAR /CHAR IN 0-5 /NEXT 6-BIT BYTE ROUTINE PRIOB7 LAC* PRDBP /SHIFT EARLIER CHAR'S LEFT RAR!CLL XOR PRCHAR /ADD THIS CHAR TO OTHER 1 OR 2 RTL RTL RTL RAL DAC* PRDBP LAC PRCNT1 /CHECK CHAR. PARITY RAR /ODD IF BIT 17=1 SNL /O.K. ISZ PARER /PARITY ERROR-SAVE BUT PASS CHAR ISZ PR8CT /TO FORCE PARITY CHK. ISZ PRIOBN /INDEX 3 BYTE BIN COUNT JMP PROUT2 /STILL WORKING ON CURRENT DATA WORD ISZ PRIOHC /INDEX HEADER WD0 COUNT JMP PRIOB4 /CURR. DATA WORD COMPLETE LAC* PRDBP /CHECK WPC < WC IN PTRWC RTR RTR RTR RTR AND (776 DAC PRIOHC /T. STORE WPC TAD PTRWC SPA!SNA /WPC > WC, SHORT LINE JMP PRIOB9 /WPC INTO PTRWC, NO SHORT LINE LAC (60 /WC STAYS IN PTRWC JMS PRDVS /SET D.V. BITS=SHORT LINE LAW -2 TAD PRIOHC /SET UP PRIOHC TO SKIP EXCESS DATA CMA DAC PRIOHC PRIOB4 LAC* PRDBP /DATA WORD-THIS INSTR. USED AS LIT. TAD PRCKSM /ADD TO CHECKSUM DAC PRCKSM ISZ PRDBP /INDEX DATA WORD POINTER ISZ PRDTCT /INDEX DATA WORD COUNT* ISZ PTRWC /INDEX WORD COUNT JMP PRIOB6 /NEXT DATA WORD LAC PRIOHC /EXCESS DATA SMA JMP PRIOBE LAC (JMP PRIOBS DAC PRIOB7 JMP PRIOB6+1 /RESET 3 BYTE CT PR7S=. PRIOB9 LAW -1 TAD PRIOHC /WPC INTO PTRWC CMA DAC PTRWC JMP PRIOB4 PRIOBS ISZ PRIOBN /INDEX 3 BYTE COUNT JMP PROUT2 ISZ PRIOHC /INDEX EXCESS DATA WORD CT. JMP PRIOB6+1 JMP PRIOBE /END OF BIN. BLOCK PRDVS2=PRCKSM /SET DATA VALIDITY (D.V.) BITS SUBR. MASK IN AC PRDVS 0 DAC PRDVS2 /SAVE MASK LAW 17717 /MASK ALL BITS IN L.B. HEADER, WD 0, EXCEPT AND* PRLBHP /IGNORE CKSUM (0) AND D.V. BITS (12,13) XOR PRDVS2 /PARITY, CHECKSUM, OR SHORT LINE DAC* PRLBHP JMP* PRDVS PRIOBK LAC (20 /CHECKSUM ERROR (D. V. BITS, 12,13=10) PRIOBP TAD (20 /PARITY ERROR (12,13=01) JMS PRDVS /SET D.V. BITS JMP PRIOBB /END OF PAPER TAPE ROUTINE. PREOM LAC PTRDM /CHECK DATA MODE SAD (4 JMP PRIOBB /DUMP MODE - NO EOM HEADER SAD (2 JMS PRPAD /IOPS ASCII-PAD LIST WD. PR. PREOM2 JMS PRHEAD /SET UP WD0 OF HDR AND (777760 /MASK ALL BUT MODE BITS XOR (6 /EOM DAC* PRLBHP PRIOBE LAC PR8CT /IOPS BIN WILL SAD PRCCT /ALWAYS CHECK JMP PRIOB5 /PARITY. LAC PARER SZA!CLA JMP PRIOBP /PARITY ERROR(S) PRIOB5 LAC* PRLBHP /L.B. HDR, WD. 0 AND (60 SZA PRIOBJ JMP PRIOBB /VALIDITY BITS ALREADY SET LAC PRCKSM SZA JMP PRIOBK /CHECKSUM ERROR JMP PRIOBB /NORMAL END OF LINE /ROUTINE TO PAD LAST WORD PAIR /IN IOPS ASCII DATA MODE PRPAD 0 LAC PTR57 /IS LAST WORD SAD PR5CNT /PAIR FULL? JMP* PRPAD /YES. EXIT CLA /INSERT ANOTHER JMS PRPK57 /NULL CHAR JMP PRPAD+1 /COMPUTE PARITY AND EXIT IF NULL PRPAR 0 LAW 17770 /PARITY COUNTER (-8) DAC PRCNT DZM PRCNT1 LAC PRCHAR SNA JMP PROUT2 /NULL RAR SZL ISZ PRCNT1 /1 BIT COUNTER ISZ PRCNT JMP .-4 JMP* PRPAR /PROCESS IOPS ASCII PRIOA LAC PTRWC /SEE IF EXCESS DATA SMA JMP PRASE3 /YES LAC PRCHAR AND (177 SAD (12 JMP PROUT2 /IGNORE LF SAD (13 JMP PROUT2 /IGNORE VT SAD (14 JMP PROUT2 /IGNORE FF JMS PRPAR /COMPUTE PARITY AND EXIT IF NULL SZL ISZ PR8CT /8TH BIT=1, ADD TO COUNT ISZ PRCCT PRIOA1 LAC PRCNT1 /PARITY COUNT-SHOULD BE EVEN RAR SZL ISZ PARER /NOT EVEN PARITY JMS PRENDT /CONVERT ALTMODES AND (177 /DROP ALL BUT 7 BITS SAD (177 /DELETE CODE (RUBOUT)-IGNORE JMP PROUT2 JMS PRPK57 /PACK INTO L.B. IN 5/7 JMS PRENDT SMA JMP PROUT2 /NEXT ASCII CHAR LAC PRCCT SAD (1 JMP PR1CR /IGNORE SINGLE CR LINE JMS PRPAD /PAD CAST DATA WD. PR. /END OF IOPS ASCII IMAGE ASCII, IMAGE BIN, DUMP LINE PRASE LAC PTRDM SAD (4 JMP PRIOBB /DUMP MODE. JMS PRHEAD /SET UP L.B.H 0, W.P.C.+D.M. LAC PR8CT /DID ALL CHAR'S HAVE BIT 8 SAD PRCCT /NO - IOPS ASCII CHECK PARITY JMP PRASE4 /YES - ASSUME NON IOPS ASCII PRASE2 LAC PARER /PARITY ERROR SZA /NO LAC (20 /YES JMS PRDVS /PARITY ERROR SET VALIDITY BITS PRASE4 LAC PTRDM XOR (2 /IOPS ASCII SZA JMP PRIOBB /END LINE PRASE3 JMS PRENDT /SKIP TO END LINE SPA!CLA!CMA JMP PRIOBB TAD PRDBP DAC PRDBP /POINTS TO LAST CHAR LAW 17400 AND* PRDBP XOR (33 /PUT CR IN LAST WORD PAIR DAC* PRDBP ISZ PRDBP /INCASE MORE BEFORE CR LAC* PRLBHP AND (60 XOR (60 SAD (60 JMS PRDVS /SHORT LINE JMP PROUT2 /SET UP L.B.H. WD 0 (WPC AND D.M.) PRHEAD 0 LAC PRDTCT /WORD COUNT (INCLUDES L.B.H.) CLL RTL RTL RTL RTL /1-8 WPC XOR PTRDM /DATA MODE DAC* PRLBHP JMP* PRHEAD /END LINE TEST - CONVERTS ALTMODE TO STANDARD 175 PRENDT 0 LAC PRCHAR AND (177 SAD (15 /RETURN LAW 15 SAD (175 /ALTMODE LAW 175 SAD (176 /ALTMODE LAW 175 SAD (33 /ESCAPE LAW 175 JMP* PRENDT /5/7 IOPS ASCII PACKING ROUTINE. /PTR57 IS INITIALIZED TO 777773 /PRIOR TO THE 1ST CALL. PRPK57 0 /CHAR.IN AC BITS 11-17. RTR /MOVE TO AC BITS 0-6 RTR RTR RTR DAC PRTMP LAW 17771 /-7 DAC PRLPCT PRPKBK LAC PRTMP /ROTATE CHAR LEFT RAL /7 BITS THROUGH DAC PRTMP /THE DOUBLE WORD PRBCK2 LAC PRRTHF /ACCUMULATOR RAL /PRLFHF /PRRTHF. DAC PRRTHF LAC PRLFHF RAL DAC PRLFHF LAC PRLPCT SNA!CLL JMP PRPDNE /2 WORDS ALL SET. ISZ PRLPCT /IS 7 TIMES COUNT EXHAUSTED? JMP PRPKBK /NO. ISZ PTR57 /DO WE HAVE 5 CHARS. JMP* PRPK57 /NO. EXIT JMP PRBCK2 /SHIFT LEFT ONCE MORE. PRPDNE LAC PRLFHF /PLACE ACCUMULATED DAC* PRDBP /2 WORDS INTO JMS PRNXWD /USERS LINE BUFFER, LAC PRRTHF /UPDATING POINTERS. DAC* PRDBP JMS PRNXWD PR5CNT LAW 17773 /RESET 5 CHAR. COUNTER. DAC PTR57 JMP* PRPK57 PRNXWD 0 ISZ PRDBP /INDEX TO NEXT DATA WORD ISZ PRDTCT /ADD TO DATA WORD COUNT ISZ PTRWC /INDEX WORD COUNT JMP* PRNXWD /EXIT FOR NEXT CHAR JMP PRASE /EXIT TO END OF IOPS ASCII LINE ROUTINE /SET UP SWITCH IN EXIT ROUTINE TO /CLEAR FOREGROUND OR BACKGROUND BUSY REGISTER AS /A FUNCTION OF WORD11, AND PLACE IOF IN READER /IOT REGISTER SO THAT NO NEW I/O WILL BE STARTED. PRIOBB JMS PRCFLG /IS THIS DEVICE INVOLVED IN I/O BUSY SITUATION. PRT31 LAC* (.SCOM+52 /ADDRESS OF DAC PRTMP1 /I/O BUSY TESTER. LAC (400200 /RAISE TO ISA /LEVEL 0 IOF LAC (PRA. JMS* PRTMP1 DBK /FROM LEVEL 0 ION JMS PRREAL /CHECK FOR REAL TIME REQUEST. JMP PRNOR /NOT REAL TIME REQUEST. LAC* (.SCOM+51 /ADDRESS OF DAC PRTMP1 /REAL TIME LAC (400200 /PROCESSOR. ISA IOF LAC PRWD17 JMS* PRTMP1 DBK ION JMP PRNOR / /SUBROUTINE TO DETERMINE IF THIS I/O /WAS A REAL TIME REQUEST OR NOT. /CALLING SEQUENCE: JMS PRREAL / (NOT REAL) / (REAL) PRREAL 0 LAC PRWD17 /NON 0 IF REAL TIME. SNA JMP* PRREAL /NOT .REALR LAC (JMP PREAD SAD PRWD10 /JMP FUNCTION ISZ PRREAL /.REALR JMP* PRREAL / /SUBROUTINE TO SET UP CLEARING OF THE /APPROPRIATE BUSY FLAG (AT PROTECTED EXIT TIME) /AND NULL (IOF) PAPER TAPE READER IOT PRCFLG 0 LAC PRIOF /IOF DAC PRIOT LAC PRA.+11 /WORD 11 OF LIVE REGS. SZA /0=FGRD, 1=BGRD JMP .+4 LAC (NOP /FOREGROUND DAC PRFCLR JMP* PRCFLG LAC (NOP /BACKGROUND DAC PRBCLR JMP* PRCFLG / PRIGN JMS PRCFLG /CLEAR BUSY FLAG JMP PRNOR /THIS SUBROUTINE IS EXECUTED (XCT) BY THE /CAL HANDLER VIA WORD 0 OF THIS I/O /HANDLER JUST PRIOR TO GIVING CONTROL /TO THE HANDLER AT THE APPROPRIATE /ENTRY IN THE FUNCTION DISPATCH TABLE. PRSWAP 0 XCT PRA.+5 /ION OR IOF DBK /FROM LEVEL 0 JMP* PRSWAP / PRERRQ 0 /ENTER ERROR INTO QUEUE WITH B/F BITS SET DAC PREROR LAC PRWD10+1 /WHOSE CAL RAR LAC PREROR XOR (2000 /BGD SNL /IS IT FGD? XOR (3000 /YES DAC PREROR LAC* (.SCOM+66 DAC PRTMP1 LAC (400200 ISA IOF PREROR XX /ERROR # JMS* PRTMP1 XX /ERROR INFO DBK ION JMP* PRERRQ / PRSTOP 0 /STOP I/O ROUTINE LAC (400200 ISA IOF LAC PRA.+1 TAD PRA.+2 /TEST I/O UNDERWAY SZA!CLA CMA DAC PRSTPS /SET STOP SWITCH ACCORDINGTO I/O SWITCHES DZM PRA.+1 /CLEAR I/O SWITCHES DZM PRA.+2 DZM PRA.+3 /CLEAR CLOSE SWITCHES DZM PRA.+4 DBK ION LAC PRSTPS /CHECK FOR I/O COMPLETE SZA JMP .-2 /WAIT HERE UNTIL DONE JMP* PRSTOP /TEMP REGS PRIOHC 0 /IOPS BIN. WD1 COUNT PRIOBN 0 /IOPS BIN 3 BYTE COUNT PRCNT1 0 /1 BIT COUNTER FOR PARITY CHECK PRTMP=PRCNT /TEMP. STORAGE FOR 5/7 CHAR. PRLPCT=PRCNT1 /ROTATE 7 BITS COUNTER. PRLFHF 0 /2 WORD ACCUMULATOR FOR PRRTHF 0 /5/7 WORD PAIR. PRSTPS 0 /STOP UNDERWAY SWITCH .END