TITLE PTRSER - PAPER TAPE READER SERVICE ROUTINE SUBTTL 8-15-65 EXTERNAL WSYNC, STOSQD, ILLOUT EXTERNAL STODAT, IOSET, SETBYT, CKS12, ADVBFF EXTERNAL SETIOD, PTRSAV, PTRCHN, PTRRET,PIOMOD INTERNAL PTRINT ;PTR DEVICE DATA BLOCK LINKAGE EXTERNAL PTRDB,PTRDAT,PTRCHR,PTRIOS,PTRSER,PTRMOD,PTRBUF EXTERNAL PTRADR,PTRPTR,PTRCTR,PTRSVC,PTRSV1 ENTRY PTRDSP ,PARAMETER ASSIGNMENTS , PTR CONTROL REGISTER PTRDON=10; DONE FLAG PTRBSY=20; BUSY FLAG PTRBIN=40; BINARY READ MODE POW=400; POWER. ON=1 , SPECIAL IO STATUS WORD ASSIGMENTS PTRERR=2000 PTRFCI=200000 PTRPOW=100000 , SPECIAL ASCII CHARACTERS NULL=200 RUBOUT=377 S2EOF=232; END OF FILE , PI CONTROL REGISTER PION=200 PIOFF=400 REPEAT 0,

