А я думаю надо делать явно
w := BYTE_TO_WORD(b - 1);
иначе
16#ffff