What's new

bobbydilley

Grand Master
Joined
Apr 29, 2018
Messages
543
Reaction score
591
Location
England
https://dreamcast-talk.com/forum/viewtopic.php?f=8&t=13949&hilit=naomi+widescreen&start=10

The above link shows some various patches for running games in widescreen on the Naomi.

The resolution stays the same, but I think the FOV is changed (image is squashed) so when it's enlarged on a 16:9 display it looks correct.

I was wondering if this would be a universal patch (and so could be done on the fly by one of the netbooters), for example a library function in the Naomi that sets the FOV up but looking at the HEX dumps they all look very different.

I was wondering if anyone (probably Metallic lol) would be able to explain what's going on here, and if it could be extended to work on more games?
 
Wow this is really amazing! Excited to see what some really smart folks can do with it.
 
What the hell? How the heck does this work?
as was said above - FOV change. i.e. games still works in 640x480 but ratio changed to fit nice on 16:9 LCD screens

it is a bit more complex in case of 3-screen F355 but same principle - they changed view matrix values to make in look good on flat line of 3 screens
 
So how do you find out where the field of view values are stored at?

Also, doesn't this affect perfomance? There's more rendering involved.
 
Last edited:
i presume you need to re-calculate the checksums afterwards or get rom errors in test.
 
For people that don’t want to read the posts, essentially the FOV is some value in the hex which is likely to be one of a few known values (listed in the forum post).

Because the same value comes up multiple times throughout the hex as that same number is probably used for other things (e.g lots of variables are probably 2 or 3 in the game, or some other set of instructions equals that value) you need to pin point exactly which instance of that value is used for the FOV. They’ve been doing that by finding all the instances of that value and changing them until you can see it change into widescreen using an emulator.

A quick way to find them all might be to write a script that finds and modifies all of the matching values one by one, then runs demul and takes a screenshot and then you can quickly see which screenshot looks correct and have it create a patch for that one.
 
Last edited:
So I'm not sure why, but I started thinking about this recently. So I messed around a bit with Crazy Taxi yesterday.

DEMUL + Cheat Engine:

crazy_taxi_widescreen_4.jpg


crazy_taxi_widescreen_1.jpg


Here's how it looks like when you set "FOV" to 43700000 and stretch it to 16:9:

crazy_taxi_widescreen_5.jpg


Looks good to me!

Let's put that memory address in to the Mame debugger and put a watchpoint on it:

crazy_taxi_widescreen_2.jpg


crazy_taxi_widescreen_3.jpg


Now I just need to figure out where and how the FR3 register is being filled?

To be continued?

PS. don't download Cheat Engine from the official site. It's riddled with adware. Jesus.

PPS. yes, I know. There's already a widescreen rom hack for Crazy Taxi. I want to make my own.
 
Last edited:
@nem good work
I would recommend few things:
1. as of digging info about how this 3D stuff works, it would be useful to look at Naomi SDK documentation and libraries, and maybe Dreamcast SDK 3D libraries (Ninja and Kamui) source code which is floating in the net
2. as of messing with game code - it would be easier to simply save whole Naomi 32MB RAM snapshot from MAME debugger or other emulator, and then import to Ghidra project for comfortable analysis.
 
This is also possible on real hardware!

VF4FT Bin
0002B834 'AB AA AA' to '39 82 E3'
 

Attachments

  • S1701901333872.jpg
    S1701901333872.jpg
    191.4 KB · Views: 68
btw, how do you run it in MAME with debugger ?
make sure to use -nodrc switch, otherwise you may get wrong watchpoints/breakpoints/trace/etc results

A-ha, I had no idea I was supposed to turn off the dynamic recompiler. Good to know.

By the way, is there a way to turn off CRC checking in Demul? Mame runs like a dog on my computer.
 
A-ha, I had no idea I was supposed to turn off the dynamic recompiler. Good to know.
it's by design, it's same in any emulator with recompiler, due to block-based nature

By the way, is there a way to turn off CRC checking in Demul? Mame runs like a dog on my computer.
sorry, there is no such feature, in later versions at least
 
Back
Top