MiSTer FPGA 模擬 386/486 電腦的 AO486 使用經驗與心得分享





這個區塊是我使用 AO486 核心在 MiSTer FPGA 上的使用心得經驗分享筆記,發現什麼就記錄什麼,至於其他 MiSTer 的心得筆記就放在 https://www.dearhoney.idv.tw/2352/mister-de10-nano-zero-lag-emulator/ (最後更新 2021/09/09)

一些基本使用

games/AO486 遊戲資料夾下要有最新的 boot0.rom 與 boot1.rom。(update_all.sh 會自動下載回來)

AO486 使用微軟的虛擬硬碟格式 VHD 檔來模擬硬碟,VHD 檔要使用固定大小格式,而不能是動態增長格式,譬如你需要一個 1GB 的硬碟,就必須事先佔用 1GB 的實體硬碟空間,不能用多少才增加多少的動態格式。

如果想要體驗 Windows 98:前往 https://archive.org/details/98se.-7z 下載 Windows98 開機的 VHD 檔,看你是要直接下載 200MB 的檔案或者用 BT 下載回來都可以,這樣你就快速取得一個可以在 AO486 下開機的 VHD 檔,而不需要自己辛苦的建立 DOS 開機片了。喔對了,當然這個是英文版。

原本在研究 eXoDOS 5.0 那裡面七千多個遊戲要怎麼移轉到 AO486 中使用,但是現在發現 archive.org 裡面有一大堆別人做好的現成 VHD 檔,我覺得用 BT 下載回來還挺快的,推薦大家用這種作法來取得懷舊遊戲。

前往 https://archive.org/search.php?query=ao486 這裡有很多可以下載的檔案,基本上都是按照各年份或兩大遊戲公司分類好的 vhd 檔,同樣建議用 BT 下載會快很多,下載完以後解出 VHD 檔,掛載在 AO486 當第二顆硬碟就可以玩樂了。

還有 TOP 300 的 DOS 遊戲合集: https://archive.org/details/top-300-final

光碟機:下載 ao486-dos-util.rar,裡面有兩個當年很知名的 CDROM 驅動程式,OAKCDROM.SYS 與 VIDE-CDD.SYS,看您喜歡用哪一個都可以,安排在 CONFIG.SYS 內。

建議參考用 CONFIG.SYS & AUTOEXEC.BAT

AO486 模擬音效卡相容性是 SB Pro 與 SB16,並且配置的 DMA/IRQ 是以 SB16 為預設值,所以 AUTOEXEC.BAT 中應該配置這一行:

SET BLASTER=A220 I5 D1 H5 T6

由於 AO486 要保留一個區塊的記憶體,來讓 MISTERFS.EXE 這隻工具程式可以簡單方便的與 MiSTer 主機上 /media/fat/games/AO486/shared 這個資料夾的內容在 DOS 下交換,所以如果有使用 EMM.386.EXE 來配置 EMS 記憶體時,要避開一些區域,否則會當機:

參考的 CONFIG.SYS:

[COMMON]
FILES=30
LASTDRIVE=Z

[menu]
menuitem=X, Extended memory (default)
menuitem=E, Extended + Expanded memory
menuitem=C, Conventional memory only

menudefault=X,10

[X]
DEVICE=C:\DOS\HIMEM.SYS /TESTMEM:OFF
DOS=HIGH,UMB
DEVICE=C:\DOS\EMM386.EXE NOEMS I=C800-CDFF X=CE00-CFFF I=D000-EFFF
DEVICEHIGH=C:\UTILS\OAKCDROM.SYS /D:MSCD001

[E]
DEVICE=C:\DOS\HIMEM.SYS /TESTMEM:OFF
DOS=HIGH,UMB
DEVICE=C:\DOS\EMM386.EXE RAM 8192 FRAME=D000 D=256 I=C800-CDFF X=CE00-CFFF I=D000-EFFF
DEVICEHIGH=C:\UTILS\OAKCDROM.SYS /D:MSCD001

[C]
DEVICE=C:\UTILS\OAKCDROM.SYS /D:MSCD001

參考的 AUTOEXEC.BAT:

