SX Microcontroller Math Method

Increment / Decrement

Increment / Decrement 32 bit address and detect zero

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