LoginSignup
3
0

More than 1 year has passed since last update.

MSXにおけるプログラム圧縮術

Last updated at Posted at 2022-12-16

はじめに

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のソースの書き方で圧縮する

以下のようなコードを書くことによって、より圧縮します

TEST-before.BAS
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$
TEST-compressafter.BAS
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サイトもより快適になるんじゃないかと思います。

3
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0