PL/M-86 COMPILER    CODEMACRO SUBROUTINE MODULE                                  10/5/81    PAGE   1


ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE CMSUBR
OBJECT MODULE PLACED IN CMSUBR.OBJ
COMPILER INVOKED BY:  :F0: CMSUBR.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100) XREF



              $title ('CODEMACRO SUBROUTINE MODULE')
   1          cmsubr:
              do;

              /*

                modified  4/7/81   R. Silberstein
                modified  4/13/81  R. Silberstein
                modified  5/5/81   R. Silberstein
                modified  9/2/81   R. Silberstein

              */

              /*
                      This is the module to

                        1)  test if a set of operands matches a given instruction

                           and

                        2) produce output code for matched instruction

                      The module interfaces the CODEOUTPUT module to
                      physically send code bytes to the HEX output file.
              */

              $include (:f1:macro.lit)
          =   $nolist
              $include (:f1:equals.lit)
          =   $nolist
              $include (:f1:cmacd.lit)
          =   $nolist
              $include (:f1:outp.lit)
          =   $nolist
              $include (:f1:scan.ext)
          =   $nolist
              $include (:f1:subr1.ext)
          =   $nolist
              $INCLUDE (:F1:SUBR2.EXT)
          =   $nolist
              $include (:f1:outp.ext)
          =   $nolist
              $include (:f1:ermod.ext)
          =   $nolist
              $include (:f1:cmsubr.x86)
          =   $nolist
PL/M-86 COMPILER    CODEMACRO SUBROUTINE MODULE                                  10/5/81    PAGE   2


              $eject
  90   1      dcl                   /* global variables */
              bytevar  based   macroptr byte, /* variables within codemacros */
              addrvar based   macroptr addr,
              emitbyte(80)    byte,          /* buffer of output codebytes */
              emitindex       byte,          /* index of "emitbyte" */
              bitcomtab(2)    byte     data  /* legal commands within "DBIT" */
                (mnumberbits,mformalbits);
PL/M-86 COMPILER    CODEMACRO SUBROUTINE MODULE                                  10/5/81    PAGE   3


              $eject

              /********** MICHELLANEOUS SUBROUTINES: **********/

  91   1      clearcmindex: proc public;
  92   2        emitindex=0;
  93   2      end clearcmindex;

  94   1      emit: proc public;   /* emit codebytes for an instruction */
  95   2        dcl i byte;
  96   2        i=0ffh;
  97   2        do while (i:=i+1) < emitindex;
  98   3          call emitcodebyte(emitbyte(i),CSdata);
  99   3        end$while;
 100   2      end emit;

 101   1      emitdummies: proc public;  /* emit dummy (NO-OP-) bytes if error */
 102   2        dcl (i,j) byte,nodum(4) byte data(2,5,6,8);
 103   2        j=nooper;
 104   2        if j>3 then j=3;
 106   2        i=0ffh;
 107   2        do while (i:=i+1) < nodum(j);
 108   3          call emitcodebyte(90h,CSdata);  /* 90H = NOP */
 109   3        end$while;
 110   2      end emitdummies;

 111   1      emitsinglebyte: proc(ch); /* fill local emitbuffer with a new byte */
 112   2        dcl ch byte;
 113   2        if noerror then$do
 115   3          emitbyte(emitindex)=ch;
 116   3          emitindex=emitindex+1;
 117   3        end$if;
 118   2      end emitsinglebyte;

 119   1      emitsingleword: proc (var); /* fill 2 new bytes into emitbuffer */
 120   2        dcl var addr, byt1 byte at(.var), byt2 byte at(.var+1);
 121   2        call emitsinglebyte(byt1);
 122   2        call emitsinglebyte(byt2);
 123   2      end emitsingleword;

 124   1      incrmacroptr: proc;
 125   2        macroptr=macroptr+1;
 126   2      end incrmacroptr;

 127   1      getoperadr: proc address;
 128   2        dcl pt address;
 129   2        pt=.operands(bytevar);
 130   2        call incrmacroptr;
 131   2        return pt;
 132   2      end getoperadr;

                         /* recognize codemacro command type */
 133   1      commandtype: proc(comno,lg,pt) byte public;
 134   2        dcl (comno,lg,i) byte,pt address,ch based pt(1) byte;
 135   2        i=0ffh;
 136   2        do while (i:=i+1) < lg;
 137   3          if comno=ch(i) then$do call incrmacroptr; return i; end$if;
PL/M-86 COMPILER    CODEMACRO SUBROUTINE MODULE                                  10/5/81    PAGE   4


                end$while;
 143   2        return lg;
 144   2      end commandtype;
PL/M-86 COMPILER    CODEMACRO SUBROUTINE MODULE                                  10/5/81    PAGE   5


              $eject

              /******* CODEMACRO COMMAND SUBROUTINES: ********/


 145   1      mDBNrout: proc public;
 146   2        call emitsinglebyte(bytevar);
 147   2        call incrmacroptr;
 148   2      end mDBNrout;

 149   1      mDBFrout: proc public;
 150   2        dcl pt address,opr based pt operandstruc;
 151   2        pt=getoperadr;
 152   2        call emitsinglebyte(opr.offset);
 153   2      end mDBFrout;

 154   1      mDWNrout: proc public;
 155   2        call emitsingleword(addrvar);
 156   2        call incrmacroptr;
 157   2        call incrmacroptr;
 158   2      end mDWNrout;

 159   1      mDWFrout: proc public;
 160   2        dcl pt address,opr based pt operandstruc;
 161   2        pt=getoperadr;
 162   2        call emitsingleword(opr.offset);
 163   2      end mDWFrout;

 164   1      mDDFrout: proc public;
 165   2        dcl pt address,opr based pt operandstruc;
 166   2        pt=getoperadr;
 167   2        if (opr.sflag and segmbit) = 0 then call errmsg(misssegminfo);
 169   2        call emitsingleword(opr.offset);
 170   2        call emitsingleword(opr.segment);
 171   2      end mDDFrout;

 172   1      mRELBrout: proc public;
 173   2        dcl pt address,opr based pt operandstruc,displ addr;
 174   2        pt=getoperadr;
 175   2        displ=opr.offset-cip-2;
 176   2        if (opr.segment <> csegvalue) or (typecalc(displ)=wrd) then$do
 178   3          call errmsg(laboutofrange);
 179   3        end$if;
 180   2        call emitsinglebyte(displ);
 181   2        IF ABSADDR (0) = SPACE THEN$DO
 183   3          CALL HEX2OUT (OPR.OFFSET, .ABSADDR);
 184   3        END$IF;
 185   2      end mRELBrout;

 186   1      mRELWrout: proc public;
 187   2        dcl pt address,opr based pt operandstruc;
 188   2        pt=getoperadr;
 189   2        if opr.segment <> csegvalue then call errmsg(laboutofrange);
 191   2        call emitsingleword(opr.offset-cip-3);
 192   2        IF ABSADDR (0) = SPACE THEN$DO
 194   3          CALL HEX2OUT (OPR.OFFSET, .ABSADDR);
 195   3        END$IF;
