| 1 | / OS/8 TSAR/TSARINA\r |
| 2 | /\r |
| 3 | / ADBUFF.RA\r |
| 4 | /\r |
| 5 | / DEC-S8-STSAA-A-LA25\r |
| 6 | /\r |
| 7 | / K. ELLSON AND L. PEARSON\r |
| 8 | /\r |
| 9 | / /8 AD CONVERSION CLOCKED WITH CLOCK ROUTINE\r |
| 10 | / /8 /1 AD CONVERSION CLOCKED WITH CLOCK1 ROUTINE\r |
| 11 | / /8/4/1 AD CONVERSION CLOCKED WITH CLOCK1 AND SCHMITT TRIGGER INPUT TIMED WITH CLOCK ROUTINE\r |
| 12 | /\r |
| 13 | /\r |
| 14 | / TSAR SUBROUTINE - BUFFERED A/D\r |
| 15 | / COPYRIGHT 1973\r |
| 16 | / DIGITAL EQUIPMENT CORPORATION\r |
| 17 | / MAYNARD, MASSACHUSETTS 01754\r |
| 18 | /\r |
| 19 | / THIS PACKAGE PROVIDES A FUNCTIONAL REPLACEMENT FOR\r |
| 20 | / THE FOLLOWING FORTRAN IV LIBRARY SUBROUTINES: REALTM\r |
| 21 | / AND ADB. REALTM AND ADB ARE REPLACED BY THE SUBROUTINE\r |
| 22 | / THRUPT. A THRUPT CALL IS ILLUSTRATED BY THE FOLLOWING\r |
| 23 | / FORTRAN PROGRAM.\r |
| 24 | /\r |
| 25 | /*************************************************************\r |
| 26 | /\r |
| 27 | / EXTERNAL STAT1,STAT2\r |
| 28 | / INTEGER BUFF1(85),BUFF2(85),IPARMS(3),HASH(# OF CHANNELS)\r |
| 29 | / CALL THRUPT(BUFF1,BUFF2,IPARMS,HASH,NTRIG)\r |
| 30 | / CALL CLOCK(8,IRATE) @ IF NO /1 SWITCH AT ASSEMBLY TIME \r |
| 31 | / @ FOR A/D CONVERSION TIMED WITH FIRST DK8-EP\r |
| 32 | / CALL CLOCK1(8,IRATE) @ IF /1 SWITCH SET AT ASSEMBLY TIME\r |
| 33 | / @ THIS IS FOR A/D CONVERSION TIMED WITH 2ND DK8-EP\r |
| 34 | / IF YOU USE BOTH CLOCKS ON ONE SYSTEM, THEN YOU\r |
| 35 | / MAY SWITCH ON ONLY ONE CLOCK-TIMED A/D CONVERSION.\r |
| 36 | / THIS MEANS: ONLY ONE CLOCK MAY BE STARTED WITH FUNCTION=8 (BIT 9 SET)\r |
| 37 | / ...\r |
| 38 | / 100 IF (STAT1-0.5) 100, 110, 999\r |
| 39 | / 110 WRITE (5) BUFF1\r |
| 40 | / CALL RELEAS (1)\r |
| 41 | / ...\r |
| 42 | / 999 WRITE (4,1000)\r |
| 43 | / 1000 FORMAT (' SAMPLING TOO FAST')\r |
| 44 | / CALL CLOCK (0,0)\r |
| 45 | / ...\r |
| 46 | /\r |
| 47 | /************************************************************\r |
| 48 | /\r |
| 49 | / BUFF1 - ONE OF 2 BUFFERS FOR THE ANALOG DATA, 255 12 BIT\r |
| 50 | / WORDS ARE STORED IN EACH BUFFER\r |
| 51 | /\r |
| 52 | / STAT1 - DYNAMIC STATUS WORD OF BUFF1. THE VALUES 0.25,\r |
| 53 | / 0.5, AND +1. INDICATE THAT THE BUFFER IS NOT FILLED,\r |
| 54 | / BUFFER IS FILLED, AND BUFFER OVERFLOW.\r |
| 55 | /\r |
| 56 | / BUFF2 - THE SECOND BUFFER.\r |
| 57 | /\r |
| 58 | / STAT2 - THE DYNAMIC STATUS WORD OF BUFF2, VALUES ARE THE\r |
| 59 | / SAME AS FOR STAT1.\r |
| 60 | \f/\r |
| 61 | / IPARMS - THE PARAMETER VECTOR WHICH CONTAINS IN ORDER THE\r |
| 62 | / STARTING CHANNEL, THE NUMBER OF CHANNELS, AND THE NUMBER\r |
| 63 | / OF SAMPLES. \r |
| 64 | / HASH - OPTIONAL: A TABLE CONTAINING THE READ VALID INFORMATION FOR A/D CHANNELS AND STRIGG INPUTS\r |
| 65 | / NTRIG - OPTIONAL BUT HASH MUST BE SPECIFIED:\r |
| 66 | / THE NUMBER OF SCHMITT TRIGGER CHANNELS TO SAMPLE\r |
| 67 | / CONFIGURATION REQUIRED FOR A/D AND STRIGG SAMPLING:\r |
| 68 | / FIRST DK8-EP: FREE RUNNING TIMER (10 KHZ OR 100 KHZ) FOR TRIGGER INPUT.\r |
| 69 | / CALL CLOCK4 (1 TO 7,3) FOR 10 KHZ\r |
| 70 | / CALL CLOCK4 (1 TO 7,30) FOR 100 KHZ \r |
| 71 | / SECOND DK8-EP STARTS THE A/D VIA EXTERNAL EVENT: CALL CLOCK1(8,RATE)\r |
| 72 | / TIME WORD: THE INTERVALL BETWEEN TWO A/D CYCLES IS DIVIDED INTO\r |
| 73 | / 12 SLICES CALLED S0 TO S11.\r |
| 74 | / AN EXTERNAL EVENT BETWEEN 0 AND S0 (SAMRAT/12) SETS THE LEFTMOST BIT 0.\r |
| 75 | / ' '' '' '' S11 AND SAMRAT SETS THE RIGHTMOST BIT 11.\r |
| 76 | /\r |
| 77 | / UPDATES:\r |
| 78 | /\r |
| 79 | / WGET: THE THIRD PARAMETER (RESULT) IS OPTIONAL\r |
| 80 | / VALID CALLS:\r |
| 81 | / I=WGET(BUFF,PNTR,RESULT)\r |
| 82 | / I=WGET(BUFF,PNTR)\r |
| 83 | / CALL WGET (BUFF,PNTR,RESULT)\r |
| 84 | /\r |
| 85 | / 11-SEP-80 HA\r |
| 86 | /\r |
| 87 | / INTERRUPT SERVICE ROUTINE FSMPLE:\r |
| 88 | / BEFORE THE READ ADRB WAIT FOR ADSE TO AVOID A NON VALID READ\r |
| 89 | / IF CLOCK DID'NT START THE AD CONVERTER.\r |
| 90 | / THEREFORE IN ANY CASE (ONE OR MORE CHANNELS) THE \r |
| 91 | / CLOCK MUST BE STARTED WITH CALL CLOCK(8,FREQU).\r |
| 92 | / FIRST PARAMETER OF CLOCK MUST BE 8 !\r |
| 93 | / 29-SEP-80 HA\r |
| 94 | / 1-OCT-82 HA REV 2.0 PACKS THE SAMPLE\r |
| 95 | / 15-JUL-83 HA REV 2.1 REARANGES CODE FOR PDP12 LINC OPTION\r |
| 96 | / 18-MAR-85 HA REV 3.0 ALLOWS TWO DK8-EP MODULES\r |
| 97 | / FOR A/D TRIGGED WITH DEV. CODE 13 CLOCK: /8 SWITCH\r |
| 98 | / FOR A/D TRIGG'D WITH DEV. CODE 17 CLOCK: /1 /8 SWITCH\r |
| 99 | / FOR A/D ON PDP-12 : NO SWITCH\r |
| 100 | /\r |
| 101 | / 26-JUN-85 HA REV 3.1 ALLOWS SCMITT TRIGGER INPUT WITH DK8-EP DEV 13 AND CLOCKED A/D WITH DK8-EP DEV 17\r |
| 102 | / 12-JUL-85 HA REV 4.0 EVERYTHING CONFUSED\r |
| 103 | / 20-AUG-85 HA REV 4.1 REMOVES BUG IN TRIGG. TIME PICKUP ROUTINE\r |
| 104 | /\r |
| 105 | \f/\r |
| 106 | CL1DEV=13*10 / FIRST DK8-EP\r |
| 107 | CL2DEV=17*10 / SECOND DK8-EP\r |
| 108 | /\r |
| 109 | MQL=7421\r |
| 110 | MQA=7501 / WE USE EAE MODE B\r |
| 111 | ACL=7701\r |
| 112 | SWP=7521\r |
| 113 | CAM=7621\r |
| 114 | SWAB=7431\r |
| 115 | DAD=7443\r |
| 116 | DST=7445\r |
| 117 | DLD=DAD!CAM\r |
| 118 | DDZ=DST!CAM\r |
| 119 | DVI=7407\r |
| 120 | DPIC=7573\r |
| 121 | DPSZ=7451\r |
| 122 | IFNSW 1 <\r |
| 123 | EXTERN #CLINT\r |
| 124 | CLINT= #CLINT\r |
| 125 | IFSW 4 < BAD SWITCH /1/4 >\r |
| 126 | >\r |
| 127 | IFSW 1 <\r |
| 128 | EXTERN #CLIN1\r |
| 129 | CLINT= #CLIN1\r |
| 130 | EXTERN #CLINT\r |
| 131 | >\r |
| 132 | CSTAT=157 /CLOCK ROUTINE PUTS CLSA BITS IN HERE\r |
| 133 | ENTRY STAT1 /ALLOW FORTRAN ACCESS TO THES\r |
| 134 | ENTRY STAT2 /LOCATIONS\r |
| 135 | COMMZ #PAGE0\r |
| 136 | ORG 2\r |
| 137 | PBUFF, 0 /PNTR TO CURRENT BUFFER\r |
| 138 | CURSTT, 0 /PNTR TO CURRENT STATUS WORD\r |
| 139 | NXTSTT, 0 /PNTR TO NEXT STATUS WORD\r |
| 140 | CURBUF, 0;0 /START OF CURRENT BUFFER PNTR\r |
| 141 | NXTBUF, 0;0 /START OF NEXT BUFFER PNTR\r |
| 142 | /STATUS WORDS, VALUES\r |
| 143 | STAT1, F 0.25 /0.25, 0.5, & 1.0 INDICATE\r |
| 144 | STAT2, F 0.25 /STATUS WORD IS NOT FILLED,\r |
| 145 | /FILLED, AND OVERFLOWED\r |
| 146 | /STATUS WORD: F 0.25 = 7777;2000;0000 NOT FILLED\r |
| 147 | / F 0.5 = 0000;2000;0000 FILLED\r |
| 148 | / F 1.0 = 0001;2000;0000 OVERFLOWED\r |
| 149 | /\r |
| 150 | IFSW 8 <\r |
| 151 | ADSK=6534\r |
| 152 | ADRB=6533\r |
| 153 | ADST=6532\r |
| 154 | ADLM=6531\r |
| 155 | ADLE=6536\r |
| 156 | ADCL=6530\r |
| 157 | ADRS=6537\r |
| 158 | ADSE=6535\r |
| 159 | CLED=6134\r |
| 160 | CLAB=6003\r |
| 161 | CLBA=6006 / DO NOT FORGET TO INSERT THE DEVICE CODE\r |
| 162 | CLZE=6000\r |
| 163 | >\r |
| 164 | IFNSW 8 <\r |
| 165 | ESF=4\r |
| 166 | LINC=6141\r |
| 167 | PDP=2\r |
| 168 | SAM=100\r |
| 169 | CLEN=6134\r |
| 170 | >\r |
| 171 | \r |
| 172 | \r |
| 173 | \f FIELD1 FSMPLE\r |
| 174 | 0 /INTERRUPT TIME A/D SAMPLER\r |
| 175 | ADDR MQAC /SAVE AC AND MQ --> MQAC\r |
| 176 | ORG .-2; DST; ORG .+1\r |
| 177 | ADDR CLKOVR / CLEAR OVERFLOW COUNTER FOR THE SCHMITT TRIGGER SERVICE ROUTINE\r |
| 178 | ORG .-2; DDZ; ORG .+1\r |
| 179 | IFSW 4 < / IF TRIGGER INPUT THEN WE CLEAR THE CLOCK COUNTER\r |
| 180 | CLAB CL1DEV\r |
| 181 | >\r |
| 182 | IFNSW 4 < NOP > / HERE TO INSERT A WORD TO GET THE SAME WORD COUNT FOR BOTH PROGRAM VERSIONS\r |
| 183 | TAD NCHANL+2 /NUMBER OF CHANNELS\r |
| 184 | DCA NCHANL+1 /INTO COUNTER\r |
| 185 | JMS% ITSTVL+1 /TEST VALID FOR THE FIRST SAMPLE\r |
| 186 | JMS INVALID /AND DECLARE NOT VALID\r |
| 187 | WAITSP,\r |
| 188 | IFNSW 8<\r |
| 189 | JMS LNCSAM /INITIATE SAMPLE\r |
| 190 | NEXTCH, ISZ SAMINS /UPDATE SAM INST FOR NXT CHAN\r |
| 191 | JMS LNCSAM\r |
| 192 | TAD SAMTMP\r |
| 193 | >\r |
| 194 | IFSW 8 <\r |
| 195 | ADSK / WAIT FOR COMPLETION OF CONVERSION\r |
| 196 | JMP .-1\r |
| 197 | ADRB /READ SAMPLE\r |
| 198 | JMS PUTSAM / INSERT INTO THE OUTPUT BUFFER AND TEST IF WORK DONE\r |
| 199 | JMP MORESM / SKIP TO MORESM\r |
| 200 | /\r |
| 201 | /\r |
| 202 | SKIPSM,/ SKIP ONE A/D SAMPLE\r |
| 203 | JMS UPDCNT / INCREMENT THE TOTAL SAMPLE COUNTER (ALL CHNLS+STRIGS)*SAMRAT\r |
| 204 | ADRS / LOAD MUX REGISTER --> AC\r |
| 205 | IAC / AND INCREMENT- WE SKIPP THIS CHANNELS\r |
| 206 | ADLM / BUMP BACK INTO THE A/D MUX REGISTER\r |
| 207 | /\r |
| 208 | MORESM,/\r |
| 209 | ISZ NCHANL+1 / ANY MORE CHANNELS TO SAMPLE?\r |
| 210 | SKP / START THE NEXT CONVERSION IF THERE IS ANY REMAINING\r |
| 211 | JMP NOTMOR / NOTHING MORE TO A/D SAMPLE\r |
| 212 | JMS% ITSTVL+1 /HERE ONLY IF SOME MORE A/D TO SAMPLE!\r |
| 213 | JMP SKIPSM / SKIP THE NEXT SAMPLE, RETURNS TO MORESM !!\r |
| 214 | ADST / AND START THE NEXT CONVERSION - AUTO INCREMENT MODE!\r |
| 215 | >\r |
| 216 | JMS INCPTR / INCREMENT BUFFER POINTER\r |
| 217 | JMP WAITSP / AND TAKE THE NEXT SAMPLE\r |
| 218 | NOTMOR,/\r |
| 219 | TAD CSTART+2 /STARTING CHANNEL\r |
| 220 | IFSW 8 <\r |
| 221 | ADLM / ELSE RESET MUX REGISTER\r |
| 222 | >\r |
| 223 | IFNSW 8 <\r |
| 224 | DCA SAMINS\r |
| 225 | JMS LNCSAM /SET CHANNEL TO START IN CASE\r |
| 226 | /CLOCK INITIATED\r |
| 227 | >\r |
| 228 | /\r |
| 229 | / HERE WE INSERT THE STRIGG TIME WORDS\r |
| 230 | /\r |
| 231 | CLA\r |
| 232 | TAD IWSTRI+1 /HOLDS ADDR \r |
| 233 | DCA IWSTRI / HOLDS POINTER TO THE TIME WORD\r |
| 234 | TAD WSTRC / -(NUMBER OF TRIGG INPUTS+1) --> AC\r |
| 235 | DCA IWSTRC / HOLDS THE COUNTER\r |
| 236 | IWLOP1,\r |
| 237 | JMS INCPTR / INCREMENT BUFFER POINTER\r |
| 238 | ISZ IWSTRC / IF ANY MORE TRIGG INPUTS\r |
| 239 | SKP / THEN SKIP\r |
| 240 | JMP IWLOP2 / ELSE RESET AC AND MQ AT IWLOP2\r |
| 241 | JMS% ITSTVL+1 /TEST FOR VALID SAMPLE (INVALID MEANS CRAZY PROGRAMMER!)\r |
| 242 | JMS INVALID / SET THE INVALID FLAG\r |
| 243 | TAD% IWSTRI / TRIGG TIME WORD --> AC\r |
| 244 | JMS PUTSAM /INSERT TIME WORD INTO THE OUTPUT BUFFER, CLEARS AC\r |
| 245 | DCA% IWSTRI / CLEAR THE TIME WORDS\r |
| 246 | ISZ IWSTRI / INCREMENT POINTER TO THE TIME WORDS\r |
| 247 | JMP IWLOP1 / AND LOOK FOR THE NEXT TRIGG WORDS TO PROCESS\r |
| 248 | IWLOP2,\r |
| 249 | ADDR MQAC /RESTORE AC AND MQ\r |
| 250 | ORG .-2; DLD; ORG .+1\r |
| 251 | JMP% FSMPLE /DONE FOR THIS TIC\r |
| 252 | \f/\r |
| 253 | / SAMPLING FINISHED\r |
| 254 | /\r |
| 255 | SAMDON,/\r |
| 256 | JMS INCPTR / INCREMENT BUFFER POINTER\r |
| 257 | CLA / CLEAR THE STATUS WORD\r |
| 258 | DCAZ% CURSTT /SET STATUS OF CURRENT FULL\r |
| 259 | SAMXIT,/ STOP THE SAMPLING, DISABLE CLOCK INTERRUPT\r |
| 260 | ADDR CLINT\r |
| 261 | ORG .-2; DDZ; ORG .+1\r |
| 262 | IFSW 4 <\r |
| 263 | ADDR #CLINT\r |
| 264 | ORG .-2; DDZ; ORG .+1 > / DISABLE CLOCK EXTENSION ROUTINE\r |
| 265 | ADDR MQAC /RESTORE AC AND MQ\r |
| 266 | ORG .-2; DLD; ORG .+1\r |
| 267 | JMP% FSMPLE\r |
| 268 | /\r |
| 269 | /\r |
| 270 | / HERE WE COUNT THE WHOLE NUMBER OF SAMPLES TOKEN\r |
| 271 | /\r |
| 272 | UPDCNT, 0\r |
| 273 | ADDR NPOINT+1 / NPOINT IS A 3 WORD FPP BASE PAGE VARIABLE, TAKE CARE\r |
| 274 | ORG .-2; DLD; ORG .+1\r |
| 275 | DPIC / INCREMENT DOUBLE PREC. COUNTER TO TEST FOR MORE SAMPLES\r |
| 276 | ADDR NPOINT+1 / BUMP INTO COUNTER\r |
| 277 | ORG .-2; DST; ORG .+1\r |
| 278 | DPSZ / SKIP IF WORK DONE\r |
| 279 | JMP% UPDCNT\r |
| 280 | JMP SAMDON / SET STATUS OF CURRENT BUFFER FULL: SAMPLE DONE\r |
| 281 | /\r |
| 282 | /\r |
| 283 | PUTSAM, 0 / INSERTS AC INTO OUTPUT BUFFER, ON RETURNS CLEARS AC!\r |
| 284 | ISZ AVALID / VALID INPUT?\r |
| 285 | SKP / AVALID IS SET TO -1 FOR INVALID SAMPLE, SO SKIP\r |
| 286 | JMP PUTSA1 / NON VALID, RETURN WITHOUT ACTION\r |
| 287 | BUFCDF, HLT /REPLACED BY CDF TO BUFFER\r |
| 288 | DCAZ% PBUFF\r |
| 289 | CDF 10 / USED FOR POINTER PVALID!\r |
| 290 | CLA CMA / -1 --> AC\r |
| 291 | DCA PUTFLG / DON'T FORGET TO INCREMENT THE BUFFER POINTER -1 --> PUTFLG\r |
| 292 | DCA AVALID / CLEAR VALID FLAG FOR NEXT CALL\r |
| 293 | PUTSA1,/\r |
| 294 | JMS UPDCNT / UPDATE THE TOTAL SAMPLE COUNT\r |
| 295 | CLA / CLEAR AC FOR RETURN\r |
| 296 | JMP% PUTSAM\r |
| 297 | /\r |
| 298 | /\r |
| 299 | INVALID,0 / SET THE ACTUAL SAMPLE INVALID\r |
| 300 | CLA CMA / -1 --> AC\r |
| 301 | DCA AVALID\r |
| 302 | JMP% INVALID / ON RETURN AC=0\r |
| 303 | PUTFLG, 0 / SET TO -1 IF WE HAVE TO INCREMENT THE BUFFER POINTER\r |
| 304 | \r |
| 305 | AVALID, / / ACTUAL VALID FLAG\r |
| 306 | ITSTVL, ADDR TSTVLD / TEST FOR VALID READ \r |
| 307 | IWSTRC, 0 / NEGATIVE NUMBER OF STRIGS EVENT CHANNELS -1 (FOR COUNTER)\r |
| 308 | WSTRC, 0 / -(NUMBER OF STRIG INPUTS+1) PLACED HERE BY THRUPT\r |
| 309 | IWSTRI, ADDR TIMWRD / POINTER TO THESE TIME WORDS\r |
| 310 | NCHANL, 0;0;0\r |
| 311 | SAMCNT,\r |
| 312 | CSTART, 0;0;0\r |
| 313 | \f/\r |
| 314 | L10, 10\r |
| 315 | /\r |
| 316 | INCPTR, 0\r |
| 317 | CLA / CLEAR AC\r |
| 318 | ISZ PUTFLG / IF WE HAVE TO INCREMENT THE BUFFER POINTER,\r |
| 319 | JMP% INCPTR / THEN SKIP ELSE RETURN\r |
| 320 | ISZZ PBUFF /ELSE INCR PNTR & SKIP IF WE\r |
| 321 | JMP FLDOK /CROSSED A FIELD BOUNDARY\r |
| 322 | TAD BUFCDF /UPDATE FIELD\r |
| 323 | TAD L10\r |
| 324 | DCA BUFCDF\r |
| 325 | FLDOK,\r |
| 326 | ISZ SAMCNT /INCR BUFFER CNTR & SKIP IF\r |
| 327 | JMP% INCPTR /FILLED. BUFFER OK\r |
| 328 | DCAZ% CURSTT /SET STATUS WORD TO 0.5\r |
| 329 | /FOR BUFFER FILLED\r |
| 330 | TADZ NXTSTT /SWAP STATUS WORD PNTRS\r |
| 331 | DCA TMP / NXTSTT<=> CURSTT\r |
| 332 | TADZ CURSTT\r |
| 333 | DCAZ NXTSTT\r |
| 334 | TAD TMP\r |
| 335 | DCAZ CURSTT\r |
| 336 | TADZ% CURSTT /HAS USER RELEASED THIS BUFFER\r |
| 337 | SMA CLA\r |
| 338 | JMP% ITOOFST+1 /NO, SAMPLING TOO FAST!\r |
| 339 | JMS% ISWPBFR+1 / SWAP BUFFER\r |
| 340 | JMP% INCPTR / BUFFER POINTER UPDATED\r |
| 341 | ISWPBF, ADDR SWPBFR\r |
| 342 | /\r |
| 343 | /\r |
| 344 | TMP,\r |
| 345 | ITOOFS, ADDR TOOFST\r |
| 346 | /\r |
| 347 | \f ORG FSMPLE+200\r |
| 348 | /\r |
| 349 | / HERE WE SWAP THE INPUT BUFFERS POINTERS\r |
| 350 | /\r |
| 351 | SWPBFR, 0\r |
| 352 | /\r |
| 353 | / SWAP BUFFER POINTERS\r |
| 354 | /\r |
| 355 | TADZ NXTBUF / NXTBUF <=> CURBUF\r |
| 356 | DCA% IBUFCDF / BUFCDF, PBUFF = NXTBUF\r |
| 357 | TADZ NXTBUF+1\r |
| 358 | DCAZ PBUFF\r |
| 359 | TADZ CURBUF\r |
| 360 | DCAZ NXTBUF\r |
| 361 | TADZ CURBUF+1\r |
| 362 | DCAZ NXTBUF+1\r |
| 363 | TAD% IBUFCDF\r |
| 364 | DCAZ CURBUF\r |
| 365 | TADZ PBUFF\r |
| 366 | DCAZ CURBUF+1\r |
| 367 | TAD% IBUFSIZ /RESET BUFFER COUNTER\r |
| 368 | DCA% ISAMCNT\r |
| 369 | JMP% SWPBFR\r |
| 370 | IBUFCDF=.+1\r |
| 371 | ADDR BUFCDF\r |
| 372 | IBUFSIZ=.+1\r |
| 373 | ADDR BUFSIZ\r |
| 374 | ISAMCNT=.+1\r |
| 375 | ADDR SAMCNT\r |
| 376 | /\r |
| 377 | / SAMPLING RATE TOO FAST\r |
| 378 | /\r |
| 379 | TOOFST,/\r |
| 380 | CLA IAC /SET STATUS WORD TO 1.0\r |
| 381 | DCAZ% CURSTT\r |
| 382 | IAC\r |
| 383 | DCAZ% NXTSTT\r |
| 384 | JMP% ISAMXIT+1 / DISABLES CLOCK INTERRUPTS\r |
| 385 | ISAMXIT,/\r |
| 386 | ADDR SAMXIT\r |
| 387 | IFNSW 8 <\r |
| 388 | LNCSAM, 0 /LINC SAM SUBROUTINE\r |
| 389 | LINC\r |
| 390 | SAMINS, SAM 0 /SAMPLE AND SELECT NEXT CHANNEL\r |
| 391 | PDP\r |
| 392 | DCA SAMTMP /SAVE IT\r |
| 393 | JMP% LNCSAM\r |
| 394 | >\r |
| 395 | \f/\r |
| 396 | / INTERRUPT TIME SCHMITT TRIGGER INPUT HANDLER\r |
| 397 | /\r |
| 398 | FIREED, 0 / ON ENTRY AC IS CLEARED BY CLOCK RTN\r |
| 399 | CLA CLL CMA RTL / -3 --> AC\r |
| 400 | ADDR MQSAVE / SECOND: STRIG COUNTER, FIRST: SAVES MQ\r |
| 401 | ORG .-2; DST; ORG .+1\r |
| 402 | CLA\r |
| 403 | TADZ CSTAT / LOOK AHEAD FOR CLOCK OVERFLOW\r |
| 404 | RAL CLL / LINKS GOES ON HERE IF CLOCK OVERFLOWED\r |
| 405 | SNA CLA / AND IF THERE IS NO STRIGG THEN JUMP TO CLOCK OVERFLOW HANDLING\r |
| 406 | JMP CLKINT\r |
| 407 | /\r |
| 408 | CAM / MQ HOLDS # OF STRIGG FIRED, FIRST IS #0\r |
| 409 | TADZ CSTAT / CLSA BITS OF FIRST CLOCK --> AC\r |
| 410 | TRILOP, RAR / STRIG BITS --> LINK\r |
| 411 | SWP / NOW AC HOLDS # OF STRIGG \r |
| 412 | SZL / SKIP IF STRIGG DID NOT FIRE\r |
| 413 | JMS TRIGGD / ELSE SET THE TRIGGER TIME WORD\r |
| 414 | IAC / INCREMENT FOR NEXT STRIGG\r |
| 415 | SWP / # OF STRIGG --> MQ, CLSA BIT MASK --> AC\r |
| 416 | ISZ MQSAVE+1 / SOME MORE STRIGS?\r |
| 417 | JMP TRILOP / YES, FETCH THE NEXT EVENT\r |
| 418 | CAM / STRIGS DONE, TEST FOR CLOCK OVERFLOW\r |
| 419 | TADZ CSTAT / CLSA BITS --> AC\r |
| 420 | RAL / LINK GOES ON IF CLOCK OVERFLOWED\r |
| 421 | SZL / IF NO CLOCK OVERFLOW THEN RETURN\r |
| 422 | CLKINT, ISZ CLKOVR+1 / ELSE INCREMENT THE CLOCK OVERFLOW COUNTER (EAE HIGH ORDER WORD)\r |
| 423 | NOP / PROTECT ISZ\r |
| 424 | ADDR MQSAVE / RESTORE MQ, CLEAR AC! TRICKSY!\r |
| 425 | ORG .-2; DLD; ORG .+1\r |
| 426 | CLA\r |
| 427 | JMP% FIREED / RETURN TO CLOCK ROUTINE\r |
| 428 | /\r |
| 429 | MQSAVE, 0;0 / SECOND WORD IS USED FOR STRIGG COUNTER, FIRST SAVES MQ ON ENTRY\r |
| 430 | CLKOVR, 0;0 / HERE IS THE CLOCK OVERFLOW COUNTER, (SINGLE PRECISION, SECOND WORD HOLDS CLOCK COUNTER)\r |
| 431 | / CLKOVR IS CLEARED AT EACH A/D INTERRUPT. WE ALSO CLEAR THE CLOCK COUNT REGISTER.\r |
| 432 | / SINCE A/D CLOCK AS HIGHER INTERRUPT FREQUENCY THAN TRIGG CLOCK\r |
| 433 | / THE TRIGGER CLOCK OVERFLOW SHOULD BE ZERO ALL THE TIME!\r |
| 434 | / BUT WHAT'S SHURE IN A COMPUTER'S WORLD NOWADAYS????\r |
| 435 | /\r |
| 436 | MQAC, 0;0 / HERE FSMPLE AND TRIGGED ROUTINE SAVE MQ&AC ON ENTRY\r |
| 437 | ITIMWR, ADDR TIMWRD / POINTER TO STRIGG TIME WORDS\r |
| 438 | TIMWRD, 0;0;0 / TIME WORDS FOR 3 SCHMITT TRIGGER CHANNELS\r |
| 439 | TIMBIT, 0;0 / THRUPT INSERTS CLOCKRATE/SAMRAT/12\r |
| 440 | M15, -15 / DEC 13: USED TO TEST TIME SLICE OVERFLOW\r |
| 441 | IBITWR, TAD BITWRD / POINTER TO LOAD THE CORRECT BIT MASK FOR EACH TIME SLICE\r |
| 442 | 7777 / TOO MUCH EVENTS\r |
| 443 | BITWRD, 4000\r |
| 444 | 2000\r |
| 445 | 1000\r |
| 446 | 0400\r |
| 447 | 0200\r |
| 448 | 0100\r |
| 449 | 0040\r |
| 450 | 0020\r |
| 451 | 0010\r |
| 452 | 0004\r |
| 453 | 0002\r |
| 454 | 0001\r |
| 455 | 0001 / HERE FOR SOME VERY LATE EVENTS\r |
| 456 | /\r |
| 457 | / HERE WE COMPUTE THE STRIGG TIME WORD\r |
| 458 | /\r |
| 459 | TRIGGD, 0 / ON ENTRY AC HOLDS NUMBER OF SCHMITT TRIGGER FIRED\r |
| 460 | ADDR MQAC / SAVE AC AND MQ\r |
| 461 | ORG .-2; DST; ORG .+1\r |
| 462 | TAD ITIMWR+1 / COMPUTE CORRECT ADDRESS OF TIME WORD\r |
| 463 | DCA ITIMWR\r |
| 464 | CLBA!CL1DEV / LOAD CLOCK BUFFER --> AC\r |
| 465 | MQL / AND INTO MQ, CLEAR AC\r |
| 466 | ADDR CLKOVR /AND ADD THE CLOCK OVERFLOW COUNTER REQUIRES MODE BITS OF CLOCK SET TO 10\r |
| 467 | ORG .-2; DAD; ORG .+1\r |
| 468 | ADDR TIMBIT / TIMBIT= RATE*12/SAMRAT HERE WE COMPUTE THE TIME SLICES\r |
| 469 | ORG .-2 ; DVI ; ORG .+1\r |
| 470 | ACL / MQ HOLDS QUOTIENT SO: TIME SLICE -> MQ -> AC\r |
| 471 | TAD M15 / IF THERE ARE ALLREADY 13 SLICES PASSED \r |
| 472 | SMA SZA CLA / THEN STOP, ELSE GOON\r |
| 473 | JMS OVRTRI / STRIGG INPUT OVERFLOWED\r |
| 474 | ACL / TIME SLICE --> AC\r |
| 475 | TAD IBITWR / HERE WE DO SOME COMPUTATIONS \r |
| 476 | DCA .+3 / IN ORDER TO FETCH THE \r |
| 477 | TAD% ITIMWR / CORRECT BIT AND TIMEWORD.\r |
| 478 | MQL / PREP FOR .OR. TIMEWORD AND SLICE BIT\r |
| 479 | TAD BITWRD / IS REPLACED BY CORRECT TAD BITWRD+SLICE\r |
| 480 | MQA / OR THE TIMEWORD AND THE BIT\r |
| 481 | DCA% ITIMWR / AND PUSH BACK\r |
| 482 | ADDR MQAC / RESET AC AND MQ\r |
| 483 | ORG .-2; DLD; ORG .+1\r |
| 484 | JMP% TRIGGD / AND RETURN!\r |
| 485 | /\r |
| 486 | OVRTRI, 0 / HANDLES STRIGG OVERFLOWES\r |
| 487 | / HLT / EITHER HALT OR -1 IS INDEX INTO BITWRD TABLE\r |
| 488 | CLA CMA / -1 --> AC\r |
| 489 | MQL / -1 --> MQ\r |
| 490 | JMP% OVRTRI /\r |
| 491 | \f ORG FSMPLE+400\r |
| 492 | ADSETU, 0 /SET UP ROUTINE\r |
| 493 | SWAB / SWITCH EAE TO MODE B (USED FOR HARD FPP12)\r |
| 494 | TADZ CURBUF /GET FIELD OF BUFFER\r |
| 495 | JMS MAKCDF /MAKE 3 BITS FLD INTO CDF\r |
| 496 | DCAZ CURBUF\r |
| 497 | TADZ CURBUF\r |
| 498 | DCA% ABUFCDF+1 /SAVE IN SAMPLER CODE\r |
| 499 | TADZ CURBUF+1 /SET SAMPLER BUFFER POINTER\r |
| 500 | DCAZ PBUFF\r |
| 501 | TADZ NXTBUF /GET FIELD OF ALTERNATE BUFFER\r |
| 502 | JMS MAKCDF\r |
| 503 | DCAZ NXTBUF\r |
| 504 | TAD BUFSIZ /SET INITIAL COUNT\r |
| 505 | DCA% ASAMCNT+1\r |
| 506 | TAD ISTAT1+1\r |
| 507 | DCAZ CURSTT / INSERT ADR. OF ACTUAL STATUS WORD\r |
| 508 | TAD ISTAT2+1\r |
| 509 | DCAZ NXTSTT / AND THE ADR. OF NEXT STATUS WORD\r |
| 510 | ADDR NPOINT+1 / SINCE FPP AND EAE HAVE DIFFERENT HIGH ORDER AND LOW ORDER\r |
| 511 | ORG .-2; DLD; ORG .+1 / WORD ORDER IN MEMORY\r |
| 512 | SWP\r |
| 513 | ADDR NPOINT+1 / WE HAVE TO CHANGE IT\r |
| 514 | ORG .-2; DST; ORG .+1\r |
| 515 | ADDR TIMWRD\r |
| 516 | ORG .-2; DDZ; ORG .+1 / CLEAR THE STRIGG TIME WORDS\r |
| 517 | ADDR TIMWRD+1\r |
| 518 | ORG .-2; DDZ; ORG .+1\r |
| 519 | ADDR CLKOVR / CLEAR CLOCK OVERFLOW COUNTER\r |
| 520 | ORG .-2; DDZ; ORG .+1\r |
| 521 | IFSW 8 <\r |
| 522 | CLA CMA /STOP THE CLOCK\r |
| 523 | IFSW 1 <\r |
| 524 | CLZE CL2DEV\r |
| 525 | IFSW 4 <\r |
| 526 | CLZE CL1DEV > >\r |
| 527 | IFNSW 1 <\r |
| 528 | CLZE!CL1DEV >\r |
| 529 | CLA\r |
| 530 | ADCL /CLEAR AD LOGIC JUST IN CASE\r |
| 531 | TAD L300 /SET AD ENABLE BITS, EXT START, AUTO INCREMENT\r |
| 532 | ADLE\r |
| 533 | TAD% JCSTART+1 /STARTING CHANNEL NUMBER\r |
| 534 | ADLM\r |
| 535 | >\r |
| 536 | IFNSW 8 <\r |
| 537 | CLEN /STOP THE CLOCK\r |
| 538 | TAD% JCSTART+1 /SET UP INITIAL SAM INSTRUCTION\r |
| 539 | TAD L100\r |
| 540 | DCA% JCSTART+1\r |
| 541 | TAD% JCSTART+1\r |
| 542 | DCA SAMINS\r |
| 543 | TAD L100 /SET FAST SAM BIT\r |
| 544 | IOF /TURN OFF INTERRUPTS IN LINC MODE\r |
| 545 | LINC /ENTER LINC MODE\r |
| 546 | ESF\r |
| 547 | PDP\r |
| 548 | JMS LNCSAM\r |
| 549 | ION\r |
| 550 | ADDR MQAC / SAVE MQ\r |
| 551 | ORG .-2; DST; ORG .+1\r |
| 552 | ADDR TIMWRD\r |
| 553 | ORG .-2; DDZ; ORG .+1\r |
| 554 | DCA TIMWRD+1 / CLEAR STRIGG TIME WORDS\r |
| 555 | ADDR CLKOVR / AND CLEAR CLOCK OVERFLOW COUNTER\r |
| 556 | ORG .-2; DDZ; ORG .+1\r |
| 557 | >\r |
| 558 | CIF CDF\r |
| 559 | JMP% ADSETU\r |
| 560 | /\r |
| 561 | ISTAT1, ADDR STAT1\r |
| 562 | ISTAT2, ADDR STAT2\r |
| 563 | JCSTAR, ADDR CSTART+2\r |
| 564 | ASAMCN, ADDR SAMCNT\r |
| 565 | ABUFCD, ADDR BUFCDF\r |
| 566 | \f/\r |
| 567 | / MAKE THREE BITS OF AC9-11 INTO CDF\r |
| 568 | /\r |
| 569 | / COMPUTE THE NUMBER OF BITS SET IN THE TRIGGER TIME WORD\r |
| 570 | /\r |
| 571 | CMPBIT, 0 / ON ENTRY BITSCN HOLDS THE WORD TO SCAN\r |
| 572 | CLA\r |
| 573 | TAD M14 / 12 BITS TO SCAN, PREP THE COUNTER\r |
| 574 | DCA BITLCN\r |
| 575 | DCA BITCNT / CLEAR BIT COUNTER\r |
| 576 | TAD BITSCN / TRIG TIME WORD --> AC\r |
| 577 | BITLOP, RAL / SHIFT BIT INTO THE LINK\r |
| 578 | SZL\r |
| 579 | ISZ BITCNT\r |
| 580 | ISZ BITLCN\r |
| 581 | JMP BITLOP\r |
| 582 | CDF CIF 0 / HOME TO FPP \r |
| 583 | JMP% CMPBIT / FROM TRAP4\r |
| 584 | /\r |
| 585 | BITSCN, 0 / ON ENTRY: HOLDS THE WORD TO SCAN\r |
| 586 | BITCNT, 0 / ON RETURN: HOLDS NUMBER OF BUTS SET\r |
| 587 | BITLCN, 0 / LOOP COUNTER, ABOVE TWO LOCATIONS ARE ALSO USED AS INDEX REGS 0 AND 1\r |
| 588 | M14, -14 / DEC -12\r |
| 589 | /\r |
| 590 | /\r |
| 591 | MAKCDF, 0\r |
| 592 | AND L7\r |
| 593 | CLL RTL\r |
| 594 | BASEX, RAL\r |
| 595 | TAD CDF0\r |
| 596 | JMP% MAKCDF\r |
| 597 | /\r |
| 598 | NPOINT, 0;0;0\r |
| 599 | CDF0, CDF\r |
| 600 | 0;0\r |
| 601 | L7, 7\r |
| 602 | BUFSIZ, -377\r |
| 603 | IFSW 8 <\r |
| 604 | L300, 300\r |
| 605 | >\r |
| 606 | IFNSW 8 <\r |
| 607 | L100, 100\r |
| 608 | >\r |
| 609 | /\r |
| 610 | TEMP, 0;0;0\r |
| 611 | ORG 10*3+BASEX\r |
| 612 | 0\r |
| 613 | JA NAME+3\r |
| 614 | 0\r |
| 615 | SAMRTN, JA .\r |
| 616 | FP25, F 0.25\r |
| 617 | XVALID, F 114. / LENGTH OF READ VALID VECTOR (MUST BE MULTIPLE OF 3)\r |
| 618 | VALID, ORG .+162 / AND HERE IS THE BUFFER SPACE\r |
| 619 | /\r |
| 620 | / ROUTINE TO TEST FOR VALID SAMPLE ( PACKED DATA)\r |
| 621 | /\r |
| 622 | PVALID, ORG .+2 /POINTER TO ACTUAL POSITION INSIDE VALID VECTOR\r |
| 623 | MVALID, ORG .+2 /VALID VECTOR: LAST ADDRESS USED\r |
| 624 | NVALID, ADDR VALID-1 /HOLDS ADR. OF FIRST WORD OF VALID VECTOR -1\r |
| 625 | /\r |
| 626 | TSTVLD, ORG .+1 / JMS TSTVLD\r |
| 627 | / SAMPLE NON VALID RETURN\r |
| 628 | / SAMPLE VALID RETURN\r |
| 629 | / ON RETURN AC=0\r |
| 630 | ISZ PVALID+1 / GET THE NEXT LOC. OF VALID VECTOR\r |
| 631 | CLA\r |
| 632 | TAD PVALID+1\r |
| 633 | TAD MVALID+1 / IF WE REACHED THE END OF THE VECTOR THEN\r |
| 634 | SPA CLA / WE RESET TO THE START ELSE\r |
| 635 | JMP L1 / CONTINUE AT L1\r |
| 636 | TAD NVALID+1\r |
| 637 | IAC\r |
| 638 | DCA PVALID+1\r |
| 639 | L1, TAD% PVALID+1 / READ VALID FLAG --> AC\r |
| 640 | SNA CLA / IF THIS READ WAS VALID THEN WE INCREMENT THE BUFFER POINTER ELSE\r |
| 641 | JMP% TSTVLD / WE TAKE THE NEXT SAMPLE INTO THIS LOCATION\r |
| 642 | ISZ TSTVLD / TAKE THE NORMAL RETURN FOR VALID SAMPLE \r |
| 643 | JMP% TSTVLD\r |
| 644 | \f EXTERN #ARGER\r |
| 645 | SECT THRUPT\r |
| 646 | BASE 0\r |
| 647 | STARTD\r |
| 648 | FLDA 30 /GET RETURN ADDR\r |
| 649 | FSTA SAMRTN\r |
| 650 | STARTF\r |
| 651 | FLDA 0\r |
| 652 | FSTA# TRETU\r |
| 653 | STARTD\r |
| 654 | FLDA% 0 / COMPUTE THE NUMBER OF PARAMETERS\r |
| 655 | FSUB 0\r |
| 656 | FSUB# TWO\r |
| 657 | SETX XR0\r |
| 658 | LDX 1,X1\r |
| 659 | ALN X1 / DIVIDE BY TWO\r |
| 660 | FNEG\r |
| 661 | ATX X2 / NEGATIVE NUMBER OF ARGUMENTS --> X2\r |
| 662 | FLDA 0 /GET ARG POINTER\r |
| 663 | BASE BASEX\r |
| 664 | SETB BASEX\r |
| 665 | FSTA TEMP /SAVE ARG POINTER\r |
| 666 | LDX 4700,0\r |
| 667 | FCLA\r |
| 668 | FSTA CLINT /STOP ANY SAMPLING NOW!\r |
| 669 | LDX 4701,0\r |
| 670 | IFSW 4 <\r |
| 671 | FSTA #CLINT > / DISABLE STRIGG EVENTS\r |
| 672 | LDX 4702,0\r |
| 673 | FLDA% TEMP,1 /GET BUFF1 ADDRESS\r |
| 674 | FSTA CURBUF\r |
| 675 | LDX 1,X0\r |
| 676 | JXN TH0,X2+\r |
| 677 | TRAP4 #ARGER\r |
| 678 | TH0,\r |
| 679 | FLDA% TEMP,1+ /GET BUFF2 ADDR\r |
| 680 | FSTA NXTBUF\r |
| 681 | LDX 2,X0\r |
| 682 | LDX 4703,0\r |
| 683 | JXN TH1,X2+ / IF THERE ARE ONLY TWO PARAMETERS THEN\r |
| 684 | TRAP4 #ARGER / ARGUMENT ERROR # 2\r |
| 685 | TH1,\r |
| 686 | FLDA% TEMP,1+ /ADDR OF PARAMETERS\r |
| 687 | FSTA PARAM / SAVE ADDR. OF PARAMETERS\r |
| 688 | STARTF\r |
| 689 | FCLA\r |
| 690 | FSTA PACK / CLEAR PACK & NTRIGG IF THERE ARE ONLY 3 PARAMS\r |
| 691 | FSTA NTRIG / DISABLE TRIGG EVENTS\r |
| 692 | FSTA TIMRAT\r |
| 693 | STARTD\r |
| 694 | JXN TH2,X2+ / IF THERE ARE 4 OR MORE PARAMETERS THEN FETCH THE LAST BUT ONE\r |
| 695 | JA TH3 / ELSE THERE ARE 3 ARGUMENTS \r |
| 696 | TH2, FLDA% TEMP,X1+ / ADDR OF FOURTH ARGUMENT --> PACK\r |
| 697 | FSTA PACK\r |
| 698 | JXN TH6,X2+ / IF THERE ARE 5 PARAMETERS GOTO TH5\r |
| 699 | JA TH3 / ONLY FOUR PARAMETERS\r |
| 700 | TH6, FLDA% TEMP,X1+\r |
| 701 | FSTA NTRIG / ADDR OF STRIG COUNT --> WSTRC\r |
| 702 | JXN TH10,X2+ / IF THERE ARE 5 PARAMETERS THEN THERE MUST BE A SIXTH ONE\r |
| 703 | LDX 4,X0 / FIVE PARAMETERS ARE INVALID, ARGUMENT ERR 5\r |
| 704 | TRAP4 #ARGER\r |
| 705 | TH10, FLDA% TEMP,X1+\r |
| 706 | FSTA TIMRAT / INSERT RATE/SAMRAT/12 --> TIMBIT\r |
| 707 | TH3,/\r |
| 708 | FLDA PARAM / RESTORE ADR. OF THIRD ARGUMENT\r |
| 709 | FSTA TEMP\r |
| 710 | STARTF\r |
| 711 | LDX 0,1\r |
| 712 | FLDA% TEMP,1 /STARTING CHANNEL\r |
| 713 | ALN 0\r |
| 714 | FSTA CSTART\r |
| 715 | FLDA% TEMP,1+ /# CHANNELS\r |
| 716 | FSTA CHNLS\r |
| 717 | FNEG\r |
| 718 | ALN 0\r |
| 719 | FSTA NCHANL\r |
| 720 | FLDA% TEMP,1+ /NUMBER OF POINTS\r |
| 721 | FNEG\r |
| 722 | ALN 0\r |
| 723 | FSTA NPOINT\r |
| 724 | FLDA PACK\r |
| 725 | JEQ TH4 / ONLY THREE PARAMETERS, CLEAR PCKSIG\r |
| 726 | FLDA% TEMP,1+\r |
| 727 | FNEG\r |
| 728 | FSUB FL1\r |
| 729 | ALN 0\r |
| 730 | TH4, FSTA PCKSIG\r |
| 731 | ATX X2\r |
| 732 | /\r |
| 733 | TBIN0, SETX VALID / PREPARE THE VALID VECTOR\r |
| 734 | LDX 1,X0\r |
| 735 | SETX XR0\r |
| 736 | STARTD\r |
| 737 | FLDA# NVALID / TAKE CARE, THESE LOCATION ARE IN BASE PAGE!\r |
| 738 | FSTA# PVALID\r |
| 739 | FNEG\r |
| 740 | FADD PCKSIG+1\r |
| 741 | FSTA# MVALID\r |
| 742 | /\r |
| 743 | FLDA PACK\r |
| 744 | JEQ TH5\r |
| 745 | FSTA TEMP\r |
| 746 | LDX -1,X1 / X2 HOLDS PCKSIG !\r |
| 747 | \r |
| 748 | FLDA TBIN0\r |
| 749 | FSTA TBIN1\r |
| 750 | STARTF\r |
| 751 | THL0, FLDA% TEMP,1+\r |
| 752 | TBIN1, SETX VALID / XR POINTER ONTO VALID VECTOR\r |
| 753 | ATX X0 / INSERT V. VALUE INTO THE VECTOR (WORD BY WORD)\r |
| 754 | SETX TBIN1 / NOW WE INCREMENT THE POINTER ABOVE\r |
| 755 | JXN .+2,X1+ / WITH THE X INCREMENT CMD AND\r |
| 756 | SETX XR0 / RESET TO THE INDEX REGISTER SET\r |
| 757 | JXN THL0,X2+ / AND NOW WE TEST IF THE WORK IS DONE\r |
| 758 | \fTH5, STARTF / CLEAR ALL 36 BITS OF FAC SINCE\r |
| 759 | FCLA / IF NTRIG.EQ.0 THEN WE DO NOT LOAD INTO THE EXPONENT\r |
| 760 | STARTD\r |
| 761 | FLDA NTRIG / PREPARE THE STRIGG EVENT INPUT \r |
| 762 | JEQ TH7 / NOTHING DESIRED, SKIP TO TH7\r |
| 763 | LDX 10,X0 / ERROR #10\r |
| 764 | IFNSW 4 < / IF THERE IS NO HANDLER THEN\r |
| 765 | JA TH9 > / WE ERROR OFF\r |
| 766 | FSTA TEMP / PUT ADDR OF TRIGG COUNT --> TEMP\r |
| 767 | STARTF\r |
| 768 | FLDA% TEMP / # OF TRIGGER INPUTS --> FAC\r |
| 769 | LDX 11,X0 / ERROR #11\r |
| 770 | JAL TH9 / IF NO FIXING POSSIBLE THE ERROR OFF!\r |
| 771 | JLT TH9 / IF TRIGGER NUMBER OUTSIDE RANGE 0 TO 3 THEN ERROR OFF\r |
| 772 | FSUB FL3 / TEST FOR UPPER LIMIT\r |
| 773 | LDX 12,X0 / ERROR #12\r |
| 774 | JGT TH9\r |
| 775 | FADD FL3\r |
| 776 | TH7, STARTF / IF THERE ARE NO STRIGGS INPUT THEN WE COME HERE WITH FAC CLEARED! \r |
| 777 | FADD FL1 / ADD 1 FOR THE COUNTER OF THE IR SERVICE ROUTINE\r |
| 778 | FNEG / AND HERE WE COMPUTE THE COUNTER\r |
| 779 | SETX WSTRC / AND BUMP INTO PDP/8 CODE\r |
| 780 | ATX 0\r |
| 781 | SETX XR0 / RESET INDEX REGIS POINTER\r |
| 782 | STARTD / ADDR OF TIME RATIO --> TEMP\r |
| 783 | FLDA TIMRAT / FETCH THE TIME RATIO\r |
| 784 | JEQ TH12 / NO STRIG EVENTS DISIRED, SKIP\r |
| 785 | FSTA TEMP\r |
| 786 | STARTF\r |
| 787 | FLDA% TEMP / TIMERATIO --> FAC\r |
| 788 | FSTA TIMRAT / AND SAVE FOR SOMEBODY ELSE\r |
| 789 | LDX 13,X0 / ERROR #13\r |
| 790 | JLT TH9 / NEGATIVE PARAMETER IS NOT NICE\r |
| 791 | LDX 14,X0 / ERROR #14\r |
| 792 | JAL TH9 / WE HAVE TO FIX THE NUMBER\r |
| 793 | JA TH11\r |
| 794 | TH9,/ X0 HOLDS ERROR NUMBER (10 TO 13)\r |
| 795 | TRAP4 #ARGERR / WE ERROR OFF\r |
| 796 | /\r |
| 797 | TH11, SETX TIMBIT / FIX THE NUMBER INTO 12 BITS\r |
| 798 | ATX 0 / FOR EAE DVI INSTRUCTION\r |
| 799 | SETX XR0\r |
| 800 | /\r |
| 801 | / INDEX REGISTERS (PBUFF) 1&2 ARE STATUS WORD PNTRS!\r |
| 802 | /\r |
| 803 | TH12, SETX PBUFF\r |
| 804 | LDX 11,1 /INITIALIZE STATUS WORD PNTRS\r |
| 805 | LDX 14,2\r |
| 806 | FLDA FP25 /INITIALIZE STATUS WORDS\r |
| 807 | FSTA STAT1 /TO INDICATE BUFFERS\r |
| 808 | FSTA STAT2 /NOT FILLED\r |
| 809 | TRAP4 ADSETU /SET UP AD STUFF\r |
| 810 | FLDA NTRIG / HERE WE SET UP THE STRIGGE EVENT INPUT\r |
| 811 | STARTD\r |
| 812 | JEQ TH8 / IF NO TRIGG INPUTS THEN SKIP ELSE\r |
| 813 | FLDA TRGADR /\r |
| 814 | FSTA #CLINT / QUEUE THE STRIGG INTERRUPT SERVICE ROUTINE INTO THE CLOCK TERMINATION ROUTINE\r |
| 815 | TH8,/\r |
| 816 | FLDA SAMADR /SET UP SAMPLER INTRPT HNDLR\r |
| 817 | FSTA CLINT\r |
| 818 | STARTF\r |
| 819 | JA SAMRTN /RETURN\r |
| 820 | NAME, TEXT +THRUPT+\r |
| 821 | SETX XR0\r |
| 822 | SETB BASEX\r |
| 823 | TRETU, F 0.\r |
| 824 | SAMADR, ADDR FSMPLE\r |
| 825 | TRGADR, ADDR FIREED / ADDR OF SCHMITT TRIGGER EVENT INTERRUPT SERVICE\r |
| 826 | /\r |
| 827 | XR0, 0\r |
| 828 | XR1, 0 / HOLDS NUMBER OF ARGUMENTS\r |
| 829 | XR2, 0\r |
| 830 | XR3, 0\r |
| 831 | X0= 0\r |
| 832 | X1= X0+1\r |
| 833 | X2= X1+1\r |
| 834 | X3= X2+1\r |
| 835 | ONE, 0;1;0\r |
| 836 | TWO, 0;2;0\r |
| 837 | FL1, F 1.\r |
| 838 | FL3, F 3.\r |
| 839 | PARAM,\r |
| 840 | CHNLS, F 0.\r |
| 841 | PCKSIG, F 0.\r |
| 842 | PACK, F 0. / HOLDS ADR. OF FOURTH ARGUMENT\r |
| 843 | NTRIG, F 0. / HOLDS ADDR. OF FIFTH ARGUMENT\r |
| 844 | TIMRAT, F 0. /HOLDS CLOCK/SAMRAT/12, CLOCK IS RATIO OF SCHMITT TRIGGER TIMER\r |
| 845 | \f/**** WORD SUBROUTINES ****\r |
| 846 | /\r |
| 847 | WPCNT, 0;0\r |
| 848 | WC1, 0;6\r |
| 849 | BASE WDBASE\r |
| 850 | WDBASE, F 0. /PNTR TO ARGS\r |
| 851 | WDINDX, F 0. /INDEX TO WORD IN ARRAY\r |
| 852 | WDOPER, F 0. /TARGET OR SOURCE ADDR\r |
| 853 | F1, F 1.\r |
| 854 | STXMJA, 0;1100-1030;0 /STX - JA\r |
| 855 | WORDOP, TEXT +WORDOP+\r |
| 856 | 0\r |
| 857 | WDRTN, JA .\r |
| 858 | WINDEX, F 0. /INDEX REGS 0-2\r |
| 859 | /\r |
| 860 | ORG 10*3+WDBASE\r |
| 861 | 0\r |
| 862 | JA WORDOP+3\r |
| 863 | /\r |
| 864 | /**** WGET - WORD GET ****\r |
| 865 | /\r |
| 866 | / CALL WGET(BUFF1,NWORD,Y)\r |
| 867 | /\r |
| 868 | ENTRY WGET\r |
| 869 | WGET, JSA WDSET /INIT REGISTERS\r |
| 870 | FLDA WPCNT / LOOK IF CALLED WITH TWO PARAMETERS\r |
| 871 | JEQ W2PAR / TWO PARAMETERS ONLY, OUPUT VIA FAC\r |
| 872 | XTA 0 /GET WORD FROM BUFF1\r |
| 873 | FSTA% WDOPER /STICK IT IN X\r |
| 874 | JA WDRTN\r |
| 875 | W2PAR, XTA 0\r |
| 876 | JA WDRTN\r |
| 877 | /\r |
| 878 | /**** WPUT - WORD PUT ****\r |
| 879 | /\r |
| 880 | / CALL WPUT(BUFF1,NWORD,Y)\r |
| 881 | /\r |
| 882 | ENTRY WPUT\r |
| 883 | WPUT, JSA WDSET /INIT REGISTERS\r |
| 884 | FLDA% WDOPER /GET Y\r |
| 885 | ATX 0 /FIX AND STORE IN BUFF1\r |
| 886 | JA WDRTN\r |
| 887 | /\r |
| 888 | / WGET & WPUT INITIALISATION\r |
| 889 | /\r |
| 890 | BASE 0\r |
| 891 | WDSET, 0;0\r |
| 892 | STARTD\r |
| 893 | FLDA 30 /GET RTN ADDR\r |
| 894 | FSTA WDRTN\r |
| 895 | FLDA 0 /PNTR TO ARGS\r |
| 896 | SETB WDBASE\r |
| 897 | BASE WDBASE\r |
| 898 | SETX WINDEX\r |
| 899 | FSTA WDBASE\r |
| 900 | LDX 0,1 / COMPUTE NUMBER OF PARAMETERS\r |
| 901 | FLDA% WDBASE,1 / ADR. FOLLOWING THE PARAMETER LIST --> FAC\r |
| 902 | FSUB WDBASE / SUBTRACT THE START ADR. OF PARAMETER LIST\r |
| 903 | FSUB WC1 / FAC-5 --> FAC\r |
| 904 | FSTA WPCNT / WPCNT=0 <==> TWO PARAMETERS, =2 <==> THREE PARAMETERS\r |
| 905 | FLDA% WDBASE,1+ /BUFFER ADDR\r |
| 906 | FADD STXMJA /MAKE SETX INST\r |
| 907 | FSTA WDSETX\r |
| 908 | FLDA% WDBASE,1+ /WORD INDEX ADDR\r |
| 909 | FSTA WDINDX\r |
| 910 | FLDA WPCNT / TEST IF THERE ARE MORE THAN 2 PARAMETERS\r |
| 911 | JEQ WCONT / \r |
| 912 | FLDA% WDBASE,1+ /RESULT OR VALUE ADDR\r |
| 913 | FSTA WDOPER\r |
| 914 | WCONT,\r |
| 915 | STARTF\r |
| 916 | FLDA% WDINDX /WORD INDEX\r |
| 917 | FSUB F1 /COMPUT ADDR OF WORD\r |
| 918 | ALN 0\r |
| 919 | STARTD\r |
| 920 | FADDM WDSETX\r |
| 921 | WDSETX, SETX 0 /MODIFIED DURING EXEC\r |
| 922 | STARTF\r |
| 923 | JA WDSET\r |
| 924 | / SUBROUTINE TO RELEASE A BUFFER BY RESETTING\r |
| 925 | / THE STATUS REGISTER\r |
| 926 | /\r |
| 927 | / CALL RELEAS(N)\r |
| 928 | /\r |
| 929 | / N DESIGNATES THE STATUS REGISTER, N SHOULD BE 1\r |
| 930 | / OR 2. IF N .NE. 1, 2 IS ASSUMED.\r |
| 931 | /\r |
| 932 | ENTRY RELEAS\r |
| 933 | BASE 0\r |
| 934 | RELEAS, STARTD\r |
| 935 | FLDA 30 /GET RTN ADDR\r |
| 936 | FSTA WDRTN\r |
| 937 | FLDA 0 /GET ARG PNTR\r |
| 938 | BASE WDBASE\r |
| 939 | SETB WDBASE\r |
| 940 | SETX WINDEX\r |
| 941 | FSTA WDBASE\r |
| 942 | LDX 1,1\r |
| 943 | FLDA% WDBASE,1 /N ADDR\r |
| 944 | FSTA WDBASE\r |
| 945 | SETX STAT1 /MODIFY STATUS VIA INDEX\r |
| 946 | STARTF\r |
| 947 | FLDA% WDBASE /N\r |
| 948 | FSUB F1 /TEST FOR NOT 1\r |
| 949 | JNE CLR2 /ASSUME STAT2\r |
| 950 | LDX -1,0 /CHANGE EXPONENT\r |
| 951 | /TO -7 TO MAKE 0.25\r |
| 952 | JA WDRTN\r |
| 953 | CLR2, LDX -1,3 /STAT2 EXP TO -1\r |
| 954 | JA WDRTN\r |
| 955 | \f/ COMPUTE THE NUMBER OF BITS SET IN THE TRIGGER WORD\r |
| 956 | / INTEGER FUNCTION TRGWRD\r |
| 957 | / BITCNT=TRGWRD(TIMEWORD)\r |
| 958 | /\r |
| 959 | ENTRY TRGWRD\r |
| 960 | BASE 0\r |
| 961 | TRGWRD, STARTD / STAY ON CALLER S BASE\r |
| 962 | FLDA 3*10\r |
| 963 | FSTA RETS / SAVE RETURN ADR.\r |
| 964 | SETX BITSCN / SET UP X REGISTER TO 8-MODE CODE\r |
| 965 | LDX 1,1 / INDEX TO FIRST ARGUMENT\r |
| 966 | FLDA% 0,1\r |
| 967 | FSTA 3\r |
| 968 | STARTF\r |
| 969 | FLDA% 3 / FIRST ARGUMENT --> FAC\r |
| 970 | ATX 0 / AND INTO 8-MODE CODE\r |
| 971 | TRAP4 CMPBIT / THE WORK IS DONE BY PDP8\r |
| 972 | XTA 1 / GET THE RESULT\r |
| 973 | RETS, JA .-. / AND HOME \r |
| 974 | END\r |
| 975 | \f\1a\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 |