是否有可能從SNES模擬器(或任何其他遊戲系統模擬器)和遊戲ROM中獲取源代碼系統,並以某種方式創建一個獨立的可執行文件,讓您可以播放該特定的ROM,而無需單獨的ROM或模擬器本身播放?假設你已經有ROM和模擬器源代碼可以工作,這會很困難嗎?使用開源SNES模擬器代碼將一個ROM文件變成一個獨立的可執行遊戲
回答
如果你有仿真器的源代碼,這應該不會太難。您可以使用通常用於將圖像存儲在c源文件中的方法。
基本上,您需要做的是在頭文件中創建一個char *
變量,並將rom文件的內容存儲在該變量中。你可能想寫一個腳本來爲你自動化。
然後,您將需要更改源代碼,以便不使用文件讀取ROM,而是使用內存版本的ROM,存儲在變量中幷包含在頭文件中。
如果您需要模擬文件指針等,可能需要一點工作,或者您可能很幸運,發現rom加載函數只是一次加載整個文件。在這種情況下,它可能會像使用函數替換文件加載函數來返回指針一樣簡單。
但是,請小心許可問題。如果仿真器獲得GPL許可,您可能不會在法律上允許將專有文件存儲在可執行文件中,因此值得檢查,特別是在您發佈/分發之前(如果您打算這麼做的話)。
是的,超過可能,已經做了很多次。 Google:靜態二進制翻譯。格雷厄姆·托爾在這個問題上有一個很好的howto論文,應該在影片的早期出現。可能有一些代碼,我可能會在那裏留下一些代碼。
完全刪除ROM可能比您想象的要多一點工作,但不能使用仿真器,絕對有可能。實際上,這兩項要求都是可能的,您可能會驚訝有多少手持控制檯遊戲或機頂盒遊戲被翻譯而不是模擬。 Esp平臺就像那些沒有足夠處理能力的實時模擬任天堂的平臺。
您需要一個很好的仿真器作爲參考和/或編寫您自己的仿真器作爲參考。然後你需要編寫一個反彙編程序,然後你有反彙編程序生成C代碼(請不要試圖直接翻譯到另一個目標,我犯了一次錯誤,C是可移植的,編譯器會處理大量的死代碼消除您)。所以化妝的指令相信指令集可能是:
add r0,r0,#2
這可能轉化爲:
//add r0,r0,#2 r0=r0+2; do_zflag(r0); do_nflag(r0);
它看起來像SNES是關係到6502這就是小行星使用,這是我一直致力於翻譯作爲業餘愛好的一段時間。您正在使用的仿真器可能是針對運行時性能進行編寫和調優的,可能很難作爲參考使用,並且使用翻譯後的代碼檢查鎖定步驟。 6502是很好的,因爲相比於說z80真的沒有那麼多的指令。與任何可變字長指令集一樣,反彙編器是您的第一個大障礙。不要認爲是線性的,認爲執行順序,像仿真器一樣思考,不能將指令從零到N或N的線性轉換爲零。您必須遵循所有可能的執行路徑,將ROM中的字節標記爲指令的第一個字節,而不是指令的第一個字節。一些字節可以解碼爲數據,如果選擇標記,則假設所有其他字節都是數據或填充。弄清楚如何處理這些數據來擺脫ROM是擺脫ROM的問題。有些代碼地址數據直接是其他人使用寄存器間接含義在翻譯時你不知道數據在哪裏或者有多少。一旦你標記了指令的所有起始字節,那麼將ROM從零移到N分解和/或翻譯是一件簡單的任務。
祝你好運,享受,這是非常值得的經驗。
SNES實際上使用一個65816處理器,我記得。它大部分與6502是二進制兼容的,但是標誌可以設置爲給你16位寄存器和偏移量等。除此之外,是的。很簡單,如果繁瑣的話,可以拆卸。 – cHao 2010-06-21 07:37:41
- 1. 我的代碼模擬一個壁球遊戲怎麼了?
- 2. JOptionPane把我的代碼變成一個真正的遊戲
- 3. 在Eclipse中創建一個獨立的可執行文件
- 4. 從python源代碼構建一個Windows可執行文件
- 5. 代碼執行中的小問題,python卡片遊戲模擬
- 6. 將FLEX內置的遊戲製作成獨立Flash遊戲
- 7. Haxe - 創建一個C++獨立可執行文件
- 8. 我可以使用我的遊戲的開源代碼嗎?
- 9. 如何使用maven構建一個獨立的可執行jar?
- 10. 如何從模擬(SNES)遊戲捕獲指標?
- 11. 如何用資源建立一個獨立的exe文件?
- 12. 執行與在C#代碼沒有窗戶形成一個獨立的EXE
- 13. 遊戲的代號一個
- 14. 將遊戲分成多個獨立部分
- 15. Android模擬器上的遊戲開發
- 16. AS3將外部文件打包成一個獨立文件.swf
- 17. 一個多模哈斯克爾可執行VS獨立的可執行文件共享庫
- 18. 使用它建立一個可執行文件庫
- 19. FFMpeg的開放源代碼模擬器
- 20. 可以使用PyPy/RPython來生成一個小的獨立可執行文件嗎?
- 21. 編碼一個SpriteKit遊戲
- 22. 我需要一個「開始安卓遊戲」代碼的解釋
- 23. SQL遊標內的代碼將只執行第一個FETCH
- 24. 尋找一個獨立的命令行代碼生成器腳本
- 25. 將文件打包成一個可執行文件(C#)
- 26. 開發遊戲 - 如何執行多個遊戲循環?
- 27. 創建一個棋盤遊戲模擬器(Python?)(Pygame?)
- 28. 讀行從一個文本文件和排序成獨立的變量
- 29. 如何使用Gradle創建一個獨立的自動執行的jar文件?
- 30. 一個遊戲的計時器插件
+1提醒我們關於GPL的法西斯主義。 :) – cHao 2010-06-21 07:35:22