Только что проверил реализацию в ББ (скачал школьную версию). Там CAP убирает только 5й бит (при нумерации с нуля), что позволяет ей отлично работать с русскими буквами, за исключением ё/Ё. Код практически не отличается от XDS за следующими поправками:
1. IMPORT SYSTEM, Out:=Log;
2.## Код:
```
PROCEDURE CapCheck(i: INTEGER): BOOLEAN;
   BEGIN
      RETURN BITS(i) - {5} = BITS(ORD(CAP(CHR(i))))
   END CapCheck;
```
3. удалить Out.Open.