Bithacks: Difference between revisions
m (fix macro arg syntax) |
Runic Rain (talk | contribs) |
||
Line 36: | Line 36: | ||
== Misc. Tricks == | == Misc. Tricks == | ||
<small>As this list grows tricks here will be consolidated into their own sections. Clever optimization tricks that aren't necessarily what someone might personally call a "bithack" are okay here as well!</small> | <small>As this list grows tricks here will be consolidated into their own sections. Clever optimization tricks that aren't necessarily what someone might personally call a "bithack" are okay here as well!</small> | ||
'''Direction As Index''' ''(4 bytes / 6 cycles)'' | |||
<br> | |||
<u>inputs:</u> A | |||
<br> | |||
<u>outputs:</u> A | |||
<pre> | |||
; Ever wonder why facing flags are 0=right and 1=left? This is why. It's incredibly cheap. | |||
ASL : ROL : AND #$01 ; get facing as index | |||
</pre> |
Revision as of 10:22, 12 April 2021
Bithacks are optimization tricks that utilize information in bits and bit manipulation
to accomplish their tasks. Usually they work in a slightly non-obvious way, (the most famous being the fast inverse sqrt), and bit manipulation in general is harder on the 65c816. To that end here is a collection of some useful tricks.
Note: cycle counts are intended to be a worst case measure.
Math Bithacks
Signed Division By 2 (5 bytes / 10 cycles)
inputs: A
outputs: A
STA $00 ASL $00 ROR
Signed Division By 2n (6+2n bytes / 5+2n cycles)
inputs: A, n
outputs: A
; signed division by two, n times macro SignedDiv_2N(n) BMI ?negative LSR #<n> BRA ?end ?negative: LSR #<n> ORA #($FF<<(8-<n>)) ; sign extension ?end: endmacro
Misc. Tricks
As this list grows tricks here will be consolidated into their own sections. Clever optimization tricks that aren't necessarily what someone might personally call a "bithack" are okay here as well!
Direction As Index (4 bytes / 6 cycles)
inputs: A
outputs: A
; Ever wonder why facing flags are 0=right and 1=left? This is why. It's incredibly cheap. ASL : ROL : AND #$01 ; get facing as index