Remix.run Logo
Galanwe 2 days ago

> The author listed several reasons why they want it.

To be fair, they listed reasons to need a 80x25 terminal, but not reasons to need a 80x25 console. I'm a bit unclear as to why they could not use a regular 80x25 term in their graphical session.

db48x 2 days ago | parent [-]

They specifically want 8×16 characters in 9×16 character cells on a 720×400 display that has an overall 4:3 aspect ratio. There’s no way to achieve that on anything other than a real hardware CRT. No amount of fiddling with fonts in either X11 or Wayland or any other display manager will change the size of the pixels on your LCD.

Galanwe 2 days ago | parent | next [-]

There may be something I don't get then. What can you _not_ do in a graphical terminal that you can in a pure HW console?

Why would you not setup your graphical terminal to be full-screen on whatever column/row count, what's the difference ? Surely the rasterizable screen size is the same whatever mode your screen is in?

db48x 2 days ago | parent [-]

See my longer reply <https://news.ycombinator.com/item?id=45275565>, but the short version is that 720×400 has a 5:9 aspect ratio, but the CRT display was 4:3. The CRT compensated by scaling the vertical height of each line by 135%. An LCD simply cannot do that. The best anyone can do is to scale the 400 lines up by the same non-integer scaling factor to 540 lines. This gives you an ugly image where some lines are 1px tall but others are 2px. It does get less ugly if you scale to 1440×1080 (on an HD display), or to 2880×2160 (on a 4K display), but the artifacts are still obvious and undesirable.

toast0 a day ago | parent [-]

How would a CRT scale the vertical height? Maybe you get a bit more space between lines, but the beam is only as tall as it is, right?

I would think the scaling would come horizontally ... you can put as many pixels horizontally as your RAMDAC can manage, but screen width per pixel depends on the pixel time vs the line time.

pezezin 20 hours ago | parent | next [-]

Yes, you do get more space between the lines, an effect is known as "scan lines". It is specially notorious when forcing a 240p mode like 8-bit and 16-bit systems used to do, which gives old games a distinctive look that some retrogamers crave.

https://en.wikipedia.org/wiki/Scan_line

db48x a day ago | parent | prev [-]

Yes, you’re correct. I left out all of those details to try to simplify the explanation as much as possible. The reality is that the pixels we were drawing got narrower as our display hardware got better. In this VGA text mode the width of the pixels is 20⁄27ths of the line height. But you obviously don’t want to scale the 720 pixels of width down to display in just 533⅓ LCD pixels, so instead you have to scale the height up. It was just easier to start by saying that the height of the CRT’s pixels was 27⁄20ths of their width instead. :)

superice 2 days ago | parent | prev [-]

That still really isn't a reason. I think I can extrapolate where they are going with this, which will be something like 'I have a ton of 720x400 hardware CRTs sitting around that I need to use/support/deal with'. But that is never explicitly stated, you can completely read it as 'oh it's neat that 80x25 matches up with the number of image lines on old CRT displays and here is the math to show it'.

db48x 2 days ago | parent [-]

Perhaps you don’t know that on a CRT the number of lines that can be displayed is variable. Any CRT can display 400 lines or 399 lines or 1000 lines or however many lines you need or want. On an LCD there is always a fixed number of pixels, no more and no less. You can leave some of those pixels blank if you don’t need them but that’s about it.

720 pixels by 400 pixels is a 5:9 aspect ratio, but the monitor is a 4:3 aspect ratio display. On a CRT the result was an image made up of pixels that were taller than they were wide. 35% taller, to be specific.

To reproduce this on an LCD you need to scale the image up to 720×540 pixels which results in every line being drawn as either one or two lines of LCD pixels. Some lines are literally double the height of others. This is super ugly! Of course you could scale it up to 1440×1080, but now you’re just scaling the lines up by a factor of 2.7 instead of 1.35. Some lines are 2 pixels tall and others are 3, which still makes some lines 50% taller than the rest. On a 4K monitor you could scale it up by a factor of 5.4 to 2880×2160 making some lines 5 pixels tall and others 6. This is certainly better but you’ll still be able to tell the difference and it’s still ugly.

