Чтобы правильно перевести код нужно знать определения переменных и массива.
Судя по коду, 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; //