TITLE PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE SUBTTL 8-15-65 EXTERNAL PTPCHN, PTPSAV, ADVBFE, ITMCT1, SETIOD, SETBYT, IOSET, CKS12 EXTERNAL ILLINP, OUT, WAIT1, PTPRET,PTPCHL,PIOMOD INTERNAL PTPINT ;PTP DEVICE DATA BLOCK LINKAGE EXTERNAL PTPDB,PTPDAT,PTPCHR,PTPIOS,PTPSER,PTPMOD,PTPBUF EXTERNAL PTPPTR,PTPADR,PTPCTR,PTPCNT,PTPCHA,PTPSIO ENTRY PTPDSP , PARAMETER ASSIGNMENTS , PTP CONTROL REGISTER PTPDON=10 , FORMAT CONTROL PTPFDN=200 , SPECIAL IO STATUS WORD ASSIGNMENTS PTPFED=200000 PTPSSQ=40000 PTPEOL=20000 PTPSEQ=10000 PTPBIN=4000 ;CHECKSUM BINARY PTPIB=2000 ;IMAGE BINARY , SPECIAL ASCII CHARACTERS NULL=200 RUBOUT=377 HORTAB=211 VERTAB=213 FORMFD=214 REPEAT 0,< ,PTP DATA BLOCK PTPDAT: SIXBIT "PTP" PTPCHR: 41 PTPIOS: 0 PTPSER: EXP PTPDSP PTPMOD: XWD 1000+PROG.14403 0 PTPBUF: 0 PTPPTR: 0 PTPADR: XWD PROG,0 PTPCTR: 0 PTPCNT: 0 PTPCHA: 0 PTPSIO: 0 > ,PTP SERVICE DISPATCH TABLE PTPDSP: JRST PTPREL ;RELEASE JRST PTPCLS ;CLOSE JRST PTPOUT ;OUTPUT JRST ILLINP ;INPUT INTERNAL PTPINI PTPINI: PTPREL: CONO PTP,0 HLLZS PTPINT ;CLEAR CONSO FLAG 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 TRO IOS,IOACT; IOACT:=1 MOVEM IOS,PTPIOS; C(PTPIOS):=C(IOS) MOVEI TAC,200 MOVEM TAC,PTPCNT; PTPCNT:=400 MOVEI TAC,PTPDON ;SET CONSO FLAG HRRM TAC,PTPINT MOVEI TAC,PTPCHN; TAC:=PTPCHN,PI CHANNEL ASSIGNMENT CONO PTP,PTPDON(TAC); DONE FLAG:=1, ASSIGN PI CHANN JRST WAIT1 ;WAIT FOR IOACT=0, ALL BUFFERS FINISHED PTPOUT: TLZE IOS,IOBEG ;VIRGIN DEVICE? (IOBEG:=0) JRST PTPIN2 ;YES PTPIN1: TRO IOS,IOACT ;IOACT:=1 TLZ IOS,IODISC ;CLEAR DISCONNECT BIT MOVEM IOS,PTPIOS ;PTPIOS:=C(IOS) MOVEI TAC,PTPDON ;SET CONSO FLAG BIT HRRM TAC,PTPINT MOVEI TAC, PTPCHN CONO PTP,PTPDON (TAC); DONE FLAG:=1, ASSIGN PI CHAN POPJ PDP, ;RETURN PTPIN2: LDB TAC,PIOMOD TLO IOS, IOFST+PTPFED+IO ;IOFST:=PTPFED:=IO:=1 TLZ IOS,PTPBIN+PTPIB ;CLEAR BINARY AND IMAGE BINAR 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:= ;SIZE; PTPPTR14-17:=PROG JRST PTPIN1 ,PUNCH INTERRUPT SERVICE PTPINT: CONSO PTP,PTPDON; DONE FLAG=1? JRST PTPINT ;NO. IF PTP IS IN FLAG LIST GO TO ERROR 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 IOS JSR PTPSAV ;SAVE ACS AND ESTABLISH PDP MOVEI DEVDAT,PTPDAT PUSHJ PDP,IOSET ;PROG:=(JBTADR 18-35),ITEM:=C(DEVCTR) MOVE IOS,PTPIOS 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 MODE? JRST PTP3 ;NO PTPB0: 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 ;IODIS:=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; PTPPTR:=C(PTPPTR)+1. ADVANCE ITEM POIN 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 PTP1: SOSGE PTPCTR; C(PTPCTR:=C(PTPCTR)-1. IS C(PTPCTR)<0 JRST PTP5 ;YES LDBI DAT,PTPPTR ;DAT:=OUTPUT ITEM LDB TAC,PIOMOD CAIN TAC,I; MODE=IMAGE? JRST PTP6 ;YES IORI DAT,200; NO, INSERT EIGHTH HOLD CAIN DAT,NULL; NULL? JRST PTP1; YES PTP6: MOVEM DAT,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 BU JRST PTPB1 PTPADV: PUSHJ PDP,ADVBFE; ADVANCE BUFFER JRST PTPDSC; EXIT1. NEXT BUFFER EMPTY TRNE IOS,IOCON; CONTINUOUS? (IOCON=1?) JRST PTPDSC; YES 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; PTPPTR18-35:=C(PTPADR18-25)+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. IOSW:=1 PTPXIT: MOVEM IOS,PTPIOS; PTPIOS:=C(IOS) JRST PTPRET; NO END,