Guys & Alice

It seems like there's been several questions about delay loops in the
last few weeks. So I thought it'd be interesting to see if we could turn
this into a challenge:

Create a delay loop that can loop for up to 2^16 times while mininmizing
the number of cycles per iteration. For example:

  clrf   lo
  clrf   hi

  movlw  1

loop:

  addwf  lo,f    ;increment the low byte
  skpnc          ;if low byte rolls over
   addwf hi,f    ; then increment the high byte

  skpc           ;We're done if the high byte rolls over.
   goto  loop


This will loop 2^16 times and each pass through the loop is 6 cycles.

I've got a solution that takes 5 cycles per iteration and doesn't use W
(oh I shouldn't have said that - now you know the answer!).

Any takers?

Scott