Git Product home page Git Product logo

fceultrarx's People

Contributors

niuus avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

fceultrarx's Issues

Hello and Thanks

Primero gracias por el trabajo, en mi caso me gustaría que este emulador también contará con tema de nes mini al estilo del de snes le da un aire diferente al mismo

Card Sd2SP2

does not work on the game cube sd2sp2 card

Correct aspect ratio by changing viWidth to 644.

In gcvideo.cpp, you're currently setting the viWidth to 640, the default and lowest possible value. You should set this to 644 instead for a slightly more accurate aspect ratio.

With apologies if you know all of this, a quick an explanation: the Wii (and GameCube) have both an embedded framebuffer (EFB; generally the thing you think of as a framebuffer and the one your software is most likely to interact directly with) as well as an external framebuffer (XFB). The embedded framebuffer is the one that can be resized up to 640*480 (at least when set to 60 Hz mode), while the external framebuffer can have a width between 640 and 720 pixels. Its primary purpose is to reduce the effects of underscan--the image not filling up the user's entire TV--on the horizontal axis. For example, Nintendo games tend to use a minimum viWidth of 650, and usually more. The external framebuffer scales with 8x oversampling, so the impact of its scaling is not overly blurry.

The GameCube and Wii both use the same 13.5 MHz pixel clock, which is used to determine how long a single pixel is sampled before moving on, and which in turn determines how wide each pixel becomes in the analog video signal output by the Wii. This clock has the result of causing XFB pixels to have an aspect ratio of 10:11. That is the GameCube/Wii's pixel aspect ratio (distinct from the image's aspect ratio). This is the same pixel clock/PAR as many other devices from the period, like the Sega Dreamcast, consumer DVD players, etc.

The NES, SNES, TurboGrafx-16, and many other consoles of the era use a 5.37 MHz pixel clock, resulting in a pixel aspect ratio of 8:7. Since that's different to the PAR of the Wii, you ideally want to correct the aspect ratio by adjusting the viWidth--because the 8x oversampled scaling is so much cleaner than doing it with a bilinear or nearest-neighbor filter, which IIRC is how the GX/RX emulator family manages all scaling currently.

So, the math to get a correct NES/SNES/etc. image on GameCube/Wii is:
512 * (11/10) * (8/7) = 643.657143 ≈ 644
emulator's output resolution * inverse GameCube/Wii PAR * NES/SNES PAR = ideal viWidth ≈ possible viWidth

The idea here is that in one step, you're both negating the GameCube/Wii's PAR and applying the NES/SNES's, all using the reasonably clean scaling of the XFB. All of this assumes that the user is not manually adjusting the image with the video settings in the emulator, but if the user wants to mess with the aspect ratio, that's not your problem. The best you can do is offer the correct aspect ratio as the default settings and let users do as they wish with the rest.

Sorry this was so long. The short version is, switch from 640 to 644 for a more accurate NES/SNES picture. The same fix should be able to be made to Snes9xRX as well, but I won't file an issue separately over there.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.