PL/M-86 COMPILER    CODEMACRO SUBROUTINE MODULE                                  10/5/81    PAGE   6


 196   2      end mRELWrout;

 197   1      mNOSEGFIXrout: proc public;
 198   2        dcl (segr,flag,segt) byte,pt address,opr based pt operandstruc;
 199   2        segr=bytevar;
 200   2        call incrmacroptr;
 201   2        pt=getoperadr;
 202   2        if (opr.baseindex and nooverridebit) = 0 then$do
 204   3          flag=opr.sflag;
 205   3          segt=shr(flag,segtypecount) and 3;
 206   3          noerror=(segt=segr);
 207   3        end$if;
 208   2      end mNOSEGFIXrout;

 209   1      mSEGFIXrout: proc public;
 210   2        dcl pt address,opr based pt operandstruc,(segr,override,sflag) byte;
 211   2        DSovertest: proc byte;
 212   3          segr=shr(opr.baseindex,baseregcount) and 1;
 213   3          return (((sflag and bregbit) <> 0) and (segr=1));   /*  1 = BP */
 214   3        end DSovertest;

 215   2        pt=getoperadr;
 216   2        sflag=opr.sflag;
 217   2        if (opr.baseindex and nooverridebit) = 0 then$do
 219   3          segr=shr(sflag,segtypecount) and 3;
 220   3          do case segr;
 221   4            do; override=true; segr=ESover; end;            /* ES */
 225   4            do; override=true; segr=CSover; end;            /* CS */
 229   4            do; override=not DSovertest; segr=SSover; end;  /* SS */
 233   4            do; override=DSovertest; segr=DSover; end;      /* DS */
 237   4          end$case;
 238   3          if override then call emitsinglebyte(segr);
                end$if;
 241   2      end mSEGFIXrout;

 242   1      MODRM: proc (regfield,pt);
 243   2        dcl pt address,opr based pt operandstruc,
                    (regfield,modfield,rmfield,dispflag,stype,sflag,segr) byte,
                    BASEIND BYTE,
                    offset addr,
                    displow byte at(.offset),disphigh byte at (.offset+1);

 244   2        disptype: proc byte;
 245   3          if segr=rcs then return 2;  /* disp always 2 for variable in CS */
 247   3          if offset = 0 then return 0;
 249   3          return typecalc(offset);
 250   3        end disptype;

 251   2        indextype: proc byte;
 252   3          if (sflag and iregbit) <> 0 then$do
 254   4            if (sflag and bregbit) <> 0 then return 0;
 256   4            return 1;
 257   4          end$if;
 258   3          return 2;
 259   3        end indextype;

 260   2        offset=opr.offset;    /* pick up operand attributes */
PL/M-86 COMPILER    CODEMACRO SUBROUTINE MODULE                                  10/5/81    PAGE   7


 261   2        stype=opr.stype;
 262   2        sflag=opr.sflag;
 263   2        segr=shr(sflag,segtypecount) and 3;
 264   2        BASEIND = OPR.BASEINDEX AND (BASEREGBIT OR INDEXREGBIT);

 265   2        if stype=reg then$do
 267   3          rmfield=offset;
 268   3          modfield=11b;
 269   3          dispflag=0;
 270   3        else$do
 272   3          if (sflag and (iregbit or bregbit)) = 0 then$do
 274   4            rmfield=110b;
 275   4            modfield=0;
 276   4            dispflag=2;
 277   4          else$do
 279   4            dispflag=disptype;   /* get no of DISP bytes */
 280   4            modfield=dispflag;
 281   4            do case indextype;

                      /* both base- and index-reg */
 282   5              RMFIELD = BASEIND AND (INDEXREGBIT OR BASEREGBIT);

                      /* index reg only */
 283   5              RMFIELD = 100B OR (BASEIND AND INDEXREGBIT);

 284   5              do;     /* base reg only */
 285   6              IF (BASEIND AND BASEREGBIT) > 0 THEN$DO
 287   7                rmfield=110b;
                      /* mod=00 and r/m=110B is a special case */
 288   7                if dispflag=0 then$do
 290   8                  dispflag,modfield=1;
 291   8                end$if;
                      else$do
 294   7                rmfield=111b;
 295   7              end$if;
 296   6              end;
 297   5            end$case;
 298   4          end$if;
 299   3        end$if;
 300   2        regfield=shl(regfield,3) and 38h;
 301   2        modfield=shl(modfield,6) and 0c0h;
 302   2        call emitsinglebyte(regfield or modfield or rmfield);
 303   2        if dispflag > 0 then$do
 305   3          call emitsinglebyte(displow);
 306   3          if dispflag=2 then call emitsinglebyte(disphigh);
                end$if;
 309   2      end MODRM;

 310   1      mMODRM1rout: proc public;
 311   2        dcl regfield byte;
 312   2        regfield=bytevar;
 313   2        call incrmacroptr;
 314   2        call MODRM(regfield,getoperadr);
 315   2      end mMODRM1rout;

 316   1      mMODRM2rout: proc public;
 317   2        dcl regfield byte,pt address,opr based pt operandstruc;
PL/M-86 COMPILER    CODEMACRO SUBROUTINE MODULE                                  10/5/81    PAGE   8


 318   2        pt=getoperadr;
 319   2        regfield=opr.offset;
 320   2        call MODRM(regfield,getoperadr);
 321   2      end mMODRM2rout;

 322   1      mDBITrout: proc public;
 323   2        dcl (result,crbit) byte,bittab(8) byte data(1,2,4,8,16,32,64,128);

 324   2        join: proc(numb,nobit,noshift);
 325   3          dcl (numb,nobit,noshift) byte;
 326   3          if noshift > 0 then numb=shr(numb,noshift);
 328   3          if nobit < 8 then numb=shl(numb,8-nobit);
 330   3          do while (crbit <> 0ffh) and (nobit > 0);
 331   4            if (numb and 80h) <> 0 then result=result or bittab(crbit);
 333   4            crbit=crbit-1;
 334   4            nobit=nobit-1;
 335   4            numb=shl(numb,1);
 336   4          end$while;
 337   3        end join;

 338   2        NUMBERBITSrout: proc;
 339   3          dcl nobit byte;
 340   3          nobit=bytevar;
 341   3          call incrmacroptr;
 342   3          call join(bytevar,nobit,0);
 343   3          call incrmacroptr;
 344   3        end NUMBERBITSrout;

 345   2        FORMBITSrout: proc;
 346   3          dcl (nobit,numb) byte,pt address,opr based pt operandstruc;
 347   3          nobit=bytevar;
 348   3          call incrmacroptr;
 349   3          pt=getoperadr;
 350   3          numb=opr.offset;
 351   3          call join(numb,nobit,bytevar);
 352   3          call incrmacroptr;
 353   3        end FORMBITSrout;

 354   2        result=0;
 355   2        crbit=7;    /* current bit position */
 356   2        do while bytevar <> mendbit;  /* do until ENDBIT command */
 357   3          do case commandtype(bytevar,length(bitcomtab),.bitcomtab);
 358   4            call NUMBERBITSrout;
 359   4            call FORMBITSrout;
 360   4            do; end;
 362   4          end$case;
 363   3        end$while;
 364   2        call incrmacroptr;  /* skip ENDBIT command */
 365   2        call emitsinglebyte(result);
 366   2      end mDBITrout;

