Z80 のコアで使用しているT80 のバグでした...特殊な命令なんですけどねぇ。
mk2 の音声合成ルーチンで、OUTI という命令を使っています。
以下、Zilog社の「Z80 Family CPU User Manual」の282ページより抜粋です。
===
OUTI
Operation: (C) ← (HL), B ← B -1, HL ← HL + 1
===
HL で指すメモリの内容を、ポートCに出力する命令です。
その後に、レジスタBをデクリメント、HLレジスタをインクリメントします。
mk2 では、0x0045 より
0x0045 LD C,0EFH
0x0047 LD HL,02C9CH
0x004A LD B,09H
0x004C INC C
0x004D OUTI
0x004F JR NZ,04CH
で、ロジアナで観測した結果がこちら。
OUTI 命令は、「ED A3」で、2回実行している所を観測しています。
1回目は、OUTIを実行した後に、アドレス「0x2C9C」を出力していて、そのアドレスに対して、データ「0x71」が返されています。
で、その値を、I/Oポートのアドレス「0x08F0」に出力しています(iorqn が "L" の時)。
2回目も同様に、OUTIを実行した後に、アドレス「0x2C9C」を出力していて、データ「0x71」が返されています。
で、その値を、I/Oポートのアドレス「0x07F1」に出力しています(iorqn が "L" の時)。
その後も同様なんですが、OUTI 命令で実行した結果の「HLレジスタをインクリメント」が行われていません(−−;
こういう不具合があると、他の命令に関しても調べる必要がありそうです。

