It's not rocket science. The Virtual Console version of Neogeo games already looks perfect.
Thanks for the clarification (and for screenshots). Just to be sure, do we have capture of the same game running on TV (not arcade monitor ?). Maybe this MVS/NEOGEO mode setting is changing the dot clock ?
I admit I never tried a Neo geo game on VC. So you mean Metal SLug on VC has these black border displayed but not Baseball Stars 2, right ?
Ok, with lovely black border :
That was expected, using 640 (320 x 2) was going to show all 320 pixels and therefore those black pixels.
But it seems that's correct and proper aspect ratio, according to Vigilante screenshots so better leave it that way.
Well, to be even more accurate, you should remove that part from video_drawscreen1 in video.c:
Code:
/*** Do clipping ***/
for (count = 0; count < 224; count++)
{
for (sx = 0; sx < 8; sx++)
video_line_ptr[count][sx] = video_line_ptr[count][sx + 311] = 0;
}
According to the above screenshots, clipping is done by game, not automatically done by the video hardware, see how the bottom left tile is still displayed in Metal Slug ?
Anyway, you can keep fullscreen as an option for games that clip those columns, keep with fb_width=640 and vi_width=678, the filtering effect seems less noticeable than bilinear filtering done by GX when fb_width/HASPECT/vwidth is non-integer. According to docs I've read, the video hardware is also able to apply horizontal upscaling, but the filter is different (and might be configurable ?) Off course, HASPECT must keep in side with fb_width (fb_width / 8 i.e 80)
The top screen lacks some info that you can see for example on Ninja commando for bosses.
That's because you are using 58 for VASPECT. Try keeping it equal to 448/8 i.e 56, otherwise GX is going to upscale the original image with non-integer ratio and applies bilinear filtering in vertical direction this time.
If that does not work with this value, then maybe it's because of the perspective/matrix projection used, I admit I have some trouble understanding these and this might change the way the 320x224 texture is rendered to GX buffer (zoomed ?). According to the same docs I've read (hum), you can use "orthogonal" projection instead of perspective, which seems a better choice for 2D flat images. But I really don't know how to use this, maybe looking at some other homebrew code would help ?
However, viYOrigin should be changed maybe to non academic values.
There isn't any "academic" value, unless you don't want the image to be centered on screen:
viYOrigin should always be set to (VI_MAX_HEIGHT - viHeight) / 2 in interlaced mode and (VI_MAX_HEIGHT/2 - viHeight/2) / 2 in non-interlaced mode
viXOrigin should always be set to (VI_MAX_WIDTH - viWidth) /2
So in the previous code you posted (with viWidth=678), you should fix viXOrigin as well.
Last thing, the horizontal scaling should be the same in non-interlaced or interlaced mode, there is no point in having 640 for one and 678 for the other, it's just vertical timings that change between those modes (fb_height =vi_height /2 in non-interlaced mode)
I'm sorry, I have no mean to test code on Wii right now so I would not post updated sourcecode/version but changes should not be difficult to make
