Thanks for the thorough response, @kokoko3k !
So, the systems are actually the NEC PC-88 and NEC PC-98, which were japanese home computers that came before the PC-Engine/Turbografx console, same company though. The emulators for these systems (QUASI-88 and Neko Project II Kai respectively) are not really at the same level as more mainstream console emulation. I did raise the issue in QUASI-88 libretro core’s github but I got no response and it doesn’t appear to be in active development.
I believe the reason they do this vertical resolution upscaling is to keep the system’s original aspect ratio. The 200-line video mode had a native resolution of 640x200 but was displayed in a 16:10 aspect ratio, producing taller than wide pixels and letterboxing on a CRT. By doubling the vertical res to 400 pixels, these emulators produce the correct aspect ratio automatically (PAR 1:1). That’s my take. Even more confusing, those systems had a 400-line mode (640x400) but that was used mostly for displaying OS text, and early games rarely used it.
I had also discovered the “hack” with vertical mask parameters you described! But I wasn’t really happy with the result.
My post took a while to get approved here for some reason, so I decided to looka at your original code yesterday and I was able to do exactly that. I just added a new parameter SCANLINE_OVERRIDE in config.inc and config.globals.inc and changed this block on final_pass.slang from this:
vec2 freq_base_core = in_coords * vPG_OriginalSize_tated_mul_pi;
float decon_y_strength = DO_SHIFT_RGB * NEW_SCALEMOD_Y;
if (vFake_scanline_period > 0.0) {
freq_base_core.y = vFake_scanline_period;
decon_y_strength = 0.0;
to this:
vec2 freq_base_core = in_coords * vPG_OriginalSize_tated_mul_pi;
freq_base_core.y *= SCANLINE_OVERRIDE;
float decon_y_strength = DO_SHIFT_RGB * NEW_SCALEMOD_Y;
if (vFake_scanline_period > 0.0) {
freq_base_core.y = vFake_scanline_period * SCANLINE_OVERRIDE;
decon_y_strength = 0.0;
I put the parameter in the scanlines section and included some adjustability (1.0 0.25 2.0 0.125). 1 is default, putting it to 0.5 halves the lines.
It works with fake integer as well, albeit with a bit more artifacts. Here are some pictures of Ys I, running on QUASI88 at 640x400 with your shaders at half scanlines (0.5) in both aperture and slotmask:
I would love if you included these changes to your next releases so I wouldn’t need to re-edit the files myself every time you update them
but I can totally understand if you don’t want to.