ようこそゲストさん

80mkII愛友会 別館

2015/02/13(金) サイト更新 - PC-8001mkIIのユーザ領域を増やすには

お知らせ
本日の更新は「PC-8001mkIIのユーザ領域を増やすには」の動作確認です。
先日の記事にあったN-BASICの領域を8K増やすプログラムと同じ機能を持つプログラムです。
やっていることは同じなのですが,プログラムの内容や実行しているROM内ルーチンのアドレスが微妙に違ったりしてちょっと面白い。


今回のプログラムは,現状のX88000では動作させることができませんでした。
このプログラムはPC-8001mkIIのN-BASICで動作させなければならないのですが,X88000ではCTRL+リセットによるPC-8001mkIIのN-BASIC起動がうまく動作せず,常にN80-BASICで起動してしまいます。
PC-8001mkIIは起動時にCTRLとDIPSW8の状態を調べて,N-BASICの時は拡張ROM/N80-BASICの時はN80-BASICのROMを6000H~7FFFHに割り当てるのですが,X88000のN80-BASICモードでは6000H~7FFFHは常にN80-BASICのROMを選択するようになっていて,これが原因でN80-BASICしか起動しなくなっています。
私がX88000の80mkII対応を行ったときに手を抜いて実装したのが,そのまま引き継がれてしまったようです。


このプログラムはPC-8001mkII用ですが,同じようなプログラムでPC-8801のN-BASICでもユーザ領域を増やせないか? と考えたくなります。
しかし,残念ながらそれはできません。
PC-8801のN-BASICは0000H~5FFFH以外に7F00H以降にもプログラムが拡張されているため,単純に6000H以降をユーザー領域としてしまうとN-BASICが動作しなくなってしまうのです。

拙作のM88用ツール「diskdrv80」をPC-8801のN-BASICで使用するときも,最初はこれが問題になりました。
6000H~7FFFHを全部上書きしてしまうとN-BASICが動作しなくなってしまうので,必要なサイズだけファイルを上書きするようなパッチにして対応しています。


また,この仕様は拡張ROMをPC-8801のN-BASICで使用したい場合にも問題となります。
実機PC-8801上のN-BASICでは
OUT &H71,&HFD
というように直接I/Oポートを叩けば,拡張ROMを6000H~7FFFHに割り当てて使用できるようになっています。
しかし先述の,N-BASICが7F00H以降のプログラムを実行しているという問題のために,N-BASIC用の拡張ROMプログラムのほとんどはPC-8801では動作しないと思われます。

拡張ROMがPC-8801上のN-BASICでも動作するという珍しい例としては,PC活用研究に掲載されている「Consolidator-II(Tomoaki Ueda作)」があります。
特に難しいことをしている訳ではなく,PC-8801のN-BASIC ROMから7F00H~7FB3Hのプログラムを丸ごとコピーしてしまうという強引な方法で動作するようにしていました。

ちなみに,M88ではE1.ROM~E8.ROMというファイルを用意することで拡張ROMを使用できるようになっていますが,実機とは違ってN-BASICモードの時は拡張ROMを使用できない実装になっているようです。
現時点では,エミュレータ上でPC-8801のN-BASICから拡張ROMにアクセスしたい場合は,j80が唯一の選択肢でしょう。

1: CD-R 2015年02月14日(土) 午後5時55分

知りませんでした。エミュレータの動きに違いがあるとは、以前に、8001mk2SRのエミュレータを改造?する資料を提供する機会があり、私がDISKへコンバートしたソフトでは、N80モードのS-DOSから起動し、プログラムでSRのROMに切り替える(I/oポートに書き込んで)ということをしていたのですが、エミュレータではROMを切り替えても、SRモードになる実装ではなく動かなかったのをおもいだしたました。SRモードで動く高速なDISKベーシックが無かったのでこうするしかなったのですが。今は、動くようになっていたような。

2: apaslothy 2015年02月16日(月) 午前0時12分

市販ソフトや雑誌掲載ソフトには,N80モードで起動してSRモードに切り替えて実行するソフトなどなかったでしょうから,想定外の動作だったのでしょうね。


名前:  非公開コメント   

  • TB-URL(確認後に公開)  http://www5f.biglobe.ne.jp/~apaslothy/cgi_bin/adiary/adiary.cgi/014/tb/