PL/M-86 COMPILER    CODEMACRO SUBROUTINE MODULE                                  10/5/81    PAGE   9


              $eject

              /********* ROUTINES TO MATCH OPERANDS TO INSTRUCTION ********/

              /* test user operand against codemacro parameter */
 367   1      matchsingleop: proc(opno) byte;
 368   2        dcl (match,specletter,modletter,range,rangetype) byte,
                    (rangev1,rangev2,opno) byte,
                    pt address, oper based pt operandstruc;


 369   2        rangetest: proc byte;   /* perform rangetest */
 370   3          dcl opervalue byte;
 371   3          rangev1=bytevar;
 372   3          call incrmacroptr;
 373   3          if range=doublerange then$do
 375   4            rangev2=bytevar;
 376   4            call incrmacroptr;
 377   4          end$if;
 378   3          opervalue=oper.offset;
 379   3          if range=doublerange then$do
 381   4            return ((opervalue>=rangev1) and (opervalue<=rangev2));
 382   4          else$do
 384   4            return (opervalue=rangev1);
 385   4          end$if;
 386   3        end rangetest;

 387   2        modlettertest: proc byte;
 388   3          dcl numb addr,(styp,modbyt) byte;
 389   3          styp=oper.stype;
 390   3          if styp=lab then return true;
 392   3          modbyt=oper.sflag and typebit;
 393   3          if styp = reg then return (modbyt=modletter);
 395   3          if styp = variable then
 396   3                    return ((modbyt=nomod) or (modbyt=modletter));
 397   3          if styp=number then$do
 399   4            numb=oper.offset;
 400   4            do case modletter-1;
 401   5              return not wrdtest(numb);    /* BYTE */
 402   5              return wrdtest(numb);        /* WORD */
 403   5              return (typecalc(numb)=byt); /* signed BYTE */
 404   5              return false;                /* DWORD */
 405   5            end$case;
 406   4          end$if;
 407   3          return false;
 408   3        end modlettertest;

 409   2        speclettertest: proc byte;
 410   3          dcl (opertype,locvalue,loctype) byte;
 411   3          memtest: proc byte;
 412   4            return (opertype=variable);
 413   4          end memtest;

 414   3          opertype=oper.stype;
 415   3          locvalue=oper.offset;
 416   3          loctype=oper.sflag and typebit;
 417   3          do case specletter;
PL/M-86 COMPILER    CODEMACRO SUBROUTINE MODULE                                  10/5/81    PAGE  10


                    /* A - accumulator (AX or AL) */
 418   4            return ((opertype=reg) and (locvalue=rax));
                    /* C - code reference,i.e. label */
 419   4            return (opertype=lab);
                    /* D - immediate data */
 420   4            return (opertype=number);
                    /* E - effective address, i.e. memory address or register */
 421   4            return (memtest or (opertype=reg));
                    /* M - memory address */
 422   4            return memtest;
                    /* R - register except segment register */
 423   4            return ((opertype=reg) and (loctype <> dwrd));
                    /* S - segment register */
 424   4            return ((opertype=reg) and (loctype = dwrd));
                    /* X - memory address without indexing */
 425   4            return ((opertype=variable) and
                            ((oper.sflag and (iregbit or bregbit))=0));
 426   4          end$case;
 427   3        end speclettertest;

 428   2        specletter=bytevar;   /* pick up codemacro attributes */
 429   2        call incrmacroptr;
 430   2        modletter=bytevar and modletter$bit;
 431   2        range=bytevar and range$and;
 432   2        rangetype=bytevar and rangetype$and;
 433   2        call incrmacroptr;
 434   2        pt=.operands(opno);  /* address of current user operand */

 435   2        match=true;
 436   2        if range <> norange then match=rangetest;
 438   2        if modletter <> 0 then match=match and modlettertest;
 440   2        if match then match=speclettertest;
 442   2        return match;
 443   2      end matchsingleop;

              /* test if operands match a specific codemacro */
 444   1      matchingops: proc byte;
 445   2        dcl savept address,(nopara,match,parno) byte;
 446   2        savept=macroptr;
 447   2        call incrmacroptr;  /* macroptr=macroptr+2 */
 448   2        call incrmacroptr;
 449   2        nopara=bytevar;     /* pick up no of parameters */
 450   2        call incrmacroptr;  /* advance to first formal */
 451   2        if (nopara and prefix$on) <> 0 then return true; /* PREFIX */
 453   2        if nopara <> nooper then$do
 455   3          match=false;
 456   3        else$do
 458   3          match=true;
 459   3          parno=0ffh;
 460   3          do while (parno:=parno+1) < nopara;
 461   4            match=match and matchsingleop(parno);
 462   4          end$while;
 463   3        end$if;
 464   2        if not match then macroptr=savept;
 466   2        return match;
 467   2      end matchingops;

PL/M-86 COMPILER    CODEMACRO SUBROUTINE MODULE                                  10/5/81    PAGE  11


              /* test if operands match instruction */
 468   1      searchformatch: proc byte public;
 469   2        dcl next based macroptr address;
 470   2        macroptr=firstmacroptr;
 471   2        do forever;
 472   3          if matchingops then return true;
 474   3          if next=0 then return false;
 476   3          macroptr=next;
 477   3        end$forever;
 478   2      end searchformatch;

 479   1      end$module cmsubr;
PL/M-86 COMPILER    CODEMACRO SUBROUTINE MODULE                                  10/5/81    PAGE  12


CROSS-REFERENCE LISTING
-----------------------


   DEFN  ADDR   SIZE  NAME, ATTRIBUTES, AND REFERENCES
  ----- ------ -----  --------------------------------


     89  0000H     4  ABSADDR. . . . . .    BYTE ARRAY(4) EXTERNAL(25)          181  183  192
                                             194 
      2               ADDR . . . . . . .    LITERALLY        32   35   38   41   47   65   68
                                              71   74   89   90  120  150  160  165  173  187
                                             198  210  243  317  346  368  388 
     90  0000H     2  ADDRVAR. . . . . .    WORD BASED(MACROPTR)      155 
     55  0000H        ALPHANUMERIC . . .    PROCEDURE BYTE EXTERNAL(14) STACK=0000H
     58  0000H        ASCIICHAR. . . . .    PROCEDURE BYTE EXTERNAL(15) STACK=0000H
    243  007FH     1  BASEIND. . . . . .    BYTE       264  282  283  285 
    160  0008H     1  BASEINDEX. . . . .    BYTE MEMBER(OPR)
    198  0008H     1  BASEINDEX. . . . .    BYTE MEMBER(OPR)          202 
    346  0008H     1  BASEINDEX. . . . .    BYTE MEMBER(OPR)
    165  0008H     1  BASEINDEX. . . . .    BYTE MEMBER(OPR)
    173  0008H     1  BASEINDEX. . . . .    BYTE MEMBER(OPR)
    210  0008H     1  BASEINDEX. . . . .    BYTE MEMBER(OPR)          212  217 
     89  0008H     1  BASEINDEX. . . . .    BYTE MEMBER(OPERANDS)
    187  0008H     1  BASEINDEX. . . . .    BYTE MEMBER(OPR)
    150  0008H     1  BASEINDEX. . . . .    BYTE MEMBER(OPR)
    317  0008H     1  BASEINDEX. . . . .    BYTE MEMBER(OPR)
    243  0008H     1  BASEINDEX. . . . .    BYTE MEMBER(OPR)          264 
    368  0008H     1  BASEINDEX. . . . .    BYTE MEMBER(OPER)
     88               BASEREGBIT . . . .    LITERALLY       264  282  285 
     88               BASEREGCOUNT . . .    LITERALLY       212 
     90  0000H     2  BITCOMTAB. . . . .    BYTE ARRAY(2) DATA        357 
    323  0006H     8  BITTAB . . . . . .    BYTE ARRAY(8) DATA        332 
     88               BREGBIT. . . . . .    LITERALLY       213  254  272  425 
     88               BREGCOUNT. . . . .    LITERALLY
      4               BYT. . . . . . . .    LITERALLY       403 
    120  0004H     1  BYT1 . . . . . . .    BYTE AT AUTOMATIC         121 
    120  0005H     1  BYT2 . . . . . . .    BYTE AT AUTOMATIC         122 
     90  0000H     1  BYTEVAR. . . . . .    BYTE BASED(MACROPTR)      129  146  199  312  340
                                             342  347  351  356  357  371  375  428  430  431
                                             432  449 
    111  0004H     1  CH . . . . . . . .    BYTE PARAMETER AUTOMATIC       112  115 
     80  0000H     1  CH . . . . . . . .    BYTE PARAMETER        81 
     49  0000H     1  CH . . . . . . . .    BYTE PARAMETER        50 
     52  0000H     1  CH . . . . . . . .    BYTE PARAMETER        53 
     58  0000H     1  CH . . . . . . . .    BYTE PARAMETER        59 
     55  0000H     1  CH . . . . . . . .    BYTE PARAMETER        56 
     61  0000H     1  CH . . . . . . . .    BYTE PARAMETER        62 
    134  0000H     1  CH . . . . . . . .    BYTE BASED(PT) ARRAY(1)        137 
     46  0000H     1  CH . . . . . . . .    BYTE PARAMETER        47 
     89  0000H     2  CIP. . . . . . . .    WORD EXTERNAL(26)         175  191 
     91  0000H    10  CLEARCMINDEX . . .    PROCEDURE PUBLIC STACK=0002H
      1  0000H        CMSUBR . . . . . .    PROCEDURE STACK=0000H
      3               CODE . . . . . . .    LITERALLY
    133  00C3H    50  COMMANDTYPE. . . .    PROCEDURE BYTE PUBLIC STACK=000CH        357 
    133  0008H     1  COMNO. . . . . . .    BYTE PARAMETER AUTOMATIC       134  137 
     37  0000H        COPY . . . . . . .    PROCEDURE EXTERNAL(8) STACK=0000H