@ECHO OFF
PROMPT $P$G
SET BLASTER=A220 I5 D1 H5 T6
LH C:\DOS\MSCDEX.EXE /D:MSCD001 /L:Z
LH C:\UTILS\CTMOUSE.EXE
LH C:\UTILS\MISTERFS.EXE Y /Q
LH C:\UTILS\SOFTMPU /MPU:330

OPL2/OPL3 FM 音源模擬問題

我發現 AO486 模擬 AdLib 音效卡,也就是所謂 YAMAHA OPL2 / OPL3 這顆 FM 音源是有缺陷的,並不是每一個遊戲都會遇到問題,但是拿出當年 AdLib 的公用程式像是點唱機或作曲機來播放音樂時,會發現打擊樂器的音色表現不正常,多半缺乏或怪怪的。

Sound Blaster 模擬問題

在 1992 年的芬蘭組合語言大賽冠軍作品 Unreal 中,若音效卡選擇 Sound Blaster Pro,則出現的聲音曲調慢一倍,頻率也慢一倍,但選擇 Sound Blaster 時就正常。

隔一年的冠軍作品 Second Reality,狀況也很多。片頭完畢以後進入主題,原 本非常了不起的音樂節奏與畫面同步效果慢慢的就錯位開來,越來越對不準在拍點上, 且延遲問題越來越嚴重。當年這種音樂節奏與畫面影像同步的效果,基本上與 CPU 快慢沒有關係,你 CPU 慢,畫面自然跳格;CPU 快,畫面就順暢,但是節奏拍點都會對準畫 面,所以 AO486 竟然出現了不同步的問題,確實相當嚴重。

https://youtu.be/_UqxbvQUc1Y?t=131 已經跳好秒數,那顆藍白水晶球每次觸地時都會在音樂的拍點(每小節的第一拍),這在當年是非常驚人的效果。之後還有很多場景都有音樂拍點對準畫面的刻意安排,好精彩的,可惜 AO486 完全做不到。當年為了高速電腦會在一堆旋轉球的場面當機而附加的 2ndfix.exe 一樣會在此處當機,也與實體電腦一樣,這是因為 CPU 過快造成的,只要把 AO486 模擬的 90Mhz 工作時脈調降後即可避開。

所以不論是在聲霸卡 SoundBlaster,或者影像處理上,雖然一般 DOS 下的遊戲好像都沒有什麼問題,但是遇到這種用組合語言撰寫的程式時,老實說:AO486 的相容性真的是爛到炸。當年很多電腦都有兩張以上音效卡要共存時 IRQ DMA 不好閃開的相容性問題,但也沒有讓最後表現到如此離譜的。

MIDI 模擬

MiSTer + AO486 的組合提供多種 MIDI 運作方式,有點複雜,所以我畫了一張關係圖,希望能夠幫助大家理解:

mister-ao486-midi

上圖中「聲音回傳」,意指選擇該功能後,聲音還是由 MiSTer 本身的 HDMI/耳機光纖 輸出。即便是那個外接的 MiSTer MT-32pi,它的確會把發出的聲音以數位資料方式透過 User Port 送回 MiSTer FPGA 再由 HDMI/耳機光纖 輸出聲音,所以還蠻方便的。

但如果是選擇了 USB/UDP/MiSTer MIDI 1.2 這種路徑,則因為訊號輸出到外部,你必須自己想辦法與 MiSTer 輸出的其他聲音混音,或者各接一組喇叭,才能同時聽到 MiSTer 以及外接音源器的聲音。

MidiLink 內建兩種軟體音源

MiSTer 內建 MidiLink 模組,提供兩種音源的模擬,一個是 Roland MT-32 也就是 Munt:

另外一個是可以掛載任何 SoundFont 音色檔的 FluidSynth:

透過 update_all 會一併下載到熱心網友製作的 SC-55.sf2 音色檔給 FluidSynth 使用,聽起來與真正的 Roland GM/GS 音源器非常非常的像,推薦使用。

FluidSynth 使用上比  Munt 的計算量低,但只要音樂音符一旦複雜起來還是會聽到音樂逐漸不正常,加上 Munt 是以軟體模擬 Roland MT-32 的運作,這需要大量的運算,以 MiSTer 用的 DE10-Nano 機板來說其實是不夠力的,所以聲音多半會有問題,這是一個已知、不能解決、且不算是真正問題的問題。國外玩家紛紛購買 MT32pi 套件接到 MiSTer 上面,使得這部分的聲音計算完全靠另外一台 Raspberry 3+ 來分擔,就可以完美呈現了。

