2011年10月21日

デバッグ(1)

 いろいろとあった問題ですが、解決しました。

 1つは、AY-3-8910 のレジスタを実装した事です。音は鳴りませんが、書き込み、読み出しが出来ます。


 もう1つですが、T80 のバグでした。

 唐突に挙動不振になる点ですが、実は

 10 OUT &H93,3:GOTO 10

 を実行すると、?UL Error が出る事に集約されていました。


 ?UL Error になる点から逆に追っていくと、見つかりました!

 OUT 命令 を実行した直後に割り込みが発生すると、その時のM1 ステートが短くなるというバグでした。


割り込み問題SIM



 これがシミュレーション結果です。上が正常の場合、下がバグった時です。



割り込み問題まとめ



 まとめてみたのがコレです。

 本来、M1N とIORQ の立ち上がりでデータを取り込んで、このアドレスを参照するはずなんですが、この取り込みタイミングが遅れるため、変

なアドレスを参照して、変な動作になるようでした。


 T80 のコアは触りたくなかったので、外部の回路で対処しました。面倒なので、RFSHN が L の時は、M1 サイクルのデータがそのままになって

いるという風に、外部でラッチしました。



 これを修正すると、今までの問題が嘘のよう。

 手当たり次第、ソフトを動かしてみましたが、今の所、調子が悪いソフトはありません(まあ当たり前なんですが)。


動物将棋

 動物将棋:HP には、mkII 用になっていましたが、PC-6001 でも問題なく動くようです。


F_DOT2

 F-DOT2:写真では分かりにくいですが、ぐりぐり動きます。


ザ・サーキット

 ザ・サーキット:PC-6001 専用。mkII 以降ではサポートしていない画面モードのヤツです。


タワーパニック

 タワーパニック:自分で入力した最初のゲームです。もう30年近く前ですね...






posted by えすび at 17:24| Comment(3) | FPGA化:CPU周り | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
ちょっと古い話へのコメントで申し訳ありません。

個人的にPC8801MK2SRのFPGAへの移植をしていますが
どうにも不定期で変な動きをする問題が起きており、
割り込みコントローラを止めると正常に動作する
ところまで確認できていましたが、一生懸命
自分で書いた割り込みコントローラにバグが無いか
調べていましたがT80側に有ったのですね。

他にも、(バージョンによるのかもしれませんが)
割り込み時のM1n信号がベクトルロードより半クロック
早かったり、IM0時に"00"(nop)を入れるとIM2のような
動作をしたり、WAITnが正常に動作しなかったり。。。
T80は結構疑いながら使った方がいいみたいですね。
Posted by プー at 2013年09月19日 00:45
コメントありがとうございます。

T80 で私が把握している問題は、以下の通りです。

1)割り込みの問題(上記)
2)INI、IND、INIR、INDR、OUTI、OUTD、OTIR、OTDR、の命令で、HLレジスタをインクリメントされない
3)一部の未定義命令が実装されていない(というか、uPD780C-1 と一致しない)。
4)WAIT_n が有効になるタイミングが半クロック遅い。このため、他のM1_n、IORQ、Write などの信号が遅れる。

 1)はブログの記事通り、今回は外部で対処しています。
 2)に関しては、コアの記述を修正する必要があります(最新版で修正しています)。
 3)もコアを修正する必要がありますが、未調査です。
 4)は、どうも T80 最上位の、generic 文の IOWait := 0 を IOWait := 1 にすれば回避できるみたいです(未確認)。


 本当はCPUコアも自分で作りたかったんですが、手間を考えると既に出来ているものを使う事になります。

 ただ、今回みたいにトラブルがあった場合、解析が面倒なんですよねぇ。
Posted by えすび at 2013年09月19日 08:34
そうですね。
実は僕もCPUコアは自分で書いたほうがトラブル解析がし易いと思って
RTLで書いてみたのですが、ソフト流描き方がいけないのか
使用している1chip MSXのEP1C12のLEの95%をZ80だけで消費してしまった為T80に戻しました。

1)に関しては、貴殿はRFSHnでラッチするように外部で対策を行われた
とのことですが、僕はRFSHn='0'の状態でも(常に)割り込みコントローラが
ベクトルを出力するように書き直し、数ヶ月悩んだのがまるで嘘のように
解決してしまいました。

2)に関しては、今のところ該当命令にぶつかっていない
(正確に言うとCMTもFDCも完成していない為市販ソフトは実行できない)
のですが、必要が有れば貴殿のRTLを拝借させていただくかもしれません。
(実際にはFDC(SDカードではなく実FDD(3.5")を接続する設計にしています)は書きましたが
まだ正常にロードできていません。これらの命令を使用しているためかも知れません。)

3)も今のところ使用していないので後々と考えています。
4)に関しては、T80aに細工をし、WAITn='0'の状態ではM1_n等が
変化しないようにM1_n等のprocess文内で条件を追加してしまいました。
Posted by プー at 2013年09月19日 14:15
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。