PL/M-86 COMPILER    CODEMACRO SUBROUTINE MODULE                                  10/5/81    PAGE  13


      2               CR . . . . . . . .    LITERALLY
    323  0083H     1  CRBIT. . . . . . .    BYTE       330  332  333  355 
     16               CSDATA . . . . . .    LITERALLY        98  108 
     89  0000H     2  CSEGVALUE. . . . .    WORD EXTERNAL(27)         176  189 
     11               CSOVER . . . . . .    LITERALLY       227 
     16               CSVALUE. . . . . .    LITERALLY
     37  0000H     2  D. . . . . . . . .    WORD PARAMETER        38 
     73  0000H     2  D. . . . . . . . .    WORD PARAMETER        74 
     70  0000H     2  D. . . . . . . . .    WORD PARAMETER        71 
     67  0000H     2  D. . . . . . . . .    WORD PARAMETER        68 
     64  0000H     2  D. . . . . . . . .    WORD PARAMETER        65 
      2               DCL. . . . . . . .    LITERALLY
     73  0000H        DECOUT . . . . . .    PROCEDURE EXTERNAL(20) STACK=0000H
      3               DELETEDSYMB. . . .    LITERALLY
     49  0000H        DIGIT. . . . . . .    PROCEDURE BYTE EXTERNAL(12) STACK=0000H
    243  007BH     1  DISPFLAG . . . . .    BYTE       269  276  279  280  288  290  303  306
    243  0013H     1  DISPHIGH . . . . .    BYTE AT         307 
    173  000AH     2  DISPL. . . . . . .    WORD       175  176  180 
    243  0012H     1  DISPLOW. . . . . .    BYTE AT         305 
    244  03F0H    34  DISPTYPE . . . . .    PROCEDURE BYTE STACK=0006H          279 
      3               DOUBLEDEFINED. . .    LITERALLY
     15               DOUBLERANGE. . . .    LITERALLY       373  379 
     16               DRCODEDATA . . . .    LITERALLY
     16               DRCODESEGM . . . .    LITERALLY
     16               DRDATADATA . . . .    LITERALLY
     16               DRDATASEGM . . . .    LITERALLY
     16               DREXTRADATA. . . .    LITERALLY
     16               DREXTRASEGM. . . .    LITERALLY
     16               DRSTACKDATA. . . .    LITERALLY
     16               DRSTACKSEGM. . . .    LITERALLY
     16               DSDATA . . . . . .    LITERALLY
     11               DSOVER . . . . . .    LITERALLY       235 
    211  02CDH    45  DSOVERTEST . . . .    PROCEDURE BYTE STACK=0004H          230  234 
     16               DSVALUE. . . . . .    LITERALLY
      4               DWRD . . . . . . .    LITERALLY       423  424 
      2               ELSEDO . . . . . .    LITERALLY       291 
     94  000AH    40  EMIT . . . . . . .    PROCEDURE PUBLIC STACK=0008H
     90  001EH    80  EMITBYTE . . . . .    BYTE ARRAY(80)        98  115 
     80  0000H        EMITCODEBYTE . . .    PROCEDURE EXTERNAL(23) STACK=0000H        98  108
    101  0032H    56  EMITDUMMIES. . . .    PROCEDURE PUBLIC STACK=0008H
     90  006EH     1  EMITINDEX. . . . .    BYTE        92   97  115  116 
     76  0000H        EMITINIT . . . . .    PROCEDURE EXTERNAL(21) STACK=0000H
    111  006AH    31  EMITSINGLEBYTE . .    PROCEDURE STACK=0004H          121  122  146  152
                                             180  239  302  305  307  365 
    119  0089H    19  EMITSINGLEWORD . .    PROCEDURE STACK=000AH          155  162  169  170
                                             191 
     78  0000H        EMITTERMINATE. . .    PROCEDURE EXTERNAL(22) STACK=0000H
     29  0000H        EMPTYLINE. . . . .    PROCEDURE BYTE EXTERNAL(5) STACK=0000H
      2               ENDCASE. . . . . .    LITERALLY
      2               ENDDO. . . . . . .    LITERALLY
      2               ENDFOREVER . . . .    LITERALLY
      2               ENDIF. . . . . . .    LITERALLY       239  307 
      2               ENDMODULE. . . . .    LITERALLY
      2               ENDOFFILE. . . . .    LITERALLY
      2               ENDPROC. . . . . .    LITERALLY
      2               ENDWHILE . . . . .    LITERALLY       141 
     16               EOFTYPE. . . . . .    LITERALLY
