Bit manipulation - simondotm/stardot-wiki GitHub Wiki

Setting Clearing and Copying bits of data

AND xx will clear the bits in A that are also clear in xx, for example:

      A            xx      after AND xx

  %abcdefgh    %01010101    %0b0d0f0h

ORA xx will set the bits in A that are also set in xx, for example:

      A            xx      after ORA xx

  %abcdefgh    %01010101    %a1c1e1g1

EOR xx will toggle the bits in A that are set in xx, for example:

      A            xx      after EOR xx

  %abcdefgh    %01010101    %aBcDeFgH

To clear the bits in A that are set in xx, use both ORA and EOR, for example:

      A            xx      after OR xx  after EOR xx

  %abcdefgh    %01010101    %a1c1e1g1    %a0c0e0g0

You can copy a number of bits to a memory location without changing the other bits using EOR and AND. For example, to copy the top four bits of A into a memory location without changing the bottom four bits, use the following:

               A=12345678  dst=abcdefgh

   EOR dst       ********      abcdefgh

   AND #&F0      ****0000      abcdefgh

   EOR dst       1234efgh      abcdefgh

   STA dst       1234efgh      1234efgh

This is much more efficient than the usual code:

   PHA

   LDA dst:AND #&0F:STA dst

   PLA

   AND #&F0:ORA dst:STA dst

See http://mdfs.net/Info/Comp/6502/ProgTips

⚠️ **GitHub.com Fallback** ⚠️