| 1 | /OS8 BASIC USER FUNCTIONS, V5 |
| 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 MANUAL. |
| 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/JR 6-JUN-77 MODIFIED FOR V5 |
| 46 | |
| 47 | VERSON= 5 /VERSION OF BRTS |
| 48 | SUBVUF= 01 /SUBVERSION OF BASIC.UF |
| 49 | /FIRST WORD OF THIS OVERLAY CONTAINS |
| 50 | /BRTS VERSION IN LEFT HALF AND SUBVERSION IN RIGHT HALF |
| 51 | |
| 52 | FPP= 4000 |
| 53 | FADD= FPP+2000 |
| 54 | FSUB= FPP+2117 |
| 55 | FMPY= FPP+1600 |
| 56 | FDIV= FPP+1722 |
| 57 | FFNEG= FPP+2135 |
| 58 | FFPUT= FPP+2256 |
| 59 | FFGET= FPP+2241 |
| 60 | FFNOR= FPP+2215 |
| 61 | FACCLR= 0365 |
| 62 | UNSFIX= 1615 |
| 63 | PSWAP= 1230 |
| 64 | ARGPRE= 307 |
| 65 | |
| 66 | /VC8E POINT PLOTTING DISPLAY CONTROL IOT'S |
| 67 | |
| 68 | DISD= 6052 /SKIP ON DONE FLAG |
| 69 | DILX= 6053 /LOAD AC2-11 INTO X-REGISTER (DOESN'T CLEAR AC) |
| 70 | DILY= 6054 /LOAD AC2-11 INTO Y-REGISTER (DOESN'T CLEAR AC) |
| 71 | DIXY= 6055 /INTENSIFY |
| 72 | |
| 73 | /DK8EP PROGRAMMABLE REAL TIME CLOCK IOT'S |
| 74 | |
| 75 | CLZE= 6130 /CLEAR CLOCK ENABLE BITS PER AC |
| 76 | CLSK= 6131 /SKIP ON CLOCK FLAG |
| 77 | CLOE= 6132 /SET CLOCK ENABLE BITS PER AC |
| 78 | CLAB= 6133 /AC TO CLOCK BUFFER |
| 79 | CLSA= 6135 /READ CLOCK STATUS TO AC |
| 80 | /BIT 0 SET ON OVERFLOW |
| 81 | /BITS 9-11 SET ON RESPECTIVE SCHMITT TRIGGER FIRING |
| 82 | |
| 83 | /CLOCK ENABLE REGISTER BITS |
| 84 | /BIT FUNCTION |
| 85 | /0 INTERRUPT ENABLE BIT |
| 86 | /1-2 MODE BITS: |
| 87 | / 00 RUN COUNTER, INTERRUPTING EACH 4096 TICKS |
| 88 | / 01 RUN COUNTER AND RESET WITH CLOCK BUFFER ON OVERFLOW |
| 89 | / 10 RUN COUNTER AND READ COUNTER WHEN EVENT OCCURS |
| 90 | / 11 RUN COUNTER AND READ AND CLEAR IT ON EVENT |
| 91 | /3-5 RATE SELECTION: |
| 92 | / 000 STOPPED |
| 93 | / 001 EXTERNAL TIME BASE |
| 94 | / 010 100 HZ |
| 95 | / 011 1 KHZ |
| 96 | / 100 10 KHZ |
| 97 | / 101 100 KHZ |
| 98 | / 110 1 MHZ |
| 99 | / 111 STOPPED |
| 100 | /6 OVERFLOW STARTS A-D |
| 101 | /7 SET TO INHIBIT CLOCK |
| 102 | /8 EVENT ON CHAN 1, 2, OR 3 CAUSE INTERRUPT AND OVERFLOW |
| 103 | /9-11 ENABLE EVENTS 1 THRU 3 |
| 104 | |
| 105 | /AD8EA A-D CONVERTER IOT'S |
| 106 | |
| 107 | ADCL= 6530 /CLEAR A-D |
| 108 | ADLM= 6531 /LOAD MULTIPLEXOR FROM AC8-11 AND CLEAR AC |
| 109 | ADST= 6532 /START A-D CONVERTER |
| 110 | ADRB= 6533 /READ A-D BUFFER INTO AC0-11 AND CLEAR FLAG |
| 111 | ADSK= 6534 /SKIP ON A-D DONE FLAG (DOESN'T CLEAR FLAG) |
| 112 | ADLE= 6536 /SKIP ON TIMING ERROR |
| 113 | ADRS= 6537 /READ STATUS REGISTER |
| 114 | |
| 115 | /STATUS REGISTER FORMAT: |
| 116 | /0 A-D DONE FLAG |
| 117 | /1 TIMING ERROR FLAG |
| 118 | /2 ENABLE INTERRUPT ON DONE FLAG |
| 119 | /3 ENABLE INTERRUPT ON TIMING ERROR |
| 120 | /4 ENABLE EXTERNAL START (EG CLOCK) |
| 121 | /5 AUTO INCREMENT MODE |
| 122 | /6-7 UNUSED |
| 123 | /8-11 4 BIT CHANNEL NUMBER |
| 124 | |
| 125 | /DR8E-A DIGITAL BUFFERED I/O BASE IOT'S |
| 126 | |
| 127 | DBDI= 6500 /DISABLE INTERRUPTS |
| 128 | DBEI= 6501 /ENABLE INTERRUPTS |
| 129 | DBSK= 6502 /SKIP IF THE IN FLAG IS SET |
| 130 | DBCI= 6503 /SET SELECTED BITS IN INPUT REGISTER |
| 131 | DBRI= 6504 /READ INPUT REGISTER TO AC |
| 132 | DBCO= 6505 /CLEAR SELECTED BITS IN OUTPUT REGISTER |
| 133 | DBSO= 6506 /SET SELECTED BITS IN OUTPUT REGISTER |
| 134 | DBRO= 6507 /READ OUTPUT REGISTER TO AC |
| 135 | |
| 136 | ACX= 44 |
| 137 | ACH= 45 |
| 138 | ACL= 46 |
| 139 | |
| 140 | MAXPTS= XR0 |
| 141 | REFRFL= XR1 |
| 142 | BUFXR= XR2 |
| 143 | DX= XR3 /XR3,XR4,XR5= TEMP FL PT LOC |
| 144 | |
| 145 | SPF= 6040 /SET TTY PRINTER FLAG |
| 146 | CAF= 6007 /RESET PROCESSOR |
| 147 | |
| 148 | IA= 1465 /ENTRY POINT FOR USER FUNCTION ERROR MESSAGE |
| 149 | \f NOPUNCH /DUMMY SECTION FOR MISC PAGE 0 REFERENCES |
| 150 | |
| 151 | *1 |
| 152 | JMP I .+1 |
| 153 | SERVC |
| 154 | *6 |
| 155 | USECON, 0 /ENTRY #OF USER BUF IN DIM TBL |
| 156 | *10 |
| 157 | XR0, 0 |
| 158 | XR1, 0 |
| 159 | XR2, 0 |
| 160 | XR3, 0 |
| 161 | XR4, 0 |
| 162 | XR5, 0 |
| 163 | *20 |
| 164 | CDFIO, CDF 10 /FLD OF PSEUDO DIM TBL |
| 165 | 0 |
| 166 | ARSTRT, 0 /ADR-1 OF PSEUDO DIM TBL |
| 167 | *64 |
| 168 | INSAV, 0 |
| 169 | *73 |
| 170 | K0010, 10 |
| 171 | K0017, 17 |
| 172 | *77 |
| 173 | K0200, 200 |
| 174 | *107 |
| 175 | M14, -14 |
| 176 | *114 |
| 177 | FIXP, UNSFIX |
| 178 | *134 |
| 179 | FGETL, FFGET |
| 180 | FPUTL, FFPUT |
| 181 | FNORL, FFNOR |
| 182 | FCLR, FACCLR |
| 183 | FNEGL, FFNEG |
| 184 | *156 |
| 185 | P1SWAP, PSWAP |
| 186 | |
| 187 | ENPUNCH |
| 188 | \f *3400 |
| 189 | |
| 190 | /INI(N)-INITIALIZE ROUTN;CALLED BY USER BEFORE 'PLY |
| 191 | / OR ADC';INITIALIZE CTRS,FLGS,ETC |
| 192 | / N IS A DUMMY ARG |
| 193 | / |
| 194 | INI, VERSON^100+SUBVUF /VERSION NUMBER OF USER FUNCTIONS |
| 195 | JMS BUFCDF |
| 196 | TAD BUFBAK /PICK UP ADDR OF DISPLAY BUFFER |
| 197 | DCA BUFXR /STORE IN BUFFER XR FOR PUTBUF ROUTINE |
| 198 | DCA TOTPTS /BUF IS NOW EMPTY |
| 199 | IAC |
| 200 | DCA I (STPT /ACCES BUF AT 1ST PT |
| 201 | IAC |
| 202 | DCA I (NTHY /ACCES EVERY PT |
| 203 | IAC |
| 204 | DCA I (XFLG /BUF MAYBE DISPLAYED |
| 205 | JMP I INI |
| 206 | |
| 207 | /ROUTINE TO GET FIELD AND ADDRESS OF USER BUFFER |
| 208 | /FROM 'USECON' LOCATION |
| 209 | |
| 210 | BUFCDF, 0 |
| 211 | TAD USECON /ENTRY PT OF BUF IN DIM TBL |
| 212 | CLL RTL /MULT BY 4 |
| 213 | TAD ARSTRT /ADR-1 OF STRT F DIM TBL |
| 214 | DCA XR5 /ADR-1 OF ENTRY IN DIM TBL |
| 215 | TAD CDFIO /COPY CDF TO BRTS TABLES INLINE |
| 216 | DCA .+1 |
| 217 | 0 |
| 218 | CMA |
| 219 | TAD I XR5 /ADR-1 OF BUF |
| 220 | DCA BUFBAK /NEED FOR DISPLY ROUTN |
| 221 | TAD I XR5 /GET CDF OF BUF |
| 222 | DCA PUTCDF |
| 223 | TAD PUTCDF |
| 224 | DCA CDFBAK /NEED FOR DISPLY ROUTN |
| 225 | CDF /RESTORE DF |
| 226 | JMP I BUFCDF |
| 227 | CDFBAK, 0 |
| 228 | BUFBAK, 0 |
| 229 | TOTPTS, 0 |
| 230 | |
| 231 | /PUTBUF-ENTER WITH A 12BIT VALUE IN AC;PUT VAL IN |
| 232 | / USER BUFFER;CHK TO SEE IF NXT VAL WILL CROSS FLDS |
| 233 | / |
| 234 | PUTBUF, 0 |
| 235 | PUTCDF, 0 |
| 236 | DCA I BUFXR |
| 237 | IAC |
| 238 | TAD BUFXR |
| 239 | SZA CLA /ABOUT TO CROSS FLDS? |
| 240 | JMP .+4 /NO |
| 241 | TAD K0010 /YES |
| 242 | TAD PUTCDF |
| 243 | DCA PUTCDF /DF=DF+1 |
| 244 | CDF /RESTORE DF |
| 245 | JMP I PUTBUF |
| 246 | \f |
| 247 | /PLY(Y)-ENTER WITH YVAL IN FAC;CHK 0<=VAL<1.; |
| 248 | / PUT LEGIT VAL IN USER BUF |
| 249 | / |
| 250 | PLY, 0 |
| 251 | TAD ACH |
| 252 | SPA CLA /YVAL>=0? |
| 253 | JMP I (IA /NO,ERR |
| 254 | TAD ACX |
| 255 | SMA SZA CLA /YVAL<1? |
| 256 | JMP I (IA /NO, ERR |
| 257 | /CONV # IN FAC TO A 10BIT DISPLAYABLE VAL |
| 258 | / FAC=FAC*1776+1001 |
| 259 | / |
| 260 | JMS I (FMPY /YES |
| 261 | FL1022 /1776(8) |
| 262 | JMS I (FADD |
| 263 | FL513 /1001(8) |
| 264 | JMS I FIXP |
| 265 | JMS PUTBUF |
| 266 | ISZ TOTPTS /KEEP CNT OF PTS IN BUF |
| 267 | JMP I PLY |
| 268 | \f/DLY(N)-N IS MAX # OF PTS TO BE EVENTUALLY DISPLAYED |
| 269 | / CHK IF 1<=N<=1024; SET 'REFRFL' =0 FOR |
| 270 | / A ONE SHOT DISPLAY. |
| 271 | / |
| 272 | DLY, 0 |
| 273 | JMS I FIXP |
| 274 | SPA SNA /1<=N? |
| 275 | JMP I (IA /NO,ERR |
| 276 | /CHK IF N IS SAME AS LAST TIME & |
| 277 | /IF SO, NO NEED TO GO THE "SETDX" ROUT |
| 278 | DCA INI /YES,TEMPORARY SAVE |
| 279 | DCA XR1 |
| 280 | TAD INI |
| 281 | CIA |
| 282 | TAD MAXPTS |
| 283 | SZA CLA /N IS STILL THE SAME? |
| 284 | JMP .+3 /NO |
| 285 | JMS I (DISPLY /YES, DISPLY ONCE & |
| 286 | JMP I DLY /RETURN |
| 287 | TAD INI /GET N BACK |
| 288 | DCA MAXPTS /ASSUME N IS VALID FOR MOMENT |
| 289 | TAD MAXPTS |
| 290 | CIA |
| 291 | TAD (2000 |
| 292 | SPA CLA /N<=1024? |
| 293 | JMP I (IA /NO |
| 294 | DCA REFRFL /ONE SHOT DISPLY |
| 295 | JMS I (SETDX /SET DX FOR DISPLY |
| 296 | JMP I DLY |
| 297 | \f/ADC(N)-SAMPLE ADC NTH CHANNEL; RETN FL PT VAL IN FAC |
| 298 | / |
| 299 | |
| 300 | ADC, 0 |
| 301 | JMS I FIXP /GET ARG N |
| 302 | CIA |
| 303 | TAD K0017 |
| 304 | SPA /N<=17(8)? |
| 305 | JMP I (IA /NO,ERR |
| 306 | CIA /YES |
| 307 | TAD K0017 |
| 308 | ADLM /LOAD MUX |
| 309 | ADST /START CONV |
| 310 | ADSK |
| 311 | JMP .-1 |
| 312 | ADRB /GET VAL |
| 313 | DCA ACH |
| 314 | JMS I (FFLOT |
| 315 | JMP I ADC |
| 316 | \f/CLW(N)-N IS A DUMMY ARG; WAIT UNTIL CLOCK O.F. OR |
| 317 | / UNTIL A SCHMITT TRIG FIRES(DEPENDING WHICH WAS |
| 318 | / SPECIFIED IN 'CLK') BEFORE RETURNING TO BASIC |
| 319 | / |
| 320 | CLW, 0 |
| 321 | CLSK /STATUS REG IS ALREADY SET? |
| 322 | SKP /NO |
| 323 | JMP EARLY /YES |
| 324 | CLSK |
| 325 | JMP .-1 |
| 326 | CLSA /READ STATUS |
| 327 | CLW1, CLL RAL /CHK ON O.F. |
| 328 | SZL /O.F. BIT SET IN SATUS WD? |
| 329 | CIA /YES,NEG REST OF STATUS REG |
| 330 | /RTN 0 IF O.F. ONLY; 1,2,...,7 IF SCHMITT ONLY; |
| 331 | /-1,-2,...,-7 IF BOTH |
| 332 | RAR /NO |
| 333 | DCA ACH |
| 334 | JMS I (FFLOT |
| 335 | JMP I CLW |
| 336 | /IF CLOCK INTERRUPTED TOO SOON TELL USER; |
| 337 | /-8 IF O.F. ONLY; 9 THRU 15 IF SCHMITT ONLY; |
| 338 | /-9 THRU -15 IF BOTH |
| 339 | EARLY, CLSA |
| 340 | TAD K0010 |
| 341 | JMP CLW1 |
| 342 | |
| 343 | PAGE |
| 344 | \f/DIS(S,E,N,X)-DISPLY EVERY NTH PT BEGIN WITH S |
| 345 | / & NOT EXCEEDING N; X=1 DISPLY NOW, |
| 346 | / X=0 SETUP TO DISPLY FOR A SAM |
| 347 | / |
| 348 | DIS, 0 |
| 349 | JMS I (BUFCDF /SETUP CDF & USER BUF |
| 350 | JMS I (ARG123 |
| 351 | STPT-1 |
| 352 | /FLOAT N |
| 353 | TAD NTHY |
| 354 | DCA ACH |
| 355 | JMS I (FFLOT |
| 356 | JMS I FPUTL /IT BETTER NOT =0 |
| 357 | DX /HOLD TEMPORARY |
| 358 | /CHK 1<=S,0<=E-S |
| 359 | TAD STPT |
| 360 | SPA SNA |
| 361 | JMP I (IA /ERROR |
| 362 | CIA |
| 363 | TAD ENDPT |
| 364 | SPA |
| 365 | JMP I (IA /ERROR |
| 366 | /FLOAT (E-S) & GET (E-S)/N |
| 367 | DCA ACH |
| 368 | JMS I (FFLOT |
| 369 | JMS I (FDIV |
| 370 | DX |
| 371 | /CHK (E-S)/N+1<=1024; MAXPTS=(E-S)/N+1 |
| 372 | JMS I FIXP |
| 373 | IAC |
| 374 | DCA MAXPTS /ASSUME OK FOR NOW |
| 375 | TAD MAXPTS |
| 376 | CIA |
| 377 | TAD (2000 /1024(10) |
| 378 | SPA CLA |
| 379 | JMP I (IA /ERROR |
| 380 | /GET X ARG; DISPLY BUF(X=1); ONLY A SETUP FOR SAM (X=0) |
| 381 | CLL IAC RAL /4TH ARG DESIGNATED BY AC=2 |
| 382 | JMS I (GETARG |
| 383 | JMS I FIXP |
| 384 | DCA XFLG |
| 385 | TAD XFLG |
| 386 | SZA CLA /USER WANTS TO DISPLY? |
| 387 | TAD MAXPTS /YES,TOTPTS=MAXPTS |
| 388 | DPY1, DCA I (TOTPTS /NO,JUST SET UP,TOTPTS=0 |
| 389 | IAC /REFRESH TILL ^N(NON INTERRUPT) |
| 390 | DCA REFRFL /OR TILL CLK INTERRPT(INT MODE) |
| 391 | JMS I (SETDX |
| 392 | JMP I DIS |
| 393 | STPT, 0 /THESE 3 LOCATIONS |
| 394 | ENDPT, 0 /GO TOGETHER & MUST |
| 395 | NTHY, 0 /BE IN THIS ORDER |
| 396 | XFLG, 0 |
| 397 | \f/DISPLY-SETUP CDF & PTR TO STARTING PT OF USER BUF; |
| 398 | / SETUP 'DISCTR' FOR # OF PTS TO DISPLY THIS TIME; |
| 399 | / INITIALIZE FL PT 'DXSUM'=-'DX' |
| 400 | / |
| 401 | DISPLY,0 |
| 402 | /IF TOTPTS<=MAXPTS,DISPLY TOTPTS;OTHERWSE MAXPTS |
| 403 | D4, TAD I (TOTPTS |
| 404 | SNA /SIMPLE WAIT LOOP FOR THAT'1ST' |
| 405 | JMP .-1 /ADC TO BE SAMPLED |
| 406 | CIA |
| 407 | DCA DISCTR |
| 408 | TAD DISCTR |
| 409 | TAD MAXPTS |
| 410 | SMA CLA /TOTPTS<=MAXPTS? |
| 411 | JMP .+4 /YES |
| 412 | TAD MAXPTS /NO |
| 413 | CIA |
| 414 | DCA DISCTR |
| 415 | /SETUP CDF & PTR TO START PT OF USER BUFFER |
| 416 | TAD I (CDFBAK /RE-INIT CDF FOR LAST TIME YOU DISPLY |
| 417 | DCA DISCDF /YOU MAY HAVE CROSSED FLDS |
| 418 | TAD I (BUFBAK /ADR-1 OF BUF |
| 419 | TAD STPT |
| 420 | DCA BUFPTR |
| 421 | TAD XCRD /INITIALIZE XCOORD |
| 422 | DCA XCOORD |
| 423 | D3, TAD XCOORD |
| 424 | DILX |
| 425 | TAD DELTAX |
| 426 | DCA XCOORD /UPDATE XCOORD BY DELTAX |
| 427 | DISCDF, 0 |
| 428 | TAD I BUFPTR |
| 429 | CDF |
| 430 | DILY |
| 431 | CLA CLL |
| 432 | TAD NTHY /MOVE PTR TO NXT LOC TO BE |
| 433 | TAD BUFPTR /ACCESSED IN BUF |
| 434 | DCA BUFPTR |
| 435 | SNL /JUST CROSSED FLDS? |
| 436 | JMP .+4 /NO |
| 437 | TAD K0010 /YES |
| 438 | TAD DISCDF |
| 439 | DCA DISCDF |
| 440 | DISD |
| 441 | JMP .-1 |
| 442 | DIXY /INTENSIFY |
| 443 | /DISPLYED ALL PTS YET? |
| 444 | ISZ DISCTR |
| 445 | JMP D3 /NO |
| 446 | TAD REFRFL /YES,KEEP REFRESHING? |
| 447 | SNA CLA |
| 448 | JMP I DISPLY /NO |
| 449 | /KEYBOARD IS CHK HERE FOR ^N WHEN DSPL & NOT SAMPLING |
| 450 | /KEYBOARD INTERRUPTS TO THE INT ROUTN |
| 451 | / |
| 452 | KSF /YES |
| 453 | JMP D4 |
| 454 | KRB |
| 455 | TLS |
| 456 | TAD (-216 |
| 457 | SNA CLA /USER HIT ^N? |
| 458 | JMP I DISPLY /YES |
| 459 | JMP D4 /NO, KEEP REFRESHING |
| 460 | DISCTR, 0 |
| 461 | BUFPTR, 0 |
| 462 | XCRD, 0 |
| 463 | XCOORD, 0 |
| 464 | DELTAX, 0 |
| 465 | \f/FFLOT-FLOAT ANY INTEGER IN ACH(LOC 45) INTO FAC |
| 466 | |
| 467 | FFLOT, 0 |
| 468 | DCA ACL /CLEAR LOW MANTISSA |
| 469 | TAD (13 /11(10) INTO EXPONENT |
| 470 | DCA ACX |
| 471 | JMS I FNORL /NORMALIZE |
| 472 | JMP I FFLOT /RETURN |
| 473 | FL513, 12;2002;0 |
| 474 | FL1022, 12;3774;0 |
| 475 | |
| 476 | PAGE |
| 477 | \f/SAM(C,N,P,T)-SETUP PARAMETERS FOR SUBSEQUENT SAMPLING |
| 478 | / OF ADC'S OR OR DOING DIGITAL IO |
| 479 | / |
| 480 | CONST=CLK |
| 481 | TSAM=NCTR |
| 482 | SAM, 0 |
| 483 | JMS I (ARG123 |
| 484 | CSAM-1 |
| 485 | TAD PSAM |
| 486 | SPA SNA /P=0? |
| 487 | JMP I (IA /YES,ERR |
| 488 | CIA /NO |
| 489 | DCA PCTR /PCTR=-P(DONE CTR) |
| 490 | CLL IAC RAL /4TH ARG IS DESIGN BY AC=2 |
| 491 | JMS GETARG /GET T |
| 492 | JMS I FIXP |
| 493 | DCA TSAM |
| 494 | TAD TSAM |
| 495 | SZA CLA /SET UP TO SAMPLE ADC'S? |
| 496 | JMP DIG /NO, DO DIGAL IO |
| 497 | IAC /YES |
| 498 | DCA SAMFLG /SET FLG=1 FOR 'CLK' |
| 499 | TAD K0017 /15(10) |
| 500 | JMP SAM1 |
| 501 | DIG, CMA |
| 502 | DCA SAMFLG /SET FLG=-1 FOR 'CLK' |
| 503 | CLA CLL IAC RAL /2 |
| 504 | SAM1, DCA CONST |
| 505 | /CHK IF 0<=C, 1<=N, N+C-1<=2(DIG IO)OR <=17(8)(ADC'S) |
| 506 | / |
| 507 | CMA |
| 508 | TAD NSAM |
| 509 | SPA /1<=N? |
| 510 | JMP I (IA /NO,ERR |
| 511 | TAD CSAM |
| 512 | CIA |
| 513 | TAD CONST |
| 514 | SPA CLA /N+C-1<=2 OR 17? |
| 515 | JMP I (IA /NO,ERR |
| 516 | TAD TSAM |
| 517 | SNA CLA |
| 518 | JMP SAM3 |
| 519 | /CLEAR ALL DIGIAL INPT REGS |
| 520 | JMS I (BUFCDF /SET UP USER BUF |
| 521 | TAD NSAM |
| 522 | CIA |
| 523 | DCA NCTR /-#OF BOARDS TO CLAR |
| 524 | TAD CSAM /START BOARD#(0,1,2) |
| 525 | CLL RTL |
| 526 | RAL /START BOARD# * 10(8) |
| 527 | TAD (DBCI |
| 528 | A1, DCA .+2 |
| 529 | CLA CMA |
| 530 | 0 /DBCI IS ISSUED |
| 531 | CLA |
| 532 | TAD .-2 |
| 533 | TAD K0010 |
| 534 | ISZ NCTR /MORE BOARDS TO CLEAR? |
| 535 | JMP A1 /YES |
| 536 | CLA |
| 537 | JMP I SAM |
| 538 | /DO A CLEAR ALL; AD DONE FLG, ERR FLG, CLR MUX & EN REG. |
| 539 | /SET NON-AUTO INCR MODE |
| 540 | / |
| 541 | SAM3, CAF /CL ALL FLGS-I MAY USE ION'S |
| 542 | ADCL |
| 543 | TAD K0200 |
| 544 | ADLE /ENABLE EXT START OF ADC'S |
| 545 | JMP I SAM |
| 546 | CSAM, 0 /THESE 3 LOCATIONS MUST |
| 547 | NSAM, 0 /BE TOGETHER & IN THIS |
| 548 | PSAM, 0 /ORDER |
| 549 | PCTR, 0 |
| 550 | NCTR, 0 |
| 551 | \f/CLK(R,O,S)-A COMPLEX CLK ROUTN WHICH SETS UP CLOCK |
| 552 | / FOR ADC SAMPLING; DIGIAL IO SMPLING; |
| 553 | / & SETS UP A SIMPLE CLOCK-WAIT ROUTN |
| 554 | / |
| 555 | CLK, 0 |
| 556 | JMS I (ARG123 |
| 557 | R-1 |
| 558 | CLSA /CLEAR CLK STATUS REG |
| 559 | CLA |
| 560 | TAD R |
| 561 | SPA SNA /R>0? |
| 562 | JMP IAA /NO,ERR |
| 563 | TAD (-6 /YES |
| 564 | SMA SZA CLA /R<=6? |
| 565 | JMP IAA /NO |
| 566 | TAD R /R GIVES CORRECT VAL FOR |
| 567 | CLL RTL /EXT START, .1,1,10,100,1000 KHZ RATE |
| 568 | RTL |
| 569 | RTL /RATE GOES INTO BITS 3-5 OF EN REG |
| 570 | TAD (5050 /BITS 0,2,6,8 OF EN REG ALWAYS SET |
| 571 | DCA SAM /SAVE TEMP |
| 572 | TAD O /OVERFLOW CNT |
| 573 | CIA |
| 574 | CLAB /SET BUF PRESET REG |
| 575 | CLA |
| 576 | TAD S |
| 577 | SZA CLA /ANY SCHMITT TRIGS ASKED FOR? |
| 578 | TAD (27 /YES,SET BITS 7,9-11 OF EN REG |
| 579 | TAD SAM /FINAL ENABLE VAL |
| 580 | CMA |
| 581 | CLZE /CLEAR BAD BITS FROM EN REG |
| 582 | CMA /ENABLE VAL IS BACK AGAIN |
| 583 | CLOE /START CLOCK |
| 584 | CLA |
| 585 | TAD SAMFLG |
| 586 | SNA /JUST SETTING UP FOR A SIMPLE TIMING DEV? |
| 587 | JMP DONE /YES,RTN TO BASIC |
| 588 | SPA CLA /SAMPLE ADC'S? |
| 589 | JMP I (DRESET /NO,DO DIGITAL IO |
| 590 | JMP I (SRESET /YES |
| 591 | DONE, DCA SAMFLG /CLR FLG |
| 592 | SPF /RESET TTY FLG FOR BASIC |
| 593 | JMP I CLK /RTN TO BASIC |
| 594 | IAA, SPF |
| 595 | JMP I (IA |
| 596 | R, 0 /THESE 3 LOCATIONS |
| 597 | O, 0 /MUST BE TOGETHER IN |
| 598 | S, 0 /THIS ORDER |
| 599 | SAMFLG, 0 |
| 600 | FL4096, 15;2000;0 |
| 601 | \f/GETARG-ENTER WITH SCALER(0=ARG2,1=ARG3,2=ARG4) IN AC; |
| 602 | / CALL 'ARGPRE' & ON RTN THE D.F. OF ARG IS SET |
| 603 | / & ADR OF ARG IS IN FAC |
| 604 | / PUT FL PT ARG IN FAC( 44-46) |
| 605 | |
| 606 | GETARG, 0 |
| 607 | DCA INSAV /ARGPRE USES THIS SCALER LOC 64 |
| 608 | JMS I KARG /GET ADR OF ARG |
| 609 | JMS I FGETL /PUT ARG IN FAC |
| 610 | KARG, ARGPRE /USED TO ADVANTAGE |
| 611 | CDF /RESET D.F. |
| 612 | JMP I GETARG |
| 613 | |
| 614 | PAGE |
| 615 | \f/SETDX-SETUP DELTAX; CHK IF DISPL IS TO BE |
| 616 | / ACTIVATED; DX IS A FL PT NO |
| 617 | / SETUP DELTAX SUCH THAT IT =1,2,3,...,1023; |
| 618 | / & XCOORD SO THAT DISPLY IS CENTERED |
| 619 | / |
| 620 | SETDX, 0 |
| 621 | CMA |
| 622 | TAD MAXPTS /MAXPTS-1 |
| 623 | SNA /IF # OF MAXPTS=1 THEN DISPLY |
| 624 | IAC /IS POSITIONED AT X=0 COORD |
| 625 | DCA ACH |
| 626 | JMS I (FFLOT |
| 627 | JMS I FPUTL |
| 628 | DX /SAVE FL PT(MAXPTS-1) TEMP |
| 629 | TAD (1777 /1023 |
| 630 | DCA ACH |
| 631 | JMS I (FFLOT |
| 632 | JMS I (FDIV |
| 633 | DX /FL PT (1023/MAXPTS-1) =DX |
| 634 | JMS I FIXP /FIXED 'DX' |
| 635 | DCA I (DELTAX |
| 636 | TAD I (DELTAX |
| 637 | DCA ACH |
| 638 | JMS I (FFLOT |
| 639 | JMS I (FMPY |
| 640 | DX /(MAXPTS-1)*(FIX'DX')=FLOT PROD |
| 641 | JMS I FIXP /FIX 'PROD' |
| 642 | CIA |
| 643 | TAD (1777 |
| 644 | CLL RAR /(1023-FIX'PROD')/2 |
| 645 | TAD (1001 |
| 646 | DCA I (XCRD /XCOORD=[1001+(1023-FIX'DX')/2] |
| 647 | /CHK SHOULD DISPLY NOW(XFLG=1) |
| 648 | /OR RTN TO BASIC DUE TO SAM SETUP(XFLG=0 |
| 649 | |
| 650 | TAD I (XFLG |
| 651 | SZA CLA |
| 652 | JMS I (DISPLY |
| 653 | JMP I SETDX |
| 654 | \f/ADSAM-A CLOCK INTERRUPT FOR SAMPLING ADC'S COMES HERE |
| 655 | / |
| 656 | ADSAM1, ADRS /RD STATUS(GET MUX) |
| 657 | IAC |
| 658 | ADLM /BMP MUX BY 1 |
| 659 | JMP CLUGE |
| 660 | ADSAM, CLSA /READ STATUS REG & CLEAR IT |
| 661 | SMA CLA /CLK O.F.? |
| 662 | JMP TION /NO, SCHMITT TRIG SYNC |
| 663 | ADSK /CONV IS DONE? |
| 664 | JMP .-1 /NO |
| 665 | ADRB /GET VAL FR CONV BUF |
| 666 | JMS I (PUTBUF /YES |
| 667 | ISZ I (NCTR /SAMPLED ALL CHANS FOR THIS INTERRUPT? |
| 668 | JMP ADSAM1 /NO |
| 669 | ISZ I (PCTR /YES,JOB IS ALL DONE? |
| 670 | JMP SRESET-1 /NO |
| 671 | JMP I (DONE /YES,'DONE' IS IN 'CLK' ROUTN |
| 672 | |
| 673 | /SRESET-USED TO RESET STCHAN & CTR FR ADC SAMPLING |
| 674 | / ROUTN SETS MUX TO SAMPLE 1ST OF A SERIES OF CHANS. |
| 675 | / A CTR IS SET TO -# OF CONSEC CHANS TO SAMPLE |
| 676 | / |
| 677 | |
| 678 | ISZ I (TOTPTS /#PTS /CHANNEL |
| 679 | SRESET, TAD I (NSAM |
| 680 | CIA |
| 681 | DCA I (NCTR |
| 682 | TAD I (CSAM |
| 683 | ADLM /LOAD MUX WITH 1ST CHAN |
| 684 | TION, ION |
| 685 | JMS I (DISPLY /DISPLY UNTIL CLK INTERRUPT |
| 686 | \f/DRI(N) -SAMPLE DIGITAL IO BOARD N; & RTN RESULT |
| 687 | / AS FL PT IN FAC |
| 688 | |
| 689 | DRI, 0 |
| 690 | JMS ARGN |
| 691 | JMS I (DIGIO /GET DIGITAL VAL |
| 692 | JMS NEGCHK |
| 693 | JMP I DRI |
| 694 | |
| 695 | /ARGN - GET N AND MAKE A 'DBSK' INSTRUCTION |
| 696 | |
| 697 | ARGN, 0 |
| 698 | JMS I FIXP /BOARD # |
| 699 | /CHK 0<=N<=2 |
| 700 | DCA SETDX /SAV N TEMP |
| 701 | TAD SETDX |
| 702 | CIA |
| 703 | TAD (2 |
| 704 | SPA CLA |
| 705 | JMP I (IA /ERR |
| 706 | TAD SETDX /GET N BAK |
| 707 | CLL RTL |
| 708 | RAL /BOARD # = BITS 6-8 |
| 709 | TAD (DBCI |
| 710 | JMP I ARGN |
| 711 | |
| 712 | /DRO(M,N)- M=FL PT VAL TO OUTPUT, N=BOARD # |
| 713 | / IF M=0 CLR OUTPUT REG; OTHERWISE LEAVE |
| 714 | / THE BITS OF DBSO SET |
| 715 | |
| 716 | MASK=DIGIO |
| 717 | DRO, 0 |
| 718 | JMS I FIXP |
| 719 | DCA I (MASK /DIGITAL OUTPUT VAL |
| 720 | JMS I (GETARG |
| 721 | JMS ARGN |
| 722 | TAD (2 /65N5='DBCI+2' |
| 723 | DCA KDBCO |
| 724 | IAC |
| 725 | TAD KDBCO |
| 726 | DCA KDBSO |
| 727 | TAD I (MASK /GET FL PT VAL |
| 728 | SZA /CLR OUTPUT REG/ |
| 729 | JMP KDBSO /NO |
| 730 | CMA /YES,SET ALL BITS OF AC |
| 731 | KDBCO, 0 /CLR OUTPUT REG |
| 732 | SKP |
| 733 | KDBSO, 0 /OUTPUT DIG VAL |
| 734 | CLA |
| 735 | JMP I DRO |
| 736 | \f FLGNEG=DRO |
| 737 | /NEGCHK- THIS ROUTINE CHKS TO SEE IF A VALUE FROM |
| 738 | / 'DRI' OR 'GET' IS NEGATIVE. IF IT IS |
| 739 | / THE VALUE IS CHANGED TO 4096+NEG VAL. |
| 740 | |
| 741 | NEGCHK, 0 |
| 742 | DCA FLGNEG /VAL IS EITHER + R - |
| 743 | TAD FLGNEG |
| 744 | DCA ACH |
| 745 | JMS I (FFLOT |
| 746 | TAD FLGNEG |
| 747 | SMA CLA /VAL WAS NEG? |
| 748 | JMP I NEGCHK /NO |
| 749 | JMS I (FADD /YES |
| 750 | FL4096 |
| 751 | JMP I NEGCHK |
| 752 | CLUGE, ADST /START CONV |
| 753 | JMP ADSAM+3 |
| 754 | |
| 755 | PAGE |
| 756 | \f/GET(M,L)- M=0, GET VAL FROM USER BUF & NO MASKING |
| 757 | / M>0, GET VAL FROM USER BUF & MASK WHERE |
| 758 | / M IS THE MASKING VALUE. |
| 759 | / L IS THE LOCATION OF USER BUF TO ACCESS |
| 760 | |
| 761 | LHOLD=ARG123 |
| 762 | GET, 0 |
| 763 | IAC |
| 764 | DCA MSKCTR |
| 765 | JMS I FIXP /GET M |
| 766 | SNA /M=0 |
| 767 | CMA /YES,SET M=7777 |
| 768 | CLL RAR |
| 769 | SZL |
| 770 | JMP .+3 |
| 771 | ISZ MSKCTR |
| 772 | JMP .-4 |
| 773 | RAL |
| 774 | JMS COMMON /SAME CODE FOR 'GET' & 'PUT' |
| 775 | TAD MSKCTR |
| 776 | CIA |
| 777 | DCA MSKCTR |
| 778 | TAD I LHOLD |
| 779 | CDF /RESET D.F. |
| 780 | CLL RAR |
| 781 | ISZ MSKCTR |
| 782 | JMP .-2 |
| 783 | RAL |
| 784 | AND MASK |
| 785 | JMS I (NEGCHK |
| 786 | JMP I GET |
| 787 | MSKCTR, 0 |
| 788 | |
| 789 | /PUT(M,L)- M IS THE FL PT VALU TO BE FIXED & PUT |
| 790 | / IN THE USER BUF; L IS THE LOC OF THE USER |
| 791 | / BUF WHERE TO STORE THE FIXED NUMBER. |
| 792 | |
| 793 | PUT, 0 |
| 794 | JMS I FIXP /GET & FIX THE FL PT VAL |
| 795 | JMS COMMON |
| 796 | TAD MASK |
| 797 | DCA I LHOLD |
| 798 | CDF |
| 799 | JMP I PUT |
| 800 | |
| 801 | /COMMON- THIS ROUTINE IS USED BY BOTH 'GET' & 'PUT' |
| 802 | |
| 803 | COMMON, 0 |
| 804 | DCA MASK /SAVE M TEMPORARILY |
| 805 | JMS I (GETARG |
| 806 | JMS I FIXP /GET L |
| 807 | CLL |
| 808 | TAD I (BUFBAK |
| 809 | DCA LHOLD |
| 810 | SZL /CROSSED FIELDS? |
| 811 | TAD K0010 /YES |
| 812 | TAD I (CDFBAK /NO |
| 813 | DCA .+1 |
| 814 | 0 |
| 815 | JMP I COMMON |
| 816 | \f/WHEN INTERRUPT OCCURS COME HERE |
| 817 | / |
| 818 | |
| 819 | SERVC, CLA |
| 820 | CLSK /CLOCK INTERRUPT? |
| 821 | SKP /NO |
| 822 | JMP I (ADSAM /YES |
| 823 | KSF /TTY INTERRUPT? |
| 824 | SKP /NO |
| 825 | JMP KKBRD /YES |
| 826 | TSF /DUE TO LAST ECHO? |
| 827 | HLT /SPURIOUS INTERRUPT |
| 828 | TCF /YES |
| 829 | JMP I (TION |
| 830 | KKBRD, KRB |
| 831 | TLS /ECHO CHAR |
| 832 | TAD (-203 |
| 833 | SZA CLA /^C TYPED? |
| 834 | JMP I (TION /NO,IGNORE CHAR |
| 835 | JMS I P1SWAP /YES |
| 836 | JMP I (7605 /RTN TO MONITOR |
| 837 | \f/ARG123-THIS ROUTINE GETS 3 ARGUMENTS OF A FUNCTION |
| 838 | / AND STORES THEIR FL PT VALUES IN |
| 839 | / 'ARG1,ARG2,ARG3' & STORES THEIR FIXED VALUES |
| 840 | / AT 'ADR,ADR+1,ADR+2' |
| 841 | / CALL: JMS ARG123 |
| 842 | / ADR-1 |
| 843 | |
| 844 | ARG123, 0 |
| 845 | TAD I ARG123 /GET(ADR-1)FOR THE THREE |
| 846 | DCA XR1 /1WD ARGS |
| 847 | ISZ ARG123 |
| 848 | JMS I FIXP |
| 849 | DCA I XR1 /SINGLE PREC ARG1 |
| 850 | JMS I (GETARG /ARG2 DESIGN BY AC=0 |
| 851 | JMS I FIXP |
| 852 | DCA I XR1 /SINGLE PREC ARG2 |
| 853 | IAC |
| 854 | JMS I (GETARG /ARG3 DESIGN BY AC-3 |
| 855 | JMS I FIXP |
| 856 | DCA I XR1 /SINGLE PREC ARG3 |
| 857 | JMP I ARG123 |
| 858 | \f/DRESET-USED TO RESET STARTING DIGITAL IO BOARD & CTR; |
| 859 | / WAIT FOR CLK TO O.F.; SAMPLE EACH BOARD ASKED FOR. |
| 860 | / |
| 861 | |
| 862 | DRESET, TAD I (NSAM |
| 863 | CIA |
| 864 | DCA I (NCTR |
| 865 | TAD I (CSAM /STARTING BOARD # |
| 866 | CLL RTL |
| 867 | RAL /ST BOARD #*10(8) |
| 868 | TAD (DBCI-10 |
| 869 | DCA KDBCI /[DBCI-10(8)] FOR 1ST BOARD |
| 870 | /WAIT LOOP |
| 871 | CLSK |
| 872 | JMP .-1 |
| 873 | CLSA /READ STATUS & CLR |
| 874 | CLA |
| 875 | /SAMPLE ALL BOARDS ASKED FOR |
| 876 | |
| 877 | DIGSAM, TAD K0010 |
| 878 | TAD KDBCI |
| 879 | JMS DIGIO /SAMPLE BOARD |
| 880 | JMS I (PUTBUF /PUT DIG VAL IN BUF |
| 881 | ISZ I (NCTR /MORE BOARDS? |
| 882 | JMP DIGSAM /YES |
| 883 | ISZ I (PCTR /NO, JOB IS ALL DONE? |
| 884 | JMP DRESET /NO |
| 885 | JMP I (DONE /YES,'DONE' IS IN 'CLK' ROUTN |
| 886 | /DIGIO-ENTER WITH 'DBCI' SETUP FOR CORRECT BOARD; THIS RTN |
| 887 | / SETS UP THE 'DBRI & DBCI' AND SAMPLES CORRECT BOARD; |
| 888 | / EXIT WITH DIGITAL VAL IN AC |
| 889 | / |
| 890 | |
| 891 | DIGIO, 0 |
| 892 | DCA KDBCI |
| 893 | TAD KDBCI |
| 894 | IAC |
| 895 | DCA KDBRI |
| 896 | KDBRI, 0 |
| 897 | KDBCI, 0 |
| 898 | JMP I DIGIO |
| 899 | $ |
| 900 | \f |