QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1292|回复: 2

dosemu+alsa+timidity

[复制链接]
发表于 2003-6-7 15:00:27 | 显示全部楼层 |阅读模式
dosemu可能是我见到的最好最快的dos模拟器,它的dpmi模拟的非常好,能运行绝大部分dos保护模式的程序,实是linux下玩dos游戏的最佳选择,我用它都可运行《金庸群侠传》了。但是它的配置稍麻烦了一点,我先简要的说一下:
1.下载low-latency patch, http://www.zip.com.au/%7Eakpm/linux/schedlat.html#downloads,重新编译内核。成功后用echo 1 > /proc/sys/kernel/lowlatency启用low-latency,并修改/etc/sysctl.conf,加入kernel/lowlatency = 1,使low-latency path一开机就启用。这一步不是必须,但能改善alsa回放效果。

2.安装alsa驱动(alsa-driver配置建议为./configure --with-sequencer=yes --with-cards=your_CARD, virmidi),再以我的声卡为例在/etc/modules.conf中加入如下几行:
alias char-major-116 snd
alias snd-card-0 snd-via82xx
alias snd-card-1 snd-virmidi
alias char-major-14 soundcore
alias sound-slot-0 snd-card-0
alias sound-slot-1 snd-card-1
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss
options snd major=116 cards_limit=2 device_mode=0666 device_gid=0 device_uid=0
options snd-via82xx index=0 id=CARD_0 mpu_port=0x330
强烈建议使用alsa驱动,不要用内核驱动(效果太差)和oss驱动(运行dosemu一发声就死了)。
分别运行cat /proc/asound/cards与aconnect -o,看看有没有得到类似以下几行
cat /proc/asound/cards
0 [CARD_0         ]: VIA686A - VIA 82C686A/B rev50
                     VIA 82C686A/B rev50 at 0xdc00, irq 10
1 [VirMIDI        ]: VirMIDI - VirMIDI
                     Virtual MIDI Card 1
aconnect -o
client 64: 'Rawmidi 0 - VIA 82C686A/B rev50 MPU-401' [type=kernel]
    0 'VIA 82C686A/B rev50 MPU-401'
client 72: 'Virtual Raw MIDI 1-0' [type=kernel]
    0 'VirMIDI 1-0     '
client 73: 'Virtual Raw MIDI 1-1' [type=kernel]
    0 'VirMIDI 1-1     '
client 74: 'Virtual Raw MIDI 1-2' [type=kernel]
    0 'VirMIDI 1-2     '
client 75: 'Virtual Raw MIDI 1-3' [type=kernel]
    0 'VirMIDI 1-3     '
client 64是我的声卡,client 72~client 75是snd-virmidi模块虚拟的midi端口,分别对应于/dev/snd/midiC1D0~/dev/snd/midiC1D3。

3.下载TiMidity++-2.12.0-pre1,这不必须的,但它能为dosemu提供很好的midi回放功能。
以下是我编译timidity时用的配置,以作参考:
CFLAGS='-O9 -Wall -funroll-all-loops -march=athlon-tbird -mcpu=athlon-tbird -pipe -ffast-math -fomit-frame-pointer' ./configure --enable-ncurses --enable-slang --enable-motif --enable-tcltk --enable-emacs --enable-vt100 --enable-xaw --enable-xskin --enable-gtk --enable-network --enable-spectrogram --enable-wrd --enable-alsaseq --enable-audio=oss,alsa,esd
装好timidity后要进行一番配置:
ln -s /dev/snd/midiC1D0 /dev/midi10
ln -s /dev/snd/midiC1D1 /dev/midi11
ln -s /dev/snd/midiC1D2 /dev/midi12
ln -s /dev/snd/midiC1D3 /dev/midi13
编辑TiMidity波表配置文件,否则发不了声。理论上任何Soundfont2波表都可以
vi /usr/local/share/timidity/timidity.cfg
soundfont /mnt/wine/timidity/Unison_v2.sf2   #我的配置,以作参考。
运行以下命令可启动timidity alsa sequence server
timidity -iA -Os -B4,8 &
参数-iA为alsa server interface,-Os为音频输出用alsa(必须如此,否则下步等着死机吧),-B4,8为缓冲区设置,缓冲区设的太大可能导致音频延迟,设的太小可能导致破音。
用以下命令连接timidity alsa server
aconnect 75:0 128:1
接着运行aconnect -lo检测一下,若成功可得到以下类似的几行:
client 64: 'Rawmidi 0 - VIA 82C686A/B rev50 MPU-401' [type=kernel]
    0 'VIA 82C686A/B rev50 MPU-401'
