$CONTROL USLINIT,LIST,PRIVILEGED,MAP,CODE                      <<03727>>00010000
$TITLE "3000 CPU DIAGNOSTIC - ONLINE VERSION "                          00012000
BEGIN  << HP3000 CPU DIAGNOSTIC - ONLINE VERSION >>                     00014000
                                                                        00016000
                                                                        00018000
INTEGER INTSWREG:=%000000,<<INTERNAL SWITCH REGISTER>>                  00020000
      SECTIONSELECT:=0,<<SECTION SELECT REGISTER>>                      00022000
      VERSION:=%1000,                                                   00024000
      SECTIONNO:=2,<<SECTION 2>>                                        00026000
      SBANK:=0,                                                         00028000
      STEPNO:=0;                                                        00030000
INTEGER VAR0, VAR1, VAR2, VAR3, VAR4, VAR5, VAR6, VAR7;                 00032000
INTEGER                                                                 00034000
 DBANK:=0,                                                              00036000
      DLA := %1770,   << @DL >>                                         00038000
      DBA := %2000,   << @DB >>                                         00040000
      QA := %6500,   << @Q >>                                           00042000
      ZA := %7000,   << @Z >>                                           00044000
      PBA := %10000,  << @PB >>                                         00046000
      PBANK:=0,<<PB BANK>>                                              00048000
      CST3:=%1354,<<CSTS LOCATION FOR SEGMENT 3>>                       00050000
      PLA:=0,<<@PL>>                                                    00052000
      CSTA := %1340,  << @ CST TABLE >>                                 00054000
      SEGNO := %301 ,   << CODE NUMBER OF THIS SEGMENT >>               00056000
      DSTA:=%1500,  <<DATA SEGMENT TABLE ADDRESS >>                     00058000
      SAVQ,            << SAVE Q >>                                     00060000
      SAVS,            << SAVE S >>                                     00062000
      Q=Q,                                                              00064000
      Q1=Q-1,                                                           00066000
      S0=S-0,                                                           00068000
      S1=S-1,                                                           00070000
      S2=S-2,                                                           00072000
      S3=S-3,                                                           00074000
      X=X;                                                              00076000
INTEGER                                                                 00078000
      K0 := %000000,                                                    00080000
      P0 := %000000,                                                    00082000
      P1 := %000001,                                                    00084000
      M1 := %177777,                                                    00086000
      M2 := %177776,                                                    00088000
      M256 := %177400,                                                  00090000
      PMAX := %077777,                                                  00092000
      NMAX := %100000,                                                  00094000
      EVEN := %125252,                                                  00096000
      ODD := %052525,                                                   00098000
      BIT0 = NMAX,                                                      00100000
      BIT1 := %040000,                                                  00102000
      BIT5:=%2000,                                                      00104000
      BIT6 := %001000,                                                  00106000
      PAT402:=%402,                                                     00108000
      PAT1777 := %001777,                                               00110000
      PAT2500:=%2500,                                                   00112000
      PAT20020:=%20020,                                                 00114000
      PAT403:=%403,                                                     00116000
      PAT177401:=%177401,                                               00118000
      PAT177526:=%177526,                                               00120000
      PAT177653:=%177653,                                               00122000
      PAT377:=%377,                                                     00124000
      PAT252:=%252,                                                     00126000
      PAT125:=%125,                                                     00128000
      LB1 := %400,                                                      00130000
      LB2 := %1000,                                                     00132000
      LB3 := %1400,                                                     00134000
      ENDBITS1 := %100001,                                              00136000
      PAT40002:=%40002,                                                 00138000
      PATTERN:=0,                                                       00140000
      LOOPCTN:=0;                                                       00142000
                                                                        00144000
                                                                        00146000
INTEGER ARRAY IA1(0:4)=DB;                                              00148000
INTEGER ARRAY IA2(0:4)=DB:=-5,0,-3,2,4;                                 00150000
INTEGER I;   << REPEAT COUNTER >>                                       00152000
BYTE ARRAY BA1(0:9);                                                    00154000
BYTE ARRAY BA2(0:9):="ABCDE01234";                                      00156000
BYTE ARRAY BA3(0:9):="FGHIJ56789";                                      00158000
BYTE ARRAY AAAN(0:3):="ABC0";                                           00160000
BYTE ARRAY NNNA(0:3):="012A";                                           00162000
BYTE ARRAY LLLS(0:3):=%141, %171, %172, %173;                           00164000
BYTE ARRAY SS(0:1):="?]";                                               00166000
BYTE ARRAY ANANS(0:4):="A0B1?";                                         00168000
BYTE ARRAY BAA(0:5):="AAAAAB";                                          00170000
BYTE ARRAY BAN(0:4):="00001";                                           00172000
BYTE ARRAY BA9(0:9):="ABCD0123?";                                       00174000
BYTE ARRAY BA1'(0:5) =DB :="A0?B1]";                                    00176000
BYTE BA1BYTE2 = BA1'+1;                                                 00178000
BYTE BA1BYTE4 = BA1'+2;                                                 00180000
BYTE POINTER BPT1 := @BA1';                                             00182000
INTEGER ARRAY DST1(0:7)=DB:=8(%125252);                                 00184000
INTEGER ARRAY DST2(0:7)=DB:=8(%052525);                                 00186000
INTEGER ARRAY DST3(0:%1000):=%1000(0);                                  00188000
INTEGER ARRAY DST4(0:%1000):=%1000(%177777);                            00190000
                                                                        00192000
LOGICAL NO'ERROR:=TRUE;       << INSTRUCTION ERROR FLAG >>              00194000
INTEGER LOCATION:=0;          << LOCATION WHERE PRINT INST'NAME >>      00196000
INTEGER RE'ADDRS;             << RETURN ADDRESS FROM SUBROUTINE >>      00198000
INTEGER FNUM,ERRORNUM;                                                  00200000
BYTE ARRAY OUTPUTFILE(0:13) := "GUSEL.PUB.SYS ";               <<03727>>00202000
                                                                        00204000
BYTE ARRAY INSTRUCT'NAME(0:5);                                          00206000
BYTE ARRAY ERMSG(0:22):="*** INSTRUCTION FAILURE";                      00208000
LOGICAL ARRAY LMESSAGE(0:14):="CPU INSTRUCTION TEST";                   00210000
BYTE ARRAY BMESSAGE(*)=LMESSAGE;                                        00212000
LOGICAL BATCH, PASSCNT:=0, EXP'TRAP;                                    00214000
LOGICAL ARRAY HEADER(0:31):=                                   <<03727>>00216000
  "UPTIME VERIFIER V.UU.FF (C) HEWLETT-PACKARD CO. 1981";      <<04287>>00218000
$INCLUDE INCLVUF                                               <<04287>>00220000
EQUATE VUUFF'COL   =  8 ,                                      <<04287>>00222000
       HEADER'SIZE = -52;                                      <<04287>>00224000
                                                                        00226000
INTRINSIC PRINT,ASCII,XARITRAP,BINARY;                                  00228000
INTRINSIC FWRITE,PRINTFILEINFO,FOPEN,TERMINATE,FCHECK,FCLOSE,DATE'LINE, 00230000
          DEBUG;                                                        00232000
DEFINE                                                                  00234000
 CON10 = CON 0,0,0,0,0,0,0,0,0,0#,   << 10 NOP'S >>                     00236000
                                                                        00238000
HALTEND=INTSWREG.(15:1)#,                                               00240000
LOOPSWITCH=INTSWREG.(11:1)#,                                            00242000
SELECTREG=INTSWREG.(0:2)#,                                              00244000
HALTSTEP=INTSWREG.(13:1)#,                                              00246000
LOOPDEFEAT=SECTIONSELECT.(3:1)#;                                        00248000
                                                                        00250000
   LOGICAL PARM=Q-4;                                                    00252000
   EQUATE                                                               00254000
      LOOPNUMBER = %2000,                                               00256000
      CCG = 0,                                                          00258000
      CCL = 1,                                                          00260000
      CCE = 2;                                                          00262000
   DEFINE PUSHREGS =                                                    00264000
      PUSH( S, Q, X, STATUS, Z, DL)#;                                   00266000
   DEFINE SAVEREGS =                                                    00268000
      PUSHREGS;                                                         00270000
      EXP'DL := TOS;                                                    00272000
      EXP'Z := TOS;                                                     00274000
      EXP'STATUS := TOS;                                                00276000
      EXP'X := TOS;                                                     00278000
      EXP'Q := TOS;                                                     00280000
      EXP'S := TOS#;                                                    00282000
   DEFINE                                                               00284000
   READSWREG=ASSEMBLE(RSW); <<PICK UP SWITCH REGISTER>>                 00286000
             IF < THEN INTSWREG:=TOS ELSE DEL;#,                        00288000
   WARMSTARTEND=INTSWREG.(14:1)#;                                       00290000
   INTEGER EXP'DL, EXP'Z, EXP'STATUS, EXP'X, EXP'Q, EXP'S;              00292000
   BYTE ARRAY DATA(-4:44) :=                                            00294000
     "!!!!aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789%#,;!!!!";                00296000
   BYTE ARRAY DATA2(-4:45) :=                                           00298000
     "!!!!aBcDeFgHiJkLmNoPqRsTuVwXyZz0123456789%#,;!!!!";               00300000
   BYTE ARRAY BUF(-4:71);                                               00302000
   ARRAY WBUF(0:3);                                                     00304000
   BYTE ARRAY BLANKS(0:71) := 72(" ");                                  00306000
EQUATE  SYSGLOB       = %1000;                                          00308000
LOGICAL SYSLASTBANK   = DB + %361,                                      00310000
        SYSLASTOFFSET = DB + %362;                                      00312000
                                                                        00314000
EQUATE  TESTADDRU     = %2,                                             00316000
        TESTADDRL     = %177777,                                        00318000
        TESTADDRFIRST = SYSGLOB + %114,                                 00320000
        TESTVAL       = %177777;                                        00322000
DEFINE  TESTADDRLAST  = LASTOFFSET#;                                    00324000
   << DISC TEST DECLARATIONS >>                                         00326000
   EQUATE                                                               00328000
      VTABDST = %35,                                                    00330000
      LDTDST  = %16,                                                    00332000
      LPDTDST = %15,                                                    00334000
      VTABSIR = %26;                                                    00336000
   DEFINE                                                               00338000
      NRENTS   =    (0:8)#,                                             00340000
      ENTSIZE  =    (8:8)#;                                             00342000
   EQUATE                                                               00344000
      READ   = 0,                                                       00346000
      WRITE  = 1;                                                       00348000
   EQUATE  << ERROR MESSAGES >>                                         00350000
      NO'DISC'SPACE  = 1,                                               00352000
      DISCERR        = 2,                                               00354000
      COMPARERR      = 3;                                               00356000
   INTEGER NR'SYS'DISCS;                                                00358000
   INTEGER ARRAY DISC'LDEVS(0:255);                                     00360000
   INTEGER ARRAY LBUF(0:8191);                                          00362000
                                                                        00364000
   DEFINE MOVEFROMDSEG =                                                00366000
      SUBROUTINE MFDS( BUF, DST, DISP, LEN);                            00368000
         VALUE DST, DISP, LEN;                                          00370000
         ARRAY BUF;                                                     00372000
         INTEGER DST, DISP, LEN;                                        00374000
      BEGIN                                                             00376000
         X := TOS; << SAVE RETURN ADDRESS >>                            00378000
         ASSEMBLE( MFDS 0 );                                            00380000
         TOS := X; << REPLACE RETURN ADDRESS >>                         00382000
      END #;                                                            00384000
                                                                        00386000
EQUATE FILEFEED = %40,                                                  00388000
       UPPER    = %0,                                                   00390000
       LOWER    = %177777;                                              00392000
LOGICAL PROCEDURE SETSYSDB;                                             00394000
    OPTION EXTERNAL;                                                    00396000
PROCEDURE RESETDB (WHERE);                                              00398000
    VALUE WHERE;                                                        00400000
    INTEGER WHERE;                                                      00402000
    OPTION EXTERNAL;                                                    00404000
                                                                        00406000
INTEGER PROCEDURE GETSIR( SIRNUM);                                      00408000
   VALUE SIRNUM;                                                        00410000
   INTEGER SIRNUM;                                                      00412000
   OPTION EXTERNAL;                                                     00414000
                                                                        00416000
PROCEDURE RELSIR( SIRNUM, GETSIR);                                      00418000
   VALUE SIRNUM, GETSIR;                                                00420000
   INTEGER SIRNUM, GETSIR;                                              00422000
   OPTION EXTERNAL;                                                     00424000
                                                                        00426000
                                                               <<DFS00>>00428000
LOGICAL PROCEDURE Get'Disc'Info (ldev, disc'label, read'label, <<DFS00>>00430000
                      dtt, type, subtype, disc'size,           <<DFS00>>00432000
                      bit'map'address, bit'map'size'pages,     <<DFS00>>00434000
                      dt'address, dt'size'words,               <<DFS00>>00436000
                      dt'dirty'flag, number'of'buffers,        <<DFS00>>00438000
                      dt'check'sum, sectors'per'track,         <<DFS00>>00440000
                      default'logical'pack'size,               <<DFS00>>00442000
                      max'logical'pack'size,                   <<DFS00>>00444000
                      tracks'per'cylinder,                     <<DFS00>>00446000
                      starting'head'number,                    <<DFS00>>00448000
                      track'multiplier);                       <<DFS00>>00450000
                                                               <<DFS00>>00452000
   VALUE ldev, read'label;                                     <<DFS00>>00454000
   INTEGER ldev;                                               <<DFS00>>00456000
   ARRAY disc'label;                                           <<DFS00>>00458000
   LOGICAL read'label;                                         <<DFS00>>00460000
   INTEGER ARRAY dtt;                                          <<DFS00>>00462000
   INTEGER type;                                               <<DFS00>>00464000
   INTEGER subtype;                                            <<DFS00>>00466000
   DOUBLE disc'size;                                           <<DFS00>>00468000
   DOUBLE bit'map'address;                                     <<DFS00>>00470000
   INTEGER bit'map'size'pages;                                 <<DFS00>>00472000
   DOUBLE dt'address;                                          <<DFS00>>00474000
   INTEGER dt'size'words;                                      <<DFS00>>00476000
   LOGICAL dt'dirty'flag;                                      <<DFS00>>00478000
   INTEGER number'of'buffers;                                  <<DFS00>>00480000
   LOGICAL dt'check'sum;                                       <<DFS00>>00482000
   INTEGER sectors'per'track;                                  <<DFS00>>00484000
   INTEGER default'logical'pack'size;                          <<DFS00>>00486000
   INTEGER max'logical'pack'size;                              <<DFS00>>00488000
   INTEGER tracks'per'cylinder;                                <<DFS00>>00490000
   INTEGER starting'head'number;                               <<DFS00>>00492000
   INTEGER track'multiplier;                                   <<DFS00>>00494000
   OPTION VARIABLE, EXTERNAL;                                  <<DFS00>>00496000
                                                               <<DFS00>>00498000
PROCEDURE Return'Disc'Space (ldev, disc'address,               <<DFS00>>00500000
                             number'of'sectors);               <<DFS00>>00502000
   VALUE ldev, disc'address, number'of'sectors;                <<DFS00>>00504000
   INTEGER ldev;                                               <<DFS00>>00506000
   DOUBLE disc'address, number'of'sectors;                     <<DFS00>>00508000
   OPTION EXTERNAL;                                            <<DFS00>>00510000
                                                               <<DFS00>>00512000
INTEGER PROCEDURE Get'Specific'Disc'Space (ldev, disc'address, <<DFS00>>00514000
                                           number'of'sectors); <<DFS00>>00516000
   VALUE ldev, disc'address, number'of'sectors;                <<DFS00>>00518000
   INTEGER ldev;                                               <<DFS00>>00520000
   DOUBLE disc'address, number'of'sectors;                     <<DFS00>>00522000
   OPTION EXTERNAL;                                            <<DFS00>>00524000
                                                               <<DFS00>>00526000
INTEGER PROCEDURE Get'Disc'Space (ldev, number'of'sectors,     <<DFS00>>00528000
                                  disc'address);               <<DFS00>>00530000
   VALUE ldev, number'of'sectors;                              <<DFS00>>00532000
   INTEGER ldev;                                               <<DFS00>>00534000
   DOUBLE number'of'sectors, disc'address;                     <<DFS00>>00536000
   OPTION EXTERNAL;                                            <<DFS00>>00538000
                                                               <<DFS00>>00540000
                                                                        00542000
DOUBLE PROCEDURE ATTACHIO( LDEV, QMISC, DSTX, BUF, FUNC,                00544000
       COUNT, P1, P2, FLAGS);                                           00546000
   VALUE LDEV, QMISC, DSTX, BUF, FUNC, COUNT, P1, P2, FLAGS;            00548000
   INTEGER LDEV, QMISC, DSTX, BUF, FUNC, COUNT, P1, P2, FLAGS;          00550000
   OPTION EXTERNAL;                                                     00552000
                                                                        00554000
INTRINSIC DEBUG, DASCII;                                                00556000
                                                                        00558000
                                                                        00560000
                                                                        00562000
PROCEDURE  CIA1;   FOR X:=0 UNTIL 4 DO IA1(X):=0;   << CLEAR TARGET >>  00564000
                                                                        00566000
PROCEDURE  CBA1;  FOR X:=0 UNTIL 9 DO BA1(X):=0;  << CLEAR TARGET >>    00568000
                                                                        00570000
       PROCEDURE CLEARDST3;                                             00572000
          BEGIN                                                         00574000
          X:=0;                                                         00576000
          DO                                                            00578000
           BEGIN                                                        00580000
                                                                        00582000
           DST3(X):=0;                                                  00584000
           X:=X+1;                                                      00586000
           END                                                          00588000
           UNTIL X=%1000;                                               00590000
          END;                                                          00592000
                                                                        00594000
                                                                        00596000
                                                                        00598000
       PROCEDURE SETDST4(PATTERN);                                      00600000
           VALUE PATTERN;                                               00602000
           LOGICAL PATTERN;                                             00604000
                                                                        00606000
           BEGIN                                                        00608000
           X:=0;                                                        00610000
           DO                                                           00612000
            BEGIN                                                       00614000
            DST4(X):=PATTERN;                                           00616000
            X:=X+1;                                                     00618000
            END                                                         00620000
            UNTIL X=%1000;                                              00622000
            END;                                                        00624000
                                                                        00626000
                                                                        00628000
       PROCEDURE GETPRIV;  OPTION PRIVILEGED;                           00630000
       BEGIN                                                            00632000
       INTEGER RETSTAT=Q-1;                                             00634000
         RETSTAT.(0:1):=1;<<SET STATUS TO PRIVILEGE>>                   00636000
       END;                                                             00638000
                                                                        00640000
                                                                        00642000
                                                                        00644000
                                                                        00646000
                                                                        00648000
                                                                        00650000
                                                                        00652000
                                                                        00654000
                                                                        00656000
                                                                        00658000
$CONTROL SEGMENT=SECTION1                                               00660000
                                                                        00662000
PROCEDURE PRINT'MESSAGE(MSG,MSG'LENGTH,CONTROL);                        00664000
VALUE MSG'LENGTH,CONTROL;                                               00666000
INTEGER MSG'LENGTH,CONTROL;                                             00668000
BYTE ARRAY MSG;                                                         00670000
BEGIN                                                                   00672000
  POINTER MSG'PT;                                                       00674000
  @MSG'PT := @MSG&LSR(1);                                               00676000
  PRINT(MSG'PT,MSG'LENGTH,CONTROL);                                     00678000
  FWRITE(FNUM,MSG'PT,MSG'LENGTH,CONTROL);                               00680000
  IF <> THEN                                                            00682000
    BEGIN                                                               00684000
      PRINTFILEINFO(FNUM);                                              00686000
      TERMINATE;                                                        00688000
    END;                                                                00690000
END;                                                                    00692000
PROCEDURE PRINT'NAMES;                                                  00694000
  BEGIN                                                                 00696000
    I:=0;     << RESET REPEAT COUNTER >>                                00698000
    IF NOT NO'ERROR THEN                                                00700000
      BEGIN                                                             00702000
        PRINT'MESSAGE(ERMSG,0,%202);                                    00704000
        PRINT'MESSAGE(ERMSG,-23,%60);                                   00706000
        NO'ERROR := TRUE;                                               00708000
        LOCATION := 0;                                                  00710000
      END                                                               00712000
      ELSE                                                              00714000
        IF LOCATION > 54 THEN                                           00716000
          BEGIN                                                         00718000
            LOCATION := 0;                                              00720000
            PRINT'MESSAGE(INSTRUCT'NAME,0,0);                           00722000
          END;                                                          00724000
     PRINT'MESSAGE(INSTRUCT'NAME,-6,%320);                              00726000
     LOCATION := LOCATION + 6;                                          00728000
  END;                                                                  00730000
INTEGER PROCEDURE GET'SEG'LEN;                                          00732000
BEGIN                                                                   00734000
   INTEGER STAT = Q-1;                                                  00736000
                                                                        00738000
   GET'SEG'LEN := ABSOLUTE(ABSOLUTE(0)+STAT.(10:6)*4).(4:12)*4-1;       00740000
END;                                                                    00742000
    PROCEDURE BLANK;                                                    00744000
    BEGIN                                                               00746000
       INTEGER I;                                                       00748000
       FOR I := -4 UNTIL 71 DO BUF(I) := " ";                           00750000
    END;                                                                00752000
PROCEDURE CHECKREGS( S, Q, X, STATUS, Z, DL);                           00754000
   VALUE S, Q, X, STATUS, Z, DL;                                        00756000
   INTEGER S, Q, X, STATUS, Z, DL;                                      00758000
BEGIN                                                                   00760000
   IF DL <> EXP'DL THEN NO'ERROR:=FALSE;                                00762000
   IF Z <> EXP'Z THEN NO'ERROR:=FALSE;                                  00764000
   IF STATUS <> EXP'STATUS THEN NO'ERROR:=FALSE;                        00766000
   IF X <> EXP'X THEN NO'ERROR:=FALSE;                                  00768000
   IF Q <> EXP'Q THEN NO'ERROR:=FALSE;                                  00770000
   IF S <> EXP'S THEN NO'ERROR:=FALSE;                                  00772000
END;                                                                    00774000
PROCEDURE DEL'TEST;                                                     00776000
BEGIN                                                                   00778000
   <<  DEL  >>                                                          00780000
                                                                        00782000
   TOS := 1;                                                            00784000
   TOS := 2;                                                            00786000
   TOS := 3;                                                            00788000
   PUSH( STATUS );                                                      00790000
   TOS.(4:4) := %17;  << SET, CARRY, OVERFLOW, CC=3 >>                  00792000
   SET( STATUS );                                                       00794000
   SAVEREGS;                                                            00796000
   ASSEMBLE( DEL );                                                     00798000
   PUSHREGS;                                                            00800000
   EXP'S := EXP'S-1;                                                    00802000
   CHECKREGS(*,*,*,*,*,*);                                              00804000
   IF TOS <> 2 THEN NO'ERROR:=FALSE;                                    00806000
   IF TOS <> 1 THEN NO'ERROR:=FALSE;                                    00808000
END;                                                                    00810000
PROCEDURE DDEL'TEST;                                                    00812000
BEGIN                                                                   00814000
                                                                        00816000
   <<  DDEL  >>                                                         00818000
                                                                        00820000
   TOS := 11;                                                           00822000
   TOS := 12;                                                           00824000
   TOS := 13;                                                           00826000
   TOS := 14;                                                           00828000
   PUSH( STATUS );                                                      00830000
   TOS.(4:4) := %17;  << SET, CARRY, OVERFLOW, CC=3 >>                  00832000
   SET( STATUS );                                                       00834000
   SAVEREGS;                                                            00836000
   ASSEMBLE( DDEL );                                                    00838000
   PUSHREGS;                                                            00840000
   EXP'S := EXP'S-2;                                                    00842000
   CHECKREGS(*,*,*,*,*,*);                                              00844000
   IF TOS <> 12 THEN NO'ERROR:=FALSE;                                   00846000
   IF TOS <> 11 THEN NO'ERROR:=FALSE;                                   00848000
END;                                                                    00850000
PROCEDURE DELB'TEST;                                                    00852000
BEGIN                                                                   00854000
                                                                        00856000
   <<  DELB  >>                                                         00858000
                                                                        00860000
   TOS := 1;                                                            00862000
   TOS := 2;                                                            00864000
   TOS := 3;                                                            00866000
   TOS := 4;                                                            00868000
   PUSH( STATUS );                                                      00870000
   TOS.(4:4) := %17;  << SET, CARRY, OVERFLOW, CC=3 >>                  00872000
   SET( STATUS );                                                       00874000
   SAVEREGS;                                                            00876000
   ASSEMBLE( DELB );                                                    00878000
   PUSHREGS;                                                            00880000
   EXP'S := EXP'S-1;                                                    00882000
   CHECKREGS(*,*,*,*,*,*);                                              00884000
   IF TOS <> 4 THEN NO'ERROR:=FALSE;                                    00886000
   IF TOS <> 2 THEN NO'ERROR:=FALSE;                                    00888000
   IF TOS <> 1 THEN NO'ERROR:=FALSE;                                    00890000
END;                                                                    00892000
PROCEDURE DUP'TEST;                                                     00894000
BEGIN                                                                   00896000
                                                                        00898000
   <<  DUP  >>                                                          00900000
                                                                        00902000
   TOS := -2;                                                           00904000
   TOS := %77777;                                                       00906000
   PUSH( STATUS );                                                      00908000
   TOS.(4:4) := %17;                                                    00910000
   SET( STATUS );                                                       00912000
   SAVEREGS;                                                            00914000
   ASSEMBLE( DUP );                                                     00916000
   PUSHREGS;                                                            00918000
   EXP'S := EXP'S+1;                                                    00920000
   EXP'STATUS.(6:2) := CCG;                                             00922000
   CHECKREGS(*,*,*,*,*,*);                                              00924000
   IF TOS <> %77777 THEN NO'ERROR:=FALSE;                               00926000
   IF TOS <> %77777 THEN NO'ERROR:=FALSE;                               00928000
   IF TOS <> -2 THEN NO'ERROR:=FALSE;                                   00930000
                                                                        00932000
   TOS := %100000;                                                      00934000
   PUSH( STATUS );                                                      00936000
   TOS.(4:4) := %17;                                                    00938000
   SET( STATUS );                                                       00940000
   SAVEREGS;                                                            00942000
   ASSEMBLE( DUP );                                                     00944000
   PUSHREGS;                                                            00946000
   EXP'S := EXP'S+1;                                                    00948000
   EXP'STATUS.(6:2) := CCL;                                             00950000
   CHECKREGS(*,*,*,*,*,*);                                              00952000
   IF TOS <> %100000 THEN NO'ERROR:=FALSE;                              00954000
   IF TOS <> %100000 THEN NO'ERROR:=FALSE;                              00956000
                                                                        00958000
   TOS := 0;                                                            00960000
   PUSH( STATUS );                                                      00962000
   TOS.(4:4) := %17;                                                    00964000
   SET( STATUS );                                                       00966000
   SAVEREGS;                                                            00968000
   ASSEMBLE( DUP );                                                     00970000
   PUSHREGS;                                                            00972000
   EXP'S := EXP'S+1;                                                    00974000
   EXP'STATUS.(6:2) := CCE;                                             00976000
   CHECKREGS(*,*,*,*,*,*);                                              00978000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    00980000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    00982000
END;                                                                    00984000
PROCEDURE DDUP'TEST;                                                    00986000
BEGIN                                                                   00988000
                                                                        00990000
   <<  DDUP  >>                                                         00992000
                                                                        00994000
   TOS := -1D;                                                          00996000
   TOS := %17777777777D;                                                00998000
   PUSH( STATUS );                                                      01000000
   TOS.(4:4) := %17;                                                    01002000
   SET( STATUS );                                                       01004000
   SAVEREGS;                                                            01006000
   ASSEMBLE( DDUP );                                                    01008000
   PUSHREGS;                                                            01010000
   EXP'S := EXP'S+2;                                                    01012000
   EXP'STATUS.(6:2) := CCG;                                             01014000
   CHECKREGS(*,*,*,*,*,*);                                              01016000
   IF TOS <> %17777777777D THEN NO'ERROR:=FALSE;                        01018000
   IF TOS <> %17777777777D THEN NO'ERROR:=FALSE;                        01020000
   IF TOS <> -1D THEN NO'ERROR:=FALSE;                                  01022000
                                                                        01024000
   TOS := %20000000000D;                                                01026000
   PUSH( STATUS );                                                      01028000
   TOS.(4:4) := %17;                                                    01030000
   SET( STATUS );                                                       01032000
   SAVEREGS;                                                            01034000
   ASSEMBLE( DDUP );                                                    01036000
   PUSHREGS;                                                            01038000
   EXP'S := EXP'S+2;                                                    01040000
   EXP'STATUS.(6:2) := CCL;                                             01042000
   CHECKREGS(*,*,*,*,*,*);                                              01044000
   IF TOS <> %20000000000D THEN NO'ERROR:=FALSE;                        01046000
   IF TOS <> %20000000000D THEN NO'ERROR:=FALSE;                        01048000
                                                                        01050000
   TOS := 0D;                                                           01052000
   PUSH( STATUS );                                                      01054000
   TOS.(4:4) := %17;                                                    01056000
   SET( STATUS );                                                       01058000
   SAVEREGS;                                                            01060000
   ASSEMBLE( DDUP );                                                    01062000
   PUSHREGS;                                                            01064000
   EXP'S := EXP'S+2;                                                    01066000
   EXP'STATUS.(6:2) := CCE;                                             01068000
   CHECKREGS(*,*,*,*,*,*);                                              01070000
   IF TOS <> 0D THEN NO'ERROR:=FALSE;                                   01072000
   IF TOS <> 0D THEN NO'ERROR:=FALSE;                                   01074000
END;                                                                    01076000
PROCEDURE ZERO'TEST;                                                    01078000
BEGIN                                                                   01080000
                                                                        01082000
   <<  ZERO  >>                                                         01084000
                                                                        01086000
   TOS := %377;                                                         01088000
   PUSH( STATUS );                                                      01090000
   TOS.(4:4) := %17;  << SET, CARRY, OVERFLOW, CC=3 >>                  01092000
   SET( STATUS );                                                       01094000
   SAVEREGS;                                                            01096000
   ASSEMBLE( ZERO );                                                    01098000
   PUSHREGS;                                                            01100000
   EXP'S := EXP'S+1;                                                    01102000
   CHECKREGS(*,*,*,*,*,*);                                              01104000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    01106000
   IF TOS <> %377 THEN NO'ERROR:=FALSE;                                 01108000
END;                                                                    01110000
PROCEDURE DZRO'TEST;                                                    01112000
BEGIN                                                                   01114000
                                                                        01116000
   <<  DZRO  >>                                                         01118000
                                                                        01120000
   TOS := %100;                                                         01122000
   PUSH( STATUS );                                                      01124000
   TOS.(4:4) := %17;  << SET, CARRY, OVERFLOW, CC=3 >>                  01126000
   SET( STATUS );                                                       01128000
   SAVEREGS;                                                            01130000
   ASSEMBLE( DZRO );                                                    01132000
   PUSHREGS;                                                            01134000
   EXP'S := EXP'S+2;                                                    01136000
   CHECKREGS(*,*,*,*,*,*);                                              01138000
   IF TOS <> 0D THEN NO'ERROR:=FALSE;                                   01140000
   IF TOS <> %100 THEN NO'ERROR:=FALSE;                                 01142000
END;                                                                    01144000
PROCEDURE ZROB'TEST;                                                    01146000
BEGIN                                                                   01148000
                                                                        01150000
   <<  ZROB  >>                                                         01152000
                                                                        01154000
   TOS := %201;                                                         01156000
   TOS := %202;                                                         01158000
   TOS := %203;                                                         01160000
   PUSH( STATUS );                                                      01162000
   TOS.(4:4) := %17;  << SET, CARRY, OVERFLOW, CC=3 >>                  01164000
   SET( STATUS );                                                       01166000
   SAVEREGS;                                                            01168000
   ASSEMBLE( ZROB );                                                    01170000
   PUSHREGS;                                                            01172000
   CHECKREGS(*,*,*,*,*,*);                                              01174000
   IF TOS <> %203 THEN NO'ERROR:=FALSE;                                 01176000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    01178000
   IF TOS <> %201 THEN NO'ERROR:=FALSE;                                 01180000
END;                                                                    01182000
PROCEDURE OR'TEST;                                                      01184000
BEGIN                                                                   01186000
                                                                        01188000
   <<  OR  >>                                                           01190000
                                                                        01192000
   TOS := 0D;                                                           01194000
   TOS := %125252;                                                      01196000
   TOS := %52525;                                                       01198000
   PUSH( STATUS );                                                      01200000
   TOS.(4:4) := %17;                                                    01202000
   SET( STATUS );                                                       01204000
   SAVEREGS;                                                            01206000
   ASSEMBLE( OR );                                                      01208000
   PUSHREGS;                                                            01210000
   EXP'STATUS.(6:2) := CCL;                                             01212000
   EXP'S := EXP'S-1;                                                    01214000
   CHECKREGS(*,*,*,*,*,*);                                              01216000
   IF TOS <> %177777 THEN NO'ERROR:=FALSE;                              01218000
   IF TOS <> 0D THEN NO'ERROR:=FALSE;                                   01220000
                                                                        01222000
   TOS := %377;                                                         01224000
   TOS := %77400;                                                       01226000
   PUSH( STATUS );                                                      01228000
   TOS.(4:4) := %17;                                                    01230000
   SET( STATUS );                                                       01232000
   SAVEREGS;                                                            01234000
   ASSEMBLE( OR );                                                      01236000
   PUSHREGS;                                                            01238000
   EXP'STATUS.(6:2) := CCG;                                             01240000
   EXP'S := EXP'S-1;                                                    01242000
   CHECKREGS(*,*,*,*,*,*);                                              01244000
   IF TOS <> %77777 THEN NO'ERROR:=FALSE;                               01246000
                                                                        01248000
   TOS := 0;                                                            01250000
   TOS := 0;                                                            01252000
   PUSH( STATUS );                                                      01254000
   TOS.(4:4) := %17;                                                    01256000
   SET( STATUS );                                                       01258000
   SAVEREGS;                                                            01260000
   ASSEMBLE( OR );                                                      01262000
   PUSHREGS;                                                            01264000
   EXP'STATUS.(6:2) := CCE;                                             01266000
   EXP'S := EXP'S-1;                                                    01268000
   CHECKREGS(*,*,*,*,*,*);                                              01270000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    01272000
END;                                                                    01274000
PROCEDURE XOR'TEST;                                                     01276000
BEGIN                                                                   01278000
                                                                        01280000
   <<  XOR  >>                                                          01282000
                                                                        01284000
   TOS := %7;                                                           01286000
   TOS := %125252;                                                      01288000
   TOS := -1;                                                           01290000
   PUSH( STATUS );                                                      01292000
   TOS.(4:4) := %17;                                                    01294000
   SET( STATUS );                                                       01296000
   SAVEREGS;                                                            01298000
   ASSEMBLE( XOR );                                                     01300000
   PUSHREGS;                                                            01302000
   EXP'STATUS.(6:2) := CCG;                                             01304000
   EXP'S := EXP'S-1;                                                    01306000
   CHECKREGS(*,*,*,*,*,*);                                              01308000
   IF TOS <> %52525 THEN NO'ERROR:=FALSE;                               01310000
   IF TOS <> 7 THEN NO'ERROR:=FALSE;                                    01312000
                                                                        01314000
   TOS := -1;                                                           01316000
   TOS := %52525;                                                       01318000
   PUSH( STATUS );                                                      01320000
   TOS.(4:4) := %17;                                                    01322000
   SET( STATUS );                                                       01324000
   SAVEREGS;                                                            01326000
   ASSEMBLE( XOR );                                                     01328000
   PUSHREGS;                                                            01330000
   EXP'STATUS.(6:2) := CCL;                                             01332000
   EXP'S := EXP'S-1;                                                    01334000
   CHECKREGS(*,*,*,*,*,*);                                              01336000
   IF TOS <> %125252 THEN NO'ERROR:=FALSE;                              01338000
                                                                        01340000
   TOS := %125252;                                                      01342000
   TOS := %125252;                                                      01344000
   PUSH( STATUS );                                                      01346000
   TOS.(4:4) := %17;                                                    01348000
   SET( STATUS );                                                       01350000
   SAVEREGS;                                                            01352000
   ASSEMBLE( XOR );                                                     01354000
   PUSHREGS;                                                            01356000
   EXP'STATUS.(6:2) := CCE;                                             01358000
   EXP'S := EXP'S-1;                                                    01360000
   CHECKREGS(*,*,*,*,*,*);                                              01362000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    01364000
                                                                        01366000
   TOS := %125252;                                                      01368000
   TOS := %52525;                                                       01370000
   PUSH( STATUS );                                                      01372000
   TOS.(4:4) := %17;                                                    01374000
   SET( STATUS );                                                       01376000
   SAVEREGS;                                                            01378000
   ASSEMBLE( XOR );                                                     01380000
   PUSHREGS;                                                            01382000
   EXP'STATUS.(6:2) := CCL;                                             01384000
   EXP'S := EXP'S-1;                                                    01386000
   CHECKREGS(*,*,*,*,*,*);                                              01388000
   IF TOS <> -1 THEN NO'ERROR:=FALSE;                                   01390000
END;                                                                    01392000
PROCEDURE AND'TEST;                                                     01394000
BEGIN                                                                   01396000
                                                                        01398000
   <<  AND  >>                                                          01400000
                                                                        01402000
   TOS := -2;                                                           01404000
   TOS := %66666;                                                       01406000
   TOS := %133333;                                                      01408000
   PUSH( STATUS );                                                      01410000
   TOS.(4:4) := %17;                                                    01412000
   SET( STATUS );                                                       01414000
   SAVEREGS;                                                            01416000
   ASSEMBLE( AND );                                                     01418000
   PUSHREGS;                                                            01420000
   EXP'STATUS.(6:2) := CCG;                                             01422000
   EXP'S := EXP'S-1;                                                    01424000
   CHECKREGS(*,*,*,*,*,*);                                              01426000
   IF TOS <> %22222 THEN NO'ERROR:=FALSE;                               01428000
   IF TOS <> -2 THEN NO'ERROR:=FALSE;                                   01430000
                                                                        01432000
   TOS := %133333;                                                      01434000
   TOS := %125252;                                                      01436000
   PUSH( STATUS );                                                      01438000
   TOS.(4:4) := %17;                                                    01440000
   SET( STATUS );                                                       01442000
   SAVEREGS;                                                            01444000
   ASSEMBLE( AND );                                                     01446000
   PUSHREGS;                                                            01448000
   EXP'STATUS.(6:2) := CCL;                                             01450000
   EXP'S := EXP'S-1;                                                    01452000
   CHECKREGS(*,*,*,*,*,*);                                              01454000
   IF TOS <> %121212 THEN NO'ERROR:=FALSE;                              01456000
                                                                        01458000
   TOS := %133333;                                                      01460000
   TOS := %44444;                                                       01462000
   PUSH( STATUS );                                                      01464000
   TOS.(4:4) := 3;                                                      01466000
   SET( STATUS );                                                       01468000
   SAVEREGS;                                                            01470000
   ASSEMBLE( AND );                                                     01472000
   PUSHREGS;                                                            01474000
   EXP'STATUS.(6:2) := CCE;                                             01476000
   EXP'S := EXP'S-1;                                                    01478000
   CHECKREGS(*,*,*,*,*,*);                                              01480000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    01482000
END;                                                                    01484000
PROCEDURE INCA'TEST;                                                    01486000
BEGIN                                                                   01488000
                                                                        01490000
   <<  INCA  >>                                                         01492000
                                                                        01494000
   TOS := 6;                                                            01496000
   TOS := 5;                                                            01498000
   TOS := 0;                                                            01500000
   PUSH( STATUS );                                                      01502000
   TOS.(4:4) := %17;                                                    01504000
   SET( STATUS );                                                       01506000
   SAVEREGS;                                                            01508000
   ASSEMBLE( INCA );                                                    01510000
   PUSHREGS;                                                            01512000
   EXP'STATUS.(4:4) := 0;  << CCG, NO CARRY, NO OVFL >>                 01514000
   CHECKREGS(*,*,*,*,*,*);                                              01516000
   IF TOS <> 1 THEN NO'ERROR:=FALSE;                                    01518000
   IF TOS <> 5 THEN NO'ERROR:=FALSE;                                    01520000
   IF TOS <> 6 THEN NO'ERROR:=FALSE;                                    01522000
                                                                        01524000
   TOS := %77777;                                                       01526000
   PUSH( STATUS );                                                      01528000
   TOS.(4:4) := 0;                                                      01530000
   SET( STATUS );                                                       01532000
   SAVEREGS;                                                            01534000
   ASSEMBLE( INCA );                                                    01536000
   PUSHREGS;                                                            01538000
   EXP'STATUS.(4:4) := %11; << OVFL, CCL >>                             01540000
   CHECKREGS(*,*,*,*,*,*);                                              01542000
   IF TOS <> %100000 THEN NO'ERROR:=FALSE;                              01544000
                                                                        01546000
   TOS := %177777;                                                      01548000
   PUSH( STATUS );                                                      01550000
   TOS.(4:4) := 0;                                                      01552000
   SET( STATUS );                                                       01554000
   SAVEREGS;                                                            01556000
   ASSEMBLE( INCA );                                                    01558000
   PUSHREGS;                                                            01560000
   EXP'STATUS.(4:4) := %6;  << CARRY, CCE >>                            01562000
   CHECKREGS(*,*,*,*,*,*);                                              01564000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    01566000
END;                                                                    01568000
PROCEDURE DECA'TEST;                                                    01570000
BEGIN                                                                   01572000
                                                                        01574000
   <<  DECA  >>                                                         01576000
                                                                        01578000
   TOS := -%100;                                                        01580000
   TOS := -%200;                                                        01582000
   TOS := 2;                                                            01584000
   PUSH( STATUS );                                                      01586000
   TOS.(4:4) := %13;                                                    01588000
   SET( STATUS );                                                       01590000
   SAVEREGS;                                                            01592000
   ASSEMBLE( DECA );                                                    01594000
   PUSHREGS;                                                            01596000
   EXP'STATUS.(4:4) := 4;                                               01598000
   CHECKREGS(*,*,*,*,*,*);                                              01600000
   IF TOS <> 1 THEN NO'ERROR:=FALSE;                                    01602000
   IF TOS <> -%200 THEN NO'ERROR:=FALSE;                                01604000
   IF TOS <> -%100 THEN NO'ERROR:=FALSE;                                01606000
                                                                        01608000
   TOS := 0;                                                            01610000
   PUSH( STATUS );                                                      01612000
   TOS.(4:4) := %17;                                                    01614000
   SET( STATUS );                                                       01616000
   SAVEREGS;                                                            01618000
   ASSEMBLE( DECA );                                                    01620000
   PUSHREGS;                                                            01622000
   EXP'STATUS.(4:4) := 1;                                               01624000
   CHECKREGS(*,*,*,*,*,*);                                              01626000
   IF TOS <> %177777 THEN NO'ERROR:=FALSE;                              01628000
                                                                        01630000
   TOS := %100000;                                                      01632000
   PUSH( STATUS );                                                      01634000
   TOS.(4:4) := 3;                                                      01636000
   SET( STATUS );                                                       01638000
   SAVEREGS;                                                            01640000
   ASSEMBLE( DECA );                                                    01642000
   PUSHREGS;                                                            01644000
   EXP'STATUS.(4:4) := %14;                                             01646000
   CHECKREGS(*,*,*,*,*,*);                                              01648000
   IF TOS <> %77777 THEN NO'ERROR:=FALSE;                               01650000
                                                                        01652000
   TOS := %1;                                                           01654000
   PUSH( STATUS );                                                      01656000
   TOS.(4:4) := %13;                                                    01658000
   SET( STATUS );                                                       01660000
   SAVEREGS;                                                            01662000
   ASSEMBLE( DECA );                                                    01664000
   PUSHREGS;                                                            01666000
   EXP'STATUS.(4:4) := 6;                                               01668000
   CHECKREGS(*,*,*,*,*,*);                                              01670000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    01672000
END;                                                                    01674000
PROCEDURE INCB'TEST;                                                    01676000
BEGIN                                                                   01678000
                                                                        01680000
   <<  INCB  >>                                                         01682000
                                                                        01684000
   TOS := -%300;                                                        01686000
   TOS := 0;                                                            01688000
   TOS := -%200;                                                        01690000
   PUSH( STATUS );                                                      01692000
   TOS.(4:4) := %17;                                                    01694000
   SET( STATUS );                                                       01696000
   SAVEREGS;                                                            01698000
   ASSEMBLE( INCB );                                                    01700000
   PUSHREGS;                                                            01702000
   EXP'STATUS.(4:4) := 0;  << CCG, NO CARRY, NO OVFL >>                 01704000
   CHECKREGS(*,*,*,*,*,*);                                              01706000
   IF TOS <> -%200 THEN NO'ERROR:=FALSE;                                01708000
   IF TOS <> 1 THEN NO'ERROR:=FALSE;                                    01710000
   IF TOS <> -%300 THEN NO'ERROR:=FALSE;                                01712000
                                                                        01714000
   TOS := %77777;                                                       01716000
   TOS := 0;                                                            01718000
   PUSH( STATUS );                                                      01720000
   TOS.(4:4) := 0;                                                      01722000
   SET( STATUS );                                                       01724000
   SAVEREGS;                                                            01726000
   ASSEMBLE( INCB );                                                    01728000
   PUSHREGS;                                                            01730000
   EXP'STATUS.(4:4) := %11; << OVFL, CCL >>                             01732000
   CHECKREGS(*,*,*,*,*,*);                                              01734000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    01736000
   IF TOS <> %100000 THEN NO'ERROR:=FALSE;                              01738000
                                                                        01740000
   TOS := %177777;                                                      01742000
   TOS := %100000;                                                      01744000
   PUSH( STATUS );                                                      01746000
   TOS.(4:4) := 0;                                                      01748000
   SET( STATUS );                                                       01750000
   SAVEREGS;                                                            01752000
   ASSEMBLE( INCB );                                                    01754000
   PUSHREGS;                                                            01756000
   EXP'STATUS.(4:4) := %6;  << CARRY, CCE >>                            01758000
   CHECKREGS(*,*,*,*,*,*);                                              01760000
   IF TOS <> %100000 THEN NO'ERROR:=FALSE;                              01762000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    01764000
END;                                                                    01766000
PROCEDURE ADD'TEST;                                                     01768000
BEGIN                                                                   01770000
                                                                        01772000
   <<  ADD  >>                                                          01774000
                                                                        01776000
   TOS := 1;                                                            01778000
   TOS := %40000;                                                       01780000
   TOS := %37777;                                                       01782000
   PUSH( STATUS );                                                      01784000
   TOS.(4:4) := %17;                                                    01786000
   SET( STATUS );                                                       01788000
   SAVEREGS;                                                            01790000
   ASSEMBLE( ADD );                                                     01792000
   PUSHREGS;                                                            01794000
   EXP'STATUS.(4:4) := 0;                                               01796000
   EXP'S := EXP'S-1;                                                    01798000
   CHECKREGS(*,*,*,*,*,*);                                              01800000
   IF TOS <> %77777 THEN NO'ERROR:=FALSE;                               01802000
   IF TOS <> 1 THEN NO'ERROR:=FALSE;                                    01804000
                                                                        01806000
   TOS := %100000;                                                      01808000
   TOS := 0;                                                            01810000
   PUSH( STATUS );                                                      01812000
   TOS.(4:4) := %17;                                                    01814000
   SET( STATUS );                                                       01816000
   SAVEREGS;                                                            01818000
   ASSEMBLE( ADD );                                                     01820000
   PUSHREGS;                                                            01822000
   EXP'STATUS.(4:4) := 1;                                               01824000
   EXP'S := EXP'S-1;                                                    01826000
   CHECKREGS(*,*,*,*,*,*);                                              01828000
   IF TOS <> %100000 THEN NO'ERROR:=FALSE;                              01830000
                                                                        01832000
   TOS := %40000;                                                       01834000
   TOS := %40000;                                                       01836000
   PUSH( STATUS );                                                      01838000
   TOS.(4:4) := %7;                                                     01840000
   SET( STATUS );                                                       01842000
   SAVEREGS;                                                            01844000
   ASSEMBLE( ADD );                                                     01846000
   PUSHREGS;                                                            01848000
   EXP'STATUS.(4:4) := %11;                                             01850000
   EXP'S := EXP'S-1;                                                    01852000
   CHECKREGS(*,*,*,*,*,*);                                              01854000
   IF TOS <> %100000 THEN NO'ERROR:=FALSE;                              01856000
                                                                        01858000
   TOS := %100000;                                                      01860000
   TOS := %100000;                                                      01862000
   PUSH( STATUS );                                                      01864000
   TOS.(4:4) := %3;                                                     01866000
   SET( STATUS );                                                       01868000
   SAVEREGS;                                                            01870000
   ASSEMBLE( ADD );                                                     01872000
   PUSHREGS;                                                            01874000
   EXP'STATUS.(4:4) := %16;                                             01876000
   EXP'S := EXP'S-1;                                                    01878000
   CHECKREGS(*,*,*,*,*,*);                                              01880000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    01882000
                                                                        01884000
   TOS := -1;                                                           01886000
   TOS := -2;                                                           01888000
   PUSH( STATUS );                                                      01890000
   TOS.(4:4) := %13;                                                    01892000
   SET( STATUS );                                                       01894000
   SAVEREGS;                                                            01896000
   ASSEMBLE( ADD );                                                     01898000
   PUSHREGS;                                                            01900000
   EXP'STATUS.(4:4) := %5;                                              01902000
   EXP'S := EXP'S-1;                                                    01904000
   CHECKREGS(*,*,*,*,*,*);                                              01906000
   IF TOS <> -3 THEN NO'ERROR:=FALSE;                                   01908000
                                                                        01910000
   TOS := -1;                                                           01912000
   TOS := %100000;                                                      01914000
   PUSH( STATUS );                                                      01916000
   TOS.(4:4) := %3;                                                     01918000
   SET( STATUS );                                                       01920000
   SAVEREGS;                                                            01922000
   ASSEMBLE( ADD );                                                     01924000
   PUSHREGS;                                                            01926000
   EXP'STATUS.(4:4) := %14;                                             01928000
   EXP'S := EXP'S-1;                                                    01930000
   CHECKREGS(*,*,*,*,*,*);                                              01932000
   IF TOS <> %77777 THEN NO'ERROR:=FALSE;                               01934000
                                                                        01936000
   TOS := -1;                                                           01938000
   TOS := 1;                                                            01940000
   PUSH( STATUS );                                                      01942000
   TOS.(4:4) := %13;                                                    01944000
   SET( STATUS );                                                       01946000
   SAVEREGS;                                                            01948000
   ASSEMBLE( ADD );                                                     01950000
   PUSHREGS;                                                            01952000
   EXP'STATUS.(4:4) := 6;                                               01954000
   EXP'S := EXP'S-1;                                                    01956000
   CHECKREGS(*,*,*,*,*,*);                                              01958000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    01960000
                                                                        01962000
END;                                                                    01964000
PROCEDURE STAX'TEST;                                                    01966000
BEGIN                                                                   01968000
                                                                        01970000
   << ******** CHECK STACK OP'S DEALING WITH X REGISTER ********** >>   01972000
   <<  STAX  >>                                                         01974000
                                                                        01976000
   TOS := %125252;                                                      01978000
   PUSH( STATUS );                                                      01980000
   TOS.(4:4) := %17;  << SET, CARRY, OVERFLOW, CC=3 >>                  01982000
   SET( STATUS );                                                       01984000
   SAVEREGS;                                                            01986000
   ASSEMBLE( STAX );                                                    01988000
   PUSHREGS;                                                            01990000
   EXP'S := EXP'S-1;                                                    01992000
   EXP'STATUS.(6:2) := CCL;                                             01994000
   EXP'X := %125252;                                                    01996000
   CHECKREGS(*,*,*,*,*,*);                                              01998000
                                                                        02000000
   TOS := %52525;                                                       02002000
   PUSH( STATUS );                                                      02004000
   TOS.(4:4) := %17;                                                    02006000
   SET( STATUS );                                                       02008000
   SAVEREGS;                                                            02010000
   ASSEMBLE( STAX );                                                    02012000
   PUSHREGS;                                                            02014000
   EXP'STATUS.(6:2) := CCG;                                             02016000
   EXP'S := EXP'S-1;                                                    02018000
   EXP'X := %52525;                                                     02020000
   CHECKREGS(*,*,*,*,*,*);                                              02022000
                                                                        02024000
   TOS := 0;                                                            02026000
   PUSH( STATUS );                                                      02028000
   TOS.(4:4) := %17;                                                    02030000
   SET( STATUS );                                                       02032000
   SAVEREGS;                                                            02034000
   ASSEMBLE( STAX );                                                    02036000
   PUSHREGS;                                                            02038000
   EXP'STATUS.(6:2) := CCE;                                             02040000
   EXP'S := EXP'S-1;                                                    02042000
   EXP'X := 0;                                                          02044000
   CHECKREGS(*,*,*,*,*,*);                                              02046000
                                                                        02048000
END;                                                                    02050000
PROCEDURE LDXA'TEST;                                                    02052000
BEGIN                                                                   02054000
   <<  LDXA  >>                                                         02056000
                                                                        02058000
   X := %100000;                                                        02060000
   PUSH( STATUS );                                                      02062000
   TOS.(4:4) := %17;                                                    02064000
   SET( STATUS );                                                       02066000
   SAVEREGS;                                                            02068000
   ASSEMBLE( LDXA );                                                    02070000
   PUSHREGS;                                                            02072000
   EXP'STATUS.(6:2) := CCL;                                             02074000
   EXP'S := EXP'S+1;                                                    02076000
   CHECKREGS(*,*,*,*,*,*);                                              02078000
   IF TOS <> %100000 THEN NO'ERROR:=FALSE;                              02080000
                                                                        02082000
   X := %77777;                                                         02084000
   PUSH( STATUS );                                                      02086000
   TOS.(4:4) := 17;                                                     02088000
   SET( STATUS );                                                       02090000
   SAVEREGS;                                                            02092000
   ASSEMBLE( LDXA );                                                    02094000
   PUSHREGS;                                                            02096000
   EXP'STATUS.(6:2) := CCG;                                             02098000
   EXP'S := EXP'S+1;                                                    02100000
   CHECKREGS(*,*,*,*,*,*);                                              02102000
   IF TOS <> %77777 THEN NO'ERROR:=FALSE;                               02104000
                                                                        02106000
   X := 0;                                                              02108000
   PUSH( STATUS );                                                      02110000
   TOS.(4:4) := %17;                                                    02112000
   SET( STATUS );                                                       02114000
   SAVEREGS;                                                            02116000
   ASSEMBLE( LDXA );                                                    02118000
   PUSHREGS;                                                            02120000
   EXP'STATUS.(6:2) := CCE;                                             02122000
   EXP'S := EXP'S+1;                                                    02124000
   CHECKREGS(*,*,*,*,*,*);                                              02126000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    02128000
END;                                                                    02130000
PROCEDURE ZROX'TEST;                                                    02132000
BEGIN                                                                   02134000
                                                                        02136000
   <<  ZROX  >>                                                         02138000
                                                                        02140000
   X := -1;                                                             02142000
   IF X <> -1 THEN NO'ERROR:=FALSE;                                     02144000
   PUSH( STATUS );                                                      02146000
   TOS.(4:4) := %17;  << SET, CARRY, OVERFLOW, CC=3 >>                  02148000
   SET( STATUS );                                                       02150000
   SAVEREGS;                                                            02152000
   ASSEMBLE( ZROX );                                                    02154000
   PUSHREGS;                                                            02156000
   EXP'X := 0;                                                          02158000
   CHECKREGS(*,*,*,*,*,*);                                              02160000
END;                                                                    02162000
PROCEDURE STBX'TEST;                                                    02164000
BEGIN                                                                   02166000
                                                                        02168000
   <<  STBX  >>                                                         02170000
                                                                        02172000
   TOS := 1;                                                            02174000
   TOS := 2;                                                            02176000
   TOS := 3;                                                            02178000
   PUSH( STATUS );                                                      02180000
   TOS.(4:4) := %17;                                                    02182000
   SET( STATUS );                                                       02184000
   SAVEREGS;                                                            02186000
   ASSEMBLE( STBX );                                                    02188000
   PUSHREGS;                                                            02190000
   EXP'STATUS.(6:2) := CCG;                                             02192000
   EXP'X := 2;                                                          02194000
   CHECKREGS(*,*,*,*,*,*);                                              02196000
   IF TOS <> 3 THEN NO'ERROR:=FALSE;                                    02198000
   IF TOS <> 2 THEN NO'ERROR:=FALSE;                                    02200000
   IF TOS <> 1 THEN NO'ERROR:=FALSE;                                    02202000
                                                                        02204000
   TOS := %100000;                                                      02206000
   TOS := 5;                                                            02208000
   PUSH( STATUS );                                                      02210000
   TOS.(4:4) := %17;                                                    02212000
   SET( STATUS );                                                       02214000
   SAVEREGS;                                                            02216000
   ASSEMBLE( STBX );                                                    02218000
   PUSHREGS;                                                            02220000
   EXP'STATUS.(6:2) := CCL;                                             02222000
   EXP'X := %100000;                                                    02224000
   CHECKREGS(*,*,*,*,*,*);                                              02226000
   IF TOS <> 5 THEN NO'ERROR:=FALSE;                                    02228000
   IF TOS <> %100000 THEN NO'ERROR:=FALSE;                              02230000
                                                                        02232000
   TOS := 0;                                                            02234000
   TOS := -1;                                                           02236000
   PUSH( STATUS );                                                      02238000
   TOS.(4:4) := %17;                                                    02240000
   SET( STATUS );                                                       02242000
   SAVEREGS;                                                            02244000
   ASSEMBLE( STBX );                                                    02246000
   PUSHREGS;                                                            02248000
   EXP'STATUS.(6:2) := CCE;                                             02250000
   EXP'X := 0;                                                          02252000
   CHECKREGS(*,*,*,*,*,*);                                              02254000
   IF TOS <> -1 THEN NO'ERROR:=FALSE;                                   02256000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    02258000
END;                                                                    02260000
PROCEDURE LDXB'TEST;                                                    02262000
BEGIN                                                                   02264000
                                                                        02266000
   <<  LDXB  >>                                                         02268000
                                                                        02270000
   TOS := %101;                                                         02272000
   TOS := %102;                                                         02274000
   TOS := %103;                                                         02276000
   X := %377;                                                           02278000
   PUSH( STATUS );                                                      02280000
   TOS.(4:4) := %17;                                                    02282000
   SET( STATUS );                                                       02284000
   SAVEREGS;                                                            02286000
   ASSEMBLE( LDXB );                                                    02288000
   PUSHREGS;                                                            02290000
   EXP'STATUS.(6:2) := CCG;                                             02292000
   CHECKREGS(*,*,*,*,*,*);                                              02294000
   IF TOS <> %103 THEN NO'ERROR:=FALSE;                                 02296000
   IF TOS <> %377 THEN NO'ERROR:=FALSE;                                 02298000
   IF TOS <> %101 THEN NO'ERROR:=FALSE;                                 02300000
                                                                        02302000
   TOS := %17;                                                          02304000
   TOS := -1;                                                           02306000
   X := -%377;                                                          02308000
   PUSH( STATUS );                                                      02310000
   TOS.(4:4) := %17;                                                    02312000
   SET( STATUS );                                                       02314000
   SAVEREGS;                                                            02316000
   ASSEMBLE( LDXB );                                                    02318000
   PUSHREGS;                                                            02320000
   EXP'STATUS.(6:2) := CCL;                                             02322000
   CHECKREGS(*,*,*,*,*,*);                                              02324000
   IF TOS <> -1 THEN NO'ERROR:=FALSE;                                   02326000
   IF TOS <> -%377 THEN NO'ERROR:=FALSE;                                02328000
                                                                        02330000
   TOS :=-1;                                                            02332000
   TOS := 9;                                                            02334000
   X := 0;                                                              02336000
   PUSH( STATUS );                                                      02338000
   TOS.(4:4) := %17;                                                    02340000
   SET( STATUS );                                                       02342000
   SAVEREGS;                                                            02344000
   ASSEMBLE( LDXB );                                                    02346000
   PUSHREGS;                                                            02348000
   EXP'STATUS.(6:2) := CCE;                                             02350000
   CHECKREGS(*,*,*,*,*,*);                                              02352000
   IF TOS <> 9 THEN NO'ERROR:=FALSE;                                    02354000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    02356000
END;                                                                    02358000
PROCEDURE XAX'TEST;                                                     02360000
BEGIN                                                                   02362000
                                                                        02364000
   <<  XAX  >>                                                          02366000
                                                                        02368000
   TOS := 0;                                                            02370000
   TOS := %40;                                                          02372000
   X := %100000;                                                        02374000
   PUSH( STATUS );                                                      02376000
   TOS.(4:4) := %17;                                                    02378000
   SET( STATUS );                                                       02380000
   SAVEREGS;                                                            02382000
   ASSEMBLE( XAX );                                                     02384000
   PUSHREGS;                                                            02386000
   EXP'STATUS.(6:2) := CCL;                                             02388000
   EXP'X := %40;                                                        02390000
   CHECKREGS(*,*,*,*,*,*);                                              02392000
   IF TOS <> %100000 THEN NO'ERROR:=FALSE;                              02394000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    02396000
                                                                        02398000
   TOS := -1;                                                           02400000
   X := 0;                                                              02402000
   PUSH( STATUS );                                                      02404000
   TOS.(4:4) := %17;                                                    02406000
   SET( STATUS );                                                       02408000
   SAVEREGS;                                                            02410000
   ASSEMBLE( XAX );                                                     02412000
   PUSHREGS;                                                            02414000
   EXP'STATUS.(6:2) := CCE;                                             02416000
   EXP'X := -1;                                                         02418000
   CHECKREGS(*,*,*,*,*,*);                                              02420000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    02422000
                                                                        02424000
   TOS := 0;                                                            02426000
   X := %377;                                                           02428000
   PUSH( STATUS );                                                      02430000
   TOS.(4:4) := %17;                                                    02432000
   SET( STATUS );                                                       02434000
   SAVEREGS;                                                            02436000
   ASSEMBLE( XAX );                                                     02438000
   PUSHREGS;                                                            02440000
   EXP'STATUS.(6:2) := CCG;                                             02442000
   EXP'X := 0;                                                          02444000
   CHECKREGS(*,*,*,*,*,*);                                              02446000
END;                                                                    02448000
PROCEDURE XBX'TEST;                                                     02450000
BEGIN                                                                   02452000
                                                                        02454000
   <<  XBX  >>                                                          02456000
                                                                        02458000
   X := -10;                                                            02460000
   IF X <> -10 THEN NO'ERROR:=FALSE;                                    02462000
   TOS := %301;                                                         02464000
   TOS := %302;                                                         02466000
   TOS := %303;                                                         02468000
   PUSH( STATUS );                                                      02470000
   TOS.(4:4) := %17;  << SET, CARRY, OVERFLOW, CC=3 >>                  02472000
   SET( STATUS );                                                       02474000
   SAVEREGS;                                                            02476000
   ASSEMBLE( XBX );                                                     02478000
   PUSHREGS;                                                            02480000
   EXP'X := %302;                                                       02482000
   CHECKREGS(*,*,*,*,*,*);                                              02484000
   IF TOS <> %303 THEN NO'ERROR:=FALSE;                                 02486000
   IF TOS <> -10 THEN NO'ERROR:=FALSE;                                  02488000
   IF TOS <> %301 THEN NO'ERROR:=FALSE;                                 02490000
END;                                                                    02492000
PROCEDURE INCX'TEST;                                                    02494000
BEGIN                                                                   02496000
                                                                        02498000
   <<  INCX  >>                                                         02500000
                                                                        02502000
   X := 0;                                                              02504000
   PUSH( STATUS );                                                      02506000
   TOS.(4:4) := %17;                                                    02508000
   SET( STATUS );                                                       02510000
   SAVEREGS;                                                            02512000
   ASSEMBLE( INCX );                                                    02514000
   PUSHREGS;                                                            02516000
   EXP'STATUS.(4:4) := 0;  << CCG, NO CARRY, NO OVFL >>                 02518000
   EXP'X := 1;                                                          02520000
   CHECKREGS(*,*,*,*,*,*);                                              02522000
                                                                        02524000
   X := %77777;                                                         02526000
   PUSH( STATUS );                                                      02528000
   TOS.(4:4) := 0;                                                      02530000
   SET( STATUS );                                                       02532000
   SAVEREGS;                                                            02534000
   ASSEMBLE( INCX );                                                    02536000
   PUSHREGS;                                                            02538000
   EXP'STATUS.(4:4) := %11; << OVFL, CCL >>                             02540000
   EXP'X := %100000;                                                    02542000
   CHECKREGS(*,*,*,*,*,*);                                              02544000
                                                                        02546000
   X := %177777;                                                        02548000
   PUSH( STATUS );                                                      02550000
   TOS.(4:4) := 0;                                                      02552000
   SET( STATUS );                                                       02554000
   SAVEREGS;                                                            02556000
   ASSEMBLE( INCX );                                                    02558000
   PUSHREGS;                                                            02560000
   EXP'STATUS.(4:4) := %6;  << CARRY, CCE >>                            02562000
   EXP'X := 0;                                                          02564000
   CHECKREGS(*,*,*,*,*,*);                                              02566000
END;                                                                    02568000
PROCEDURE DECX'TEST;                                                    02570000
BEGIN                                                                   02572000
                                                                        02574000
   <<  DECX  >>                                                         02576000
                                                                        02578000
   X := 2;                                                              02580000
   PUSH( STATUS );                                                      02582000
   TOS.(4:4) := %13;                                                    02584000
   SET( STATUS );                                                       02586000
   SAVEREGS;                                                            02588000
   ASSEMBLE( DECX );                                                    02590000
   PUSHREGS;                                                            02592000
   EXP'STATUS.(4:4) := 4;                                               02594000
   EXP'X := 1;                                                          02596000
   CHECKREGS(*,*,*,*,*,*);                                              02598000
                                                                        02600000
   X := 0;                                                              02602000
   PUSH( STATUS );                                                      02604000
   TOS.(4:4) := %17;                                                    02606000
   SET( STATUS );                                                       02608000
   SAVEREGS;                                                            02610000
   ASSEMBLE( DECX );                                                    02612000
   PUSHREGS;                                                            02614000
   EXP'STATUS.(4:4) := 1;                                               02616000
   EXP'X := %177777;                                                    02618000
   CHECKREGS(*,*,*,*,*,*);                                              02620000
                                                                        02622000
   X := %100000;                                                        02624000
   PUSH( STATUS );                                                      02626000
   TOS.(4:4) := 3;                                                      02628000
   SET( STATUS );                                                       02630000
   SAVEREGS;                                                            02632000
   ASSEMBLE( DECX );                                                    02634000
   PUSHREGS;                                                            02636000
   EXP'X := %77777;                                                     02638000
   EXP'STATUS.(4:4) := %14;                                             02640000
   CHECKREGS(*,*,*,*,*,*);                                              02642000
                                                                        02644000
   X := %1;                                                             02646000
   PUSH( STATUS );                                                      02648000
   TOS.(4:4) := %13;                                                    02650000
   SET( STATUS );                                                       02652000
   SAVEREGS;                                                            02654000
   ASSEMBLE( DECX );                                                    02656000
   PUSHREGS;                                                            02658000
   EXP'X := %0;                                                         02660000
   EXP'STATUS.(4:4) := 6;                                               02662000
   CHECKREGS(*,*,*,*,*,*);                                              02664000
END;                                                                    02666000
PROCEDURE ADAX'TEST;                                                    02668000
BEGIN                                                                   02670000
                                                                        02672000
   <<  ADAX  >>                                                         02674000
                                                                        02676000
   TOS := 1;                                                            02678000
   TOS := %40000;                                                       02680000
   X := %37777;                                                         02682000
   PUSH( STATUS );                                                      02684000
   TOS.(4:4) := %17;                                                    02686000
   SET( STATUS );                                                       02688000
   SAVEREGS;                                                            02690000
   ASSEMBLE( ADAX );                                                    02692000
   PUSHREGS;                                                            02694000
   EXP'STATUS.(4:4) := 0;                                               02696000
   EXP'X := %77777;                                                     02698000
   EXP'S := EXP'S-1;                                                    02700000
   CHECKREGS(*,*,*,*,*,*);                                              02702000
   IF TOS <> 1 THEN NO'ERROR:=FALSE;                                    02704000
                                                                        02706000
   TOS := %100000;                                                      02708000
   X := 0;                                                              02710000
   PUSH( STATUS );                                                      02712000
   TOS.(4:4) := %17;                                                    02714000
   SET( STATUS );                                                       02716000
   SAVEREGS;                                                            02718000
   ASSEMBLE( ADAX );                                                    02720000
   PUSHREGS;                                                            02722000
   EXP'STATUS.(4:4) := 1;                                               02724000
   EXP'X := %100000;                                                    02726000
   EXP'S := EXP'S-1;                                                    02728000
   CHECKREGS(*,*,*,*,*,*);                                              02730000
                                                                        02732000
   TOS := %40000;                                                       02734000
   X := %40000;                                                         02736000
   PUSH( STATUS );                                                      02738000
   TOS.(4:4) := %7;                                                     02740000
   SET( STATUS );                                                       02742000
   SAVEREGS;                                                            02744000
   ASSEMBLE( ADAX );                                                    02746000
   PUSHREGS;                                                            02748000
   EXP'STATUS.(4:4) := %11;                                             02750000
   EXP'X := %100000;                                                    02752000
   EXP'S := EXP'S-1;                                                    02754000
   CHECKREGS(*,*,*,*,*,*);                                              02756000
                                                                        02758000
   TOS := %100000;                                                      02760000
   X := %100000;                                                        02762000
   PUSH( STATUS );                                                      02764000
   TOS.(4:4) := %3;                                                     02766000
   SET( STATUS );                                                       02768000
   SAVEREGS;                                                            02770000
   ASSEMBLE( ADAX );                                                    02772000
   PUSHREGS;                                                            02774000
   EXP'STATUS.(4:4) := %16;                                             02776000
   EXP'X := 0;                                                          02778000
   EXP'S := EXP'S-1;                                                    02780000
   CHECKREGS(*,*,*,*,*,*);                                              02782000
                                                                        02784000
   TOS := -1;                                                           02786000
   X := -2;                                                             02788000
   PUSH( STATUS );                                                      02790000
   TOS.(4:4) := %13;                                                    02792000
   SET( STATUS );                                                       02794000
   SAVEREGS;                                                            02796000
   ASSEMBLE( ADAX );                                                    02798000
   PUSHREGS;                                                            02800000
   EXP'STATUS.(4:4) := %5;                                              02802000
   EXP'X := -3;                                                         02804000
   EXP'S := EXP'S-1;                                                    02806000
   CHECKREGS(*,*,*,*,*,*);                                              02808000
                                                                        02810000
   TOS := -1;                                                           02812000
   X := %100000;                                                        02814000
   PUSH( STATUS );                                                      02816000
   TOS.(4:4) := %3;                                                     02818000
   SET( STATUS );                                                       02820000
   SAVEREGS;                                                            02822000
   ASSEMBLE( ADAX );                                                    02824000
   PUSHREGS;                                                            02826000
   EXP'STATUS.(4:4) := %14;                                             02828000
   EXP'X := %77777;                                                     02830000
   EXP'S := EXP'S-1;                                                    02832000
   CHECKREGS(*,*,*,*,*,*);                                              02834000
                                                                        02836000
   TOS := -1;                                                           02838000
   X := 1;                                                              02840000
   PUSH( STATUS );                                                      02842000
   TOS.(4:4) := %13;                                                    02844000
   SET( STATUS );                                                       02846000
   SAVEREGS;                                                            02848000
   ASSEMBLE( ADAX );                                                    02850000
   PUSHREGS;                                                            02852000
   EXP'STATUS.(4:4) := 6;                                               02854000
   EXP'X := 0;                                                          02856000
   EXP'S := EXP'S-1;                                                    02858000
   CHECKREGS(*,*,*,*,*,*);                                              02860000
END;                                                                    02862000
PROCEDURE ADXA'TEST;                                                    02864000
BEGIN                                                                   02866000
                                                                        02868000
   <<  ADXA  >>                                                         02870000
                                                                        02872000
   TOS := 1;                                                            02874000
   TOS := %40000;                                                       02876000
   X := %37777;                                                         02878000
   PUSH( STATUS );                                                      02880000
   TOS.(4:4) := %17;                                                    02882000
   SET( STATUS );                                                       02884000
   SAVEREGS;                                                            02886000
   ASSEMBLE( ADXA );                                                    02888000
   PUSHREGS;                                                            02890000
   EXP'STATUS.(4:4) := 0;                                               02892000
   CHECKREGS(*,*,*,*,*,*);                                              02894000
   IF TOS <> %77777 THEN NO'ERROR:=FALSE;                               02896000
   IF TOS <> 1 THEN NO'ERROR:=FALSE;                                    02898000
                                                                        02900000
   TOS := %100000;                                                      02902000
   X := 0;                                                              02904000
   PUSH( STATUS );                                                      02906000
   TOS.(4:4) := %17;                                                    02908000
   SET( STATUS );                                                       02910000
   SAVEREGS;                                                            02912000
   ASSEMBLE( ADXA );                                                    02914000
   PUSHREGS;                                                            02916000
   EXP'STATUS.(4:4) := 1;                                               02918000
   CHECKREGS(*,*,*,*,*,*);                                              02920000
   IF TOS <> %100000 THEN NO'ERROR:=FALSE;                              02922000
                                                                        02924000
   TOS := %40000;                                                       02926000
   X := %40000;                                                         02928000
   PUSH( STATUS );                                                      02930000
   TOS.(4:4) := %7;                                                     02932000
   SET( STATUS );                                                       02934000
   SAVEREGS;                                                            02936000
   ASSEMBLE( ADXA );                                                    02938000
   PUSHREGS;                                                            02940000
   EXP'STATUS.(4:4) := %11;                                             02942000
   CHECKREGS(*,*,*,*,*,*);                                              02944000
   IF TOS <> %100000 THEN NO'ERROR:=FALSE;                              02946000
                                                                        02948000
   TOS := %100000;                                                      02950000
   X := %100000;                                                        02952000
   PUSH( STATUS );                                                      02954000
   TOS.(4:4) := %3;                                                     02956000
   SET( STATUS );                                                       02958000
   SAVEREGS;                                                            02960000
   ASSEMBLE( ADXA );                                                    02962000
   PUSHREGS;                                                            02964000
   EXP'STATUS.(4:4) := %16;                                             02966000
   CHECKREGS(*,*,*,*,*,*);                                              02968000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    02970000
                                                                        02972000
   TOS := -1;                                                           02974000
   X := -2;                                                             02976000
   PUSH( STATUS );                                                      02978000
   TOS.(4:4) := %13;                                                    02980000
   SET( STATUS );                                                       02982000
   SAVEREGS;                                                            02984000
   ASSEMBLE( ADXA );                                                    02986000
   PUSHREGS;                                                            02988000
   EXP'STATUS.(4:4) := %5;                                              02990000
   CHECKREGS(*,*,*,*,*,*);                                              02992000
   IF TOS <> -3 THEN NO'ERROR:=FALSE;                                   02994000
                                                                        02996000
   TOS := -1;                                                           02998000
   X := %100000;                                                        03000000
   PUSH( STATUS );                                                      03002000
   TOS.(4:4) := %3;                                                     03004000
   SET( STATUS );                                                       03006000
   SAVEREGS;                                                            03008000
   ASSEMBLE( ADXA );                                                    03010000
   PUSHREGS;                                                            03012000
   EXP'STATUS.(4:4) := %14;                                             03014000
   CHECKREGS(*,*,*,*,*,*);                                              03016000
   IF TOS <> %77777 THEN NO'ERROR:=FALSE;                               03018000
                                                                        03020000
   TOS := -1;                                                           03022000
   X := 1;                                                              03024000
   PUSH( STATUS );                                                      03026000
   TOS.(4:4) := %13;                                                    03028000
   SET( STATUS );                                                       03030000
   SAVEREGS;                                                            03032000
   ASSEMBLE( ADXA );                                                    03034000
   PUSHREGS;                                                            03036000
   EXP'STATUS.(4:4) := 6;                                               03038000
   CHECKREGS(*,*,*,*,*,*);                                              03040000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    03042000
END;                                                                    03044000
PROCEDURE ADBX'TEST;                                                    03046000
BEGIN                                                                   03048000
                                                                        03050000
   <<  ADBX  >>                                                         03052000
                                                                        03054000
   TOS := 0;                                                            03056000
   TOS := %40000;                                                       03058000
   TOS := -1;                                                           03060000
   X := %37777;                                                         03062000
   PUSH( STATUS );                                                      03064000
   TOS.(4:4) := %17;                                                    03066000
   SET( STATUS );                                                       03068000
   SAVEREGS;                                                            03070000
   ASSEMBLE( ADBX );                                                    03072000
   PUSHREGS;                                                            03074000
   EXP'STATUS.(4:4) := 0;                                               03076000
   EXP'X := %77777;                                                     03078000
   CHECKREGS(*,*,*,*,*,*);                                              03080000
   IF TOS <> -1 THEN NO'ERROR:=FALSE;                                   03082000
   IF TOS <> %40000 THEN NO'ERROR:=FALSE;                               03084000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    03086000
                                                                        03088000
   TOS := %100000;                                                      03090000
   TOS := -5;                                                           03092000
   X := 0;                                                              03094000
   PUSH( STATUS );                                                      03096000
   TOS.(4:4) := %17;                                                    03098000
   SET( STATUS );                                                       03100000
   SAVEREGS;                                                            03102000
   ASSEMBLE( ADBX );                                                    03104000
   PUSHREGS;                                                            03106000
   EXP'STATUS.(4:4) := 1;                                               03108000
   EXP'X := %100000;                                                    03110000
   CHECKREGS(*,*,*,*,*,*);                                              03112000
   IF TOS <> -5 THEN NO'ERROR:=FALSE;                                   03114000
   IF TOS <> %100000 THEN NO'ERROR:=FALSE;                              03116000
                                                                        03118000
   TOS := %40000;                                                       03120000
   TOS := -5;                                                           03122000
   X := %40000;                                                         03124000
   PUSH( STATUS );                                                      03126000
   TOS.(4:4) := %7;                                                     03128000
   SET( STATUS );                                                       03130000
   SAVEREGS;                                                            03132000
   ASSEMBLE( ADBX );                                                    03134000
   PUSHREGS;                                                            03136000
   EXP'STATUS.(4:4) := %11;                                             03138000
   EXP'X := %100000;                                                    03140000
   CHECKREGS(*,*,*,*,*,*);                                              03142000
   IF TOS <> -5 THEN NO'ERROR:=FALSE;                                   03144000
   IF TOS <> %40000 THEN NO'ERROR:=FALSE;                               03146000
                                                                        03148000
   TOS := %100000;                                                      03150000
   TOS := -5;                                                           03152000
   X := %100000;                                                        03154000
   PUSH( STATUS );                                                      03156000
   TOS.(4:4) := %3;                                                     03158000
   SET( STATUS );                                                       03160000
   SAVEREGS;                                                            03162000
   ASSEMBLE( ADBX );                                                    03164000
   PUSHREGS;                                                            03166000
   EXP'STATUS.(4:4) := %16;                                             03168000
   EXP'X := 0;                                                          03170000
   CHECKREGS(*,*,*,*,*,*);                                              03172000
   IF TOS <> -5 THEN NO'ERROR:=FALSE;                                   03174000
   IF TOS <> %100000 THEN NO'ERROR:=FALSE;                              03176000
                                                                        03178000
   TOS := -1;                                                           03180000
   TOS := -5;                                                           03182000
   X := -2;                                                             03184000
   PUSH( STATUS );                                                      03186000
   TOS.(4:4) := %13;                                                    03188000
   SET( STATUS );                                                       03190000
   SAVEREGS;                                                            03192000
   ASSEMBLE( ADBX );                                                    03194000
   PUSHREGS;                                                            03196000
   EXP'STATUS.(4:4) := %5;                                              03198000
   EXP'X := -3;                                                         03200000
   CHECKREGS(*,*,*,*,*,*);                                              03202000
   IF TOS <> -5 THEN NO'ERROR:=FALSE;                                   03204000
   IF TOS <> -1 THEN NO'ERROR:=FALSE;                                   03206000
                                                                        03208000
   TOS := -1;                                                           03210000
   TOS := -5;                                                           03212000
   X := %100000;                                                        03214000
   PUSH( STATUS );                                                      03216000
   TOS.(4:4) := %3;                                                     03218000
   SET( STATUS );                                                       03220000
   SAVEREGS;                                                            03222000
   ASSEMBLE( ADBX );                                                    03224000
   PUSHREGS;                                                            03226000
   EXP'STATUS.(4:4) := %14;                                             03228000
   EXP'X := %77777;                                                     03230000
   CHECKREGS(*,*,*,*,*,*);                                              03232000
   IF TOS <> -5 THEN NO'ERROR:=FALSE;                                   03234000
   IF TOS <> -1 THEN NO'ERROR:=FALSE;                                   03236000
                                                                        03238000
   TOS := -1;                                                           03240000
   TOS := -5;                                                           03242000
   X := 1;                                                              03244000
   PUSH( STATUS );                                                      03246000
   TOS.(4:4) := %13;                                                    03248000
   SET( STATUS );                                                       03250000
   SAVEREGS;                                                            03252000
   ASSEMBLE( ADBX );                                                    03254000
   PUSHREGS;                                                            03256000
   EXP'STATUS.(4:4) := 6;                                               03258000
   EXP'X := 0;                                                          03260000
   CHECKREGS(*,*,*,*,*,*);                                              03262000
   IF TOS <> -5 THEN NO'ERROR:=FALSE;                                   03264000
   IF TOS <> -1 THEN NO'ERROR:=FALSE;                                   03266000
END;                                                                    03268000
PROCEDURE ADXB'TEST;                                                    03270000
BEGIN                                                                   03272000
                                                                        03274000
   <<  ADXB  >>                                                         03276000
                                                                        03278000
   TOS := 1;                                                            03280000
   TOS := %40000;                                                       03282000
   TOS := -5;                                                           03284000
   X := %37777;                                                         03286000
   PUSH( STATUS );                                                      03288000
   TOS.(4:4) := %17;                                                    03290000
   SET( STATUS );                                                       03292000
   SAVEREGS;                                                            03294000
   ASSEMBLE( ADXB );                                                    03296000
   PUSHREGS;                                                            03298000
   EXP'STATUS.(4:4) := 0;                                               03300000
   CHECKREGS(*,*,*,*,*,*);                                              03302000
   IF TOS <> -5 THEN NO'ERROR:=FALSE;                                   03304000
   IF TOS <> %77777 THEN NO'ERROR:=FALSE;                               03306000
   IF TOS <> 1 THEN NO'ERROR:=FALSE;                                    03308000
                                                                        03310000
   TOS := %100000;                                                      03312000
   TOS := -5;                                                           03314000
   X := 0;                                                              03316000
   PUSH( STATUS );                                                      03318000
   TOS.(4:4) := %17;                                                    03320000
   SET( STATUS );                                                       03322000
   SAVEREGS;                                                            03324000
   ASSEMBLE( ADXB );                                                    03326000
   PUSHREGS;                                                            03328000
   EXP'STATUS.(4:4) := 1;                                               03330000
   CHECKREGS(*,*,*,*,*,*);                                              03332000
   IF TOS <> -5 THEN NO'ERROR:=FALSE;                                   03334000
   IF TOS <> %100000 THEN NO'ERROR:=FALSE;                              03336000
                                                                        03338000
   TOS := %40000;                                                       03340000
   TOS := -5;                                                           03342000
   X := %40000;                                                         03344000
   PUSH( STATUS );                                                      03346000
   TOS.(4:4) := %7;                                                     03348000
   SET( STATUS );                                                       03350000
   SAVEREGS;                                                            03352000
   ASSEMBLE( ADXB );                                                    03354000
   PUSHREGS;                                                            03356000
   EXP'STATUS.(4:4) := %11;                                             03358000
   CHECKREGS(*,*,*,*,*,*);                                              03360000
   IF TOS <> -5 THEN NO'ERROR:=FALSE;                                   03362000
   IF TOS <> %100000 THEN NO'ERROR:=FALSE;                              03364000
                                                                        03366000
   TOS := %100000;                                                      03368000
   TOS := -5;                                                           03370000
   X := %100000;                                                        03372000
   PUSH( STATUS );                                                      03374000
   TOS.(4:4) := %3;                                                     03376000
   SET( STATUS );                                                       03378000
   SAVEREGS;                                                            03380000
   ASSEMBLE( ADXB );                                                    03382000
   PUSHREGS;                                                            03384000
   EXP'STATUS.(4:4) := %16;                                             03386000
   CHECKREGS(*,*,*,*,*,*);                                              03388000
   IF TOS <> -5 THEN NO'ERROR:=FALSE;                                   03390000
   IF TOS <>0 THEN NO'ERROR:=FALSE;                                     03392000
                                                                        03394000
   TOS := -1;                                                           03396000
   TOS := -5;                                                           03398000
   X := -2;                                                             03400000
   PUSH( STATUS );                                                      03402000
   TOS.(4:4) := %13;                                                    03404000
   SET( STATUS );                                                       03406000
   SAVEREGS;                                                            03408000
   ASSEMBLE( ADXB );                                                    03410000
   PUSHREGS;                                                            03412000
   EXP'STATUS.(4:4) := %5;                                              03414000
   CHECKREGS(*,*,*,*,*,*);                                              03416000
   IF TOS <> -5 THEN NO'ERROR:=FALSE;                                   03418000
   IF TOS <> -3 THEN NO'ERROR:=FALSE;                                   03420000
                                                                        03422000
   TOS := -1;                                                           03424000
   TOS := -5;                                                           03426000
   X := %100000;                                                        03428000
   PUSH( STATUS );                                                      03430000
   TOS.(4:4) := %3;                                                     03432000
   SET( STATUS );                                                       03434000
   SAVEREGS;                                                            03436000
   ASSEMBLE( ADXB );                                                    03438000
   PUSHREGS;                                                            03440000
   EXP'STATUS.(4:4) := %14;                                             03442000
   CHECKREGS(*,*,*,*,*,*);                                              03444000
   IF TOS <> -5 THEN NO'ERROR:=FALSE;                                   03446000
   IF TOS <> %77777 THEN NO'ERROR:=FALSE;                               03448000
                                                                        03450000
   TOS := -1;                                                           03452000
   TOS := -5;                                                           03454000
   X := 1;                                                              03456000
   PUSH( STATUS );                                                      03458000
   TOS.(4:4) := %13;                                                    03460000
   SET( STATUS );                                                       03462000
   SAVEREGS;                                                            03464000
   ASSEMBLE( ADXB );                                                    03466000
   PUSHREGS;                                                            03468000
   EXP'STATUS.(4:4) := 6;                                               03470000
   CHECKREGS(*,*,*,*,*,*);                                              03472000
   IF TOS <> -5 THEN NO'ERROR:=FALSE;                                   03474000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    03476000
                                                                        03478000
END;                                                                    03480000
                                                                        03482000
PROCEDURE SUB'TEST;                                                     03484000
BEGIN                                                                   03486000
                                                                        03488000
                                                                        03490000
   <<  SUB  >>                                                          03492000
                                                                        03494000
   TOS := 1;                                                            03496000
   TOS := %40000;                                                       03498000
   TOS := %37777;                                                       03500000
   PUSH( STATUS );                                                      03502000
   TOS.(4:4) := %13;  << SET O, CC=3 >>                                 03504000
   SET( STATUS );                                                       03506000
   SAVEREGS;                                                            03508000
   ASSEMBLE( SUB );                                                     03510000
   PUSHREGS;                                                            03512000
   EXP'STATUS.(4:4) := %4;      << CARRY >>                             03514000
   EXP'S := EXP'S-1;                                                    03516000
   CHECKREGS(*,*,*,*,*,*);                                              03518000
   IF TOS <> %1 THEN NO'ERROR:=FALSE;                                   03520000
   IF TOS <> %1 THEN NO'ERROR:=FALSE;                                   03522000
                                                                        03524000
   TOS := %77777;    << %77777 - 0 >>                                   03526000
   TOS := 0;                                                            03528000
   PUSH( STATUS );                                                      03530000
   TOS.(4:4) := %3;     << CC=3 >>                                      03532000
   SET( STATUS );                                                       03534000
   SAVEREGS;                                                            03536000
   ASSEMBLE( SUB );                                                     03538000
   PUSHREGS;                                                            03540000
   EXP'STATUS.(4:4) := %4;   << C, CCG >>                               03542000
   EXP'S := EXP'S-1;                                                    03544000
   CHECKREGS(*,*,*,*,*,*);                                              03546000
   IF TOS <> %77777 THEN NO'ERROR:=FALSE;                               03548000
                                                                        03550000
   TOS := %77777;    << 32767 - 32767 >>                                03552000
   TOS := %77777;                                                       03554000
   PUSH( STATUS );                                                      03556000
   TOS.(4:4) := %13;       << O, CC=3 >>                                03558000
   SET( STATUS );                                                       03560000
   SAVEREGS;                                                            03562000
   ASSEMBLE( SUB );                                                     03564000
   PUSHREGS;                                                            03566000
   EXP'STATUS.(4:4) := %6;    << CCE >>                                 03568000
   EXP'S := EXP'S-1;                                                    03570000
   CHECKREGS(*,*,*,*,*,*);                                              03572000
   IF TOS <> %0 THEN NO'ERROR:=FALSE;                                   03574000
                                                                        03576000
   TOS := %0;       << 0 - #32767 >>                                    03578000
   TOS := %77777;                                                       03580000
   PUSH( STATUS );                                                      03582000
   TOS.(4:4) := %12;    << SET O, CCE >>                                03584000
   SET( STATUS );                                                       03586000
   SAVEREGS;                                                            03588000
   ASSEMBLE( SUB );                                                     03590000
   PUSHREGS;                                                            03592000
   EXP'STATUS.(4:4) := %1;     << CCL >>                                03594000
   EXP'S := EXP'S-1;                                                    03596000
   CHECKREGS(*,*,*,*,*,*);                                              03598000
   IF TOS <> -32767 THEN NO'ERROR:=FALSE;                               03600000
                                                                        03602000
   TOS := -1;                                                           03604000
   TOS := -2;                                                           03606000
   PUSH( STATUS );                                                      03608000
   TOS.(4:4) := %3;    << CC=3 >>                                       03610000
   SET( STATUS );                                                       03612000
   SAVEREGS;                                                            03614000
   ASSEMBLE( SUB );                                                     03616000
   PUSHREGS;                                                            03618000
   EXP'STATUS.(4:4) := %4;  << C, CCG >>                                03620000
   EXP'S := EXP'S-1;                                                    03622000
   CHECKREGS(*,*,*,*,*,*);                                              03624000
   IF TOS <> 1 THEN NO'ERROR:=FALSE;                                    03626000
                                                                        03628000
   TOS := 0;     << 0 - 32767 >>                                        03630000
   TOS := %77777;                                                       03632000
   PUSH( STATUS );                                                      03634000
   TOS.(4:4) := %3;   << CC=3 >>                                        03636000
   SET( STATUS );                                                       03638000
   SAVEREGS;                                                            03640000
   ASSEMBLE( SUB );                                                     03642000
   PUSHREGS;                                                            03644000
   EXP'STATUS.(4:4) := %1;   << CCL >>                                  03646000
   EXP'S := EXP'S-1;                                                    03648000
   CHECKREGS(*,*,*,*,*,*);                                              03650000
   IF TOS <> -32767 THEN NO'ERROR:=FALSE;                               03652000
                                                                        03654000
   TOS := 0;      << 0 - 0 >>                                           03656000
   TOS := 0;                                                            03658000
   PUSH( STATUS );                                                      03660000
   TOS.(4:4) := %13; << O, CC=3 >>                                      03662000
   SET( STATUS );                                                       03664000
   SAVEREGS;                                                            03666000
   ASSEMBLE( SUB );                                                     03668000
   PUSHREGS;                                                            03670000
   EXP'STATUS.(4:4) := 6;  << C, CCE >>                                 03672000
   EXP'S := EXP'S-1;                                                    03674000
   CHECKREGS(*,*,*,*,*,*);                                              03676000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    03678000
END;                                                                    03680000
                                                                        03682000
PROCEDURE MPY'TEST;                                                     03684000
BEGIN                                                                   03686000
                                                                        03688000
   << MPY >>                                                            03690000
                                                                        03692000
   TOS:=2;                                                              03694000
   TOS:=5;                                                              03696000
   PUSH( STATUS );                                                      03698000
   TOS.(4:4):=%13;  << SET C, O, CC=3 >>                                03700000
   SET( STATUS );                                                       03702000
   SAVEREGS;                                                            03704000
   ASSEMBLE( MPY ); << 2*5 >>                                           03706000
   PUSHREGS;                                                            03708000
   EXP'STATUS.(4:4) := %0; << CCG >>                                    03710000
   EXP'S:=EXP'S-1;                                                      03712000
   CHECKREGS(*,*,*,*,*,*);                                              03714000
   IF TOS <> 10 THEN NO'ERROR:=FALSE;                                   03716000
                                                                        03718000
   TOS:=-2;                                                             03720000
   TOS:=5;                                                              03722000
   PUSH( STATUS );                                                      03724000
   TOS.(4:4):=%13;  << SET C, O, CC=3 >>                                03726000
   SET( STATUS );                                                       03728000
   SAVEREGS;                                                            03730000
   ASSEMBLE( MPY ); << -2*5 >>                                          03732000
   PUSHREGS;                                                            03734000
   EXP'STATUS.(4:4) := %1; << CCL >>                                    03736000
   EXP'S:=EXP'S-1;                                                      03738000
   CHECKREGS(*,*,*,*,*,*);                                              03740000
   IF TOS <> -10 THEN NO'ERROR:=FALSE;                                  03742000
                                                                        03744000
   TOS:=2;                                                              03746000
   TOS:=%77777;;                                                        03748000
   PUSH( STATUS );                                                      03750000
   TOS.(4:4):=%3;  << SET C, CC=3 >>                                    03752000
   SET( STATUS );                                                       03754000
   SAVEREGS;                                                            03756000
   ASSEMBLE( MPY ); << 2*%77777 >>                                      03758000
   PUSHREGS;                                                            03760000
   EXP'STATUS.(4:4) := %11; << O, CCL >>                                03762000
   EXP'S:=EXP'S-1;                                                      03764000
   CHECKREGS(*,*,*,*,*,*);                                              03766000
   IF TOS <> %177776 THEN NO'ERROR:=FALSE;                              03768000
                                                                        03770000
   TOS:=-1;                                                             03772000
   TOS:=%100000;   << -32768 >>                                         03774000
   PUSH( STATUS );                                                      03776000
   TOS.(4:4):=%3;  << SET C, CC=3 >>                                    03778000
   SET( STATUS );                                                       03780000
   SAVEREGS;                                                            03782000
   ASSEMBLE( MPY ); << (-1) * (-32768) >>                               03784000
   PUSHREGS;                                                            03786000
   EXP'STATUS.(4:4) := %11; << O, CCL >>                                03788000
   EXP'S:=EXP'S-1;                                                      03790000
   CHECKREGS(*,*,*,*,*,*);                                              03792000
                                                                        03794000
   TOS:=-2;                                                             03796000
   TOS:=16384;                                                          03798000
   PUSH( STATUS );                                                      03800000
   TOS.(4:4):=%13;  << SET C, O, CC=3 >>                                03802000
   SET( STATUS );                                                       03804000
   SAVEREGS;                                                            03806000
   ASSEMBLE( MPY ); << -2 * 16384 = -32768 >>                           03808000
   PUSHREGS;                                                            03810000
   EXP'STATUS.(4:4) := %1; << CCL >>                                    03812000
   EXP'S:=EXP'S-1;                                                      03814000
   CHECKREGS(*,*,*,*,*,*);                                              03816000
   IF TOS <> -32768 THEN NO'ERROR:=FALSE;                               03818000
                                                                        03820000
END;                                                                    03822000
                                                                        03824000
PROCEDURE DIV'TEST;                                                     03826000
BEGIN                                                                   03828000
                                                                        03830000
   << DIV >>                                                            03832000
                                                                        03834000
   TOS:=20;                                                             03836000
   TOS:=10;                                                             03838000
   PUSH( STATUS );                                                      03840000
   TOS.(4:4):=%13;  << SET C, O, CC=3 >>                                03842000
   SET( STATUS );                                                       03844000
   SAVEREGS;                                                            03846000
   ASSEMBLE( DIV ); << 20 / 10 = 2 >>                                   03848000
   PUSHREGS;                                                            03850000
   EXP'STATUS.(4:4) := %0; << CCG >>                                    03852000
   CHECKREGS(*,*,*,*,*,*);                                              03854000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    03856000
   IF TOS <> 2 THEN NO'ERROR:=FALSE;                                    03858000
                                                                        03860000
   TOS:=20;                                                             03862000
   TOS:=3;                                                              03864000
   PUSH( STATUS );                                                      03866000
   TOS.(4:4):=%13;  << SET C, O, CC=3 >>                                03868000
   SET( STATUS );                                                       03870000
   SAVEREGS;                                                            03872000
   ASSEMBLE( DIV ); << 20 / 3 = 6 ... 2 >>                              03874000
   PUSHREGS;                                                            03876000
   EXP'STATUS.(4:4) := %0; << CCG >>                                    03878000
   CHECKREGS(*,*,*,*,*,*);                                              03880000
   IF TOS <> 2 THEN NO'ERROR:=FALSE;                                    03882000
   IF TOS <> 6 THEN NO'ERROR:=FALSE;                                    03884000
                                                                        03886000
   TOS:=20;                                                             03888000
   TOS:=-3;                                                             03890000
   PUSH( STATUS );                                                      03892000
   TOS.(4:4):=%13;  << SET C, O, CC=3 >>                                03894000
   SET( STATUS );                                                       03896000
   SAVEREGS;                                                            03898000
   ASSEMBLE( DIV ); << 20 / -3 = -6 ... 2 >>                            03900000
   PUSHREGS;                                                            03902000
   EXP'STATUS.(4:4) := %1; << CCL >>                                    03904000
   CHECKREGS(*,*,*,*,*,*);                                              03906000
   IF TOS <> 2 THEN NO'ERROR:=FALSE;                                    03908000
   IF TOS <> -6 THEN NO'ERROR:=FALSE;                                   03910000
                                                                        03912000
   TOS:=-32768;                                                         03914000
   TOS:=1;                                                              03916000
   PUSH( STATUS );                                                      03918000
   TOS.(4:4):=%13;  << SET C, O, CC=3 >>                                03920000
   SET( STATUS );                                                       03922000
   SAVEREGS;                                                            03924000
   ASSEMBLE( DIV ); << -32768 / 1 = -32768 >>                           03926000
   PUSHREGS;                                                            03928000
   EXP'STATUS.(4:4) := %1; << CCL >>                                    03930000
   CHECKREGS(*,*,*,*,*,*);                                              03932000
   IF TOS <> 0 THEN NO'ERROR:=FALSE;                                    03934000
   IF TOS <> -32768 THEN NO'ERROR:=FALSE;                               03936000
                                                                        03938000
   TOS:=-32768;                                                         03940000
   TOS:=-1;                                                             03942000
   PUSH( STATUS );                                                      03944000
   TOS.(4:4):=%13;  << SET C, O, CC=3 >>                                03946000
   SET( STATUS );                                                       03948000
   SAVEREGS;                                                            03950000
   ASSEMBLE( DIV ); << -32768 / -1 = 32768 ?? >>                        03952000
   PUSHREGS;                                                            03954000
   EXP'STATUS.(4:4) := %11; << O, CCL >>                                03956000
   CHECKREGS(*,*,*,*,*,*);                                              03958000
END;                                                                    03960000
                                                                        03962000
PROCEDURE CMP'TEST;                                                     03964000
BEGIN                                                                   03966000
                                                                        03968000
   <<  CMP  >>                                                          03970000
                                                                        03972000
   TOS := 1;                                                            03974000
   TOS := %40000;                                                       03976000
   TOS := %37777;                                                       03978000
   PUSH( STATUS );                                                      03980000
   TOS.(4:4) := %3;  << CC=3 >>                                         03982000
   SET( STATUS );                                                       03984000
   SAVEREGS;                                                            03986000
   ASSEMBLE( CMP );                                                     03988000
   PUSHREGS;                                                            03990000
   EXP'STATUS.(4:4) := %0;      << CCG >>                               03992000
   EXP'S:=EXP'S-2;                                                      03994000
   CHECKREGS(*,*,*,*,*,*);                                              03996000
   IF TOS <> %1 THEN NO'ERROR:=FALSE;                                   03998000
                                                                        04000000
   TOS := %77777;                                                       04002000
   TOS := %77777;                                                       04004000
   PUSH( STATUS );                                                      04006000
   TOS.(4:4) := %3;     << CC=3 >>                                      04008000
   SET( STATUS );                                                       04010000
   SAVEREGS;                                                            04012000
   ASSEMBLE( CMP );                                                     04014000
   PUSHREGS;                                                            04016000
   EXP'STATUS.(4:4) := %2;   << CCE >>                                  04018000
   EXP'S:=EXP'S-2;                                                      04020000
   CHECKREGS(*,*,*,*,*,*);                                              04022000
                                                                        04024000
   TOS := %177777;                                                      04026000
   TOS := %177777;                                                      04028000
   PUSH( STATUS );                                                      04030000
   TOS.(4:4) := %3;       << CC=3 >>                                    04032000
   SET( STATUS );                                                       04034000
   SAVEREGS;                                                            04036000
   ASSEMBLE( CMP );                                                     04038000
   PUSHREGS;                                                            04040000
   EXP'STATUS.(4:4) := %2;    << CCE >>                                 04042000
   EXP'S:=EXP'S-2;                                                      04044000
   CHECKREGS(*,*,*,*,*,*);                                              04046000
                                                                        04048000
   TOS := -1;                                                           04050000
   TOS := -2;                                                           04052000
   PUSH( STATUS );                                                      04054000
   TOS.(4:4) := %3;    << CC=3 >>                                       04056000
   SET( STATUS );                                                       04058000
   SAVEREGS;                                                            04060000
   ASSEMBLE( CMP );                                                     04062000
   PUSHREGS;                                                            04064000
   EXP'STATUS.(4:4) := %0;     << CCG >>                                04066000
   EXP'S:=EXP'S-2;                                                      04068000
   CHECKREGS(*,*,*,*,*,*);                                              04070000
                                                                        04072000
   TOS := -1;                                                           04074000
   TOS := 0;                                                            04076000
   PUSH( STATUS );                                                      04078000
   TOS.(4:4) := %3;    << CC=3 >>                                       04080000
   SET( STATUS );                                                       04082000
   SAVEREGS;                                                            04084000
   ASSEMBLE( CMP );                                                     04086000
   PUSHREGS;                                                            04088000
   EXP'STATUS.(4:4) := %1;  << CCL >>                                   04090000
   EXP'S:=EXP'S-2;                                                      04092000
   CHECKREGS(*,*,*,*,*,*);                                              04094000
                                                                        04096000
   TOS := 0;                                                            04098000
   TOS := %77777;                                                       04100000
   PUSH( STATUS );                                                      04102000
   TOS.(4:4) := %3;   << CC=3 >>                                        04104000
   SET( STATUS );                                                       04106000
   SAVEREGS;                                                            04108000
   ASSEMBLE( CMP );                                                     04110000
   PUSHREGS;                                                            04112000
   EXP'STATUS.(4:4) := %1;   << CCL >>                                  04114000
   EXP'S:=EXP'S-2;                                                      04116000
   CHECKREGS(*,*,*,*,*,*);                                              04118000
                                                                        04120000
   TOS := 0;                                                            04122000
   TOS := 0;                                                            04124000
   PUSH( STATUS );                                                      04126000
   TOS.(4:4) := %3; << CC=3 >>                                          04128000
   SET( STATUS );                                                       04130000
   SAVEREGS;                                                            04132000
   ASSEMBLE( CMP );                                                     04134000
   PUSHREGS;                                                            04136000
   EXP'STATUS.(4:4) := 2;  << CCE >>                                    04138000
   EXP'S:=EXP'S-2;                                                      04140000
   CHECKREGS(*,*,*,*,*,*);                                              04142000
END;                                                                    04144000
                                                                        04146000
PROCEDURE STACKOP;                                                      04148000
BEGIN                                                                   04150000
   <<  DISABLE TRAPS >>                                                 04152000
                                                                        04154000
   PUSH( STATUS );                                                      04156000
   TOS.(2:1) := 0;                                                      04158000
   SET( STATUS );                                                       04160000
                                                                        04162000
   MOVE INSTRUCT'NAME:="DEL   ";                                        04164000
   PRINT'NAMES;                                                         04166000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DEL'TEST;                04168000
   MOVE INSTRUCT'NAME:="DDEL  ";                                        04170000
   PRINT'NAMES;                                                         04172000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DDEL'TEST;               04174000
   MOVE INSTRUCT'NAME:="DELB  ";                                        04176000
   PRINT'NAMES;                                                         04178000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DELB'TEST;               04180000
   MOVE INSTRUCT'NAME:="DUP   ";                                        04182000
   PRINT'NAMES;                                                         04184000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DUP'TEST;                04186000
   MOVE INSTRUCT'NAME:="DDUP  ";                                        04188000
   PRINT'NAMES;                                                         04190000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DDUP'TEST;               04192000
   MOVE INSTRUCT'NAME:="ZERO  ";                                        04194000
   PRINT'NAMES;                                                         04196000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO ZERO'TEST;               04198000
   MOVE INSTRUCT'NAME:="DZRO  ";                                        04200000
   PRINT'NAMES;                                                         04202000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DZRO'TEST;               04204000
   MOVE INSTRUCT'NAME:="ZROB  ";                                        04206000
   PRINT'NAMES;                                                         04208000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO ZROB'TEST;               04210000
   MOVE INSTRUCT'NAME:="OR    ";                                        04212000
   PRINT'NAMES;                                                         04214000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO OR'TEST;                 04216000
   MOVE INSTRUCT'NAME:="XOR   ";                                        04218000
   PRINT'NAMES;                                                         04220000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO XOR'TEST;                04222000
   MOVE INSTRUCT'NAME:="AND   ";                                        04224000
   PRINT'NAMES;                                                         04226000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO AND'TEST;                04228000
   MOVE INSTRUCT'NAME:="INCA  ";                                        04230000
   PRINT'NAMES;                                                         04232000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO INCA'TEST;               04234000
   MOVE INSTRUCT'NAME:="DECA  ";                                        04236000
   PRINT'NAMES;                                                         04238000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DECA'TEST;               04240000
   MOVE INSTRUCT'NAME:="INCB      ";                                    04242000
   PRINT'NAMES;                                                         04244000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO INCB'TEST;               04246000
   MOVE INSTRUCT'NAME:="ADD   ";                                        04248000
   PRINT'NAMES;                                                         04250000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO ADD'TEST;                04252000
   MOVE INSTRUCT'NAME:="STAX  ";                                        04254000
   PRINT'NAMES;                                                         04256000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO STAX'TEST;               04258000
   MOVE INSTRUCT'NAME:="LDXA  ";                                        04260000
   PRINT'NAMES;                                                         04262000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO LDXA'TEST;               04264000
   MOVE INSTRUCT'NAME:="ZROX  ";                                        04266000
   PRINT'NAMES;                                                         04268000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO ZROX'TEST;               04270000
   MOVE INSTRUCT'NAME:="STBX  ";                                        04272000
   PRINT'NAMES;                                                         04274000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO STBX'TEST;               04276000
   MOVE INSTRUCT'NAME:="LDXB  ";                                        04278000
   PRINT'NAMES;                                                         04280000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO LDXB'TEST;               04282000
   MOVE INSTRUCT'NAME:="XAX   ";                                        04284000
   PRINT'NAMES;                                                         04286000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO XAX'TEST;                04288000
   MOVE INSTRUCT'NAME:="XBX   ";                                        04290000
   PRINT'NAMES;                                                         04292000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO XBX'TEST;                04294000
   MOVE INSTRUCT'NAME:="INCX  ";                                        04296000
   PRINT'NAMES;                                                         04298000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO INCX'TEST;               04300000
   MOVE INSTRUCT'NAME:="DECX  ";                                        04302000
   PRINT'NAMES;                                                         04304000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DECX'TEST;               04306000
   MOVE INSTRUCT'NAME:="ADAX  ";                                        04308000
   PRINT'NAMES;                                                         04310000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO ADAX'TEST;               04312000
   MOVE INSTRUCT'NAME:="ADXA  ";                                        04314000
   PRINT'NAMES;                                                         04316000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO ADXA'TEST;               04318000
   MOVE INSTRUCT'NAME:="ADBX  ";                                        04320000
   PRINT'NAMES;                                                         04322000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO ADBX'TEST;               04324000
   MOVE INSTRUCT'NAME:="ADXB  ";                                        04326000
   PRINT'NAMES;                                                         04328000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO ADXB'TEST;               04330000
   MOVE INSTRUCT'NAME:="SUB   ";                                        04332000
   PRINT'NAMES;                                                         04334000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO SUB'TEST;                04336000
   MOVE INSTRUCT'NAME:="MPY   ";                                        04338000
   PRINT'NAMES;                                                         04340000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO MPY'TEST;                04342000
   MOVE INSTRUCT'NAME:="DIV   ";                                        04344000
   PRINT'NAMES;                                                         04346000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DIV'TEST;                04348000
   MOVE INSTRUCT'NAME:="CMP   ";                                        04350000
   PRINT'NAMES;                                                         04352000
   WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO CMP'TEST;                04354000
                                                                        04356000
   PUSH(Q);SET(S); << RESET STACK >>                                    04358000
   READSWREG;                                                           04360000
OUT: LOOPCTN:=0;                                                        04362000
END;                                                                    04364000
                                                                        04366000
                                                                        04368000
PROCEDURE BTST'TEST;                                                    04370000
  BEGIN                                                                 04372000
      ASSEMBLE(                                                         04374000
<< CHECK BTST INSTRUCTION >>                                            04376000
                                                                        04378000
      LDI 0;   << %0 IS SPECIAL >>                                      04380000
      PSHR 0;   << SR=0 >>                                              04382000
      BTST;                                                             04384000
      BL *+2;                                                           04386000
      BR BTSTERROR;                   << BTST FAILED >>                 04388000
                                                                        04390000
      LDI %101;   << ASCII A, CAPITAL >>                                04392000
      SETR 0;   << SR=4 >>                                              04394000
      BTST;                                                             04396000
      BE *+2;                                                           04398000
      BR BTSTERROR;                   << BTST FAILED >>                 04400000
                                                                        04402000
      LDI %141;   << ASCII A, SMALL >>                                  04404000
      BTST;                                                             04406000
      BE *+2;                                                           04408000
      BR BTSTERROR;                   << BTST FAILED >>                 04410000
                                                                        04412000
      LDI %60;   << NUMERIC 0 >>                                        04414000
      BTST;                                                             04416000
      BG *+2;                                                           04418000
      BR BTSTERROR;                   << BTST FAILED >>                 04420000
                                                                        04422000
<< CHECK BTST INSTRUCTION >>                                            04424000
                                                                        04426000
      LDI 0;   << %0 IS SPECIAL >>                                      04428000
      PSHR 0;   << SR=0 >>                                              04430000
      NOP,BTST;                                                         04432000
      BL *+2;                                                           04434000
      BR BTSTERROR;                   << BTST FAILED >>                 04436000
                                                                        04438000
      LDI %101;   << ASCII A, CAPITAL >>                                04440000
      SETR 0;   << SR=4 >>                                              04442000
      NOP,BTST;                                                         04444000
      BE *+2;                                                           04446000
      BR BTSTERROR;                   << BTST FAILED >>                 04448000
                                                                        04450000
      LDI %141;   << ASCII A, SMALL >>                                  04452000
      NOP,BTST;                                                         04454000
      BE *+2;                                                           04456000
      BR BTSTERROR;                   << BTST FAILED >>                 04458000
                                                                        04460000
      LDI %60;   << NUMERIC 0 >>                                        04462000
      NOP,BTST;                                                         04464000
      BG EXIT);                                                         04466000
BTSTERROR:                                                              04468000
      NO'ERROR:=FALSE;                << BTST FAILURE >>                04470000
EXIT:                                                                   04472000
  END;   << BTST'TEST >>                                                04474000
                                                                        04476000
PROCEDURE TESTBTST;   << TEST BTST - 256 COMBINATIONS >>                04478000
   BEGIN                                                                04480000
STAR: ASSEMBLE(                                                         04482000
      ZERO;   << FOR TOS:=0 THRU %377 >>                                04484000
BTC:  DUP,STAX;                                                         04486000
      LDI %60;                                                          04488000
      LDI %71;                                                          04490000
      CPRB BTG;   << EXPECT CCG=NUMERIC IF %60<=X<=%71 >>               04492000
      LDI %101;                                                         04494000
      LDI %132;                                                         04496000
      CPRB BTE;  << EXPECT CCE=ALPHA IF %101<=X<=%132 >>                04498000
      LDI %141;                                                         04500000
      LDI %172;                                                         04502000
      CPRB BTE;  << EXPECT CCE=ALPHA IF %141<=X<=%172 >>                04504000
      BTST;   << ELSE EXPECT CCL=SPECIAL >>                             04506000
      BL *+2;                                                           04508000
      BR BTSTERROR;                   << NOT CCL >>                     04510000
      BR BTX;                                                           04512000
BTG:  BTST;                                                             04514000
      BG *+2;                                                           04516000
      BR BTSTERROR;                   << NOT CCG >>                     04518000
      BR BTX;                                                           04520000
BTE:  BTST;                                                             04522000
      BE BTX;                                                           04524000
      BR BTSTERROR);                       << NOT CCE >>                04526000
      ASSEMBLE(                                                         04528000
BTX:  DUP,INCB;                                                         04530000
      CMPI %377;                                                        04532000
      BNE BTC);   << CONTINUE IF NOT %400 >>                            04534000
       PUSH(Q);SET(S);<<RESET STACK>>                                   04536000
       IF(LOOPCTN:=LOOPCTN+1)=LOOPNUMBER THEN GO OUT                    04538000
       ELSE GO STAR;                                                    04540000
                                                                        04542000
BTSTERROR:                                                              04544000
      NO'ERROR:=FALSE;                                                  04546000
                                                                        04548000
OUT:   LOOPCTN:=0;                                                      04550000
                                                                        04552000
END;   << TESTBTST >>                                                   04554000
                                                                        04556000
<< CHECK TEST INSTRUCTION >>                                            04558000
                                                                        04560000
PROCEDURE TEST'TEST;                                                    04562000
  BEGIN                                                                 04564000
      ASSEMBLE(                                                         04566000
      LDI 1;                                                            04568000
      ZERO;                                                             04570000
      LDNI 1;                                                           04572000
      LDI 3;                                                            04574000
      PSHR 0;   << SR=0 >>                                              04576000
      TEST;                                                             04578000
      BG *+2;                                                           04580000
      BR TESTERROR;                   << NOT CCG WHEN TOS = 3 >>        04582000
      CMPI 3;                                                           04584000
      BE *+2;                                                           04586000
      BR TESTERROR;                   << TOS NOT 3 AFTER TEST >>        04588000
      SETR 0;   << SR=4 >>                                              04590000
      TEST;                                                             04592000
      BL *+2;                                                           04594000
      BR TESTERROR;                   << NOT CCL WHEN TOS = -1 >>       04596000
      DEL;                                                              04598000
      NOP,TEST;                                                         04600000
      BE *+2;                                                           04602000
      BR TESTERROR;                   << NOT CCE WHEN TOS = 0 >>        04604000
      DEL,TEST;                                                         04606000
      BG EXIT);                                                         04608000
TESTERROR:                                                              04610000
      NO'ERROR:=FALSE;                   << NOT CCG WHEN TOS = 1 >>     04612000
EXIT:                                                                   04614000
  END;                                                                  04616000
                                                                        04618000
<< CHECK DTST INSTRUCTION >>                                            04620000
                                                                        04622000
PROCEDURE DTST'TEST;                                                    04624000
  BEGIN                                                                 04626000
      ASSEMBLE(                                                         04628000
      DZRO,DTST;                                                        04630000
      BE *+2;                                                           04632000
      BR DTSTERROR;                   << NOT CCE >>                     04634000
      BNCY *+2;                                                         04636000
      BR DTSTERROR;                   << C NOT 0 >>                     04638000
                                                                        04640000
      LDNI 1;                                                           04642000
      DUP,DTST;                                                         04644000
      BL *+2;                                                           04646000
      BR DTSTERROR;                   << NOT CCL >>                     04648000
      BNCY *+2;                                                         04650000
      BR DTSTERROR;                   << C NOT 0 >>                     04652000
                                                                        04654000
      LDI 1;                                                            04656000
      DUP,DTST;                                                         04658000
      BG *+2;                                                           04660000
      BR DTSTERROR;                   << NOT CCB >>                     04662000
      BCY *+2;                                                          04664000
      BR DTSTERROR;                   << C NOT 1 >>                     04666000
                                                                        04668000
      LOAD NMAX;   << %100000 >>                                        04670000
      DUP, DTST;                                                        04672000
      BL *+2;                                                           04674000
      BR DTSTERROR;                   << NOT CCL >>                     04676000
      BCY *+2;                                                          04678000
      BR DTSTERROR;                   << C NOT 1 >>                     04680000
                                                                        04682000
      ZERO;                                                             04684000
      LOAD PMAX;   << %0777777 >>                                       04686000
      PSHR 0;   << SR=0 >>                                              04688000
      DTST;                                                             04690000
      BG *+2;                                                           04692000
      BR DTSTERROR;                   << NOT CCG >>                     04694000
      BNCY *+2;                                                         04696000
      BR DTSTERROR;                   << C NOT 0 >>                     04698000
      ZERO;                                                             04700000
      LOAD PMAX;                                                        04702000
      DCMP;                                                             04704000
      BE *+2;                                                           04706000
      BR DTSTERROR;                 << TOS NOT %0,077777 AFTER DTST >>  04708000
                                                                        04710000
      LDNI 1;                                                           04712000
      LOAD NMAX;                                                        04714000
      SETR 0;   << SR=4 >>                                              04716000
      DTST;                                                             04718000
      BL *+2;                                                           04720000
      BR DTSTERROR;                   << NOT CCL >>                     04722000
      BNCY EXIT);                                                       04724000
DTSTERROR:                                                              04726000
      NO'ERROR:=FALSE;              << C NOT 0 >>                       04728000
EXIT:                                                                   04730000
END;                                                                    04732000
                                                                        04734000
<< CHECK NOT INSTRUCTION >>                                             04736000
                                                                        04738000
PROCEDURE NOT'TEST;                                                     04740000
  BEGIN                                                                 04742000
      ASSEMBLE(                                                         04744000
      ZERO,NOT;                                                         04746000
      BL *+2;                                                           04748000
      BR NOTERROR;                   << NOT CCL >>                      04750000
      CMPN 1;                                                           04752000
      BE *+2;                                                           04754000
      BR NOTERROR;                   << TOS NOT -1 >>                   04756000
                                                                        04758000
      LDNI 1;                                                           04760000
      PSHR 0;   << SR=0 >>                                              04762000
      NOT;                                                              04764000
      BE *+2;                                                           04766000
      BR NOTERROR;                   << NOT CCE >>                      04768000
                                                                        04770000
      LDNI 2;                                                           04772000
      SETR 0;   << SR=4 >>                                              04774000
      NOT;                                                              04776000
      BG *+2;                                                           04778000
      BR NOTERROR;                   << NOT CCG >>                      04780000
      CMPI 1;                                                           04782000
      BE *+2;                                                           04784000
      BR NOTERROR;                   << TOS NOT 1 >>                    04786000
       ZERO;                                                            04788000
       NOT,NOT; <<TWO 'NOT' STACK-OPS TESTED>>                          04790000
       CMPI 0;                                                          04792000
       BE EXIT);                                                        04794000
NOTERROR:                                                               04796000
       NO'ERROR:=FALSE;   <<TOS NOT ZERO>>                              04798000
EXIT:                                                                   04800000
  END;                                                                  04802000
                                                                        04804000
<< CHECK NEG INSTRUCTION >>                                             04806000
                                                                        04808000
PROCEDURE NEG'TEST;                                                     04810000
  BEGIN                                                                 04812000
      ASSEMBLE(                                                         04814000
      LDI 1;                                                            04816000
      PSHR 0;   << SR=0 >>                                              04818000
      NEG;                                                              04820000
      BL *+2;                 << NOT CCL >>                             04822000
      BR NEGERROR;                                                      04824000
      CMPN 1;                                                           04826000
      BE *+2;                                                           04828000
      BR NEGERROR;                   << TOS NOT -1 >>                   04830000
                                                                        04832000
      LDNI 30;                                                          04834000
      SETR 0;   << SR=4 >>                                              04836000
      NEG;                                                              04838000
      BG *+2;                                                           04840000
      BR NEGERROR;                   << NOT CCG >>                      04842000
      CMPI 30;                                                          04844000
      BE *+2;                                                           04846000
      BR NEGERROR;                   << TOS NOT 30 >>                   04848000
                                                                        04850000
      ZERO,NEG;                                                         04852000
      BE *+2;                                                           04854000
      BR NEGERROR;                   << NOT CCE >>                      04856000
      BNOV *+2;                                                         04858000
      BR NEGERROR;                   << O NOT 0 >>                      04860000
                                                                        04862000
      LOAD NMAX;   << %100000 >>                                        04864000
      NEG;                                                              04866000
      BL *+2;                                                           04868000
      BR NEGERROR;                   << NOT CCL >>                      04870000
      BOV *+2;                                                          04872000
      BR NEGERROR;                   << O NOT 1 >>                      04874000
      CMPM NMAX;                                                        04876000
      BE *+2;                                                           04878000
      BR NEGERROR;                   << TOS NOT %100000 >>              04880000
       ZERO;                                                            04882000
       NEG,NEG;                                                         04884000
       CMPI 0;                                                          04886000
       BE EXIT);                                                        04888000
NEGERROR:                                                               04890000
       NO'ERROR:=FALSE; << TOS NOT ZERO>>                               04892000
EXIT:                                                                   04894000
  END;                                                                  04896000
                                                                        04898000
<< CHECK XCH INSTRUCTION >>                                             04900000
                                                                        04902000
PROCEDURE XCH'TEST;                                                     04904000
  BEGIN                                                                 04906000
      ASSEMBLE(                                                         04908000
      ZERO;                                                             04910000
      LDNI 15;                                                          04912000
      LDI 34;                                                           04914000
      PSHR 0;   << SR=0 >>                                              04916000
      XCH;                                                              04918000
      BL *+2;                                                           04920000
      BR XCHERROR;                   << NOT CCL >>                      04922000
      CMPN 15;                                                          04924000
      BE *+2;                                                           04926000
      BR XCHERROR;                   << TOS NOT -15 >>                  04928000
      CMPI 34;                                                          04930000
      BE *+2;                                                           04932000
      BR XCHERROR;                   << (S-1) NOT 34 AFTER XCH >>       04934000
      CMPI 0;                                                           04936000
      BE *+2;                                                           04938000
      BR XCHERROR;                   << (S-2) NOT 0 AFTER XCH >>        04940000
                                                                        04942000
      ZERO;                                                             04944000
      LDI 1;                                                            04946000
      SETR 0;   << SR=4 >>                                              04948000
      XCH;                                                              04950000
      BE *+2;                                                           04952000
      BR XCHERROR;                   << NOT CCE >>                      04954000
                                                                        04956000
      LDI 4;                                                            04958000
      LDNI 19;                                                          04960000
      XCH;                                                              04962000
      BG *+2;                                                           04964000
      BR XCHERROR;                   << NOT CCG >>                      04966000
       XCH,XCH;                                                         04968000
       CMPI 4;                                                          04970000
       BE *+2;                                                          04972000
       BR XCHERROR; << TOS NOT 4 >>                                     04974000
       CMPN 19;                                                         04976000
       BE EXIT);                                                        04978000
XCHERROR:                                                               04980000
       NO'ERROR:=FALSE; << TOS NOT -19 >>                               04982000
EXIT:                                                                   04984000
  END;                                                                  04986000
                                                                        04988000
<< CHECK DXCH INSTRUCTION >>                                            04990000
                                                                        04992000
PROCEDURE DXCH'TEST;                                                    04994000
  BEGIN                                                                 04996000
      ASSEMBLE(                                                         04998000
      LDI 5;                                                            05000000
      LDNI 4;                                                           05002000
      LDI 7;                                                            05004000
      ZERO;                                                             05006000
      LDNI 3;   << SR=4 >>                                              05008000
      DXCH;                                                             05010000
      BL *+2;                                                           05012000
      BR DXCHERROR;                   << NOT CCL >>                     05014000
      CMPI 7;                                                           05016000
      BE *+2;                                                           05018000
      BR DXCHERROR;                   << TOS NOT 7 AFTER DXCH >>        05020000
      CMPN 4;                                                           05022000
      BE *+2;                                                           05024000
      BR DXCHERROR;                   << (S-1) NOT -4 AFTER DXCH >>     05026000
      CMPN 3;                                                           05028000
      BE *+2;                                                           05030000
      BR DXCHERROR;                   << (S-2) NOT -3 AFTER DXCH >>     05032000
      CMPI 0;                                                           05034000
      BE *+2;                                                           05036000
      BR DXCHERROR;                   << (S-3) NOT 0 AFTER DXCH >>      05038000
      CMPI 5;                                                           05040000
      BE *+2;                                                           05042000
      BR DXCHERROR;                   << (S-4) NOT 5 AFTER DXCH >>      05044000
                                                                        05046000
      DZRO;                                                             05048000
      LDNI 3;                                                           05050000
      LDI 7;                                                            05052000
      LDI 4;                                                            05054000
      LDNI 21;                                                          05056000
      PSHR 0;   << SR=0 >>                                              05058000
      DXCH;                                                             05060000
      BL *+2;                                                           05062000
      BR DXCHERROR;                   << NOT CCL >>                     05064000
      DXCH;                                                             05066000
      BG *+2;                                                           05068000
      BR DXCHERROR;                   << NOT CCG >>                     05070000
      DDEL,DXCH;                                                        05072000
      BE EXIT);                                                         05074000
DXCHERROR:                                                              05076000
      NO'ERROR:=FALSE;               << NOT CCE >>                      05078000
EXIT:                                                                   05080000
  END;                                                                  05082000
                                                                        05084000
<< CHECK CAB INSTRUCTION >>                                             05086000
                                                                        05088000
PROCEDURE CAB'TEST;                                                     05090000
  BEGIN                                                                 05092000
      ASSEMBLE(                                                         05094000
      LDI 14;                                                           05096000
      LDNI 35;                                                          05098000
      ZERO;                                                             05100000
      LDI 21;                                                           05102000
      PSHR 0;   << SR=0 >>                                              05104000
      CAB;                                                              05106000
      BL *+2;                 << NOT CCL >>                             05108000
      BR CABERROR;                                                      05110000
      CMPN 35;                                                          05112000
      BE *+2;                                                           05114000
      BR CABERROR;                   << TOS NOT - 35 AFTER CAB >>       05116000
      CMPI 21;                                                          05118000
      BE *+2;                                                           05120000
      BR CABERROR;                   << (S-1) NOT 21 AFTER CAB >>       05122000
      CMPI 0;                                                           05124000
      BE *+2;                                                           05126000
      BR CABERROR;                   << (S-2) NOT 0 AFTER CAB >>        05128000
      CMPI 14;                                                          05130000
      BE *+2;                                                           05132000
      BR CABERROR;                   << (S-3) NOT 14 AFTER CAB >>       05134000
                                                                        05136000
      LDNI 4;                                                           05138000
      LDI 3;                                                            05140000
      ZERO;                                                             05142000
      SETR 0;   << SR=4 >>                                              05144000
      CAB;                                                              05146000
      BL *+2;                                                           05148000
      BR CABERROR;                   << NOT CCL >>                      05150000
      CAB;                                                              05152000
      BG *+2;                                                           05154000
      BR CABERROR;                   << NOT CCG >>                      05156000
      CAB;                                                              05158000
      BE *+2;                                                           05160000
      BR CABERROR;                   << NOT CCE >>                      05162000
      CAB,CAB;                                                          05164000
      BG EXIT);                                                         05166000
CABERROR:                                                               05168000
      NO'ERROR:=FALSE; << NOT CCG >>                                    05170000
EXIT:                                                                   05172000
  END;                                                                  05174000
                                                                        05176000
<< CHECK LCMP INSTRUCTION >>                                            05178000
                                                                        05180000
PROCEDURE LCMP'TEST;                                                    05182000
  BEGIN                                                                 05184000
      ASSEMBLE(                                                         05186000
      LDI 1;                                                            05188000
      LOAD NMAX;  << %100000 >>                                         05190000
      DUP,LCMP;                                                         05192000
      BE *+2;                                                           05194000
      BR LCMPERROR;                   << NOT CCE >>                     05196000
      CMPI 1;                                                           05198000
      BE *+2;                                                           05200000
      BR LCMPERROR;                   << STACK NOT POPPED >>            05202000
                                                                        05204000
      LDNI 1;                                                           05206000
      LOAD NMAX;   << %177777 : %100000 >>                              05208000
      PSHR 0;   << SR=0 >>                                              05210000
      LCMP;                                                             05212000
      BG *+2;                                                           05214000
      BR LCMPERROR;                   << NOT CCG >>                     05216000
                                                                        05218000
      LOAD NMAX;                                                        05220000
      ZERO,LCMP;                                                        05222000
      BG *+2;                                                           05224000
      BR LCMPERROR;                   << NOT CCG >>                     05226000
                                                                        05228000
      DZRO,DECA;                                                        05230000
      SETR 0;   << SR=4 >>                                              05232000
      LCMP;   << %000000:%177777 >>                                     05234000
      BL EXIT);                                                         05236000
LCMPERROR:                                                              05238000
      NO'ERROR:=FALSE;                   << NOT CCL >>                  05240000
EXIT:                                                                   05242000
  END;                                                                  05244000
                                                                        05246000
<< CHECK LADD INSTRUCTION >>                                            05248000
                                                                        05250000
PROCEDURE LADD'TEST;                                                    05252000
  BEGIN                                                                 05254000
      ASSEMBLE(                                                         05256000
      LOAD BIT1;                                                        05258000
      DUP;                                                              05260000
      PSHR 0;   << SR=0 >>                                              05262000
      LADD;                                                             05264000
      BL *+2;                                                           05266000
      BR LADDERROR;                   << NOT CCL >>                     05268000
      BNOV *+2;                                                         05270000
      BR LADDERROR;                   << O NOT 0 >>                     05272000
      BNCY *+2;                                                         05274000
      BR LADDERROR;                   << C NOT 0 >>                     05276000
      CMPM NMAX;                                                        05278000
      BE *+2;                                                           05280000
      BR LADDERROR;                   << TOS NOT %100000 >>             05282000
                                                                        05284000
      LDNI 1;                                                           05286000
      LDNI 2;                                                           05288000
      SETR 0;   << SR=4 >>                                              05290000
      LADD;                                                             05292000
      BL *+2;                                                           05294000
      BR LADDERROR;                   << NOT CCL >>                     05296000
      BCY *+2;                                                          05298000
      BR LADDERROR;                   << C NOT 1 >>                     05300000
      CMPN 3;                                                           05302000
      BE *+2;                                                           05304000
      BR LADDERROR;                   << TOS NOT %177775 >>             05306000
                                                                        05308000
      LDI 4;                                                            05310000
      DUP,LADD;                                                         05312000
      BG *+2;                                                           05314000
      BR LADDERROR;                   << NOT CCG >>                     05316000
      BNCY *+2;                                                         05318000
      BR LADDERROR;                   << C NOT 0 >>                     05320000
      CMPI 8;                                                           05322000
      BE EXIT);                                                         05324000
LADDERROR:                                                              05326000
      NO'ERROR:=FALSE;               << TOS NOT 8 >>                    05328000
EXIT:                                                                   05330000
  END;                                                                  05332000
                                                                        05334000
<< CHECK LSUB INSTRUCTION >>                                            05336000
                                                                        05338000
PROCEDURE LSUB'TEST;                                                    05340000
  BEGIN                                                                 05342000
      ASSEMBLE(                                                         05344000
      LDNI 1;                                                           05346000
      LDI 1;                                                            05348000
      PSHR 0;   << SR=0 >>                                              05350000
      LSUB;                                                             05352000
      BL *+2;                                                           05354000
      BR LSUBERROR;                   << NOT CCL >>                     05356000
      BCY *+2;                                                          05358000
      BR LSUBERROR;                   << C NOT 1 >>                     05360000
      CMPN 2;                                                           05362000
      BE *+2;                                                           05364000
      BR LSUBERROR;                   << TOS NOT %1777776 >>            05366000
                                                                        05368000
      LDI 3;                                                            05370000
      LDI 10;                                                           05372000
      SETR 0;   << SR=4 >>                                              05374000
      LSUB;                                                             05376000
      BL *+2;                 << NOT CCL >>                             05378000
      BR LSUBERROR;                   << NOT CCG >>                     05380000
      BNCY *+2;                                                         05382000
      BR LSUBERROR;                   << C NOT 0 >>                     05384000
      CMPN 7;                                                           05386000
      BE *+2;                                                           05388000
      BR LSUBERROR;                   << TOS NOT -7 >>                  05390000
                                                                        05392000
<< CHECK LSUB INSTRUCTION >>                                            05394000
                                                                        05396000
      LDNI 1;                                                           05398000
      LDI 1;                                                            05400000
      PSHR 0;   << SR=0 >>                                              05402000
      NOP,LSUB;                                                         05404000
      BL *+2;                                                           05406000
      BR LSUBERROR;                   << NOT CCL >>                     05408000
      BCY *+2;                                                          05410000
      BR LSUBERROR;                   << C NOT 1 >>                     05412000
      CMPN 2;                                                           05414000
      BE *+2;                                                           05416000
      BR LSUBERROR;                   << TOS NOT %1777776 >>            05418000
                                                                        05420000
      LDI 3;                                                            05422000
      LDI 10;                                                           05424000
      SETR 0;   << SR=4 >>                                              05426000
      NOP,LSUB;                                                         05428000
      BL *+2;                 << NOT CCL >>                             05430000
      BR LSUBERROR;                   << NOT CCG >>                     05432000
      BNCY *+2;                                                         05434000
      BR LSUBERROR;                   << C NOT 0 >>                     05436000
      CMPN 7;                                                           05438000
      BE EXIT);                                                         05440000
LSUBERROR:                                                              05442000
      NO'ERROR:=FALSE;                 << TOS NOT -7 >>                 05444000
EXIT:                                                                   05446000
  END;                                                                  05448000
                                                                        05450000
                                                                        05452000
<< CHECK LMPY INSTRUCTION >>                                            05454000
                                                                        05456000
PROCEDURE LMPY'TEST;                                                    05458000
  BEGIN                                                                 05460000
      ASSEMBLE(                                                         05462000
      LOAD PMAX;  << %077777 >>                                         05464000
      LDI 2;                                                            05466000
      PSHR 0;   << SR=0 >>                                              05468000
      LMPY;                                                             05470000
      BG *+2;                                                           05472000
      BR LMPYERROR;                   << NOT CCG >>                     05474000
      BNCY *+2;                                                         05476000
      BR LMPYERROR;                   << C NOT 0 >>                     05478000
      CMPN 2;                                                           05480000
      BE *+2;                                                           05482000
      BR LMPYERROR;                   << TOS NOT %177776 >>             05484000
      CMPI 0;                                                           05486000
      BE *+2;                                                           05488000
      BR LMPYERROR;                   << (S-1) NOT 0 >>                 05490000
                                                                        05492000
      LDNI 1;                                                           05494000
      LDI 4;                                                            05496000
      SETR 0;   << SR=4 >>                                              05498000
      LMPY;                                                             05500000
      BG *+2;                                                           05502000
      BR LMPYERROR;                   << NOT CCG >>                     05504000
      BCY *+2;                                                          05506000
      BR LMPYERROR;                   << C NOT 1 >>                     05508000
      CMPN 4;                                                           05510000
      BE *+2;                                                           05512000
      BR LMPYERROR;                   << TOS NOT %177774 >>             05514000
      CMPI 3;                                                           05516000
      BE *+2;                                                           05518000
      BR LMPYERROR;                   << (S-1) NOT 3 >>                 05520000
                                                                        05522000
      LDNI 1;                                                           05524000
      ZERO,LMPY;                                                        05526000
      BE *+2;                                                           05528000
      BR LMPYERROR;                   << NOT CCE >>                     05530000
      BNCY *+2;                                                         05532000
      BR LMPYERROR;                   << C NOT 0 >>                     05534000
      DZRO,LCMP;                                                        05536000
      BE EXIT);                                                         05538000
LMPYERROR:                                                              05540000
      NO'ERROR:=FALSE;               << (S-1,S) NOT 0,0 >>              05542000
EXIT:                                                                   05544000
  END;                                                                  05546000
                                                                        05548000
<< CHECK LDIV INSTRUCTION >>                                            05550000
                                                                        05552000
PROCEDURE LDIV'TEST;                                                    05554000
  BEGIN                                                                 05556000
      ASSEMBLE(                                                         05558000
      ZERO;   << TRY 19/5 >>                                            05560000
      LDI 19;                                                           05562000
      LDI 5;                                                            05564000
      PSHR 0;   << SR=0 >>                                              05566000
      LDIV;                                                             05568000
      BG *+2;                                                           05570000
      BR LDIVERROR;                   << NOT CCG >>                     05572000
      BNOV *+2;                                                         05574000
      BR LDIVERROR;                   << O NOT 0 >>                     05576000
      CMPI 4;                                                           05578000
      BE *+2;                                                           05580000
      BR LDIVERROR;                   << TOS NOT 4 --- REMAINDER  >>    05582000
      CMPI 3;                                                           05584000
      BE *+2;                                                           05586000
      BR LDIVERROR;                   << (S-1) NOT 3 --- QUOTIENT >>    05588000
                                                                        05590000
      LDI 1;   << TRY 2**16/1 >>                                        05592000
      ZERO;                                                             05594000
      LDI 1;                                                            05596000
      SETR 0;   << SR=4 >>                                              05598000
      LDIV;                                                             05600000
      BE *+2;                                                           05602000
      BR LDIVERROR;                   << NOT CCE >>                     05604000
      BOV *+2;                                                          05606000
      BR LDIVERROR;                                                     05608000
      DZRO,DCMP;                                                        05610000
      BE *+2;                                                           05612000
      BR LDIVERROR;                   << (S-1,S) NOT 0,0 >>             05614000
                                                                        05616000
      LDI 7;  << (2**19-1)/8 >>                                         05618000
      LDNI 1;                                                           05620000
      LDI 8;                                                            05622000
      LDIV;                                                             05624000
      BL *+2;                                                           05626000
      BR LDIVERROR;                   << NOT CCL >>                     05628000
      BNOV *+2;                                                         05630000
      BR LDIVERROR;                   << O NOT 0 >>                     05632000
      CMPI 7;                                                           05634000
      BE *+2;                                                           05636000
      BR LDIVERROR;                   << REMAINDER NOT 7 >>             05638000
      CMPN 1;                                                           05640000
      BE *+2;                                                           05642000
      BR LDIVERROR;                << QUOTIENT = (S-1) NOT 2**16-1 >>   05644000
                                                                        05646000
      LDI 1;                                                            05648000
      DUP,ZERO;                                                         05650000
      LDIV;                                                             05652000
      BOV *+2;                                                          05654000
      BR LDIVERROR;                   << O NOT 1 >>                     05656000
                                                                        05658000
      ZERO;    << TRY (2**16-1)/2**15 >>                                05660000
      LDNI 1;                                                           05662000
      LOAD NMAX;                                                        05664000
      LDIV;                                                             05666000
      BG *+2;                                                           05668000
      BR LDIVERROR;                   << NOT CCG >>                     05670000
      BNOV *+2;                                                         05672000
      BR LDIVERROR;                   << O NOT 0 >>                     05674000
      CMPM PMAX;                                                        05676000
      BE *+2;                                                           05678000
      BR LDIVERROR;                   << REMAINDER NOT %177777 >>       05680000
      CMPI 1;                                                           05682000
      BE *+2;                                                           05684000
      BR LDIVERROR;                  << QUOTIENT NOT 1 >>               05686000
                                                                        05688000
<< CHECK LDIV INSTRUCTION >>                                            05690000
                                                                        05692000
      ZERO;   << TRY 19/5 >>                                            05694000
      LDI 19;                                                           05696000
      LDI 5;                                                            05698000
      PSHR 0;   << SR=0 >>                                              05700000
      NOP,LDIV;                                                         05702000
      BG *+2;                                                           05704000
      BR LDIVERROR;                   << NOT CCG >>                     05706000
      BNOV *+2;                                                         05708000
      BR LDIVERROR;                   << O NOT 0 >>                     05710000
      CMPI 4;                                                           05712000
      BE *+2;                                                           05714000
      BR LDIVERROR;                   << TOS NOT 4 --- REMAINDER  >>    05716000
      CMPI 3;                                                           05718000
      BE *+2;                                                           05720000
      BR LDIVERROR;                   << (S-1) NOT 3 --- QUOTIENT >>    05722000
                                                                        05724000
      LDI 1;   << TRY 2**16/1 >>                                        05726000
      ZERO;                                                             05728000
      LDI 1;                                                            05730000
      SETR 0;   << SR=4 >>                                              05732000
      NOP,LDIV;                                                         05734000
      BE *+2;                                                           05736000
      BR LDIVERROR;                   << NOT CCE >>                     05738000
      BOV *+2;                                                          05740000
      BR LDIVERROR;                                                     05742000
      DZRO,DCMP;                                                        05744000
      BE *+2;                                                           05746000
      BR LDIVERROR;                   << (S-1,S) NOT 0,0 >>             05748000
                                                                        05750000
      LDI 7;  << (2**19-1)/8 >>                                         05752000
      LDNI 1;                                                           05754000
      LDI 8;                                                            05756000
      NOP,LDIV;                                                         05758000
      BL *+2;                                                           05760000
      BR LDIVERROR;                   << NOT CCL >>                     05762000
      BNOV *+2;                                                         05764000
      BR LDIVERROR;                   << O NOT 0 >>                     05766000
      CMPI 7;                                                           05768000
      BE *+2;                                                           05770000
      BR LDIVERROR;                   << REMAINDER NOT 7 >>             05772000
      CMPN 1;                                                           05774000
      BE *+2;                                                           05776000
      BR LDIVERROR;                   << QUOTIENT = (S-1) NOT 2**16-1 >>05778000
                                                                        05780000
      LDI 1;                                                            05782000
      DUP,ZERO;                                                         05784000
      NOP,LDIV;                                                         05786000
      BOV *+2;                                                          05788000
      BR LDIVERROR;                   << O NOT 1 >>                     05790000
                                                                        05792000
      ZERO;    << TRY (2**16-1)/2**15 >>                                05794000
      LDNI 1;                                                           05796000
      LOAD NMAX;                                                        05798000
      NOP,LDIV;                                                         05800000
      BG *+2;                                                           05802000
      BR LDIVERROR;                   << NOT CCG >>                     05804000
      BNOV *+2;                                                         05806000
      BR LDIVERROR;                   << O NOT 0 >>                     05808000
      CMPM PMAX;                                                        05810000
      BE *+2;                                                           05812000
      BR LDIVERROR;                   << REMAINDER NOT %177777 >>       05814000
      CMPI 1;                                                           05816000
      BE EXIT;                                                          05818000
      BR LDIVERROR);                  << QUOTIENT NOT 1 >>              05820000
                                                                        05822000
LDIVERROR:                                                              05824000
       NO'ERROR:=FALSE;                                                 05826000
EXIT:                                                                   05828000
  END;                                                                  05830000
                                                                        05832000
PROCEDURE SOI;   << MORE STACKOP INSTRUCTIONS >>                        05834000
   BEGIN                                                                05836000
                                                                        05838000
       MOVE INSTRUCT'NAME:="BTST  ";                                    05840000
       PRINT'NAMES;                                                     05842000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO BTST'TEST;           05844000
       IF NO'ERROR THEN TESTBTST;      << CHECK 256 COMBINATIONS >>     05846000
                                                                        05848000
       MOVE INSTRUCT'NAME:="TEST  ";                                    05850000
       PRINT'NAMES;                                                     05852000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO TEST'TEST;           05854000
                                                                        05856000
       MOVE INSTRUCT'NAME:="DTST  ";                                    05858000
       PRINT'NAMES;                                                     05860000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DTST'TEST;           05862000
                                                                        05864000
       MOVE INSTRUCT'NAME:="NOT   ";                                    05866000
       PRINT'NAMES;                                                     05868000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO NOT'TEST;            05870000
                                                                        05872000
       MOVE INSTRUCT'NAME:="NEG   ";                                    05874000
       PRINT'NAMES;                                                     05876000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO NEG'TEST;            05878000
                                                                        05880000
       MOVE INSTRUCT'NAME:="XCH   ";                                    05882000
       PRINT'NAMES;                                                     05884000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO XCH'TEST;            05886000
                                                                        05888000
       MOVE INSTRUCT'NAME:="DXCH  ";                                    05890000
       PRINT'NAMES;                                                     05892000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DXCH'TEST;           05894000
                                                                        05896000
       MOVE INSTRUCT'NAME:="CAB   ";                                    05898000
       PRINT'NAMES;                                                     05900000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO CAB'TEST;            05902000
                                                                        05904000
       MOVE INSTRUCT'NAME:="LCMP  ";                                    05906000
       PRINT'NAMES;                                                     05908000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO LCMP'TEST;           05910000
                                                                        05912000
       MOVE INSTRUCT'NAME:="LADD  ";                                    05914000
       PRINT'NAMES;                                                     05916000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO LADD'TEST;           05918000
                                                                        05920000
       MOVE INSTRUCT'NAME:="LSUB  ";                                    05922000
       PRINT'NAMES;                                                     05924000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO LSUB'TEST;           05926000
                                                                        05928000
       MOVE INSTRUCT'NAME:="LMPY  ";                                    05930000
       PRINT'NAMES;                                                     05932000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO LMPY'TEST;           05934000
                                                                        05936000
       MOVE INSTRUCT'NAME:="LDIV  ";                                    05938000
       PRINT'NAMES;                                                     05940000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO LDIV'TEST;           05942000
                                                                        05944000
       LOOPCTN:=0; X:=STEPNO;                                           05946000
       STEPNO:=STEPNO+1;                                                05948000
                                                                        05950000
   END;   << SOI >>                                                     05952000
                                                                        05954000
PROCEDURE LIAM;   << LOAD INSTRUCTION - ALL ADDRESSING MODES >>         05956000
   BEGIN                                                                05958000
       MOVE INSTRUCT'NAME:="LOAD  ";                                    05960000
       PRINT'NAMES;                                                     05962000
STAR: ASSEMBLE(                                                         05964000
<< LOAD INSTRUCTION - ALL ADDRESSING MODES >>                           05966000
                                                                        05968000
      LOAD LOAD1;   << MODE 1: P+D >>                                   05970000
      CMPI 22;                                                          05972000
      BE *+2;                                                           05974000
      BR LOADERROR;                   << TOS NOT 22 >>                  05976000
                                                                        05978000
      LDXI 1;                                                           05980000
      LOAD LOAD1,X;   << MODE 2: P+D+X >>                               05982000
      CMPN 17;                                                          05984000
      BE *+2;                                                           05986000
      BR LOADERROR;                   << TOS NOT -17 >>                 05988000
                                                                        05990000
      LOAD LOAD3,I;   << MODE 3: (P+D)+P+D >>                           05992000
      CMPI 45;                                                          05994000
      BE *+2;                                                           05996000
      BR LOADERROR;                   << TOS NOT 45 >>                  05998000
                                                                        06000000
      LDXN 1;                                                           06002000
      LOAD LOAD3,I,X;   << MODE 4: (P+D)+P+D+X >>                       06004000
      CMPI 5;                                                           06006000
      BE *+2;                                                           06008000
      BR LOADERROR;                   << TOS NOT 5 >>                   06010000
                                                                        06012000
      BR LOADCON;   << SKIP OVER CONSTANTS >>                           06014000
LOAD1: CON 22;                                                          06016000
       CON -17;                                                         06018000
LOAD3: CON 2;                                                           06020000
       CON 5;                                                           06022000
       CON 45;                                                          06024000
LOAD5: CON -24;                                                         06026000
LOAD7: CON -3;                                                          06028000
LOADCON:                                                                06030000
                                                                        06032000
      LOAD LOAD5;   << MODE 5: P-D >>                                   06034000
      CMPN 24;                                                          06036000
      BE *+2;                                                           06038000
      BR LOADERROR;                   << TOS NOT -24 >>                 06040000
                                                                        06042000
      LDXI 3;                                                           06044000
      LOAD LOAD3,X;   << MODE 6: P-D+X >>                               06046000
      CMPN 24;                                                          06048000
      BE *+2;                                                           06050000
      BR LOADERROR;                   << TOS NOT -24 >>                 06052000
                                                                        06054000
      LOAD LOAD7,I;   << MODE 7:   (P-D)+P-D  >>                        06056000
      CMPI 5;                                                           06058000
      BE *+2;                                                           06060000
      BR LOADERROR;                   << TOS NOT 5 >>                   06062000
                                                                        06064000
      LDXI 2;                                                           06066000
      LOAD LOAD7,I,X;   << MODE 8: (P-D)+X+P-D >>                       06068000
      CMPN 24;                                                          06070000
      BE *+2;                                                           06072000
      BR LOADERROR;                   << TOS NOT -24 >>                 06074000
                                                                        06076000
      LOAD M1;   << MODE 9: DB+D >>                                     06078000
      CMPN 1;                                                           06080000
      BE *+2;                                                           06082000
      BR LOADERROR;                   << TOS NOT -1 >>                  06084000
                                                                        06086000
      LDI 17;                                                           06088000
      STOR DB+%13;                                                      06090000
      LDXI %12;                                                         06092000
      LOAD DB+1,X;   << MODE 10: DB+D+X >>                              06094000
      CMPI 17;                                                          06096000
      BE *+2;                                                           06098000
      BR LOADERROR;                   << TOS NOT 17 >>                  06100000
                                                                        06102000
      LDNI 69;                                                          06104000
      STOR DB+%10;                                                      06106000
      LDI %10;                                                          06108000
      STOR DB+%12;                                                      06110000
      LOAD DB+%12,I;   << MODE 11: (DB+D)+DB >>                         06112000
      CMPN 69;                                                          06114000
      BE *+2;                                                           06116000
      BR LOADERROR;                   << TOS NOT -69 >>                 06118000
                                                                        06120000
      LDI 99;                                                           06122000
      STOR DB+%13;                                                      06124000
      LDI %10;                                                          06126000
      STOR DB+7;                                                        06128000
      LDXI 3;                                                           06130000
      LOAD DB+7,I,X;   << MODE 12: (DB+D)+DB+X >>                       06132000
      CMPI 99;                                                          06134000
      BE *+2;                                                           06136000
      BR LOADERROR;                   << TOS NOT 99 >>                  06138000
                                                                        06140000
      LDNI 17;                                                          06142000
      LDI 0;                                                            06144000
      LDI 26;                                                           06146000
      LDI %11;                                                          06148000
      LDNI 2;                                                           06150000
      LDI 4;                                                            06152000
      LOAD S-0;   << MODE 21: S-D >>                                    06154000
      CMPI 4;                                                           06156000
      BE *+2;                                                           06158000
      BR LOADERROR;                   << TOS NOT 4 >>                   06160000
      LOAD S-1;                                                         06162000
      CMPN 2;                                                           06164000
      BE *+2;                                                           06166000
      BR LOADERROR;                   << TOS NOT -2 >>                  06168000
      LOAD S-2;                                                         06170000
      CMPI %11;                                                         06172000
      BE *+2;                                                           06174000
      BR LOADERROR;                   << TOS NOT %11 >>                 06176000
      LOAD S-3;                                                         06178000
      CMPI 26;                                                          06180000
      BE *+2;                                                           06182000
      BR LOADERROR;                   << TOS NOT 26 >>                  06184000
      LOAD S-4;                                                         06186000
      CMPI 0;                                                           06188000
      BE *+2;                                                           06190000
      BR LOADERROR;                   << TOS NOT 0 >>                   06192000
      LOAD S-5;                                                         06194000
      CMPN 17;                                                          06196000
      BE *+2;                                                           06198000
      BR LOADERROR;                   << TOS NOT -17 >>                 06200000
                                                                        06202000
      LDXN 5;                                                           06204000
      LOAD S-0,X;   << MODE 22: S-D+X >>                                06206000
      CMPN 17;                                                          06208000
      BE *+2;                                                           06210000
      BR LOADERROR;                   << TOS NOT -17 >>                 06212000
      LDXI 5;                                                           06214000
      LOAD S-5,X;                                                       06216000
      CMPI 4;                                                           06218000
      BE *+2;                                                           06220000
      BR LOADERROR;                   << TOS NOT 4 >>                   06222000
                                                                        06224000
      LDI 19;                                                           06226000
      STOR DB+%11;                                                      06228000
      LOAD S-2,I;   << MODE 23: (S-D)+DB >>                             06230000
      CMPI 19;                                                          06232000
      BE *+2;                                                           06234000
      BR LOADERROR;                   << TOS NOT 19 >>                  06236000
                                                                        06238000
      LDI 25;                                                           06240000
      STOR DB+%7;                                                       06242000
      LDXN 2;                                                           06244000
      LOAD S-2,I,X;   << MODE 24: (S-D)+X+DB >>                         06246000
      CMPI 25;                                                          06248000
      BE *+2;                                                           06250000
      BR LOADERROR;                   << TOS NOT 25 >>                  06252000
                                                                        06254000
      PSHR 2;   << PUSH Q >>                                            06256000
      SETR 1;   << SET S >>                                             06258000
      LDI %12;  << WILL BE (Q-3) >>                                     06260000
      LDNI 2;   << WILL BE (Q-2) >>                                     06262000
      LDI 1;    << WILL BE (Q-1) >>                                     06264000
      LDNI 3;   << WILL BE (Q) >>                                       06266000
      PSHR 2;   << PUSH Q >>                                            06268000
      ADDI 4;                                                           06270000
      DUP;                                                              06272000
      SETR 2;   << Q := OLD Q+4 >>                                      06274000
      SETR 1;   << S := OLD Q+4 >>                                      06276000
      LDI %13;  << Q+1 >>                                               06278000
      LDNI 7;   << Q+2 >>                                               06280000
      LDI %14;   << Q+3 >>                                              06282000
      LDNI 6;   << Q+4 >>                                               06284000
                                                                        06286000
      LOAD Q+2;   << MODE 13: Q+D >>                                    06288000
      CMPN 7;                                                           06290000
      BE *+2;                                                           06292000
      BR LOADERROR;                   << TOS NOT -7 >>                  06294000
                                                                        06296000
      LOAD Q+0;                                                         06298000
      CMPN 3;                                                           06300000
      BE *+2;                                                           06302000
      BR LOADERROR;                   << TOS NOT -3 >>                  06304000
                                                                        06306000
      LDXI 2;     << MODE 14: Q+D+X >>                                  06308000
      LOAD Q+1,X;                                                       06310000
      CMPI %14;                                                         06312000
      BE *+2;                                                           06314000
      BR LOADERROR;                   << TOS NOT 14 >>                  06316000
                                                                        06318000
      LDI 58;     << MODE 15: (Q+D)+DB >>                               06320000
      STOR DB+%13;                                                      06322000
      LOAD Q+1,I;                                                       06324000
      CMPI 58;                                                          06326000
      BE *+2;                                                           06328000
      BR LOADERROR;                   << TOS NOT 58 >>                  06330000
                                                                        06332000
      LDNI 34;    << MODE 16: (Q+D)+X+DB >>                             06334000
      STOR DB+%10;                                                      06336000
      LDXN 4;                                                           06338000
      LOAD Q+3,I,X;                                                     06340000
      CMPN 34;                                                          06342000
      BE *+2;                                                           06344000
      BR LOADERROR;                   << TOS NOT -34 >>                 06346000
                                                                        06348000
      LOAD Q-1;   << MODE 17: Q-D >>                                    06350000
      CMPI 1;                                                           06352000
      BE *+2;                                                           06354000
      BR LOADERROR;                   << TOS NOT 1 >>                   06356000
                                                                        06358000
      LDXI 1;     << MODE 18: Q-D+X >>                                  06360000
      LOAD Q-3,X;                                                       06362000
      CMPN 2;                                                           06364000
      BE *+2;                                                           06366000
      BR LOADERROR;                   << TOS NOT -2 >>                  06368000
                                                                        06370000
      LDNI 23;    << MODE 19: (Q-D)+DB >>                               06372000
      STOR DB+%12;                                                      06374000
      LOAD Q-3,I;                                                       06376000
      CMPN 23;                                                          06378000
      BE *+2;                                                           06380000
      BR LOADERROR;                   << TOS NOT -23 >>                 06382000
                                                                        06384000
      LDI 77;     << MODE 20: (Q-D)+X+DB >>                             06386000
      STOR DB+%11;                                                      06388000
      LDXI %10;                                                         06390000
      LOAD Q-1,I,X;                                                     06392000
      CMPI 77;                                                          06394000
      BE NOERROR;                                                       06396000
      BR LOADERROR);                      << TOS NOT 77 >>              06398000
                                                                        06400000
NOERROR: ASSEMBLE(                                                      06402000
      PSHR 2;                                                           06404000
      SUBI 4;                                                           06406000
      SETR 2);   << RESTORE Q >>                                        06408000
       PUSH(Q);SET(S); <<RESET STACK>>                                  06410000
       IF(LOOPCTN:=LOOPCTN+1)=LOOPNUMBER THEN GO OUT                    06412000
       ELSE GO STAR;                                                    06414000
                                                                        06416000
LOADERROR:                                                              06418000
      NO'ERROR:=FALSE;                                                  06420000
                                                                        06422000
OUT:   LOOPCTN:=0;                                                      06424000
                                                                        06426000
END;   << LIAM >>                                                       06428000
                                                                        06430000
PROCEDURE STOR'TEST;   << CHECK STOR INSTRUCTION >>                     06432000
   BEGIN                                                                06434000
      ASSEMBLE(                                                         06436000
                                                                        06438000
                                                                        06440000
<< CHECK STOR Q+ INSTRUCTION >>                                         06442000
                                                                        06444000
      ADDS 10;                                                          06446000
      LDI 5;                                                            06448000
      STOR Q+2;                                                         06450000
      LOAD Q+2;                                                         06452000
      CMPI 5;                                                           06454000
      BE *+2;                                                           06456000
      BR STORERROR;                   << (Q+2) NOT 5 >>                 06458000
                                                                        06460000
<< CHECK STOR Q- INSTRUCTION >>                                         06462000
                                                                        06464000
      LOAD Q-3;                                                         06466000
      STAX;   << SAVE (Q-3) >>                                          06468000
      LDI 6;                                                            06470000
      STOR Q-3;                                                         06472000
      LOAD Q-3;                                                         06474000
      CMPI 6;                                                           06476000
      BE *+2;                                                           06478000
      BR STORERROR;                   << (Q-3) NOT 6 >>                 06480000
      LDXA;                                                             06482000
      STOR Q-3;   << RESTORE (Q-3) >>                                   06484000
                                                                        06486000
<< CHECK STOR S- INSTRUCTION >>                                         06488000
                                                                        06490000
      LDI 4;                                                            06492000
      LDI 5;                                                            06494000
      STOR S-0;                                                         06496000
      CMPI 4;                                                           06498000
      BE *+2;                                                           06500000
      BR STORERROR;                   << TOS NOT 4 >>                   06502000
                                                                        06504000
      LDI 1;                                                            06506000
      LDI 2;                                                            06508000
      LDI 3;                                                            06510000
      STOR S-1;                                                         06512000
      CMPI 3;                                                           06514000
      BE *+2;                                                           06516000
      BR STORERROR;                   << TOS NOT 3 >>                   06518000
      CMPI 1;                                                           06520000
      BE *+2;                                                           06522000
      BR STORERROR;                   << (S-1) NOT 1 >>                 06524000
                                                                        06526000
<< CHECK STOR Q+D,I,X INSTRUCTION >>                                    06528000
                                                                        06530000
      LDI 0;                                                            06532000
      STOR VAR5;                                                        06534000
      LDI %10;                                                          06536000
      STOR Q+2;                                                         06538000
      LDXI 3;                                                           06540000
      LDI 7;                                                            06542000
      STOR Q+2,I,X;   << E=DB+%13>>                                     06544000
      LOAD VAR5;                                                        06546000
      CMPI 7;                                                           06548000
      BE *+2;                                                           06550000
      BR STORERROR;                   << (DB+%13) NOT 7 >>              06552000
                                                                        06554000
<< CHECK STOR DB+D,I,X INSTRUCTION >>                                   06556000
                                                                        06558000
      LDI 0;                                                            06560000
      STOR VAR6;                                                        06562000
      LDI %11;                                                          06564000
      STOR VAR0;                                                        06566000
      LDXI 3;                                                           06568000
      LDI %111;                                                         06570000
      STOR VAR0,I,X;   << E=DB+%14 >>                                   06572000
      LOAD VAR6;                                                        06574000
      CMPI %111;                                                        06576000
      BE *+2;                                                           06578000
      BR STORERROR;                   << (DB+%14) NOT %111 >>           06580000
                                                                        06582000
<< CHECK STOR Q-D,I,X INSTRUCTION >>                                    06584000
                                                                        06586000
      LOAD Q-1;                                                         06588000
      STOR VAR0;   << SAVE (Q-1) >>                                     06590000
      LDI %11;                                                          06592000
      STOR Q-1;                                                         06594000
      LDXI 4;                                                           06596000
      LDI 20;                                                           06598000
      STOR Q-1,I,X;   << E=DB+%15 >>                                    06600000
      LOAD VAR7;                                                        06602000
      CMPI 20;                                                          06604000
      BE *+2;                                                           06606000
      BR STORERROR;                   << (DB+%15) NOT 20 >>             06608000
      LOAD VAR0;                                                        06610000
      STOR Q-1;   << RESTORE (Q-1) >>                                   06612000
                                                                        06614000
<< CHECK S-D,I,X INSTRUCTION >>                                         06616000
                                                                        06618000
      LDXI 3;                                                           06620000
      LDI %10;                                                          06622000
      LDI 10;                                                           06624000
      STOR S-1,I,X;   << E=DB+%13 >>                                    06626000
      CMPI %10;                                                         06628000
      BE *+2;                                                           06630000
      BR STORERROR;                   << TOS NOT 2 >>                   06632000
      LOAD VAR5;                                                        06634000
      CMPI 10;                                                          06636000
      BE EXIT);                                                         06638000
STORERROR:                                                              06640000
      NO'ERROR:=FALSE;                   << (DB+%13) NOT 10 >>          06642000
EXIT:                                                                   06644000
   END;                                                                 06646000
                                                                        06648000
<< CHECK ADDM DB+ INSTRUCTION >>                                        06650000
                                                                        06652000
PROCEDURE ADDM'TEST;                                                    06654000
   BEGIN                                                                06656000
      ASSEMBLE(                                                         06658000
      ZERO;                   << 0+1 = 1 >>                             06660000
      PSHR 0;   << SR=0 >>                                              06662000
      ADDM P1;                                                          06664000
      BG *+2;                                                           06666000
      BR ADDMERROR;                   << NOT CCG >>                     06668000
      BNOV *+2;                                                         06670000
      BR ADDMERROR;                   << O NOT 0 >>                     06672000
      BNCY *+2;                                                         06674000
      BR ADDMERROR;                   << C NOT 0 >>                     06676000
      CMPI 1;                                                           06678000
      BE *+2;                                                           06680000
      BR ADDMERROR;                   << TOS NOT 1 >>                   06682000
                                                                        06684000
      LDNI 1;   << -1+1 = 0>>                                           06686000
      SETR 0;   << SR=4 >>                                              06688000
      ADDM P1;                                                          06690000
      BE *+2;                                                           06692000
      BR ADDMERROR;                   << NOT CCE >>                     06694000
      BNOV *+2;                                                         06696000
      BR ADDMERROR;                   << O NOT 0 >>                     06698000
      BCY *+2;                                                          06700000
      BR ADDMERROR;                   << C NOT 1 >>                     06702000
      CMPI 0;                                                           06704000
      BE *+2;                                                           06706000
      BR ADDMERROR;                   << TOS NOT 0 >>                   06708000
                                                                        06710000
      LDI 1;     << 1+%077777 = %100000 >>                              06712000
      ADDM PMAX;                                                        06714000
      BL *+2;                                                           06716000
      BR ADDMERROR;                   << NOT CCL >>                     06718000
      BOV *+2;                                                          06720000
      BR ADDMERROR;                   << O NOT 1 >>                     06722000
      BNCY *+2;                                                         06724000
      BR ADDMERROR;                   << C NOT 0 >>                     06726000
      CMPM NMAX;                                                        06728000
      BE *+2;                                                           06730000
      BR ADDMERROR;                   << TOS NOT %100000 >>             06732000
                                                                        06734000
<< CHECK ADDM S- INSTRUCTION >>                                         06736000
                                                                        06738000
      LDI 2;                                                            06740000
      LDI 3;                                                            06742000
      ADDM S-1;                                                         06744000
      CMPI 5;                                                           06746000
      BE *+2;                                                           06748000
      BR ADDMERROR;                   << TOS NOT 5 >>                   06750000
      CMPI 2;                                                           06752000
      BE *+2;                                                           06754000
      BR ADDMERROR;                   << (S-1) NOT 2 >>                 06756000
                                                                        06758000
      LDI 4;                                                            06760000
      LDI 5;                                                            06762000
      ADDM S-0;                                                         06764000
      CMPI 10;                                                          06766000
      BE *+2;                                                           06768000
      BR ADDMERROR;                   << TOS NOT 10 >>                  06770000
      CMPI 4;                                                           06772000
      BE *+2;                                                           06774000
      BR ADDMERROR;                   << (S-1) NOT 4 >>                 06776000
                                                                        06778000
<< CHECK ADDM P+ INSTRUCTION >>                                         06780000
                                                                        06782000
      LDI 0;                                                            06784000
      ADDM C1;   << 1 >>                                                06786000
      CMPI 1;                                                           06788000
      BE EXIT;                                                          06790000
      BR ADDMERROR;                                                     06792000
C1:   CON 1;                                                            06794000
P1:    );                                                               06796000
ADDMERROR:                                                              06798000
      NO'ERROR:=FALSE;                                                  06800000
EXIT:                                                                   06802000
   END;                                                                 06804000
                                                                        06806000
<< CHECK SUBM DB+ INSTRUCTION >>                                        06808000
                                                                        06810000
PROCEDURE SUBM'TEST;                                                    06812000
   BEGIN                                                                06814000
      ASSEMBLE(                                                         06816000
      LDI 1;    << 1-1 =0 >>                                            06818000
      PSHR 0;   << SR=0 >>                                              06820000
      SUBM P1;                                                          06822000
      BE *+2;                                                           06824000
      BR SUBMERROR;                   << NOT CCE >>                     06826000
      BNOV *+2;                                                         06828000
      BR SUBMERROR;                   << O NOT 0 >>                     06830000
      BCY *+2;                                                          06832000
      BR SUBMERROR;                   << C NOT 1 >>                     06834000
      CMPI 0;                                                           06836000
      BE *+2;                                                           06838000
      BR SUBMERROR;                   << TOS NOT 0 >>                   06840000
                                                                        06842000
      LOAD PMAX;   << %077777 -(-1) = %100000 >>                        06844000
      SETR 0;   << SR=4 >>                                              06846000
      SUBM M1;                                                          06848000
      BL *+2;                                                           06850000
      BR SUBMERROR;                   << NOT CCL >>                     06852000
      BOV *+2;                                                          06854000
      BR SUBMERROR;                   << O NOT 1 >>                     06856000
      BNCY *+2;                                                         06858000
      BR SUBMERROR;                   << C NOT 0 >>                     06860000
      CMPM NMAX;                                                        06862000
      BE *+2;                                                           06864000
      BR SUBMERROR;                   << TOS NOT %100000 >>             06866000
                                                                        06868000
<< CHECK SUBM S- INSTRUCTION >>                                         06870000
                                                                        06872000
      LDI 1;                                                            06874000
      LDI 2;                                                            06876000
      LDI 5;                                                            06878000
      SUBM S-2;                                                         06880000
      CMPI 4;                                                           06882000
      BE *+2;                                                           06884000
      BR SUBMERROR;                   << TOS NOT 4 >>                   06886000
      CMPI 2;                                                           06888000
      BE *+2;                                                           06890000
      BR SUBMERROR;                   << (S-1) NOT 2 >>                 06892000
                                                                        06894000
<< CHECK SUBM P+ INSTRUCTION >>                                         06896000
      LDI 1;                                                            06898000
      SUBM C2;   << -2 >>                                               06900000
      CMPN 1;                                                           06902000
      BE EXIT;                                                          06904000
      BR SUBMERROR;                                                     06906000
C2:   CON 2;                                                            06908000
P1:    );                                                               06910000
SUBMERROR:                                                              06912000
      NO'ERROR:=FALSE;                                                  06914000
EXIT:                                                                   06916000
   END;                                                                 06918000
                                                                        06920000
<< CHECK MPYM DB+ INSTRUCTION >>                                        06922000
PROCEDURE MPYM'TEST;                                                    06924000
   BEGIN                                                                06926000
                                                                        06928000
CMPYM:ASSEMBLE(                                                         06930000
      LDI 17;   << 17*(-1) = -17 >>                                     06932000
      PSHR 0;   << SR=0 >>                                              06934000
      MPYM M1;                                                          06936000
      BL *+2;                                                           06938000
      BR MPYMERROR;                   << NOT CCL >>                     06940000
      BNOV *+2;                                                         06942000
      BR MPYMERROR;                   << O NOT 0 >>                     06944000
      CMPN 17;                                                          06946000
      BE *+2;                                                           06948000
      BR MPYMERROR;                   << TOS NOT -17 >>                 06950000
                                                                        06952000
      LDI 2;   << 2 * %077777 = %177776 >>                              06954000
      SETR 0;   << SR=4 >>                                              06956000
      MPYM PMAX;                                                        06958000
      BL *+2;                                                           06960000
      BR MPYMERROR;                   << NOT CCL >>                     06962000
      BOV *+2;                                                          06964000
      BR MPYMERROR;                   << O NOT 1 >>                     06966000
      CMPN 2;                                                           06968000
      BE *+2;                                                           06970000
      BR MPYMERROR;                   << TOS NOT %177776 >>             06972000
                                                                        06974000
<< CHECK MPYM S- INSTRUCTION >>                                         06976000
                                                                        06978000
      LDI 2;                                                            06980000
      LDI 3;                                                            06982000
      MPYM S-1;                                                         06984000
      CMPI 6;                                                           06986000
      BE *+2;                                                           06988000
      BR MPYMERROR;                   << TOS NOT 6 >>                   06990000
      CMPI 2;                                                           06992000
      BE *+2;                                                           06994000
      BR MPYMERROR;                   << (S-1) NOT 2 >>                 06996000
                                                                        06998000
<< CHECK MPYM P+ INSTRUCTION >>                                         07000000
                                                                        07002000
      LDI 1;                                                            07004000
      MPYM C3;                                                          07006000
      CMPI 3;                                                           07008000
      BE EXIT;                                                          07010000
MPYMERROR:                                                              07012000
      BR MPYMERROR;                                                     07014000
C3:   CON 3);                                                           07016000
      NO'ERROR:=FALSE;                   << TOS NOT 3 >>                07018000
EXIT:                                                                   07020000
   END;                                                                 07022000
                                                                        07024000
PROCEDURE INCM'TEST;                                                    07026000
   BEGIN                                                                07028000
      INTEGER I,J;   << DUMMY FOR LOCAL STORAGE >>                      07030000
NEXT1:ASSEMBLE(                                                         07032000
      BR *+6;  << SKIP OVER CONSTANTS >>                                07034000
C1:   CON 1;                                                            07036000
C2:   CON 2;                                                            07038000
C3:   CON 3;                                                            07040000
C4:   CON 4;                                                            07042000
C5:   CON 5;                                                            07044000
P1:                                                                     07046000
                                                                        07048000
<< CHECK INCM DB+ INSTRUCTION >>                                        07050000
                                                                        07052000
      LDNI 1;                                                           07054000
      STOR VAR0;  << VAR0 := -1 >>                                      07056000
      INCM VAR0;                                                        07058000
      BE *+2;                                                           07060000
      BR INCMERROR;                   << NOT CCE >>                     07062000
      BNOV *+2;                                                         07064000
      BR INCMERROR;                   << O NOT 0 >>                     07066000
      BCY *+2;                                                          07068000
      BR INCMERROR;                   << C NOT 1 >>                     07070000
      LOAD VAR0;                                                        07072000
      CMPI 0;                                                           07074000
      BE *+2;                                                           07076000
      BR INCMERROR;                   << (VAR0) NOT 0 >>                07078000
                                                                        07080000
      LOAD PMAX;                                                        07082000
      STOR VAR1;                                                        07084000
      INCM VAR1;                                                        07086000
      BL *+2;                                                           07088000
      BR INCMERROR;                   << NOT CCL >>                     07090000
      BOV *+2;                                                          07092000
      BR INCMERROR;                   << O NOT 1 >>                     07094000
      BNCY *+2;                                                         07096000
      BR INCMERROR;                   << C NOT 0 >>                     07098000
      LOAD VAR1;                                                        07100000
      CMPM BIT0;                                                        07102000
      BE *+2;                                                           07104000
      BR INCMERROR;                   << (VAR1) NOT %100000 >>          07106000
                                                                        07108000
<< CHECK INCM Q+D INSTRUCTION >>                                        07110000
                                                                        07112000
      LDI 4;                                                            07114000
      STOR Q+2;                                                         07116000
      INCM Q+2;                                                         07118000
      LOAD Q+2;                                                         07120000
      CMPI 5;                                                           07122000
      BE *+2;                                                           07124000
      BR INCMERROR;                   << (Q+2) NOT 5 >>                 07126000
                                                                        07128000
<< CHECK INCM Q-D INSTRUCTION >>                                        07130000
                                                                        07132000
      LOAD Q-1;                                                         07134000
      STOR VAR0;                                                        07136000
      LDNI 7;                                                           07138000
      STOR Q-1;                                                         07140000
      INCM Q-1;                                                         07142000
      LOAD Q-1;                                                         07144000
      CMPN 6;                                                           07146000
      BE *+2;                                                           07148000
      BR INCMERROR;                   << (Q-1) NOT -6 >>                07150000
      LOAD VAR0;                                                        07152000
      STOR Q-1;   << RESTORE (Q-1:= >>                                  07154000
                                                                        07156000
<< CHECK INCM S-D INSTRUCTION >>                                        07158000
                                                                        07160000
      LDI 3;   << E IN STACK REG >>                                     07162000
      INCM S-0;                                                         07164000
      CMPI 4;                                                           07166000
      BE *+2;                                                           07168000
      BR INCMERROR;                   << TOS NOT 4 >>                   07170000
                                                                        07172000
<< CHECK INCM DB+D,I,X INSTRUCTION >>                                   07174000
                                                                        07176000
      LDI 0;                                                            07178000
      STOR VAR5;                                                        07180000
      LDI %7;                                                           07182000
      STOR VAR0;                                                        07184000
      LDXI 4;                                                           07186000
      INCM VAR0,I,X;   << E=DB+%13 >>                                   07188000
      LOAD VAR5;                                                        07190000
      CMPI %1;                                                          07192000
      BE *+2;                                                           07194000
      BR INCMERROR;                   << (DB+%13) NOT %1>>              07196000
                                                                        07198000
<< CHECK INCM Q+D,I,X INSTRUCTION >>                                    07200000
                                                                        07202000
      ADDS 4;                                                           07204000
      LDI 0;                                                            07206000
      STOR VAR2;                                                        07208000
      LDXI %7;                                                          07210000
      LOAD Q+1;                                                         07212000
      STOR VAR7;                                                        07214000
      LDI 1;                                                            07216000
      STOR Q+1;                                                         07218000
      INCM Q+1,I,X;   << E=DB+%10 >>                                    07220000
      LOAD VAR2;                                                        07222000
      CMPI 1;                                                           07224000
      BE *+2;                                                           07226000
      BR INCMERROR;                   << (DB+%10) NOT 1 >>              07228000
      LOAD VAR7;                                                        07230000
      STOR Q+1;   << RESTORE (Q+1) >>                                   07232000
                                                                        07234000
<< CHECK INCM Q-D,I,X INSTRUCTION >>                                    07236000
                                                                        07238000
      LDI 0;                                                            07240000
      STOR VAR6;                                                        07242000
      LDXI %12;                                                         07244000
      LOAD Q-3;                                                         07246000
      STOR VAR0;   << SAVE (Q-3) >>                                     07248000
      LDI 2;                                                            07250000
      STOR Q-3;                                                         07252000
      INCM Q-3,I,X;   << E=DB+%14 >>                                    07254000
      LOAD VAR6;                                                        07256000
      CMPI 1;                                                           07258000
      BE *+2;                                                           07260000
      BR INCMERROR;                   << (DB+%14) NOT 1 >>              07262000
      LOAD VAR0;                                                        07264000
      STOR Q-3;   << RESTORE (Q-3) >>                                   07266000
                                                                        07268000
<< CHECK INCM S-D,I,X INSTRUCTION >>                                    07270000
                                                                        07272000
      LDXN 6;                                                           07274000
      LDI %15;                                                          07276000
      LDI 0;                                                            07278000
      STOR VAR1;                                                        07280000
      ADDS 3;                                                           07282000
      INCM S-3,I,X;   << E=DB+%7>>                                      07284000
      LOAD VAR1;                                                        07286000
      CMPI 1;                                                           07288000
      BE EXIT);                                                         07290000
INCMERROR:                                                              07292000
      NO'ERROR:=FALSE;                   << (DB+%7) NOT 1 >>            07294000
EXIT:                                                                   07296000
   END;                                                                 07298000
                                                                        07300000
<< CHECK DECM DB+ INSTRUCTION >>                                        07302000
PROCEDURE DECM'TEST;                                                    07304000
   BEGIN                                                                07306000
                                                                        07308000
CDECM:ASSEMBLE(                                                         07310000
      ZERO;                                                             07312000
      STOR VAR0;                                                        07314000
      DECM VAR0;                                                        07316000
      BL *+2;                                                           07318000
      BR DECMERROR;                   << NOT CCL >>                     07320000
      BNOV *+2;                                                         07322000
      BR DECMERROR;                   << O NOT 0 >>                     07324000
      BNCY *+2;                                                         07326000
      BR DECMERROR;                   << C NOT 0 >>                     07328000
      LOAD VAR0;                                                        07330000
      CMPN 1;                                                           07332000
      BE *+2;                                                           07334000
      BR DECMERROR;                   << (VAR0) NOT -1 >>               07336000
                                                                        07338000
      LOAD BIT0;                                                        07340000
      STOR VAR1;                                                        07342000
      DECM VAR1;                                                        07344000
      BG *+2;                                                           07346000
      BR DECMERROR;                   << NOT CCG >>                     07348000
      BOV *+2;                                                          07350000
      BR DECMERROR;                   << O NOT 1 >>                     07352000
      BCY *+2;                                                          07354000
      BR DECMERROR;                   << C NOT 1 >>                     07356000
      LOAD VAR1;                                                        07358000
      CMPM PMAX;                                                        07360000
      BE *+2;                                                           07362000
      BR DECMERROR;                   << (VAR1) NOT %077777 >>          07364000
                                                                        07366000
<< CHECK DECM S- INSTRUCTION >>                                         07368000
                                                                        07370000
      LDI 3;                                                            07372000
      LDI 7;                                                            07374000
      DECM S-1;                                                         07376000
      CMPI 7;                                                           07378000
      BE *+2;                                                           07380000
      BR DECMERROR;                   << TOS NOT 7 >>                   07382000
      CMPI 2;                                                           07384000
      BE EXIT);                                                         07386000
DECMERROR:                                                              07388000
      NO'ERROR:=FALSE;                   << (S-1) NOT 2 >>              07390000
EXIT:                                                                   07392000
   END;                                                                 07394000
                                                                        07396000
<< CHECK CMPM S- INSTRUCTION >>                                         07398000
PROCEDURE CMPM'TEST;                                                    07400000
   BEGIN                                                                07402000
                                                                        07404000
CMPM:ASSEMBLE(                                                          07406000
      LDI 1;                                                            07408000
      LDI 2;                                                            07410000
      LDI 2;                                                            07412000
      CMPM S-1;                                                         07414000
      BE *+2;                                                           07416000
      BR CMPMERROR;                   << NOT CCE >>                     07418000
      CMPI 2;                                                           07420000
      BE *+2;                                                           07422000
      BR CMPMERROR;                   << TOS NOT 2 >>                   07424000
      CMPI 1;                                                           07426000
      BE *+2;                                                           07428000
      BR CMPMERROR;                   << STACK TROUBLE >>               07430000
                                                                        07432000
      LDI 5;                                                            07434000
      LDI 6;                                                            07436000
      CMPM S-0;                                                         07438000
      BE *+2;                                                           07440000
      BR CMPMERROR;                   << NOT CCE >>                     07442000
      CMPI 5;                                                           07444000
      BE *+2;                                                           07446000
      BR CMPMERROR;                   << STACK TROUBLE >>               07448000
                                                                        07450000
<< CHECK CMPM P- INSTRUCTION >>                                         07452000
                                                                        07454000
      LDI 4;                                                            07456000
      CMPM C4;   << 4 >>                                                07458000
      BE EXIT;                                                          07460000
CMPMERROR:                                                              07462000
      BR CMPMERROR;                                                     07464000
C4:   CON 4);                                                           07466000
      NO'ERROR:=FALSE;                   << NOT CCE >>                  07468000
EXIT:                                                                   07470000
   END;                                                                 07472000
                                                                        07474000
<< CHECK LDX S- INSTRUCTION >>                                          07476000
PROCEDURE LDX'TEST;                                                     07478000
   BEGIN                                                                07480000
                                                                        07482000
CLDX:ASSEMBLE(                                                          07484000
      LDI 8;                                                            07486000
      LDI 9;                                                            07488000
      LDX S-1;                                                          07490000
      LDXA;                                                             07492000
      CMPI 8;                                                           07494000
      BE *+2;                                                           07496000
      BR LDXERROR;                   << X NOT 8 >>                      07498000
                                                                        07500000
<< CHECK LDX P- INSTRUCTION >>                                          07502000
                                                                        07504000
      LDX C5;   << 5 >>                                                 07506000
      LDXA;                                                             07508000
      CMPI 5;                                                           07510000
      BE EXIT;                                                          07512000
LDXERROR:                                                               07514000
     BR LDXERROR;                                                       07516000
C5:  CON 5);                                                            07518000
      NO'ERROR:=FALSE;                   << X NOT 5 >>                  07520000
EXIT:                                                                   07522000
   END;                                                                 07524000
                                                                        07526000
<< CHECK LRA S- INSTRUCTION >>                                          07528000
PROCEDURE LRA'TEST;                                                     07530000
   BEGIN                                                                07532000
                                                                        07534000
CLRA:ASSEMBLE(                                                          07536000
      PSHR 1;   << S >>                                                 07538000
      LRA S-1;                                                          07540000
      CMP;                                                              07542000
      BE EXIT);                                                         07544000
      NO'ERROR:=FALSE;                  << TOS NOT DB REL @ OF S-1 >>   07546000
EXIT:                                                                   07548000
   END;                                                                 07550000
                                                                        07552000
PROCEDURE MRTESTS;   << MORE MEMORY REFERENCE TESTS >>                  07554000
<< CHECK STOR, ADDM, SUBM, MPYM, INCM, DECM, CMPM, LDX & LRA INSTR'S >> 07556000
                                                                        07558000
   BEGIN                                                                07560000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO STOR'TEST;           07562000
       MOVE INSTRUCT'NAME:="STOR  ";                                    07564000
       PRINT'NAMES;                                                     07566000
                                                                        07568000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO ADDM'TEST;           07570000
       MOVE INSTRUCT'NAME:="ADDM  ";                                    07572000
       PRINT'NAMES;                                                     07574000
                                                                        07576000
       MOVE INSTRUCT'NAME:="SUBM  ";                                    07578000
       PRINT'NAMES;                                                     07580000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO SUBM'TEST;           07582000
                                                                        07584000
       MOVE INSTRUCT'NAME:="MPYM  ";                                    07586000
       PRINT'NAMES;                                                     07588000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO MPYM'TEST;           07590000
                                                                        07592000
       MOVE INSTRUCT'NAME:="INCM  ";                                    07594000
       PRINT'NAMES;                                                     07596000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO INCM'TEST;           07598000
                                                                        07600000
       MOVE INSTRUCT'NAME:="DECM  ";                                    07602000
       PRINT'NAMES;                                                     07604000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DECM'TEST;           07606000
                                                                        07608000
       MOVE INSTRUCT'NAME:="CMPM  ";                                    07610000
       PRINT'NAMES;                                                     07612000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO CMPM'TEST;           07614000
                                                                        07616000
       MOVE INSTRUCT'NAME:="LDX   ";                                    07618000
       PRINT'NAMES;                                                     07620000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO LDX'TEST;            07622000
                                                                        07624000
       MOVE INSTRUCT'NAME:="LRA   ";                                    07626000
       PRINT'NAMES;                                                     07628000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO LRA'TEST;            07630000
                                                                        07632000
OUT:   LOOPCTN:=0; X:=STEPNO;                                           07634000
       STEPNO:=STEPNO+1;                                                07636000
                                                                        07638000
END;   << MRTESTS >>                                                    07640000
                                                                        07642000
PROCEDURE BRCT;   << BR INSTRUCTION - COVER TEST >>                     07644000
   BEGIN                                                                07646000
STAR: ASSEMBLE(                                                         07648000
      LDXI 1;                                                           07650000
      BR T2;    << *+%125 >>                                            07652000
      BR SKIP1;                   << UNEXPECTED >>                      07654000
                                                                        07656000
T3:   INCX;                                                             07658000
      BR T4;    << *+%252 >>                                            07660000
      BR SKIP1;                   << UNEXPECTED >>                      07662000
                                                                        07664000
T5:   INCX;                                                             07666000
      BR T6;   << *+%377 >>                                             07668000
      BR SKIP1;                   << UNEXPECTED >>                      07670000
                                                                        07672000
T7:   LDXA;                                                             07674000
      CMPI 6;                                                           07676000
      BE  *+2;                                                          07678000
      BR SKIP1;                   << UNEXPECTED >>                      07680000
                                                                        07682000
                                                                        07684000
      BR EXIT;               << RETURN >>                               07686000
      BR BRIERROR;                   << UNEXPECTED >>                   07688000
      CON10; CON10; CON10; CON10; CON10; CON10; CON10;                  07690000
                                                                        07692000
SKIP1:BR BRIERROR;                   << UNEXPECTED >>                   07694000
T2:   INCX;                                                             07696000
      NOP;                                                              07698000
      BR T3;   << *-%125 >>                                             07700000
      BR BRIERROR;                   << UNEXPECTED >>                   07702000
                                                                        07704000
      CON10; CON10; CON10; CON10; CON10; CON10; CON10; CON10;           07706000
      CON 0,0,0;                                                        07708000
                                                                        07710000
      BR BRIERROR;                   << UNEXPECTED >>                   07712000
T4:   INCX;                                                             07714000
      NOP;                                                              07716000
      BR T5;   << *-%252 >>                                             07718000
      BR BRIERROR;                   << UNEXPECTED >>                   07720000
                                                                        07722000
      CON10; CON10; CON10; CON10; CON10; CON10; CON10; CON10;           07724000
      CON 0,0,0;                                                        07726000
                                                                        07728000
      BR BRIERROR;                   << UNEXPECTED >>                   07730000
T6:   INCX;                                                             07732000
      NOP;                                                              07734000
      BR T7);   << *-%377 >>                                            07736000
BRIERROR:                                                               07738000
      NO'ERROR:=FALSE;                  << UNEXPECTED >>                07740000
EXIT:                                                                   07742000
                                                                        07744000
END;   << BRCT >>                                                       07746000
                                                                        07748000
                                                                        07750000
PROCEDURE BIAM;   << CHECK BR INSTRUCTION - ALL MODES >>                07752000
   BEGIN                                                                07754000
       MOVE INSTRUCT'NAME:="BR    ";                                    07756000
       PRINT'NAMES;                                                     07758000
STAR: ASSEMBLE(                                                         07760000
      PSHR 2;                                                           07762000
      DUP;                                                              07764000
      STOR SAVQ;   << SAVE Q >>                                         07766000
      ADDI 20;                                                          07768000
      DUP;                                                              07770000
      SUBI 10;                                                          07772000
      SETR 3;   << Q:=Q+10;  S:=Q+10 >>                                 07774000
                                                                        07776000
      LDI 1;                                                            07778000
      BR *+2;  << MODE 1: P+D >>                                        07780000
      BR BRIERROR;                                                      07782000
      CMPI 1;                                                           07784000
      BE *+2;                                                           07786000
      BR BRIERROR;                   << TOS NOT 1 >>                    07788000
                                                                        07790000
      LDI 2;                                                            07792000
      LDXI 1;                                                           07794000
      BR *+1,X << MODE 2: P+D+X >>                                      07796000
      BR BRIERROR;                                                      07798000
      CMPI 2;                                                           07800000
      BE *+2;                                                           07802000
      BR BRIERROR;                   << TOS NOT 2 >>                    07804000
                                                                        07806000
      LDI 3;                                                            07808000
      BR *+3,I;  << MODE 3: (P+D)+P+D >>                                07810000
      BR BRIERROR;                                                      07812000
      BR *+3;                                                           07814000
      CON 2;                                                            07816000
      BR BRIERROR;                                                      07818000
      CMPI 3;                                                           07820000
      BE *+2;                                                           07822000
      BR BRIERROR;                   << TOS NOT 3 >>                    07824000
                                                                        07826000
      LDI 4;                                                            07828000
      LDXI 1;                                                           07830000
      BR *+3,I,X;  << MODE 4: (P+D)+X+P+D >>                            07832000
      BR BRIERROR;                                                      07834000
      BR *+3;                                                           07836000
      CON 1;                                                            07838000
      BR BRIERROR;                                                      07840000
      CMPI 4;                                                           07842000
      BE *+2;                                                           07844000
      BR BRIERROR;                   << TOS NOT 4 >>                    07846000
                                                                        07848000
      LDI 5;                                                            07850000
      BR *+2;                                                           07852000
      BR *+3;   << MODE 5: P-D >>                                       07854000
      BR *-1;                                                           07856000
      BR BRIERROR;                                                      07858000
      CMPI 5;                                                           07860000
      BE *+2;                                                           07862000
      BR BRIERROR;                   << TOS NOT 5 >>                    07864000
                                                                        07866000
      LDI 6;                                                            07868000
      LDXI 3;                                                           07870000
      BR *-1,X;  << MODE 6: P-D+X >>                                    07872000
      BR BRIERROR;                                                      07874000
      CMPI 6;                                                           07876000
      BE *+2;                                                           07878000
      BR BRIERROR;                   << TOS NOT 6 >>                    07880000
                                                                        07882000
      LDI 7;                                                            07884000
      BR *+2;                                                           07886000
      CON 3;                                                            07888000
      BR *-1,I;  << MODE 7: (P-D)+P-D >>                                07890000
      BR BRIERROR;                                                      07892000
      CMPI 7;                                                           07894000
      BE *+2;                                                           07896000
      BR BRIERROR;                   << TOS NOT 7 >>                    07898000
                                                                        07900000
      LDI 8;                                                            07902000
      LDXI 4;                                                           07904000
      BR *+2;                                                           07906000
      CON -1;                                                           07908000
      BR *-1,I,X;   << MODE 8: (P-D)+X+P-D >>                           07910000
      BR BRIERROR;                                                      07912000
      CMPI 8;                                                           07914000
      BE *+2;                                                           07916000
      BR BRIERROR;                   << TOS NOT 8 >>                    07918000
                                                                        07920000
      LDI 11;                                                           07922000
      LRA *+4;                                                          07924000
      STOR DB+7;                                                        07926000
      BR DB+7,I;  << MODE 11: (DB+D)+PB >>                              07928000
      BR BRIERROR;                                                      07930000
      CMPI 11;                                                          07932000
      BE *+2;                                                           07934000
      BR BRIERROR;                   << TOS NOT 11 >>                   07936000
                                                                        07938000
      LDI 12;                                                           07940000
      LDXI 3;                                                           07942000
      LRA *+1;                                                          07944000
      STOR DB+%10;                                                      07946000
      BR DB+%10,I,X;  << MODE 12: (DB+D)+X+PB >>                        07948000
      BR BRIERROR;                                                      07950000
      CMPI 12;                                                          07952000
      BE *+2;                                                           07954000
      BR BRIERROR;                   << TOS NOT 12 >>                   07956000
                                                                        07958000
      LDI 15;                                                           07960000
      LRA *+4;                                                          07962000
      STOR Q+1;                                                         07964000
      BR Q+1,I;  << MODE 15:  (Q+D)+PB >>                               07966000
      BR BRIERROR;                                                      07968000
      CMPI 15;                                                          07970000
      BE *+2;                                                           07972000
      BR BRIERROR;                   << TOS NOT 15 >>                   07974000
                                                                        07976000
      LDI 16;                                                           07978000
      LDXI 3;                                                           07980000
      LRA *+1;                                                          07982000
      STOR Q+2;                                                         07984000
      BR Q+2,I,X;  << MODE 16:  (Q+D)+X+PB >>                           07986000
      BR BRIERROR;                                                      07988000
      CMPI 16;                                                          07990000
      BE *+2;                                                           07992000
      BR BRIERROR;                   << TOS NOT 16 >>                   07994000
                                                                        07996000
      LDI 19;                                                           07998000
      LRA *+4;                                                          08000000
      STOR Q-1;                                                         08002000
      BR Q-1,I;   << MODE 19:  (Q-D)+PB >>                              08004000
      BR BRIERROR;                                                      08006000
      CMPI 19;                                                          08008000
      BE *+2;                                                           08010000
      BR BRIERROR;                   << TOS NOT 19 >>                   08012000
                                                                        08014000
      LDI 20;                                                           08016000
      LDXN 1;                                                           08018000
      LRA *+5;                                                          08020000
      STOR Q-2;                                                         08022000
      BR Q-2,I,X;  << MODE 20:  (Q-D)+X+PB >>                           08024000
      BR BRIERROR;                                                      08026000
      CMPI 20;                                                          08028000
      BE *+2;                                                           08030000
      BR BRIERROR;                   << TOS NOT 20 >>                   08032000
                                                                        08034000
      LRA *+5;                                                          08036000
      STOR VAR0;                                                        08038000
      LRA *+3;  << MODE 23:  (S-D)+PB >>                                08040000
      BR S-0,I;                                                         08042000
      BR BRIERROR;                                                      08044000
      CMPM VAR0;                                                        08046000
      BE *+2;                                                           08048000
      BR BRIERROR;                   << TOS NOT BRANCH @ >>             08050000
                                                                        08052000
      LDI 23;                                                           08054000
      PSHR 0;   << SR=0 >>                                              08056000
      LRA *+4;   << MODE 23: (S-D)+PB >>                                08058000
      STOR S-4;                                                         08060000
      BR S-3,I;                                                         08062000
      BR BRIERROR;                                                      08064000
      CMPI 23;                                                          08066000
      BE *+2;                                                           08068000
      BR BRIERROR;                   << TOS NOT 23 >>                   08070000
                                                                        08072000
      LDI 24;                                                           08074000
      LDXN 2;                                                           08076000
      LRA *+6;                                                          08078000
      STOR S-2;                                                         08080000
      BR S-1,I,X;  << MODE 24: (S-D)+X+PB >>                            08082000
      BR BRIERROR;                                                      08084000
      CMPI 24;                                                          08086000
      BE NEXT;                                                          08088000
      BR BRIERROR);                        << TOS NOT 24 >>             08090000
                                                                        08092000
NEXT:ASSEMBLE(                                                          08094000
      LOAD SAVQ;                                                        08096000
      SETR 2);   << RESTORE Q >>                                        08098000
       PUSH(Q);SET(S);<<RESET STACK>>                                   08100000
       IF(LOOPCTN:=LOOPCTN+1)=LOOPNUMBER THEN GO OUT                    08102000
       ELSE GO STAR;                                                    08104000
                                                                        08106000
BRIERROR:                                                               08108000
       NO'ERROR:=FALSE;                                                 08110000
                                                                        08112000
OUT:   LOOPCTN:=0;                                                      08114000
       IF NO'ERROR THEN BRCT;    << COVER TEST OF BR INSTRUCTION >>     08116000
                                                                        08118000
END;   << BIAM >>                                                       08120000
                                                                        08122000
PROCEDURE LDB'TEST;                                                     08124000
   BEGIN                                                                08126000
<< DOES NOT INCLUDE TESTS FOR E>S OR E<DL OR NON-PRVL MODE >>           08128000
STAR: ASSEMBLE(                                                         08130000
<< CHECK LDB DB+ INSTRUCTION >>                                         08132000
                                                                        08134000
      ADDS 10;                                                          08136000
                                                                        08138000
      LDB BA1';     << "A" >>                                           08140000
      BE *+2;                                                           08142000
      BR LDBERROR;                   << NOT CCE >>                      08144000
      CMPI %101;                                                        08146000
      BE *+2;                                                           08148000
      BR LDBERROR;                   << TOS NOT %101 FOR "A" >>         08150000
                                                                        08152000
      PSHR 0;   << SR=0 >>                                              08154000
      LDB BA1BYTE2;   <<?>>                                             08156000
      BL *+2;                                                           08158000
      BR LDBERROR;                   << NOT CCL >>                      08160000
      CMPI %77;                                                         08162000
      BE *+2;                                                           08164000
      BR LDBERROR;                   << TOS NOT %77 FOR "?" >>          08166000
                                                                        08168000
      SETR 0;   << SR=4 >>                                              08170000
      LDB BA1BYTE4;   <<1>>                                             08172000
      BG *+2;                                                           08174000
      BR LDBERROR;                   << NOT CCG >>                      08176000
      CMPI %61;                                                         08178000
      BE *+2;                                                           08180000
      BR LDBERROR;                   << TOS NOT %61 FOR "1" >>          08182000
                                                                        08184000
<< CHECK LDB S- INSTRUCTIONS >>                                         08186000
                                                                        08188000
      LDNI 2;   << BYTE IN STACK REG >>                                 08190000
      LDB S-0;                                                          08192000
      CMPI %377;                                                        08194000
      BE *+2;                                                           08196000
      BR LDBERROR;                   << TOS NOT %377 >>                 08198000
      CMPN 2;                                                           08200000
      BE *+2;                                                           08202000
      BR LDBERROR;                   << STACK TROUBLE >>                08204000
                                                                        08206000
<< CHECK LDB DB+,X INSTRUCTION >>                                       08208000
                                                                        08210000
      LDXI 0;                                                           08212000
      LDB BA1',X;                                                       08214000
      CMPI %101;                                                        08216000
      BE *+2;                                                           08218000
      BR LDBERROR;                   << TOS NOT %101 = "A" >>           08220000
                                                                        08222000
      LDXI 1;                                                           08224000
      LDB BA1',X;                                                       08226000
      CMPI %60;                                                         08228000
      BE *+2;                                                           08230000
      BR LDBERROR;                   << TOS NOT %60 = "0" >>            08232000
                                                                        08234000
      LDXI 4;                                                           08236000
      LDB BA1',X;                                                       08238000
      CMPI %61;                                                         08240000
      BE *+2;                                                           08242000
      BR LDBERROR;                   << TOS NOT %61 = "1" >>            08244000
                                                                        08246000
      LDXI 5;                                                           08248000
      LDB BA1',X;                                                       08250000
      CMPI %135;                                                        08252000
      BE *+2;                                                           08254000
      BR LDBERROR;                   << TOS NOT %135 = "^" >>           08256000
                                                                        08258000
<< CHECK LDB DB+,I INSTRUCTION >>                                       08260000
                                                                        08262000
      LDB BPT1,I;                                                       08264000
      CMPI %101;                                                        08266000
      BE *+2;                                                           08268000
      BR LDBERROR;                      << TOS NOT %101 = "A" >>        08270000
                                                                        08272000
<< CHECK LDB DB+,I,X INSTRUCTION >>                                     08274000
                                                                        08276000
      LDXI 5;                                                           08278000
      LDB BPT1,I,X;                                                     08280000
      CMPI %135;                                                        08282000
      BE *+2;                                                           08284000
      BR LDBERROR;                   << TOS NOT %135 = "^" >>           08286000
                                                                        08288000
<< CHECK LDB Q+ INSTRUCTION >>                                          08290000
                                                                        08292000
      LOAD Q+3;                                                         08294000
      STOR VAR0;   << SAVE (Q+3) >>                                     08296000
      LOAD LB1;                                                         08298000
      STOR Q+3;                                                         08300000
      LDB Q+3;                                                          08302000
      CMPI 1;                                                           08304000
      BE *+2;                                                           08306000
      BR LDBERROR;                   << TOS NOT 1 >>                    08308000
      LOAD VAR0;                                                        08310000
      STOR Q+3;   << RESTORE (Q+3) >>                                   08312000
                                                                        08314000
<< CHECK LDB Q- INSTRUCTION >>                                          08316000
                                                                        08318000
      LOAD Q-2;                                                         08320000
      STOR VAR0;   << SAVE (Q-2) >>                                     08322000
      LOAD LB2;                                                         08324000
      STOR Q-2;                                                         08326000
      LDB Q-2;                                                          08328000
      CMPI 2;                                                           08330000
      BE *+2;                                                           08332000
      BR LDBERROR;                   << TOS NOT 2 >>                    08334000
      LOAD VAR0;                                                        08336000
      STOR Q-2;   << RESTORE (Q-2) >>                                   08338000
                                                                        08340000
<< COVER TESTS >>                                                       08342000
                                                                        08344000
      LOAD LB1;                                                         08346000
      STOR DB+%125;                                                     08348000
      LOAD LB2;                                                         08350000
      STOR DB+%252;                                                     08352000
      LOAD LB3;                                                         08354000
      STOR DB+%377;                                                     08356000
      LDB DB+%125;                                                      08358000
      CMPI 1;                                                           08360000
      BE *+2;                                                           08362000
      BR LDBERROR;                   << TOS NOT 1 >>                    08364000
      LDB DB+%252;                                                      08366000
      CMPI 2;                                                           08368000
      BE *+2;                                                           08370000
      BR LDBERROR;                   << TOS NOT 2 >>                    08372000
      LDB DB+%377;                                                      08374000
      CMPI 3;                                                           08376000
      BE EXIT);                                                         08378000
LDBERROR:                                                               08380000
      NO'ERROR:=FALSE;                   << TOS NOT 3 >>                08382000
EXIT:                                                                   08384000
   END;                                                                 08386000
                                                                        08388000
<< CHECK STB DB+ INSTRUCTION >>                                         08390000
                                                                        08392000
PROCEDURE STB'TEST;                                                     08394000
   BEGIN                                                                08396000
      INTEGER I;      << DUMMY FOR Q+1 >>                               08398000
CSTB: ASSEMBLE(                                                         08400000
      ZERO;                                                             08402000
      STOR VAR0;                                                        08404000
      LDI 21;                                                           08406000
      LDI %377;                                                         08408000
      PSHR 0;   << SR=0 >>                                              08410000
      STB VAR0;                                                         08412000
      CMPI 21;                                                          08414000
      BE *+2;                                                           08416000
      BR STBERROR;                   << TOS NOT 21 AFTER STB >>         08418000
      LOAD VAR0;                                                        08420000
      CMPM M256;                                                        08422000
      BE *+2;                                                           08424000
      BR STBERROR;                   << (VAR0) NOT %177400 >>           08426000
                                                                        08428000
      LDI %125;                                                         08430000
      DUP;                                                              08432000
      STOR VAR0;   << (VAR0 := %000125) >>                              08434000
      SETR 0;   << SR=4 >>                                              08436000
      STB VAR0;                                                         08438000
      LOAD VAR0;                                                        08440000
      CMPM ODD;                                                         08442000
      BE *+2;                                                           08444000
      BR STBERROR;                   << (VAR0) NOT %052525 >>           08446000
                                                                        08448000
<< CHECK STB DB+,X INSTRUCTION >>                                       08450000
                                                                        08452000
      ZERO;                                                             08454000
      STOR VAR2;   << VAR2 := 0 >>                                      08456000
      LDXI 5;                                                           08458000
      LDI 3;                                                            08460000
      STB VAR0,X;  << REALLY VAR2(8:15) >>                              08462000
      LOAD VAR2;                                                        08464000
      CMPI 3;                                                           08466000
      BE *+2;                                                           08468000
      BR STBERROR;                   << (VAR2) NOT 3 >>                 08470000
      LDXI 4;                                                           08472000
      LDI %377;                                                         08474000
      STB VAR0,X;  << REALLY VAR2(0:7) >>                               08476000
      LOAD VAR2;                                                        08478000
      CMPN 253;                                                         08480000
      BE *+2;                                                           08482000
      BR STBERROR;                   << (VAR2) NOT %177403 >>           08484000
                                                                        08486000
<< CHECK STB S- INSTRUCTION >>                                          08488000
                                                                        08490000
      LDI 3;                                                            08492000
      LDI 2;                                                            08494000
      LDI 1;                                                            08496000
      STB S-2;   << STORE INTO STACK REG >>                             08498000
      CMPI 2;                                                           08500000
      BE *+2;                                                           08502000
      BR STBERROR;                   << STACK NOT POPPED >>             08504000
      CMPM PAT403;                                                      08506000
      BE *+2;                                                           08508000
      BR STBERROR;                   << (S-1) NOT %403 >>               08510000
                                                                        08512000
<< CHECK STB DB+,I INSTRUCTION >>                                       08514000
                                                                        08516000
      LDI %17;                                                          08518000
      STOR VAR0;   << (DB+%6):=%17 >>                                   08520000
      LDI 0;                                                            08522000
      STOR VAR1;   << (DB+%7 ):=0;>>                                    08524000
      LDI %22;                                                          08526000
      STB VAR0,I;                                                       08528000
      LOAD VAR1;                                                        08530000
      CMPI %22;                                                         08532000
      BE *+2;                                                           08534000
      BR STBERROR;                   << (DB+7) NOT %22 >>               08536000
                                                                        08538000
<< CHECK STB DB+,I,X INSTRUCTION >>                                     08540000
                                                                        08542000
      LDI 0;                                                            08544000
      STOR VAR2;                                                        08546000
      LDI %14;                                                          08548000
      STOR VAR0;                                                        08550000
      LDXI %4;                                                          08552000
      LDI %377;                                                         08554000
      STB VAR0,I,X;   << LEFT BYTE OF VAR2 >>                           08556000
      LOAD VAR2;                                                        08558000
      CMPM M256;                                                        08560000
      BE *+2;                                                           08562000
      BR STBERROR;                   << (VAR2) NOT %177400 >>           08564000
                                                                        08566000
<< CHECK STB Q+ INSTRUCTION >>                                          08568000
                                                                        08570000
      LOAD Q+1;                                                         08572000
      STOR VAR0;   << SAVE (Q+1) >>                                     08574000
      ZERO;                                                             08576000
      STOR Q+1;   << (Q+1):=0 >>                                        08578000
      LDI 1;                                                            08580000
      STB Q+1;                                                          08582000
      LOAD Q+1;                                                         08584000
      CMPM LB1;                                                         08586000
      BE *+2;                                                           08588000
      BR STBERROR;                   << (Q+1) NOT %400 >>               08590000
      LOAD VAR0;                                                        08592000
      STOR Q+1;    << RESTORE (Q+1) >>                                  08594000
                                                                        08596000
<< CHECK STB Q- INSTRUCTION >>                                          08598000
                                                                        08600000
      LOAD Q-1;                                                         08602000
      STOR VAR0;   << SAVE (Q-1) >>                                     08604000
      ZERO;                                                             08606000
      STOR Q-1;   << (Q-1):=0 >>                                        08608000
      LDI 2;                                                            08610000
      STB Q-1;                                                          08612000
      LOAD Q-1;                                                         08614000
      CMPM LB2;                                                         08616000
      BE NEXT;                                                          08618000
      BR STBERROR;                        << (Q-1) NOT %1000 >>         08620000
NEXT:                                                                   08622000
      LOAD VAR0;                                                        08624000
      STOR Q-1;   << RESTORE (Q-1) >>                                   08626000
      BR EXIT);                                                         08628000
STBERROR:                                                               08630000
      NO'ERROR:=FALSE;                                                  08632000
EXIT:                                                                   08634000
   END; << STB >>                                                       08636000
                                                                        08638000
PROCEDURE TESTLDBSTB;   << TEST LDB & STB INSTRUCTIONS >>               08640000
BEGIN                                                                   08642000
                                                                        08644000
       MOVE INSTRUCT'NAME:="LDB   ";                                    08646000
       PRINT'NAMES;                                                     08648000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO LDB'TEST;            08650000
                                                                        08652000
       MOVE INSTRUCT'NAME:="STB   ";                                    08654000
       PRINT'NAMES;                                                     08656000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO STB'TEST;            08658000
                                                                        08660000
END;   << TESTLDBSTB >>                                                 08662000
                                                                        08664000
PROCEDURE LDD'TEST;                                                     08666000
   BEGIN                                                                08668000
                                                                        08670000
STAR: ASSEMBLE(                                                         08672000
      ADDS 10;                                                          08674000
<< TEST FOR LDD E>S DONE IN SECTION 5 >>                                08676000
                                                                        08678000
<< CHECK LDD DB+ INSTRUCTION >>                                         08680000
                                                                        08682000
      LDNI 11;                                                          08684000
      PSHR 0;   << SR=0 >>                                              08686000
      LDD P0;   << 0,1 >>                                               08688000
      BG *+2;                                                           08690000
      BR LDDERROR;                   << NOT CCG >>                      08692000
      LDI 0;                                                            08694000
      LDI 1;                                                            08696000
      DCMP;                                                             08698000
      BE *+2;                                                           08700000
      BR LDDERROR;                   << (S,S-1) NOT 0,1 >>              08702000
      CMPN 11;                                                          08704000
      BE *+2;                                                           08706000
      BR LDDERROR;                   << STACK TROUBLE >>                08708000
                                                                        08710000
      SETR 0;   << SR=4 >>                                              08712000
      LDD K0;   << 0,0 >>                                               08714000
      BE *+2;                                                           08716000
      BR LDDERROR;                   << NOT CCE >>                      08718000
      DZRO,DCMP;                                                        08720000
      BE *+2;                                                           08722000
      BR LDDERROR;                   << RESULT NOT 0,0 >>               08724000
                                                                        08726000
      LDD M1;   << -1,-2 >>                                             08728000
      BL *+2;                                                           08730000
      BR LDDERROR;                   << NOT CCL >>                      08732000
      CMPN 2;                                                           08734000
      BE *+2;                                                           08736000
      BR LDDERROR;                                                      08738000
      CMPN 1;                                                           08740000
      BE *+2;                                                           08742000
      BR LDDERROR;                   << RESULT NOT -1,-2 >>             08744000
                                                                        08746000
<< CHECK LDD S- INSTRUCTION >>                                          08748000
                                                                        08750000
      PSHR 0;   << SR=0 >>                                              08752000
      LDI 1;                                                            08754000
      LDI 2;    << SR=2 >>                                              08756000
      LDD S-1;                                                          08758000
      CMPI 2;                                                           08760000
      BE *+2;                                                           08762000
      BR LDDERROR;                   << TOS NOT 2 >>                    08764000
      CMPI 1;                                                           08766000
      BE *+2;                                                           08768000
      BR LDDERROR;                   << (S-1) NOT 1 >>                  08770000
      CMPI 2;                                                           08772000
      BE *+2;                                                           08774000
      BR LDDERROR;                   << (S-2) NOT 2 >>                  08776000
      CMPI 1;                                                           08778000
      BE *+2;                                                           08780000
      BR LDDERROR;                   << (S-3) NOT 1 >>                  08782000
                                                                        08784000
<< CHECK LDD Q+ INSTRUCTION >>                                          08786000
                                                                        08788000
      LDD Q+1;                                                          08790000
      LOAD Q+1;                                                         08792000
      LOAD Q+2;                                                         08794000
      DCMP;                                                             08796000
      BE *+2;                                                           08798000
      BR LDDERROR;                   << (SI1,S) NOT (Q+1,Q+2) >>        08800000
                                                                        08802000
<< CHECK LDD Q- INSTRUCTION >>                                          08804000
                                                                        08806000
      LDD Q-1;                                                          08808000
      LOAD Q-1;                                                         08810000
      LOAD Q+0;                                                         08812000
      DCMP;                                                             08814000
      BE *+2;                                                           08816000
      BR LDDERROR;                   << (S-1,S) NOT (Q-1,Q) >>          08818000
                                                                        08820000
<< CHECK LDD DB+,X INSTRUCTION >>                                       08822000
                                                                        08824000
      LDI 5;                                                            08826000
      STOR VAR2;                                                        08828000
      LDI 6;                                                            08830000
      STOR VAR3;                                                        08832000
      LDXI %1;                                                          08834000
      LDD VAR0,X;   << E=DB+%10>>                                       08836000
      CMPI 6;                                                           08838000
      BE *+2;                                                           08840000
      BR LDDERROR;                   << TOS NOT 6 >>                    08842000
      CMPI 5;                                                           08844000
      BE *+2;                                                           08846000
      BR LDDERROR;                   << TOS NOT 5 >>                    08848000
                                                                        08850000
<< CHECK LDD DB+,I INSTRUCTION >>                                       08852000
                                                                        08854000
      LDI 4;                                                            08856000
      STOR VAR6;                                                        08858000
      LDI 5;                                                            08860000
      STOR VAR7;                                                        08862000
      LDI %14;                                                          08864000
      STOR VAR0;                                                        08866000
      LDD VAR0,I;   << E=DB+%14>>                                       08868000
      LDI 4;                                                            08870000
      LDI 5;                                                            08872000
      DCMP;                                                             08874000
      BE *+2;                                                           08876000
      BR LDDERROR;                   << (S-1,S) NOT 4,5 >>              08878000
                                                                        08880000
<< CHECK LDD DB+,I,X INSTRUCTION >>                                     08882000
                                                                        08884000
      LDI %10;                                                          08886000
      STOR VAR0;                                                        08888000
      LDXI %1;                                                          08890000
      LDI 3;                                                            08892000
      STOR VAR4;                                                        08894000
      LDI 7;                                                            08896000
      STOR VAR5;                                                        08898000
      LDD VAR0,I,X;   << E=DB+%12>>                                     08900000
      LDI 3;                                                            08902000
      LDI 7;                                                            08904000
      DCMP;                                                             08906000
      BE *+2;                                                           08908000
      BR LDDERROR;                   << (S-1,S) NOT 3,7 >>              08910000
                                                                        08912000
<< CHECK LDD S-,I INSTRUCTION >>                                        08914000
                                                                        08916000
      LDI 9;                                                            08918000
      STOR VAR2;                                                        08920000
      LDI 10;                                                           08922000
      STOR VAR3;                                                        08924000
      LDI %10;                                                          08926000
      LDD S-0,I;   << E=DB+%10>>                                        08928000
      LDI 9;                                                            08930000
      LDI 10;                                                           08932000
      DCMP;                                                             08934000
      BE *+2;                                                           08936000
      BR LDDERROR;                   << (S-1,S) NOT 9,10 >>             08938000
                                                                        08940000
<< COVER TESTS >>                                                       08942000
                                                                        08944000
      LDI 1;                                                            08946000
      LDI 2;                                                            08948000
      DDUP;                                                             08950000
      STOR DB+%126;                                                     08952000
      STOR DB+%125;                                                     08954000
      LDD DB+%125;                                                      08956000
      DCMP;                                                             08958000
      BE *+2;                                                           08960000
      BR LDDERROR;                   << (S-1,S) NOT 1,2 >>              08962000
                                                                        08964000
      LDI 3;                                                            08966000
      LDI 4;                                                            08968000
      DDUP;                                                             08970000
      STOR DB+%253;                                                     08972000
      STOR DB+%252;                                                     08974000
      LDD DB+%252;                                                      08976000
      DCMP;                                                             08978000
      BE *+2;                                                           08980000
      BR LDDERROR;                   << S-1,S) NOT 3,4 >>               08982000
                                                                        08984000
      LDI 5;                                                            08986000
      STOR DB+%377;                                                     08988000
      LDD DB+%377;                                                      08990000
      LDI 5;                                                            08992000
      LDXI %377;                                                        08994000
      LOAD DB+1,X;                                                      08996000
      DCMP;                                                             08998000
      BE OUT);                                                          09000000
LDDERROR:                                                               09002000
      NO'ERROR:=FALSE;                   << (S-1,S) NOT 5,(DB+%400) >>  09004000
OUT:                                                                    09006000
END;                                                                    09008000
PROCEDURE STD'TEST;                                                     09010000
BEGIN                                                                   09012000
                                                                        09014000
<< CHECK STD DB+ INSTRUCTION >>                                         09016000
                                                                        09018000
CSTD: ASSEMBLE(                                                         09020000
      LDI 4;                                                            09022000
      LDI 7;                                                            09024000
      LDI 9;                                                            09026000
      PSHR 0;   << SR=0 >>                                              09028000
      STD VAR0;  << (VAR0,VAR1) := 7,9 >>                               09030000
      CMPI 4;                                                           09032000
      BE *+2;                                                           09034000
      BR STDERROR;                   << STACK TROUBLE, TOS NOT 4 >>     09036000
      LOAD VAR0;                                                        09038000
      CMPI 7;                                                           09040000
      BE *+2;                                                           09042000
      BR STDERROR;                   << (VARO) NOT 7 >>                 09044000
      LOAD VAR1;                                                        09046000
      CMPI 9;                                                           09048000
      BE *+2;                                                           09050000
      BR STDERROR;                   << (VAR1) NOT 9 >>                 09052000
                                                                        09054000
      LDNI 4;                                                           09056000
      ZERO;                                                             09058000
      SETR 0;   << SR=4 >>                                              09060000
      STD VAR0;   << (VAR0,VAR1) := -4,0 >>                             09062000
      LOAD VAR1;                                                        09064000
                                                                        09066000
      BE *+2;                                                           09068000
      BR STDERROR;                   << (VAR1) NOT 0 >>                 09070000
      LOAD VAR0;                                                        09072000
      CMPN 4;                                                           09074000
      BE *+2;                                                           09076000
      BR STDERROR;                   << (VAR0) NOT - 4 >>               09078000
                                                                        09080000
<< CHECK STD S- INSTRUCTION >>                                          09082000
                                                                        09084000
      LDI 1;                                                            09086000
      LDI 2;                                                            09088000
      LDI 3;                                                            09090000
      STD S-1;                                                          09092000
      CMPI 1;                                                           09094000
      BE *+2;                                                           09096000
      BR STDERROR;                   << TOS NOT 1 >>                    09098000
                                                                        09100000
      LDI 1;                                                            09102000
      LDI 2;                                                            09104000
      LDI 3;                                                            09106000
      LDI 4;                                                            09108000
      LDI 5;   << SR=4 >>                                               09110000
      STD S-3;                                                          09112000
      CMPI 5;                                                           09114000
      BE *+2;                                                           09116000
      BR STDERROR;                   << TOS NOT 5 >>                    09118000
      CMPI 4;                                                           09120000
      BE *+2;                                                           09122000
      BR STDERROR;                   << (S-1) NOT 4 >>                  09124000
      CMPI 1;                                                           09126000
      BE *+2;                                                           09128000
      BR STDERROR;                   << (S-2) NOT 1 >>                  09130000
                                                                        09132000
      LDI 5;                                                            09134000
      LDI 6;                                                            09136000
      PSHR 0;  <<SR=0 >>                                                09138000
      LDI 7;                                                            09140000
      LDI 8;                                                            09142000
      LDI 9;   << SR=3 >>                                               09144000
      STD S-3;   << (E) INTO CORE, (E+1) INTO STACK REG >>              09146000
      CMPI 9;                                                           09148000
      BE *+2;                                                           09150000
      BR STDERROR;                   << TOS NOT 9 >>                    09152000
      CMPI 8;                                                           09154000
      BE *+2;                                                           09156000
      BR STDERROR;                   << TOS NOT 8 >>                    09158000
      CMPI 5;                                                           09160000
      BE *+2;                                                           09162000
      BR STDERROR;                   << TOS NOT 5 >>                    09164000
                                                                        09166000
<< CHECK STD S-,I INSTRUCTION >>                                        09168000
                                                                        09170000
      LDI %7;                                                           09172000
      LDI 2;                                                            09174000
      LDI 3;   << SR >=3 >>                                             09176000
      STD S-2,I;   << E=DB+%7>>                                         09178000
      LOAD VAR1;                                                        09180000
      CMPI 2;                                                           09182000
      BE *+2;                                                           09184000
      BR STDERROR;                   << (DB+7) NOT 2 >>                 09186000
      LOAD VAR2;                                                        09188000
      CMPI 3;                                                           09190000
      BE *+2;                                                           09192000
      BR STDERROR;                   << (DB+%10) NOT 3 >>               09194000
                                                                        09196000
<< TEST FOR STD E>S DONE IN SECTION 5 >>                                09198000
                                                                        09200000
<< CHECK STD Q+ INSTRUCTION >>                                          09202000
                                                                        09204000
      ADDS 10;                                                          09206000
      LOAD Q+1;                                                         09208000
      LOAD Q+2;                                                         09210000
      STD VAR0;    << SAVE (Q+1,Q+2) >>                                 09212000
      LDI 3;                                                            09214000
      LDI 4;                                                            09216000
      STD Q+1;                                                          09218000
      LOAD Q+1;                                                         09220000
      CMPI 3;                                                           09222000
      BE *+2;                                                           09224000
      BR STDERROR;                   << (Q+1) NOT 3 >>                  09226000
      LOAD Q+2;                                                         09228000
      CMPI 4;                                                           09230000
      BE *+2;                                                           09232000
      BR STDERROR;                   << (Q+2) NOT 4 >>                  09234000
      LDD VAR0;                                                         09236000
      STD Q+1;   << RESTORE (Q+1,Q+2) >>                                09238000
                                                                        09240000
<< CHECK STD Q- INSTRUCTION >>                                          09242000
                                                                        09244000
      LOAD Q-3;                                                         09246000
      LOAD Q-2;                                                         09248000
      STD VAR0;   << SAVE (Q-3,Q-2) >>                                  09250000
      LDI 6;                                                            09252000
      LDI 7;                                                            09254000
      STD Q-3;                                                          09256000
      LOAD Q-3;                                                         09258000
      CMPI 6;                                                           09260000
      BE *+2;                                                           09262000
      BR STDERROR;                   << (Q-3) NOT 6 >>                  09264000
      LOAD Q-2;                                                         09266000
      CMPI 7;                                                           09268000
      BE *+2;                                                           09270000
      BR STDERROR;                   << (Q-2) NOT 7 >>                  09272000
      LDD VAR0;                                                         09274000
      STD Q-3;   << RESTORE (Q-3,Q-2) >>                                09276000
                                                                        09278000
<< CHECK STD DB+,X INSTRUCTION >>                                       09280000
                                                                        09282000
      LDI 4;                                                            09284000
      LDI 5;                                                            09286000
      DDUP;                                                             09288000
      LDXI 1;                                                           09290000
      STD VAR1,X;   << E=DB+%11 >>                                      09292000
      LOAD VAR3;                                                        09294000
      LOAD VAR4;                                                        09296000
      DCMP;                                                             09298000
      BE *+2;                                                           09300000
      BR STDERROR;                   << (DB+%11,DB+%12) NOT 4,5 >>      09302000
                                                                        09304000
<< CHECK STD DB+,I INSTRUCTION >>                                       09306000
                                                                        09308000
      LDI %13;                                                          09310000
      STOR VAR1;                                                        09312000
      LDI 10;                                                           09314000
      LDI 11;                                                           09316000
      DDUP;                                                             09318000
      STD VAR1,I;   << E=DB+%13 >>                                      09320000
      LOAD VAR5;                                                        09322000
      LOAD VAR6;                                                        09324000
      DCMP;                                                             09326000
      BE *+2;                                                           09328000
      BR STDERROR;                   << (DB+%13,DB+%14 ) NOT 10,11 >>   09330000
                                                                        09332000
<< CHECK STD DB,I,X INSTRUCTION >>                                      09334000
                                                                        09336000
      LDXI 2;                                                           09338000
      LDI %10;                                                          09340000
      STOR VAR0;                                                        09342000
      LDI 9;                                                            09344000
      LDI 10;                                                           09346000
      DDUP;                                                             09348000
      STD VAR0,I,X;   << E=DB+%14 >>                                    09350000
      LOAD VAR6;                                                        09352000
      LOAD VAR7;                                                        09354000
      DCMP;                                                             09356000
      BE NEXT;                                                          09358000
      BR STDERROR);                    << DB+%14,DB+%15) NOT 9,10 >>    09360000
NEXT:                                                                   09362000
       PUSH(Q);SET(S);<<RESET STACK>>                                   09364000
      RETURN;                                                           09366000
                                                                        09368000
STDERROR:                                                               09370000
      NO'ERROR:=FALSE;                                                  09372000
                                                                        09374000
OUT:   LOOPCTN:=0;                                                      09376000
                                                                        09378000
END;                                                                    09380000
PROCEDURE TESTLDDSTD;                                                   09382000
BEGIN                                                                   09384000
       MOVE INSTRUCT'NAME := "LDD   ";                                  09386000
       PRINT'NAMES;                                                     09388000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO LDD'TEST;            09390000
       MOVE INSTRUCT'NAME := "STD   ";                                  09392000
       PRINT'NAMES;                                                     09394000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO STD'TEST;            09396000
END;                                                                    09398000
                                                                        09400000
PROCEDURE BCC'TEST;                                                     09402000
   BEGIN                                                                09404000
STAR: ASSEMBLE(                                                         09406000
<< CHECK BCC P+L,I INSTRUCTION >>                                       09408000
                                                                        09410000
      LDI 1;   << CCG >>                                                09412000
      SETR 0;   << SR=4 >>                                              09414000
      BG *+3,I;                                                         09416000
      BR BCCERROR;                   << DID NOT BRANCH >>               09418000
      BR *+3;  << CONTINUE >>                                           09420000
      CON 2;                                                            09422000
      BR BCCERROR;                   << SHOULD NEVER GET HERE >>        09424000
                                                                        09426000
      LDNI 1;   << CCL >>                                               09428000
      BG *+2,I;                                                         09430000
      BR *+3;                                                           09432000
      CON 1;                                                            09434000
      BR BCCERROR;                   << UNEXPECTED BRANCH >>            09436000
                                                                        09438000
      BR *+2;  << BR TO TEST ENTRY >>                                   09440000
      CON 4;                                                            09442000
      LDI 0;   << CCE >>                                                09444000
      BE *-2,I;                                                         09446000
      BR BCCERROR;                   << DID NOT BRANCH >>               09448000
                                                                        09450000
      LDI 3;   << CCG >>                                                09452000
      PSHR 0;   << SR=0 >>                                              09454000
      BG NEXT1,I);                                                      09456000
BCCERROR:                                                               09458000
      NO'ERROR:=FALSE;                   << DID NOT BRANCH >>           09460000
      GO EXIT;                                                          09462000
      ASSEMBLE(                                                         09464000
      BR *+2;                                                           09466000
NEXT1:CON -1);                                                          09468000
EXIT: END;        << BCC >>                                             09470000
                                                                        09472000
                                                                        09474000
<< CHECK IABZ P+L,I INSTRUCTIONS >>                                     09476000
                                                                        09478000
PROCEDURE IABZ'TEST;                                                    09480000
  BEGIN                                                                 09482000
      ASSEMBLE(                                                         09484000
      LDNI 1;                                                           09486000
      IABZ *+3,I;                                                       09488000
      BR IABZERROR;                   << DID NOT BRANCH >>              09490000
      BR *+3;                                                           09492000
      CON 2;                                                            09494000
      BR IABZERROR;                                                     09496000
                                                                        09498000
      ZERO;                                                             09500000
      SETR 0;   << SR=4 >>                                              09502000
      IABZ *+2,I;                                                       09504000
      BR *+3;                                                           09506000
      CON 1;                                                            09508000
      BR IABZERROR;                   << UNEXPECTED BRANCH >>           09510000
                                                                        09512000
      BR *+2;                                                           09514000
      CON 5;                                                            09516000
      LDNI 1;                                                           09518000
      PSHR 0;   << SR=0 >>                                              09520000
      IABZ *-3,I;                                                       09522000
      BR IABZERROR;                   << DID NOT BRANCH >>              09524000
                                                                        09526000
      LDNI 1;                                                           09528000
      IABZ NEXT2,I);                                                    09530000
IABZERROR:                                                              09532000
      NO'ERROR:=FALSE;                   << DID NOT BRANCH >>           09534000
      GO EXIT;                                                          09536000
      ASSEMBLE(                                                         09538000
      BR *+2;                                                           09540000
NEXT2:CON -1);                                                          09542000
EXIT: END;   << IABZ >>                                                 09544000
                                                                        09546000
<< MORE INDIRECT CONDITIONAL BRANCH TESTS >>                            09548000
                                                                        09550000
PROCEDURE ICB'TEST;                                                     09552000
   BEGIN                                                                09554000
      ASSEMBLE(                                                         09556000
      LDXN 1;                                                           09558000
      IXBZ *+3,I;                                                       09560000
      BR ICBERROR;                   << DID NOT BRANCH >>               09562000
      BR *+3;                                                           09564000
      CON 2;                                                            09566000
      BR ICBERROR;                   << UNEXPECTED >>                   09568000
                                                                        09570000
      LDXI 1;                                                           09572000
      DXBZ *+3,I;                                                       09574000
      BR ICBERROR;                   << DID NOT BRANCH >>               09576000
      BR *+3;                                                           09578000
      CON 2;                                                            09580000
      BR ICBERROR;                   << UNEXPECTED >>                   09582000
                                                                        09584000
      LDNI 1;                                                           09586000
      DUP,ADD;   << C=1 >>                                              09588000
      BCY *+3,I;                                                        09590000
      BR ICBERROR;                   << DID NOT BRANCH >>               09592000
      BR *+3;                                                           09594000
      CON 2;                                                            09596000
      BR ICBERROR;                   << UNEXPECTED >>                   09598000
                                                                        09600000
      DZRO,ADD;   << C=0 >>                                             09602000
      BNCY *+3,I;                                                       09604000
      BR ICBERROR;                   << DID NOT BRANCH >>               09606000
      BR *+3;                                                           09608000
      CON 2;                                                            09610000
      BR ICBERROR;                   << UNEXPECTED >>                   09612000
                                                                        09614000
      LDI 1;                                                            09616000
      DABZ *+3,I;                                                       09618000
      BR ICBERROR;                   << DID NOT BRANCH >>               09620000
      BR *+3;                                                           09622000
      CON 2;                                                            09624000
      BR ICBERROR;                   << UNEXPECTED >>                   09626000
                                                                        09628000
      LOAD PMAX;                                                        09630000
      DUP,ADD;   << O=1 >>                                              09632000
      BOV *+3,I;                                                        09634000
      BR ICBERROR;                   << DID NOT BRANCH >>               09636000
      BR *+3;                                                           09638000
      CON 2;                                                            09640000
      BR ICBERROR;                   << UNEXPECTED >>                   09642000
                                                                        09644000
      DZRO,ADD;   << O=0 >>                                             09646000
      BNOV *+3,I;                                                       09648000
      BR ICBERROR;                   << DID NOT BRANCH >>               09650000
      BR *+3;                                                           09652000
      CON 2;                                                            09654000
      BR ICBERROR;                   << UNEXPECTED >>                   09656000
                                                                        09658000
      LDI 1;                                                            09660000
      BRO *+3,I;                                                        09662000
      BR ICBERROR;                   << DID NOT BRANCH >>               09664000
      BR *+3;                                                           09666000
      CON 2;                                                            09668000
      BR ICBERROR;                   << UNEXPECTED >>                   09670000
                                                                        09672000
      LDI 6;                                                            09674000
      BRE EXIT;                                                         09676000
      BR ICBERROR;                   << DID NOT BRANCH >>               09678000
      BR EXIT;                                                          09680000
      NOP);                                                             09682000
ICBERROR:                                                               09684000
      NO'ERROR:=FALSE;                       << UNEXPECTED >>           09686000
EXIT: END;   << ICB >>                                                  09688000
                                                                        09690000
<< CHECK BRE P+L,I WITH SR=0 >>                                         09692000
<< APPLIES TO ALL SUB OPCODE 1 INSTRUCTIONS >>                          09694000
                                                                        09696000
PROCEDURE BRE'TEST;                                                     09698000
   BEGIN                                                                09700000
CBRE: ASSEMBLE(                                                         09702000
      DZRO,INCB;                                                        09704000
      PSHR 0;   << MAKE SR=0 >>                                         09706000
      BRE *+3,I;                                                        09708000
      BR BREERROR;                  << DID NOT BRANCH >>                09710000
      BR *+3;   << CONTINUE >>                                          09712000
      CON 2;                                                            09714000
      BR BREERROR;                  << SHOULD NEVER END HERE >>         09716000
      CMPI 1;                                                           09718000
      BE EXIT;                                                          09720000
      BR BREERROR);                                                     09722000
                                                                        09724000
BREERROR:                                                               09726000
      NO'ERROR:=FALSE;                  << STACK TROUBLE >>             09728000
                                                                        09730000
EXIT: END;  << BRE >>                                                   09732000
                                                                        09734000
PROCEDURE IBT;   << INDIRECT BRANCH TESTS >>                            09736000
BEGIN                                                                   09738000
      MOVE INSTRUCT'NAME:="BCC   ";                                     09740000
      PRINT'NAMES;                                                      09742000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO BCC'TEST;             09744000
                                                                        09746000
      MOVE INSTRUCT'NAME:="BRE   ";                                     09748000
      PRINT'NAMES;                                                      09750000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO BRE'TEST;             09752000
                                                                        09754000
END;   << IBT >>                                                        09756000
                                                                        09758000
PROCEDURE LDI'TEST;                                                     09760000
   BEGIN                                                                09762000
STAR: ASSEMBLE(                                                         09764000
      LDI %125;                                                         09766000
      CMPM PAT125;                                                      09768000
      BE *+2;                                                           09770000
      BR LDIERROR;                                                      09772000
                                                                        09774000
      LDI %252;                                                         09776000
      CMPM PAT252;                                                      09778000
      BE *+2;                                                           09780000
      BR LDIERROR;                                                      09782000
                                                                        09784000
      LDI %377;                                                         09786000
      CMPM PAT377;                                                      09788000
      BE *+2;                                                           09790000
      BR LDIERROR);                                                     09792000
      RETURN;                                                           09794000
LDIERROR:                                                               09796000
      NO'ERROR := FALSE;                                                09798000
END;                                                                    09800000
PROCEDURE LDNI'TEST;                                                    09802000
BEGIN                                                                   09804000
      ASSEMBLE(                                                         09806000
                                                                        09808000
      LDNI 1;                                                           09810000
      CMPM M1;                                                          09812000
      BE *+2;                                                           09814000
      BR LDIERROR;                                                      09816000
                                                                        09818000
      LDNI %125;                                                        09820000
      CMPM PAT177653;                                                   09822000
      BE *+2;                                                           09824000
      BR LDIERROR;                                                      09826000
                                                                        09828000
      LDNI %252;                                                        09830000
      CMPM PAT177526;                                                   09832000
      BE *+2;                                                           09834000
      BR LDIERROR;                                                      09836000
                                                                        09838000
      LDNI %377;                                                        09840000
      CMPM PAT177401;                                                   09842000
      BE NEXT;                                                          09844000
      BR LDIERROR);                                                     09846000
                                                                        09848000
NEXT:  PUSH(Q);SET(S);<<RESET STACK>>                                   09850000
      RETURN;                                                           09852000
LDIERROR:                                                               09854000
      NO'ERROR := FALSE;                                                09856000
END;                                                                    09858000
PROCEDURE CTLDI;                                                        09860000
BEGIN                                                                   09862000
      MOVE INSTRUCT'NAME := "LDI   ";                                   09864000
      PRINT'NAMES;                                                      09866000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO LDI'TEST;             09868000
      MOVE INSTRUCT'NAME := "LDNI  ";                                   09870000
      PRINT'NAMES;                                                      09872000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO LDNI'TEST;            09874000
END;                                                                    09876000
                                                                        09878000
PROCEDURE CTLDPP;   << COVER TEST - LDPP & LDPN INSTRUCTIONS >>         09880000
   BEGIN                                                                09882000
      MOVE INSTRUCT'NAME := "LDPP  ";                                   09884000
      PRINT'NAMES;                                                      09886000
      MOVE INSTRUCT'NAME := "LDPN  ";                                   09888000
      PRINT'NAMES;                                                      09890000
STAR: ASSEMBLE(                                                         09892000
      LDPP K1;   << *+%377 >>                                           09894000
      LDI 1;                                                            09896000
      LDI 2;                                                            09898000
      DCMP;                                                             09900000
      BE *+2;                                                           09902000
      BR SKIP;                   << (S-1,S) NOT 1,2 >>                  09904000
                                                                        09906000
      LDPP K2;   << *+%252 >>                                           09908000
      LDI 3;                                                            09910000
      LDI 4;                                                            09912000
      DCMP;                                                             09914000
      BE *+2;                                                           09916000
      BR SKIP;                        << (S-1,S) NOT 3,4 >>             09918000
                                                                        09920000
      LDPP K3;   << *+%125 >>                                           09922000
      LDI 5;                                                            09924000
      LDI 6;                                                            09926000
      DCMP;                                                             09928000
      BE *+2;                                                           09930000
      BR SKIP;                        << (S-1,S) NOT 5,6 >>             09932000
                                                                        09934000
      BR T4;                                                            09936000
                                                                        09938000
SKIP: BR SKIP2;                                                         09940000
                                                                        09942000
K6:   CON 11,12;                                                        09944000
      CON10; CON10; CON10; CON10; CON10; CON10; CON10;                  09946000
      CON 0,0,0,0,0;                                                    09948000
K3:   CON 5,6;                                                          09950000
K5:   CON 9,10;                                                         09952000
      CON10; CON10; CON10; CON10; CON10; CON10; CON10;                  09954000
      CON 0,0,0,0,0;                                                    09956000
K2:   CON 3,4;                                                          09958000
K4:   CON 7,8;                                                          09960000
      CON10; CON10; CON10; CON10; CON10; CON10; CON10;                  09962000
      CON 0,0,0,0,0;                                                    09964000
K1:   CON 1,2;                                                          09966000
      CON 0,0,0,0,0,0;                                                  09968000
                                                                        09970000
T4:   LDPN K4;   << *-%125 >>                                           09972000
      LDI 7;                                                            09974000
      LDI 8;                                                            09976000
      DCMP;                                                             09978000
      BE *+2;                                                           09980000
SKIP2:BR LDPPERROR;                   << (S-1,S NOT 7,8 >>              09982000
                                                                        09984000
      LDPN K5;   << *-%252 >>                                           09986000
      LDI 9;                                                            09988000
      LDI 10;                                                           09990000
      DCMP;                                                             09992000
      BE *+2;                                                           09994000
      BR LDPPERROR;                   << (S-1,S NOT 9,10 >>             09996000
                                                                        09998000
      LDPN K6;   << *-%377 >>                                           10000000
      LDI 11;                                                           10002000
      LDI 12;                                                           10004000
      DCMP;                                                             10006000
      BE NOERR;                                                         10008000
      BR LDPPERROR);               << (S-1,S) NOT 11,12 >>              10010000
NOERR: PUSH(Q);SET(S);<<RESET STACK>>                                   10012000
       IF(LOOPCTN:=LOOPCTN+1)=LOOPNUMBER THEN GO OUT                    10014000
       ELSE GO STAR;                                                    10016000
                                                                        10018000
LDPPERROR:                                                              10020000
      NO'ERROR:=FALSE;                                                  10022000
                                                                        10024000
OUT:   LOOPCTN:=0;                                                      10026000
                                                                        10028000
END;   << CTLDPP >>                                                     10030000
                                                                        10032000
PROCEDURE CTLS;   << COVER TESTS - LOAD & STOR INSTRUCTIONS >>          10034000
   BEGIN                                                                10036000
      MOVE INSTRUCT'NAME := "LOAD  ";                                   10038000
      PRINT'NAMES;                                                      10040000
STAR: ASSEMBLE(                                                         10042000
      LDI %125;                                                         10044000
      STOR DB+%125;                                                     10046000
      LDI %252;                                                         10048000
      STOR DB+%252;                                                     10050000
      LDI %377;                                                         10052000
      STOR DB+%377;                                                     10054000
      SED 0;                                                            10056000
      PSHR %100;                                                        10058000
      ADDI %125;                                                        10060000
      LSEA;                                                             10062000
      SED 1;                                                            10064000
      CMPI %125;                                                        10066000
      BE *+2;                                                           10068000
      BR LOADERROR;                   << TOS NOT %125 >>                10070000
      SED 0;                                                            10072000
      PSHR %100;                                                        10074000
      ADDI %252;                                                        10076000
      LSEA;                                                             10078000
      SED 1;                                                            10080000
      CMPI %252;                                                        10082000
      BE *+2;                                                           10084000
      BR LOADERROR;                   << TOS NOT %252 >>                10086000
      SED 0;                                                            10088000
      PSHR %100;                                                        10090000
      ADDI %377;                                                        10092000
      LSEA;                                                             10094000
      SED 1;                                                            10096000
      CMPI %377;                                                        10098000
      BE *+2;                                                           10100000
      BR LOADERROR;                   << TOS NOT %377 >>                10102000
      LOAD DB+%125;                                                     10104000
      CMPI %125;                                                        10106000
      BE *+2;                                                           10108000
      BR LOADERROR;                   << TOS NOT %125 >>                10110000
      LOAD DB+%252;                                                     10112000
      CMPI %252;                                                        10114000
      BE *+2;                                                           10116000
      BR LOADERROR;                   << TOS NOT %252 >>                10118000
      LOAD DB+%377;                                                     10120000
      CMPI %377;                                                        10122000
      BE NOERR;                                                         10124000
      BR LOADERROR);                      << TOS NOT %377 >>            10126000
NOERR: PUSH(Q);SET(S);<<RESET STACK>>                                   10128000
       IF(LOOPCTN:=LOOPCTN+1)=LOOPNUMBER THEN GO OUT                    10130000
       ELSE GO STAR;                                                    10132000
                                                                        10134000
LOADERROR:                                                              10136000
      NO'ERROR:=FALSE;                                                  10138000
                                                                        10140000
OUT:   LOOPCTN:=0;                                                      10142000
                                                                        10144000
END;  <<CTLS>>                                                          10146000
                                                                        10148000
PROCEDURE CTBCC;   << COVER TEST - BCC INSTRUCTION >>                   10150000
   BEGIN                                                                10152000
      MOVE INSTRUCT'NAME:="BCC  ";                                      10154000
      PRINT'NAMES;                                                      10156000
STAR: ASSEMBLE(                                                         10158000
      LDI 1;   << MAKE CCG >>                                           10160000
      LDXI 1;                                                           10162000
      BG T2;   << *+%37 >>                                              10164000
      BR BCCERROR;                   << DID NOT BRANCH >>               10166000
                                                                        10168000
T3:   INCX;                                                             10170000
      BG T4;   << *+%25 >>                                              10172000
      BR BCCERROR;                   << DID NOT BRANCH >>               10174000
                                                                        10176000
T5:   INCX;                                                             10178000
      BG T6;   << *+%12 >>                                              10180000
      BR BCCERROR;                   << DID NOT BRANCH >>               10182000
                                                                        10184000
T7:   LDXA;                                                             10186000
      CMPI 6;                                                           10188000
      BE *+2;                                                           10190000
      BR BCCERROR);                   << X NOT 6 >>                     10192000
                                                                        10194000
      ASSEMBLE( BR EXIT;  << RETURN >>                                  10196000
      NOP;  NOP;                                                        10198000
                                                                        10200000
      BR BCCERROR;                   << UNEXPECTED >>                   10202000
T6:   INCX;                                                             10204000
      NOP;                                                              10206000
      BG T7;   << *-%12 >>                                              10208000
      BR BCCERROR;                   << DID NOT BRANCH >>               10210000
                                                                        10212000
      NOP; NOP; NOP;                                                    10214000
                                                                        10216000
      BR BCCERROR;                   << UNEXPECTED >>                   10218000
T4:   INCX;                                                             10220000
      NOP;                                                              10222000
      BG T5;   << *-%25 >>                                              10224000
      BR BCCERROR;                   << DID NOT BRANCH >>               10226000
                                                                        10228000
      NOP; NOP;                                                         10230000
                                                                        10232000
      BR BCCERROR;                   << UNEXPECTED >>                   10234000
T2:   INCX;                                                             10236000
      NOP;                                                              10238000
      BG T3);   << *-%37 >>                                             10240000
BCCERROR:                                                               10242000
      NO'ERROR:=FALSE;                  << DID NOT BRANCH >>            10244000
EXIT:                                                                   10246000
                                                                        10248000
                                                                        10250000
END;   << CTBCC >>                                                      10252000
                                                                        10254000
PROCEDURE CTDABZ;   << COVER TEST - DABZ >>                             10256000
   BEGIN                                                                10258000
      MOVE INSTRUCT'NAME:="DABZ  ";                                     10260000
      PRINT'NAMES;                                                      10262000
STAR: ASSEMBLE(                                                         10264000
      LDXI 1;                                                           10266000
      LDI 1;                                                            10268000
      DABZ T2;   << *+%37 >>                                            10270000
      BR DABZERROR;                   << DID NOT BRANCH >>              10272000
                                                                        10274000
T3:   INCX;                                                             10276000
      LDI 1;                                                            10278000
      DABZ T4;   << *+%25 >>                                            10280000
      BR DABZERROR;                   << DID NOT BRANCH >>              10282000
                                                                        10284000
T5:   INCX;                                                             10286000
      LDI 1;                                                            10288000
      DABZ T6;   << *+%12 >>                                            10290000
      BR DABZERROR;                   << DID NOT BRANCH >>              10292000
                                                                        10294000
T7:   LDXA;                                                             10296000
      CMPI 6;                                                           10298000
      BE *+2;                                                           10300000
      BR DABZERROR);                   << X NOT 6 >>                    10302000
                                                                        10304000
      ASSEMBLE( BR EXIT;  << RETURN >>                                  10306000
      CON 0,0;                                                          10308000
                                                                        10310000
      BR DABZERROR;                   << UNEXPECTED >>                  10312000
T6:   INCX;                                                             10314000
      LDI 1;                                                            10316000
      DABZ T7;   << *-%12 >>                                            10318000
      BR DABZERROR;                   << DID NOT BRANCH >>              10320000
                                                                        10322000
      CON 0,0;                                                          10324000
                                                                        10326000
      BR DABZERROR;                   << UNEXPECTED >>                  10328000
T4:   INCX;                                                             10330000
      LDI 1;                                                            10332000
      DABZ T5;   << *-%25 >>                                            10334000
      BR DABZERROR;                   << DID NOT BRANCH >>              10336000
                                                                        10338000
      CON 0;                                                            10340000
                                                                        10342000
      BR DABZERROR;                   << UNEXPECTED >>                  10344000
T2:   INCX;                                                             10346000
      LDI 1;                                                            10348000
      DABZ T3);   << *-%37 >>                                           10350000
DABZERROR:                                                              10352000
      NO'ERROR:=FALSE;                  << DID NOT BRANCH >>            10354000
EXIT:                                                                   10356000
                                                                        10358000
                                                                        10360000
END;   << CTDABZ >>                                                     10362000
                                                                        10364000
PROCEDURE TESTCPRB;   << TEST CPRB INSTRUCTION >>                       10366000
      BEGIN                                                             10368000
       MOVE INSTRUCT'NAME:="CPRB  ";                                    10370000
       PRINT'NAMES;                                                     10372000
STAR: ASSEMBLE(                                                         10374000
      LDNI 1;                                                           10376000
      ZERO;                                                             10378000
      LDI 2;                                                            10380000
      LDXI 3;                                                           10382000
      PSHR 0;   << SR=0 >>                                              10384000
      CPRB CPRB1;                                                       10386000
      BG *+2;                                                           10388000
      BR CPRBERROR;                   << NOT CCG >>                     10390000
      CMPN 1;                                                           10392000
      BE *+2;                                                           10394000
      BR CPRBERROR;                   << STACK TROUBLE >>               10396000
      BR *+2;                                                           10398000
CPRB1: BR CPRBERROR;                  << UNEXPECTED BRANCH >>           10400000
                                                                        10402000
      DZRO;                                                             10404000
      LDXN 1;                                                           10406000
      SETR 0;   << SR=4 >>                                              10408000
      CPRB CPRB2;                                                       10410000
      BL *+2;                                                           10412000
      BR CPRBERROR;                   << NOT CCL >>                     10414000
      BR *+2;                                                           10416000
CPRB2: BR CPRBERROR;                  << UNEXPECTED BRANCH >>           10418000
                                                                        10420000
      LDNI 3;                                                           10422000
      LDI 1;                                                            10424000
      LDI 3;                                                            10426000
      LDXI 2;                                                           10428000
      CPRB *+2;                                                         10430000
      BR CPRBERROR;                   << DID NOT BRANCH >>              10432000
      BE *+2;                                                           10434000
      BR CPRBERROR;                   << NOT CCE >>                     10436000
      CMPN 3;                                                           10438000
      BE *+2;                                                           10440000
      BR CPRBERROR;                   << STACK TROUBLE >>               10442000
                                                                        10444000
      ZERO;                                                             10446000
      LOAD PMAX;                                                        10448000
      LDX NMAX;                                                         10450000
      CPRB CPRB3;                                                       10452000
      BL *+2;                                                           10454000
      BR CPRBERROR;                   << NOT CCL >>                     10456000
      BR *+2;                                                           10458000
CPRB3: BR CPRBERROR;                  << UNEXPECTED BRANCH >>           10460000
                                                                        10462000
      LDNI 2;                                                           10464000
      LDI 0;                                                            10466000
      LDXN 1;                                                           10468000
      CPRB CPRB4,I;                                                     10470000
      BR CPRBERROR;                   << DID NOT BRANCH >>              10472000
      BR EXIT;                                                          10474000
CPRB4:                                                                  10476000
      CON 2;                                                            10478000
      BR CPRBERROR);                            << UNEXPECTED >>        10480000
EXIT:                                                                   10482000
       PUSH(Q);SET(S);<<RESET STACK>>                                   10484000
       IF(LOOPCTN:=LOOPCTN+1)=LOOPNUMBER THEN GO OUT                    10486000
       ELSE GO STAR;                                                    10488000
                                                                        10490000
CPRBERROR:                                                              10492000
      NO'ERROR:=FALSE;                                                  10494000
                                                                        10496000
OUT:   LOOPCTN:=0;                                                      10498000
                                                                        10500000
END;   << TESTCPRB >>                                                   10502000
                                                                        10504000
                                                                        10506000
PROCEDURE TESTNOP;    << TEST NOP - FOR SAKE OF COMPLETION >>           10508000
   BEGIN                                                                10510000
       MOVE INSTRUCT'NAME:="NOP   ";                                    10512000
       PRINT'NAMES;                                                     10514000
STAR:ASSEMBLE(                                                          10516000
      PSHR %11;   << PUSH(S,STATUS) >>                                  10518000
      PSHR 0;   << SR=0 >>                                              10520000
      NOP;                                                              10522000
      PSHR %11;                                                         10524000
      INCM S-3;                                                         10526000
      INCM S-3;                                                         10528000
      DCMP;                                                             10530000
      BE *+2;                                                           10532000
      BR NOPERROR;                   << S OR STATUS CHANGED >>          10534000
                                                                        10536000
      PSHR %11;   << PUSH(S,STATUS) >>                                  10538000
      SETR 0;   << SR=4 >>                                              10540000
      NOP;                                                              10542000
      PSHR %11;                                                         10544000
      INCM S-3;                                                         10546000
      INCM S-3;                                                         10548000
      DCMP;                                                             10550000
      BE NEXT;                                                          10552000
      BR NOPERROR);                       << STATUS OR S CHANGED >>     10554000
NEXT:  PUSH(Q);SET(S);<<RESET STACK>>                                   10556000
       IF(LOOPCTN:=LOOPCTN+1)=LOOPNUMBER THEN GO OUT                    10558000
       ELSE GO STAR;                                                    10560000
                                                                        10562000
NOPERROR:                                                               10564000
      NO'ERROR:=FALSE;                                                  10566000
                                                                        10568000
OUT:   LOOPCTN:=0;                                                      10570000
                                                                        10572000
END;   << TESTNOP >>                                                    10574000
                                                                        10576000
                                                                        10578000
$CONTROL SEGMENT=SECTION2'PART1                                         10580000
PROCEDURE GRPX;   << TEST GROUP X: FIELD INSTRUCTIONS >>                10582000
BEGIN                                                                   10584000
                                                                        10586000
SUBROUTINE DPF'TEST;   << CHECK DPF INSTRUCTION >>                      10588000
   BEGIN                                                                10590000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       10592000
      ASSEMBLE(                                                         10594000
      ZERO;                                                             10596000
      LDI 5;                                                            10598000
      PSHR 0;   << SR=0 >>                                              10600000
      DPF 8:3;                                                          10602000
      BG *+2;                                                           10604000
      BR DPFERROR;                   << NOT CCG >>                      10606000
      CMPI %240;                                                        10608000
      BE *+2;                                                           10610000
      BR DPFERROR;                   << TOS NOT %240 >>                 10612000
                                                                        10614000
      LDI %70;                                                          10616000
      LDNI 8;   <<< %177770 >>                                          10618000
      SETR 0;   << SR=4 >>                                              10620000
      DPF 10:3;                                                         10622000
      BE *+2;                                                           10624000
      BR DPFERROR;                   << NOT CCE >>                      10626000
      CMPI 0;                                                           10628000
      BE EXIT);                                                         10630000
DPFERROR:                                                               10632000
      NO'ERROR:=FALSE;                   << TOS NOT 0 >>                10634000
EXIT:                                                                   10636000
      PUSH(Q);SET(S);   << RESET STACK >>                               10638000
      TOS:=RE'ADDRS;   << RESTORE RETURN ADDRESS >>                     10640000
   END;                                                                 10642000
                                                                        10644000
<<< CHECK EXF INSTRUCTION >>                                            10646000
                                                                        10648000
SUBROUTINE EXF'TEST;                                                    10650000
   BEGIN                                                                10652000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       10654000
CEXF: ASSEMBLE(                                                         10656000
      LDNI 1;                                                           10658000
      LDI %307;                                                         10660000
      PSHR 0;   << SR=0 >>                                              10662000
      EXF 7:6;                                                          10664000
      BG *+2;                                                           10666000
      BR EXFERROR;                   << NOT CCG >>                      10668000
      CMPI %30;                                                         10670000
      BE *+2;                                                           10672000
      BR EXFERROR;                   << TOS NOT %30 >>                  10674000
      CMPN 1;                                                           10676000
      BE *+2;                                                           10678000
      BR EXFERROR;                   << STACK POPPED >>                 10680000
                                                                        10682000
      LDNI 1;                                                           10684000
      SETR 0;   << SR=4 >>                                              10686000
      EXF 1:15;                                                         10688000
      BG *+2;                                                           10690000
      BR EXFERROR;                   << NOT CCG >>                      10692000
      CMPM PMAX;                                                        10694000
      BE *+2;                                                           10696000
      BR EXFERROR;                   << TOS NOT %077777 >>              10698000
                                                                        10700000
      LOAD M256;   << %177400 >>                                        10702000
      EXF 8:8;                                                          10704000
      BE *+2;                                                           10706000
      BR EXFERROR;                   << NOT CCE >>                      10708000
      CMPI 0;                                                           10710000
      BE *+2;                                                           10712000
      BR EXFERROR;                   << TOS NOT 0 >>                    10714000
                                                                        10716000
<< COVER TESTS >>                                                       10718000
                                                                        10720000
      LDI 1;                                                            10722000
      EXF 15:15;                                                        10724000
      CMPM BIT1;                                                        10726000
      BE *+2;                                                           10728000
      BR EXFERROR;                   << TOS NOT %40000 >>               10730000
                                                                        10732000
      LOAD PAT2500;   << %2500 >>                                       10734000
      EXF 5:5;                                                          10736000
      CMPI %25;                                                         10738000
      BE *+2;                                                           10740000
      BR EXFERROR;                   << TOS NOT %25 >>                  10742000
                                                                        10744000
      LOAD PAT20020;   << %20020 >>                                     10746000
      EXF 10:10;                                                        10748000
      CMPM PAT402;                                                      10750000
      BE EXIT;                                                          10752000
      BR EXFERROR);                        << TOS NOT %402 >>           10754000
EXFERROR:                                                               10756000
      NO'ERROR:=FALSE;                                                  10758000
                                                                        10760000
EXIT:                                                                   10762000
       PUSH(Q);SET(S); <<RESET STACK>>                                  10764000
       TOS:=RE'ADDRS;   << RESTORE RETURN ADDRESS >>                    10766000
   END;                                                                 10768000
                                                                        10770000
       MOVE INSTRUCT'NAME:="DPF   ";                                    10772000
       PRINT'NAMES;                                                     10774000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DPF'TEST;            10776000
                                                                        10778000
       MOVE INSTRUCT'NAME:="EXF   ";                                    10780000
       PRINT'NAMES;                                                     10782000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO EXF'TEST;            10784000
                                                                        10786000
                                                                        10788000
END;   << GRPX >>                                                       10790000
                                                                        10792000
PROCEDURE GRPW;   << TEST GROUP W: BIT TEST INSTRUCTIONS >>             10794000
BEGIN                                                                   10796000
                                                                        10798000
<<< CHECK TBC INSTRUCTION >>                                            10800000
                                                                        10802000
SUBROUTINE TBC'TEST;                                                    10804000
   BEGIN                                                                10806000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       10808000
STAR: ASSEMBLE(                                                         10810000
      LDNI 1;                                                           10812000
      ZERO;                                                             10814000
      PSHR 0;   << SR=0 >>                                              10816000
      TBC 0;                                                            10818000
      BE *+2;                                                           10820000
      BR TBCERROR;                   << NOT CCE >>                      10822000
      CMPI 0;                                                           10824000
      BE *+2;                                                           10826000
      BR TBCERROR;                   << TOS NOT 0 >>                    10828000
      CMPN 1;                                                           10830000
      BE *+2;                                                           10832000
      BR TBCERROR;                   << STACK TROUBLE >>                10834000
                                                                        10836000
      LDI 2;                                                            10838000
      SETR 0;   << SR=4 >>                                              10840000
      TBC 14;                                                           10842000
      BG *+2;                                                           10844000
      BR TBCERROR;                   << NOT CCG >>                      10846000
      CMPI 2;                                                           10848000
      BE *+2;                                                           10850000
      BR TBCERROR;                   << TOS NOT 2 >>                    10852000
                                                                        10854000
      LDNI 1;                                                           10856000
      TBC 0;                                                            10858000
      BL *+2;                                                           10860000
      BR TBCERROR;                   << NOT CCL >>                      10862000
      CMPN 1;                                                           10864000
      BE *+2;                                                           10866000
      BR TBCERROR;                   << TOS NOT -1 >>                   10868000
                                                                        10870000
      LDI 1;                                                            10872000
      LDXI 15;                                                          10874000
      TBC 0,X;   << CNT=15 >>                                           10876000
      BG *+2;                                                           10878000
      BR TBCERROR;                   << NOT CCG >>                      10880000
                                                                        10882000
      LDI 2;                                                            10884000
      LDXI 0;                                                           10886000
      TBC 14,X;   << CNT=14 >>                                          10888000
      BG EXIT);                                                         10890000
TBCERROR:                                                               10892000
      NO'ERROR:=FALSE;                   << NOT CCG >>                  10894000
EXIT:                                                                   10896000
      PUSH(Q);SET(S); << RESET STACK >>                                 10898000
      TOS:=RE'ADDRS;  << RESTORE RETURN ADDRESS >>                      10900000
   END;                                                                 10902000
                                                                        10904000
<<< CHECK TRBC INSTRUCTION >>                                           10906000
                                                                        10908000
SUBROUTINE TRBC'TEST;                                                   10910000
   BEGIN                                                                10912000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       10914000
      ASSEMBLE(                                                         10916000
      LDI 7;                                                            10918000
      PSHR 0;   << SR=0 >>                                              10920000
      TRBC 12;                                                          10922000
      BE *+2;                 << NOT CCE >>                             10924000
      BR TRBCERROR;                                                     10926000
      CMPI 7;                                                           10928000
      BE *+2;                                                           10930000
      BR TRBCERROR;                   << TOS NOT 7 >>                   10932000
                                                                        10934000
      LDI 7;                                                            10936000
      SETR 0;   << SR=4 >>                                              10938000
      TRBC 15;                                                          10940000
      BG *+2;                                                           10942000
      BR TRBCERROR;                   << NOT CCG >>                     10944000
      CMPI 6;                                                           10946000
      BE EXIT);                                                         10948000
TRBCERROR:                                                              10950000
      NO'ERROR:=FALSE;                   << TOS NOT 6 >>                10952000
EXIT:                                                                   10954000
      PUSH(Q);SET(S);  << RESET STACK >>                                10956000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    10958000
   END;                                                                 10960000
                                                                        10962000
<<< CHECK TSBC INSTRUCTION >>                                           10964000
                                                                        10966000
SUBROUTINE TSBC'TEST;                                                   10968000
   BEGIN                                                                10970000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       10972000
      ASSEMBLE(                                                         10974000
      LDI 2;                                                            10976000
      PSHR 0;   << SR=0 >>                                              10978000
      TSBC 15;                                                          10980000
      BE *+2;                                                           10982000
      BR TSBCERROR;                   << NOT CCE >>                     10984000
      CMPI 3;                                                           10986000
      BE *+2;                                                           10988000
      BR TSBCERROR;                   << TOS NOT 3 >>                   10990000
                                                                        10992000
      LDI 2;                                                            10994000
      SETR 0;   << SR=4 >>                                              10996000
      TSBC 14;                                                          10998000
      BG *+2;                                                           11000000
      BR TSBCERROR;                   << NOT CCG >>                     11002000
      CMPI 2;                                                           11004000
      BE EXIT);                                                         11006000
TSBCERROR:                                                              11008000
      NO'ERROR:=FALSE;                   << TOS NOT 2 >>                11010000
EXIT:                                                                   11012000
      PUSH(Q);SET(S); << RESET STACK >>                                 11014000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    11016000
   END;                                                                 11018000
                                                                        11020000
<<< CHECK TCBC INSTRUCTION >>                                           11022000
                                                                        11024000
SUBROUTINE TCBC'TEST;                                                   11026000
   BEGIN                                                                11028000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       11030000
      ASSEMBLE(                                                         11032000
      LDI 4;                                                            11034000
      PSHR 0;   << SR=0 >>                                              11036000
      TCBC 14;                                                          11038000
      BE *+2;                                                           11040000
      BR TCBCERROR;                   << NOT CCE >>                     11042000
      CMPI 6;                                                           11044000
      BE *+2;                                                           11046000
      BR TCBCERROR;                   << TOS NOT 6 >>                   11048000
                                                                        11050000
      LDI 7;                                                            11052000
      SETR 0;   << SR=4 >>                                              11054000
      TCBC 13;                                                          11056000
      BG *+2;                                                           11058000
      BR TCBCERROR;                   << NOT CCG >>                     11060000
      CMPI 3;                                                           11062000
      BE EXIT;                                                          11064000
      BR TCBCERROR;                       << TOS NOT 3 >>               11066000
      NOP);                                                             11068000
                                                                        11070000
                                                                        11072000
TCBCERROR:                                                              11074000
      NO'ERROR:=FALSE;                                                  11076000
                                                                        11078000
EXIT:                                                                   11080000
      PUSH(Q);SET(S); << RESET STACK >>                                 11082000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    11084000
   END;                                                                 11086000
                                                                        11088000
      MOVE INSTRUCT'NAME:="TBC   ";                                     11090000
      PRINT'NAMES;                                                      11092000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO TBC'TEST;             11094000
                                                                        11096000
      MOVE INSTRUCT'NAME:="TRBC  ";                                     11098000
      PRINT'NAMES;                                                      11100000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO TRBC'TEST;            11102000
                                                                        11104000
      MOVE INSTRUCT'NAME:="TSBC  ";                                     11106000
      PRINT'NAMES;                                                      11108000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO TSBC'TEST;            11110000
                                                                        11112000
      MOVE INSTRUCT'NAME:="TCBC  ";                                     11114000
      PRINT'NAMES;                                                      11116000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO TCBC'TEST;            11118000
                                                                        11120000
                                                                        11122000
END;   << GRPW >>                                                       11124000
                                                                        11126000
PROCEDURE GRPI;   << TEST GROUP I: DOUBLE INTEGER INSTRUCTIONS >>       11128000
BEGIN                                                                   11130000
                                                                        11132000
<<< CHECK DADD INSTRUCTION >>                                           11134000
                                                                        11136000
SUBROUTINE DADD'TEST;                                                   11138000
   BEGIN                                                                11140000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       11142000
      ASSEMBLE(                                                         11144000
      LDI 1;   <<< TRY %1,5 + %4,7 = %5,12 >>                           11146000
      LDI 5;                                                            11148000
      LDI 4;                                                            11150000
      LDI 7;                                                            11152000
      PSHR 0;   << SR=0 >>                                              11154000
      DADD;                                                             11156000
      BG *+2;                                                           11158000
      BR DADDERROR;                   << NOT CCG >>                     11160000
      BNOV *+2;                                                         11162000
      BR DADDERROR;                   << O NOT 0 >>                     11164000
      BNCY *+2;                                                         11166000
      BR DADDERROR;                   << C NOT 0 >>                     11168000
      CMPI 12;                                                          11170000
      BE *+2;                                                           11172000
      BR DADDERROR;                   << TOS NOT 12 >>                  11174000
      CMPI 5;                                                           11176000
      BE *+2;                                                           11178000
      BR DADDERROR;                   << (S-1) NOT 5 >>                 11180000
                                                                        11182000
      LDNI 1;   << TRY -1D + -1D = -2D >>                               11184000
      DUP,DDUP;                                                         11186000
      SETR 0;   << SR=4 >>                                              11188000
      DADD;                                                             11190000
      BL *+2;                                                           11192000
      BR DADDERROR;                   << NOT CCL >>                     11194000
      BNOV *+2;                                                         11196000
      BR DADDERROR;                   << O NOT 0 >>                     11198000
      BCY *+2;                                                          11200000
      BR DADDERROR;                   << C NOT 1 >>                     11202000
      CMPN 2;                                                           11204000
      BE *+2;                                                           11206000
      BR DADDERROR;                   << TOS NOT -2 >>                  11208000
      CMPN 1;                                                           11210000
      BE *+2;                                                           11212000
      BR DADDERROR;                   << (S-1) NOT -1 >>                11214000
                                                                        11216000
      LOAD NMAX;   <<< TRY %100000,000000 + %100000,000000 = 0 >>       11218000
      ZERO,DDUP;                                                        11220000
      DADD;                                                             11222000
      BE *+2;                                                           11224000
      BR DADDERROR;                   << NOT CCE >>                     11226000
      BCY *+2;                                                          11228000
      BR DADDERROR;                   << C  NOT 1 >>                    11230000
      BOV *+2;                                                          11232000
      BR DADDERROR;                   << O NOT 1 >>                     11234000
      DZRO,DCMP;                                                        11236000
      BE EXIT);                                                         11238000
DADDERROR:                                                              11240000
      NO'ERROR:=FALSE;                   << (S-1,S) NOT 0,0 >>          11242000
EXIT:                                                                   11244000
      PUSH(Q);SET(S); << RESET STACK >>                                 11246000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    11248000
                                                                        11250000
  END;                                                                  11252000
                                                                        11254000
<<< CHECK DNEG INSTRUCTION >>                                           11256000
                                                                        11258000
SUBROUTINE DNEG'TEST;                                                   11260000
   BEGIN                                                                11262000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       11264000
      ASSEMBLE(                                                         11266000
      DZRO,INCA;   <<< TRY 0,1 >>                                       11268000
      PSHR 0;   << SR=0 >>                                              11270000
      DNEG;                                                             11272000
      BL *+2;                                                           11274000
      BR DNEGERROR;                   << NOT CCL >>                     11276000
      BNOV *+2;                                                         11278000
      BR DNEGERROR;                   << O NOT 0 >>                     11280000
      CMPN 1;                                                           11282000
      BE *+2;                                                           11284000
      BR DNEGERROR;                   << TOS NOT %177777 >>             11286000
      CMPN 1;                                                           11288000
      BE *+2;                                                           11290000
      BR DNEGERROR;                   << (S-1) NOT %177777 >>           11292000
                                                                        11294000
      LOAD NMAX;   <<< TRY %100000,000000 >>                            11296000
      ZERO,DNEG;                                                        11298000
      BL *+2;                                                           11300000
      BR DNEGERROR;                   << NOT CCL >>                     11302000
      BOV *+2;                                                          11304000
      BR DNEGERROR;                   << O NOT 1 >>                     11306000
      CMPI 0;                                                           11308000
      BE *+2;                                                           11310000
      BR DNEGERROR;                   << TOS NOT 0 >>                   11312000
      CMPM NMAX;                                                        11314000
      BE *+2;                                                           11316000
      BR DNEGERROR;                   << (S-1) NOT %100000 >>           11318000
                                                                        11320000
      LDNI 1;   <<< TRY -6D >>                                          11322000
      LDNI 6;                                                           11324000
      SETR 0;   << SR=4 >>                                              11326000
      DNEG;                                                             11328000
      BG *+2;                                                           11330000
      BR DNEGERROR;                   << NOT CCG >>                     11332000
      BNOV *+2;                                                         11334000
      BR DNEGERROR;                   << O NOT 0 >>                     11336000
      CMPI 6;                                                           11338000
      BE *+2;                                                           11340000
      BR DNEGERROR;                   << TOS NOT 6 >>                   11342000
      CMPI 0;                                                           11344000
      BE EXIT);                                                         11346000
DNEGERROR:                                                              11348000
      NO'ERROR:=FALSE;                   << (S-1) NOT 0 >>              11350000
EXIT:                                                                   11352000
      PUSH(Q);SET(S);  << RESET STACK >>                                11354000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    11356000
                                                                        11358000
   END;                                                                 11360000
                                                                        11362000
<<< CHECK DSUB INSTRUCTION >>                                           11364000
                                                                        11366000
SUBROUTINE DSUB'TEST;                                                   11368000
   BEGIN                                                                11370000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       11372000
      ASSEMBLE(                                                         11374000
      ZERO;   <<< TRY 3D - 4D = -1D >>                                  11376000
      LDI 3;                                                            11378000
      ZERO;                                                             11380000
      LDI 4;                                                            11382000
      PSHR 0;   << SR=0 >>                                              11384000
      DSUB;                                                             11386000
      BL *+2;                                                           11388000
      BR DSUBERROR;                   << NOT CCL >>                     11390000
      BNOV *+2;                                                         11392000
      BR DSUBERROR;                   << O NOT 0 >>                     11394000
      BNCY *+2;                                                         11396000
      BR DSUBERROR;                   << C NOT 0 >>                     11398000
      LDNI 1;                                                           11400000
      DUP,DCMP;                                                         11402000
      BE *+2;                                                           11404000
      BR DSUBERROR;                   << TOS NOT -1D >>                 11406000
                                                                        11408000
      ZERO;   << TRY 4D-3D=1D >>                                        11410000
      LDI 4;                                                            11412000
      ZERO;                                                             11414000
      LDI 3;                                                            11416000
      SETR 0;   << SR=4 >>                                              11418000
      DSUB;                                                             11420000
      BG *+2;                                                           11422000
      BR DSUBERROR;                   << NOT CCG >>                     11424000
      BNOV *+2;                                                         11426000
      BR DSUBERROR;                   << O NOT 0 >>                     11428000
      BCY *+2;                                                          11430000
      BR DSUBERROR;                   << C NOT 1 >>                     11432000
      LDI 0;                                                            11434000
      LDI 1;                                                            11436000
      DCMP;                                                             11438000
      BE *+2;                                                           11440000
      BR DSUBERROR;                   << RESULT NOT 0,1 >>              11442000
                                                                        11444000
      LDNI 1;   << TRY -1D-0D=-1D;  CHECK CARRY=1 >>                    11446000
      DUP,DZRO;                                                         11448000
      DSUB;                                                             11450000
      BCY *+2;                                                          11452000
      BR DSUBERROR;                   << C NOT 1 >>                     11454000
      LDNI 1;                                                           11456000
      DUP,DCMP;                                                         11458000
      BE *+2;                                                           11460000
      BR DSUBERROR;                   << RESULT NOT -1D >>              11462000
                                                                        11464000
      LOAD NMAX;   << TRY -1*2**31 - (-1*2**31) >>                      11466000
      ZERO,DDUP;                                                        11468000
      DSUB;                                                             11470000
      BNOV *+2;                                                         11472000
      BR DSUBERROR;                   << O NOT 0 >>                     11474000
      BCY *+2;                                                          11476000
      BR DSUBERROR;                   << C NOT 1 >>                     11478000
      DZRO,DCMP;                                                        11480000
      BE *+2;                                                           11482000
      BR DSUBERROR;                   << RESULT NOT 0,0 >>              11484000
                                                                        11486000
      DZRO;        << TRY 0D - (-1*2**31) >>                            11488000
      LOAD NMAX;                                                        11490000
      ZERO,DSUB;                                                        11492000
      BOV *+2;                                                          11494000
      BR DSUBERROR;                   << O NOT 1 >>                     11496000
      BNCY *+2;                                                         11498000
      BR DSUBERROR;                   << C NOT 0 >>                     11500000
      LOAD NMAX;                                                        11502000
      ZERO,DCMP;                                                        11504000
      BE *+2;                                                           11506000
      BR DSUBERROR;                   << RESULT NOT %100000, 0 >>       11508000
                                                                        11510000
      LDNI 1;   << TRY -1D - (-1*2**31) >>                              11512000
      DUP;                                                              11514000
      LOAD NMAX;                                                        11516000
      ZERO,DSUB;                                                        11518000
      BNOV *+2;                                                         11520000
      BR DSUBERROR;                   << O NOT 0 >>                     11522000
      BCY *+2;                                                          11524000
      BR DSUBERROR;                   << C NOT 1 >>                     11526000
      LOAD PMAX;                                                        11528000
      LDNI 1;                                                           11530000
      DCMP;                                                             11532000
      BE EXIT);                                                         11534000
DSUBERROR:                                                              11536000
      NO'ERROR:=FALSE;                   << RESULT NOT %77777, -1 >>    11538000
EXIT:                                                                   11540000
      PUSH(Q);SET(S);  << RESET STACK >>                                11542000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    11544000
                                                                        11546000
   END;                                                                 11548000
                                                                        11550000
<<< CHECK DIVL INSTRUCTION >>                                           11552000
                                                                        11554000
SUBROUTINE DIVL'TEST;                                                   11556000
   BEGIN                                                                11558000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       11560000
      ASSEMBLE(                                                         11562000
      ZERO;   <<< TRY 25/7 >>                                           11564000
      LDI 25;                                                           11566000
      LDI 7;                                                            11568000
      PSHR 0;   << SR=0 >>                                              11570000
      DIVL;                                                             11572000
      BG *+2;                 << NOT CCG >>                             11574000
      BR DIVLERROR;                                                     11576000
      BNOV *+2;                                                         11578000
      BR DIVLERROR;                   << O NOT 0 >>                     11580000
      CMPI 4;                                                           11582000
      BE *+2;                                                           11584000
      BR DIVLERROR;                   << REMAINDER NOT 4 >>             11586000
      CMPI 3;                                                           11588000
      BE *+2;                                                           11590000
      BR DIVLERROR;                   << QUOTIENT NOT 3 >>              11592000
                                                                        11594000
      ZERO;   <<< TRY 25/(-7) >>                                        11596000
      LDI 25;                                                           11598000
      LDNI 7;                                                           11600000
      SETR 0;   << SR=4 >>                                              11602000
      DIVL;                                                             11604000
      BL *+2;                 << NOT CCL >>                             11606000
      BR DIVLERROR;                                                     11608000
      BNOV *+2;                                                         11610000
      BR DIVLERROR;                   << O NOT 0 >>                     11612000
      CMPI 4;                                                           11614000
      BE *+2;                                                           11616000
      BR DIVLERROR;                   << REMAINDER NOT 4 >>             11618000
      CMPN 3;                                                           11620000
      BE *+2;                                                           11622000
      BR DIVLERROR;                   << QUOTIENT NOT -3 >>             11624000
                                                                        11626000
      LDNI 1;   <<< TRY -25/7 >>                                        11628000
      LDNI 25;                                                          11630000
      LDI 7;                                                            11632000
      DIVL;                                                             11634000
      BL *+2;                                                           11636000
      BR DIVLERROR;                   << NOT CCL >>                     11638000
      BNOV *+2;                                                         11640000
      BR DIVLERROR;                   << O NOT 0 >>                     11642000
      CMPN 4;                                                           11644000
      BE *+2;                                                           11646000
      BR DIVLERROR;                   << REMAINDER NOT -4 >>            11648000
      CMPN 3;                                                           11650000
      BE *+2;                                                           11652000
      BR DIVLERROR;                   << QUOTIENT NOT -3 >>             11654000
                                                                        11656000
      LDNI 1;   << TRY -25/(-7) >>                                      11658000
      LDNI 25;                                                          11660000
      LDNI 7;                                                           11662000
      DIVL;                                                             11664000
      BG *+2;                                                           11666000
      BR DIVLERROR;                   << NOT CCG >>                     11668000
      BNOV *+2;                                                         11670000
      BR DIVLERROR;                   << O NOT 0 >>                     11672000
      CMPN 4;                                                           11674000
      BE *+2;                                                           11676000
      BR DIVLERROR;                   << REMAINDER NOT -4 >>            11678000
      CMPI 3;                                                           11680000
      BE *+2;                                                           11682000
      BR DIVLERROR;                   << QUOTIENT NOT 3 >>              11684000
                                                                        11686000
      LDNI 1;   <<< TRY -2**16/2 >>                                     11688000
      ZERO;                                                             11690000
      LDI 2;                                                            11692000
      DIVL;                                                             11694000
      BL *+2;                                                           11696000
      BR DIVLERROR;                   << NOT CCL >>                     11698000
      BNOV *+2;                                                         11700000
      BR DIVLERROR;                   << O NOT 0 >>                     11702000
      CMPI 0;                                                           11704000
      BE *+2;                                                           11706000
      BR DIVLERROR;                   << REMAINDER NOT 0 >>             11708000
      CMPM NMAX;                                                        11710000
      BE *+2;                                                           11712000
      BR DIVLERROR;                   << QUOTIENT NOT %100000 >>        11714000
                                                                        11716000
      ZERO;   <<< TRY 2**15/1 >>                                        11718000
      LOAD NMAX;                                                        11720000
      LDI 1;                                                            11722000
      DIVL;                                                             11724000
      BL *+2;                                                           11726000
      BR DIVLERROR;                   << NOT CCL >>                     11728000
      BOV *+2;                                                          11730000
      BR DIVLERROR;                   << O NOT 1 >>                     11732000
      CMPI 0;                                                           11734000
      BE *+2;                                                           11736000
      BR DIVLERROR;                   << REMAINDER NOT 0 >>             11738000
      CMPM NMAX;                                                        11740000
      BE *+2;                                                           11742000
      BR DIVLERROR;                   << QUOTIENT NOT %100000 >>        11744000
                                                                        11746000
      LDI 127;   <<< TRY 127*2**16/127 >>                               11748000
      ZERO;                                                             11750000
      LDI 127;                                                          11752000
      DIVL;                                                             11754000
      BOV *+2;                                                          11756000
      BR DIVLERROR;                   << O NOT 1 >>                     11758000
      DDEL;                                                    <<03727>>11760000
                                                                        11768000
      LDI 5;   <<< TRY DIVIDE BY 0 >>                                   11770000
      LDI 6;                                                            11772000
      LDI 0;                                                            11774000
      DIVL;                                                             11776000
      BOV *+2;                                                          11778000
      BR DIVLERROR;                   << O NOT 1 >>                     11780000
      DEL;                                                              11782000
      CMPI 5;                                                           11784000
      BE *+2;                                                           11786000
      BR DIVLERROR;                   << (S-1) NOT 5 >>                 11788000
                                                                        11790000
      ZERO;   <<< TRY (2**15-1)/-2**15 >>                               11792000
      LOAD PMAX;                                                        11794000
      LOAD NMAX;                                                        11796000
      DIVL;                                                             11798000
      BE *+2;                                                           11800000
      BR DIVLERROR;                   << NOT CCE >>                     11802000
      BNOV *+2;                                                         11804000
      BR DIVLERROR;                   << O NOT 0 >>                     11806000
      CMPM PMAX;                                                        11808000
      BE *+2;                                                           11810000
      BR DIVLERROR;                   << REMAINDER NOT %077777 >>       11812000
      CMPI 0;                                                           11814000
      BE EXIT);                                                         11816000
DIVLERROR:                                                              11818000
      NO'ERROR:=FALSE;                   << QUOTIENT NOT 0 >>           11820000
EXIT:                                                                   11822000
      PUSH(Q);SET(S);  << RESET STACK >>                                11824000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    11826000
                                                                        11828000
   END;                                                                 11830000
                                                                        11832000
<< CHECK MPYL INSTRUCTION >>                                            11834000
                                                                        11836000
SUBROUTINE MPYL'TEST;                                                   11838000
   BEGIN                                                                11840000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       11842000
      ASSEMBLE(                                                         11844000
      LDI 2;                                                            11846000
      LDI 5;                                                            11848000
      PSHR 0;   << SR=0 >>                                              11850000
      MPYL;   << 5*2 >>                                                 11852000
      BG *+2;                                                           11854000
      BR MPYLERROR;                   << NOT CCG >>                     11856000
      BNOV *+2;                                                         11858000
      BR MPYLERROR;                   << O NOT 0 >>                     11860000
      BNCY *+2;                                                         11862000
      BR MPYLERROR;                   << C NOT 0 >>                     11864000
      LDI 0;                                                            11866000
      LDI 10;                                                           11868000
      DCMP;                                                             11870000
      BE *+2;                                                           11872000
      BR MPYLERROR;                   << RESULT NOT 0,10 >>             11874000
                                                                        11876000
      LOAD BIT0;                                                        11878000
      DUP,ADD;  << MAKE C=O=1 >>                                        11880000
      LDNI 1;                                                           11882000
      LDI 1;                                                            11884000
      SETR 0;   << SR=4 >>                                              11886000
      MPYL;   << -1*1 >>                                                11888000
      BL *+2;                                                           11890000
      BR MPYLERROR;                   << NOT CCL >>                     11892000
      BNOV *+2;                                                         11894000
      BR MPYLERROR;                   << O NOT 0 >>                     11896000
      BNCY *+2;                                                         11898000
      BR MPYLERROR;                   << C NOT 0 >>                     11900000
      LDNI 1;                                                           11902000
      DUP,DCMP;                                                         11904000
      BE *+2;                                                           11906000
      BR MPYLERROR;                   << RESULT NOT -1,-1 >>            11908000
                                                                        11910000
      LDNI 1;                                                           11912000
      DUP,ADD;  << C=1 >>                                               11914000
      LDNI 1;                                                           11916000
      DUP,MPYL;   << -1*(-1) >>                                         11918000
      BG *+2;                                                           11920000
      BR MPYLERROR;                   << NOT CCG >>                     11922000
      BNCY *+2;                                                         11924000
      BR MPYLERROR;                   << C NOT 0 >>                     11926000
      DZRO,INCA;                                                        11928000
      DCMP;                                                             11930000
      BE *+2;                                                           11932000
      BR MPYLERROR;                   << RESULT NOT 0,1 >>              11934000
                                                                        11936000
      LOAD BIT0;                                                        11938000
      LDI 2;    << %100000*2 >>                                         11940000
      MPYL;                                                             11942000
      BL *+2;                                                           11944000
      BR MPYLERROR;                   << NOT CCL >>                     11946000
      BCY *+2;                                                          11948000
      BR MPYLERROR;                   << C NOT 1 >>                     11950000
      BNOV *+2;                                                         11952000
      BR MPYLERROR;                   << O NOT 0 >>                     11954000
      LDNI 1;                                                           11956000
      ZERO,DCMP;                                                        11958000
      BE *+2;                                                           11960000
      BR MPYLERROR;                   << RESULT NOT -1,0 >>             11962000
                                                                        11964000
      LOAD BIT0;                                                        11966000
      DUP,MPYL;                                                         11968000
      BG *+2;                                                           11970000
      BR MPYLERROR;                   << NOT CCL >>                     11972000
      BCY *+2;                                                          11974000
      BR MPYLERROR;                   << CARRY NOT 1 >>                 11976000
      LOAD BIT1;                                                        11978000
      ZERO,DCMP;                                                        11980000
      BE EXIT;                                                          11982000
      BR MPYLERROR);                        << RESULT NOT %40000,0 >>   11984000
                                                                        11986000
MPYLERROR:                                                              11988000
      NO'ERROR:=FALSE;                                                  11990000
                                                                        11992000
EXIT:                                                                   11994000
       PUSH(Q);SET(S);  << RESET STACK >>                               11996000
       TOS:=RE'ADDRS;   << RESTORE RETURN ADDRESS >>                    11998000
                                                                        12000000
  END;                                                                  12002000
                                                                        12004000
       MOVE INSTRUCT'NAME:="DADD  ";                                    12006000
       PRINT'NAMES;                                                     12008000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DADD'TEST;           12010000
                                                                        12012000
       MOVE INSTRUCT'NAME:="DNEG  ";                                    12014000
       PRINT'NAMES;                                                     12016000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DNEG'TEST;           12018000
                                                                        12020000
       MOVE INSTRUCT'NAME:="DSUB  ";                                    12022000
       PRINT'NAMES;                                                     12024000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DSUB'TEST;           12026000
                                                                        12028000
       MOVE INSTRUCT'NAME:="DIVL  ";                                    12030000
       PRINT'NAMES;                                                     12032000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DIVL'TEST;           12034000
                                                                        12036000
       MOVE INSTRUCT'NAME:="MPYL  ";                                    12038000
       PRINT'NAMES;                                                     12040000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO MPYL'TEST;           12042000
                                                                        12044000
                                                                        12046000
END;   << GRPI >>                                                       12048000
                                                                        12050000
PROCEDURE GRPF;   << TEST GROUP F: LOOP CONTROL BRANCH INSTRUCTIONS >>  12052000
BEGIN                                                                   12054000
                                                                        12056000
<<< CHECK TBA INSTRUCTION >>                                            12058000
                                                                        12060000
SUBROUTINE TBA'TEST;                                                    12062000
   BEGIN                                                                12064000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       12066000
      ASSEMBLE(                                                         12068000
      LDNI 1;                                                           12070000
      LDI 3;                                                            12072000
      STOR VAR1;   <<< VAR=3 >>                                         12074000
      LRA VAR1;                                                         12076000
      LDI 1;       <<< STEP=1 >>                                        12078000
      LDI 2;       <<< FINAL=2 >>                                       12080000
      LDNI 5;                                                           12082000
      DEL;   << MAKE CC=CCL >>                                          12084000
      PSHR 0;   << SR=0 >>                                              12086000
      TBA TBAE;                                                         12088000
      BL *+2;                                                           12090000
      BR TBAERROR;                   << CC CHANGED >>                   12092000
      CMPN 1;                                                           12094000
      BE *+2;                                                           12096000
      BR TBAERROR;                   << TOS NOT -1 >>                   12098000
      LOAD VAR1;                                                        12100000
      CMPI 3;                                                           12102000
      BE *+2;                                                           12104000
      BR TBAERROR;                   << VAR NOT 3 >>                    12106000
      BR *+2;                                                           12108000
TBAE: BR TBAERROR;                   << UNEXPECTED BRANCH >>            12110000
                                                                        12112000
      LDNI 2;                                                           12114000
      STOR VAR0;   <<< VAR=-2 >>                                        12116000
      LRA VAR0;                                                         12118000
      LDNI 2;      <<< STEP=-2 >>                                       12120000
      DUP;         <<< FINAL =-2 >>                                     12122000
      SETR 0;   << SR=4 >>                                              12124000
      TBA *+2;                                                          12126000
      BR TBAERROR;                   <<< DID NOT BRANCH >>              12128000
      LDNI 2;                                                           12130000
      DUP,DCMP;                                                         12132000
      BE *+2;                                                           12134000
      BR TBAERROR;                   << (S-1,S) NOT -2,-2 >>            12136000
      LRA VAR0;                                                         12138000
      CMP;                                                              12140000
      BE *+2;                                                           12142000
      BR TBAERROR;                   << (S-2) WAS NOT DB REL ADDR >>    12144000
      LOAD VAR0;                                                        12146000
      CMPN 2;                                                           12148000
      BE EXIT);                                                         12150000
TBAERROR:                                                               12152000
      NO'ERROR:=FALSE;                   << VAR NOT -2 >>               12154000
EXIT:                                                                   12156000
      PUSH(Q);SET(S); << RESET STACK >>                                 12158000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    12160000
   END;                                                                 12162000
                                                                        12164000
<<< CHECK MTBA INSTRUCTION >>                                           12166000
                                                                        12168000
SUBROUTINE MTBA'TEST;                                                   12170000
   BEGIN                                                                12172000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       12174000
      ASSEMBLE(                                                         12176000
      LDNI 30;                                                          12178000
      ZERO;                                                             12180000
      STOR VAR0;   <<< VAR=0 >>                                         12182000
      LRA VAR0;                                                         12184000
      LDI 1;       <<< STEP=1 >>                                        12186000
      ZERO;        <<< FINAL=0 >>                                       12188000
      MTBA MTBAE;                                                       12190000
      CMPN 30;                                                          12192000
      BE *+2;                                                           12194000
      BR MTBAERROR;                   << TOS NOT -30 >>                 12196000
      LOAD VAR0;                                                        12198000
      CMPI 1;                                                           12200000
      BE *+2;                                                           12202000
      BR MTBAERROR;                   << VAR NOT 1 >>                   12204000
      BR *+2;                                                           12206000
MTBAE: BR MTBAERROR;                  << UNEXPECTED BRANCH >>           12208000
                                                                        12210000
      LDNI 1;                                                           12212000
      STOR VAR1;   <<< VAR=-1 >>                                        12214000
      LRA VAR1;                                                         12216000
      LDNI 1;      <<< STEP=-1 >>                                       12218000
      LDNI 2;      <<< FINAL=-2 >>                                      12220000
      MTBA *+2;                                                         12222000
      BR MTBAERROR;                   << DID NOT BRANCH >>              12224000
      LDNI 1;                                                           12226000
      LDNI 2;                                                           12228000
      DCMP;                                                             12230000
      BE *+2;                                                           12232000
      BR MTBAERROR;                   << (S-1,S) NOT -1,-2 >>           12234000
      LOAD VAR1;                                                        12236000
      CMPN 2;                                                           12238000
      BE EXIT);                                                         12240000
MTBAERROR:                                                              12242000
      NO'ERROR:=FALSE;                   << VAR NOT -2 >>               12244000
EXIT:                                                                   12246000
      PUSH(Q);SET(S); << RESET STACK >>                                 12248000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    12250000
   END;                                                                 12252000
                                                                        12254000
<<< CHECK TBX INSTRUCTION >>                                            12256000
                                                                        12258000
SUBROUTINE TBX'TEST;                                                    12260000
   BEGIN                                                                12262000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       12264000
      ASSEMBLE(                                                         12266000
      ZROX;    <<< VAR=0 >>                                             12268000
      LDNI 10;                                                          12270000
      LDI 1;   <<< STEP=1 >>                                            12272000
      LDNI 1;  <<< FINAL=-1 >>                                          12274000
      TBX TBXE;                                                         12276000
      CMPN 10;                                                          12278000
      BE *+2;                                                           12280000
      BR TBXERROR;                   << TOS NOT -10 >>                  12282000
      LDXA;                                                             12284000
      BE *+2;                                                           12286000
      BR TBXERROR;                   << X NOT 0 AFTER LDXA >>           12288000
      BR EXIT);                                                         12290000
TBXE:                                                                   12292000
TBXERROR:                                                               12294000
      NO'ERROR:=FALSE;                   << UNEXPECTED BRANCH >>        12296000
EXIT:                                                                   12298000
      PUSH(Q);SET(S); << RESET STACK >>                                 12300000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    12302000
   END;                                                                 12304000
                                                                        12306000
<<< CHECK MTBX INSTRUCTION >>                                           12308000
                                                                        12310000
SUBROUTINE MTBX'TEST;                                                   12312000
   BEGIN                                                                12314000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       12316000
      ASSEMBLE(                                                         12318000
      LDXI 4;  <<< VAR=4 >>                                             12320000
      LDI 3;   <<< STEP=3 >>                                            12322000
      LDI 27;  <<< LIMIT=27 >>                                          12324000
      MTBX *+2;                                                         12326000
      BR MTBXERROR;                   << DID NOT BRANCH >>              12328000
      CMPI 27;                                                          12330000
      BE *+2;                                                           12332000
      BR MTBXERROR;                   << TOS NOT 27 >>                  12334000
      LDXA;                                                             12336000
      CMPI 7;                                                           12338000
      BE EXIT;                                                          12340000
      BR MTBXERROR;                        << X NOT 7 >>                12342000
      NOP);                                                             12344000
                                                                        12346000
                                                                        12348000
MTBXERROR:                                                              12350000
      NO'ERROR:=FALSE;                                                  12352000
                                                                        12354000
EXIT:                                                                   12356000
       PUSH(Q);SET(S); << RESET STACK >>                                12358000
       TOS:=RE'ADDRS;   << RESTORE RETURN ADDRESS >>                    12360000
  END;                                                                  12362000
                                                                        12364000
                                                                        12366000
       MOVE INSTRUCT'NAME:="TBA   ";                                    12368000
       PRINT'NAMES;                                                     12370000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO TBA'TEST;            12372000
                                                                        12374000
       MOVE INSTRUCT'NAME:="MTBA  ";                                    12376000
       PRINT'NAMES;                                                     12378000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO MTBA'TEST;           12380000
                                                                        12382000
       MOVE INSTRUCT'NAME:="TBX   ";                                    12384000
       PRINT'NAMES;                                                     12386000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO TBX'TEST;            12388000
                                                                        12390000
       MOVE INSTRUCT'NAME:="MTBX  ";                                    12392000
       PRINT'NAMES;                                                     12394000
       WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO MTBX'TEST;           12396000
                                                                        12398000
                                                                        12400000
                                                                        12402000
END;   << GRPF >>                                                       12404000
                                                                        12406000
PROCEDURE GRPT;   << TEST GROUP T: SINGLE WORD SHIFT INSTRUCTIONS >>    12408000
BEGIN                                                                   12410000
                                                                        12412000
<<< CHECK ASL INSTRUCTION >>                                            12414000
                                                                        12416000
SUBROUTINE ASL'TEST;                                                    12418000
   BEGIN                                                                12420000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       12422000
      ASSEMBLE(                                                         12424000
      LDI 1;                                                            12426000
      PSHR 0;   << SR=0 >>                                              12428000
      ASL 2;                                                            12430000
      BG *+2;                 << NOT CCG >>                             12432000
      BR ASLERROR;                                                      12434000
      CMPI 4;                                                           12436000
      BE *+2;                                                           12438000
      BR ASLERROR;                   << TOS NOT 4 >>                    12440000
                                                                        12442000
      LDNI 1;                                                           12444000
      SETR 0;   << SR=4 >>                                              12446000
      ASL 3;                                                            12448000
      BL *+2;                                                           12450000
      BR ASLERROR;                   << NOT CCL >>                      12452000
      CMPN 8;                                                           12454000
      BE *+2;                                                           12456000
      BR ASLERROR;                   << TOS NOT -8 >>                   12458000
                                                                        12460000
      LDI 4;                                                            12462000
      ASL 13;                                                           12464000
      BE *+2;                                                           12466000
      BR ASLERROR;                   << NOT CCE >>                      12468000
      CMPI 0;                                                           12470000
      BE *+2;                                                           12472000
      BR ASLERROR;                   << TOS NOT 0 >>                    12474000
                                                                        12476000
      LDNI 1;                                                           12478000
      ASL 63;                                                           12480000
      CMPM NMAX;                                                        12482000
      BE *+2;                                                           12484000
      BR ASLERROR;                   << TOS NOT %100000 >>              12486000
                                                                        12488000
      LDI 5;                                                            12490000
      ASL 0;                                                            12492000
      CMPI 5;                                                           12494000
      BE EXIT);                                                         12496000
ASLERROR:                                                               12498000
      NO'ERROR:=FALSE;                   << TOS NOT 5 >>                12500000
EXIT:                                                                   12502000
      PUSH(Q);SET(S);  << RESET STACK >>                                12504000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    12506000
   END;                                                                 12508000
                                                                        12510000
<<< CHECK LSL INSTRUCTION >>                                            12512000
                                                                        12514000
SUBROUTINE LSL'TEST;                                                    12516000
   BEGIN                                                                12518000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       12520000
     ASSEMBLE(                                                          12522000
      LDI 3;                                                            12524000
      PSHR 0;   << SR=0 >>                                              12526000
      LSL 4;                                                            12528000
      BG *+2;                                                           12530000
      BR LSLERROR;                   << NOT CCG >>                      12532000
      CMPI 48;                                                          12534000
      BE *+2;                                                           12536000
      BR LSLERROR;                   << TOS NOT 48 >>                   12538000
                                                                        12540000
      LDI 1;                                                            12542000
      SETR 0;   << SR=4 >>                                              12544000
      LSL 15;                                                           12546000
      CMPM NMAX;                                                        12548000
      BE *+2;                                                           12550000
      BR LSLERROR;                   << TOS NOT %100000 >>              12552000
                                                                        12554000
      LDNI 1;                                                           12556000
      LSL 16;                                                           12558000
      CMPI 0;                                                           12560000
      BE EXIT);                                                         12562000
LSLERROR:                                                               12564000
      NO'ERROR:=FALSE;                   << TOS NOT 0 >>                12566000
EXIT:                                                                   12568000
      PUSH(Q);SET(S);  << RESET STACK >>                                12570000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    12572000
   END;                                                                 12574000
                                                                        12576000
<<< CHECK CSL INSTRUCTION >>                                            12578000
                                                                        12580000
SUBROUTINE CSL'TEST;                                                    12582000
   BEGIN                                                                12584000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       12586000
     ASSEMBLE(                                                          12588000
      LDI 2;                                                            12590000
      PSHR 0;   << SR=0 >>                                              12592000
      CSL 15;                                                           12594000
      BG *+2;                                                           12596000
      BR CSLERROR;                   << NOT CCG >>                      12598000
      CMPI 1;                                                           12600000
      BE *+2;                                                           12602000
      BR CSLERROR;                   << TOS NOT 1 >>                    12604000
                                                                        12606000
      LDI 6;                                                            12608000
      SETR 0;   << SR=4 >>                                              12610000
      CSL 14;                                                           12612000
      CMPM ENDBITS1;                                                    12614000
      BE *+2;                                                           12616000
      BR CSLERROR;                   << TOS NOT %100001 >>              12618000
                                                                        12620000
      LDI 62;                                                           12622000
      CSL 48;                                                           12624000
      CMPI 62;                                                          12626000
      BE *+2;                                                           12628000
      BR CSLERROR;                   << TOS NOT 62 >>                   12630000
                                                                        12632000
      LDI 8;                                                            12634000
      LDXI 65;                                                          12636000
      CSL 0,X;   << CNT=65MOD64=1 >>                                    12638000
      CMPI 16;                                                          12640000
      BE EXIT);                                                         12642000
CSLERROR:                                                               12644000
      NO'ERROR:=FALSE;                   << TOS NOT 16 >>               12646000
EXIT:                                                                   12648000
      PUSH(Q);SET(S);   << RESET STACK >>                               12650000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    12652000
   END;                                                                 12654000
                                                                        12656000
<<< CHECK ASR INSTRUCTION >>                                            12658000
                                                                        12660000
SUBROUTINE ASR'TEST;                                                    12662000
   BEGIN                                                                12664000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       12666000
      ASSEMBLE(                                                         12668000
      LDI 20;                                                           12670000
      PSHR 0;   << SR=0 >>                                              12672000
      ASR 2;                                                            12674000
      BG *+2;                                                           12676000
      BR ASRERROR;                   << NOT CCG >>                      12678000
      CMPI 5;                                                           12680000
      BE *+2;                                                           12682000
      BR ASRERROR;                   << TOS NOT 5 >>                    12684000
                                                                        12686000
      LDI 2;                                                            12688000
      SETR 0;   << SR=4 >>                                              12690000
      ASR 2;                                                            12692000
      BE *+2;                 << NOT CCE >>                             12694000
      BR ASRERROR;                                                      12696000
      CMPI 0;                                                           12698000
      BE *+2;                                                           12700000
      BR ASRERROR;                   << TOS NOT 0 >>                    12702000
                                                                        12704000
      LOAD M256;                                                        12706000
      ASR 4;                                                            12708000
      CMPN 16;                                                          12710000
      BE *+2;                                                           12712000
      BR ASRERROR;                   << TOS NOT -16 >>                  12714000
                                                                        12716000
      LOAD NMAX;                                                        12718000
      ASR 61;                                                           12720000
      CMPN 1;                                                           12722000
      BE *+2;                                                           12724000
      BR ASRERROR;                   << TOS NOT -1 >>                   12726000
                                                                        12728000
      LDI 5;                                                            12730000
      ASR 0;                                                            12732000
      CMPI 5;                                                           12734000
      BE *+2;                                                           12736000
      BR ASRERROR;                   << TOS NOT 5 >>                    12738000
                                                                        12740000
      LOAD BIT0;                                                        12742000
      LDXI 14;                                                          12744000
      ASR 0,X;   << CNT=14>>                                            12746000
      CMPN 2;                                                           12748000
      BE *+2;                                                           12750000
      BR ASRERROR;                   << TOS NOT -2 >>                   12752000
                                                                        12754000
      LDI 37;                                                           12756000
      LDXI 64;                                                          12758000
      ASR 0,X;   << CNT=64 >>                                           12760000
      CMPI 37;                                                          12762000
      BE EXIT);                                                         12764000
ASRERROR:                                                               12766000
      NO'ERROR:=FALSE;                   << TOS NOT 37 >>               12768000
EXIT:                                                                   12770000
      PUSH(Q);SET(S);  << RESET STACK >>                                12772000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    12774000
   END;                                                                 12776000
                                                                        12778000
<<< CHECK LSR INSTRUCTION >>                                            12780000
                                                                        12782000
SUBROUTINE LSR'TEST;                                                    12784000
   BEGIN                                                                12786000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       12788000
CLSR:ASSEMBLE(                                                          12790000
      LDI 7;                                                            12792000
      PSHR 0;   << SR=0 >>                                              12794000
      LSR 1;                                                            12796000
      BG *+2;                                                           12798000
      BR LSRERROR;                   << NOT CCG >>                      12800000
      CMPI 3;                                                           12802000
      BE *+2;                                                           12804000
      BR LSRERROR;                   << TOS NOT 3 >>                    12806000
                                                                        12808000
      LOAD NMAX;                                                        12810000
      SETR 0;   << SR=4 >>                                              12812000
      LSR 13;                                                           12814000
      CMPI 4;                                                           12816000
      BE *+2;                                                           12818000
      BR LSRERROR;                   << TOS NOT 4 >>                    12820000
                                                                        12822000
      LDNI 4;                                                           12824000
      LSR 16;                                                           12826000
      CMPI 0;                                                           12828000
      BE *+2;                                                           12830000
      BR LSRERROR;                   << TOS NOT 0 >>                    12832000
                                                                        12834000
      LDNI 31;                                                          12836000
      LDXN 64;                                                          12838000
      LSR 0,X;                                                          12840000
      CMPN 31;                                                          12842000
      BE *+2;                                                           12844000
      BR LSRERROR;                   << TOS NOT -31 >>                  12846000
                                                                        12848000
      LDNI 1;                                                           12850000
      LDXN 22;                                                          12852000
      LSR 31,X;   << CNT=9 >>                                           12854000
      CMPI 127;                                                         12856000
      BE EXIT);                                                         12858000
LSRERROR:                                                               12860000
      NO'ERROR:=FALSE;                   << TOS NOT %177 >>             12862000
EXIT:                                                                   12864000
      PUSH(Q);SET(S);  << RESET STACK >>                                12866000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    12868000
   END;                                                                 12870000
                                                                        12872000
<<< CHECK CSR INSTRUCTION >>                                            12874000
                                                                        12876000
SUBROUTINE CSR'TEST;                                                    12878000
   BEGIN                                                                12880000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       12882000
      ASSEMBLE(                                                         12884000
      LDI 1;                                                            12886000
      PSHR 0;   << SR=0 >>                                              12888000
      CSR 1;                                                            12890000
      BL *+2;                                                           12892000
      BR CSRERROR;                   << NOT CCL >>                      12894000
      CMPM NMAX;                                                        12896000
      BE *+2;                                                           12898000
      BR CSRERROR;                   << TOS NOT %100000 >>              12900000
                                                                        12902000
      LDI 30;                                                           12904000
      SETR 0;   << SR=4 >>                                              12906000
      CSR 17;                                                           12908000
      CMPI 15;                                                          12910000
      BE *+2;                                                           12912000
      BR CSRERROR;                   << TOS NOT 15 >>                   12914000
                                                                        12916000
      LDI 2;                                                            12918000
      LDXI 2;                                                           12920000
      CSR 61,X;   << CNT=63 >>                                          12922000
      CMPI 4;                                                           12924000
      BE EXIT);                                                         12926000
CSRERROR:                                                               12928000
      NO'ERROR:=FALSE;                   << TOS NOT 4 >>                12930000
EXIT:                                                                   12932000
      PUSH(Q);SET(S);  << RESET STACK >>                                12934000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    12936000
   END;                                                                 12938000
                                                                        12940000
<< CHECK SCAN INSTRUCTION >>                                            12942000
                                                                        12944000
SUBROUTINE SCAN'TEST;                                                   12946000
   BEGIN                                                                12948000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       12950000
      ASSEMBLE(                                                         12952000
      ZERO;   << TOS=0, X=-4 >>                                         12954000
      LDXN 4;                                                           12956000
      PSHR 0;   << SR=0 >>                                              12958000
      SCAN 0;                                                           12960000
      BE *+2;                                                           12962000
      BR SCANERROR;                   << NOT CCE >>                     12964000
      LDXA;                                                             12966000
      CMPI 16;                                                          12968000
      BE *+2;                                                           12970000
      BR SCANERROR;                   << X NOT 16 >>                    12972000
                                                                        12974000
      LDNI 1;   << TOS =-1, X=12 >>                                     12976000
      LDXI 12;                                                          12978000
      SETR 0;   << SR=4 >>                                              12980000
      SCAN 0;                                                           12982000
      BL *+2;                                                           12984000
      BR SCANERROR;                   << NOT CCL >>                     12986000
      CMPN 2;                                                           12988000
      BE *+2;                                                           12990000
      BR SCANERROR;                   << TOS NOT -2 >>                  12992000
      LDXA;                                                             12994000
      CMPI 0;                                                           12996000
      BE *+2;                                                           12998000
      BR SCANERROR;                   << X NOT 0 >>                     13000000
                                                                        13002000
      LDI 3;   << TOS =3, X=100 >>                                      13004000
      LDXI 100;                                                         13006000
      SCAN 0;                                                           13008000
      BL *+2;                                                           13010000
      BR SCANERROR;                   << NOT CCL >>                     13012000
      CMPM BIT0;                                                        13014000
      BE *+2;                                                           13016000
      BR SCANERROR;                   << TOS NOT %100000 >>             13018000
      LDXA;                                                             13020000
      CMPI 14;                                                          13022000
      BE *+2;                                                           13024000
      BR SCANERROR;                   << X NOT 14 >>                    13026000
                                                                        13028000
      LDI 1;   << TOS =1 >>                                             13030000
      SCAN 0;                                                           13032000
      BE *+2;                                                           13034000
      BR SCANERROR;                   << NOT CCE >>                     13036000
      CMPI 0;                                                           13038000
      BE *+2;                                                           13040000
      BR SCANERROR;                   << TOS NOT 0 >>                   13042000
      LDXA;                                                             13044000
      CMPI 15;                                                          13046000
      BE *+2;                                                           13048000
      BR SCANERROR;                   << X NOT 15 >>                    13050000
                                                                        13052000
      LDXI 5;   << TOS=0, X=5 >>                                        13054000
      ZERO;                                                             13056000
      SCAN 0,X;                                                         13058000
      LDXA;                                                             13060000
      CMPI 21;                                                          13062000
      BE *+2;                                                           13064000
      BR SCANERROR;                   << X NOT 21 >>                    13066000
                                                                        13068000
      LDXI 20;   << TOS=%100001, X=20 >>                                13070000
      LOAD ENDBITS1;                                                    13072000
      SCAN 0,X;                                                         13074000
      BG *+2;                                                           13076000
      BR SCANERROR;                   << NOT CCG >>                     13078000
      CMPI 2;                                                           13080000
      BE *+2;                                                           13082000
      BR SCANERROR;                   << TOS NOT 2 >>                   13084000
      LDXA;                                                             13086000
      CMPI 21;                                                          13088000
      BE *+2;                                                           13090000
      BR SCANERROR;                   << X NOT 21 >>                    13092000
                                                                        13094000
      LDXI 4;   << TOS =5, X=4 >>                                       13096000
      LDI 5;                                                            13098000
      SCAN 0,X;                                                         13100000
      BG *+2;                                                           13102000
      BR SCANERROR;                   << NOT CCG >>                     13104000
      CMPM BIT1;                                                        13106000
      BE *+2;                                                           13108000
      BR SCANERROR;                   << TOS NOT %040000 >>             13110000
      LDXA;                                                             13112000
      CMPI 18;                                                          13114000
      BE EXIT;                                                          13116000
      BR SCANERROR);                       << X NOT 18 >>               13118000
                                                                        13120000
SCANERROR:                                                              13122000
      NO'ERROR:=FALSE;                                                  13124000
                                                                        13126000
EXIT:                                                                   13128000
      PUSH(Q);SET(S);  << RESET STACK >>                                13130000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    13132000
   END;                                                                 13134000
                                                                        13136000
                                                                        13138000
      MOVE INSTRUCT'NAME:="ASL   ";                                     13140000
      PRINT'NAMES;                                                      13142000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO ASL'TEST;             13144000
                                                                        13146000
      MOVE INSTRUCT'NAME:="LSL   ";                                     13148000
      PRINT'NAMES;                                                      13150000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO LSL'TEST;             13152000
                                                                        13154000
      MOVE INSTRUCT'NAME:="CSL   ";                                     13156000
      PRINT'NAMES;                                                      13158000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO CSL'TEST;             13160000
                                                                        13162000
      MOVE INSTRUCT'NAME:="ASR   ";                                     13164000
      PRINT'NAMES;                                                      13166000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO ASR'TEST;             13168000
                                                                        13170000
      MOVE INSTRUCT'NAME:="LSR   ";                                     13172000
      PRINT'NAMES;                                                      13174000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO LSR'TEST;             13176000
                                                                        13178000
      MOVE INSTRUCT'NAME:="CSR   ";                                     13180000
      PRINT'NAMES;                                                      13182000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO CSR'TEST;             13184000
                                                                        13186000
      MOVE INSTRUCT'NAME:="SCAN  ";                                     13188000
      PRINT'NAMES;                                                      13190000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO SCAN'TEST;            13192000
END;   << GRPT >>                                                       13194000
                                                                        13196000
PROCEDURE GRPU;   << TEST GROUP U: DOUBLE WORD SHIFT INSTRUCTIONS >>    13198000
BEGIN                                                                   13200000
SUBROUTINE DASL'TEST;                                                   13202000
   BEGIN                                                                13204000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       13206000
      ASSEMBLE(                                                         13208000
                                                                        13210000
<<< CHECK DASL INSTRUCTION >>                                           13212000
                                                                        13214000
      ZERO;                                                             13216000
      LDI 1;                                                            13218000
      PSHR 0;   << SR=0 >>                                              13220000
      DASL 17;                                                          13222000
      BG *+2;                                                           13224000
      BR DASLERROR;                   << NOT CCG >>                     13226000
      CMPI 0;                                                           13228000
      BE *+2;                                                           13230000
      BR DASLERROR;                   << TOS NOT 0 AFTER DASL >>        13232000
      CMPI 2;                                                           13234000
      BE *+2;                                                           13236000
      BR DASLERROR;                   << (S-1) NOT 2 AFTER DASL >>      13238000
                                                                        13240000
      LDNI 1;                                                           13242000
      ZERO;                                                             13244000
      LDNI 1;                                                           13246000
      LDNI 1;                                                           13248000
      SETR 0;   << SR=4 >>                                              13250000
      DASL 16;                                                          13252000
      BL *+2;                                                           13254000
      BR DASLERROR;                   << NOT CCL >>                     13256000
      DCMP;                                                             13258000
      BE *+2;                                                           13260000
      BR DASLERROR;                   << (S-1,S) NOT -1,0 AFTER DASL >> 13262000
                                                                        13264000
      LDNI 41;                                                          13266000
      DUP;                                                              13268000
      DASL 63;                                                          13270000
      BL *+2;                 << NOT CCL >>                             13272000
      BR DASLERROR;                                                     13274000
      LOAD NMAX;                                                        13276000
      ZERO,DCMP;                                                        13278000
      BE *+2;                                                           13280000
      BR DASLERROR;                << (S-1,S) NOT %100000,0 AFTER DAS >>13282000
                                                                        13284000
      LDI 121;                                                          13286000
      LDI 201;                                                          13288000
      DDUP;                                                             13290000
      LDXN 31;                                                          13292000
      DASL 31,X;   << CNT=0 >>                                          13294000
      DCMP;                                                             13296000
      BE EXIT);                                                         13298000
DASLERROR:                                                              13300000
      NO'ERROR:=FALSE;                   << RESULT NOT 121,201 >>       13302000
EXIT:                                                                   13304000
      PUSH(Q);SET(S);    << RESET STACK >>                              13306000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    13308000
   END;                                                                 13310000
                                                                        13312000
<<< CHECK DLSL INSTRUCTION >>                                           13314000
                                                                        13316000
SUBROUTINE DLSL'TEST;                                                   13318000
   BEGIN                                                                13320000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       13322000
      ASSEMBLE(                                                         13324000
      ZERO;                                                             13326000
      LDI 14;                                                           13328000
      PSHR 0;   << SR=0 >>                                              13330000
      DLSL 18;                                                          13332000
      BG *+2;                                                           13334000
      BR DLSLERROR;                   << NOT CCG >>                     13336000
      CMPI 0;                                                           13338000
      BE *+2;                                                           13340000
      BR DLSLERROR;                   << TOS NOT 0 AFTER DLSL >>        13342000
      CMPI 56;                                                          13344000
      BE *+2;                                                           13346000
      BR DLSLERROR;                   << (S-1) NOT 56 AFTER DLSL >>     13348000
                                                                        13350000
      LDNI 1;                                                           13352000
      DUP;                                                              13354000
      SETR 0;   << SR=4 >>                                              13356000
      DLSL 31;                                                          13358000
      BL *+2;                                                           13360000
      BR DLSLERROR;                   << NOT CCL >>                     13362000
      CMPI 0;                                                           13364000
      BE *+2;                                                           13366000
      BR DLSLERROR;                   << TOS NOT 0 AFTER DLSL >>        13368000
      CMPM NMAX;                                                        13370000
      BE *+2;                                                           13372000
      BR DLSLERROR;                   << (S-1) NOT %100000 AFTER DLSL >>13374000
                                                                        13376000
      DZRO,ZERO;                                                        13378000
      LDI 1;                                                            13380000
      DLSL 32;                                                          13382000
      BE *+2;                                                           13384000
      BR DLSLERROR;                   << NOT CCE >>                     13386000
      DCMP;                                                             13388000
      BE EXIT);                                                         13390000
DLSLERROR:                                                              13392000
      NO'ERROR:=FALSE;                << (S-1,S) NOT 0,0 AFTER DLSL >>  13394000
EXIT:                                                                   13396000
      PUSH(Q);SET(S);   << RESET STACK >>                               13398000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    13400000
   END;                                                                 13402000
                                                                        13404000
<<< CHECK DCSL INSTRUCTION >>                                           13406000
                                                                        13408000
SUBROUTINE DCSL'TEST;                                                   13410000
   BEGIN                                                                13412000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       13414000
      ASSEMBLE(                                                         13416000
      LDI 7;                                                            13418000
      LDI 3;                                                            13420000
      PSHR 0;   << SR=0 >>                                              13422000
      DCSL 17;                                                          13424000
      BG *+2;                 << NOT CCG >>                             13426000
      BR DCSLERROR;                                                     13428000
      LDI 6;                                                            13430000
      LDI 14;                                                           13432000
      DCMP;                                                             13434000
      BE *+2;                                                           13436000
      BR DCSLERROR;                   << (S-1,S) NOT 6,14 >>            13438000
                                                                        13440000
      ZERO;                                                             13442000
      LDI 1;                                                            13444000
      SETR 0;   << SR=4 >>                                              13446000
      DCSL 63;                                                          13448000
      BL *+2;                                                           13450000
      BR DCSLERROR;                   << NOT CCL >>                     13452000
      CMPI 0;                                                           13454000
      BE *+2;                                                           13456000
      BR DCSLERROR;                   << TOS NOT 0 AFTER DCSL >>        13458000
      CMPM NMAX;                                                        13460000
      BE EXIT);                                                         13462000
DCSLERROR:                                                              13464000
      NO'ERROR:=FALSE;        << (S-1) NOT %100000 AFTER AFTER DCSL >>  13466000
EXIT:                                                                   13468000
      PUSH(Q);SET(S);  << RESET STACK >>                                13470000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    13472000
   END;                                                                 13474000
<<< CHECK DASR INSTRUCTION >>                                           13476000
                                                                        13478000
SUBROUTINE DASR'TEST;                                                   13480000
   BEGIN                                                                13482000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       13484000
      ASSEMBLE(                                                         13486000
      LDI 10;                                                           13488000
      LDNI 1;                                                           13490000
      PSHR 0;   << SR=0 >>                                              13492000
      DASR 15;                                                          13494000
      BG *+2;                 << NOT CCG >>                             13496000
      BR DASRERROR;                                                     13498000
      CMPI 21;                                                          13500000
      BE *+2;                                                           13502000
      BR DASRERROR;                   << TOS NOT 21 AFTER DASR >>       13504000
      CMPI 0;                                                           13506000
      BE *+2;                                                           13508000
      BR DASRERROR;                   << (S-1) NOT 0 AFTER DASR >>      13510000
                                                                        13512000
      LOAD NMAX;  <<< %100000 >>                                        13514000
      ZERO;                                                             13516000
      SETR 0;   << SR=4 >>                                              13518000
      DASR 30;                                                          13520000
      BL *+2;                                                           13522000
      BR DASRERROR;                   << NOT CCL >>                     13524000
      CMPN 2;                                                           13526000
      BE *+2;                                                           13528000
      BR DASRERROR;                   << TOS NOT -2 AFTER DASR >>       13530000
      CMPN 1;                                                           13532000
      BE *+2;                                                           13534000
      BR DASRERROR;                   << TOS NOT -1 AFTER DASR >>       13536000
                                                                        13538000
      ZERO,DZRO;                                                        13540000
      LDI 1;                                                            13542000
      DASR 1;                                                           13544000
      BE *+2;                                                           13546000
      BR DASRERROR;                   << NOT CCE >>                     13548000
      DCMP;                                                             13550000
      BE *+2;                                                           13552000
      BR DASRERROR;                   << (S-1,S) NOT 0,0 AFTER DASR  >> 13554000
                                                                        13556000
      LDI 1;                                                            13558000
      LDI 2;                                                            13560000
      DASR 0;                                                           13562000
      LDI 1;                                                            13564000
      LDI 2;                                                            13566000
      DCMP;                                                             13568000
      BE EXIT);                                                         13570000
DASRERROR:                                                              13572000
      NO'ERROR:=FALSE;                   << RESULT NOT 1,2 >>           13574000
EXIT:                                                                   13576000
      PUSH(Q);SET(S);  << RESET STACK >>                                13578000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    13580000
   END;                                                                 13582000
                                                                        13584000
<<< CHECK DLSR INSTRUCTION >>                                           13586000
                                                                        13588000
SUBROUTINE DLSR'TEST;                                                   13590000
   BEGIN                                                                13592000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       13594000
      ASSEMBLE(                                                         13596000
      LDI 212;                                                          13598000
      DUP;                                                              13600000
      PSHR 0;   << SR=0 >>                                              13602000
      DLSR 16;                                                          13604000
      BG *+2;                                                           13606000
      BR DLSRERROR;                   << NOT CCG >>                     13608000
      CMPI 212;                                                         13610000
      BE *+2;                                                           13612000
      BR DLSRERROR;                   << TOS NOT 212 AFTER DLSR >>      13614000
      CMPI 0;                                                           13616000
      BE *+2;                                                           13618000
      BR DLSRERROR;                   << (S-1) NOT 0 AFTER DLSR >>      13620000
                                                                        13622000
      DZRO,DZRO;                                                        13624000
      DECA,DECB;                                                        13626000
      SETR 0;   << SR=4 >>                                              13628000
      DLSR 32;                                                          13630000
      BE *+2;                                                           13632000
      BR DLSRERROR;                   << NOT CCE >>                     13634000
      DCMP;                                                             13636000
      BE EXIT);                                                         13638000
DLSRERROR:                                                              13640000
      NO'ERROR:=FALSE;                << (S-1,S) NOT 0,0 AFTER DLSR  >> 13642000
EXIT:                                                                   13644000
      PUSH(Q);SET(S);    << RESET STACK >>                              13646000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    13648000
   END;                                                                 13650000
                                                                        13652000
<<< CHECK DCSR INSTRUCTION >>                                           13654000
                                                                        13656000
SUBROUTINE DCSR'TEST;                                                   13658000
   BEGIN                                                                13660000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       13662000
      ASSEMBLE(                                                         13664000
      LDNI 1;                                                           13666000
      ZERO;                                                             13668000
      PSHR 0;   << SR=0 >>                                              13670000
      DCSR 14;                                                          13672000
      BG *+2;                                                           13674000
      BR DCSRERROR;                   << NOT CCG >>                     13676000
      CMPN 4;                                                           13678000
      BE *+2;                                                           13680000
      BR DCSRERROR;                   << TOS NOT %177774 AFTER DCSR >>  13682000
      CMPI 3;                                                           13684000
      BE *+2;                                                           13686000
      BR DCSRERROR;                   << (S-1) NOT 3 AFTER DCSR >>      13688000
                                                                        13690000
      ZERO;                                                             13692000
      LDI 1;                                                            13694000
      SETR 0;   << SR=4 >>                                              13696000
      DCSR 1;                                                           13698000
      BL *+2;                                                           13700000
      BR DCSRERROR;                   << NOT CCL >>                     13702000
      CMPI 0;                                                           13704000
      BE *+2;                                                           13706000
      BR DCSRERROR;                   << TOS NOT 0 AFTER DCSR >>        13708000
      CMPM NMAX;                                                        13710000
      BE *+2;                                                           13712000
      BR DCSRERROR;                   << (S-1) NOT %100000 AFTER DCSR >>13714000
                                                                        13716000
      LDI 4;                                                            13718000
      LDI 8;                                                            13720000
      LDXN 1;                                                           13722000
      DCSR 0,X;   << CNT=%177777MOD64=63 >>                             13724000
      LDI 8;                                                            13726000
      LDI 16;                                                           13728000
      DCMP;                                                             13730000
      BE EXIT;                                                          13732000
      BR DCSRERROR);                       << RESULT NOT 8,16 >>        13734000
DCSRERROR:                                                              13736000
      NO'ERROR:=FALSE;                                                  13738000
EXIT:                                                                   13740000
      PUSH(Q);SET(S);   << RESET STACK >>                               13742000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    13744000
   END;                                                                 13746000
                                                                        13748000
                                                                        13750000
      MOVE INSTRUCT'NAME:="DASL  ";                                     13752000
      PRINT'NAMES;                                                      13754000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DASL'TEST;            13756000
                                                                        13758000
      MOVE INSTRUCT'NAME:="DLSL  ";                                     13760000
      PRINT'NAMES;                                                      13762000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DLSL'TEST;            13764000
                                                                        13766000
      MOVE INSTRUCT'NAME:="DCSL  ";                                     13768000
      PRINT'NAMES;                                                      13770000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DCSL'TEST;            13772000
                                                                        13774000
      MOVE INSTRUCT'NAME:="DASR  ";                                     13776000
      PRINT'NAMES;                                                      13778000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DASR'TEST;            13780000
                                                                        13782000
      MOVE INSTRUCT'NAME:="DLSR  ";                                     13784000
      PRINT'NAMES;                                                      13786000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DLSR'TEST;            13788000
                                                                        13790000
      MOVE INSTRUCT'NAME:="DCSR  ";                                     13792000
      PRINT'NAMES;                                                      13794000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DCSR'TEST;            13796000
                                                                        13798000
END;   << GRPU >>                                                       13800000
                                                                        13802000
PROCEDURE GRPV;   << TEST GROUP V: TRIPLE WORD SHIFT INSTRUCTIONS >>    13804000
BEGIN                                                                   13806000
SUBROUTINE TASR'TEST;                                                   13808000
   BEGIN                                                                13810000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       13812000
      ASSEMBLE(                                                         13814000
                                                                        13816000
<<< CHECK TASR INSTRUCTION >>                                           13818000
                                                                        13820000
      LDI 48;                                                           13822000
      LDI 100;                                                          13824000
      LDI 240;                                                          13826000
      PSHR 0;   << SR=0 >>                                              13828000
      TASR 2;                                                           13830000
      BG *+2;                                                           13832000
      BR TASRERROR;                   << NOT CCG >>                     13834000
      CMPI 60;                                                          13836000
      BE *+2;                                                           13838000
      BR TASRERROR;                   << TOS NOT 60 AFTER TASR >>       13840000
      CMPI 25;                                                          13842000
      BE *+2;                                                           13844000
      BR TASRERROR;                   << (S-1) NOT 25 AFTER TASR >>     13846000
      CMPI 12;                                                          13848000
      BE *+2;                                                           13850000
      BR TASRERROR;                   << (S-2) NOT 12 AFTER TASR >>     13852000
                                                                        13854000
      LOAD NMAX;                                                        13856000
      DZRO;                                                             13858000
      SETR 0;   << SR=4 >>                                              13860000
      TASR 39;                                                          13862000
      BL *+2;                                                           13864000
      BR TASRERROR;                   << NOT CCL >>                     13866000
      CMPM M256;                                                        13868000
      BE *+2;                                                           13870000
      BR TASRERROR;                   << TOS NOT %177400 AFTER TASR >>  13872000
      LDNI 1;                                                           13874000
      DUP,DCMP;                                                         13876000
      BE *+2;                                                           13878000
      BR TASRERROR;                   << (S-2,S-1) NOT -1 AFTER TASR >> 13880000
                                                                        13882000
      LOAD PMAX;   << %077777,000333,000157 >>                          13884000
      LDI %333;                                                         13886000
      LDI %157;                                                         13888000
      TASR 47;                                                          13890000
      BE *+2;                                                           13892000
      BR TASRERROR;                   << NOT CCE >>                     13894000
                                                                        13896000
      LDI 16;                                                           13898000
      LDI 8;                                                            13900000
      LDI 4;                                                            13902000
      LDXI 1;                                                           13904000
      TASR 1,X;   << CNT=2 >>                                           13906000
      CMPI 1;                                                           13908000
      BE *+2;                                                           13910000
      BR TASRERROR;                   << TOS NOT 1 >>                   13912000
      LDI 4;                                                            13914000
      LDI 2;                                                            13916000
      DCMP;                                                             13918000
      BE *+2;                                                           13920000
      BR TASRERROR;                   << (S-2,S-1) NOT 4,2 AFTER TASR >>13922000
                                                                        13924000
      LDI 0;   << 0,5,0 >>                                              13926000
      LDI 5;                                                            13928000
      LDI 0;                                                            13930000
      TASR 0;   << CNT =0 >>                                            13932000
      BG *+2;                                                           13934000
      BR TASRERROR;                   << NOT CCG >>                     13936000
      CMPI 0;                                                           13938000
      BE *+2;                                                           13940000
      BR TASRERROR;                   << TOS NOT 0 AFTER TASR >>        13942000
      LDI 0;                                                            13944000
      LDI 5;                                                            13946000
      DCMP;                                                             13948000
      BE *+2;                                                           13950000
      BR TASRERROR;                   << (S-2,S-1) NOT 0,5 AFTER TASR >>13952000
                                                                        13954000
      DZRO;                                                             13956000
      LDI 63;                                                           13958000
      LDXN 64;                                                          13960000
      TASR 0,X;   << CNT=-64 >>                                         13962000
      CMPI 63;                                                          13964000
      BE *+2;                                                           13966000
      BR TASRERROR;                   << TOS NOT 63 >>                  13968000
                                                                        13970000
      DZRO;                                                             13972000
      LDI 4;                                                            13974000
      TASR 1;                                                           13976000
      BG *+2;                                                           13978000
      BR TASRERROR;                   << NOT CCG >>                     13980000
      TASR 2;                                                           13982000
      BE EXIT);                                                         13984000
TASRERROR:                                                              13986000
      NO'ERROR:=FALSE;                   << NOT CCE >>                  13988000
EXIT:                                                                   13990000
      PUSH(Q);SET(S);   << RESET STACK >>                               13992000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    13994000
   END;                                                                 13996000
                                                                        13998000
<<< CHECK TASL INSTRUCTION >>                                           14000000
                                                                        14002000
SUBROUTINE TASL'TEST;                                                   14004000
   BEGIN                                                                14006000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       14008000
      ASSEMBLE(                                                         14010000
      LOAD PMAX;   <<< 077777,177777,000001 >>                          14012000
      LDNI 1;                                                           14014000
      LDI 1;                                                            14016000
      PSHR 0;   << SR=0 >>                                              14018000
      TASL 46;                                                          14020000
      BG *+2;                                                           14022000
      BR TASLERROR;                   << NOT CCG >>                     14024000
      CMPI 0;                                                           14026000
      BE *+2;                                                           14028000
      BR TASLERROR;                   << TOS NOT 0 >>                   14030000
      CMPI 0;                                                           14032000
      BE *+2;                                                           14034000
      BR TASLERROR;                   << (S-1) NOT 0 >>                 14036000
      CMPM BIT1;                                                        14038000
      BE *+2;                                                           14040000
      BR TASLERROR;                   << (S-2) NOT %040000 >>           14042000
                                                                        14044000
      LDNI 1;   <<< 177777,177777,177777 >>                             14046000
      DUP,DUP;                                                          14048000
      SETR 0;   << SR=4 >>                                              14050000
      TASL 63;                                                          14052000
      BL *+2;                                                           14054000
      BR TASLERROR;                   << NOT CCL >>                     14056000
      DZRO,DCMP;                                                        14058000
      BE *+2;                                                           14060000
      BR TASLERROR;                   << (S-1,S) NOT 0,0 AFTER TASL >>  14062000
      CMPM NMAX;                                                        14064000
      BE *+2;                                                           14066000
      BR TASLERROR;                   << (S-2) NOT %100000 AFTER TASL >>14068000
                                                                        14070000
      LDI 3;   << %000003,177774,177771 >>                              14072000
      LDNI 4;                                                           14074000
      LDNI 7;                                                           14076000
      TASL 2;                                                           14078000
      BG *+2;                                                           14080000
      BR TASLERROR;                   << NOT CCG >>                     14082000
      CMPN 28;                                                          14084000
      BE *+2;                                                           14086000
      BR TASLERROR;                   << TOS NOT -28 AFTER TASL >>      14088000
      CMPN 13;                                                          14090000
      BE *+2;                                                           14092000
      BR TASLERROR;                   << (S-1) NOT -13 AFTER TASL >>    14094000
      CMPI 15;                                                          14096000
      BE *+2;                                                           14098000
      BR TASLERROR;                   << (S-2) NOT 15 AFTER TASL >>     14100000
                                                                        14102000
      LDI 3;                                                            14104000
      LDI 4;                                                            14106000
      LDI 5;                                                            14108000
      LDXN 1;                                                           14110000
      TASL 4,X;   << CNT=3 >>                                           14112000
      CMPI 40;                                                          14114000
      BE *+2;                                                           14116000
      BR TASLERROR;                   << TOS NOT 40 >>                  14118000
                                                                        14120000
      LDI 24;                                                           14122000
      LDI 32;                                                           14124000
      DCMP;                                                             14126000
      BE *+2;                                                           14128000
      BR TASLERROR;              << (S-2,S-1) NOT 24,32 AFTER TASL >>   14130000
                                                                        14132000
      LDI 5;                                                            14134000
      LDI 6;                                                            14136000
      LDI 7;                                                            14138000
      TASL 0;                                                           14140000
      CMPI 7;                                                           14142000
      BE *+2;                                                           14144000
      BR TASLERROR;                   << TOS NOT 7 AFTER TASL >>        14146000
                                                                        14148000
      LDI 2;                                                            14150000
      LDI 3;                                                            14152000
      LDI 4;                                                            14154000
      LDXN 65;                                                          14156000
      TASL 1,X;   << CNT=-64 >>                                         14158000
      CMPI 4;                                                           14160000
      BE *+2;                                                           14162000
      BR TASLERROR;                   << TOS NOT 4 AFTER TASL >>        14164000
                                                                        14166000
      DZRO;   << COVER TESTS >>                                         14168000
      LDI 1;                                                            14170000
      TASL 21;                                                          14172000
      CMPI 0;                                                           14174000
      BE *+2;                                                           14176000
      BR TASLERROR;                   << TOS NOT 0 >>                   14178000
      CMPI %40;                                                         14180000
      BE *+2;                                                           14182000
      BR TASLERROR;                   << (S-1) NOT %40 >>               14184000
      CMPI 0;                                                           14186000
      BE *+2;                                                           14188000
      BR TASLERROR;                   << (S-2) NOT 0 >>                 14190000
                                                                        14192000
      DZRO;                                                             14194000
      LDI 1;                                                            14196000
      TASL 42;                                                          14198000
      CMPI 0;                                                           14200000
      BE *+2;                                                           14202000
      BR TASLERROR;                   << TOS NOT 0 >>                   14204000
      CMPI 0;                                                           14206000
      BE *+2;                                                           14208000
      BR TASLERROR;                   << (S-1) NOT 0 >>                 14210000
      CMPM BIT5;                                                        14212000
      BE EXIT);                                                         14214000
TASLERROR:                                                              14216000
      NO'ERROR:=FALSE;                   << (S-2) NOT %2000 >>          14218000
EXIT:                                                                   14220000
      PUSH(Q);SET(S);   << RESET STACK >>                               14222000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    14224000
   END;                                                                 14226000
                                                                        14228000
<< CHECK TNSL & TNSL,X INSTRUCTION >>                                   14230000
                                                                        14232000
SUBROUTINE TNSL'TEST;                                                   14234000
   BEGIN                                                                14236000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       14238000
      ASSEMBLE(                                                         14240000
      DZRO,DZRO;  <<< 0 WITH CC NOT CCE >>                              14242000
      INCA,DEL;                                                         14244000
      PSHR 0;   << SR=0 >>                                              14246000
      TNSL 0;                                                           14248000
      BE *+2;                                                           14250000
      BR TNSLERROR;                   << NOT CCE >>                     14252000
      DZRO,DCMP;                                                        14254000
      BE *+2;                                                           14256000
      BR TNSLERROR;                   << (S-1,S) NOT 0,0 >>             14258000
      CMPI 0;                                                           14260000
      BE *+2;                                                           14262000
      BR TNSLERROR;                   << (S-2) NOT 0 >>                 14264000
      LDXA;                                                             14266000
      CMPI 42;                                                          14268000
      BE *+2;                                                           14270000
      BR TNSLERROR;                   << X NOT 42 >>                    14272000
                                                                        14274000
      DZRO,ZERO;                                                        14276000
      LDXI 17;                                                          14278000
      SETR 0;   << SR=4 >>                                              14280000
      TNSL 0,X;                                                         14282000
      LDXA;                                                             14284000
      CMPI 59;                                                          14286000
      BE *+2;                                                           14288000
      BR TNSLERROR;                   << X NOT 42 + 17 = 59 >>          14290000
                                                                        14292000
      LDXI 5;                                                           14294000
      DZRO;                                                             14296000
      LDI 1;                                                            14298000
      TNSL 0,X;                                                         14300000
      BG *+2;                                                           14302000
      BR TNSLERROR;                   << NOT CCG >>                     14304000
      DZRO,DCMP;                                                        14306000
      BE *+2;                                                           14308000
      BR TNSLERROR;                   << (S-1,S) NOT 0,0 >>             14310000
      CMPM BIT6;                                                        14312000
      BE *+2;                                                           14314000
      BR TNSLERROR;                   << (S-2) NOT %001000 >>           14316000
      LDXA;                                                             14318000
      CMPI 46;                                                          14320000
      BE *+2;                                                           14322000
      BR TNSLERROR;                   << X NOT 41 + 5 = 46 >>           14324000
                                                                        14326000
      LDXN 6;                                                           14328000
      LDNI 1;   <<< 3 WORDS ALL 1'S >>                                  14330000
      DUP,DUP;                                                          14332000
      TNSL 0,X;                                                         14334000
      BG *+2;                                                           14336000
      BR TNSLERROR;                   << NOT CCG >>                     14338000
      LDNI 1;                                                           14340000
      DUP,DCMP;                                                         14342000
      BE *+2;                                                           14344000
      BR TNSLERROR;                   << (S,S-1) NOT -1,-1 >>           14346000
      CMPM PAT1777;                                                     14348000
      BE *+2;                                                           14350000
      BR TNSLERROR;                   << (S-2) NOT %1777 >>             14352000
      LDXA;                                                             14354000
      CMPN 6;                                                           14356000
      BE *+2;                                                           14358000
      BR TNSLERROR;                   << X NOT -6 >>                    14360000
                                                                        14362000
      LOAD BIT6;                                                        14364000
      NOT;                                                              14366000
      LDNI 1;                                                           14368000
      DUP;                    << %175777,177777,177777 >>               14370000
      TNSL 0;                                                           14372000
      BG *+2;                                                           14374000
      BR TNSLERROR;                   << NOT CCG >>                     14376000
      CMPN 2;                                                           14378000
      BE *+2;                                                           14380000
      BR TNSLERROR;                   << TOS NOT %177776 >>             14382000
      CMPN 1;                                                           14384000
      BE *+2;                                                           14386000
      BR TNSLERROR;                   << (S-1) NOT -1 >>                14388000
      CMPM PAT1777;                                                     14390000
      BE *+2;                                                           14392000
      BR TNSLERROR;                   << (S-2) NOT %001777 >>           14394000
      LDXA;                                                             14396000
      CMPI 1;                                                           14398000
      BE *+2;                                                           14400000
      BR TNSLERROR;                   << X NOT 1 >>                     14402000
                                                                        14404000
      LDI 1;   <<< BIT 15 ONLY >>                                       14406000
      DZRO;                                                             14408000
      TNSL 0;                                                           14410000
      DDEL,DEL;                                                         14412000
      LDXA;                                                             14414000
      CMPI 9;                                                           14416000
      BE EXIT;                                                          14418000
      BR TNSLERROR);                       << X NOT 9 >>                14420000
                                                                        14422000
TNSLERROR:                                                              14424000
      NO'ERROR:=FALSE;                                                  14426000
EXIT:                                                                   14428000
      PUSH(Q);SET(S);  << RESET STACK >>                                14430000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    14432000
   END;                                                                 14434000
                                                                        14436000
                                                                        14438000
      MOVE INSTRUCT'NAME:="TASR  ";                                     14440000
      PRINT'NAMES;                                                      14442000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO TASR'TEST;            14444000
                                                                        14446000
      MOVE INSTRUCT'NAME:="TASL  ";                                     14448000
      PRINT'NAMES;                                                      14450000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO TASL'TEST;            14452000
                                                                        14454000
      MOVE INSTRUCT'NAME:="TNSL  ";                                     14456000
      PRINT'NAMES;                                                      14458000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO TNSL'TEST;            14460000
                                                                        14462000
                                                                        14464000
                                                                        14466000
END;   << GRPV >>                                                       14468000
                                                                        14470000
                                                                        14472000
                                                                        14474000
                                                                        14476000
PROCEDURE DMULDDIVTST;                                                  14478000
<<THIS PROCEDURE TESTS THE DOUBLE WORD MULTIPY AND                      14480000
  THE DOUBLE WORD DIVIDE.>>                                             14482000
                                                                        14484000
      BEGIN                                                             14486000
      DOUBLE ONE,TWO,THREE,ANSWER,REMAINDER;                            14488000
      DEFINE DMUL=ASSEMBLE(CON%020570)#,                                14490000
             DDIV=ASSEMBLE(CON%020571)#;                                14492000
                                                                        14494000
                                                                        14496000
       MOVE INSTRUCT'NAME:="DMUL  ";                                    14498000
       PRINT'NAMES;                                                     14500000
       MOVE INSTRUCT'NAME:="DDIV  ";                                    14502000
       PRINT'NAMES;                                                     14504000
      PUSH(S);                                                          14506000
      SAVS:=TOS;<<SAVE S>>                                              14508000
                                                                        14510000
STAR:                                                                   14512000
                                                                        14514000
      PUSH(STATUS);<<GET STATUS>>                                       14516000
      TOS.(2:1):=0;<<TURN OFF TRAPS>>                                   14518000
      SET(STATUS);                                                      14520000
                                                                        14522000
S1:                                                                     14524000
      ONE:=100D;                                                        14526000
      TWO:=2D;                                                          14528000
                                                                        14530000
      TOS:=ONE;                                                         14532000
      TOS:=TWO;<<PUT VALUES ON TOS>>                                    14534000
      ASSEMBLE(SETR 0);<<SR=4>>                                         14536000
      DMUL;<<DOUBLE MULTIPLY>>                                          14538000
      ANSWER:=TOS;<<STORE ANSWER>>                                      14540000
      IF <= THEN ASSEMBLE( BR DMULERROR);<<NOT CCG>>                    14542000
     IF OVERFLOW THEN ASSEMBLE( BR DMULERROR);<<OVERFLOW SET>>          14544000
     IF ANSWER <> 200D THEN ASSEMBLE( BR DMULERROR);<<MULTPLY FAILED>>  14546000
                                                                        14548000
S3:                                                                     14550000
     TOS:=ANSWER;                                                       14552000
     TOS:=TWO;                                                          14554000
     ASSEMBLE(SETR 0);<<SR=4>>                                          14556000
                       <<STACK= 0                                       14558000
                                200                                     14560000
                                0                                       14562000
                                2  >>                                   14564000
                                                                        14566000
      DDIV;<<DIVIDE 200/2>>                                             14568000
      REMAINDER :=TOS;<<STORE REMAINDER>>                               14570000
      ANSWER:=TOS;<<STORE ANSWER>>                                      14572000
      IF <= THEN ASSEMBLE( BR DMULERROR);<<NOT CCG>>                    14574000
      IF OVERFLOW THEN ASSEMBLE( BR DMULERROR);<<OVERFLOW SET>>         14576000
      IF ANSWER <> 100D THEN ASSEMBLE( BR DMULERROR);<<DIVIDE FAILED>>  14578000
      IF REMAINDER <> 0D THEN ASSEMBLE(BR DMULERROR);<<REMAINDER NOT 0>>14580000
                                                                        14582000
S1A:                                                                    14584000
      ONE:=100D;                                                        14586000
      TWO:=2D;                                                          14588000
                                                                        14590000
      TOS:=ONE;                                                         14592000
      TOS:=TWO;<<PUT VALUES ON TOS>>                                    14594000
      ASSEMBLE(PSHR 0);<<SR=4>>                                         14596000
      DMUL;<<DOUBLE MULTIPLY>>                                          14598000
      ANSWER:=TOS;<<STORE ANSWER>>                                      14600000
      IF <= THEN ASSEMBLE( BR DMULERROR);<<NOT CCG>>                    14602000
      IF OVERFLOW THEN ASSEMBLE( BR DMULERROR);<<OVERFLOW SET>>         14604000
      IF ANSWER <> 200D THEN ASSEMBLE( BR DMULERROR);<<MULTPLY FAILED>> 14606000
                                                                        14608000
S3A:                                                                    14610000
      TOS:=ANSWER;                                                      14612000
      TOS:=TWO;                                                         14614000
      ASSEMBLE(PSHR 0);<<SR=4>>                                         14616000
                        <<STACK= 0                                      14618000
                                 200                                    14620000
                                 0                                      14622000
                                 2  >>                                  14624000
                                                                        14626000
      DDIV;<<DIVID 200/2>>                                              14628000
      REMAINDER :=TOS;<<STORE REMAINDER>>                               14630000
      ANSWER:=TOS;<<STORE ANSWER>>                                      14632000
      IF <= THEN ASSEMBLE( BR DMULERROR);<<NOT CCG>>                    14634000
      IF OVERFLOW THEN ASSEMBLE( BR DMULERROR);<<OVERFLOW SET>>         14636000
      IF ANSWER <> 100D THEN ASSEMBLE( BR DMULERROR);<<DIVIDE FAILED>>  14638000
      IF REMAINDER <> 0D THEN ASSEMBLE(BR DMULERROR);<<REMAINDER NOT 0>>14640000
                                                                        14642000
S5:                                                                     14644000
      ONE:=0D;                                                          14646000
      TWO:=1D;                                                          14648000
      TOS:=ONE;                                                         14650000
      TOS:=TWO;                                                         14652000
      DMUL;<<PRODUCT SHOULD HAVE ALL ZEROS-THEREFORE                    14654000
             OVERFLOW SHOULD NOT BE SET>>                               14656000
      IF OVERFLOW THEN ASSEMBLE(BR DMULERROR);<<OVERFLOW SET>>          14658000
                                                                        14660000
                                                                        14662000
                                                                        14664000
                                                                        14666000
S6:                                                                     14668000
      PUSH(STATUS);                                                     14670000
      TOS.(4:1):=0;<<CLEAR OVERFLOW>>                                   14672000
       SET(STATUS);                                                     14674000
                                                                        14676000
      ONE:= -2147483648D;<<MAX NEGATIVE DOUBLE INTEGER>>                14678000
      TWO:= -1D;                                                        14680000
                                                                        14682000
      TOS:=ONE;                                                         14684000
      TOS:=TWO;                                                         14686000
      ASSEMBLE(SETR 0);<<SR=4>>                                         14688000
      DDIV;<<DIVIDE THE MAXIMUM NEGATIVE NUMBER BY -1>>                 14690000
      IF NOVERFLOW THEN ASSEMBLE(BR DMULERROR);<<OVRFLW SHOULD BE SET>> 14692000
                                                                        14694000
                                                                        14696000
                                                                        14698000
      TWO:=1D;                                                          14700000
                                                                        14702000
      TOS:=ONE;                                                         14704000
      TOS:=TWO;                                                         14706000
      ASSEMBLE(SETR 0);                                                 14708000
      DDIV;<<DIVIDE THE MAXIMUM NEGATIVE NUMBER BY ONE>>                14710000
      IF OVERFLOW THEN ASSEMBLE( BR DMULERROR);<<OVERFLOW SET>>         14712000
      ASSEMBLE(DDEL);<<POP REMAINDER>>                                  14714000
      IF TOS <> -2147483648D THEN ASSEMBLE( BR DMULERROR);              14716000
                                          <<DIVIDE BY 1 FAILED>>        14718000
                                                                        14720000
                                                                        14722000
                                                                        14724000
                                                                        14726000
                                                                        14728000
                                                                        14730000
       TOS:=SAVS;SET(S); <<RESET STACK>>                                14732000
       IF(LOOPCTN:=LOOPCTN+1)= LOOPNUMBER THEN GO OUT                   14734000
       ELSE GO STAR;                                                    14736000
                                                                        14738000
DMULERROR:                                                              14740000
       NO'ERROR:=FALSE;                                                 14742000
                                                                        14744000
OUT:   LOOPCTN:=0;X:=STEPNO;                                            14746000
       STEPNO:=STEPNO+1;                                                14748000
                                                                        14750000
END;<<DMULDDIVTST>>                                                     14752000
                                                                        14754000
                                                                        14756000
PROCEDURE QASLQASRTST;<<TEST QASL AND QASR INST >>                      14758000
BEGIN                                                                   14760000
                                                                        14762000
       MOVE INSTRUCT'NAME:="QASL  ";                                    14764000
       PRINT'NAMES;                                                     14766000
       MOVE INSTRUCT'NAME:="QASR  ";                                    14768000
       PRINT'NAMES;                                                     14770000
STAR:                                                                   14772000
      X:=0;<<CLEAR X>>                                                  14774000
<<TEST 1>>                                                              14776000
      TOS:=%100000;                                                     14778000
      TOS:=0D;                                                          14780000
      TOS:=0;                                                           14782000
                                                                        14784000
      ASSEMBLE( QASR 15);<<SHIFT 15 RIGHT>>                             14786000
      IF S0 <> 0 THEN ASSEMBLE ( BR QASLERROR);<<S-0 NOT 0 >>           14788000
      IF S1 <> 0 THEN ASSEMBLE ( BR QASLERROR);<<S-1 NOT 0 >>           14790000
      IF S2 <> 0 THEN ASSEMBLE ( BR QASLERROR);<<S-2 NOT 0 >>           14792000
      IF S3 <> -1 THEN ASSEMBLE ( BR QASLERROR);<<S-3 NOT -1 >>         14794000
                                                                        14796000
<<TEST 2>>                                                              14798000
      X:=15;                                                            14800000
      ASSEMBLE( QASL 0);<<SHIFT 15 WITH COUNT IN X>>                    14802000
      IF S0 <> 0 THEN ASSEMBLE ( BR QASLERROR);<<S-0 NOT 0 >>           14804000
      IF S1 <> 0 THEN ASSEMBLE ( BR QASLERROR);<<S-1 NOT 0 >>           14806000
      IF S2 <> 0 THEN ASSEMBLE ( BR QASLERROR);<<S-2 NOT 0 >>           14808000
      IF S3 <>%100000 THEN ASSEMBLE ( BR QASLERROR);<<S-3 NOT 0 >>      14810000
                                                                        14812000
<<TEST 3>>                                                              14814000
                                                                        14816000
      X:=60;                                                            14818000
      ASSEMBLE( QASR 3);<<SHIFT 63 PLACES RIGHT>>                       14820000
      IF S0 <>-1 THEN ASSEMBLE ( BR QASLERROR);<<S-0 NOT-1 >>           14822000
      IF S1 <>-1 THEN ASSEMBLE ( BR QASLERROR);<<S-1 NOT-1 >>           14824000
      IF S2 <>-1 THEN ASSEMBLE ( BR QASLERROR);<<S-2 NOT-1 >>           14826000
      IF S3 <> -1 THEN ASSEMBLE ( BR QASLERROR);<<S-3 NOT -1 >>         14828000
                                                                        14830000
<<TEST 4>>                                                              14832000
                                                                        14834000
      X:=0;                                                             14836000
      S3:=%077777;<<RESET SIGN BIT>>                                    14838000
                                                                        14840000
      ASSEMBLE( QASR 63);<<RIGHT 63>>                                   14842000
      IF S0 <> 0 THEN ASSEMBLE ( BR QASLERROR);<<S-0 NOT 0 >>           14844000
      IF S1 <> 0 THEN ASSEMBLE ( BR QASLERROR);<<S-1 NOT 0 >>           14846000
      IF S2 <> 0 THEN ASSEMBLE ( BR QASLERROR);<<S-2 NOT 0 >>           14848000
      IF S3 <> 0 THEN ASSEMBLE ( BR QASLERROR);<<S-3 NOT 0 >>           14850000
                                                                        14852000
<<TEST 5>>                                                              14854000
                                                                        14856000
      X:=0;                                                             14858000
      S0:=-1;                                                           14860000
      ASSEMBLE( QASL 48);<<48 LEFT>>                                    14862000
      IF S3 <> %077777 THEN ASSEMBLE( BR QASLERROR);<<S-3 NOT           14864000
                                                  %077777>>             14866000
                                                                        14868000
<<TEST 6>>                                                              14870000
                                                                        14872000
      X:=0;                                                             14874000
      S3:=%100000;                                                      14876000
      X:=-25;                                                           14878000
      ASSEMBLE( QASR 40);<<SHIFT NET 15 RIGHT>>                         14880000
      IF S0 <> 0 THEN ASSEMBLE ( BR QASLERROR);<<S-0 NOT 0 >>           14882000
      IF S1 <> 0 THEN ASSEMBLE ( BR QASLERROR);<<S-1 NOT 0 >>           14884000
      IF S2 <> 0 THEN ASSEMBLE ( BR QASLERROR);<<S-2 NOT 0 >>           14886000
      IF S3 <> -1 THEN ASSEMBLE ( BR QASLERROR);<<S-3 NOT -1 >>         14888000
                                                                        14890000
                                                                        14892000
                                                                        14894000
       PUSH(Q);SET(S); <<RESET STACK>>                                  14896000
       IF(LOOPCTN:=LOOPCTN+1)=LOOPNUMBER THEN GO OUT                    14898000
       ELSE GO STAR;                                                    14900000
                                                                        14902000
QASLERROR:                                                              14904000
       NO'ERROR:=FALSE;                                                 14906000
                                                                        14908000
OUT:   LOOPCTN:=0;X:=STEPNO;                                            14910000
       STEPNO:=STEPNO+1;                                                14912000
                                                                        14914000
                                                                        14916000
END; <<QASLQASRTST>>                                                    14918000
                                                                        14920000
                                                                        14922000
                                                                        14924000
$CONTROL SEGMENT=SEGMENT2'PART2                                         14926000
                                                                        14928000
PROCEDURE GRPJ;   << TEST GROUP J: FLOATING POINT INSTRUCTIONS >>       14930000
BEGIN                                                                   14932000
                                                                        14934000
<<< CHECK FNEG INSTRUCTION >>                                           14936000
SUBROUTINE FNEG'TEST;                                                   14938000
   BEGIN                                                                14940000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       14942000
      ASSEMBLE(                                                         14944000
      LDPP F0; <<< 0.0 >>                                               14946000
      FNEG;                                                             14948000
      BE *+2;                                                           14950000
      BR FNEGERROR;                   << NOT CCE >>                     14952000
      DZRO,DCMP;                                                        14954000
      BE *+2;                                                           14956000
      BR FNEGERROR;                   << RESULT NOT 0,0 >>              14958000
                                                                        14960000
      LDPP F1; <<< 1.0>>                                                14962000
      SETR 0;   << SR=4 >>                                              14964000
      FNEG;                                                             14966000
      BL *+2;                                                           14968000
      BR FNEGERROR;                   << NOT CCL >>                     14970000
      LDPP FN1;                                                         14972000
      DCMP;                                                             14974000
      BE *+2;                                                           14976000
      BR FNEGERROR;                   << RESULT NOT -1.0 >>             14978000
                                                                        14980000
      LDPP FN1; <<<  -1.0 >>                                            14982000
      PSHR 0;   << SR=0 >>                                              14984000
      FNEG;                                                             14986000
      BG *+2;                                                           14988000
      BR FNEGERROR;                   << NOT CCG >>                     14990000
      LDPP F1;                                                          14992000
      DCMP;                                                             14994000
      BE *+2;                                                           14996000
      BR FNEGERROR;                   << RESULT NOT 1.0 >>              14998000
                                                                        15000000
      LOAD BIT0;   << %100000,177777 >>                                 15002000
      LDNI 1;                                                           15004000
      NOP,FNEG;                                                         15006000
      BG *+2;                                                           15008000
      BR FNEGERROR;                   << NOT CCG >>                     15010000
      ZERO;                                                             15012000
      LDNI 1;                                                           15014000
      DCMP;                                                             15016000
      BE EXIT;                                                          15018000
      BR FNEGERROR;                                                     15020000
F0:   CON 0.0;                                                          15022000
F1:   CON 1.0;                                                          15024000
FN1:  CON -1.0);                                                        15026000
FNEGERROR:                                                              15028000
      NO'ERROR:=FALSE;                   << RESULT NOT 0,-1 >>          15030000
EXIT:                                                                   15032000
      PUSH(Q);SET(S);  << RESET STACK >>                                15034000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    15036000
   END;                                                                 15038000
                                                                        15040000
                                                                        15042000
<<< CHECK FCMP INSTRUCTION >>                                           15044000
                                                                        15046000
SUBROUTINE FCMP'TEST;                                                   15048000
   BEGIN                                                                15050000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       15052000
      ASSEMBLE(                                                         15054000
      LDNI 53;  <<< 0:-1 >>                                             15056000
      LDPP F0;                                                          15058000
      LDPP FN1;                                                         15060000
      FCMP;                                                             15062000
      BG *+2;                                                           15064000
      BR FCMPERROR;                   << NOT CCG >>                     15066000
      CMPN 53;                                                          15068000
      BE *+2;                                                           15070000
      BR FCMPERROR;                   << STACK TROUBLE >>               15072000
                                                                        15074000
      LDPP FN1;  << -1:3>>                                              15076000
      LDPP F3;                                                          15078000
      PSHR 0;   << SR=0 >>                                              15080000
      FCMP;                                                             15082000
      BL *+2;                                                           15084000
      BR FCMPERROR;                   << NOT CCL >>                     15086000
                                                                        15088000
      LDPP F4;   <<< 4:3 >>                                             15090000
      LDPP F3;                                                          15092000
      SETR 0;   << SR=4 >>                                              15094000
      FCMP;                                                             15096000
      BG *+2;                                                           15098000
      BR FCMPERROR;                   << NOT CCG >>                     15100000
                                                                        15102000
      LDPP F4;   <<< -4:-3 >>                                           15104000
      FNEG;                                                             15106000
      LDPP F3;                                                          15108000
      FNEG,FCMP;                                                        15110000
      BL *+2;                                                           15112000
      BR FCMPERROR;                   << NOT CCL >>                     15114000
                                                                        15116000
      LDI 21;    <<< 4:4 >>                                             15118000
      LDPP F4;                                                          15120000
      DDUP,FCMP;                                                        15122000
      BE *+2;                                                           15124000
      BR FCMPERROR;                   << NOT CCE >>                     15126000
      CMPI 21;                                                          15128000
      BE *+2;                                                           15130000
      BR FCMPERROR;                   << STACK TROUBLE >>               15132000
                                                                        15134000
      LDPP FM7;  <<< 2 NEARLY IDENTICAL VALUES >>                       15136000
      INCA;      <<< (S-3,S-2) SLIGHTLY SMALLER THAN (S-1,S) >>         15138000
      LDPP FM7;                                                         15140000
      FCMP;                                                             15142000
      BL *+2;                                                           15144000
      BR FCMPERROR;                   << NOT CCL >>                     15146000
                                                                        15148000
      LDPP FM7;  <<< 2 NEARLY IDENTICAL VALUES >>                       15150000
      DDUP,INCA; << (S-3,S-2) SLIGHLY LARGER THAN (S-1,S) >>            15152000
      FCMP;                                                             15154000
      BG EXIT;                                                          15156000
      BR FCMPERROR;                                                     15158000
F0:    CON 0.0;                                                         15160000
FN1:   CON -1.0;                                                        15162000
F3:    CON 3.0;                                                         15164000
F4:    CON 4.0;                                                         15166000
FM7:   CON -7.0);                                                       15168000
FCMPERROR:                                                              15170000
      NO'ERROR:=FALSE;                   << NOT CCG >>                  15172000
EXIT:                                                                   15174000
      PUSH(Q);SET(S);  << RESET STACK >>                                15176000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    15178000
   END;                                                                 15180000
                                                                        15182000
<<< CHECK FLT INSTRUCTION >>                                            15184000
                                                                        15186000
SUBROUTINE FLT'TEST;                                                    15188000
    BEGIN                                                               15190000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       15192000
      ASSEMBLE(                                                         15194000
      LDNI 15;  <<< 0 >>                                                15196000
      ZERO;                                                             15198000
      PSHR 0;   << SR=0 >>                                              15200000
      FLT;                                                              15202000
      BE *+2;                                                           15204000
      BR FLTERROR;                   << NOT CCE >>                      15206000
      DZRO,DCMP;                                                        15208000
      BE *+2;                                                           15210000
      BR FLTERROR;                   << RESULT NOT 0,0 >>               15212000
      CMPN 15;                                                          15214000
      BE *+2;                                                           15216000
      BR FLTERROR;                   << STACK TROUBLE >>                15218000
                                                                        15220000
      LDI 1;   <<< 1 >>                                                 15222000
      FLT;                                                              15224000
      SETR 0;   << SR=4 >>                                              15226000
      BG *+2;                                                           15228000
      BR FLTERROR;                   << NOT CCG >>                      15230000
      LDPP F1;                                                          15232000
      FCMP;                                                             15234000
      BE *+2;                                                           15236000
      BR FLTERROR;                   << RESULT NOT 1.0 = %040000,0 >>   15238000
                                                                        15240000
      PSHR 0;                                                           15242000
      LDI 9;                                                            15244000
      LDNI 7;   << -7 >>   << SR=2 >>                                   15246000
      FLT;                                                              15248000
      BL *+2;                                                           15250000
      BR FLTERROR;                   << NOT CCL >>                      15252000
      LDPP FM7;                                                         15254000
      DCMP;                                                             15256000
      BE EXIT;                                                          15258000
      BR FLTERROR;                                                      15260000
F1:   CON 1.0;                                                          15262000
FM7:  CON -7.0);                                                        15264000
FLTERROR:                                                               15266000
      NO'ERROR:=FALSE;                   << RESULT NOT -7.0 >>          15268000
 EXIT:                                                                  15270000
      PUSH(Q);SET(S);  << RESET STACK >>                                15272000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    15274000
   END;                                                                 15276000
                                                                        15278000
<<< CHECK DFLT INSTRUCTION >>                                           15280000
                                                                        15282000
SUBROUTINE DFLT'TEST;                                                   15284000
   BEGIN                                                                15286000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       15288000
      ASSEMBLE(                                                         15290000
      LDNI 33;   <<< 1D >>                                              15292000
      DZRO,INCA;                                                        15294000
      PSHR 0;   << SR=0 >>                                              15296000
      DFLT;                                                             15298000
      BG *+2;                                                           15300000
      BR DFLTERROR;                   << NOT CCG >>                     15302000
      LDPP F1;                                                          15304000
      DCMP;                                                             15306000
      BE *+2;                                                           15308000
      BR DFLTERROR;                   << RESULT NOT 1.0 >>              15310000
      CMPN 33;                                                          15312000
      BE *+2;                                                           15314000
      BR DFLTERROR;                   << STACK TROUBLE >>               15316000
                                                                        15318000
      LDNI 1;   <<< -1D >>                                              15320000
      DUP,DFLT;                                                         15322000
      BL *+2;                                                           15324000
      BR DFLTERROR;                   << NOT CCL >>                     15326000
      LDPP FN1;                                                         15328000
      FCMP;                                                             15330000
      BE *+2;                                                           15332000
      BR DFLTERROR;                   << RESULT NOT -1.0 >>             15334000
                                                                        15336000
      LDPP FDF1;  << %001007,177774 -- CHECK ROUNDING >>                15338000
      SETR 0;   << SR=4 >>                                              15340000
      DFLT;                                                             15342000
      LDPP PC43101;                                                     15344000
      DCMP;                                                             15346000
      BE NEXT);                                                         15348000
DFLTERROR:                                                              15350000
      NO'ERROR:=FALSE;                   << RESULT NOT %43101, 0 >>     15352000
                                                                        15354000
NEXT: ASSEMBLE(                                                         15356000
      BR NXT1;   << SKIP OVER CONSTANTS >>                              15358000
                                                                        15360000
F0:   CON 0.0;                                                          15362000
F1:   CON 1.0;                                                          15364000
F3:   CON 3.0;                                                          15366000
F4:   CON 4.0;                                                          15368000
FN1:  CON -1.0;                                                         15370000
FM7:  CON -7.0;                                                         15372000
PC43101:  CON %043101, 0;                                               15374000
FDF1:  CON %1007, %177774);                                             15376000
                                                                        15378000
NXT1:                                                                   15380000
      PUSH(Q);SET(S);  << RESET STACK >>                                15382000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    15384000
   END;                                                                 15386000
                                                                        15388000
<< CHECK FIXT INSTRUCTION -- CARRY REALLY CHECKED BY DTST INSTRUCTION >>15390000
                                                                        15392000
SUBROUTINE FIXT'TEST;                                                   15394000
   BEGIN                                                                15396000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       15398000
      ASSEMBLE(                                                         15400000
      LDNI 1;                                                           15402000
      DZRO,FIXT;  << 0.0 >>                                             15404000
      BE *+2;                                                           15406000
      BR FIXTERROR;                   << NOT CCE >>                     15408000
      BNCY *+2;                                                         15410000
      BR FIXTERROR;                   << C NOT 0 >>                     15412000
      DZRO,DCMP;                                                        15414000
      BE *+2;                                                           15416000
      BR FIXTERROR;                   << RESULT NOT 0,0 >>              15418000
      CMPN 1;                                                           15420000
      BE *+2;                                                           15422000
      BR FIXTERROR;                   << STACK TROUBLE >>               15424000
                                                                        15426000
      LDPP F0P25;   << 0.25 >>                                          15428000
      PSHR 0;   << SR=0 >>                                              15430000
      FIXT;                                                             15432000
      BE *+2;                                                           15434000
      BR FIXTERROR;                   << NOT CCE >>                     15436000
      DZRO,DCMP;                                                        15438000
      BE *+2;                                                           15440000
      BR FIXTERROR;                   << RESULT NOT 0,0 >>              15442000
                                                                        15444000
      LDPP F7P98;   << 7.98 >>                                          15446000
      SETR 0;   << SR=4 >>                                              15448000
      FIXT;                                                             15450000
      BG *+2;                                                           15452000
      BR FIXTERROR;                   << NOT CCG >>                     15454000
      ZERO;                                                             15456000
      LDI 7;                                                            15458000
      DCMP;                                                             15460000
      BE *+2;                                                           15462000
      BR FIXTERROR;                   << RESULT NOT 0,7 >>              15464000
                                                                        15466000
      LDPP FM12P73;   << -12.73 >>                                      15468000
      FIXT;                                                             15470000
      BL *+2;                                                           15472000
      BR FIXTERROR;                   << NOT CCL >>                     15474000
      LDNI 1;                                                           15476000
      LDNI 12;                                                          15478000
      DCMP;                                                             15480000
      BE *+2;                                                           15482000
      BR FIXTERROR;                   << RESULT NOT -1,-12 >>           15484000
                                                                        15486000
      LDPP PC42000;  << 1.0*2**16 >>                                    15488000
      FIXT;                                                             15490000
      BG *+2;                                                           15492000
      BR FIXTERROR;                   << NOT CCG >>                     15494000
      BCY *+2;                                                          15496000
      BR FIXTERROR;                   << C NOT 1 >>                     15498000
      LDI 1;                                                            15500000
      ZERO,DCMP;                                                        15502000
      BE *+2;                                                           15504000
      BR FIXTERROR;                   << RESULT NOT 1,0 >>              15506000
                                                                        15508000
      LDPP PC142000;  << -1.0*2**16 >>                                  15510000
      FIXT;                                                             15512000
      BL *+2;                                                           15514000
      BR FIXTERROR;                   << NOT CCL >>                     15516000
      BCY *+2;                                                          15518000
      BR FIXTERROR;                   << C NOT 1 >>                     15520000
      LDNI 1;                                                           15522000
      ZERO,DCMP;                                                        15524000
      BE *+2;                                                           15526000
      BR FIXTERROR;                   << RESULT NOT -1,0 >>             15528000
                                                                        15530000
      LDPP PC1B22F;  << (1+FRACTION)*2*22 >>                            15532000
      FIXT;                                                             15534000
      BG *+2;                                                           15536000
      BR FIXTERROR;                   << NOT CCG >>                     15538000
      BCY *+2;                                                          15540000
      BR FIXTERROR;                   << C NOT 1 >>                     15542000
      LDI %101;                                                         15544000
      LDNI 7;                                                           15546000
      DCMP;                                                             15548000
      BE *+2;                                                           15550000
      BR FIXTERROR;                   << RESULT NOT %101,177771 >>      15552000
                                                                        15554000
      LDPP PC43600;   << 1.0*2**30 >>                                   15556000
      FIXT;                                                             15558000
      LOAD BIT1;                                                        15560000
      ZERO,DCMP;                                                        15562000
      BE *+2;                                                           15564000
      BR FIXTERROR;                   << RESULT NOT %010000,0 >>        15566000
                                                                        15568000
      LDPP PC143700;  << -1.0*2**31 >>                                  15570000
      PCN;                                                     <<03727>>15572000
      CMPI 4;                                                  <<03727>>15574000
      BE SERIES64;                                             <<03727>>15576000
      FIXT;                                                             15578000
      BOV DEPART;                                              <<03727>>15580000
      BR FIXTERROR;                   << O NOT 1 >>                     15582000
      BNCY DEPART;                                             <<03727>>15584000
      BR FIXTERROR;                                                     15586000
DEPART:                                                        <<03727>>15588000
      BR EXIT;                                                 <<03727>>15590000
SERIES64:                                                      <<03727>>15592000
      FIXT;                                                    <<03727>>15594000
      BOV FIXTERROR;                                           <<03727>>15596000
      BNCY EXIT;                                               <<03727>>15598000
      BR FIXTERROR;                                            <<03727>>15600000
F0P25: CON 0.25;                                                        15602000
F7P98: CON 7.98;                                                        15604000
FM12P73: CON -12.73;                                                    15606000
PC42000: CON %042000, 0;                                                15608000
PC142000: CON %142000, 0;                                               15610000
PC1B22F: CON %042601, -7;                                               15612000
PC43600: CON %043600, 0;                                                15614000
PC143700: CON%143700, 0;                                                15616000
F0P49: CON 0.49;                                                        15618000
FM4P5: CON -4.5;                                                        15620000
F43P49: CON 43.49;                                                      15622000
APPROX2B16: CON %041777, %177700);                                      15624000
FIXTERROR:                                                              15626000
      NO'ERROR:=FALSE;                   << C NOT 0 >>                  15628000
EXIT:                                                                   15630000
      PUSH(Q);SET(S);    << RESET STACK >>                              15632000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    15634000
   END;                                                                 15636000
                                                                        15638000
<< CHECK FIXR INSTRUCTION - SIMILAR TO FIXT INSTRUCTION >>              15640000
                                                                        15642000
SUBROUTINE FIXR'TEST;                                                   15644000
   BEGIN                                                                15646000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       15648000
      ASSEMBLE(                                                         15650000
      LDPP F0P49;   << 0.49 >>                                          15652000
      PSHR 0;   << SR=0 >>                                              15654000
      FIXR;                                                             15656000
      BE *+2;                                                           15658000
      BR FIXRERROR;                   << NOT CCE >>                     15660000
      DZRO,DCMP;                                                        15662000
      BE *+2;                                                           15664000
      BR FIXRERROR;                   << RESULT NOT 0,0 >>              15666000
                                                                        15668000
      LDPP FM4P5;  <<-4.5>>                                             15670000
      SETR 0;   << SR=4 >>                                              15672000
      FIXR;                                                             15674000
      BL *+2;                                                           15676000
      BR FIXRERROR;                   << NOT CCL >>                     15678000
      LDNI 1;                                                           15680000
      LDNI 5;                                                           15682000
      DCMP;                                                             15684000
      BE *+2;                                                           15686000
      BR FIXRERROR;                   << RESULT NOT -1,-5 >>            15688000
                                                                        15690000
      LDPP F43P49;   << 43.49 >>                                        15692000
      FIXR;                                                             15694000
      BG *+2;                                                           15696000
      BR FIXRERROR;                   << NOT CCG >>                     15698000
      ZERO;                                                             15700000
      LDI 43;                                                           15702000
      DCMP;                                                             15704000
      BE *+2;                                                           15706000
      BR FIXRERROR;                   << RESULT NOT 0,43 >>             15708000
                                                                        15710000
      LDPP APPROX2B16;   << 1.0*2**16 - 0.5 >>                          15712000
      FIXR;                                                             15714000
      BG *+2;                                                           15716000
      BR FIXRERROR;                   << NOT CCG >>                     15718000
      DZRO,INCB;                                                        15720000
      DCMP;                                                             15722000
      BE NEXT3);                                                        15724000
FIXRERROR:                                                              15726000
      NO'ERROR:=FALSE;                   << RESULT NOT 1,0 >>           15728000
                                                                        15730000
NEXT3: ASSEMBLE(                                                        15732000
      BR NXT2;   << SKIP OVER CONSTANTS >>                              15734000
                                                                        15736000
F0P25: CON 0.25;                                                        15738000
F7P98: CON 7.98;                                                        15740000
FM12P73: CON -12.73;                                                    15742000
PC42000: CON %042000, 0;                                                15744000
PC142000: CON %142000, 0;                                               15746000
PC1B22F: CON %042601, -7;                                               15748000
PC43600: CON %043600, 0;                                                15750000
PC143700: CON%143700, 0;                                                15752000
F0P49: CON 0.49;                                                        15754000
FM4P5: CON -4.5;                                                        15756000
F43P49: CON 43.49;                                                      15758000
APPROX2B16: CON %041777, %177700);                                      15760000
                                                                        15762000
NXT2:                                                                   15764000
      PUSH(Q);SET(S);   << RESET STACK >>                               15766000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    15768000
   END;                                                                 15770000
                                                                        15772000
<< CHECK FADD INSTRUCTION >>                                            15774000
                                                                        15776000
SUBROUTINE FADD'TEST;                                                   15778000
   BEGIN                                                                15780000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       15782000
      ASSEMBLE(                                                         15784000
      LDNI 5;                                                           15786000
      LDPP FA18;   << 15.0 + 3.0 = 18.0 >>                              15788000
      LDPP FA3;                                                         15790000
      PSHR 0;   << SR=0 >>                                              15792000
      FADD;                                                             15794000
      BG *+2;                                                           15796000
      BR FADDERROR;                   << NOT CCG >>                     15798000
      BNOV *+2;                                                         15800000
      BR FADDERROR;                   << O NOT 0 >>                     15802000
      LDPP FA21;                                                        15804000
      DCMP;                                                             15806000
      BE *+2;                                                           15808000
      BR FADDERROR;                   << RESULT NOT 18.0 >>             15810000
      CMPN 5;                                                           15812000
      BE *+2;                                                           15814000
      BR FADDERROR;                   << STACK TROUBLE >>               15816000
                                                                        15818000
      LDPP FA2;   << 2.0 + 21.0 = 23.0 >>                               15820000
      LDPP FA21;                                                        15822000
      SETR 0;   << SR=4 >>                                              15824000
      FADD;                                                             15826000
      BG *+2;                                                           15828000
      BR FADDERROR;                   << NOT CCG >>                     15830000
      LDPP FA23;                                                        15832000
      DCMP;                                                             15834000
      BE *+2;                                                           15836000
      BR FADDERROR;                   << RESULT NOT 23.0 >>             15838000
                                                                        15840000
      LDPP FA4P0001;   << 4.0001 + 4.0002  = 8.0003 >>                  15842000
      LDPP FA4P0002;                                                    15844000
      FADD;                                                             15846000
      BG *+2;                                                           15848000
      BR FADDERROR;                   << NOT CCG >>                     15850000
      LDPP FA8P0003;                                                    15852000
      DCMP;                                                             15854000
      BE *+2;                                                           15856000
      BR FADDERROR;                   << RESULT NOT 8.0003 >>           15858000
                                                                        15860000
      LDPP FA4P0002;   << 4.0002 + 4.0 = 8.0002 >>                      15862000
      LDPP FA4;                                                         15864000
      FADD;                                                             15866000
      BG *+2;                                                           15868000
      BR FADDERROR;                   << NOT CCG >>                     15870000
      LDPP FA8P0002;                                                    15872000
      DCMP;                                                             15874000
      BE *+2;                                                           15876000
      BR FADDERROR;                   << RESULT NOT 8.0002 >>           15878000
                                                                        15880000
      LDPP FA1;   << 1.0 + (-2.0) = -1.0 >>                             15882000
      LDPP FAM2;                                                        15884000
      FADD;                                                             15886000
      BL *+2;                                                           15888000
      BR FADDERROR;                   << NOT CCL >>                     15890000
      LDPP FAM1;                                                        15892000
      DCMP;                                                             15894000
      BE *+2;                                                           15896000
      BR FADDERROR;                   << RESULT NOT -1.0 >>             15898000
                                                                        15900000
      LDPP FAM1P0015;   << -1.0015 + (-1.0016) >>                       15902000
      LDPP FAM1P0016;                                                   15904000
      FADD;                                                             15906000
      BL *+2;                                                           15908000
      BR FADDERROR;                   << NOT CCL >>                     15910000
      LDPP FAM2P0031;                                                   15912000
      DCMP;                                                             15914000
      BE *+2;                                                           15916000
      BR FADDERROR;                   << RESULT NOT -2.0031 >>          15918000
                                                                        15920000
      LDPP FAM7;   << -7.0 + 0.0 = -7.0 >>                              15922000
      DZRO,FADD;                                                        15924000
      BL *+2;                                                           15926000
      BR FADDERROR;                   << NOT CCL >>                     15928000
      LDPP FAM7;                                                        15930000
      DCMP;                                                             15932000
      BE *+2;                                                           15934000
      BR FADDERROR;                   << RESULT NOT -7.0 >>             15936000
                                                                        15938000
      LDPP FA43P5;   << 43.5 + (-43.5) = 0.0 >>                         15940000
      LDPP FAM43P5;                                                     15942000
      FADD;                                                             15944000
      BE *+2;                                                           15946000
      BR FADDERROR;                   << NOT CCE >>                     15948000
      DZRO,DCMP;                                                        15950000
      BE *+2;                                                           15952000
      BR FADDERROR;                   << RESULT NOT 0.0 >>              15954000
                                                                        15956000
      LDPP FACON0;   << %040000,100001 + %040000,100001 = >>            15958000
      DDUP,FADD;           << %040100,100001 >>                         15960000
      BG *+2;                                                           15962000
      BR FADDERROR;                   << NOT CCG >>                     15964000
      LDPP FACON1;                                                      15966000
      DCMP;                                                             15968000
      BE *+2;                                                           15970000
      BR FADDERROR;                   << RESULT NOT %040100,100001 >>   15972000
                                                                        15974000
      LDPP FACON2;   << %143100,0 + %140077,177777 = >>                 15976000
      LDPP FACON3;        << %143100,0 >>                               15978000
      FADD;                                                             15980000
      BL *+2;                                                           15982000
      BR FADDERROR;                   << NOT CCL >>                     15984000
      LDPP FACON2;                                                      15986000
      DCMP;                                                             15988000
      BE *+2;                                                           15990000
      BR FADDERROR;                   << RESULT NOT %143100,0 >>        15992000
                                                                        15994000
      LDPP FACON5;   << %077700,0 + %077700,0 = 0.0  >>                 15996000
      DDUP,FADD;                                                        15998000
      BOV *+2;                                                          16000000
      BR FADDERROR;                   << O NOT 1 >>                     16002000
      BG *+2;                                                           16004000
      BR FADDERROR;                   << NOT CCG >>                     16006000
      DZRO,DCMP;                                                        16008000
      BE *+2;                                                           16010000
      BR FADDERROR;                   << RESULT NOT 0,0 >>              16012000
                                                                        16014000
      LDPP FACON7;   << %042677,177777 + %040077,177777 >>              16016000
      LDPP FACON8;        << = %042700,000000 >>                        16018000
      FADD;                                                             16020000
      BG *+2;                 << NOT CCG >>                             16022000
      BR FADDERROR;                                                     16024000
      LDPP FACON9;                                                      16026000
      DCMP;                                                             16028000
      BE *+2;                                                           16030000
      BR FADDERROR;                   << RESULT NOT %042700,000000 >>   16032000
                                                                        16034000
      LDPP AF1;   << %040077, 0 + %040000, -1 >>                        16036000
      LDPP AF2;                                                         16038000
      FADD;                                                             16040000
      LDPP FA3;                                                         16042000
      DCMP;                                                             16044000
      BE NEXT4);                                                        16046000
FADDERROR:                                                              16048000
      NO'ERROR:=FALSE;                   << RESULT NOT 3.0 >>           16050000
NEXT4: ASSEMBLE(                                                        16052000
                                                                        16054000
      BR NXT3;   <<< SKIP OVER CONSTANTS >>                             16056000
                                                                        16058000
FA3:      CON  3.0;                                                     16060000
FA4:      CON  4.0;                                                     16062000
FA18:     CON  18.0;                                                    16064000
FA21:     CON  21.0;                                                    16066000
FA23:     CON  23.0;                                                    16068000
FA4P0001: CON  4.0001;                                                  16070000
FA4P0002: CON  4.0002;                                                  16072000
FA4P0003: CON  4.0003;                                                  16074000
FA8P0002: CON  8.0002;                                                  16076000
FA8P0003: CON  %040300, %000236;                                        16078000
FA1:      CON  1.0;                                                     16080000
FAM2:     CON  -2.0;                                                    16082000
FAM1:     CON  -1.0;                                                    16084000
FAM1P0015: CON -1.0015;                                                 16086000
FAM1P0016: CON -1.0016;                                                 16088000
FAM2P0031: CON -2.0031;                                                 16090000
FAM7:     CON  -7.0;                                                    16092000
FA43P5:   CON  43.5;                                                    16094000
FAM43P5:  CON  -43.5;                                                   16096000
FACON0:   CON  %040000, %100001;                                        16098000
FACON1:   CON %040100, %100001;                                         16100000
FACON2:   CON  %143100, 0;                                              16102000
FACON3:   CON  %140077, -1;                                             16104000
FACON5:   CON  %077700, 0;                                              16106000
FACON7:   CON  %042677, -1;                                             16108000
FACON8:   CON  %040077, -1;                                             16110000
FACON9:   CON  %042700, 0;                                              16112000
FA5:      CON  5.0;                                                     16114000
FA2:      CON  2.0;                                                     16116000
FAM12P125: CON -12.125;                                                 16118000
FAM6P0625: CON -6.0625;                                                 16120000
AF1:  CON %40077, 0;                                                    16122000
AF2:  CON %40000, -1);                                                  16124000
                                                                        16126000
NXT3:                                                                   16128000
      PUSH(Q);SET(S);   << RESET STACK >>                               16130000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    16132000
   END;   << FADD'TEST >>                                               16134000
                                                                        16136000
<< CHECK FSUB INSTRUCTION - USES SAME ROM CODE AS FADD >>               16138000
                                                                        16140000
SUBROUTINE FSUB'TEST;                                                   16142000
    BEGIN                                                               16144000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       16146000
      ASSEMBLE(                                                         16148000
      LDPN FA5;   << 5.0 - 3.0 = 2.0 >>                                 16150000
      LDPN FA3;                                                         16152000
      PSHR 0;   << SR=0 >>                                              16154000
      FSUB;                                                             16156000
      BG *+2);                                                          16158000
      GO FSUBERROR;                   << NOT CCG >>                     16160000
      ASSEMBLE(                                                         16162000
      LDPN FA2;                                                         16164000
      DCMP;                                                             16166000
      BE *+2;                                                           16168000
      BR FSUBERROR;                   << RESULT NOT 2.0 >>              16170000
                                                                        16172000
      LDPN FA21;  << 21.0-23.0 >>                                       16174000
      LDPN FA23;                                                        16176000
      SETR 0;   <<SR=4>>                                                16178000
      FSUB;                                                             16180000
      LDPN FAM2;                                                        16182000
      DCMP;                                                             16184000
      BE *+2;                                                           16186000
      BR FSUBERROR;                   << RESULT NOT -2 >>               16188000
                                                                        16190000
      LDPN FAM12P125;   << -12.125 - (-6.0625) = -6.0625 >>             16192000
      LDPN FAM6P0625;                                                   16194000
      NOP,FSUB;                                                         16196000
      BL *+2;                                                           16198000
      BR FSUBERROR;                   << NOT CCL >>                     16200000
      LDPN FAM6P0625;                                                   16202000
      DCMP;                                                             16204000
      BE *+2;                                                           16206000
      BR FSUBERROR;                   << RESULT NOT -6.0625 >>          16208000
                                                                        16210000
      LDI %40;                                                          16212000
      ZERO;                                                             16214000
      LDI %20;                                                          16216000
      ZERO, FSUB;                                                       16218000
      BOV *+2;   << EXPECT UNDERFLOW >>                                 16220000
      BR FSUBERROR;                   << O NOT 1 >>                     16222000
      BG *+2;                                                           16224000
      BR FSUBERROR;                   << NOT CCG >>                     16226000
      LDPP AF3;                                                         16228000
      DCMP;                                                             16230000
      BE EXIT;                                                          16232000
      BR FSUBERROR);                                                    16234000
FSUBERROR:                                                              16236000
      NO'ERROR:=FALSE;                   << RESULT NOT %77600, 0 >>     16238000
EXIT:                                                                   16240000
      PUSH(Q);SET(S);   << RESET STACK >>                               16242000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    16244000
      RETURN;                                                           16246000
      ASSEMBLE(                                                         16248000
FA5:      CON 5.0;                                                      16250000
AF3:      CON %77600, 0;                                                16252000
FA3:      CON  3.0;                                                     16254000
FA4:      CON  4.0;                                                     16256000
FA18:     CON  18.0;                                                    16258000
FA21:     CON  21.0;                                                    16260000
FA23:     CON  23.0;                                                    16262000
FA4P0001: CON  4.0001;                                                  16264000
FA4P0002: CON  4.0002;                                                  16266000
FA4P0003: CON  4.0003;                                                  16268000
FA8P0002: CON  8.0002;                                                  16270000
FA8P0003: CON  %040300, %000236;                                        16272000
FA1:      CON  1.0;                                                     16274000
FAM2:     CON  -2.0;                                                    16276000
FAM1:     CON  -1.0;                                                    16278000
FAM1P0015: CON -1.0015;                                                 16280000
FAM1P0016: CON -1.0016;                                                 16282000
FAM2P0031: CON -2.0031;                                                 16284000
FAM7:     CON  -7.0;                                                    16286000
FA43P5:   CON  43.5;                                                    16288000
FAM43P5:  CON  -43.5;                                                   16290000
FACON0:   CON  %040000, %100001;                                        16292000
FACON1:   CON %040100, %100001;                                         16294000
FACON2:   CON  %143100, 0;                                              16296000
FACON3:   CON  %140077, -1;                                             16298000
FACON5:   CON  %077700, 0;                                              16300000
FACON7:   CON  %042677, -1;                                             16302000
FACON8:   CON  %040077, -1;                                             16304000
FACON9:   CON  %042700, 0;                                              16306000
FA2:      CON  2.0;                                                     16308000
FAM12P125: CON -12.125;                                                 16310000
FAM6P0625: CON -6.0625;                                                 16312000
AF1:  CON %40077, 0;                                                    16314000
AF2:  CON %40000, -1);                                                  16316000
   END;     << FSUB'TEST >>                                             16318000
                                                                        16320000
<< CHECK FMPY INSTRUCTION >>                                            16322000
                                                                        16324000
SUBROUTINE FMPY'TEST;                                                   16326000
   BEGIN                                                                16328000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       16330000
      ASSEMBLE(                                                         16332000
      LDPP FM5;   << 5.0 * 0.0 >>                                       16334000
      DZRO,FMPY;                                                        16336000
      BE *+2;                 << NOT CCE >>                             16338000
      BR FMPYERROR;                                                     16340000
      BNOV *+2;                                                         16342000
      BR FMPYERROR;                   << O NOT 0 >>                     16344000
      DZRO,DCMP;                                                        16346000
      BE *+2;                                                           16348000
      BR FMPYERROR;                   << RESULT NOT 0.0 >>              16350000
                                                                        16352000
      DZRO;                                                             16354000
      LDPP FMM7P995;   << 0.0 * -7.995 >>                               16356000
      PSHR 0;   << SR=0 >>                                              16358000
      FMPY;                                                             16360000
      BE *+2;                                                           16362000
      BR FMPYERROR;                   << NOT CCE >>                     16364000
      DZRO,DCMP;                                                        16366000
      BE *+2;                                                           16368000
      BR FMPYERROR;                   << RESULT NOT 0.0 >>              16370000
                                                                        16372000
      LDPP FM1;   << 1.0 * 1.0 >>                                       16374000
      DDUP,FMPY;                                                        16376000
      BG *+2;                                                           16378000
      BR FMPYERROR;                   << NOT CCG >>                     16380000
      LDPP FM1;                                                         16382000
      DCMP;                                                             16384000
      BE *+2;                                                           16386000
      BR FMPYERROR;                   << RESULT NOT 1.0 >>              16388000
                                                                        16390000
      LDPP FMM1;   << -1.0 * 1.0 >>                                     16392000
      LDPP FM1;                                                         16394000
      SETR 0;   << SR=4 >>                                              16396000
      FMPY;                                                             16398000
      BL *+2;                                                           16400000
      BR FMPYERROR;                   << NOT CCL >>                     16402000
      LDPP FMM1;                                                        16404000
      DCMP;                                                             16406000
      BE *+2;                                                           16408000
      BR FMPYERROR;                   << RESULT NOT -1.0 >>             16410000
                                                                        16412000
      LDPP K1;   << %40000,%2000 * %40077,%174000 >>                    16414000
      LDPP K2;                                                          16416000
      FMPY;                                                             16418000
      LDPP K3;                                                          16420000
      DCMP;                                                             16422000
      BE *+2;                                                           16424000
      BR FMPYERROR;                   << RESULT NOT %40100,0 >>         16426000
                                                                        16428000
      LDPP K4;   << %40040,0 * %40000,1 >>                              16430000
      LDPP K5;                                                          16432000
      FMPY;                                                             16434000
      LDPP K6;                                                          16436000
      DCMP;                                                             16438000
      BE *+2;                                                           16440000
      BR FMPYERROR;                   << RESULT NO %40040,2 >>          16442000
                                                                        16444000
      LDPP FM1B128;   << 1.0*2**128 * 1.0*2**128 >>                     16446000
      DDUP,FMPY;                                                        16448000
      BG *+2;                                                           16450000
      BR FMPYERROR;                   << NOT CCG >>                     16452000
      BOV *+2;                                                          16454000
      BR FMPYERROR;                   << O NOT 1 (OVERFLOW) >>          16456000
      DZRO,DCMP;                                                        16458000
      BE *+2;                                                           16460000
      BR FMPYERROR;                   << RESULT NOT 0.0 >>              16462000
                                                                        16464000
      LDPP FM1BM128; << 1.0*2**(-128) * 1.0*2**(-129) >>                16466000
      LDPP FM1BM129;                                                    16468000
      FMPY;                                                             16470000
      BG *+2;                                                           16472000
      BR FMPYERROR;                   << NOT CCG >>                     16474000
      BOV *+2;                                                          16476000
      BR FMPYERROR;                   << O NOT 1  (UNDERFLOW) >>        16478000
      LDPP FM1B255;                                                     16480000
      DCMP;                                                             16482000
      BE *+2;                                                           16484000
      BR FMPYERROR;                   << RESULT NOT %077700,0 >>        16486000
                                                                        16488000
      LDPP FM1BM128;   << 1.0*2**(-128) * 1.0*2**(-128) >>              16490000
      DDUP,FMPY;                                                        16492000
      BOV *+2;                                                          16494000
      BR FMPYERROR;                   << O NOT 1  (UNDERFLOW) >>        16496000
      BG *+2;                                                           16498000
      BR FMPYERROR;                   << NOT CCG >>                     16500000
      DZRO,DCMP;                                                        16502000
      BE *+2;                                                           16504000
      BR FMPYERROR;                   << RESULT NOT 0.0 >>              16506000
                                                                        16508000
      LDPP K11;  << -13.0 * -49.0 = +637.00 >>                          16510000
      LDPP K12;                                                         16512000
      FMPY;                                                             16514000
      LDPP K13;                                                         16516000
      DCMP;                                                             16518000
      BE *+2;                                                           16520000
      BR FMPYERROR;                   << RESULT NOT +637 >>             16522000
                                                                        16524000
      LDPP K14;   << 1+2**(-6)+2**(-7)+2**(-22)  * >>                   16526000
      DDUP, FMPY;   << 1+2**(-6)+2**(-7)+2**(-22) >>                    16528000
      LDPP K15;                                                         16530000
      DCMP;                                                             16532000
      BE *+2;                                                           16534000
      BR FMPYERROR;                   << RESULT NOT %040003, %004402 >> 16536000
                                                                        16538000
      LDPP K16;   << 1+2**(-8) * 1+2**(-15) >>                          16540000
      LDPP K17;                                                         16542000
      FMPY;                                                             16544000
      LDPP K18;                                                         16546000
      DCMP;                                                             16548000
      BE *+2;                                                           16550000
      BR FMPYERROR;                   << RESULT NOT %40000, %40201 >>   16552000
                                                                        16554000
      LDPP FM1;   << 1.0 * %40077, %177777 >>                           16556000
      LDPP K19;                                                         16558000
      FMPY;                                                             16560000
      LDPP K19;                                                         16562000
      DCMP;                                                             16564000
      BE *+2;                                                           16566000
      BR FMPYERROR;                   << RESULT NOT %040077, %177777 >> 16568000
                                                                        16570000
      LDPP K19;   << 0040077, %177777 * %040077, %177777 >>             16572000
      DDUP, FMPY;                                                       16574000
      LDPP K20;                                                         16576000
      DCMP;                                                             16578000
      BE *+2;                                                           16580000
      BR FMPYERROR;                   << RESULT NOT %040177, %177776 >> 16582000
                                                                        16584000
      LDPP K21;   << %040025, %052525 * 1.0 >>                          16586000
      LDPP FM1;                                                         16588000
      FMPY;                                                             16590000
      LDPP K21;                                                         16592000
      DCMP;                                                             16594000
      BE *+2;                                                           16596000
      BR FMPYERROR;                   << RESULT NOT %040025, %052525 >> 16598000
                                                                        16600000
      LDPP K21;   << %040025, %052525 * %040025, %052525 >>             16602000
      DDUP, FMPY;                                                       16604000
      LDPP K22;                                                         16606000
      DCMP;                                                             16608000
      BE *+2;                                                           16610000
      BR FMPYERROR;                   << RESULT NOT %040061, %143434 >> 16612000
                                                                        16614000
      LDPP K23;   << %040052, %125252 * %040052, %125252 >>             16616000
      DDUP, FMPY;                                                       16618000
      LDPP K24;                                                         16620000
      DCMP;                                                             16622000
      BE *+2;                                                           16624000
      BR FMPYERROR;                   << RESULT NOT %040130, %161615 >> 16626000
                                                                        16628000
      LDPP FM1BM128;   << 1*2(-128) * -1*2(-128) >>                     16630000
      LDPP NFM1BM128;                                                   16632000
      FMPY;                                                             16634000
      BOV *+2;   << EXPECT UNDERFLOW >>                                 16636000
      BR FMPYERROR;                   << O NOT 1 >>                     16638000
      BL *+2;                                                           16640000
      BR FMPYERROR;                   << NOT CCL >>                     16642000
      LOAD NMAX;                                                        16644000
      ZERO, DCMP;                                                       16646000
      BE NEXT5);                                                        16648000
FMPYERROR:                                                              16650000
      NO'ERROR:=FALSE;                   << RESULT NOT %100000, 0 >>    16652000
                                                                        16654000
NEXT5: ASSEMBLE(                                                        16656000
      BR NXT10;   << SKIP OVER CONSTANTS >>                             16658000
                                                                        16660000
AF3:  CON %77600, 0;                                                    16662000
K1:   CON %40000, %2000;                                                16664000
K2:   CON %40077, %174000;                                              16666000
K3:   CON %40100,0;                                                     16668000
K4:   CON %40040, 0;                                                    16670000
K5:   CON %40000,1;                                                     16672000
K6:   CON %40040,2;                                                     16674000
FM5:      CON  5.0;                                                     16676000
FMM7P995: CON  -7.995;                                                  16678000
FM1:      CON  1.0;                                                     16680000
FMM1:     CON  -1.0;                                                    16682000
FM1B128:  CON  %060000, 0;                                              16684000
FM1BM128: CON  %020000, 0;                                              16686000
FM1BM129: CON  %017700, 0;                                              16688000
FM1B255:  CON  %077700, 0;                                              16690000
K11:  CON -13.0;                                                        16692000
K12:  CON -49.0;                                                        16694000
K13:  CON 637.0;                                                        16696000
K14:  CON %40001, %100001;                                              16698000
K15:  CON %40003, %4402;                                                16700000
K16:  CON %40000, %40000;                                               16702000
K17:  CON %40000, %200;                                                 16704000
K18:  CON %40000, %40201;                                               16706000
K19:  CON %40077, -1;                                                   16708000
K20:  CON %40177, -2;                                                   16710000
K21:  CON %40025, %52525;                                               16712000
K22:  CON %40061, %143434;                                              16714000
K23:  CON %40052, %125252;                                              16716000
K24:  CON %40130, %161615;                                              16718000
NFM1BM128: CON %120000, 0);                                             16720000
                                                                        16722000
NXT10:                                                                  16724000
      PUSH(Q);SET(S);   << RESET STACK >>                               16726000
      TOS:=RE'ADDRS;    << RESTORE RETURN ADDRESS >>                    16728000
   END;                                                                 16730000
                                                                        16732000
<< CHECK FDIV INSTRUCTION >>                                            16734000
                                                                        16736000
SUBROUTINE FDIV'TEST;                                                   16738000
   BEGIN                                                                16740000
      RE'ADDRS:=TOS;    << SAVE RETURN ADDRESS >>                       16742000
      ASSEMBLE(                                                         16744000
      LDNI 35;                                                          16746000
      DZRO;      << 0.0/1.0 >>                                          16748000
      LDPN FM1;                                                         16750000
      FDIV;                                                             16752000
      BE *+2;                                                           16754000
      BR FDIVERROR;                   << NOT CCE >>                     16756000
      BNOV *+2;                                                         16758000
      BR FDIVERROR;                   << O NOT 0 >>                     16760000
      DZRO,DCMP;                                                        16762000
      BE *+2;                                                           16764000
      BR FDIVERROR;                   << RESULT NOT 0.0 >>              16766000
      CMPN 35;                                                          16768000
      BE *+2;                                                           16770000
      BR FDIVERROR;                   << STACK TROUBLE >>               16772000
                                                                        16774000
      LDPN FM5    << 5.0/1.0 >>                                         16776000
      LDPN FM1;                                                         16778000
      PSHR 0;   << SR=0 >>                                              16780000
      FDIV;                                                             16782000
      BG *+2;                                                           16784000
      BR FDIVERROR;                   << NOT CCG >>                     16786000
      BNOV *+2;                                                         16788000
      BR FDIVERROR;                   << O NOT 0 >>                     16790000
      LDPN FM5;                                                         16792000
      DCMP;                                                             16794000
      BE *+2;                                                           16796000
      BR FDIVERROR;                   << RESULT NOT 5.0 >>              16798000
                                                                        16800000
      LDPP FD1;   << 1.0/-(2.0) >>                                      16802000
      LDPP FDM2;                                                        16804000
      SETR 0;   << SR=4 >>                                              16806000
      FDIV;                                                             16808000
      BL *+2;                                                           16810000
      BR FDIVERROR;                   << NOT CCL >>                     16812000
      LDPP FDM0P5;                                                      16814000
      DCMP;                                                             16816000
      BE *+2;                                                           16818000
      BR FDIVERROR;                   << RESULT NOT -0.5 >>             16820000
                                                                        16822000
      LDPP FDM2;   << -2.0/6.0 >>                                       16824000
      LDPP FD6;                                                         16826000
      FDIV;                                                             16828000
      BL *+2;                                                           16830000
      BR FDIVERROR;                   << NOT CCL >>                     16832000
      LDPP FDMP33;                                                      16834000
      DCMP;                                                             16836000
      BE *+2;                                                           16838000
      BR FDIVERROR;                   << RESULT NOT -1/3 >>             16840000
                                                                        16842000
      LDPP FD6;   << 6.0/12.0 >>                                        16844000
      LDPP FD12;                                                        16846000
      FDIV;                                                             16848000
      BG *+2;                                                           16850000
      BR FDIVERROR;                   << NOT CCG >>                     16852000
      LDPP FD0P5;                                                       16854000
      DCMP;                                                             16856000
      BE *+2;                                                           16858000
      BR FDIVERROR;                   << RESULT NOT 0.5 >>              16860000
                                                                        16862000
      LDPP FD12;   << 12.0/-8.0 >>                                      16864000
      LDPP FDM8;                                                        16866000
      FDIV;                                                             16868000
      BL *+2;                                                           16870000
      BR FDIVERROR;                   << NOT CCL >>                     16872000
      LDPP FDM1P5;                                                      16874000
      DCMP;                                                             16876000
      BE *+2;                                                           16878000
      BR FDIVERROR;                   << RESULT NOT -1.5 >>             16880000
                                                                        16882000
      LDPP FDM8;   << -8.0/-3904 >>                                     16884000
      LDPP FDM3904;                                                     16886000
      FDIV;                                                             16888000
      BG *+2;                                                           16890000
      BR FDIVERROR;                   << NOT CCG >>                     16892000
      LDPP FDK1;                                                        16894000
      DCMP;                                                             16896000
      BE *+2;                                                           16898000
      BR FDIVERROR;                   << RESULT NOT .00204918 >>        16900000
                                                                        16902000
      LDPP FD1;   << 1.0/0.0 >>                                         16904000
      DZRO,FDIV;                                                        16906000
      BG *+2;                                                           16908000
      BR FDIVERROR;                   << NOT CCG >>                     16910000
      BOV *+2;                                                          16912000
      BR FDIVERROR;                   << O NOT 1 >>                     16914000
      LDPP FD1;                                                         16916000
      DCMP;                                                             16918000
      BE *+2;                                                           16920000
      BR FDIVERROR;                   << RESULT NOT 1.0 >>              16922000
                                                                        16924000
      DZRO,DECA;                                                        16926000
      DZRO,FDIV;                                                        16928000
      BG *+2;                                                           16930000
      BR FDIVERROR;                   << NOT CCG >>                     16932000
      DZRO,DECA;                                                        16934000
      DCMP;                                                             16936000
      BE *+2;                                                           16938000
      BR FDIVERROR;                   << RESULT NOT 0,-1 >>             16940000
                                                                        16942000
      BR NXT11;   << SKIP OVER CONSTANTS >>                             16944000
                                                                        16946000
FM1:      CON 1.0;                                                      16948000
FM5:      CON 5.0;                                                      16950000
FD1:      CON 1.0;                                                      16952000
FDM2:     CON -2.0;                                                     16954000
FDM0P5:   CON -0.5;                                                     16956000
FD6:      CON 6.0;                                                      16958000
FDMP33:   CON %137625, %052525;                                         16960000
FD12:     CON 12.0;                                                     16962000
FD0P5:    CON 0.5;                                                      16964000
FDM8:     CON -8.0;                                                     16966000
FDM1P5:   CON -1.5;                                                     16968000
FDM3904:  CON -3904.0;                                                  16970000
FDK1:     CON %36703, %022705;                                          16972000
                                                                        16974000
NXT11:                                                                  16976000
                                                                        16978000
      LDPN FD1;   << 1.0/(1+2**(-22)) >>                                16980000
      LDPP PN22;                                                        16982000
      FDIV;                                                             16984000
      BG *+2;                                                           16986000
      BR FDIVERROR;                   << NOT CCG >>                     16988000
      LDPP NN22;                                                        16990000
      DCMP;                                                             16992000
      BE *+2;                                                           16994000
      BR FDIVERROR;                   << RESULT NOT 1-2**(-22) >>       16996000
                                                                        16998000
      LDPN FD1;   << 1.0/(1-2**(-23)) >>                                17000000
      LDPP NN23;                                                        17002000
      FDIV;                                                             17004000
      BG *+2;                                                           17006000
      BR FDIVERROR;                   << NOT CCG >>                     17008000
      LDPP PN22;                                                        17010000
      DCMP;                                                             17012000
      BE *+2;                                                           17014000
      BR FDIVERROR;                   << RESULT NOT 1+2**(-22) >>       17016000
                                                                        17018000
      LDPP NN23;   << 1-2**(-23)/1+2**(-22) >>                          17020000
      LDPP PN22;                                                        17022000
      FDIV;                                                             17024000
      BG *+2;                                                           17026000
      BR FDIVERROR;                   << NOT CCG >>                     17028000
      LDPP NN22NN23;                                                    17030000
      DCMP;                                                             17032000
      BE *+2;                                                           17034000
      BR FDIVERROR;               << RESULT NOT 1-2**(-22)-2**(-23)  >> 17036000
                                                                        17038000
      LDPP PN22;   << 1+2**(-22)/1-2**(-22) >>                          17040000
      LDPP NN22;                                                        17042000
      FDIV;                                                             17044000
      BG *+2;                                                           17046000
      BR FDIVERROR;                   << NOT CCG >>                     17048000
      LDPP PN21;                                                        17050000
      DCMP;                                                             17052000
      BE *+2;                                                           17054000
      BR FDIVERROR;                   << RESULT NOT 1+2**(-21) >>       17056000
                                                                        17058000
      LDPP NN22;   << 1-2**(22)/1+2**(-22) >>                           17060000
      LDPP PN22;                                                        17062000
      FDIV;                                                             17064000
      BG *+2;                                                           17066000
      BR FDIVERROR;                   << NOT CCG >>                     17068000
      LDPP NN21;                                                        17070000
      DCMP;                                                             17072000
      BE *+2;                                                           17074000
      BR FDIVERROR;                   << RESULT NOT 1-2**(-21) >>       17076000
                                                                        17078000
      LDPP NN12;   << 1-2**(-12)/1+2**(-12) >>                          17080000
      LDPP PN12;                                                        17082000
      FDIV;                                                             17084000
      BG *+2;                                                           17086000
      BR FDIVERROR;                   << NOT CCG >>                     17088000
      LDPP NN11PN23;                                                    17090000
      DCMP;                                                             17092000
      BE *+2;                                                           17094000
      BR FDIVERROR;               << RESULT NOT 1-2**(-11)+2**(-23) >>  17096000
                                                                        17098000
      LDPP NN13;   << 1-2**(-13)/1+2**(-13) >>                          17100000
      LDPP PN13;                                                        17102000
      FDIV;                                                             17104000
      BG *+2;                                                           17106000
      BR FDIVERROR;                   << NOT CCG >>                     17108000
      LDPP NN12;                                                        17110000
      DCMP;                                                             17112000
      BE *+2;                                                           17114000
      BR FDIVERROR;                   << RESULT NOT 1-2**(-12) >>       17116000
                                                                        17118000
      LDPP PN12;   << 1+2**(-12)/1-2**(-12) >>                          17120000
      LDPP NN12;                                                        17122000
      FDIV;                                                             17124000
      BG *+2;                                                           17126000
      BR FDIVERROR;                   << NOT CCG >>                     17128000
      LDPP PN11PN22;                                                    17130000
      DCMP;                                                             17132000
      BE *+2;                                                           17134000
      BR FDIVERROR;               << RESULT NOT 1+2**(-11)+2**(-22) >>  17136000
                                                                        17138000
<< TEST CASE WHERE Q2 >= 2**16 >>                                       17140000
                                                                        17142000
      LDPP PN10PN22;   << 1+2**(-10)+2**(-22)/1+2**(-22) >>             17144000
      LDPP PN22;                                                        17146000
      FDIV;                                                             17148000
      BG *+2;                                                           17150000
      BR FDIVERROR;                   << NOT CCG >>                     17152000
      LDPP PN10;                                                        17154000
      DCMP;                                                             17156000
      BE *+2;                                                           17158000
      BR FDIVERROR;                   << RESULT NOT 1*2**(-10) >>       17160000
                                                                        17162000
<< TEST CASE TO CHECK CARRY WHEN R1B-Q1V2:=R1B-Q1V2+V1B+V2 >>           17164000
                                                                        17166000
      LDPP PN10;   << 1+2**(-10) >>                                     17168000
      LDPP PN15;   << 1+2**(-15) >>                                     17170000
      FDIV;                                                             17172000
      LDPP PN10NN15;                                                    17174000
      DCMP;                                                             17176000
      BE EXIT;                                                          17178000
      BR FDIVERROR);             << RESULT NOT 1+2**(-10)-2**(-15) >>   17180000
                                                                        17182000
FDIVERROR:                                                              17184000
      NO'ERROR:=FALSE;                                                  17186000
                                                                        17188000
EXIT:                                                                   17190000
       PUSH(Q);SET(S);  << RESET STACK >>                               17192000
       TOS:=RE'ADDRS;   << RESTORE RETURN ADDRESS >>                    17194000
                                                                        17196000
      ASSEMBLE( EXIT 0;   << RETURN >>                                  17198000
                                                                        17200000
PN10: CON %040000, %010000;                                             17202000
PN22: CON %040000, %000001;                                             17204000
NN22: CON %037777, %177776;                                             17206000
NN23: CON %037777, %177777;                                             17208000
NN22NN23: CON %037777, %177775;                                         17210000
PN21: CON %040000, 2;                                                   17212000
NN21: CON %037777, %177774;                                             17214000
NN12: CON %037777, %174000;                                             17216000
PN12: CON %040000, %002000;                                             17218000
NN11PN23: CON %037777, %170001;                                         17220000
NN13: CON %037777, %176000;                                             17222000
PN13: CON %040000, %001000;                                             17224000
PN11PN22: CON %040000, %004001;                                         17226000
PN10PN22: CON %040000, %010001;                                         17228000
PN15: CON %40000, %200;                                                 17230000
PN10NN15: CON %40000, %7600;                                            17232000
                                                                        17234000
      NOP);                                                             17236000
   END;                                                                 17238000
                                                                        17240000
      MOVE INSTRUCT'NAME:="FNEG  ";                                     17242000
      PRINT'NAMES;                                                      17244000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO FNEG'TEST;            17246000
                                                                        17248000
      MOVE INSTRUCT'NAME:="FCMP  ";                                     17250000
      PRINT'NAMES;                                                      17252000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO FCMP'TEST;            17254000
                                                                        17256000
      MOVE INSTRUCT'NAME:="FLT   ";                                     17258000
      PRINT'NAMES;                                                      17260000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO FLT'TEST;             17262000
                                                                        17264000
      MOVE INSTRUCT'NAME:="DFLT  ";                                     17266000
      PRINT'NAMES;                                                      17268000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO DFLT'TEST;            17270000
                                                                        17272000
      MOVE INSTRUCT'NAME:="FIXT  ";                                     17274000
      PRINT'NAMES;                                                      17276000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO FIXT'TEST;            17278000
                                                                        17280000
      MOVE INSTRUCT'NAME:="FIXR  ";                                     17282000
      PRINT'NAMES;                                                      17284000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO FIXR'TEST;            17286000
                                                                        17288000
      MOVE INSTRUCT'NAME:="FADD  ";                                     17290000
      PRINT'NAMES;                                                      17292000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO FADD'TEST;            17294000
                                                                        17296000
      MOVE INSTRUCT'NAME:="FSUB  ";                                     17298000
      PRINT'NAMES;                                                      17300000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO FSUB'TEST;            17302000
                                                                        17304000
      MOVE INSTRUCT'NAME:="FMPY  ";                                     17306000
      PRINT'NAMES;                                                      17308000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO FMPY'TEST;            17310000
                                                                        17312000
      MOVE INSTRUCT'NAME:="FDIV  ";                                     17314000
      PRINT'NAMES;                                                      17316000
      WHILE NO'ERROR AND (I:=I+1) < LOOPNUMBER DO FDIV'TEST;            17318000
                                                                        17320000
                                                                        17322000
END;   << GRPJ >>                                                       17324000
                                                                        17326000
PROCEDURE TESTMOVE;  << TEST MOVE INSTRUCTION >>                        17328000
BEGIN                                                                   17330000
    INTEGER ARRAY IA3(0:3)=PB:=-7,3,-6,2;                               17332000
                                                                        17334000
<< TEST 1:  MOVE DB TO DB  CNT=5, SCEC=3, SR=4 >>                       17336000
<<    CHECK STACK POSITION, MOVED CONTENTS, CC UNCHANGED >>             17338000
       MOVE INSTRUCT'NAME:="MOVE  ";                                    17340000
       PRINT'NAMES;                                                     17342000
STAR:    CIA1;                                                          17344000
  TOS:=-1;                                                              17346000
  MOVE IA1 := IA2,(5);                                                  17348000
  IF <= THEN ASSEMBLE(BR MOVEERROR);   << CC CHANGED - NOT CCG >>       17350000
  IF TOS<>-1 THEN BEGIN ASSEMBLE(BR MOVEERROR); GO MOVE1; END;          17352000
  FOR I:=0 UNTIL 4 DO                                                   17354000
    BEGIN                                                               17356000
      IF IA1(I)<>IA2(X) THEN BEGIN ASSEMBLE(BR MOVEERROR); GO MOVE1; END17358000
    END;                                                                17360000
MOVE1:                                                                  17362000
                                                                        17364000
<< TEST 2:  MOVE PB TO DB  CNT=4  SDEC=3 >>                             17366000
<<   CHECK MOVED CONTENTS >>                                            17368000
    CIA1;                                                               17370000
    TOS:=@IA3(0);                                                       17372000
    MOVE IA1(0):=*PB,(4),3;                                             17374000
    FOR I:=0 UNTIL 3 DO                                                 17376000
      BEGIN                                                             17378000
        IF IA1(I)<>IA3(I) THEN BEGIN                                    17380000
                                 ASSEMBLE(BR MOVEERROR);                17382000
                                 GO MPBAE;                              17384000
                               END;                                     17386000
      END;                                                              17388000
MPBAE:                                                                  17390000
                                                                        17392000
<< TEST 3:  MOVE DB TO DB  CNT=-5  SDEC=0 >>                            17394000
<<   CHECK CNT, SA, TA, MOVED CONTENTS, CC UNCHANGED >>                 17396000
  CIA1;                                                                 17398000
  MOVE IA1(4):=IA2(X),(-5),0;                                           17400000
  IF >= THEN ASSEMBLE(BR MOVEERROR);   << CC CHANGED - NOT CCL >>       17402000
  IF TOS<>0 THEN BEGIN ASSEMBLE(BR MOVEERROR); GO MOVE2; END;           17404000
  IF TOS<>@IA2(-1) THEN BEGIN ASSEMBLE(BR MOVEERROR); GO MOVE2; END;    17406000
  IF TOS<>@IA1(-1) THEN BEGIN ASSEMBLE(BR MOVEERROR); GO MOVE2; END;    17408000
  FOR I:=0 UNTIL 4 DO                                                   17410000
    BEGIN                                                               17412000
      IF IA1(I)<>IA2(X) THEN BEGIN ASSEMBLE(BR MOVEERROR); GO MOVE2; END17414000
    END;                                                                17416000
MOVE2:                                                                  17418000
                                                                        17420000
<< TEST 4:  MOVE DB TO DB  CNT=0  SDEC=0 >>                             17422000
<<   CHECK CNT, SA, TA, NOTHING MOVED >>                                17424000
  CIA1;                                                                 17426000
  MOVE IA1:=IA2,(0),0;                                                  17428000
  IF TOS<>0 THEN BEGIN ASSEMBLE(BR MOVEERROR); GO MOVE3; END;           17430000
  IF TOS<>@IA2(0) THEN BEGIN ASSEMBLE(BR MOVEERROR); GO MOVE3; END;     17432000
  IF TOS<>@IA1(0) THEN BEGIN ASSEMBLE(BR MOVEERROR); GO MOVE3; END;     17434000
  FOR I:=0 UNTIL 4 DO                                                   17436000
    BEGIN                                                               17438000
      IF IA1(I)<>0 THEN BEGIN ASSEMBLE(BR MOVEERROR); GO MOVE3; END;    17440000
    END;                                                                17442000
MOVE3:                                                                  17444000
                                                                        17446000
<< TEST 5:  MOVE DB TO DB  CNT=5  SDEC=1 >>                             17448000
<<   CHECK SA >>                                                        17450000
  MOVE IA1 := IA2,(5),1;                                                17452000
  IF TOS<>@IA2(5) THEN ASSEMBLE(BR MOVEERROR);                          17454000
                                                                        17456000
<< TEST 6:  MOVE DB TO DB  CNT=5  SDEC=2 >>                             17458000
<<   CHECK TA >>                                                        17460000
  MOVE IA1 := IA2,(5),2;                                                17462000
  IF TOS<>@IA1(5) THEN ASSEMBLE(BR MOVEERROR);                          17464000
                                                                        17466000
<<  TEST 7:  MOVE DB TO DB  CNT=5  SDEC=0  SR=0 >>                      17468000
<<   CHECK CNT, SA, TA, MOVED CONTENTS >>                               17470000
  CIA1;                                                                 17472000
ASSEMBLE( LDI 3; LRA IA1; LRA IA2; LDI 5; LDI 98; SUBS 1; MOVE 0);      17474000
  IF TOS<>0 THEN BEGIN ASSEMBLE(BR MOVEERROR); GO MOVE4; END;           17476000
  IF TOS<>@IA2(5) THEN BEGIN ASSEMBLE(BR MOVEERROR); GO MOVE4; END;     17478000
  IF TOS<>@IA1(5) THEN BEGIN ASSEMBLE(BR MOVEERROR); GO MOVE4; END;     17480000
  FOR I:=0 UNTIL 4 DO                                                   17482000
    BEGIN                                                               17484000
     IF IA2(I)<>IA1(X) THEN BEGIN ASSEMBLE(BR MOVEERROR);GO MOVE4;END;  17486000
    END;                                                                17488000
MOVE4:                                                                  17490000
                                                                        17492000
       PUSH(Q);SET(S); <<RESET STACK>>                                  17494000
       IF(LOOPCTN:=LOOPCTN+1)= LOOPNUMBER THEN GO OUT                   17496000
       ELSE GO STAR;                                                    17498000
                                                                        17500000
MOVEERROR:                                                              17502000
      NO'ERROR:=FALSE;                                                  17504000
                                                                        17506000
OUT:   LOOPCTN:=0;                                                      17508000
                                                                        17510000
                                                                        17512000
END;   << TESTMOVE >>                                                   17514000
                                                                        17516000
PROCEDURE TESTMVB;   << TEST MVB INSTRUCTION >>                         17518000
BEGIN                                                                   17520000
BYTE ARRAY BA4(0:9)=PB:="FGHIJ56789";                                   17522000
                                                                        17524000
<< TEST 1:  DB TO DB  CNT=10  SDEC=3 >>                                 17526000
<<   CHECK MOVED CONTENTS, CC UNCHANGED >>                              17528000
       MOVE INSTRUCT'NAME:="MVB   ";                                    17530000
       PRINT'NAMES;                                                     17532000
STAR:    CBA1;                                                          17534000
  MOVE BA1:=BA2,(10);                                                   17536000
  IF <= THEN ASSEMBLE(BR MBVERROR);  << CC CHANGED - NOT CCG >>         17538000
  FOR X:=0 UNTIL 9 DO                                                   17540000
    BEGIN                                                               17542000
      IF BA1(X)<>BA2(X) THEN BEGIN ASSEMBLE(BR MBVERROR); GO MVB1; END; 17544000
    END;                                                                17546000
MVB1:                                                                   17548000
                                                                        17550000
<< TEST 2:  PB TO DB  CNT=10  SDEC=3 >>                                 17552000
<<   CHECK MOVED CONTENTS >>                                            17554000
  CBA1;                                                                 17556000
  MOVE BA1:=BA4,(10);                                                   17558000
  FOR X:=0 UNTIL 9 DO                                                   17560000
    BEGIN                                                               17562000
      IF BA1(X)<>BA3(X) THEN BEGIN ASSEMBLE(BR MBVERROR); GO MVB2; END; 17564000
    END;                                                                17566000
MVB2:                                                                   17568000
                                                                        17570000
<< TEST 3:  DB TO DB  CNT=-5  SDEC=0 >>                                 17572000
<<   CHECK CNT, SA, TA, MOVED CONTENTS, CC UNCHANGED >>                 17574000
  CBA1;                                                                 17576000
  MOVE BA1(8):=BA2(7),(-5),0;                                           17578000
  IF >= THEN ASSEMBLE(BR MBVERROR);   << CC CHANGED - NOT CCL >>        17580000
  IF TOS<>0 THEN BEGIN ASSEMBLE(BR MBVERROR); GO MVB3; END;             17582000
  IF TOS<>@BA2(2) THEN BEGIN ASSEMBLE(BR MBVERROR); GO MVB3; END;       17584000
  IF TOS<>@BA1(3) THEN BEGIN ASSEMBLE(BR MBVERROR); GO MVB3; END;       17586000
  FOR I:=8 STEP -1 UNTIL 4 DO                                           17588000
    BEGIN                                                               17590000
      IF BA1(I)<>BA2(I-1) THEN BEGIN ASSEMBLE(BR MBVERROR);GO MVB3;END; 17592000
    END;                                                                17594000
  FOR X:=0 UNTIL 3 DO                                                   17596000
    BEGIN                                                               17598000
      IF BA1(X)<>0 THEN BEGIN ASSEMBLE(BR MBVERROR); GO MVB3; END;      17600000
    END;                                                                17602000
  IF BA1(9)<>0 THEN ASSEMBLE(BR MBVERROR);                              17604000
MVB3:                                                                   17606000
                                                                        17608000
       PUSH(Q);SET(S); <<RESET STACK>>                                  17610000
       IF(LOOPCTN:=LOOPCTN+1)= LOOPNUMBER THEN GO OUT                   17612000
       ELSE GO STAR;                                                    17614000
                                                                        17616000
MBVERROR:                                                               17618000
      NO'ERROR:=FALSE;                                                  17620000
                                                                        17622000
OUT:   LOOPCTN:=0;                                                      17624000
                                                                        17626000
                                                                        17628000
END;   << TESTMVB >>                                                    17630000
PROCEDURE TESTMVBW;   << TESTMVBW INSTRUCTION >>                        17632000
BEGIN                                                                   17634000
                                                                        17636000
<< TEST 1:  CCF=A  SDEC=0  SOURCE STRING IS "ABC0" >>                   17638000
<<   CHECK CCG, SA, TA, MOVED CONTENTS >>                               17640000
       MOVE INSTRUCT'NAME:="MVBW  ";                                    17642000
       PRINT'NAMES;                                                     17644000
STAR:    CBA1;                                                          17646000
  MOVE BA1:=AAAN WHILE A,0;                                             17648000
  IF <= THEN BEGIN ASSEMBLE(BR MBVWERROR); GO MVBW1; END;               17650000
  IF TOS<>@AAAN(3) THEN BEGIN ASSEMBLE(BR MBVWERROR); GO MVBW1; END;    17652000
  IF TOS<>@BA1(3) THEN BEGIN ASSEMBLE(BR MBVWERROR); GO MVBW1; END;     17654000
   FOR X:=0 UNTIL 2 DO                                                  17656000
    BEGIN                                                               17658000
      IF BA1(X)<>AAAN(X) THEN BEGIN ASSEMBLE(BR MBVWERROR);             17660000
                                    GO MVBW1;                           17662000
                              END;                                      17664000
    END;                                                                17666000
  IF BA1(3)<>0 THEN ASSEMBLE(BR MBVWERROR);                             17668000
MVBW1:                                                                  17670000
                                                                        17672000
<< TEST 2:  CCF=N  SDEC=0  SOURCE STRING IS "012A" >>                   17674000
<<   CHECK CCE, SA, TA, MOVED CONTENTS >>                               17676000
  CBA1;                                                                 17678000
  MOVE BA1:=NNNA WHILE N,0;                                             17680000
  IF <> THEN BEGIN ASSEMBLE(BR MBVWERROR); GO MVBW2; END;               17682000
  IF TOS<>@NNNA(3) THEN BEGIN ASSEMBLE(BR MBVWERROR); GO MVBW2; END;    17684000
  IF TOS<>@BA1(3) THEN BEGIN ASSEMBLE(BR MBVWERROR); GO MVBW2; END;     17686000
   FOR X:=0 UNTIL 2 DO                                                  17688000
    BEGIN                                                               17690000
      IF BA1(X)<>NNNA(X) THEN BEGIN ASSEMBLE(BR MBVWERROR); GO MVBW2;   17692000
                              END;                                      17694000
    END;                                                                17696000
  IF BA1(3)<>0 THEN ASSEMBLE(BR MBVWERROR);                             17698000
MVBW2:                                                                  17700000
                                                                        17702000
<< TEST 3:  CCF=ANS  SDEC=0  STRING = 3 LOWER ALPHA & 1 SPEC CHAR >>    17704000
<<   CHECK CCL, SA, TA, MOVED CONTENTS >>                               17706000
<< ALL MOVED LOWER CASE ALPHAS SHOULD BE UPSHIFTED; IE. BIT(10):=0>>    17708000
  CBA1;                                                                 17710000
  MOVE BA1:=LLLS WHILE ANS,0;                                           17712000
  IF >= THEN BEGIN ASSEMBLE(BR MBVWERROR); GO MVBW3; END;               17714000
  IF TOS<>@LLLS(3) THEN BEGIN ASSEMBLE(BR MBVWERROR); GO MVBW3; END;    17716000
  IF TOS<>@BA1(3) THEN BEGIN ASSEMBLE(BR MBVWERROR); GO MVBW3; END;     17718000
   FOR X:=0 UNTIL 2 DO                                                  17720000
    BEGIN                                                               17722000
         IF LOGICAL(BA1(X))<>(LOGICAL(LLLS(X))LAND %337) THEN           17724000
            BEGIN ASSEMBLE(BR MBVWERROR); GO MVBW3; END;                17726000
    END;                                                                17728000
  IF BA1(3)<>0 THEN ASSEMBLE(BR MBVWERROR);                             17730000
MVBW3:                                                                  17732000
                                                                        17734000
<< TEST 4:  CCF=ANS  SDEC=0  SOURCE STRING IS "?'" >>                   17736000
<<   CHECK CCL, SA, TA, NOTHING MOVED >>                                17738000
  CBA1;                                                                 17740000
  MOVE BA1:=SS WHILE ANS,0;                                             17742000
  IF >= THEN BEGIN ASSEMBLE(BR MBVWERROR); GO MVBW4; END;               17744000
  IF TOS<>@SS THEN BEGIN ASSEMBLE(BR MBVWERROR); GO MVBW4; END;         17746000
  IF BA1(0)<>0 THEN ASSEMBLE(BR MBVWERROR);                             17748000
MVBW4:                                                                  17750000
                                                                        17752000
<< TEST 5:  CCF=A  SDEC=3  SOURCE STRING IS "ABC0" >>                   17754000
<< CHECK CCL, STACKPOSITION, MOVED CONTENTS >>                          17756000
  CBA1;                                                                 17758000
  TOS:=-22;  TOS:=-3;                                                   17760000
  MOVE BA1:=AAAN WHILE A,3;                                             17762000
  IF <= THEN BEGIN ASSEMBLE(BR MBVWERROR); GO MVBW6; END;               17764000
  IF TOS<>-22 THEN BEGIN ASSEMBLE(BR MBVWERROR); GO MVBW6; END;         17766000
  FOR X:=0 UNTIL 2 DO                                                   17768000
    BEGIN                                                               17770000
    IF BA1(X)<>AAAN(X) THEN BEGIN ASSEMBLE(BR MBVWERROR); GO MVBW6; END;17772000
    END;                                                                17774000
  IF BA1(3)<>0 THEN ASSEMBLE(BR MBVWERROR);                             17776000
MVBW6:                                                                  17778000
                                                                        17780000
<< TEST 6:  CCF=ANS  SDEC=1  SOURCE STRING IS "A0B1?" >>                17782000
<<   CHECK CCL, TA, MOVED CONTENTS >>                                   17784000
  CBA1;                                                                 17786000
  MOVE BA1:=ANANS WHILE ANS,1;                                          17788000
  IF>= THEN BEGIN ASSEMBLE(BR MBVWERROR); GO MVBW7; END;                17790000
IF TOS<>@BA1(4) THEN BEGIN ASSEMBLE(BR MBVWERROR); GO MVBW7; END;       17792000
   FOR X:=0 UNTIL 3 DO                                                  17794000
    BEGIN                                                               17796000
      IF BA1(X)<>ANANS(X) THEN BEGIN ASSEMBLE(BR MBVWERROR);GO MVBW7;   17798000
                               END;                                     17800000
    END;                                                                17802000
  IF BA1(4)<>0 THEN ASSEMBLE(BR MBVWERROR);                             17804000
MVBW7:                                                                  17806000
                                                                        17808000
<< TEST 7:  CCF=ANS  SDEC=0  SOURCE STRING IS "A0B1?"  SR=0 >>          17810000
<<   CHECK SA >>                                                        17812000
  ASSEMBLE( LOAD BA1;  LOAD ANANS;  PSHR 0;  MVBW ANS,0);               17814000
   IF TOS<>@ANANS(4) THEN ASSEMBLE(BR MBVWERROR);                       17816000
                                                                        17818000
<< TEST 8:  CCF=ANS  SDEC=0  SOURCE STRING IS "A0B1?"  SR=4 >>          17820000
<<   CHECK SA >>                                                        17822000
  ASSEMBLE( LOAD BA1;  LOAD ANANS;  SETR 0;  MVBW ANS,0);               17824000
  IF TOS<>@ANANS(4) THEN ASSEMBLE(BR MBVWERROR);                        17826000
                                                                        17828000
       PUSH(Q);SET(S); <<RESET STACK>>                                  17830000
       IF(LOOPCTN:=LOOPCTN+1)= LOOPNUMBER THEN GO OUT                   17832000
       ELSE GO STAR;                                                    17834000
                                                                        17836000
MBVWERROR:                                                              17838000
      NO'ERROR:=FALSE;                                                  17840000
                                                                        17842000
OUT:   LOOPCTN:=0;                                                      17844000
                                                                        17846000
                                                                        17848000
END;   << TEST MVBW >>                                                  17850000
                                                                        17852000
PROCEDURE TESTSCW;   << TEST SCW INSTRUCTION >>                         17854000
BEGIN                                                                   17856000
                                                                        17858000
<< TEST 1:  ARRAY IS "AAAAAB"  TESTWORD IS "BA"  SDEC=1 >>              17860000
<<   CHECK CCE, CARRY=1, SA >>                                          17862000
       MOVE INSTRUCT'NAME:="SCW   ";                                    17864000
       PRINT'NAMES;                                                     17866000
STAR:    TOS := 0+0;  << CLEAR CARRY >>                                 17868000
   SCAN BAA WHILE "BA",1;                                               17870000
  IF <> THEN BEGIN ASSEMBLE(BR SCWERROR); GO SCW1; END;                 17872000
   IF NOCARRY THEN BEGIN ASSEMBLE(BR SCWERROR); GO SCW1; END;           17874000
   IF TOS<>@BAA(5) THEN ASSEMBLE(BR SCWERROR);                          17876000
SCW1:                                                                   17878000
                                                                        17880000
<< TEST 2:  ARRAY IS "AAAAAB"  TESTWORD IS "CA"  SDEC=1 >>              17882000
<<   CHECK CCE, CARRY=0, SA >>                                          17884000
  TOS:=2-1;   << SET CARRY >>                                           17886000
  SCAN BAA WHILE "CA",1;                                                17888000
  IF <> THEN BEGIN ASSEMBLE(BR SCWERROR); GO SCW2; END;                 17890000
  IF CARRY THEN BEGIN ASSEMBLE(BR SCWERROR); GO SCW2; END;              17892000
  IF TOS <>@BAA(5) THEN ASSEMBLE(BR SCWERROR);                          17894000
SCW2:                                                                   17896000
                                                                        17898000
<< TEST 3:  ARRAY IS "0001"  TESTWORD IS "10"  SDEC=0  SA IS ODD >>     17900000
<<   CHECK CCG, TESTWORD ON TOS, SA >>                                  17902000
  SCAN BAN(1) WHILE "10",0;                                             17904000
  IF <= THEN BEGIN ASSEMBLE(BR SCWERROR); GO SCW3; END;                 17906000
  IF TOS<>"10" THEN BEGIN ASSEMBLE(BR SCWERROR); GO SCW3; END;          17908000
  IF TOS<>@BAN(4) THEN ASSEMBLE(BR SCWERROR);                           17910000
SCW3:                                                                   17912000
                                                                        17914000
<< TEST 4:  ARRAY IS "AAAAAB"  TESTWORD IS "10"  SDEC=1 >>              17916000
<<   CHECK SA >>                                                        17918000
  SCAN BAA WHILE "10",1;                                                17920000
  IF TOS<>@BAA THEN ASSEMBLE(BR SCWERROR);                              17922000
                                                                        17924000
       PUSH(Q);SET(S); <<RESET STACK>>                                  17926000
       IF(LOOPCTN:=LOOPCTN+1)= LOOPNUMBER THEN GO OUT                   17928000
       ELSE GO STAR;                                                    17930000
                                                                        17932000
SCWERROR:                                                               17934000
      NO'ERROR:=FALSE;                                                  17936000
                                                                        17938000
OUT:   LOOPCTN:=0;                                                      17940000
                                                                        17942000
                                                                        17944000
END;   << TEST SCW >>                                                   17946000
                                                                        17948000
PROCEDURE TESTSCU;   << TEST SCU INSTRUCTION >>                         17950000
BEGIN                                                                   17952000
                                                                        17954000
<< TEST 1:  ARRAY IS "ABCD0123?"  TESTWORD IS "A0"  SDEC=1 >>           17956000
<<   CHECK CARRY=0, SA, CC UNCHANGED >>                                 17958000
       MOVE INSTRUCT'NAME:="SCU   ";                                    17960000
       PRINT'NAMES;                                                     17962000
STAR:    TOS:=0+0;  << CARRY=0 >>                                       17964000
   SCAN BA9 UNTIL "A0",1;                                               17966000
  IF <= THEN ASSEMBLE(BR SCUERROR);  << CC CHANGED - NOT CCG >>         17968000
   IF NOCARRY THEN BEGIN ASSEMBLE(BR SCUERROR); GO SCU1; END;           17970000
  IF TOS<>@BA9 THEN ASSEMBLE(BR SCUERROR);                              17972000
SCU1:                                                                   17974000
                                                                        17976000
<< TEST 2:  ARRAY IS "ABCD0123?"  TESTWORD IS "50"  SDEC=1 >>           17978000
<<   CHECK CARRY=0, SA >>                                               17980000
   TOS:=2-1;   << SET CARRY >>                                          17982000
   SCAN BA9 UNTIL "50",1;                                               17984000
   IF CARRY THEN BEGIN ASSEMBLE(BR SCUERROR); GO SCU2; END;             17986000
   IF TOS<>@BA9(4) THEN ASSEMBLE(BR SCUERROR);                          17988000
SCU2:                                                                   17990000
                                                                        17992000
<<  TEST 3:  ARRAY IS "ABCD0123?"  TESTWORD IS "X?"  SDEC=0 >>          17994000
<<   CHECK TOS="X?", SA >>                                              17996000
  SCAN BA9 UNTIL "X?",0;                                                17998000
  IF TOS<>"X?" THEN BEGIN ASSEMBLE(BR SCUERROR); GO SCU3; END;          18000000
  IF TOS<>@BA9(8) THEN ASSEMBLE(BR SCUERROR);                           18002000
SCU3:                                                                   18004000
                                                                        18006000
       PUSH(Q);SET(S); <<RESET STACK>>                                  18008000
       IF(LOOPCTN:=LOOPCTN+1)= LOOPNUMBER THEN GO OUT                   18010000
       ELSE GO STAR;                                                    18012000
                                                                        18014000
SCUERROR:                                                               18016000
      NO'ERROR:=FALSE;                                                  18018000
                                                                        18020000
OUT:   LOOPCTN:=0;                                                      18022000
                                                                        18024000
                                                                        18026000
END;   << TEST SCU >>                                                   18028000
                                                                        18030000
PROCEDURE TESTCMPB;   << TEST CMPB INSTRUCTION >>                       18032000
BEGIN                                                                   18034000
  BYTE ARRAY BAC(0:4)=PB:="ABCDE";                                      18036000
                                                                        18038000
<< TEST 1:  2 IDENTICAL DB ARRAYS, CNT=10, SDEC=0 >>                    18040000
<<   CHECK CCE, CNT, SA, TA >>                                          18042000
       MOVE INSTRUCT'NAME:="CMPB  ";                                    18044000
       PRINT'NAMES;                                                     18046000
STAR:   MOVE BA1:=BA2,(10);    << GET 2 INDENTICAL BUFFERS >>           18048000
IF BA1<>BA2,(10),0THEN<<NOT CCE>>BEGIN ASSEMBLE(BR CMPBERROR);          18050000
                                       GO CMPB1;                        18052000
                                 END;                                   18054000
   IF TOS<>0 THEN BEGIN ASSEMBLE(BR CMPBERROR); GO CMPB1; END;          18056000
   IF TOS<>@BA2(10) THEN BEGIN ASSEMBLE(BR CMPBERROR); GO CMPB1; END;   18058000
   IF TOS<>@BA1(10) THEN ASSEMBLE(BR CMPBERROR);                        18060000
CMPB1:                                                                  18062000
                                                                        18064000
<<  TEST 2:  CNT=0  SDEC=0 >>                                           18066000
<<   CHECK CCE, CNT, SA, TA >>                                          18068000
   IF BA2 <> BA3,(0),0 THEN << NOT CCE >>                               18070000
     BEGIN ASSEMBLE(BR CMPBERROR); GO CMPB2; END;                       18072000
   IF TOS<>0 THEN BEGIN ASSEMBLE(BR CMPBERROR); GO CMPB2; END;          18074000
   IF TOS<>@BA3 THEN BEGIN ASSEMBLE(BR CMPBERROR); GO CMPB2; END;       18076000
  IF TOS<>@BA2 THEN ASSEMBLE(BR CMPBERROR);                             18078000
CMPB2:                                                                  18080000
                                                                        18082000
<< TEST 3:  2 IDENTICAL ARRAYS EXCEPT FOR ELEMENT 7  CNT=10  SDEC=0 >>  18084000
<<  BA1(7)="X";  BA2(7)="2"; >>                                         18086000
<<   CHECK CCG, CNT=3, SA, TA >>                                        18088000
  MOVE BA1:=BA2,(10);                                                   18090000
  BA1(7):="X";                                                          18092000
  IF BA1 <= BA2,(10),0 THEN << NOT CCG >>                               18094000
    BEGIN ASSEMBLE(BR CMPBERROR); GO CMPB3; END;                        18096000
  IF TOS<>3 THEN BEGIN ASSEMBLE(BR CMPBERROR); GO CMPB3; END;           18098000
IF TOS<>@BA2(7) THEN BEGIN ASSEMBLE(BR CMPBERROR); GO CMPB3; END;       18100000
  IF TOS<>@BA1(7) THEN ASSEMBLE(BR CMPBERROR);                          18102000
CMPB3:                                                                  18104000
                                                                        18106000
<< TEST 4: 2 IDENTICAL DB ARRAYS EXPECT FOR ELEMENT 7 CNT=-10 SDEC=0 >> 18108000
<< BA1(7)="X";  BA2(7)="2" >>                                           18110000
<<   CHECK CCL, CNT=-8, SA, TA >>                                       18112000
  MOVE BA1:=BA2,(10);                                                   18114000
  BA1(7):="X";                                                          18116000
  IF BA2(9)>=BA1(9),(-10),0 THEN   << NOT CCL >>                        18118000
    BEGIN ASSEMBLE(BR CMPBERROR); GO CMPB4; END;                        18120000
  IF TOS<>-8 THEN BEGIN ASSEMBLE(BR CMPBERROR); GO CMPB4; END;          18122000
  IF TOS<>@BA1(7) THEN BEGIN ASSEMBLE(BR CMPBERROR); GO CMPB4; END;     18124000
  IF TOS<>@BA2(7) THEN BEGIN ASSEMBLE(BR CMPBERROR); GO CMPB4; END;     18126000
CMPB4:                                                                  18128000
                                                                        18130000
<<  TEST 5:  IDENTICAL PB AND DB ARRAYS EXCEPT FOR ELEMENT 4            18132000
  BA1(4)="Z"  BAC(4)="D"  CNT=5  SDEC=0 >>                              18134000
<<   CHECK CCG, CNT, SA, TA >>                                          18136000
  MOVE BA1:=BAC,(5);                                                    18138000
  BA1(4):="Z";  << CHANGE ELEMENT 4 >>                                  18140000
  IF BA1<=BAC,(5),0 THEN << NOT CCG >>                                  18142000
    BEGIN ASSEMBLE(BR CMPBERROR); GO CMPBE; END;                        18144000
  IF TOS<>1 THEN BEGIN ASSEMBLE(BR CMPBERROR); GO CMPBE; END;           18146000
  IF TOS<>@BAC(4) THEN BEGIN ASSEMBLE(BR CMPBERROR); GO CMPBE; END;     18148000
  IF TOS<>@BA1(4) THEN ASSEMBLE(BR CMPBERROR);                          18150000
CMPBE:                                                                  18152000
                                                                        18154000
       PUSH(Q);SET(S); <<RESET STACK>>                                  18156000
       IF(LOOPCTN:=LOOPCTN+1)= LOOPNUMBER THEN GO OUT                   18158000
       ELSE GO STAR;                                                    18160000
                                                                        18162000
CMPBERROR:                                                              18164000
      NO'ERROR:=FALSE;                                                  18166000
                                                                        18168000
OUT:   LOOPCTN:=0;                                                      18170000
                                                                        18172000
                                                                        18174000
END;   << TESTCMPB >>                                                   18176000
                                                                        18178000
                                                                        18180000
PROCEDURE TESTXEQ;   << TEST XEQ INSTRUCTION >>                         18182000
BEGIN                                                                   18184000
                                                                        18186000
       MOVE INSTRUCT'NAME:="XEQ   ";                                    18188000
       PRINT'NAMES;                                                     18190000
STAR: ASSEMBLE(                                                         18192000
      LDI 0;                                                            18194000
      LOAD INSTR1;   << LDNI 1; INSTRUCTION >>                          18196000
      XEQ 0;  << EXECUTE INSTRUCTION ON TOP OF STACK >>                 18198000
      BL *+2;                                                           18200000
      BR XEQERROR;                   << NOT CCL >>                      18202000
      CMPN 1;                                                           18204000
      BE *+2;                                                           18206000
      BR XEQERROR;                   << TOS NOT -1 >>                   18208000
      CMPM INSTR1;                                                      18210000
      BE *+2;                                                           18212000
      BR XEQERROR;                   << (S-1) NOT INSTR1 >>             18214000
      CMPN 0;                                                           18216000
      BE *+2;                                                           18218000
      BR XEQERROR;                   << (S-2) NOT 0 >>                  18220000
                                                                        18222000
      LOAD INSTR2;   << DADD INSTRUCTION >>                             18224000
      DZRO,INCA;                                                        18226000
      DDUP,INCA;                                                        18228000
      XEQ 4;                                                            18230000
      LDI 0;                                                            18232000
      LDI 3;                                                            18234000
      DCMP;                                                             18236000
      BE *+2;                                                           18238000
      BR XEQERROR;                   << TOS NOT 3D >>                   18240000
      CMPM INSTR2;                                                      18242000
      BE *+2;                                                           18244000
      BR XEQERROR;                   << (S-2) NOT INSTR2 >>             18246000
                                                                        18248000
      LOAD INSTR3;   << BR *+2 INSTRUCTION >>                           18250000
      XEQ 0;                                                            18252000
      BR XEQERROR;                   << DID NOT BRANCH >>               18254000
      CMPM INSTR3;                                                      18256000
      BE *+2;                                                           18258000
      BR XEQERROR;                   << TOS NOT INSTR3 >>               18260000
                                                                        18262000
      LOAD INSTR4;   << ASL 3 INSTRUCTION >>                            18264000
      LDNI 1;                                                           18266000
      XEQ 1;                                                            18268000
      CMPN 8;                                                           18270000
      BE *+2;                                                           18272000
      BR XEQERROR;                   << RESULT NOT -8 >>                18274000
      CMPM INSTR4;                                                      18276000
      BE *+2;                                                           18278000
      BR XEQERROR;                   << (S-1) NOT INSTR4 >>             18280000
                                                                        18282000
      LOAD INSTR4;  << XEQ COVER TESTS >>                               18284000
      ADDS 4;                                                           18286000
      LDNI 1;                                                           18288000
      XEQ 5;                                                            18290000
      CMPN 8;                                                           18292000
      BE *+2;                                                           18294000
      BR XEQERROR;                   << TOS NOT -8 >>                   18296000
      ADDS 5;                                                           18298000
      LDNI 1;                                                           18300000
      XEQ 10;                                                           18302000
      CMPN 8;                                                           18304000
      BE NEXT;                                                          18306000
      BR XEQERROR);                        << TOS NOT -8 >>             18308000
                                                                        18310000
NEXT:                                                                   18312000
       PUSH(Q);SET(S); <<RESET STACK>>                                  18314000
       IF(LOOPCTN:=LOOPCTN+1)= LOOPNUMBER THEN GO OUT                   18316000
       ELSE GO STAR;                                                    18318000
                                                                        18320000
XEQERROR:                                                               18322000
      NO'ERROR:=FALSE;                                                  18324000
                                                                        18326000
OUT:   LOOPCTN:=0;                                                      18328000
                                                                        18330000
      ASSEMBLE( EXIT 0;   << RETURN >>                                  18332000
                                                                        18334000
INSTR1:   LDNI 1;                                                       18336000
INSTR2:   DADD;                                                         18338000
INSTR3:   BR *+2;                                                       18340000
INSTR4:   ASL 3);                                                       18342000
                                                                        18344000
END;   << TESTXEQ >>                                                    18346000
                                                                        18348000
PROCEDURE NPMI;   << TEST SOME INSTRUCTIONS IN NON-PRVL MODE >>         18350000
BEGIN                                                                   18352000
STAR:                                                                   18354000
      PUSH(STATUS);  ASSEMBLE( TRBC 0);  SET(STATUS);<< MAKE NON-PRVL >>18356000
                                                                        18358000
<< CHECK MOVE:  MOVE 1 WORD FROM LABEL NPM TO DB >>                     18360000
      VAR0:=0;                                                          18362000
      TOS:=6;  ASSEMBLE( LRA NPM);  TOS:=1;                             18364000
NPM:  ASSEMBLE( CON %20000);   << MOVE PB 0 >>                          18366000
      IF <= THEN ASSEMBLE( BR *);            << CC CHANGED - NOT CCG >> 18368000
      IF TOS<>0 THEN ASSEMBLE( BR *);               << CNT NOT 0 >>     18370000
      DEL;  IF TOS<>7 THEN ASSEMBLE( BR *);      << TA IN (S-2) NOT 7>> 18372000
      ASSEMBLE(LOAD NPM);IF TOS<>VAR0 THEN ASSEMBLE(BR*);<<DB+6<>NPM>>  18374000
                                                                        18376000
<< CHECK FCMP >>                                                        18378000
   ASSEMBLE( LDNI 53;  << 0:1 >>                                        18380000
      LDPP F0;                                                          18382000
      LDPP FN1;                                                         18384000
      FCMP;                                                             18386000
      BG *+2;                                                           18388000
      BR *;                                  << NOT CCG >>              18390000
      CMPN 53;                                                          18392000
      BE *+2;                                                           18394000
      BR *);                                 << STACK TROUBLE >>        18396000
                                                                        18398000
<< CHECK ASL >>                                                         18400000
      TOS:=5 & ASL (2);                                                 18402000
      IF TOS<>20 THEN ASSEMBLE( BR *);              << TOS NOT 20 >>    18404000
                                                                        18406000
<< CHECK EXF >>                                                         18408000
      TOS:=%157777.(1:6);                                               18410000
      IF <= THEN ASSEMBLE( BR *);                   << NOT CCG >>       18412000
      IF TOS<>%57 THEN ASSEMBLE( BR *);             << TOS NOT %57 >>   18414000
       TOS:= @GETPRIV;<<LABEL OF GETPRIV>>                              18416000
       ASSEMBLE ( PCAL 0);<<RETURN TO PRIVILEGE MODE >>                 18418000
       PUSH(Q);SET(S); <<RESET STACK>>                                  18420000
       IF(LOOPCTN:=LOOPCTN+1)= LOOPNUMBER THEN GO OUT                   18422000
       ELSE GO STAR;                                                    18424000
                                                                        18426000
OUT:   LOOPCTN:=0;                                                      18428000
                                                                        18430000
ASSEMBLE(    EXIT 0;   << RETURN >>                                     18432000
                                                                        18434000
F0:   CON 0.0;                                                          18436000
FN1:  CON -1.0);                                                        18438000
END;   << NPMI >>                                                       18440000
                                                                        18442000
PROCEDURE TBXCT;   << TBX INSTRUCTION COVER TEST >>                     18444000
BEGIN                                                                   18446000
       MOVE INSTRUCT'NAME:="TBX   ";                                    18448000
       PRINT'NAMES;                                                     18450000
STAR: ASSEMBLE (                                                        18452000
      LDXI 1;   << VAR >>                                               18454000
      LDI 0;   << STEP >>                                               18456000
      LDI 7;   << FINAL >>                                              18458000
      TBX T2;   << *+85 (%125) >>                                       18460000
      BR SKIP1;                      << UNEXPECTED >>                   18462000
                                                                        18464000
T3:   INCX;                                                             18466000
      TBX T4;   << *+170 (%252) >>                                      18468000
      BR SKIP1;                      << UNEXPECTED >>                   18470000
                                                                        18472000
T5:   INCX;                                                             18474000
      TBX T6;   << *+255 (%377) >>                                      18476000
      BR SKIP1;                      << UNEXPECTED >>                   18478000
                                                                        18480000
T7:   LDXA;                                                             18482000
      CMPI 6;                                                           18484000
      BE *+2;                                                           18486000
      BR SKIP1;                      << X NOT 6 >>                      18488000
      BR EXIT;  << RETURN >>                                            18490000
                                                                        18492000
      CON10; CON10; CON10; CON10; CON10; CON10; CON10; CON 0;           18494000
                                                                        18496000
SKIP1:BR TBXERROR;                   << UNEXPECTED >>                   18498000
T2:   INCX;                                                             18500000
      NOP;                                                              18502000
      TBX T3;   << *-85 (%125) >>                                       18504000
      BR TBXERROR;                   << UNEXPECTED >>                   18506000
                                                                        18508000
      CON10; CON10; CON10; CON10; CON10; CON10; CON10; CON10;           18510000
      CON 0,0,0;                                                        18512000
                                                                        18514000
      BR TBXERROR;                   << UNEXPECTED >>                   18516000
T4:   INCX;                                                             18518000
      NOP;                                                              18520000
      TBX T5;   << *-170 (%252) >>                                      18522000
      BR TBXERROR;                   << UNEXPECTED >>                   18524000
                                                                        18526000
      CON10; CON10; CON10; CON10; CON10; CON10; CON10; CON10;           18528000
      CON 0,0,0;                                                        18530000
                                                                        18532000
      BR TBXERROR;                   << UNEXPECTED >>                   18534000
T6:   INCX;                                                             18536000
      NOP;                                                              18538000
      TBX T7);   << *-255 (%377) >>                                     18540000
TBXERROR:                                                               18542000
      NO'ERROR:=FALSE;                  << UNEXPECTED >>                18544000
EXIT:                                                                   18546000
                                                                        18548000
                                                                        18550000
                                                                        18552000
END;   << TBXCT >>                                                      18554000
                                                                        18556000
PROCEDURE TRAP( PARAM);  << USER TRAP PROCEDURE >>                      18558000
  VALUE PARAM;                                                          18560000
    LOGICAL PARAM;                                                      18562000
BEGIN                                                                   18564000
  INTEGER DELTAP=Q-2;                                                   18566000
  IF PARAM <> EXP'TRAP THEN                                             18568000
                        BEGIN                                           18570000
                          NO'ERROR:=FALSE;                              18572000
                        END;                                            18574000
  EXP'TRAP:=0;                                                          18576000
  DELTAP:=DELTAP+1;    << RETURN P+2 >>                                 18578000
END;                                                                    18580000
                                                                        18582000
PROCEDURE USERTRAPS;                                                    18584000
BEGIN                                                                   18586000
                                                                        18588000
       MOVE INSTRUCT'NAME:="TRAP   ";                                   18590000
       PRINT'NAMES;                                                     18592000
       PUSH( STATUS);                                                   18594000
       ASSEMBLE( TSBC 2);   << ENABLE USER TRAPS >>                     18596000
       SET( STATUS);                                                    18598000
                                                                        18600000
    << ARM USER TRAPS PROCEDURE - ALL USER TRAPS ENTER PROCEDURE TRAP >>18602000
       XARITRAP( %37, @TRAP, VAR1, VAR2);                               18604000
       IF <> THEN ASSEMBLE( BR TRAPERROR );                             18606000
STAR:                                                                   18608000
                                                                        18610000
     << TEST 1:  ADDITION OF 2 INTEGERS >>                              18612000
       EXP'TRAP:=%20;                                                   18614000
       TOS:=%77777+1;     << SHOULD TRAP-INTEGER OVERFLOW >>            18616000
       ASSEMBLE( BR TRAPERROR ); << DID NOT TRAP >>                     18618000
                                                                        18620000
     << TEST 2:  FLOATING POINT OVERFLOW >>                             18622000
       EXP'TRAP:=%10;                                                   18624000
       TOS:=%60000;  TOS:=0;  ASSEMBLE( DDUP);                          18626000
       ASSEMBLE( FMPY);   << SHOULD TRAP-FLOATING OVERFLOW >>           18628000
       ASSEMBLE( BR TRAPERROR ); << DID NOT TRAP >>                     18630000
                                                                        18632000
     << TEST 3:  FLOATING POINT UNDERFLOW(EXPONENT) >>                  18634000
       EXP'TRAP:=4;                                                     18636000
       TOS:=%20000;  TOS:=0;  ASSEMBLE( DDUP);                          18638000
       ASSEMBLE( FMPY);   << SHOULD TRAP-FLOATING UNDERFLOW >>          18640000
       ASSEMBLE( BR TRAPERROR ); << DID NOT TRAP >>                     18642000
                                                                        18644000
     << TEST 4:  INTEGER DIVIDE BY 0 >>                                 18646000
       EXP'TRAP:=2;                                                     18648000
       TOS:=1/0;          << SHOULD TRAP-DIVIDE BY 0 >>                 18650000
       ASSEMBLE( BR TRAPERROR ); << DID NOT TRAP >>                     18652000
                                                                        18654000
     << TEST 5:  FLOATING POINT DIVIDE BY 0.0 >>                        18656000
       EXP'TRAP:=1;                                                     18658000
       TOS:=1.5/0.0;      << SHOULD TRAP-DIVIDE BY 0.0 >>               18660000
       ASSEMBLE( BR TRAPERROR ); << DID NOT TRAP >>                     18662000
                                                                        18664000
     << TEST 6:  FLOATING POINT UNDERFLOW(FRACTIONAL) >>                18666000
       EXP'TRAP:=4;                                                     18668000
       TOS:=%20000;  TOS:=0;   << 1*2**(-128) >>                        18670000
       TOS:=%120000;  TOS:=0;  << -1*2**(-128) >>                       18672000
       ASSEMBLE( FMPY);   << SHOULD TRAP-FLOATING UNDERFLOW >>          18674000
                                                                        18676000
       PUSH(Q);SET(S); <<RESET STACK>>                                  18678000
       IF(LOOPCTN:=LOOPCTN+1)= LOOPNUMBER THEN GO OUT                   18680000
       ELSE GO STAR;                                                    18682000
                                                                        18684000
TRAPERROR:                                                              18686000
       NO'ERROR:=FALSE; << DID NOT TRAP >>                              18688000
                                                                        18690000
OUT:   LOOPCTN:=0;                                                      18692000
                                                                        18694000
       XARITRAP( 0, 0, VAR1, VAR2);    << DISARM USER TRAP PROCEDURE >> 18696000
END;                                                                    18698000
                                                                        18700000
                                                                        18702000
                                                                        18704000
                                                                        18706000
      PROCEDURE RCLKSCLKTST;                                            18708000
      BEGIN                                                             18710000
   <<THIS STEP TESTS THE READ AND STORE PROCESS CLOCK INSTRUCTION >>    18712000
                                                                        18714000
       MOVE INSTRUCT'NAME:="RCLK  ";                                    18716000
       PRINT'NAMES;                                                     18718000
STAR: VAR0:=%177777;                                                    18720000
      TOS:=VAR0;                                                        18722000
      ASSEMBLE (SCLK);                                                  18724000
      ASSEMBLE (RCLK);<<SORE AND READ THE PLCK>>                        18726000
      IF TOS <> %177777 THEN ASSEMBLE (BR RCLKERROR);<<RCLK OR SCLK     18728000
                                                   FAILED>>             18730000
      VAR0:=%125252;                                                    18732000
      TOS:=VAR0;                                                        18734000
      ASSEMBLE (SCLK);                                                  18736000
      ASSEMBLE (RCLK); <<TRY AGAIN WITH %125252>>                       18738000
      IF TOS <> %125252 THEN ASSEMBLE( BR RCLKERROR);<<FAILED >>        18740000
                                                                        18742000
                                                                        18744000
      VAR0:=%052525;                                                    18746000
      TOS:=VAR0;                                                        18748000
      ASSEMBLE( SCLK);                                                  18750000
      ASSEMBLE( RCLK);<<AGAIN WITH %052525>>                            18752000
      IF TOS <> %052525 THEN ASSEMBLE ( BR RCLKERROR);<<FAILED>>        18754000
                                                                        18756000
                                                                        18758000
      VAR0:=0;                                                          18760000
      TOS:=VAR0;                                                        18762000
      ASSEMBLE (SCLK);                                                  18764000
      ASSEMBLE (RCLK);                                                  18766000
      IF TOS <> 0 THEN ASSEMBLE ( BR RCLKERROR);<<FAILED>>              18768000
                                                                        18770000
                                                                        18772000
                                                                        18774000
                                                                        18776000
       PUSH(Q);SET(S); <<RESET STACK>>                                  18778000
       IF(LOOPCTN:=LOOPCTN+1)= LOOPNUMBER THEN GO OUT                   18780000
       ELSE GO STAR;                                                    18782000
                                                                        18784000
RCLKERROR:                                                              18786000
      NO'ERROR:=FALSE;                                                  18788000
                                                                        18790000
OUT:   LOOPCTN:=0;                                                      18792000
                                                                        18794000
       END; <<RCLKSCLKTST>>                                             18796000
                                                                        18798000
                                                                        18800000
      PROCEDURE COVERMABSTST;                                           18802000
      BEGIN                                                             18804000
      << THIS STEP USES THE MABS INSTRUCTION TO TEST THE SDEC FUNCTION  18806000
      OF THE MOVE INSTRUCTIONS AND ALSO TO CHECK OTHER MOVE             18808000
      FUNCTIONS >>                                                      18810000
                                                                        18812000
      DEFINE MABS1=ASSEMBLE ( CON %020111)#,                            18814000
             MABS2=ASSEMBLE ( CON %020112)#,                            18816000
             MABS3=ASSEMBLE ( CON %020113)#,                            18818000
             MABS4=ASSEMBLE ( CON %020114)#,                            18820000
             MABS5=ASSEMBLE ( CON %020115)#,                            18822000
             MABS6=ASSEMBLE ( CON %020116)#,                            18824000
             MABS7=ASSEMBLE ( CON %020117)#;                            18826000
                                                                        18828000
      << MABS1-MABS7 ARE MOVE USING ABSOLUTE ADDRESS INSTRUCTIONS       18830000
         WITH SDECS OF 1 TO 7  >>                                       18832000
                                                                        18834000
       MOVE INSTRUCT'NAME:="MOVE  ";                                    18836000
       PRINT'NAMES;                                                     18838000
      STAR:VAR0:=%10; <<COUNT>>                                         18840000
           VAR1:=0;   <<SOURCE ADDRESS>>                                18842000
           VAR2:=0;   <<SOURCE BANK>>                                   18844000
           VAR3:=%1000; <<TARGET ADDRESS>>                              18846000
           VAR4:=0;   <<TARGET BANK >>                                  18848000
                                                                        18850000
      << TEST MOVE USING A SDEC OF 7 >>                                 18852000
                                                                        18854000
      TOS:= -1;                                                         18856000
      TOS:=-2;                                                          18858000
      TOS:=-3;<<-2,-3 ARE EXTRA PARAMETERS>>                            18860000
                                                                        18862000
      TOS:=VAR4; <<TARGET BANK >>                                       18864000
      TOS:=VAR3; <<TARGET ADDRESS>>                                     18866000
      TOS:=VAR2; <<SOURCE BANK>>                                        18868000
      TOS:=VAR1; <<SOURCE ADDRESS>>                                     18870000
      TOS:=VAR0; <<COUNT >>                                             18872000
      MABS7;<<MOVE WITH SDEC OF 7>>                                     18874000
                                                                        18876000
      IF TOS <> -1 THEN ASSEMBLE ( BR MOVEERROR);                       18878000
      <<SDEC OF 7 FAILED TO POP STACK OF 7 PARAMETERS >>                18880000
                                                                        18882000
                                                                        18884000
      << TEST MOVE USING A SDEC OF 6 >>                                 18886000
                                                                        18888000
      TOS:= -1;                                                         18890000
      TOS:=-2;<<-2 IS A EXTRA PARAMTER>>                                18892000
                                                                        18894000
      TOS:=VAR4; <<TARGET BANK >>                                       18896000
      TOS:=VAR3; <<TARGET ADDRESS>>                                     18898000
      TOS:=VAR2; <<SOURCE BANK>>                                        18900000
      TOS:=VAR1; <<SOURCE ADDRESS>>                                     18902000
      TOS:=VAR0; <<COUNT >>                                             18904000
      MABS6;<<MOVE WITH SDEC OF 6>>                                     18906000
                                                                        18908000
      IF TOS <> -1 THEN ASSEMBLE ( BR MOVEERROR);                       18910000
      <<SDEC OF 6 FAILED TO POP STACK OF 6 PARAMETERS >>                18912000
                                                                        18914000
                                                                        18916000
                                                                        18918000
      << TEST MOVE USING A SDEC OF 5 >>                                 18920000
                                                                        18922000
      TOS:= -1;                                                         18924000
                                                                        18926000
      TOS:=VAR4; <<TARGET BANK >>                                       18928000
      TOS:=VAR3; <<TARGET ADDRESS>>                                     18930000
      TOS:=VAR2; <<SOURCE BANK>>                                        18932000
      TOS:=VAR1; <<SOURCE ADDRESS>>                                     18934000
      TOS:=VAR0; <<COUNT >>                                             18936000
      MABS5;<<MOVE WITH SDEC OF 5>>                                     18938000
                                                                        18940000
      IF TOS <> -1 THEN ASSEMBLE ( BR MOVEERROR);                       18942000
      <<SDEC OF 5 FAILED TO POP STACK OF 5 PARAMETERS >>                18944000
                                                                        18946000
                                                                        18948000
                                                                        18950000
      << TEST MOVE USING A SDEC OF 4 >>                                 18952000
                                                                        18954000
      TOS:= -1;                                                         18956000
                                                                        18958000
      TOS:=VAR4; <<TARGET BANK >>                                       18960000
      TOS:=VAR3; <<TARGET ADDRESS>>                                     18962000
      TOS:=VAR2; <<SOURCE BANK>>                                        18964000
      TOS:=VAR1; <<SOURCE ADDRESS>>                                     18966000
      TOS:=VAR0; <<COUNT >>                                             18968000
      MABS4;<<MOVE WITH SDEC OF 4>>                                     18970000
                                                                        18972000
      IF TOS <> 0 THEN ASSEMBLE ( BR MOVEERROR);                        18974000
      << TOS NOT TARGET BANK >>                                         18976000
      IF TOS <> -1 THEN ASSEMBLE ( BR MOVEERROR);                       18978000
      << SDEC OF 4 FAILED TO POP STACK OF 4 PARAMETERS >>               18980000
                                                                        18982000
                                                                        18984000
                                                                        18986000
      << TEST MOVE USING A SDEC OF 3 >>                                 18988000
                                                                        18990000
      TOS:= -1;                                                         18992000
                                                                        18994000
      TOS:=VAR4; <<TARGET BANK >>                                       18996000
      TOS:=VAR3; <<TARGET ADDRESS>>                                     18998000
      TOS:=VAR2; <<SOURCE BANK>>                                        19000000
      TOS:=VAR1; <<SOURCE ADDRESS>>                                     19002000
      TOS:=VAR0; <<COUNT >>                                             19004000
      MABS3;<<MOVE WITH SDEC OF 3>>                                     19006000
                                                                        19008000
      IF TOS <> %1010 THEN ASSEMBLE ( BR MOVEERROR);                    19010000
      << TOS NOT TARGET +COUNT >>                                       19012000
      IF TOS <> 0 THEN ASSEMBLE ( BR MOVEERROR);                        19014000
      << TOS NOT TARGET BANK >>                                         19016000
      IF TOS <> -1 THEN ASSEMBLE ( BR MOVEERROR);                       19018000
      << SDEC OF 3 FAILED TO POP STACK OF 3 PARAMETERS >>               19020000
                                                                        19022000
                                                                        19024000
      << TEST MOVE USING A SDEC OF 2 >>                                 19026000
                                                                        19028000
      TOS:= -1;                                                         19030000
                                                                        19032000
      TOS:=VAR4; <<TARGET BANK >>                                       19034000
      TOS:=VAR3; <<TARGET ADDRESS>>                                     19036000
      TOS:=VAR2; <<SOURCE BANK>>                                        19038000
      TOS:=VAR1; <<SOURCE ADDRESS>>                                     19040000
      TOS:=VAR0; <<COUNT >>                                             19042000
      MABS2;<<MOVE WITH SDEC OF 2>>                                     19044000
                                                                        19046000
                                                                        19048000
      IF TOS <> 0 THEN ASSEMBLE ( BR MOVEERROR);                        19050000
      << TOS NOT SOURCE BANK >>                                         19052000
      IF TOS <> %1010 THEN ASSEMBLE ( BR MOVEERROR);                    19054000
      <<TOS NOT TARGET + COUNT >>                                       19056000
      IF TOS <> 0 THEN ASSEMBLE ( BR MOVEERROR);                        19058000
      << TOS NOT TARGET BANK >>                                         19060000
      IF TOS <> -1 THEN ASSEMBLE ( BR MOVEERROR);                       19062000
      << SDEC OF 2 FAILED TO POP STACK OF 2 PARAMETERS >>               19064000
                                                                        19066000
                                                                        19068000
                                                                        19070000
      << TEST MOVE USING A SDEC OF 1 >>                                 19072000
                                                                        19074000
      TOS:= -1;                                                         19076000
                                                                        19078000
      TOS:=VAR4; <<TARGET BANK >>                                       19080000
      TOS:=VAR3; <<TARGET ADDRESS>>                                     19082000
      TOS:=VAR2; <<SOURCE BANK>>                                        19084000
      TOS:=VAR1; <<SOURCE ADDRESS>>                                     19086000
      TOS:=VAR0; <<COUNT >>                                             19088000
      MABS1;<<MOVE WITH SDEC OF 1>>                                     19090000
                                                                        19092000
                                                                        19094000
      IF TOS <> %10 THEN ASSEMBLE ( BR MOVEERROR);                      19096000
      << TOS NOT SOURCE + COUNT >>                                      19098000
      IF TOS <> 0 THEN ASSEMBLE ( BR MOVEERROR);                        19100000
      << TOS NOT SOURCE BANK >>                                         19102000
      IF TOS <> %1010 THEN ASSEMBLE ( BR MOVEERROR);                    19104000
      << TOS NOT TARGET + COUNT>>                                       19106000
      IF TOS <> 0 THEN ASSEMBLE ( BR MOVEERROR);                        19108000
      <<TOS NOT TARGET BANK>>                                           19110000
      IF TOS <> -1 THEN ASSEMBLE ( BR MOVEERROR);                       19112000
      << SDEC OF 1 FAILED TO POP STACK OF 1 PARAMETER>>                 19114000
                                                                        19116000
                                                                        19118000
                                                                        19120000
       << MOVE %100 WORDS TO ADDRESS %1000>>                            19122000
      VAR0:=%100;<<CHANGE COUNT TO %100>>                               19124000
      TOS:=VAR4; <<TARGET BANK >>                                       19126000
      TOS:=VAR3; <<TARGET ADDRESS>>                                     19128000
      TOS:=VAR2; <<SOURCE BANK>>                                        19130000
      TOS:=VAR1; <<SOURCE ADDRESS>>                                     19132000
      TOS:=VAR0; <<COUNT >>                                             19134000
      MABS5;<<MOVE WITH SDEC OF 5>>                                     19136000
                                                                        19138000
      VAR6:=%1000;                                                      19140000
      VAR7:=%0;                                                         19142000
                                                                        19144000
      DO                                                                19146000
      BEGIN                                                             19148000
      IF ABSOLUTE(VAR6) <> ABSOLUTE (VAR7) THEN ASSEMBLE (BR MOVEERROR);19150000
      <<CHECK DATA AT ADDR %1000>>                                      19152000
      VAR6:=VAR6+1;                                                     19154000
      VAR7:=VAR7+1;                                                     19156000
      END                                                               19158000
      UNTIL VAR6=%1077;                                                 19160000
                                                                        19162000
      <<MOVE %100 WORDS FROM ADDR 0 TO ADDR %1000>>                     19164000
                                                                        19166000
      TOS:=0;<<TARGET BANK>>                                            19168000
      TOS:=%1000;<<TARGET ADDRESS>>                                     19170000
      TOS:=0;<<SOURCE BANK>>                                            19172000
      TOS:=%0;<<SOURCE ADDRESS>>                                        19174000
      TOS:=%100;<<COUNT>>                                               19176000
      MABS5;<<MOVE>>                                                    19178000
      << TEST MABS WITH TARGET AND SOURCE ONE ADDRESS OFF >>            19180000
                                                                        19182000
                                                                        19184000
      TOS:=0;<<TARGET BANK>>                                            19186000
      TOS:=%1000;<<TARGET ADDRESS>>                                     19188000
      TOS:=0; <<SOURCE BANK>>                                           19190000
      TOS:=%1001;<<SOURCE ADDRESS>>                                     19192000
      TOS:=%100;<<COUNT>>                                               19194000
                                                                        19196000
      MABS5;<<MOVE>>                                                    19198000
                                                                        19200000
      VAR6:=%1000;<<TARGET>>                                            19202000
      VAR7:=1;<<ADDRESS OF CORRECT DATA>>                              19204000
      DO                                                                19206000
      BEGIN                                                             19208000
      IF ABSOLUTE(VAR6) <> ABSOLUTE(VAR7) THEN ASSEMBLE ( BR MOVEERROR);19210000
      <<DATA NOT CORRECT AFTER MOVE >>                                  19212000
      VAR6:=VAR6+1;                                                     19214000
      VAR7:=VAR7+1;                                                     19216000
      END                                                               19218000
      UNTIL VAR6=%1077;                                                 19220000
                                                                        19222000
      <<CHECK MABS WITH TARGET AND SOURCE ADDRESS THE SAME>>            19224000
                                                                        19226000
      TOS:=0;<<TARGET BANK>>                                            19228000
      TOS:=%1000;<<TARGET ADDRESS>>                                     19230000
      TOS:=0;<<SOURCE BANK>>                                            19232000
      TOS:=%0;<<SOURCE ADDRESS>>                                        19234000
      TOS:=%100;<<COUNT>>                                               19236000
      MABS5;<<MOVE>>                                                    19238000
      <<MOVE %100 WORDS FROM ADDR 0 TO ADDR %1000>>                     19240000
                                                                        19242000
                                                                        19244000
      VAR6:=%1000;                                                      19246000
      VAR7:=0;                                                          19248000
                                                                        19250000
                                                                        19252000
      TOS:=0;<<TARGET BANK>>                                            19254000
      TOS:=%1000;<<TARGET ADDRRSS>>                                     19256000
      TOS:=0;<<SOURCE BANK>>                                            19258000
      TOS:=%1000;<<SOURCE ADDRESS>>                                     19260000
      TOS:=%100;<<COUNT>>                                               19262000
                                                                        19264000
      MABS5;<<MOVE>>                                                    19266000
                                                                        19268000
      DO                                                                19270000
      BEGIN                                                             19272000
      IF ABSOLUTE(VAR6) <> ABSOLUTE(VAR7) THEN ASSEMBLE ( BR MOVEERROR);19274000
      << DATA ERRTOE IN MOVE >>                                         19276000
      VAR6:=VAR6+1;                                                     19278000
      VAR7:=VAR7+1;                                                     19280000
      END                                                               19282000
      UNTIL VAR6=%1077;                                                 19284000
                                                                        19286000
                                                                        19288000
       PUSH(Q);SET(S); <<RESET STACK>>                                  19290000
       IF(LOOPCTN:=LOOPCTN+1)= LOOPNUMBER THEN GO OUT                   19292000
       ELSE GO STAR;                                                    19294000
                                                                        19296000
MOVEERROR:                                                              19298000
      NO'ERROR:=FALSE;                                                  19300000
                                                                        19302000
OUT:   LOOPCTN:=0;X:=STEPNO;                                            19304000
       STEPNO:=STEPNO+1;                                                19306000
                                                                        19308000
      END; <<COVERMABSTST>>                                             19310000
PROCEDURE TESTBANK (BANK,TESTADDR,REGION);                              19312000
VALUE BANK,TESTADDR,REGION;                                             19314000
LOGICAL BANK,TESTADDR,REGION;                                           19316000
BEGIN                                                                   19318000
  LOGICAL CHECKVAL,                                                     19320000
          SAVEVAL;                                                      19322000
                                                                        19324000
  <<Send out bank number, region>>                                      19326000
                                                                        19328000
  <<Test bank>>                                                         19330000
  ASSEMBLE(PSDB);    <<Psudo-disable: make sure no memory moves>>       19332000
  TOS := BANK;       <<Save current word at test site>>                 19334000
  TOS := TESTADDR;                                                      19336000
  ASSEMBLE(LSEA);                                                       19338000
  SAVEVAL := TOS;                                                       19340000
  TOS := TESTVAL;    <<Store and retrive testvalue>>                    19342000
  ASSEMBLE (SSEA);                                                      19344000
  ASSEMBLE (LSEA);                                                      19346000
  CHECKVAL := TOS;                                                      19348000
  TOS := SAVEVAL;    <<Restore original word at test site>>             19350000
  ASSEMBLE (SSEA);                                                      19352000
  ASSEMBLE (PSEB);   <<Psudo-enable>>                                   19354000
  DDEL;                                                                 19356000
                                                                        19358000
<<Now check vailidity of store>>                                        19360000
  IF CHECKVAL <> TESTVAL THEN NO'ERROR := FALSE;                        19362000
END;                                                                    19364000
PROCEDURE TESTMACHINE;                                                  19366000
                                                                        19368000
COMMENT: This procedure will get system information from sysglob,       19370000
         print it, and based on that information will test the          19372000
         machine;                                                       19374000
                                                                        19376000
BEGIN                                                                   19378000
                                                                        19380000
  <<Local variables>>                                                   19382000
  LOGICAL LASTBANK,                                                     19384000
          LASTOFFSET,                                                   19386000
          UPDATELVL,                                                    19388000
          VERSIONLVL,                                                   19390000
          OLDDB,                                                        19392000
          BANK;                                                         19394000
  INTEGER MEMSIZE;                                                      19396000
                                                                        19398000
  <<Gather system data from sysglob>>                                   19400000
  OLDDB := SETSYSDB;                                                    19402000
  LASTBANK := SYSLASTBANK;                                              19404000
  LASTOFFSET := SYSLASTOFFSET;                                          19406000
  RESETDB (OLDDB);                                                      19408000
                                                                        19410000
  <<Determine and send out memory configuration>>                       19412000
  MEMSIZE := INTEGER(LASTBANK) * 64 +                                   19414000
             INTEGER ((DOUBLE(LASTOFFSET) + 1D)/1024D);                 19416000
  IF NOT NO'ERROR THEN                                                  19418000
    BEGIN                                                               19420000
      NO'ERROR := TRUE;                                                 19422000
      PRINT'MESSAGE(LMESSAGE,0,%202);                                   19424000
      PRINT'MESSAGE(ERMSG,-23,%203);                                    19426000
    END                                                                 19428000
    ELSE                                                                19430000
      PRINT'MESSAGE(LMESSAGE,0,%203);                                   19432000
  MOVE LMESSAGE := "MEMORY BANK TEST     ";                             19434000
  MOVE ERMSG := "*** MEMORY FAILURE     ";                              19436000
  PRINT'MESSAGE(LMESSAGE,-20,%60);                                      19438000
  LOCATION := 0;                                                        19440000
  <<Now test all banks>>                                                19442000
  MOVE INSTRUCT'NAME := "0     ";                                       19444000
  PRINT'NAMES;                                                          19446000
  TESTBANK (0,TESTADDRFIRST,UPPER);                                     19448000
  TESTBANK (0,TESTADDRL,LOWER);                                         19450000
  BANK := 1;                                                            19452000
  WHILE BANK < LASTBANK DO                                              19454000
    BEGIN                                                               19456000
      ASCII(BANK,8,DATA);                                               19458000
      IF BANK < 8 THEN                                                  19460000
        MOVE INSTRUCT'NAME := DATA(5),(1)                               19462000
        ELSE                                                            19464000
          MOVE INSTRUCT'NAME := DATA(4),(2);                            19466000
      PRINT'NAMES;                                                      19468000
      TESTBANK (BANK, TESTADDRU, UPPER);                                19470000
      TESTBANK (BANK, TESTADDRL, LOWER);                                19472000
      BANK := BANK + 1;                                                 19474000
    END;                                                                19476000
  ASCII(BANK,8,DATA);                                                   19478000
  IF BANK < 8 THEN                                                      19480000
    MOVE INSTRUCT'NAME := DATA(5),(1)                                   19482000
    ELSE                                                                19484000
      MOVE INSTRUCT'NAME := DATA(4),(2);                                19486000
  PRINT'NAMES;                                                          19488000
  TESTBANK (LASTBANK,TESTADDRU,UPPER);                                  19490000
  TESTBANK (LASTBANK,TESTADDRLAST,LOWER);                               19492000
END;                                                                    19494000
PROCEDURE MESSAGE( MSG, PARM1, PARM2);                                  19496000
   VALUE MSG, PARM1, PARM2;                                             19498000
   INTEGER MSG, PARM1;                                                  19500000
   DOUBLE PARM2;                                                        19502000
   OPTION VARIABLE;                                                     19504000
BEGIN                                                                   19506000
   BYTE ARRAY BBUF(0:71);                                               19508000
   BYTE ARRAY BBUF2(0:11);                                              19510000
   INTEGER LEN;                                                         19512000
                                                                        19514000
   IF MSG = 0 THEN                                                      19516000
      BEGIN                                                             19518000
      MOVE INSTRUCT'NAME := "      ";                                   19520000
      ASCII( PARM1, 10, INSTRUCT'NAME);                                 19522000
      PRINT'NAMES;                                                      19524000
      RETURN;                                                           19526000
      END;                                                              19528000
   IF MSG = 1 THEN                                                      19530000
      BEGIN                                                             19532000
      MOVE BBUF := "*** OUT OF DISC SPACE";                             19534000
      PRINT'MESSAGE(BBUF,0,%202);                                       19536000
      PRINT'MESSAGE(BBUF,-21,%60);                                      19538000
      LOCATION := 0;                                                    19540000
      RETURN;                                                           19542000
      END;                                                              19544000
   IF MSG = 2 OR MSG = 3 THEN                                           19546000
      BEGIN                                                             19548000
      MOVE BBUF := "*** DISC FAILURE AT SECTOR %",2;                    19550000
      LEN := DASCII( PARM2, 8, BBUF2);                                  19552000
      MOVE * := BBUF2(11-LEN),(LEN),2;                                  19554000
      LEN := TOS-@BBUF;                                                 19556000
      PRINT'MESSAGE(BBUF,0,%202);                                       19558000
      PRINT'MESSAGE(BBUF,-LEN,%60);                                     19560000
      LOCATION := 0;                                                    19562000
      END;                                                              19564000
END;                                                                    19566000
INTEGER PROCEDURE DISCIO( LDEV, FUNC, BUF, CNT, ADR);                   19568000
   VALUE LDEV, FUNC, CNT, ADR;                                          19570000
   INTEGER LDEV, FUNC, CNT;                                             19572000
   ARRAY BUF;                                                           19574000
   DOUBLE ADR;                                                          19576000
BEGIN                                                                   19578000
   DOUBLE STATUS;                                                       19580000
   INTEGER                                                              19582000
      STATUS1 = STATUS,                                                 19584000
      STATUS2 = STATUS+1,                                               19586000
      ADR1    = ADR,                                                    19588000
      ADR2    = ADR+1;                                                  19590000
                                                                        19592000
   STATUS := ATTACHIO(LDEV,0,0,@BUF,FUNC,CNT,ADR1,ADR2,1);              19594000
   IF STATUS1.(8:8) <> 1 THEN                                           19596000
      BEGIN                                                             19598000
      MESSAGE( DISCERR, STATUS1, ADR);                                  19600000
      DISCIO := STATUS1;                                                19602000
      END;                                                              19604000
END;                                                                    19606000
PROCEDURE Test'Disc (ldev, disc'address);                      <<DFS00>>19608000
   VALUE ldev, disc'address;                                   <<DFS00>>19610000
   INTEGER ldev;                                               <<DFS00>>19612000
   DOUBLE disc'address;                                        <<DFS00>>19614000
BEGIN                                                                   19616000
   EQUATE NR'PATTERNS = 7;                                              19618000
   ARRAY PATTERNS(0:6) = PB :=                                          19620000
      %133333, %155555, %166666, %111111, %123456, 0, -1;               19622000
   INTEGER PATTERN, CNT, ERR;                                           19624000
   ARRAY BUF1(*) = LBUF;                                                19626000
   ARRAY BUF2(*) = LBUF(128);                                           19628000
   ARRAY BUF3(*) = LBUF(256);                                           19630000
   ARRAY BUF4(*) = LBUF(384);                                           19632000
   DOUBLE ARRAY DBUF1(*) = BUF1;                                        19634000
   DOUBLE ARRAY DBUF2(*) = BUF2;                                        19636000
   DOUBLE ARRAY DBUF3(*) = BUF3;                                        19638000
   DOUBLE ARRAY DBUF4(*) = BUF4;                                        19640000
   BYTE ARRAY BBUF1(*) = BUF1;                                          19642000
   BYTE ARRAY BBUF2(*) = BUF2;                                          19644000
   BYTE ARRAY BBUF3(*) = BUF3;                                          19646000
   BYTE ARRAY BBUF4(*) = BUF4;                                          19648000
                                                                        19650000
   <<    ADDRESS TEST     >>                                            19652000
                                                                        19654000
      Dbuf1 := disc'address;                                   <<DFS00>>19656000
      MOVE DBUF1(1) := DBUF1,(126);                                     19658000
      err := Discio (ldev, write, dbuf1, 128, disc'address);   <<DFS00>>19660000
      IF ERR <> 0 THEN RETURN;                                          19662000
                                                                        19664000
      err := Discio (ldev, read, dbuf3, 128, disc'address);    <<DFS00>>19666000
      IF ERR <> 0 THEN RETURN;                                          19668000
      IF BBUF1 <> BBUF3,(256) THEN                                      19670000
         BEGIN                                                          19672000
         Message (comparerr,,disc'address);                    <<DFS00>>19674000
         RETURN;                                                        19676000
         END;                                                           19678000
                                                                        19680000
   <<     DATA TEST     >>                                              19682000
                                                                        19684000
   PATTERN := 0;                                                        19686000
   WHILE PATTERN <> NR'PATTERNS DO                                      19688000
      BEGIN                                                             19690000
      BUF1 := PATTERNS(PATTERN);                                        19692000
      MOVE BUF1(1) := BUF1,(127);                                       19694000
         err := Discio (ldev, write, buf1, 128, disc'address); <<DFS00>>19696000
         IF ERR <> 0 THEN RETURN;                                       19698000
                                                                        19700000
         err := Discio (ldev, read, buf2, 128, disc'address);  <<DFS00>>19702000
         IF ERR <> 0 THEN RETURN;                                       19704000
         IF BBUF1 <> BBUF2,(256) THEN                                   19706000
            BEGIN                                                       19708000
            Message (comparerr,,disc'address);                 <<DFS00>>19710000
            RETURN;                                                     19712000
            END;                                                        19714000
                                                                        19716000
      PATTERN := PATTERN+1;                                             19718000
      END;                                                              19720000
END;                                                                    19722000
DOUBLE PROCEDURE Get'A'Beginning'Sector (ldev, head,           <<DFS00>>19724000
                       sectors'per'track, tracks'per'cylinder,          19726000
                       disc'size);                                      19728000
    VALUE ldev, head, sectors'per'track, tracks'per'cylinder,           19730000
          disc'size;                                                    19732000
    INTEGER ldev, head, tracks'per'cylinder;                            19734000
    LOGICAL sectors'per'track;                                          19736000
    DOUBLE disc'size;                                                   19738000
    OPTION PRIVILEGED;                                                  19740000
                                                                        19742000
<<===========================================================           19744000
                                                                        19746000
   This procedure tries to find a free sector on the specified          19748000
   ldev in the first half of the disc.  If one is not found,            19750000
   a message is printed.                                                19752000
                                                                        19754000
   Parameters:                                                          19756000
      ldev - logical device number of the disc.                         19758000
      head - desired head number                                        19760000
      sectors'per'track - for this particular type of disc              19762000
      tracks'per'cylinder - for this particular type of disc            19764000
      disc'size - size of disc in sectors.                              19766000
                                                                        19768000
   Returns:                                                             19770000
      sector address of sector, if found. If one is not                 19772000
      found, the zero.                                                  19774000
                                                                        19776000
   Calls:                                                               19778000
      Print                                                             19780000
      Ascii                                                             19782000
      Quit                                                              19784000
      Get'Specific'Disc'Space                                           19786000
      Get'Disc'Space                                                    19788000
                                                                        19790000
   Fixid:                                                               19792000
      The fix id on the procedure header applied to the                 19794000
      whole procedure.                                                  19796000
                                                                        19798000
===========================================================>>           19800000
                                                                        19802000
BEGIN                                                                   19804000
                                                                        19806000
   DOUBLE disc'address;                                                 19808000
   DOUBLE disc'address'limit;                                           19810000
   DOUBLE first'disc'address;                                           19812000
   INTEGER track;                                                       19814000
   INTEGER status;                                                      19816000
                                                                        19818000
   ARRAY l'buffer (0:39);                                               19820000
   BYTE ARRAY buffer (*) = l'buffer;                                    19822000
   INTEGER len;                                                         19824000
   BYTE POINTER bps0 = S-0;                                             19826000
                                                                        19828000
   DOUBLE return'value = Get'A'Beginning'Sector;                        19830000
                                                                        19832000
   INTRINSIC Print, Ascii, Quit;                                        19834000
                                                                        19836000
   << - - - - - - - - - >>                                              19838000
                                                                        19840000
   << Get address of first sector on track (head) >>                    19842000
                                                                        19844000
   disc'address := DOUBLE (head) * DOUBLE (sectors'per'track);          19846000
                                                                        19848000
   << Get sector address of middle of disc, we don't want to            19850000
      try a sector after this.                               >>         19852000
                                                                        19854000
   disc'address'limit := disc'size / 2D;                                19856000
                                                                        19858000
   << Get a sector and return it, this should be the first free         19860000
      sector on the disc.  We will then move disc address up until      19862000
      it is greater that this address, this will save a lot of          19864000
      search time.                                              >>      19866000
                                                                        19868000
   status := Get'Disc'Space (ldev, 1D, first'disc'address);             19870000
   IF status <> 0 THEN GOTO No'Space;                                   19872000
   Return'Disc'Space (ldev, first'disc'address, 1D);                    19874000
                                                                        19876000
   WHILE disc'address <= disc'address'limit AND                         19878000
         disc'address < first'disc'address DO                           19880000
      disc'address := disc'address + (DOUBLE (sectors'per'track) *      19882000
                      DOUBLE (tracks'per'cylinder));                    19884000
                                                                        19886000
   << pre-set Get'Specific'Disc'Space status to not found >>            19888000
                                                                        19890000
   status := 1;                                                         19892000
                                                                        19894000
   << Search for a sector on this head >>                               19896000
                                                                        19898000
   WHILE disc'address <= disc'address'limit                             19900000
                     AND                                                19902000
              status <> 0                                               19904000
   DO                                                                   19906000
      BEGIN  << Look for a sector >>                                    19908000
                                                                        19910000
         status := Get'Specific'Disc'Space (ldev, disc'address, 1D);    19912000
                                                                        19914000
         CASE status OF                                                 19916000
            BEGIN                                                       19918000
                                                                        19920000
          <<0>> BEGIN  << Got the sector >>                             19922000
                                                                        19924000
                   return'value := disc'address;                        19926000
                                                                        19928000
                END;   << Got the sector >>                             19930000
                                                                        19932000
          <<1>> BEGIN  << Not available >>                              19934000
                                                                        19936000
                   << Try the next sector on the track (head) >>        19938000
                                                                        19940000
                   disc'address := disc'address + 1D;                   19942000
                                                                        19944000
                   << See if we have gone past the end of the           19946000
                      track, if so, go to the next cylinder   >>        19948000
                                                                        19950000
                   track := disc'address // sectors'per'track;          19952000
                   IF head <> (track MOD tracks'per'cylinder) THEN      19954000
                      disc'address := disc'address +                    19956000
                                   (DOUBLE (sectors'per'track) *        19958000
                                     DOUBLE (tracks'per'cylinder - 1)); 19960000
                                                                        19962000
                END;   << Not Available >>                              19964000
                                                                        19966000
          <<2>> BEGIN  << I/O error >>                                  19968000
                                                                        19970000
                   MOVE buffer := "Get'Specific'Disc'Space error #2",2; 19972000
                   len := -(TOS - @buffer);                             19974000
                   Print (l'buffer, len, 0);                            19976000
                   Quit (1);                                            19978000
                                                                        19980000
                END;   << I/O error >>                                  19982000
                                                                        19984000
          <<3>> BEGIN  << Allocation disabled >>                        19986000
                                                                        19988000
                   MOVE buffer := "Get'Specific'Disc'Space error #3",2; 19990000
                   len := -(TOS - @buffer);                             19992000
                   Print (l'buffer, len, 0);                            19994000
                   Quit (1);                                            19996000
                                                                        19998000
                END;   << Allocation disabled >>                        20000000
                                                                        20002000
            END;  << CASE status OF >>                                  20004000
                                                                        20006000
      END;   << Look for a sector >>                                    20008000
                                                                        20010000
                                                                        20012000
   IF status <> 0 THEN                                                  20014000
      BEGIN  << Did not find a free sector >>                           20016000
                                                                        20018000
         No'Space:                                                      20020000
                                                                        20022000
          Print (l'buffer, 0, 0);                              <<03725>>20024000
         MOVE buffer := "Did not find a free disc sector on ", 2;       20026000
         MOVE * := "the first half of ldev ", 2;                        20028000
         TOS := TOS + Ascii (ldev, 10, bps0);                           20030000
         MOVE * := " to test head ",2;                                  20032000
         TOS := TOS + Ascii (head, 10, bps0);                           20034000
         MOVE * := "!", 2;                                              20036000
         len := -(TOS - @buffer);                                       20038000
         Print (l'buffer, len, 0);                                      20040000
                                                                        20042000
         return'value := 0D;  << Indicate that we did not find one >>   20044000
                                                                        20046000
      END;   << Did not find a free sector >>                           20048000
                                                                        20050000
END;  << Get'A'Beginning'Sector >>                                      20052000
DOUBLE PROCEDURE Get'An'Ending'Sector (ldev, head,             <<DFS00>>20054000
                       sectors'per'track, tracks'per'cylinder,          20056000
                       disc'size);                                      20058000
    VALUE ldev, head, sectors'per'track, tracks'per'cylinder,           20060000
          disc'size;                                                    20062000
    INTEGER ldev, head, tracks'per'cylinder;                            20064000
    LOGICAL sectors'per'track;                                          20066000
    DOUBLE disc'size;                                                   20068000
    OPTION PRIVILEGED;                                                  20070000
                                                                        20072000
<<===========================================================           20074000
                                                                        20076000
   This procedure tries to find a free sector on the specified          20078000
   ldev in the second half of the disc.  If one is not found,           20080000
   a message is printed.                                                20082000
                                                                        20084000
   Parameters:                                                          20086000
      ldev - logical device number of the disc.                         20088000
      head - desired head number                                        20090000
      sectors'per'track - for this particular type of disc              20092000
      tracks'per'cylinder - for this particular disc                    20094000
      disc'size - size of disc in sectors.                              20096000
                                                                        20098000
   Returns:                                                             20100000
      sector address of sector, if found. If one is not                 20102000
      found, the zero.                                                  20104000
                                                                        20106000
   Calls:                                                               20108000
      Print                                                             20110000
      Ascii                                                             20112000
      Quit                                                              20114000
      Get'Specific'Disc'Space                                           20116000
                                                                        20118000
   Fixid:                                                               20120000
      The fix id on the procedure header applies to the                 20122000
      entire procedure.                                                 20124000
                                                                        20126000
===========================================================>>           20128000
BEGIN                                                                   20130000
                                                                        20132000
   DOUBLE disc'address;                                                 20134000
   DOUBLE disc'address'limit;                                           20136000
   INTEGER track;                                                       20138000
   INTEGER last'cylinder;                                               20140000
   INTEGER status;                                                      20142000
                                                                        20144000
   ARRAY l'buffer (0:39);                                               20146000
   BYTE ARRAY buffer (*) = l'buffer;                                    20148000
   INTEGER len;                                                         20150000
   BYTE POINTER bps0 = S-0;                                             20152000
                                                                        20154000
   DOUBLE return'value = Get'An'Ending'Sector;                          20156000
                                                                        20158000
   INTRINSIC Print, Ascii, Quit;                                        20160000
                                                                        20162000
   << - - - - - - - - - >>                                              20164000
                                                                        20166000
   << Get address of last sector on track (head) >>                     20168000
                                                                        20170000
   TOS := disc'size / DOUBLE (sectors'per'track);                       20172000
   last'cylinder := INTEGER (TOS / DOUBLE (tracks'per'cylinder)) - 1;   20174000
   disc'address := (DOUBLE (last'cylinder) *                            20176000
                   DOUBLE (tracks'per'cylinder) *                       20178000
                   DOUBLE (sectors'per'track)) +                        20180000
                   DOUBLE (head * INTEGER(sectors'per'track));          20182000
   IF disc'address > disc'size THEN Quit (2001);                        20184000
                                                                        20186000
   << Get sector address of middle of disc, we don't want to            20188000
      try a sector before this.                               >>        20190000
                                                                        20192000
   disc'address'limit := disc'size / 2D;                                20194000
                                                                        20196000
   << pre-set Get'Specific'Disc'Space status to not found >>            20198000
                                                                        20200000
   status := 1;                                                         20202000
                                                                        20204000
   << Search for a sector on this head >>                               20206000
                                                                        20208000
   WHILE disc'address >= disc'address'limit                             20210000
                     AND                                                20212000
              status <> 0                                               20214000
   DO                                                                   20216000
      BEGIN  << Look for a sector >>                                    20218000
                                                                        20220000
         status := Get'Specific'Disc'Space (ldev, disc'address, 1D);    20222000
                                                                        20224000
         CASE status OF                                                 20226000
            BEGIN                                                       20228000
                                                                        20230000
          <<0>> BEGIN  << Got the sector >>                             20232000
                                                                        20234000
                   return'value := disc'address;                        20236000
                                                                        20238000
                END;   << Got the sector >>                             20240000
                                                                        20242000
          <<1>> BEGIN  << Not available >>                              20244000
                                                                        20246000
                   << Try the previous sector on the track (head) >>    20248000
                                                                        20250000
                   disc'address := disc'address - 1D;                   20252000
                                                                        20254000
                   << See if we have gone past the beginning of the     20256000
                      track, if so, go to the next cylinder        >>   20258000
                                                                        20260000
                   track := disc'address // sectors'per'track;          20262000
                   IF head <> (track MOD tracks'per'cylinder) THEN      20264000
                      disc'address := disc'address -                    20266000
                                   (DOUBLE (sectors'per'track) *        20268000
                                    DOUBLE (tracks'per'cylinder - 1));  20270000
                                                                        20272000
                END;   << Not Available >>                              20274000
                                                                        20276000
          <<2>> BEGIN  << I/O error >>                                  20278000
                                                                        20280000
                   MOVE buffer := "Get'Specific'Disc'Space error #2",2; 20282000
                   len := -(TOS - @buffer);                             20284000
                   Print (l'buffer, len, 0);                            20286000
                   Quit (1);                                            20288000
                                                                        20290000
                END;   << I/O error >>                                  20292000
                                                                        20294000
          <<3>> BEGIN  << Allocation disabled >>                        20296000
                                                                        20298000
                   MOVE buffer := "Get'Specific'Disc'Space error #3",2; 20300000
                   len := -(TOS - @buffer);                             20302000
                   Print (l'buffer, len, 0);                            20304000
                   Quit (1);                                            20306000
                                                                        20308000
                END;   << Allocation disabled >>                        20310000
                                                                        20312000
            END;  << CASE status OF >>                                  20314000
                                                                        20316000
      END;   << Look for a sector >>                                    20318000
                                                                        20320000
                                                                        20322000
   IF status <> 0 THEN                                                  20324000
      BEGIN  << Did not find a free sector >>                           20326000
                                                                        20328000
          Print (l'buffer, 0, 0);                              <<03725>>20330000
         MOVE buffer := "Did not find a free disc sector on ", 2;       20332000
         MOVE * := "the last half of ldev ", 2;                         20334000
         TOS := TOS + Ascii (ldev, 10, bps0);                           20336000
         MOVE * := " to test head ",2;                                  20338000
         TOS := TOS + Ascii (head, 10, bps0);                           20340000
         MOVE * := "!", 2;                                              20342000
         len := -(TOS - @buffer);                                       20344000
         Print (l'buffer, len, 0);                                      20346000
                                                                        20348000
         return'value := 0D;  << Indicate that we did not find one >>   20350000
                                                                        20352000
      END;   << Did not find a free sector >>                           20354000
                                                                        20356000
END;  << Get'An'Ending'Sector >>                                        20358000
PROCEDURE Check'Disc (ldev);                                   <<DFS00>>20360000
   VALUE ldev;                                                          20362000
   INTEGER ldev;                                                        20364000
   OPTION PRIVILEGED;                                                   20366000
                                                                        20368000
<<===========================================================           20370000
                                                                        20372000
   This procedure allocates a sector at the beginning and               20374000
   end of the disc ldev, calles Test'Disc to test the sector            20376000
   and then returns the sector to the free space pool. If unable        20378000
   to get a sector for a head, the procedures that find the             20380000
   sectors will print a message.                                        20382000
                                                                        20384000
   Parameters:                                                          20386000
      ldev - logical device number of the disc.                         20388000
                                                                        20390000
   Calls:                                                               20392000
      Get'Disc'Info                                                     20394000
      Ascii                                                             20396000
      Print                                                             20398000
      Quit                                                              20400000
      Get'A'Beginning'Sector                                            20402000
      Get'An'Ending'Sector                                              20404000
      Test'Disc                                                         20406000
      Return'Disc'Space                                                 20408000
                                                                        20410000
===========================================================>>           20412000
                                                                        20414000
BEGIN                                                                   20416000
                                                                        20418000
   DOUBLE disc'size;                                                    20420000
   INTEGER sectors'per'track;                                           20422000
   INTEGER tracks'per'cylinder;                                         20424000
   INTEGER head;                                                        20426000
   DOUBLE sector'address;                                               20428000
   LOGICAL stat;                                                        20430000
                                                                        20432000
   ARRAY l'buffer (0:49);                                               20434000
   BYTE ARRAY buffer (*) = l'buffer;                                    20436000
   INTEGER len;                                                         20438000
   BYTE POINTER bps0 = S-0;                                             20440000
                                                                        20442000
   INTRINSIC Print, Ascii, Quit;                                        20444000
                                                                        20446000
                                                                        20448000
   << - - - - - - - - - - >>                                            20450000
                                                                        20452000
   << Get the sectors per track and tracks per cylinder (which is       20454000
      the number of heads.                                       >>     20456000
                                                                        20458000
   stat := Get'Disc'Info (ldev,  ,  ,  ,  ,  , disc'size,  ,  ,  ,  ,   20460000
                          ,  ,  , sectors'per'track,  ,  ,              20462000
                          tracks'per'cylinder);                         20464000
                                                                        20466000
   IF NOT stat THEN                                                     20468000
      BEGIN  << Get'Disc'Info error >>                                  20470000
                                                                        20472000
         MOVE buffer := "Get'Disc'Info error %", 2;                     20474000
         Ascii (stat, 8, bps0);                                         20476000
         TOS := TOS + 6;                                                20478000
         MOVE * := ", ldev = ", 2;                                      20480000
         TOS := TOS + Ascii (ldev, 10, bps0);                           20482000
         len := -(TOS - @buffer);                                       20484000
         Print (l'buffer, len, 0);                                      20486000
         Quit (1);                                                      20488000
                                                                        20490000
      END;   << Get'Disc'Info error >>                                  20492000
                                                                        20494000
                                                                        20496000
   << Test each head with a sector near the beginning and the           20498000
      end of the disc.                                        >>        20500000
                                                                        20502000
   head := 0;                                                           20504000
                                                                        20506000
   WHILE head < tracks'per'cylinder DO                                  20508000
      BEGIN  << Test each head >>                                       20510000
                                                                        20512000
         << Check a sector on this head near the beginning of the       20514000
            disc.                                                >>     20516000
                                                                        20518000
         sector'address := Get'A'Beginning'Sector (ldev, head,          20520000
                           sectors'per'track, tracks'per'cylinder,      20522000
                           disc'size);                                  20524000
                                                                        20526000
         IF sector'address <> 0D THEN                                   20528000
            BEGIN  << Got a sector in the first half >>                 20530000
                                                                        20532000
               Test'Disc (ldev, sector'address);                        20534000
                                                                        20536000
               Return'Disc'Space (ldev, sector'address, 1D);            20538000
                                                                        20540000
            END;   << Got a sector in the first half >>                 20542000
                                                                        20544000
                                                                        20546000
         << Check a sector on this head near the end of the             20548000
            disc.                                                >>     20550000
                                                                        20552000
         sector'address := Get'An'Ending'Sector (ldev, head,            20554000
                           sectors'per'track, tracks'per'cylinder,      20556000
                           disc'size);                                  20558000
                                                                        20560000
         IF sector'address <> 0D THEN                                   20562000
            BEGIN  << Got a sector in the second half >>                20564000
                                                                        20566000
               Test'Disc (ldev, sector'address);                        20568000
                                                                        20570000
               Return'Disc'Space (ldev, sector'address, 1D);            20572000
                                                                        20574000
            END;   << Got a sector in the second half >>                20576000
                                                                        20578000
         head := head + 1;                                              20580000
                                                                        20582000
      END;   << Test each head >>                                       20584000
                                                                        20586000
END;  << Check'Disc >>                                                  20588000
PROCEDURE GET'DISC'LDEVS;                                               20590000
BEGIN                                                                   20592000
   INTEGER ARRAY VTAB(*) = LBUF;                                        20594000
   INTEGER                                                              20596000
      I,                                                                20598000
      VTABSIZE;                                                         20600000
   INTEGER POINTER PNTR;                                                20602000
   DEFINE                                                               20604000
      TYPE      =    (13:3)#,                                           20606000
      LDEV      =    (0:8) #;                                           20608000
                                                                        20610000
   MOVEFROMDSEG; << ** SUBROUTINE MFDS ** >>                            20612000
                                                                        20614000
   I := GETSIR( VTABSIR);                                               20616000
   MFDS( VTAB, VTABDST, 0, 1);                                          20618000
   VTABSIZE := (VTAB.NRENTS+1)*VTAB.ENTSIZE;                            20620000
   MFDS( VTAB, VTABDST, 0, VTABSIZE);                                   20622000
   RELSIR( VTABSIR, I);                                                 20624000
                                                                        20626000
   @PNTR := @VTAB(VTAB.ENTSIZE);                                        20628000
   WHILE @PNTR < @VTAB(VTABSIZE) DO                                     20630000
      BEGIN                                                             20632000
      IF PNTR <> 0 THEN                                                 20634000
         BEGIN   << ENTRY IN USE >>                                     20636000
         IF PNTR(12).TYPE = 0 THEN                                      20638000
            BEGIN  << SYSTEM VOLUME >>                                  20640000
            DISC'LDEVS(NR'SYS'DISCS) := PNTR(12).LDEV;                  20642000
            NR'SYS'DISCS := NR'SYS'DISCS+1;                             20644000
            END;                                                        20646000
         END;                                                           20648000
      @PNTR := @PNTR(VTAB.ENTSIZE);                                     20650000
      END;                                                              20652000
END;                                                                    20654000
                                                                        20656000
PROCEDURE TESTSYSDISCS;                                                 20658000
BEGIN                                                                   20660000
   INTEGER                                                              20662000
      LDEV,                                                             20664000
      CNT,                                                              20666000
      ERR,                                                              20668000
      SECT'TRK,                                                         20670000
      NR'HEADS,                                                         20672000
      SIRRTN,                                                           20674000
      I,                                                                20676000
      J;                                                                20678000
                                                                        20680000
   CNT := 0;                                                            20682000
   WHILE CNT <> NR'SYS'DISCS DO                                         20684000
      BEGIN                                                             20686000
      LDEV := DISC'LDEVS(CNT);                                          20688000
      MESSAGE( 0, LDEV);                                                20690000
                                                                        20692000
      Check'Disc (ldev);                                       <<DFS00>>20694000
NEXT'DISC:                                                              20696000
      CNT := CNT+1;                                                     20698000
      END;                                                              20700000
END;                                                                    20702000
                                                                        20704000
<< SECTION ENTRY POINT >>                                               20706000
      FNUM := FOPEN(OUTPUTFILE,5,1);                                    20708000
      IF <> THEN                                                        20710000
        BEGIN                                                           20712000
          FCHECK(FNUM,ERRORNUM);                                        20714000
          IF ERRORNUM = 52 THEN                                         20716000
            BEGIN                                                       20718000
              FNUM := FOPEN(OUTPUTFILE,4,4,40,,,,3,,1000D);             20720000
              IF <> THEN                                                20722000
                BEGIN                                                   20724000
                  PRINTFILEINFO(FNUM);                                  20726000
                  TERMINATE;                                            20728000
                END;                                                    20730000
            END                                                         20732000
            ELSE                                                        20734000
              BEGIN                                                     20736000
                PRINTFILEINFO(FNUM);                                    20738000
                TERMINATE;                                              20740000
              END;                                                      20742000
        END;                                                            20744000
      MOVE HEADER(VUUFF'COL) := OFFICIAL'VUUFF;                <<04287>>20746000
      PRINT'MESSAGE(HEADER,HEADER'SIZE,%60);                   <<04287>>20748000
      DATE'LINE(BMESSAGE);                                              20750000
                                                               <<03727>>20752000
      ASSEMBLE(  << TEST SYSTEM COMPATABILITY VS. PROGRAM >>   <<03727>>20754000
      PCN;       << * * * * * * * * * * * * * * * * * * * >>   <<03727>>20756000
      CMPI 3;    <<  SERIES 40/44 >>                           <<03727>>20758000
      BE START;                                                <<03727>>20760000
      PCN;                                                     <<03727>>20762000
      CMPI 4;    <<  SERIES 64 >>                              <<03727>>20764000
      BE START);                                               <<03727>>20766000
GO NOT'GUS;                                                    <<03727>>20768000
START:                                                                  20770000
                                                                        20772000
      PRINT'MESSAGE(LMESSAGE,-28,%60);                                  20774000
       STEPNO:=STEPNO+1;                                                20776000
                                                                        20778000
       PUSH( STATUS );                                                  20780000
       TOS.(2:1) := 0;       << TURN TRAPS OFF >>                       20782000
       SET( STATUS );                                                   20784000
                                                                        20786000
                                                                        20788000
   << CREATEDST;>><<SET UP THE DATA SEGMENT TABLE>>                     20790000
                                                                        20792000
                                                                        20794000
<<        START OF SECTION 1  TESTS                    >>               20796000
                                                                        20798000
      STACKOP;          << STACKOP INSTRUCTION TESTS >>                 20800000
      SOI;              << MORE STACKOP INSTRUCTION TESTS >>            20802000
      LIAM;             << LOAD - ALL ADDRESSING MODES >>               20804000
      MRTESTS;          << MORE MEMORY REFERENCE TESTS >>               20806000
      BIAM;             << BR INSTRUCTION - ALL ADDRESSING MODES >>     20808000
      TESTLDBSTB;       << TEST LDB & STB INSTRUCTIONS >>               20810000
      TESTLDDSTD;       << TEST LDD & STD INSTRUCTIONS >>               20812000
      IBT;              << INDIRECT BRANCH TESTS >>                     20814000
      CTLDI;            << COVER TESTS: LDI & LDNI >>                   20816000
      CTLDPP;           << COVER TESTS:  LDPP & LDPN >>                 20818000
      CTLS;             << COVER TESTS:  LOAD & STOR INSTRUCTIONS >>    20820000
      CTBCC;            << COVER TEST:  BCC INSTRUCTION >>              20822000
      CTDABZ;           << COVER TEST:  DABZ INSTRUCTION >>             20824000
      TESTCPRB;         << TEST CPRB INSTRUCTION >>                     20826000
      TESTNOP;          << TEST NOP INSTRUCTION >>                      20828000
                                                                        20830000
<<            START OF SECTION 2  TESTS                >>               20832000
                                                                        20834000
                                                                        20836000
      GRPX;       << TEST GROUP X: FIELD INSTRUCTIONS >>                20838000
      GRPW;       << TEST GROUP W: BIT TEST INSTRUCTIONS >>             20840000
      GRPI;       << TEST GROUP I: DOUBLE INTEGER INSTRUCTIONS >>       20842000
      GRPF;       << TEST GROUP F: LOOP CONTROL BRANCH INSTRUCTIONS >>  20844000
      GRPT;       << TEST GROUP T: SINGLE WORD SHIFT INSTRUCTIONS >>    20846000
      GRPU;       << TEST GROUP U: DOUBLE WORD SHIFT INSTRUCTIONS >>    20848000
      GRPV;       << TEST GROUP V: TRIPLE WORD SHIFT INSTRUCTIONS >>    20850000
      DMULDDIVTST;<< DOUBLE WORD MULTIPY AND DIVIDE >>                  20852000
      QASLQASRTST;<<FOUR WORD SHIFT TESTS>>                             20854000
      GRPJ;       << TEST GROUP J: FLOATING POINT INSTRUCTIONS >>       20856000
      TESTMOVE;   << TEST MOVE INSTRUCTION >>                           20858000
      TESTMVB;    << TEST MVB INSTRUCTION >>                            20860000
      TESTMVBW;   << TEST MVBW INSTRUCTION >>                           20862000
      TESTSCW;    << TEST SCW INSTRUCTION >>                            20864000
      TESTSCU;    << TEST SCU INSTRUCTION >>                            20866000
      TESTCMPB;   << TEST CMPB INSTRUCTION >>                           20868000
<<    GRPFF; >>   << TEST GROUP FF: LIST SEARCH INSTRUCTION >>          20870000
<<    GRPGG;  >>  << TEST GROUP GG: LOAD LABEL INSTRUCTIONS >>          20872000
<<    GRPHH; >>   << TEST GROUP HH: PRIVILEGED MOVE INSTUUCTIONS >>     20874000
      TESTXEQ;    << TEST XEQ INSTRUCTION >>                            20876000
      NPMI;       << SOME INSTRUCTIONS IN NON-PRVL MODE >>              20878000
L1:   TBXCT;      << COVER TEST:   TBX INSTRUCTION >>                   20880000
                                                                        20882000
                                                                        20884000
                                                                        20886000
      TESTMACHINE;<< TEST MEMORY IN EACH BANK >>                        20888000
      << TEST SYSTEM DISCS >>                                           20890000
      LOCATION := 0;                                                    20892000
      NO'ERROR := TRUE;                                                 20894000
      MOVE LMESSAGE := "SYSTEM DOMAIN DISC TEST ";                      20896000
      PRINT'MESSAGE(LMESSAGE,0,%203); << RESET CL >>                    20898000
      PRINT'MESSAGE(LMESSAGE,-23,%60);                                  20900000
      GET'DISC'LDEVS;                                                   20902000
      TESTSYSDISCS;                                                     20904000
                                                                        20906000
      FCLOSE(FNUM,1,0);                                                 20908000
      IF <> THEN PRINTFILEINFO(FNUM);                                   20910000
      GO PROG'EXIT;                                            <<03727>>20912000
                                                                        20914000
                                                                        20916000
      << ERROR --- SYSTEM INCOMPATIBILITY WITH PROGRAM >>      <<03727>>20918000
      << * * * * * * * * * * * * * * * * * * * * * * * >>      <<03727>>20920000
NOT'GUS:                                                       <<03727>>20922000
      MOVE HEADER := 27("  ");                                 <<03727>>20924000
      MOVE HEADER :=                                           <<03727>>20926000
"THIS PROGRAM EXECUTES ONLY ON HEWLETT-PACKARD ";              <<03727>>20928000
      PRINT'MESSAGE(HEADER,23,%60);                            <<03727>>20930000
      MOVE HEADER :=                                           <<03727>>20932000
"COMPUTER SYSTEMS SERIES 40, SERIES 44 AND SERIES 64.";        <<03727>>20934000
      PRINT'MESSAGE(HEADER,26,%60);                            <<03727>>20936000
                                                                        20938000
                                                                        20940000
PROG'EXIT:                                                     <<03727>>20942000
END.   << SECTION 2 >>                                                  20944000
