home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / crossasm / uasm.arc / Z8SYM.C < prev    next >
C/C++ Source or Header  |  1986-04-06  |  25KB  |  795 lines

  1. /*
  2.         Custom Computer Consultants
  3.         Universal Cross Assembler
  4.         Z8 Symbols
  5.         5 April 1986
  6. */
  7. #include <stdio.h>
  8. #include <uasm.h>
  9.  
  10. char   *version = {"Z8 Assembler -- V3.5  4/5/86\n"} ;
  11.  
  12.  
  13. #define RSEG    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 REG     7       /*      Register 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 == RSEG || seg == DSEG ) return TRUE ;
  72.        else return FALSE ;
  73. }
  74.  
  75. set_il()
  76. {
  77.        il[RSEG] =    0 ;
  78.        il[CSEG] =    0 ;
  79.        il[DSEG] =    0 ;
  80.        il[XSEG] = 4096 ;
  81. }
  82.  
  83. set_type()
  84. {
  85.        segtype[RSEG] = '^'  ;
  86.        segtype[CSEG] = '\'' ;
  87.        segtype[DSEG] = '\"' ;
  88.        segtype[XSEG] = '+'  ;
  89. }
  90.  
  91. amatch(s)
  92. char   *s ;
  93. {
  94.        int     tc ;
  95.  
  96.        tc = cc - 1 ;
  97.        while( *s ) {
  98.          if( toupper(ch) != *s++ ) { iptr = &ibuf[cc=tc] ; getch() ;
  99.                                      return FALSE ;
  100.                                      }
  101.          getch() ;
  102.          }
  103.        return TRUE ;
  104. }
  105.  
  106. gen(len)
  107. int     len ;
  108. {
  109.         ib[2] = parval & 0xFF ;
  110.         ib[1] = len == 3 ? parval >> 8 : ib[2] ;
  111.         instl = len ;
  112.         ib[0] = pv[k] ;
  113.         return TRUE ;
  114. }
  115.  
  116. isreg(r)
  117. int    r ;
  118. {
  119.        return ((( r >= 0   ) && ( r <= 127 )) ||
  120.                (( r >= 240 ) && ( r <= 255 ))   ) ;
  121. }
  122.  
  123. iswreg(r)
  124. int    r ;
  125. {
  126.        return (( r >= 0 ) && ( r <= 15 )) ;
  127. }
  128.  
  129. nopr()  { return gen(1) ; }
  130.  
  131. immd()  { if( nomatch("#") )            return FALSE ;
  132.           parval = eval() ;
  133.           return gen(2) ; }
  134.  
  135. dreg()  { parval = eval() ;
  136.           if     (( SYMTYPE == RSEG ) && iswreg(parval)) parval |= 0xE0 ;
  137.           else if(( SYMTYPE == DSEG ) && isreg(parval)) ;
  138.                else push('M') ;
  139.           return gen(2) ; }
  140.  
  141.  
  142. indr()  { if( nomatch("@") )            return FALSE ;
  143.           return dreg() ; }
  144.  
  145. wreg()  { parval = eval() ;
  146.           if ( SYMTYPE != RSEG  )        return FALSE ;
  147.           if ( !iswreg(parval)  )        return FALSE ;
  148.           ib[0] = (pv[k] + (parval << 4 )) ;
  149.           instl = 1 ;
  150.           return TRUE ; }
  151.  
  152. arith()
  153. {        
  154.           int  dst, dt, src, st, mode, type, rc  ;
  155.  
  156.           dt = st = 1 ;        /* Unrecognized         */
  157.           mode = 4 ;           /* Default R,R          */
  158.           rc = TRUE ;
  159.  
  160.           if( amatch("@") ) dt |= 4 ;       /* Set Indirect Flag */
  161.           dst = eval() ; type = SYMTYPE ;
  162.           if( (( type == RSEG ) && iswreg(dst)) ||
  163.               (( type == DSEG ) && isreg(dst)) )   dt = (dt & ~1) | type ;
  164.  
  165.           if( amatch(",#") ) {
  166.               src = eval() ;
  167.               st = 8 ;
  168.               }
  169.           else {
  170.                if( amatch(",@") )    st |= 4 ;
  171.                else if( notcomma() ) return FALSE ;
  172.                src = eval() ; type = SYMTYPE ;
  173.                if( (( type == RSEG ) && iswreg(src)) ||
  174.                    (( type == DSEG ) && isreg(src)) )  st = (st & ~1) | type ;
  175.                }
  176.  
  177.           switch ( dt*10+st ) {
  178.  
  179.             case  0 : mode = 2 ; 
  180.                       goto ww ;
  181.  
  182.             case  4 : mode = 3 ;
  183.             
  184.             ww:       parval = ( dst << 4 ) | src ;
  185.                       instl = 2 ;
  186.                       break ;
  187.  
  188.             case  2 : dst |= 0xE0 ; goto rr ;
  189.  
  190.             case 20 : src |= 0xE0 ; goto rr ;
  191.  
  192.             case 22 : ;
  193.             rr:       mode = 4 ;
  194.                       parval = ( src << 8 ) + dst ;
  195.                       instl = 3 ;
  196.                       break ;
  197.  
  198.             case  6 : dst |= 0xE0 ; goto rir ;
  199.  
  200.             case 24 : src |= 0xE0 ; goto rir ;
  201.  
  202.             case 26 : ;
  203.             rir:      mode = 5 ;
  204.                       parval = ( src << 8 ) + dst ;
  205.                       instl = 3 ;
  206.                       break ;
  207.  
  208.             case  8 : dst |= 0xE0 ; goto rim ;
  209.  
  210.             case 28 : ;
  211.             rim:      mode = 6 ;
  212.                       parval = ( dst << 8 ) + src ;
  213.                       instl = 3 ;
  214.                       break ;
  215.  
  216.             case 48 : dst |= 0xE0 ; goto iim ;
  217.  
  218.             case 68 : ;
  219.             iim:      mode = 7 ;
  220.                       parval = ( dst << 8 ) + src ;
  221.                       instl = 3 ;
  222.                       break ;
  223.  
  224.             default : parval = ( src << 8 ) + dst ;
  225.                       instl = 3 ;
  226.                       rc = FALSE ;
  227.             }
  228.           gen(instl) ;
  229.           ib[0] |= mode ;
  230.           return rc ;
  231. }
  232.  
  233. /*     Destination Type        Source Type
  234.  
  235.        0     r                 r   
  236.        2     R                 R   
  237.        4     @r                @r   
  238.        6     @R                @R   
  239.        8     r(r)              r(r)
  240.        A     R(r)              R(r)
  241.        C      -                #IM
  242. */
  243.  
  244. ldins()
  245. {
  246.        int     dst, dt, src, st, x, type ;
  247.  
  248.        dt = st = 1 ;           /* Unrecognized */
  249.  
  250.        if( amatch("@") )       dt = dt | 4 ;
  251.        dst = eval() ; type = SYMTYPE ;
  252.        if( (( type == RSEG ) && iswreg(dst)) ||
  253.            (( type == DSEG ) && isreg(dst)) )    dt = (dt & ~1) | type ;
  254.        if( amatch("(") ) {
  255.          x = eval() ;  type = SYMTYPE ;
  256.          if(( type == RSEG ) && iswreg(x) )      dt = dt | 8 ;
  257.          if( nomatch(")") )                      return FALSE ;
  258.          }
  259.  
  260.        if( notcomma() )                          return FALSE ;
  261.  
  262.        if( amatch("#") ) { src = eval() ; st = 12 ; }
  263.        else {
  264.          if( amatch("@") )     st = st | 4 ;
  265.          src = eval() ;  type = SYMTYPE ;
  266.          if( (( type == RSEG ) && iswreg(src)) ||
  267.              (( type == DSEG ) && isreg(src)) )  st = (st & ~1) | type ;
  268.          if( amatch("(") ) {
  269.            x = eval() ; type = SYMTYPE ;
  270.            if(( type == RSEG ) && iswreg(x) )    st = st | 8 ;
  271.            if( nomatch(")") )                    return FALSE ;
  272.            }
  273.          }
  274.        switch( dt * 16 + st ) {
  275.  
  276.                      /* 00 - r,r       */
  277.          case   0 :  ib[instl++] = ( dst << 4 ) + 0x08 ;
  278.                      ib[instl++] = src + 0xE0 ;                return TRUE ;
  279.  
  280.                      /* 02 - r,R       */
  281.          case   2 :  ib[instl++] = ( dst << 4 ) + 0x08 ;
  282.                      ib[instl++] = src ;                       return TRUE ;
  283.  
  284.                      /* 04 - r,@r      */
  285.          case   4 :  ib[instl++] = 0xE3 ;
  286.                      ib[instl++] = ( dst << 4 ) + src ;        return TRUE ;
  287.  
  288.                      /* 06 - r,@R      */
  289.          case   6 :  ib[instl++] = 0xE5 ;
  290.                      ib[instl++] = src ;
  291.                      ib[instl++] = dst ;                       return TRUE ;
  292.  
  293.                      /* 08 - r,r(r)    */
  294.          case   8 :  ib[instl++] = 0xC7 ;
  295.                      ib[instl++] = ( dst << 4 ) + x ;
  296.                      ib[instl++] = src + 0xE0 ;                return TRUE ;
  297.  
  298.                      /* 10 - r,R(r)    */
  299.          case  10 :  ib[instl++] = 0xC7 ;
  300.                      ib[instl++] = ( dst << 4 ) + x ;
  301.                      ib[instl++] = src ;                       return TRUE ;
  302.  
  303.                      /* 12 - r,IM      */
  304.          case  12 :  ib[instl++] = ( dst << 4 ) + 0x0C ;
  305.                      ib[instl++] = src ;                       return TRUE ;
  306.  
  307.                      /* 32 - R,r       */
  308.          case  32 :  ib[instl++] = ( src << 4 ) + 0x09 ;
  309.                      ib[instl++] = dst ;                       return TRUE ;
  310.  
  311.                      /* 34 - R,R       */
  312.          case  34 :  ib[instl++] = 0xE4 ;
  313.                      ib[instl++] = src ;
  314.                      ib[instl++] = dst ;                       return TRUE ;
  315.  
  316.                      /* 36 - R,Ir      */
  317.          case  36 :  ib[instl++] = 0xE5 ;
  318.                      ib[instl++] = src + 0xE0 ;
  319.                      ib[instl++] = dst ;                       return TRUE ;
  320.  
  321.                      /* 38 - R,IR      */
  322.          case  38 :  ib[instl++] = 0xE5 ;
  323.                      ib[instl++] = src ;
  324.                      ib[instl++] = dst ;                       return TRUE ;
  325.  
  326.                      /* 44 - R,IM      */
  327.          case  44 :  ib[instl++] = 0xE6 ;
  328.                      ib[instl++] = dst ;
  329.                      ib[instl++] = src ;                       return TRUE ;
  330.  
  331.                      /* 64 - Ir,r      */
  332.          case  64 :  ib[instl++] = 0xF3 ;
  333.                      ib[instl++] = ( dst << 4 ) + src ;        return TRUE ;
  334.  
  335.                      /* 66 - Ir,R      */
  336.          case  66 :  ib[instl++] = 0xF5 ;
  337.                      ib[instl++] = src ;
  338.                      ib[instl++] = dst + 0xE0 ;                return TRUE ;
  339.  
  340.                      /* 96 - IR,r      */
  341.          case  96 :  ib[instl++] = 0xF5 ;
  342.                      ib[instl++] = src + 0xE0 ;
  343.                      ib[instl++] = dst ;                       return TRUE ;
  344.  
  345.                      /* 98 - IR,R      */
  346.          case  98 :  ib[instl++] = 0xF5 ;
  347.                      ib[instl++] = src ;
  348.                      ib[instl++] = dst ;                       return TRUE ;
  349.  
  350.                      /* 108 - IR,IM    */
  351.          case 108 :  ib[instl++] = 0xE7 ;
  352.                      ib[instl++] = dst ;
  353.                      ib[instl++] = src ;                       return TRUE ;
  354.  
  355.                      /* 128 - r(r),r   */
  356.          case 128 :  ib[instl++] = 0xD7 ;
  357.                      ib[instl++] = ( src << 4 ) + x ;
  358.                      ib[instl++] = dst + 0xE0 ;                return TRUE ;
  359.  
  360.                      /* 160 - R(r),r   */
  361.          case 160 :  ib[instl++] = 0xD7 ;
  362.                      ib[instl++] = ( src << 4 ) + x ;
  363.                      ib[instl++] = dst ;                       return TRUE ;
  364.  
  365.                      /* Default is R,R */
  366.          default  :  ib[instl++] = 0xE4 ;
  367.                      ib[instl++] = src ;
  368.                      ib[instl++] = dst ;                       return FALSE ;
  369.          }
  370. }
  371.  
  372.  
  373. wrrl()  { if( !wreg() )                        return FALSE ;
  374.           if( notcomma() )                     return FALSE ;
  375.           crela(2) ;
  376.           ib[1] = parval & 0xFF ;
  377.           instl = 2 ;
  378.           return TRUE ; }
  379.  
  380. ccra()
  381. {
  382.        parval = eval() ;
  383.        if( notcomma() ) {           /* cc is "ALWAYS"       */
  384.          ib[0] = pv[k] + 0x80 ;
  385.          parval = parval - ( ilc + 2 ) ;
  386.          if( parval > 127 || parval < -128 ) push('R') ;
  387.          }
  388.        else {
  389.          if( (parval < 0) || (parval > 15) )   return FALSE ;
  390.          ib[0] = pv[k] + ( parval << 4 ) ;
  391.          crela(2) ;
  392.          }
  393.        ib[1] = parval & 0xFF ;
  394.        instl = 2 ;
  395.        return TRUE ;
  396.  }
  397.  
  398. ccda()
  399. {
  400.        parval = eval() ;
  401.        if( notcomma() ) {              /* cc is "ALWAYS"       */
  402.          ib[0] = pv[k] + 0x80 ;
  403.          }
  404.        else {
  405.          if( (parval < 0) || (parval > 15) )   return FALSE ;
  406.          ib[0] = pv[k] + ( parval << 4 ) ;
  407.          parval = eval() ;
  408.          }
  409.        ib[1] = parval >> 8 ;
  410.        ib[2] = parval & 0xFF ;
  411.        instl = 3 ;
  412.        return TRUE ;
  413. }
  414.  
  415.                       
  416. rela()  { crela(2) ;
  417.           return gen(2) ; }
  418.  
  419. crela(n)
  420. int     n ;
  421. {
  422.         parval = eval() - ( ilc + n ) ;
  423.         if( parval > 127 || parval < -128 ) push('R') ;
  424. }
  425.  
  426. indp()  { if( nomatch("@") )                return FALSE ;
  427.           dreg() ;
  428.           if( parval & 1 )                  return FALSE ;
  429.           return TRUE ; }
  430.  
  431.  
  432. coda()  { parval = eval() ;
  433.           return gen(3) ; }
  434.  
  435. drep()  { if( !dreg() )                return FALSE ;
  436.           return                  ib[1] & 1 ? FALSE : TRUE ; }
  437.  
  438. ipiw()
  439. {
  440.        int     dst, src, type ;
  441.  
  442.        if( nomatch("@@") )           return FALSE ;
  443.        dst = eval() ;  type = SYMTYPE ;
  444.        if(( type != RSEG ) || !iswreg(dst) || ( dst & 1 )) return FALSE ;
  445.        if( notcomma() )                                    return FALSE ;
  446.        if( nomatch("@") )           return FALSE ;
  447.        src = eval() ;
  448.        if(( type != RSEG ) || !iswreg(src))                return FALSE ;
  449.        parval = ( src << 4 ) + dst ;
  450.        return gen(2) ;
  451. }
  452.  
  453.  
  454.  
  455. ipwr()
  456. {
  457.        int     dst, src, type ;
  458.  
  459.        if( nomatch("@@") )           return FALSE ;
  460.        dst = eval() ;  type = SYMTYPE ;
  461.        if(( type != RSEG ) || !iswreg(dst) || ( dst & 1 )) return FALSE ;
  462.        if( notcomma() )                                    return FALSE ;
  463.        src = eval() ;
  464.        if(( type != RSEG ) || !iswreg(src))                return FALSE ;
  465.        parval = ( src << 4 ) + dst ;
  466.        return gen(2) ;
  467. }
  468.  
  469. iwip()
  470. {
  471.        int     dst, src, type ;
  472.  
  473.        if( nomatch("@") )                                  return FALSE ;
  474.        dst = eval() ;  type = SYMTYPE ;
  475.        if(( type != RSEG ) || !iswreg(dst))                return FALSE ;
  476.        if( notcomma() )                                    return FALSE ;
  477.        if( nomatch("@") )                                  return FALSE ;
  478.        src = eval() ;
  479.        if(( type != RSEG ) || !iswreg(src) || (src & 1))   return FALSE ;
  480.        parval = ( dst << 4 ) + src ;
  481.        return gen(2) ;
  482. }
  483.  
  484. wrip()
  485. {
  486.        int     dst, src, type ;
  487.  
  488.        dst = eval() ;  type = SYMTYPE ;
  489.        if(( type != RSEG ) || !iswreg(dst))                return FALSE ;
  490.        if( notcomma() )                                    return FALSE ;
  491.        if( nomatch("@") )                                  return FALSE ;
  492.        src = eval() ;
  493.        if(( type != RSEG ) || !iswreg(src) || (src & 1))   return FALSE ;
  494.        parval = ( dst << 4 ) + src ;
  495.        return gen(2) ;
  496. }
  497.  
  498. #define INFO     1
  499. #define NOINFO   0
  500.  
  501. doseg()
  502. {
  503.        il[active] = ilc ;
  504.        ilc = il[j] ;
  505.        active = j ;
  506.        return NOINFO ;
  507. }
  508.  
  509. dods()
  510. {
  511.        instl = eval() ;
  512.        return NOINFO ;
  513. }
  514.  
  515. dodw()
  516. {                
  517.        parval = eval() ;
  518.        ib[cput++] = parval >> 8 ;
  519.        ib[cput++] = parval & 0xFF ;
  520.        while ( sym == ',' ) {
  521.          getch() ;
  522.          parval = eval() ;
  523.          ib[cput++] = parval >> 8 ;
  524.          ib[cput++] = parval & 0xFF ;
  525.          }
  526.        instl = cput ;
  527.        return INFO ;
  528. }
  529.  
  530. dodb()
  531. {
  532.        parval = eval() ;
  533.        ib[cput++] = parval & 0xFF ;
  534.        while ( sym == ',' ) {
  535.          getch() ;
  536.          ib[cput++] = eval() & 0xFF ;
  537.          }
  538.        instl = cput ;
  539.        return INFO ;
  540. }                            
  541.  
  542. doreg()
  543. {
  544.        parval = eval() ;
  545.        if ( pass1 && (lbl == OK) ) {
  546.          symtab[syte-1].value = parval ;
  547.          symtab[syte-1].flags = RSEG ;
  548.          }
  549.        return NOINFO ;
  550. }
  551.  
  552. doequ()
  553. {
  554.        parval = eval() ;
  555.        if ( pass1 && (lbl == OK) ) {
  556.          symtab[syte-1].value = parval ;
  557.          symtab[syte-1].flags = active ;
  558.          }
  559.        return NOINFO ;
  560. }
  561.  
  562. doorg()
  563. {
  564.        parval = eval() ;
  565.        ilc = parval ;
  566.        if ( hsp == 0 ) ha = he = ilc ;
  567.        return NOINFO ;
  568. }
  569.  
  570. dopage()
  571. {
  572.        lnspp = 0 ;
  573.        return NOINFO ;
  574. }
  575.  
  576. doradix()
  577. {
  578.        radix = parval ;
  579.        return NOINFO ;
  580. }
  581.  
  582. doascii()
  583. {
  584.        while( isin(ch," \t") ) getch() ;
  585.        sym = ch ; getch() ;
  586.        while( ch != sym && ch != '\n' ) {
  587.          ib[cput++] = ch ;
  588.          getch() ;
  589.          }
  590.        ib[cput++] = EOS ;
  591.        instl = cput ;
  592.        return INFO ;
  593. }
  594.  
  595. /*
  596.         build_pseudo -- build a table of pointers to pseudo-ops
  597. */
  598.  
  599. build_pseudo()
  600. {
  601.         
  602.         j = -1 ;
  603.         pseudo[++j] = "ASCII" ; pj[j] = ASCII ; ppo[ASCII] = doascii ;
  604.         pseudo[++j] = "CSEG"  ; pj[j] = CSEG  ; ppo[CSEG]  = doseg   ;
  605.         pseudo[++j] = "DB"    ; pj[j] = DB    ; ppo[DB]    = dodb    ;
  606.         pseudo[++j] = "DS"    ; pj[j] = DS    ; ppo[DS]    = dods    ;
  607.         pseudo[++j] = "DSEG"  ; pj[j] = DSEG  ; ppo[DSEG]  = doseg   ;
  608.         pseudo[++j] = "DW"    ; pj[j] = DW    ; ppo[DW]    = dodw    ;
  609.         pseudo[++j] = "EQU"   ; pj[j] = EQU   ; ppo[EQU]   = doequ   ;
  610.         pseudo[++j] = "ORG"   ; pj[j] = ORG   ; ppo[ORG]   = doorg   ;
  611.         pseudo[++j] = "PAGE"  ; pj[j] = PAGE  ; ppo[PAGE]  = dopage  ;
  612.         pseudo[++j] = "RADIX" ; pj[j] = RADIX ; ppo[RADIX] = doradix ;
  613.         pseudo[++j] = "REG"   ; pj[j] = REG   ; ppo[REG]   = doreg   ;
  614.         pseudo[++j] = "RSEG"  ; pj[j] = RSEG  ; ppo[RSEG]  = doseg   ;
  615.         pseudo[++j] = "XSEG"  ; pj[j] = XSEG  ; ppo[XSEG]  = doseg   ;
  616.         return ++j ;
  617. }
  618.  
  619. /*
  620.         buildopc -- build opcode definition tables
  621.                 pc - opcode strings
  622.                 px - index by opcode into opcode values & post processing
  623.                 pv - opcode values
  624.                 pp - post processing functions
  625. */
  626. buildopc()
  627. {
  628.  
  629.  
  630.         i = j = 0 ;
  631.  
  632.         pc[i]="ADC"   ; px[i++]=j ;     pv[j]=0x10 ; pp[j++]=arith ;
  633.  
  634.         pc[i]="ADD"   ; px[i++]=j ;     pv[j]=0x00 ; pp[j++]=arith ;
  635.  
  636.         pc[i]="AND"   ; px[i++]=j ;     pv[j]=0x50 ; pp[j++]=arith ;
  637.  
  638.         pc[i]="BC"    ; px[i++]=j ;     pv[j]=0x7B ; pp[j++]=rela ;
  639.         pc[i]="BNOV"  ; px[i++]=j ;     pv[j]=0xCB ; pp[j++]=rela ;
  640.         pc[i]="BEQ"   ; px[i++]=j ;     pv[j]=0x6B ; pp[j++]=rela ;
  641.         pc[i]="BGE"   ; px[i++]=j ;     pv[j]=0x9B ; pp[j++]=rela ;
  642.         pc[i]="BGT"   ; px[i++]=j ;     pv[j]=0xAB ; pp[j++]=rela ;
  643.         pc[i]="BLE"   ; px[i++]=j ;     pv[j]=0x2B ; pp[j++]=rela ;
  644.         pc[i]="BLT"   ; px[i++]=j ;     pv[j]=0x1B ; pp[j++]=rela ;
  645.         pc[i]="BMI"   ; px[i++]=j ;     pv[j]=0x5B ; pp[j++]=rela ;
  646.         pc[i]="BNC"   ; px[i++]=j ;     pv[j]=0xFB ; pp[j++]=rela ;
  647.         pc[i]="BNE"   ; px[i++]=j ;     pv[j]=0xEB ; pp[j++]=rela ;
  648.         pc[i]="BNOV"  ; px[i++]=j ;     pv[j]=0xCB ; pp[j++]=rela ;
  649.         pc[i]="BNZ"   ; px[i++]=j ;     pv[j]=0xEB ; pp[j++]=rela ;
  650.         pc[i]="BOV"   ; px[i++]=j ;     pv[j]=0x4B ; pp[j++]=rela ;
  651.         pc[i]="BPL"   ; px[i++]=j ;     pv[j]=0xDB ; pp[j++]=rela ;
  652.         pc[i]="BRA"   ; px[i++]=j ;     pv[j]=0x8B ; pp[j++]=rela ;
  653.         pc[i]="BRN"   ; px[i++]=j ;     pv[j]=0x0B ; pp[j++]=rela ;
  654.         pc[i]="BUGE"  ; px[i++]=j ;     pv[j]=0xFB ; pp[j++]=rela ;
  655.         pc[i]="BUGT"  ; px[i++]=j ;     pv[j]=0xBB ; pp[j++]=rela ;
  656.         pc[i]="BULE"  ; px[i++]=j ;     pv[j]=0x3B ; pp[j++]=rela ;
  657.         pc[i]="BULT"  ; px[i++]=j ;     pv[j]=0x7B ; pp[j++]=rela ;
  658.         pc[i]="BZ"    ; px[i++]=j ;     pv[j]=0x6B ; pp[j++]=rela ;
  659.  
  660.  
  661.         pc[i]="CALL"  ; px[i++]=j ;     pv[j]=0xD4 ; pp[j++]=indp ;
  662.                                         pv[j]=0xD6 ; pp[j++]=coda ;
  663.  
  664.         pc[i]="CCF"   ; px[i++]=j ;     pv[j]=0xEF ; pp[j++]=nopr ;
  665.  
  666.         pc[i]="CLR"   ; px[i++]=j ;
  667.                                         pv[j]=0xB1 ; pp[j++]=indr ;
  668.                                         pv[j]=0xB0 ; pp[j++]=dreg ;
  669.  
  670.         pc[i]="COM"   ; px[i++]=j ;
  671.                                         pv[j]=0x61 ; pp[j++]=indr ;
  672.                                         pv[j]=0x60 ; pp[j++]=dreg ;
  673.  
  674.         pc[i]="CP"    ; px[i++]=j ;     pv[j]=0xA0 ; pp[j++]=arith ;
  675.  
  676.  
  677.         pc[i]="DA"    ; px[i++]=j ;
  678.                                         pv[j]=0x41 ; pp[j++]=indr ;
  679.                                         pv[j]=0x40 ; pp[j++]=dreg ;
  680.  
  681.         pc[i]="DEC"   ; px[i++]=j ;
  682.                                         pv[j]=0x01 ; pp[j++]=indr ;
  683.                                         pv[j]=0x00 ; pp[j++]=dreg ;
  684.  
  685.         pc[i]="DECW"  ; px[i++]=j ;
  686.                                         pv[j]=0x81 ; pp[j++]=indr ;
  687.                                         pv[j]=0x80 ; pp[j++]=drep ;
  688.  
  689.         pc[i]="DI"    ; px[i++]=j ;     pv[j]=0x8F ; pp[j++]=nopr ;
  690.  
  691.         pc[i]="DJNZ"  ; px[i++]=j ;     pv[j]=0x0a ; pp[j++]=wrrl ;
  692.  
  693.         pc[i]="EI"    ; px[i++]=j ;     pv[j]=0x9F ; pp[j++]=nopr ;
  694.  
  695.         pc[i]="INC"   ; px[i++]=j ;
  696.                                         pv[j]=0x21 ; pp[j++]=indr ;
  697.                                         pv[j]=0x0E ; pp[j++]=wreg ;
  698.                                         pv[j]=0x20 ; pp[j++]=dreg ;
  699.                                    
  700.         pc[i]="INCW"  ; px[i++]=j ;
  701.                                         pv[j]=0xA1 ; pp[j++]=indr ;
  702.                                         pv[j]=0xA0 ; pp[j++]=drep ;
  703.  
  704.  
  705.         pc[i]="IRET"  ; px[i++]=j ;     pv[j]=0xBF ; pp[j++]=nopr ;
  706.  
  707.  
  708.         pc[i]="JP"    ; px[i++]=j ;     pv[j]=0x30 ; pp[j++]=indp ;
  709.                                         pv[j]=0x0D ; pp[j++]=ccda ;
  710.  
  711.         pc[i]="JR"    ; px[i++]=j ;     pv[j]=0x0B ; pp[j++]=ccra ;
  712.  
  713.         pc[i]="LD"    ; px[i++]=j ;     pv[j]=0xE4 ; pp[j++]=ldins ;
  714.  
  715.         pc[i]="LDC"   ; px[i++]=j ;
  716.                                         pv[j]=0xD2 ; pp[j++]=ipwr ;
  717.                                         pv[j]=0xC2 ; pp[j++]=wrip ;
  718.  
  719.         pc[i]="LDCI"  ; px[i++]=j ;
  720.                                         pv[j]=0xD3 ; pp[j++]=ipiw ;
  721.                                         pv[j]=0xC3 ; pp[j++]=iwip ;
  722.  
  723.  
  724.         pc[i]="LDE"   ; px[i++]=j ;
  725.                                         pv[j]=0x92 ; pp[j++]=ipwr ;
  726.                                         pv[j]=0x82 ; pp[j++]=wrip ;
  727.  
  728.         pc[i]="LDEI"  ; px[i++]=j ;
  729.                                         pv[j]=0x93 ; pp[j++]=ipiw ;
  730.                                         pv[j]=0x83 ; pp[j++]=iwip ;
  731.  
  732.  
  733.         pc[i]="NOP"   ; px[i++]=j ;     pv[j]=0xFF ; pp[j++]=nopr ;
  734.  
  735.         pc[i]="OR"    ; px[i++]=j ;     pv[j]=0x40 ; pp[j++]=arith ;
  736.  
  737.         pc[i]="POP"   ; px[i++]=j ;
  738.                                         pv[j]=0x51 ; pp[j++]=indr ;
  739.                                         pv[j]=0x50 ; pp[j++]=dreg ;
  740.         pc[i]="PUSH"  ; px[i++]=j ;
  741.                                         pv[j]=0x71 ; pp[j++]=indr ;
  742.                                         pv[j]=0x70 ; pp[j++]=dreg ;
  743.  
  744.         pc[i]="RCF"   ; px[i++]=j ;     pv[j]=0xCF ; pp[j++]=nopr ;
  745.  
  746.         pc[i]="RET"   ; px[i++]=j ;     pv[j]=0xAF ; pp[j++]=nopr ;
  747.  
  748.         pc[i]="RL"    ; px[i++]=j ;
  749.                                         pv[j]=0x91 ; pp[j++]=indr ;
  750.                                         pv[j]=0x90 ; pp[j++]=dreg ;
  751.  
  752.         pc[i]="RLC"   ; px[i++]=j ;
  753.                                         pv[j]=0x11 ; pp[j++]=indr ;
  754.                                         pv[j]=0x10 ; pp[j++]=dreg ;
  755.  
  756.         pc[i]="RR"    ; px[i++]=j ;
  757.                                         pv[j]=0xE1 ; pp[j++]=indr ;
  758.                                         pv[j]=0xE0 ; pp[j++]=dreg ;
  759.  
  760.         pc[i]="RRC"   ; px[i++]=j ;
  761.                                         pv[j]=0xC1 ; pp[j++]=indr ;
  762.                                         pv[j]=0xC0 ; pp[j++]=dreg ;
  763.  
  764.         pc[i]="SBC"   ; px[i++]=j ;     pv[j]=0x30 ; pp[j++]=arith ;
  765.  
  766.         pc[i]="SCF"   ; px[i++]=j ;     pv[j]=0xDF ; pp[j++]=nopr ;
  767.  
  768.         pc[i]="SRA"   ; px[i++]=j ;
  769.                                         pv[j]=0xD1 ; pp[j++]=indr ;
  770.                                         pv[j]=0xD0 ; pp[j++]=dreg ;
  771.  
  772.         pc[i]="SRP"   ; px[i++]=j ;     pv[j]=0x31 ; pp[j++]=immd ;
  773.  
  774.         pc[i]="SUB"   ; px[i++]=j ;     pv[j]=0x20 ; pp[j++]=arith ;
  775.  
  776.         pc[i]="SWAP"  ; px[i++]=j ;
  777.                                         pv[j]=0xF1 ; pp[j++]=indr ;
  778.                                         pv[j]=0xF0 ; pp[j++]=dreg ;
  779.  
  780.         pc[i]="TCM"   ; px[i++]=j ;     pv[j]=0x60 ; pp[j++]=arith ;
  781.  
  782.         pc[i]="TM"    ; px[i++]=j ;     pv[j]=0x70 ; pp[j++]=arith ;
  783.  
  784.         pc[i]="XOR"   ; px[i++]=j ;     pv[j]=0xB0 ; pp[j++]=arith ;
  785.  
  786.                         px[i] = j ;
  787.         return i ;
  788. }
  789.  
  790. /*
  791.         End of Z8sym.c
  792. */
  793.  
  794.  
  795.