打造你自己的 MAME 模擬器。

來源:互聯網
上載者:User

在這之前我們必須要準備好一些必備的東西
1.wingw-gcc.exe 點擊下載

2.wingwover.zip 點擊下載

3.mame原始碼mame081s.zip 點擊下載

4.mame32plus原始碼mame32plus-0.18-0423-src.cab 點擊下載

首先安裝wingw-gcc.exe,然後解壓wingwover.zip,mame原始碼,mame32plus原始碼到相應的安裝目錄下,覆蓋相應的檔案。

開啟一個DOS視窗,進入wingw-gcc.exe的安裝目錄,運行批處理“ENV.bat”,然後在運行“make”開始編譯普通版的mame32plus(編譯的時間要按自己機器的效能而定)。在編譯的過程中如果出錯,再次運行“make”一般能解決問題。完成後就會產生三個檔案,分別是mamep.exe、mame32p.exe、mameplib.dll。

如果要編譯其它的版本,在編譯時間,“make”後面必須要有參數,如I686最佳化:make I686=1
I686最佳化:make I686=1
P4最佳化:make P4=1
athlon最佳化:make athlon=1

在這裡要注意的是,mame和mame32plus的版本一定要一致,也就是說mame 0.81與mame32plus 0.81.x相對應。編譯好一個版本的mame後如果接著編譯其它CPU最佳化版本的話,並不需要刪除安裝目錄下的obj目錄,因為因為編譯器會在obj目錄下建立一個對應的檔案夾,儲存新的資料。(如接著編譯多一個I686最佳化版,編譯器會在obj目錄下建立一個mameppp的檔案夾)。

然後進入安裝目錄下的“makelang”目錄下,運行“cn.bat”得到簡體中文語言套件。

到這一步已經編譯好了mame32plus了,字型要去mame32plus!的首頁去下載,在這裡給出簡體中文的字型:點擊下載。

如果系統是98的話,還需要下載一個unicows.dll的東西。還有如果大家覺得mameplib.dll有幾十兆很大的話,你可以用upx等壓縮軟體對其進行壓縮。

下面就開始添加遊戲驅動

注意:修改原始碼前,請先備份相應的原始碼檔案。修改代碼後再次編譯時間,不要刪除安裝目錄下的obj目錄,因為編譯器會識別那些源檔案已被修改,然後只編譯它們。如果你時間多得沒地方用,又不介意慢慢等的話,就刪除安裝目錄下的obj目錄,重新開始編譯所有原始碼^_^。

1、添加完全解密的NEOGEO遊戲驅動(KOF2002為例):
其實裡面已有KOF2002、合金4等等的驅動,只是沒開啟而已,只要修改安裝目錄下的src目錄“driver.c”檔案,將相應遊戲前的“TESTDRIVER”改為“DRIVER”,例如要打KOF2002的驅動,找到“TESTDRIVER( kof2002 ) /* 0265 (c) 2002 Eolith / Playmore Corporation */”更改為“DRIVER( kof2002 ) /* 0265 (c) 2002 Eolith / Playmore Corporation */”。只是這些驅動多數是加密版或直接從“C
ROM”中讀取“S1 ROM”版的,需要定義“DRIVER_INIT”,看起來很是複雜

a、改寫遊戲驅動
用文字編輯器(如UltraEdit或Windows內建的寫字板)開啟安裝目錄下的src目錄下drivers目錄下的“neogeo.c”檔案,找一個較接近的遊戲驅動,然後改一下。KOF98驅動就是較接近的一個,找它所在位置,然後再制,再制到那兒好像都沒有多大關係,建議再制到KOF2002系列的後面,方便找啊^_^。

修改驅動代碼與修改Nebula的ROMDATA類似,具體如下:

ROM_START( kof98 )
ROM_START( kof2002nd )
ROM_REGION( 0x500000, REGION_CPU1, 0 )
這兒不用改
ROM_LOAD16_WORD_SWAP( "242-p1.bin", 0x000000, 0x100000, 0x61ac868a )
ROM_LOAD16_WORD_SWAP( 265n-p1.rom, 0x000000, 0x大小(1M寫100000,類推), 0xCRC )

ROM_LOAD16_WORD_SWAP( "242-p2.bin", 0x100000, 0x400000, 0x980aba4c )

NEO_SFIX_128K( "242-s1.bin", 0x7f7b4805 )

NEO_BIOS_SOUND_256K( "242-m1.bin", 0x4e7a6b1b )
NEO_BIOS_SOUND_128K{注意M1的大小,2K2是128K的}( "265-m1.rom", 0xCRC )

ROM_REGION( 0x1000000, REGION_SOUND1, ROMREGION_SOUNDONLY )
ROM_LOAD( "242-v1.bin", 0x000000, 0x400000, 0xb9ea8051 )
ROM_LOAD( "265-rom", 0x000000, 0x大小, 0xCRC )
ROM_LOAD( "242-v2.bin", 0x400000, 0x400000, 0xcc11106e )
ROM_LOAD( "242-v3.bin", 0x800000, 0x400000, 0x044ea4e1 )
ROM_LOAD( "242-v4.bin", 0xc00000, 0x400000, 0x7985ea30 )

NO_DELTAT_REGION

