2013年01月12日

uPD780未定義命令(1)

  これもツイッターで見つけた発言から。

>>TAPE版ロードランナーのローダーをちょっと読んでみた。唐突にEDH,C4Hとか現れるけど,それがなくてもプログラムとして成立してるっぽい。ウェイト?よくわかんね。


  未定義命令に関しては、ちゃんと解析する必要があるとは思います。

  昔と違ってロジアナが使えるので、解析はだいぶラクだとは思いますが。


  今の音声合成の解析が終わってからだな(^^;

posted by えすび at 13:53| Comment(7) | P6解析:CPU周り | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
書いた本人でーす。
当事者の方からの情報によりますと解析対策として無効命令を混ぜた可能性があるとか。
無効命令は nop x 2 とみなされるので,結果的にただのウェイトになりますね。
ちなみにこの方はトライ&エラーで未知の未定義命令を探りだしたりしてたそうな。
恐るべし。
Posted by ゆみたろ at 2013年01月13日 00:05
その辺りの発言も読みました。

無効命令じゃない場合が問題なので、結局調べる必要がありますね。

しかし、手探りで探すのは大変そうだ...
Posted by えすび at 2013年01月13日 08:19
clrhome.org/table/
という表があります。背景が赤いセルが未定義命令、空欄・ない行・ない列はnop(?)です。
この表を、8080→Z80新設命令は青、Z80/R800/KC80/uPD9002(88VA)/Z380/eZ80で
異なる動作をする命令は緑にしたものを常用しています。
本業で使う事(信じられない事に今でも80系の組み込みの仕事ってあるんですよ。
さすがにuPD9002はありませんが。仕事では未定義命令はIX/IY分割くらい(R800では
公式命令)しか使いません)が多々あるので重宝しています。
一時期はKC80/KC160が多かったですね。最近はIPが多いです。不具合時はIPの
バグの考慮も必要で面倒です。

イカサマですが、uPD780搭載MSX(Pana FS-A1F)上で、ステップ実行できるモニタ
SUPER-Xで試してみます(P6で便利なモニタ・デバッガってありますか?)。
Z80系は他にZ8400とLH0080・uPD70008Aを持っているので、それとの違いも調べる
予定です。
OTIRの件のような微妙な事までは、これでは調べられませんが。


余談ですが、EDh C4h **hは、Z380ではCALR NZ,**h(NZ時に相対アドレスCALL)と
定義されています。Z380では8086のようにプレフィックスを付ける命令が多くあります。
命令長が長くなりすぎないようにそうしたのでしょう。
あと、公式命令のうち、一見無意味そうな命令(同一レジスタへのLDなど)は
eZ80などでは拡張用に使われていたりします。↑表の1バイト目の中にも緑のセルが
あったりします。ZiLOGが1バイト目をいじったのは賛否両論あったでしょうね。

でもZ80当時は8080との互換性が低くなるような事はできなかったでしょうし。
(WikiにもあるようにZ80の時点でもフラグを兼用したので8080完全互換ではないです)

ところで、uPD780は未定義命令の一部の挙動がZ8400と違うというのは本当ですか?

> 今の音声合成の解析が終わってからだな(^^;

uPD7752のIPって出しませんかね?>ルネサス
Posted by かかっくん at 2013年02月08日 08:06
>>P6で便利なモニタ・デバッガってありますか?

実機のは、ほとんど知りません(P6現役時代は、そこまで使ってなかったので)。

プログラム開発では、エミュレータが一番強力なデバッガですね。
PC-6001VW にはかなりお世話になっています。
Posted by えすび at 2013年02月08日 20:51
> プログラム開発では、エミュレータが一番強力なデバッガですね。

まぁ確かにそうですけど、今回は実物の挙動を調べるので...

実は当方は音声合成もFDDもないP6ですから(音声サンプルは追試できていません、
すいません)、CMTベースで使えるデバッガでないとダメなんです
RAMをデュアルポートにして、外部から送り込む方法はありますが。


ちなみに、SUPER-XはMSX2(VRAM 128K)でFDDが1台以上必要ですが、ディスクが
本質ではないのでCMTでも使えるローダを作りました(本体でのLOAD/SAVEはCMT不可)。
が、全部で117Kあるので1200bpsのCMTでは20分近くかかります。本体は26Kなので、
4分かけて本体だけLOADすれば不便ですが使えます。PCの音声出力からなら2400bpsで
半分にできます。
CMT版の意義はほとんどのMSX2(VRAM 64K機を除く)で使えるようにするためです。
A1FはFDD付きなので、普段はディスク版を使っています。
Posted by かかっくん at 2013年02月09日 03:09
もっと詳細なコード一覧がありました。未定義命令の一覧もあります。
www.wdic.org/w/SCI/オペコード (Z80)
このページではZ80とuPD780を別物して扱っています。

これを見る限り、ありそうな命令がなかったりしますね。
ED拡張命令ではHLの代わりにIX/IYは使えないとか。

「仕事に使っている割に知らないんだな?」とか云われそうですが、未定義命令は
仕事に使えないのであまり研究していなかったりします。

あとは、実際に実行してみてZ80との違いを調べるだけですね
Posted by かかっくん at 2013年02月10日 04:29
情報ありがとうございます。

参考にさせて頂きます。
Posted by えすび at 2013年02月10日 11:52
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

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


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