但我遇到一個狀況,就是使用 Munt 時完全無聲,但是切換到 FluidSynth 又有聲音。看 scripts/midilink_update 的過程有更新過 /sbin 下的兩個檔案,因此知道 midilink 是安裝於 /sbin 下,於是用 SSH 連入 MiSTer 操作 /sbin/midilink 看出現的錯誤訊息後發現 Munt 確實無法正常啟動,觀察 /sbin/ 下有一個奇怪的檔案叫做 mt32d_old,把這個檔案 mv 或 cp 成 mt32d 後,Munt 就可以正常啟動,也就聽得到聲音了。

目前我推測是某一版 MiSTer 核心錯置了檔案,之後沒有人發現此問題,可能已經錯了好幾版,且這個問題不能透過 scripts/midilink_update 修正過來,/sbin 這個路徑也無法使用 FTP 進來操作,一定要使用 SSH terminal 類的工具連入 MiSTer 進行操作才能修正回來。

當然聽得到聲音的前提是有安裝正確的 MT-32 或 CM-32L 的 ROM BIOS 與音色檔,這方面只要有執行過 scripts/midilink_update 就沒問題了,會自動安裝進來放在正確的路徑下。

外接 USB MIDI 介面

使用那些在 Windows 下不需要安裝額外驅動程式的 USB MIDI 介面,插在 MiSTer 上就可以被自動識別使用,無須做什麼配置。

AO486 的 MIDI 選擇 USB 即可:

甚至使用了 4in/4out 的 MIDI 介面,基本上也能使用,就會在第一組 MIDI In/Out 工作。

不過我發現手邊在 Windows & iOS 下工作很正常的 USB 4in/4out MIDI 介面搭配 AO486 時並不完美,隨便測試了一下就發現在瘋狂世界 Day of the Tentacle 遊戲中,音樂會延遲後又突然搶拍塞一堆的一起噴出來,以及偶爾的掉音現象。

為了驗證問題,我找來了一個二手的 Roland 原廠 USB MIDI 介面來搭配試試看。因為看 MiSTer FPGA 的討論區,都是推薦 Roland 原廠 USB MIDI 介面,這一搭配果然很完美,聲音完全不掉拍不搶拍。

與 FPGA 直通的 MiSTer MIDI 1.2 介面

我是在 https://legacypixels.com/mister/midi.html 購買,先寫信給對方,他會給你一個 PayPal 付款網址,付款後他算是一天以內就寄出,但國際貨運讓我等了三個星期左右才收到。下圖藍色的小盒子就是 MiSTer MIDI 1.2。

這就像 MiSTer 專用的各類主機原生搖桿連接介面 SNAC 一樣,看起來是 USB 插頭,其實那不是 USB,是透過 USB 3.0 的接頭來與 FPGA 核心直通。

AO486 UART 那邊選什麼並不重要,只要你有這個 MiSTer MIDI 1.2 接在 Digital I/O 板的 User Port 上,這裡就會有 MIDI 訊號出去。換句話說,如果你在 UART 這邊選擇了 MIDI,在你又同時使用了 MiSTer MIDI 1.2 外接盒時,則會同時輸出 MIDI 訊號(MiSTer MidiLink 與這個在 User Port 上的 MiSTer MIDI 1.2 外接盒),就看你 UART 這邊選擇的 MIDI 是內建音源還是 USB,都會與 MiSTer MIDI 1.2 共同輸出 MIDI 訊號,也就是可以一起同時使用的意思。

如果上面讓你看的很頭昏,請回頭看 MIDI 段落一開始的那張關係圖,希望這樣對理解能夠有所幫助。

連同前面 USB MIDI 的方式,應該都是 MiSTer AO486 外接音源器的最佳方案。

MiSTer MT-32𝜋

前面段落提到 Munt & FluidSynth 因為需要大量的運算,其實 MiSTer 的 DE10-Nano 不夠力造成音樂呈現不正常的問題,國外玩家開發了 MiSTer MT-32𝜋 這個外接套件,這是一個架構在 Raspberry 3+ 小主機上的套件,結合起來後變成是一個 MiSTer 專用的外接裝置。注意,我講的是「專用」,因為這模擬起來的軟體音源器只能被 MiSTer 連結使用,不能接受 USB 也不能接受標準 MIDI 訊號輸入後發出音樂。

