-
Notifications
You must be signed in to change notification settings - Fork 136
PAL60
Note
This feature is only available in the preview branch
PAL60 is an unofficial extension to the PAL TV standard that allows a refresh rate of 60 frame per second, instead of the official 50 fps. While never standardized, it has become widespread during the late life of analog TV in Europe. Some 6th-generation consoles like GameCube or PlayStation 2 officially support PAL60, and some games allow to activate this mode. No official Nintendo 64 game did support it, but the VI chip can be programmed to emit a PAL60 signal very similar if not identical to that generated by the GameCube.
PAL60 compatibility in modern times is probably spottier than it uses to be. In fact:
- Most original PAL CRT TVs that are still alive nowadays (so, late models) do support PAL60.
- Some modern LED/LCD TVs with builtin analog input support PAL60, but others don't.
- HDMI-modded N64 consoles might or might not support PAL60. For instance, N64Digital doesn't support it.
- Framegrabbers might or might not support PAL60. For instance, OSSC does support it (though you need a RGB-modded N64 console to use OSSC).
Software emulators that accurately emulate VI timings, according to how the game programs timing registers, will support PAL60 transparently. For instance, Ares perfectly works with PAL60, and is able to "unlock" 60 Hz automatically.
You can activate PAL60 in libdragon simply by calling:
vi_set_timing_preset(&VI_TIMING_PAL60);You can call this function at any moment, even while the application is already running and displaying framebuffers. VI will switch to PAL60 timings from the next vblank. Make sure to only do this on a PAL console though (you can check the region of the console via get_tv_type()):
To switch back to standard timings:
vi_set_timing_preset(&VI_TIMING_PAL);- Do not support PAL60 exclusively. Compatibility is too spotty and you risk that your application will not work for some users on their PAL consoles.
- Always start with PAL and allow users to opt-in to PAL60, for instance via an option in the initial menu. When activating PAL60, warn the user that the TV sync might be lost if their system does not support it. In that case, the user can just reboot.
- Doing an in-game switch is riskier of course, as the user will not want to lose progress. One possible experience to create is similar to Windows resolution change:
- When the user tries to activate PAL60, show a warning saying that the sync might be lost, and instruct the user to just wait if it happens.
- Switch to PAL60, then show a message to press some button (or button combo) to confirm if they can see the screen.
- If the user confirms by pressing the buttons, you can keep PAL60 on, and even save it as default for future runs.
- Otherwise, after a few seconds, switch back to standard PAL timings and explain the user that PAL60 doesn't probably work on their system.
Emulators like Ares do not have a "change region" setting. They need to read a PAL ROM to switch to PAL mode. Add this line to your makefile, perform a clean and build. Ares will automatically load it up as an PAL N64 system.
N64_ROM_REGION = P