1 TITLE PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE
\r
3 EXTERNAL PTPCHN, PTPSAV, ADVBFE, ITMCT1, SETIOD, SETBYT, IOSET, CKS12
\r
4 EXTERNAL ILLINP, OUT, WAIT1, PTPRET,PTPCHL,PIOMOD
\r
7 ;PTP DEVICE DATA BLOCK LINKAGE
\r
9 EXTERNAL PTPDB,PTPDAT,PTPCHR,PTPIOS,PTPSER,PTPMOD,PTPBUF
\r
10 EXTERNAL PTPPTR,PTPADR,PTPCTR,PTPCNT,PTPCHA,PTPSIO
\r
14 , PARAMETER ASSIGNMENTS
\r
17 , PTP CONTROL REGISTER
\r
23 , SPECIAL IO STATUS WORD ASSIGNMENTS
\r
28 PTPBIN=4000 ;CHECKSUM BINARY
\r
29 PTPIB=2000 ;IMAGE BINARY
\r
31 , SPECIAL ASCII CHARACTERS
\r
41 PTPDAT: SIXBIT "PTP"
\r
45 PTPMOD: XWD 1000+PROG.14403
\r
56 ,PTP SERVICE DISPATCH TABLE
\r
58 PTPDSP: JRST PTPREL ;RELEASE
\r
67 HLLZS PTPINT ;CLEAR CONSO FLAG BITS
\r
70 PTPCLS: PUSHJ PDP,OUT; OUTPUT REMAINING BUFFERS
\r
71 PUSHJ PDP,WAIT1; WAIT FOR IOACT=0.
\r
72 MOVE IOS,PTPIOS; C(IOS):=C(PTPIOS)
\r
73 TLO IOS,IODISC+PTPFED+IOW; IODISC:=IOW:=PTPFED:=1
\r
74 TRO IOS,IOACT; IOACT:=1
\r
75 MOVEM IOS,PTPIOS; C(PTPIOS):=C(IOS)
\r
77 MOVEM TAC,PTPCNT; PTPCNT:=400
\r
78 MOVEI TAC,PTPDON ;SET CONSO FLAG
\r
80 MOVEI TAC,PTPCHN; TAC:=PTPCHN,PI CHANNEL ASSIGNMENT
\r
81 CONO PTP,PTPDON(TAC); DONE FLAG:=1, ASSIGN PI CHANN
\r
82 JRST WAIT1 ;WAIT FOR IOACT=0, ALL BUFFERS FINISHED
\r
85 PTPOUT: TLZE IOS,IOBEG ;VIRGIN DEVICE? (IOBEG:=0)
\r
88 PTPIN1: TRO IOS,IOACT ;IOACT:=1
\r
89 TLZ IOS,IODISC ;CLEAR DISCONNECT BIT
\r
90 MOVEM IOS,PTPIOS ;PTPIOS:=C(IOS)
\r
91 MOVEI TAC,PTPDON ;SET CONSO FLAG BIT
\r
94 CONO PTP,PTPDON (TAC); DONE FLAG:=1, ASSIGN PI CHAN
\r
97 PTPIN2: LDB TAC,PIOMOD
\r
98 TLO IOS, IOFST+PTPFED+IO ;IOFST:=PTPFED:=IO:=1
\r
99 TLZ IOS,PTPBIN+PTPIB ;CLEAR BINARY AND IMAGE BINAR
\r
100 CAIN TAC,IB ;IMAGE BINARY?
\r
102 CAIN TAC,B ;MODE:=BINARY?
\r
103 TLO IOS,PTPBIN ;YES, PTPBIN:=1
\r
104 MOVEI TAC,PTPFDN ;PTPCNT:=PTPFDN
\r
106 PUSHJ PDP,SETBYT ;SETBYT
\r
107 HLLM TAC,PTPPTR ;PTPPTR0-5:=PTPPTR12-13:=0,PTPPTR6-11:=
\r
108 ;SIZE; PTPPTR14-17:=PROG
\r
112 ,PUNCH INTERRUPT SERVICE
\r
114 PTPINT: CONSO PTP,PTPDON; DONE FLAG=1?
\r
115 JRST PTPINT ;NO. IF PTP IS IN FLAG LIST GO TO ERROR
\r
116 MOVEM IOS,PTPSIO ;PTPSIO:=C(IOS) SAVE IOS
\r
117 MOVE IOS,PTPIOS ;IOS:=C(PTPIOS)
\r
118 TLNE IOS,PTPFED ;FEED REQUEST? (PTPFED=1?)
\r
120 MOVE IOS,PTPSIO ;RESTORE IOS
\r
121 JSR PTPSAV ;SAVE ACS AND ESTABLISH PDP
\r
122 MOVEI DEVDAT,PTPDAT
\r
123 PUSHJ PDP,IOSET ;PROG:=(JBTADR 18-35),ITEM:=C(DEVCTR)
\r
125 TLZE IOS,IODISC ;DISCONNECT? (IODISC=1?)
\r
127 TLZE IOS,IOFST ;IOFST=1? IOFST:=0
\r
129 TLNN IOS,PTPBIN+PTPIB ;BINARY PUNCH MODE?
\r
132 PTPB0: MOVE TAC,PTPCHA; BINARY OUTPUT BYTE SIZE=36
\r
135 ANDI TAC,77; TAC:=XX, SIXBIT SUB-BYTE
\r
137 DATAO PTP,TAC; PUNCH 2XX
\r
138 SOSL PTPCNT; C(PTPCNT):=C(PTPCNT)-1. WORD DONE?
\r
140 SOSL PTPCTR; C(PTPCTR):=C(PTPCTR)-1. ITEM COUNT < 0
\r
142 TLNE IOS,PTPIB ;IMAGE BINARY?
\r
143 TLOA IOS,IODISC ;YES, SUPPRESS TAPE FEED.
\r
144 TLO IOS,IODISC+PTPFED ;IODIS:=PTPFED:=1
\r
146 MOVEM TAC,PTPCNT; PTPCNT:=10
\r
149 PTPB1: MOVEI TAC,5 ;PTPCNT:=5
\r
151 MOVE DAT,@PTPPTR; PTPCHA:=OUTPUT DATA WORD
\r
152 AOS PTPPTR; PTPPTR:=C(PTPPTR)+1. ADVANCE ITEM POIN
\r
157 PTP3: DATAO PTP,PTPCHA; PUNCH CHARACTER
\r
158 TRNE IOS,14; IS MODE AN ALPHA MODE
\r
161 CAIE DAT,HORTAB; HORIZONTAL OR VERTICAL TAB?
\r
164 CAIE DAT,FORMFD; FORM FEED?
\r
166 TLO IOS,PTPFED+PTPEOL; PTPFED:=PTPEOL:=1
\r
168 MOVEM DAT,PTPCNT; PTPCNT:=20
\r
172 PTP1: SOSGE PTPCTR; C(PTPCTR:=C(PTPCTR)-1. IS C(PTPCTR)<0
\r
174 LDBI DAT,PTPPTR ;DAT:=OUTPUT ITEM
\r
176 CAIN TAC,I; MODE=IMAGE?
\r
178 IORI DAT,200; NO, INSERT EIGHTH HOLD
\r
179 CAIN DAT,NULL; NULL?
\r
182 PTP6: MOVEM DAT,PTPCHA; PTPCHA:=OUTPUT ITEM
\r
185 PTPS2: CLEARM PTPCHA; PUNCH FEED
\r
187 SOSG PTPCNT; COUNT FEED LINES
\r
188 TLZ IOS,PTPFED; PTPFED:=0
\r
189 MOVEM IOS,PTPIOS; PTPIOS:=C(IOS)
\r
190 MOVE IOS,PTPSIO ;RESTORE IOS
\r
191 JEN @PTPCHL ;DISMISS
\r
193 PTP5: TLO IOS,IODISC; IODISC:=1
\r
196 PTPBN: HRRZ TAC1,PTPADR; TAC1:=BUFFER ADDRESS
\r
197 PUSHJ PDP,CKS12; TAC:=CALCULATE CHECKSUM
\r
199 HLLM TAC,@TAC1; STORE CHECKSUM IN LEFT HALF OF FIRST BU
\r
203 PTPADV: PUSHJ PDP,ADVBFE; ADVANCE BUFFER
\r
204 JRST PTPDSC; EXIT1. NEXT BUFFER EMPTY
\r
205 TRNE IOS,IOCON; CONTINUOUS? (IOCON=1?)
\r
207 TLZE IOS,IOW; IN A WAIT? IOW:=0
\r
208 PUSHJ PDP,SETIOD; YES. IOWS:=1
\r
209 PTP9: TLZ IOS,IOFST; IOFST:=0
\r
212 HRRM TAC,PTPPTR; PTPPTR18-35:=C(PTPADR18-25)+1
\r
213 HRRZ ITEM,@TAC; ITEM:=WORD COUNT
\r
214 LDB TAC1,PTP91 ;PICK UP BYTE SIZE
\r
215 PUSHJ PDP,ITMCT1; ITEM:=WORD COUNT*[36/BYTE SIZE]
\r
216 MOVEM ITEM,PTPCTR; PTPCTR:=C(ITEM)
\r
217 JUMPE ITEM,PTPADV ; IS ITEM COUNT=0?
\r
218 TLNE IOS,PTPBIN; BINARY PUNCH MODE?
\r
220 TLNN IOS,PTPIB ;IMAGE BINARY?
\r
226 PTP91: POINT 6,PTPPTR,11
\r
228 PTPP1: MOVEI DAT,RUBOUT; PTPCHA:=RUBOUT
\r
230 TLO IOS,PTPEOL; PTPEOL:=1
\r
233 PTPDSC: PUSHJ PDP,PTPREL ;CLEAR PTP CONTROL REG AND CONSO BITS
\r
234 TRZ IOS,IOACT; IOACT:=0
\r
235 TLO IOS,IOFST; IOFST:=1
\r
236 TLZE IOS,IOW; IN A WAIT? IOW:=0
\r
237 PUSHJ PDP,SETIOD; YES. IOSW:=1
\r
239 PTPXIT: MOVEM IOS,PTPIOS; PTPIOS:=C(IOS)
\r