[原创] Neo.Geo 视频帧浏览器W.I.P

Neo.Geo Video Frame Browser - W. I. P


简述:本项目意在实现一个Neo.Geo的帧浏览器-根据其他模拟器导出的视频显存数据绘制出整个视频帧,并尝试以清晰、完整的代码实例解释Neo.Geo视频硬件的数据结构及渲染过程,作为其分析文档的补充。近期计划是实现Tile解码、绘制和单视频帧绘制功能;远期计划是帧绘制器的基础之上进一步添入CPU模拟、内存映射及I/O部分,自行实现一个功能基本完整的Neo.Geo模拟器。

声明:本项目纯属个人休闲娱乐,仅供业余时间研究用,与任何团体或者商业机构无关。不定时更新中。

2005.4.7
修改了一下画面绘制方式,使用unsafe指针方式直接修改位图象素数据,绘制效率大幅度提升,至少也快个7-8倍吧,呵呵。测试版NeoVFB可执行程序下载链接已替换成了最新版本。

2005.3.28
Neo.Geo视频模拟文档 ver. 2.0 修订完成,近期目标达成,正式结项。何时再开待定。

2005.3.16
添加了一个自动根据C Roms总长度屏蔽Tileidx MSB的safety feature,防止绘制瓦砾块时索引溢出;添加了瓦砾块颜色使用标记机制,用于快速判断某Tile是否全透明,以便进一步提高条纹绘制效率。

2005.3.15
项目进入结档状态,公开测试版1.0放出。说明文档在NeoVFB.rar文件内,其他文件包可以酌情下载。
请点击这里下载:[ NeoVFB / VJSLib / VMSample / PalGen ] - Any bug-reports or suggestions 'd be appreciated! :D

2005.3.13
fix了一个关于条纹链结构解析的bug;继续测试中,试了试mslug / mslug2 / aof2,除上述bug外,没碰到问题;同时,已确认侍魂4中所谓的"显示bug"其实源自对显存中tilenum域理解的不足,这一点将会在新版分析文档中专门提到。
11.PNG

2005.3.12
fix了一个关于条纹X-Zoom的小bug(Mslug5nd);fix了背景颜色缺失的小bug(Mslug2);背景颜色键盘控制添入;启动时Logo及空显存、色板加载支持;界面图标修改;支持资源内嵌方式的ng-lo.rom调用;放出筹备ing,争取届时分析文档也同步修订。

2005.3.11
界面、驱动整理。支持zip格式romset加载;romset通用加载器实现,终于可以不用逐个写加载驱动了;支持鼠标拖放方式改变显存数据和色板,以绘制不同的帧画面;仔细看了看samsho5sp / samsho3 / mslug5的,还真不错,呵呵,准备收工了。

2005.3.10
继续整理,做了一个色板数据的自动化处理工具;修正了GUI窗口可以放大的bug;终于修正了多次冗余绘制的问题,发觉其实速度也不慢;)  整理了一下C roms和S rom的载入和解码部分的实现,支持Kof97和侍魂4了;居然还在侍魂4里发现了一个游戏本身显示的bug(?!) 不过怎么说,还是fix了一下,毕竟容错性(?!)还是很重要di....
10.png

2005.3.9
经过切实求证,发现NGx、Kawaks/Nebula还有Mame三者之间的Y-Zoom fullmode实现均存在着象素(行)级的差别,唯独Kawaks和Nebula是完全一致的(也许它们用的渲染引擎本来就是同一个?) 而且,十分惊讶地发现我的实现效果与Mame是完全一样的,从模拟精确性权威的角度来说,我很庆幸自己的理解和Mame team一致. so, Y-Zoom fullmode的实现无需修正了,anything is done. 5者的对比就不贴了,参考这里:(1) (2) (3) (4) (5)

2005.3.9
Y-Zoom fullmode最终实现! 终于几乎全部都搞定了,不过居然发现和Kawaks的效果还存在着像素级的区别.....狂郁闷:(
9.png

2005.3.8
灵感一现,fullmode终于想通了! 其实是拍脑瓜子凭空想出来的,结果一验证居然真是这么工作的:D 看来做模拟器还真是考想象力,从Tile解码的魔方游戏到Y-Zoom映射关系的颠来倒去,想自己写模拟器的可得做好准备,呵呵,不然文档、源代码全有都是没用de

2005.3.8
条纹链及瓦砾块绘制过程完全重写;终于,按照自己的理解将Y-Zoom功能添加进去了。可是....看图上圈出来的区域,难道这就是传说中的fullmode没有实现的结果?诡异....(分析文档中也未提及,因为至今我仍没弄明白其机理^^!  8过,线索已经有了...嘿嘿)
8.png

2005.3.7
结构化显存大整理,修正了不少诸如Y-Zoom是条纹链的属性而不是条纹的属性之类的数据层次问题;大改之后,整个结构应该就非常适合添加最终的Y-Zoom功能了;另外还发现了所谓“绘图效率低下”的原因:GUI事件所导致的冗余重绘.... 待解决ing

2005.3.6
修正了不少界面功能相关的实现,同时还修正了帧绘制中的若干bug;瓦砾块X-Zoom及其界面功能实现;就差Y-Zoom了,另外,显示效率还得提高,C#似乎有点力不从心;条纹链数据和条纹数据层次结构应该写得更清楚一点,条纹链及瓦砾块绘制过程还要大重构..."When you got something done, more things need to be done. It's a real life." - Mr. Incredible
7.png

2005.3.4
大重构,结构化显存(Structured Video Memory)终于实现,但仍然需要复查。除了X-Zoom、Y-Zoom之外,界面上基本的视频分析功能也全部都实现了。看了一下VSS,居然先后也有12个版本了...这两天心情不好,进度可能会慢很多....
6.png

2005.3.3
Clip Region实现,但依然欠缺X-Zoom / Y-Zoom功能。界面大强化,但是还没有实现具体的功能.... 下一步又需要大重构,又是大动作,无语了....现在每编一个程序,代码结构重构n次简直就是家常便饭....
5.png

2005.3.2
Tile X-flip、Y-flip、XY-flip及其精确定位功能实现。不过clip region还没有认真整理。全部代码大整理,主要是类结构,分为5个类:视图、TextPlane、SpritesPlane、Palette和VideoMemory,简单明了吧?;) 以后fix起来就方便多了。
4.png

2005.3.2
Yeah! S-rom plane和C-rom plane基本搞定! 仅细微的X/Y定位还需要调整一下,在图上可以看出,条纹链Z-order、色板还有瓦砾块的形状都是ok的:D 甚至还具备了Tile X-flip功能~ 呵呵,这完全都是按照先前整理的那份文档做出来的结果。感觉实现速度比自己想象的要快,本来准备慢慢做的....
3.png

2005.2.28
周末休息第一,做做停停、停停做做... 搞定了C Rom Tileviewer,最简单的,还没有实现翻转、缩放功能,但是色板貌似不要太完美,嘿嘿。为了偷懒继续用C#.... 发觉用起来还是很舒服,不过运行效率就.... 项目起步,功能第一,效率其次:D
2.png

2005.2.25
这次不准备集中进行developing了,闲暇就做,没空就pause。今天的成果是搞定了S Rom Tileviewer,理由是最简单,hmmm.... 拿侍魂开刀,为了偷懒,用C#.... 放图,注意色板是正确,嘿嘿
1.png

2005.2.24
找到了导出Video RAM及色板的办法(提示:kawaks debugger....)。这不是一个很有新意的想法么? -依据视频结构分析的结果,便可以直接根据导出的V Ram和色板绘制出完整的一帧来,这就是“视频帧浏览器”名字的由来了。这样在刚开始时便避开了繁冗的m68k模拟和memory mapping,同时又为以后进一步添加完整的模拟功能提供了可能-让CPU core跑起来然后每秒画60帧便成了,如此起步不是很有意思?呵呵

完成度如下:
Gfx Decoding  95% (no decryption support yet)
Gfx Rendering 99% (almost perfect graphics)
GUI Functions 99%
Drivers 90%

posted @ 2005-02-28 22:37  neoragex2002  阅读(3903)  评论(18编辑  收藏  举报