先日作成した1MB/8MBの増設メモリボードですが、ソフトあるいはつないだPC個体によっては動作しないものがあります。

具体的に発生する現象は以下のとおり。

ハイドライド3

 フィールドがほぼマゼンダ一色になって、キャラクタが表示されない

ドラゴンスレイヤー6

 イベントディスクをディスク入れ替え指示まで流した後、プログラムディスク&シナリオ1ディスクに変えてフィールド(城)に入るとセリオス含めキャラクタがゴミ表示になる。

 直接プログラムディスク&ユーザーディスクで起動してロードしても同じ現象になるかもだけど、未確認。

 

いろいろ調べたところ、CPLDから出しているROMKILL信号に対して、それをオープンコレクタでバスにつなぐためのトランジスタから出ている信号は倍以上のアサート期間がありました。

 

〇ROMKILL信号の変化の様子(対策前)


緑色がトランジスタに入力したROMKILL信号(を反転したもの)、黄色がトランジスタから出力されたROMKILL信号です。

赤い矢印で示した通り入力信号がおよそ400nsなのに対して、トランジスタの出力は1,200nsほどに伸びています。

その直前の入力信号に対する出力も3倍程度の長さになっていて、出力パルスが戻りきる前に次の入力パルスが来てしまっています。

 

〇ROMKILL信号の変化の様子(対策後)

 

CPLDで直接ROMKILL信号を駆動したところ、どのPC個体でも安定して動作するようになりましたので、トランジスタによるアサート期間延長が原因だったのは間違いなさそうです。

PC個体によって動作可否が変わったのは、延長されたアサート期間がソフト動作の許容範囲のギリギリだったのでしょう、多分。

 

トランジスタでROMKILL信号を制御していたのは以前作った128KB/256KB増設メモリボードも同じなので、他のPC個体につないでみたところこちらも同様に個体差がありました。

まあ、こちらのボードは1MB/8MB増設メモリボードと入れ替えて使わなくなったので、対策は急がなくてもいいかな。【8/11削除 暇だったので結局対応しました。記事はこちら

 

バスの信号を制御するのにオープンコレクタを使わずロジック出力を直結するのは怖いんだけど、CPLDでオープンドレインを合成したらうまく動かなかったんですよね。
まあ動作中特にCPLDが異常発熱するということもなかったし、たぶん大丈夫かな…?にやり汗

【8/19追記】

再度ROMKILL信号出力をトライステートバッファに変更したら、今度はうまく動作しました。

前回は条件記述間違えてたのかな?ビール何本も飲んでたし…(苦笑

【8/19追記終わり】

 

ただし、この対策をしても8MB増設メモリではFH用の日本語BASICが起動できませんでした。

画面モードを切り替えていると思われるタイミングでハングします。

1MB増設メモリを載せたPC-8801MC2では同じメディアを使っても起動できるので、1MB増設メモリボードをもう一枚作製してFHに載せて検証する予定です。

 

【8/16追記】

ダメでした…。

1MB増設メモリのバンク設定をx0H-x7H(x=0,1,2,3)にするとダメで、x8H-xFH(x=0,1,2,3)にして本体内部の拡張RAMを有効にする(つまりMC2と同じ状態にする)と正常に起動できるので、大容量増設メモリの設計に何か根本的な原因があるっぽい。

今日までに日本語BASICを使ったことは数えるほどだから影響はほぼないんだけど、なんかもやもやする…。

【8/16追記終わり】

 

【8/17追記】

バンク番号0xF0にバンク番号0x00のミラーバンクがないと日本語BASICが起動できないことが判明。

1MB版拡張メモリボードならバンク0xF0は空いているからミラーバンクにしても問題ないけど、8MB版増設メモリには空きバンクがないので日本語BASICを優先して有効バンクを一つ減らすか、日本語BASICをあきらめて255バンク有効にするかの二者択一ということに。

 

アイ・オー・データ機器のPIO-8234H-1もバンク0x00を含む設定ができるみたいだけど、0xF0にミラーバンクを作ってるのかな?

現物持ってないしWebにも情報が見当たらないので、日本語BASICに対応しているかわかりませんね。

【8/17追記終わり】