ASMB,L,C,Z *&HFBAS * * NOTE: THIS MODULE MUST BE ASSEMBLED WITHOUT THE Z OPTION FOR SYSTEM USE * * * TO FIX BUG IN GETOP, FIX TEST * EDITED 780914 TO MODIFY TSTSI FOR NEW TN FMT, LOOP BUG (SIBFP) * TO TEST FOR POS15 IN ACCOP * EDITED 781209 TO ADD DIPLAY ALL, PORT MODE OPTS * TO SET WRDS TO WDOUT IN SWSTR * TO USE FIXFG,FLTFG, NOT SKNF1 * EDITED 790117 TO CHECK FOR PRIV. MODE IN TSTMN * * LAST CODE CHANGE 790117 1145 CC * NAM HFBAS 790121 2345 REV 1913 CC * * THIS MODULE CONTAINS THE BULK OF THE HFP TESTS, TST00-TST09, AND TST15. * MOST OF THE TIME IN THE DIAGNOSTIC IS SPENT HERE AND * IN FPPSW, WHERE THE SOFTWARE ANSWERS ARE COMPUTED. * HFAUX CONTAINS AUXILARY ROUTINES FOR ERRORS, INITIALIZATION, ETC. * * THE ONLY ROUTINES ENTERED FROM EXERNALS ARE THE TESTS THEMSELVES. * HFAUX REFERENCES LOCATIONS IN SOME ROUTINES FOR SETTING LOOPS, ETC.. * ALSO, MOST GLOBAL VARIABLES ARE DECLARED HERE (ONES REFERENCED * BY MORE THAN ONE MODULE). MANY OF THE VARIABLES AND CONSTANTS * ARE CONDITIONALLY PUT ON THE BASE PAGE FOR SPEED (Z COMPL). * THE N OPTION IS NOT USED EXCEPT FOR DEBUGGING. * SKP * * GLOBAL DEFINITIONS * * * * ENT ACLPS,ACOD1,ACOD2 ENT ACOD3,ACOD4,ACOD5,ACOD6,ACOD7 ENT ACOD8,ACOP1,ACOP2,ACOP3,ACOP4 ENT ACOP5,ACOP6,ACOP7,ACOP8,ACOPI ENT ACOPZ,ANS13,ANS1O,ANS23 ENT ANS2O,ANSO,ANSW,ANSW1,ANSW2 ENT ANSWZ,AOVFL,ARSLT,ARST0,ARST1 ENT ARST2,ARST3,ARSTE ENT BIT0,DBIT0,ECODE ENT EOVFL,ERCNT,ERSLT,ERST0,ERST1 ENT ERST2,ERST3,ERSTE,EVNOD ENT FIXFG,FLTFG ENT HIWRD,HWCNT ENT IC,ICEN,INBUF ENT INBUZ,INDCT,INSTR ENT IS,IST,LOWRD ENT LPCNT,NOPND,NRSLT ENT ODAD1,ODAD2 ENT OEILP,OND13,OND23,ONDUP ENT OPND1,OPND2,OPNDN ENT OPNNL,OPSEL,OTINS,OTN13,OTN23 ENT OTND1,OTND2,OWRDS,PASSF ENT PASSL ENT RSLT1,RSLT2 ENT RSLT3,RSLTZ,RST13,RST1O ENT RST23,RST2O,RST33,RST3O ENT STDAM ENT STKP ENT STSTN,TECNT ENT TRYN,TSTLP ENT WDFLG,WDIN,WDIN2,WDOU2,WDOUT ENT WRDS * SKP * * *S * * IFZ IF ABS VERSION, PUT ON BASE PAGE ORB XIF * * IC OCT 0 CONFIGURATION WORD IS OCT 0 SWITCH REG. OPTS WORD IST OCT 0 SUBTEST WORD STDAM OCT 0 STD TEST MASK WORD PASSL OCT 0 LOGICAL PASS COUNT PASSF OCT 0 PASS FLAG- SHORT/LONG ERCNT OCT 0 NUMBER OF ERRORS TOTAL LOWRD OCT 1 LOW #WORDS-1 FOR ASMDXTC HIWRD OCT 5 HIGH #WORDS FOR ASMDXTC HWCNT OCT 0 PSEUDO OPN COUNT ASMDXTC OCT 0 OCT 0 OPNNL OCT 0 LOGICAL OPN# ASMDXT OPNDN OCT 0 OPND IDENTIFIER OCT 0 FREE OCT 0 FREE * * ERROR INFO **** * * OTINS BSS 1 OTN13 BSS 5 OTN23 BSS 5 ERST3 BSS 1 ERST2 BSS 1 ERST1 BSS 1 ERST0 BSS 1 ERSTE BSS 1 EOVFL BSS 1 ARST3 BSS 1 ARST2 BSS 1 ARST1 BSS 1 ARST0 BSS 1 ARSTE BSS 1 AOVFL BSS 1 * * * * * * * DBIT0 DEF BIT0 OCT 0 FOR BASIC TEST-- TSTN=-1 BIT0 OCT 1 OCT 2 OCT 4 OCT 10 OCT 20 OCT 40 OCT 100 OCT 200 OCT 400 OCT 1000 OCT 2000 OCT 4000 OCT 10000 OCT 20000 OCT 40000 OCT 100000 * * * * WDFLG OCT 17 4 BITS FOR 2,3,4,5 WORD OPERATIONS * ICEN BSS 1 FLAG SET IF IC BIT 0 HAS BEEN SET * * * * * VARIABLES * * OWRDS BSS 1 #WORDS OPNDS TRUNCATED TO WRDS BSS 1 #WORDS OF INSTRUCTION EXECUTED WDIN BSS 1 WDIN2 BSS 1 WDOUT BSS 1 WDOU2 BSS 1 LPCNT BSS 1 USED AS COUNT OF SUB LOOPS IN ASMDXT TSTLP BSS 1 PARM FOR TEST LOOPS, IE FIX,FLT,SIS OEILP BSS 1 PARM FOR SETTING OVFL,EXT,INDS IN TESTS * BIT0=OVFL, BIT1=EXT, BIT2 2,3=INDS INDCT BSS 1 NUMBER OF IND LEVELS USED IN SOME TESTS (TSTDI) * NOPND BSS 1 #OPNDS FOR MACRO NRSLT BSS 1 #RSLTS FOR MACRO * * * * * * * OPND1 DEF OND13 OPND2 DEF OND23 OND13 BSS 5 OND23 BSS 5 BSS 20 EXTRA BUFFER SPACE * ANSW DEF *+1 BSS 5 ANSO BSS 1 ANSWZ DEF ANSW1 ANSW1 DEF ANS13 ANSW2 DEF ANS23 ANS13 BSS 5 ANS1O BSS 1 ANS23 BSS 5 ANS2O BSS 1 * RSLTZ DEF RSLT1 RSLT1 DEF RST13 HFP RESULTS RSLT2 DEF RST23 RSLT3 DEF RST33 RST13 BSS 5 RST1O BSS 1 RST23 BSS 5 RST2O BSS 1 RST33 BSS 5 RST3O BSS 1 * * OTND1 DEF OTN13 OTND2 DEF OTN23 ERSLT DEF ERST3 ARSLT DEF ARST3 * ODAD1 BSS 1 ADDR OF 1ST OPND, WRDLP... ODAD2 BSS 1 ADDR OF 2ND OPND, WRDLP... * * * TRYN BSS 1 # OF HFP OPN-- 0=DIR.,1=IND.,2=BIT 7 ECODE DEC -1 OCTAL ERROR CODE (6 BITS) ACLPS BSS 1 #LOOPS IN ACC OPNS TECNT BSS 1 COUNT OF ERRORS IN TEST * * ONDUP DEC 5 OPND INCREMENT INSTR BSS 1 * * * EVNOD BSS 1 USED FOR WHICH OP FROM GETOP * FIXFG BSS 1 FLAG FOR FIX TYPE OPN FLTFG BSS 1 FLAG FOR FLT TYPE OPN * STSTN BSS 1 SUBTEST IN TEST * * * * * * * * * * * * * * INBUZ DEF *+1 INPUT BUFFER INBUF BSS 4 * * * ACC. TEST DATA & POINTERS * * OPSEL BSS 1 STKP BSS 1 * ACOPI BSS 1 INDEX POINTER ACOPZ DEF ACOP1 BASE ADDR ACOP1 DEF ACOD1 ACOP2 DEF ACOD2 ACOP3 DEF ACOD3 ACOP4 DEF ACOD4 ACOP5 DEF ACOD5 ACOP6 DEF ACOD6 ACOP7 DEF ACOD7 ACOP8 DEF ACOD8 * ACOD1 BSS 5 ACOD2 BSS 5 ACOD3 BSS 5 ACOD4 BSS 5 ACOD5 BSS 5 ACOD6 BSS 5 ACOD7 BSS 5 ACOD8 BSS 5 * * * IFZ IF ABS VERSION, RESTORE TO CURR. PAGE ORR XIF * SKP * A EQU 0 B EQU 1 * * SKP ENT A.D21,A.D22,A.D23,A.D31,A.D32 ENT A.D33,ACBT7,ACCCP,ACELP ENT CLANS,CLRST,CPAN1 ENT CPAN2,CPAN3 ENT FIX21,FIX22 ENT FIX23,FIX31,FIX32,FIX33 ENT FLT21,FLT22,FLT23,FLT31,FLT32 ENT FLT33 ENT STDCP,STELP,SWBF1 ENT TST00,TST01,TST02 ENT TST03,TST04,TST05,TST06,TST07 ENT TST08,TST15 * IFN EXT $LIBR,$LIBX XIF * EXT ACBLD EXT ACPRT,ADDOP,ASCNV,COM5,CWCHK EXT DISPB,DIVOP,DNPUX,EXPCK,FIXOP EXT FLTOP,MPYOP,MSGC,MSGD EXT MSGI,MSGIN,OPDIN,PAK5,PORTB EXT RANF,RND5,SKNCW,STINI EXT STSTE,SUBOP,TINIT,TRNC5,TSTN EXT UNPK5,WRANS SUP * SKP * MIC INSTRUCTIONS * MIC ADD,105000B,0 MIC SBB,105020B,0 MIC MPB,105040B,0 MIC DVB,105060B,0 MIC FXS,105100B,0 MIC XDB,105104B,0 MIC TSB,105120B,0 MIC TDB,105124B,0 * MIC XPD,105005B,0 MIC STK,105007B,0 MIC RST,105006B,0 * * * * * * * SKP *S * IFZ IF ABS, ON BASE PAGE ORB XIF * * CONSTANTS * NEG1 DEC -1 NEG2 DEC -2 NEG5 DEC -5 NEG15 DEC -15 NG513 DEC -513 POS0 DEC 0 POS1 DEC 1 POS2 DEC 2 POS3 DEC 3 POS4 DEC 4 POS5 DEC 5 POS6 DEC 6 POS7 DEC 7 POS8 DEC 8 POS10 DEC 10 POS12 DEC 12 POS15 DEC 15 POS64 DEC 64 PS128 DEC 128 PS256 DEC 256 PS512 DEC 512 * UPBYT OCT 177400 * ZERO DEF BUF0 BUF0 OCT 0,0,0,0,0,0,0,0 * * * * * * VARIABLES * ACBFP BSS 1 BUFP BSS 1 EXPNT BSS 1 FCTNT BSS 1 TEMP FOR USE IN ACCOP, ETC INTWD BSS 1 ODFLG BSS 1 ODSEL BSS 1 OPADR BSS 1 OPBAS ADD OPCOD BSS 1 TPSEL BSS 1 * * * * * * * SUBROUTINE DEFS DEFSW DEF *+1,I ZDDOP DEF ADDOP+0 ZUBOP DEF SUBOP+0 ZPYOP DEF MPYOP+0 ZIVOP DEF DIVOP+0 * * IFZ RETURN TO CURR. PAGE ORR XIF * * * * * * * * * * * PTNST BSS 1 PATTERN START ADDRESS BASE PTNAD DEF PTN00 PTNSB DEF PTN04 PTNMD DEF PTN08 PTNFT DEF PTN08 PTN00 DEF PON13 DEF PON23 DEF PON23 DEF PON13 * DEF NON13 DEF NON23 DEF NON23 DEF NON13 * DEF PON13 DEF NON23 DEF NON23 DEF PON13 * DEF NON13 DEF PON23 DEF PON23 DEF NON13 * PTN04 DEF PON13 DEF PON23 DEF NON23 DEF NON13 * DEF NON13 DEF NON23 DEF PON23 DEF PON13 * DEF PON13 DEF NON23 DEF PON23 DEF NON13 * DEF NON13 DEF PON23 DEF NON23 DEF PON13 * * PTN08 DEF PON13 DEF PON23 DEF NON13 DEF NON23 * DEF PON23 DEF PON13 DEF NON23 DEF NON13 * DEF PON13 DEF NON23 DEF NON13 DEF PON23 * DEF PON23 DEF NON13 DEF NON23 DEF PON13 * PTN12 DEF PON13 DEF PON23 DEF PON13 DEF PON23 * * * * POND1 DEF PON13 POND2 DEF PON23 NOND1 DEF NON13 NOND2 DEF NON23 PON13 BSS 5 PON23 BSS 5 NON13 BSS 5 NON23 BSS 5 * * * * * * BFBGM EQU * OCT 77777,100000,77777,100000,0 OCT 77600,77600,77600,77600,0 OCT 74170,74170,74170,74170,0 OCT 63146,64146,63146,63146,0 OCT 70707,16161,43434,70707,0 OCT 76037,03701,170174,17476,0 OCT 44444,111111,22222,44444,0 OCT 52525,52525,52525,52525,0 OCT 42104,42104,42104,42104,0 OCT 73567,73567,73567,73567,0 OCT 66666,155555,133333,66666,0 OCT 77401,175007,170037,140177,0 OCT 61430,143061,106143,14306,0 OCT 60606,14141,103030,60606,0 OCT 74747,117171,163636,74747,0 BFBGR EQU * BFBGE EQU * OCT 76340,140403,176170,35700,0 OCT 41437,37701,161603,57200,0 BFNDE EQU * OCT 40000,377,177777,177777,0 OCT 100000,377,177777,177777,0 BFNDR EQU * OCT 41020,102041,4102,10204,0 OCT 75736,173675,167573,157367,0 OCT 0,0,0,0,0 OCT 77777,177777,177777,177777,0 OCT 137777,177777,177777,177777,0 OCT 40100,40100,40100,40100,0 OCT 77577,77577,77577,77577,0 * OCT 70160,70160,70160,70160,0 OCT 76174,76174,76174,76174,0 * OCT 52525,63146,70707,40404,0 OCT 40001,40001,40001,40001,0 BFNDM EQU * * BFBGO OCT 40000,377,177777,177777,177 1/2 * 2**127 OCT 40000,377,177777,177777,176 OCT 40000,7,77,777,177600 3 OCT 40000,377,177777,177777,177601 OCT 100000,5,25,525,177 5/8 * 2**14 OCT 100000,377,177777,177777,176 OCT 100000,13,57,731,177600 OCT 100000,377,177777,177777,177601 OCT 77777,177777,177777,177777,177 OCT 77777,177777,177777,177777,176 OCT 137777,177777,177777,177777,177 OCT 137777,177777,177777,177777,176 OCT 77777,177777,177777,177777,177600 OCT 77777,177777,177777,177777,177601 OCT 137777,177777,177777,177777,177600 OCT 137777,177777,177777,177777,177601 * OCT 40000,123,357,246,0 OCT 40000,377,177777,177777,1 OCT 77777,177777,177777,177777,0 OCT 100000,351,715,34726,0 OCT 137777,177777,177777,177777,0 OCT 137777,177777,177777,177777,1 * OCT 40000,370,37037,3073,177000 1/2 OCT 40000,54,3627,77035,777 OCT 100000,377,7760,170000,777 OCT 100000,53,7751,2357,177000 OCT 77777,177777,177777,177777,777 OCT 137777,177777,177777,177777,777 OCT 137777,177777,177777,177777,177000 BFNDO OCT 77777,177777,177777,177777,177000 * * * * BUF1A OCT 105000 N WORD FPOPN DEC 2 DEF ACOD1+0 DEC 2 DEF ACOD2+0 OCT 0 DEC 0 DEF 0 * BUF1B OCT 105110 FIXS,ACC DEC 0 DEF 0 DEC 0 DEF 0 OCT 0 DEC 0 DEF 0 * BUF1C OCT 105130 FLTS,ACC DEC 0 DEF 0 DEC 0 DEF 0 OCT 0 DEC 2 DEF RST13+0 * BUF1D OCT 105010 FPOPN, ACC1 DEC 0 DEF 0 DEC 2 DEF ACOD3+0 OCT 0 DEC 0 DEF 0 * BUF1E OCT 105004 FPOPN, ACC2 DEC 2 DEF ACOD4+0 DEC 0 DEF 0 OCT 0 DEC 2 DEF RST13+0 * BUF1F OCT 105014 FPOPN, ACC,ACC DEC 0 DEF 0 DEC 0 DEF 0 OCT 0 DEC 2 DEF RST13+0 * BUF2B OCT 105114 FIXD,ACC DEC 0 DEF 0 DEC 0 DEF 0 OCT 0 DEC 0 DEF 0 * BUF2C OCT 105134 FLTD,ACC DEC 0 DEF 0 DEC 0 DEF 0 OCT 0 DEC 0 DEF 0 * BUF3B OCT 105100 FIXS DEC 2 DEF ACOD3+0 DEC 0 DEF 0 OCT 0 DEC 1 DEF ACOD5+0 * BUF4B OCT 105104 FIXD DEC 2 DEF ACOD3+0 DEC 0 DEF 0 OCT 0 DEC 2 DEF ACOD5+0 * BUF5C OCT 105120 FLTS DEC 1 DEF ACOD5+0 OCT 0,0,0,0,0 * BUF6C OCT 105124 FLTD DEC 2 DEF ACOD5+0 OCT 0,0,0,0,0 * * * BACB1 OCT 105000 2 WORD ADD 0+0 DEC 2 DEF BUF0+0 DEC 2 DEF BUF0+0 OCT 0 DEC 2 DEF RST13+0 * * BACH1 OCT 105000 HANG THE BOX-- NO OPNDS OCT 0,0,0,0,0,0,0 * BACH2 OCT 105021 HANG-- SEND 1 OPND DEC 3 DEF ACOD1+0 OCT 0,0,0,0,0 * BACH3 OCT 105062 HANG IT, 6 OUT OF 8 WORDS DEC 4 DEF ACOD1+0 DEC 2 DEF ACOD1+0 OCT 0,0,0 * * * * * * * * * * MSGE ASC 3, EXP / MSGR ASC 3, RND / MSGO ASC 3, OVF / MSGM ASC 3, MIX / * * * * * * * * SKP * * ADD TEST ROUTINE * TST04 EQU * * * ROUTINE TO TEST HFP ADD OPERATIONS * *STSTAD TSTAD NOP JSB TINIT SET PARMS, ETC. FOR TEST, CALL CWCNF LDA ADDBS GET BASE OPCODE STA OPCOD LDA ZDDOP SET UP SW ROUTINE ADDR STA OPADR LDA PTNAD SET UP PATTERN START POINT STA PTNST * JSB MSGI "ADD" DEF MSGAD * JSB TSTAS GO TO COMMON ADD,SUB TEST SECTION JMP TSTAD,I RETURN * *LTSTAD MSGAD ASC 6,ADD TEST / ADDBS ADD ADD BASE *ETSTAD * * *STSTSB TST05 EQU * TSTSB NOP ROUTINE TO TEST SUBTRACT OPERATIONS JSB TINIT INIT PARMS, CALL CWCNF LDA SUBBS GET OPCODE BASE STA OPCOD LDA ZUBOP SET UP SW ROUTINE ADDRESS STA OPADR LDA PTNSB SET UP PATTERN START POINT STA PTNST * JSB MSGI "SUB" DEF MSGSB * JSB TSTAS GO TO COMMON TEST ROUTINE FOR ADD, SUB JMP TSTSB,I * *LTSTSB * MSGSB ASC 6,SUB TEST / SUBBS SBB SUB BASE * *ETSTSB * * *S TSTAS NOP ADD,SUB TEST ROUTINE * * JSB STSTE ELSE EXECUTE SUBTESTS, BASED ON IST OCT 10 SHORT PASS TESTS DEF TSTEA,I DEF TSTRA,I DEF TSTOA,I DEF TSTMA JMP TSTAS,I THATS ALL *E * * * TEST EXPONENTS-- ADD 2 NUMBERS WITH SAME EXP, EXP: -512,511 * *S TSTEA NOP JSB MSGD DEF MSGE LDA POS1 JSB STINI+0 LDA POS2 ONLY OPNDS TRUNC TO 2 WORDS STA OWRDS+0 LDA NG513 LOW EXP-1 STA EXPNT ODEAR CLA,CLE RESET GETOP JSB GETOP DEF BFBGE DEF BFNDE ODEAL CLA,INA GET OPND JSB GETOP JMP ODEAR IF OUT OF OPNDS, START OVER LDA EXPNT SET EXPS INA STA EXPNT CPA PS512 OUT OF RANGE, DONE JMP TSTEA,I NEXT TEST STA OND13+4 PT EXPS IN PLACE STA OND23+4 JSB WIEXA TEST THE HW JMP ODEAL BACK FOR ANOTHER *E * * * TEST FOR CORRECT ROUNDING-- EXP DIFFERENCE FROM 1 TO 64 * *STSTRA TSTRA NOP JSB MSGD DEF MSGR LDA POS2 JSB STINI+0 INIT SUB FUNCTION LDA POS2 SET OWRDS STA OWRDS+0 LDA NEG32 SET BASE EXP. STA EXPNT ODRAR CLA,CLE JSB GETOP RESET GETOP DEF BFBGR DEF BFNDR ODRAL CLA,INA GET OPNDS JSB GETOP JMP ODRAR START OVER WITH OPNDS LDA EXPNT NEW BASE CPA PS480 IF OUT OF RANGE, NEXT TEST JMP TSTRA,I NEXT TEST ADA POS64 STA EXPNT LDA NEG64 RESET EXP OFFSET STA EXPOF XORAL LDA EXPOF SET EPXS ARS ADA EXPNT STA OND13+4 LDA EXPOF CMA,INA ADA OND13+4 STA OND23+4 JSB WIEXA TEST HW LDA OND13+4 NOW WITH COMPLEMENTED EXPS CMA STA OND13+4 LDA OND23+4 CMA STA OND23+4 JSB WIEXA TEST ISZ EXPOF NEXT OFFSET JMP XORAL JMP ODRAL IF=0, GET NEXT OPNDS, EXP BASE * *LTSTRA * NEG64 DEC -64 NEG32 DEC -32 PS480 DEC 480 EXPOF BSS 1 * *ETSTRA * * * TEST OVERFLOW RANGES, ADD/SUB * *S TSTOA NOP JSB MSGD DEF MSGO LDA POS3 JSB STINI+0 LDA POS2 STA OWRDS+0 CLA,CLE RESET GETOP JSB GETOP DEF BFBGO DEF BFNDO ODOAL CLA,INA GET NEXT OPND PAIR JSB GETOP JMP TSTOA,I NEXT TEST JSB WIEXA TEST HW JMP ODOAL *E * * * * *S TSTMA NOP JSB MSGD DEF MSGM LDA POS4 JSB STINI+0 LDA POS1 #STARTING # OF OPND WORDS-1, FOR TRUNC. STA OWRDS+0 * BWMAL LDA OWRDS+0 TEST #WORDS IN OPNDS CPA POS5 IF=MAX, DONE LOOPING JMP TSTMA,I DONE WITH TEST INA STA OWRDS+0 #WORDS OPERANDS TRUNCATED TO STA WRDS+0 #WORDS FOR OPERATION ISZ LPCNT+0 CLA,CCE CLEAR OPND BUFFER POINTERS,INDEX MODE JSB GETOP DEF BFBGM DEF BFNDM ODMAL CLA,INA GET NEXT BASE OPNDS JSB GETOP JMP BWMAL IF NO MORE OPNDS, INC OPND WORD COUNT * LDB OPND1+0 MIX IT UP JSB OPMIX ISZ EVNOD+0 LDB OPND2+0 JSB OPMIX THE 2ND ONE TOO ISZ EVNOD+0 JSB WIEXA LOOP FROM OWRDS TO 5, EXEC., CMPR JMP ODMAL GET NEXT OPNDS *E * * *S WIEXA NOP ROUTINE TO LOOP FROM OWRDS TO 5, COMP & CMPR ANS. ISZ OPNDN+0 LDA OWRDS+0 TRUNCATE OPNDS TO CORRECT # WORDS LDB OPND1+0 CBX JSB TRNC5+0 LDA OWRDS+0 LDB OPND2+0 CBY JSB TRNC5+0 JSB ODTST+0 TEST OPNDS FOO RANGE, SET ODFLG JMP WIEXA,I IF 5 WORD OVFL, NO GO LDA OPND1+0 MOVE OPNDS INTO WORKING BUFFER LDB POND1 CBX SET X,Y TO OPND ADDRS LDY POND2 MVW POS10 LDB ANSW+0 JSB OPADR,I COMPUTE S/W ANSWER IN ANSW LDB PTNST RUN 1ST PATTERN JSB WRDLP TEST WITH DIFFERENT WORD LENGTHS LDB ANSW+0 COMPLEMENT ANSWER JSB COM5+0 LDB PTNST 2ND PATTERN ADB POS4 JSB WRDLP RUN AGAIN LDA OPND1+0 RESTORE OPNDS LDB POND1+0 CBX SET X,Y TO OPND ADDRS LDY POND2 MVW POS10 LDB POND2 COMPLIMENT 2ND OPND=> X-Y JSB COM5+0 LDB ANSW+0 PUT ANSWER IN ANSW JSB OPADR,I CALCULATE 1ST OPND- 2ND OPND LDB PTNST PATTERN 3 ADB POS8 JSB WRDLP LDB ANSW+0 COMPLEMENT RESULT JSB COM5+0 LDB PTNST PATTERN 4 ADB POS12 JSB WRDLP JMP WIEXA,I *E * * SKP * ROUTINE TO TEST HFP MPY OPERATIONS * * *STSTMP TST06 EQU * TSTMP NOP JSB TINIT SET PARMS, CALL CWCNF LDA MPYBS STA OPCOD LDA ZPYOP SET UP SW ROUTINE ADDR STA OPADR LDA PTNMD SET UP PATTERN START POINT STA PTNST * JSB MSGI "MPY" DEF MSGMP * JSB STSTE LONG PASS-- USE IST FOR SUBTEST SELECTION OCT 4 SHORT PASS SUBTESTS DEF TSTEM,I EXPONENT DEF TSTOM,I OVFL DEF TSTMM MIXED JMP TSTMP,I * * *LTSTMP * MSGMP ASC 6,MPY TEST / MPYBS MPB MPY BASE * *LTSTMP * *ETSTMP * * * EXPONENT MULTIPLY TEST * *S TSTEM NOP JSB MSGD DEF MSGE LDA POS1 JSB STINI+0 CLA STA EXPNT LDA POS2 SET OPND WORDS STA OWRDS+0 ODEMR CLA,CLE JSB GETOP RESET POINTERS DEF BFBGE DEF BFNDE ODEML CLA,INA JSB GETOP GET OPND PAIR JMP ODEMR LDA EXPNT INC EXP INA STA EXPNT CPA PS256 CHECK FOR DONE JMP TSTEM,I STA OND13+4 PUT EXP IN OPNDS STA OND23+4 JSB WIEXM TEST HW ISZ OND23+4 TRY IT AGAIN WITH 2ND OP INCED NOP JSB WIEXM TEST IT LDA OND13+4 COMLEMENT 1ST OPND CMA STA OND13+4 JSB WIEXM TEST LDA OND23+4 COMPL 2ND OPND CMA STA OND23+4 JSB WIEXM ISZ OND23+4 INC 2ND OP NOP JSB WIEXM TEST JMP ODEML BACK FOR THE NEXT BASE *E * * OVERFLOW MULTIPLY TEST * *S TSTOM NOP LDA POS2 JSB STINI+0 JSB MSGD DEF MSGO LDA POS2 SET OWRDS STA OWRDS+0 CLA,CLE CLEAR GETOP JSB GETOP DEF BFBGO DEF BFNDO ODOML CLA,INA GET OPND PAIR JSB GETOP JMP TSTOM,I NEXT TEST JSB WIEXM TEST HW JMP ODOML TRY NEXT PAIR * * * * * MIXED MULTIPLY TEST * TSTMM NOP JSB MSGD DIAG. INFO DEF MSGM LDA POS3 JSB STINI+0 LDA POS1 # OPERAND WORDS-1 STA OWRDS+0 * BWMML LDA OWRDS+0 TEST #WORDS IN OPNDS CPA POS5 IF=MAX, DONE LOOPING JMP TSTMM,I NEXT TEST INA STA OWRDS+0 #WORDS OPERANDS TRUNCATED TO STA WRDS+0 #WORDS FOR OPERATION ISZ LPCNT+0 CLA,CCE CLEAR OPND BUFFER POINTERS JSB GETOP DEF BFBGM DEF BFNDM ODMML CLA,INA GET NEXT BASE OPNDS JSB GETOP JMP BWMML IF NO MORE OPNDS, INC OPND WORD COUNT LDB OPND1+0 MIX IT UP JSB OPMIX ISZ EVNOD+0 2ND OPND LDB OPND2+0 JSB OPMIX ISZ EVNOD+0 JSB WIEXM RUN THROUGH WORDS, ETC. JMP ODMML GET NEXT OPNDS *E * *S WIEXM NOP ISZ OPNDN+0 LDA OWRDS+0 TRUNCATE OPNDS TO CORRECT # WORDS LDB OPND1+0 JSB TRNC5+0 LDA OWRDS+0 LDB OPND2+0 JSB TRNC5+0 JSB ODTST TEST OPNDS FOR RANGE JMP WIEXM,I 5WD OVFLW, NO GO LDA OPND1+0 MOVE OPNDS INTO WORKING BUFFER LDB POND1 CBX SET X,Y TO OPND ADDRS LDY POND2 MVW POS10 LDB ANSW+0 JSB OPADR,I COMPUTE S/W ANSWER IN ANSW LDB PTNST RUN 1ST PATTERN JSB WRDLP TEST WITH DIFFERENT WORD LENGTHS LDB PTNST 2ND PATTERN ADB POS4 JSB WRDLP RUN AGAIN LDB ANSW+0 COMPLEMENT ANSWER JSB COM5+0 LDB PTNST PATTERN 3 ADB POS8 JSB WRDLP LDB PTNST PATTERN 4 ADB POS12 JSB WRDLP JMP WIEXM,I *E * * * ROUTINE TO TEST HFP DIV OPERATIONS * * *S TST07 EQU * * TSTDV NOP JSB TINIT SET PARMS, CALL CWCNF LDA DIVBS STA OPCOD LDA ZIVOP SET UP SW ROUTINE ADDR STA OPADR LDA PTNMD SET UP PATTERN START POINT STA PTNST * JSB MSGI "DIV" DEF MSGDV * * JSB STSTE LONG PASS- EXECUTE SUBTESTS PER IST OCT 4 SHORT PASS SUBTESTS DEF TSTED,I EXP DEF TSTOD,I OVFL DEF TSTMD MIXED JMP TSTDV,I * * *LTSTDV * MSGDV ASC 6,DIV TEST / DIVBS DVB DIV BASE * *LTSTDV * *ETSTDV * * * EXPONENT DIVIDE TEST * *S TSTED NOP LDA POS1 JSB STINI+0 JSB MSGD DEF MSGE CLA STA EXPNT LDA POS2 SET OPND WORDS STA OWRDS+0 ODEDR CLA,CLE JSB GETOP RESET POINTERS DEF BFBGE DEF BFNDE ODEDL CLA,INA JSB GETOP GET OPND PAIR JMP ODEDR LDA EXPNT INC EXP INA STA EXPNT CPA PS256 CHECK FOR DONE JMP TSTED,I STA OND13+4 PUT EXP IN OPNDS STA OND23+4 JSB WIEXD TEST HW ISZ OND23+4 TRY IT AGAIN WITH 2ND OP INCED NOP JSB WIEXD TEST IT LDA OND13+4 COMLEMENT 1ST OPND CMA STA OND13+4 JSB WIEXD TEST LDA OND23+4 COMPL 2ND OPND CMA STA OND23+4 JSB WIEXD ISZ OND23+4 INC 2ND OP NOP JSB WIEXD TEST JMP ODEDL BACK FOR THE NEXT BASE *E * * OVERFLOW DIVIDE TEST * *S TSTOD NOP LDA POS2 JSB STINI+0 JSB MSGD DEF MSGO LDA POS2 STA OWRDS+0 CLA,CLE CLEAR GETOP JSB GETOP DEF BFBGO DEF BFNDO ODODL CLA,INA GET OPND PAIR JSB GETOP JMP TSTOD,I NEXT TEST JSB WIEXD TEST HW JMP ODODL TRY NEXT PAIR *E * * * * MIXED DIVIDE TEST * *S TSTMD NOP JSB MSGD DEF MSGM LDA POS3 JSB STINI+0 LDA POS1 # OPERAND WORDS-1 STA OWRDS+0 * BWMDL LDA OWRDS+0 TEST #WORDS IN OPNDS CPA POS5 IF=MAX, DONE LOOPING JMP TSTMD,I NEXT TEST INA STA OWRDS+0 #WORDS OPERANDS TRUNCATED TO STA WRDS+0 #WORDS FOR OPERATION ISZ LPCNT+0 CLA,CCE CLEAR OPND BUFFER POINTERS JSB GETOP DEF BFBGM DEF BFNDM ODMDL CLA,INA GET NEXT BASE OPNDS JSB GETOP JMP BWMDL IF NO MORE OPNDS, INC OPND WORD COUNT LDB OPND1+0 MIX UP OPNDS JSB OPMIX ISZ EVNOD+0 LDB OPND2+0 JSB OPMIX ISZ EVNOD+0 * JSB WIEXD TEST HW JMP ODMDL LOOP AGAIN *E * *S WIEXD NOP DIVIDE WORD INC+TEST ROUTINE ISZ OPNDN+0 LDA OWRDS+0 TRUNCATE OPNDS TO CORRECT # WORDS LDB OPND1+0 JSB TRNC5+0 LDA OWRDS+0 LDB OPND2+0 JSB TRNC5+0 JSB ODTST TEST OPND RANGES JMP WIEXD,I 5WD OVFLW, NO GO LDA OPND1+0 MOVE OPNDS INTO WORKING BUFFER LDB POND1 CBX SET X,Y TO OPND ADDRS LDY POND2 MVW POS10 LDB ANSW+0 JSB OPADR,I COMPUTE S/W ANSWER IN ANSW LDB PTNST RUN 1ST PATTERN JSB WRDLP TEST WITH DIFFERENT WORD LENGTHS LDB ANSW+0 COMPLEMENT ANSWER JSB COM5+0 LDB PTNST 2ND PATTERN ADB POS8 JSB WRDLP RUN AGAIN LDA OPND1+0 RESTORE OPNDS LDB POND1 CBY THIS TIME ITS Y/X LDX POND2 MVW POS10 LDB ANSW+0 COMPUTE ANSWER JSB OPADR,I LDB PTNST PATTERN 3 ADB POS4 JSB WRDLP LDB ANSW+0 COMPLEMENT ANSWER JSB COM5+0 LDB PTNST PATTERN 4 ADB POS12 JSB WRDLP JMP WIEXD,I DONE *E * * SKP * * * ROUTINES TO TEST HFP FIX SINGLE AND DOUBLE OPERATIONS * S/D SELECTED BY INTWD=0 OR 1 * *S TST00 EQU * TSTXS NOP FIXS JSB MSGI "FIXS TEST" DEF MSGXS CLA INTWD=0 LDB FXSBS B=BASE OPCODE JSB TSTFX GO TO COMMON SECTION JMP TSTXS,I DONE * FXSBS FXS FIXS BASE MSGXS ASC 6,FIXS TEST / * * *S TST01 EQU * TSTXD NOP FIXD JSB MSGI "FIXD TEST" DEF MSGXD CLA,INA A=INTWD LDB FXDBS B=INSTR BASE JSB TSTFX COMMON ROUTINE JMP TSTXD,I DONE * FXDBS XDB FIXD BASE MSGXD ASC 6,FIXD TEST / * * *S TSTFX NOP STA INTWD INTWD=0 OR 1 FOR S/D STB OPCOD SAVE OPCODE JSB TINIT SET PARMS, CALL CWCNF * LDA ZIXOP SET UP SW ROUTINE ADDR * STA OPADR * LDA PTNAD SET UP PATTERN START POINT STA PTNST * * * JSB STSTE LONG PASS- USE IST OCT 2 SHOT PASS SUBTEST DEF TSTEX,I EXP DEF TSTMX MIX JMP TSTFX,I * *E * * EXPONENT FIX TEST (OVERFLOW TOO) * *S TSTEX NOP JSB MSGD DEF MSGE LDA POS1 JSB STINI+0 LDA POS2 ONLY OPNDS TRUNC TO 2 WORDS STA OWRDS+0 LDA NG513 LOW EXP-1 STA EXPNT ODEXR CLA,CLE RESET GETOP JSB GETOP DEF BFBGE DEF BFNDE ODEXL CLA,INA GET OPND JSB GETOP JMP ODEXR IF OUT OF OPNDS, START OVER LDA EXPNT SET EXPS INA STA EXPNT CPA PS512 OUT OF RANGE, DONE JMP TSTEX,I NEX TEST STA OND13+4 PT EXPS IN PLACE STA OND23+4 JSB WIEXX TEST THE HW JMP ODEXL BACK FOR ANOTHER *E * * * MIXED FIX TEST * *S TSTMX NOP JSB MSGD "FIX MIX" DEF MSGM LDA POS2 JSB STINI+0 LDA NEG15 SET LOOP CNT STA TSTLP+0 FXMLP LDA POS1 # OPERAND WORDS-1 STA OWRDS+0 * BWMXL LDA OWRDS+0 TEST #WORDS IN OPNDS CPA POS5 IF=MAX, DONE LOOPING JMP TSDMX DONE? INA STA OWRDS+0 #WORDS OPERANDS TRUNCATED TO STA WRDS+0 #WORDS FOR OPERATION ISZ LPCNT+0 CLA,CCE CLEAR OPND BUFFER POINTERS JSB GETOP DEF BFBGM DEF BFNDM ODMXL CLA,INA GET NEXT BASE OPNDS JSB GETOP JMP BWMXL IF NO MORE OPNDS, INC OPND WORD COUNT LDB OPND1+0 MIX UP OPND JSB OPMIX * LDB OPND1+0 ADJUST EXP. JSB OPRED * * JSB WIEXX JMP ODMXL * TSDMX ISZ TSTLP+0 DONE LOOPING? JMP FXMLP NO JMP TSTMX,I YES *E * * *S WIEXX NOP ISZ OPNDN+0 LDA OWRDS+0 TRUNCATE OPNDS TO CORRECT # WORDS LDB OPND1+0 JSB TRNC5+0 JSB ODTST TEST OPNDS FOR RANGE JMP WIEXX,I 5 WORD OVFL, NO GO LDA OPND1+0 MAKE 2ND OPND=1ST LDB OPND2+0 MVW POS5 LDA OPND1+0 MOVE 1ST OPND INTO ANSWER BUFFER LDB ANSW+0 MVW POS5 LDA INTWD LDB ANSW+0 JSB FIXOP+0 COMPUTE S/W ANSWER IN ANSW LDA POS0 TEST OVERFLOW SOC LDA POS1 STA ANSO+0 LDB PTNST RUN 1ST PATTERN JSB WRDLP TEST WITH DIFFERENT WORD LENGTHS * LDA OPND1+0 RELOAD OPERAND LDB ANSW+0 MVW POS5 LDB ANSW+0 JSB COM5+0 COMPLEMENT OPERAND LDA INTWD JSB FIXOP+0 COMPUTE ANSWER LDA POS0 TEST OVERFLOW SOC LDA POS1 STA ANSO+0 LDB PTNST 2ND PATTERN ADB POS4 JSB WRDLP RUN AGAIN JMP WIEXX,I *E * * * SKP * * * ROUTINES TO TEST HFP FLOAT SINGLE AND DOUBLE OPERATIONS * S/D SELECTED BY INTWD * * *S TST02 EQU * TSTTS NOP FLTS JSB MSGI "FLTS TEST" DEF MSGTS CLA A=INTWD LDB FTSBS B=OPCODE BASE JSB TSTFT COMMON SECTION JMP TSTTS,I * FTSBS TSB FLTS 2 WD MSGTS ASC 6,FLTS TEST / * * TST03 EQU * TSTTD NOP FLTD JSB MSGI "FLTD TEST" DEF MSGTD CLA,INA A=INTWD LDB FTDBS B=OPCODE BASE JSB TSTFT COMMON SECTION JMP TSTTD,I * FTDBS TDB FLTD BASE MSGTD ASC 6,FLTD TEST / * * * TSTFT NOP STA INTWD STB OPCOD JSB TINIT SET PARMS, CALL CWCNF * JSB STSTE LONG PASS- USE IST OCT 2 SHORT PASS SUBTEST DEF TSTET,I DEF TSTMT JMP TSTFT,I * * *E * * * EXPONENT FLOAT TESTS ( INTEGER RANGE) * *STSTET TSTET NOP LDA POS1 JSB STINI+0 JSB MSGD DEF MSGE LDA POS2 ONLY OPNDS TRUNC TO 2 WORDS STA OWRDS+0 LDA NEG1 LOW EXP-1 STA EXPNT ODETR CLA,CLE RESET GETOP JSB GETOP DEF BFBGE DEF BFNDE ODETL CLA,INA GET OPND JSB GETOP JMP ODETR IF OUT OF OPNDS, START OVER LDA EXPNT SET EXPS INA STA EXPNT CPA POS33 OUT OF RANGE, DONE JMP TSTET,I NEXT TEST STA OND13+4 PT EXPS IN PLACE STA OND23+4 JSB WIEXT TEST THE HW JMP ODETL BACK FOR ANOTHER * *LTSTET * POS33 DEC 33 * *ETSTET * * * MIXED FLOAT TEST * *S TSTMT NOP * LDA NEG15 LOOP 5 TIMES STA TSTLP+0 JSB MSGD "FLT MIX" DEF MSGM LDA POS2 JSB STINI+0 FTMLP LDA POS1 # OPERAND WORDS-1 STA OWRDS+0 * BWMTL LDA OWRDS+0 TEST #WORDS IN OPNDS CPA POS5 IF=MAX, DONE LOOPING JMP TSDMT DONE? INA STA OWRDS+0 #WORDS OPERANDS TRUNCATED TO STA WRDS+0 #WORDS FOR OPERATION ISZ LPCNT+0 CLA,CCE CLEAR OPND BUFFER POINTERS JSB GETOP DEF BFBGM DEF BFNDM ODMTL CLA,INA GET NEXT BASE OPNDS JSB GETOP JMP BWMTL IF NO MORE OPNDS, INC OPND WORD COUNT LDB OPND1+0 MIX UP OPND JSB OPMIX * LDB OPND1+0 ADJ. EXP JSB OPRED * * * JSB WIEXT TEST HW JMP ODMTL NEXT OPNDS * TSDMT ISZ TSTLP+0 CHECK FOR DONE LOOPING JMP FTMLP NO JMP TSTMT,I DONE *E * * * * * *S WIEXT NOP ISZ OPNDN+0 LDA OWRDS+0 TRUNCATE OPNDS TO CORRECT # WORDS LDB OPND1+0 JSB TRNC5+0 JSB ODTST TEST OPNDS FOR RANGE JMP WIEXT,I 5WD OVFL, NO GO LDA OPND1+0 MAKE 2NDOP=1ST LDB OPND2+0 MVW POS5 LDA INTWD FIX OPERAND LDB OPND1+0 JSB FIXOP+0 LDA OPND1+0 MOVE 1ST OPND INTO ANSWER BUFFER LDB ANSW+0 MVW POS5 LDA INTWD LDB ANSW+0 JSB FLTOP+0 COMPUTE S/W ANSWER IN ANSW LDA POS0 RESET OVERFLOW STA ANSO+0 LDB PTNFT RUN 1ST PATTERN JSB WRDLP TEST WITH DIFFERENT WORD LENGTHS * LDB OPND2+0 USE 2ND OPERAND, COMPLEMENT LDA OWRDS+0 TRUNCATE JSB TRNC5+0 JSB COM5+0 COMPLEMENT LDA INTWD FIX JSB FIXOP+0 LDA OPND2+0 MOVE TO ANSWER BUFFER LDB ANSW+0 MVW POS5 LDB ANSW+0 LDA INTWD JSB FLTOP+0 LDA POS0 TEST OVERFLOW STA ANSO+0 LDB PTNFT 2ND PATTERN ADB POS1 JSB WRDLP RUN AGAIN JMP WIEXT,I DONE * * * * TST08 EQU * *ROUTITI TO TEST ACCUMULATOR O ORATIONS S HFP * *MODIFIES A,B,X,Y,E * *STSTAC TSTAC NOP JSB TINIT SET PARMS, CALL CWCNF * JSB MSGI "ACC" DEF MSGAC * * JSB STSTE EXECUTE SUBTEST OCT 1 SHORT PASS SUBTEST DEF STACC JMP TSTAC,I DONE * * MSGAC ASC 6,ACC TEST / * * SKP * *S STACC NOP LDA ACLPS+0 STA ACCNT * TACLP EQU * JSB ACWRD SET UP INSTRUCTIONS WITH # WORDS DEF ACBF1 JSB CHSEL GET ODSEL,OPSEL * JSB ACCOP COMPUTE S/W & H/W, AND COMPARE DEF *+8 ACBF1 DEF BUF1A ACC=A OP B DEF BUF1B ACC=FIXS(ACC) DEF BUF1C RSLT=FLTS(ACC) DEF BUF1D ACC=ACC OP B DEF BUF1E RSLT=A OP ACC DEF BUF1F RSLT=ACC OP ACC DEF BUF0+0 * * IFN IF SYSTEM TURN OFF INTERRUPTS JSB $LIBR NOP XIF * STK HANG THE BOX DEF *+2 DEF BACH1 RST * IFN TURN INTERRUPTS BACK ON JSB $LIBX DEF *+1 DEF *+1 XIF * * * * JSB ACWRD SET UP INSTRUCTIONS WITH #WORDS DEF ACBF2 JSB CHSEL CHANGE OPSEL, ODSEL * JSB ACCOP AGAIN WITH DOUBLE INTGERS DEF *+8 ACBF2 DEF BUF1A ACC=A OP B DEF BUF2B ACC=FIXD(ACC) DEF BUF2C ACC=FLTD(ACC) DEF BUF1D ACC=ACC OP B DEF BUF1E RSLT=A OP ACC DEF BUF1F RSLT=ACC OP ACC DEF BUF0+0 * JSB ACWRD DEF ACBF3 JSB CHSEL JSB ACCOP DEF *+6 ACBF3 DEF BUF1A ACC= A OP B DEF BUF3B ACC=FIXS(A) DEF BUF1C RSLT=FLTS(ACC) DEF BUF1E RSLT=A OP ACC DEF BUF0+0 * * IFN IF SYSTEM TURN OFF INTERRUPTS JSB $LIBR NOP XIF * STK HANG THE BOX DEF *+2 DEF BACH2 RST * IFN TURN INTERRUPTS BACK ON JSB $LIBX DEF *+1 DEF *+1 XIF * * * * JSB ACWRD DEF ACBF4 JSB CHSEL JSB ACCOP DEF *+6 ACBF4 DEF BUF1A ACC=A OP B DEF BUF4B RSLT=FIXD(A) DEF BUF2C ACC=FLTD(ACC) DEF BUF1E RSLT=A OP ACC DEF BUF0+0 * JSB ACWRD DEF ACBF5 JSB CHSEL JSB ACCOP DEF *+6 ACBF5 DEF BUF3B RSLT=FIXS(A) DEF BUF1A ACC= A OP B DEF BUF5C ACC=FLTS(RSLT) DEF BUF1E RSLT=A OP ACC DEF BUF0+0 * * IFN IF SYSTEM TURN OFF INTERRUPTS JSB $LIBR NOP XIF * STK HANG THE BOX DEF *+2 DEF BACH3 RST * IFN TURN INTERRUPTS BACK ON JSB $LIBX DEF *+1 DEF *+1 XIF * * * * JSB ACWRD DEF ACBF6 JSB CHSEL JSB ACCOP DEF *+6 ACBF6 DEF BUF4B RSLT=FIXD(A) DEF BUF1A ACC=A OP B DEF BUF6C ACC=FLTD(RSLT) DEF BUF1E RSLT=A OP ACC DEF BUF0+0 * JSB ACWRD DEF ACBF7 JSB CHSEL JSB ACCOP DEF *+6 ACBF7 DEF BUF4B RSLT=FIXD(A) DEF BUF2C ACC=FLTD(ACC) DEF BUF1B ACC=FIXS(ACC) DEF BUF1C RSLT=FLTS(ACC) DEF BUF0+0 * ISZ ACCNT TEST FOR COOKING TIME JMP TACLP STILL KICKING JMP STACC,I WELL DONE * *LSTACC * ACCNT BSS 1 LOOP COUNTER * * *ESTACC * * * * SKP * *ROUTINE TO SET # OF FP WORDS TO 2,3,4 OR 5 *A REG=#WORDS, E=1 FOR BIT 7 TYPE *DEF TO ADDR OF 1ST BUF. ADDR FOLLOWS JSB * * *S ACWRD NOP JSB RANF+0 GET WRDS LDA B AND POS3 ADA POS2 STA WRDS+0 CLA SET EFLAG-- BIT7OP BLF SSB,SLB INA ACBT7 RSS IF IC SAYS NO BIT7 OPNS, ALWAYS CLEAR EFLAG CLA STA EFLAG LDB ACWRD,I SAVE POINTER TO BUFFERS IN ACBFP STB ACBFP ISZ ACWRD SET UP RETURN ADDR * ACWDL LDB ACBFP,I GET INSTRUCTION LDA B,I SZA,RSS IF=0, RETURN JMP ACWRD,I RAR,RAR GET OPCODE RAR,RAR AND POS7 STA FCTNT SAVE LDA EFLAG SET E TO FLAG FOR BIT 7 ERA LDA B,I GET INSTR AGAIN AND NB710 MASK OF #WORDS, BIT7 SEZ IF E SET, OR IN BIT7 IOR PS128 ADA WRDS+0 NOW SET # FP WORDS ADA NEG2 STA B,I PUT BACK ADB POS1 #WORDS IN 1ST OPND LDA FCTNT IF FLOAT, GO ON CPA POS5 JMP ACWD2 INC POINTER AND SET UP #RESULT WORDS LDA B,I #WORDS IN 1ST OPND SZA,RSS IF 0, TEST 2ND OPND JMP ACWD2 LDA WRDS+0 ELSE REPLACE WITH NEW VALUE STA B,I ACWD2 ADB POS2 #WORDS IN 2ND OPND LDA B,I SZA,RSS IF=0, GO ON TO RESULT JMP ACWDR LDA WRDS+0 STA B,I ELSE REPLACE ACWDR LDA FCTNT IF FIX, DON'T CHANGE CPA POS4 JMP ACWDI INC AND LOOP ADB POS2 #RESULT INSTR STB ACWP2 JSB RANF+0 GET #RSLT WORDS LDA B AND POS3 STA ACWP1 LDB ACWP2 GET #RESULT WORDS INB LDA B,I SZA,RSS IF=0, RETURN JMP ACWDI LDA ACWP1 GET #WORDS ADA POS2 STA B,I LDA ACWP1 FORM RSLT INSTR ADA OPBAS LDB ACWP1 B=#RSLT WORDS ADB POS2 CPB WRDS+0 IF SAME AS #WORDS, DONT SET RSLT INSTR CLA STA ACWP2,I STORE RSLT INSTR ACWDI ISZ ACBFP INC BUFFER POINTER JMP ACWDL * * ACWP1 BSS 1 ACWP2 BSS 1 EFLAG BSS 1 NB710 OCT 177574 * * * * *ROUTINE TO SELECT ODSEL, OPSEL 4 BITS * *S CHSEL NOP JSB RANF+0 GET ODSEL STB ODSEL JSB RANF+0 STB OPSEL+0 JMP CHSEL,I * * * SKP * * MANUAL ENTRY TEST * ALLOWS PROGRAMMABLE TESTING OF ADD,SUB,MPY,DIV,FIX, AND FLT * OPERATIONS, IN ACCUMULATOR MODE. * *STSTMN TST15 EQU * TSTMN NOP LDA IC CHECK FOR PRIV. MODE SLA,RSS IF BIT0=0, NO GO JMP TSTMN,I JUST RETURN * JSB TINIT SET PARMS, CALL CWCNF JSB MSGC,I PRINT TEST MESSAGE DEF MAMSG * JSB STSTE EXECUTE ONLY SUBTEST OCT -1 ALL SUBTESTS SHORT PASS DEF STMAN JMP TSTMN,I DONE * MAMSG ASC 10,MANUAL ENTRY TEST / * *S STMAN NOP MNTLP LDA MBUFZ SET UP POINTERS FOR INSTR BUFFERS ADA NEG1 ALWAYS INC FIRST STA BUFP POINTS TO INSTR BUFR CLA CLEAR OPERAND,RESULT POINTERS STA ACOPI+0 OPND PTR STA RSLTI RESULT POINTER MNILP ISZ BUFP LOOP FOR EACH OPERATION LDA BUFP,I SET UP PTR INTO OPN BUFR STA STKP+0 CPA MBUF8 IF LAST BUFFER, FORCE END JMP MNIND JSB MSGIN SEND MSG, GET INPUT DEF MAINS "OPCODE: " LDB INBUF+0 CHECK 1ST CHAR CPB ASCE IF=E, DONE JMP MNEND CPB ASCG IF="G", START EXECUTION JMP MNINC CPB ASCR IF=R, REST IS SAME AS LAST TIME JMP MNLIN JSB ASCNV+0 CONVERT TO OCTAL IN A REG STA STKP+0,I PUT IN BUFFER ISZ STKP+0 INC POINTER JSB MSGC,I SEND "OPND 1" DEF MAOD1 JSB OPDIN+0 GET 1ST OPND JSB MSGC,I SEND "OPND 2" DEF MAOD2 JSB OPDIN+0 GET OPND 2 * JSB MSGIN SEND & GET # DEF MARIN "RSLT OPCODE" JSB ASCNV+0 CONV TO OCTAL STA STKP+0,I PUT IN BUFFER ISZ STKP+0 JSB MSGIN SEND & GET # DEF MARST "#RSLT WORDS" JSB ASCNV+0 CONVERT TO OCTAL IN A REG STA STKP+0,I PUT IN BUFFER ISZ STKP+0 SZA,RSS IF=0, GET NEXT INSTR JMP MNILP LDA RSLTI GET RSLT ADDR AND POS1 ONLY 2 ADA RSLTZ+0 BASE ADDR LDA A,I STA STKP+0,I PUT IN BUFFER ISZ RSLTI JMP MNILP GET NEXT INSTR * MNINC LDA BUFP,I 1ST BUFFER, ASSUME REPEAT CPA MBUF1 JMP MNLIN YES, TREAT AS "R" MNIND CLA PUT INSTR=0 IN BUFFER STA STKP+0,I MNLIN JSB MSGIN SEND AND GET # LOOPS DEF MALPS "LOOP? " LDA INBUF+0 IF="Y", YES CPA ASCY JMP MNSLP IF SO, SET FOR LOOPING JSB ASCNV+0 GET OCTAL #LOOPS SZA,RSS IF=0 OR NOT#, 1 TIME MN1LP CLA,INA ONE LOOP CMA,INA STA MNCNT -#LOOPS MNELP CLA SET #WRDS TO 0 STA WRDS+0 STA TECNT+0 CLEAR ERROR CNT JSB ACCOP EXECUTE OPERATIONS, COMPARE & REPORT DEF *+9 DEF MBF11 DEF MBF12 DEF MBF13 DEF MBF14 DEF MBF15 DEF MBF16 DEF MBF17 DEF MBF18 * ISZ MNCNT TEST #LOOPS JMP MNELP NO DONE YET * LDA TECNT+0 IF NO ERRORS, PRINT BUFFERS, IF LEGAL SZA JMP MNTLP READY FOR NEXT SET OF OPNS * JSB ACBLD+0 LOAD ACC. BUFFERS JSB ACPRT+0 * JMP MNTLP GO BACK FOR MORE * MNSLP CLA SET ACCOP TO LOOP MODE STA ACELP LDA IC+0 SET CW BIT 12 IOR BIT12 STA IC+0 JMP MN1LP * MNEND NOP * IFN IF IN SYSTEM, GET INPUT JSB DNPUX+0 DEF *+1 * XIF JMP STMAN,I * *LSTMAN BIT12 OCT 10000 * MAINS ASC 6,OPCODE: _ / MAOD1 ASC 5,1ST OPND / MAOD2 ASC 5,2ND OPND / MARIN ASC 8,RSLT OPCODE: _ / MARST ASC 6,NRSLTS: _ / MALPS ASC 5,LOOP?: _ / * ASCE ASC 1,E ASCG ASC 1,G ASCR ASC 1,R ASCY ASC 1,Y RSLTI BSS 1 INDEX POINTER MNCNT BSS 1 MBUFZ DEF MBUF1 BASE ADDR OF MANUAL ENTRY INSTR. BUFFERS MBUF1 DEF MBF11 MBUF2 DEF MBF12 MBUF3 DEF MBF13 MBUF4 DEF MBF14 MBUF5 DEF MBF15 MBUF6 DEF MBF16 MBUF7 DEF MBF17 MBUF8 DEF MBF18 * MBF11 BSS 8 MAN. ENTRY INSTR BUFS MBF12 BSS 8 MBF13 BSS 8 MBF14 BSS 8 MBF15 BSS 8 MBF16 BSS 8 MBF17 BSS 8 MBF18 BSS 8 * *ESTMAN * * SKP * * *ROUTINE TO PROCESS ACC. OPNS, FOR TSTAC * * CALLING SEQ: JSB ACCOP * DEF * + #BUFFERS + 1 * DEF BUFFER1 * DEF BUFFER2 * ... * *WHERE BUFFER1, ETC. ARE THE BUFFERS OF OPERATIONS TO EXECUTE * *S ACCOP NOP ISZ OPNDN+0 INC OPND IDENT * LDA ACCOP BET #BUFFERS STA ACBFP SAVE POINTER CMA ADA ACCOP,I #BUFFERS = END ADDR-START ADDR-1 CMA,INA WANT NEG. COMPL STA NBUFS LDA HWBUF SET UP BUFFER POINTERS STA HWBFP LDA SWBUF STA SWBFP * LDA ACCOP SET UP POINTER TO 1ST BUFFER ADA POS1 SKIP OVER DEF TO RETURN STA BUFP1 SAVE LDA ACCOP,I SET UP RETURN ADDRESS STA ACCOP * * LDA WRDS+0 CHECK IF WRDS IS A VALID NUMBER SZA,RSS IF=0, OK JMP ACCLP ADA DBIT0+0 ADA NEG2 LDA A,I AND WDFLG+0 IF THIS BIT IN MASK WORD SET, OK SZA,RSS JMP ACCOP,I IF NOT, RETURN * * ACCLP ISZ ACBFP TRANSFER 1ST BUFFER ADDR TO HWSTK CALL, SWSTK CALL LDA ACBFP,I STA HWBFP,I STA SWBFP,I ISZ HWBFP ISZ SWBFP ISZ NBUFS IF #BUFS LEFT=0, DONE JMP ACCLP * LDA TSTN+0 TEST FOR MAN. ENTRY TEST CPA POS15 IF SO, DON'T CONFIGURE JMP ACCSW * LDB BUFP1 B=ADDR OF 1ST BUFFER JSB ACOND SET UP OPERANDS LDB BUFP1 B=ADDR OF 1ST BUFFER JSB ACOPN SET UP OPERATIONS * ACCSW JSB CLANS CLEAR ANSWER BUFFER JSB CLRST CLEAR RESULT BUFFER JSB SWSTK COMPUTE RESULT IN S.W DEF ACCSE SWBF1 BSS 12 ACCSE NOP ERROR RETURN * LDA RSLT1+0 MOVE RESULT TO ANSW1 LDB ANSW1+0 MVW POS5 ACCHW JSB CLRST CLEAR RESULT AGAIN * HWSTK STK COMPUTE H-W RESULT DEF ACCHE HWBF1 BSS 12 ACCHE JMP ACHNG ERROR RETURN SOC CHECK FOR OVERFLOW ACSOV ISZ RST1O+0 SET OVFLW BUF * LDA WRDS+0 IF 5 WORDS, CHOP OFF LOW BYTE OF LAST WORD CPA POS5 JMP *+2 JMP ACCPR LDA RST13+3 AND UPBYT STA RST13+3 * ACCPR JSB ACMPR COMPARE RESULTS, REPORT ERRORS ACELP RSS NORMALLY RETURN JMP ACSTT IF IN LOOP MODE, CHECK CW * JMP ACCOP,I ACSTT JSB CWCHK+0 TEST CW AND CHANGE PARMS IF NECESSARY JMP ACCHW REPEAT LAST OPERATION * ACHNG LDA NEG1 BOX HUNG, RETURN HUNG COND. STA RST13+0 JMP ACSOV SET OVERFLOW * BUFP1 BSS 1 USED AS POINTER TO 1ST BUFFER FOR ACC. OPNS HWBUF DEF HWBF1 SWBUF DEF SWBF1 HWBFP BSS 1 SWBFP BSS 1 NBUFS BSS 1 * * SKP * * ROUTINE TO SET UP ACC. OPERANDS IN BUFFERS * * ON ENTRY B=ADDR OF 1ST BUFFER * OPND ADDR INDEX SPECIFIED BY 4 BITS IN ODSEL * THE MOST SIG. BITS ARE USED FIRST, ETC. * *SACOND ACOND NOP LDA ODSEL SET UP OPERAND INDEX STA TPSEL STB ACBFP SAVE BUF POINTER ACODL LDB ACBFP,I GET #WORDS IN 1ST OPND ADB POS1 LDA B,I SZA,RSS IF=0, TEST 2ND OPND JMP ACODB STA WRDS+0 SET #WORDS FOR PACK LDA TPSEL GET ADDR OF OPERAND ALF GET NEXT 4 BITS STA TPSEL SAVE ROTATED FORM AND POS15 ONLY 4 BIT ADDR MPY POS5 5 WORDS/OPND ADA BMBGN START ADDR LDB ACBFP,I B=ADDR OF ACC. OPND ADB POS2 LDB B,I CBX SAVE OPERAND ADDRESS MVW POS5 TRANSFER OPERAND * ADB NEG5 B=OPND ADDR JSB OPMIX MAKE ADJUSTMENTS TO EXPONENT & MANTISSA CXB RESTORE OPERAND ADDR LDA WRDS+0 JSB PAK5+0 PACK UP OPERAND * ACODB LDB ACBFP,I GET #WORDS IN 2ND OPND ADB POS3 LDA B,I SZA,RSS IF=O, TEST NEXT INSTR JMP ACTIN STA WRDS+0 LDA TPSEL ALF GET NEXT OPND STA TPSEL SAVE AND POS15 MPY POS5 ADA BMBGN LDB ACBFP,I B=ADDR OF ACC. OPND ADB POS4 LDB B,I CBY SAVE OPERAND ADDR MVW POS5 ADB NEG5 B=OPND ADDR JSB OPMIX MAKE MANT, EXP ADJUSTMENTS CYB RESTORE OPERAND ADDR LDA WRDS+0 JSB PAK5+0 * ACTIN ISZ ACBFP GET NEXT BUFFER ADDR LDB ACBFP,I LDB B,I GET INSTR SZB IF=0, DONE JMP ACODL LOOP AGAIN JMP ACOND,I * *LACOND * BMBGN DEF BFBGM *EACOND * * SKP * ROUTINE TO SET UP INSTRS IN ACC BUFFERS * * ON ENTRY, B =ADDR OF 1ST BUFFER * * OPSEL DETERMINES THE INSTR. USED FOR SUCCESSIVE OPERATIONS * TOP 2 BITS FOR 1ST OPN, ETC. * * *SACOPN ACOPN NOP STB ACBFP SAVE BUFFER POINTER LDA OPSEL+0 SET UP OPCODE SELECTION BUFFER STA TPSEL SAVE IT ACOPL LDB ACBFP,I GET INSTR. BASE LDA B,I SZA,RSS IF INSTR=0, DONE JMP ACOPN,I AND POS64 IF BIT 6 SET, NOT ADD,SUB,MPY,DIV -- DON'T CHANGE SZA IF NOT, GO ON JMP ACOUP INC POINTER, LOOP LDA B,I GET INSTR LESS OPCODE AND NBT64 STA B,I REPLACE LDA TPSEL GET OPCODE # ALF GET NEXT TWO BITS STA TPSEL SAVE AND POS3 ALF MOVE TO BITS 4-6 IOR B,I OR INTO INSTR STA B,I NEW INSTRUCTION ACOUP ISZ ACBFP INC BUFFER POINTER JMP ACOPL GO FOR NEXT INSTR * *LACOPN * NBT64 OCT 177617 * *EACOPN * SKP * ROUTINES TO CLEAR OUT RESULT AND ANSWER BUFFERS * * *S CLANS NOP LDA ZERO OPERAND WITH ALL ZEROS LDB ANSW1+0 MVW POS6 LDA ZERO LDB ANSW2+0 MVW POS6 JMP CLANS,I DONE * * *S CLRST NOP CLA CLEAR ALL RESULT BUFFERS STA RST13+0 STA RST13+1 STA RST13+2 STA RST13+3 STA RST13+4 STA RST13+5 STA RST23+0 STA RST23+1 STA RST23+2 STA RST23+3 STA RST23+4 STA RST23+5 STA RST33+0 STA RST33+1 STA RST33+2 STA RST33+3 STA RST33+4 STA RST33+5 JMP CLRST,I * * * SKP * ROUTINE TO COMPARE RESULTS FROM HFP & S/W FOR ACC. OPERATIONS * HFP RESULT IN RSLT1, S/W ANSWER IN ANSW1 * REPORTS ERRORS IF FOUND * ON RETURN, E CLEAR IF NO ERROR, E SET IF ERROR * *S ACMPR NOP ACCCP RSS NORMALLY EXECUTE JMP ACCSP UNLESS SPECIAL CONF. LDA ANS1O+0 CHECK OVERFLOWS CPA RST1O+0 JMP *+2 =, CHECK FOR SET, OR OPERANDS JMP ACMER ERROR CLE CLEAR E IN CASE CORRECT RESULT CPA POS1 IF OVFLW=SET, IGNORE RESULT JMP ACMPR,I OVERFLOW, DON'T TEST #S, JUST RETURN LDA ANSW1+0 COMPARE RESULT AND ANSWER LDB RSLT1+0 CMW WDOUT+0 JMP ACMPR,I OK, RETURN JMP ACMER ELSE ERROR JMP ACMER * ACMER LDA WRDS+0 SET UP ECODE ADA NEG2 =#WORDS-2 STA ECODE+0 LDA POS0 GO TO ERROR ROUTINE, 1ST TRY STA TRYN+0 JSB WRANS+0 CCE SET E FOR ERROR RETURN JMP ACMPR,I GO HOME * ACCSP JSB SKNCW+0 TEST FOR DISPLAY ALL OPNS DEF DISPB+0 JMP ACMER IF SO, TREAT AS ERROR JMP ACMPR,I ELSE DONE, IE NO REPORT * * * SKP *S * * * ROUTINE TO PROCESS STACK OF OPERATIONS IN S/W, AS HFPSTK * * CALLING SEQUENCE: JSB SWSTK * DEF ERROR RETURN * DEF BUFFER 1 * DEF BUFFER 2 * . * . * . * ERROR RETURN * NORMAL RETURN * * BUFFER FORMAT: HFP INSTRUCTION * # WORDS IN 1ST OPND * ADDRESS OF 1ST OPND * # WORDS IN 2ND OPND * ADDRESS OF 2ND OPND * RESULT INSTRUCTION * # WORDS IN RESULT * RESULT ADDRESS * SWSTK NOP LDA SWSTK SET UP BUFFER POINTER STA BUFP LDA POS0 CLEAR OVERFLOW FLAG STA ANS1O+0 SWSLP ISZ BUFP GET 1ST BUFFER ADDRESS LDA BUFP,I AND PUT IN STKP STA STKP+0 LDA STKP+0,I GET HFP INSTRUCTION STA INSTR+0 SZA,RSS IF INSTR=0, DONE JMP SWSEN RAR,RAR SHIFT RIGHT FOR OPCODE STA INTWD BIT0=S/D FLAG IN FIX,FLOAT RAR,RAR OPCODE IN BITS 2-0 AND POS7 MASK OFF GARBAGE STA FCTNT LDA INSTR+0 GET #WORDS IN FP OPERANDS AND POS3 ONLY BITS 1,0 ADA POS2 ADD 2 STA WRDS+0 SAVE LDA ANSW1+0 IN CASE OF ACC OPN LDB OPND1+0 LOAD LAST RESULT IN OPERANDS CBX SET UP X FOR OPND ADDR MVW POS5 LDA ANSW1+0 LDB OPND2+0 CBY SET UP Y FOR OPND ADDR MVW POS5 LDB OPND1+0 GET 1ST OPERAND JSB SWSOP LDB OPND2+0 GET 2ND OPERAND JSB SWSOP LDA FCTNT TEST FOR TYPE-- FIX,FLOAT CPA POS4 JMP SWSFX IF FIX, GO THERE CPA POS5 TET FOR FLOAT JMP SWSFT * SWSTD LDA WRDS+0 ADD,SUB,MPY OR DIV STA WDIN+0 SET WDIN * LDB OPND1+0 TRUNCATE 1ST OPERAND * JSB TRNC5+0 * LDA WRDS+0 * LDB OPND2+0 SAME FOR 2ND OPERAND * JSB TRNC5+0 LDA FCTNT GET S/W OPN ADDR ADA DEFSW LDB ANSW1+0 JSB A,I GET S/W ANSWER LDA WRDS+0 ROUND ANSWER LDB ANSW1+0 JSB RND5+0 CLE CHECK FOR EXPONENT OVERFLOW LDA INSTR+0 AND PS128 IF BIT 7 SET, SET E CPA PS128 CCE JSB EXPCK+0 LDA ANS1O+0 IF OVERFLOW, SET FLAG SOC LDA POS1 SWSTO STA ANS1O+0 ISZ STKP+0 GET RESULT INSTR LDA STKP+0,I SZA,RSS IF=0, GET ORIG. INSTR LDA INSTR+0 AND POS3 GET # WORDS IN RESULT ADA POS2 STA WDOUT+0 * JSB TRNC5+0 TRUNCATE ANSWER SWSTR ISZ STKP+0 STORE RESULT IF NECESSARY LDA STKP+0,I SZA,RSS IF #RSLT WORDS=0, NO SAVE JMP SWSLP ISZ STKP+0 LDA ANSW1+0 LDB STKP+0,I MVW POS5 LDA FCTNT IF FIX, THATS ALL CPA POS4 JMP SWSLP LDA WDOUT+0 PACK UP RETURNED RESULT STA WRDS+0 SET WRDS TO WDOUT LDB STKP+0,I JSB PAK5+0 JMP SWSLP GET NEXT INSTR * * SWSFX LDA OPND1+0 PUT OPERAND IN ANSW1 LDB ANSW1+0 MVW POS5 LDA WRDS+0 TRUNCATE OPERAND STA WDIN+0 LDB ANSW1+0 * JSB TRNC5+0 LDA INTWD SET UP INTWD AND POS1 STA INTWD STA WDOUT+0 SET UP WDOUT ISZ WDOUT+0 JSB FIXOP+0 GET INTEGER LDA ANS1O+0 SOC SET FLAG IF OVERFLOW LDA POS1 STA ANS1O+0 ISZ STKP+0 ADVANCE POINTER JMP SWSTR TEST & SAVE RESULT * * SWSFT LDA OPND1+0 MOVE OPERAND TO ANSW1 LDB ANSW1+0 MVW POS5 LDA INTWD SET INTWD, WDIN AND POS1 STA INTWD STA WDIN+0 ISZ WDIN+0 LDB ANSW1+0 JSB FLTOP+0 GET FP # LDA WRDS+0 JSB TRNC5+0 TRUNC. RESULT LDA ANS1O+0 DON'T CHANGE OVERFLOW JMP SWSTO SAVE & HANDLE OVERFLOW,RESULT * * SWSEN LDA SWSTK,I JUMP OVER ERROR RETURN ADA POS1 JMP A,I RETURN TO CALLER * * *SSWSOP SWSOP NOP PUT OPERAND IN LOCS AT B REG IF #WORDS>0 ISZ STKP+0 GET # WORDS LDA STKP+0,I ISZ STKP+0 POINT TO ADDR SZA,RSS IF #WORDS=0, GO HOME JMP SWSOP,I LDA STKP+0,I ELSE MOVE IN BUFFER MVW POS5 B HAS ADDRESS LDA FCTNT IF FLOAT, THATS ALL CPA POS5 JMP SWSOP,I LDA WRDS+0 ELSE UNPACK # ADB NEG5 JSB UNPK5+0 JMP SWSOP,I DONE! * * * * * * * SKP * * ROUTINE TO TEST 5 WORD UNPACKED OPERANDS FOR RANGE * SETS ODFLG BASED ON THE MOST RESTRICTIVE OPERAND AS FOLLOWS * ODFLG= 0 NO RESTRICTIONS, STD OR 5 WORD FORMAT * 1 STD. OPERAND CANNOT BE COMPLEMENTED (5 WORD CAN) * 2 STD. OPERAND OVERFLOW, 5 WORD O.K. * 3 STD. OVERFLOW, 5 WORD CANNOT BE COMPLEMENTED * 4 STD. AND 5 WORD OVERFLOW * * STD. OVERFLOW: EXP.>127 OR <-128 * 5 WD OVERFLOW: EXP.>512 OR <-512 * NO COMPLIMENT: EXPONENT= MAX POS & OPERAND= -1 * OR MAX NEG 1/2 * * OPERAND ADDRESSES IN X,Y * RESULT RETURNED IN ODFLG, IF=4, NO SKIP OTHERWISE 1 INSTR SKIPPED * A,B,E MODIFIED * *SODTST ODTST NOP LDB OPND1+0 CHECK 1ST OPND FOR RANGE JSB ODCHK STA ODFLS SAVE ODFLG LDB OPND2+0 CHECK 2ND OPND JSB ODCHK LDB ODFLS CMB,INB PUT HIGHER OF 2 VALUES IN ODFLG ADB ODFLG SSB LDA ODFLS STA ODFLG CPA POS4 IF 5 WORD OVERFLOW, NO SKIP JMP ODTST,I ISZ ODTST IF NOT TOTALLY FATAL, SKIP INSTR JMP ODTST,I * ODFLS BSS 1 *EODTST * SKP * * ROUTINE TO TEST AN OPERAND FOR RANGE * B=ADDR OF OPND, RETURN WITH VALUE IN A REG. AND ODFLG * *SODCHK ODCHK NOP CLA CLEAR ODFLG STA ODFLG ADB POS4 A=EXPONENT LDA B,I SSA,RSS IF POS, A=-EXP CMA ADA PS127 TEST FOR EXP<127 AND >-128 SSA,RSS JMP ODCEX IF SO, DONE INA,SZA,RSS TEST FOR EXP=127,-128 JMP ODLMT IF SO, TEST MANTISSA ISZ ODFLG ELSE ODFLG>=2, TEST FOR 5 WRD CASE ISZ ODFLG ADA PS383 127+1+383=511 = 5 WD EXP. TEST SSA,RSS TEST FOR EXP<511 AND >-512 JMP ODCEX IF SO, DONE INA,SZA,RSS ELSE TEST IF=511 OR -512 JMP ODLMT IF SO, TEST MANTISSA LDA POS4 ELSE 5 WD OVERFLOW STA ODFLG PUT VALUE IN FLAG JMP ODCEX ODLMT ADB NEG4 TEST MANT FOR = 1/2 OR -1 LDA B,I A=MOST SIG WORD OF MANT CPA BIT14 TEST FOR 1/2 JMP ODCH0 IF SO TEST OTHER WORDS=0 CPA BIT15 TEST FOR -1 JMP ODCH0 IF SO TEST OTHER WORDS=0 JMP ODCEX IF NOT, DONE ODCH0 INB ADDR OF 2ND WORD LDA B,I SZA JMP ODCEX IF NOT=0, DONE INB TEST 3RD WORD LDA B,I SZA JMP ODCEX INB TEST 4TH WORD LDA B,I SZA,RSS ISZ ODFLG IF ALL WERE=0, INCREMENT ODFLG ODCEX LDA ODFLG A REG. = RETURN VALUE JMP ODCHK,I DONE * *LODCHK NEG4 DEC -4 PS383 DEC 383 PS127 DEC 127 BIT14 OCT 40000 BIT15 OCT 100000 *EODCHK * * SKP * * * ROUTINE TO LOOP FROM OWRDS TO 5, TESTING HFP * ON ENTRY, B=ADDR OF 1ST OF 2 PAIRS OF OPERANDS TO EXECUTE (SAME RESULT) * A,B,X,Y,E MODIFIED * *SWRDLP WRDLP NOP STB OPNDS+0 SAVE ADDR OF OPND PAIRS LDA OWRDS+0 SET START # WORDS LDB WDFLG+0 =#WRDS>=OPWRDS CPA POS2 IF=2, READY JMP IWDLP BRS IF=3, START THERE CPA POS3 JMP IWDLP BRS CPA POS4 JMP IWDLP BRS IWDLP STB WDFLL SAVE ROTATED WDFLG STA WRDS+0 STA WDIN+0 SET #INPUT AND OUTPUT WORDS TO SAME STA WDIN2+0 STA WDOUT+0 SLB,RSS IF LSB=0, DONT TEST ON THIS #WORDS JMP WRDUP ADA NEG2 FORM INSTRUCTION ADA OPCOD STA INSTR+0 JSB SWOPN ROUND,TRUNC & PACK S/W ANSWER JSB HWOND SET POND1,NOND1,POND2,NOND2 LDA OPNDS,I ODAD1,2 = ADDRS OF 1ST OPNDS STA ODAD1+0 LDA OPNDS GET NEXT ONE ADA POS1 LDA A,I STA ODAD2+0 JSB HWTST GET & COMPARE HFP RESULTS LDA OPNDS GET NEXT PAIR OF OPNDS ADA POS2 LDA A,I STA ODAD1+0 LDA OPNDS ADA POS3 LDA A,I STA ODAD2+0 JSB HWTST GET & COMPARE HFP RESULTS WRDUP LDB WDFLL GET NEXT WORD FLAG BRS LDA WRDS+0 A=#WRDS INA INC FOR NEXT TIME SZB IF=0, NO MORE LOOPS JMP IWDLP ELSE TRY AGAIN JMP WRDLP,I IF SO, DONE-- RETURN * *LWRDLP * OPNDS BSS 1 OPERAND PAIRS STORAGE VAR. WDFLL BSS 1 *EWRDLP * * SKP *ROUTINE TO ROUND, CHECK, AND PACK SW ANSWERS * WITH BIT 7 =0,1 *GENERAL ANSWER IN ANSW *ANSWERS RETURNED IN ANSW1,ANSW2 *A,B,E LOST * *S SWOPN NOP * CLA,INA TEST FOR FIX,FLOAT CPA FIXFG JMP SWFIX YES, FIS CPA FLTFG JMP SWFLT * LDA ANSW+0 MOVE GEN. ANS INTO WORKING BUFFER LDB ANSW1+0 MVW POS5 LDB ANSW1+0 STD. ANSWER LDA WRDS+0 ROUND ANSWER TO # OF WORDS JSB RND5+0 LDA ANSW1+0 MOVE ANSWER TO ANSW2 ALSO LDB ANSW2+0 MVW POS5 LDA WRDS+0 CHECK FOR OVERFLOW-- BIT 7=0 LDB ANSW1+0 CLE FOR BIT 7=0 JSB EXPCK+0 CLA TEST OVERFLOW SOC INA STA ANS1O+0 LDA WRDS+0 PACK ANSW1 JSB PAK5+0 * LDA WRDS+0 CHECK FOR OVERFLOW-- BIT 7=1 LDB ANSW2+0 CCE FOR BIT 7=1 JSB EXPCK+0 CLA TEST FOR OVERFLOW SOC INA STA ANS2O+0 LDA WRDS+0 PACK ANSW2 JSB PAK5+0 JMP SWOPN,I DONE * * * SWFIX DLD ANSW+1 PUT ANSWER IN ANSW1,2 DST ANS13+0 DST ANS23+0 LDA ANSO+0 SAVE OVERFLOW STA ANS1O+0 STA ANS2O+0 JMP SWOPN,I ALL DONE * * * SWFLT LDA ANSW+0 MOVE ANSWER INTO WORKING BUFFER LDB ANSW1+0 MVW POS5 LDB ANSW1+0 PACK ANSWER LDA WRDS+0 JSB PAK5+0 LDA ANSW1+0 PUT SAME IN ANSW2 LDB ANSW2+0 MVW WDOUT+0 LDA POS0 CLEAR OVERFLOW REGS STA ANS1O+0 STA ANS2O+0 JMP SWOPN,I DONE! * SKP * * ROUTINE TO SET UP OPERANDS FOR HFP CALCULATIONS-- + AND - * MODIFIES A,B,E * *S HWOND NOP LDA OPND1+0 MOVE POS. OPNDS INTO WORKING BUFFER LDB POND1 MVW POS10 LDA OPND1+0 MOVE POS OPNDS INTO NEG. OPND BUFFER LDB NOND1 MVW POS10 * LDA FLTFG IF FLOAT, THATS ALL SZA JMP HWOND,I * LDB POND1 TRUNC & PACK 1ST OPND LDA WRDS+0 JSB PAK5+0 * LDA WRDS+0 SAME FOR 2ND OPND LDB POND2 JSB PAK5+0 * LDB NOND1 COMPLEMENT 1ST OPND JSB COM5+0 LDA WRDS+0 NOW PACK JSB PAK5+0 * LDB NOND2 COMPLEMENT 2ND OPND JSB COM5+0 LDA WRDS+0 PACK IT JSB PAK5+0 JMP HWOND,I DONE * SKP * * ROUTINE TO GET HFP RESULTS & COMPARE WITH S/W * * MODIFIES A,B,E * *ROUTINE TO TEST OPERANDS AND EXECUTE H/W TESTS AND COMPARISIONS * * *S HWTST NOP ISZ OPNNL+0 LOGICAL # OF OPERATION JMP *+1 LDA ODFLG TEST FOR SUITABLE OPERANDS CLE,SZA,RSS JMP HWTGO IF OK, GO ON CPA POS2 IF=2, CHECK FOR 5 WORDS JMP HWTS5 CPA POS4 IF=4, NO CHANCE JMP HWTST,I LDA ODAD1+0 CHECK 1ST OPND FOR ADDR OF NON-COMPL. OPND JSB POTST SET E IF NON COMPL. OPND LDA ODAD2+0 CHECK 2ND ADDR JSB POTST LDA ODFLG TEST FOR TYPE 3 CPA POS3 JMP HWTT3 IF SO TEST FOR NON COMPL AND 5 WD SEZ TYPE 2, TEST FOR NON COMPL JMP HWTS5 COMPL OPND, TEST FOR 5 WORDS JMP HWTGO NON COMPL OPNDS, OK * HWTT3 SEZ TYPE 3, MUST MEET BOTH TESTS JMP HWTST,I YOU LOSE HWTS5 LDA WRDS+0 TEST #WORDS=5 CPA POS5 JMP HWTGO OK, EXECUTE JMP HWTST,I SORRY, NO GO * HWTGO JSB HWOPN GET HFP RESULTS JSB CPANS COMPARE TO S/W -- REPORT ERRORS STELP RSS NORMALLY RETURN JMP HWSTT IF LOOP MODE, TEST CW JMP HWTST,I HWSTT JSB CWCHK+0 TEST CW, SET PARMS JMP HWTGO REPEAT LAST INSTRUCTION (GROUP OF 3) * * * * * * ROUTINE TO TEST IF OPND IS AT PON13 OR PON23 (NON COMPL. FORM) * A=ADDR OF OPND, SET E ON RETURN IF FAILS TEST * *S POTST NOP ROUTINE TO TEST ADDR OF OPND FOR = PON13,PON23 CPA POND1 TEST IF 1ST NON COMPL OPND JMP POTST,I IF=, OK-- RETURN CPA POND2 IF NOT 1ST, CHECK FOR 2ND JMP POTST,I RETURN IF= CCE ELSE SET E, RETURN JMP POTST,I * * * * SKP * * * *ROUTINE TO COMPARE RESULTS FROM HFP WITH S/W *HFP RESULTS IN RSLT1,RSLT2,RSLT3 * S/W RESULTS IN ANSW1,ANSW2,ANSW3 *CALLS ERROR ROUTINE IN CASE OF DISCREPANCY * *S CPANS NOP STDCP RSS NORMALLY COMPARE, UNLESS JMP CPASP SPECIAL CONF. CPAN1 RSS NORMALLY TEST, UNLESS CW BIT 6 SET JMP CPAN2 LDA ANSW1+0 CHECK DIRECT/1ST RESULT LDB RSLT1+0 CMW WDOUT+0 JMP CPOV1 IF=, COMPARE OVERFLOW NOP ERROR JMP WRAN1 ERROR CPOV1 LDA ANS1O+0 CHECK OVERFLOW CPA RST1O+0 JMP CPAN2 IF=, OK-- GO ON WRAN1 CLA ELSE GO TO ERROR ROUTINE, 1ST TRY JSB WRANS * CPAN2 RSS NORMALLY TEST, UNLESS CW BIT 7 SET JMP CPAN3 LDA ANSW1+0 CHECK INDIRECT/2ND RESULT LDB RSLT2+0 CMW WDOUT+0 JMP CPOV2 IF=, CHECK OVFLW NOP JMP WRAN2 ERROR CPOV2 LDA ANS1O+0 CHECK OVFLW CPA RST2O+0 JMP CPAN3 IF=, CHECK NEXT RESULT WRAN2 CLA,INA ERROR-- GO TO ERROR ROUTINE-- 2ND TRY JSB WRANS * CPAN3 RSS NORMALLY TEST, UNLESS CW BIT 8 SET JMP CPANS,I IF SO, RETURN LDA ANSW2+0 BIT 7 ANSWER LDB RSLT3+0 CMW WDOUT+0 JMP CPOV3 IF=, CHECK OVERFLOW NOP JMP WRAN3 ERROR CPOV3 LDA ANS2O+0 CHJECK OVERFLOW CPA RST3O+0 JMP CPANS,I IF=, DONE WRAN3 LDA POS2 ERROR-- 3RD RESULT JSB WRANS JMP CPANS,I DONE * CPASP JSB SKNCW+0 CHECK FOR PORT TEST MODE DEF PORTB+0 JMP CPAPT IF SO, FUDGE POINTERS,... JSB SKNCW+0 TEST FOR DISPLAY ALL OPNS DEF DISPB+0 JMP CPADP IF SO, CALL WRANS 3 TIMES JMP CPANS,I ELSE DONE. CPADP CLA 1ST TRY JSB WRANS LDA POS1 2ND TRY JSB WRANS LDA POS2 JSB WRANS 3RD TRY JMP CPANS,I DONE * CPAPT LDA WDIN+0 SET WDOUT= MIN(WDIN,WDOUT) LDB WDOUT+0 CMB,INB ADB A SSB STA WDOUT+0 LDA ODAD1+0 SET UP ANSW1,ANSW2=OPND1 LDB ANSW1+0 MVW WDOUT+0 LDA ODAD1+0 LDB ANSW2+0 MVW WDOUT+0 CLA SET EXPECTED OVFLS STA ANS1O+0 STA ANS2O+0 JSB SKNCW+0 TEST FOR PRINT ALL DEF DISPB+0 JMP CPADP IF SO, DO JMP CPAN1 ELSE NORMAL CHECK * * * * SKP * *ROUTINE TO SEND OPNDS TO HFP, GET RESULTS, FOR DIRECT, INDIRECT, BIT 7 *OPND ADDRS IN ODAD1,2 B=INSTRUCTION *RESULT RETURNED IN RSLT1, RSLT2, RSLT3 *A,B,E DESTROYED! * *SHWOPN HWOPN NOP ISZ HWCNT+2 JMP HWCLR ISZ HWCNT+1 JMP HWCLR ISZ HWCNT+0 NOP HWCLR NOP NORMALLY DON'T CLEAR BUFFERS JSB CLRST CLEAR OUT RESULTS LDB INSTR+0 B=OPCODE CLA,INA TEST FOR FIX,FLOAT CPA FIXFG JMP HFIX FIX OPERATION CPA FLTFG JMP HFLT FLOAT OPERATION * LDA ODAD1+0 STA I341+2 ADD,SUB,MPY OR DIV-- SAVE OPND ADDRESSES LDA ODAD2+0 STA I341+3 LDA WRDS+0 TEST FOR 2,5 WORDS CPA POS2 JMP ASMD2 2 WORD OPN * STB I341 3,4 WORD OPN PUT INSTR IN PLACE STB I342 ADB POS0 SET BIT 7 STB I343 * A.D31 RSS NORMALLY EXECUTE, UNLESS CW BIT 6 SET JMP A.D32 I341 NOP STD 3,4 WORDS, DIRECT DEF RST13+0 RESULT ADDR NOP 1ST OPND NOP 2ND OPND SOC IF OVERFLOW, SET WORD=1 ISZ RST1O+0 * A.D32 RSS NORMALLY EXECUTE, UNLESS CW BIT 7 SET JMP A.D33 I342 NOP 3,4 WORDS, INDIRECT DEF RSLT2+0,I RESULT DEF I341+2,I 1ST OPND DEF I341+3,I 2ND OPND SOC TEST OVERFLOW ISZ RST2O+0 SET WORD IF OVERFLOW * A.D33 RSS NORMALLY EXECUTE, UNLESS CW BIT 8 SET JMP HWOCH IF SO, TEST FOR 5 WORDS HFP71 XPD SPECIAL BIT 7 MACRO I343 NOP 3,4 WORDS INDIRECT, BIT 7 SET DEF RSLT3+0,I RESULT DEF I342+2,I 1ST OPND DEF I342+3,I 2ND OPND SOC TEST OVERFLOW ISZ RST3O+0 HWOCH LDA WRDS+0 IF 5 WORDS, CHOP OFF LAST 8 BITS CPA POS5 JMP *+2 JMP HWOPN,I RETURN NOW LDA RST13+3 AND UPBYT STA RST13+3 LDA RST23+3 AND UPBYT STA RST23+3 LDA RST33+3 AND UPBYT STA RST33+3 JMP HWOPN,I GO HOME * * * ASMD2 STB IN21 2 WORD OPN, SET UP INSTRUCTIONS STB IN22 ADB POS0 SET BIT 7 STB IN23 LDA ODAD2+0 STA IN21+1 SET UP OPND 2 * A.D21 RSS NORM EXECUTE JMP A.D22 DLD I341+2,I GET 1ST OPND IN A,B IN21 NOP 2 WORD INSTR, DIRECT NOP DEF TO 2ND OPND DST RST13+0 PUT RESULT IN BUFFER SOC TEST OVERFLOW ISZ RST1O+0 * A.D22 RSS NORM EXECUTE JMP A.D23 DLD I341+2,I GET 1ST OPND IN A,B IN22 NOP 2 WORD OPN, INDIRECT DEF IN21+1,I 2ND OPND DST RST23+0 SAVE RESULT SOC TEST OVERFLOW ISZ RST2O+0 * A.D23 RSS NORM EXECUTE JMP HWOPN,I ELSE RETURN DLD I341+2,I GET 1ST OPND HFP72 XPD SPECIAL BIT 7 MACRO IN23 NOP 2 WORD OPN, INDIRECT, BIT 7 SET DEF IN22+1,I 2ND OPND DST RST33+0 SAVE RESULT SOC TEST OVERFLOW ISZ RST3O+0 JMP HWOPN,I * * * HFIX LDA ODAD1+0 SAVE 1ST OPND STA X341+1 LDA INTWD SET WDOUT ADA POS1 STA WDOUT+0 LDA WRDS+0 TEST FOR 2,5 WORDS CPA POS2 JMP HFIX2 FIX AND FLOAT 2 WORD STB X341 SET UP INSTRS STB X342 ADB POS0 SET BIT 7 FOR 3RD OPN STB X343 * CLB CLEAR B FOR SINGLE FIX * FIX31 RSS NORM EXECUTE JMP FIX32 X341 NOP 3,4 WORD DIRECT FIXS, FIXD NOP DEF TO OPND STA RST13+0 STORE RESULT STB RST13+1 SOC TEST OVERFLOW ISZ RST1O+0 * FIX32 RSS NORM EXECUTE JMP FIX33 X342 NOP 3,4 WORD FIX INDIRECT DEF X341+1,I OPND STA RST23+0 SAVE RESULT STB RST23+1 SOC TEST OVERFLOW ISZ RST2O+0 * FIX33 RSS NORM EXECUTE JMP HWOPN,I RETURN X343 NOP 3,4 WORD FIX, INDIRECT, BIT 7 SET DEF X342+1,I OPND STA RST33+0 SAVE RESULT STB RST33+1 SOC TEST OVERFLOW ISZ RST3O+0 JMP HWOPN,I DONE * * HFIX2 STB FX21 SET UP INSTRS STB FX22 ADB POS0 STB FX23 * FIX21 RSS NORM EXEC. JMP FIX22 DLD X341+1,I GET OPND FX21 NOP 2 WORD FIX,FLOAT S-D STA RST13+0 STORE RESULT STB RST13+1 SOC TEST OVERFLOW ISZ RST1O+0 * FIX22 RSS NORM EXEC. JMP FIX23 DLD X341+1,I SAME THING AGAIN (NO IND. POSSIBLE) FX22 NOP 2 WORD FIX,FLOAT S-D STA RST23+0 STORE RESULT STB RST23+1 SOC TEST OVERFLOW ISZ RST2O+0 * FIX23 RSS NORM. EXEC. JMP HWOPN,I RETURN DLD X341+1,I SET BIT 7 THIS TIME FX23 NOP INSTR STA RST33+0 STORE RESULT STB RST33+1 * LDB INTWD * SZB,RSS * STA RST33+0 SOC TEST OVERFLOW ISZ RST3O+0 JMP HWOPN,I * * HFLT LDA ODAD1+0 SAVE OPND ADDR STA X341+1 LDA INTWD SET UP WDIN ADA POS1 STA WDIN+0 LDA WRDS+0 TEST FOR 2,5 WORDS CPA POS2 JMP HFLT2 * STB T341 SET UP INSTRS STB T342 ADB POS0 STB T343 DLD X341+1,I * FLT31 RSS NORM EXEC JMP FLT32 T341 NOP 3,4 WORD DIRECT FLOAT S-D DEF RST13+0 RESULT SOC TEST OVERFLOW ISZ RST1O+0 * FLT32 RSS NORM EXEC JMP FLT33 T342 NOP 3,4 WORD INDIRECT FLOAT S-D DEF RST23+0 RESULT SOC TEST OVERFLOW ISZ RST2O+0 * FLT33 RSS NORM EXEC JMP HWOCH TEST FOR 5 WORDS T343 NOP 3,4 WORD INDIRECT, BIT 7 SET DEF RST33+0 RESULT SOC TEST OVERFLOW ISZ RST3O+0 JMP HWOCH TEST FOR 5 WORDS-- CHOP OFF RESULT * HFLT2 STB FT21 SET UP INSTRUCTIONS STB FT22 STB FT23 DLD X341+1,I IF DOUBLE B=1ST WORD * FLT21 RSS NORM EXECUTE JMP FLT22 FT21 NOP FLOAT S-D DST RST13+0 SAVE RESULT SOC TEST FOR OVERFLOW ISZ RST1O+0 * FLT22 RSS NORM EXECUTE JMP FLT23 DLD X341+1,I GET OPND FT22 NOP DST RST23+0 SAVE 2ND RESULT SOC TEST OVERFLOW ISZ RST2O+0 * FLT23 RSS NORM EXECUTE JMP HWOPN,I RETURN DLD X341+1,I GET OPND FT23 NOP DST RST33+0 SAVE 3RD RESULT SOC TEST OVERFLOW ISZ RST3O+0 JMP HWOPN,I DONE! * *EHWOPN * * * SKP * * ROUTINE TO RETRIEVE 2 OPNDS FROM THE DATA BUFFER * XR,YR ARE SET TO OPND ADDRESSES, * ON ENTRY, AR=0 FOR RESET, -1 FOR CURRENT OPNDS, 1 FOR NEXT OPND * ALSO, TWO PARMS PASSED, DEF BFBGN, DEF BFEND= BUF LIMITS * * *SGETOP GETOP NOP SZA,RSS IF A=0, RESET POINTERS JMP RESET SSA IF A<0, RETURN CURRENT OPNDS JMP RTNOP NXTOP LDA INXF SLA,RSS IF FLAG=0, USE INDEXED FORMAT JMP INXOP CLA,INA IF FIX OR FLOAT, BYPASS PTR2 CPA FIXFG JMP INCP1 CPA FLTFG JMP INCP1 LDA PTR2 ADVANCE PTR2 TO NEXT OPND ADA ONDUP+0 IE FORWARD BY ONDUP STA PTR2 CMA,INA IF PTR2>BFEND, RESET PTR2 AND ADVANCE PTR1 ADA BFEND SSA,RSS JMP INCNT ELSE GET OPERAND INCP1 LDA PTR1 ADVANCE PTR1 ADA ONDUP+0 GPBEX STA PTR1 STA PTR2 PTR2=PTR1 CMA,INA IF PTR1>BFEND, RETURN WITHOUT SKIP ADA BFEND AND WITHOUT OPND SSA JMP GETOP,I RETURN W/O SKIP, ALSO YESET,I GPCNT... INCNT ISZ GPCNT RTNOP LDA PTR1 PUT 1ST OPND IN OPND1 LDB OPND1+0 CBX XR= OPND1 ADDR MWP1 MVW POS5 LDA PTR2 PUT 2ND OPND IN OPND2 LDB OPND2+0 CBY YR=OPND2 ADDR MWP2 MVW POS5 ISZ GETOP NORMAL EXIT WITH SKIP JMP GETOP,I LAND HO, MATES * * THIS SECTION RETURNS INDEXED OPERANDS * INXOP LDA GPTR GET INDEXES TO OPERANDS ADA GPCNT LDA A,I SSA IF INDEX<0, DONE WITH THIS PART JMP RSET2 SET UP FOR ALL COMB TEST STA INXP SAVE INDEX WORD AND LWBYT A=INDEX OF 2ND OPND IN TABLE LDB A MPY INDEX BY 5 TO GET OFFSET ALS,ALS ADA B ADA BFBGN FORM PTR2 STA PTR2 LDA INXP HIGH BYTE HAS 1ST OPND ADDR ALF,ALF AND LWBYT LDB A MPY INDEX BY 5 TO GET OFFSET ALS,ALS ADA B ADA BFBGN FORM PTR1 STA PTR1 JMP INCNT INC COUNT AND PUT OPNDS IN OPND1 & 2 * *INITIALIZATION SECTION * RESET CLA CLEAR COUNTER STA GPCNT STA INXF =0 FOR INDEXED OPNS, 1 FOR EXHAUSTIVE * LDA GETOP,I GET OPND BUFFER LIMITS STA BFBGN ISZ GETOP LDA GETOP,I STA BFEND ISZ GETOP * LDA INXBF SET UP INDEX POINTER ADA TSTN+0 ADD IN TEST# LDA A,I GET ADDR OF BUFFER FOR CURRENT OPERATION SEZ,RSS IF E=0, NO INDEXING LDA ONES STA GPTR JMP GETOP,I THATS ALL FOR NOW RSET2 LDA BFBGN SET PTR1 TO BFBGN, ISZ INXF SET UP FOR EXHAUSTIVE TEST JMP GPBEX SET PTR1, PTR2 TO BFBGN, GET OPNDS * *LGETOP * LWBYT OCT 377 INXF BSS 1 INXP BSS 1 PTR1 BSS 1 PTR2 BSS 1 GPCNT BSS 1 BFBGN BSS 1 BFEND BSS 1 GPTR BSS 1 ONES DEF NEG1 INXBF DEF *+1 DEF FIXBF DEF FIXBF DEF FLTBF DEF FLTBF DEF ADDBF DEF SUBBF DEF MPYBF DEF DIVBF * FLTBF EQU * FIXBF EQU * SUBBF EQU * MPYBF EQU * DIVBF EQU * ADDBF BYT 1,1 BYT 3,3 OCT 177777 * *EGETOP * * * * ROUTINE TO ADJUST STANDARD OPERANDS, BOTH MANTISSA AND EXPONENT * USES PASS COUNT, WDCNT * * ON ENTRY BREG=ADDR OF OPERAND * * MODIFIES A,B,E * *SOPMIX OPMIX NOP LDA B,I IF MANT=0, DON'T CHANGE IT SZA,RSS JMP OPMIX,I ADB POS4 FORM EXP. ADDR STB OPMPT SAVE IT LDA EVNOD+0 IF ODD, USE LAST OPNDS BASE SLA JMP OPMBS * JSB RANF+0 GET FP #, A=EXP, B=MANT STA BASSV SAVE IT JSB RANF+0 ANOTHER ADA BASSV STA BASSV OPMBS JSB RANF+0 AGAIN ADA BASSV -45=