PL/M-86 COMPILER    CODEMACRO SUBROUTINE MODULE                                  10/5/81    PAGE  14


     64  0000H        EQUAL. . . . . . .    PROCEDURE BYTE EXTERNAL(17) STACK=0000H
     83  0000H        ERRMSG . . . . . .    PROCEDURE EXTERNAL(24) STACK=0000H       168  178
                                             190 
     83  0000H     1  ERRNO. . . . . . .    BYTE PARAMETER        84 
      3               ERROR. . . . . . .    LITERALLY
     16               ESDATA . . . . . .    LITERALLY
     11               ESOVER . . . . . .    LITERALLY       223 
     16               ESVALUE. . . . . .    LITERALLY
      2               FALSE. . . . . . .    LITERALLY       404  407  455  475 
     43  0000H     2  FCBADR . . . . . .    WORD PARAMETER        44 
     43  0000H        FILEABORT. . . . .    PROCEDURE EXTERNAL(10) STACK=0000H
     46  0000H        FILL . . . . . . .    PROCEDURE EXTERNAL(11) STACK=0000H
     89  0000H     2  FIRSTMACROPTR. . .    WORD EXTERNAL(29)         470 
    198  0074H     1  FLAG . . . . . . .    BYTE       204  205 
      2               FOREVER. . . . . .    LITERALLY       471 
    345  0536H    53  FORMBITSROUT . . .    PROCEDURE STACK=000EH          359 
      2               FORMFEED . . . . .    LITERALLY
     89  0000H     1  FULLSYMBTAB. . . .    BYTE EXTERNAL(31)
    127  00A5H    30  GETOPERADR . . . .    PROCEDURE WORD STACK=0006H          151  161  166
                                             174  188  201  215  314  318  320  349 
     67  0000H        HEX1OUT. . . . . .    PROCEDURE EXTERNAL(18) STACK=0000H
     70  0000H        HEX2OUT. . . . . .    PROCEDURE EXTERNAL(19) STACK=0000H       183  194
    134  0072H     1  I. . . . . . . . .    BYTE       135  136  137  140 
    102  0070H     1  I. . . . . . . . .    BYTE       106  107 
     95  006FH     1  I. . . . . . . . .    BYTE        96   97   98 
      3               IDENT. . . . . . .    LITERALLY
    124  009CH     9  INCRMACROPTR . . .    PROCEDURE STACK=0002H          130  139  147  156
                                             157  200  313  341  343  348  352  364  372  376
                                             429  433  447  448  450 
     88               INDEXREGBIT. . . .    LITERALLY       264  282  283 
     88               INDEXREGCOUNT. . .    LITERALLY
    251  0412H    29  INDEXTYPE. . . . .    PROCEDURE BYTE STACK=0002H          281 
      2               INIT . . . . . . .    LITERALLY
     16               INTELDATA. . . . .    LITERALLY
     16               INTELSEGMENT . . .    LITERALLY
     88               IREGBIT. . . . . .    LITERALLY       252  272  425 
     88               IREGCOUNT. . . . .    LITERALLY
    102  0071H     1  J. . . . . . . . .    BYTE       103  104  105  107 
    324  04B6H    92  JOIN . . . . . . .    PROCEDURE STACK=000AH          342  351 
      3               LAB. . . . . . . .    LITERALLY       390  419 
     86               LABOUTOFRANGE. . .    LITERALLY       178  190 
      7               LEFTBRACKET. . . .    LITERALLY
    150  0000H     2  LENGTH . . . . . .    WORD MEMBER(OPR)
    346  0000H     2  LENGTH . . . . . .    WORD MEMBER(OPR)
    160  0000H     2  LENGTH . . . . . .    WORD MEMBER(OPR)
    210  0000H     2  LENGTH . . . . . .    WORD MEMBER(OPR)
    165  0000H     2  LENGTH . . . . . .    WORD MEMBER(OPR)
    317  0000H     2  LENGTH . . . . . .    WORD MEMBER(OPR)
    187  0000H     2  LENGTH . . . . . .    WORD MEMBER(OPR)
    173  0000H     2  LENGTH . . . . . .    WORD MEMBER(OPR)
    198  0000H     2  LENGTH . . . . . .    WORD MEMBER(OPR)
    368  0000H     2  LENGTH . . . . . .    WORD MEMBER(OPER)
    243  0000H     2  LENGTH . . . . . .    WORD MEMBER(OPR)
                      LENGTH . . . . . .    BUILTIN         357 
     89  0000H     2  LENGTH . . . . . .    WORD MEMBER(OPERANDS)
     52  0000H        LETTER . . . . . .    PROCEDURE BYTE EXTERNAL(13) STACK=0000H
      2               LF . . . . . . . .    LITERALLY
PL/M-86 COMPILER    CODEMACRO SUBROUTINE MODULE                                  10/5/81    PAGE  15


    133  0006H     1  LG . . . . . . . .    BYTE PARAMETER AUTOMATIC       134  136  143 
      2               LIT. . . . . . . .    LITERALLY         2    3    4    5    6    7    8
                                               9   10   11   12   13   14   15   16   86   87
                                              88 
    410  0093H     1  LOCTYPE. . . . . .    BYTE       416  423  424 
    410  0092H     1  LOCVALUE . . . . .    BYTE       415  418 
     89  0000H     2  MACROPTR . . . . .    WORD EXTERNAL(30)          90  125  129  146  155
                                             199  312  340  342  347  351  356  357  371  375
                                             428  430  431  432  446  449  465  469  470  474
                                             476 
    368  0087H     1  MATCH. . . . . . .    BYTE       435  437  439  440  441  442 
    445  0095H     1  MATCH. . . . . . .    BYTE       455  458  461  464  466 
    444  07AEH   108  MATCHINGOPS. . . .    PROCEDURE BYTE STACK=0010H          472 
    367  056BH   111  MATCHSINGLEOP. . .    PROCEDURE BYTE STACK=000CH          461 
      8               MDBF . . . . . . .    LITERALLY
    149  0106H    21  MDBFROUT . . . . .    PROCEDURE PUBLIC STACK=000AH
      8               MDBIT. . . . . . .    LITERALLY
    322  046BH    75  MDBITROUT. . . . .    PROCEDURE PUBLIC STACK=0012H
      8               MDBN . . . . . . .    LITERALLY
    145  00F5H    17  MDBNROUT . . . . .    PROCEDURE PUBLIC STACK=0008H
      8               MDDF . . . . . . .    LITERALLY
    164  0144H    47  MDDFROUT . . . . .    PROCEDURE PUBLIC STACK=000EH
      8               MDWF . . . . . . .    LITERALLY
    159  012FH    21  MDWFROUT . . . . .    PROCEDURE PUBLIC STACK=000EH
      8               MDWN . . . . . . .    LITERALLY
    154  011BH    20  MDWNROUT . . . . .    PROCEDURE PUBLIC STACK=000EH
    411  079FH    15  MEMTEST. . . . . .    PROCEDURE BYTE STACK=0002H          421  422 
      8               MENDBIT. . . . . .    LITERALLY       356 
      8               MENDM. . . . . . .    LITERALLY
      8               MFORMALBITS. . . .    LITERALLY        90 
     86               MISSSEGMINFO . . .    LITERALLY       168 
      8               MMODRM1. . . . . .    LITERALLY
    310  042FH    28  MMODRM1ROUT. . . .    PROCEDURE PUBLIC STACK=0012H
      8               MMODRM2. . . . . .    LITERALLY
    316  044BH    32  MMODRM2ROUT. . . .    PROCEDURE PUBLIC STACK=0012H
      8               MNOSEGFIX. . . . .    LITERALLY
    197  0218H    60  MNOSEGFIXROUT. . .    PROCEDURE PUBLIC STACK=000AH
      8               MNUMBERBITS. . . .    LITERALLY        90 
     10               MODB . . . . . . .    LITERALLY
    388  0090H     1  MODBYT . . . . . .    BYTE       392  394  396 
     10               MODD . . . . . . .    LITERALLY
    243  0079H     1  MODFIELD . . . . .    BYTE       268  275  280  290  301  302 
    368  0089H     1  MODLETTER. . . . .    BYTE       394  396  400  430  438 
     14               MODLETTERBIT . . .    LITERALLY       430 
     14               MODLETTERCOUNT . .    LITERALLY
    387  063AH   162  MODLETTERTEST. . .    PROCEDURE BYTE STACK=0006H          439 
    242  02FAH   246  MODRM. . . . . . .    PROCEDURE STACK=000EH          314  320 
     10               MODSB. . . . . . .    LITERALLY
     10               MODW . . . . . . .    LITERALLY
      8               MRELB. . . . . . .    LITERALLY
    172  0173H    96  MRELBROUT. . . . .    PROCEDURE PUBLIC STACK=000AH
      8               MRELW. . . . . . .    LITERALLY
    186  01D3H    69  MRELWROUT. . . . .    PROCEDURE PUBLIC STACK=000EH
      8               MSEGFIX. . . . . .    LITERALLY
    209  0254H   121  MSEGFIXROUT. . . .    PROCEDURE PUBLIC STACK=000AH
     73  0000H     2  N. . . . . . . . .    WORD PARAMETER        74 
     70  0000H     2  N. . . . . . . . .    WORD PARAMETER        71 
