Monday, May 4, 2020

xa 2.3.11

I've updated xa, André Fachat's venerable 6502 cross-assembler, to version 2.3.11. This contains miscellaneous bug fixes and a compilation fix for gcc 10. As usual it is tested on pretty much all of my Un*x systems here including AIX, Mac OS X (PowerPC and Intel), NetBSD/mac68k and Linux/ppc64le. This will probably be the last in the venerable 2.3 series before 2.4, in which we may do some compatibility breaks and jettison a couple long-deprecated options. More to come on that.

Saturday, May 2, 2020

SAIC Galaxy 1100: finally screenshots of the unscreenshotable, part III

This is part of a series — you can read prior entries

In our last entry we were testing the Inogeni VGA2USB3 on various SunRay devices and the Apple Network Server. However, it seemed to have met its match with the SAIC Galaxy 1100 portable workstation. Or did it?

The SAIC Galaxy 1100 and its less powerful sibling Galaxy 1000 are MIL-SPEC portable versions of the HP 9000/712 "Gecko" PA-RISC workstation built as part of the United States Navy's $672 million TAC-4 computing initiative in 1994. Hewlett-Packard had no portable workstations in its product line at the time and subcontracted with Science Applications International Corporation to create a ruggedized, self-contained version of HP's then-most common PA-RISC desktop system. As such, Galaxys have all the features of the Gecko but also add a built-in keyboard and trackball, a really nice 1024x768 8-bit colour LCD flat panel display in the lid and two PCMCIA (!) slots. On the rear, besides Ethernet, AUI, SCSI, audio and power ports, the Galaxy systems have PS/2 connectors for an external keyboard and mouse, switches to choose internal or external devices, and a VGA out. This enables you to not only use it as a self-contained luggable but also to plug in a monitor, keyboard and mouse and operate it as a more or less conventional desktop. Sadly, there is no internal battery option, but it probably would have made it prohibitively heavy even for the military.

Given this choice of configurations, you would think that the VGA port mirrors the internal display (on a regular Gecko there's only the VGA port, and that's your only display), and, well, you (and I) would be wrong. The VGA2USB3 just displayed a blank screen no matter what was on the internal display. After messing around at the boot administration prompt and looking at the output of the monitor command, it occurred to me that the SAIC Galaxy reports two displays. Stranger still, the internal built-in display is actually treated as the alternate display, not the primary one. I selected the great common denominator of displays, 640x480 at 60Hz, for the "primary" display and left the internal display at its current setting (monitor 5 11) and told the boot admin to use the external VGA out with path console graphics (as opposed to graphics1, which turned out to be the internal display). Note this is completely unlike the Gecko with its single video port, by the way. I finished with a reset and ... we have a screen!

Again, there's no way you're grabbing this initial boot screen with anything but an external capture system. Ditto for the boot admin menu:

Sync-on-green was thus absolved as the issue; it was just an unexpected configuration. As you can see, the image is nice and sharp and captured at 1920x1200 with pillarboxing preserving the original 4:3 aspect ratio. The only flaw was a missing set of left-most pixels.

The next step was to see if I could capture the operating system's boot sequence as well. This machine usually runs NeXTSTEP 3.3, the only version that supported PA-RISC (it can also run HP/UX and NetBSD, but where's the fun in those?). NeXTSTEP wouldn't be particularly entertaining or representative of the Galaxy experience in 640x480, so at the boot admin prompt I selected mode 2 this time (1024x768 at 75Hz). When I restarted the machine, however, everything was blank again! I blindly hit ESC to get back to the boot admin prompt and set it back to mode 5, and the screen reappeared. I then methodically tried all the other non-flat panel modes and discovered exactly none of them worked except mode 5.

If you looked at the list of modes above, you may have already discovered what's special about mode 5: it's the only display mode that's 60Hz. None of the VESA modes, not even the 42Hz mode, would work either. Although the slip of paper in the box that Inogeni purports to call a manual suggests you can go to VLC's advanced settings and try to match the frame rate like so:

... it made no difference. Despite Inogeni's statements to the contrary, the capture frame rate is 60Hz or bust. (Fortunately, both the SunRays and the Apple Network Server in the prior entry were already at 60Hz, so I could grab from them just fine.) This doesn't look like a deficiency of the Linux version of VLC because the macOS version couldn't see anything either, and it's entirely plausible that this limitation might be a consequence of being vanilla USB Video Class compliant.

