微軟如何做到Xbox One不同CPU架構向下兼容Xbox360遊戲?
謝 @Belleve 邀。
這個項目,當年是微軟的頂級機密項目。我再沒有簽NDA的情況下偶然知道了太多東西,被告知不能亂說,並且有義務殺死所有不該知道的人。目前先留個空,等公司宣布了細節我才能進一步解釋。
先回答一下跟題目相關的事情。CPU不同並不會造成麻煩,硬體細節才會。比如某個埠是作什麼用的,只有有了硬體spec才行,單靠逆向工程難度很大。但因為兩代主機都是微軟的,這方面也不會有問題。
== 2015.6.26 更新 ==
其他人的答案提到了hyperv。xbox one就是基於hyperv的,遊戲、上網、win app是運行在不同的hyperv vm里,切換什麼都很快。甚至,xbox one的遊戲盤裡就是個vm鏡像,包含遊戲和操作系統。直接載入就能運行了。但這和xbox 360兼容無關,因為hyperv是x86的,沒法向下兼容。
微軟技術力驚人,寫出了模擬器唄……
gamespot:Revealed: How Xbox One Can Play 360 Games via Backward Compatibility
以下是我亂翻譯的請不要相信:Gamespot文章:《x1是如何向下兼容360遊戲的》
全文如下:
Phil Spencer 是xbox的頭。他解釋了360遊戲模擬是如何在x1上實現的,也談了談公司決定支持老遊戲這一決定背後的理念。談到 e3 第一天扔下的這一重磅炸彈,Spencer 說支持360遊戲是為了『讓360玩家感覺買x1是安全的』。(所以之前我們的x1並不安全?)
『數以百萬計的人都在360上花費了時間和鈔票,』他說,『當時想的是,正確的做法是讓那些遊戲繼續活下去,但沒想到會這麼難。』
『(模擬)很難,』Spencer承認,他解釋道,公司必須努力調和 PowerPC 和 x86 架構。
『我們的方法是模擬整個360硬體層。所以你玩的遊戲實際上是在360的操作系統上跑的。』
『遊戲啟動的時候,會看見360的啟動動畫。從性能角度看,模擬是可行的,已經做到幀幀對等了。』
『Xbox Live 會認為你是在玩360,於是總有人問:「你咋在玩360的質量效應?」不過其實我玩的是x1。』(但你確實是在玩360的質量效應啊……)
Spencer 繼續解釋, x1 認為你玩的就是個普通遊戲,所以視頻串流啦,截圖啦這些功能都能用。
『360 遊戲會覺得自己就跑在360 OS 上,事實也如此。而360 OS會覺得自己運行在360 硬體上,但這次卻並非如此,它跑在虛擬機上。另一方面,x1會覺得這是個遊戲,所以串流錄像截圖都能用,x1認為這一整套不過是個叫「360」的大遊戲而已。』
更進一步,Spencer 解釋道,模擬器是如何包含了360遊戲的,這相較於360模擬初代遊戲有何不同。
『你下載的基本就是重新包裝過的360遊戲,你可以認為「這就是班卓熊(這是啥……我沒聽說過。)」,「這就是質量效應」。對所有遊戲來說模擬器跑起來都是一樣的。』
『搞360兼容初代的時候我也在,當時給每個遊戲都弄了個shim(好吧我不知道這是什麼……),看起來scale得並不好。(好吧我也不知道這裡scale是啥意思)但這次各遊戲的確是用的同一個模擬器。每個遊戲跑起來都不一樣,所以推出它們之前我們可能會說「喔,這得調一下模擬器」。但說到底,模擬器真是在模擬360,大家都能用。』
當被問到微軟改代碼是否需要發行商的允許時,S氏澄清,這和代碼無關。
『一個位元組未改。』他說,『你們可能聽說了,而且在這事上,我也想儘可能像以往一樣坦誠:360的啃奶遊戲玩不了,轉換啃奶數據基本不可能。』(甩鍋?:『發行商不讓我們摸代碼,所以啃奶遊戲不能玩!』)
最後S氏也提到了多碟遊戲,他說攻城獅們正在研究這個。
『我們還在做這方面的工作,』他說,『360上《失落的奧德賽》、《藍龍》都是我很喜歡的遊戲。把多碟遊戲打成一個包還是需要工作量的,這得回頭研究多碟遊戲原來的打包,然後重新配置好。』
e3 大會上微軟發布了x1向下兼容360這一功能。據說xbla上已購的數字版,還有上一世代的光碟遊戲最終將『原生地』運行在x1上。
已經有新聞說是虛擬機。
感覺是微軟一個一個遊戲的基於xbox one重新編譯了一份。
因為無論是光碟版還是數字版,都需要你在XO上重新下一個數字版。
做一個cpu的模擬器吧,另外系統調用可以都hook掉這樣這些系統調用本身就不用跑在模擬的cpu上。
以上是猜的。
我認為重新編譯的可能性不高。
產生重編譯說法的原因是有了光碟還是要下載文件,但PSP時代模PS文件與原始PS的ISO也是不同的,根本沒有經過重編譯,只是用工具將原光碟打包成特定的ISO格式而已(所以鏡像還會有壓縮)。
而且埠調用這些差異根本不是重編譯可以解決的,兩個機器在根本上就是不同的硬體。
需要軟體商授權不是因為要源代碼,而是因為微軟不知道人家是不是要在X1上出復刻版,怕壞了人家商業計劃,所以要先獲得許可。
至於機能差異的問題,確實過去的軟體模擬器的情況下處理能力至少要相差10倍才能可靠模擬,但是當初的N64模擬器也出現過主頻只高2倍的PC模擬遊戲機的情況,主要是用了顯卡的硬加速,X360在特定機器上模擬,硬體加速的利用應該會比普通模擬器強得多。
應該是重新編譯了,因為即使是光碟遊戲,也要重新下載文件
我猜應該是半虛擬,分成兩層:
1.API層(包括系統API和DirectX)使用的是在X86上面跑的,但是和360的API保持一致。
2.遊戲本身的powerpc的代碼進行模擬,或者預翻譯轉換成x86代碼。
這樣,在調用direct等代碼時,沒有性能損失,甚至能夠獲得新型GPU的性能好處。而進行模擬的powerpc部分代碼,性能可能損失很小,如果是預翻譯的話,如果優化做的好,甚至有可能提升?
實際上,我說的這個方法不是什麼新概念,在ARM上面跑的wine,系統API部分就是ARM的,而程序的x86代碼則是通過QEMU模擬。而windows系統裡面的wow64,其實就是一個API兼容層。
不用糾結
從效率上來說,異構模擬沒什麼效率,性能是5-10倍才玩得轉,
所以,肯定是重編譯,
當年,蘋果為了把Macintosh的系統構架從Power PC轉換為x86而搞了一個黑科技,叫universal binary。
這個當年,是2006年。
這貨的原理基本就是個虛擬機。在x86操作系統裡面內置了一套完整的Power PC系統。
嗯,是內置。
而第三方軟體完全不需要任何重編譯,直接運行。
至於運行效率,在幾乎兩倍性能的硬體平台上跑出原平台90%的水平,還是沒啥壓力的。
如果微軟完全照搬這個運行模式,把老遊戲打個包,再給系統打個大補丁就好。問寫編譯器的霸霸們吧。
嚴重懷疑是二進位指令翻譯,個別不好弄的地方上個進位 patch,然後在運行期用 trap 常式加以解釋,後面部分跟 vmware 當初乾的差不多是一回事。
是跑在hyperv上的?
我覺得是二進位翻譯吧,畢竟硬體規格微軟都知道,聯想到微軟支持android和ios,也許是類似的技術。
不同意重新編譯,不見得廠商都會提供源代碼給微軟編譯。
具體架構不清楚,不過昨天試了一下玩360遊戲(跟著rare replay下載的),啟動的時候有xbox 360的畫面,登錄之後會嘗試下載可用的其他遊戲,然後就報錯,認為設備沒有空餘空間。
XO的架構不是本來就是三層虛擬機嘛……
大膽猜一下,應該不是直接對硬體的模擬,而是運行時的模擬。CPU的翻譯是必須的,可以用jit加快速度。硬體細節的模擬應該是很少的,畢竟開發都是有SDK的,直接對運行時效率最高,代價最小。
今天剛在WPDang上看到這個問題,鏈接在此http://www.wpdang.com/archives/139813.html
推薦閱讀:
※為什麼有的遊戲在 Xbox one X 上不提供 1080P 60 幀的選項?
※如何評價《彩虹六號:圍攻》「白噪音行動」?
※遊戲廠商為何接受一台主機「獨佔」?對他們有什麼好處?
※Nintendo, PlayStation, Xbox 的獨佔遊戲算不算捆綁銷售啊?
※微軟 (Microsoft) 應該砍掉 Bing 和 Xbox 嗎?