Cleanup more typos.
[retro-software/dec/tops10/v4.5.git] / src / cdrsr6.mac
1 TITLE   CDRSR6 - CARD READER SERVICE FOR PDP-6 CARD READER\r
2 SUBTTL  /TH TS3.17 18 OCT 67 V001\r
3 XP      VCDRS6,001\r
4                 ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP\r
5 \r
6         ;PARAMETERS\r
7 \r
8         ;HARDWARE\r
9 \r
10         CRDONE=10\r
11         CRBUSY=20\r
12         CRBIN=40\r
13         CRALL=100\r
14         CRMISS=200\r
15         CREOC=400\r
16         CREOFF=1000\r
17         CRERR=2000\r
18         CRNRED=4000\r
19 \r
20         CRCONO=CRBUSY+CRBIN+CRALL\r
21         CDR=114\r
22 \r
23         COD029=5252     ;029 CONTROL CARD IS 12-0-2-4-6-8!\r
24 \r
25         ;IOS\r
26 \r
27         CRMFST=40000    ;LH\r
28         CRMIMG=100000   ;LH\r
29         CRMBIN=200000   ;LH\r
30         CRM029=100      ;RH\r
31 \r
32         MINHNG=^D15     ;NO. OF TIMES TO OBEY HUNG CODE BEFORE REALLY BECOMING HUNG\r
33 \r
34 CDRHNG: CONSO CDR,CRERR         ;POWER OFF OR OTHER SUCH CATASTOPHE?\r
35         TLNN IO,IOFST           ;NO - CARD JAMMED?\r
36         JRST CDRINI             ;YES - PRINT HUNG MSG.\r
37         AOS (PDP)               ;NEVER ERROR RETURN\r
38         CONSZ CDR,CRMISS        ;FEEDCHECK?\r
39         CONSZ CDR,CRNRED        ;YES - READER READY?\r
40         SOSA TAC,LOPCNT         ;NO - PICK UP HUNG LOOP COUNTER\r
41         JRST CDRSTR             ;YES - GIVE ANOTHER CONO\r
42         JUMPGE TAC,STOIOS       ;COUNT NOT EXPIRED - LEAVE ACTIVE\r
43         SOS (PDP)               ;EXPIRED - PRINT HUNG MSG.\r
44 \r
45 CDRINI: CONO CDR,0              ;CLEAR HARDWARE\r
46         HLLZS CDRCON            ;CLEAR CONSO BITS\r
47         POPJ PDP,0              ;RETURN\r
48 \r
49 \fINTERNAL FTCHECK,FTMONP\r
50 \r
51 IFN FTCHECK+FTMONP,<\r
52 EXTERNAL CDRDDB,CRDIS,CRTEM,CDRCON,LOPCNT\r
53 >\r
54 IFE FTCHECK+FTMONP,<\r
55 ;CDR  DEVICE DATA BLOCK\r
56         INTERN  CDRDDB\r
57 CDRDDB:\r
58 CDRDAT: SIXBIT  /CDR/\r
59         XWD     2*HUNGST,34     ;BUFFER LONG ENOUGH FOR BINARY CARDS\r
60         0\r
61         EXP     CDRDSP\r
62         XWD     DVCDR+DVIN,14403\r
63         0\r
64         0\r
65         XWD     PROG,0\r
66         0\r
67         0\r
68 CRDIS:  JRST    .\r
69 CRTEM:  0       ;TEMP FOR PARTIAL WORDS\r
70 CDRCON: 0       ;CONSO FLAGS\r
71 LOPCNT: 0\r
72 >\r
73 \f\r
74 ENTRY CDRSR6\r
75 EXTERN CPOPJ1,ILLOUT,PIOMOD,SETACT,SETBYT,CDRCHN,PIOFF,PION,HNGSTP\r
76 INTERN CDRDSP\r
77 \r
78 ;CDR SERVICE DISPATCH TABLE (SHORT)\r
79 \r
80         JRST CDRINI     ;INITILIZATION\r
81         JRST CDRHNG     ;HUNG DEVICE IS CHECKED\r
82 CDRSR6:\r
83 CDRDSP: JRST CDRINI     ;RELEASE - CLEAR DEVICE\r
84         POPJ PDP,0      ;CLOSE - NOTHING SPECIAL\r
85         JRST ILLOUT     ;OUTPUT WON'T WORK\r
86                         ;INPUT IS OK\r
87         TLZN IOS,IOBEG  ;BEGINNING OF FILE? (NO MORE).\r
88         CONSO CDR,CREOFF        ;BUTTON PUSHED?\r
89         TLZA IOS,CRMBIN+CRMIMG  ;CLEAR TRASH\r
90         JRST CREOF      ;END OF FILE PUSHED WHILE IOACT WAS 0\r
91 CDRIN1: CONO CDR,0      ;CLEAR ANY SPURIOUS FLAGS\r
92         CONSO CDR,CRERR!CRMISS!CRNRED   ;POWER OFF,LEFT OVER FEED-CHECK OR NOT READY\r
93         JRST .+3                ;NO - OK\r
94         PUSHJ PDP,HNGSTP        ;YES - PRINT REMINDER & HALT JOB\r
95         JRST CDRIN1             ;GO TRY AGAIN WHEN USER TYPES 'CONT'\r
96         TLO IOS,IOFST+CRMFST    ;NEW OPERATION\r
97         LDB TAC,PIOMOD  ;SPEED UP TESTING OF MODE\r
98         CAIN TAC,B      ;..\r
99         TLO IOS,CRMBIN  ;BINARY MODE\r
100         CAIN TAC,I\r
101         TLO IOS,CRMIMG  ;IMAGE MODE\r
102         PUSHJ PDP,SETBYT        ;LH(TAC):=700+PROG OR 4400+PROG\r
103         MOVEM TAC,DEVPTR(DEVDAT)        ;SAVE BYTE SIZE\r
104 CDRSTR: MOVEI TAC,MINHNG        ;HERE TO RESTART CDR ON FEED-CHECK\r
105         MOVEM TAC,LOPCNT        ;RESET HUNG LOOP COUNTER\r
106         PUSHJ PDP,SETACT\r
107         MOVE TAC,[XWD CRDONE,CRCONO]\r
108         CONO PI,PIOFF\r
109         CONO CDR,CDRCHN(TAC)    ;START CDR\r
110         HLRM TAC,CDRCON         ;AND LOOK FOR IT\r
111         CONO PI,PION\r
112         POPJ PDP,0      ;RETURN TO UUOCON\r
113 \r
114 \f\r
115 INTERN CDRINT\r
116 EXTERN CDRSAV,IOSET,SETIOD,STOIOS,CDRCHN\r
117 \r
118 CDRINT: CONSO CDR,@CDRCON\r
119         JRST CDRINT\r
120         JSR CDRSAV\r
121         MOVEI DEVDAT,CDRDDB\r
122         MOVE IOS,DEVIOS(DEVDAT)\r
123         PUSHJ PDP,IOSET\r
124         CONSZ CDR,CRMISS\r
125         TRO IOS,IODERR  ;DEVICE ERROR\r
126         CONSO CDR,CRERR+CREOFF+CREOC\r
127         JRST CRDATA     ;JUST A DATA INTERRUPT\r
128         CONSZ CDR,CRERR ;HARDWARE LOSS?\r
129         JRST CDRERR     ;YES\r
130         JRST CDREOC     ;NO. MUST BE END OF CARD\r
131 CREOF:  TLOA IOS,IOEND  ;MARK END,SKIP TO CROFF\r
132 CDRERR: TRO IOS,IODERR  ;CDR DEVICE ERROR HERE\r
133 CROFF:  PUSHJ PDP,CDRINI        ;STOP THE DEVICE\r
134         TRZ IOS,IOACT\r
135 CRLST1: MOVEI TAC,MINHNG\r
136         MOVEM TAC,LOPCNT        ;RESET HNG. LOOP CNT.\r
137         TLO IOS,IOFST+CRMFST\r
138         TLZE IOS,IOW    ;JOB WAITING FOR CDR?\r
139         PUSHJ PDP,SETIOD        ;YES. WAKE IT UP\r
140 CREXIT: MOVEM ITEM,DEVCTR(DEVDAT)\r
141         JRST STOIOS\r
142 \r
143 CRCONT: MOVEI TAC,CDRCHN        ;PI CHANNEL\r
144         CONO CDR,CRCONO(TAC)    ;MAKE IT GO AGAIN\r
145         TLO IOS,CRMFST  ;FIRST COLUMN, BUT NOT FIRST IN BUFFER\r
146         JRST CREXIT     ;AND RETURN\r
147 \r
148 \f\r
149 \r
150 CRDATA: DATAI CDR,DAT\r
151         TLZN IOS,CRMFST ;COLUMN 1?\r
152         XCT CRDIS       ;NO. SUBROUTINE HAS BEEN SET UP\r
153         TRNE IOS,IODERR ;POSSIBLE FEED CHECK?\r
154         CONSO CDR,CRNRED        ;YES - READER READY?\r
155         JRST .+4                ;YES - GENUINE DATA ERROR\r
156         TLO IOS,CRMFST          ;RESET 1ST COL. FLG.\r
157         TRZ IOS,IODERR          ;CLEAR ERROR INDICATION\r
158         JRST STOIOS             ;AND LET HUNG LOGIC SORT THINGS OUT\r
159         TLNE IOS,CRMIMG ;IMAGE MODE?\r
160         JRST CRFSTI     ;YES, DON'T CHECK FOR EOF CARD\r
161         TRC DAT,7400\r
162         TRCN DAT,7400   ;12,11,0 AND 1 PUNCH?\r
163         JRST CREOF1     ;YES. AN EOF CARD.\r
164         TLNE IOS,CRMBIN\r
165         JRST CRFSTB     ;BINARY CARD FIRST COLUMN\r
166         MOVEI TAC,CRASCI        ;HERE ON ASCII FIRST COLUMN\r
167         HRRM TAC,CRDIS  ;FOR SUCCEEDING COLUMN INTERRUPTS\r
168         CAIE DAT,COD029 ;029 CONTROL CARD?\r
169         JRST CRASCI     ;NO. PROCESS THE CARD.\r
170         TDO IOS, [XWD IOBEG,CRM029]     ;FLAG FOR EOC AND TRANSLATOR\r
171         JRST CRIGNOR    ;FLUSH REST OF THIS CARD\r
172 \r
173 CRASCI: MOVEI TAC,0     ;CLEAR TAC\r
174         CAIN DAT,5000\r
175         MOVEI DAT,4202  ;12-0 => 12-8-2\r
176         CAIN DAT,3000\r
177         MOVEI DAT,2202  ;11-0 => 11-8-2\r
178         LDB TAC1,[XWD 110300,DAT]       ;12,11,0 ROWS TO TAC1\r
179         TRNE DAT,3      ;8 ZONE?\r
180         TRC TAC1,7      ;YES, PERMUTE TAC1\r
181         TRNE DAT,74     ;4 BIT?\r
182         TRO TAC1,10     ;YES\r
183         TRNE DAT,314    ;2 BIT?\r
184         TRO TAC,2       ;YES\r
185         TRNE DAT,525    ;1 BIT?\r
186         TRO TAC,1       ;YES\r
187         TRNN IOS,CRM029 ;HAS 029 CODE BEEN IMPLIED?\r
188         TRO TAC1,20     ;NO. MOVE UP TO 026 CODE TABLE\r
189         LDB DAT,CRCV2(TAC)      ;GET THE ASCII CHARACTER\r
190         PUSHJ PDP,CRSTOD        ;STORE IT\r
191         JRST CREXIT     ;AND RETURN\r
192 \r
193 CRCV2:  POINT 7,CRCNV(TAC1),6\r
194         POINT 7,CRCNV(TAC1),13\r
195         POINT 7,CRCNV(TAC1),20\r
196         POINT 7,CRCNV(TAC1),27\r
197 \r
198 \f\r
199 EXTERN CDRCHN\r
200 \r
201 CRFSTI: LSH DAT,30\r
202         MOVEM DAT,CRTEM ;SAVE AS LEFT 12 BITS\r
203         JSP TAC,CREXI1  ;GET ANOTHER COLUMN\r
204         LSH DAT,14\r
205         IORM DAT,CRTEM  ;THROW IN MIDDLE 12 BITS\r
206         JSP TAC,CREXI1  ;ANOTHER COLUMN\r
207         IORB DAT,CRTEM  ;RIGHT 12. SAVE IN CRTEM FOR DEBUG\r
208 CRBIN2: PUSHJ PDP,CRSTOD        ;ENTRY HERE FROM BIN CARDS\r
209         MOVEI TAC,CRFSTI        ;ANOTHER 3 COLUMNS COME NEXT\r
210 CREXI1: HRRM TAC,CRDIS  ;WHERE TO GO FOR NEXT COLUMN\r
211         JRST CREXIT     ;RETURN FROM INTERRUPT\r
212 \r
213 CDREOC: CONSO CDR,CREOFF\r
214         TLNE IOS,IOEND  ;END OF FILE?\r
215         JRST CREOF      ;YES. SHUT OFF CDR\r
216         TLNN IOS,CRMIMG+CRMBIN  ;IMAGE OR BIN?\r
217         JRST CRENDA     ;ASCII\r
218         TLNN IOS,CRMIMG ;IMAGE?\r
219         JRST CRENDB     ;BINARY.\r
220         MOVE DAT,CRTEM  ;HERE ON EOC AND IMAGE\r
221         PUSHJ PDP,CRSTOD        ;STORE LAST 2 COLUMNS IN BUFFER\r
222 CRENDB: PUSHJ PDP,CRADV1        ;ADVANCE BUFFER\r
223 CRENDC: MOVEI TAC,CDRCHN        ;PI CHANNEL\r
224         CONO CDR,CRCONO(TAC)    ;GO FOR NEXT CARD\r
225         JRST CRLST1     ;SET UP FOR NEXT CARD,DISMISS INTERRUPT,\r
226                         ;ALSO WAKE UP JOB IF IN IOW\r
227 \r
228 CRFSTB: MOVEI TAC,-5(DAT)\r
229         TRNE TAC,17     ;ROWS 6-9=5?\r
230         TRO IOS,IOIMPM  ;NO. NOT A BIN CARD\r
231         LSH DAT,-4      ;GET COLUMNS 1-5\r
232         JUMPE DAT,CRIGNOR       ;IGNORE BINARY CARDS WITH 0 WORD COUNT\r
233         MOVEM DAT,CRTEM ;SAVE AS WORD COUNT\r
234         JSP TAC,CREXI1  ;GET COLUMN 2\r
235         HRL DAT,CRTEM   ;(COUNT)CKSUM\r
236         MOVSS DAT       ;(CKSUM)COUNT\r
237         JRST CRBIN2     ;STORE DAT AND GET REST OF CARD\r
238 \r
239 \f\r
240 EXTERN STOSQD,STODAT,ADVBFF\r
241 \r
242 CRENDA: TLZE IOS,IOBEG  ;WAS THIS A 029 CONTROL CARD?\r
243         JRST CRCONT     ;YES. NO CRLF.\r
244         MOVEI DAT,15    ;CARRIAGE RETURN\r
245         PUSHJ PDP,CRSTOD        ;STORE\r
246         MOVEI DAT,12    ;LINE FEED\r
247         PUSHJ PDP,CRSTOD        ;STORE\r
248         LDB TAC1,PIOMOD ;GET MODE\r
249         CAIN TAC1,AL            ;ASCII LINE?\r
250         JRST CRENDC             ;YES -WORD COUNT WILL HAVE BEEN COMPUTED & BUFFERS ADVANCED\r
251         CAIL ITEM,^D82  ;ROOM FOR ANOTHER CARD + CRLF?\r
252         JRST CRCONT     ;YES. DO SO\r
253         PUSHJ PDP,STOSQD        ;NO. STORE WORD COUNT\r
254         JRST CROFF      ;CAN'T RETURN HERE, BUT ...\r
255         JRST CRENDB     ;PROCEED TO ANOTHER BUFFER\r
256 \r
257 CREOF1: TLO IOS,IOEND   ;HERE ON EOF CARD. MARK FOR EOC\r
258 CRIGNOR:        JSP TAC,CREXI1  ;GET MORE COLUMNS\r
259         JRST .-1        ;AND IGNORE THEM.\r
260 \r
261 CRSTOD: PUSHJ PDP,STODAT        ;STORE DAT IN BUFFER\r
262         JRST CRPOFF     ;ADDRESS CHECK,IOBKTL,IODTER (CKSUM)\r
263         JRST CRADV      ;BUFFER FULL OR BUFFER DONE\r
264         POPJ PDP,0      ;SIMPLE OK STORED RETURN\r
265 \r
266 CRADV:  TLNE IOS,CRMBIN ;BINARY?\r
267         JRST CRIGNOR    ;WAIT FOR END OF CARD\r
268 CRADV1: TLNE IOS,IOFST  ;VIRGIN BUFFER?\r
269         POPJ PDP,0      ;YES. KEEP THIS ONE\r
270         PUSHJ PDP,ADVBFF        ;ADVANCE TO ANOTHER BUFFER\r
271         SKIPA   ;NO BUFFER AVAILABLE\r
272         POPJ PDP,0      ;OK. RETURN\r
273 CRPOFF: POP PDP,TAC\r
274         JRST CROFF\r
275 \r
276 \f\r
277 ;CODE CONVERSION FOR THE 029 KEYPUNCH\r
278 \r
279 ;THE FOLLOWING EQUIVALENCES ARE ARTIFICIALLY DEFINED\r
280 \r
281 ;029 KEYTOP     ;ASCII 35       ;ASCII 37\r
282 ;CENT           [               [\r
283 ;0-8-2          ]               ]\r
284 ;VERT BAR       ^               HAT = L.C. VERT BAR\r
285 ;UNDERBAR       _               UNDERBAR\r
286 ;NEGATION       \               TILDE = L.C. NEGATION\r
287 \r
288         ;CHARACTERS     ;ZONE/DIGITS\r
289 CRCNV:  ASCII / 123/    ;N/N-3\r
290         ASCII .0/ST.    ;0/N-3\r
291         ASCII /-JKL/    ;11/N-3\r
292         ASCII /HI[./    ;12,8/N-3\r
293         ASCII /&ABC/    ;12/N-3\r
294         ASCII /QR!$/    ;11,8/N-3\r
295         ASCII /YZ],/    ;0,8/N-3\r
296         ASCII /89:#/    ;8/N-3\r
297         ASCII /4567/    ;N/4-7\r
298         ASCII /UVWX/    ;0/4-7\r
299         ASCII /MNOP/    ;11/4-7\r
300         ASCII /<(+^/    ;12,8/4-7\r
301         ASCII /DEFG/    ;12/4-7\r
302         ASCII /*);\/    ;11,8/4-7\r
303         ASCII /%_>?/    ;0,8/4-7\r
304         ASCII /@'="/    ;8/4-7\r
305 \r
306 ;CODE FOR THE 026 KEYPUNCH A LA H HYMAN\r
307 \r
308         ASCII / 123/    ;N/N-3\r
309         ASCII .0/ST.    ;0/N-3\r
310         ASCII /-JKL/    ;11/N-3\r
311         ASCII /HI?./    ;12,8/N-3\r
312         ASCII /+ABC/    ;12/N-3\r
313         ASCII /QR:$/    ;11,8/N-3\r
314         ASCII /YZ;,/    ;0,8/N-3\r
315         ASCII /89_=/    ;8/N-3\r
316         ASCII /4567/    ;N/4-7\r
317         ASCII /UVWX/    ;0/4-7\r
318         ASCII /MNOP/    ;11/4-7\r
319         ASCII /)]<!/    ;12,8/4-7\r
320         ASCII /DEFG/    ;12/4-7\r
321         ASCII /*[>&/    ;11,8/4-7\r
322         ASCII /("#%/    ;0,8/4-7\r
323         ASCII /@^'\/    ;8/4-7\r
324 \r
325 \r
326         END\r
327 \f\r