When you scale an image taken from the real world, such as one from a television program or a movie, then nobody will notice the artifacts. But when you scale pixel graphics, and especially text, then the artifacts spoil the whole thing.

There are two other routes you could take.

You could scale the text display instead. You could have an 80×33 text display using the 9×16 character cell. This gives you 720×528 pixels, which is close enough to the right ratio that you can just scale it up by a nice integer ratio and just ignore the few wasted pixels at the top and bottom of the screen. But now you’ve squashed the aspect ratio of the characters!

Ok, so you could stretch the character cell to 9×22 pixels, redrawing all of the characters by hand to approximate the original shapes. You’ll only have room for 80×24 characters in 720×528 pixels, but that’s much less disappointing than mucking about with the original font. People _grew up_ with that font. They _like_ it.

Of course neither of these options can take advantage of real VGA hardware. One of the advantages of VGA was that the CPU only had to manage a 2 kilobyte text buffer while the VGA hardware composited the character data from the font and created the video signal that went to the display. It could do this in real time, meaning latency was actually lower than a whole video frame. If you emulate this on a CPU it’ll be much, much slower than that. If you farm it out to a GPU instead then it’ll be far more expensive. A modern GPU needs tens of billions of transistors to run the shader that emulates what probably took a few thousand transistors on original VGA hardware.

A completely modern take on a console would lean into the new ratios and might have a 120×30 text display and a 16×36 character cell, creating a 1920×1080 pixel display that doesn’t need any scaling on most LCD panels. Instead of trying to support the original VGA character set (CP437 as it is sometimes called) and disappointing its fans, it would support Unicode, text shaping, combining characters, BiDi text, emoji, etc, etc. And the compositing would be done in hardware, but not in a shader on a $500 GPU. Or even a $100 GPU.

tracker1 a day ago | parent | next [-]

Except that still locks you to 1920x1080 which a LOT of displays, laptops etc already break... 16:10 aspect, 3440x1440p, etc. are already outside that ratio you outline. The thing with 80x25 VGA text modes was it was both fast and consistent in a lot of ways. You just cannot have a predictable full screen text interface today in the same way as you could.

That said, there were differences back when... you had the original CGA and EGA as precursors to VGA. I used an EGA 386 system for several years and have similar fondness for that, especially in that it was the native for RIPterm/RIPscrip in the early-mid 90's. Which was still different from the much more common VGA modes.

Hell, my biggest niggle to this day is that so many terminal apps don't match the DOS colors you got with CGA/EGA/VGA default. I often will configure that, so I can at least output classic ANSi art to my terminal and have it look closer to correct. I keep working through ideas for a "modern" text mode BBS that worked well in modern terminals. On the flip side, I'm thinking of adapting a door server model that will map CP-437 output to UTF-8 and map the colors to rgb color codes for modern terminals to show the right colors.

db48x a day ago | parent [-]

Sorry, I thought that part went without saying. A modern console leans into the actual resolution of your _current display_ and gives you nice integer ratios by default while letting you configure whatever character cell size you prefer if you want something different.

account42 a day ago | parent | prev [-]

> Perhaps you don’t know that on a CRT the number of lines that can be displayed is variable. Any CRT can display 400 lines or 399 lines or 1000 lines or however many lines you need or want.

This isn't true. Besides there being only a finite number of distinct phosphors / grid holes, the electronics and logic driving the display can also only handle a limited range of frequencies.

As LCD pixel densities increase the situation becomes effectively the same.

db48x a day ago | parent [-]

Yea, I was deliberately simplifying so that I didn’t have to spend pages and pages on the subject. Suffice it to say that the display on your desk could handle quite a large range of display resolutions with equal ease. The portable TV you took to the beach or whatever might not be so flexible.