PC-8001用DOS [逸話]
1979 年に PC-8001 が発売された当時は、ディスクドライブは内蔵型ではなく、本体価格 ¥168,000 に対して、「デュアル片面倍密ミニディスクユニット(PC-8031)」は ¥310,000 と、本体よりも 1D のドライブを2台内蔵したディスクユニットの方が高価な時代でした。
初期の PC-8001 にはメモリが 16KiB しか搭載されてなく、Disk-BASIC を起動するためには「増設メモリパック(PC-8005 ¥24,500)」の増設と「PC-8031 用 I/O ポート(PC-8033 ¥17,000)」 「Disk-BASIC(PC-8034 ¥5,000)」が必要でした。
¥ 500,000 を超える額を投資して、やっと Disk-BASIC が使えるようになったのです。
PC-8001 シリーズ用の 5″ミニディスクユニットは「インテリジェント型」です。
インテリジェント型のディスクユニットとは、 CPU が直接 FDC にアクセスしてデータを転送する「ノンインテリジェント型」に対して、CPU / ROM / RAM を内蔵しパソコン本体とハンドシェイクすることでデータを転送しているタイプを指します。
CPU は 本体である PC-8001 と同じ Z80。 ROM 容量は 2 KiB で、FDC 制御や本体とのハンドシェイク等、基本動作の為のルーチンが用意されています(今で言う ファームウェア ですね)。
RAM 容量は 16 KiB で、読み込み/書き出し用バッファ、ワークエリアとして使用されます。
ディスクの読み書きは、本体側からトラック#/セクタ#/セクタ数を指定したコマンドストリームを送るだけで済みますが、どのような OS にも対応できるよう、特定の OS 用のサポートルーチンはありません。
そのため Disk-BASIC では、本体側のメインメモリにサポートルーチンとコマンド解析ルーチンを配置する形になっています。
しかし、これは殆どの処理を本体側のメインメモリで行うことになるため、ROM BASIC 時のフリーエリアサイズが 26 KB なのに対して、20 KB (How many files(0-15)? で 0 を指定した場合)と、6 KB ほど少なくなります。
Disk-BASIC を使用することでカセットテープよりも信頼性が格段に増し、読み書きに費やされる時間が大幅に減少しました。
ひとつ面倒なことに、ディスクに対して読み書きをする場合は、まず「MOUNT」命令を実行して FAT をメモリに読み込んでおく必要があります。 また、読み書きが終わってユニットからディスクを抜く前には「REMOVE」命令で FAT をメモリからディスクに書き戻しておかなければなりません。
ディスクに書き込みを行った時に「REMOVE」を忘れて電源を切ってしまったりすると、FAT とディスクの内容との整合性が失われ、セーブしたはずのプログラムが見当たらないとか、ファイルに追加したはずのデータがなくなっていたりと、悲惨な事が起きてしまいます。
また、プログラム/データを書き込んだディスクと違うディスクに差し替えて「REMOVE」を行うと、両方のディスクのプログラム/データと FAT の整合性が失われ、二重の悲劇に見舞われます。
Disk-BASIC から CP/M に鞍替えしようとすると、PC-8001 本体にはメモリが最大 32KiB までしか搭載できないため、I/Oユニット(PC-8012 ¥84,000)と32K RAMボード(PC-8012-02 ¥43,000)を増設してメモリを増やさないといけません。
CP/M を動作させるためには、さらに ¥130,000 近い投資が必要となります。
大枚をはたいて使えるようになった Disk-BASIC の、あまりの使い勝手の悪さに、嫌気が差している人物がいました。(以降では T 氏と呼びます。)
しかし、前述のように CP/M の導入には多額の追加投資が必要となります。
「ディスクユニット内の RAM は 16 KiB もあり、読み書き用のバッファとしては丸々全部を使用していない。」
「Disk-BASIC では、サポートルーチンが本体側のメインメモリに配置されているが、ディスクユニット内のユーザーエリアとして確保されている領域にサポートルーチンを置けば本体内のフリーエリアを殆ど使用しないで DOS が作れるのではないか。」
T 氏は発売されたばかりの「マシン語活用ハンドブック(秀和システムトレーディング)」を読んでそう考え、PC-8001 用の DOS を自作しようと決意しました。
ディスクユニットには CPU/ROM/RAM が内蔵されてはいるものの、キーボードやディスプレイが接続できる訳はなく、マシン語モニタが準備されている訳でもないので、メモリ内のデータを読み出すだけでも大層な手間が掛かります。
デバッガなんてもちろん使えません。
T 氏は、ディスクユニット内の ROM に収められているファームウェアを解析するために、ROM をダンプするプログラムを作成することから始めました。
幸いなことにファームウェアには、本体側から簡単なコマンドストリームを送ることでディスクユニット内のユ-ザーエリアにプログラムをロードする機能/デバグ用のブレークポイントを設定できる機能/レジスタの内容を読取・設定する機能が、用意されていました。
作成したプログラムをユーザーエリアにロードし、ブレークポイントを設定して実行する。
ブレークポイントで停止するとレジスタの内容を読み取り、意図したとおりに実行されているかどうかを、本体側メモリにデータを転送して確認する。
本体側からひとつひとつコマンドを送り、この作業を延々と繰り返すのです。
もし、意図しない動作をして本体側から送るコマンドに反応しなくなると、リセットするしか手がなくなってしまうのですが、そうするとワークエリア等は初期化されてしまうため、エラーを突き止めるための手掛かりがなくなってしまうことになります。
なんともディスクユニット内プログラムのデバグは容易ではありません。
月日は流れ、様々な苦労の末、T 氏の DOS は完成しました。
T 氏の DOS の仕様
この DOS では Disk-BASIC のように「MOUNT」や「REMOVE」は必要ありませんし、CP/M のようにファイル名が 8+3 文字に制限されることもありません。
後に N80 Disk-BASIC で実装されるバイナリデータのセーブ/ロード機能も実装されていました。
ファイルのコピーやフォーマット等の機能は、外部コマンドとしてディスクサブシステム内で実行されるため、Disk-BASIC のディスクユーティリティを使用する場合のように本体のフリーエリアを消費しません。 これは、プログラムを作り、いざセーブとなった時に、ディスクの空き容量が足りなかった場合には、大変役立つ機能です。
当初は 「load」や「save」等の DOS コマンドを実行するには、BASIC モードから DOS モードに移る必要がありましたが、後には BASIC コマンドが拡張され、BASIC からも 「LOAD」や「SAVE」ができるようになりました。
開発された当時は、まだ 2D ドライブが発売されたばかりで、1D のフロッピーも多かったこともあり、この DOS の構造も起動も大変トリッキーです。
1D ドライブのシステムで起動されると 1D モードの、2D ドライブのシステムで起動されると 2D モードの、サブシステム用プログラムがディスクから読み込まれます。
また、1D ⇔ 2D 間のファイル転送を容易にするため、おもて面を使い切ってから裏面が使用されます。
Disk-BASIC のディスクのようにファイルの記録に表裏を交互に使用すると、1D のドライブでは読み出すことができませんが、この DOS ではおもて面の34トラックまでにセーブしてあるファイルならば読み出すことができます。
この DOS には、作者の T 氏の手によって専用にカスタマイズされた TL/1-PC や GAME 言語、DUAD-PC 等が動作するようになり、ゲーム制作環境が整って行きました。
音源モジュール CMU-800 が発売されると、テープ版のエディタ/演奏プログラムをカスタマイズして動作させるようなことも行われました。 大概の店頭では CMU-800 はただ飾ってあるだけのことが多かったのですが、京都・寺町電気店街の一部店舗ではこの DOS を使用して常時音楽が流されていました。
CMU-800:MIDI が登場するより前に、アムデック(現 ローランド ディージー)から発売されていた音源モジュール。
PC-8801 が発売された後も DOS は進化を続けました。
PC-8801 専用に独自にカスタマイズした TL/1(TL/1-88G) や GAME 言語等が動作するようになり、フォント/パターンエディタやグラフィックエディタ等の PC-8801 で拡張された機能にも対応して、ゲーム制作環境が整って行きました。
一時期、大阪・日本橋の電気店街にあふれかえっていた「アニメ美少女グラフィック」の店頭デモは、殆どが FM-8 / 7 用でしたが、PC-8801 用の店頭デモも少数ですが存在します。
グラフィックデータで共通のC.P.U.フォーマットを使用していたため、グラフィック画面サイズと色数が同じ PC-8801 と FM-8 / 7 との間でファイルを転送すれば、どちらでも表示が可能でした。
そういう訳で、デモ画像の中には PC-8801 用の KCB 製「グラフィックエディタ88」で描かれたモノもたくさんあります。 このグラフィックエディタも DOS 上で動作しています。
余談になりますが、この頃は、店頭デモや KCB メンバーのディスクが、DOS 自体や「アニメ美少女グラフィック」目当てに盗難に遭う事も度々ありました。 あるメンバーは、ディスクケースを丸々一個、「置引き」されてしまったそうです。
DOS で開発環境が整って以降、KCB では「メタファイト」「クラッシャージョウ・シミュレーション」「LEX ARBIT」「ZALBAR 2784」と、ログイン誌上で立て続けにゲームを発表していきます。
ちなみに、「メタファイト」と「ZALBAR 2784」は K 氏、「クラッシャージョウ・シミュレーション」は I 氏、「LEX ARBIT」は S 氏の作品です。
PC-DOS と名づけられたこの DOS の開発者の T 氏は、ゲーム作者として名を残すことはありませんでしたが、ゲーム開発の陰では PC-DOS と、そこに構築された開発ツール群が大きな役割を果たしています。
そして、一番驚くべき事実は、PC-DOS を開発した当時、T 氏はまだ高校生だったということです。
PC-DOS V3.1 起動画面
初期の PC-8001 にはメモリが 16KiB しか搭載されてなく、Disk-BASIC を起動するためには「増設メモリパック(PC-8005 ¥24,500)」の増設と「PC-8031 用 I/O ポート(PC-8033 ¥17,000)」 「Disk-BASIC(PC-8034 ¥5,000)」が必要でした。
¥ 500,000 を超える額を投資して、やっと Disk-BASIC が使えるようになったのです。
☆
PC-8001 シリーズ用の 5″ミニディスクユニットは「インテリジェント型」です。
インテリジェント型のディスクユニットとは、 CPU が直接 FDC にアクセスしてデータを転送する「ノンインテリジェント型」に対して、CPU / ROM / RAM を内蔵しパソコン本体とハンドシェイクすることでデータを転送しているタイプを指します。
CPU は 本体である PC-8001 と同じ Z80。 ROM 容量は 2 KiB で、FDC 制御や本体とのハンドシェイク等、基本動作の為のルーチンが用意されています(今で言う ファームウェア ですね)。
RAM 容量は 16 KiB で、読み込み/書き出し用バッファ、ワークエリアとして使用されます。
ディスクの読み書きは、本体側からトラック#/セクタ#/セクタ数を指定したコマンドストリームを送るだけで済みますが、どのような OS にも対応できるよう、特定の OS 用のサポートルーチンはありません。
そのため Disk-BASIC では、本体側のメインメモリにサポートルーチンとコマンド解析ルーチンを配置する形になっています。
しかし、これは殆どの処理を本体側のメインメモリで行うことになるため、ROM BASIC 時のフリーエリアサイズが 26 KB なのに対して、20 KB (How many files(0-15)? で 0 を指定した場合)と、6 KB ほど少なくなります。
☆
Disk-BASIC を使用することでカセットテープよりも信頼性が格段に増し、読み書きに費やされる時間が大幅に減少しました。
ひとつ面倒なことに、ディスクに対して読み書きをする場合は、まず「MOUNT」命令を実行して FAT をメモリに読み込んでおく必要があります。 また、読み書きが終わってユニットからディスクを抜く前には「REMOVE」命令で FAT をメモリからディスクに書き戻しておかなければなりません。
ディスクに書き込みを行った時に「REMOVE」を忘れて電源を切ってしまったりすると、FAT とディスクの内容との整合性が失われ、セーブしたはずのプログラムが見当たらないとか、ファイルに追加したはずのデータがなくなっていたりと、悲惨な事が起きてしまいます。
また、プログラム/データを書き込んだディスクと違うディスクに差し替えて「REMOVE」を行うと、両方のディスクのプログラム/データと FAT の整合性が失われ、二重の悲劇に見舞われます。
☆
Disk-BASIC から CP/M に鞍替えしようとすると、PC-8001 本体にはメモリが最大 32KiB までしか搭載できないため、I/Oユニット(PC-8012 ¥84,000)と32K RAMボード(PC-8012-02 ¥43,000)を増設してメモリを増やさないといけません。
CP/M を動作させるためには、さらに ¥130,000 近い投資が必要となります。
☆
大枚をはたいて使えるようになった Disk-BASIC の、あまりの使い勝手の悪さに、嫌気が差している人物がいました。(以降では T 氏と呼びます。)
しかし、前述のように CP/M の導入には多額の追加投資が必要となります。
「ディスクユニット内の RAM は 16 KiB もあり、読み書き用のバッファとしては丸々全部を使用していない。」
「Disk-BASIC では、サポートルーチンが本体側のメインメモリに配置されているが、ディスクユニット内のユーザーエリアとして確保されている領域にサポートルーチンを置けば本体内のフリーエリアを殆ど使用しないで DOS が作れるのではないか。」
T 氏は発売されたばかりの「マシン語活用ハンドブック(秀和システムトレーディング)」を読んでそう考え、PC-8001 用の DOS を自作しようと決意しました。
☆
ディスクユニットには CPU/ROM/RAM が内蔵されてはいるものの、キーボードやディスプレイが接続できる訳はなく、マシン語モニタが準備されている訳でもないので、メモリ内のデータを読み出すだけでも大層な手間が掛かります。
デバッガなんてもちろん使えません。
T 氏は、ディスクユニット内の ROM に収められているファームウェアを解析するために、ROM をダンプするプログラムを作成することから始めました。
☆
幸いなことにファームウェアには、本体側から簡単なコマンドストリームを送ることでディスクユニット内のユ-ザーエリアにプログラムをロードする機能/デバグ用のブレークポイントを設定できる機能/レジスタの内容を読取・設定する機能が、用意されていました。
作成したプログラムをユーザーエリアにロードし、ブレークポイントを設定して実行する。
ブレークポイントで停止するとレジスタの内容を読み取り、意図したとおりに実行されているかどうかを、本体側メモリにデータを転送して確認する。
本体側からひとつひとつコマンドを送り、この作業を延々と繰り返すのです。
もし、意図しない動作をして本体側から送るコマンドに反応しなくなると、リセットするしか手がなくなってしまうのですが、そうするとワークエリア等は初期化されてしまうため、エラーを突き止めるための手掛かりがなくなってしまうことになります。
なんともディスクユニット内プログラムのデバグは容易ではありません。
☆
月日は流れ、様々な苦労の末、T 氏の DOS は完成しました。
T 氏の DOS の仕様
- ファイル管理はセクタ単位で行い、無駄なセクタを発生させない
- 「MOUNT」や「REMOVE」を必要としない
- バイナリデータのセーブ/ロードが可能
- Disk-BASIC の 6+3、CP/M の 8+3 より長い、29 文字までファイル名を命名可能
- オートスタートにより、起動時に自動実行可能
- フリーエリアを消費しない
- CP/M や UNIX のように外部コマンドが作成可能
この DOS では Disk-BASIC のように「MOUNT」や「REMOVE」は必要ありませんし、CP/M のようにファイル名が 8+3 文字に制限されることもありません。
後に N80 Disk-BASIC で実装されるバイナリデータのセーブ/ロード機能も実装されていました。
ファイルのコピーやフォーマット等の機能は、外部コマンドとしてディスクサブシステム内で実行されるため、Disk-BASIC のディスクユーティリティを使用する場合のように本体のフリーエリアを消費しません。 これは、プログラムを作り、いざセーブとなった時に、ディスクの空き容量が足りなかった場合には、大変役立つ機能です。
当初は 「load」や「save」等の DOS コマンドを実行するには、BASIC モードから DOS モードに移る必要がありましたが、後には BASIC コマンドが拡張され、BASIC からも 「LOAD」や「SAVE」ができるようになりました。
☆
開発された当時は、まだ 2D ドライブが発売されたばかりで、1D のフロッピーも多かったこともあり、この DOS の構造も起動も大変トリッキーです。
1D ドライブのシステムで起動されると 1D モードの、2D ドライブのシステムで起動されると 2D モードの、サブシステム用プログラムがディスクから読み込まれます。
また、1D ⇔ 2D 間のファイル転送を容易にするため、おもて面を使い切ってから裏面が使用されます。
Disk-BASIC のディスクのようにファイルの記録に表裏を交互に使用すると、1D のドライブでは読み出すことができませんが、この DOS ではおもて面の34トラックまでにセーブしてあるファイルならば読み出すことができます。
☆
この DOS には、作者の T 氏の手によって専用にカスタマイズされた TL/1-PC や GAME 言語、DUAD-PC 等が動作するようになり、ゲーム制作環境が整って行きました。
音源モジュール CMU-800 が発売されると、テープ版のエディタ/演奏プログラムをカスタマイズして動作させるようなことも行われました。 大概の店頭では CMU-800 はただ飾ってあるだけのことが多かったのですが、京都・寺町電気店街の一部店舗ではこの DOS を使用して常時音楽が流されていました。
CMU-800:MIDI が登場するより前に、アムデック(現 ローランド ディージー)から発売されていた音源モジュール。
☆
PC-8801 が発売された後も DOS は進化を続けました。
PC-8801 専用に独自にカスタマイズした TL/1(TL/1-88G) や GAME 言語等が動作するようになり、フォント/パターンエディタやグラフィックエディタ等の PC-8801 で拡張された機能にも対応して、ゲーム制作環境が整って行きました。
☆
一時期、大阪・日本橋の電気店街にあふれかえっていた「アニメ美少女グラフィック」の店頭デモは、殆どが FM-8 / 7 用でしたが、PC-8801 用の店頭デモも少数ですが存在します。
グラフィックデータで共通のC.P.U.フォーマットを使用していたため、グラフィック画面サイズと色数が同じ PC-8801 と FM-8 / 7 との間でファイルを転送すれば、どちらでも表示が可能でした。
そういう訳で、デモ画像の中には PC-8801 用の KCB 製「グラフィックエディタ88」で描かれたモノもたくさんあります。 このグラフィックエディタも DOS 上で動作しています。
余談になりますが、この頃は、店頭デモや KCB メンバーのディスクが、DOS 自体や「アニメ美少女グラフィック」目当てに盗難に遭う事も度々ありました。 あるメンバーは、ディスクケースを丸々一個、「置引き」されてしまったそうです。
☆
DOS で開発環境が整って以降、KCB では「メタファイト」「クラッシャージョウ・シミュレーション」「LEX ARBIT」「ZALBAR 2784」と、ログイン誌上で立て続けにゲームを発表していきます。
ちなみに、「メタファイト」と「ZALBAR 2784」は K 氏、「クラッシャージョウ・シミュレーション」は I 氏、「LEX ARBIT」は S 氏の作品です。
PC-DOS と名づけられたこの DOS の開発者の T 氏は、ゲーム作者として名を残すことはありませんでしたが、ゲーム開発の陰では PC-DOS と、そこに構築された開発ツール群が大きな役割を果たしています。
そして、一番驚くべき事実は、PC-DOS を開発した当時、T 氏はまだ高校生だったということです。
PC-DOS V3.1 起動画面
PC-DOSの話、とても興味深く読まさせていただきました。
今のようにネットもない時代、少ない情報の中で苦労して作られた様子がしのばれます。
PC-8001用disk systemは当時あこがれましたねえ。
高校の文化祭で使われているのを見て、うらやましく思った覚えがあります。
by yasuho (2009-09-11 08:27)
yasuhoさん、コメントありがとうございます。
当時は何をするにも機材が高価でしたから、欲しいモノ/無いモノは自分で作るというスタンスが当たり前だったのだと思います。
今でも開発用のSWは高価ですが…。
当時の方が、アマチュアプログラマに対しては敷居が低かったように感じます。 今のシステムは巨大なブラックボックスで、制約が多すぎます(笑)
by Thunderbolt (2009-09-11 15:07)
技術の普及と発展を見るような逸話ですな。当初は扱うのに儀式のような手順が必要だったのが、必要が発明を生みさらに使いやすく変わっていき、さらに新しい発明につながっていったのですね。
今のパソコンに比べてスペック的には圧倒的に非力ですが、自分が弄って面白いと思うのは、昔のホビーパソコンだったりします。
by 本名荒井 (2009-09-13 01:39)
本名荒井さん、コメントありがとうございます。
PC-DOS から派生した DOS は市販品も含めて色々あります。 全てが、全国に広まった「店頭デモ」や盗難に遭った物のバッドコピーですが…。
元祖を越えるモノが現れなかったのが残念ですね。
>自分が弄って面白いと思うのは、昔のホビーパソコンだったりします。
今のパソコンは高度化し過ぎていて、パーツ自体が完成された複雑なプラモデルを組み立てているような感覚ですが、昔のパソコンはパーツ自体を削りだして一から作る感覚です。
これは、黎明期のパソコンを知らないと分からない感覚ですよね。
by Thunderbolt (2009-09-13 13:25)
単騎さん、nice! ありがとうございます。
by Thunderbolt (2009-09-13 20:53)
ちょっと気になったので。
通常のディスクユニットがDMAを使っているわけじゃないですよ。
ポーリングだったり、割り込みだったり、いろいろです。
だいたいZ80の先祖の8080は8257入れないとDMA出来ませんでしたし、68とか65も同じ。
DMAをフツーに使えるのはDMAとリフレッシュコントローラを統合したZ80だから、というところでしょう。
by 恐ろしく古くから業界にいるけど現役の人 (2009-09-30 00:43)
恐ろしく古くから業界にいるけど現役の人さん、コメントありがとうございます。
>通常のディスクユニットがDMAを使っているわけじゃないですよ。
ちょっと乱暴な書き方でしたので、早速訂正いたしました^^;
ご指摘ありがとうございます。
Z80はDMAC内臓ではないので 8257 / 8237A / Z80 DMA 等が必要だったかと思います。
CPU単体でDMAが使えるのは HD64180 や TMPZ84C00シリーズあたりではないでしょうか。
by Thunderbolt (2009-09-30 03:16)
とても懐かしく思い出します。
カタカタと バイナリコードを打ち込んだり、テープの音を聞いたり、アセンブラを使って簡単な動作テストをしたりと アマチュアの手が届くマシンたちでしたね。
アルバイトしてディスクドライブを買った思い出ともにDOS画面が懐かしい。
HD64180 TMPZ84C00 懐かしい~ CPUボードがまだ何枚か転がっているかも。
by Hamachan (2009-11-10 22:50)
Hamachanさん、コメントありがとうございます。
誰もがアマチュアで手探り状態の、良い時代だったと思います。
今の機種はどれも似たり寄ったりで、面白味があまりないのが残念です。
昔は個性的なマシンが多くて(ハズレも多かったですが)面白かったですね。
>DOS画面が懐かしい。
PC-DOS をお持ちでしたか^^
…という事はもしかして、タコ部屋(開発室とも言う)にも来られていた「浜○さん」でしょうか?人違いだったらすみませんA^^;
by Thunderbolt (2009-11-11 03:25)