PL/M-86 COMPILER    CODEMACRO SUBROUTINE MODULE                                  10/5/81    PAGE  16


     67  0000H     1  N. . . . . . . . .    BYTE PARAMETER        68 
     64  0000H     1  N. . . . . . . . .    BYTE PARAMETER        65 
     46  0000H     1  N. . . . . . . . .    BYTE PARAMETER        47 
     34  0000H     2  N. . . . . . . . .    WORD PARAMETER        35 
     37  0000H     1  N. . . . . . . . .    BYTE PARAMETER        38 
      3               NEGLECTED. . . . .    LITERALLY
    469  0000H     2  NEXT . . . . . . .    WORD BASED(MACROPTR)      474  476 
      4               NIL. . . . . . . .    LITERALLY
    339  0084H     1  NOBIT. . . . . . .    BYTE       340  342 
    346  0085H     1  NOBIT. . . . . . .    BYTE       347  351 
    324  0006H     1  NOBIT. . . . . . .    BYTE PARAMETER AUTOMATIC       325  328  329  330
                                             334 
    102  0002H     4  NODUM. . . . . . .    BYTE ARRAY(4) DATA        107 
     89  0000H     1  NOERROR. . . . . .    BYTE EXTERNAL(28)         113  206 
     10               NOMOD. . . . . . .    LITERALLY       396 
     89  0000H     1  NOOPER . . . . . .    BYTE EXTERNAL(32)         103  453 
     88               NOOVERCOUNT. . . .    LITERALLY
     88               NOOVERRIDEBIT. . .    LITERALLY       202  217 
    445  0094H     1  NOPARA . . . . . .    BYTE       449  451  453  460 
     12               NOPARAND . . . . .    LITERALLY
     15               NORANGE. . . . . .    LITERALLY       436 
    324  0004H     1  NOSHIFT. . . . . .    BYTE PARAMETER AUTOMATIC       325  326  327 
    346  0086H     1  NUMB . . . . . . .    BYTE       350  351 
    324  0008H     1  NUMB . . . . . . .    BYTE PARAMETER AUTOMATIC       325  327  329  331
                                             335 
    388  001AH     2  NUMB . . . . . . .    WORD       399  401  402  403 
      3               NUMBER . . . . . .    LITERALLY       397  420 
    338  0512H    36  NUMBERBITSROUT . .    PROCEDURE STACK=000EH          358 
     15               NUMBERRANGE. . . .    LITERALLY
      7               OAND . . . . . . .    LITERALLY
      7               OEQ. . . . . . . .    LITERALLY
    346  0006H     2  OFFSET . . . . . .    WORD MEMBER(OPR)          350 
    317  0006H     2  OFFSET . . . . . .    WORD MEMBER(OPR)          319 
    243  0006H     2  OFFSET . . . . . .    WORD MEMBER(OPR)          260 
    198  0006H     2  OFFSET . . . . . .    WORD MEMBER(OPR)
    187  0006H     2  OFFSET . . . . . .    WORD MEMBER(OPR)          191  194 
    173  0006H     2  OFFSET . . . . . .    WORD MEMBER(OPR)          175  183 
    165  0006H     2  OFFSET . . . . . .    WORD MEMBER(OPR)          169 
    160  0006H     2  OFFSET . . . . . .    WORD MEMBER(OPR)          162 
    150  0006H     2  OFFSET . . . . . .    WORD MEMBER(OPR)          152 
    210  0006H     2  OFFSET . . . . . .    WORD MEMBER(OPR)
     89  0006H     2  OFFSET . . . . . .    WORD MEMBER(OPERANDS)
    243  0012H     2  OFFSET . . . . . .    WORD       243  247  249  260  267 
    368  0006H     2  OFFSET . . . . . .    WORD MEMBER(OPER)         378  399  415 
      7               OGE. . . . . . . .    LITERALLY
      7               OGT. . . . . . . .    LITERALLY
      7               OLAST. . . . . . .    LITERALLY
      7               OLE. . . . . . . .    LITERALLY
      7               OLENGTH. . . . . .    LITERALLY
      7               OLT. . . . . . . .    LITERALLY
      7               OMOD . . . . . . .    LITERALLY
      7               ONE. . . . . . . .    LITERALLY
      7               ONOT . . . . . . .    LITERALLY
      7               OOFFSET. . . . . .    LITERALLY
      7               OOR. . . . . . . .    LITERALLY
    368  0000H     9  OPER . . . . . . .    STRUCTURE BASED(PT)       378  389  392  399  414
                                             415  416  425 
PL/M-86 COMPILER    CODEMACRO SUBROUTINE MODULE                                  10/5/81    PAGE  17


     89  0000H    36  OPERANDS . . . . .    STRUCTURE ARRAY(4) EXTERNAL(33)          129  434
     87               OPERANDSTRUC . . .    LITERALLY        89  150  160  165  173  187  198
                                             210  243  317  346  368 
      3               OPERATOR . . . . .    LITERALLY
    410  0091H     1  OPERTYPE . . . . .    BYTE       412  414  418  419  420  421  423  424
                                             425 
    370  008EH     1  OPERVALUE. . . . .    BYTE       378  381  384 
    367  0004H     1  OPNO . . . . . . .    BYTE PARAMETER AUTOMATIC       368  434 
    346  0000H     9  OPR. . . . . . . .    STRUCTURE BASED(PT)       350 
    317  0000H     9  OPR. . . . . . . .    STRUCTURE BASED(PT)       319 
    210  0000H     9  OPR. . . . . . . .    STRUCTURE BASED(PT)       212  216  217 
    198  0000H     9  OPR. . . . . . . .    STRUCTURE BASED(PT)       202  204 
    187  0000H     9  OPR. . . . . . . .    STRUCTURE BASED(PT)       189  191  194 
    173  0000H     9  OPR. . . . . . . .    STRUCTURE BASED(PT)       175  176  183 
    165  0000H     9  OPR. . . . . . . .    STRUCTURE BASED(PT)       167  169  170 
    160  0000H     9  OPR. . . . . . . .    STRUCTURE BASED(PT)       162 
    150  0000H     9  OPR. . . . . . . .    STRUCTURE BASED(PT)       152 
    243  0000H     9  OPR. . . . . . . .    STRUCTURE BASED(PT)       260  261  262  264 
      7               OPTR . . . . . . .    LITERALLY
      7               OSEG . . . . . . .    LITERALLY
      7               OSHL . . . . . . .    LITERALLY
      7               OSHORT . . . . . .    LITERALLY
      7               OSHR . . . . . . .    LITERALLY
      7               OTYPE. . . . . . .    LITERALLY
     40  0000H        OUTTEXT. . . . . .    PROCEDURE EXTERNAL(9) STACK=0000H
    210  0077H     1  OVERRIDE . . . . .    BYTE       222  226  230  234  238 
      7               OXOR . . . . . . .    LITERALLY
    445  0096H     1  PARNO. . . . . . .    BYTE       459  460  461 
      6               PCODEMACRO . . . .    LITERALLY
      6               PCSEG. . . . . . .    LITERALLY
      6               PDB. . . . . . . .    LITERALLY
      6               PDBIT. . . . . . .    LITERALLY
      6               PDD. . . . . . . .    LITERALLY
      6               PDSEG. . . . . . .    LITERALLY
      6               PDW. . . . . . . .    LITERALLY
      6               PEJECT . . . . . .    LITERALLY
      6               PEND . . . . . . .    LITERALLY
      6               PENDIF . . . . . .    LITERALLY
      6               PENDM. . . . . . .    LITERALLY
      6               PEQU . . . . . . .    LITERALLY
      6               PESEG. . . . . . .    LITERALLY
      6               PIF. . . . . . . .    LITERALLY
      6               PIFLIST. . . . . .    LITERALLY
      6               PINCLUDE . . . . .    LITERALLY
      6               PLIST. . . . . . .    LITERALLY
      6               PMODRM . . . . . .    LITERALLY
      6               PNOIFLIST. . . . .    LITERALLY
      6               PNOLIST. . . . . .    LITERALLY
      6               PNOSEGFIX. . . . .    LITERALLY
      6               PORG . . . . . . .    LITERALLY
      6               PPAGESIZE. . . . .    LITERALLY
      6               PPAGEWIDTH . . . .    LITERALLY
      6               PRB. . . . . . . .    LITERALLY
     12               PREFIXAND. . . . .    LITERALLY
     13               PREFIXON . . . . .    LITERALLY       451 
      6               PRELB. . . . . . .    LITERALLY
      6               PRELW. . . . . . .    LITERALLY
