isaki68k / nono-issue

1 stars 0 forks source link

HD64180: CPIR/CPDR命令で比較の一致による終了がない? #148

Closed ao-kenji closed 2 weeks ago

ao-kenji commented 3 weeks ago

HD64180のCPIR/CPDR命令で、A == (HL) の時にリピートを終了する処理が不足しているのではないでしょうか。 hd64180/hd64180ops.cpp のREPEAT_UNTILマクロを見ると BC == 0 になった時のみリピートを終了するように読めました。

ao-kenji commented 2 weeks ago

補足: FUZIXで使用しているZ80のライブラリでは strlen() がCPIRで実装されているのですが、nonoで動かしたときに strlen("/init") の返り値が -1 になってしまうことから気づきました。 https://github.com/EtchedPixels/Fuzix-Compiler-Kit/blob/main/supportz80/_strlen.s

isaki68k commented 2 weeks ago

お手数おかけしております。以下のパッチで直ると思いますので試してもらえますか。 http://www.pastel-flower.jp/~isaki/NetBSD/patch/nono-20241112-cpir.diff

ao-kenji commented 2 weeks ago

パッチをあてた nono で、CPIR による実装の strlen() が正しく動くことを確認しました。ありがとうございます!

isaki68k commented 2 weeks ago

ありがとうございます。次リリースに入れます。