S-BASIC (MZ-1Z001) Reference Manual

これは

2014年、MZ-2000を修理し復活させたは良いが、マニュアルがない。 web を探してもなかなか適当な情報が得られなかったので、 手元のベーマガのソースコードを参考に勝手に調べてまとめよう、と決めた。 したがって、本ドキュメントは本来のリファレンスマニュアルとは違う。 勝手に調べたメモなのでそのつもりで。
(逆にマニュアルあるから教えてやるよ、と言う方がいらっしゃったら 是非教えてください。)
なお、本資料は今のところ MZ-1Z001を調べたものをまとめているが、恐らく COLOR TAPE BASIC MZ-1Z002 も大差ないと思われるので、そのうち MZ-1Z002 についても加筆するかもしれない。

命令表

command usage description example
CONSOLE CONSOLE St, b, Ccr, Gr 画面表示まわりのもろもろ設定。引数は区切りカンマも含めて適当に省略・入れ替え可能。
  • 第1, 2引数でスクロール表示範囲指定する。例えば S10, 15 だと、 10行目から15行目が範囲となる。
  • 第3引数は桁数指定で、C40, C40N, C40R, C80, C80N, C80R のいずれか。 NはNormal, RはReverse で表示の反転制御。CONSOLE RやCONSOLE Nという単独用法も可。
  • 第4引数はグラフィクス解像度。GNだとnormal (320x200)、GHだとhigh res.(640x200)。
CONSOLE S0, 24, C40N, GN
CONSOLE R
REM REM comment コメント。何もしない。 REM ココハコメント
CURSOR CURSOR x, y カーソルを x, y の位置に移動する。CONSOLE命令のスクロール範囲外も可。 CURSOR 20, 12: PRINT "HOGE"
GRAPH GRAPH Ii, fill, Oo グラフィックス表示設定。今で言うダブル(というかトリプル)バッファ制御。
  • 区切りカンマは何と適当に省略可。順番も任意(指定順に実行される)。
  • iは0, 1, 2, 3のいずれかで描画プレーンを指定する。0はたぶん何もしない。Iのみ(iの省略)不可。
  • oは0, 1, 2, 3のいずれかで表示プレーンを指定する。0はたぶん何も表示しない。Oのみ(oの省略)可。
  • fill は C と F の組み合わせが指定でき、C で画面をclear、Fでfillする。FCFCと指定して点滅ぽくすることも可。
GRAPH I1, C, O1
GRAPH FCFC
TEMPO TEMPO n MUSIC文による演奏テンポを指定する。nは1〜7。大きいほど速い。 TEMPO 7:MUSIC "CDE"
MUSIC MUSIC str 文字列 str を MML として演奏する。テンポ既定値はTEMPO命令で指定する。MMLに間違いがあってもエラーは出ない。 MUSIC "CDEFEDCREFGAGFER"
GET GET var 即時キー入力。文字変数varにその時押下されているキーコードが入る。 押されていなければNULL("")が入る。 100 PRINT "PUSH ANY KEY"
110 GET A$:IF A$="" THEN 110
POSITION POSITION x, y PATTERN 命令で表示するビットパタンの位置を指定する。 POSITION 160, 100
PATTERN PATTERN [-]len, str パタンを表示する。len は 1-24 の整数値で、-をつけることができる。ただし負数という意味ではなく、-記号が必要なのでA=-1としたAをlenとして与えることはできない。strは16進数文字列。(以下詳細不明につき調査中) PATTERN -16, "55AA0102040810204080"
LINE LINE x0, y0, x1, y1, x2, y2, ... グラフィックス面に線を引く。連続して座標を指定することで 折れ線も可。 LINE 50, 120, 100, 50, 150, 120, 50, 120
BLINE BLINE x0, y0, x1, y1, x2, y2, ... LINEの消灯版。Blank LINE あるいは Black LINE か。 BLINE 50, 120, 100, 50, 150, 120, 50, 120
CHARACTER$ CHARACTER$(x, y) テキスト面の(x, y)座標にある文字を得る。 ? CHARACTER$(0, 1)
SPACE$ SPACE$(len) スペース(" ")をlen個並べた文字列を返す。 ? "<";SPACE$(10);">"
AUTO AUTO start, step 行番号を start から step 刻みで自動的に入力してくれる。 リスト打ち込み時などの便利機能。start, step ともデフォルトは 10。 AUTO 100, 10
MON MON 機械語モニタ(メモリを直接いじれる簡易エディタ あるいは 超機能限定版デバッガ のようなもの。 昔のパソコンには大抵ついていた。)に入る。
モニタからBASICに戻るには J コマンドで $1300 にジャンプ。
MON
REW REW カセットを巻き戻しする。 REW
FAST FAST カセットを早送りする。 FAST
BOOT BOOT 再起動する。 BOOT
POKE POKE addr,data メモリのaddr 番地に data を書き込む。 POKE 123,45
PEEK PEEK(addr) メモリのaddr番地の値を読み出す。 ?PEEK(123)

