#8 PUTSサブルーチン
はじめに
今回は、PUTSサブルーチンの内容について掘り下げていこうと思います。
PUTSサブルーチン
PUTSサブルーチンのコードを貼り付けます。

アセンブラの1命令で実現できる処理は非常に小さい単位になっています。その代わり、CPUのクロックである 3.579545MHz の数クロックで処理を終えられるようになっています。(最近の CPU はだいたい 1clock)
何か実現したい小さな単位でも、アセンブラにとってはまだ1命令で表現できない大きな単位であるケースがほとんどです。
「文字列を表示したい」、こんな要求に対して MSX-BASIC であれば「PRINT命令」がほぼそのまま対応していますので、解説書を見ていれば割とすぐに目的の処理を実現する方法にたどり着くことができるでしょう。
しかし、アセンブラはそうはいきません。
とにかく1単位が小さいわけです。そのかわり、やれることの種類があまり多くありません。単位となる処理を組み合わせて複雑な処理を組み立てていくのがアセンブラでのプログラミングになります。
最も小さい単位は、CPUの命令なので、ざっくりどんな演算ができるのか、を頭に入れておくといいですね。おおよそ入ってれば、あとはリファレンスマニュアルの中から欲しい命令の具体的な記述方法を探し出せばいい。
ただ、CPUの命令は、CPUの動きを制御する命令しか存在しないのが厄介なところです。
絵や音を出すにはどうしたらいい?
先に答えを言ってしまうと、絵や音に関連する装置が MSX 本体には搭載されています。絵は VDP、音は PSG や OPLL (MSX-MUSIC) 等、MSXを今でも使っている方々なら名前くらい聞いたことがあるのではないでしょうか? このような装置のことを、周辺装置と呼びます。
CPU と周辺装置は、バスと呼ばれる信号線で物理的に繋げられています。バスとは何かというと、CPUからの制御指示が伝わって各周辺装置へ届く経路ですね。まるで乗り合いバスのようにいろんな行先(装置)への信号が移動する信号線なのでバスと呼びます。
バスは、アドレス線・データ線・制御線が存在しています。アドレス線は「場所」を示す線で、例えば MSX の VDP ならほとんどの機種で 98h, 99h, 9Ah, 9Bh に繋がっています。PSG なら A0h, A1h, A2h, A3h です。データ線は CPU から装置、あるいは装置から CPU へ伝わるデータ(8bit)です。制御線は、CPUから装置への通知(Write)なのか、装置からCPUへの通知(Read)なのかを示す信号や、メモリへのアクセスや I/Oへのアクセスを区別する信号などが入っています。
メモリは、いわゆるROMやRAMです。そう、察しの良い方はお気づきでしょう。MSX の ROMカートリッジもバスで繋がっています。カートリッジの「本体に接続する部分」を見てみると、基板が出ていて片面に 25本。両面合わせて 50本もの端子が出ているのが分かると思います。

この 50本は、電源周りと音声信号、バスの信号が並べられたものになっています。
先ほど「バスには周辺装置がつながる」と書きましたが、MSX がカートリッジでハードウェア機能を追加できるのは、バスが出ているからなんですね。
昔のパソコンは、このような端子がついている機種も多かったです。MSXのようにカートリッジのような形態をしているものだけでなく、PC-9801シリーズではCバス。DOS/Vでは ISAバスなど。両方とも「バス」と書かれてますね。そうです、同じような意味合いのものです。
BIOS
少し話がそれてきたので、プログラムの話に戻しましょう。
文字列を表示とは、VDPに対して文字の表示をするように VDPを制御することです。フォントの形状を定義して、点を打って描画していく、なんてのを想像した人もいるかもしれません。そうです、本来コンピューターはそうやって文字を表示しています。
でも、上のプログラムコード PUTS は、そんなことをしているとは思えませんよね。さすがに短すぎる。
MSXの場合、BIOSと呼ばれるルーチン群が使えることは前回までに説明しています。つまり、VDPを直接制御しなくても、もう少し使いやすい単位にまで昇華されているのが BIOS です。そして、BIOSのエントリーはそんなに多くありません。Z80の命令の種類より少ないです。一度一通りどんなものがあるか見ておいて、その中で自分が使いそうなものを覚えておくといいですね。
BIOS の一覧は、MSX-Datapack や MSXテクニカルハンドブックに掲載されています。
https://ngs.no.coocan.jp/doc/wiki.cgi/TechHan?page=Appendix+A%2E1+BIOS+%B0%EC%CD%F7
自分のやりたい処理を「BIOSの中にあるルーチンの組み合わせで実現できないか?」と考えるのが、アセンブラプログラミングの第一歩です。
文字列の表示は見当たりませんが、文字の表示 CHPUT はある。なら、これを全部の文字繰り返して呼び出せば文字列を表示できる!というわけですね。
まとめ
BIOSにあるルーチンをある程度頭に入れておき、その組み合わせで自分のやりたいことを実現する、というのが伝われば今回の内容としては十分です。
次回は、「自分のやりたい計算を実現する方法は?」を書きたいと思います。
いいなと思ったら応援しよう!
いただいたチップは、FPGA MSX の開発関連に使わせていただきます。