Mirror byte
© by Vittorio Crapella - i2viu
COME OTTENERE IL MIRROR DI UN BYTE CON GLI ST6
COME OTTENERE IL MIRROR DI UN BYTE CON GLI ST6
Mi é capitato di dover rovesciare i bit di un byte messo su PORT_A per adattare un software con la parte hardware di un circuito; in pratica dopo aver elaborato dei dati all'interno di un ST62xx si doveva presentare il valore numerico del registro "a" sull'uscita PORT_A ma con i bit rovesciati a specchio (mirror, b7=b0 .... b0=b7).
Ecco come ho risolto il problema: File di testo
;Esempio: si entra con a=10011101b
; si esce con a=10111001b
mirror clr v ;v=0
ldi y,1 ;parto con il primo bit (bit0)
ld w,a ;salvo a in w
cicle ld a,w
rlc a ;b7 di a in CY
ld w,a ;risalvo a in w per dopo
jrc setx ;se b7=1 cy=1 pertanto salto a setx
jp resx ;altrimenti b7=0 e vado a resx
setx ld a,y ;prendo nr bit da settare
ld x,a ;lo metto in x
ldi a,255
com a ;cy=1 e a=0
rcla1 rlc a ;ruoto in a
dec x ;conto bit
jrnz rcla1
or com a
ld x,a
ld a,v
com a
and a,x
com a
ld v,a ;ho settato il bit e salvo in v
jp incy ;vado a contare 8 bit
resx ld a,y
ld x,a ;x=y
clr a ;cy=0
ldi a,255
rcla2 rlc a
dec x
jrnz rcla2
ld x,a
ld a,v
and a,x
ld v,a ;ho resettato ilbit voluto e salvo in v
incy inc y
ld a,y
cpi a,9 ;se sono gia 8 bit fatti esco
jrnc return
jp cicle ;altrimenti continuo prossimo bit
return ld a,v
ret