はじめに
MSXパソコン (BASIC) におけるプログラム圧縮術を紹介します。
MSXBASICで使えるのはおおむね23kbytesぐらい
カセットテープしか繋がっていないMSXなら28815 bytes までユーザーエリアを確保できるのですが、
ディスクBASICを接続した時点でこのぐらいまで減ってしまいます。
ですが、MSX-DOS2カートリッジを差すとはある程度緩和され、25kbytesぐらいまで使えます。
あなたのMSXの容量 64kbytes? 64+256kbytes? 512kbytes?
単体で最大容量が確保できたのが、松下電器の FS-A1GT (最終品)です。
ですけど、それでもユーザーエリアは 25kbytesぐらいです。
確かにRAMはありますが、スロットに隠されたメモリと、メモリマップで切り替えるバンクしかありません。
BASICをバンク切り替えするのはよろしくない
メモリマップを切り替えれば確かにBASICのバンクが切り替わりますが、
それは動いているCPUに対して、ゲームカセットを突然外したり、交換したりと同じことになるので、相当不安定になります。
普通の使い方
- CALL MEMINI - 0000-7FFF番地をRAMDISKにする
- CALL RAMDISK - 空いたメモリマップをRAMDISKにする
普通はこれで対処します
アセンブラができるなら?
4000-7FFF番地に16kバイトありますが、このエリアに CALLで呼び出すサブルーチンをアセンブラで実装します。
高速化もするし、BASICのユーザーエリアの低減に貢献します。
基本的にプリローダーのBASICでバイナリを読み込み、その後本番のBASICを読み込みます。
BASICのソースの書き方で圧縮する
以下のようなコードを書くことによって、より圧縮します
10 PRINT "HELLO WORLD!"
20 FOR I=0 TO 99:PRINT I:NEXT I
30 S$="TEST STRING"
40 S$=S$+" AFTER"
50 PRINT S$
10 PRINT"HELLO WORLD!
20 FORI=0TO99:PRINTI:NEXT
30 S$="TEST STRING
40 S=S+" AFTER
50 PRINTS
可読性悪いようにも見えますが、案外慣れてしまうと圧縮したものでも可読できたりもします
ファイル名を短くして圧縮する
昔は README.DOC があるほどでしたのですが、別にテキストファイルはどんな拡張子でもよかったのです
こんなファイル名で十分だったりします
- NEXT.A (.BASのつもり)
- BIN.B (.BINのつもり)
- TOP.T (.TXTのつもり)
MSXでやってきた技術の応用例
さいごに
昔の人はこうやって苦労してメモリを確保していました。
しかし、今現代でも、こういう細かすぎることを大切にすれば、
Webサイトもより快適になるんじゃないかと思います。