連接的邏輯與上一段的 MiSTer MIDI 1.2 是一樣的,接在 MiSTer Digital I/O 板的 User Port 上。神奇的地方是,聲音訊號會透過此介面回傳到 MiSTer 上後與其他聲音一起於 HDMI 和 耳機/光纖 孔輸出,所以這也是為什麼前面強調這是 MiSTer 專用的原因,不但連接介面是 MiSTer 才有,連聲音都還回傳 MiSTer 後才能聽到。換句話說 MiSTer MT-32𝜋 這個套件是不適合當作一個獨立的小巧音源器來使用的。

MiSTer MT-32𝜋 不但有一個自己的小螢幕,盡量重現了 Roland MT-32 的液晶面板訊息,而且這個螢幕的畫面也可以回傳到 MiSTer 的畫面左上角一起出現,相當有趣。

由於此套件用 Raspberry 3+ 來獨立處理 Munt 與 FluidSynth 所需的計算,所以可以完美的表現音樂。如果你缺乏實體音源器,又很希望 AO486 的 DOS 遊戲有最好的音樂表現,那就買這個套件吧。MT-32𝜋 因為是插在 Raspberry 3+ 的上面,所以此套件又被稱為 hat 帽子,單買帽子大概台幣一千多元,不過只有帽子是不會有聲音的喔,你還要自備 Raspberry 3+,兩者合計大概要台幣三千多元是合理價。

若不是接下來要講的 SoftMPU Intelligent 模式根本不管用,不然我應該會買這個套件回來玩。

MPU-401 Intelligent Mode

AO486  雖然模擬了 MPU-401,但是不具備 MPU-401 的 Intelligent Mode,這方面看網路討論都是說安裝一個近年由 DOSBox 團隊技術提供的 SoftMPU 工具,這是一個 DOS 下的常駐工具程式(TSR),目的是讓實體電腦上的 MPU-401 相容卡提供出 Intelligent Mode,所以自然也可以讓 AO486 提供出 Intelligent Mode。但不管我怎麼配置,都是看到 SoftMPU 的成功執行畫面,但沒有正確效果,這包括在美少女夢工廠2中還是聽不到音樂,也無法在 Dynaware Ballade2 編曲軟體中操作且會當機,研究努力了數小時依然如此,就先把這個經驗分享於此給大家參考。

看了 MiSTerFPGA 論壇說要 QEMM386 8.03,我也去弄來了。先不說 QEMM386 8.03 在 optimzie 過程會出現記憶體太大的錯誤訊息而中斷,這問題使用 QEMM 9.0 就可以順利完成 optimize 過程,這點國外討論區也很多人問,重點是,我就算用了 QEMM386 8.03,SoftMPU 還是無法提供預期的效果。

所以講白話的,我沒辦法在 AO486 下玩美少女夢工廠2時聽到美妙動聽的 MIDI 音樂,也無法使用 DOS 下的 Ballade 編曲軟體。但這件事情在 DOSBox 下是很容易做到的。

Composite Video & S-Video 輸出

看國外影片,先筆記在此。首先要買一塊 MiSTer VGA output → Composite Video & S-Video 的轉接板。

MiSTer Digital I/O 板也就是上面這層板,找到一個撥動開關,從 SOG/AUTO 這邊撥到寫著 OVR 的另外一邊。SOG 是 Sync On Green 的意思。

找一個 VGA PWR 的 jumper,確定是插在 5V 這邊,而不是 3.3V 那一邊。

倚天中文

我反覆測試驗證到底需不需要當年的 ETDSPDRV.COM 來幫助倚天中文正常顯示,最後的結論是可以跳過的,強行使用 ETDSPDRV.COM 並沒有提升相容性或可用度,反而在執行後造成畫面一片漆黑,只是沒有當機,還可以盲打操作就是。

倚天 16×16 字型環境和 24×24 環境可用以下的執行檔,執行前免掛 ETDSPDRV.COM。

ET16V.COM 58,632 03-20-94 12:00a (倚天中文飛碟五號 3.53 版)

ET16V 的畫面是利用 MiSTer 內建的截圖功能抓取(Windows Key + PrtScr)。

