TITLE PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE SUBTTL /RCC TS 15 APR 69 V401 (FROM 002) XP VPTPSR,401 ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP EXTERNAL PTPCHN, PTPSAV, ADVBFE, ITMCT1, SETIOD, SETBYT, IOSET, CKS12 EXTERNAL ILLINP, OUT, WAIT1,PTPCHL,PIOMOD EXTERNAL SETACT,STOIOS INTERNAL PTPINT,PTPDSP ;PTP DEVICE DATA BLOCK LINKAGE ENTRY PTPSER PTPSER: , PARAMETER ASSIGMENTS , PTP CONTROL REGISTER PTPDON=10 , FORMAT CONTROL PTPFDN=200 , SPECIAL IO STATUS WORD ASSIGNMENTS IODISC=400000 PTPFED=200000 PTPEOL=20000 PTPBIN=4000 ;CHECKSUM BINARY PTPIB=2000 ;IMAGE BINARY ; SPECIAL ASCII CHARACTERS ; DEFINED WITH THE CORRECT PARITY RUBOUT=377 HORTAB=11 VERTAB=213 FORMFD=14 IFN FTCHECK+FTMONP,< EXTERNAL PTPDDB,PTPIOS,PTPPTR,PTPADR,PTPCTR,PTPCNT,PTPCHA,PTPSIO,PTPCON > IFE FTCHECK+FTMONP,< ;PTP DEVICE DATA BLOCK INTERN PTPDDB PTPDDB: SIXBIT /PTP/ XWD ^D10*HUNGST,41 PTPIOS: 0 EXP PTPDSP XWD DVPTP+DVOUT,14403 0 0 PTPPTR: 0 PTPADR: XWD PROG,0 PTPCTR: 0 PTPCNT: 0 PTPCHA: 0 PTPSIO: 0 PTPCON: 0 > ,PTP SERVICE DISPATCH TABLE JRST PTPINI ;INITILIZE JRST PTPREL ;HUNG DEVICE TIME-OUT ERROR, PTPDSP: JRST PTPREL ;RELEASE JRST PTPCLS ;CLOSE JRST PTPOUT ;OUTPUT JRST ILLINP ;INPUT PTPINI: PTPREL: CONO PTP,0 HLLZS PTPCON ;CLEAR CONSO FLAGS BITS POPJ PDP, ;RETURN PTPCLS: PUSHJ PDP,OUT ;OUTPUT REMAINING BUFFERS PUSHJ PDP,WAIT1 ;WAIT FOR IOACT=0. MOVE IOS,PTPIOS ;C(IOS):=C(PTPIOS) TLO IOS,IODISC+PTPFED+IOW ;IODISC:=IOW:=PTPFED:=1 PUSHJ PDP,SETACT ;SET ACTIVE FLAG,STORE IOS,AND ;RESET HUNG DEVICE TIMEOUT COUNT MOVEI TAC,200 MOVEM TAC,PTPCNT ;PTPCNT:=200 MOVEI TAC,PTPDON ;SET CONSO FLAG HRRM TAC,PTPCON MOVEI TAC,PTPCHN ;TAC:=PTPCHN,PI CHANNEL ASSIGNMENT CONO PTP,PTPDON(TAC) ;DONE FLAG:=1, ASSIGN PI CHANNEL JRST WAIT1 ;WAIT FOR IOACT=0, ALL BUFFERS FINISHED PTPOUT: TLZE IOS,IOBEG ;VIRGIN DEVICE?> (IOBEG:=0) JRST PTPIN2 ;YES PTPIN1: TLZ IOS,IODISC ;CLEAR DISCONNECT BIT PUSHJ PDP,SETACT ;SET ACTIVE FLAG,STORE IOS, AND ;RESET HUNG DEVICE TIMEOUT COUNT HRLI TAC,PTPDON ;CONSO FLAG HRRI TAC,PTPCHN ;CONO FLAGS TRO TAC,PTPDON STARTDV PTP POPJ PDP, ;RETURN PTPIN2: LDB TAC,PIOMOD TLO IOS, IOFST+PTPFED+IO ;IOFST:=PTPFED:=IO:=1 TLZ IOS,PTPBIN+PTPIB ;CLEAR BINARY AND IMAGE BINARY BITS CAIN TAC,IB ;IMAGE BINARY TLO IOS,PTPIB ;YES CAIN TAC,B ;MODE=BINARY? TLO IOS,PTPBIN ;YES, PTPBIN:=1 MOVEI TAC,PTPFDN ;PTPCNT:=PTPFDN MOVEM TAC,PTPCNT PUSHJ PDP,SETBYT ;SETBYT HLLM TAC,PTPPTR ;PTPPTR0-5:=PTPPTR12-13:=0,PTPPTR6-11:=BYTE ;SIZE; PTPPTR14-17:=PROG JRST PTPIN1 ,PUNCH INTERRUPT SERVICE PTPINT: CONSO PTP,@PTPCON JRST PTPINT MOVEM IOS,PTPSIO ;PTPSIO:=C(IOS) SAVE IOS MOVE IOS,PTPIOS ;IOS:=C(PTPIOS) TLNE IOS,PTPFED ;FEED REQUEST> (PTPFED=1?) JRST PTPS2 ;YES MOVE IOS,PTPSIO ;RESTORE IUOS JSR PTPSAV ;SAVE ACS AND ESTABLISH PDP MOVEI DEVDAT,PTPDDB PUSHJ PDP,IOSET ;PROG:=(JBTADR 18-35),ITEM:=C(DEVCTR) ;IOS:=C(PTRIOS) TLZE IOS,IODISC ;DISCONNECT? (IODISC=1?) JRST PTPADV ;YES TLZE IOS,IOFST ;IOFST=1? IOFST:=0 JRST PTP9 ;YES TLNN IOS,PTPBIN+PTPIB ;BINARY PUNCH MOD? JRST PTP3 ;NO MOVE TAC,PTPCHA ;BINARY OUTPUT BYTE SIZE=36 ROT TAC,6 MOVEM TAC,PTPCHA ANDI TAC,77 ;TAC:=XX, SIXBIT SUB-BYTE ADDI TAC,200 DATAO PTP,TAC ;PUNCH 2XX SOSL PTPCNT ;C(PTPCNT):=C(PTPCNT)-1, WORD DONE? JRST PTPXIT ;NO SOSL PTPCTR ;C(PTPCTR):=C(PTPCTR)-1, ITEM COUNT < 0? JRST PTPB1 ;NO TLNE IOS,PTPIB ;IMAGE BINARY? TLOA IOS,IODISC ;YES, SUPPRESS TAPE FEED. TLO IOS,IODISC+PTPFED ;IODISC:=PTPFED:=1 MOVEI TAC,10 MOVEM TAC,PTPCNT ;PTPCNT:=10 JRST PTPXIT PTPB1: MOVEI TAC,5 ;PTPCNT:=5 MOVEM TAC,PTPCNT MOVE DAT,@PTPPTR ;PTPCHA:=OUTPUT DATA WORD AOS PTPPTR ;PTRPTR:=C(PTRPTR)+1. ADVANCE ITEM POINTER. MOVEM DAT,PTPCHA JRST PTPXIT PTP3: DATAO PTP,PTPCHA ;PUNCH CHARACTER TRNE IOS,14 ;IS MODE AN ALPHA MODE JRST PTP1 ;NO MOVE DAT,PTPCHA CAIE DAT,HORTAB ;HORIZONTAL OR VERTICAL TAB? CAIN DAT,VERTAB JRST PTPP1 ;YES CAIE DAT,FORMFD ;FORM FEED? JRST PTP1 ;NO TLO IOS,PTPFED+PTPEOL ;PTPFED:=PTPEOL:=1 MOVEI DAT,20 MOVEM DAT,PTPCNT ;PTPCNT:=20 JRST PTPXIT EXTERNAL PEVEN8 ;IN IOCSS, FOR PARITY IN ASCII PTP1: SOSGE PTPCTR ;C(PTPCTR):=C(PTPCTR)-1, IS C(PTPCTR)<0? JRST PTP5 ;YES ILDB TEM,PTPPTR ;TEM:=OUTPUT ITEM LDB TAC,PIOMOD CAIN TAC,I ;MODE=IMAGE? JRST PTP6 ;YES IORI TEM,200 ;NO, INSERT EIGHTH HOLD TRNN TAC,14 ;AN ASCII MODE? PUSHJ PDP,PEVEN8 ;YES, TURN EIGHTH HOLE OFF IF ; APPROPRIATE TO GET EVEN PARITY JUMPE TEM,PTP1 ;IF AN ASCII NULL, IGNORE IT ; THEY ARE PUT IN BY PTPFED STUFF ; ELSE FALL INTO PTP6 PTP6: MOVEM TEM,PTPCHA ;PTPCHA:=OUTPUT ITEM JRST PTPXIT PTPS2: CLEARM PTPCHA ;PUNCH FEED DATAO PTP,PTPCHA SOSG PTPCNT ;COUNT FEED LINES TLZ IOS,PTPFED ;PTPFED:=0 MOVEM IOS, PTPIOS ;PTPIOS:=C(IOS) MOVE IOS,PTPSIO ;RESTORE IOS JEN @PTPCHL ;DISMISS PTP5: TLO IOS,IODISC ;IODISC:=1 JRST PTPXIT PTPBN: HRRZ TAC1,PTPADR ;TAC1:=BUFFER ADDRESS PUSHJ PDP,CKS12 ;TAC:=CALCULATE CHECKSUM ADD TAC1, PTPADR HLLM TAC,@TAC1 ;STORE CHECKSUM IN LEFT HALF OF FIRST BUFFER WORD, JRST PTPB1 PTPADV: PUSHJ PDP,ADVBFE ;ADVANCE BUFFER JRST PTPDSC ;EXIT1. NEXT BUFFER EMPTY TLZE IOS,IOW ;IN A WAIT? IOW:=0 PUSHJ PDP,SETIOD ;YES. IOWS:=1 PTP9: TLZ IOS,IOFST ;IOFST:=0 MOVE TAC,PTPADR AOS TAC HRRM TAC,PTPPTR ;PTPTR18-35:=C(PTPADR18-35)+1 HRRZ ITEM,@TAC ;ITEM:=WORD COUNT LDB TAC1,PTP91 ;PICK UP BYTE SIZE PUSHJ PDP,ITMCT1 ;ITEM:=WORD COUNT*[36/BYTE SIZE] MOVEM ITEM,PTPCTR ;PTPCTR:=C(ITEM) JUMPE ITEM,PTPADV ;IS ITEM COUNT=0? TLNE IOS,PTPBIN ;BINARY PUNCH MODE? JRST PTPBN ;YES TLNN IOS,PTPIB ;IMAGE BINARY? JRST PTP1 AOS PTPPTR ;YES SOS PTPCTR JRST PTPB1 PTP91: POINT 6,PTPPTR,11 PTPP1: MOVEI DAT,RUBOUT ;PTPCHA:=RUBOUT MOVEM DAT,PTPCHA TLO IOS,PTPEOL ;PTPEOL:=1 JRST PTPXIT PTPDSC: PUSHJ PDP,PTPREL ;CLEAR PTP CONTROL REG AND CONSO BITS TRZ IOS,IOACT ;IOACT:=0 TLO IOS,IOFST ;IOFST:=1 TLZE IOS,IOW ;IN A WAIT? IOW:=0 PUSHJ PDP,SETIOD ;YES. IOWS:=1 PTPXIT: JRST STOIOS ;STORE IOS, RESET HUNG TIMEOUT COUNT AND ;DISMISS INTERRUPT END