isaki68k / nono-issue

1 stars 0 forks source link

uPD7201 の送信割り込みがかからない #82

Closed tsutsui closed 3 years ago

tsutsui commented 3 years ago

nono-0.2.2/vm/upd7201.cppuPD7201Device::ChangeInterrupt() によれば

                // reset_txint_pend は通常 true、コマンド発行で false に落ちる。
                // XXX INT DMA Mode はよく分からんのでスルー
                bool tx_int = (tx_empty && tx_enable && chan->reset_txint_pend);

とのことですが、現状は chan->reset_txint_pendtrue をセットしてるのが uPD7201Device::ResetChannel() のチャンネルリセットだけなので 送信割り込みは起動直後の1回だけはかかる、という状態だと思います。 仕様としては uPD7201Device::WriteData() の「1文字送信」の後に

        chan->reset_txint_pend = true;

の操作が必要なんじゃないかと思います。

上記修正を入れることで NetBSD/luna68k カーネルでも実機同様に送信割り込みかかるようになるようです。

isaki68k commented 3 years ago

この辺いろいろ書き直して対応しました。 7a41155a (2021-09-24) あたり

tsutsui commented 3 years ago

nono 0.2.3 で送信割り込みがかかっていることを確認しました。ありがとうございます。