| 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 |