Вот, взгляните...
## Код:
```
MODULE PrivTest;

IMPORT Log,W:=WinApi,S:=SYSTEM;

PROCEDURE CapThis(VAR s: ARRAY OF SHORTCHAR);
VAR i: W.PtrSTR;
BEGIN
  i := W.CharUpper(S.VAL(W.PtrSTR, S.ADR(s[0])));
END CapThis;

PROCEDURE LowThis(VAR s: ARRAY OF SHORTCHAR);
VAR i: W.PtrSTR;
BEGIN
  i := W.CharLower(S.VAL(W.PtrSTR, S.ADR(s[0])));
END LowThis;

PROCEDURE Do*;
VAR s: ARRAY 512 OF SHORTCHAR;
BEGIN
   s:='abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя';
   CapThis(s); Log.Ln; Log.String(s$);
   LowThis(s); Log.Ln; Log.String(s$);
   Log.Ln;
END Do;

END PrivTest.
```


Как бы все вполне ожидаемо...
А вот для юникода - фигня порлучается. Претендентов на виновники в фигне - двое. ББ и винда.
Я грешу пока на компилятор ББ (типа, принимая короткие символы изисходника-- криво переводит их в юникод)