MZ-80K2のBASIC SP-5030解説書

パソコン・インターネット,趣味

MZ-80K2持ってました。MZ-80K2を検索したら、次の記事が出てきました。記事に書かれている内容が懐かしいです。

次のページが、MZ-80Kの企画段階から発売までの裏を追っていて、面白いです。なるほど。納得です。

私は、手元にBASIC SP-5030の解説書を持ってきています。

MZ-80 SP-5030解説書

BASICのダイレクトモード(今考えると、BASICそのものがシェルだったんですね)の使い方から始まり、プログラムの入力方法、実行方法の説明があります。

プログラムを書き始めた初心者がハマりやすい、代入文や変数の概念をイラスト入りで丁寧に解説してくれています。配列変数も理解しやすく説明されています。

当時、読みつくしたと思っていたら、今になってその必要性が理解できることもあって驚きました。

たとえば、"USR()"命令(関数)は、USR({呼び出しアドレス}, 文字変数)と、二つの引数を取れます。普通は二つ目の引数を指定しません。二つ目を指定できるのを、読み直して初めて知りました。ここの文字変数を指定すると、その文字変数へのポインタがDEレジスタに、文字列長がBCレジスタに入ります。機械語のプログラムに、パラメータを渡す仕組みだったのですね。それと、文字変数のポインタを渡すので、機械語側でメモリを書き換えれば、パラメータを返すこともできます。賢いな、仕様を考えた人。

10 REM COPYRIGHT (C) 2017 OICHINOTE
20 REM CREATED BY OICHINOKATA ON MAY 21, 2017
100 ML=12*1024:REM 機械語領域 $C000
110 LIMIT ML:REM BASICエリア上限設定
120 READ BT,CS:REM バイト数、チェックサム
130 BT=BT-1:REM バイト数をアドレス最大値に変換
140 SM=0:REM データ合計値
150 FOR I=0 TO BT
160 READ DT
170 SM=SM+DT
180 POKE ML+I, DT
190 NEXT I
200 IF CS<>SM THEN PRINT "CHECK SUM ERROR":END
210 DATA 13,2357
220 DATA 229,213,197,33,0,208,236,237,176,193,209,225,201
230 X$="ABC"
240 USR(ML, X$):REM 機械語呼び出し
250 END

上記のプログラムで、次の機械語サブルーチンを呼び出しています。

         ; Copyright (c) 2017 Oichinote
         ; Created by Oichinokata on May 21, 2017
E5       PUSH HL
D5       PUSH DE ; 文字列変数の先頭アドレス
C5       PUSH BC ; 文字列の長さ
21 00 D0 LD HL, D000H ; VRAM先頭アドレス
EC       EX DE, HL
ED B0    LDIR ; BC--が0になるまで、(DE++)←(HL++)を繰り返す
C1       POP BC
D1       POP DE
E1       POP HL
C9       RET

すると、画面の左上にASCIIコードで書かれた"ABC"をディスプレイコードに変換した"♠◥█"が表示されます。多分。もしかしたら、終わりに[CR:0x0D]のディスプレイコードの"M"が表示されるかもしれません。ミニチュアMZ-80Cが手に入って、BASIC SP-5030を実行させられたら、上記プログラムを検証してみます。

クリーンコンピュータMZ-80Cのミニチュア

ディスプレイコードと言うのがMZ-80独特の考え方で、キャラクタージェネレータROMのアドレスなんです。モニターROM(SP-1002 BIOS)の0x0BB9番地にASCIIコード→ディスプレイコード変換ルーチンがあるので、これを使えば文字列変数通りの文字を出すことも可能です。メッセージ表示ルーチン(0x0015)を呼び出すのが簡単そうですけれど。

Z-80命令表は、次のページを参考にさせていただきました。ありがとうございます。ひさしぶりに、ハンドアセンブルしました。LDIRなんて命令を初めて知りました。

解説書35ページに、アルキメデスの時代にタイムマシンでMZ-80を持って行って、BASICで三角関数を使って答えを出しちゃう挿絵。100V電源はどうしたんだい? と突っ込みたいところですね。当然、ガソリンエンジン付きの自家発電機も持って行ったのでしょうね。

[amazonjs asin="B0020PPW24" locale="JP"]

それと、忘れていて驚きだったのが、MZ-80K2には、バッテリーバックアップ付きのRTC(Real Time Clock、時計)を内蔵していないことです。電源を入れるたびに、自分で時計を設定する必要があります。

PRINT文が"?"で代用できるのも忘れていました。それと、TABストップが10で設計されていました。これも忘れてました。

WOPEN, ROPEN, CLOSE, INPUT/T, PRINT/Tと言う、カセットテープへのデータ入出力コマンドも用意されているのですね。当時は、何のためにあるかよくわからなかったのですが、データ処理をしようとしたら必要ですね。

138ページに載っている、701,260時間(人生80年)の内訳も面白かったな。これに載っている計算では、「起きていて、仕事も勉強もしていない時間」は、人生の約52%なんだそうです。この中には、食事やお風呂の時間も入っているのですが、人生の半分の時間は自由に使えます。この自由時間をどう使うかで、その人の人生が決まりますね。

いろいろと、深い本だなぁ。

MZ-80K2とこの本で、BASICプログラムの作り方を覚えました。プログラムの作り方はこの本で覚えたけれど、プログラミングの基本は学校で勉強しました。

Posted by お市のかた