,PTR SERVICE DISPATCH TABLE PTRDSP: JRST PTRREL ;RELEASE POPJ PDP,; CLOSE JRST ILLOUT ;OUTPUT JRST PTRINP; INPUT PTRINP: TLNN IOS,IOBEG; VIRGIN DEVICE? (IOBEG=1?) JRST PTRIN1; NO TLO IOS,IOFST; IOFST:=1. NEXT ITEM WILL BE FIRST ITEM PUSHJ PDP,SETBYT; TAC0-5:=TAC12-13:=0,TAC6-11:=BYTE SIZE , TAC14-17:=PROG MOVEM TAC,PTRPTR; PTRPTR:=C(TAC) CONSZ PTR,POW; IS POWER ON? TLO IOS,PTRPOW; YES. PTRPOW:=1 PTRIN1: TRO IOS,IOACT; IOACT:=1 LDB TAC,PIOMOD MOVEI TAC1, PTRCHN; TAC1:=PTR PI CHANNEL ASSIGNME CAIN TAC,B; MODE=BINARY? ADDI TAC1,PTRBIN; YES. ALPHA/BINARY:=BINARY MOVEI TAC,PTRDON ;SET CONSO INTERRUPT FLAG HRRM TAC,PTRINT TLZN IOS,IOBEG; VIRGIN DEVICE? (IOBEG=1?) JRST PTRIN4; NO MOVEM IOS,PTRIOS; PTRIOS:=C(IOS) CONO PTR,PTRBSY(TAC1); PTR BUSY FLAG:=1,ASSIGN INTER POPJ PDP,; INPUT RETURN-VIRGIN DEVICE PTRIN4: MOVEM IOS,PTRIOS; PTRIOS:=C(IOS) CONO PTR,PTRDON(TAC1); PTR DONE FLAG:=1,ASSIGN INTER POPJ PDP, PTRINT: CONSO PTR,PTRDON ;INTERRUPT. IS DONE FLAG = 1? JRST PTRINT ;NO. IF PTR IS IN FLAG LIST, THIS LOC SKIPL PTRIOS ;DISCONNECT REQUEST? (IODISC=1?) DATAI PTR,PTRSV1 ;PTRSV1: = DATA WORD JSR PTRSAV ;SAVE ACCUMULATORS AND ESTABLISH PDP MOVEI DEVDAT,PTRDAT ;DEVDAT: = PTR SIXBIT PUSHJ PDP,IOSET ;PROG:=C(JBTADR18-35),ITEM:=C(DEVCTR) MOVE IOS,PTRIOS ;IOS:=C(PTRIOS) MOVE DAT,PTRSV1 ;DAT:=C(PTRSV1) CONSO PTR,POW ;PTR POWER ON? JRST PTREND ;NO TLON IOS,PTRPOW ;PTRPOW=1? PTRPOW:=1 JRST PTREX1 ;NO TLZE IOS,IODISC JRST PTREX TLZE IOS,PTRFCI ;IS PTRFCI=1? MOVE DAT,PTRSVC ;YES. DAT:=C(PTRSVC) PTRIN0: TRNE IOS,B ;MODE=BINARY? JRST PTRI0 ;YES CAIE DAT,NULL ;LAST CHARACTER NULL OR RUBOUT CAIN DAT,RUBOUT JRST PTREX1 ;YES JUMPE DAT,PTREX1 ;DAT=0? PTRI0: PUSHJ PDP,STODAT ;NO STORE DATA WORD. JFCL ;CHECKSUM ERROR JRST PTRI1 ;BLOCK FULL OR BLOCK COMPLETE JRST PTREX1 ;DATA STORED CORRECTLY. PTRI1: PUSHJ PDP,ADVBFF ;ADVANCE BUFFER TLO IOS,IODISC; NEXT BUFFER IS FULL. IODISC:=1 TRNE IOS,IOCON; NEXT BUFFER IS EMPTY. CONTINUOUS? (IOC TLO IOS,IODISC; NON-CONT. OPERATION. IODISC:=1 PTRI2: TLO IOS,IOFST; IOFST:=1. NEXT ITEM IS FIRST ITEM OF A TLZE IOS,IOW; IN A WAIT? IOW:=0 PUSHJ PDP,SETIOD; IOWS:=1 JRST PTREX1 ,COME HERE WHEN THE READER IS SHUT OFF PTREND: TDZ IOS,[XWD PTRPOW,IOACT] ;PTRPOW:=0,IOACT:=0 PUSHJ PDP,PTRREL ;CLEAR PTR AND CONSO FLAG LDB TAC,PIOMOD TLO IOS,IOEND ;IOEND:=1 TRNE TAC,B ;MODE=A,AL JRST PTREIB ;NO MOVEI DAT,S2EOF; EOF CHAR PUSHJ PDP,STODAT ;STORE DATA WORD JRST PTRI0+1 ;CHECKSUM ERROR JRST .+3 ;BLOCK FULL OF BLOCK COMPLETE PTREI: PUSHJ PDP,STOSQD; FINISH THIS BUFFER, STORE WORD COUNT SKIP PUSHJ PDP,ADVBFF ;ADVANCE BUFFER SKIP JRST PTRI2 PTREIB: CAIE TAC,B ;MODE=BINARY? JRST PTREI ;NO TLNN IOS,IOFST ;IOFST=1? TRO IOS,PTRERR ;NO. PTRERR:=1. BINARY BLOCK INCOMPLE JRST PTRI2 ,DISCONNECT PTR PTREX: SKIPG @PTRADR ;IOUSE=1? JRST PTREX0 ;YES. DATAI PTR,PTRSV1 JRST PTRIN0 PTREX0: DATAI PTR,PTRSVC ;SAVE LAST DATA WORD FROM PTR PUSHJ PDP,PTRREL ;CLEAR PTR AND CONSO FLAG TLO IOS,PTRFCI ;PTRFCI:=1 TRZ IOS,IOACT ;IOACT:=0 PTREX1: MOVEM ITEM,PTRCTR ;PTRCTR:=C(ITEM) MOVEM IOS,PTRIOS ;PTRIOS:=C(IOS) JRST PTRRET ;RESTORE ACCUMULATORS AND DISMISS INTER INTERNAL PTRINI PTRINI: PTRREL: CONO PTR,0 ;CLEAR PTR CONTROL HLLZS PTRINT ;CLEAR CONSO FLAG POPJ PDP, END,