home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / crossasm / uasm.arc / 51SYM.C next >
C/C++ Source or Header  |  1986-04-07  |  22KB  |  606 lines

  1. /*
  2.         Custom Computer Consultants
  3.         Universal Cross Assembler
  4.         8051 Symbols
  5.         5 April 1986
  6. */
  7.  
  8. #include <stdio.h>
  9. #include <uasm.h>
  10.  
  11. char   *version = {"8051 Assembler -- V3.2  4/5/86\n"} ;
  12.  
  13. #define BSEG    0       /*      Register Segment        */
  14. #define CSEG    1       /*      Code Segment            */
  15. #define DSEG    2       /*      Data Segment            */
  16. #define XSEG    3       /*      External Data Segment   */
  17. #define ASCII   4       /*      String                  */
  18. #define PAGE    5       /*      Page Eject              */
  19. #define RADIX   6       /*      Define Radix            */
  20. #define BIT     7       /*      Bit Address             */
  21. #define DB      8       /*      Define Byte             */
  22. #define DS      9       /*      Define Storage          */
  23. #define DW      10      /*      Define Word             */
  24. #define EQU     11      /*      Equate                  */
  25. #define ORG     12      /*      Origin                  */
  26.  
  27. extern int     pass1 ;
  28. extern int     lbl ;
  29. extern int     i, j, k ;
  30. extern int     lnspp ;
  31. extern int     cc ;
  32. extern int     ilc ;
  33. extern int     active ;
  34. extern int     instl ;
  35. extern int     parval ;
  36. extern int     radix ;
  37. extern int     cput ;
  38. extern int     syte, sytx ;
  39.  
  40. extern unsigned        unpar ;
  41. extern unsigned        ha, he, hsp ;
  42.  
  43. extern unsigned  char    ch ;
  44. extern unsigned  char    sym ;
  45.  
  46. extern char    *iptr ;  
  47. extern char    segtype[] ;
  48.  
  49. extern unsigned  char    ib[] ;
  50. extern unsigned  char    pv[] ;
  51. extern unsigned  char    px[] ;
  52.  
  53. extern           int     pj[] ;
  54. extern           int     il[] ;
  55. extern char    *pc[], *pseudo[] ;
  56.  
  57. extern int     (*pp[])() ;
  58. extern int     (*ppo[])() ;
  59.  
  60. extern char    ibuf[] ;
  61.  
  62. extern struct  symbol  symtab[] ;
  63.  
  64. #define SYMTYPE  (symtab[sytx].flags&(NSEG-1))
  65.  
  66. code_seg() { return CSEG ; }
  67.  
  68. not_cseg(seg)
  69. int    seg ;
  70. {
  71.        if( seg == BSEG || seg == DSEG ) return TRUE ;
  72.        else return FALSE ;
  73. }
  74.  
  75. set_il()
  76. {
  77.        il[BSEG] =     0 ;
  78.        il[CSEG] =     0 ;
  79.        il[DSEG] =    32 ;
  80.        il[XSEG] = 16384 ;
  81. }
  82.  
  83. set_type()
  84. {
  85.        segtype[BSEG] = '^'  ;
  86.        segtype[CSEG] = '\'' ;
  87.        segtype[DSEG] = '\"' ;
  88.        segtype[XSEG] = '+'  ;
  89. }
  90.  
  91.  
  92. gen(len)
  93. int     len ;
  94. {
  95.         ib[2] = parval & 0xFF ;
  96.         ib[1] = len == 3 ? parval >> 8 : ib[2] ;
  97.         instl = len ;
  98.         ib[0] = pv[k] ;
  99.         return TRUE ;
  100. }               
  101.  
  102. nopr()  { return gen(1) ; }
  103.  
  104. accm()  { if( nomatch("A") )            return FALSE ;
  105.           return gen(1) ; }
  106.  
  107. abac()  { if( nomatch("AB") )           return FALSE ;
  108.           return gen(1) ; }
  109.  
  110. cflg()  { if( nomatch("C") )            return FALSE ;
  111.           return gen(1) ; }
  112.  
  113. dptr()  { if( nomatch("DPTR") )         return FALSE ;
  114.           return gen(1) ; }
  115.  
  116. bita()  { parval = eval() ;
  117.           return gen(2) ;  }
  118.  
  119. dadr()  { parval = eval() ;
  120.           return gen(2) ;  }
  121.  
  122. adrl()  { parval = eval() ;
  123.           return gen(3) ;  }
  124.  
  125. adrs()  { parval = eval() ;
  126.           gen(2) ;
  127.           ib[0] |= (( parval >> 3 ) & 0xE0 ) ;
  128.           return TRUE  ; }
  129.  
  130. adrx()  { unpar = parval = eval() ;
  131.           
  132.           if ( unpar < 2048 )
  133.                 { gen(2) ; ib[0] |= (( unpar >> 3 ) & 0xE0 ) ; }
  134.           else  { gen(3) ; ++ib[0] ; }
  135.  
  136.           return TRUE  ; }
  137.  
  138. rela()  { crela(2) ;
  139.           return gen(2) ; }
  140.  
  141. crela(n)
  142. int     n ;
  143. {
  144.         parval = eval() - ( ilc + n ) ;
  145.         if( parval > 127 || parval < -128 ) push('R') ;
  146. }
  147.  
  148.  
  149. acir()  { if( nomatch("A,") )           return FALSE ;
  150.           return indr() ; }
  151.  
  152. indr()  { if( nomatch("@R") )           return FALSE ;
  153.           if( ch < '0' ||
  154.               ch > '1'   )              return FALSE ;
  155.           gen(1) ;
  156.           ib[0] |= ( 0x01 & ( ch - '0' ) ) ;
  157.           getch() ;
  158.           return TRUE  ; }
  159.  
  160. irim()  { if( !indr() )                 return FALSE ;
  161.           if( nomatch(",#") )           return FALSE ;
  162.           parval = eval() ;
  163.           ib[1] = parval & 0xFF ;
  164.           ++instl ;
  165.           return TRUE ; }
  166.  
  167. irac()  { if( !indr() )                 return FALSE ;
  168.           if( nomatch(",A") )           return FALSE ;
  169.           return TRUE ; }
  170.  
  171. irdd()  { if( !indr() )                 return FALSE ;
  172.           if( notcomma() )              return FALSE ;
  173.           if( !alphanum(ch) )           return FALSE ;
  174.           parval = eval() ;
  175.           ib[1] = parval & 0xFF ;
  176.           ++instl ;
  177.           return TRUE ; }
  178.  
  179. acrg()  { if( nomatch("A,") )           return FALSE ;
  180.           return regr() ; }
  181.  
  182. regr()  { if( nomatch("R") )            return FALSE ;
  183.           if( ch < '0' ||
  184.               ch > '7'    )             return FALSE ;
  185.           gen(1) ;
  186.           ib[0] |= ( 0x07 & ( ch - '0' ) ) ;
  187.           getch() ;
  188.           return TRUE ; }
  189.  
  190. rgim()  { if( !regr() )                 return FALSE ;
  191.           if( nomatch(",#") )           return FALSE ;
  192.           parval = eval() ;
  193.           ib[1] = parval & 0xFF ;
  194.           ++instl ;
  195.           return TRUE ; }
  196.  
  197. rgac()  { if( !regr() )                 return FALSE ;
  198.           if( nomatch(",A") )           return FALSE ;
  199.           return TRUE ; }
  200.  
  201. rgdd()  { if( !regr() )                 return FALSE ;
  202.           if( notcomma() )              return FALSE ;
  203.           if( !alphanum(ch) )           return FALSE ;
  204.           parval = eval() ;
  205.           ib[1] = parval & 0xFF ;
  206.           ++instl ;
  207.           return TRUE ; }
  208.  
  209. apdp()  { if( nomatch("@A+DPTR") )      return FALSE ;
  210.           return gen(1) ; }
  211.  
  212.  
  213. dpim()  { if( nomatch("DPTR,#") )       return FALSE ;
  214.           parval = eval() ;
  215.           return gen(3) ; }
  216.  
  217. acim()  { if( nomatch("A,#") )          return FALSE ;
  218.           parval = eval() ;
  219.           return gen(2) ; }
  220.  
  221. acdd()  { if( nomatch("A,") )           return FALSE ;
  222.           if( !alphanum(ch) )           return FALSE ;
  223.           return dadr() ; }
  224.  
  225. cfcb()  { if( nomatch("C,/") )          return FALSE ;
  226.           if( !alphanum(ch) )           return FALSE ;
  227.           return bita() ; }
  228.  
  229. cfba()  { if( nomatch("C,") )           return FALSE ;
  230.           if( !alphanum(ch) )           return FALSE ;
  231.           return bita() ; }
  232.  
  233. idac()  { if( nomatch("@DPTR,A") )      return FALSE ;
  234.           return gen(1) ; }
  235.  
  236. acid()  { if( nomatch("A,@DPTR") )      return FALSE ;
  237.           return gen(1) ; }
  238.  
  239. acap()  { if( nomatch("A,@A+PC") )      return FALSE ;
  240.           return gen(1) ; }
  241.  
  242. acad()  { if( nomatch("A,@A+DPTR") )    return FALSE ;
  243.           return gen(1) ; }
  244.  
  245. ddim()  { if( !alphanum(ch) )           return FALSE ;
  246.           if( !dadr() )                 return FALSE ;
  247.           if( nomatch(",#") )           return FALSE ;
  248.           parval = eval() ;
  249.           ib[2] = parval & 0xFF ;
  250.           ++instl ;
  251.           return TRUE ; }
  252.  
  253. ddir()  { if( !alphanum(ch) )           return FALSE ;
  254.           parval = eval() ;
  255.           if( notcomma() )              return FALSE ;
  256.           if ( !indr() )                return FALSE ;
  257.           ib[1] = parval & 0xFF ;
  258.           instl = 2 ;
  259.           return TRUE ; }
  260.  
  261. ddrg()  { if( !alphanum(ch) )           return FALSE ;
  262.           parval = eval() ;
  263.           if( notcomma() )              return FALSE ;
  264.           if( !regr() )                 return FALSE ;
  265.           ib[1] = parval & 0xFF ;
  266.           instl = 2 ;
  267.           return TRUE ; }
  268.  
  269. ddac()  { if( !alphanum(ch) )           return FALSE ;
  270.           parval = eval() ;
  271.           if ( nomatch(",A") )          return FALSE ;
  272.           return gen(2) ; }
  273.  
  274. dddd()  { if( !alphanum(ch) )           return FALSE ;
  275.           parval = eval() ;
  276.           if ( notcomma() )             return FALSE ;
  277.           ib[1] = parval & 0xFF ;
  278.           if( !alphanum(ch) )           return FALSE ;
  279.           parval = eval() ;
  280.           ib[2] = parval & 0xFF ;
  281.           ib[0] = pv[k] ;
  282.           instl = 3 ;                   return TRUE ; }
  283.  
  284. barl()  { bita() ;
  285.           if( notcomma() )              return FALSE ;
  286.           crela(3) ;
  287.           ib[2] = parval & 0xFF ;
  288.           instl = 3 ;                   return TRUE  ; }
  289.  
  290. rgrl()  { if( !regr() )                 return FALSE ;
  291.           if( notcomma() )              return FALSE ;
  292.           crela(2) ; 
  293.           ib[1] = parval & 0xFF ;
  294.           instl = 2 ;
  295.           return TRUE ; }
  296.  
  297. ddrl()  { if( !alphanum(ch) )           return FALSE ;
  298.           parval = eval() ;
  299.           if( notcomma() )              return FALSE ;
  300.           gen(2) ;
  301.           crela(3) ;
  302.           ib[2] = parval & 0xFF ;
  303.           instl = 3 ;                   return TRUE ; }
  304.  
  305. bacf()  { bita() ;
  306.           if( nomatch(",C") )           return FALSE ;
  307.           return TRUE ; }
  308.  
  309. cair()  { if( nomatch("A,#") )  return FALSE ; 
  310.           parval = eval() ;
  311.           if( notcomma() )      return FALSE ;
  312.           gen(2) ;
  313.           crela(3) ;
  314.           ib[2] = parval & 0xFF ;
  315.           instl = 3 ;                   return TRUE ; }
  316.  
  317. cadr()  { if( nomatch("A,") )           return FALSE ; 
  318.           if( !ddrl() )                 return FALSE ;
  319.           return TRUE ; }
  320.  
  321. ciir()  { if( !indr() )                 return FALSE ;
  322.           if( nomatch(",#") )           return FALSE ;
  323.           parval = eval() ;
  324.           if( notcomma() )              return FALSE ;
  325.           ib[1] = parval & 0xFF ;
  326.           crela(3) ;
  327.           ib[2] = parval & 0xFF ;
  328.           instl = 3 ;                   return TRUE ; }
  329.  
  330. crir()  { if( !regr() )                 return FALSE ;
  331.           if( nomatch(",#") )           return FALSE ;
  332.           parval = eval() ;
  333.           ib[1] = parval & 0xFF ;
  334.           if( notcomma() )              return FALSE ;
  335.           crela(3) ;
  336.           ib[2] = parval & 0xFF ;
  337.           instl = 3 ;                   return TRUE ; }
  338.  
  339.  
  340. #define INFO     1
  341. #define NOINFO   0
  342.  
  343. doseg()
  344. {
  345.        il[active] = ilc ;
  346.        ilc = il[j] ;
  347.        active = j ;
  348.        return NOINFO ;
  349. }
  350.  
  351. dods()
  352. {
  353.        instl = eval() ;
  354.        return NOINFO ;
  355. }
  356.  
  357. dodw()
  358. {                
  359.        parval = eval() ;
  360.        ib[cput++] = parval >> 8 ;
  361.        ib[cput++] = parval & 0xFF ;
  362.        while ( sym == ',' ) {
  363.          getch() ;
  364.          parval = eval() ;
  365.          ib[cput++] = parval >> 8 ;
  366.          ib[cput++] = parval & 0xFF ;
  367.          }
  368.        instl = cput ;
  369.        return INFO ;
  370. }
  371.  
  372. dodb()
  373. {
  374.        parval = eval() ;
  375.        ib[cput++] = parval & 0xFF ;
  376.        while ( sym == ',' ) {
  377.          getch() ;
  378.          ib[cput++] = eval() & 0xFF ;
  379.          }
  380.        instl = cput ;
  381.        return INFO ;
  382. }                            
  383.  
  384. dobit()
  385. {
  386.        parval = eval() ;
  387.        if ( pass1 && (lbl == OK) ) {
  388.          symtab[syte-1].value = parval ;
  389.          symtab[syte-1].flags = BSEG ;
  390.          }
  391.        return NOINFO ;
  392. }
  393.  
  394. doequ()
  395. {
  396.        parval = eval() ;
  397.        if ( pass1 && (lbl == OK) ) {
  398.          symtab[syte-1].value = parval ;
  399.          symtab[syte-1].flags = active ;
  400.          }
  401.        return NOINFO ;
  402. }
  403.  
  404. doorg()
  405. {
  406.        parval = eval() ;
  407.        ilc = parval ;
  408.        if ( hsp == 0 ) ha = he = ilc ;
  409.        return NOINFO ;
  410. }
  411.  
  412. dopage()
  413. {
  414.        lnspp = 0 ;
  415.        return NOINFO ;
  416. }
  417.  
  418. doradix()
  419. {
  420.        radix = eval() ;
  421.        return NOINFO ;
  422. }
  423.  
  424. doascii()
  425. {
  426.        while( isin(ch," \t") ) getch() ;
  427.        sym = ch ; getch() ;
  428.        while( ch != sym && ch != '\n' ) {
  429.          ib[cput++] = ch ;
  430.          getch() ;
  431.          }
  432.        ib[cput++] = EOS ;
  433.        instl = cput ;
  434.        return INFO ;
  435. }
  436.  
  437. /*
  438.         build_pseudo -- build a table of pointers to pseudo-ops
  439. */
  440.  
  441. build_pseudo()
  442. {
  443.         
  444.         j = -1 ;
  445.         pseudo[++j] = "ASCII" ; pj[j] = ASCII ; ppo[ASCII] = doascii ;
  446.         pseudo[++j] = "BIT"   ; pj[j] = BIT   ; ppo[BIT]   = dobit   ;
  447.         pseudo[++j] = "BSEG"  ; pj[j] = BSEG  ; ppo[BSEG]  = doseg   ;
  448.         pseudo[++j] = "CSEG"  ; pj[j] = CSEG  ; ppo[CSEG]  = doseg   ;
  449.         pseudo[++j] = "DB"    ; pj[j] = DB    ; ppo[DB]    = dodb    ;
  450.         pseudo[++j] = "DS"    ; pj[j] = DS    ; ppo[DS]    = dods    ;
  451.         pseudo[++j] = "DSEG"  ; pj[j] = DSEG  ; ppo[DSEG]  = doseg   ;
  452.         pseudo[++j] = "DW"    ; pj[j] = DW    ; ppo[DW]    = dodw    ;
  453.         pseudo[++j] = "EQU"   ; pj[j] = EQU   ; ppo[EQU]   = doequ   ;
  454.         pseudo[++j] = "ORG"   ; pj[j] = ORG   ; ppo[ORG]   = doorg   ;
  455.         pseudo[++j] = "PAGE"  ; pj[j] = PAGE  ; ppo[PAGE]  = dopage  ;
  456.         pseudo[++j] = "RADIX" ; pj[j] = RADIX ; ppo[RADIX] = doradix ;
  457.         pseudo[++j] = "XSEG"  ; pj[j] = XSEG  ; ppo[XSEG]  = doseg   ;
  458.         return ++j ;
  459. }
  460.  
  461.  
  462. /*
  463.         buildopc -- build opcode definition tables
  464.                 pc - opcode strings
  465.                 px - index by opcode into opcode values & post processing
  466.                 pv - opcode values
  467.                 pp - post processing functions
  468. */
  469. buildopc()
  470. {
  471.  
  472.  
  473.         i = j = 0 ;
  474.  
  475.         pc[i]="ACALL" ; px[i++]=j ;     pv[j]=0x11 ; pp[j++]=adrs ;
  476.         pc[i]="ADD"   ; px[i++]=j ;     pv[j]=0x24 ; pp[j++]=acim ;
  477.                                         pv[j]=0x26 ; pp[j++]=acir ;
  478.                                         pv[j]=0x28 ; pp[j++]=acrg ;
  479.                                         pv[j]=0x25 ; pp[j++]=acdd ;
  480.         pc[i]="ADDC"  ; px[i++]=j ;     pv[j]=0x34 ; pp[j++]=acim ;
  481.                                         pv[j]=0x36 ; pp[j++]=acir ;
  482.                                         pv[j]=0x38 ; pp[j++]=acrg ;
  483.                                         pv[j]=0x35 ; pp[j++]=acdd ;
  484.         pc[i]="AJMP"  ; px[i++]=j ;     pv[j]=0x01 ; pp[j++]=adrs ;
  485.         pc[i]="ANL"   ; px[i++]=j ;     pv[j]=0x54 ; pp[j++]=acim ;
  486.                                         pv[j]=0x56 ; pp[j++]=acir ;
  487.                                         pv[j]=0x58 ; pp[j++]=acrg ;
  488.                                         pv[j]=0x55 ; pp[j++]=acdd ;
  489.                                         pv[j]=0x82 ; pp[j++]=cfba ;
  490.                                         pv[j]=0xB0 ; pp[j++]=cfcb ;
  491.                                         pv[j]=0x52 ; pp[j++]=ddac ;
  492.                                         pv[j]=0x53 ; pp[j++]=ddim ;
  493.         pc[i]="BB"    ; px[i++]=j ;     pv[j]=0x20 ; pp[j++]=barl ;
  494.         pc[i]="BBC"   ; px[i++]=j ;     pv[j]=0x10 ; pp[j++]=barl ;
  495.         pc[i]="BC"    ; px[i++]=j ;     pv[j]=0x40 ; pp[j++]=rela ;
  496.         pc[i]="BNB"   ; px[i++]=j ;     pv[j]=0x30 ; pp[j++]=barl ;
  497.         pc[i]="BNC"   ; px[i++]=j ;     pv[j]=0x50 ; pp[j++]=rela ;
  498.         pc[i]="BNZ"   ; px[i++]=j ;     pv[j]=0x70 ; pp[j++]=rela ;
  499.         pc[i]="BR"    ; px[i++]=j ;     pv[j]=0x80 ; pp[j++]=rela ;
  500.         pc[i]="BSR"   ; px[i++]=j ;     pv[j]=0x11 ; pp[j++]=adrx ;
  501.         pc[i]="BZ"    ; px[i++]=j ;     pv[j]=0x60 ; pp[j++]=rela ;
  502.         pc[i]="CALL"  ; px[i++]=j ;     pv[j]=0x11 ; pp[j++]=adrx ;
  503.         pc[i]="CJNE"  ; px[i++]=j ;     pv[j]=0xB6 ; pp[j++]=ciir ;
  504.                                         pv[j]=0xB4 ; pp[j++]=cair ;
  505.                                         pv[j]=0xB5 ; pp[j++]=cadr ;
  506.                                         pv[j]=0xB8 ; pp[j++]=crir ;
  507.         pc[i]="CLR"   ; px[i++]=j ;     pv[j]=0xE4 ; pp[j++]=accm ;
  508.                                         pv[j]=0xC3 ; pp[j++]=cflg ;
  509.                                         pv[j]=0xC2 ; pp[j++]=bita ;
  510.         pc[i]="CPL"   ; px[i++]=j ;     pv[j]=0xF4 ; pp[j++]=accm ;
  511.                                         pv[j]=0xB3 ; pp[j++]=cflg ;
  512.                                         pv[j]=0xB2 ; pp[j++]=bita ;
  513.         pc[i]="DA"    ; px[i++]=j ;     pv[j]=0xD4 ; pp[j++]=accm ;
  514.         pc[i]="DEC"   ; px[i++]=j ;     pv[j]=0x14 ; pp[j++]=accm ;
  515.                                         pv[j]=0x16 ; pp[j++]=indr ;
  516.                                         pv[j]=0x18 ; pp[j++]=regr ;
  517.                                         pv[j]=0x15 ; pp[j++]=dadr ;
  518.         pc[i]="DIV"   ; px[i++]=j ;     pv[j]=0x84 ; pp[j++]=abac ;
  519.         pc[i]="DJNZ"  ; px[i++]=j ;     pv[j]=0xD8 ; pp[j++]=rgrl ;
  520.                                         pv[j]=0xD5 ; pp[j++]=ddrl ;
  521.         pc[i]="INC"   ; px[i++]=j ;     pv[j]=0x04 ; pp[j++]=accm ;
  522.                                         pv[j]=0xA3 ; pp[j++]=dptr ;
  523.                                         pv[j]=0x06 ; pp[j++]=indr ;
  524.                                         pv[j]=0x08 ; pp[j++]=regr ;
  525.                                         pv[j]=0x05 ; pp[j++]=dadr ;
  526.         pc[i]="JB"    ; px[i++]=j ;     pv[j]=0x20 ; pp[j++]=barl ;
  527.         pc[i]="JBC"   ; px[i++]=j ;     pv[j]=0x10 ; pp[j++]=barl ;
  528.         pc[i]="JC"    ; px[i++]=j ;     pv[j]=0x40 ; pp[j++]=rela ;
  529.         pc[i]="JMP"   ; px[i++]=j ;     pv[j]=0x73 ; pp[j++]=apdp ;
  530.                                         pv[j]=0x01 ; pp[j++]=adrx ;
  531.         pc[i]="JNB"   ; px[i++]=j ;     pv[j]=0x30 ; pp[j++]=barl ;
  532.         pc[i]="JNC"   ; px[i++]=j ;     pv[j]=0x50 ; pp[j++]=rela ;
  533.         pc[i]="JNZ"   ; px[i++]=j ;     pv[j]=0x70 ; pp[j++]=rela ;
  534.         pc[i]="JSR"   ; px[i++]=j ;     pv[j]=0x11 ; pp[j++]=adrx ;
  535.         pc[i]="JZ"    ; px[i++]=j ;     pv[j]=0x60 ; pp[j++]=rela ;
  536.         pc[i]="LCALL" ; px[i++]=j ;     pv[j]=0x12 ; pp[j++]=adrl ;
  537.         pc[i]="LJMP"  ; px[i++]=j ;     pv[j]=0x02 ; pp[j++]=adrl ;
  538.         pc[i]="MOV"   ; px[i++]=j ;     pv[j]=0x74 ; pp[j++]=acim ;
  539.                                         pv[j]=0xE6 ; pp[j++]=acir ;
  540.                                         pv[j]=0xE8 ; pp[j++]=acrg ;
  541.                                         pv[j]=0xE5 ; pp[j++]=acdd ;
  542.                                         pv[j]=0x90 ; pp[j++]=dpim ;
  543.                                         pv[j]=0xA2 ; pp[j++]=cfba ;
  544.                                         pv[j]=0xF6 ; pp[j++]=irac ;
  545.                                         pv[j]=0x76 ; pp[j++]=irim ;
  546.                                         pv[j]=0xA6 ; pp[j++]=irdd ;
  547.                                         pv[j]=0xF8 ; pp[j++]=rgac ;
  548.                                         pv[j]=0x78 ; pp[j++]=rgim ;
  549.                                         pv[j]=0xA8 ; pp[j++]=rgdd ;
  550.                                         pv[j]=0xF5 ; pp[j++]=ddac ;
  551.                                         pv[j]=0x92 ; pp[j++]=bacf ;
  552.                                         pv[j]=0x75 ; pp[j++]=ddim ;
  553.                                         pv[j]=0x86 ; pp[j++]=ddir ;
  554.                                         pv[j]=0x88 ; pp[j++]=ddrg ;
  555.                                         pv[j]=0x85 ; pp[j++]=dddd ;
  556.         pc[i]="MOVC"  ; px[i++]=j ;     pv[j]=0x93 ; pp[j++]=acad ;
  557.                                         pv[j]=0x83 ; pp[j++]=acap ;
  558.         pc[i]="MOVX"  ; px[i++]=j ;     pv[j]=0xE0 ; pp[j++]=acid ;
  559.                                         pv[j]=0xE2 ; pp[j++]=acir ;
  560.                                         pv[j]=0xF0 ; pp[j++]=idac ;
  561.                                         pv[j]=0xF2 ; pp[j++]=irac ;
  562.         pc[i]="MUL"   ; px[i++]=j ;     pv[j]=0xA4 ; pp[j++]=abac ;
  563.         pc[i]="NOP"   ; px[i++]=j ;     pv[j]=0x00 ; pp[j++]=nopr ;
  564.         pc[i]="ORL"   ; px[i++]=j ;     pv[j]=0x44 ; pp[j++]=acim ;
  565.                                         pv[j]=0x46 ; pp[j++]=acir ;
  566.                                         pv[j]=0x48 ; pp[j++]=acrg ;
  567.                                         pv[j]=0x45 ; pp[j++]=acdd ;
  568.                                         pv[j]=0x72 ; pp[j++]=cfba ;
  569.                                         pv[j]=0xA0 ; pp[j++]=cfcb ;
  570.                                         pv[j]=0x42 ; pp[j++]=ddac ;
  571.                                         pv[j]=0x43 ; pp[j++]=ddim ;
  572.         pc[i]="POP"   ; px[i++]=j ;     pv[j]=0xD0 ; pp[j++]=dadr ;
  573.         pc[i]="PUSH"  ; px[i++]=j ;     pv[j]=0xC0 ; pp[j++]=dadr ;
  574.         pc[i]="RET"   ; px[i++]=j ;     pv[j]=0x22 ; pp[j++]=nopr ;
  575.         pc[i]="RETI"  ; px[i++]=j ;     pv[j]=0x32 ; pp[j++]=nopr ;
  576.         pc[i]="RL"    ; px[i++]=j ;     pv[j]=0x23 ; pp[j++]=accm ;
  577.         pc[i]="RLC"   ; px[i++]=j ;     pv[j]=0x33 ; pp[j++]=accm ;
  578.         pc[i]="RR"    ; px[i++]=j ;     pv[j]=0x03 ; pp[j++]=accm ;
  579.         pc[i]="RRC"   ; px[i++]=j ;     pv[j]=0x13 ; pp[j++]=accm ;
  580.         pc[i]="SETB"  ; px[i++]=j ;     pv[j]=0xD3 ; pp[j++]=cflg ;
  581.                                         pv[j]=0xD2 ; pp[j++]=bita ;
  582.         pc[i]="SJMP"  ; px[i++]=j ;     pv[j]=0x80 ; pp[j++]=rela ;
  583.         pc[i]="SUBB"  ; px[i++]=j ;     pv[j]=0x94 ; pp[j++]=acim ;
  584.                                         pv[j]=0x96 ; pp[j++]=acir ;
  585.                                         pv[j]=0x98 ; pp[j++]=acrg ;
  586.                                         pv[j]=0x95 ; pp[j++]=acdd ;
  587.         pc[i]="SWAP"  ; px[i++]=j ;     pv[j]=0xC4 ; pp[j++]=accm ;
  588.         pc[i]="XCH"   ; px[i++]=j ;     pv[j]=0xC8 ; pp[j++]=acrg ;
  589.                                         pv[j]=0xC5 ; pp[j++]=acdd ;
  590.                                         pv[j]=0xC6 ; pp[j++]=acir ;
  591.         pc[i]="XCHD"  ; px[i++]=j ;     pv[j]=0xD6 ; pp[j++]=acir ;
  592.         pc[i]="XRL"   ; px[i++]=j ;     pv[j]=0x64 ; pp[j++]=acim ;
  593.                                         pv[j]=0x66 ; pp[j++]=acir ;
  594.                                         pv[j]=0x68 ; pp[j++]=acrg ;
  595.                                         pv[j]=0x65 ; pp[j++]=acdd ;
  596.                                         pv[j]=0x62 ; pp[j++]=ddac ;
  597.                                         pv[j]=0x63 ; pp[j++]=ddim ;
  598.                          px[i] = j ;
  599.         return i ;
  600. }
  601.  
  602. /*
  603.         End of 51SYM.C
  604. */
  605.  
  606.