Mirror byte

© by Vittorio Crapella - i2viu

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