MZ-700/1500/MZ-800/MZ-2500のSVCファンクションを比較する
TweetMZ-2500にはSVCとFNCと呼ばれるファンクションコールがあります。これはそれまでのモニタサブルーチンに取って代わるもので、多くの機能がBASICインタプリタにて処理されるようになっています(そのため、BASIC以外のシステムの多くで使用できない)。モニタサブルーチンで使っていたCALL命令に代わってZ80のRST命令を利用したスマートな呼び出し方法を採っており、
RST 18H ;SVC DB 04H ;CRT1X
と記述するとRST命令の次に配置している機能番号にもとづくサブルーチンを呼び出します。もちろんそのサブルーチンからリターンすると機能番号の次のアドレスから実行が再開されるようになっています。キャリーラボのTSモニタや、その他多数のシステムで使われている常套手段ですね。なおFNCはRST 28Hを使います。
MZ-2500のSVC他は工学社および電波新聞社の書籍「活用研究」に掲載されていたためなんとなく見たことがあったりする人もいるのではないかと思いますが、実はMZ-1500にも同じ方法で呼び出すファンクションコールがあります(もちろんBASICインタプリタによる機能です)。これはラジオ技術社の「MZ-1500テクニカルノート」にあまり目立たない感じで掲載されており、さすがにこっちまで知ってる人は少ないのではないかと思っています。
MZ-2500関連でいろいろ調べ物をしている最中、ふとそのことを思い出して「テクニカルノート」を確認してみたところ、なんと呼び出し方法だけでなく機能や名称・番号までほぼ同じであることがわかりました。MZ-1500をかなり流用して設計されているMZ-800についても、一部に抜けはありますがだいたい同じと考えて良さそうです。
さらには、MZ-700用DISK BASICであるMZ-2Z009もファイルディスクリプタ使えたよな? と思い出して調べたところ、やはりSVCコールが存在しました。
どの程度同じなのか、表にして比較してみました。
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
★ … 機能変更 △ … レジスタの使われ方(値、種類)が変更・追加されている ◎ … 名前が変わっているが機能は同じ ☆ … 機能の意味としてはあまり違わないが向上・改良されている |
MZ-1500とMZ-800は、さすがに流用の元・先の関係にあるのでレジスタの使い方などはほぼ同じですが、MZ-2500はアーキテクチャに違いがありますから、どうしてもレジスタの使い方にも差異が発生します。記号はその差異の内容を簡単に示したもので、機能自体が追加・削除されたものについての記号は省いています。
MZ-800ではMZ-1500に比べてやたらと空欄が目立ちますが、BASIC(1Z-016)内のジャンプテーブルを見てみると何かのアドレスがあるようですので、単に参考にした資料で割愛されているだけだと思われます(BELLを試してみたら、ちゃんと鳴った)。また、MZ-800はジャンプテーブルが少しだけ大きくしてありますので、MZ-1500に対しても何か機能追加されているかもしれません。
MZ-700はドキュメントがないので内容はほとんどが推測です。横棒の書かれた項目は実際にジャンプテーブルでも機能が割り当てられていないもので、グラフィックとサウンド関係がないことがわかります。
なおテープBASIC(1Z-007B)にはSVCコールが存在しませんでした。これはMZ-2Z009がMZ-1500の5Z-001から派生して作られた可能性を示唆していると考えます(リリースはMZ-2Z009の方が先だが、時期的に同時に開発していたと思われるため)。
そういった違いもあるので、アーキテクチャを超えて共通のプログラムを動かすことができるのでは? という淡い期待はしない方が良さそうなんですが、では何のためにこのページを作ったのかと言えば、それは「MZ-2500までのパソコン開発における技術的・思想的な系譜をたどれる資料になる」と考えたからなのですよね。
MZ-2500は互換モードがスイッチで選べるということもあって、一般にはMZ-80B/2000系列の製品だと考えられています。キャラクタセットも、I/OマップもMZ-2000のものを引き継いでいますよね。しかし、スムーススクロールやグラフィックの複数プレーン同時書き込みなどのCRTCの機能はMZ-800に先行的な実装を見ることができますし、MZ-1500の第2ROM(9Z-502M)はMZ-800でより拡張された後MZ-2500のIOCSに発展したと見ることもできます。
そしてMZ-1500/800から始まった、ファイルディスクリプタによる統一的なデバイスのアクセスに、このSVCファンクションコール…まさかMZ-1500の5Z-001をひょいっと持ってきて移植したみたいなノリではないと思いますが、詳細に見るとMZ-1500のコードそのままだったりする箇所があるのかもしれませんね。なんだかソフト的にはMZ-2500はMZ-1500の流れの先にあるかのような…。
そうして見てみると、MZの開発が系列ごとに行われてきたみたいな、単純なものではないように思えてきます。各機種を開発するたび、直前に開発した機種に盛り込んだトピックをさらにブラッシュアップして実装する…MZ事業移管後の開発の一端を垣間見ている気分になってきませんか…?