320x224 and 256x224, two very confusing resolutions that are supposed to be displayed as 4:3 but obviously aren't.
How does that work you may ask, well here is how I convert them to square pixels based on how crt tv's work.
The NTSC tv standard has a total of 486 lines, what about horizontal resolution? well, that's not well defined, but to not complicate things let's say that the maximum number you can put to it is 720. so 720x486.
From where those 6 extra lines came from you ask? it was always like that, the short story about what happened to them is that digital equipment doesn't like that number because isn't divisible by 16, so those 6 extra lines had to go. Is not like anyone would notice anyway, since those lines where outside of the visible area of a consumer tv.
And so we have our 720x480 that we know and love.
As many may know, old consoles used a trick to produce non-interlaced images with consumer tv's, so out of the 480 usable lines only 240 are available and out of those 240 only 224 are used since less lines = less procesing power needed and those 16 lines where again outside of the visible area of a consumer tv. So we have 720x224 of effective resolution.
Just keep in mind that those 224 vertical lines are doubled (448 with alternating black bars).
720x224 is still too large and old consoles certainly don't have the power to draw as many pixels per line, so let's slash that 720 in half to 360. Remember that the NTSC standard doesn't care about horizontal resolution and that 720 is only the theoretical maximum, but consoles are still digital and need to have a fixed number of pixels per line to draw.
And here is where the funny part begins:
360x224 doesn't sound so bad, it's pretty close to our target but if you fit a 320x224 image into a 360x224 canvas you'll end up with borders at the sides right? well just like with vertical lines, there are horizontal parts of the screen that aren't viewable, but...
Crt tv's are very dumb and no matter what, everything that they display gets stretched or squished to span the whole screen including the non visible areas.
We already said that old consoles generate borders around the image and so the effective resolution is 320x224, but that the full resolution they are feeding to the tv is actually 360x240 to account for the non-visible area. Well we have a problem there, tv's are 4:3 so those 360 horizontal "pixels" are too wide and are squished to fit so 360 gets compresed to 320 (the scaling ratio is of 1.125, keep that number in mind) and in turn the 320x224 the console is actually drawing is also squished and now is 284x224 (all rounded to the nearest pair number).
To sumarize, the math is:
Total horizontal resolution: 360 / 1.125 = 320
Effective horizontal resolution: 320 / 1.125 = 284
Vertical resolution: no change since the vertical resolution is fixed and given by the console: 224.
Left: example without aspect correction.
Right: example with aspect correction.
View attachment 178917 View attachment 178918
View attachment 178919 View attachment 178920
Next time you play on a crt tv notice how the circle around Sonic becomes an oval.
Hey, that's not 4:3, you liar. Indeed isn't, is 71:56, but that's the funny part of all of this.
When I compare the output of my wii running a genesis game with my raspi (which can only output 720x240 in non-interlaced mode) running a genesis emulator using the same numbers used above I get exactly the same image and aspect ratio (as far as I can see).
Same thing when I do the same with snes/genesis low res.
The math is mostly the same, the difference is that there is less border so the image gets stretched instead of squished, that changes the scaling ratio to 1.111~ (better use 1.112 and round as always).
Total horizontal resolution: 288 * 1.112 = 320
Effective horizontal resolution: 256 * 1.112 = 284
Just remember that all this applies to NTSC and that crt tv's don't use square pixels, so don't really change the resolution of the image like the math suggests, they just change the aspect ratio by squishing/stretching the image.
I learned all of this while creating my crt configurations for Raspberry Pi running RetroPie.
How does that work you may ask, well here is how I convert them to square pixels based on how crt tv's work.
The NTSC tv standard has a total of 486 lines, what about horizontal resolution? well, that's not well defined, but to not complicate things let's say that the maximum number you can put to it is 720. so 720x486.
From where those 6 extra lines came from you ask? it was always like that, the short story about what happened to them is that digital equipment doesn't like that number because isn't divisible by 16, so those 6 extra lines had to go. Is not like anyone would notice anyway, since those lines where outside of the visible area of a consumer tv.
And so we have our 720x480 that we know and love.
As many may know, old consoles used a trick to produce non-interlaced images with consumer tv's, so out of the 480 usable lines only 240 are available and out of those 240 only 224 are used since less lines = less procesing power needed and those 16 lines where again outside of the visible area of a consumer tv. So we have 720x224 of effective resolution.
Just keep in mind that those 224 vertical lines are doubled (448 with alternating black bars).
720x224 is still too large and old consoles certainly don't have the power to draw as many pixels per line, so let's slash that 720 in half to 360. Remember that the NTSC standard doesn't care about horizontal resolution and that 720 is only the theoretical maximum, but consoles are still digital and need to have a fixed number of pixels per line to draw.
And here is where the funny part begins:
360x224 doesn't sound so bad, it's pretty close to our target but if you fit a 320x224 image into a 360x224 canvas you'll end up with borders at the sides right? well just like with vertical lines, there are horizontal parts of the screen that aren't viewable, but...
Crt tv's are very dumb and no matter what, everything that they display gets stretched or squished to span the whole screen including the non visible areas.
We already said that old consoles generate borders around the image and so the effective resolution is 320x224, but that the full resolution they are feeding to the tv is actually 360x240 to account for the non-visible area. Well we have a problem there, tv's are 4:3 so those 360 horizontal "pixels" are too wide and are squished to fit so 360 gets compresed to 320 (the scaling ratio is of 1.125, keep that number in mind) and in turn the 320x224 the console is actually drawing is also squished and now is 284x224 (all rounded to the nearest pair number).
To sumarize, the math is:
Total horizontal resolution: 360 / 1.125 = 320
Effective horizontal resolution: 320 / 1.125 = 284
Vertical resolution: no change since the vertical resolution is fixed and given by the console: 224.
Left: example without aspect correction.
Right: example with aspect correction.
View attachment 178917 View attachment 178918
View attachment 178919 View attachment 178920
Next time you play on a crt tv notice how the circle around Sonic becomes an oval.
Hey, that's not 4:3, you liar. Indeed isn't, is 71:56, but that's the funny part of all of this.
When I compare the output of my wii running a genesis game with my raspi (which can only output 720x240 in non-interlaced mode) running a genesis emulator using the same numbers used above I get exactly the same image and aspect ratio (as far as I can see).
Same thing when I do the same with snes/genesis low res.
The math is mostly the same, the difference is that there is less border so the image gets stretched instead of squished, that changes the scaling ratio to 1.111~ (better use 1.112 and round as always).
Total horizontal resolution: 288 * 1.112 = 320
Effective horizontal resolution: 256 * 1.112 = 284
Just remember that all this applies to NTSC and that crt tv's don't use square pixels, so don't really change the resolution of the image like the math suggests, they just change the aspect ratio by squishing/stretching the image.
I learned all of this while creating my crt configurations for Raspberry Pi running RetroPie.