[index > X68kの読み物や資料の部屋]

X-BASICでのフリーエリアについて


外部関数が誤動作する理由

X-BASICのフリーエリア(*1)を広く取りすぎると、 一部の外部関数がメモリを確保できなくなるために正常動作しなくなります (大抵の外部関数はエラーを返すので誤動作というほどのことではありませんが)。

「そんな馬鹿な」と思われるかもしれませんが、 X-BASICでいうところのフリーエリアとはBASICプログラムのためのフリーエリアでしかなくて (BASICプログラムや変数を格納するために使われています)、 外部関数はこのフリーエリアを利用できないようになっているからです。

そこで、一部の外部関数を利用する場合は、BASICのフリーエリアを少なくして、 OS(Human68k)のフリーエリアを広くとってやる必要があります。

- - - - - - - - - - - - - - - - - -
(メモリイメージ図)
┌───┐
│   │Human68kとデバイスドライバ
├───┤
│   │COMMAND.X
├───┤
│   │X-BASIC
├ ─ ┤
│   │外部関数
├ ─ ┤
│   │BASICのフリーエリア
├───┤
│   │Human68kのフリーエリア
└───┘
- - - - - - - - - - - - - - - - - -

具体的には、BASIC.Xと同じディレクトリにあるBASIC.CNFをエディタで書き換えます。 ED A:\BASIC2\BASIC.CNFなどとしてエディタを起動し、FREE=xxxの数値を変えてください。

1回限りでいい場合は、BASIC /Fxxxの方を利用しましょう。

[戻る]


フリーエリアの調べ方

X-BASIC上でHuman68kのフリーエリアを知る簡単な方法は、 ! MEMFREEで、チャイルドプロセスでMEMFREEコマンドを実行することです。 (注:Human68kのフリーエリアがまったくないとチャイルドプロセスを起動できません)

プログラム中でHuman68kのフリーエリアを知るには、DOSコール_MALLOCに-1を与えます。 libbdos.fnc(LIBBC)をインストールして、 以下のようにすることでHuman68kのフリーエリアを得ることができます。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
freesize = _dos_malloc( -1 )
if (freesize shr 24) = &h82 then ?"メモリがまったくありません"
freesize = freesize and &hffffff
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

print freeはX-BASICのフリーエリア残量を表示するだけなので気をつけましょう。

[戻る]


  1. BASICのフリーエリアはコンフィグファイル (通常はBASIC.Xと同じディレクトリにあるBASIC.CNF)の「FREE=xxx」か、 またはBASIC.Xのスイッチ「/f」で指定する。

[index > X68kの読み物や資料の部屋]

Written by mor.

最終更新は2001年10月31日(水)です。