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 *0 46 000000 7777 -1 47 000001 0322 DEVICE CR8E;DEVICE CDR;2030;4000;ZBLOCK 2 000002 7005 000003 0304 000004 2200 000005 2030 000006 4000 000007 0000 000010 0000 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 000200 0003 CDR, CDRVERSION /ENTRY POINT RELATIVE ZERO 66 000201 7700 CDR770, 7700 /"SMA CLA" CLEARS THE AC 67 000202 0000 CDRTMP, 0 /LESS THAN 400 - PROTECTS THE "SMA CLA" 68 000203 5337 JMP CDRSET /INITIALIZATION - BECOMES "RDF" 69 000204 1272 TAD CDRCIF /FORM "CIF CDF N" TO CALLING FIELDS 70 000205 3264 DCA CDRXIT /SAVE CALLING FIELDS 71 000206 1225 TAD CDRCCF-1 72 000207 3263 DCA CDRXIT-1 /RESTORE THE "ISZ CDR" 73 000210 1600 TAD I CDR /GET FUNCTION WORD 74 000211 0256 AND CDR070 /GET BUFFER FIELD BITS 75 000212 1226 TAD CDRCCF /MAKE A "CDF N" 76 000213 3243 DCA CDBCDF /SAVE IT IN THE GET CHAR LOOP 77 000214 1600 TAD I CDR /GET FUNCTION WORD AGAIN 78 000215 2200 ISZ CDR 79 000216 7510 SPA /IS IT A WRITE FUNCTION? 80 000217 5262 JMP CDRERR /YES - HARD ERROR 81 000220 0201 AND CDR770 /GET COUNT BITS 82 000221 7041 CIA 83 000222 3267 DCA CDRWC /SAVE WORD COUNT (DIVIDED BY 2) 84 000223 1600 TAD I CDR /GET BUFFER ADDRESS 85 000224 3266 DCA CDRCA /AND SAVE IT 86 000225 2200 ISZ CDR /THE BLOCK NUMBER IS IGNORED 87 000226 6201 CDRCCF, CDF /WE ARE IN FIELD 0 88 000227 3673 DCA I CDRIN2 /RESET ^Z FLAG TO ZERO 89 000230 4674 CDRLP, JMS I CDRIN4 /GET A CHARACTER 90 000231 3270 DCA CDRTM1 /DATA FIELD STILL ZERO ON RETURN! 91 000232 4674 JMS I CDRIN4 /GET NEXT CHARACTER 92 000233 3202 DCA CDRTMP /AND SAVE IT 93 000234 4674 JMS I CDRIN4 /GET NEXT CHARACTER 94 000235 7006 RTL 95 000236 7006 RTL /GET THE FIRST FOUR BITS OF IT 96 000237 3271 DCA CDRTM2 /SAVE THE REST FOR LATER 97 000240 1271 TAD CDRTM2 98 000241 0246 AND CDR740 /ONLY 4 BITS 99 000242 1270 TAD CDRTM1 /ADD THOSE BITS TO THE 1ST CHAR 100 000243 7402 CDBCDF, HLT /CDF TO BUFFER FIELD 101 000244 3666 DCA I CDRCA /STORE 1ST CHARACTER 102 000245 2266 ISZ CDRCA /BUMP POINTER TO BUFFER 103 000246 7400 CDR740, 7400 /PROTECT THE ISZ AGAINST SKIPS 104 000247 1271 TAD CDRTM2 105 000250 7006 RTL 106 000251 7006 RTL /NOW GET LOW ORDER 4 BITS 107 000252 0246 AND CDR7400 /AND ONLY 4 BITS 108 000253 1202 TAD CDRTMP /ADD IN THE 2ND CHARACTER 109 000254 3666 DCA I CDRCA /AND STORE THE WORD 110 000255 2266 ISZ CDRCA /BUMP POINTER AGAIN 111 000256 0070 CDR070, 70 /PROTECT THE ISZ 112 000257 6201 CDF 0 /CDRGCH NEEDS 0 DF ON ENTRY! 113 000260 2267 ISZ CDRWC /DONE? 114 000261 5230 JMP CDRLP /NO - LOOP 115 000262 2200 CDRERR, ISZ CDR /HERE WITH NEGATIVE AC ON WRITE - FATAL ERROR 116 000263 2200 ISZ CDR /IF ^Z THIS IS ZEROED 117 000264 7402 CDRXIT, HLT /RESTORE CALLING FIELDS 118 000265 5600 JMP I CDR /EXIT 119 120 000266 0000 CDRCA, 0 /BUFFER POINTER 121 000267 0000 CDRWC, 0 /WORD COUNT DIVIDED BY 2 122 000270 0000 CDRTM1, 0 123 000271 0000 CDRTM2, 0 /SPLIT WORD TEMPORARY 124 000272 6203 CDRCIF, CIF CDF 0 /TO FORM EXIT WORD 125 126 000273 0044 CDRIN2, CDRJMP-CDRLOC /CORRECTED AT INITIALIZATION TIME 127 000274 0043 CDRIN4, CDRGCH-CDRLOC 128 129 000275 0000 0 /** FREE LOCATIONS - COME AND GET 'EM ! 130 000276 0000 0 131 IFNZRO .-277 /BUT THERE'S A CATCH 132 000277 0021 CDRTBL, 0021;2223;2425;2627;3031;3203;4007;3502 000300 2223 000301 2425 000302 2627 000303 3031 000304 3203 000305 4007 000306 3502 133 000307 2017 2017;6364;6566;6770;7172;7514;0577;3637 000310 6364 000311 6566 000312 6770 000313 7172 000314 7514 000315 0577 000316 3637 134 000317 1552 1552;5354;5556;5760;6162;0104;1211;3374 000320 5354 000321 5556 000322 5760 000323 6162 000324 0104 000325 1211 000326 3374 135 000327 0641 0641;4243;4445;4647;5051;7316;3410;1376 000330 4243 000331 4445 000332 4647 000333 5051 000334 7316 000335 3410 000336 1376 136 137 /DO NOT INSERT ANYTHING BETWEEN "CDRTBL" AND "CDRBUF"!! 138 139 CDRBUF=. /CARD BUFFER 140 141 000337 6214 CDRSET, RDF /INITIALIZATION CODE 142 000340 1226 TAD CDRCCF 143 000341 3357 DCA CDRSE1 /SAVE CALLING FIELDS 144 000342 6201 CDF /WE ARE IN FIELD 0 145 000343 4343 JMS . /FIND OUT OUR LOCATION 146 000344 1363 CDRLOC, TAD CDRSE2 /ADDRESS TO MODIFY 147 000345 1343 TAD CDRLOC-1 /CORRECT IT 148 000346 3361 DCA CDRSE3 /SAVE IT 149 000347 1761 TAD I CDRSE3 /GET DATA TO MODIFY 150 000350 1343 TAD CDRLOC-1 /CORRECT IT 151 000351 3761 DCA I CDRSE3 /AND RESTORE IT 152 000352 2344 ISZ CDRLOC /NEXT ADDRESS 153 000353 2362 ISZ CDRSE4 /MORE? 154 000354 5344 JMP CDRLOC /YES - LOOP 155 000355 1337 TAD CDRSET 156 000356 3203 DCA CDR+3 /SET THE "RDF" 157 000357 7402 CDRSE1, HLT /RESTORE CALLING FIELDS 158 000360 5203 JMP CDR+3 /AND BACK TO NORMAL 159 160 000361 0000 CDRSE3, 0 /MODIFY POINTER 161 000362 7773 CDRSE4, -5 /FIVE LOCATIONS TO MODIFY 162 163 000363 7727 CDRSE2, CDRIN2-CDRLOC /LOCATIONS TO MODIFY 164 000364 7730 CDRIN4-CDRLOC 165 000365 0233 CDRIN5-CDRLOC 166 000366 0231 CDRABF-CDRLOC 167 000367 0232 CDRTAD-CDRLOC 168 *CDRBUF+50 /END OF THE BUFFER 169 170 000407 0000 CDRGCH, 0 /GET A CHARACTER ROUTINE - ENTER WITH DF=0 171 000410 0000 CDRJMP, 0 /THIS IS "JMP I CDRGCH" AFTER A ^Z 172 000411 2371 ISZ CDRCNT /MORE CHARACTERS IN THE INTERNAL BUFFER? 173 000412 5301 JMP CDRGET /YES - GET ONE 174 000413 2372 CDRGE4, ISZ CDRCT2 /GIVE A 215, 212 FOR EVERY CARD 175 000414 5345 JMP CDRCLF /215, 212 ROUTINE 176 000415 7346 CLL CLA CMA RTL 177 000416 3372 DCA CDRCT2 /RESET COUNT TO -3 178 000417 1375 CDRGNC, TAD CDRABF 179 000420 3373 DCA CDRPT /SET POINTER TO INTERNAL BUFFER 180 000421 6031 CDRGE0, KSF /KEYBORAD FLAG UP? 181 000422 5245 JMP CDRGE7 /NO - TRY TO READ A CARD 182 000423 1354 TAD CDR760 /FORCE THE PARITY BIT ON 183 000424 6034 KRS /READ STATIC FROM KEYBOARD 184 000425 1357 TAD CDR175 /IS IT ^C? 185 000426 7450 SNA 186 000427 5754 JMP I CDR760 /YES - TO MONITOR VIA 07600 187 000430 1370 TAD CDRM27 /IS IT ^Z? 188 000431 7640 SZA CLA 189 000432 5245 JMP CDRGE7 /NO - GET A CARD 190 000433 6032 KCC /KILL FLAG 191 000434 7240 CDRGEZ, CLA CMA 192 000435 3371 DCA CDRCNT /RESET COUNTS TO SKIP 193 000436 7240 CLA CMA 194 000437 3372 DCA CDRCT2 195 000440 1305 TAD CDRMOD 196 000441 3210 DCA CDRJMP /SET TO GIVE 0'S 197 000442 3777 DCA I CDRIN5 /AND A SOFT ERROR 198 000443 1362 TAD CDR232 /^Z 199 000444 5607 JMP I CDRGCH /EXIT 200 201 000445 6672 CDRGE7, RCSE /SELECT A CARD 202 000446 5221 JMP CDRGE0 /NO GO - TRY AGAIN 203 000447 3374 DCA CDRSW /SET PACKING SWITCH 204 000450 3367 CDRGCL, DCA CDRTIM /INITIALIZE TIMEOUT COUNTER 205 000451 6671 CDRGE1, RCSP /CARD DONE? 206 000452 5322 JMP CDRGE2 /NO - TRY FOR DATA READY 207 000453 6674 RCRD /CLEAR CARD DONE FLAG 208 000454 1773 CDRGE3, TAD I CDRPT /GET LAST TWO CHARACTERS 209 000455 7440 SZA /BOTH SPACES? 210 000456 5266 JMP CDRGE5 /NO 211 000457 7240 CLA CMA 212 000460 1373 TAD CDRPT 213 000461 3373 DCA CDRPT /BACK UP POINTER ONE 214 000462 2371 ISZ CDRCNT 215 000463 2371 ISZ CDRCNT /AND TAKE COUNT DOWN BY 2 216 000464 5254 JMP CDRGE3 /TEST AGAIN OR... 217 000465 5213 JMP CDRGE4 /IF COUNT IS ZERO THE A BLANK CARD 218 219 000466 0355 CDRGE5, AND CDR077 /IS RIGHT HAND CHARACTER A SPACE? 220 000467 7650 SNA CLA 221 000470 2371 ISZ CDRCNT /YES A SPACE - REDUCE COUNT 222 000471 1773 TAD I CDRPT /GET LAST NON-SPACE 223 000472 1355 TAD CDR077 /THIS FORMS 7777 IFF WORD CONTAINS "_" 224 000473 0371 AND CDRCNT /THIS MAINTAINS 7777 IFF CDRCNT IS -1 225 000474 7040 CMA 226 000475 7650 SNA CLA /ARE BOTH CONDITIONS TRUE? 227 000476 5234 JMP CDRGEZ /YES - MUST BE END OF FILE 228 000477 1355 CDRGE6, TAD CDR077 229 000500 3374 DCA CDRSW /SET OFFSET FROM "CDRTBL" 230 000501 2374 CDRGET, ISZ CDRSW /BUMP OFFSET 231 000502 1374 TAD CDRSW /OFFSET INTO AC 232 000503 4306 JMS CDRGE8 /GET A CHARACTER 233 000504 1360 TAD CDR240 /MAKE IT ASCII 234 000505 5607 CDRMOD, JMP I CDRGCH 235 236 000506 0000 CDRGE8, 0 /GET FROM BUFFER ROUTINE 237 000507 7110 CLL RAR /DIVIDE BY 2 - AND INTO LINK IS INDICATOR 238 000510 1376 TAD CDRTAD /ADDRESS OF "CDRTBL" 239 000511 3367 DCA CDRTM3 /SET POINTER 240 000512 1767 TAD I CDRTM3 /GET WORD 241 000513 7430 SZL /SHIFT? 242 000514 5320 JMP .+4 /NO 243 000515 7012 RTR /YES 244 000516 7012 RTR 245 000517 7012 RTR 246 000520 0355 AND CDR077 /GET 6 BITS 247 000521 5706 JMP I CDRGE8 248 249 000522 6631 CDRGE2, RCSF /DATA READY? 250 000523 5354 JMP CDRGEX /NO - TRY FOR TIME OUT 251 000524 6632 RCRA /READ ALPHA 252 000525 4306 JMS CDRGE8 /GET TABLE ENTRY 253 000526 2374 ISZ CDRSW /WHICH SIDE? 254 000527 5333 JMP CDRGE9 /LEFT SIDE 255 000530 1773 TAD I CDRPT 256 000531 3773 DCA I CDRPT /FORM RIGHT SIDE 257 000532 5250 JMP CDRGCL /CONTINUE 258 259 000533 7106 CDRGE9, CLL RTL /SHIFT LEFT 260 000534 7006 RTL 261 000535 7006 RTL 262 000536 2373 ISZ CDRPT /BUMP POINTER 263 000537 3773 DCA I CDRPT /STORE LEFT SIDE 264 000540 7344 CLA CLL CMA RAL /-2 V3 FROM SIS BULLETING JAN 73 265 000541 1371 TAD CDRCNT 266 000542 3371 DCA CDRCNT /COUNT THE CHARACTERS 267 000543 7240 CLA CMA 268 000544 5247 JMP CDRGCL-1 /CONTINUE - SET SWITCH 269 000545 7240 CDRCLF, CLA CMA 270 000546 3371 DCA CDRCNT /SET MAIN COUNT TO SKIP 271 000547 1372 TAD CDRCT2 272 000550 7146 CLL CMA RTL /ALL THIS DOES IS... 273 000551 1372 TAD CDRCT2 /MAKE A 2 OR -1 274 000552 1361 TAD CDR213 /SO THIS MAKES A 215 OR 212 275 000553 5607 JMP I CDRGCH 276 277 CDRGEX, /TEST TIME OUT - FIRST DELAY USING CONSTANTS 278 000554 7600 CDR760, 7600 /MONITOR ADDRESS 279 000555 0077 CDR077, 77 /SIX BIT MASK 280 000556 0100 CDRM77, -7700 /-"_ " 281 000557 0175 CDR175, 175 282 000560 0240 CDR240, 240 /ASCII SPACE 283 000561 0213 CDR213, 213 /215, 212 CORRECTION FACTOR 284 000562 0232 CDR232, 232 /ASCII ^Z 285 000563 2367 ISZ CDRTIM /THIS LOOP TAKES AT LEAST 100MS ON AN 8/E 286 000564 5251 JMP CDRGE1 287 000565 3371 DCA CDRCNT /CLEAR COUNT IN CASE PARTIAL CARD READ (E.G. JAM) 288 000566 5217 JMP CDRGNC /TIMED OUT - RESTART CARD 289 290 CDRTM3, 291 000567 0000 CDRTIM, 0 /TIMEOUT COUNTER 292 000570 7751 CDRM27, -27 /-27-3=-32 ^Z TEST 293 000571 7777 CDRCNT, -1 /MAIN COUNT 294 000572 7777 CDRCT2, -1 /215, 212 COUNT 295 000573 0000 CDRPT, 0 /BUFFER POINTER 296 000574 0000 CDRSW, 0 /SWITCH 297 298 000575 7772 CDRABF, CDRBUF-1-CDRLOC /MODIFIED LOCATIONS 299 000576 7733 CDRTAD, CDRTBL-CDRLOC 300 000577 7717 CDRIN5, CDRXIT-1-CDRLOC 301 $ CDBCDF 0243 CDR 0200 CDR070 0256 CDR077 0555 CDR175 0557 CDR213 0561 CDR232 0562 CDR240 0560 CDR740 0246 CDR760 0554 CDR770 0201 CDRABF 0575 CDRBUF 0337 CDRCA 0266 CDRCCF 0226 CDRCIF 0272 CDRCLF 0545 CDRCNT 0571 CDRCT2 0572 CDRERR 0262 CDRGCH 0407 CDRGCL 0450 CDRGE0 0421 CDRGE1 0451 CDRGE2 0522 CDRGE3 0454 CDRGE4 0413 CDRGE5 0466 CDRGE6 0477 unreferenced CDRGE7 0445 CDRGE8 0506 CDRGE9 0533 CDRGET 0501 CDRGEX 0554 CDRGEZ 0434 CDRGNC 0417 CDRIN2 0273 CDRIN4 0274 CDRIN5 0577 CDRJMP 0410 CDRLOC 0344 CDRLP 0230 CDRM27 0570 CDRM77 0556 unreferenced CDRMOD 0505 CDRPT 0573 CDRSE1 0357 CDRSE2 0363 CDRSE3 0361 CDRSE4 0362 CDRSET 0337 CDRSW 0574 CDRTAD 0576 CDRTBL 0277 CDRTIM 0567 CDRTM1 0270 CDRTM2 0271 CDRTM3 0567 CDRTMP 0202 CDRVER 0003 CDRWC 0267 CDRXIT 0264 RCRA 6632 RCRD 6674 RCSE 6672 RCSF 6631 RCSP 6671