夢龍彩色掌機:自縛手腳的自研加密游戲機,遠超GBA的性能卻表現(xiàn)不如GBA

作為一個奔三的大叔,近期請假帶仔無聊,搞了兩臺win掌機玩玩,無意中看到了號稱國產(chǎn)自研的夢龍彩色掌機(2014年發(fā)布),就表現(xiàn)而言感覺稍遜于GBA,卻有著各種正版IP授權(quán)的獨占游戲,不禁讓我好奇起來。畢竟上次喊自研的國產(chǎn)游戲機戰(zhàn)斧(2016年發(fā)布)小霸王Z+(2019年發(fā)布)非常凄慘,記憶里只有幾款游戲為獨占,連充數(shù)的獨占小游戲都沒有,完全沒有生態(tài),也就丁果A320(2008年)有自研的獨占游戲與PSP較量。

夢龍彩色掌機(英文名:Monon Color)這款明顯對標我小時候的GBA的游戲機,在國產(chǎn)掌機都搞“開源”模擬器的情況下,居然有20款自研獨占游戲為其保駕護航,除00后玩的洛克王國、機甲旋風,甚至包括90后耳熟能詳?shù)匿撹F俠、英雄聯(lián)盟、龍珠、喜羊羊,實屬讓人震驚。

機子和卡帶一套,相較于成人來說,價格非常便宜,預計600能拿下20款游戲卡帶+附加卡牌或徽章(類似于DLC)+2個充電版游戲機(因為有對戰(zhàn)功能,才能完美體驗),不過我機子目前還沒到。
畢竟我是玩win掌機的,相較這些游戲,讓我好奇的是,夢龍掌機這東西究竟是什么?因為太像GBA了我一開始以為是GBA的底層引擎+自研游戲的模式,畢竟現(xiàn)在開發(fā)GBA游戲不算很難,小時候還見過有人移植CS反恐精英(不過寫完3D引擎后就沒下文了)。

實際上事情比想象的復雜,這機子一句話概括:有著FC、SFC、GBA開源掌機的性能卻被大部分被用于加密和“保密”(猜測)的自研系統(tǒng)游戲機。
首先是硬件層面,這個游戲用的BIOS和底層游戲引擎非常獨特,因此受到了國外模擬器開發(fā)團隊網(wǎng)站MAME的關(guān)注。MAME認為破解它非常有挑戰(zhàn)性,目前也沒法完美模擬。
核心硬件上,CPU使用的是香港Appotech的Intel 8501架構(gòu)的AX208處理器,核心頻率達到96MHz,遠強于GBA的16.78MHz,大概為PSP(330MHZ)和丁果A320(J47XX系列360MHz)的三分之一。與GBA和PSP有兩個CPU類似,夢龍還有一個6502的MCU專門負責音頻,這也是無法完美模擬的原因(后文會說)。

卡帶里面是閃存和主控。左側(cè)是華邦的W25Q64FVSIG閃存,容量8mb,右側(cè)是黑膠封裝的主控。游戲文件存儲在左側(cè)這個flash芯片里,格式為bin。通過一定辦法可以進行燒錄(也就是GBA那樣的換游戲文件)。游戲機本體并沒有閃存,只有兩個黑膠封裝的主控芯片,這意味著機子本體不存在系統(tǒng)。很可能是卡帶自帶類似系統(tǒng)的代碼。