ROM_REGION( 0x4000000, REGION_GFX3, 0 )
ROM_LOAD16_BYTE( "242-c1.bin", 0x0000000, 0x800000, 0xe564ecd6 ) /* Plane 0,1 */
ROM_LOAD16_BYTE( "265-c1.rom", 0x0000000, 0x大小, 0xCRC )

ROM_LOAD16_BYTE( "242-c2.bin", 0x0000001, 0x800000, 0xbd959b60 ) /* Plane 2,3 */
ROM_LOAD16_BYTE( "242-c3.bin", 0x1000000, 0x800000, 0x22127b4f ) /* Plane 0,1 */
ROM_LOAD16_BYTE( "242-c4.bin", 0x1000001, 0x800000, 0x0b4fa044 ) /* Plane 2,3 */
ROM_LOAD16_BYTE( "242-c5.bin", 0x2000000, 0x800000, 0x9d10bed3 ) /* Plane 0,1 */
ROM_LOAD16_BYTE( "242-c6.bin", 0x2000001, 0x800000, 0xda07b6a2 ) /* Plane 2,3 */
ROM_LOAD16_BYTE( "242-c7.bin", 0x3000000, 0x800000, 0xf6d7a38a ) /* Plane 0,1 */
ROM_LOAD16_BYTE( "242-c8.bin", 0x3000001, 0x800000, 0xc823e045 ) /* Plane 2,3 */
ROM_END

即改成:(注意CRC,下面可能與你所擁有的不一樣。)

ROM_START( kof2002nd )
ROM_REGION( 0x500000, REGION_CPU1, 0 )
ROM_LOAD16_WORD_SWAP( "265n-p1.rom", 0x000000, 0x100000, 0x9ede7323 )
ROM_LOAD16_WORD_SWAP( "265n-p2.rom", 0x100000, 0x400000, 0x432fdf53 )

NEO_SFIX_128K( "265n-s1.rom", 0xe0eaaba3 )

NEO_BIOS_SOUND_128K( "265n-m1.rom", 0xab9d360e )

ROM_REGION( 0x1000000, REGION_SOUND1, ROMREGION_SOUNDONLY )
ROM_LOAD( "265n-v1.rom", 0x000000, 0x400000, 0x13d98607 )
ROM_LOAD( "265n-v2.rom", 0x400000, 0x400000, 0x9cf74677 )
ROM_LOAD( "265n-v3.rom", 0x800000, 0x400000, 0x8e9448b5 )
ROM_LOAD( "265n-v4.rom", 0xc00000, 0x400000, 0x067271b5 )

NO_DELTAT_REGION

ROM_REGION( 0x4000000, REGION_GFX3, 0 )
ROM_LOAD16_BYTE( "265n-c1.rom", 0x0000000, 0x800000, 0x7efa6ef7 ) /* Plane 0,1 */

ROM_LOAD16_BYTE( "265n-c2.rom", 0x0000001, 0x800000, 0xaa82948b ) /* Plane 2,3 */

ROM_LOAD16_BYTE( "265n-c3.rom", 0x1000000, 0x800000, 0x959fad0b ) /* Plane 0,1 */

ROM_LOAD16_BYTE( "265n-c4.rom", 0x1000001, 0x800000, 0xefe6a468 ) /* Plane 2,3 */

ROM_LOAD16_BYTE( "265n-c5.rom", 0x2000000, 0x800000, 0x74bba7c6 ) /* Plane 0,1 */

ROM_LOAD16_BYTE( "265n-c6.rom", 0x2000001, 0x800000, 0xe20d2216 ) /* Plane 2,3 */

ROM_LOAD16_BYTE( "265n-c7.rom", 0x3000000, 0x800000, 0x8a5b561c ) /* Plane 0,1 */

ROM_LOAD16_BYTE( "265n-c8.rom", 0x3000001, 0x800000, 0xbef667a3 ) /* Plane 2,3 */

ROM_END

b、添加到列表
一樣再KOF98的,然後再制到後面,修改一下。具體如下:
找到“GAME( 1998, kof98, neogeo, neogeo, neogeo, neogeo, ROT0, "SNK", "The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends" )”再制到“GAME( 2001, sengoku3, neogeo, neogeo, neogeo, sengoku3, ROT0, "SNK", "Sengoku 3" ) /* Encrypted
GFX */”的後面。

GAME( 1998, kof98, neogeo, neogeo, neogeo, neogeo, ROT0, "SNK", "The King of Fighters '98 - The Slugfest / King of Fighters '98 - dream match never ends" )

GAME( 2002, 複製ROM檔案名稱, ROM檔案名稱, neogeo, neogeo, neogeo, ROT0, "SNK", "The King of Fighters 2002 (格鬥之王2002完全解密版)" )

例如:
GAME( 2002, kof2002nd, kof2002, neogeo, neogeo, neogeo, ROT0, "SNK", "The King of Fighters 2002 (格鬥之王2002完全解密版)" )

c、開啟驅動
開啟安裝目錄下的src目錄下的“driver.c”檔案,先將“TESTDRIVER( kof2002 )”改成“DRIVER( kof2002 )”,然後在下方加上“DRIVER( kof2002nd )”即可。(/*之間*/是注釋,這個沒有人不知道吧)

最後重新再編譯一次,你就能擁有你自己的mame32plus模擬器拉,怎麼樣?高興吧:)

原著:yong 改編:FinalFantasy 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.