PL/M-86 COMPILER    CODEMACRO SUBROUTINE MODULE                                  10/5/81    PAGE  18


      2               PROC . . . . . . .    LITERALLY        17   19   21   23   26   29   31
                                              34   55   58   67   70   73   76   78   80   83
                                              91   94  101  111  119  124  127  133  145  149
                                             154  159  164  172  186  197  209  211  242  244
                                             251  310  316  322  324  338  345  367  369  387
                                             409  411  444  468 
      6               PRS. . . . . . . .    LITERALLY
      6               PRW. . . . . . . .    LITERALLY
      6               PSEGFIX. . . . . .    LITERALLY
      3               PSEUDO . . . . . .    LITERALLY
      6               PSIMFORM . . . . .    LITERALLY
      6               PSSEG. . . . . . .    LITERALLY
    346  0016H     2  PT . . . . . . . .    WORD       346  349  350 
    317  0014H     2  PT . . . . . . . .    WORD       317  318  319 
    210  0010H     2  PT . . . . . . . .    WORD       210  212  215  216  217 
    198  000EH     2  PT . . . . . . . .    WORD       198  201  202  204 
    187  000CH     2  PT . . . . . . . .    WORD       187  188  189  191  194 
    173  0008H     2  PT . . . . . . . .    WORD       173  174  175  176  183 
    165  0006H     2  PT . . . . . . . .    WORD       165  166  167  169  170 
    160  0004H     2  PT . . . . . . . .    WORD       160  161  162 
    150  0002H     2  PT . . . . . . . .    WORD       150  151  152 
    133  0004H     2  PT . . . . . . . .    WORD PARAMETER AUTOMATIC       134  137 
    128  0000H     2  PT . . . . . . . .    WORD       129  131 
    242  0004H     2  PT . . . . . . . .    WORD PARAMETER AUTOMATIC       243  260  261  262
                                             264 
     46  0000H     2  PT . . . . . . . .    WORD PARAMETER        47 
    368  0018H     2  PT . . . . . . . .    WORD       368  378  389  392  399  414  415  416
                                             425  434 
      6               PTITLE . . . . . .    LITERALLY
      5               RAH. . . . . . . .    LITERALLY
      5               RAL. . . . . . . .    LITERALLY
    368  008AH     1  RANGE. . . . . . .    BYTE       373  379  431  436 
     15               RANGEAND . . . . .    LITERALLY       431 
     14               RANGESPECBIT . . .    LITERALLY
     14               RANGESPECCOUNT . .    LITERALLY
    369  05DAH    96  RANGETEST. . . . .    PROCEDURE BYTE STACK=0006H          437 
    368  008BH     1  RANGETYPE. . . . .    BYTE       432 
     15               RANGETYPEAND . . .    LITERALLY       432 
    368  008CH     1  RANGEV1. . . . . .    BYTE       371  381  384 
    368  008DH     1  RANGEV2. . . . . .    BYTE       375  381 
      5               RAX. . . . . . . .    LITERALLY       418 
      5               RBH. . . . . . . .    LITERALLY
      5               RBL. . . . . . . .    LITERALLY
      5               RBP. . . . . . . .    LITERALLY
      5               RBX. . . . . . . .    LITERALLY
      5               RCH. . . . . . . .    LITERALLY
      5               RCL. . . . . . . .    LITERALLY
      5               RCS. . . . . . . .    LITERALLY       245 
      5               RCX. . . . . . . .    LITERALLY
      5               RDH. . . . . . . .    LITERALLY
      5               RDI. . . . . . . .    LITERALLY
      5               RDL. . . . . . . .    LITERALLY
      5               RDS. . . . . . . .    LITERALLY
      5               RDX. . . . . . . .    LITERALLY
      2               REENT. . . . . . .    LITERALLY
      3               REG. . . . . . . .    LITERALLY       265  393  418  421  423  424 
    317  0081H     1  REGFIELD . . . . .    BYTE       319  320 
