UrForth: "STRLITERAL" now respects the optimiser
[urasm.git] / libs / revbits_a.zas
blobc2091540ab54d8f40cb8ad71946a5025afa19c64
1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;; reverse bits in A
3 ;; 17 bytes / 66 cycles
4 ;; http://www.retroprogramming.com/2014/01/fast-z80-bit-reversal.html
5 ;; IN:
6 ;;   A: byte
7 ;; OUT:
8 ;;   A: bit-reversed byte
9 ;;   reg8: dead
10 ;;   F: dead
11 MACRO revbits_a reg8
12   ld    =reg8[0],a  ; a = 76543210
13   rlca
14   rlca              ; a = 54321076
15   xor   =reg8[0]
16   and   0xAA
17   xor   =reg8[0]    ; a = 56341270
18   ld    =reg8[0],a
19   rlca
20   rlca
21   rlca              ; a = 41270563
22   rrc   =reg8[0]    ; =reg8[0] = 05634127
23   xor   =reg8[0]
24   and   0x66
25   xor   =reg8[0]    ; a = 01234567
26 ENDM
29 ;  org #8000
30 ;  revbits_a d
31 ;  ret