* .FDV DOES A FLOATING POINT DIVIDE. * .FDV NOP STA A1 SAVE HIGH PART OF DIVIDEND JSB .FLUN UNPACK LOW PART STA EXPOM SAVE EXPON. STB B1 SAVE LOW PART OF DIVIDEND MANT. LDA .FDV,I GET ADDRESS OF DIVISOR. ISZ .FDV BUMP RETURN ADDRESS. DLD 0,I GET DIVISOR. SZA,RSS DIVIDE BY 0? JMP DVZRO YES! GO EXIT. STA A2 SAVE HIGH PART OF DIVISOR JSB .FLUN UNPACK LOW PART. STB B2 SAVE LOW PART OF DIVISOR MANT. CMA,INA COMPUTE EXPONENT DIFFERENCE INA PLUS 1 ADA EXPOM AND STA EXPOM STORE. LDA B1 GET DOUBLE LENGTH DIVIDEND LDB A1 IN REGISTERS. ASR 2 ARS 2 TO PREVENT OVFLOW. DIV A2 PERFORM FIRST DIVISION. STA A1 SAVE FIRST QUOTIENT. BRS DIVIDE REMAINDER BY 2 TO PRE- CLA VENT DIVISION OVERFLOW. DIV A2 PERFORM SECOND DIVISION STA B1 SAVE LOW PART OF QUOTIENT. LDB B2 GET LOW PART CLA,CLE OF DIVISOR MANTISSA. ERB,BRS SCALE TO BRS PREVENT OVERFLOW. DIV A2 OBTAIN Q2 CMA,INA COMPUTE MPY A1 -Q*Q2. BLS,CLE,ELB SHIFT 2 & GET SIGN TO E. LDA B1 TEST SIGN OF Q1. SSA IF NEGATIVE, SET A CCA,RSS TO -1 AS EXTENSION OF Q1. CLA OTHERWISE,SET TO 0 AS POS. EXTENSION. CMA,SEZ IF E IS SET ALSO, SUBTRACT 1 MORE INA AS EXTENSION OF PRODUCT. CMA,CLE CLEAR E FOR FOLLOWING TEST. ADB B1 SEZ IF ADD OVERFLOWS, INA CARRY INTO A. CLE,ELB NOW LONG SHIFT TO POSITION ELA FOR FINAL ADDITION. ADA A1 NORM JSB .PACK PACK RESULT EXPOM BSS 1 JMP .FDV,I RETURN DVZRO LDA INF1 SET DIVIDE STA EXPOM BY ZERO JMP NORM EXIT. SKP * .FMP EXECUTES A FLOATING POINT MULTIPLY. * .FMP NOP STA A1 SAVE HIGH PART OF MULTIPLICAND. JSB .FLUN UNPACK LOW PART. STA EXPON SAVE EXPONENT. RBR POSITION LOW PART AND STB B1 SAVE IT. LDA .FMP,I GET ADDRESS OF MULTIPLIER. DLD 0,I GET SECOND ARGUMENT. STA A2 SAVE HIGH PART. JSB .FLUN UNPACK LOW PART. ADA EXPON ADD TO MULTIPLIER EXPONENT INA AND ADD 1. STA EXPON PUT RESULT BACK. RBR POSITION LOW PART AND STB 0 PUT IT IN A REG. MPY A1 COMPUTE FIRST CROSS PRODUCT. STA B2 SAVE RESULT LDA B1 AND COMPUTE STB B1 SECOND CROSS MPY A2 PRODUCT. ADB B1 ADD THE CLE TWO CROSS ADA B2 PRODUCTS. SEZ CARRY FROM LOW PART? INB YES! INCREMENT PRODUCT. STB B2 SAVE HIGH PART OF RESULT. LDA A1 COMPUTE HIGH PART OF MPY A2 PRODUCT. CLE,ERA POSITION LOW PART. ADA B2 ADD IN CROSS TERMS. CLE,ELA REPOSITION. SEZ,RSS TEST FOR OVERFLOWS: IF E=1, ADD JMP *+4 1 TO B IF OVERFLOW OCCURRED, -1 SOC IF NOT. OVERFLOW SET? INB,RSS YES! INCREMENT PRODUCT. ADB M1 NO! DECREMENT PRODUCT. STA A1 EXCHANGE LDA 1 THE LDB A1 REGISTERS. JSB .PACK NORMALIZE AND PACK EXPON BSS 1 ISZ .FMP JMP .FMP,I RETURN .PACK NOP ENTRY POINT STA HOLD SAVE A REGISTER. CLA SET THE EXPONENT STA EXPOX TO ZERO LDA HOLD IF A & B ARE SZA,RSS BOTH ZERO SZB RETURN IMMEDIATELY JMP NORML ELSE GO TO NORMALIZING SECTION. BACK CLO CLEAR OVERFLOW FOR GOOD RETURN. ISZ .PACK BUMP RETURN ADDRESS PAST X. JMP .PACK,I RETURN * NORMALIZING SECTION * SHIFT ISZ EXPOX COUNTS # OF LEFT SHIFTS. NORML CLE,ELB ROTATE A & B LEFT ELA INTO E. SEZ,SSA,RSS TEST THE ORIGINAL 2 HIGH BITS. JMP SHIFT BOTH WERE 0--# WAS + UNNORMALIZED. SEZ,SSA JMP SHIFT BOTH WERE 1--# WAS - UNNORMALIZED. ERA UNDO THE SHIFT, PRODUCING A ERB,CLE NORMALIZED MANTISSA. ADB B177 ADD IN SUFFICIENT ROUND FOR NEG- SSA,RSS ATIVE NUMBERS. INB IF POSITIVE, 1 MORE IS NECESSARY. CLO CLEAR TO TEST FOR A-REG OVFLOW SEZ TEST FOR OVERFLOW OUT OF B. CLE,INA IF SO, BUMP A REGISTER. SOS IF THE BUMP CAUSES OVERFLOW, RAL SKIP THIS SHIFT (A=100000,B=0). SSA,SLA,RSS TEST FOR TOP 2 BITS=1. JMP *+3 * THIS LAST TEST IS NECESSARY TO OBTAIN THE CORRECT RESULT * WHEN THE UNROUNDED MANTISSA WAS 101...1 AND A ROUND OCCURRED, * PRODUCING 110...0, WHICH IS UNNORMALIZED. ISZ EXPOX BECAUSE GOING TO LEFT SHIFT ARS,SLA,ALS PRODUCES A=10...0 AND SKIPS. RAR UNDOES THE RAL ABOVE. * AT THIS POINT, A & B ARE NORMALIZED & ROUNDED, AND THE * TRUE EXPONENT IS .PACK,I-EXPON(+1 IF OVFF=1). STA HOLD SAVE A REGISTER. LDA 1 REMOVE LOW ORDER 8 BITS OF B. AND MASKH MASK THEM STA 1 AND SAVE RESULT. LDA EXPOX COMPUTE CMA,INA TRUE ADA .PACK,I EXPONENT. SOC OVERFLOW OCCUR? INA YES! INCREMENT RESULT. ADA P200 TEST FOR EXPONENT UNDERFLOW. SSA UNDERFLOW? JMP XUNDR YES! GO EXIT. ADA MASKH TEST FOR EXPONENT OVERFLOW SSA,RSS OVERFLOW? JMP XOVER YES! GO EXIT. ADA P200 RESTORE ORIGINAL EXPONENT. RAL POSITION SIGN TO LSB. AND B377 MASK TO 8 BITS. ADB 0 PACK INTO B. LDA HOLD RESTORE HIGH PART JMP BACK RETURN SKP * OVERFLOW UNDERFLOW SECTION * XUNDR CLA RETURN CLB A=B=0 JMP SETOV FOR UNDERFLOW. XOVER LDA NB15 RETURN +INFINITY LDB M2 FOR OVERFLOW. SETOV STO SET OVERFLOW FLAG FOR OVERFLOW JMP BACK+1 OR UNDERFLOW. EXPOX BSS 1 .FLUN NOP LDA 1 MOVE ARGUMENT TO A AND B377 GET EXPONENT BITS AND CMB SUBTRACT ADB 0 FROM CMB B-REG. SLA,RAR POSITION & TEST SIGN. IF MINUS, IOR XSEXP PUT IN EXTRA BITS. JMP .FLUN,I RETURN * * .FIX EXECUTES A FLOATING POINT FIX SOFTWARE INSTRUCTION. * .FIX NOP STA A1 SAVE MANTISSA JSB .FLUN UNPACK TO GET EXP IN A CLO CLEAR OVERFLOW BIT SSA SKIP IF EXP NEGITIVE JMP UNFLO IF NOT NEG RETURN 0 IN A REG ADA M16 COMPUTE SHIFT COUNT SSA,RSS SKIP IF EXP < 16 JMP OVFLO IF 16 OR GREATER SET FOR OVERFLOW CLE,SZB IF B = 0 CLEAR E CME IF B NOT 0 SET E STA 1 SAVE THE SHIFT COUNT IN B LDA A1 RESTORE VALUE OF A REG LOOP1 ISZ 1 INCREMENT SHIFT CNT SKIP IF DONE. JMP SHFT1 SHIFT NEXT BIT SEZ,SSA SKIP IF NUMBER NEG & FRAC 0 INA OTHERWISE BUMP RESULT JMP .FIX,I RETURN SHFT1 SLA,ARS SHIFT RIGHT & TEST FOR LOST BIT CCE IF 1, SET E TO 1 JMP LOOP1 RETURN TO SHIFTING LOOP UNFLO CLA SET A TO ZERO JMP .FIX,I RETURN OVFLO LDA NB15 SET A TO 32767 STO SET OVERFLOW BIT JMP .FIX,I RETURN * * FLOAT EXECUTES A SOFTWARE FLOATING POINT FLT INSTRUCTION. * FLOAT NOP CLB CLEAR B JSB .PACK GO TO PACKING ROUTINE DEC 15 JMP FLOAT,I RETURN HED MESSAGES INTRO ASC 18,2100-21MX FLOATING POINT DIAGNOSTIC/ ERMSG ASC 04,E00X FIX OCT 6412 ASC 13, TEST PATTERN IN A AND B OCT 6412 ABPAT ASC 14, A= XXXXXX B= XXXXXX/ OPERP ASC 13, TEST PATTERN IN OPERAND OCT 6412 OPPAT ASC 14, XXXXXX XXXXXX/ ACRES ASC 09, ACTUAL RESULT OCT 6412 APNTR ASC 18, A= XXXXXX B= XXXXXX OVF= X OCT 6412 ASC 10, EXPECTED RESULT OCT 6412 EPNTR ASC 19, A= XXXXXX B= XXXXXX OVF= X/ ACPNT DEF *+1 DEF APNTR+4 DEF APNTR+10 DEF EPNTR+4 DEF EPNTR+10 DEF ABPAT+4 DEF ABPAT+10 DEF OPPAT+4 DEF OPPAT+10 OPERD DEF OPERP ACPTR DEF ACRES ACTOP DEF APNTR+16 EXPOP DEF EPNTR+16 INSTP DEF *+1 ASC 2, FIX ASC 2, FLT ASC 2, FAD ASC 2, FSB ASC 2, FMP ASC 2, FDV ERINT DEF ERMSG+2 ZTSTF DEF *+1 ASC 3,TEST ZTSTN ASC 2,XX// ZRTLF ASC 1,// ZPSC ASC 6,PASS XXXXXX/ HED DIAGNOSTIC CONTROL ORG 2000B ZSTEX CLC 0,C TURN I/O SYSTEM OFF JSB MSGC,I DO CRLF DEF ZRTLF ON CONSOLE. JSB MSGC,I OUTPUT HEADER MESSAGE DEF INTRO TO THE CONSOLE. CLA CLEAR PASS STA ZEOLC COUNT. LDB BIT9 USER TEST JSB SWRT SELECTION? JMP ZUSR YES! GO GET USER INPUT. ZNUSR LDA STDA NO! GET THE STANDARD LDB STDB TEST SET. JMP ZEXC GO SAVE TEST SET. ZUSR LDA ZSINA RETRIEVE PREVIOUS LDB ZSINB TEST SET. HLT 75B WAIT FOR USER INPUT ZEXC STA ZUINA SAVE STB ZUINB USER STA ZSINA INPUT STB ZSINB TEST SET. LDB BIT9 CHECK IF SW9 IS DOWN JSB SWRT IS IT? JMP ZUSR NO! GO HALT AGAIN. CCA YES! SET THE TEST STA TSTN NUMBER TO -1. STA ZCFTT SET TEST NUMBER. CLA CLEAR STA ZTSTA TEST RUN FLAG ZEXCL LDA ZUINA RESTORE A REG. LDB ZUINB RESTORE B REG. ERA,RAL ROTATE ERB FIRST ERA TEST BIT STA ZUINA SAVE TEST BIT STB ZUINB POSITIONS. ISZ TSTN MOVE TEST NUMBER UP ONE NOP ZXCL1 LDA TSTN GET TEST NUMBER. ADA TSTP GET THE TEST SECTION LDA A,I STARTING ADDRESS. CPA M1 IS THIS THE END OF TESTS? JMP ZEOL YES! GO TO THE END OF TEST. LDB ZUINB NO! GET TEST INDICATOR. SSB,RSS SHOULD THIS TEST BE RUN? JMP ZEXCL NO! GO TRY NEXT TEST. STA ZTSTA YES! SAVE STARTING ADDRESS. JSB ZTSTA,I GO DO TEST CLA CLEAR THE FIX STA FIXTT TEST INDICATOR. LDA TSTN GET THE TEST NUMBER. LDB BIT15 CHECK FOR HALT AT END OF TEST JSB SWRT HALT REQUESTED? HLT 76B YES! WAIT FOR OPERATOR. LDB BIT9 CHECK FOR USER SELECTION. JSB SWRT IS USER SELECTION REQUESTED? JMP ZUSR YES! GO HALT. LDB BIT13 CHECK FOR LOOP ON TEST SECTION. JSB SWRT LOOP REQUESTED? JMP ZXCL1 YES! GO DO TEST AGAIN. JMP ZEXCL NO! DO NEXT TEST. ZEOL LDA ZTSTA WERE ANY TESTS SZA,RSS RUN? JMP ZNUSR NO! GET STANDARD TEST SET. LDA ZEOLC UPDATE INA PASS STA ZEOLC COUNT. CCE READY FOR CONVERSION. LDB ZPSCA GET PASS COUNT ADB TWO ADDRESS. JSB O2AS,I CONVERT IT TO ASCII. JSB MSGC,I CALL PRINT ROUTINE ZPSCA DEF ZPSC MESSAGE POINTER. LDB BIT12 CHECK FOR LOOP ON DIAG. JSB SWRT LOOP ON DIAGNOSTIC REQUESTED? JMP *+3 YES! BYPASS HLT 77B. LDA ZEOLC NO! GET PASS COUNT. HLT 77B AND HALT. LDA ZSINA RESTORE ORIGINAL LDB ZSINB TEST SET. JMP ZEXC GO DO ALL TESTS AGAIN. * * MESSAGE OUTPUT WITHOUT HALT * ZMSGC NOP ENTRY JSB ZMSG OUTPUT MESSAGE OCT 2000 S-REG 10 CHECK JMP ZMSGC,I RETURN TO CALLER * * ERROR MESSAGE WITH HALT * ZERMS NOP ENTRY JSB ZMSG OUTPUT MESSAGE B4000 OCT 4000 S-REG 11 CHECK CLA LDB BIT14 CHECK SWR BIT 14 TO JSB SWRT SUPPRESS HALTS. STA ZHLT PUT HALT IN LINE LDA NOPT SUPPRESS SZA MESSAGE? JMP FIXHT YES! GO HALT. LDA TSTN GET TEST NUMBER. ARS,CLE SHIFT OUT BIT 0. SZA,RSS IS THIS TEST 0 OR 1? JMP DOOPR YES! DON'T PRINT OPERAND. CLA NO! READY FORMATTER. LDB OPERD PRINT JSB FMTR,I OPERAND MESSAGE. DOOPR CLA PRINT REST OF THE LDB ACPTR ERROR JSB FMTR,I MESSAGE. FIXHT DLD HA1 GET TEST PATTERN. ZHLT NOP HALT FOR OPERATOR LDB BIT14 DID OPERATOR JSB SWRT SUPPRESS ERROR HALTS? JMP ZERMS,I YES! DID OPERATOR LDB B4000 GET A PRINTOUT ON JSB SWRT THE CONSOLE? RSS JMP ZERMS,I YES! DON'T DO SECONDARY HALT. LDA TSTN GET TEST NUMBER. ARS IS THIS SZA,RSS TEST 0 OR 1? JMP NOHT6 YES! DON'T HALT. DLD HA2 GET OPERAND PATTERN. HLT 6 SECONDARY ERROR HALT. NOHT6 LDA ACTOV GET FP OVERFLOW SETTING JSB CHNGO AND SET OR CLEAR ACTUAL REG. DLD ACTA GET ACTUAL A AND B VALUES HLT 7 FOR FLT. PT. INSTRUCTION. LDA EXPOV GET EXPECTED OVF. JSB CHNGO GO SET OR CLEAR OVF. DLD EXPA GET EXPECTED A AND B VALUES. HLT 10B FOR FLT.PT. INSTRUCTION. JMP ZERMS,I RETURN TO CALLER * * OUTPUT MESSAGE * ZMSG NOP STA ZSAVA SAVE A AND B REGISTERS STB ZSAVB LDB ZMSG,I GET SWITCH REGISTER BIT LDA ZMSG GET RETURN ADDRESS. ADA M2 DECREMENT AND STA ZMSG RESTORE RETURN ADDRESS. STA NOPT SAVE MESSAGE INDICATOR. JSB SWRT CHECK TO SUPPRESS MESSAGES JMP ZMSG0 YES? DON'T PRINT MESSAGE. LDA ZMSG,I NO? GET ERROR LDA A,I MESSAGE LDA A,I POINTER. ALF,ALF CHECK IF AND B177 THIS IS AN CPA ZA.E ERROR MESSAGE. IS IT? JMP ZCFTN YES!CHECK TO OUTPUT TEST NUMBER ZRTN LDA ZMSG,I NO! RETRIEVE FORMAT LDB A,I ADDRESS CLA,CLE AND STA NOPT PRINT JSB FMTR,I MESSAGE. ZMSG0 LDA ZMSG,I CONVERT HALT CODE LDB A,I FROM ASCII STRING CCA,CCE TO JSB AS2N,I OCTAL. LDB HLT0 SET HALT CODE AND STDA MASK TO SC. IOR B MERGE IN HALT CODE. LDB ERMSG GET EX OF EXXX MESSAGE. SLB IS THIS AN INDIRECT FAILURE? IOR BIT9 YES! FORCE TO 1030XX HALT. STA ZHLT SAVE IT. ISZ ZMSG,I ADJUST RETURN POINTERS ISZ ZMSG ISZ ZMSG ISZ ZMSG LDA ZSAVA RESTORE A AND B REGISTERS LDB ZSAVB JMP ZMSG,I RETURN. ZCFTN LDA TSTN GET TEST NUMBER CPA ZCFTT IS IT THE SAME ONE? JMP ZRTN YES! SKIP OUTPUT STA ZCFTT NO! THEN UPDATE IT STA ZIOAD SAVE NUMBER AND B7 CONVERT FIRST IOR B60 NUMBER STA B SAVE IT LDA ZIOAD GET RAR,RAR SECOND RAR NUMBER AND B7 CONVERT IOR B60 IT ALF,ALF MOVE TO UPPER HALF IOR B ADD LOWER NUMBER STA ZTSTN PUT IT IN STRING CLA DO A CRLF JSB SLOP,I TO CONSOLE. CLA,CLE INDICATE START OF FORMAT LDB ZTSTF GET TEST # MESG. POINTER. JSB FMTR,I PRINT TEST # MESSAGE. JMP ZRTN RETURN HED MAIN FLOATING POINT DIAGNOSTIC SKP * * FIX TEST * TST00 NOP JSB SDATA SET TEST DATA. STA FIXTT MARK AS FIX TEST. TST0L JSB SETOP GET DATA PATTERN. IF END OF JMP TST00,I TEST THEN EXIT. JSB TOROT GO TO ROTATE TEST. JSB .FIX FIX SOFTWARE MACRO. NOP INDICATES NO OPERAND USED. OCT 105100 FIX FIRMWARE MACRO. DLD HA2 GET OPERAND DATA. DST HA1 PUT IT IN A & B LOCATIONS. JSB TOROT GO DO ROTATE TEST. JSB .FIX FIX SOTWARE MACRO. NOP INDICATES NO SOFTWARE MACRO. OCT 105100 FIX FIRMWARE MACRO. JMP TST0L DO NEXT PATTERN. SKP * * FLT TEST * TST01 NOP CLA CLEAR INDIRECT STA ILINE OPERAND POINTER. CCA SET TEST PATTERN. TST1L CLB SAVE A AND DST HA1 B PATTERN. STA HOLDX SAVE PATTERN. JSB FLOAT GO DO A FLT. JSB SAVRE SAVE RESULTS. LDA HOLDX RESTORE PATTERN. OCT 105120 GO DO FIRMWARE FLT. JSB ERROR CHECK RESULTS. LDA HOLDX GET TEST PATTERN. INA INCREMENT IT. CPA M1 END IF PATTERNS? JMP TST01,I YES! EXIT TEST. JMP TST1L NO! GO DO NEXT PATTERN. SKP * * FAD TEST * TST02 NOP JSB SDATA SET TEST DATA. TST2L JSB SETOP GET DATA PATTERN. IF END OF JMP IND02 DATA GO TO INDIRECT TEST. JSB TOROT GO TO ROTATING DATA TEST. JSB .FAD FAD SOFTWARE MACRO. DEF HA2 OPERAND POINTER. OCT 105000 FAD FIRMWARE MACRO. JMP TST2L DO ANOTHER PATTERN. IND02 JSB SDATA SET TEST DATA. TSI2L JSB SETOP GET DATA PATTERN. IF END JMP TST02,I OF TEST THEN EXIT. JSB TOROT GO TO ROTATING DATA TEST. JSB .FAD FAD SOFTWARE MACRO. DEF INDTS,I OPERAND POINTER. OCT 105000 FAD FIRMWARE MACRO. JMP TSI2L DO ANOTHER PATTERN. SKP * * FSB TEST * TST03 NOP JSB SDATA SET TEST DATA. TST3L JSB SETOP GET DATA PATTERN. IF END OF JMP IND03 DATA GO TO INDIRECT TEST. JSB TOROT GO TO ROTATING DATA TEST. JSB .FSB FSB SOFTWARE MACRO. DEF HA2 OPERAND POINTER. OCT 105020 FSB FIRMWARE MACRO. JMP TST3L DO ANOTHER PATTERN. IND03 JSB SDATA SET TEST DATA. TSI3L JSB SETOP GET DATA PATTERN. IF END JMP TST03,I OF TEST THEN EXIT. JSB TOROT GO TO ROTATING DATA TEST. JSB .FSB FSB SOFTWARE MACRO. DEF INDTS,I OPERAND POINTER. OCT 105020 FSB FIRMWARE MACRO. JMP TSI3L DO ANOTHER PATTERN. SKP * * FMP TEST * TST04 NOP JSB SDATA SET TEST DATA. TST4L JSB SETOP GET DATA PATTERN. IF END OF JMP IND04 DATA GO TO INDIRECT TEST. JSB TOROT GO TO ROTATING DATA TEST. JSB .FMP FMP SOFTWARE MACRO. DEF HA2 OPERAND POINTER. OCT 105040 FMP FIRMWARE MACRO. JMP TST4L DO ANOTHER PATTERN. IND04 JSB SDATA SET TEST DATA. TSI4L JSB SETOP GET DATA PATTERN. IF END JMP TST04,I OF TEST THEN EXIT. JSB TOROT GO TO ROTATING DATA TEST. JSB .FMP FMP SOFTWARE MACRO. DEF INDTS,I OPERAND POINTER. OCT 105040 FMP FIRMWARE MACRO. JMP TSI4L DO ANOTHER PATTERN. SKP * * FDV TEST * TST05 NOP JSB SDATA SET TEST DATA. TST5L JSB SETOP GET DATA PATTERN. IF END OF JMP IND05 DATA GO TO INDIRECT TEST. JSB TOROT GO TO ROTATING DATA TEST. JSB .FDV FDV SOFTWARE MACRO. DEF HA2 OPERAND POINTER. OCT 105060 FDV FIRMWARE MACRO. JMP TST5L DO ANOTHER PATTERN. IND05 JSB SDATA SET TEST DATA. TSI5L JSB SETOP GET DATA PATTERN. IF END JMP TST05,I OF TEST THEN EXIT. JSB TOROT GO TO ROTATING DATA TEST. JSB .FDV FDV SOFTWARE MACRO. DEF INDTS,I OPERAND POINTER. OCT 105060 FDV FIRMWARE MACRO. JMP TSI5L DO ANOTHER PATTERN. SPC 3 FWAA EQU * END