NetBSD お遊び日記 (2002年3月)。
$Id: diary-200203.html,v 1.28 2003/11/21 03:37:02 isaki Exp $
≪ 2002年2月 | 2002年4月 ≫

2002/03/02

[etc] 一昨日 NetBSD/x68k を起動だけしておいて リモートからログインして使ってたんだけど、今日再起動しようとして ディスプレイをつけてみて驚いた(↓)。うーん 1/86400 の確率。 つーかまた電池とんだのかと思って一瞬あせったぞ。

add net 2002:ff00::: gateway ::1: Invalid argument
writing to routing socket: Invalid argument
IPv6 mode: host
ifconfig: SIOCGIFFLAGS : Device not configured
ifconfig: SIOCGIFFLAGS : Device not configured
Configuring network interfaces:.
Building databases...
Segmentation fault - core dumped
Starting syslogd.
Checking for core dump...
savecore: /netbsd: kvm_nlist: bad namelist
savecore: /netbsd: _dumpdev not in namelist
Feb 28 23:59:06 savecore: /netbsd: kvm_nlist: bad namelist
Feb 28 23:59:06 savecore: /netbsd: _dumpdev not in namelist
Mounting all filesystems...
Clearing /tmp.
Checking quotas: done.
Setting securelevel: kern.securelevel: 0 -> 1
Creating runtime link editor directory cache.
ldconfig: /usr/local/lib: No such file or directory
Updating motd.
starting local daemons:writing to routing socket: Invalid argument
add net default: gateway 192.168.0.1: Invalid argument
 poffd.
Starting inetd.
Starting cron.
Fri Mar  1 00:00:00 JST 2002

NetBSD/x68k (yuka.local) (ttye0)

login:
ぼろぼろにエラーが出てるのはカーネルだけ ELF だから。 途中の savecore からプロンプトまで1分かかるっていうのもすごいと思う。


2002/03/03

[x68k/vs] 田村さんが作っている周波数とチャンネル数変換 機構のパッチを見てみたところ、現行の audio ドライバへのパッチよりも きれいにあっさり出来上がってしまった。 うーん、すばらしい。

[i386/audio] しかもこの田村さんのパッチあてると、今まで Invalid Argument としか言われなかった auich0 からちゃんと音が 出るようになった。かなり嬉しいぞ。ちゃんと周波数変換もしてるし。 これでやっとファ○コンエミュレータで遊べるぞー。 yds だとブロック長か何かが nes が要求するのと違ってて fail してたんだけど、auich はその条件は満たしていたが 今度は 48kHz 問題で音が出なくて八方塞がりって感じだったわけ。 まあこれもそれも ISA バスのないマザーボードを買ってしまったことが 原因なんだけどさ。SoundBlaster つけときゃこんなに問題おきなかっただろうに。 というのはさておき、かなりノイジーな音だけどちゃんとスーパーマ○オの 曲が聞けるのでかなり嬉しい。

[x68k/vs] 話は元に戻るけど、任意の周波数から任意の周波数への 変換ってああいう風にやるのねー。考えても考えても思いつかなかったけど 案外ローテクで、私アルゴリズムに感動って感じで。

[MI/vlan] vlan ていう仮想インタフェースがある。 ちょっとした L2 スイッチとかで出来る VLAN と同じことだろうとは 思っていたけど意味が分からず使ってなかった。 が、最近ちょっと意味が分かったので試しに使ってみた。 要は tagged VLAN なわけね。 しかしそれが X68000 でも使えるのには驚いた。さすが NetBSD。

yuka:~# uname -a
NetBSD yuka.local 1.5ZA NetBSD 1.5ZA (YUKA-VS) #41: Sun Mar  3 23:14:11 JST 2002
     isaki@erika.local:/var/obj/vs/sys/arch/x68k/compile/YUKA-VS x68k
yuka:~# ifconfig.elf vlan0
vlan0: flags=8843 mtu 1500
        vlan: 1 parent: ne0
        address: 00:50:c2:10:60:dc
        inet6 fe80::250:c2ff:fe10:60dc%vlan0 prefixlen 64 scopeid 0x3
yuka:~# ping6.elf -w ff02::1%vlan0
PING6(72=40+8+24 bytes) fe80::250:c2ff:fe10:60dc%vlan0 --> ff02::1%vlan0
34 bytes from fe80::201:3ff:fecf:f7c8%vlan0: erika.local
33 bytes from fe80::250:c2ff:fe10:60dc%vlan0: yuka.local
^C
--- ff02::1%vlan0 ping6 statistics ---
1 packets transmitted, 1 packets received, +1 duplicates, 0% packet loss
yuka:~# ping6.elf -w ff02::1%ne0
PING6(72=40+8+24 bytes) fe80::250:c2ff:fe10:60dc%ne0 --> ff02::1%ne0
34 bytes from fe80::201:3ff:fecf:f7c8%ne0: erika.local
33 bytes from fe80::250:c2ff:fe10:60dc%ne0: yuka.local
33 bytes from fe80::202:b3ff:fe10:28e8%ne0: rina.local
^C
--- ff02::1%ne0 ping6 statistics ---
1 packets transmitted, 1 packets received, +2 duplicates, 0% packet loss
yuka が X68030、erika と rina は隣にいる NetBSD/i386 のマシン。 実行ファイル名が怪しいのはカーネルだけ ELF だから(前にも書いたような..)。

[x68k/etc] なんとなく私的 TODO。


2002/03/10

[x68k/vs] 田村さんの周波数/チャンネル数変換パッチが commit された ので、おうちのコードも追従した。ついでにもうちょっと見ていて 以前田村さんから指摘された 1byte だけ書き込んだ時にそのデータがなくなる 問題も修正してみた。コード書くのは簡単なんだけど、こういう大がかりな 変更を英語でバトルするのが大変...。

[x68k/vs] X68030/30MHz では MP3 のリアルタイム再生は不可能だが 再生用に他の形式に変換しておけば大丈夫...。

% mpg123 -w input.wav input.mp3
% sox input.wav -r 15700 -b -u -c 1 output.wav
これで 15.7kHz モノラル ULINEAR8 の音声ファイルが出来る。 ファイルサイズも mp3 より数%小さいし:-)。 この形式なら X68030/30MHz でも CPU 負荷 40% 程度で再生できる。 音質も (あえて比べなければ) 別にそんなに気にならないし。 って、別に嬉しくないか...。


2002/03/12

[vax/emulator] 久しぶりに早く帰ったので、 VAX エミュレータ なるものを試してみた。 コンパイルが3秒で終るあたりが乙だがプロンプトからいざ 起動するまでの手順が分からず挫折(早っ!)。


2002/03/14

[i386/auich] mulaw を ulinear16 に変換したファイルを うちの auich0 で再生するとモデムか FAX のような音になる。 と田村さんに報告したら、田村さんところではちゃんと聞けてるらしい。 チップ依存かなあ。 もちろんそのファイルを yds0 で再生するとちゃんと聞けるし。

[x68k/vs] tech-kern に出した vs の修正に 「反対ないなら週末に commit するね」と念を押しておいた。 まあ誰も私の英語は読めないだろうから反論できないだろう。(汗


2002/03/15

[x68k/vs] やっぱ mulaw や ulinear{8,16} と ADPCM の アプリケーションによるコンバータって要るのかねえ。 上で書いた 15.7kHz ulinear8 も ADPCM に変換しておけば CPU 負荷ほとんどなしでファイルサイズ半分になるからね。 pkgsrc にでもしようかしら(笑)。 って NetBSD/x68k で音楽聞こうとしてるのは地球上の人口 60 億人の中でも 私1人だけだろうな。ふふふ(意味不明)。


2002/03/16

[x68k/poffd] ちょっと前の話だけど、x68k-port には poffd(8) というデーモンがある。フロントパネルの電源ボタンが押されたことを 検出して指定されたアプリケーションを実行するというものだ。 指定されたアプリといっても shutdown -p now を指定するのが妥当な ところでしょう。さっそくやってみたところ、Human68k っぽい操作性で なかなかよいことが分かった。 なんせログインするだけで10秒くらいかかる X68030/30MHz だから ログインせずに安全に電源が落せるなんてありがたい...。 [続き(2003/11/21)]

[x68k/vs] 4カ月ごしの念願の vs0 の修正を commit する。


2002/03/17

[x68k/vs] commit した後で試すなよって気もするが、 録音も試してみようと思ったらカーネルが帰ってこなくなった。 けっこうまずいので、原因だけ見つけて commit しておく。 まだ録音はうまく出来ない。

[i386/auich] 田村さんが commit された auich0 用の周波数変換の コードだが、うちでは linear16 や linear8 が全然別物の音が聞こえていた。 田村さん (やおおがいとさん) といろいろ話をしていたのだが、 しょうもないことで解決した。 うちでは auich0 は audio1 にアタッチされていたので

audioplay -d/dev/audio1 -C/dev/audioctl1 filename
                        ^^^^^^^^^^^^^^^^
とすれば再生できることが判った。うーん付き合って下さったお二方に申し訳ない。

[i386/auich] おまけに田村さんがいろいろ commit されている おかげで、Linux バイナリの snes から比較的きれいな音が出るようになった。 まだノイズ音がちょっとうまく再生できてないけどこれは snes 自体の問題かなあ。 Linux がないからわからないけど、それはそれとして、スーパーマ○オとかの BGM が聞けるのがちょっと嬉しい。

[x68k/vs] 録音ができない...。ってこれは vs0 が commit された 当初からなんだけど。今までの感触だとどうもリングバッファの終端処理を 間違えてるっぽい推移をしてる。


2002/03/19

[x68k/vs] 一昨日 commit したコードも間違えてたので、 田村さんに相談しながら修正コードを書いてみる。 しかしどうもこの修正だと vs0 でリングバッファのまわり方がおかしいんだよね。 ほんとに修正できてんのかなあ。確信がもてないので commit できず。

vs0 で録音ができないのと vs0 でリングバッファがうまく回らないのと audio subsystem 全体でリングバッファがうまく回るかどうかは別問題なんだけどね。 少なくとも audio subsystem を破壊しないように気をつけなければいけない。 今は破壊してるけど :-)。 でもこれを直すと vs0 でリングバッファがうまく回らない。むう。 どうすりゃええんじゃ。 vs0 の録音ができるかどうかなんてのはとりあえず捨てるというのが 世界中の NetBSD ユーザにとって幸せか。

