2020-10-29 13:55:52 +01:00
|
|
|
|
|
|
|
== Introduction ==
|
|
|
|
|
2019-01-23 00:15:06 +01:00
|
|
|
In classic IBM PC text mode, the graphics card stretches the font
|
|
|
|
such that it fills the screen.
|
|
|
|
|
|
|
|
A 9x16 font over 80x25 columns is displayed as a 720x400 image.
|
|
|
|
Assuming a 4:3 monitor as typically was present in the days, this
|
|
|
|
leads to a pixel aspect ratio of 20:27.
|
|
|
|
|
|
|
|
Font size Image size aspect decimal inverse
|
|
|
|
------------------------------------------------------------
|
|
|
|
8x8 640x200 5:12 0.42 2.40
|
|
|
|
8x14 640x350 35:48 0.73 1.37
|
|
|
|
8x16 640x400 5:6 0.83 1.20
|
|
|
|
9x16 720x400 20:27 0.74 1.35
|
|
|
|
|
|
|
|
To faithfully recreate the same visual look as such a monitor would
|
|
|
|
show, this aspect ratio needs to be applied when making use of the
|
|
|
|
font.
|
|
|
|
|
2020-10-29 13:55:52 +01:00
|
|
|
|
|
|
|
== Application support for stretching ==
|
|
|
|
|
2019-01-23 00:15:06 +01:00
|
|
|
For cool-retro-term, there is a "Font Width" slider in the settings;
|
|
|
|
set it to 74%, 83%, or whatever is necessary. (Notice the pattern of
|
|
|
|
the "decimal" column of our table.)
|
|
|
|
|
|
|
|
For xterm, a fontconfig matrix can be specified like so:
|
|
|
|
|
|
|
|
xterm -fa "Px437 ATI 9x16:matrix=0.74 0 0 1"
|
|
|
|
xterm -fa "Px437 ATI 9x16:matrix=1 0 0 1.35"
|
|
|
|
|
|
|
|
One can either horizontally compress the glyphs, or vertically
|
|
|
|
stretch them to get to the result. The compress/stretch action
|
|
|
|
influences how many characters will be visible in a fullscreen
|
|
|
|
setting, so the basic font size may need to be adjusted.
|
|
|
|
|
|
|
|
xterm -fa "Px437 ATI 9x16:size=32:matrix=0.74 0 0 1"
|
|
|
|
xterm -fa "Px437 ATI 9x16:size=24:matrix=1 0 0 1.35"
|
|
|
|
|
|
|
|
produce an equivalent result.
|
|
|
|
|
|
|
|
Extra caveat: When using a matrix, you should also specify the -fd
|
|
|
|
parameter *and* specify the same matrix inside the -fd font
|
|
|
|
specification. Otherwise, CJK characters will be rendered in a
|
|
|
|
different size than the main characters. For a stretching matrix like
|
|
|
|
1/1.35, not specifying -fd and, as a result, having smaller CJK chars
|
|
|
|
is not as bad a problem as having bigger truncated CJK chars with a
|
|
|
|
compressing matrix like 0.74/1.
|
2020-10-29 13:55:52 +01:00
|
|
|
|
|
|
|
|
|
|
|
== Application-independent approach ==
|
|
|
|
|
|
|
|
Not all programs support specifying a matrix or a scaling factor.
|
|
|
|
Under systems using fontconfig (such as Linux distributions),
|
|
|
|
it is possible to override the stretch for an existing font
|
|
|
|
like so (~/.config/fontconfig/fonts.conf):
|
|
|
|
|
|
|
|
<?xml version='1.0'?>
|
|
|
|
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
|
|
|
|
<fontconfig>
|
|
|
|
<match target="font">
|
|
|
|
<test qual="any" name="family">
|
|
|
|
<string>Px437 IBM VGA 9x16</string>
|
|
|
|
</test>
|
|
|
|
<edit name="matrix" mode="assign">
|
|
|
|
<times>
|
|
|
|
<name>matrix</name>
|
|
|
|
<matrix>
|
|
|
|
<double>0.73</double>
|
|
|
|
<double>0</double>
|
|
|
|
<double>0</double>
|
|
|
|
<double>1</double>
|
|
|
|
</matrix>
|
|
|
|
</times>
|
|
|
|
</edit>
|
|
|
|
</match>
|
|
|
|
<dir>~/.fonts</dir>
|
|
|
|
</fontconfig>
|
|
|
|
|
|
|
|
|
|
|
|
== Framework-independent approach ==
|
|
|
|
|
|
|
|
The int10h project offers font files that have their aspect
|
|
|
|
correction applied at the font level. As a result, they won't need
|
|
|
|
support from fontconfig or applications at all. These font files are
|
|
|
|
provided in the
|
|
|
|
|
|
|
|
int10h-oldschoolpc-fonts-stretched
|
|
|
|
|
|
|
|
subpackage in openSUSE.
|