设为首页收藏本站

琵琶行论坛

 找回密码
 注册
楼主: lo585983

[原创] Final Burn 的歷史 (終極火燄) (by old lo585983)

[复制链接]

签到天数: 19 天

[LV.4]偶尔看看III

发表于 2018-6-2 09:04:03 来自手机 | 显示全部楼层
痛恨那些又伸手又小白还不要脸攻击的人,真是不可理喻
回复 支持 1 反对 0

使用道具 举报

签到天数: 123 天

[LV.7]常住居民III

发表于 2018-6-2 09:33:41 | 显示全部楼层
缅怀lo585983
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2018-6-2 11:11:00 来自手机 | 显示全部楼层
fba的前生今世
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2018-6-2 11:27:26 | 显示全部楼层
感谢分享
回复

使用道具 举报

签到天数: 309 天

[LV.8]以坛为家I

发表于 2018-6-2 12:28:37 | 显示全部楼层
a5555tnt 发表于 2018-6-2 09:04
痛恨那些又伸手又小白还不要脸攻击的人,真是不可理喻

这种人和Lamer比没啥两样
回复 支持 1 反对 0

使用道具 举报

签到天数: 1140 天

[LV.10]以坛为家III

发表于 2018-6-2 18:27:00 | 显示全部楼层
这个脚印是留给天堂里的lo大的
谨以此缅怀我们逝去的青春。。。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2018-6-2 20:45:21 | 显示全部楼层
谢谢分享模拟器的历史!
回复 支持 反对

使用道具 举报

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2018-6-2 22:48:49 | 显示全部楼层
shuffle也是一个重要的分支吧
回复 支持 反对

使用道具 举报

签到天数: 15 天

[LV.4]偶尔看看III

发表于 2018-6-2 23:47:27 | 显示全部楼层
话说你们玩岸湾 用罗技方向盘? 还是键盘?
回复 支持 反对

使用道具 举报

签到天数: 2 天

[LV.1]初来乍到

发表于 2018-6-3 18:37:55 | 显示全部楼层
感谢!文章收入记录里了!!以后还可以回顾一下!!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2018-6-3 21:39:41 | 显示全部楼层
fierceman 发表于 2018-6-2 23:47
话说你们玩岸湾 用罗技方向盘? 还是键盘?

both , g27 & keyboard(vjoy)
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2018-6-4 04:29:10 | 显示全部楼层
本帖最后由 lo585983 于 2018-6-4 11:27 编辑

http://tc.wangchao.net.cn/bbs/detail_27247.html

