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