Commit | Line | Data |
---|---|---|
7af5ad59 PH |
1 | /3 CARD READER FOR BUILD |
2 | / | |
3 | / | |
4 | / | |
5 | / | |
6 | / | |
7 | / | |
8 | / | |
9 | / | |
10 | / | |
11 | /COPYRIGHT (C) 1974 BY DIGITAL EQUIPMENT CORPORATION | |
12 | / | |
13 | / | |
14 | / | |
15 | / | |
16 | / | |
17 | / | |
18 | / | |
19 | / | |
20 | / | |
21 | / | |
22 | /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE | |
23 | /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT | |
24 | /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY | |
25 | /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. | |
26 | / | |
27 | /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER | |
28 | /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED | |
29 | /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH | |
30 | /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. | |
31 | / | |
32 | /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE | |
33 | /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY | |
34 | /DIGITAL. | |
35 | / | |
36 | / | |
37 | / | |
38 | / | |
39 | / | |
40 | / | |
41 | / | |
42 | / | |
43 | / | |
44 | / | |
45 | \f *0 | |
46 | -1 | |
47 | DEVICE CR8E;DEVICE CDR;2030;4000;ZBLOCK 2 | |
48 | ||
49 | CDRVERSION="C&77 | |
50 | ||
51 | /V3 CHANGES: | |
52 | ||
53 | /1. VERSION # IS NOW 1 | |
54 | /2. FIXED BUG FOR CARDS WITH ODD NUMBER OF COLUMNS | |
55 | /3. CARD DONE FLAG IS CLEARED AT END | |
56 | ||
57 | *200 | |
58 | ||
59 | RCSF=6631 | |
60 | RCRA=6632 | |
61 | RCSP=6671 | |
62 | RCSE=6672 | |
63 | RCRD=6674 | |
64 | ||
65 | CDR, CDRVERSION /ENTRY POINT RELATIVE ZERO | |
66 | CDR770, 7700 /"SMA CLA" CLEARS THE AC | |
67 | CDRTMP, 0 /LESS THAN 400 - PROTECTS THE "SMA CLA" | |
68 | JMP CDRSET /INITIALIZATION - BECOMES "RDF" | |
69 | TAD CDRCIF /FORM "CIF CDF N" TO CALLING FIELDS | |
70 | DCA CDRXIT /SAVE CALLING FIELDS | |
71 | TAD CDRCCF-1 | |
72 | DCA CDRXIT-1 /RESTORE THE "ISZ CDR" | |
73 | TAD I CDR /GET FUNCTION WORD | |
74 | AND CDR070 /GET BUFFER FIELD BITS | |
75 | TAD CDRCCF /MAKE A "CDF N" | |
76 | DCA CDBCDF /SAVE IT IN THE GET CHAR LOOP | |
77 | TAD I CDR /GET FUNCTION WORD AGAIN | |
78 | ISZ CDR | |
79 | SPA /IS IT A WRITE FUNCTION? | |
80 | JMP CDRERR /YES - HARD ERROR | |
81 | AND CDR770 /GET COUNT BITS | |
82 | CIA | |
83 | DCA CDRWC /SAVE WORD COUNT (DIVIDED BY 2) | |
84 | TAD I CDR /GET BUFFER ADDRESS | |
85 | DCA CDRCA /AND SAVE IT | |
86 | ISZ CDR /THE BLOCK NUMBER IS IGNORED | |
87 | CDRCCF, CDF /WE ARE IN FIELD 0 | |
88 | DCA I CDRIN2 /RESET ^Z FLAG TO ZERO | |
89 | CDRLP, JMS I CDRIN4 /GET A CHARACTER | |
90 | DCA CDRTM1 /DATA FIELD STILL ZERO ON RETURN! | |
91 | JMS I CDRIN4 /GET NEXT CHARACTER | |
92 | DCA CDRTMP /AND SAVE IT | |
93 | JMS I CDRIN4 /GET NEXT CHARACTER | |
94 | RTL | |
95 | RTL /GET THE FIRST FOUR BITS OF IT | |
96 | DCA CDRTM2 /SAVE THE REST FOR LATER | |
97 | TAD CDRTM2 | |
98 | AND CDR740 /ONLY 4 BITS | |
99 | TAD CDRTM1 /ADD THOSE BITS TO THE 1ST CHAR | |
100 | CDBCDF, HLT /CDF TO BUFFER FIELD | |
101 | DCA I CDRCA /STORE 1ST CHARACTER | |
102 | ISZ CDRCA /BUMP POINTER TO BUFFER | |
103 | CDR740, 7400 /PROTECT THE ISZ AGAINST SKIPS | |
104 | TAD CDRTM2 | |
105 | RTL | |
106 | RTL /NOW GET LOW ORDER 4 BITS | |
107 | AND CDR7400 /AND ONLY 4 BITS | |
108 | TAD CDRTMP /ADD IN THE 2ND CHARACTER | |
109 | DCA I CDRCA /AND STORE THE WORD | |
110 | ISZ CDRCA /BUMP POINTER AGAIN | |
111 | CDR070, 70 /PROTECT THE ISZ | |
112 | CDF 0 /CDRGCH NEEDS 0 DF ON ENTRY! | |
113 | ISZ CDRWC /DONE? | |
114 | JMP CDRLP /NO - LOOP | |
115 | CDRERR, ISZ CDR /HERE WITH NEGATIVE AC ON WRITE - FATAL ERROR | |
116 | ISZ CDR /IF ^Z THIS IS ZEROED | |
117 | CDRXIT, HLT /RESTORE CALLING FIELDS | |
118 | JMP I CDR /EXIT | |
119 | ||
120 | CDRCA, 0 /BUFFER POINTER | |
121 | CDRWC, 0 /WORD COUNT DIVIDED BY 2 | |
122 | CDRTM1, 0 | |
123 | CDRTM2, 0 /SPLIT WORD TEMPORARY | |
124 | CDRCIF, CIF CDF 0 /TO FORM EXIT WORD | |
125 | ||
126 | CDRIN2, CDRJMP-CDRLOC /CORRECTED AT INITIALIZATION TIME | |
127 | CDRIN4, CDRGCH-CDRLOC | |
128 | ||
129 | 0 /** FREE LOCATIONS - COME AND GET 'EM ! | |
130 | 0 | |
131 | IFNZRO .-277 <RESORC,_ERROR_> /BUT THERE'S A CATCH | |
132 | CDRTBL, 0021;2223;2425;2627;3031;3203;4007;3502 | |
133 | 2017;6364;6566;6770;7172;7514;0577;3637 | |
134 | 1552;5354;5556;5760;6162;0104;1211;3374 | |
135 | 0641;4243;4445;4647;5051;7316;3410;1376 | |
136 | ||
137 | /DO NOT INSERT ANYTHING BETWEEN "CDRTBL" AND "CDRBUF"!! | |
138 | ||
139 | CDRBUF=. /CARD BUFFER | |
140 | ||
141 | CDRSET, RDF /INITIALIZATION CODE | |
142 | TAD CDRCCF | |
143 | DCA CDRSE1 /SAVE CALLING FIELDS | |
144 | CDF /WE ARE IN FIELD 0 | |
145 | JMS . /FIND OUT OUR LOCATION | |
146 | CDRLOC, TAD CDRSE2 /ADDRESS TO MODIFY | |
147 | TAD CDRLOC-1 /CORRECT IT | |
148 | DCA CDRSE3 /SAVE IT | |
149 | TAD I CDRSE3 /GET DATA TO MODIFY | |
150 | TAD CDRLOC-1 /CORRECT IT | |
151 | DCA I CDRSE3 /AND RESTORE IT | |
152 | ISZ CDRLOC /NEXT ADDRESS | |
153 | ISZ CDRSE4 /MORE? | |
154 | JMP CDRLOC /YES - LOOP | |
155 | TAD CDRSET | |
156 | DCA CDR+3 /SET THE "RDF" | |
157 | CDRSE1, HLT /RESTORE CALLING FIELDS | |
158 | JMP CDR+3 /AND BACK TO NORMAL | |
159 | ||
160 | CDRSE3, 0 /MODIFY POINTER | |
161 | CDRSE4, -5 /FIVE LOCATIONS TO MODIFY | |
162 | ||
163 | CDRSE2, CDRIN2-CDRLOC /LOCATIONS TO MODIFY | |
164 | CDRIN4-CDRLOC | |
165 | CDRIN5-CDRLOC | |
166 | CDRABF-CDRLOC | |
167 | CDRTAD-CDRLOC | |
168 | \f*CDRBUF+50 /END OF THE BUFFER | |
169 | ||
170 | CDRGCH, 0 /GET A CHARACTER ROUTINE - ENTER WITH DF=0 | |
171 | CDRJMP, 0 /THIS IS "JMP I CDRGCH" AFTER A ^Z | |
172 | ISZ CDRCNT /MORE CHARACTERS IN THE INTERNAL BUFFER? | |
173 | JMP CDRGET /YES - GET ONE | |
174 | CDRGE4, ISZ CDRCT2 /GIVE A 215, 212 FOR EVERY CARD | |
175 | JMP CDRCLF /215, 212 ROUTINE | |
176 | CLL CLA CMA RTL | |
177 | DCA CDRCT2 /RESET COUNT TO -3 | |
178 | CDRGNC, TAD CDRABF | |
179 | DCA CDRPT /SET POINTER TO INTERNAL BUFFER | |
180 | CDRGE0, KSF /KEYBORAD FLAG UP? | |
181 | JMP CDRGE7 /NO - TRY TO READ A CARD | |
182 | TAD CDR760 /FORCE THE PARITY BIT ON | |
183 | KRS /READ STATIC FROM KEYBOARD | |
184 | TAD CDR175 /IS IT ^C? | |
185 | SNA | |
186 | JMP I CDR760 /YES - TO MONITOR VIA 07600 | |
187 | TAD CDRM27 /IS IT ^Z? | |
188 | SZA CLA | |
189 | JMP CDRGE7 /NO - GET A CARD | |
190 | KCC /KILL FLAG | |
191 | CDRGEZ, CLA CMA | |
192 | DCA CDRCNT /RESET COUNTS TO SKIP | |
193 | CLA CMA | |
194 | DCA CDRCT2 | |
195 | TAD CDRMOD | |
196 | DCA CDRJMP /SET TO GIVE 0'S | |
197 | DCA I CDRIN5 /AND A SOFT ERROR | |
198 | TAD CDR232 /^Z | |
199 | JMP I CDRGCH /EXIT | |
200 | ||
201 | CDRGE7, RCSE /SELECT A CARD | |
202 | JMP CDRGE0 /NO GO - TRY AGAIN | |
203 | DCA CDRSW /SET PACKING SWITCH | |
204 | CDRGCL, DCA CDRTIM /INITIALIZE TIMEOUT COUNTER | |
205 | CDRGE1, RCSP /CARD DONE? | |
206 | JMP CDRGE2 /NO - TRY FOR DATA READY | |
207 | RCRD /CLEAR CARD DONE FLAG | |
208 | CDRGE3, TAD I CDRPT /GET LAST TWO CHARACTERS | |
209 | SZA /BOTH SPACES? | |
210 | JMP CDRGE5 /NO | |
211 | CLA CMA | |
212 | TAD CDRPT | |
213 | DCA CDRPT /BACK UP POINTER ONE | |
214 | ISZ CDRCNT | |
215 | ISZ CDRCNT /AND TAKE COUNT DOWN BY 2 | |
216 | JMP CDRGE3 /TEST AGAIN OR... | |
217 | JMP CDRGE4 /IF COUNT IS ZERO THE A BLANK CARD | |
218 | ||
219 | CDRGE5, AND CDR077 /IS RIGHT HAND CHARACTER A SPACE? | |
220 | SNA CLA | |
221 | ISZ CDRCNT /YES A SPACE - REDUCE COUNT | |
222 | TAD I CDRPT /GET LAST NON-SPACE | |
223 | TAD CDR077 /THIS FORMS 7777 IFF WORD CONTAINS "_" | |
224 | AND CDRCNT /THIS MAINTAINS 7777 IFF CDRCNT IS -1 | |
225 | CMA | |
226 | SNA CLA /ARE BOTH CONDITIONS TRUE? | |
227 | JMP CDRGEZ /YES - MUST BE END OF FILE | |
228 | CDRGE6, TAD CDR077 | |
229 | DCA CDRSW /SET OFFSET FROM "CDRTBL" | |
230 | CDRGET, ISZ CDRSW /BUMP OFFSET | |
231 | TAD CDRSW /OFFSET INTO AC | |
232 | JMS CDRGE8 /GET A CHARACTER | |
233 | TAD CDR240 /MAKE IT ASCII | |
234 | CDRMOD, JMP I CDRGCH | |
235 | ||
236 | CDRGE8, 0 /GET FROM BUFFER ROUTINE | |
237 | CLL RAR /DIVIDE BY 2 - AND INTO LINK IS INDICATOR | |
238 | TAD CDRTAD /ADDRESS OF "CDRTBL" | |
239 | DCA CDRTM3 /SET POINTER | |
240 | TAD I CDRTM3 /GET WORD | |
241 | SZL /SHIFT? | |
242 | JMP .+4 /NO | |
243 | RTR /YES | |
244 | RTR | |
245 | RTR | |
246 | AND CDR077 /GET 6 BITS | |
247 | JMP I CDRGE8 | |
248 | ||
249 | CDRGE2, RCSF /DATA READY? | |
250 | JMP CDRGEX /NO - TRY FOR TIME OUT | |
251 | RCRA /READ ALPHA | |
252 | JMS CDRGE8 /GET TABLE ENTRY | |
253 | ISZ CDRSW /WHICH SIDE? | |
254 | JMP CDRGE9 /LEFT SIDE | |
255 | TAD I CDRPT | |
256 | DCA I CDRPT /FORM RIGHT SIDE | |
257 | JMP CDRGCL /CONTINUE | |
258 | ||
259 | CDRGE9, CLL RTL /SHIFT LEFT | |
260 | RTL | |
261 | RTL | |
262 | ISZ CDRPT /BUMP POINTER | |
263 | DCA I CDRPT /STORE LEFT SIDE | |
264 | CLA CLL CMA RAL /-2 V3 FROM SIS BULLETING JAN 73 | |
265 | TAD CDRCNT | |
266 | DCA CDRCNT /COUNT THE CHARACTERS | |
267 | CLA CMA | |
268 | JMP CDRGCL-1 /CONTINUE - SET SWITCH | |
269 | \fCDRCLF, CLA CMA | |
270 | DCA CDRCNT /SET MAIN COUNT TO SKIP | |
271 | TAD CDRCT2 | |
272 | CLL CMA RTL /ALL THIS DOES IS... | |
273 | TAD CDRCT2 /MAKE A 2 OR -1 | |
274 | TAD CDR213 /SO THIS MAKES A 215 OR 212 | |
275 | JMP I CDRGCH | |
276 | ||
277 | CDRGEX, /TEST TIME OUT - FIRST DELAY USING CONSTANTS | |
278 | CDR760, 7600 /MONITOR ADDRESS | |
279 | CDR077, 77 /SIX BIT MASK | |
280 | CDRM77, -7700 /-"_ " | |
281 | CDR175, 175 | |
282 | CDR240, 240 /ASCII SPACE | |
283 | CDR213, 213 /215, 212 CORRECTION FACTOR | |
284 | CDR232, 232 /ASCII ^Z | |
285 | ISZ CDRTIM /THIS LOOP TAKES AT LEAST 100MS ON AN 8/E | |
286 | JMP CDRGE1 | |
287 | DCA CDRCNT /CLEAR COUNT IN CASE PARTIAL CARD READ (E.G. JAM) | |
288 | JMP CDRGNC /TIMED OUT - RESTART CARD | |
289 | ||
290 | CDRTM3, | |
291 | CDRTIM, 0 /TIMEOUT COUNTER | |
292 | CDRM27, -27 /-27-3=-32 ^Z TEST | |
293 | CDRCNT, -1 /MAIN COUNT | |
294 | CDRCT2, -1 /215, 212 COUNT | |
295 | CDRPT, 0 /BUFFER POINTER | |
296 | CDRSW, 0 /SWITCH | |
297 | ||
298 | CDRABF, CDRBUF-1-CDRLOC /MODIFIED LOCATIONS | |
299 | CDRTAD, CDRTBL-CDRLOC | |
300 | CDRIN5, CDRXIT-1-CDRLOC | |
301 | $ | |
302 | \f |