SSブログ

Undocumented PC-8801 【追記あり】 [パソコン]

ううっ、またまた更新が滞ってまして、スミマセン。

Dash-80 version 1.0 で実装できなかったセーブ機能をゴリゴリ&ガリガリと書いております。

今回は、前回の「Undocumented PC-8001 / 8801」で書き漏らした事をちょこっと追加です。




テキストウィンドウ

PC-8801 シリーズには、BASIC ROM の裏バンクに存在する BASIC Text RAM にアクセスするための「テキストウィンドウ」が 8000H - 83FFH 番地にあります。
ポート 70H にメモリ上位アドレスを出力すると、BASIC Text RAM がテキストウィンドウに現れ、アクセスできるようになっています。
例えば、ポート 70H に 10H を出力すれば、テキストウィンドウには BASIC Text RAM の 1000H - 13FFH 番地が現れ、8000H 番地に書き込みをすれば、1000H 番地に書き込まれます。

では、ポート 70H にテキストウィンドウのアドレスである 80H を出力すればどうなるでしょう?

正解は、「Main RAM が現れる」です。

通常はテキストウィンドウがあるためアクセスできない、テキストウィンドウの裏バンクになってしまった Main RAM が現れます。
要するに、テキストウィンドウを無効にするには 80H を出力すればいいということです。




Text V-RAM

PC-8801mkIISR 以降の機種には F000H - FFFFH 番地に「Text V-RAM」が搭載されています。
通常の RAM には読み書き用のポートが一つしかないので、画面表示を行うため DMA が Main RAM 上の V-RAM エリアにアクセスしている間は CPU が停止させられてしまいます。
それ故、実行速度が遅いという PC-8801 / 8801mkII の欠点を補うために V2 モード専用として追加されました。
デュアルポート RAM を使用した専用のText V-RAM を V-RAM エリアとして使用することで、DMA がアクセス中でも CPU は停止させられることは無くなりました。

では、Text V-RAM を無効にせずに Main RAM 上の F000H - FFFFH にアクセスするにはどうすればよいでしょう?

正解は、「テキストウィンドウを使う」です。

テキストウィンドウは BASIC Text RAM と Main RAM 上にマッピングされているため、V2 モードでポート 70H に F0H を出力すれば、テキストウィンドウに Main RAM の F000H - F3FFH が現れます。
テキストウィンドウを使用すれば、Text V-RAM に隠されていて使えない Main RAM も有効に活用できます。


追記ここから



リセット動作 #1

PC-8801 シリーズの PC-8801mkII FR/MR までの機種には、ディップスイッチが搭載されており、パワーオン/リセット時に起動する BASIC を N-BASIC / N88-BASIC の2つから選択できるようになっています。

では、起動後にディップスイッチを切り換えたらどうなるでしょう?
(PC-8801 FH/MH 以降はメモリスイッチなので、この質問には該当しません)

正解は、「何も起こらない」です。

ディップスイッチは、スイッチに設定された値を読み取ることだけしかできません。
(メモリスイッチの値は起動時にセットアップ画面から変更が可能です)
パワーオン/リセット時には、まず N88-BASIC ROM が選択されて起動し、システム初期化の前段階でディップスイッチ/メモリスイッチの値を読み取っています。
ディップスイッチ/メモリスイッチで N-BASIC が選択されていると、ROM 切り換えルーチンを RAM にコピーして呼び出し、そのルーチン内で N-BASIC ROM へ切り換えて 0 番地へジャンプします。




リセット動作 #2

前項での記述どおり PC-8801 シリーズでは、パワーオン/リセット直後は必ず N88-BASIC ROM が選択されているのですが、ディップスイッチ/メモリスイッチの値を読み取る前に 'STOP ' キー押下のチェックが行われます。
'STOP' キーが押されていればホットスタートルーチンへ、押されていなければコールドスタートルーチンへ分岐し、そこで BASIC モードのチェックが行われます。

ディップスイッチで N-BASIC が選択されていた場合のホットスタート処理では、ROM の切り換えを行った後 N-BASIC ROM 内のホットスタートルーチンのエントリアドレス 006AH へジャンプしなければならないはずですが、不思議なことに 0066H へジャンプするようコーディングされています。
PC-8801mkII FR/MR までの機種では、0066H から 0069H まで NOP が並んでいるだけなので実害は全くないのですが…。

PC-8801 FH/MH 以降の機種では、0063H から 0069H まで USART のステータスチェックサブルーチンになっています。 製品仕様から N-BASIC が外れた為、メモリスイッチで N-BASIC を選択できないので、間違ってこのルーチンが呼び出されることはないのですが、なぜ 0066H なのか、まったくもって謎です。

0066H は Z80 では NMI 処理のエントリですが、PC-8801 シリーズでは NMI 使ってませんから……残念!

追記ここまで

タグ:PC-8801
nice!(1)  コメント(1)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 1

コメント 1

Thunderbolt

単騎さん、nice! ありがとうございます。
by Thunderbolt (2009-09-05 23:05) 

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

PC-8001mkII の I/O マッ..PC-8001用DOS ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。