$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 */ BOARD_1: DO; $NOLIST $INCLUDE(REG51.DCL) $INCLUDE(TSTR.PUB) $LIST /******************************************** * * * THESE ARE THE PUBLIC PROCEDURES * * * ********************************************/ WAIT: PROCEDURE (LENGTH) PUBLIC; DCL (LENGTH,I) BYTE; DO I=1 TO LENGTH; CALL TIME(10); END; END WAIT; /************* POWER SUPPLY TEST ***********/ BOARD1_TEST0: PROCEDURE PUBLIC; FAULT=0; IF ERROR_CODE>5 THEN ERROR_CODE=0; EXP2_C=30H; /* TURN ON 12 VAC */ EXP0_C=3CH; CALL WAIT(200); DO WHILE ((FAULT=0) AND (ERROR_CODE<>99)); DO CASE ERROR_CODE; DO; /* CASE 0 */ ERROR_CODE=1; IF (EXP1_C AND 3)<>1 THEN FAULT=1; END; DO; /* CASE 1 */ ERROR_CODE=2; IF (EXP1_A AND 15H)<>11H THEN FAULT=1; END; DO; /* CASE 2 */ ERROR_CODE=3; IF (EXP0_B AND 0FCH)<>0CH THEN FAULT=1; END; DO; /* CASE 3 */ ERROR_CODE=4; IF (EXP2_A AND 3)<>3 THEN FAULT=1; END; DO; /* CASE 4 */ ERROR_CODE=5; IF (EXP2_B AND 1)<>1 THEN FAULT=1; END; ERROR_CODE=99; /* CASE 5 */ END; END; END BOARD1_TEST0; /************ DATA BUS TEST ****************/ BUS_TEST: PROCEDURE; DCL (PATTERN,I) BYTE; I=(ERROR_CODE-4)/2; PATTERN=ROL(0FEH,I); EXP0_A=PATTERN; ERROR_CODE=ERROR_CODE+1; IF (I AND 1)=0 THEN DO; IF EXP4_C<>PATTERN THEN FAULT=1; END; ELSE DO; IF (EXP1_B XOR 0F0H)<>PATTERN THEN FAULT=1; END; END BUS_TEST; BOARD1_TEST1: PROCEDURE PUBLIC; DCL I BYTE; FAULT=0; IF ERROR_CODE>21 THEN ERROR_CODE=0; EXP2_C=30H; /* TURN ON 12 VAC */ CALL WAIT(200); DO WHILE((FAULT=0) AND (ERROR_CODE<>99)); DO CASE ERROR_CODE; DO; /* CASE 0 */ ERROR_CODE=1; EXP0_A=0; IF EXP4_C<>0 THEN FAULT=1; END; DO; /* CASE 1 */ ERROR_CODE=2; IF EXP1_B<>0F0H THEN FAULT=1; END; DO; /* CASE 2 */ EXP0_A=0FFH; ERROR_CODE=3; IF EXP4_C<>0FFH THEN FAULT=1; END; DO; /* CASE 3 */ ERROR_CODE=4; IF EXP1_B<>0FH THEN FAULT=1; END; CALL BUS_TEST; /* CASE 4 */ CALL BUS_TEST; /* CASE 5 */ CALL BUS_TEST; /* CASE 6 */ CALL BUS_TEST; /* CASE 7 */ CALL BUS_TEST; /* CASE 8 */ CALL BUS_TEST; /* CASE 9 */ CALL BUS_TEST; /* CASE 10 */ CALL BUS_TEST; /* CASE 11 */ CALL BUS_TEST; /* CASE 12 */ CALL BUS_TEST; /* CASE 13 */ CALL BUS_TEST; /* CASE 14 */ CALL BUS_TEST; /* CASE 15 */ CALL BUS_TEST; /* CASE 16 */ CALL BUS_TEST; /* CASE 17 */ CALL BUS_TEST; /* CASE 18 */ CALL BUS_TEST; /* CASE 19 */ DO; /* CASE 20 */ ERROR_CODE=21; DO I=0 TO 255; EXP0_A=I; IF EXP4_C<>I THEN FAULT=1; IF (EXP1_B XOR 0F0H)<>I THEN FAULT=1; END; END; ERROR_CODE=99; /* CASE 21 */ END; END; END BOARD1_TEST1; /****************** RING DETECT TEST **********/ CAPTURE: PROCEDURE; DCL COUNT WORD; DO COUNT=0 TO 511; TICK_2MSEC=0; H1_DATA(COUNT)=0; H2_DATA(COUNT)=0; DO WHILE TICK_2MSEC=0; END; H1_DATA(COUNT)=EXP0_B AND 1; H2_DATA(COUNT)=EXP0_B AND 2; END; END CAPTURE; CADN: PROCEDURE (CHANNEL); DCL (VALUE,LAST,CHANNEL) BYTE; DCL (COUNT,PNTR,START_UP) WORD; DCL MIN_DOWN LIT '6'; DCL MAX_DOWN LIT '17'; DCL MIN_UP LIT '10'; DCL MAX_UP LIT '20'; COUNT=0; START_UP=0FFH; IF CHANNEL=0 THEN LAST=H1_DATA(0); ELSE LAST=H2_DATA(0); PNTR=0; FAULT=0; DO WHILE ((PNTR<>512) AND (FAULT=0));; IF CHANNEL=0 THEN VALUE=H1_DATA(PNTR); ELSE VALUE=H2_DATA(PNTR); IF VALUE=LAST THEN COUNT=COUNT+1; ELSE DO; IF LAST<>0 THEN DO; IF COUNT>MAX_UP THEN FAULT=1; ELSE IF ((COUNTMAX_DOWN THEN FAULT=1; ELSE IF ((COUNT0 THEN FAULT=1; END CADN; BOARD1_TEST2: PROCEDURE PUBLIC; DCL J WORD; DCL VALUE BYTE; FAULT=0; IF ERROR_CODE>12 THEN ERROR_CODE=0; IF ERROR_CODE<8 THEN EXP2_C=30H; /* 12VAC ON,TB OFF */ EXP4_COM=8BH; CALL WAIT(200); DO WHILE ((FAULT=0) AND (ERROR_CODE<>99)); DO CASE ERROR_CODE; DO; /* CASE 0 */ /* TURN OFF LINE RELAY AND WATCH FOR NULL ON LINE 1 */ ERROR_CODE=1; EXP0_C=3CH; EXP4_A=1; /* SET 1 TB */ CALL WAIT(50); CALL CAPTURE; VALUE=0FFH; DO J=0 TO 511; VALUE=VALUE AND H1_DATA(J); END; IF VALUE=0 THEN FAULT=1; END; DO; /* CASE 1 */ /* TURN OFF LINE RELAY AND WATCH FOR NULL ON LINE 2 */ ERROR_CODE=2; EXP0_C=3CH; EXP4_A=2; /* SET 2 TB */ CALL WAIT(50); CALL CAPTURE; VALUE=0FFH; DO J=0 TO 511; VALUE=VALUE AND H2_DATA(J); END; IF VALUE=0 THEN FAULT=1; END; DO; /* CASE 2 */ /* ENABLE LIN 1 TO CATCH PULSES */ ERROR_CODE=3; EXP0_C=3CH; EXP4_A=2; /* KILL 2 */ CALL WAIT(50); CALL CAPTURE; CALL CADN(0); END; DO; /* CASE 3 */ /* TURN OFF LINE RELAY TO STOP PULSES ON LINE 1 */ ERROR_CODE=4; EXP0_C=7CH; EXP4_A=2; /* KILL 2 */ CALL WAIT(50); CALL CAPTURE; VALUE=0FFH; DO J=0 TO 511; VALUE=VALUE AND H1_DATA(J); END; IF VALUE=0 THEN FAULT=1; END; DO; /* CASE 4 */ /* ENABLE LIN 2 TO CATCH PULSES */ ERROR_CODE=5; EXP0_C=3CH; EXP4_A=1; /* KILL 1 */ CALL WAIT(50); CALL CAPTURE; CALL CADN(1); END; DO; /* CASE 5 */ /* TURN ON LINE RELAY TO STOP PULSES ON LINE 2 */ ERROR_CODE=6; EXP0_C=0BCH; EXP4_A=2; /* KILL 2 */ CALL WAIT(50); CALL CAPTURE; VALUE=0FFH; DO J=0 TO 511; VALUE=VALUE AND H2_DATA(J); END; IF VALUE=0 THEN FAULT=1; END; DO; /* CASE 6 */ /* TURN OFF TB BUT NO LINES FOR HIGHS */ ERROR_CODE=7; EXP4_A=3; EXP0_C=3CH; CALL WAIT(200); IF (EXP0_B AND 3)<>3 THEN FAULT=1; END; DO; /* CASE 7 */ /* TB OFF CHECK TB CURRENT LINE 1 */ ERROR_CODE=8; EXP4_A=1; EXP2_C=30H; EXP0_C=7CH; CALL WAIT(200); IF (EXP4_B AND 3)<>3 THEN FAULT=1; END; DO; /* CASE 8 */ /* TB ON CHECK TB CURRENT+ LINE 1 */ ERROR_CODE=9; EXP4_A=0; EXP2_C=20H; EXP0_C=7CH; CALL WAIT(255); EXP4_A=1; CALL WAIT(255); IF (EXP4_B AND 3)<>1 THEN FAULT=1; END; DO; /* CASE 9 */ /* TB ON CHECK TB CURRENT- LINE 1 */ ERROR_CODE=10; EXP4_A=0; EXP2_C=30H; /* SEQUENCE TB */ CALL WAIT(50); EXP2_C=38H; CALL WAIT(50); EXP2_C=28H; EXP0_C=07CH; CALL WAIT(255); EXP4_A=1; CALL WAIT(255); IF (EXP4_B AND 3)<>2 THEN FAULT=1; END; DO; /* CASE 10 */ /* TB ON CHECK TB CURRENT+ LINE 2 */ ERROR_CODE=11; EXP4_A=0; EXP2_C=38H; /* SEQUENCE TB */ CALL WAIT(50); EXP2_C=30H; CALL WAIT(50); EXP2_C=20H; EXP0_C=0BCH; CALL WAIT(255); EXP4_A=2; CALL WAIT(255); IF (EXP4_B AND 3)<>1 THEN FAULT=1; END; DO; /* CASE 11 */ /* TB ON CHECK TB CURRENT- LINE 2 */ ERROR_CODE=12; EXP4_A=0; EXP2_C=30H; /* SEQUENCE TB */ CALL WAIT(50); EXP2_C=38H; CALL WAIT(50); EXP2_C=28H; EXP0_C=0BCH; CALL WAIT(255); EXP4_A=2; CALL WAIT(255); IF (EXP4_B AND 3)<>2 THEN FAULT=1; END; ERROR_CODE=99; /* CASE 12 */ END; END; END BOARD1_TEST2; /**************** 202P AND BUSY LINE TEST ***************/ TONE_CHECK: PROCEDURE (CHANNEL); DCL (CHANNEL,TONE_DATA,DV,I,BUSY) BYTE; DCL TONE_NUM (12) BYTE CONSTANT (28H,11H,21H,41H, 12H,22H,42H,14H,24H,44H,18H,48H); I=1; DO WHILE ((FAULT=0) AND (I<10)); EXP3_C=TTG_OUT(I); /* TURN ON TONE */ EXP0_C=EXP0_C OR 1; CALL WAIT(50); IF (CHANNEL=0) THEN DO; TONE_DATA=SHR(EXP0_A,4); DV=EXP0_B AND 10H; END; ELSE DO; TONE_DATA=EXP0_A AND 0FH; DV=EXP0_B AND 20H; END; IF ((DV=0) OR (TONE_DATA<>I)) THEN FAULT=1; I=I+1; END; IF FAULT=0 THEN EXP0_C=EXP0_C AND 0FEH; /* TURN OFF TONE */ END TONE_CHECK; BUSY_CHECK: PROCEDURE (CHANNEL); DCL CHANNEL BYTE; EXP3_C=11H; /* SEND TONE */ CALL WAIT(80); IF CHANNEL=0 THEN DO; IF (EXP0_B AND 40H)=0 THEN FAULT=1; END; ELSE DO; IF (EXP0_B AND 80H)=0 THEN FAULT=1; END; EXP3_C=0; /* TONE OFF */ CALL WAIT(80); IF CHANNEL=0 THEN DO; IF (EXP0_B AND 40H)<>0 THEN FAULT=1; END; ELSE DO; IF (EXP0_B AND 80H)<>0 THEN FAULT=1; END; END BUSY_CHECK; BOARD1_TEST3: PROCEDURE PUBLIC; FAULT=0; IF ERROR_CODE>5 THEN ERROR_CODE=0; EXP0_COM=92H; EXP4_COM=8BH; EXP2_C=30H; /* TURN ON 12 VAC */ CALL WAIT(200); DO WHILE ((FAULT=0) AND (ERROR_CODE<>99)); DO CASE ERROR_CODE; DO; /* CASE 0 */ ERROR_CODE=1; EXP0_C=3CH; /* TURN OFF RELAYS */ CALL WAIT(200); IF (EXP0_B AND 0F0H)<>0 THEN FAULT=1; END; DO; /* CASE 1 */ ERROR_CODE=2; EXP4_A=1; EXP3_A=0; EXP0_C=7CH; /* CHAN 1 TONES */ CALL WAIT(200); CALL TONE_CHECK(0); END; DO; /* CASE 2 */ ERROR_CODE=3; EXP4_A=1; EXP3_A=0; EXP0_C=7CH; /* CHAN 1 BUSY */ CALL WAIT(200); CALL BUSY_CHECK(0); END; DO; /* CASE 3 */ ERROR_CODE=4; EXP4_A=2; EXP3_A=10H; EXP0_C=0BCH; /* CHAN 2 TONES */ CALL WAIT(200); CALL TONE_CHECK(1); END; DO; /* CASE 4 */ ERROR_CODE=5; EXP4_A=2; EXP3_A=10H; EXP0_C=0BCH; /* CHAN 2 BUSY */ CALL WAIT(200); CALL BUSY_CHECK(1); END; ERROR_CODE=99; /* CASE 5 */ END; END; END BOARD1_TEST3; /***************** TTG OUT TEST *****************/ TONE_SEND: PROCEDURE (CHANNEL); DCL (CHANNEL,I) BYTE; DCL TONE_NUM (12) BYTE CONSTANT (48H,81H,41H,21H, 82H,42H,22H,84H,44H,24H,88H,28H); I=1; DO WHILE ((FAULT=0) AND (I<10)); EXP0_C=(EXP0_C AND 0DFH); /* SET OFF HOOK */ EXP0_A=TONE_NUM(I); CALL WAIT(80); IF (EXP3_B AND 10H)=0 THEN FAULT=1; IF (EXP3_B AND 0FH)<>I THEN FAULT=1; EXP0_C=(EXP0_C OR 20H); /* CLEAR OFF HOOK */ CALL WAIT(80); IF (EXP3_B AND 10H)<>0 THEN FAULT=1; I=I+1; END; END TONE_SEND; BOARD1_TEST4: PROCEDURE PUBLIC; FAULT=0; IF ERROR_CODE>4 THEN ERROR_CODE=0; EXP2_C=30H; /* TURN ON 12 VAC */ EXP4_COM=8BH; CALL WAIT(200); DO WHILE((FAULT=0) AND (ERROR_CODE<>99)); DO CASE ERROR_CODE; DO; /* CASE 0 */ ERROR_CODE=1; EXP0_C=7CH; /* CHAN 1 OFF */ EXP0_A=0; EXP3_A=0; EXP4_A=1; CALL WAIT(50); IF (EXP3_B AND 8)<>0 THEN FAULT=1; END; DO; /* CASE 1 */ ERROR_CODE=2; EXP0_C=5CH; /* CHECK CHAN 1 */ EXP3_A=0; EXP4_A=1; CALL TONE_SEND(0); END; DO; /* CASE 2 */ ERROR_CODE=3; EXP0_C=0BEH; /* CHAN 2 OFF */ EXP0_A=0; EXP3_A=1; EXP4_A=2; CALL WAIT(50); IF (EXP3_B AND 8)<>0 THEN FAULT=1; END; DO; /* CASE 3 */ ERROR_CODE=4; EXP0_C=9EH; /* CHECK CHAN 2 */ EXP3_A=1; EXP4_A=2; CALL TONE_SEND(1); END; ERROR_CODE=99; /* CASE 4 */ END; END; END BOARD1_TEST4; /*************** VOICE CHIP TEST *****************/ VOC_CMD: PROCEDURE (CHANNEL,COMMAND); DCL (CHANNEL,COMMAND) BYTE; DCL COM_TBL (5) BYTE CONSTANT (10H,20H,80H,00H,53H); /* 0=START, 1=STOP, 2=RECORD, 3=PLAY, 4=SPEED */ EXP0_A=COM_TBL(COMMAND); IF (CHANNEL=0) THEN EXP0_C=(EXP0_C AND 0F7H); ELSE EXP0_C=(EXP0_C AND 0FBH); CALL TIME(1); EXP0_C=EXP0_C OR 0CH; CALL WAIT(1); EXP0_A=0; END VOC_CMD; VOC_ADDR: PROCEDURE(CHANNEL,UPPER,MID,LOWER); DCL (CHANNEL,UPPER,MID,LOWER) BYTE; DCL (LOW_MASK,HIGH_MASK) BYTE; IF CHANNEL=0 THEN DO; LOW_MASK=0F7H; HIGH_MASK=8; END; ELSE DO; LOW_MASK=0FBH; HIGH_MASK=4; END; EXP0_A=UPPER; EXP0_C=EXP0_C AND LOW_MASK; CALL TIME(1); EXP0_C=EXP0_C OR HIGH_MASK; CALL WAIT(1); EXP0_A=MID; EXP0_C=EXP0_C AND LOW_MASK; CALL TIME(1); EXP0_C=EXP0_C OR HIGH_MASK; CALL WAIT(1); EXP0_A=LOWER; EXP0_C=EXP0_C AND LOW_MASK; CALL TIME(1); EXP0_C=EXP0_C OR HIGH_MASK; CALL WAIT(1); EXP0_A=0; END VOC_ADDR; TONE_REC: PROCEDURE (FIRST,COUNT); DCL (FIRST,COUNT,I,PNTR) BYTE; DCL TONE_NUM (12) BYTE CONSTANT (28H,11H,21H,41H, 12H,22H,42H,14H,24H,44H,18H,48H); DO I=1 TO COUNT; PNTR=FIRST+I; IF PNTR>9 THEN PNTR=PNTR-9; EXP3_C=TONE_NUM(PNTR); MAIN_TIMER=80; /* SET TIMER TO 160 MSEC */ DO WHILE MAIN_TIMER<>0; END; EXP3_C=0; MAIN_TIMER=80; /* SET TIMER TO 160 MSEC */ DO WHILE MAIN_TIMER<>0; END; END; END TONE_REC; TONE_COMP: PROCEDURE (FIRST,COUNT); DCL (FIRST,COUNT,I,PNTR,DIGIT) BYTE; I=1; DO WHILE ((FAULT=0) AND (I<(COUNT+1))); MAIN_TIMER=120; DIGIT=0; DO WHILE((MAIN_TIMER<>0) AND ((DIGIT AND 10H)=0)); DIGIT=EXP3_B; END; IF MAIN_TIMER=0 THEN FAULT=1; ELSE DO; H1_DATA(DIA)=DIGIT; DIA=DIA+1; PNTR=FIRST+I; IF PNTR>9 THEN PNTR=PNTR-9; IF (DIGIT AND 0FH)<>PNTR THEN FAULT=1; END; MAIN_TIMER=120; DO WHILE((MAIN_TIMER<>0) AND ((EXP3_B AND 10H)<>0)); END; IF MAIN_TIMER=0 THEN FAULT=1; I=I+1; END; END TONE_COMP; RESET_VOICE: PROCEDURE; EXP0_C=EXP0_C AND 0EFH; CALL TIME(1); EXP0_C=EXP0_C OR 10H; CALL WAIT(10); END RESET_VOICE; BOARD1_TEST5: PROCEDURE PUBLIC; DCL I BYTE; DCL RAM_START (4) BYTE CONSTANT (30H,35H,3AH,3FH); FAULT=0; IF ERROR_CODE>7 THEN ERROR_CODE=0; EXP2_C=30H; /* TURN ON 12 VAC */ EXP4_COM=8BH; CALL WAIT(200); DO WHILE((FAULT=0) AND (ERROR_CODE<>99)); DO CASE ERROR_CODE; DO; /* CASE 0 */ ERROR_CODE=1; EXP0_A=0; EXP0_C=3CH; /* RESET VOICE */ CALL RESET_VOICE; IF (EXP0_B AND 0CH)<>0CH THEN FAULT=1; END; DO; /* CASE 1 */ ERROR_CODE=2; CALL VOC_CMD(0,0); /* VOICE 1 CHECK */ IF (EXP0_B AND 8)<>0 THEN FAULT=1; EXP0_C=3CH; /* RESET VOICE */ CALL RESET_VOICE; END; DO; /* CASE 2 */ ERROR_CODE=3; EXP0_C=6CH; EXP4_A=1; CALL WAIT(50); EXP0_C=7CH; /* RELEASE RESET */ EXP3_A=30H; EXP3_C=0; CALL WAIT(10); CALL VOC_CMD(0,2); /* REC */ CALL VOC_CMD(0,4); /* SPEED */ CALL VOC_CMD(0,0); /* START */ CALL TONE_REC(0,1); CALL RESET_VOICE; CALL VOC_CMD(0,4); /* SPEED */ CALL VOC_CMD(0,0); /* PLAY */ CALL TONE_COMP(0,1); CALL RESET_VOICE; END; DO; /* CASE 3 */ ERROR_CODE=4; EXP0_C=6CH; EXP4_A=1; CALL WAIT(50); EXP0_C=7CH; /* RELEASE RESET */ EXP3_A=30H; EXP3_C=0; CALL WAIT(10); DO I=0 TO 3; CALL VOC_CMD(0,2); /* REC */ CALL VOC_CMD(0,4); /* SPEED */ CALL VOC_ADDR(0,RAM_START(I),0,0); /* ADDR */ CALL VOC_CMD(0,0); /* START */ CALL TONE_REC(I,6); CALL VOC_CMD(0,1); /* STOP */ END; DO I=1 TO 2; CALL WAIT(250); END; I=0; DIA=0; CALL RESET_VOICE; /* RESET CHIP */ DO WHILE((FAULT=0) AND (I<4)); CALL WAIT(250); CALL VOC_CMD(0,4); /* SPEED */ CALL VOC_ADDR(0,RAM_START(I),0,0); /* ADDR */ CALL VOC_CMD(0,0); /* START */ CALL TONE_COMP(I,6); CALL VOC_CMD(0,1); /* STOP */ I=I+1; END; CALL RESET_VOICE; END; DO; /* CASE 4 */ CALL WAIT(250); ERROR_CODE=5; EXP0_C=3CH; CALL WAIT(50); CALL RESET_VOICE; CALL VOC_CMD(1,0); /* VOICE 2 CHECK */ IF (EXP0_B AND 4)<>0 THEN FAULT=1; CALL RESET_VOICE; END; DO; /* CASE 5 */ ERROR_CODE=6; EXP0_C=0ACH; EXP4_A=2; CALL WAIT(50); EXP0_C=0BCH; /* RELEASE RESET */ EXP3_A=31H; EXP3_C=0; CALL WAIT(10); CALL VOC_CMD(1,2); /* REC */ CALL VOC_CMD(1,4); /* SPEED */ CALL VOC_CMD(1,0); /* START */ CALL TONE_REC(0,1); CALL RESET_VOICE; CALL VOC_CMD(1,4); /* SPEED */ CALL VOC_CMD(1,0); /* PLAY */ CALL TONE_COMP(0,1); CALL RESET_VOICE; END; DO; /* CASE 6 */ ERROR_CODE=7; EXP0_C=0ACH; EXP4_A=2; CALL WAIT(50); EXP0_C=0BCH; /* RELEASE RESET */ EXP3_A=31H; EXP3_C=0; CALL WAIT(10); DO I=0 TO 3; CALL VOC_CMD(1,2); /* REC */ CALL VOC_CMD(1,4); /* SPEED */ CALL VOC_ADDR(1,RAM_START(I),0,0); /* ADDR */ CALL VOC_CMD(1,0); /* START */ CALL TONE_REC(I,6); CALL VOC_CMD(1,1); /* STOP */ END; DO I=1 TO 2; CALL WAIT(250); END; I=0; DIA=0; CALL RESET_VOICE; DO WHILE((FAULT=0) AND (I<4)); CALL WAIT(250); CALL VOC_CMD(1,4); /* SPEED */ CALL VOC_ADDR(1,RAM_START(I),0,0); /* ADDR */ CALL VOC_CMD(1,0); /* START */ CALL TONE_COMP(I,6); CALL VOC_CMD(1,1); /* STOP */ I=I+1; END; CALL RESET_VOICE; END; ERROR_CODE=99; /* CASE 7 */ END; END; END BOARD1_TEST5; BOARD1_TEST6: PROCEDURE PUBLIC; DCL I BYTE; DCL SWT_TBL (16) BYTE CONSTANT (0,2,1,3, 8,0,9,1,4,6,5,7,2,4,3,5); FAULT=0; IF ERROR_CODE>3 THEN ERROR_CODE=0; EXP2_C=30H; /* TURN ON 12 VAC */ CALL WAIT(200); DO WHILE((FAULT=0) AND (ERROR_CODE<>99)); DO CASE ERROR_CODE; DO; /* CASE 0 */ ERROR_CODE=1; EXP0_C=3CH; I=0; DO WHILE KEY_EDGE=0; MAIN_TIMER=250; DO WHILE MAIN_TIMER<>0; EXP0_A=80H OR I; CALL WAIT(2); EXP0_A=(40H OR I+1); CALL WAIT(2); EXP0_A=(20H OR I+2); CALL WAIT(2); EXP0_A=(10H OR I+3); CALL WAIT(2); END; I=I+1; IF I=11 THEN I=0; END; KEY_EDGE=0; IF KEY_DATA<>0CH THEN FAULT=1; END; DO; /* CASE 1 */ ERROR_CODE=2; DO WHILE KEY_EDGE=0; EXP0_A=1FH; CALL TIME(1); IF (EXP1_A AND 8)<>0 THEN EXP0_A=11H; ELSE EXP0_A=10H; CALL WAIT(2); EXP0_A=2FH; CALL TIME(1); IF (EXP1_A AND 8)<>0 THEN EXP0_A=21H; ELSE EXP0_A=20H; CALL WAIT(2); EXP0_A=4FH; CALL TIME(1); IF (EXP1_A AND 8)<>0 THEN EXP0_A=41H; ELSE EXP0_A=40H; CALL WAIT(2); EXP0_A=8FH; CALL TIME(1); IF (EXP1_A AND 8)<>0 THEN EXP0_A=81H; ELSE EXP0_A=80H; CALL WAIT(2); END; KEY_EDGE=0; IF KEY_DATA<>0CH THEN FAULT=1; END; DO; /* CASE 2 */ ERROR_CODE=3; EXP4_A=2; /* SEND TONE */ EXP3_A=11H; EXP3_C=11H; EXP0_C=0BCH; CALL WAIT(250); DO WHILE KEY_EDGE=0; EXP3_C=11H; /* SEND TONE */ IF (EXP0_B AND 20H)=0 THEN EXP0_A=80H OR I; ELSE DO; EXP3_C=0; /* TURN OFF TONE */ EXP0_COM=92H; /* SET TO INPUT */ CALL TIME(1); I=SWT_TBL(EXP0_A AND 0FH); EXP0_COM=82H; /* SET TO OUTPUT */ CALL TIME(1); EXP0_C=0BCH; DO WHILE (((EXP0_B AND 20H)<>0) AND (KEY_EDGE=0)); END; END; END; KEY_EDGE=0; IF KEY_DATA<>0CH THEN FAULT=1; END; DO; /* CASE 3 */ ERROR_CODE=99; EXP4_A=0; EXP0_C=3CH; EXP2_C=10H; EXP3_C=0; CALL WAIT(250); END; END; END; END BOARD1_TEST6; END BOARD_1;