SX Microcontroller Bit Math Method

Converting a 3-bit number to a 8-bit mask

From: Mike Keitz. There is a trick method that works for 4 bits. It replaces a 2-bit number in a variable with a 4-bit mask:

        mov     W, ++BitP       ;W =    0001  0010  0011 0100
        snb     BitP.1          ;If 0 or 1, result is almost correct now.
        or      BitP, W         ;BitP =[0000][0001] 0011 0111
        inc     BitP            ;BitP = 0001  0010  0100 1000

It could be the core of an 8-bit routine thus:

; Convert 3-bit number (0-7) in INDEX to a 8-bit mask (00000001 ...
; 10000000) in BitP.
	mov	W, INDEX
	and	W, #%00000011	;Start with half of the mask.
	mov	BitP, W
	mov	W, ++BitP	;The 4-bit converter
	snb	BitP.1
	or	BitP, W
	inc	BitP
	snb	INDEX.2	;Is it high 4 bits?
	swap	BitP

via lookup table

7 cycles including the call. 10 words.
two_to_n:
	and	W, #$7
	add	PC, W
	retw	$1
	retw	$2
	retw	$4
	retw	$8
	retw	$10
	retw	$20
	retw	$40
	retw	$80

Tricky

UNTESTED! 8 cycles, 8 words. Iso.
	;build MASK from INDEX.1-3

	mov	w,#1
	sb	INDEX.2
	mov	w,#4
	mov	MASK,w
	sb	INDEX.3
	swap	MASK
	sb	INDEX.1
	rl	MASK
	

Interested: