I've spent way too much time searching for a decent, standalone VT100 terminal emulator which would be suitable for my needs. By standalone I mean a single board that does all the emulation without a host operating system. There were several that seemed promising at first, but they would soon be found lacking in some critical way.
The first experiment was PiGFX, a bare-metal terminal emulator for Raspberry Pi Zero boards. As is usually the case I found a way to mess this up and couldn't get it to work the first time, but a later attempt was met with success and also disappointment. The fonts were hard to look at for more than five minutes, but I'm sure it would be trivial to replace them. Adding new escape codes was out of the question though since it was written in C++, which I do not understand. The main reason I didn't like it was the need to use a Raspberry Pi, an overkill solution if ever there was such a thing.
At some point I found the Geoff Graham VT100 terminal emulator on Tindie, but the PS/2 keyboard input and VGA output turned me off for quite some time. In fact that would be one of the main "flaws" of all the other terminals I found. There were various Arduino projects which had limited resolution and very few escape codes, while the FabGL project seemed promising until I found out it runs on the ESP32. This would mean having to download special tools just to use the chip. I've been down that road before with Arduino and was not a fan at all, nor am I particularly fond of anything written in C++. It seemed I would need to write my own emulator...
Until I found the modified Geoff Graham terminal on Tindie. This brings many changes to the original including FULL VT100 and xterm support, UTF-8 support and many other features that make it superior to the original. Of course it's monochromatic which at first seemed like a con, as was the PS/2 input and VGA output. Eventually I would learn to accept VGA as a valid output, having since abandoned the Pimoroni display with its HDMI port. This new terminal emulator supported full 640x480 video with 8x16 fonts, meaning it could do 80x24 or 80x30 which was selectable in the setup menu. Oh, and the monochrome color could be selected with jumpers, so I could have red, green, yellow or even white text. I had to have it, so I shelled out more than $70 for the kit and waited anxiously for its arrival. I would soon regret making such a large spontaneous purchase when I found out the FabGL project makes a standalone terminal for just $25... Of course it was out of stock at the time, so it's just as well. Maybe I'll try it out someday.
Unfortunately for me, seemingly trivial tasks are often more difficult than they should be. All too often there is some minor detail which creates rather large problems, much like a breadcrumb-sized piece of gravel in your shoe. Oh what madness and suffering this causes. In my case it was a missing sponge for the soldering iron, a simple problem with a seemingly simple solution. Every household must have at least one real sponge near a sink, right? WRONG! Over a dozen sponges of all shapes and sizes and not a single one that wasn't made of plastic. Halfway through the build it became almost impossible to get any solder to melt on the tip, let alone stick to it. I tried a wet piece of cardboard from the box used to ship the kit, but this was a mistake as it left fibers all over the iron. I thought maybe a wash towl might be a decent substitute but alas, not a single 100% cotton wash towl either! Every single cleaning product was made of plastic... MADNESS! Eventually I found a copper scouring pad and figured this to be as good as it gets. While it did seem to work a little, it somehow broke off the point on the soldering tip!
Eventually the kit was assembled and ready to go, but there was yet another detail which would get in the way; the PS/2 port. I forgot to buy an adapter, so I couldn't even test the terminal. Three more days were spent waiting for one to arrive in the mail, only to find that the fancy new mechanical keyboard I just bought doesn't even speak the PS/2 protocol... In fact I wasn't even aware of this issue until now. Turns out some older USB keyboards have dual mode controllers that detect when they're plugged into USB or PS/2 ports, but since as of 2023 the PS/2 port is effectively dead, most (all?) modern USB keyboards don't have that function anymore. Yet another four days were spent waiting for yet another keyboard to arrive. The Periboard 409 was the only PS/2 model I could find on Amazon, while it also happens to be the only 75% keyboard I could find that supports PS/2 period. Oh I tried looking for active adapters that would translate USB to PS/2 but it seems no such thing exists.
At last I had an assembled terminal and a PS/2 keyboard, all that remained was to plug it into a Raspberry Pi and test it out. I wired the terminal to the headers on the Pi Zero and inserted the Raspbian SD card which had sat unused for over two years. Immediately a stream of yellow text appeard on the display. It worked! Next I tried putting Void Linux on an SD card but it was refusing to utilize the UART serial console. I tried altering the settings and even tested the USB port to no avail. The only way I could use Void on the Pi was with an HDMI monitor and keyboard plugged in directly...
This was extremely disappointing since Void was one of only two operating systems I could run on the Pi Zero which supported networkinga and did NOT have systemd. The other option was NetBSD which I'd previously tried, but it was unable to survive a shutdown; turning off the Pi would render it unbootable. I tried it again regardless, only this time I used a 16GB card instead of the 128GB I'd been using previously. Lo and behold, the larger SD card turned out to be the root of the problem. I can safely turn off the Pi without worrying about whether it will start up again.
So now I have a Pi Zero W with an Ethernet hat running NetBSD 9.3, plugged into a VT100 terminal emulator and an 8" IPS display. There are some issues with this setup which make it a real PITA to use, but it's a step forward. I guess now would be a good time to explain just WHY in the hell I chose to do all this? Surely there must be a good reason.
First let's look at the Linux console which I've been using almost exclusively since 2017. In that time I have seen just about every kernel update which came since just before version 4.19 was released, and with almost every update came unwanted changes. For some reason the console colors would frequently change such that yellow became orange, blue was no longer readable and actually hurt to look at while red was some weird shade that I just didn't like. The next update or two would undo these changes, setting the colors back to the sane defaults from before. Of course the next update was dreaded because there was no way to know whether it would break the colors again. This went on for some time until I found a program that could change the console colors, but the settings used were not universal. Every monitor needed its own color scheme because what was perfect for one display might be utterly impossible to read on another. In the hunt for the perfect monitor, this can get old pretty fast.
Then we have the Udoo Bolt v8 running Void Linux. Boy does this thing piss me off sometimes. Trying to change the console resolution is met with failure as I'm stuck with whatever the monitor wants to see, not what I tell it to use. This means the console is virtually useless because I can't even read the tiny microprint that shows up, whether it be the 1024x768 8" monitor or the 15" FHD display, forcing me to run a minimal X session and terminal emulator like st. The only exception is the 12" 800x600 monitor I bought by mistake, as it would properly display a native 100 columns and 37 lines, though looking at it made me dizzy for some reason. It was also too big and needed to be placed further away, but my failing eyesight made the text hard to read. As if that wasn't enough, the only desk in the house happens to be weirdly tall at ~30 inches, meaning a large display like this would be too high for me to use comfortably.
Oh but what's wrong with X and st? Well it's certainly easy to set the screen resolution, but it's completely redundant and pointless since I don't even run graphical programs anymore. I can also tell when I'm running X because the resolution is wrong, everything is slightly stretched and only fits 79 columns by 29 lines. This too hurts to look at, which leads to the most important reason for all of this nonsense; I can't stand blazingly bright displays with white backgrounds and black text. No ammount of backlight control will help. I cannot tolerate too many images on web pages, nor can I tolerate graphical programs eating up all of my memory. Why must a computer have no less than FOUR GIGABYTES of memory just to surf the web? All of this eye-candy that goes into the modern graphical experience of computing is just wasteful of system resources and for me at least, physically painful to look at for more than two minutes.
As I type this very paragraph, I am looking at yellow text on what I feel is the perfect monitor. This thing really is the best I've found out of any other choices available now. Eight inches diagonal, 4:3 aspect ratio, 1024x768 with 8x16 fonts on the terminal producing 80 columns and 30 lines of text. Not too big, not too small, no glossy glass on the display panel means far less glare. Honestly I just might buy a few more of these things before they vanish from the market forever. Why must it be so dificult to find a matte display in this size? Why must everything be GLOSSY and SHINY and OH-SO-EVER-F#!KING-BRIGHT!?
That's all I have for now, but this is not the last you'll read of the VT100.
All things serve the command line.