渡辺一寛です。
遅いフォローですが。
At Mon, 27 Dec 2010 15:50:44 +0900,
武井 潤 wrote:
> 最近ISAの付いたマザーが少なくなったため、
> FreeBSD 4.11でISAのサウンドブラスタPro2をやめて
> PCIのサウンドカードにしたいと思っています。ただし、
> 音(PCMやMP3)を再生/録音するのが目的では無く
> /dev/joy
> に繋がっているジョイステックと
> /dev/sequencer
> に繋がっている外部MIDI音源を使うのが
> 目的です。
>
> 手持ちのYMF744の載ったPCIボードを挿して
> みましたが、joyは認識されるのですが、
> od /dev/joy0などどしても、止ったままになります。
> サウンドブラスタの時は値がダンプされスクロール
> します。
(snip)
> そこで質問なのですが、YMF744の載ったPCIボードは正常に
> 動作すると
> /dev/joy
> や
> /dev/sequencer
> がISAのサウンドブラスタと同様に使えるようになるのでしょうか?
>
> 4.11と古いバージョンの話で申し訳ございませんが、よろしく
> お願いいたします。
ジョイスティックですが、サウンドカードのドライバのソースをちょっと
いじれば、標準の joy(4) ドライバで動作するようになると思います。
手持ちの Avance Logic ALS4000 の載った古い PCI サウンドカードと
7.3-RELEASE で試してみましたが、snd_als4000(4) ドライバで
(1) ジョイスティックの I/O ポートアドレスを設定 (0x200)
(2) ジョイスティックポートを有効にする
具体的には以下のようにしました (ちょっと乱暴なコードですが):
--- sys/dev/sound/pci/als4000.c.orig 2010-02-10 09:26:20.000000000 +0900
+++ sys/dev/sound/pci/als4000.c 2011-01-18 20:33:59.000000000 +0900
@@ -700,6 +700,9 @@ als_init(struct sc_info *sc)
als_gcr_wr(sc, i, 0);
}
+ /* Enable gameport @ 0x200 */
+ als_gcr_wr(sc, 0xa8, 1 << 16 | 0x200 << 16);
+
/* Emulation mode */
v = als_gcr_rd(sc, ALS_GCR_DMA_EMULATION);
als_gcr_wr(sc, ALS_GCR_DMA_EMULATION, v);
あとは joy(4) のマニュアルに沿って /boot/device.hints に記述を加え、
joy(4) ドライバをロードすることで無事動作しました。
# dmesg | egrep '^(pcm|joy)'
pcm0: <Avance Logic ALS4000> port 0xd400-0xd47f irq 9 at device 9.0 on pci0
pcm0: [ITHREAD]
joy0 at port 0x201 on isa0
joy1 at port 0x201 on isa0
# perl -e
'open(JOY,"/dev/joy0")||die;while(1){sysread(JOY,$x,16);@j=unpack("iiii",$x);print
"@j\n";sleep(1);}'
470 446 0 0
470 18 0 0 十字キー上
469 19 0 0 十字キー上
466 873 0 0 十字キー下
467 872 0 0 十字キー下
468 442 1 0 Aボタン
471 445 0 1 Bボタン
468 445 0 0
^C#
YMF744 の場合、データシートをちょろっと眺めた限りでは I/O ポートアドレ
スを設定するだけでいけるような気もします。場合によってはポートを明示的
に有効にする必要もあるかも知れません。
ALSA (http://www.alsa-project.org/) のソースコードを参考に、
いじってみたらどうでしょう。
YMF744 のデータシートはこのへん↓にあります (ALSA の古いミラー)。
http://alsa.cybermirror.org/manuals/yamaha/
MIDI 方面はよく知らないです。最近のリリースでも USB-MIDI アダプタを含
めて「ものによっては動く」という感じ (?) ですが、4.11-RELEASE だとどう
なんでしょうねぇ。
---
WATANABE Kazuhiro ([email protected])