Tatara

付録G
メモリ

TATARAとTANRENは、表を、そしてTANRENは作成中のプログラムも、Z80から見える64 KBの中ではなく、MSXのメモリ・マッパーに置きます。この付録では、ツールのメモリの使い方、プログラムを作るのに必要なメモリの量、そして足りないときにどうすればよいかを説明します。ここで扱うのは、ツールが動いている間に必要なメモリで、できあがったプログラムが動くときに必要なメモリではありません。

G.1 メモリ・マップ

メモリ・マッパーは、16 KBのセグメントに分けられた RAMです。Z80はそのうちの4つを同時に見ることができ、64 KBの4分の1ずつに 1つずつ置かれます。この4分の1をページと呼びます。図G.1に、TATARAやTANRENが動いている間の4つのページの使い方を示します。

PIC

図 G.1: TATARAやTANRENが動いている間のZ80の64 KBと、窓の後ろにあるマッパーのセグメント

G.2 マッパーに置くもの

MSX-DOS2がほかのものに割り当てていないセグメントは空きで、ツールは必要になるたびに、それをMSX-DOS2に求めます。

つまり、プログラムの大きさを制限するのはマッパーの空きメモリで、MSX-DOSがC000hより下にプログラム用に残すメモリではありません。

G.3 プログラムを作るのにツールが必要とするメモリの量

問題になるのは全体の量ではなく、空きメモリの量です。MSX-DOS2はマッパーの一部を自分で使います。以下のテストでは、RAMディスクなしで、MSX2と MSX2+では112 KB、MSX turbo Rでは176 KBでした。RAMディスクがあると、さらに使われます。

表G.1に、いくつかのマシンの空きメモリに何が収まったかを示します。どのソースも、16文字の名前をEQUで定義したもので、プログラムは40 KBのデータを.COMプログラムとしてリンクしたものです。

MSX 全体 MSX-DOS2 空き 名前2000 名前8000 40 KB
MSX2 128 KB 112 KB 16 KB ×(495) ×(495) ×
MSX2 192 KB 112 KB 80 KB ○ ×(2479) ○
turbo R 256 KB 176 KB 80 KB ○ ×(2479) ○
turbo R 384 KB 176 KB 208 KB ○ ×(6447) ○
turbo R 512 KB 176 KB 336 KB ○ ○ ○
turbo R 1024 KB 176 KB 848 KB ○ ○ ○
表 G.1: マッパーの空きメモリに収まるもの。40 KBは40 KBのプログラム。かっこの中の数は、収まった名前の数

ここから、次の目安が得られます。

MSX2にMSX-DOS2のカーネルを加えるカートリッジの多くは、自分のマッパーを持っています。アスキーのMSX-DOS2カートリッジは128 KB、SD-512と MegaFlashRom SCC+ SDは512 KB、Carnivore2は1 MBです。最大4 MBの MEGA-MAPPERや16 MBメモリーカートリッジV3のような、マッパーだけのカートリッジは、どのMSXにもメモリを加えます。これらのカートリッジとその入手先は、付録Hに示します。

MSXのメモリの量を調べる

MSXの起動画面にはメモリの量が表示されますが、機種によっては、コンピューター本体の中のマッパーのメモリだけを表示し、カートリッジのマッパーのメモリは表示しません。https://github.com/javilm/msx-mapperから入手できるMAPPER.COMは、MSX-DOS2が見つけたすべてのマッパーを、それぞれのうちMSX-DOS2が使っている量と空いている量とともに表示します。

A:\>mapper 
Total 256Kb (176Kb sys, 0Kb user, 80Kb free). 
Memory mappers detected by MSX-DOS2: 
[PRIMARY] Expanded slot 3-0: 176Kb sys, 0Kb user, 80Kb free.
 

ツールが使えるのは、freeの量です。

G.4 マッパーがいっぱいになったとき

空きセグメントがなくなると、ツールはout of mapper memory.で止まります。空きを増やすには、次の方法があります。