If you quickly need to flip the bits in a byte in reverse (turning bits from 01234567 to 76543210) you can use this unrolled loop.
ldx #0
.for(var i=0;i<8;i++)
{
lsr // shift A down, bit 0 to C
tay // copy to Y doesn't change C
txa // pull x to a, doesn't change C
rol // shift left, C to bit 0
tax // stash a in x
tya // get start a back from y
}
txa
(kickassembler loop syntax)
This takes a byte in A, reverses the bits and exits with the reversed bits in A again,
using X and Y for temporary storage and only short 2-cycle instructions in the loop.
Of course a table lookup will be faster if you do this a lot in your code.
--
this would be equally fast, at 100cycl +rts (enter with the value in .A, result in .A, .X will be 0)
ldx #8
loop asl
ror $2
dex
bne loop
lda $2
rts
or unrolled (56 cycl +rts):
asl
ror $2
asl
ror $2
asl
ror $2
asl
ror $2
asl
ror $2
asl
ror $2
asl
ror $2
asl
lda $2
ror
rts
--
Optimized version, at 84cycl +rts (enter with the value in .A, result in .A)
sta $02 ; 3
lda #1 ; 2
lp:
ror $02 ; 5
rol ; 2
bcc lp ; 3(2)
; =84
rts
or slightly unrolled:
sta $02 ; 3
lda #1 ; 2
lp:
ror $02 ; 5
rol ; 2
ror $02 ; 5
rol ; 2
bcc lp ; 3(2)
; =72
rts