PL/M-86 COMPILER    CODEMACRO SUBROUTINE MODULE                                  10/5/81    PAGE  19


    311  0080H     1  REGFIELD . . . . .    BYTE       312  314 
    242  0006H     1  REGFIELD . . . . .    BYTE PARAMETER AUTOMATIC       243  300  302 
     15               REGISTERRANGE. . .    LITERALLY
      5               RES. . . . . . . .    LITERALLY
    323  0082H     1  RESULT . . . . . .    BYTE       332  354  365 
      7               RIGHTBRACKET . . .    LITERALLY
    243  007AH     1  RMFIELD. . . . . .    BYTE       267  274  282  283  287  294  302 
      5               RSI. . . . . . . .    LITERALLY
      5               RSP. . . . . . . .    LITERALLY
      5               RSS. . . . . . . .    LITERALLY
     64  0000H     2  S. . . . . . . . .    WORD PARAMETER        65 
     37  0000H     2  S. . . . . . . . .    WORD PARAMETER        38 
    445  001CH     2  SAVEPT . . . . . .    WORD       446  465 
     19  0000H        SCAN . . . . . . .    PROCEDURE EXTERNAL(1) STACK=0000H
     17  0000H        SCANINIT . . . . .    PROCEDURE EXTERNAL(0) STACK=0000H
    468  081AH    43  SEARCHFORMATCH . .    PROCEDURE BYTE PUBLIC STACK=0014H
     88               SEGMBIT. . . . . .    LITERALLY       167 
     88               SEGMCOUNT. . . . .    LITERALLY
    368  0004H     2  SEGMENT. . . . . .    WORD MEMBER(OPER)
    346  0004H     2  SEGMENT. . . . . .    WORD MEMBER(OPR)
    317  0004H     2  SEGMENT. . . . . .    WORD MEMBER(OPR)
    243  0004H     2  SEGMENT. . . . . .    WORD MEMBER(OPR)
    210  0004H     2  SEGMENT. . . . . .    WORD MEMBER(OPR)
    198  0004H     2  SEGMENT. . . . . .    WORD MEMBER(OPR)
    187  0004H     2  SEGMENT. . . . . .    WORD MEMBER(OPR)          189 
    173  0004H     2  SEGMENT. . . . . .    WORD MEMBER(OPR)          176 
    165  0004H     2  SEGMENT. . . . . .    WORD MEMBER(OPR)          170 
    160  0004H     2  SEGMENT. . . . . .    WORD MEMBER(OPR)
    150  0004H     2  SEGMENT. . . . . .    WORD MEMBER(OPR)
     89  0004H     2  SEGMENT. . . . . .    WORD MEMBER(OPERANDS)
    243  007EH     1  SEGR . . . . . . .    BYTE       245  263 
    210  0076H     1  SEGR . . . . . . .    BYTE       212  213  219  220  223  227  231  235
                                             239 
    198  0073H     1  SEGR . . . . . . .    BYTE       199  206 
    198  0075H     1  SEGT . . . . . . .    BYTE       205  206 
     88               SEGTYPEBIT . . . .    LITERALLY
     88               SEGTYPECOUNT . . .    LITERALLY       205  219  263 
    368  0003H     1  SFLAG. . . . . . .    BYTE MEMBER(OPER)         392  416  425 
    346  0003H     1  SFLAG. . . . . . .    BYTE MEMBER(OPR)
    317  0003H     1  SFLAG. . . . . . .    BYTE MEMBER(OPR)
    243  007DH     1  SFLAG. . . . . . .    BYTE       252  254  262  263  272 
    243  0003H     1  SFLAG. . . . . . .    BYTE MEMBER(OPR)          262 
    210  0078H     1  SFLAG. . . . . . .    BYTE       213  216  219 
    210  0003H     1  SFLAG. . . . . . .    BYTE MEMBER(OPR)          216 
    198  0003H     1  SFLAG. . . . . . .    BYTE MEMBER(OPR)          204 
    187  0003H     1  SFLAG. . . . . . .    BYTE MEMBER(OPR)
    173  0003H     1  SFLAG. . . . . . .    BYTE MEMBER(OPR)
    165  0003H     1  SFLAG. . . . . . .    BYTE MEMBER(OPR)          167 
    160  0003H     1  SFLAG. . . . . . .    BYTE MEMBER(OPR)
    150  0003H     1  SFLAG. . . . . . .    BYTE MEMBER(OPR)
     89  0003H     1  SFLAG. . . . . . .    BYTE MEMBER(OPERANDS)
                      SHL. . . . . . . .    BUILTIN         300  301  329  335 
                      SHR. . . . . . . .    BUILTIN         205  212  219  263  327 
     15               SINGLERANGE. . . .    LITERALLY
     21  0000H        SKIPRESTOFLINE . .    PROCEDURE EXTERNAL(2) STACK=0000H
     26  0000H        SKIPUNTIL. . . . .    PROCEDURE BYTE EXTERNAL(4) STACK=0000H
      2               SPACE. . . . . . .    LITERALLY       181  192 
PL/M-86 COMPILER    CODEMACRO SUBROUTINE MODULE                                  10/5/81    PAGE  20


      3               SPEC . . . . . . .    LITERALLY
      9               SPECA. . . . . . .    LITERALLY
      9               SPECC. . . . . . .    LITERALLY
      9               SPECD. . . . . . .    LITERALLY
      9               SPECE. . . . . . .    LITERALLY
     23  0000H        SPECIALTOKEN . . .    PROCEDURE BYTE EXTERNAL(3) STACK=0000H
    368  0088H     1  SPECLETTER . . . .    BYTE       417  428 
    409  06DCH   195  SPECLETTERTEST . .    PROCEDURE BYTE STACK=0006H          441 
      9               SPECM. . . . . . .    LITERALLY
      9               SPECR. . . . . . .    LITERALLY
      9               SPECS. . . . . . .    LITERALLY
      9               SPECX. . . . . . .    LITERALLY
     16               SSDATA . . . . . .    LITERALLY
     11               SSOVER . . . . . .    LITERALLY       231 
     16               SSVALUE. . . . . .    LITERALLY
     16               STARTTYPE. . . . .    LITERALLY
      3               STRING . . . . . .    LITERALLY
      2               STRUC. . . . . . .    LITERALLY        89  150  160  165  173  187  198
                                             210  243  317  346  368 
    388  008FH     1  STYP . . . . . . .    BYTE       389  390  393  395  397 
    368  0002H     1  STYPE. . . . . . .    BYTE MEMBER(OPER)         389  414 
    346  0002H     1  STYPE. . . . . . .    BYTE MEMBER(OPR)
    317  0002H     1  STYPE. . . . . . .    BYTE MEMBER(OPR)
    243  007CH     1  STYPE. . . . . . .    BYTE       261  265 
    243  0002H     1  STYPE. . . . . . .    BYTE MEMBER(OPR)          261 
    210  0002H     1  STYPE. . . . . . .    BYTE MEMBER(OPR)
    198  0002H     1  STYPE. . . . . . .    BYTE MEMBER(OPR)
    187  0002H     1  STYPE. . . . . . .    BYTE MEMBER(OPR)
    173  0002H     1  STYPE. . . . . . .    BYTE MEMBER(OPR)
    165  0002H     1  STYPE. . . . . . .    BYTE MEMBER(OPR)
    160  0002H     1  STYPE. . . . . . .    BYTE MEMBER(OPR)
    150  0002H     1  STYPE. . . . . . .    BYTE MEMBER(OPR)
     89  0002H     1  STYPE. . . . . . .    BYTE MEMBER(OPERANDS)
      3               SYMBOL . . . . . .    LITERALLY
     87               SYMBOLSTRUC. . . .    LITERALLY        89  150  160  165  173  187  198
                                             210  243  317  346  368 
     40  0000H     2  T. . . . . . . . .    WORD PARAMETER        41 
      2               TAB. . . . . . . .    LITERALLY
     43  0000H     2  TEXTADR. . . . . .    WORD PARAMETER        44 
      2               THENDO . . . . . .    LITERALLY       113  137  176  181  192  202  217
                                             252  265  272  285  288  303  373  379  397  453
     26  0000H     1  TOK. . . . . . . .    BYTE PARAMETER        27 
     23  0000H     1  TOK. . . . . . . .    BYTE PARAMETER        24 
      2               TRUE . . . . . . .    LITERALLY       222  226  391  435  452  458  471
                                             473 
     80  0000H     1  TYP. . . . . . . .    BYTE PARAMETER        81 
     88               TYPEBIT. . . . . .    LITERALLY       392  416 
     31  0000H        TYPECALC . . . . .    PROCEDURE BYTE EXTERNAL(6) STACK=0000H        176
                                             249  403 
     88               TYPECOUNT. . . . .    LITERALLY
      3               UDEFSYMB . . . . .    LITERALLY
     61  0000H        UPPER. . . . . . .    PROCEDURE BYTE EXTERNAL(16) STACK=0000H
     31  0000H     2  VAL. . . . . . . .    WORD PARAMETER        32 
    119  0004H     2  VAR. . . . . . . .    WORD PARAMETER AUTOMATIC       120 
      3               VARIABLE . . . . .    LITERALLY       395  412  425 
      4               WRD. . . . . . . .    LITERALLY       176 
     34  0000H        WRDTEST. . . . . .    PROCEDURE BYTE EXTERNAL(7) STACK=0000H        401
PL/M-86 COMPILER    CODEMACRO SUBROUTINE MODULE                                  10/5/81    PAGE  21


                                             402 



MODULE INFORMATION:

     CODE AREA SIZE     = 0845H   2117D
     CONSTANT AREA SIZE = 000EH     14D
     VARIABLE AREA SIZE = 0097H    151D
     MAXIMUM STACK SIZE = 0014H     20D
     933 LINES READ
     0 PROGRAM ERROR(S)

END OF PL/M-86 COMPILATION
