見出し画像

AppleDOSの特異性

BASICの話に比べると Apple DOSの話題は未だに語られているようです。こちらはあちらこちらに資料があります。

14-DOS

世界のOSたち Apple DOS

この頃のパソコンのOSは、事実上BASIC自身だったので、DISKを扱えるようにするのであれば、BASICにDISKを扱うためのコマンドを実装するのが普通です。NECのPCであれば、起動時に本体にドライブが接続されているかを調べ、接続されていればDISK対応のBASICを起動するようになっていました。

PC-8001の起動

画面に文字を出すのであれば、BASICではPRINT文です。プリンタに出すのであれば、LPRINT文を使います。ファイルに書き出すのであれば、今度はPRINT#文を使うのです(シリアルに対してはPRINT%文というのもありました)。このようにデバイスに合わせたコマンドを増やしていくことで対応していました。ところがapple][では、BASIC自身を拡張することはせずに、入出力をフックし入出力がDOSに対するものであることを見つけたら、処理をDOSで行うという方法をとりました。

フックについては

で書いたのですが、DOSを使う場合にも、この方法で拡張したのです。

先の記事にも書いたプリンタの場合を例にすると、PR#1を実行すると、PRINT文はプリンタに出力するようになります。同じようにして、DOSの場合はDOSコマンドを「出力する」ことで、PRINT文でディスクに対して書き込むようにしていたのです。

DOSの場合は、プリンタよりも少々複雑です。まずDOSを使えるようにするためには、PR#6とやってDOSを組み込まなければいけません。無印Appleであれば、起動時はマシン語モニタなので、ここから6+CTRL-PとやってDOSを起動するのです。DOSは少しだけ賢いので、これで起動後はマシン語モニタではなく「DOSが組み込まれた状態」で整数BASICが起動されます。

キーボードから入力されたコマンドが直接、実行される場合には、まず、その内容がDOSに渡され、DOSコマンドであるかが確認され、DOSコマンドであれば実行されて、そうでなければ元のBASICに内容が渡されます。

> CATALOG↵

これはDOSコマンドなので、ファイル一覧が出力されて、BASICにはコマンドは渡されない。

> LIST

これはDOSコマンドではないので、そのままBASICに渡されプログラムの内容が表示される。

プログラム中でDOSコマンドを使いたい場合は、行の先頭にCTRL-Dをつけることにより、続く文字列をDOSに渡すことを明示します(既存のプログラムに影響を与えないため)。

ディスクに入っているファイルの一覧を出力するには

10 D$=CHR$(4):PRINT D$;”CATALOG”
20 END

というプログラムになります。また

10 D$=CHR$(4)
20 PRINT D$;”OPEN FILE1”
30 PRINT D$;”WRITE FILE1”
40 PRINT “I LOVE APPLE II”
50 PRINT D$;”CLOSE FILE1”
60 END

というように、DOSコマンドでファイルを(新規)書き込み用途で開けば、それに続く文字列は画面ではなく(閉じられるまで)ファイルに書かれるようになるのです(D$が最初に出力されている行がDOSコマンド)。

なぜ、このような実装にしたかといえば、Wozに言わせれば「ディスクだってI/Oなんだからプリンタと同じでしょ」とエレガントな実装を自賛していたような気もします。実際には既にROMに書かれたBASICが組み込まれていて、さらにAPPLESOFT BASICも出来上がっていたので、これに加えて新しいBASICを組み込むのは混乱するばかりで、避けたかったんだと思います。DOSをBASICから独立させたことで他の言語でも、それも機械語であっても容易にDOSが使えるようになった訳です。

この他DOSにはランダムファイルや機械語を扱うコマンドもあるのですが、それはまたの機会に。


2022/8/6追記。ランダムファイルについて書きました。


この記事が気に入ったらサポートをしてみませんか?