少しづつ原因を特定しようと頑張っています。 今のところ、明らかになっているのは次のような動きです。
- 起動時、本体は32kBとして認識している。これは、BIOSで以下のようなロジックを実行することで判定している。
ld hl, 0xbfff ld b,(hl) ld (hl),a cp (hl)
ちなみに0xbfffは拡張RAMの最終アドレス。 - スクリーン1(0x8000-0x83ff)およびスクリーン4(0xa000-0xb9ff)の表示は同じように乱れている。
- スクリーン1のアトリビュートエリア(0x8000-0x81ff)やテキストエリア(0x8200-0x83ff)をpeekすると内容は正しい。
- スクリーン2(内蔵RAM)を表示した状態でプログラムを入力したり実行したりできる。すなわち、0x8400からのメモリを正しくアクセスしている。
- スクリーン1または4でキー入力をするとかなりの確率でリブートしてしまう。
- screen 4,4を実行するとかなりの確率でリブートしてしまう。
ここから言えることは、以下のようなことです。
- SRAMはほぼ正常に動作している。
- VDGからのDMAで正しいデータを読めていない。現在はDRD(拡張コネクタ3番ピン)が0になるときにSRAMからのCSおよびOEをアサートしてますが、それでは足りない?
- VRAMに書き込みをするとリブートしてしまう。
DMA関連の不具合は、ハードウェアに起因した現象なので、ちょっと困り果てています。
も ともと、PC-6001の拡張RAMはDynamic RAMを想定しているので、ひょっとすると、DRDのみでSRAMをリードにしてしまうのが原因なのかも。 DRDのタイミングのみでSRAMをアクティベートしていることで、何か他の信号との関係でデータバスがコンフリクトしていることが考えられます。 もしそうだとすると、RAS and/or CASのアサートも見なければいけないのかもしれません。
そうなると、さらにCPLDに入力しなければならない信号が増えてしまいますね...。
Discrete logicに外出しにするにしても、DRDとRDはand(7408)で、RAS/CASはor(7432)なので、ひとつのチップで処理できません。 まぁ、74139を使ってデコードするという手はありますが、手元にあったかな?
匿名
画面が真っ暗、でもカーソルは出てる状況。
探して、ここにたどり着きました。
パスワード入力で、復活!
修理に出す寸前でした。ホントにありがとう!