I wanted it to be shorter, by using loop and
X.Y=Z
but as I can see, you can't use another variable as bit reference, only static values.
I wanted it to be shorter, by using loop and
X.Y=Z
but as I can see, you can't use another variable as bit reference, only static values.
uint16_t enlargeYourByte(uint8_t input)
2 {
3 uint16_t x = input;
4 x = (x ^ (x << 4)) & 0x0f0f;
5 x = (x ^ (x << 2)) & 0x3333;
6 x = (x ^ (x << 1)) & 0x5555;
7 return x | (x << 1));
8 }
This is how they do it in C. Can we port this to PBP ?
I think this does it:
Code:Input VAR BYTE Wide VAR WORD X VAR WORD Y VAR WORD EnlargeYourByte: X = Input Y = Input << 4 X = X ^ Y X = X & $0F0F Y = X << 2 X = X ^ Y X = X & $3333 Y = X << 1 X = X ^ Y X = X & $5555 Wide = X << 1 RETURN
output any_word-> 1100110011001111Code:any_byte=101011 ;eg input any_byte-> 10101011 for any_cnt=0 to 7 any_word=any_word<<2 if any_byte.7 then any_word=any_word+3 any_byte=any_byte<<1 next
mikes
output any_word-> 1000100010001010Code:X VAR WORD Y VAR WORD ;eg input any_byte-> 10101011 X = ani_r Y = ani_r << 4 X = X ^ Y X = X & $0F0F Y = X << 2 X = X ^ Y X = X & $3333 Y = X << 1 X = X ^ Y X = X & $5555 ani_h = X << 1
not working
corrected
Code:x = ani_r; x = (x ^ (x << 4)) & $0f0f; x = (x ^ (x << 2)) & $3333; x = (x ^ (x << 1)) & $5555; ani_h = x | (x << 1);
and works , probably quicker the my loop
Last edited by richard; - 24th October 2021 at 23:30.
Warning I'm not a teacher
Bookmarks