Mike Harrison [mike@WHITEWING.CO.UK] says:
While we're on the subject of inline delays, here's a handy 'delay any number of cycles' (within reason!) macro I did when messing with generating TV timings :usage : wait n delays n cycles, n = 0 to about 1024. shortwait macro del ; used by main wait macro if (del>3) && (del<8) call del7+(7-(del)) endif if del <4 if del>=2 goto $+1 endif if ((del) & 1) == 1 nop endif endif endm ; main macro - generates code to wait for (del) cycles) wait macro del if (del)<0 error 'negative delay' endif if (del)>=8 movlw ((del)-8) /4 call delay shortwait ((del-8) % 4) else shortwait (del) endif endm delay addlw 0ff skpnc goto delay return del7 goto del5 ; 7 cycle delay del6 goto del4 ; 6 cycle delay del5 nop ; 5 cycle delay del4 return ; 4 cycle delay