Translated and optimized for the Scenix SX by James Newton
; given address of 32 bit little-endian counter in W, ; increment or decrement the counter and return Z set if zero ;Inc32z ;From Dmitry Kiryashov inc32z: mov FSR, W clrb Z incsz IND ret incsz FSR incsz IND ret incsz FSR incsz IND ret incsz FSR inc IND ret
;Dec32z ;From Rich Leggitt, Andrew Warren, and Dmitry Kiryashov ; 99.2% of the time, this takes 10 cycles w/call dec32z: mov FSR, W decsz IND jmp dec32nz inc FSR mov W, IND inc FSR or W, IND inc FSR or W, IND ;get _Z finally ret dec32nz: clrb Z ;set _Z=0 movsz W, ++IND ret incsz FSR ;doesn't corrupt _Z decsz IND movsz W, ++IND ret incsz FSR ;... decsz IND movsz W, ++IND ret incsz FSR ;... decsz IND ret ret