[x68k/vs] vs0 で録音したファイルを再生するとノイズと早送りっぽい音が混ざっている。 これはバッファの半分がごみで埋まってるような症状。 で dev/ic/msm6258.c を見てて、ADPCM → リニア PCM の変換ルーチン の中のポインタの計算間違えてるような箇所を発見したんだけど、修正すると まったく音がでなくなる。何故じゃー。訳わからん。


2002/03/21

[x68k/vs] audio.c を修正して試してみたが、vs0、yds0、auich0 ともに なんとなくちゃんと動いてるっぽいので commit しておく。 まあ元々問題はないはずなんだけどね。

[MI/audio] audio_read() がさっぱり理解できなかったので ソースにコメントをびっしり入れてみた。 ようやく理解できた。 一度書き上がったところで間違えて消してしまって、あれは二番煎じなので 全体的に一回目よりもいまいち。 それはさておき、田村さんの周波数変換機構は vs0 じゃ使えないね。むう。 せっかく便乗しようと思ってたのに...。

[i386/aria0] いつからか分からないがカーネルの中に audio2 at aria0 が現れていた。カーネルコンフィグもしょっちゅう 違うの書いてるから何がなんだか分からないけど、そんなデバイスが この PC のどこにあるんだ? マザーボード埋め込みなんだろうな。 でもいつから出てきたんだろう。やっぱ NetBSD/i386 は GENERIC に近い フルフルカーネルで起動するのが面白いかな。 ただコンパイルに時間かかるからなあ。

[i386/1.5ZC] vs0 用の audio の修正の確認の意味もあって カーネルを 17日の 1.5ZB から今日の 1.5ZC に上げたんだけど、 Mozilla が3回もカーネルを道連れにお亡くなりになるので 1.5ZB に戻した。 NetBSD のカーネルでこういうことがあるのは久しぶりなので、 あやうく /onetbsd (1つ古いカーネルね) すら残してないかも とどきどきしたが、これでしばらく暮らそう。

[vax/SIHM] エミュレータが動いた。 つーか動かなかったのはコンパイルの時に改行コードを変更しないと いけないんだけど、その時に誤って ROM イメージまで改行コードを変更 してしまっていたから。そこだけ気をつければ例のページに書いてある 通りやればインストールできる。実行速度は遅いねえ。 ホストは PentiumIII/1GHz なのにインストールに結構時間かかるねえ。 それはさておき、ほんとに NetBSD/vax が動くなんて感動もの。 早く NetBSD/x68k もエミュレータで実行できるようにならないかなあ。


2002/03/22

[i386/1.5ZC] 昨日不安定だったのは IPv6 絡みらしい。 そういや Mozilla でリンクを触ったりした時に落ちてたな。

[vax/SIHM] エミュレータ上で NetBSD/vax のインストールが できた。けど、いざ起動してみるとただの NetBSD なのでいまいち 面白くないことに気付いた(笑)。どっちかっていうと VAX エミュレータ用の イーサネットドライバとか書いたほうが面白いね。 って単なるデバイスドライバ好きか? >


2002/03/23

[MI/audio] sw_code の仕様を大幅に変更した audio subsystem を 実験中。というか vs0 で再生はあっさり出来た。録音はカーネルが無限ループに はまってしまう。これを田村さんが書いてた auich 用の周波数変換機構と うまくマージできればきれいなんだけどな。 まあそのコードが書けるまでには英語勉強せえよ >

[MI/w3m] これまで NetBSD だとウェブ上の掲示板に (日本語で) 書き込みができなくていちいち Windows に立ち上げ直す悲しい生活をしてきた。 が、よくよく考えたら我らが kterm 愛好家(?) には w3m という強ーい 味方がいるではないか。忘れてた。/usr/pkgsrc/www/w3m でさくっと make。おおー、掲示板に書き込めるぜ。こいつぁ便利だ。 というか今までなんで気付かなかったんだろう。

