Robiza's MAME & David Haywood's MAME(tm) WIP - 模擬器

Victoria avatar
By Victoria
at 2010-08-30T16:18

Table of Contents


1.

http://mamedev.emulab.it/robiza/?p=163

Io e Kale abbiamo notato che la palette veniva scritta 2 volte quasi
consecutivamente; dato che durante la prima copia un bit di un registro era a
zero e durante la seconda copia lo stesso bit era a 1 abbiamo presunto che
fosse una sortas di protezione; quindi scartati i valori del bit a 0 abbiamo
ottenuto colori che sembrano corretti (valido per tutto il gioco compresi gli
intro)

finalmente fixato? comunque qualche test sull’hw sarebbe opportuno farlo


2.

http://mamedev.emulab.it/haze/2010/08/21/getting-your-priorities-right/

Getting Your Priorities Right
The Toaplan 2 driver (games using the GP9001 VDP) has always been a bit of a
MESS in MAME, especially the priority system in the driver. A couple of
releases back I decided to start something of a rewrite of the driver,
cleaning up many of the hacks that were present. I’d actually started this
rewrite a long time ago, but didn’t submit it at the time because there were
two games I was unable to get working properly with my new cleaner code, the
dual VDP ones, namely Batsugun and Dogyuun.

The problem was the old code was rendering all the layers in multiple passes
(calling sprite draw functions once for each priority and such) which broke
basic things like sprite-sprite priority. Each game was rendering different
layers in arbitrary order depending on the specific needs of that game to
compensate for this.

In cleaning up the code I managed to reduce all the single VDP cases to a
single call to draw all the graphics in the correct order, this however broke
Batsugun and Dogyuun because the self-contained rendering function broke the
hacks which were interleaving the output from each of the VDPs. Batsugun had
never worked properly anyway (and had various priority glitches on certain
levels and the ending), but with the new code it was completely unplayable in
some levels.

I originally wanted to fix this before submitting it, and it was left sitting
for a while. Eventually somebody else took a hand at ‘fixing’ the Toaplan2
driver, however the fixes submitted were nothing but further hacks to the
driver (checking which level was currently running and further hacking the
priority of each layer based on that). The code submitted was gross to say
the least, so I decided to submit my code, and demote Batsugun and Dogyuun to
Non-working status instead, pending proper fixes which weren’t hacks. My new
code was a lot cleaner for every other game in the driver, and I knew it
would form the basis of a correct solution eventually, so this was a
worthwhile step even if it meant the games were unplayable for several
versions.

I tried various things to get the mixing correct with very little luck, and
the driver remained in the broken state for quite a few releases. In the
meantime I did some further cleanups to the VDP rendering code, and converted
it all to use the new C++ devices Aaron had been adding support for in the
core. With the GP9001 extracted to its own file, as a proper device, I
decided to take another look at the priority mixing, strongly believing that
there must be some kind of PAL on the board to mix the output of the two
VDPs, because it didn’t seem entirely logical.

One of the big problems was I didn’t know exactly what each VDP output
externally. By displaying the output of each VDP on separate screens it was
clear the the individual mixing of each VDP was correct, as expected (the
mixing code for single VDPs worked fine) However, I didn’t know if the VDPs
output any kind of priority data externally to mix with, or just the colour
data. A few more attempts later, and I was still getting nowhere with the
dual mixing, and almost ready to give up.

At that point Quench came forward with some information that proved to be
very useful in the end. He’d managed to reverse the equations of a Pal which
sat between the two VDPs on a Batsugun board. From his equations it was clear
that the VDPs didn’t output any kind of priority information externally, and
the mixing had to be entirely based on the palette index.

I implemented his equations directly, which in theory should have worked, but
the results were disappointing, the output was a mess, pixels were showing
through where pixels shouldn’t have shown through, and I didn’t know why. I
took a break for a week to try and figure out why this might have been, then
tried re-implementing it in a slightly different way. Same result.

All was not lost at this point however, because despite the equation not
working directly it had provided me with some useful information. I now knew
exactly which bits were being fed into the pal, and thus which bits could
potentially be used to determine the mixing order, even if the given equation
wasn’t working.

Rearranging things a bit I came up with my own solution, making use of the
same bits that Quench had figured out were being input into the PAL. The
first attempt left some random black dots in the level, quickly realising
that where those dots appeared should actually be showing the other VDP I
amended my code and had something which worked. Testing the game from start
to end showed that all the problematic test cases I’d documented were now
correct. Finally.

The other benefit of this mixing was that the tile number hack, which was
being used to hide some garbage on the first level of Batsugun could be
removed, as it happens the palette index of the garbage is set so that it
appears behind the background anyway.

Dogyuun was still an issue, it didn’t work with the new code, however, a bit
of testing later, and I’m pretty sure that just uses a simple mixing system,
with the output of one VDP appearing above the other, nothing complex.

The net result of this is that for the first time Batsugun can be rendered
without hacks, and looks correct on all levels. There is still room for
optimization in the code (I’d made it as verbose as possible when debugging,
rather than optimized, but it’s correct)

The next step for Batsugun will be adding the missing opcodes and features to
the V30 core so that all the V35+ features it needs are supported (register
banking etc.) Currently AWJ is meant to be working on this, but I haven’t
heard any progress recently. That will allow for full sound emulation in the
game.

I may add more technical details to this post later, but for now I have to go
out ;-)


兩個Wip都是很有名的stg
一個是"飛虎隊"一個是移植過SS的"瘋狂槍手"

又有得爽了科科


--

All Comments

Heather avatar
By Heather
at 2010-09-03T00:05
看到L○○MER在騷擾HAZE了,看他的語氣不是很愉快

用jpcsp可以運行project DIVA2?!

Todd Johnson avatar
By Todd Johnson
at 2010-08-30T13:35
※ 引述《k6416337 (とある煞氣の光希)》之銘言: : 我剛剛GOOGLE了一下jpcsp,我發現了這段影片 : http://www.tudou.com/programs/view/_eBErjXeqW8/ (土豆網) : 這位仁兄用jpcsp運行了project DIVA2,而且還跑得很順 : 我 ...

(DC/NAOMI) nullDC SVN r60

Bethany avatar
By Bethany
at 2010-08-30T12:44
2010.08.28 知名又好用的DC和NAOMI模擬器發佈了新版,快下載吧! r60 - Made region/bc change optional _______________________________________________________________ ...

(multi-console) Wave Roar 2010.08.29

Agnes avatar
By Agnes
at 2010-08-30T12:41
2010.08.29 這是一個家用模擬器整合包,並不是一個獨立的模擬器;內含的模擬器執行效 果也取決於各平台的開發狀況。那它到底能幹嘛?主要是方便使用者管理與使 用內含平台的模擬器,其實還滿方便的,建議大家用用看。 Features: - Adds ...

RockmanX3

Kristin avatar
By Kristin
at 2010-08-30T09:47
友人熱情贊助...真可惜現在離聖誕節很遠。 ------------------------------------------------------------------------------- 作者: okai (Okai) ...

SSF 0.10 R3執行王國傳說2

Freda avatar
By Freda
at 2010-08-30T03:35
※ 引述《fankylaw0968 (賴九)》之銘言: : 第一次發文,如有錯誤還請糾正。 : 終於找到這遊戲,但是在遊戲開始後進入戰鬥畫面前都會卡住,不知道該如何解決。 : 爬了板上的文目前也沒找到答案。 : 請問,有板友知道如何解決類似的問題嗎? : 謝謝! : 我的配備: :  處理器: Intel C ...