client 72: 'Virtual Raw MIDI 1-0' [type=kernel]
    0 'VirMIDI 1-0     '
client 73: 'Virtual Raw MIDI 1-1' [type=kernel]
    0 'VirMIDI 1-1     '
client 74: 'Virtual Raw MIDI 1-2' [type=kernel]
    0 'VirMIDI 1-2     '
client 75: 'Virtual Raw MIDI 1-3' [type=kernel]
    0 'VirMIDI 1-3     '
        Connecting To: 128:1
client 128: 'Client-128' [type=user]
    0 'TiMidity port 0 '
    1 'TiMidity port 1 '
        Connected From: 75:0
这说明client 75已经连接到client 128,出即是说/dev/midi13已和timidity server建立了连接。断开连接的话可用aconnect -x。

4.先安装公社的dosemu-1.1.1,取得/var/lib/dosemu/hdimage.first,改名为hdimage_c,它包含有freedos,然后删除dosemu-1.1.1。接着安装dosemu-1.1.4,可在www.rpmfind.net和www.sourceforge.net上找到。我是用srpm安装的,在编译过程中有个错,是没有freedos引起的,不过不碍事,修改spec忽略freedos的安装或干脆进入/usr/src/redhat/BUILD/dosemu-1.1.4执行make install完成安装。
首次运行dosemu需要dos启动盘或启动盘的image,如果你机子上装了vmware并运行win98的话可用vmware create a boot image, you can also create it by hdcopy in a real Win98。然后将此image复制到/var/lib/dosemu下,为了方便更名为boot。
打开/etc/dosemu/dosemu.conf或~/.dosemurc,修改以下几行:
$_hdimage = "hdimage_c"
$_vbootfloppy = "boot" #如你有启动盘的话可将此行换为$_floppy_a ="threeinch:/dev/fd0"
$_sound = (on)
$_sb_base = (0x220)
$_sb_irq = (5)
$_sb_dma = (1)
$_sb_dsp = "/dev/dsp"
$_sb_mixer = "/dev/mixer"
$_mpu_base = (0x330)
运行xdosemu,成功的话一个熟悉的Win98启动盘界面就出现了,选择第二项启动dos。启动后执行sys a: c:将dos系统传给hdimage_c,顺便把你常用的命令也复制过去吧,如edit.com等。按惯例编辑config.sys和autoexec.bat.
edit config.sys
device=c:\emufs.sys /                      #此行将/作为d:盘
device=c:\emufs.sys /mnt/winc          #此行将/mnt/winc作为e:盘,以此类推。
device=c:\ems.sys                           #内存管理器,勿动!

edit autoexec.bat
set path=<your path list>
SET BLASTER=A220 I5 D1 T2
按<ctrl>+<alt>+<PageDown>关闭模拟器,修改/etc/dosemu/dosemu.conf或~/.dosemurc:
vbootfloppy = ""

最后一步:
rm -f ~/.dosemu/run/dosemu-midi
ln -s /dev/midi13 ~/.dosemu/run/dosemu-midi
至此大功告成,试试运行游戏看看有没有音乐。不过可惜的是,如果你的声卡硬件不支持多音频流的话,你只能听到音乐不能听到音效,因为声音端口已被timidity占用啦。
更详细的配置请参考dosemu的doc.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2005-5-8 22:54:07 | 显示全部楼层
收藏
回复

使用道具 举报

发表于 2005-5-9 22:11:30 | 显示全部楼层
有点老了吧。现在2.6内核已经是alsa的驱动了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 08:25 , Processed in 0.040608 second(s), 17 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表