1 TITLE PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE
\r
2 SUBTTL /RCC TS 15 APR 69 V401 (FROM 002)
\r
4 ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP
\r
6 EXTERNAL PTPCHN, PTPSAV, ADVBFE, ITMCT1, SETIOD, SETBYT, IOSET, CKS12
\r
7 EXTERNAL ILLINP, OUT, WAIT1,PTPCHL,PIOMOD
\r
8 EXTERNAL SETACTSTOIOS
\r
9 INTERNAL PTPINI,PTPDSP
\r
11 ;PTP DEVICE DATA BLOCK LINKAGE
\r
16 \f, PARAMETER ASSIGMENTS
\r
18 , PTP CONTROL REGISTER
\r
24 , SPECIAL IO STATUS WORD ASSIGNMENTS
\r
28 PTPBIN=4000 ;CHECKSUM BINARY
\r
29 PTPIB=2000 ;IMAGE BINARY
\r
31 ; SPECIAL ASCII CHARACTERS
\r
32 ; DEFINED WITH THE CORRECT PARITY
\r
38 IFN FTCHECK+FTMONP,<
\r
39 EXTERNAL PTPDDB,PTPIOS,PTPPTR,PTPADR,PTPCTR,PTPCNT,PTPCHA,PTPSIO,PTPCON
\r
41 IFE FTCHECK+FTMONP,<
\r
42 ;PTP DEVICE DATA BLOCK
\r
50 XWD DVPTP+DVOUT,14403
\r
61 \f,PTP SERVICE DISPATCH TABLE
\r
62 JRST PTPINI ;INITILIZE
\r
63 JRST PTPREL ;HUNG DEVICE TIME-OUT ERROR,
\r
64 PTPDSP: JRST PTPREL ;RELEASE
\r
70 HLLZS PTPCON ;CLEAR CONSO FLAGS BITS
\r
74 PTPCLS: PUSHJ PDP,OUT ;OUTPUT REMAINING BUFFERS
\r
75 PUSHJ PDP,WAIT1 ;WAIT FOR IOACT=0.
\r
76 MOVE IOS,PTPIOS ;C(IOS):=C(PTPIOS)
\r
77 TLO IOS,IODISC+PTPFED+IOW ;IODISC:=IOW:=PTPFED:=1
\r
78 PUSHJ PDP,SETACT ;SET ACTIVE FLAG,STORE IOS,AND
\r
79 ;RESET HUNG DEVICE TIMEOUT COUNT
\r
81 MOVEM TAC,PTRCNT ;PTPCNT:=200
\r
82 MOVEI TAC,PTPDON ;SET CONSO FLAG
\r
84 MOVEI TAC,PTPCHN ;TAC:=PTPCHN,PI CHANNEL ASSIGNMENT
\r
85 CONO PTP,PTPDON(TAC) ;DONE FLAG:=1, ASSIGN PI CHANNEL
\r
86 JRST WAIT1 ;WAIT FOR IOACT=0, ALL BUFFERS FINISHED
\r
87 \fPTPOUT: TLZE IOS,IOBEG ;VIRGIN DEVICE?> (IOBEG:=0)
\r
91 TLZ IOS,IODISC ;CLEAR DISCONNECT BIT
\r
92 PUSHJ PDP,SETACT ;SET ACTIVE FLAG,STORE IOS, AND
\r
93 ;RESET HUNG DEVICE TIMEOUT COUNT
\r
94 HRLI TAC,PTPDON ;CONSO FLAG
\r
95 HRRI TAC,PTPCHN ;CONO FLAGS
\r
100 PTPIN2: LDB TAC,PIOMOD
\r
102 TLO IOS, IOFST+PTPFED+IO ;IOFST:=PTPFED:=IO:=1
\r
103 TLZ IOS,PTPBIN+PTPIB ;CLEAR BINARY AND IMAGE BINARY BITS
\r
104 CAIN TAC,IB ;IMAGE BINARY
\r
106 CAIN TAC,B ;MODE=BINARY?
\r
107 TLO IOS,PTPBIN ;YES, PTPBIN:=1
\r
108 MOVEI TAC,PTPFDN ;PTPCNT:=PTPFDN
\r
110 PUSHJ PDP,SETBYT ;SETBYT
\r
111 HLLM TAC,PTPPTR ;PTPPTR0-5:=PTPPTR12-13:=0,PTPPTR6-11:=BYTE
\r
112 ;SIZE; PTPPTR14-17:=PROG
\r
114 \f,PUNCH INTERRUPT SERVICE
\r
116 PTPINT: CONSO PTP,@PTPCON
\r
118 MOVEM IOS,PTPSIO ;PTPSIO:=C(IOS) SAVE IOS
\r
119 MOVE IOS,PTPIOS ;IOS:=C(PTPIOS)
\r
120 TLNE IOS,PTPFED ;FEED REQUEST> (PTPFED=1?)
\r
122 MOVE IOS,PTPSIO ;RESTORE IUOS
\r
123 JSR PTPSAV ;SAVE ACS AND ESTABLISH PDP
\r
124 MOVEI DEVDAT,PTPDDB
\r
125 PUSHJ PDP,IOSET ;PROG:=(JBTADR 18-35),ITEM:=C(DEVCTR)
\r
127 TLZE IOS,IODISC ;DISCONNECT? (IODISC=1?)
\r
129 TLZE IOS,IOFST ;IOFST=1? IOFST:=0
\r
131 TLNN IOS,PTPBIN+PTPIB ;BINARY PUNCH MOD?
\r
134 MOVE TAC,PTPCHA ;BINARY OUTPUT BYTE SIZE=36
\r
137 ANDI TAC,77 ;TAC:=XX, SIXBIT SUB-BYTE
\r
139 DATAO PTP,TAC ;PUNCH 2XX
\r
140 SOSL PTPCNT ;C(PTPCNT):=C(PTPCNT)-1, WORD DONE?
\r
142 SOSL PTPCTR ;C(PTPCTR):=C(PTPCTR)-1, ITEM COUNT < 0?
\r
144 TLNE IOS,PTPIB ;IMAGE BINARY?
\r
145 TLOA IOS,IODISC ;YES, SUPPRESS TAPE FEED.
\r
146 TLO IOS,IODISC+PTPFED ;IODISC:=PTPFED:=1
\r
148 MOVEM TAC,PTPCNT ;PTPCNT:=10
\r
151 PTPB1: MOVEI TAC,5 ;PTPCNT:=5
\r
153 MOVE DAT,@PTPPTR ;PTPCHA:=OUTPUT DATA WORD
\r
154 AOS PTPPTR ;PTRPTR:=C(PTRPTR)+1. ADVANCE ITEM POINTER.
\r
157 \fPTP3: DATA 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
170 \f EXTERNAL PEVEN8 ;IN IOCSS, FOR PARITY IN ASCII
\r
172 PTP1: SOSGE PTPCTR ;C(PTPCTR):=C(PTPCTR)-1, IS C(PTPCTR)<0?
\r
174 ILDB TEM,PTPPTR ;TEM:=OUTPUT ITEM
\r
176 CAIN TAC,I ;MODE=IMAGE?
\r
178 IORI TEM,200 ;NO, INSERT EIGHTH HOLD
\r
179 TRNN TAC,14 ;AN ASCII MODE?
\r
180 PUSHJ PDP,PEVEN8 ;YES, TURN EIGHTH HOLE OFF IF
\r
181 ; APPROPRIATE TO GET EVEN PARITY
\r
182 JUMPE TEM,PTP1 ;IF AN ASCII NULL, IGNORE IT
\r
183 ; THEY ARE PUT IN BY PTPFED STUFF
\r
184 ; ELSE FALL INTO PTP6
\r
186 PTP6: MOVEM TEM,PTPCHA ;PTPCHA:=OUTPUT ITEM
\r
189 PTPS2: CLEARM PTPCHA ;PUNCH FEED
\r
191 SOSG PTPCNT ;COUNT FEED LINES
\r
192 TLZ IOS,PTPFED ;PTPFED:=0
\r
193 MOVEM IOS, PTPIOS ;PTPIOS:=C(IOS)
\r
194 MOVE IOS,PTPSIO ;RESTORE IOS
\r
195 JEN @PTPCHL ;DISMISS
\r
198 PTP5: TLO IOS,IODISC ;IODISC:=1
\r
201 PTPBN: HRRZ TAC1,PTPADR ;TAC1:=BUFFER ADDRESS
\r
202 PUSHJ PDP,CKS12 ;TAC:=CALCULATE CHECKSUM
\r
204 HLLM TAC,@TAC1 ;STORE CHECKSUM IN LEFT HALF OF FIRST BUFFER WORD,
\r
207 \fPTPADV: PUSHJ PDP,ADVBFE ;ADVANCE BUFFER
\r
208 JRST PTPDSC ;EXIT1. NEXT BUFFER EMPTY
\r
209 TLZE IOS,IOW ;IN A WAIT? IOW:=0
\r
210 PUSHJ PDP,SETIOD ;YES. IOWS:=1
\r
211 PTP9: TLZ IOS,IOFST ;IOFST:=0
\r
214 HRRM TAC,PTPPTR ;PTPTR18-35:=C(PTPADR18-35)+1
\r
215 HRRZ ITEM,@TAC ;ITEM:=WORD COUNT
\r
216 LDB TAC1,PTP91 ;PICK UP BYTE SIZE
\r
217 PUSHJ PDP,ITMCT1 ;ITEM:=WORD COUNT*[36/BYTE SIZE]
\r
218 MOVEM ITEM,PTPCTR ;PTPCTR:=C(ITEM)
\r
219 JUMPE ITEM,PTPADV ;IS ITEM COUNT=0?
\r
220 TLNE IOS,PTPBIN ;BINARY PUNCH MODE?
\r
222 TLNN IOS,PTPIB ;IMAGE BINARY?
\r
229 PTP91: POINT 6,PTRPTR,11
\r
231 PTRP1: MOVEI DAT,RUBOUT ;PTPCHA:=RUBOUT
\r
233 TLO IOS,PTPEOL ;PTPEOL:=1
\r
236 PTPDSC: PUSHJ PDP,PTPREL ;CLEAR PTP CONTROL REG AND CONSO BITS
\r
237 TRZ IOS,IOACT ;IOACT:=0
\r
238 TLO IOS,IOFST ;IOFST:=1
\r
239 TLZE IOS,IOW ;IN A WAIT? IOW:=0
\r
240 PUSHJ PDP,SETIOD ;YES. IOWS:=1
\r
242 PTPXIT: JRST STOIOS ;STORE IOS, RESET HUNG TIMEOUT COUNT AND
\r