特殊変数

variable description writable?
TI$ 時刻を hhmmss 形式で保持する。BASIC起動時が000000。 yes
π 円周率(定数) no

MZについて

1980年代概況

まず、MZというのはシャープが'80年代を中心として 作っていたパソコンである(注: ここでは敢えて PCと呼ばずパソコンとしておく。当時PCというとNECのPCシリーズの 「パソコン」を指し、一般名詞としてのPCという語が広まったのは IBM PC が 普及した '90 年代ころからだと思うから。一方、「パソコン」という語は ふつうに使われていた)。 大半が Z80 ベースの 8 bit 機で、一部 16 bit 機もあった。なお、当時日本国内では NEC(PCシリーズ), 富士通(FMシリーズ), SHARP(MZシリーズ, X1シリーズ) が パソコンの御三家と呼ばれ、 大きなシェアを持っていた。逆に小さなシェアを争っていたのは ほとんどすべての家電メーカーと大きなおもちゃメーカーである。 家電・おもちゃ業界がこぞってマストアイテムとしてパソコンを 作ったり売ったりしていた。今では考えられないそんな時代である。

MZシリーズの特徴

MZシリーズ共通の大きな特徴として、クリーン思想(クリーン設計)というものがある。 要するに OS 的なもの (当時は主に BASIC 言語)を ROM で供給せず、外部ストレージ(例えば カセットテープ)から読み込むというもので、なんだ現在の PC と同じじゃないのはいそうですでも当時は前衛的でした、と言える。ROM に 焼かれているのは IPL (Initial Program Loader) とその他一部のみであった。 そのため、 64 KiB しかないメモリ空間の相当部分が BASIC インタプリタで占められる 他機種に比べてメモリ空間の使い方の自由度は(理屈の上では)高かった (が、実際は搭載可能RAMの制限もあり、まぁ、言うほど素晴らしいかというと 微妙)。とにかく、このページで紹介しているのはそんな MZ シリーズの 銘機 MZ-2000 に標準添付された BASIC、MZ-1Z001 である。

MZ-1Z001 media

MZ-80/2000シリーズ

さてその MZシリーズの中でも源流かつ本流とも言えるのが MZ-80/2000 シリーズ である(私見 80 %)。 MZ-80/2000 シリーズには大きく 2 つの系統がある。ここでは便宜上、 80B系と80K系としておく。80B系は高級機でどちらかというとビジネス路線、 80K系は普及機でどちらかというとホビー路線である(たぶん)。 簡単に見分ける ポイントはキーボードで、80B系はキーが現在のキーボードのように一行毎に 約半キーずれたタイプライターのような配列になっている。一方80K系は 電卓のように整然と並んでいる(どうでもいいことだが、メカニカルな制約を 負ったタイプライターが斜めにずれるのは必然だと思うが、 電子式のキーボードにはそのような呪縛はないのだから80K系のような配列も 合理的ではないかと思う。ああいうのが普及していたら現在のPCも もっとカッコ良かったのではないかなぁ)。ただし 80Cと1200は例外で、 これは80K系にも関わらずタイプライターぽいずれた配列をした異端機 である(←ってそれじゃ全然見分けるポイントになってないじゃん)。

