Поскольку беззнаковых типов нету, для их обработки нужно использовать знаковый большего размера, т.е. для word - INTEGER. Могу предложить такой вариант:
## Код:
```
rd.ReadSInt(x);
y := ORD(BITS(x) * {0..15}); (* y := integer(x) and $0000FFFF *)
```
Расширение SHORTINT до INTEGER (integer(x)) делается автоматом для параметра BITS. А побитовые операции делаются через множества.