ET24SVL.COM 54,644 11-26-93 12:00a (倚天中文 彩虹 三、四、六 號 3.50 版)

用 MiSTer 內建的螢幕截圖功能來抓取倚天 24 模式的 1024×768 畫面會是一片雪花,但 HDMI 輸出是正常的,所以我是用圓剛 LGP2 PLUS GC513 實況擷取盒來擷取 HDMI 的畫面。

ET16V 可以啟動硬體捲頁,效果正確,但 ET24SVL 就不行了,硬體捲頁後常有畫面文字遺漏的問題,或者狀態列忘記顯示回來,因此建議在 ET24 下停用硬體捲頁功能。停用硬體捲頁模式的方式是 CTRL-ALT-G,或者執行 ETCTL /C:IG 亦可。這也是為什麼我上面兩個畫面的左下角都有一個 G 字的提示,就是處於停用硬體捲頁的模式。

如果你忘記硬體捲頁的效果了,這邊幫您回憶一下。在那個還沒有「視窗加速卡」的年代,倚天資訊開發了一種加速方式,當需要捲頁時,把下半部的藍色狀態列取消顯示,接著就可以快速捲動畫面猶如在純文字模式下,等到不需要捲頁時,再重新顯示下方的藍色狀態列,這在當年算是很神奇的效果。不過這種方法對於 AO486 模擬出來的顯示卡來說實在是有點「太超過」,模擬不夠正確,導致一旦使用後,畫面就很容易就不正常。

所幸當年倚天資訊也知道此法可能對部分顯示卡有相容性問題,加上捲頁前要讓下方藍色狀態列消失的這個效果也不是人人都喜歡,所以有做出硬體捲頁功能的 使用/停用 切換。

倒是因為透過 MiSTer 可以在每次畫面變動時顯示當前解析度的效果 (MiSTer.ini 中設定 video_info=n,n 表示顯示 n 秒),我發現了硬體捲頁的小秘密。

以 ET16 系列來說,原本解析度是在 640×480,但硬體捲頁發生時,MiSTer 會提示目前解析度變更到 640×450,少了下面 30 行。

以 ET24 系列來說,原本解析度是在 1024×768,但硬體捲頁發生時,MiSTer 會提示目前解析度變更到 1024×700,少了下面 68 行。

打通 TCP/IP,用 TELNET 連上 BBS

能打通在 DOS 下的網路,我是參考 https://misterfpga.org/viewtopic.php?t=896 這一篇的討論。在這一篇中,他先要大家下載 DOSPPP06.ZIP,這部分沒錯,你想要打通 AO486 的網路,就先去下載這個檔案,我們會用到理面的 EPPPD.EXE。他接下來請大家去下載 mTCP 的工具,裡面有 telnet ping ftp 等工具,我最後按照它的教學配置起來後也可以成功使用。

不過自己是覺得 mTCP 裡面的工具用不到也用不慣,我打通 DOS 下的網路只是為了能夠重溫大學時使用 NCSA Telnet 尤其是中山大學改過的版本,如此而已,這樣的話只會用到 DOSPPP06.ZIP 裡面的 EPPPD.EXE。

AO486 的 UART mode 要設定 PPP。

抽出前面講的 EPPPD.EXE,在 AO486 的 DOS 環境內執行:

EPPPD COM1 115200 LOCAL

就等於網路卡在 DOS 下掛好 packet driver 了。附帶一提的是,這樣做的背後邏輯是你的 AO486 將 serial port (RS-232 COM1) 連接到一個 PPP(Point-to-Point Protocol) 裝置的這條路徑包裝成 packet driver,而在 DOS 下仰賴 packet driver 的各類程式就會因此打通網路,包括前面我覺得最後用不上的那一套 mTCP 工具也是如此。

執行 EPPPD 後會產生一個 IP-UP.BAT,沒有實際作用,但是您可以參考這個檔案的內容,他會對應到從 Linux 的 PPP 元件傳來的 IP 組態,這對於之後如果網路不通時要 debug 會有幫助。

