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
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
;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: