[DC] Makaron Update

Makaron Test 8.3

- Bug in MakaronPAD 0.T.7.2 confirmed - you can't assign A, B & START buttons; Fixed

PS: Remember, you can enable basic shadow handling in F12 menu - it just a hack but works with some games (Soul Calibur, Virtua Fighter, ...)

And one more thing (apparently not all of you had a real Dreamcast): I've included memory card files preloaded with some saves and A1 is almost full. You can either:
* delete those files, MakaronVMU will create new ones (you need to format those in BIOS, just as with any new memory card on real hardware)
* format the existing cards in BIOS to clear them out, or simply delete few saves from them
* unpack empty and pre-formatted card images I've included in the 7z file named "Clean VMUs for dummies.7z" :]

Test 9
Here is Makaron Test 9 for your pleasure. There are lots of internal changes, but nothing revolutionary - so don't expect it to be much better/faster compared to earlier versions. From user point of view, it's almost the same as T8. Quite frankly the only reason I'm releasing it is to test some new stuff inside. For example, it's only thanks to user input that I found the NVidia FX series cards bug so fast (and actually it affected all cards, just that FX couldn't cope with it at all).
There are also people out there who simply have to test anything new that is released, because they love emulating stuff. So this is like a small gift for them, to enjoy for few moments before the novelty wears off :)

Like I said, there are tons of small (and not so small) internal changes to the emulation engine. Some of this stuff is so new it wasn't even tested much yet, so expect bugs. If you find a game that doesn't work now and it used to, please drop me a note - I'd like to find and fix the regressions first.
I won't go into much detail, but here's a list of things I consider interesting enough to explain a bit:

Dynamic Z-buffer range compression
This is a new method of dealing with overblown Z/W values. Most of the work is done in vertex shader so there should be no noticable speed impact. I mean, if there is then your graphics card was too slow to begin with and this is just another drop in the bucket.
Now I can handle geometry more like PVR2 does, which is good because this allows proper shadow casting. Very much like NANs, infinities are now detected and handled CPU-side - so far it appears to work as expected. All this and no Z-precision issuses, not that I'm aware of at least. Unless there's a game out there making a real use of 32-bit floating point HDR in Z-buffer this might just be THE solution :)
Note: There are games that still do not render properly due to other bugs, also this does nothing to cure transparency/ordering problems.

Shader Model 2 is now default
Makaron will now use VS 2.0 and PS 2.x (x being 0, a or b - where available), and fall back to 1.1/1.4 if it has to. What's more, I might be dropping SM1 support sometime in future. There are so many problems with it... I've had VS 1.1 break geometry which VS 2.0 handled just fine. And let me remind you again that palletized textures filtering is disabled on PS 1.4 beacuse it's too primitive for that kind of processing.
It's also about features that older cards do not have - like multiple render targets, or floating-point type surfaces. The Z compression code is considerably shorter compiled for 2.0 profile than it is for 1.1 by the way. Funny thing though, even if SM3 code is shorter it actually executes slower on most cards. That and the bugs I found in the drivers made me choose SM2 as the best perfomer.

Texture caching fixed
At least I hope it is :) Makaron MT version should no longer crash so much or trash textures. That does mean the single-threaded version will be a bit slower though - it's a tradeoff I've made to allow for proper locking. Some bugs still remain, mostly to be seen in Soul Calibur, but that's another story.

Shadows now work
Well, most of the time, and so are enabled by default. There are several ways it can be done - so far I was unable to come up with one method capable of handling all cases. Maybe there isn't one... Well, for now you can switch between different algorithms - you'll need to do that for Crazy Taxi series at least.

You really should be using multiple-core system for Makaron, mind you - this is the target PC I'm aiming for. SH4 speed is very important, but once you can do rendering in parallel most games will happily run full-speed on as little as 70-100MIPS. Seeing as AthlonXP clocked at 2000MHz is just below the required minimum, I'd say any mid-level X2 or C2D system will do fine.

The known bugs you will surely ecounter are mostly in AICA (sound module) code. The volume levels are still wrong - not sure why, I made the tables up to the specs. And yet PCM range often exceeds 16-bit, causing major distortions even if clipped. Also, ARM speed has been reduced to 1.5MIPS - this should make Soul Reaver happy. This is not exactly correct either, and will probably break some other games... I'll keep looking for a better solution.

As usuall, if there are any silly-yet-critical bugs discovered, I'll fix them right away. Other ones will have to wait for next "major" release :P

WARNING! Be careful not to overwrite your VMU or INI files when moving to T9!

Makaron Test 9/1

There's a special today - a frontend to Makaron donated by slrhui - you can get it here. Please contact the author about it should you need any changes done. And be sure to thank him if you find it usefull.

Here's Makaron Test 9/1. The main purpose of this release it to fix some issues T9 had, but there are other changes as well.
Firstly there's the new AEG code in AICA - not entierly correct mind you, but it will get better in time. I belive I've explained it enough before but just to be sure: It makes AICA module somewhat slower. Nothing is free you know. It should be offset by ARM7 code being recompiled this time.
Second major change is the addition of fog processing. You will need at least Pixel Shader 2.0 for this to work, and it better be fast (worst case scenario, that is palletized & filtered texture with fog and color clamping, is 9 textures lookups + some 50 other instructions per pixel).
This also causes Makaron to lag a bit at startup now, as it has to recreate some 200 PS programs to cover all possible cases.

I tried not to touch SH4 code much, but I did change how HOLLY handles DMA transfers. This might break quite a number of things but was necessary to fix couple of games. Mostly CAPCOM ones, go figure. Some people out there should really learn how to use DMA... There are games that start the DMA and assume it's going to finish before the program advances to the point where it has to use the transferred data - without actually checking that. The easiest way around this problem is to complete the transfers the moment they are started - but of course there are other games that get confused by immediate end-of-transfer interrupt, or miss it, and hang. Yet other games require that the transfer at least advances a bit once started, or the unchaged counter will make them think it's already done. All this is also very timing-related, might work or not depending how fast the emulator goes and when the interrupts actually arrive. Not funny.
I solved this by forcing DMA transfers to take time to finish - just like on the real hardware. The difference is a DMA in progress will slow SH4 (because it's blocking memory bus or HOLLY) and Makaron doesn't account for that. Not to mention I can't exactly check for interrupts every instruction, like SH4, as this would kill performance. I came up with timings that should work well on both slow and fast systems - but it might still need some tweaking.

As a side effect you now get to experience loading times. Just like on your good old Dreamcast. Yay! :) So be patient when staring at blank or "Please wait" / "Now loading" screens. I know this feature will not get good press but I like it. So it stays :)
By the way, fixes to DMA engine (although not timing-related) made "Soul Calibur" and "Dead or Alive 2" dialogs re-appear.

Emulation speed/statistics information is no longer displayed. If you want it, re-enable it in F12 menu.

On a special request from Yuki I've looked into MakaronPAD plugin. It is now possible to assign normal digital buttons to POV directional pad. The plugin version has been bumped up - not a big deal, but it won't work in T8/T9 unless you hex-edit it. You shouldn't be using those anymore :)

Enough Makaron for this year. Silmeria still needs to be rescued and I want some strong monsters to test out triple Nibelung Valesti combo (Hrist->Lenneth->Alicia) :]

Makaron Test 9/2 with MMU support in recompiler.

If you have any problems with it, go back to T9/1. This version is pretty broken (lots of unfinished modifications) but I want to know how badly :)
Again, too many changes to list. Some bug fixes (to SH4 recompiler as well). PAD plugin now enforces 5% dead zone in analog stick center position - this should cure "cursor keeps running away" problem in some games. New AICA/ARM code (back to interpreter for now) sounds much better, no DSP yet. More messages will now appear in English, in future it will be possible to support many languages (via translation files or something like that).

Makaron T10

1) T10 might be a bit slower than T9 series. It'll most likely affect only low-end systems as there isn't really much of a difference (if any) on my E6600.
2) WinCE games usually crash when emulation speed drops below certain treshold. In other words, if you got fast system you should get stable performance.
3) Due to changes in GD-DMA code loading times are back. It's considered normal behaviour since this is how Dreamcast works. Thanks to those changes compatibility has improved and following titles should now boot and work:
- all Dream Preview discs
- original MIL-CDs
- Street Fighter Zero 3
- SEGA Tetris Online
- Tetris 4D
4) CD-DA (audio tracks) will play, but still use the older method of fetching data. This might cause Makaron to crash but it's very unlikely as data reads and playing audio are mutualy exclusive tasks.
5) There are some minor changes in full-screen setup code (the debug window will be hidden and not forcibly refreshed). No 16:x aspect ratios yet.
6) Changes to sorting/drawing code broke shadows in Virtua Fighter 3tb. I'm not planning on fixing that anytime soon though, as it would break many other things. Late T9 versions have this problem too, by the way.
7) Makaron now disables screen saver when run. It's only going to be a problem if it crashes, as it might not re-enable it on exit. Just so you know.
8) If you manually enable MMU the recompiler will not switch to address translation mode until it's actually requested, so there's no speed penalty in BIOS and most games. Some however (like Ikaruga) use only partial translation and this can be emulated without full-blown MMU support. It'll work either way but will be a lot slower with MMU enabled. Some WinCE games are automatically recognized (this works only for GD images) and MMU will be turned on when necessary. In short: keep it off unless Makaron complains about it.

Makaron T10.1

- support for VMU sounds
- improved Z-buffering
- fully functional DSP
- experimental anisotropic filtering

Makaron Test 11(naomi)

Makaron Test 11.1

- Fixes to TA I've already wrote about (ie Excelica)
- Revised VMU plugin, it is now possible to save in WinCE games
- FEG/digital lowpass filter emulation in AICA

Makaron T11.2

- Games crashing with Internal error -1005 on STARTRENDER
- DirectSound error in UzupelnijBufor/Lock

Makaron Naomi T12

I'm about to release Makaron Test 12 soon, though only the NAOMI side for now. I still have mixed feelings about it seeing how many problems were initialy reported and how some of those still remain unsolved. I guess I better explain a few things first.

The way T12 handles flow of time is fundamentally different compared to previous versions. It allows for much tighter synchronization between emulated components but comes with a price: it's slower. It's not even so much the new system itself but the parameters it uses are not fine-tuned yet.
I figure some more feedback could help so that's why I'm going to release it anyway. You can always go back to T11 series if it's too slow or too buggy to be used.
It pretty much just works on Core2 CPUs but some older AMDs are struggling. There is a good chance changing some INI entries will make it work but that is exactly what I need you people to find out :)

So what's new? There is a simple GUI but it's not very functional yet. DIMM.ini file is gone, you can just load the game you want through GUI or command line. There is X360 gamepad support, in fact it's what I use mostly these days. Keyboard can still be used (with the obvious limitations in the analog department) but the mapping format and key codes have changed. And I'm still not sure this will be the final version. Sorry but that's WIP for you. It won't be that much of a problem once it can be fully configured from UI.
Pads other than X360 ones (or in other words: XInput based) are not supported. There is XInput emulation layer, you could try that if you wish.

Even if I can now run some protected cart games I will disable that functionality in the public version. This is still mostly incomplete and I don't want to deal with any "bug reports" about that. You can play GD-based games just fine.

UPDATE: There seems to be some confusion about this - it's not that I don't want to support DirectInput devices. It's just much more difficult and not a priority at this moment.

UPDATE 2: For X360 pads you can also assign LB/RB shoulder buttons and LT/RT triggers (only as digital and analog inputs respectively). Most games run happily with one just coin acceptor so don't presume you have to assign COIN2 input, just try adding credits and that should let Player 2 join in. For multiple pads add another X360 section, the number is the pad ID as displayed by the LED indicator. Remember to edit the controls to P2! Mixed X360/keyboard input is also possible but duplicate entries will not work.

Shooting games have no additional pointer to help with targeting but someone said this is how real players do this :) Let's see if that's true. I'm going to add it as an option anyway to next release. And while on the subject, you should enter game's test mode and calibrate the controls first. This is a bit tricky since X360 analog area is circular but it's possible to extend the corner reach a bit if you do this right.
The "out of sight" signal means the gun is not pointed at the screen (it's a separate signal from the gun position) and it's used for reloading. Most games have it wired to second digital input so it works like BUTTON2, just press B on X360.

If T12 is too slow for you but T11 worked fine then try to lower SH4 clock (first thing you should try is lowering clockmax - read the comments in NAOMI.ini). If that works for you then please report your system specs, game name and settings used.
You can also try relaxed timing mode but that should be last resort.

And one more thing: since F12 is used by MSVC debugger I moved the menu key to F11.

Makaron DC T12

It's pretty much the same code as NAOMI version released earlier, with some minor modifications. From the top of my head:
- "clockmin" is now 100 by default
- accepted clock values are now in 10 to 400 range
- "pixelcenter" is zero by default (ATI users with problems please set it to -0.1)
- first gamepad can be configured by selecting "Settings" in the menu (this is just a hack for now, and let me remind you that X360 controllers don't need configuration)

As usual, keep copy of of your INI files from earlier versions (Maple.ini, MakaronPAD.ini and MakaronVMU.ini). You'd be surprised just how many people overwrite these and then come here complaining about gamepad / memory cards related issues.
These INI files will be removed soon anyway, once I get the GUI more functional.

If you spot a game that has worked in T11 but not in T12 please report it. There are some bugs that I'm already aware of:
- "Stupid Invaders" not booting (I know how to fix it just not sure if I should, it could be a side effect of another bug somewhere else)
- "Looney Tunes Space Race" sound issues (still need to find the real source of this problem)
- "Shenmue II" not booting (should work on SSE2 capable systems, works on mine but it was reported broken on some AMD CPUs)
- some games require a certain video cable to work properly (mostly JP/USA games, doing weird stuff or hanging with RGB cable)
- "Yu Suzuki Game Works Vol. 1" (sorta works but the way this is coded really upsets Makaron)
- some WinCE games like "Marionette Company" have really broken graphics (mostly extreme cases of Z-buffer abuse)
- demo/attract modes on some games are broken due to imperfect FPU emulation, the most serious case being "Aero Dancing" where the tutorial crashes the plane
- and tons of other stuff :)

Makaron T12/2 update 2

UPDATE: Yup, apparently Sendspace guys don't like Makaron. Or emulators in general. They deleted the file citing terms of use violation. I will upload T12/2 to another place but this gives me opportunity to add support for a few more MAME images so please wait a bit.

UPDATE2: Updated version is now available.
- "Toy Fighter" off-by-one bug fixed
- "Giant Gram 2000" will now load (but won't work due to missing M1 data)
- "Virtua NBA" added (though the "virnbao" version will not work, this one seems protected?)
- "Samba De Amigo" added (I'm not saying it's playable mind you)
- "Guilty Gear X" _would_ work if not for a truncated protection file (but here's a hint, unpack ggx.zip, add zeros to the file to match required length and pack it again and it will work now)
- "Dead or Alive 2 Millenium" will now properly load parent ROM (same goes for other games with variants)
- "18 Wheeler" added (not tested)
- "Crazy Taxi" added (not tested)
- "Death Crimson OX" added