我在這裡折騰最久,雖然文件上說不用修改 /media/fat/linux/ppp-options,但最後我還是靠著摸索該檔的最後一行才打通了網路,後來想通了,因為這背後是一個 PPP 裝置,請務必看仔細以下配置原理:

  • 請給 AO486 一個屬於你家網路上的 IP,且不與你現有的網路設備衝突,並且此 IP 也不是 MiSTer 本身獲得的 IP。
  • gateway 不是你家裡的路由器或 WiFi 的 LAN IP,而是你 MiSTer 本身獲得的 IP。(這是因為背後用的是 PPP)
  • 掌握以上相當特殊的兩點,DNS 愛設定哪兒都可以。

以我的環境來說,我的 MiSTer 會透過家裡的網路 DHCP 配發取得 192.168.123.20,然後我家沒有人用 111 這個 IP,所以決定 AO486 用的 IP 是 192.168.123.111,於是我修改 /media/fat/linux/ppp-options,看最後一個段落,改成這樣:

# You may explicitly define local and remote IPs for PPP link.
# new MiSTer releases don't require it anymore.
# IPs entered here will override automatically assigned IPs.
192.168.123.20:192.168.123.111

我最初覺得這樣的配置好奇怪,後來懂了這是因為靠的是 PPP 連出去啊!需要透過 MiSTer 本身的 IP 才能正常路由出去。不信的話你把 gateway 按照認知設定成你家的正常 gateway,你會發現 AO486 可以與家裡的設備互相 PING,證明了確實是在同一個網路上,但是就無法上網了。

修改 NCSA Telnet 的 config.tel 檔,找出裡面的這四行配置一下:

myip=192.168.123.111
netmask=255.255.255.0
name=mygateway; hostip=192.168.123.20
name=mydns; hostip=168.95.1.1 (我是設定中華電信 DNS,國外很多範例都喜歡用 Google 的 8.8.8.8)

注意上圖是我家的狀況,你還是要按照你家的配置與你自己想要 MiSTer / AO486 用的 IP 而做適當的修正,不然照抄我的設定檔一定不會通的喔!

最後只要執行當年的 NCSA Telnet 程式就可以連上 BBS,但是台灣現在這種可以 telnet 的 BBS 是不是只剩下台大 PTT 了啊?

另外要提醒的是,這樣上網的最高速率就是只有 115200bps,以當今的標準來說是爆慢,但在 DOS 下 telnet 看 BBS 是夠用了。

AO486 的用後感

實話是:針對遊戲需要的音樂音效環境是失望了 :'(

前面段落描述了關於音效音樂這麼多的問題,這些對我來說都是模擬一台 486 電腦和 DOS 時代很重要的元素,更何況比起在 Windows 下就可以直接操作 DOSBox 來說,DOSBox 不但完全沒有這些小問題,還多模擬了很重要的 Gravis UltraSound,加上 DOSBox 用起來不會這麼「折騰」,如果 AO486 沒有這麼多的音效音樂問題,那我會被折磨的很甘願,畢竟就真的是一台小 486 電腦了還是挺有趣,可惜問題這麼多啊~

不過可以執行倚天中文 16×16 & 24×24 的某幾個特定版本,讓畫面與功能重現,這方面還不錯。平常 DOSBox 雖然簡單好用,但是倚天中文這方面卻幫不上忙。過往想要重現倚天中文需要靠虛擬平台的特定版本才能做到,不是很方便。

透過 PPP 連接到 COM1 這條模擬出來的路徑再搭配 EPPPD.EXE 解決了在 DOS 下加掛 packet driver 的問題,使得網路打通,至少對我的需求來說已經完美解決了,這點給讚。

另外就是不知道為什麼,AO486 做出來的 VHD 檔,我無法掛回自己的 Windows 10 Pro 20H2,這與我看了一堆國外影片,和自己多年操作 Hyper-V VHD 的經驗認知不同,有點不方便啊~

歷史上的今天...


您可能也會喜歡…

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

:D 
:) 
:( 
:| 
(H) 
:P 
:$ 
:\ 
*-) 
;) 
:-.-: 
:!: 
:S 
:!!: 
[B01] 
[B02] 
[B03] 
[B04] 
[B05] 
[B06] 
[B07] 
[B08] 
[B09] 
[B10] 
[B11] 
[B12] 
[B13] 
[B14] 
[XP] 
:XD 
(Y) 
(N) 
:-O 
:@ 
8o| 
:-# 
(L) 
(U) 
^o) 
|-)