Hi Andrew.
I got some time and tried to rewrite your filter code to optimize it a little bit.
The formula can be rewritten as: Ave' = Ave + ( New - Ave )/16 ;
Used the same names for variables. TEMP cell isn't used.
I having more and more believing that 12 is some magical number for small completed code fragments. ;)
; Initially written by Andrew Warren (fastfwd at ix.netcom.com). ; Optimized by Dmitry A. Kiryashov (zews at aha.ru) 06/18/2000 ; 12 clocks/words Filter: mov W, AVE sub NEW, W ;NEW - AVE mov W, <>NEW and W, #$0F ;get /16 int part sb C ;result is neg? or W, #$F0 ;yes add AVE, W mov W, <>NEW and W, #$F0 ;get /16 frac part add AVFRAC, W snb C inc AVE ; ; low nibble of AVFRAC isn't used ; so we can utilize it for other purposes ;)