ASMB,L,C *&HFAUX * * FPP DIAGNOSTIC AUXILARY ROUTINES * * THIS MODULE CONTAINS ROUTINES TO REPORT ERRORS, SET OPTIONS, ETC. * REFERENCES ARE MADE TO ENTRYS IN EXT MODULES FOR SETTING PARMS, ETC. * INITIALIZATION ROUTINES, ETC. ARE ALSO INCLUDED. * * *CREATED 780606 1345 * EDITED 780930 TO CALL SWRT FROM PASST, MODIFY CWCHK * TO ADD INDB TO FLAGS-TESTS * EDITED 781126 TO ADD WDINI, WRDIX CALLED BY STSTI * EDITED 781129 TO ADD ERINI FOR ECODE,EBASE INIT, CALL BY STSTI * EDITED 781209 TO ADD DISPLAY ALL TO CWCNF, SKNCW, PORT MODE * EDITED 790110 TO ADD RTNB FLAG TO ATAN,TANH * EDITED 790417 TO FIX BUG IN OPDIN- DEF TO MAWRD FOR WORD# (DAWRD) * EDITED 790520 TO FIX FFP2 ERROR BASE * EDITED 790525 TO CHG TRNL TO DPOL * * LAST CODE CHANGE 790525 1400 CC * * NAM HFAUX 790525 1400 REV 1926 CC * A EQU 0 B EQU 1 SW EQU 1 * * SKP * FLAG BIT DEFINITIONS * A.DB EQU 1 ADD-DIV FCTN FIXB EQU 2 FIX FCTN FLTB EQU 4 FLT FCTN ACCB EQU 10B ACC. FCTN SISB EQU 20B SIS FCTN FFPB EQU 40B FFP FCTN INDB EQU 100B INDS USED OD1B EQU 200B 1 OPND OD2B EQU 400B 2 OPNDS OD3B EQU 600B 3 OR MORE OPNDS RT1B EQU 1000B 1 RSLT RT2B EQU 2000B 2 RSLTS RT3B EQU 3000B 3 OR MORE RSLTS INTB EQU 4000B INTEGER OPN OVFB EQU 10000B OVF VALID EXTB EQU 20000B E BIT VALID RTNB EQU 40000B MULTIPLE RETURN POINTS * * * * SKP * CONF WORD DEFINITIONS ENOPB EQU 1B OPTIONS ENABLE NMSGB EQU 2B INHIBIT INFO MSGS NWD2B EQU 4B NO 2 WORD OPNS TST00-TST08 NWD3B EQU 10B NO 3 WORD OPNS TST00-TST08 NWD4B EQU 20B NO 4 WORD OPNS TST00-TST08 NWD5B EQU 40B NO 5 WORD OPNS TST00-TST08 N1O3B EQU 100B NO 1 OF 3 OPNS, TST00-TST07 N2O3B EQU 200B NO 2 OF 3 OPNS, TST00-TST07 N3O3B EQU 400B NO 3 OF 3 OPNS, TST00-TST07 NVARB EQU 1000B NONVARYING PASS#, TST00-TST14 SHOTB EQU 2000B SHORT OUTPUT, TST00-TST13,TST15 NCMPB EQU 4000B INHIBIT ANSWER COMPARE, TST00-TST13,TST15 REPTB EQU 10000B REPEAT OPN, TST00-TST13 DISPB EQU 20000B DISPLAY ALL OPNS, WHETHER FAIL OR NOT, NO CHECK PORTB EQU 40000B PORT TEST MODE, TST00-TST07 * * SKP ENT ASCNV,OPERR ENT STROP,STHLT,STRFN,TINIT ENT STSTE,STSTI,STINI,PASND,PASST ENT CWCHK,CWCNF,RANFI,RANF ENT MSGI,MSGD,MSGIN ENT SKNF1,SKF1,GETPM ENT SKNCW ENT OPDIN ENT WRANS ENT ACBLD ENT ACPRT * ENT DISPB,PORTB * ENT OVFB,EXTB,RTNB * * EXT A.D21 EXT A.D22,A.D23,A.D31,A.D32,A.D33 EXT ACBT7,ACCCP EXT ACELP EXT ACLPS EXT ACOD1,ACOD2,ACOD3,ACOD4,ACOD5 EXT ACOD6,ACOP1,ACOP2,ACOP3,ACOP4 EXT ACOP5,ACOP6,ACOPI,ACOPZ,ANS13 EXT ANS23,ANSW1,ANSW2,ANSWZ,AOVFL EXT ARSLT,AS2N EXT CPAN1,CPAN2,CPAN3 EXT DBIT0,DIECP,DIELP,DNPUX EXT ECODE,EOVFL,ERCNT,ERMS,ERSLT EXT EVNOD,FIX21,FIX22,FIX23,FIX31 EXT FIX32,FIX33,FIXFG,FLT21,FLT22 EXT FLT23,FLT31,FLT32,FLT33,FLTFG,HIWRD EXT IC,ICEN,IFBRK,INBUF,INBUZ EXT INDCT,INSTR,IS,IST,LOWRD,LPCNT EXT MSGC,NOPND,NRSLT EXT O2AS,ODAD1,ODAD2,OEILP,ONDUP EXT OPNDN,OPNNL,OTINS,OTND1 EXT OTND2,PASSF,PASSL EXT RSLT1,RSLT2,RSLTZ EXT RST13,RST23,SLIN,STDAM,STDCP EXT STELP,STKP,STSTN,SWBF1,SWRT EXT TECNT,TRYN,TSTLP,TSTN EXT WDFLG,WDIN,WDIN2,WDOU2 EXT WDOUT,WRDS * * * INSTRUCTION DEFINITIONS * MIC RST,105006B,0 BOX RESET MIC PRT,105010B,0 MPP PORTB X-Y * SUP * * SKP * CONSTANTS * ASC0 OCT 60 BLNK2 ASC 1, MSGND ASC 1,/ NEG1 DEC -1 POS1 DEC 1 POS2 DEC 2 POS3 DEC 3 POS4 DEC 4 POS5 DEC 5 POS7 DEC 7 POS15 DEC 15 UBLNK OCT 20000 * * * VARIABLES * EBASE OCT 0 ERROR BASE FLAG1 BSS 1 FLAG FOR PRINT FMTS, MICRO FCTN TYPE, ETC. WRDSL BSS 1 * * * * PPER1 DEF OPER1 PPER2 DEF OPER2 PPER3 DEF OPER3 PPER4 DEF OPER4 PPER5 DEF OPER5 PPER6 DEF OPER6 PPER7 DEF OPER7 PPER8 DEF OPER8 * * * * ASCII DATA BUFFERS * * OPER1 ASC 28,EXXX XXXX X WD OPCODE= XXXXXX ASC 6, / OPER2 ASC 28,INSTRUCTION: X WD XXXX OPCODE XXXXXX ASC 2, / OPER3 ASC 28,1ST OPERAND XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX ASC 9,XXXXXX XXXXXX OPER4 ASC 28,2ND OPERAND XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX ASC 2, / OPER5 ASC 28,ACTUAL RESULT XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX ASC 8,XXXXXX XXXXXX OPER6 ASC 28,ACTUAL OVERFLOW X ASC 2, / OPER7 ASC 28,EXPECTED RESULT XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX ASC 8,XXXXXX XXXXXX / OPER8 ASC 28,EXPECTED OVFLW X ASC 2, / OPER9 ASC 2, / * * * * * * ACER1 ASC 28,BUFR1 ASC 8, ASC 1,/ ACER2 ASC 28,BUFR2 ASC 8, ASC 1,/ ACER3 ASC 28,BUFR3 ASC 8, ASC 1,/ ACER4 ASC 28,BUFR4 ASC 8, ASC 1,/ ACER5 ASC 28,BUFR5 ASC 8, ASC 1,/ ACER6 ASC 28,BUFR6 ASC 8, ASC 1,/ * ACER7 ASC 28,OPND1 ASC 4, ASC 1,/ ACER8 ASC 28,OPND2 ASC 4, ASC 1,/ ACER9 ASC 28,OPND3 ASC 4, ASC 1,/ ACE10 ASC 28,OPND4 ASC 4, ASC 1,/ ACE11 ASC 28,OPND5 ASC 4, ASC 1,/ ACE12 ASC 28,OPND6 ASC 4, ASC 1,/ * ACE13 ASC 28,ANSW1 ASC 4, ASC 1,/ ACE14 ASC 28,ANSW2 ASC 4, ASC 1,/ ACE15 ASC 28,RSLT1 ASC 4, ASC 1,/ ACE16 ASC 28,RSLT2 ASC 4, ASC 1,/ * * * * * * * * * * SKP * *ROUTINE TO REPORT HFP FAILURES VIA HALTS AND OR A CRT *ON ENTRY A=OPN #-1, IE 0 FOR DIRECT, 1 FOR IND 2, 2 FOR BIT 7 *A,B,E DESTROYED * *SWRANS WRANS NOP WRSET RST RESET BOX, (MPP1) NOP IN CASE ITS AN "E" STA TRYN SAVE TRY # ISZ ERCNT INC COUNT OF ERRORS NOP ISZ TECNT ERRORS THIS TEST NOP CLA JSB SKNF1 IF NOT ASMD, NO INSTR ADJ. ABS A.DB LDA TRYN IF ASMD, TRYN TO MODIFY INSTR CLE,ERA IF =2, SET BIT 7 CPA POS1 ADA PS127 ADA INSTR PUT INSTRUCTION CODE IN BUFFER STA OTINS LDB PPER1 PUT INSTR IN OUTPUT BUFFER ADB POS16 CLE JSB O2AS,I LDA WRDS PUT #WORDS IN OUTPUT BUFFER ADA ASC0 ADA UBLNK LDB IC IF #WRDS=0, AND IC(0)=0, TERMINATE E MSG SLB,RSS LDB WRDS SZB,RSS LDA MSGND LDB PPER1 GET ADDR OF WORDS IN BUFFER ADB POS5 STA B,I JSB STRFN PUT OPERATION MNEMONIC IN OUTPUT BUFFER JSB STHLT SET UP HALT CODE IN BUFFER * LDA MSGND NORMALLY PUT TERM AFTER #WORDS LDB IC IF LSB SET, PUT OPND IDENT IN BUFFER, PRINT OPCODE SLB,RSS JMP WRNDE JSB OPDID LDA BLNK2 NO TERM AFTER #WORDS IN E MSG WRNDE LDB PPER1 PUT TERM OR BLNK AFTER #WORDS IN E MSG ADB POS8 STA B,I * * * LDA NEG22 CLEAR ERROR REPORT BUFFERS STA WRCNT CLA LDB OTND1 FROM OTND1 THRU AOVFL CLRBF STA B,I INB ISZ WRCNT IF CNT=0, DONE JMP CLRBF * JSB SKF1 IF NO OPNDS, DONT MOVE INTO BUFFER ABS OD1B+OD2B JMP WRATR LDA ODAD1 MOVE IST OPND IN LDB OTND1 MVW WDIN LDA ODAD2 2ND OPND LDB OTND2 MVW WDIN2 WRATR LDA TRYN EXPECTED ANSWER CLE,ERA A= 1 FOR BIT 7 ADA ANSWZ LDA A,I LDB ERSLT MVW WDOUT LDA TRYN EXPECTED OVERFLOW CLE,ERA ADA ANSWZ LDA A,I ADA POS5 LDA A,I STA EOVFL LDA TRYN HFP RESULT ADA RSLTZ LDA A,I A= ANSWER ADDR LDB ARSLT MVW WDOUT LDA RSLTZ HFP OVERFLOW ADA TRYN LDA A,I ADA POS5 LDA A,I STA AOVFL * JSB OPERR GO TO ERROR ROUTINE-- LOAD UP BUFFERS WITH ASCII * WRAST RSS NORMALLY PRINT LONG MESSAGE JMP WRASH JSB SKNF1 DETERMINE PRINT FORMAT ABS ACCB TEST FOR ACC. TYPE FMT JMP WRACT YES, TEST FURTHER * JSB SKF1 IF NO OPNDS, USE MINI ACC. FORM ABS OD1B+OD2B JMP WRPAC JSB SKNF1 NOW FOR THE 1 OPND ONES ABS OD1B JMP WRP1O JSB ERMS,I PRINT MESSAGES & RESULTS DEF OPER1,I DEF OPER3,I DEF OPER4,I DEF OPER7,I DEF OPER5,I DEF OPER9 JMP WRCNF WRP1O JSB ERMS,I ONLY 1 OPERAND DEF OPER1,I DEF OPER3,I DEF OPER7,I DEF OPER5,I DEF OPER9 JMP WRCNF * WRACT LDA IC TEST FOR BUFFER PRINTING SLA JMP WRACB YES, WE DO WRPAC JSB ERMS,I NO OPERANDS DEF OPER1,I DEF OPER7,I DEF OPER5,I DEF OPER9 JMP WRCNF * WRACB JSB ACBLD LOAD UP ACC. BUFFERS JSB ERMS,I PRINT ERROR MESSAGE, ACC. BUFFERS DEF OPER1,I DEF OPER9,I DEF ACER1,I DEF ACER2,I DEF ACER3,I DEF ACER4,I DEF ACER5,I DEF ACER6,I DEF BLKLN,I DEF ACER7,I DEF ACER8,I DEF ACER9,I DEF ACE10,I DEF ACE11,I DEF ACE12,I DEF BLKLN,I DEF ACE13,I DEF ACE15,I DEF ACE14,I DEF ACE16,I DEF BLKLN JMP WRCNF CHECK CONF. * WRCNF JSB CWCHK TEST CW, SET PARMS JSB CWCNF SET PARMS UNCOND. LDA IC IF BIT 12 OF CW SET, SET TO LOOP MODE SLA,RSS BUT IF BIT0=0, NO CHANCE JMP WRANS,I AND BIT12 SZA,RSS JMP WRANS,I ELSE RETURN CLA STA STELP SET RSS'S TO NOPS STA ACELP STA DIELP JMP WRANS,I NOW RETURN * WRASH JSB ERMS,I JUST REPORT 1ST LINE DEF OPER1 JMP WRCNF TEST CONFIGURATION * *LWRANS * BIT12 OCT 10000 POS16 DEC 16 PS127 DEC 127 BLKLN ASC 1, / NEG22 DEC -22 WRCNT BSS 1 *EWRANS * * * * * * SKP * * * * ROUTINE TO CALCULATE OPERAND IDENTIFIER FOR ASMDXT ROUTINES * * ALSO STORES SUBTEST#, AND LOG. PASS COUNT * * * * MODIFIES A,B,E * * *SOPDID OPDID NOP LDA OPNDN OPND IDENT. CLE FORM ASCII LDB PPER1 ADB POS20 PUT IN BUFFER AFTER INSTR JSB O2AS,I * LDA STSTN PUT SUB TEST IN AFTER IDENT LDB PPER1 ADB POS24 JSB O2AS,I * LDA PASSL AND LOG. PASS# INA LDB PPER1 ADB POS28 JSB O2AS,I * LDA MSGND LDB PPER1 ADB POS32 PUT TERM. CHAR IN BUFFER AFTER IT STA B,I JMP OPDID,I * *LOPDID * POS20 DEC 20 POS24 DEC 24 POS28 DEC 28 POS32 DEC 32 *EOPDID * * SKP * * ROUTINE TO LOAD UP ACCUMULATOR BUFFERS WITH OPNDS,RSLTS * * *S ACBLD NOP * JSB LDBFR LOAD UP BUFFERS WITH OPERANDS AND RESULTS DEF SWBF1+0,I DEF ACER1+4 DEF SWBF1+1,I DEF ACER2+4 DEF SWBF1+2,I DEF ACER3+4 DEF SWBF1+3,I DEF ACER4+4 DEF SWBF1+4,I DEF ACER5+4 DEF SWBF1+5,I DEF ACER6+4 DEF ACOP1+0 DEF ACER7+4 DEF ACOD1+0 DEF ACER7+8 DEF ACOP2+0 DEF ACER8+4 DEF ACOD2+0 DEF ACER8+8 DEF ACOP3+0 DEF ACER9+4 DEF ACOD3+0 DEF ACER9+8 DEF ACOP4+0 DEF ACE10+4 DEF ACOD4+0 DEF ACE10+8 DEF ACOP5+0 DEF ACE11+4 DEF ACOD5+0 DEF ACE11+8 DEF ACOP6+0 DEF ACE12+4 DEF ACOD6+0 DEF ACE12+8 DEF ANSW1+0 DEF ACE13+4 DEF ANS13+0 DEF ACE13+8 DEF ANSW2+0 DEF ACE14+4 DEF ANS23+0 DEF ACE14+8 DEF RSLT1+0 DEF ACE15+4 DEF RST13+0 DEF ACE15+8 DEF RSLT2+0 DEF ACE16+4 DEF RST23+0 DEF ACE16+8 OCT 0 TERMINATOR * JMP ACBLD,I DONE * * * * SKP * * * ROUTINE TO LOAD UP ASCII BUFFER WITH NUMBERS * * CALLING SEQ: JSB LDBFR * DEF NUM1 * DEF BUF1 * DEF NUM2 * DEF BUF2 * . * . * OCT 0 * * WHERE NUMX IS ADDR OF 1ST NUMBER TO GO IN BUFFER (CAN BE INDIRECT) * AND BUFX IS ADDR OF 1ST BUFFER LOCATION, DIRECT ONLY * STOPS LOADING NUMBERS WHEN A "/ " IS REACHED IN THE BUFFER * *S LDBFR NOP LDBLP LDA LDBFR GET ADDR OF 1ST #, CHECK FOR IND. LDA A,I RAL,CLE,SLA,ERA IF SIGN BIT CLEAR, GO ON JMP *-2 ELSE LOOP AGAIN ISZ LDBFR INC POINTER SZA,RSS IF ADDR=0,RETURN JMP LDBFR,I LDB LDBFR,I B=BUFFER ADDR ISZ LDBFR INC POINTER AGAIN STA LDBP1 SAVE POINTER TO # LINLP STB LDBP2 SAVE BUFFER POINTER LDB B,I TEST BUFFER FOR "/ " CPB MSGND JMP LDBLP IF SO, GO TO NEXT BUFFER LDA LDBP1,I A=NUMBER LDB LDBP2 B=ADDR IN BUFFER JSB O2AS,I CONVERT TO ASCII ISZ LDBP1 TMPA POINTS TO NEXT # LDB LDBP2 ADVANCE 4 WORDS IN BUFFER ADB POS4 JMP LINLP TRY NEXT # * LDBP1 BSS 1 LDBP2 BSS 1 * * SKP * * * * * ROUTINE TO GET OPND FOR TSTMN * *SOPDIN OPDIN NOP JSB MSGIN SEND & GET # DEF MAWDS "#WORDS" JSB ASCNV CONV TO OCTAL STA STKP,I PUT IN BUFFER STA WDIN ISZ STKP LDB A B=#WORDS LDA ACOPI GET OPND ADDR AND POS7 ONLY 8 POSSIBLE ADA ACOPZ BASE ADDR LDA A,I STA STKP,I STA OPTR SAVE POINTER ISZ STKP SZB,RSS IF #WORDS=0, RETURN JMP OPDIN,I ISZ ACOPI INC OPND PTR CLA GET 1ST WORD STA OPDCT WORD COUNTER OPDIL ISZ OPDCT LDA ASC0 PUT WORD # IN BUFFER ADA OPDCT LDB DAWRD ADB POS2 STA B,I JSB MSGIN SEND MSG, GET WORD DAWRD DEF MAWRD "WORD X" JSB ASCNV GET OCTAL STA OPTR,I PUT IN OPND BUFFER ISZ OPTR LDA OPDCT IF CNT=#WORDS, DONE CPA WDIN JMP OPDIN,I DONE JMP OPDIL * *LOPDIN * MAWDS ASC 6,NWORDS: _ / MAWRD ASC 6,WORD : _ / OPTR BSS 1 OPDCT BSS 1 *EOPDIN * * * * * ROUTINE TO OUTPUT MESSAGE AND READ FROM CONSOLE * ON ENTRY, B REG=ADDR OF MESSAGE, * ON EXIT A REG=#CHARS RETURNED STARTING AT INBUF * *SMSGIN MSGIN NOP LDA BLNK2 CLEAR INPUT BUFFER STA INBUF STA INBUF+1 STA INBUF+2 STA INBUF+3 LDA MSGIN,I ADDR OF ASCII BUFFER STA *+2 PUT ADDR AFTER JSB JSB MSGC,I SEND MESSAGE BSS 1 LDA POS7 7 CHARS MAX LDB INBUZ BUFFER ADDR JSB SLIN,I GET INPUT ISZ MSGIN POINT TO RETURN POINT JMP MSGIN,I RETURN * * * SKP *S * ROUTINE TO PRINT ACC. BUFFERS FOR TSTMN * ACPRT NOP JSB MSGC,I DEF ACER1,I DEF ACER2,I DEF ACER3,I DEF ACER4,I DEF ACER5,I DEF ACER6,I DEF ACER7,I DEF ACER8,I DEF ACER9,I DEF ACE10,I DEF ACE11,I DEF ACE12,I DEF ACE13,I DEF ACE15,I DEF ACE14,I DEF ACE16,I DEF BLKLN * JMP ACPRT,I * * * ROUTINE TO CONVERT FROM ASCII STRING IN INBUF, TO OCTAL=> A REG * *S ASCNV NOP CCA,CLE START WITH UPPER BYTE, OCTAL LDB INBUZ JSB AS2N,I CONF. ROUTINE JMP ASCNV,I THATS IT! * * * * * SKP * * * SUBR TO SET UP NUMBERS FOR ERROR MESSAGES * CLEARS BUFFERS AND LOADS IN OPNDS,RESULTS, AND CALLS ERMS * *SOPERR OPERR NOP * JSB SKNF1 IF ACC. OPN, NO OPERANDS ABS ACCB JMP LDRST * JSB SKF1 IF NO OPNDS, DONT LOAD BUFFERS ABS OD1B+OD2B JMP LDRST LDA WDIN SET UP NUMBER OF INPUT WORDS STA WRDSL LDA OTND1 LOAD ASCII OF 1ST OPND LDB PPER3 GET BUF ADDR ADB POS8 STB OPEAS JSB STROP DEF OPEAS * JSB SKF1 TEST FOR OVFL PRESET ABS OVFB JMP OPOXT IF NOT, TEST FOR EXT LDA OEILP GET LSB OF PARM AND BIT0 JSB STRFG PUT VALUE IN OPND1 BUFFER DEF ASCOF DEF OPEAS OPOXT JSB SKF1 TEST FOR EXT PRESET ABS EXTB JMP OPOIT IF NOT TEST FOR INDS LDA OEILP GET PARM RAR AND BIT0 JSB STRFG PUT IN BUF DEF ASCXT DEF OPEAS OPOIT JSB SKF1 TEST FOR INDS ABS INDB JMP OPEO2 GO ON TO 2ND OPND LDA INDCT JSB STRFG PUT IN BUF DEF ASCID DEF OPEAS OPEO2 LDA OTND2 2ND OPERAND LDB PPER4 ADB POS8 STB OPEAS JSB STROP DEF OPEAS LDRST LDA WDOUT SET UP NUMBER OF OUTPUT WORDS STA WRDSL LDB PPER5 ADB POS8 STB OPEAS JSB SKF1 TEST FOR RSLT PRINT ABS RT1B JMP OPAOV NO, CHECK FOR OVFLW LDA ARSLT A=RSLT ADDR JSB STROP DEF OPEAS OPAOV JSB SKF1 TEST FOR OVFL PRINT ABS OVFB JMP OPAXT LDA AOVFL AND BIT0 ONLY LSB JSB STRFG DEF ASCOF DEF OPEAS * OPAXT JSB SKF1 TEST FOR EXT PARM ABS EXTB JMP OPART LDA AOVFL GET EXTEND BIT RAR AND BIT0 JSB STRFG DEF ASCXT DEF OPEAS * OPART JSB SKF1 TEST FOR RTN PARM ABS RTNB IF NO RTN PARM GO TO NEXT SECTION JMP OPEED LDA AOVFL RTN=UPPER 8 BITS ALF,ALF AND LWBYT JSB STRFG DEF ASCRT DEF OPEAS * * OPEED LDB PPER7 ADB POS8 STB OPEAS SAVE ADDR JSB SKF1 CHECK FOR RSLT PRINT ABS RT1B JMP OPEOV LDA ERSLT A=RSLT ADDR JSB STROP DEF OPEAS OPEOV JSB SKF1 TEST FOR OVFLW PRINTING ABS OVFB JMP OPEXT TEST FOR EXT LDA EOVFL AND BIT0 JSB STRFG DEF ASCOF DEF OPEAS * OPEXT JSB SKF1 TEST FOR E BIT PRINT ABS EXTB JMP OPERT TEST FOR RTN LDA EOVFL GET E BIT RAR AND BIT0 JSB STRFG DEF ASCXT DEF OPEAS * OPERT JSB SKF1 ABS RTNB IF NO RTN PARM, GO ON JMP OPEND LDA EOVFL GET RETURN PARM ALF,ALF AND LWBYT JSB STRFG DEF ASCRT DEF OPEAS * * OPEND JMP OPERR,I * * *LOPERR * BIT0 OCT 1 POS8 DEC 8 LWBYT OCT 377 * ASCOF ASC 2,OVF= ASCXT ASC 2,EXT= ASCRT ASC 2,RTN= ASCID ASC 2,IND= OPEAS BSS 1 SAVE FOR BUF ADDR *EOPERR * SKP * SUBR TO STORE N WORDS IN BUFFER, * ENTRY: A=FROM ADDR * JSB STROP * DEF TO POINTER TO TO ADDR, WHICH IS ADJUSTED UP BY N WORDS * N TAKEN FROM WRDSL * *SSTROP STROP NOP STA STRSA SAVE ADDR OF NUMBERS LDB STROP,I GET DEST ADDR STB STRBS SAVE POINTER LDB B,I LDA WRDSL CMA,CLE,INA STA STRCT SET CNT= -#WORDS STRLP STB STRBS,I SAVE CURRENT POINTER LDA STRSA,I STORE NUMBER JSB O2AS,I ISZ STRSA GET NEXT NUMBER LDB STRBS,I GET NEXT LOCATION ADB POS4 ISZ STRCT TEST FOR DONE JMP STRLP NO -- PROCESS NEXT WORD LDA MSGND PUT TERM. CHAR AFTER BUFFER STA B,I STB STRBS,I SAVE BUF POINTER ISZ STROP GET RTN ADDR JMP STROP,I PULL ANCHOR & SET THE MIZZEN * STRCT BSS 1 STRSA BSS 1 STRBS BSS 1 * * SKP *SSTRFG * SUBROUTINE TO PUT FLAG, INCL. ASCII NAME IN OUTPUT BUFFER * ENTRY: A=FLAG * JSB STRFG * DEF ASCII NAME (2 WRDS) * DEF BUF POINTER, WHICH CONTAINS ADDR INTO OUTPUT BUFFER * * EXIT: BUF POINTER=OLD+4 * STRFG NOP STA STRFS LDA STRFG,I GET ASC. DESCR. ISZ STRFG GET BUF POINTER LDB STRFG,I STB STRAS SAVE ADDR LDB B,I GET POINTER MVW POS2 TRANSFER DESCR. TO BUFFER LDA STRFS GET FLAG ADA ASC0 CONVERT TI ASCII ADA UBLNK STA B,I PUT IN BUFFER ADB POS2 ADVANCE POINTER STB STRAS,I SAVE UPDATED BUF POINTER LDA MSGND PUT TERM. CHAR AFTER BUFFER STA B,I ISZ STRFG RET. ADDR JMP STRFG,I * STRFS BSS 1 STRAS BSS 1 * * * SKP * SUBR TO PUT ASCII OF ERROR CODE IN A BUFFER * * *SSTHLT STHLT NOP * JSB SKF1 IF ASMDXT, COMPUTE ECODE ABS A.DB+FIXB+FLTB JMP STHLD * ECODE=TRYN*4+WRDS-2 LDA TRYN ALR,ALR ADA WRDS ADA NEG2 USE WRDS-2 STA ECODE STHLD LDA ETYPE NOW MAKE ASCII ADA ASC0 ADA UPE UPPER BYTE="E" STA PPER1,I PUT IN ERROR BUFFER LDA ECODE NOW FOR ERROR CODE ADA EBASE ADD IN BASE LDB A B=SAME AND POS7 ADA ASC0 BRS,BRS BRS ADB ASC0 BLF,BLF MOVE TO UPPER BYTE ADA B PUT IN A TOO LDB PPER1 GET ADDR INB STA B,I PUT ASCII OF ERROR IN BUFFER JMP STHLT,I NOW WE CAN RELAX * *LSTHLT * NEG2 DEC -2 UPE OCT 42400 BT0.7 OCT 377 ETYPE BSS 1 ERROR CODE TYPE *ESTHLT * * SKP * * SUBR TO STORE MNEMONIC OF OPERATION IN BUFFER * BR= ADDR OF BUFFER, TSTN IS USED AS INDEX * *S STRFN NOP LDB PPER1 GET INSTR MNEMONIC ADDR ADB POS3 STB STRBP SAVE ADDR OF BUFFER LDA ASCTX STORE FUNCTION NAME IN BUFFER ADA TSTN LDA A,I LDB STSTN GET OFFSET FROM BUFF ADDR, IN CASE IND. ADB B 2 WORDS RAL,CLE,SLA,ERA SKIP IF NOT IND,IF SO CLEAR BIT 15 ADA B ADD IN OFFSET LDB A,I B=1ST WORD STB STRBP,I PUT IN BUFFER INA NEXT WORD TOO LDB A,I ISZ STRBP STB STRBP,I JMP STRFN,I JIBE HO! * STRBP BSS 1 * * * ASCII DATA BUFFER POINTERS * ASCTX DEF *+2 INDEX ON TSTN, THEN SFCTN DEF ASCOV,I TSTBC DEF ASCXS FIXS DEF ASCXD FIXD DEF ASCTS FLTS DEF ASCTD FLTD DEF ASCAD ADD DEF ASCSB SUB DEF ASCMP MPY DEF ASCDV DIV DEF ASCAC ACC DEF ASCS1,I SIS1 DEF ASCS2,I SIS2 DEF ASCS3,I SIS2 DEF ASCF1,I FFP1 DEF ASCF2,I FFP2 DEF ASCF3,I FFP1 DEF ASCMN MAN. ENTRY TEST * * * * ASCII FUNCTION NAMES * ASCAD ASC 2,ADD ASCSB ASC 2,SUB ASCMP ASC 2,MPY ASCDV ASC 2,DIV ASCXS ASC 2,FIXS ASCXD ASC 2,FIXD ASCTS ASC 2,FLTS ASCTD ASC 2,FLTD ASCAC ASC 2,ACC ASCMN ASC 2,MAN * ASCOV ASC 2,OVFL ASCRN ASC 2,RETN * * ASCS1 ASC 2,TAN ASC 2,ALOG ASC 2,ATAN ASC 2,COS ASC 2,SIN ASC 2,ALGT * ASCS2 ASC 2,SQRT ASC 2,EXP ASC 2,TANH * ASCS3 ASC 2,DPOL ASC 2,CMRT ASC 2,ATLG ASC 2,FPWR ASC 2,TPWR * * ASCF3 ASC 2,DAD ASC 2,DSB ASC 2,DMP ASC 2,DDI ASC 2,DSBR ASC 2,DDIR ASC 2,DIN ASC 2,DDE ASC 2,DIS ASC 2,DDS ASC 2,DNG ASC 2,DCO ASC 2,.BLE ASC 2,.NGL ASC 2,FCM ASC 2,TCM * ASCF1 ASC 2,DBLE ASC 2,SNGL ASC 2,DCM ASC 2,PWR2 ASC 2,FLUN ASC 2,PACK ASC 2,XPAK ASC 2,XCOM ASC 2,DDIN * ASCF2 ASC 2,DFER ASC 2,XFER ASC 2,CFER ASC 2,ENTR ASC 2,ENTP ASC 2,SETP ASC 2,GOTO ASC 2,MAP * * * * * * SKP *STINIT * ROUTINE TO INITALIZE PARAMETERS FOR ALL TESTS, ETC. * TINIT NOP CLA CLEAR OPNDN STA OPNDN STA ECODE STA EBASE STA ETYPE STA TSTLP LOOP COUNT STA OEILP OVF,EXT,IND PARM STA INDCT IND. COUNTER STA TRYN STA LPCNT SUB LOOP COUNT STA EVNOD STA OPNNL CLEAR LOG. OPN# STA STSTN STA TECNT ALSO TEST ERROR COUNT LDA POS1 SET LOWRD, HIWRD STA LOWRD LDA POS5 STA HIWRD LDA POS15 ALSO WDFLG STA WDFLG * * JSB RANFI INIT RANF FOR PASSL * * JSB CWCHK TEST & GET CW JSB CWCNF * JMP TINIT,I DONE * * SKP * * SUBROUTINE TO EXECUTE SUBTESTS IF SELECTED * CALLING SEQUENCE: JSB STSTE * OCT SHORT PASS SUBTESTS * DEF SUBTEST1,I * DEF SUBTEST2,I * ... * DEF SUBTESTN * * *S STSTE NOP CCA RESET SUBTEST CNTR STA STSTN LDA IST SET UP LOCAL COPY OF SUBTEST WORD SZA,RSS IF=0, SET TO ALL ONES CMA LDB PASSF =1 FOR SHORT PASS SZB IF SHORT PASS, AND WITH SUBTEST PARM AND STSTE,I RAL SHIFT ONCE FOR LOOP STA STESL SAVE IT ISZ STSTE POINT TO NEXT WORD STEL1 ISZ STSTN NOP * JSB CWCHK TEST & SET CONF. WORD JSB CWCNF JSB STSTI SET FLAG1 LDA STESL ROTATE POINTER RAR STA STESL CMA,SLA IF BIT NOT SET, NOT THIS SUBTEST JMP STENC NO, NOT THIS ONE LDA STSTE,I GET SUBTEST ADDR RAL,CLE,ERA MASK OFF IND. BIT (FLAG FOR MORE) JSB A,I * STENC LDA STSTE,I CHECK IND BIT FOR FURTHER TESTS ISZ STSTE SSA IF IND, GO AGAIN JMP STEL1 JMP STSTE,I ELSE DONE * STESL BSS 1 LOCAL VAR * * * * SKP * * ROUTINE TO SET FLAG1 FROM STSTN * ALSO WRDS, ETC. * *SSTSTI STSTI NOP LDA FLG1X INDEX OFF TSTN INTO FLAG LIST ADA TSTN LDA A,I RAL,CLE,SLA,ERA IF IND, INDEX OFF STSTN JMP *+2 JMP STST1 ADA STSTN LDA A,I NOW WE GOT IT * STST1 STA FLAG1 SAVE IT * CLA SET FIXFG,FLTFG JSB SKNF1 ABS FIXB CLA,INA IF SET, FLAG=1 STA FIXFG CLA NOW FOR FLTFG JSB SKNF1 ABS FLTB CLA,INA STA FLTFG * * JSB WDINI GET WRDS,ETC. JSB ERINI GET ECODES, EBASES. JSB STINI INIT RANDOM # GEN. JMP STSTI,I * *LSTSTI * * * * GENERAL FLAGS FOR TESTS, SUBTESTS * INDEX OFF TSTN, IF BIT15 SET, INDEX AGAIN BY SUBTEST * FLG1X DEF *+2 INDEX FOR FLAGS- FCTNS,OPNDS, ETC DEF BASF,I BASIC TEST ABS FIXB+INTB+OVFB+OD1B+RT1B FIXS ABS FIXB+INTB+OVFB+OD1B+RT1B FIXD ABS FLTB+INTB+OVFB+OD1B+RT1B FLTS ABS FLTB+INTB+OVFB+OD1B+RT1B FLTD ABS A.DB+OVFB+OD2B+RT1B ADD ABS A.DB+OVFB+OD2B+RT1B SUB ABS A.DB+OVFB+OD2B+RT1B MPY ABS A.DB+OVFB+OD2B+RT1B DIV ABS ACCB+OVFB+OD3B+RT2B ACC DEF SS1F,I SIS1 DEF SS2F,I SIS2 DEF SS3F,I SIS3, DP TRANS. DEF FF1F,I DBL INTS DEF FF2F,I FFP ARITH DEF FF3F,I FFP PARMS,ETC ABS ACCB+OVFB+OD3B+RT2B MAN. ENTRY * BASF ABS OVFB OVFL TEST ABS RTNB RETN TEST ABS 0 BUSY TEST ABS A.DB+OVFB+OD2B+RT1B ADD OPN ABS FIXB+INTB+OVFB+OD1B+RT1B FIXD OPN ABS SISB+OVFB+OD1B+RT1B TAN ABS SISB+OVFB+OD1B+RTNB SQRT * SS1F ABS SISB+OVFB+OD1B+RT1B+RTNB TAN ABS SISB+OVFB+OD1B+RT1B+RTNB ALOG ABS SISB+OVFB+OD1B+RT1B+RTNB ATAN ABS SISB+OVFB+OD1B+RT1B+RTNB COS ABS SISB+OVFB+OD1B+RT1B+RTNB SIN ABS SISB+OVFB+OD1B+RT1B+RTNB ALGT * SS2F ABS SISB+OVFB+OD1B+RT1B+RTNB SQRT ABS SISB+OVFB+OD1B+RT1B+RTNB EXP ABS SISB+OVFB+OD1B+RT1B+RTNB TANH * SS3F ABS SISB+OVFB+RT1B+RTNB+INDB /TRNL ABS SISB+OVFB+RT1B+RTNB+INDB /CMRT ABS SISB+OVFB+OD1B+RT1B+RTNB /ATLG ABS SISB+OVFB+OD2B+RT1B+RTNB+INDB .FPWR ABS SISB+OVFB+OD2B+RT1B+RTNB+INDB .TPWR * * FF3F ABS FFPB+INTB+OD2B+RT1B+OVFB+EXTB+RTNB+INDB DAD ABS FFPB+INTB+OD2B+RT1B+OVFB+EXTB+RTNB+INDB DSB ABS FFPB+INTB+OD2B+RT1B+OVFB+EXTB+RTNB+INDB DMP ABS FFPB+INTB+OD2B+RT1B+OVFB+EXTB+RTNB+INDB DDI ABS FFPB+INTB+OD2B+RT1B+OVFB+EXTB+RTNB+INDB DSBR ABS FFPB+INTB+OD2B+RT1B+OVFB+EXTB+RTNB+INDB DDIR ABS FFPB+INTB+OD1B+RT1B+OVFB+EXTB+RTNB DIN ABS FFPB+INTB+OD1B+RT1B+OVFB+EXTB+RTNB DDE ABS FFPB+INTB+OD1B+RT1B+OVFB+EXTB+RTNB+INDB DIS ABS FFPB+INTB+OD1B+RT1B+OVFB+EXTB+RTNB+INDB DDS ABS FFPB+INTB+OD1B+RT1B+OVFB+EXTB+RTNB DNG ABS FFPB+INTB+OD2B+EXTB+RTNB+INDB DCO * ABS FFPB+OD1B+RT1B+OVFB+RTNB+INDB .BLE ABS FFPB+OD1B+RT1B+OVFB+RTNB+INDB .NGL ABS FFPB+OD1B+RT1B+OVFB+RTNB ..FCM ABS FFPB+OD1B+RT1B+OVFB+RTNB+INDB ..TCM * * FF1F ABS FFPB+OD1B+RT1B+OVFB+RTNB DBLE ABS FFPB+OD1B+RT1B+OVFB+RTNB SNGL ABS FFPB+OD1B+RT1B+OVFB+RTNB ..DCM ABS FFPB+OD1B+RT1B+OVFB+RTNB .PWR2 ABS FFPB+OD1B+RT1B+OVFB+RTNB .FLUN ABS FFPB+OD1B+RT1B+OVFB+RTNB .PACK ABS FFPB+OD1B+RT1B+OVFB+RTNB .XPAK ABS FFPB+OD1B+RT1B+OVFB+RTNB .XCOM ABS FFPB+OD1B+RT1B+OVFB+RTNB DDINT * FF2F ABS FFPB+OD1B+RT1B+RTNB DFER ABS FFPB+OD1B+RT1B+RTNB XFER ABS FFPB+OD1B+RT1B+RTNB CFER ABS FFPB+OD3B+RT3B+RTNB .ENTR ABS FFPB+OD3B+RT3B+RTNB .ENTP ABS FFPB+OD3B+RT3B+RTNB .SETP ABS FFPB+OD3B+RTNB .GOTO ABS FFPB+OD3B+RT1B+RTNB ..MAP * * *ESTSTI * * SKP *S * ROUTINE TO INITAILIZE WRDS,ETC. FOR SUBTEST * USES WRDIX TABLE * WDINI NOP LDA WRDIX GET TABLE POINTER STA WIBFP SAVE LDA TSTN SET UP COUNT INA =COMPL OF TSTN -2, SINCE TSTBC IS=-1 WDIN1 CMA STA WICNT SAVE * WILP JSB WIPOP GET ENTRY IN TABLE INA,SZA,RSS TEST FOR NEG 1 JMP WICHK IF SO, USE LAST VALUES ADA NEG1 RESTORE A RAL,CLE,SLA,ERA IF IND, USE STSTN JMP WISCK IF TSTN MATCHES... STA WRDS VALID ENTRY, READ & SET PARMS CLA CLEAR NOPND,MRSLT STA NOPND STA NRSLT JSB WIPOP STA WDIN SZA,RSS IF=0, NEXT SECTION JMP WIRST ISZ NOPND INC OPND CNT JSB WIPOP STA WDIN2 SZA,RSS IF NOT 0, 1 MORE JMP WIRST ISZ NOPND JSB WIPOP INC POINTER * WIRST JSB WIPOP GET RSLT WRDS STA WDOUT SZA,RSS IF 0, NO MORE JMP WICHK ISZ NRSLT INC RSLT CNT JSB WIPOP STA WDOU2 2ND RSLT SZA,RSS IF NOT 0, 1 MORE JMP WICHK ISZ NRSLT JSB WIPOP * WICHK ISZ WICNT TEST COUNT FOR DONE JMP WILP NO JMP WDINI,I YES, DONE * WISCK ISZ WICNT TEST FOR TSTN MATCH JMP WILP NO.. CONTINUE STA WIBFP YES, NEW BUF POINTER LDA STSTN USE STSTN FOR COUNT JMP WDIN1 * * WIPOP NOP ROUTINE TO GET TABLE PARM, INC POINTER LDA WIBFP,I ISZ WIBFP JMP WIPOP,I THATS ALL * * * WICNT BSS 1 WIBFP BSS 1 * * * * TABLE FOR WRDS, WDIN,WDIN2,WDOUT,WDOU2 * *FORMAT- USE TSTN TO THREAD WRDIX: * 1ST WD= -1 MEANS USE PREVIOUS ENTRY * IF NEG, (NOT -1) TAKE AS DEF, THREAD BY STSTN * ELSE READ: WRDS,WDIN,,,WDOUT,, * WHERE <> MEANS PRESENT IF PRIOR WRD NOT=0 * * TABLE IS TRAVERSED UNTIL DESIRED ENTRY IS FOUND * (TSTN-STSTN MATCH). * * * WRDIX DEF *+1 INDEX FOR WORDS- WRDS,WDIN,..., WDOUT,... DEF BASWD,I BASIC TESTS DEC 2,2,0,1,0 FIXS DEC 2,2,0,2,0 FIXD DEC 2,1,0,2,0 FLTS DEC 2,2,0,2,0 FLTD DEC 2,2,2,0,2,0 ADD DEC -1 SUB DEC -1 MPY DEC -1 DIV DEC 0,0,0 ACC DEC 2,2,0,2,0 SIS1 DEC -1 SIS2 DEF SS3WD,I SIS3 DEF FF1WD,I FFP1 DEF FF2WD,I FFP2 DEF FF3WD,I FFP3 DEC 0,0,0 MAN * BASWD DEC 0,0,0 OVFL * SS3WD DEC 4,23,0,4,0 /TRNL DEC 4,13,0,4,0 /CMRT DEC 4,4,0,4,0 /ATLG DEC 2,2,2,0,2,0 .FPWR DEC 4,4,4,0,4,0 .TPWR * FF3WD DEC 2,2,2,0,2,0 .DAD DEC -1 .DSB DEC -1 .DMP DEC -1 .DDI DEC -1 .DSBR DEC -1 .DDIR DEC 2,2,0,2,0 .DIN DEC -1 .DDE DEC -1 .DIS DEC -1 .DDS DEC -1 .DNG DEC 2,2,2,0,2,0 .DCO * DEC 4,2,0,4,0 .BLE DEC 4,4,0,2,0 .NGL DEC 2,2,0,2,0 ..FCM DEC 4,4,0,4,0 ..TCM * * FF1WD DEC 3,2,0,3,0 DBLE DEC 3,3,0,2,0 SNGL DEC 3,3,0,3,0 ..DCM DEC 2,2,1,0,2,0 .PWR2 DEC 2,1,0,2,0 .FLUN DEC 2,2,1,0,2,0 .PACK DEC 3,1,3,0,3,0 .XPAK DEC 3,3,0,4,0 .XCOM DEC 3,3,0,3,0 DDINT * FF2WD DEC 3,3,0,2,3,0 .DFER DEC -1 .XFER DEC 4,4,0,2,4,0 .CFER DEC 0,0,0 .ENTR DEC -1 .ENTP DEC -1 .SETP DEC -1 .GOTO DEC -1 ..MAP * * * * * *S * ROUTINE TO INIT. ETYPE,ECODE,EBASE FOR ERROR REPORTINF * ERINI NOP LDA ETYPS SET ECODE ADA TSTN LDA A,I STA ETYPE * LDA EBASS SET EBASE ADA TSTN LDA A,I STA EBASE * LDA STSTN SET ECODE STA ECODE * JMP ERINI,I DONE * * * ETYPS DEF *+2 TYPE CODES FOR TEST ERRORS OCT 0 TSTBC OCT 1 FIXS OCT 1 FIXD OCT 1 FLTS OCT 1 FLTD OCT 2 ADD OCT 2 SUB OCT 2 MPY OCT 2 DIV OCT 3 ACC OCT 3 SIS 1 OCT 3 SIS 2 OCT 3 SIS 3 OCT 3 FFP 1 OCT 3 FFP 2 OCT 3 FFP 3 OCT 3 MAN ENTRY * * * EBASS DEF *+2 BASEERROR CODES FOR TEST ERRORS OCT 0 TSTBC, NOT USED OCT 0 FIXS OCT 14 FIXD OCT 30 FLTS OCT 44 FLTD OCT 0 ADD OCT 14 SUB OCT 30 MPY OCT 44 DIV OCT 0 ACC , SETS ITSELF OCT 10 SIS 1 OCT 16 SIS 2 OCT 21 SIS 3 OCT 30 FFP 1 OCT 0 FFP 2, SETS ITSELF OCT 50 FFP 3 OCT 0 MAN ENTRY SETS ITSELF * * * * * * SKP * ROUTINE TO INITIALIZE SUB TESTS-- CLEAR OPNDN * *S STINI NOP CLA STA OPNDN JSB RANFI INIT. RAND.# GEN. JMP STINI,I * * ROUTINE TO HANDLE LOGICAL PASS COUNT, CALLED FROM CNTL SECTION * PASSL IS DECREMENTED IF CW BIT 9 IS SET (ITS INC'D IN CNTL SECTION) * *S PASND NOP LDA IC CHECK CW BIT 9 AND BIT9 SZA,RSS IF NOT SET, JUST RETURN JMP PASND,I LDA PASSL IF SET, DEC IT, SINCE IT WAS INC'D ALREADY ADA NEG1 STA PASSL JMP PASND,I * BIT9 OCT 1000 * * * SKP * ROUTINE TO SET PASS FLAG FOR SHORT OR LONG PASSES, ALSO ONDUP * *SPASST PASST NOP * JSB SWRT,I GET SWREG (IN B) NOP DONT CARE LDA B * AND BIT8 IF BIT 8 SET, SHORT PASSES CPA PASSF IF SAME, DON'T CHANGE ANYTHING JMP PASST,I GO HOME STA PASSF ELSE SAVE NEW FLAG * JSB PRTCK CHECK FOR PORT MODE, TELL OP LDA PASSF GET FLAG SZA,RSS TEST FOR LONG PASSES JMP PSLNG LDA POS15 SHORT, SPACE BETWEEN OPNDS STA ONDUP LDA NEG64 STA ACLPS JSB MSGC,I TELL OPERATOR DEF MSGSP JMP PASST,I DONE * PSLNG LDA POS5 USE ALL OPNDS STA ONDUP LDA N1000 STA ACLPS JSB MSGC,I TELL OPERATOR DEF MSGLP "LONG" JMP PASST,I DONE NOW * *LPASST * NEG64 DEC -64 BIT8 OCT 400 MSGSP ASC 7,SHORT PASSES / MSGLP ASC 7,LONG PASSES / N1000 DEC -1000 *EPASST * SKP * * ROUTINE TO TEST FOR PORT TEST MODE, TELL OPERATOR * PRTCK NOP JSB SKNCW TEST CW BIT ABS PORTB JMP PRTC1 JMP PRTCK,I NO, JUST RETURN * PRTC1 JSB MSGC,I TELL OPERATOR DEF PRTMG JMP PRTCK,I DONE * PRTMG ASC 8,PORT TEST MODE / * * * * * SKP * ROUTINE TO SET PARAMETERS BASED ON CONFIGURATION WORD (CW) * * MODIFIES A,B,E * *SCWCHK CWCHK NOP * JSB SWRT,I GET SW INPUT NOP DON'T CARE JSB IFBRK TEST FOR BREAK OR SWREG BIT 7 DEF *+1 SZA,RSS IF NOT, RETURN JMP CWCHK,I JSB DNPUX IF SO, GET INPUTS DEF *+1 JSB CWCNF CONFIGURE JMP CWCHK,I DONE *LCWCHK * ICOLD BSS 1 *ECWCHK * *SCWCNF CWCNF NOP LDA IC GET CONF. WORD LDB POS1 SLA IF LSB SET, SET PRIV FLAG STB ICEN SLA,RSS IF BIT0=0, MASK OFF ALL BITS CLA RAR,RAR SET UP LOWRD STA TMPIC SAVE ROTATED WORD CMA BIT SET FOR EXECUTION AND POS15 ONLY WORD BITS STA WDFLG SAVE IN FLAG WORD CLB FIRST CLEAR LOWRD,HIWRD STB LOWRD STB HIWRD SLA,RAR IF BIT SET HIWRD=2 LDB POS2 SLA,RAR LDB POS3 SLA,RAR LDB POS4 SLA LDB POS5 STB HIWRD SLA,RAL NO BACK FOR LOWRD LDB POS4 SLA,RAL LDB POS3 SLA,RAL LDB POS2 SLA LDB POS1 STB LOWRD LDA TMPIC TEST FOR DIRECT OPNS RAR,RAR RAR,RAR STA TMPIC LDB RSS NORMALLY, PUT RSS IN LOCS SLA CLB IF BIT SET, USE NOPS STB A.D21 STB A.D31 STB FIX21 STB FIX31 STB FLT21 STB FLT31 STB CPAN1 * LDA TMPIC SIMILARLY FOR BIT7, INDIRECTS RAR STA TMPIC LDB RSS SLA CLB STB A.D22 STB A.D32 STB FIX22 STB FIX32 STB FLT22 STB FLT32 STB CPAN2 * LDA TMPIC AND FOR BIT 8, THE 3RD OPERATION RAR STA TMPIC LDB RSS SLA CLB STB A.D23 STB A.D33 STB FIX23 STB FIX33 STB FLT23 STB FLT33 STB CPAN3 STB ACBT7 * * LDA TMPIC IF BIT 9 SET, OPNDS WON'T VARY FROM PASS TO PASS RAR STA TMPIC NOT DONE HERE, SEE PASND * * * * * LDA TMPIC BIT 10, TEST FOR SHORT ERROR MESSAGES RAR STA TMPIC LDB RSS SLA CLB STB WRAST * LDA TMPIC BIT11, IF SET DON'T COMPARE HW & SW ANSWERS RAR STA TMPIC LDB RSS NORMALLY RSS= COMPARE SLA CLB STB STDCP ASMDXT COMPARE STB ACCCP ACC. OPNS STB DIECP OTHER TESTS * * * LDA TMPIC TEST FOR BIT 12 CLEAR RAR STA TMPIC SLA IF SET, DON'T DO ANYTHING JMP CWCN1 LDB RSS IF CLEAR, STOP LOOPS STB STELP STB ACELP STB DIELP * CWCN1 LDA TMPIC TEST FOR DIPLAY ALL OPNS- BIT 13 RAR STA TMPIC RAL,RAL WANT OR OF BITS 11&13 IOR TMPIC LDB RSS NORM. RSS SLA IF EITHER BIT SET, NOP CLB STB STDCP STB ACCCP STB DIECP * LDA TMPIC BIT 14, PORT TEST MODE RAR STA TMPIC SLA,RSS IF NOT SET, RTN JMP CWCN2 LDA BT7.F ONLY EXECUTE TESTS 0-7 STA STDAM CLA CLEAR STDCP, IE SPECIAL STA STDCP * LDX PRTPM SET UP PORT PARM PRT SEND TO CARD * CWCN2 LDA TMPIC OTA IC OR IS DEP. ON BIT15 RAR STA TMPIC LDB IC SLA,RSS IF BIT15 SET SWR=IC LDB IS OTB SW * JMP CWCNF,I DONE * *LCWCNF * BT7.F OCT 177400 * RSS RSS * PRTPM DEC 128 PORT PARM TMPIC BSS 1 *ECWCNF * SKP *S * ROUTINE TO CHECK CONF WORD FOR BITS SET, AND SKIP IN NONE ARE * * ENTRY: JSB SKNCW * ABS BITS TO TEST * * SAVES A,B,E,0 * SKNCW NOP STA SKNCA SAVE A LDA IC IF LSB=0, CLEAR SLA,RSS CLA AND SKNCW,I AND WITH MASK ISZ SKNCW =1ST RTN SZA,RSS IF NONE SET, INC RTN ISZ SKNCW LDA SKNCA GET A JMP SKNCW,I DONE * SKNCA BSS 1 * * * * * * * SKP * * ROUTINE TO INIT. RANF FOR PASSL (EXEC. PASSL TIMES) * *S RANFI NOP LDA SEED SET UP START PARM STA LAST LDA PASSL CMA,INA,SZA,RSS IF=0, DONE JMP RANFI,I STA RANCT JSB RANF DO IT ISZ RANCT CHECK IF DONE JMP *-2 NO JMP RANFI,I YES * RANCT BSS 1 * * * SKP *SRANF RANF NOP RANF1 CLA SET SHIFT COUNT STA RFCNT LDA LAST GENERATE A NEW 30-BIT RANDOM NUMBER MPY SEED RRR 3 STA LAST RRL 6 * * LEFT-JUSTIFY NUMBER IN (B,A) * ELB,CLE,ERB CLEAR SIGN SZB,RSS JMP RANF3 IF B=0, RESTART SEQUENCE RANF2 RRL 1 ISZ RFCNT SSB,RSS JMP RANF2 RRR 1 HIGH BIT IS IN B<14> * AND UPBYT CLEAR EXPONENT FIELD * STA TMPRF SAVE * * INSERT EXPONENT = - SHIFT COUNT * LDA RFCNT SHIFT COUNT + 1 CMA,INA EXP - 1 INA EXP * RAL FORMAT IT * AND LWBYT * IOR TMPRF INSERT INTO NUMBER * RRR 16 SWITCH A,B JMP RANF,I EXIT * * SEQUENCE HAS DEGENERATED, RESTART IT * RANF3 LDA SEED STA LAST ISZ RSCNT TALLY JMP RANF1 JMP RANF1 * *LRANF * SEED OCT 62207 RANF SEED=PI/4 LAST BSS 1 RFCNT BSS 1 RANF COUNT RSCNT BSS 1 RANF RESET COUNT *ERANF * SKP * *S * ROUTINE TO TEST FLAG1 FOR BITS SET, AND SKIP IF NONE ARE * * ENTRY: JSB SKNF1 * ABS BITS TO TEST * * PRESERVES A,B,E,O! * SKNF1 NOP STA SKNFA SAVE A LDA SKNF1,I GET MASK ISZ SKNF1 =RTN AND FLAG1 ONLY MASK BITS SZA,RSS IF NONE SET, INC RTN ISZ SKNF1 LDA SKNFA GET A JMP SKNF1,I DONE * SKNFA BSS 1 * * *S * ROUTINE TO TEST FLAG1 FOR BITS SET, AND SKIP IF ANY ARE * * ENTRY: JSB SKF1 * ABS BITS TO TEST * * PRESERVES A,B,E,O * SKF1 NOP STA SKFA SAVE A LDA SKF1,I GET MASK ISZ SKF1 =1ST RTN AND FLAG1 SZA IF ANY SET, INC RTN ISZ SKF1 LDA SKFA JMP SKF1,I DONE * SKFA BSS 1 * * * SKP *SGETPM * ROUTINE TO GET PARMS FOR SUBROUTINES * * ENTRY: JSB GETPM * DEF POINTER TO INPUT PARMS-- IE SUBR NOP * # OF PARMS TO GET * ADDR OF 1ST PARM * ... * ADDR OF NTH PARM * * ON EXIT, THE ADDRS GIVEN ARE STUFFED WITH THE VALUES * OF THE PARMS POINTED TO BY THE POINTER. * ALSO, THE POINTER IS INCREMENTED BY N. * NO CHECK IS DONE ON THE #PARMS, ETC. * GETPM NOP LDA GETPM,I GET POINTER STA GTPPT SAVE ISZ GETPM LDA GETPM,I GET #PARMS CMA,INA COMPL. STA GTPCT SAVE ISZ GETPM POINT TO NEXT PARAMETER GTPLP LDA GTPPT,I GET THE PARM LDA A,I LDB GETPM,I GET THE DEST ADDR STA B,I STUFF IT ISZ GTPPT,I INC POINTER ISZ GETPM POINT TO NEXT PARAMETER ISZ GTPCT INC CNT, CHECK FOR DONE JMP GTPLP NO, CONTINUE JMP GETPM,I YES, DONE * GTPCT BSS 1 GTPPT BSS 1 * * * SKP * ROUTINE TO PRINT DIAG. INFO MSGES IF CW BIT 1 NOT SET * CALL WITH JSB MSGI, DEF MSG. * *SMSGI MSGI NOP LDA MSGI,I GET ADDR OF MESSAGE STA DFMSI STORE FOLLOWING JSB MSGC ISZ MSGI POINT TO RETURN ADDR LDA IC CHECK FOR SEND RAR,SLA IF BIT1 OF CW SET, NO SEND JMP MSGI,I RETURN JSB MSGC,I SEND MESSAGE DFMSI BSS 1 JMP MSGI,I DONE * * * * ROUTINE TO PRINT DIAG. MSGS IF CW BIT 1 NOT SET, BUT PRIV. MODE * CALL WITH JSB MSGD, DEF MSG. * *S MSGD NOP LDA MSGD,I GET MSG ADDR STA DFMSD STORE ADDR AFTER JSB ISZ MSGD POINT TO RETN ADDR LDA IC TEST FOR PRINT SLA IF NOT PRIV, OR CW BIT1 SET, NO GO RAR,SLA JMP MSGD,I JSB MSGC,I SEND IT DFMSD BSS 1 JMP MSGD,I * * END