playground:reversing_bits_in_a_byte
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
playground:reversing_bits_in_a_byte [2020-02-12 16:42] – created icepic | playground:reversing_bits_in_a_byte [2020-03-12 13:05] (current) – tlr | ||
---|---|---|---|
Line 19: | Line 19: | ||
using X and Y for temporary storage and only short 2-cycle instructions in the loop. | 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. | 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 | ||
+ | </ | ||
playground/reversing_bits_in_a_byte.txt · Last modified: 2020-03-12 13:05 by tlr