Since the refresh rate was now obviously the problem, my first thought was to find some sort of conversion device that, along the lines of a digital telecine, would drop or merge the frames together and put out a 60Hz signal. I'm fairly certain such devices exist but none obvious popped up with some cursory searches on eBay, and I didn't want to spend a lot of money on a professional solution that may or may not work. (I'm already out for the damn Video Ghost and this box, you know.) Eventually it occurred to me that a cheap way of figuring out if I was on the right track would be a VGA-to-composite converter, and to connect it to the CVBS input the VGA2USB3 already has. The images almost certainly wouldn't look very nice but it would at least demonstrate if the idea was feasible.

VGA-to-composite converter boxes are almost literally a dime a dozen on eBay and Amazon and come in two major types. The majority are a little squarish box (usually black or white, though the $14 one I ended up getting turned out to actually be lavender) that takes VGA and a 3.5mm audio jack on one end and has CVBS and stereo phono jacks on the other. They will output in PAL or NTSC using a tiny switch on the side and claim to work without external power, though mine didn't put out any signal until I connected it to a USB port on the Talos II. There are a billion variations of this type and they appear to all perform identically, which is to say not too good. The top image was 1024x768 at 75Hz, the second at 70Hz and the third 640x480 at 60Hz for comparison to the images before. I selected PAL for the greater number of vertical lines which fortunately the VGA2USB3 accepts.

Besides the appalling resolution, which sadly is not unexpected due to the massive downsampling of the video signal, all of these grabs have various additional technical problems. The 75Hz image had the least image distortion but had an obnoxious green cast. However, even though the 70Hz and 60Hz images showed proper colours, these warped the display at the top, and all three refresh rates had occasionally irritating flicker like an old analogue TV set not properly tuned to the right channel. Switching to NTSC mode made no difference. The "NO SIGNAL" colour bars this unit displays were stable except for some dot crawl, so it appears to be something about the VGA conversion itself.

Nevertheless, I went ahead and continued in 1024x768 at 70Hz to approximate the appearance of the internal display. Here's the NeXTSTEP bootloader:

and the boot screen:

and the login screen:

Again, there would be no way to capture these snapshots without an external system, but they're so muddy I might have done better just trying to take a picture of the screen with my mobile phone.

That said, the quality of the composite capture device matters, and it turns out the VGA2USB3 isn't particularly good at composite capture compared to other units. For capturing composite video on my Quad G5 I use a Canopus ADVC-300 over FireWire 400. While the American version of the ADVC-300 is strictly NTSC and it uses a DV-aspect ratio which is not 4:3, it manages to pull out considerably more detail. Here's the initial Hewlett-Packard logo, the NeXTSTEP boot screen and the NeXTSTEP login screen captured from the G5 instead:

This is certainly better, likely due to the ADVC-300's rather more effective comb filter, but the quality is still comparatively dire overall.

The second type of common VGA-to-composite converter is a little more deluxe. These actually have a simple on-screen display "OSD" and options for adjusting screen size and picture, and usually one or two DIP switches to set PAL or NTSC. They emit in S-video, composite and VGA, and are USB or 5V wall-wart powered (don't confuse these with similar devices that convert to VGA and may even be in the same form factor). My initial hope was that you could fiddle with the settings and get a 60Hz picture out of the VGA-out, but it turns out it's just a passthrough.

So, back to CVBS/composite. 75Hz not only had the same green cast that the cheaper box did (suggesting they may have a common designer) but had such an unstable image I'm not going to even bother showing it here. 70Hz was generally functional. Here's PAL grabs on the VGA2USB3.

Surprisingly, the detail level is not appreciably better and in some places looks a little worse, but the colour is less washed out, so I'd call it almost a draw. I then tried NTSC grabs on the ADVC-300 with the G5. This turned out to have an obnoxious issue where the picture juddered badly depending on the vertical size of the image and it reset every time the signal dropped, particularly annoying for grabbing the very first startup screen since you have to quickly adjust the image in the OSD (tip: make it as large as possible and then back down quickly until the picture converges, then turn off the OSD). However, this type of converter also offers S-video with separated luma/chroma for improved image quality, so we'll use that input on the ADVC-300 for these grabs (which the VGA2USB3 does not support).

And a shutdown image, since these are also usually impossible to get without an external capture system:

Although still poor compared to the VGA direct grabs, these are probably the highest quality images we can get from this converter.

Let's conclude with an acid test. Compare these (almost) exactly identical screens of NeXTSTEP and OmniWeb, first with the deluxe box captured by the VGA2USB3 at 72Hz, the ADVC-300 over composite at 72Hz (using the built-in zoom as a comparison), and the ADVC-300 over S-video at 72Hz, and then with the cheap box captured by the VGA2USB3 at 75Hz and 72Hz and then captured by the ADVC-300 at 72Hz:

Then compare those to this direct snapshot of the framebuffer using NeXTSTEP's built-in Grab utility:

Overall, I'd have to say the cheaper box, for all its idiosyncracies, did a better job on detail. Colours are better on the deluxe box, but even with sharpness driven all the way up the lettering is crisper on the cheaper one, and colours are easier to correct in post-processing than messing around with sharpening filters. The cheaper box is also easier to use, and, uh, cheaper. However, the cheaper box also has screen distortion, flicker and artifacting that the deluxe box doesn't, and the best image of all wasn't even taken on the VGA2USB3 itself!

Final word, since I've spent too much money and time on this for the time being: if you know your video source emits 60Hz, then the VGA2USB3 is convenient and works with anything that works with UVC devices, albeit for a significant sticker price. Composite capture is not its strong suit, but it can do both PAL and NTSC which is useful for older systems, and it's handy in a pinch. Plus, it's still working, which is more than I can say for the Video Ghost. On the other hand, if you have a weird old system that doesn't have many compatible video options, it will be little more than a frustrating doorstop, and a pricey one at that. After a little thought we were able to screenshot the apparently unscreenshotable, but with significant compromises in quality, so I'm still in the running for a box that can "just do it" and I guess if I find one it will be a future entry too.

Sunday, April 19, 2020

Inogeni VGA2USB3: screenshots of the unscreenshotable, part II

This is part of a series — you can read prior entries

In our previous entry on screenshots, after the untimely and rapid death of the Video Ghost it was time for another device to try grabbing the "unscreenshotable." After some research, I settled on purchasing an Inogeni VGA2USB3.

The VGA2USB3 is a small, solidly built but fairly pricey unit (mine was about US$260) but has a distinct advantage over the Video Ghost: it's live. In fact, it actually appears to the system as a USB Video Class (UVC) camera, so a huge number of apps on just about every operating system that can run a webcam can view the stream. This was a huge selling point to me personally as my home operating system is ppc64le Linux and I wouldn't need any proprietary drivers. It also has analogue audio and composite (CVBS) inputs, making it potentially a complete system for capturing video instead of just grabs, but it's strictly USB 3.0 due to the bandwidth required (up to 1920x1200 resolution at 60Hz).

Initially, however, the device was horribly flaky with my Raptor Talos II workstation. This turned out to be a power problem because the VGA2USB3 apparently draws a lot (and, being built out of sturdy metal, gets rather warm in use). A USB 3.1 hub with a sidecar power supply enabled it to come up stably and be viewable in VLC, GNOME Cheese and guvcview, which is perfect because you can then just record video or take grabs at any point you want. For this test, I decided to use a couple of my SunRay2 laptops because these hardware clients have no means of taking a picture of the screen to local storage. That's exactly the use case I'm aiming for, so let's try the Accutech Gobi 8 first:

This is the Gobi's startup screen and system menu at its full native resolution through its onboard VGA output (actually, the resulting image from VLC on my Talos II is 1920x1200, but pillarboxed with the right aspect ratio). Again, this is not something you would be able to capture from the Gobi itself. On the VGA2USB3, a red LED on the USB 3.0 side glows when connected to power; another LED on the VGA/CVBS side glows when there is a detected signal.

This is the Gobi showing the SunRay "On-Screen Display" as it connects to my local kOpenRay instance on the same Talos II.

And finally playing remote network Tetpnc as provided by kOpenRay. The mouse cursor (the hourglass) is also captured.

This also works for the more recent Tadpole M1400 SunRay, which I attempted to use with the VideoGhost. The M1400 has a different display aspect ratio than the Gobi, hence the visual differences in the kOpenRay Tetpnc session.

The M1400 has its own unique menu interface, shown here.

It also has a very familiar looking built-in web browser. In fact, this is the only SunRay or SunRay2 device I've ever seen that features one.

I also tested it with macOS (ordinarily I would use my G5 or iBook G4, but the USB 3.0 requirement limits it to my MacBook Air) and connected it to my Apple Network Server 500, to date the physically largest computers Apple ever made and the only ones that ran IBM AIX. Probably because of differences in how VLC accesses the capture device on a Mac, the images came out in 1920x1080 despite being 4:3 1024x768 resolution. They were also somewhat shifted to the right, though this might have been something about the video signal. For these images I cropped to the middle 1440x1080.

Booting AIX 4.1, the Apple Network Server's standard OS, in the graphical (CDE) startup configuration. There's a bit of tearing where the boot log (top right) was updating.

CDE login for AIX 4.1. I miss this old AIX logo.

The shift of the signal to the right is more obvious here (the "Starting up" screen just before getting to the CDE desktop). The right border ended up entirely cut off. Testing this on my Talos II to compare the difference isn't feasible because these systems are in different rooms.

Nevertheless, the device clearly demonstrates basic functionality and appears to work for the purpose advertised. So, with this encouraging first effort in the can, I then decided to try where the VideoGhost had failed and connected it to my SAIC Galaxy 1100 (as previously mentioned, the MIL-SPEC luggable version of the HP PA-RISC "Gecko" 9000/712 workstation). As before: nothing appeared. The VGA2USB3 didn't make the distinct odour one gets when the magic smoke is escaping, but VLC remained as in the dark as a politician during COVID-19. It turns out that there are several other issues going on here and they didn't have anything to do with the Sync-on-Green output. But first I need one more piece of equipment ... to be continued.

Tuesday, April 7, 2020

Video Ghost review: screenshots of the unscreenshotable?

Another day, another blog. As many of us vintage enthusiasts are collectors and we want to proudly show off our restorations, with many of our old machines some of the most interesting pictures are the screenshots during bootup before any operating system services are available. (And, of course, on some machines no screenshot facility is available at all.) Similarly, there are many converters that will additionally take composite video and turn it into VGA, useful for 8-bit and 16-bit systems, if only you could just get a grab of the VGA. In my case, since I use Linux on ppc64le, I wanted a device that could grab VGA frames and make them available over USB without special drivers or OS support. The device I settled on to try first was a Keelog VideoGhost VGA Pro, which on each press of its button grabs a frame and stores it to its built-in flash. Theoretically, you can then simply connect the flash like any other USB mass storage unit and copy off the frames. Will it blend? Let's find out.

The VideoGhost comes in three main forms: the basic VideoGhost and the midrange Pro, here in the VGA version with a USB control connection, and the topspec Max that has the video connector, the USB connector and a separate hardware serial port (DE-9). Both the Pro and the Max can be controlled by a serial connection (either a "virtual" COM port over the USB connector or the Max's actual DE-9 serial port) and allow images on demand. Since I wanted images on demand but found the concept of having to have the serial connected to an additional system technically disgusting and not worth the price differential, I went with the Pro. It cost about US$160 shipped.

The "guts" are in the video port dongle. With the cover off we see an Atmel ARM microcontroller which is the brains of the operation. There isn't much space in the dongle, so the exposed leads from the HD-15 VGA are covered in Kapton tape. Flash memory is on the underside of the board.

Also visible on the underside of the mainboard is this lithium battery for the real-time clock. However, the manual says nothing about it being field-replaceable.

In normal operation the VideoGhost works as a passthrough, even if the USB is not plugged in (necessary to power the microcontroller). I won't talk about the potential for spying here because that's not my intended application, but it does make it easier to use with workstations where you just connect it in-line (and possibly with the USB to a regular USB charger if the machine in question doesn't have any available USB ports). However, the Video Ghost only works if a signal is actually being sent through it. This can sometimes be difficult to determine, and usually means you need a monitor hooked up on the other end which is a little inconvenient with laptops.

Configuration and access to the flash is done by putting the Ghost into USB Mass Storage Device mode; the button on the side of the video dongle is held in while the USB is connected. A text file on the flash memory can be edited to set system options or the clock, and the JPEG images on the flash may be read.

I tested this first with my Tadpole M1400 SunRay2 device, which usually emits a 1024x768 VGA image to its external output. For this first run I connected the Ghost to its VGA out and used the M1400's built-in USB for power. The Ghost captured what looked like a 1070x800-ish image with overscan apparently from the vertical blanking interval. It took it several seconds after pushing the button to register and encode the image even with minimal compression, but the image was generally sharp and appeared accurate. (However, there's a reason I'm not showing this image; hang tight.)

I then decided to see how it did with sync-on-green VGA connectors by hooking it up to my NeXTSTEP 3.3 SAIC Galaxy 1100, which is essentially a Hewlett-Packard PA-RISC "Gecko" 9000/712 in a MIL-SPEC portable chassis. I connected this with using a known-good Apple iPhone charger (no USB onboard, natch) and pressed the button. Nothing showed up on the flash, so I connected it again. After a minute or two, however, I started to smell that all-too-familiar odour of burning electronics and after some sniffing around realized with horror it was coming from the Video Ghost. I disconnected everything and plugged it into my workstation to see if it was dead. It was, taking the image from the M1400 along with it. Barely a couple hours of usage!

In fairness this is not what it was sold for, and I don't know if I had simply a defective device, but I will say that the slowness to acquire and the awkwardness of the setup pretty much erase any utility for this specific purpose. I'm sure it's much better in covert environments as befits its design, but as a generic frame grabber after this brief and sorrowful experience I'm forced to conclude that the Video Ghost doesn't cut the mustard and certainly not at its price.

To be continued with something else.

Welcome to your Old VCR

PAUSE a bit in your busy day stuck in FFWD. STOP, dust that old computer off, put in a cassette and press PLAY. If you'd rather REWIND for some of my old stuff, most of the "And Now For Something Completely Different" posts on the TenFourFox Development blog (of which this is a spin-off) should give you fun things to consider.

Wow, the sheer number of VCR puns in this post has got to be a new RECORD.