[MI/mozilla] mozilla 0.9.8 が IPv6 カーネルだと IPv6 でしか 接続できないお馬鹿ちゃんなので、localhost に IPv6 を食って IPv4 で聞きに 行くプロキシサーバとして www6to4 をインストールしてしのいでいた。 ところが、この www6to4 がもっとお馬鹿ちゃんで、別サーバへのリンクを 辿った時に時々新しいパスとさっきまで見ていた古いサーバ名をひっつけた URL に聞きにいってしまうのだった。 リロードしたりなんやでしのいでいたが、あまりに使いづらいので、 wwwoffled に入れ換えた。もうちょっとこれで様子見よう。 つーかみんなどうやって暮らしてるんかなあ。 やっぱ BSD Magazine No.11 の焼肉話の通り NetBSD ユーザは カーネル書くだけで誰も生活してないんかなあ。


2002/03/24

[x68k/commit] vs0 の録音はにっちもさっちも行かないので諦めて(笑)、 何気なく OPM あたりを見てみることにした。相変わらず気分屋。 その過程で sys/arch/x68k/include に古いオーディオドライバ時代の ヘッダファイルが残っているのを見つけたので削除して commit する。 distrib/sets 以下が何してるのかよく分かってなくてちょっと汗。


2002/03/26

[x68k/vs] 今日は再び vs0 の録音をみてみる。 sys/arch/x68k/dev/vs.c で録音時に factor=2 しているのは 明らかに誤りなので、修正する。 この修正で録音できたファイルのサイズは正しいものになるが まだノイズ混じりでしか録音できない。 おまけにカーネル内で printf 入れてみてると、動いてるのは動いてるけど、 バッファの回り方がどうも怪しいような気がする。 まあそれはともかく、まったくサイズも違うものが出来るよりは ノイズ混じりで録音出来るほうがいいんじゃないかなと思うし、 1.6 までにはソースコードレベルで少しでも正しいものにしておいた ほうがいいのかもしれないとか思ったのでとりあえず commit しておく。


2002/03/31

[x68k/vs] NetBSD 1.5.2 の audiorecord は -P4 が使えず ADPCM の録音をテストすることができなかった。 audiorecord だけコンパイルしてもいいんだけどカーネルだけ ELF ってのも 何かと面倒だったので、いい機会だと思って ELF の snapshot で 再インストールすることにした。

[x68k/ELF] うーん、ブートローダが壊れてたやつを 結局デバッグしなかったなあ。でもこれでやっと久しぶりに 自力でブートできる環境に戻った。これで loadbsd.x からカーネルを 起動しなくても済むぞ。NetBSD 上で rcp なら数秒で終るところを Human68k で ftp すると下手すると2分くらいかかるからねえ。

[x68k/vs] というわけでめでたく 1.5ZA なユーザランドで インストールを終えたので、audiorecord を試してみる。 sun のヘッダを書こうとしてワーニングが出るのが鬱陶しい。 ワーニング消したいんだけど、ADPCM って全部同じフォーマットなのかなあ。 AUDIO_ENCODING_ADPCM_MSM6258 とか作りてえー。

[x68k/vs] ちなみに X68k の ADPCM ファイルを再生するには

% audioplay -f -e adpcm -s 15700 -P4 file.PCM
とやる。録音はこう。
% audioplay -q -f -e adpcm -s 15700 -P4 file.PCM
録音はまだ ADPCM でしか出来ない。mulaw で録音するとノイズ混じりに なるのよねえ。1.6 までには直せたらいいな。

[x68k/vs] 備忘録。WAV 形式で録音する方法。

audiorecord -f -Fwav -e ulinear -P8 -c1 -s8000 a.wav
au 形式で録音するには audiorecord a.au だけなのにねえ...。 まあともかく ulinear での録音がやっと試せた。 結果は mulaw と同じノイズ混じり。なのでどっちにしろ ADPCM→PCM 変換が おかしいのは間違いない。

[x68k/vs] ADPCM → リニア PCM の変換ルーチンだけ抜き出して アプリケーションにしてテストをしてみる。 そこで、昔 double を int に変更するために、ある変数を1000倍したんだけど 録音の方でその値を使う時に1000で割る処理を追加してなかったことに気付いた。 そらノイズも混じるかなあ。ほんとにノイズだけで済んでたんだろうか。 なんでアプリケーションで変換すると全然違う音質になるんだろう。 カーネルの中のコードはあきらかに戻り値ポインタを間違えてるのに音が半分出るし。 うーん分からん。


≪ 2002年2月 | 2002年4月 ≫
井崎のホームページへ戻る
isaki@NetBSD.org / isaki@x68k.net