FinalBurn Alpha 2.9x中CPS2遊戲驅動程序的編寫
2006-01-08 19:20:25  編輯來源:互聯網  简体版  手機版  評論  字體: ||


  FinalBurn Alpha 2.9x中CPS2遊戲驅動程序的編寫

  作者:胡穎卓

  FinalBurn Alpha是當今最好的CPS1/2模擬器之一,更可貴的是它是完全開放源碼的。從FinalBurn Alpha 2.93開始,FinalBurn Alpha小組(以後簡稱FBA小組)便轉向了多功能、多機種的支持,而不是像其它模擬器那樣,出一個新遊戲的破解就出一個新版,或是有一點兒改進就出一個新版。這樣做利了開發者,而玩家卻是覺得有些不便。

  起初,我爲大家寫一些新版本的FBA,但這樣會和FBA小組的版本對應不上。更是近來,我需要將主要精力放在網絡遊戲上,所以也沒有太多的時間爲大家寫這些驅動。在這裏,我針對FinalBurn Alpha 2.93的CPS2遊戲19xx驅動爲例,給大家做一下講解,以便大家能自己寫出新的驅動。

  首先,要包含驅動頭文件cps.h,語句如下:

  #include"cps.h"

  再者,是輸入設備定義,也不用講解,照例子抄就行了:

  static struct BurnInputInfo DrvInputList[] =

  {

  {"P1 Coin"  , 0, CpsInp020+4, "p1 coin"  },

  {"P1 Start" , 0, CpsInp020+0, "p1 start" },

  {"P1 Up"    , 0, CpsInp001+3, "p1 up"    },

  {"P1 Down"  , 0, CpsInp001+2, "p1 down"  },

  {"P1 Left"  , 0, CpsInp001+1, "p1 left"  },

  {"P1 Right" , 0, CpsInp001+0, "p1 right" },

  {"P1 Shot"  , 0, CpsInp001+4, "p1 fire 1"},

  {"P1 Bomb"  , 0, CpsInp001+5, "p1 fire 2"},

  //19xx是兩鍵遊戲,如果是3鍵遊戲,只需要按順序加上就行了,例如

  //{"P1 AutoFire", 0, CpsInp001+6, "p1 auto fire"},

  {"P2 Coin"  , 0, CpsInp020+5, "p2 coin"  },

  {"P2 Start" , 0, CpsInp020+1, "p2 start" },

  {"P2 Up"    , 0, CpsInp000+3, "p2 up"    },

  {"P2 Down"  , 0, CpsInp000+2, "p2 down"  },

  {"P2 Left"  , 0, CpsInp000+1, "p2 left"  },

  {"P2 Right" , 0, CpsInp000+0, "p2 right" },

  {"P2 Shot"  , 0, CpsInp000+4, "p2 fire 1"},

  {"P2 Bomb"  , 0, CpsInp000+5, "p2 fire 2"},

  {"Reset"      , 0, &CpsReset  , "reset"   },

  {"Diagnostic" , 0, CpsInp021+1, "diag"    },

  {"Service"    , 0, CpsInp021+2, "service" },

  };

  STDINPUTINFO(Drv);

  也有一種特殊情況,由于CPS2下格鬥遊戲非常多,而且使用的按鍵定義方法也一樣,比如《少年街霸3》,我們就可以使用以下方法來定義:

  STDINPUTINFOSPEC(Drv, CpsFsi);

  按照Razoola的定義,ROM的編號方式按照芯片的排列來進行編號:

  具體到文件名,擴展名編號方式如下:

  01-02 QSound Z80數據

  03-10 程序數據

  11-12 QSound采樣數據

  13-20 圖像數據

  ROM表的寫法我們來看看19XX的寫法:

  static struct BurnRomInfo NinexxRomDesc[]=

  {

  //文件名     ,文件長度,CRC校驗碼 ,類型

  {"19xux.03" ,0x80000,0x239a08ae, 0x10}, //  0  XOR 表

  {"19xux.04" ,0x80000,0xc13a1072, 0x10}, //  1

  {"19xux.05" ,0x80000,0x8c066ec3, 0x10}, //  2

  {"19xux.06" ,0x80000,0x4b1caeb9, 0x10}, //  3

  {"19xu.03" ,0x80000,0x05955268, 0x10},  //  4  68000 代碼 需要上面的進行解密

  {"19xu.04" ,0x80000,0x3111ab7f, 0x10},  //  5

  {"19xu.05" ,0x80000,0x38df4a63, 0x10},  //  6

  {"19xu.06" ,0x80000,0x5c7e60d3, 0x10},  //  7

  {"19x.07"  ,0x80000,0x61c0296c, 0x10},  //  8

  {"19x.13" ,0x080000,0x427aeb18, 1},     //  9  圖像數據,此處要按3,5,7,9,4,6,8,0此類順序排列

  {"19x.15" ,0x080000,0x63bdbf54, 1},     //  10

  {"19x.17" ,0x080000,0x2dfe18b5, 1},     //  11

  {"19x.19" ,0x080000,0xcbef9579, 1},     //  12

  {"19x.14" ,0x200000,0xe916967c, 1},     //  13

  {"19x.16" ,0x200000,0x6e75f3db, 1},     //  14

  {"19x.18" ,0x200000,0x2213e798, 1},     //  15

  {"19x.20" ,0x200000,0xab9d5b96, 1},     //  16

  {"19x.01" ,0x020000,0xef55195e, 2},     //  17 QSound數據 z80聲音數據

  {"19x.11" ,0x200000,0xd38beef3, 2},     //  18 QSound聲音采樣

  {"19x.12" ,0x200000,0xd47c96e2, 2},     //  19

  };

  STD_ROM_PICK(Ninexx) STD_ROM_FN(Ninexx)

  這裏面Ninexx是我們自己可以定義的名稱,改成_19xx也是可以的。

  之後是驅動信息結構,19XX的寫法如下:

  遊戲ROM文件名稱,爲19xx的話,那對應19xx.zip

  遊戲名稱

  注釋或其它信息

  生産商

  機型

  出品年代

  主ROM名稱,例如19xx的西班牙版就需要在這裏打上"19xx"

  主板BIOS,不使用的話定義爲NULL

  運行標志,如果爲縱版需要加上BDF_ROTATE_GRAPHICS_CCW

  最大玩家數量

  硬件類型

  取zip名稱特殊函數

  Rom信息結構

  Rom名稱結構

  輸入配置信息表

  DIP配置表

  驅動初始化函數

  驅動關閉函數

  遊戲幀處理函數

  遊戲刷新函數

  遊戲剪裁處理函數

  遊戲調色板空間

  遊戲畫面寬度

  遊戲畫面高度

  遊戲畫面縱橫比

  struct BurnDriver BurnDrvCps19xx=

  {

   {"19xx",

   "19XX: The War Against Destiny (US 951207)",

   "",

   "Capcom",

   "CPS2",

   "1995",

   NULL,

   NULL},

   BDF_GAME_WORKING | BDF_ROTATE_GRAPHICS_CCW,

   2,

   HARDWARE_CAPCOM_CPS2,

   NULL,

   NinexxRomInfo,

   NinexxRomName,

   DrvInputInfo,

   NULL,

   DrvInit,

   DrvExit,

   Cps2Frame,

   CpsRedraw,

   CpsAreaScan,

   &CpsRecalcPal,

   224,

   384,

   3,4

  };

  DrvExit函數我們不用去管它,直接照抄一個就行了,關鍵在于DrvInit函數。下面我們來看一下19XX的DrvInit函數,並爲大家做詳細的講解:

  static int DrvInit()

  {

  int nRet=0;

  int i=0;

  unsigned char *pqs=NULL;

  Cps=2;                   //CPS1型遊戲爲1,CPS2型遊戲爲2

  nCpsRomLen = 5*0x080000; //程序數據長度          對應文件3-10

  nCpsCodeLen= 4*0x080000; //需要XOR表解密的長度   對應文件3-10

  nCpsGfxLen =  0x1000000; //圖象數據長度          對應文件13-20

  nCpsZRomLen= 1*0x020000; //QSoundDataZ80數據長度 對應文件1-2

  nCpsQSamLen= 2*0x200000; //QSoundSample長度     對應文件11-12

  nRet=CpsInit();

  if(nRet!=0)return(1);

  // 裝載程序ROM,這裏5爲程序ROM數量,4爲XOR表ROM數量

  for(i=0;i

回复 支持 0 反对 1

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|琵琶行论坛 ( 赣ICP备12000882号  

GMT+8, 2018-6-21 04:46 , Processed in 0.024917 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表