HMirror.bas
This Function takes a byte in, and returns the byte that has reflected the bits around the x axis,
such that bits 7,6,5,4,3,2,1,0 become bits 0,1,2,3,4,5,6,7.
This can be useful if you elect to make all your graphics face in one direction -
you can mirror the bytes (perhaps to a buffer or a UDG) before you print them.
It's faster to store them facing both ways, but you can make quite a memory saving if you just choose one way.
| Function fastcall hMirror (number as uByte) as uByte
asm
ld c,a
; unrolled loop for speed. Still quite small - costs 10 bytes over the loop version, and saves over half the time.
; 25 bytes and 96 clock cycles
RR C
RLA
RR C
RLA
RR C
RLA
RR C
RLA
RR C
RLA
RR C
RLA
RR C
RLA
RR C
RLA
end asm
END FUNCTION
|
The above function is basically deprecated, but may be easier to understand than the following.
This one below is faster, and smaller. You should use this one:
| Function fastcall hMirror (number as uByte) as uByte
asm
;17 bytes and 66 clock cycles
Reverse:
ld b,a ;b=ABCDEFGH
rrca ;a=HABCDEFG
rrca ;a=GHABCDEF
xor b
and %10101010
xor b ;a=GBADCFEH
ld b,a ;b=GBADCFEH
rrca ;a=HGBADCFE
rrca ;a=EHGBADCF
rrca ;a=FEHGBADC
rrca ;a=CFEHGBAD
xor b
and %01100110
xor b ;a=GFEDCBAH
rrca ;a=HGFEDCBA
end asm
end function
|