Initial commit
[retro-software/dec/tops10/v1.19.git] / src / ptpser.mac
1 TITLE PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE\r
2 SUBTTL 8-15-65\r
3 EXTERNAL PTPCHN, PTPSAV, ADVBFE, ITMCT1, SETIOD, SETBYT, IOSET, CKS12\r
4 EXTERNAL ILLINP,  OUT, WAIT1, PTPRET,PTPCHL,PIOMOD\r
5 INTERNAL PTPINT\r
6 \r
7 ;PTP DEVICE DATA BLOCK LINKAGE\r
8 \r
9 EXTERNAL PTPDB,PTPDAT,PTPCHR,PTPIOS,PTPSER,PTPMOD,PTPBUF\r
10 EXTERNAL PTPPTR,PTPADR,PTPCTR,PTPCNT,PTPCHA,PTPSIO\r
11 ENTRY PTPDSP\r
12 \f\r
13 \r
14 , PARAMETER ASSIGNMENTS\r
15 \r
16 \r
17 ,   PTP CONTROL REGISTER\r
18           PTPDON=10\r
19 \r
20 ,   FORMAT CONTROL\r
21           PTPFDN=200\r
22 \r
23 ,   SPECIAL IO STATUS WORD ASSIGNMENTS\r
24           PTPFED=200000\r
25           PTPSSQ=40000\r
26           PTPEOL=20000\r
27           PTPSEQ=10000\r
28           PTPBIN=4000           ;CHECKSUM BINARY\r
29           PTPIB=2000            ;IMAGE BINARY\r
30 \r
31 ,   SPECIAL ASCII CHARACTERS\r
32           NULL=200\r
33           RUBOUT=377\r
34           HORTAB=211\r
35           VERTAB=213\r
36           FORMFD=214\r
37 \r
38 REPEAT 0,<\r
39 ,PTP DATA BLOCK\r
40 \r
41 PTPDAT:   SIXBIT "PTP"\r
42 PTPCHR:   41\r
43 PTPIOS:   0\r
44 PTPSER:   EXP PTPDSP\r
45 PTPMOD:   XWD 1000+PROG.14403\r
46  0\r
47 PTPBUF:   0\r
48 PTPPTR:   0\r
49 PTPADR:   XWD PROG,0\r
50 PTPCTR:   0\r
51 PTPCNT:   0\r
52 PTPCHA:   0\r
53 PTPSIO:   0\r
54 >\r
55 \r
56 ,PTP SERVICE DISPATCH TABLE\r
57 \r
58 PTPDSP:   JRST PTPREL           ;RELEASE\r
59           JRST PTPCLS           ;CLOSE\r
60           JRST PTPOUT           ;OUTPUT\r
61           JRST ILLINP           ;INPUT\r
62 \f\r
63 \r
64           INTERNAL PTPINI\r
65 PTPINI:\r
66 PTPREL:   CONO PTP,0\r
67           HLLZS PTPINT          ;CLEAR CONSO FLAG BITS\r
68           POPJ PDP,             ;RETURN\r
69 \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
76           MOVEI TAC,200\r
77           MOVEM TAC,PTPCNT;     PTPCNT:=400\r
78           MOVEI TAC,PTPDON      ;SET CONSO FLAG\r
79           HRRM TAC,PTPINT\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
83 \f\r
84 \r
85 PTPOUT:   TLZE IOS,IOBEG        ;VIRGIN DEVICE? (IOBEG:=0)\r
86           JRST PTPIN2           ;YES\r
87 \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
92           HRRM TAC,PTPINT\r
93           MOVEI TAC, PTPCHN\r
94           CONO PTP,PTPDON (TAC);        DONE FLAG:=1, ASSIGN PI CHAN\r
95           POPJ PDP,             ;RETURN\r
96 \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
101           TLO IOS,PTPIB         ;YES\r
102           CAIN TAC,B                    ;MODE:=BINARY?\r
103           TLO IOS,PTPBIN        ;YES, PTPBIN:=1\r
104           MOVEI TAC,PTPFDN      ;PTPCNT:=PTPFDN\r
105           MOVEM TAC,PTPCNT\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
109           JRST PTPIN1\r
110 \f\r
111 \r
112 ,PUNCH INTERRUPT SERVICE\r
113 \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
119           JRST PTPS2            ;YES\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
124           MOVE IOS,PTPIOS\r
125           TLZE IOS,IODISC       ;DISCONNECT?  (IODISC=1?)\r
126           JRST PTPADV           ;YES\r
127           TLZE IOS,IOFST        ;IOFST=1?  IOFST:=0\r
128           JRST PTP9             ;YES\r
129           TLNN IOS,PTPBIN+PTPIB         ;BINARY PUNCH MODE?\r
130           JRST PTP3             ;NO\r
131 \r
132 PTPB0:    MOVE TAC,PTPCHA;      BINARY OUTPUT BYTE SIZE=36\r
133           ROT TAC,6\r
134           MOVEM TAC,PTPCHA\r
135           ANDI TAC,77;          TAC:=XX, SIXBIT SUB-BYTE\r
136           ADDI TAC,200\r
137           DATAO PTP,TAC;        PUNCH 2XX\r
138           SOSL PTPCNT;          C(PTPCNT):=C(PTPCNT)-1.   WORD DONE?\r
139           JRST PTPXIT;          NO\r
140           SOSL PTPCTR;          C(PTPCTR):=C(PTPCTR)-1.   ITEM COUNT < 0\r
141           JRST PTPB1;           NO\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
145           MOVEI TAC,10\r
146           MOVEM TAC,PTPCNT;     PTPCNT:=10\r
147           JRST PTPXIT\r
148 \r
149 PTPB1:    MOVEI TAC,5           ;PTPCNT:=5\r
150           MOVEM TAC,PTPCNT\r
151           MOVE DAT,@PTPPTR;     PTPCHA:=OUTPUT DATA WORD\r
152           AOS PTPPTR;           PTPPTR:=C(PTPPTR)+1.  ADVANCE ITEM POIN\r
153           MOVEM DAT,PTPCHA\r
154           JRST PTPXIT\r
155 \f\r
156 \r
157 PTP3:     DATAO PTP,PTPCHA;     PUNCH CHARACTER\r
158           TRNE IOS,14;          IS MODE AN ALPHA MODE\r
159           JRST PTP1;            NO\r
160           MOVE DAT,PTPCHA\r
161           CAIE DAT,HORTAB;      HORIZONTAL OR VERTICAL TAB?\r
162           CAIN DAT,VERTAB\r
163           JRST PTPP1;           YES\r
164           CAIE DAT,FORMFD;      FORM FEED?\r
165           JRST PTP1;            NO\r
166           TLO IOS,PTPFED+PTPEOL;        PTPFED:=PTPEOL:=1\r
167           MOVEI DAT,20\r
168           MOVEM DAT,PTPCNT;     PTPCNT:=20\r
169           JRST PTPXIT\r
170 \f\r
171 \r
172 PTP1:     SOSGE     PTPCTR;     C(PTPCTR:=C(PTPCTR)-1.  IS C(PTPCTR)<0\r
173           JRST PTP5             ;YES\r
174           LDBI DAT,PTPPTR       ;DAT:=OUTPUT ITEM\r
175           LDB TAC,PIOMOD\r
176           CAIN TAC,I;           MODE=IMAGE?\r
177           JRST PTP6             ;YES\r
178           IORI DAT,200;         NO, INSERT EIGHTH HOLD\r
179           CAIN DAT,NULL;        NULL?\r
180           JRST PTP1;            YES\r
181 \r
182 PTP6:     MOVEM DAT,PTPCHA;     PTPCHA:=OUTPUT ITEM\r
183           JRST PTPXIT\r
184 \r
185 PTPS2:    CLEARM    PTPCHA;     PUNCH FEED\r
186           DATAO PTP,PTPCHA\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
192 \r
193 PTP5:     TLO IOS,IODISC;       IODISC:=1\r
194           JRST PTPXIT\r
195 \r
196 PTPBN:    HRRZ TAC1,PTPADR;     TAC1:=BUFFER ADDRESS\r
197           PUSHJ PDP,CKS12;      TAC:=CALCULATE CHECKSUM\r
198           ADD TAC1, PTPADR\r
199           HLLM TAC,@TAC1;       STORE CHECKSUM IN LEFT HALF OF FIRST BU\r
200           JRST PTPB1\r
201 \f\r
202 \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
206           JRST PTPDSC;          YES\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
210           MOVE TAC,PTPADR\r
211           AOS TAC\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
219           JRST PTPBN;           YES\r
220           TLNN IOS,PTPIB        ;IMAGE BINARY?\r
221           JRST PTP1\r
222           AOS PTPPTR            ;YES\r
223           SOS PTPCTR\r
224           JRST PTPB1\r
225 \r
226 PTP91:    POINT 6,PTPPTR,11\r
227 \r
228 PTPP1:    MOVEI DAT,RUBOUT;     PTPCHA:=RUBOUT\r
229           MOVEM DAT,PTPCHA\r
230           TLO IOS,PTPEOL;       PTPEOL:=1\r
231           JRST PTPXIT\r
232 \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
238 \r
239 PTPXIT:   MOVEM IOS,PTPIOS;     PTPIOS:=C(IOS)\r
240           JRST PTPRET;          NO\r
241 \r
242 END,\r