Чтобы правильно перевести код нужно знать определения переменных и массива.
Судя по коду, mask и value - целые, причем тоже unsigned, т.е. без знака, так же как и элементы массива word
Поищите в коде похожие определения:
- Код: Выделить всё
- unsigned int mask;
 unsigned int value;
 unsigned int word[];
Если да, то цикл должен примерно выглядеть так:
- Код: Выделить всё
- i:=1;
 j:=0;
 while (i>=0) do begin // for с двумя индексами в pascal невозможен
 word[i]:=((value AND mask) shr j)OR(&8000); // ((unsigned int) ((value & mask) >> j)) | 0x8000    преобразование "без знака" выполнится само, если массив объявлен беззнаковым: var  word:array of word, к примеру.
 mask := mask shl 15;
 dec(i,1); // или i:=i-1;
 inc(j,15); // или j:=j+15;
 end; //