MZ-80B系は MZ-80B, MZ-2000, MZ-2200、そしてスーパーMZこと MZ-2500シリーズ (MZ-25xx と番外編の MZ-2861)がある。MZ-80BとMZ-2000 は本体、 キーボード、 CRTディスプレイ(グリーン単色)、カセットデッキが全部くっついた 一体型で、もちろん他にもそういう機種はあったが、それでも外見上の 大きな特徴と言える。MZ-2200 は本体とキーボードの一体型で、 MZ-2500 は一見現在の PC のようなセパレート型なのだが、FDD のみならず、 カセットデッキ(その名もボイスレコーダー)が搭載されているという 特徴を持つ(一部ラインナップに例外設定あり)。

一方の80K系は、MZ-80K, MZ-80C, MZ-80K2, MZ-80K2E、MZ-1200 と続く(その後たぶん MZ-700, MZ-800(欧州専用), MZ-1500 に進化したのだと思う)。 初代 80K の K は Kit の K で(たぶん)、完成品としてではなく、 部品のキットとして売られていた。ユーザは自分ではんだごてを握って 組み立てる必要がある (今の自作PCとは本気度が違う)。 で、それは あまりにも酷でしょうもっと普通の人にも買ってもらおうよ (いや、パソコン買ってる時点で既に十分普通じゃないけどね、当時は) ということで 組み立て済みで売られたのが 80K2、その後 10 万台 感謝モデルとして少しお求め易くしました(なんとたったの148,000円な) のが 80K2E である(当時の広告によれば【限定生産品】)。

その他のMZ

その他のMZとしては、本当の初代、ワンボードマイコン(マイコンと言っても 現在のMCU(マイクロコントローラ)ではなく、マイクロコンピュータもしくは My コンピュータの略)の MZ-40K(外見は電子ブロックで作られた 大型電卓と言ったところか。)や、完全ビジネス機の MZ-3000, MZ-5000, MZ-6000シリーズがある。この辺は MZ-5500 が 8086 搭載の 16 bit 機だったことくらいしか知らない。 もっと他にもあるかも知れないが さしあたりぼくの頭に浮かぶのはそのくらい。

テープバックアップ

いくつかの web サイトでテープソフト(BASICとか)のバックアップ方法が 紹介されていた。時とともに閉鎖してしまうと困るので、 「バックアップ方法のバックアップ」をここにも書いておく。 原理がよくわかっていないので、何がバックアップ取れる対象なのかは (ぼくは)知らない。少なくとも BASIC (MZ-1Z001, MZ-1Z002) は落とせた。

  1. BASICを起動する。
  2. MONコマンドでモニタに入る。
  3. Mコマンドで 0289 および 02b9 からの 3 バイト(2a, 54, 11 で同一) を(両方とも) 21, 00, 80 に書き換える。これでLOADアドレスが 強制的に$8000になるらしい(最初の2aとか21ってなんだ?)。
  4. コピーしたいテープを入れる。
  5. L コマンドで読み込む。どうやら上記の 21, 00, 80 によって8000番地から 読み込まれるようになるらしい。
  6. コピー先のカセットに入れ替える。
  7. Jコマンドで 01b5 にジャンプすると、あら不思議。 ファイル名もプログラムの長さもちゃんと元のままバックアップが取れる。 一体どうなっているんだろう。01b5 はSAVEする システムコール(?)で、LOADとワークメモリが同じということなのかな。 資料がないとわからない…。