Нашел минимальное изменение, после которого ошибка исчезает.
Добавил тип dummy и вызвал New для этого типа.
## Код:
```
MODULE Init;
(* simple windows application *)

   IMPORT S := SYSTEM, WinApi;

   CONST
      message = "Hello World";
      iconId = 1;
      
   TYPE
      dummy = POINTER TO RECORD END;

   VAR
      instance: WinApi.HINSTANCE;
      mainWnd: WinApi.HWND;

   PROCEDURE WndHandler (wnd, msg, wParam, lParam: INTEGER): INTEGER;
      VAR res: INTEGER; ps: WinApi.PAINTSTRUCT; dc: WinApi.HDC;
   BEGIN
      IF msg = WinApi.WM_DESTROY THEN
         WinApi.PostQuitMessage(0)
      ELSIF msg = WinApi.WM_PAINT THEN
         dc := WinApi.BeginPaint(wnd, ps);
         res := WinApi.TextOut(dc, 50, 50, message, LEN(message));
         res := WinApi.EndPaint(wnd, ps)
      ELSIF msg = WinApi.WM_CHAR THEN
         res := WinApi.Beep(800, 200)
      ELSE
         RETURN WinApi.DefWindowProc(wnd, msg, wParam, lParam)
      END;
      RETURN 0
   END WndHandler;

   PROCEDURE OpenWindow;
      VAR class: WinApi.WNDCLASS; res: INTEGER;
   BEGIN
      class.hCursor := WinApi.LoadCursor(0, S.VAL(WinApi.PtrSTR,
                                                         WinApi.IDC_ARROW));
      class.hIcon := WinApi.LoadIcon(instance, S.VAL(WinApi.PtrSTR, iconId));
      class.lpszMenuName := NIL;
      class.lpszClassName := "Simple";
      class.hbrBackground := WinApi.GetStockObject(WinApi.WHITE_BRUSH);
      class.style := WinApi.CS_VREDRAW + WinApi.CS_HREDRAW
                  (* + WinApi.CS_OWNDC + WinApi.CS_PARENTDC *);
      class.hInstance := instance;
      class.lpfnWndProc := WndHandler;
      class.cbClsExtra := 0;
      class.cbWndExtra := 0;
      res := WinApi.RegisterClass(class);
      mainWnd := WinApi.CreateWindowEx({}, "Simple", "Simple Application",
                                          WinApi.WS_OVERLAPPEDWINDOW,
                                          WinApi.CW_USEDEFAULT, WinApi.CW_USEDEFAULT,
                                          WinApi.CW_USEDEFAULT, WinApi.CW_USEDEFAULT,
                                          0, 0, instance, 0);
      res := WinApi.ShowWindow(mainWnd, WinApi.SW_SHOWDEFAULT);
      res := WinApi.UpdateWindow(mainWnd);
   END OpenWindow;

   PROCEDURE MainLoop;
      VAR msg: WinApi.MSG; res: INTEGER;
   BEGIN
      WHILE WinApi.GetMessage(msg, 0, 0, 0) # 0 DO
         res := WinApi.TranslateMessage(msg);
         res := WinApi.DispatchMessage(msg);
      END;
      WinApi.ExitProcess(msg.wParam)
   END MainLoop;
   
   PROCEDURE Test;
   VAR
      s: POINTER TO ARRAY OF CHAR;
      d: dummy;
   BEGIN
      NEW(d);
      NEW(s, 131055);
   END Test;

BEGIN
   OpenWindow;
   Test;
   MainLoop
END Init.
```


Команда линковки (* Init обратно в MySimple не стал переименовывать *):
DevLinker.LinkExe MySimple.exe := Kernel+ Init 1 applogo.Ico ~

После чего все заработало. Видимо первым должен вызываться простой New, чтобы что-то корректно проинициализировалось, а New для массивов первым вызваться не может. У меня такое предположение.