PC-8001 Disk-BASIC と起動処理 [パソコン]
PC-8001 Disk-BASIC 用のシステムディスクには複数のバージョンがあります。
一番古いものは、
DISK VERSION
と、表示されます。
これは PC-8031 用に用意された 1D のシステムディスクです。
次のバージョンは、
Disk version [14-Nov-1980]
と、表示されます。
これは旧バージョンのバグフィックス版だと思われます。
上記の2つのバージョンは同じ型番(PC-8034)が付けられているので、注意が必要です。
PC-8031-2W 用に用意されたものは、
Two surface disk version [20-Sep-1981]
と、表示されます。
型番は、PC-8034-2W で、2D のシステムディスクです。
他にも、PC-8034-1V 等のシステムディスクがありますが、当方では未確認ですm(_^_)m
PC-8034 (DISK VERSION または Disk Version [14-Nov-1980] と表示されるもの)では IPL は1セクタですが、PC-8034-2W (Two surface disk version [20-Sep-1981] と表示されるもの)では2セクタになっています。
これは、PC-8031-2W が高速転送に対応したため、IPL でもこれに対応するルーチンを用意しているのと、オートスタート処理のためのルーチンが追加されているためです。
1D ドライブが搭載されているディスクユニット(PC-8031 / PC8031-1W / PC-8031-1V)が接続されているシステムで PC-8034-2W 等の 2D 用のシステムディスクを使用して起動すると「NON DISK BASIC」というエラーメッセージが表示され ROM BASIC が起動します。
この場合、Disk-BASIC の機能は使用できません。
逆に、2D ドライブが搭載されているディスクユニット(PC-8031-2W / PC80S31)が接続されているシステムで PC-8034 等の 1D 用のシステムディスクを使用して起動すると、PC-8031-2W 以降の機種で拡張された機能にシステムディスクが対応していないため、高速転送は使用できません。
また、1D 以外のフロッピーには読み書きができません。(自分でプログラムを用意すればできますが…)
N-BASIC の、いわゆる ROM BASIC の初期化処理は IPL 起動用のフックはあるものの、Disk-BASIC での使用を前提にした構造になっていません。
拡張 ROM が装備されている場合と、「パッチ当て」のため、途中に CALL 命令によるサブルーチン呼び出しはありますが分岐は無く 、いわゆる「一本道」の処理になっています。
そのため、IPL が行う Disk-BASIC の初期化は、
DIsk-BASIC 本体の読み込み → 文字列スタックの初期化 →
ファイルバッファの初期化 → 拡張命令用フックの再設定 →
文字列領域の確保 → インタラプトベクタの初期化 → タイトル表示 →
RS-232C の初期化 → (オートスタート処理) → コマンド待ち
という ROM BASIC と共通する初期化と Disk-BASIC の初期化が混在する、ややこしい手順を踏んで処理されています。 (ROM BASIC / Disk-BASIC 共にハードウェアの初期化が BASIC の初期化よりも後にあるとか、この処理順序には首を傾げてしまいますが…。)
前述の通り ROM BASIC の初期化は「一本道」の処理なので、共通する処理をサブルーチンコールで済ませる訳にはいかず、ROM 内の処理と同じものが IPL の中に現れる事になります。
余談になりますが、PC-8801 に搭載されている N88-BASIC では、ROM BASIC でもファイルシステムが機能として装備されているのと、ユーティリティルーチンのモジュール化が進んだため、N88-Disk BASIC の IPL は Disk-BASIC よりも単純な構造になっています。
せっかく用意したルーチンが汎用性がないため使用できなくなるのは、これに限った事ではありません。
PC-8801 でも 'CHAIN' コマンドに対応していないため使用されないままに終わった BASIC コードの読み込みルーチンが ROM 内に存在しますね(笑)
一番古いものは、
DISK VERSION
と、表示されます。
これは PC-8031 用に用意された 1D のシステムディスクです。
次のバージョンは、
Disk version [14-Nov-1980]
と、表示されます。
これは旧バージョンのバグフィックス版だと思われます。
上記の2つのバージョンは同じ型番(PC-8034)が付けられているので、注意が必要です。
PC-8031-2W 用に用意されたものは、
Two surface disk version [20-Sep-1981]
と、表示されます。
型番は、PC-8034-2W で、2D のシステムディスクです。
他にも、PC-8034-1V 等のシステムディスクがありますが、当方では未確認ですm(_^_)m
☆
PC-8034 (DISK VERSION または Disk Version [14-Nov-1980] と表示されるもの)では IPL は1セクタですが、PC-8034-2W (Two surface disk version [20-Sep-1981] と表示されるもの)では2セクタになっています。
これは、PC-8031-2W が高速転送に対応したため、IPL でもこれに対応するルーチンを用意しているのと、オートスタート処理のためのルーチンが追加されているためです。
☆
1D ドライブが搭載されているディスクユニット(PC-8031 / PC8031-1W / PC-8031-1V)が接続されているシステムで PC-8034-2W 等の 2D 用のシステムディスクを使用して起動すると「NON DISK BASIC」というエラーメッセージが表示され ROM BASIC が起動します。
この場合、Disk-BASIC の機能は使用できません。
逆に、2D ドライブが搭載されているディスクユニット(PC-8031-2W / PC80S31)が接続されているシステムで PC-8034 等の 1D 用のシステムディスクを使用して起動すると、PC-8031-2W 以降の機種で拡張された機能にシステムディスクが対応していないため、高速転送は使用できません。
また、1D 以外のフロッピーには読み書きができません。(自分でプログラムを用意すればできますが…)
☆
N-BASIC の、いわゆる ROM BASIC の初期化処理は IPL 起動用のフックはあるものの、Disk-BASIC での使用を前提にした構造になっていません。
拡張 ROM が装備されている場合と、「パッチ当て」のため、途中に CALL 命令によるサブルーチン呼び出しはありますが分岐は無く 、いわゆる「一本道」の処理になっています。
そのため、IPL が行う Disk-BASIC の初期化は、
DIsk-BASIC 本体の読み込み → 文字列スタックの初期化 →
ファイルバッファの初期化 → 拡張命令用フックの再設定 →
文字列領域の確保 → インタラプトベクタの初期化 → タイトル表示 →
RS-232C の初期化 → (オートスタート処理) → コマンド待ち
という ROM BASIC と共通する初期化と Disk-BASIC の初期化が混在する、ややこしい手順を踏んで処理されています。 (ROM BASIC / Disk-BASIC 共にハードウェアの初期化が BASIC の初期化よりも後にあるとか、この処理順序には首を傾げてしまいますが…。)
前述の通り ROM BASIC の初期化は「一本道」の処理なので、共通する処理をサブルーチンコールで済ませる訳にはいかず、ROM 内の処理と同じものが IPL の中に現れる事になります。
余談になりますが、PC-8801 に搭載されている N88-BASIC では、ROM BASIC でもファイルシステムが機能として装備されているのと、ユーティリティルーチンのモジュール化が進んだため、N88-Disk BASIC の IPL は Disk-BASIC よりも単純な構造になっています。
せっかく用意したルーチンが汎用性がないため使用できなくなるのは、これに限った事ではありません。
PC-8801 でも 'CHAIN' コマンドに対応していないため使用されないままに終わった BASIC コードの読み込みルーチンが ROM 内に存在しますね(笑)
コメント 0