掌機的處理器AX208支持非常多的功能,包括JPG圖片格式硬件解碼、USB 2.0支持、內(nèi)置液晶驅(qū)動(LCD Driver)、SPI ROM和SDCard存儲/引導支持、UART、Infared,甚至LSFR(隨機數(shù)生成器),以及加密來自您使用的任何媒體的傳輸?shù)倪x項(可以在知網(wǎng)上查到)。除了SPI ROM作為夢龍掌機的傳輸介質(zhì),其他功能夢龍掌機基本沒有利用。
接下來才是夢龍掌機最詭異的部分。
一、夢龍使用內(nèi)存的方式較為低效。游戲在啟動時,它將大約7.5KB的固定代碼加載到RAM(內(nèi)存)中,還有正在玩的游戲卡專用的代碼庫。這些固定代碼被發(fā)燒友和疑似夢龍內(nèi)部人員指出可能是游戲底層引擎,并被燒錄在游戲卡里(據(jù)說每個游戲卡前面幾千行代碼都完全一致)。為了滿足內(nèi)存需求,游戲機將額外的2KB?jpg圖片緩存作為常規(guī)內(nèi)存使用,每當調(diào)用該庫中的函數(shù)時,都會通過SPI逐字節(jié)地按需加載。很明顯,這樣的內(nèi)存使用方式嚴重拖累了96MHz處理器的速度。
二、夢龍渲染畫面的方式較為低效。與其他廉價開源掌機直接軟件渲染某個像素點不同,夢龍使用了DAC(數(shù)模轉(zhuǎn)換器)。但奇怪的是,屏幕以單像素寬的列從左到右進行渲染,但是ROM中的圖形卻是使用行表壓縮的,因此在計算每一行的正確地址時又會有相當多的CPU占用。
三、夢龍在播放音頻上有安全檢查。夢龍掌機運行游戲時,有概率會出現(xiàn)不正常的長時間延遲卡死,看起來游戲會崩潰。導致游戲停滯的是安全檢查。代碼會要求將SPI中存儲的數(shù)據(jù)與專門負責音頻的6502的MCU的內(nèi)部ROM進行比較,使得游戲出現(xiàn)不正??D。同時,這個MCU內(nèi)部ROM拒絕一切形式的轉(zhuǎn)錄,使得MAME沒法完美模擬夢龍游戲,只能拋棄音樂。
四、夢龍游戲是解釋運行。夢龍游戲是用MGLG字節(jié)碼語言編程的,而僅有的i8051代碼是解釋器,在ROM中被認為是“固件”。這無疑使得系統(tǒng)的整體效率低下。
此外,夢龍掌機在輸入上選擇多路混用;在存檔上選擇直接修改并寫入SPI ROM(好處是不會出現(xiàn)GBA那種因為內(nèi)置電池沒電導致存檔丟失的問題,壞處是如果寫入存檔的時候沒電,卡帶極有可能就報廢了);以及將2款游戲的刷卡功能選擇集成在卡帶上而不是游戲機上(這一點也使得MAME沒法模擬刷卡)。
以上這些解釋了夢龍為什么在擁有遠高于GBA處理器主頻的情況下,游戲表現(xiàn)卻不盡人意。
為什么夢龍游戲機這么別扭?僅僅是因為夢龍研發(fā)能力差嗎?MAME團隊的一個解釋提醒了我真實的原因,也是這專欄標題的來源。MAME團隊認為,夢龍游戲是解釋運行的可能原因是研發(fā)軟件的部門不清楚研發(fā)硬件部門提供的硬件結(jié)構(gòu)。夢龍研發(fā)團隊有可能是故意以這種“別扭”的方式造就這臺機器的。比如在2022年MAME搞懂這個小東西之前,幾乎沒人知道夢龍是什么處理器,疑似軟件開發(fā)人員也對游戲卡帶前面完全一樣的代碼閃爍其詞(到2018年為止)。夢龍將底層引擎綁定在卡帶里而不是游戲機里,最大的可能是保護引擎不被單獨盜??;奇怪的畫面渲染方式迷惑可能的盜版者;意想不到的在音頻處理器里進行安全檢查;軟件研發(fā)人員可能不知道自己硬件究竟是什么等等,可謂是將保密做到了極致。
總的來說,相比競爭對手百逸掌機實則刷卡機,以及其他代代星、巴啦啦小魔仙等“自研”掌機只有沒IP的劣質(zhì)游戲,夢龍好歹算是有個“中國任天堂”的開頭,獲得了一定成功,不過和GBA差不多的游戲機,還是會埋沒在越來越廉價的智能手機和開源掌機的歷史洪流里,win掌機出現(xiàn)也意味著,以后架構(gòu)、系統(tǒng)互通會是一種趨勢,現(xiàn)在就差一個電池革命了(續(xù)航和散熱一直是高性能便攜設(shè)備硬傷)。
就像丁果解散,開源掌機幾乎無真正的自研軟件,夢龍也無法有機會再發(fā)展了,MAME也不一定繼續(xù)修復音樂無法模擬,刷卡無法模擬的問題,想要完美體驗夢龍的獨占游戲只能買機子,但是對于本人來說,自研這條路還有龍芯在走,不過龍芯專門搞二進制翻譯和轉(zhuǎn)譯層兼容別的平臺生態(tài),以后說不定能慢慢搞出龍芯原生龍64架構(gòu)平臺的軟件生態(tài),到時候也會有龍芯的獨占游戲吧。

參考資料:
1.《【教程】夢龍彩色掌機的卡帶燒錄與修改教程》2023.03.18 https://tieba.baidu.com/p/5590313166
2. 《MAME - emulating a handheld console, with ~20 licensed games from 2014 (videos included)》2023.03.18 https://www.reddit.com/r/emulation/comments/wv4j1d/mame_emulating_a_handheld_console_with_20/