Re: Fast GCR decoding?

From: MagerValp (MagerValp_at_cling.gu.se)
Date: 2005-11-08 10:33:41

>>>>> "s" == silverdr  <silverdr@inet.com.pl> writes:

s> Do you mean you were able to split the GCR nybbles in RT? What do
s> you mean by "partially" though? Could you elaborate a bit on the
s> method and results, please?

No, there aren't enough cycles to decode to nybbles in realtime, thus
only partially decoded. I don't have my notes here, but it was
something like this:

  read 1st gcr byte		; 5 + 3 bits
  store in buf[0]		; 00000xxx
  store in buf[1]		; xxxxx111

  read 2nd gcr byte		; 2 + 5 + 1 bits
  lsr, lsb to carry
  store in buf[2]		; x1122222

  read 3rd gcr byte		; 4 + 4 bits
  store to buf[4]		; xxxx4444
  ror, msb from carry
  store to buf[3]		; 33333xxx

  read 4th gcr byte		; 1 + 5 + 2 bits
  asl, msb to carry
  rol buf[4]			; xxx44444
  store to buf[5]		; 5555566x

  read 5th gcr byte		; 3 + 5 bits
  store to buf[7]		; 66677777

  add 8 to bufptr, loop

so after 5 gcr bytes have been read, the nybble buffer contains:

 buf	data		steps to decode
  0:	00000xxx	-> lsr lsr lsr
  1:	xxxxx111	-> asl asl, merge with buf[2]
  2:	x1122222	-> and #$1f
  3:	33333xxx	-> lsr lsr lsr
  4:	xxx44444	-> and #$1f
  5:	5555566x	-> lsr lsr lsr
  6:	xxxxxxxx	-> merge from buf[5] and buf[7]
  7:	66677777	-> and #$1f

3 nybbles just require ANDing, 3 just shifting, and only 2 nybbles
require several operators. I implemented the full decode as a 2nd pass
that merges the nybbles into bytes, but for the next version I'll see
if I can merge the decoding with the transfer loop.

HTH,

-- 
    ___          .     .  .         .       . +  .         .      o   
  _|___|_   +   .  +     .     +         .  Per Olofsson, arkadspelare
    o-o    .      .     .   o         +          MagerValp@cling.gu.se
     -       +            +    .     http://www.cling.gu.se/~cl3polof/

       Message was sent through the cbm-hackers mailing list

Archive generated by hypermail pre-2.1.8.