home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / program / compiler / nasm20b / libinc / header / 16bit.h65 next >
Text File  |  1993-01-19  |  5KB  |  267 lines

  1.    .if .not .def _16BIT_
  2. _16BIT_ = 1
  3.  
  4.    .if .not .def _STDDEF_
  5.       .include #stddef
  6.    .endif
  7.  
  8. ; usage: inc.w <address> increments 16 bit word
  9.    .macro inc.w
  10.       .if .def @__0
  11.          .undef @__0
  12.       .endif
  13.       inc   %1
  14.       bne   @__0
  15.       inc   %1+1
  16. @__0
  17.    .endm
  18.  
  19. ; usage: dec.w <address> decrements 16 bit word
  20. ; destroys A
  21.    .macro dec.w
  22.       .if .def @__0
  23.          .undef @__0
  24.       .endif
  25.       lda   %1
  26.       bne   @__0
  27.       dec   %1+1
  28. @__0   dec   %1
  29.    .endm
  30.  
  31. ; usage: lsr.w <address>  shifts 16 bit word right
  32. ; LSBit in carry
  33.    .macro lsr.w
  34.       lsr   %1+1
  35.       ror   %1
  36.    .endm
  37.  
  38. ; usage: asl.w <address>  shifts 16 bit word left
  39. ; MSBit in carry
  40.    .macro asl.w
  41.       asl   %1
  42.       rol   %1+1
  43.    .endm
  44.  
  45. ; usage: rol.w <address>  rotates 16 bit word left
  46. ; destroys A
  47. ; MSBit in carry
  48.    .macro rol.w
  49.       .warning "untested macro"
  50.       lda   %1
  51.       asl   a
  52.       rol   %1+1
  53.       rol   %1
  54.    .endm
  55.  
  56. ; usage: ror.w <address>  rotates 16 bit word right
  57. ; destroys A
  58. ; LSBit in carry
  59.    .macro ror.w
  60.       .warning "untested macro"
  61.       lda   %1+1
  62.       lsr   a
  63.       ror   %1
  64.       ror   %1+1
  65.    .endm
  66.  
  67. ; usage: adc.w <value or address>,<address>[,select]
  68. ;        Adds two 16 bit words together, like 68000 ADD.W src,dst
  69. ; destroys A
  70. ; Carry as usual
  71.  
  72.    .macro adc.w
  73. @0    .= @p1
  74.       .if %0=3
  75. @0       .=  %3
  76.       .endif
  77.       .if .not [@0 & @special]
  78.          clc
  79.       .endif
  80.       lda   %2
  81.       .if @0 & @p1
  82.          adc   #<%1
  83.          sta   %2
  84.          lda   %2+1
  85.          adc   #>%1
  86.       .else
  87.          adc   %1
  88.          sta   %2
  89.          lda   %2+1
  90.          adc   %1+1
  91.       .endif
  92.       sta   %2+1
  93.    .endm
  94.  
  95. ; usage: adc8.w <src: value or address>,<dst: address> [,select]
  96. ;        Adds 8 bit byte two 16 bit word.
  97. ;
  98. ; destroys A
  99. ; NO carry
  100.  
  101.    .macro adc8.w
  102. @0    .= @p1
  103.       .if %0=3
  104. @0       .=  %3
  105.       .endif
  106.       .if .def @__0
  107.          .undef @__0
  108.       .endif
  109.       .if .not [@0 & @special]
  110.          clc
  111.       .endif
  112.       lda   %2
  113.       .if @0 & @p1
  114.          adc   #<%1
  115.       .else
  116.          adc   %1
  117.       .endif
  118.       sta   %2
  119.       bcc   @__0
  120.       inc   %2+1
  121. @__0
  122.    .endm
  123.  
  124. ; usage: cmp.w <value or address>,<address>[,select]
  125. ;        Compares two 16 bit words.
  126. ;        like  lda   <address>
  127. ;              cmp   <value or address>
  128. ; destroys A
  129. ; NO carry
  130.  
  131.    .macro cmp.w
  132. @0    .= @p1
  133.       .if   %0=3
  134. @0       .= %3
  135.       .endif
  136.       .if .def @__0
  137.          .undef @__0
  138.       .endif
  139.       lda   %2+1
  140.       .if @0 & @p1
  141.          cmp   #>%1
  142.          bne   @__0
  143.          lda   %2
  144.          cmp   #<%1
  145.       .else
  146.          cmp   %1+1
  147.          bne   @__0
  148.          lda   %2
  149.          cmp   %1
  150.       .endif
  151. @__0
  152.    .endm
  153.  
  154. ; usage: sbc.w <value or address>,<address>[,select]
  155. ;        Subtracts two 16 bit words from another
  156. ;        like  SUB.W 16,value,@p1
  157. ;        subtracts #16 from value
  158. ; destroys A
  159. ; Carry as usual
  160.  
  161.    .macro sbc.w
  162. @0    .= @p1
  163.       .if %0=3
  164. @0       .=  %3
  165.       .endif
  166.       .if .not [@0 & @special]
  167.          sec
  168.       .endif
  169.       lda   %2
  170.       .if @0 & @p1
  171.          sbc   #<%1
  172.          sta   %2
  173.          lda   %2+1
  174.          sbc   #>%1
  175.       .else
  176.          sbc   %1
  177.          sta   %2
  178.          lda   %2+1
  179.          sbc   %1+1
  180.       .endif
  181.       sta   %2+1
  182.    .endm
  183.  
  184. ; usage: eor.w <value or address>,<address>[,select]
  185. ;        Exclusiv ors two 16 bit words together
  186. ; destroys A
  187.  
  188.    .macro eor.w
  189. @0    .= @p1
  190.       .if %0=3
  191. @0       .=  %3
  192.       .endif
  193.       .if @0 & @p1
  194.          lda   %2
  195.          eor   #<%1
  196.          sta   %2
  197.          lda   %2+1
  198.          eor   #>%1
  199.          sta   %2+1
  200.       .else
  201.          lda   %2
  202.          eor   %1+1
  203.          sta   %2
  204.          lda   %2+1
  205.          eor   %1+1
  206.          sta   %2+1
  207.       .endif
  208.    .endm
  209. ; usage: and.w <value or address>,<address>[,select]
  210. ;        Bitwise ANDs two 16 bit words together
  211. ; destroys A
  212.  
  213.    .macro and.w
  214. @0    .= @p1
  215.       .if %0=3
  216. @0       .=  %3
  217.       .endif
  218.       .if @0 & @p1
  219.          lda   %2
  220.          and   #<%1
  221.          sta   %2
  222.          lda   %2+1
  223.          and   #>%1
  224.          sta   %2+1
  225.       .else
  226.          lda   %2
  227.          and   %1+1
  228.          sta   %2
  229.          lda   %2+1
  230.          and   %1+1
  231.          sta   %2+1
  232.       .endif
  233.    .endm
  234.  
  235. ; usage: ora.w <value or address>,<address>[,select]
  236. ;        Bitwise ORs two 16 bit words together
  237. ; destroys A
  238.  
  239.    .macro ora.w
  240. @0    .= @p1
  241.       .if %0=3
  242. @0       .=  %3
  243.       .endif
  244.       .if @0 & @p1
  245.          lda   %2
  246.          ora   #<%1
  247.          sta   %2
  248.          lda   %2+1
  249.          ora   #>%1
  250.          sta   %2+1
  251.       .else
  252.          lda   %2
  253.          ora   %1+1
  254.          sta   %2
  255.          lda   %2+1
  256.          ora   %1+1
  257.          sta   %2+1
  258.       .endif         
  259.    .endm
  260.  
  261.    .macro   neg.w
  262.       eor.w $FFFF,%1
  263.       inc.w %1
  264.    .endm
  265.       
  266.    .endif
  267.