Z80のバグ
2020.10.16
超放置してましたが最近MSXをまたいじり始めました。
近々なんか公開するかもね。

それはそれとして、既知情報ですが本家ZilogのZ80には割り込み関連のバグ(エラッタ)があります。

というのは、
LD A,I
LD A,R
という命令は

Iレジスタ、Rレジスタの内容をAレジスタに入れるという見たまんまの機能の他に、

割り込みフリップフロップ(EI/DI状態)をPフラグに入れる

という機能がひっそりとあります。普通にZilogの資料に書かれていますが。
割り込み状態を取得するのに(MSXだと)1/60秒待って割り込みがかかればEIというような実装をしているソフトをわりと見たことあるので、あんまり有名では無い機能かもしれません。

Z80は割り込みがかかるとDIになって割り込みベクタに飛び、
通常のソフトであれば割り込み処理をしたあと、EI状態にしたあとRETIでメイン処理に戻ります。

で、ここで、この、割り込みフリップフロップをPフラグに入れる、という機能にバグがあって、

LD A,I(もしくはLD A,R)実行中に割り込みがかかると割り込み禁止になり、その状態がPフラグに取り込まれる、というバグがあります。
NMOS品はバグがあって、CMOS品は修正されているようです(詳しくはwikipedia参照)

で、これはMSX-ENGINE(T9769)とR800ではどうなっているのかという話。

検証方法自体は実に単純で、

D000 LD HL,0000H
D003 LD A,I
     JP PE,0D00CH
     LD (0F7F8H),HL
     RET
D00C INC HL
     JP 0D003H

とかで、
LD A,IでEI状態ならループした回数を数えて、DIであれば戻ってきます。
EI状態で開始した場合、ループから抜ける条件はないので、バグがあればループから抜けますね。

というわけで、試したところ、A1GT(T9769C)ではループを抜けて戻ってきます。つまり、バグ持ちです。
R800では戻ってきませんので、修正されているようです。

という、今更な話題でした。
2020.10.16 19:03 | 固定リンク | MSX | コメント (6)
コメント一覧
裕之 - 2021年08月04日 17:59
確かに実際の検証コードとかでやってみたという話は見たことないですね。とはいう物の話題がかなり古いので、インターネット上にないのはむしろ当たり前かもしれませんね。
居酒屋ガレージ店主(JH3DBO) - 2021年08月04日 11:31
この問題を実際に検証された裕之さんのこの記事、たまたま見つけて、「こりゃコメントしておかなくっちゃ」っと思った次第です。

バグがあるという話を書かれてる記事、これは何度か見かけたことはあるのですが、実際にプログラムを書いて検証されたのって初めてじゃないかと。
裕之 - 2021年08月03日 16:08
プロセッサ誌に投稿されたご本人様だったのですね。
この件は自分では1997年ごろにソフトを作ったときに「なんとなく怪しい気がする」と気づいてはいたのですが、事実上R800でしか使わないようなソフトだったのと、R800では動いていたので、詳しく調べることもなく放置していました。
今更になってたまたまこのバグに関する記述をネットで見つけて、気になって調べてみたところでした。

その時に作ったソフトでは、コードサイズと速度がかなりシビアな実装をしている個所でしたので、現実的にはZ80 FAMILY DATA BOOKに書かれているような方法での実装は難しかったかなと思います。
居酒屋ガレージ店主(JH3DBO) - 2021年08月03日 08:37
このZ80 IFF2のお話し、技術評論社の月刊誌「プロセッサ」に
投稿した私のレポートが元になっています。
  ※1989年3月号と9月号。 9月号で解決方法を解説。
たまたま最初の記事がザイログの人の目にとまり、資料として
「Z80 FAMILY DATA BOOK」をお送りいただいた、といういきさつ
です。
30年以上前の話になるんですなぁ~。
プロセッサが廃刊になり、ずいぶん経ちました。
トラ技やインターフェースと違ってプロセッサは
「なんでもあり」だったんで、投稿しやすかった。

保存してあったプロセッサの目次↓
http://act-ele.c.ooco.jp/toukou/processor/proc_mokuji.pdf
裕之 - 2021年08月02日 17:17
ありがとうございます。この件に関するオフィシャルな資料は初めて見ました。
居酒屋ガレージ店主(JH3DBO) - 2021年08月02日 16:15
ここで紹介している「Z80 FAMILY DATA BOOK」に解決方法が載っていました。
http://igarage.cocolog-nifty.com/blog/2020/10/post-274c18.html
コメント投稿

名前

URL

メッセージ

- CafeNote -