PL/M-51 COMPILER PAGE 1 ISIS-II PL/M-51 V1.0 COMPILER INVOKED BY: PLM51 :F1:TSTR02.P51 $ROM(LARGE) $DEBUG NOSYMBOLS NOPAGING /*THIS PLM/51 PROGRAM IS THE CONTROL FOR THE VIKING ELECTRONICS UNIVERSAL PRODUCT TESTER. BOARD 1 TEST MODULE VERSION 1.1 30 AUGUST 1988 BY BILL HEIDEMAN */ 1 1 BOARD_1: DO; $NOLIST /******************************************** * * * THESE ARE THE PUBLIC PROCEDURES * * * ********************************************/ 49 2 WAIT: PROCEDURE (LENGTH) PUBLIC; 50 2 DCL (LENGTH,I) BYTE; 51 3 DO I=1 TO LENGTH; 52 3 CALL TIME(10); 53 3 END; 54 1 END WAIT; /************* POWER SUPPLY TEST ***********/ 55 2 BOARD1_TEST0: PROCEDURE PUBLIC; 56 2 FAULT=0; 57 2 IF ERROR_CODE>5 THEN ERROR_CODE=0; 59 2 EXP2_C=30H; /* TURN ON 12 VAC */ 60 2 EXP0_C=3CH; 61 2 CALL WAIT(200); 62 3 DO WHILE ((FAULT=0) AND (ERROR_CODE<>99)); 63 4 DO CASE ERROR_CODE; 64 5 DO; /* CASE 0 */ 65 5 ERROR_CODE=1; 66 5 IF (EXP1_C AND 3)<>1 THEN FAULT=1; 68 5 END; 69 5 DO; /* CASE 1 */ 70 5 ERROR_CODE=2; 71 5 IF (EXP1_A AND 15H)<>11H THEN FAULT=1; 73 5 END; 74 5 DO; /* CASE 2 */ 75 5 ERROR_CODE=3; 76 5 IF (EXP0_B AND 0FCH)<>0CH THEN FAULT=1; 78 5 END; 79 5 DO; /* CASE 3 */ 80 5 ERROR_CODE=4; 81 5 IF (EXP2_A AND 3)<>3 THEN FAULT=1; 83 5 END; 84 5 DO; /* CASE 4 */ 85 5 ERROR_CODE=5; 86 5 IF (EXP2_B AND 1)<>1 THEN FAULT=1; 88 5 END; 89 4 ERROR_CODE=99; /* CASE 5 */ 90 4 END; 91 3 END; 92 1 END BOARD1_TEST0; /************ DATA BUS TEST ****************/ 93 2 BUS_TEST: PROCEDURE; 94 2 DCL (PATTERN,I) BYTE; 95 2 I=(ERROR_CODE-4)/2; 96 2 PATTERN=ROL(0FEH,I); 97 2 EXP0_A=PATTERN; 98 2 ERROR_CODE=ERROR_CODE+1; 99 3 IF (I AND 1)=0 THEN DO; 101 3 IF EXP4_C<>PATTERN THEN FAULT=1; 103 3 END; 104 3 ELSE DO; 105 3 IF (EXP1_B XOR 0F0H)<>PATTERN THEN FAULT=1; 107 3 END; 108 1 END BUS_TEST; 109 2 BOARD1_TEST1: PROCEDURE PUBLIC; 110 2 DCL I BYTE; 111 2 FAULT=0; 112 2 IF ERROR_CODE>21 THEN ERROR_CODE=0; 114 2 EXP2_C=30H; /* TURN ON 12 VAC */ 115 2 CALL WAIT(200); 116 3 DO WHILE((FAULT=0) AND (ERROR_CODE<>99)); 117 4 DO CASE ERROR_CODE; 118 5 DO; /* CASE 0 */ 119 5 ERROR_CODE=1; 120 5 EXP0_A=0; 121 5 IF EXP4_C<>0 THEN FAULT=1; 123 5 END; 124 5 DO; /* CASE 1 */ 125 5 ERROR_CODE=2; 126 5 IF EXP1_B<>0F0H THEN FAULT=1; 128 5 END; 129 5 DO; /* CASE 2 */ 130 5 EXP0_A=0FFH; 131 5 ERROR_CODE=3; 132 5 IF EXP4_C<>0FFH THEN FAULT=1; 134 5 END; 135 5 DO; /* CASE 3 */ 136 5 ERROR_CODE=4; 137 5 IF EXP1_B<>0FH THEN FAULT=1; 139 5 END; 140 4 CALL BUS_TEST; /* CASE 4 */ 141 4 CALL BUS_TEST; /* CASE 5 */ 142 4 CALL BUS_TEST; /* CASE 6 */ 143 4 CALL BUS_TEST; /* CASE 7 */ 144 4 CALL BUS_TEST; /* CASE 8 */ 145 4 CALL BUS_TEST; /* CASE 9 */ 146 4 CALL BUS_TEST; /* CASE 10 */ 147 4 CALL BUS_TEST; /* CASE 11 */ 148 4 CALL BUS_TEST; /* CASE 12 */ 149 4 CALL BUS_TEST; /* CASE 13 */ 150 4 CALL BUS_TEST; /* CASE 14 */ 151 4 CALL BUS_TEST; /* CASE 15 */ 152 4 CALL BUS_TEST; /* CASE 16 */ 153 4 CALL BUS_TEST; /* CASE 17 */ 154 4 CALL BUS_TEST; /* CASE 18 */ 155 4 CALL BUS_TEST; /* CASE 19 */ 156 5 DO; /* CASE 20 */ 157 5 ERROR_CODE=21; 158 6 DO I=0 TO 255; 159 6 EXP0_A=I; 160 6 IF EXP4_C<>I THEN FAULT=1; 162 6 IF (EXP1_B XOR 0F0H)<>I THEN FAULT=1; 164 6 END; 165 5 END; 166 4 ERROR_CODE=99; /* CASE 21 */ 167 4 END; 168 3 END; 169 1 END BOARD1_TEST1; /****************** RING DETECT TEST **********/ 170 2 CAPTURE: PROCEDURE; 171 2 DCL COUNT WORD; 172 3 DO COUNT=0 TO 511; 173 3 TICK_2MSEC=0; 174 3 H1_DATA(COUNT)=0; 175 3 H2_DATA(COUNT)=0; 176 4 DO WHILE TICK_2MSEC=0; 177 4 END; 178 3 H1_DATA(COUNT)=EXP0_B AND 1; 179 3 H2_DATA(COUNT)=EXP0_B AND 2; 180 3 END; 181 1 END CAPTURE; 182 2 CADN: PROCEDURE (CHANNEL); 183 2 DCL (VALUE,LAST,CHANNEL) BYTE; 184 2 DCL (COUNT,PNTR,START_UP) WORD; 185 2 DCL MIN_DOWN LIT '6'; 186 2 DCL MAX_DOWN LIT '17'; 187 2 DCL MIN_UP LIT '10'; 188 2 DCL MAX_UP LIT '20'; 189 2 COUNT=0; 190 2 START_UP=0FFH; 191 2 IF CHANNEL=0 THEN LAST=H1_DATA(0); 193 2 ELSE LAST=H2_DATA(0); 194 2 PNTR=0; 195 2 FAULT=0; 196 3 DO WHILE ((PNTR<>512) AND (FAULT=0));; 198 3 IF CHANNEL=0 THEN VALUE=H1_DATA(PNTR); 200 3 ELSE VALUE=H2_DATA(PNTR); 201 3 IF VALUE=LAST THEN 202 3 COUNT=COUNT+1; 203 4 ELSE DO; 204 5 IF LAST<>0 THEN DO; 206 5 IF COUNT>MAX_UP THEN FAULT=1; 208 5 ELSE IF ((COUNTMAX_DOWN THEN FAULT=1; 214 5 ELSE IF ((COUNT0 THEN FAULT=1; 225 1 END CADN; 226 2 BOARD1_TEST2: PROCEDURE PUBLIC; 227 2 DCL J WORD; 228 2 DCL VALUE BYTE; 229 2 FAULT=0; 230 2 IF ERROR_CODE>12 THEN ERROR_CODE=0; 232 2 IF ERROR_CODE<8 THEN 233 2 EXP2_C=30H; /* 12VAC ON,TB OFF */ 234 2 EXP4_COM=8BH; 235 2 CALL WAIT(200); 236 3 DO WHILE ((FAULT=0) AND (ERROR_CODE<>99)); 237 4 DO CASE ERROR_CODE; 238 5 DO; /* CASE 0 */ /* TURN OFF LINE RELAY AND WATCH FOR NULL ON LINE 1 */ 239 5 ERROR_CODE=1; 240 5 EXP0_C=3CH; 241 5 EXP4_A=1; /* SET 1 TB */ 242 5 CALL WAIT(50); 243 5 CALL CAPTURE; 244 5 VALUE=0FFH; 245 6 DO J=0 TO 511; 246 6 VALUE=VALUE AND H1_DATA(J); 247 6 END; 248 5 IF VALUE=0 THEN FAULT=1; 250 5 END; 251 5 DO; /* CASE 1 */ /* TURN OFF LINE RELAY AND WATCH FOR NULL ON LINE 2 */ 252 5 ERROR_CODE=2; 253 5 EXP0_C=3CH; 254 5 EXP4_A=2; /* SET 2 TB */ 255 5 CALL WAIT(50); 256 5 CALL CAPTURE; 257 5 VALUE=0FFH; 258 6 DO J=0 TO 511; 259 6 VALUE=VALUE AND H2_DATA(J); 260 6 END; 261 5 IF VALUE=0 THEN FAULT=1; 263 5 END; 264 5 DO; /* CASE 2 */ /* ENABLE LIN 1 TO CATCH PULSES */ 265 5 ERROR_CODE=3; 266 5 EXP0_C=3CH; 267 5 EXP4_A=2; /* KILL 2 */ 268 5 CALL WAIT(50); 269 5 CALL CAPTURE; 270 5 CALL CADN(0); 271 5 END; 272 5 DO; /* CASE 3 */ /* TURN OFF LINE RELAY TO STOP PULSES ON LINE 1 */ 273 5 ERROR_CODE=4; 274 5 EXP0_C=7CH; 275 5 EXP4_A=2; /* KILL 2 */ 276 5 CALL WAIT(50); 277 5 CALL CAPTURE; 278 5 VALUE=0FFH; 279 6 DO J=0 TO 511; 280 6 VALUE=VALUE AND H1_DATA(J); 281 6 END; 282 5 IF VALUE=0 THEN FAULT=1; 284 5 END; 285 5 DO; /* CASE 4 */ /* ENABLE LIN 2 TO CATCH PULSES */ 286 5 ERROR_CODE=5; 287 5 EXP0_C=3CH; 288 5 EXP4_A=1; /* KILL 1 */ 289 5 CALL WAIT(50); 290 5 CALL CAPTURE; 291 5 CALL CADN(1); 292 5 END; 293 5 DO; /* CASE 5 */ /* TURN ON LINE RELAY TO STOP PULSES ON LINE 2 */ 294 5 ERROR_CODE=6; 295 5 EXP0_C=0BCH; 296 5 EXP4_A=2; /* KILL 2 */ 297 5 CALL WAIT(50); 298 5 CALL CAPTURE; 299 5 VALUE=0FFH; 300 6 DO J=0 TO 511; 301 6 VALUE=VALUE AND H2_DATA(J); 302 6 END; 303 5 IF VALUE=0 THEN FAULT=1; 305 5 END; 306 5 DO; /* CASE 6 */ /* TURN OFF TB BUT NO LINES FOR HIGHS */ 307 5 ERROR_CODE=7; 308 5 EXP4_A=3; 309 5 EXP0_C=3CH; 310 5 CALL WAIT(200); 311 5 IF (EXP0_B AND 3)<>3 THEN FAULT=1; 313 5 END; 314 5 DO; /* CASE 7 */ /* TB OFF CHECK TB CURRENT LINE 1 */ 315 5 ERROR_CODE=8; 316 5 EXP4_A=1; 317 5 EXP2_C=30H; 318 5 EXP0_C=7CH; 319 5 CALL WAIT(200); 320 5 IF (EXP4_B AND 3)<>3 THEN FAULT=1; 322 5 END; 323 5 DO; /* CASE 8 */ /* TB ON CHECK TB CURRENT+ LINE 1 */ 324 5 ERROR_CODE=9; 325 5 EXP4_A=0; 326 5 EXP2_C=20H; 327 5 EXP0_C=7CH; 328 5 CALL WAIT(255); 329 5 EXP4_A=1; 330 5 CALL WAIT(255); 331 5 IF (EXP4_B AND 3)<>1 THEN FAULT=1; 333 5 END; 334 5 DO; /* CASE 9 */ /* TB ON CHECK TB CURRENT- LINE 1 */ 335 5 ERROR_CODE=10; 336 5 EXP4_A=0; 337 5 EXP2_C=30H; /* SEQUENCE TB */ 338 5 CALL WAIT(50); 339 5 EXP2_C=38H; 340 5 CALL WAIT(50); 341 5 EXP2_C=28H; 342 5 EXP0_C=07CH; 343 5 CALL WAIT(255); 344 5 EXP4_A=1; 345 5 CALL WAIT(255); 346 5 IF (EXP4_B AND 3)<>2 THEN FAULT=1; 348 5 END; 349 5 DO; /* CASE 10 */ /* TB ON CHECK TB CURRENT+ LINE 2 */ 350 5 ERROR_CODE=11; 351 5 EXP4_A=0; 352 5 EXP2_C=38H; /* SEQUENCE TB */ 353 5 CALL WAIT(50); 354 5 EXP2_C=30H; 355 5 CALL WAIT(50); 356 5 EXP2_C=20H; 357 5 EXP0_C=0BCH; 358 5 CALL WAIT(255); 359 5 EXP4_A=2; 360 5 CALL WAIT(255); 361 5 IF (EXP4_B AND 3)<>1 THEN FAULT=1; 363 5 END; 364 5 DO; /* CASE 11 */ /* TB ON CHECK TB CURRENT- LINE 2 */ 365 5 ERROR_CODE=12; 366 5 EXP4_A=0; 367 5 EXP2_C=30H; /* SEQUENCE TB */ 368 5 CALL WAIT(50); 369 5 EXP2_C=38H; 370 5 CALL WAIT(50); 371 5 EXP2_C=28H; 372 5 EXP0_C=0BCH; 373 5 CALL WAIT(255); 374 5 EXP4_A=2; 375 5 CALL WAIT(255); 376 5 IF (EXP4_B AND 3)<>2 THEN FAULT=1; 378 5 END; 379 4 ERROR_CODE=99; /* CASE 12 */ 380 4 END; 381 3 END; 382 1 END BOARD1_TEST2; /**************** 202P AND BUSY LINE TEST ***************/ 383 2 TONE_CHECK: PROCEDURE (CHANNEL); 384 2 DCL (CHANNEL,TONE_DATA,DV,I,BUSY) BYTE; 385 2 DCL TONE_NUM (12) BYTE CONSTANT (28H,11H,21H,41H, 12H,22H,42H,14H,24H,44H,18H,48H); 386 2 I=1; 387 3 DO WHILE ((FAULT=0) AND (I<10)); 388 3 EXP3_C=TTG_OUT(I); /* TURN ON TONE */ 389 3 EXP0_C=EXP0_C OR 1; 390 3 CALL WAIT(50); 391 4 IF (CHANNEL=0) THEN DO; 393 4 TONE_DATA=SHR(EXP0_A,4); 394 4 DV=EXP0_B AND 10H; 395 4 END; 396 4 ELSE DO; 397 4 TONE_DATA=EXP0_A AND 0FH; 398 4 DV=EXP0_B AND 20H; 399 4 END; 400 3 IF ((DV=0) OR (TONE_DATA<>I)) THEN FAULT=1; 402 3 I=I+1; 403 3 END; 404 2 IF FAULT=0 THEN 405 2 EXP0_C=EXP0_C AND 0FEH; /* TURN OFF TONE */ 406 1 END TONE_CHECK; 407 2 BUSY_CHECK: PROCEDURE (CHANNEL); 408 2 DCL CHANNEL BYTE; 409 2 EXP3_C=11H; /* SEND TONE */ 410 2 CALL WAIT(80); 411 3 IF CHANNEL=0 THEN DO; 413 3 IF (EXP0_B AND 40H)=0 THEN FAULT=1; 415 3 END; 416 3 ELSE DO; 417 3 IF (EXP0_B AND 80H)=0 THEN FAULT=1; 419 3 END; 420 2 EXP3_C=0; /* TONE OFF */ 421 2 CALL WAIT(80); 422 3 IF CHANNEL=0 THEN DO; 424 3 IF (EXP0_B AND 40H)<>0 THEN FAULT=1; 426 3 END; 427 3 ELSE DO; 428 3 IF (EXP0_B AND 80H)<>0 THEN FAULT=1; 430 3 END; 431 1 END BUSY_CHECK; 432 2 BOARD1_TEST3: PROCEDURE PUBLIC; 433 2 FAULT=0; 434 2 IF ERROR_CODE>5 THEN ERROR_CODE=0; 436 2 EXP0_COM=92H; 437 2 EXP4_COM=8BH; 438 2 EXP2_C=30H; /* TURN ON 12 VAC */ 439 2 CALL WAIT(200); 440 3 DO WHILE ((FAULT=0) AND (ERROR_CODE<>99)); 441 4 DO CASE ERROR_CODE; 442 5 DO; /* CASE 0 */ 443 5 ERROR_CODE=1; 444 5 EXP0_C=3CH; /* TURN OFF RELAYS */ 445 5 CALL WAIT(200); 446 5 IF (EXP0_B AND 0F0H)<>0 THEN FAULT=1; 448 5 END; 449 5 DO; /* CASE 1 */ 450 5 ERROR_CODE=2; 451 5 EXP4_A=1; 452 5 EXP3_A=0; 453 5 EXP0_C=7CH; /* CHAN 1 TONES */ 454 5 CALL WAIT(200); 455 5 CALL TONE_CHECK(0); 456 5 END; 457 5 DO; /* CASE 2 */ 458 5 ERROR_CODE=3; 459 5 EXP4_A=1; 460 5 EXP3_A=0; 461 5 EXP0_C=7CH; /* CHAN 1 BUSY */ 462 5 CALL WAIT(200); 463 5 CALL BUSY_CHECK(0); 464 5 END; 465 5 DO; /* CASE 3 */ 466 5 ERROR_CODE=4; 467 5 EXP4_A=2; 468 5 EXP3_A=10H; 469 5 EXP0_C=0BCH; /* CHAN 2 TONES */ 470 5 CALL WAIT(200); 471 5 CALL TONE_CHECK(1); 472 5 END; 473 5 DO; /* CASE 4 */ 474 5 ERROR_CODE=5; 475 5 EXP4_A=2; 476 5 EXP3_A=10H; 477 5 EXP0_C=0BCH; /* CHAN 2 BUSY */ 478 5 CALL WAIT(200); 479 5 CALL BUSY_CHECK(1); 480 5 END; 481 4 ERROR_CODE=99; /* CASE 5 */ 482 4 END; 483 3 END; 484 1 END BOARD1_TEST3; /***************** TTG OUT TEST *****************/ 485 2 TONE_SEND: PROCEDURE (CHANNEL); 486 2 DCL (CHANNEL,I) BYTE; 487 2 DCL TONE_NUM (12) BYTE CONSTANT (48H,81H,41H,21H, 82H,42H,22H,84H,44H,24H,88H,28H); 488 2 I=1; 489 3 DO WHILE ((FAULT=0) AND (I<10)); 490 3 EXP0_C=(EXP0_C AND 0DFH); /* SET OFF HOOK */ 491 3 EXP0_A=TONE_NUM(I); 492 3 CALL WAIT(80); 493 3 IF (EXP3_B AND 10H)=0 THEN FAULT=1; 495 3 IF (EXP3_B AND 0FH)<>I THEN FAULT=1; 497 3 EXP0_C=(EXP0_C OR 20H); /* CLEAR OFF HOOK */ 498 3 CALL WAIT(80); 499 3 IF (EXP3_B AND 10H)<>0 THEN FAULT=1; 501 3 I=I+1; 502 3 END; 503 1 END TONE_SEND; 504 2 BOARD1_TEST4: PROCEDURE PUBLIC; 505 2 FAULT=0; 506 2 IF ERROR_CODE>4 THEN ERROR_CODE=0; 508 2 EXP2_C=30H; /* TURN ON 12 VAC */ 509 2 EXP4_COM=8BH; 510 2 CALL WAIT(200); 511 3 DO WHILE((FAULT=0) AND (ERROR_CODE<>99)); 512 4 DO CASE ERROR_CODE; 513 5 DO; /* CASE 0 */ 514 5 ERROR_CODE=1; 515 5 EXP0_C=7CH; /* CHAN 1 OFF */ 516 5 EXP0_A=0; 517 5 EXP3_A=0; 518 5 EXP4_A=1; 519 5 CALL WAIT(50); 520 5 IF (EXP3_B AND 8)<>0 THEN FAULT=1; 522 5 END; 523 5 DO; /* CASE 1 */ 524 5 ERROR_CODE=2; 525 5 EXP0_C=5CH; /* CHECK CHAN 1 */ 526 5 EXP3_A=0; 527 5 EXP4_A=1; 528 5 CALL TONE_SEND(0); 529 5 END; 530 5 DO; /* CASE 2 */ 531 5 ERROR_CODE=3; 532 5 EXP0_C=0BEH; /* CHAN 2 OFF */ 533 5 EXP0_A=0; 534 5 EXP3_A=1; 535 5 EXP4_A=2; 536 5 CALL WAIT(50); 537 5 IF (EXP3_B AND 8)<>0 THEN FAULT=1; 539 5 END; 540 5 DO; /* CASE 3 */ 541 5 ERROR_CODE=4; 542 5 EXP0_C=9EH; /* CHECK CHAN 2 */ 543 5 EXP3_A=1; 544 5 EXP4_A=2; 545 5 CALL TONE_SEND(1); 546 5 END; 547 4 ERROR_CODE=99; /* CASE 4 */ 548 4 END; 549 3 END; 550 1 END BOARD1_TEST4; /*************** VOICE CHIP TEST *****************/ 551 2 VOC_CMD: PROCEDURE (CHANNEL,COMMAND); 552 2 DCL (CHANNEL,COMMAND) BYTE; 553 2 DCL COM_TBL (5) BYTE CONSTANT (10H,20H,80H,00H,53H); /* 0=START, 1=STOP, 2=RECORD, 3=PLAY, 4=SPEED */ 554 2 EXP0_A=COM_TBL(COMMAND); 555 2 IF (CHANNEL=0) THEN EXP0_C=(EXP0_C AND 0F7H); 557 2 ELSE EXP0_C=(EXP0_C AND 0FBH); 558 2 CALL TIME(1); 559 2 EXP0_C=EXP0_C OR 0CH; 560 2 CALL WAIT(1); 561 2 EXP0_A=0; 562 1 END VOC_CMD; 563 2 VOC_ADDR: PROCEDURE(CHANNEL,UPPER,MID,LOWER); 564 2 DCL (CHANNEL,UPPER,MID,LOWER) BYTE; 565 2 DCL (LOW_MASK,HIGH_MASK) BYTE; 566 3 IF CHANNEL=0 THEN DO; 568 3 LOW_MASK=0F7H; 569 3 HIGH_MASK=8; 570 3 END; 571 3 ELSE DO; 572 3 LOW_MASK=0FBH; 573 3 HIGH_MASK=4; 574 3 END; 575 2 EXP0_A=UPPER; 576 2 EXP0_C=EXP0_C AND LOW_MASK; 577 2 CALL TIME(1); 578 2 EXP0_C=EXP0_C OR HIGH_MASK; 579 2 CALL WAIT(1); 580 2 EXP0_A=MID; 581 2 EXP0_C=EXP0_C AND LOW_MASK; 582 2 CALL TIME(1); 583 2 EXP0_C=EXP0_C OR HIGH_MASK; 584 2 CALL WAIT(1); 585 2 EXP0_A=LOWER; 586 2 EXP0_C=EXP0_C AND LOW_MASK; 587 2 CALL TIME(1); 588 2 EXP0_C=EXP0_C OR HIGH_MASK; 589 2 CALL WAIT(1); 590 2 EXP0_A=0; 591 1 END VOC_ADDR; 592 2 TONE_REC: PROCEDURE (FIRST,COUNT); 593 2 DCL (FIRST,COUNT,I,PNTR) BYTE; 594 2 DCL TONE_NUM (12) BYTE CONSTANT (28H,11H,21H,41H, 12H,22H,42H,14H,24H,44H,18H,48H); 595 3 DO I=1 TO COUNT; 596 3 PNTR=FIRST+I; 597 3 IF PNTR>9 THEN PNTR=PNTR-9; 599 3 EXP3_C=TONE_NUM(PNTR); 600 3 MAIN_TIMER=80; /* SET TIMER TO 160 MSEC */ 601 4 DO WHILE MAIN_TIMER<>0; 602 4 END; 603 3 EXP3_C=0; 604 3 MAIN_TIMER=80; /* SET TIMER TO 160 MSEC */ 605 4 DO WHILE MAIN_TIMER<>0; 606 4 END; 607 3 END; 608 1 END TONE_REC; 609 2 TONE_COMP: PROCEDURE (FIRST,COUNT); 610 2 DCL (FIRST,COUNT,I,PNTR,DIGIT) BYTE; 611 2 I=1; 612 3 DO WHILE ((FAULT=0) AND (I<(COUNT+1))); 613 3 MAIN_TIMER=120; 614 3 DIGIT=0; 615 4 DO WHILE((MAIN_TIMER<>0) AND ((DIGIT AND 10H)=0)); 616 4 DIGIT=EXP3_B; 617 4 END; 618 3 IF MAIN_TIMER=0 THEN FAULT=1; 620 4 ELSE DO; 621 4 H1_DATA(DIA)=DIGIT; 622 4 DIA=DIA+1; 623 4 PNTR=FIRST+I; 624 4 IF PNTR>9 THEN PNTR=PNTR-9; 626 4 IF (DIGIT AND 0FH)<>PNTR THEN FAULT=1; 628 4 END; 629 3 MAIN_TIMER=120; 630 4 DO WHILE((MAIN_TIMER<>0) AND ((EXP3_B AND 10H)<>0)); 631 4 END; 632 3 IF MAIN_TIMER=0 THEN FAULT=1; 634 3 I=I+1; 635 3 END; 636 1 END TONE_COMP; 637 2 RESET_VOICE: PROCEDURE; 638 2 EXP0_C=EXP0_C AND 0EFH; 639 2 CALL TIME(1); 640 2 EXP0_C=EXP0_C OR 10H; 641 2 CALL WAIT(10); 642 1 END RESET_VOICE; 643 2 BOARD1_TEST5: PROCEDURE PUBLIC; 644 2 DCL I BYTE; 645 2 DCL RAM_START (4) BYTE CONSTANT (30H,35H,3AH,3FH); 646 2 FAULT=0; 647 2 IF ERROR_CODE>7 THEN ERROR_CODE=0; 649 2 EXP2_C=30H; /* TURN ON 12 VAC */ 650 2 EXP4_COM=8BH; 651 2 CALL WAIT(200); 652 3 DO WHILE((FAULT=0) AND (ERROR_CODE<>99)); 653 4 DO CASE ERROR_CODE; 654 5 DO; /* CASE 0 */ 655 5 ERROR_CODE=1; 656 5 EXP0_A=0; 657 5 EXP0_C=3CH; /* RESET VOICE */ 658 5 CALL RESET_VOICE; 659 5 IF (EXP0_B AND 0CH)<>0CH THEN FAULT=1; 661 5 END; 662 5 DO; /* CASE 1 */ 663 5 ERROR_CODE=2; 664 5 CALL VOC_CMD(0,0); /* VOICE 1 CHECK */ 665 5 IF (EXP0_B AND 8)<>0 THEN FAULT=1; 667 5 EXP0_C=3CH; /* RESET VOICE */ 668 5 CALL RESET_VOICE; 669 5 END; 670 5 DO; /* CASE 2 */ 671 5 ERROR_CODE=3; 672 5 EXP0_C=6CH; 673 5 EXP4_A=1; 674 5 CALL WAIT(50); 675 5 EXP0_C=7CH; /* RELEASE RESET */ 676 5 EXP3_A=30H; 677 5 EXP3_C=0; 678 5 CALL WAIT(10); 679 5 CALL VOC_CMD(0,2); /* REC */ 680 5 CALL VOC_CMD(0,4); /* SPEED */ 681 5 CALL VOC_CMD(0,0); /* START */ 682 5 CALL TONE_REC(0,1); 683 5 CALL RESET_VOICE; 684 5 CALL VOC_CMD(0,4); /* SPEED */ 685 5 CALL VOC_CMD(0,0); /* PLAY */ 686 5 CALL TONE_COMP(0,1); 687 5 CALL RESET_VOICE; 688 5 END; 689 5 DO; /* CASE 3 */ 690 5 ERROR_CODE=4; 691 5 EXP0_C=6CH; 692 5 EXP4_A=1; 693 5 CALL WAIT(50); 694 5 EXP0_C=7CH; /* RELEASE RESET */ 695 5 EXP3_A=30H; 696 5 EXP3_C=0; 697 5 CALL WAIT(10); 698 6 DO I=0 TO 3; 699 6 CALL VOC_CMD(0,2); /* REC */ 700 6 CALL VOC_CMD(0,4); /* SPEED */ 701 6 CALL VOC_ADDR(0,RAM_START(I),0,0); /* ADDR */ 702 6 CALL VOC_CMD(0,0); /* START */ 703 6 CALL TONE_REC(I,6); 704 6 CALL VOC_CMD(0,1); /* STOP */ 705 6 END; 706 6 DO I=1 TO 2; 707 6 CALL WAIT(250); 708 6 END; 709 5 I=0; 710 5 DIA=0; 711 5 CALL RESET_VOICE; /* RESET CHIP */ 712 6 DO WHILE((FAULT=0) AND (I<4)); 713 6 CALL WAIT(250); 714 6 CALL VOC_CMD(0,4); /* SPEED */ 715 6 CALL VOC_ADDR(0,RAM_START(I),0,0); /* ADDR */ 716 6 CALL VOC_CMD(0,0); /* START */ 717 6 CALL TONE_COMP(I,6); 718 6 CALL VOC_CMD(0,1); /* STOP */ 719 6 I=I+1; 720 6 END; 721 5 CALL RESET_VOICE; 722 5 END; 723 5 DO; /* CASE 4 */ 724 5 CALL WAIT(250); 725 5 ERROR_CODE=5; 726 5 EXP0_C=3CH; 727 5 CALL WAIT(50); 728 5 CALL RESET_VOICE; 729 5 CALL VOC_CMD(1,0); /* VOICE 2 CHECK */ 730 5 IF (EXP0_B AND 4)<>0 THEN FAULT=1; 732 5 CALL RESET_VOICE; 733 5 END; 734 5 DO; /* CASE 5 */ 735 5 ERROR_CODE=6; 736 5 EXP0_C=0ACH; 737 5 EXP4_A=2; 738 5 CALL WAIT(50); 739 5 EXP0_C=0BCH; /* RELEASE RESET */ 740 5 EXP3_A=31H; 741 5 EXP3_C=0; 742 5 CALL WAIT(10); 743 5 CALL VOC_CMD(1,2); /* REC */ 744 5 CALL VOC_CMD(1,4); /* SPEED */ 745 5 CALL VOC_CMD(1,0); /* START */ 746 5 CALL TONE_REC(0,1); 747 5 CALL RESET_VOICE; 748 5 CALL VOC_CMD(1,4); /* SPEED */ 749 5 CALL VOC_CMD(1,0); /* PLAY */ 750 5 CALL TONE_COMP(0,1); 751 5 CALL RESET_VOICE; 752 5 END; 753 5 DO; /* CASE 6 */ 754 5 ERROR_CODE=7; 755 5 EXP0_C=0ACH; 756 5 EXP4_A=2; 757 5 CALL WAIT(50); 758 5 EXP0_C=0BCH; /* RELEASE RESET */ 759 5 EXP3_A=31H; 760 5 EXP3_C=0; 761 5 CALL WAIT(10); 762 6 DO I=0 TO 3; 763 6 CALL VOC_CMD(1,2); /* REC */ 764 6 CALL VOC_CMD(1,4); /* SPEED */ 765 6 CALL VOC_ADDR(1,RAM_START(I),0,0); /* ADDR */ 766 6 CALL VOC_CMD(1,0); /* START */ 767 6 CALL TONE_REC(I,6); 768 6 CALL VOC_CMD(1,1); /* STOP */ 769 6 END; 770 6 DO I=1 TO 2; 771 6 CALL WAIT(250); 772 6 END; 773 5 I=0; 774 5 DIA=0; 775 5 CALL RESET_VOICE; 776 6 DO WHILE((FAULT=0) AND (I<4)); 777 6 CALL WAIT(250); 778 6 CALL VOC_CMD(1,4); /* SPEED */ 779 6 CALL VOC_ADDR(1,RAM_START(I),0,0); /* ADDR */ 780 6 CALL VOC_CMD(1,0); /* START */ 781 6 CALL TONE_COMP(I,6); 782 6 CALL VOC_CMD(1,1); /* STOP */ 783 6 I=I+1; 784 6 END; 785 5 CALL RESET_VOICE; 786 5 END; 787 4 ERROR_CODE=99; /* CASE 7 */ 788 4 END; 789 3 END; 790 1 END BOARD1_TEST5; 791 2 BOARD1_TEST6: PROCEDURE PUBLIC; 792 2 DCL I BYTE; 793 2 DCL SWT_TBL (16) BYTE CONSTANT (0,2,1,3, 8,0,9,1,4,6,5,7,2,4,3,5); 794 2 FAULT=0; 795 2 IF ERROR_CODE>3 THEN ERROR_CODE=0; 797 2 EXP2_C=30H; /* TURN ON 12 VAC */ 798 2 CALL WAIT(200); 799 3 DO WHILE((FAULT=0) AND (ERROR_CODE<>99)); 800 4 DO CASE ERROR_CODE; 801 5 DO; /* CASE 0 */ 802 5 ERROR_CODE=1; 803 5 EXP0_C=3CH; 804 5 I=0; 805 6 DO WHILE KEY_EDGE=0; 806 6 MAIN_TIMER=250; 807 7 DO WHILE MAIN_TIMER<>0; 808 7 EXP0_A=80H OR I; 809 7 CALL WAIT(2); 810 7 EXP0_A=(40H OR I+1); 811 7 CALL WAIT(2); 812 7 EXP0_A=(20H OR I+2); 813 7 CALL WAIT(2); 814 7 EXP0_A=(10H OR I+3); 815 7 CALL WAIT(2); 816 7 END; 817 6 I=I+1; 818 6 IF I=11 THEN I=0; 820 6 END; 821 5 KEY_EDGE=0; 822 5 IF KEY_DATA<>0CH THEN FAULT=1; 824 5 END; 825 5 DO; /* CASE 1 */ 826 5 ERROR_CODE=2; 827 6 DO WHILE KEY_EDGE=0; 828 6 EXP0_A=1FH; 829 6 CALL TIME(1); 830 6 IF (EXP1_A AND 8)<>0 THEN EXP0_A=11H; 832 6 ELSE EXP0_A=10H; 833 6 CALL WAIT(2); 834 6 EXP0_A=2FH; 835 6 CALL TIME(1); 836 6 IF (EXP1_A AND 8)<>0 THEN EXP0_A=21H; 838 6 ELSE EXP0_A=20H; 839 6 CALL WAIT(2); 840 6 EXP0_A=4FH; 841 6 CALL TIME(1); 842 6 IF (EXP1_A AND 8)<>0 THEN EXP0_A=41H; 844 6 ELSE EXP0_A=40H; 845 6 CALL WAIT(2); 846 6 EXP0_A=8FH; 847 6 CALL TIME(1); 848 6 IF (EXP1_A AND 8)<>0 THEN EXP0_A=81H; 850 6 ELSE EXP0_A=80H; 851 6 CALL WAIT(2); 852 6 END; 853 5 KEY_EDGE=0; 854 5 IF KEY_DATA<>0CH THEN FAULT=1; 856 5 END; 857 5 DO; /* CASE 2 */ 858 5 ERROR_CODE=3; 859 5 EXP4_A=2; /* SEND TONE */ 860 5 EXP3_A=11H; 861 5 EXP3_C=11H; 862 5 EXP0_C=0BCH; 863 5 CALL WAIT(250); 864 6 DO WHILE KEY_EDGE=0; 865 6 EXP3_C=11H; /* SEND TONE */ 866 6 IF (EXP0_B AND 20H)=0 THEN 867 6 EXP0_A=80H OR I; 868 7 ELSE DO; 869 7 EXP3_C=0; /* TURN OFF TONE */ 870 7 EXP0_COM=92H; /* SET TO INPUT */ 871 7 CALL TIME(1); 872 7 I=SWT_TBL(EXP0_A AND 0FH); 873 7 EXP0_COM=82H; /* SET TO OUTPUT */ 874 7 CALL TIME(1); 875 7 EXP0_C=0BCH; 876 8 DO WHILE (((EXP0_B AND 20H)<>0) AND (KEY_EDGE=0)); 877 8 END; 878 7 END; 879 6 END; 880 5 KEY_EDGE=0; 881 5 IF KEY_DATA<>0CH THEN FAULT=1; 883 5 END; 884 5 DO; /* CASE 3 */ 885 5 ERROR_CODE=99; 886 5 EXP4_A=0; 887 5 EXP0_C=3CH; 888 5 EXP2_C=10H; 889 5 EXP3_C=0; 890 5 CALL WAIT(250); 891 5 END; 892 4 END; 893 3 END; 894 1 END BOARD1_TEST6; 895 1 END BOARD_1; MODULE INFORMATION: (STATIC+OVERLAYABLE) CODE SIZE = 120FH 4623D CONSTANT SIZE = 0049H 73D DIRECT VARIABLE SIZE = 1EH+0CH 30D+ 12D INDIRECT VARIABLE SIZE = 00H+00H 0D+ 0D BIT SIZE = 03H+00H 3D+ 0D BIT-ADDRESSABLE SIZE = 00H+00H 0D+ 0D AUXILIARY VARIABLE SIZE = 0000H 0D MAXIMUM STACK SIZE = 0006H 6D REGISTER-BANK(S) USED: 0 1086 LINES READ 0 PROGRAM ERROR(S) END OF PL/M-51 COMPILATION