再現性のない現象は,ちょっとわかりませんが。
> マクロメニューで空きがマイナスになるというのはどのような場合でしょうか。
マクロバッファの空き領域が 32767バイトよりも多い場合,符号つきで表示されるためにマイナスになります。
未確認ですが,マクロバッファの空きが比較的少ないときに,VZが計算違いで0よりも小さく認識してしまうことがあるかもしれません。経験的に見たような気もしますが,再現方法がわかりません。
> また、真フリー表示では負の値だが通常の空き領域表示では正の値になるというのはどのような場合でしょうか。
上記のように,マクロバッファの空き領域が 32767バイトよりも多く確保可能であるときに,明示的に確保したマクロバッファの指定領域が 32767以下であるとき,そのようになると思います。
いずれにしても,領域の大きさが真に負の値になることはなく,あくまでも符号つきで表示しているからですが。
ご期待のような明快なお答えができなくて申し訳ないです。
なお,ログを参照できない方のために,「真フリー表示」を行うための手順を示します。
まず,モジュールメニューで確保可能なマクロバッファの領域のサイズを計算します。
* Macro
5 [ESC]M @M "Module Menu"
x$fdfb+bm-pn..-26, ; dc15
#5267 m.gann
Sc[-, !97 Sc], (r>=0)?{ !98 (r>=0)? >* >^ }
(r&$FF==15)?{ r=r>>8&$7F, &Zd(r) >^ }
(r&$FF==13)?>88
変数 x に取得された真のフリー領域を表示させるために,システムメニューを調整します。
* System menus
10 "Modules <free:$BM/$x>",40,0
BMがユーザによって明示的に確保されたマクロバッファの領域の大きさです。
xが確保可能なマクロバッファの領域の大きさです。
としきさんが言うところの「真フリー表示」とは,xの値を符号つきで表示させたもので,システムメニューの仕様により符号つきで表示されます。
符号を付けずに表示したい場合は,xに代入された値をどこかのバッファに符号なしで出力し,文字列として表示させる必要があります。