借り初めのひみつきち

仮ブログです。

今月の myos

久しぶりの更新になります。

現在のバージョンの myos には明確な内部目標がありました。 Intel HD Audio の対応です。 *1

HD Audio は近年の PC にはかなりの割合で搭載されており、仕様も公開されていてそれなりに情報が出揃っているので実装可能だろうという目論見で実装開始しました。

QEMU で音を鳴らすだけであればネットによくある情報だけで十分実装可能ですが、実機で鳴らす場合にはいくつかの注意点があります。

実機の HD Audio は QEMU よりも多くのノードが繋がっており、実際に音を鳴らすことが可能なノードを特定する確実なロジックは今のところよくわかりませんでした。 HD Audio で音を再生する際に登場する主要なノードとして Pin と DAC があり QEMU では DAC と Pin が直結されていますが、実機では間に Mixer が挟まっているケースが多いです。

現状の実装では音が鳴る機種と鳴らない機種があります。

実際に実装してみると XHCI に比べればだいぶ単純ですが、それでも必要な構造体がかなり多くなってしまいました。

f:id:neriring16:20220213134343p:plain

まだネイティブアプリは未対応で、 haribote OS の MML player (mmlplay.hrb) くらいしか音が鳴りませんが、 myos でも音が出るようになりました。

BEEP 音ジェネレーターはかなり適当な実装なので、将来的にはオーディオデータのスケジューラーやミキサーも実装したいです。

*1:余談ですが HD Audio の開発時のコードネームは Azalia という名前で、現在の myos のコードネームの Azalea と偶然にも非常によく似ています。