First post, by Great Hierophant
- Rank
- l33t
95% of DOS games run exclusively or optionally in a 320x200 resolution graphics mode, whether CGA, PCjr./Tandy, EGA, MCGA, VGA. 320x200 gives a screen aspect ratio of 16:10. CRT computer monitors, however, have a 4:3 aspect ratio. Viewing the graphics with square pixels would mean large borders on the top and bottom of the screen. Most computer monitor users would deem the large borders unacceptable, so they would use their vertical control to stretch the screen.
The screen would give an "even" stretch, every scanline would be thickened equally, more or less. In this way, the 320x200 screen would take up the same space as a 320x240 screen. 240/200 = 1.2; this means that each scanline would be 1.2 times thicker stretched than un-stretched.
How can this stretch be simulated best on an LCD monitor. LCDs are made up of discrete pixels, they cannot vary the pixel height or width as a CRT can. LCDs of course can resize screens. In the older LCDs, certain lines or portions thereof are repeated, but not all. This gives a sharp but ugly picture, as fine detail like text looks uneven. More recently, interpolation is used to try to eliminate the uneven stretch, but the result looks far fuzzier than a properly stretched image on a CRT.
If the resolution of the original image is an interger fraction of the resized image, an interger stretch will give the best results. For 320x200, the integer resizing goes like this:
640x400 (x2)
960x600 (x3)
1280x800 (x4)
1600x1000 (x5)
1920x1200 (x6)
2240x1400 (x7)
2560x1600 (x8)
But this resizing, which is quite doable on certain LCDs, still gives a 16:10 screen ratio. The image would not look quite as it would have on a CRT. The solution is to stretch using different interger scaling for the horizontal and vertical.
Let us start with 640x400 to 640x600. 600/400 = 1.5. Not even close.
Next is 960x600 to 960x800. 800/600 = 1.33. A little closer, but too rectangular.
Consider 1280x800 to 1280x1000 (using a 1280x1024 screen.) Here 800 lines become 1000 lines. 1000/800 = 1.25. Close but not quite.
One level up is 1600x1000 to 1600x1200 (using a 1600x1200 screen.) Here 1000 lines become 1200 lines. 1200/1000 = 1.2. Exact!
Finally, 2240x1400 to 2240x1600 (using a 2560x1600 screen.) 1400/1200 = 1.14. Too short.
So, the best solution is to use a 1600x1200 LCD monitor or a 1920x1200 LCD monitor (with pillarboxing). The Direct3D graphics filter will work for 320x200 games. (It isn't perfect, games that use tweaked text modes, like their text mode counterparts, will looked too stretched vertically).
http://nerdlypleasures.blogspot.com/ - Nerdly Pleasures - My Retro Gaming, Computing & Tech Blog