1つは、AY-3-8910 のレジスタを実装した事です。音は鳴りませんが、書き込み、読み出しが出来ます。
もう1つですが、T80 のバグでした。
唐突に挙動不振になる点ですが、実は
10 OUT &H93,3:GOTO 10
を実行すると、?UL Error が出る事に集約されていました。
?UL Error になる点から逆に追っていくと、見つかりました!
OUT 命令 を実行した直後に割り込みが発生すると、その時のM1 ステートが短くなるというバグでした。
これがシミュレーション結果です。上が正常の場合、下がバグった時です。
まとめてみたのがコレです。
本来、M1N とIORQ の立ち上がりでデータを取り込んで、このアドレスを参照するはずなんですが、この取り込みタイミングが遅れるため、変
なアドレスを参照して、変な動作になるようでした。
T80 のコアは触りたくなかったので、外部の回路で対処しました。面倒なので、RFSHN が L の時は、M1 サイクルのデータがそのままになって
いるという風に、外部でラッチしました。
これを修正すると、今までの問題が嘘のよう。
手当たり次第、ソフトを動かしてみましたが、今の所、調子が悪いソフトはありません(まあ当たり前なんですが)。
動物将棋:HP には、mkII 用になっていましたが、PC-6001 でも問題なく動くようです。
F-DOT2:写真では分かりにくいですが、ぐりぐり動きます。
ザ・サーキット:PC-6001 専用。mkII 以降ではサポートしていない画面モードのヤツです。
タワーパニック:自分で入力した最初のゲームです。もう30年近く前ですね...


個人的にPC8801MK2SRのFPGAへの移植をしていますが
どうにも不定期で変な動きをする問題が起きており、
割り込みコントローラを止めると正常に動作する
ところまで確認できていましたが、一生懸命
自分で書いた割り込みコントローラにバグが無いか
調べていましたがT80側に有ったのですね。
他にも、(バージョンによるのかもしれませんが)
割り込み時のM1n信号がベクトルロードより半クロック
早かったり、IM0時に"00"(nop)を入れるとIM2のような
動作をしたり、WAITnが正常に動作しなかったり。。。
T80は結構疑いながら使った方がいいみたいですね。
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コアも自分で作りたかったんですが、手間を考えると既に出来ているものを使う事になります。
ただ、今回みたいにトラブルがあった場合、解析が面倒なんですよねぇ。
実は僕も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文内で条件を追加してしまいました。