An un-edited view of Saturn

Something that is kind of annoying about NASA photos is that they end up so touched up, and so many liberties taken with them that they become creatures of their own.

Enter these old CD-ROMs

So I was happy to find this CD-ROM, NASA: Voyagers to the Outer Planets Volume 4: Saturn. It’s great that these are on archive.org, but like all old CD-ROM’s they are not quite ‘ISO CD9660’ enough so they don’t mount on Windows 10, or OS X. So once more again I used Qemu & a raw disk image, xcopying the CD to the disk and using 7zip to extract the disk onto the native filesystem.

Seeing that Voyager 2 was launched in 1977, and didn’t rendezvous with Saturn until 1981, it’s safe to say that the images are not in TIFF, GIF, or anything that modern machines will read. Instead they are compressed with Kris Becker’s implementation of Huffman encoding. Thankfully the source to the compression, and various manipulation tools are included in both C & Fortran. It was not to much work to get the C version to build, and have it detecting a 32bit LittleEndian machine. The program was meant to be run interactively however, so a few small changes had it running command line to let me script decompress the entire image set.

The image formats that it can output to are:

  • SFDU/PDS format.
  • FITS format.
  • VICAR format.
  • Unlabelled binary array.

Which make it sound even less than useful. However ImageMagick does understand the FITS format, so running this at home on a 3Ghz 2006 MacPro took about 10 minutes to decompress and re-encode the images from the CD. Obviously doing this at work on 32cores will be much more faster than 8 cores, although I guess back in ’88 using a VAX-11/780 felt pretty awesome still.

As for the images, they are at surprisingly high resolution 800×800. What struck me about many of the images, is how they show a greater detail in things like the shadows of the rings on Saturn, or even an almost TV like quality to various moon flybys.

And the unexpected over exposures and flares.

But I thought it was an interesting glimpse into these images.

Also these CD-ROMs comprise a highlight selection. Which means for someone more intrepiding than me, there is far more of these raw vintage images out there.

Not having fun with Python/Debian 9.1

Well after my last Star Wars Galaxies adventure, where I tried to run MySQL on Linux Subsystem for Windows v1, I got some weird shared memory error, and it wouldn’t run. Even the old BSDDB engine was bombing out trying to create files. So fine, whatever I thought I could move on, and that is when I found out that somehow OpenSSL & Python had utterly collided.

Python 1.13 (default, Sep 26 2018, 18:42:22)
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/ssl.py", line 98, in <module>
    import _ssl             # if we can't import it, let the error propagate
ImportError: /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1: version `OPENSSL_1_1_0' not found (required by /usr/lib/python2.7/lib-dynload/_ssl.x86_64-linux-gnu.so)
>>>

Well isn’t that great. I tried un-installing & re-installing Python over and over, along with trying to force re-install OpenSSL. No dice.

So what finally got it working for me was to purge OpenSSL.

apt-get purge libssl1.1

And after that it pulled out everything that was using it, well over 500MB of stuff I’d installed. And for good measure I followed up with the autoremove for an additional 384MB of stuff to remove. And then for the final step, of just installing Python:

[email protected]:~# apt-get install python2.7
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  libpython2.7-stdlib libssl1.1
Suggested packages:
  python2.7-doc
The following NEW packages will be installed:
  libpython2.7-stdlib libssl1.1 python2.7
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 3,537 kB of archives.
After this operation, 12.8 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://deb.debian.org/debian stretch/main amd64 libssl1.1 amd64 1.1.0j-1~deb9u1 [1,354 kB]
Get:2 http://deb.debian.org/debian stretch/main amd64 libpython2.7-stdlib amd64 2.7.13-2+deb9u3 [1,897 kB]
Get:3 http://deb.debian.org/debian stretch/main amd64 python2.7 amd64 2.7.13-2+deb9u3 [285 kB]
Fetched 3,537 kB in 0s (13.2 MB/s)
Preconfiguring packages ...
Selecting previously unselected package libssl1.1:amd64.
(Reading database ... 27441 files and directories currently installed.)
Preparing to unpack .../libssl1.1_1.1.0j-1~deb9u1_amd64.deb ...
Unpacking libssl1.1:amd64 (1.1.0j-1~deb9u1) ...
Selecting previously unselected package libpython2.7-stdlib:amd64.
Preparing to unpack .../libpython2.7-stdlib_2.7.13-2+deb9u3_amd64.deb ...
Unpacking libpython2.7-stdlib:amd64 (2.7.13-2+deb9u3) ...
Selecting previously unselected package python2.7.
Preparing to unpack .../python2.7_2.7.13-2+deb9u3_amd64.deb ...
Unpacking python2.7 (2.7.13-2+deb9u3) ...
Processing triggers for mime-support (3.60) ...
Processing triggers for libc-bin (2.24-11+deb9u4) ...
Setting up libssl1.1:amd64 (1.1.0j-1~deb9u1) ...
Processing triggers for man-db (2.7.6.1-2) ...
Setting up libpython2.7-stdlib:amd64 (2.7.13-2+deb9u3) ...
Setting up python2.7 (2.7.13-2+deb9u3) ...
Processing triggers for libc-bin (2.24-11+deb9u4) ...

So now you think its going to be broken right? It’s the same libssl package! I didn’t even run an ‘apt-get update’. And guess what?! You would be wrong.

[email protected]:~# python
Python 2.7.13 (default, Sep 26 2018, 18:42:22)
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>>

That’s right, it’s now working.

Speaking of Picard, I hear there will be a new series, inspiringly named ‘Picard’. Apparently it’s going down the same path as STD, complete with a lack of backers, and merch. I’m hoping it’ll be something watchable, although they certainly cannot afford any of the TNG cast as they apparently have zero budget. Maybe it’ll end up as another ‘Jake Skywalker’ or ‘Not my Picard’. But the bad reboot 25% contractual difference could be the difference between something new, or something so divergent that there was no point in even attempting to be a Trek.

Welcome to 2001: The year the internet was IE 6

The year that the internet stagnated as everything was Internet Explorer 6.

So I went ahead and did it, installed the new version of Edge that uses chronium. Firefox slit it’s own throat trying desperately to suppress Gab’s dissenter plugin, just as Google has done it’s best to prevent ad blockers like AdNauseam.

It’s kind of funny, but Edge doesn’t complain about loading extensions. It isn’t trying to control anything, it ‘just works’. Maybe it’s a side effect of Microsoft playing catch up, and too busy to start policing extensions, and user expandability. I’ve read so many things online about how Word is going to police English grammar into being more PC, so I guess it’s only a matter of time until they decide that user’s can just load whatever 3rd party software they want. There is just too many of these crap walled gardens.

I kind of liked it when there was a more ‘open’ internet, but with the shuttering of YTMND.com, the old internet is gone. Facebook is absolute cancer, and the long reach of Google is just beyond creepy.

I couldn’t imagine using Canary, but Dev seems fine. I guess it’s not old enough for the official Beta yet.

If you feel crazy enough, you can download it here:

https://www.microsoftedgeinsider.com/en-us/download/

Running SWGEmu Core3

You probably don’t want to do this. Unless you enjoy giant empty islands. Maybe you just want to play it on an inaccessible network. Maybe your social anxiety is so bad that you like the idea of playing a MMO alone. It’s probably not a good idea to do this, in that at the end you’ll get bored quickly, but here we go!

Using Ubuntu 16.04 the steps on github.com/TheAnswer/Core3 got me running quick enough. It is rather intense to built, and for the most part it’s pretty easy, although running documentation seems to be … elsewhere. I’m sure it is somewhere, but I have no idea where.

The big thing to do is update the galaxy binding in the mysql database to reflect either the LAN address for local play, or the WAN address if you are natting/hosting on the internet.

mysql -uswgemu -p123456 swgemu -e “update galaxy set address=’192.168.13.128′ where galaxy_id=2;”

And for the heck of it, I thought I’d build swgemu for both 16 (swgemu-binary-Ubuntu_16.04.6_LTS_x86_64.tar.gz) & 18 (swgemu-binary-Ubuntu_18.04.2_LTS_x86_64.tar.gz). Keeping in mind for 18, that mysql was dumped for mariadb, so you need different packages. For a fresh 16 server, it’d go something like this:

apt-get install openssh-server
mkdir /tre
chown swgemu:swgemu /tre
(from a client machine) pscp *tre [email protected]:/tre
apt-get install mysql-server screen libatomic1 libmysqlclient20 liblua5.3-0
tar -zxf swgemu-binary-Ubuntu_16.04.6_LTS_x86_64.tar.gz
cd swgemu
./sqlstuff.sh
mysql -uswgemu -p123456 swgemu -e "update galaxy set address='192.168.13.128' where galaxy_id=2;"

For version Ubuntu 18, you want the package mariadb-server & libmariadbclient18 instead of the mysql versions.

Make sure to set the TrePath!!!
vi conf/config.lua

Run the server, either under screen (./run.sh) or directly ./core3 if everything is going well, the [Core] will come up initialized..

(27 s) [AuctionManager] bazaar Checked 0 auction item(s) and updated 0 item(s)
(27 s) [AuctionManager] Bazaar terminal checks completed in 0ms
(27 s) [AuctionManager] Checking 0 vendor terminals
(27 s) [AuctionManager] vendor Checked 0 auction item(s) and updated 0 item(s)
(27 s) [AuctionManager] Vendor terminal checks completed in 0ms
(27 s) [AuctionManager] loaded auctionsMap of size: 0
(27 s) [FrsManager] ERROR - Unable to initialize frs manager, yavin4 disabled.
(27 s) [StatusServer] initialized
(27 s) [Core] initialized

After that, you can add the new server as a login server from the swgemu launcher, and start it up. By default it will allow anyone to create a user with any password.

self hosted swgemu!

And here we are, all alone.

Running TME on Linux Subsystem for Windows (v1?)

I know in all the trade news everyone is excited that the newest Linux Subsystem for Windows will provide a native kernel. I would imagine it’s going to run along the lines of containers which means using the Hyper-V stuff. So good bye VMWare?

Anyways I want to run SunOS 2.0 which means no graphics are needed, but what I do need is a pty. I’m a n00b so I don’t know how to generate them myself, but I did see that I can piggyback on a ssh session. So first you need to enable & run sshd, which instructions are here, Although with Ubuntu 18.02 LTS there is further steps listed here. If everything is okay, you can SSH into your Windows machine, getting the Linux subsystem.

Some notes on building:

First let’s get the emulator and patches for SunOS 2

wget http://people.csail.mit.edu/fredette/tme/tme-0.8.tar.gz
tar -zxvf tme-0.8.tar.gz
wget http://www.heeltoe.com/download/sun2/diffs-20111125
cd tme-0.8
patch -p1 < ../diffs-20111125

Using GCC 5 or 7 (probably everything post version 3, the -Werror will cause building TME to error out.

I just removed the following block from configure

if test "x$enable_warnings" = "xyes" -a "x$GCC" = "xyes"; then
  CFLAGS="${CFLAGS-} -Wundef -Wall -Werror"
  CXXFLAGS="${CXXFLAGS-} -W"
fi

Now you can run configure & make. I follow the general wisdom, which involves disabling shared libraries. Otherwise you can play with the dynamic linker. Yuck.

sh configure --disable-shared
make

It doesn’t like to build in parallel, so be prepared to wait.

And yes, building fb-xlat-auto.c & fb.c does take a long while. Also make sure to have bison & flex installed.

Using Debian 9/GCC 6.3.0 I do get a bomb compiling module.c

module.c: In function 'tme_module_init':
module.c:93:3: error: 'lt_preloaded_symbols' undeclared (first use in this function)
   LTDL_SET_PRELOADED_SYMBOLS();

In this case I just copy the definition from libltdl/ltdl.h and put it into module.c It’ll complain about it being a duplicate, but it’ll compile. I don’t understand that either.

Now we need to set the variable LTDL_LIBRARY_PATH to pickup the config for each hardware component.

export LTDL_LIBRARY_PATH=$HOME/tme-0.8

Ok and now let’s get ready to install SunOS 2.0

$ mkdir sunos2
cd
cd sunos2/
wget https://web.archive.org/web/20060720001131/http://www.soupwizard.com/sun2/sunos/sunos_2.0_sun2.tar.gz
tar -zxvf sunos_2.0_sun2.tar.gz
mv sunos-2.0-sun2/tape1 .
wget http://people.csail.mit.edu/fredette/tme/sun2-multi-rev-R.bin
perl $HOME/tme-0.8/machine/sun/tme-sun-idprom 2/120 8:0:20:02:02:02 &gt; my-sun2-idprom.bin

Now we can configure the emulator. One thing to take note of is what pts device has been created once you SSH’d into Windows.

$ ls -l /dev/pts/
total 0
crw--w---- 1 jsteve tty  136, 0 May 13 15:08 0
c--------- 1 root   root   5, 2 May 13 10:47 ptmx

So in this case it’s /dev/pts/0 for me, as I’m the first (and only) thing connected.

Now you need to edit the config. This is the one that I’m using:

mainbus0: tme/machine/sun2 multibus my-sun2-idprom.bin
cpu0 at mainbus0: tme/ic/m68010
obio0 at mainbus0 obio: tme/generic/bus size 8MB
obmem0 at mainbus0 obmem: tme/generic/bus size 16MB
ram0 at obmem0 addr 0x0: tme/host/posix/memory ram 4MB
rom0 at obmem0 addr 0xef0000: tme/host/posix/memory rom sun2-multi-rev-R.bin
rom0 at obmem0 addr 0xef8000
clock0 at obio0 addr 0x2800: tme/machine/sun2/clock
tod0 at obio0 addr 0x3800: tme/machine/sun2/tod
zs0 at obio0 addr 0x2000 ipl 6: tme/machine/sun2/zs
mbio0 at mainbus0 mbio: tme/generic/bus size 8MB
mbmem0: tme/generic/bus size 8MB
mainbus0 mbmem at mbmem0 addr 0x00000
sc0 at mbmem0 addr 0x80000 ipl 2: tme/bus/multibus/sun-sc
scsibus0 at sc0: tme/scsi/bus
console0 at zs0 channel A: tme/host/posix/serial device /dev/pts/0 break-carats
sd0 at scsibus0: tme/scsi/disk id 0 type acb4000
disk0 at sd0: tme/host/posix/disk file my-sun2-disk.img
st0 at scsibus0: tme/scsi/tape id 4 type emulex-mt02
tape0 at st0: tme/host/posix/tape
command tape0 load tape1/01  tape1/02  tape1/03  tape1/04  tape1/05 tape1/06  tape1/07  tape1/08  tape1/09  tape1/10
command mainbus0 power up

Now we are almost ready! Create a 1GB disk image with dd:

dd if=/dev/zero of=my-sun2-disk.img bs=1M count=1024

Now we are ready to go. From the ssh connection just type in ‘cat > /dev/pts/0’ and now everything we type in will be on the console. Now from a normal bash session type in ‘$HOME/tme-0.8/tmesh/tmesh SUN2-MULTIBUS’ If everything goes well the bootpromp text will pop up on your SSH session.

SUN-2/120 on Windows!

And if everything has gone right, we are now at the firmware prompt, ready to install SunOS 2.0!

Instructions from retrocomputinggeek.com gives a pretty good walk through of configuring a 1GB disk, and the installation. Although as a hint use the -as flags when booting SunOS for the install. And after booting the miniroot, follow the instructions on heeltoe regarding doing the 1st tape of the install.

>b st()
Boot: st(0,0,0)
Boot: sd(0,0,1)vmunix -as
Size: 368640+57344+66652 bytes
Sun UNIX 4.2 Release 2.0 (GENERIC) #1: Mon May 20 15:32:06 PDT 1985
Copyright (c) 1985 by Sun Microsystems, Inc.
mem = 4096K (0x400000)
avail mem = 3575808
Ethernet address = 8:0:20:2:2:2
sc0 at mbmem 80000 pri 2
sd0 at sc0 slave 0
sd0: <TME1G cyl 14700 alt 2 hd 7 sec 15>
sd1 at sc0 slave 1
st0 at sc0 slave 32
zs0 at virtual eec800 pri 3
pi0 at virtual ee2000
root device? sd0*
using 100 buffers containing 366592 bytes of main memory
#

After that it’s a matter of working out which tar file goes where. Is there even an install process? I just untarred the rest of the tapes in the /usr directory.

For the impatient, tme-0.8-linux-x86_64_bin.tar.gz and
tme-0.8-SunOS-2.0.tar.gz. As always read the 404 page.

Go fly a kite!

Hello Kitty!

Sometimes it’s just worth taking a day off and getting out.

While out, I found this kite lying by the garbage in a bag. Fully assembled, and with a fresh spool. It seemed like a sad loss of a kite. It was a cloudy day, but nice high winds. So I took it out to fly.

This picture is where it just got to the point where it was high enough to get enough lift to fly on it’s own. The winds were so good, that I was able to unspool the kite, and get it high enough that you barely could see it.

Much like retro-computing there can always be senseless fun in other people’s garbage.

Just picked up a sealed copy of Captain Blood!

31 years old!

It’s from Italy, and apparently was originally boxed for the Amiga, and then re-purposed for the Commodore 64. Compared to American ‘big box’ releases of the era, it’s a tiny box. A few of my SIM games are behind, it along with some DVD cases I picked up in China.

29,900 Lira?

I guess the price makes sense if the final exchange rate of the Lira was
1,276:1 USD
back in the winter of 1988, making this copy $23 USD. Although I’m pretty sure when I bought mine I had to pay some $40 CAD. Yay.

I don’t think Captain blood really made it to tape, so it’s really not all that surprising then that this disk version has sat in it’s box for so long. Every time I’d seen anything Commodore in Italy or even the EU it was always tape. Such a shame too, as that means no Infocom.

Normally I wouldn’t even bother with something like this, as I have images for every release there was, but this is a sealed copy. Apparently there is a poster inside of many of the European releases. Although I’m unsure if this one does. It’s been sealed for some 31 years so far. Although it’d make a great poster to frame.

I’ve been trying to clean up the Mega ST I have, but it appears to be dead. Nothing seems to be on the video out, and it’s not lighting up or spinning the disk. I guess this means I’ll need some kind of logic probe. Well after I find my volt meter to see if I’m getting the correct voltage. The Atari doesn’t seem so complicated so I guess an ATX power supply can be rigged to output the 5/12v.

After tracking down the library source, I’ve focused my GCC stuff on version 1.30 as it’s the same base version that was used in the x68000 port, and didn’t suffer from any struct packing that I remember. And of course the never ending stress of day jobs.

I think I’m chasing a struct packing issue

i386 breaking on the AASTINKY texture

On the i386 a texture info lump loads up just fine. However on a big endian G5…

OS X 10.2.8 on the G5 on the same AASTINKY

…It clearly has problems. Although notice that the positions and sizes are the same, as they ought to be.

Notice how originx is 24, which should be the width. This code was running with GCC 1.30/1.40 hammered x68000 GCC. Although I have been unable to get the much vaulted gcc-1.30.atari.tar.bz2 to do anything useful, well until tonight, when I found this file: GNU_HEAD.ARC.

That’s right, it’s the gcc-1.23 release headers for GCC on the Atari ST. Now I know other places people have been saying I should use MINT or some GCC8 port. And I wanted something to run on bare TOS, and I cross compiled the simple Infocom interpreter but it just crashes out after a few commands. It’s hardly stable.

3 bombs and an exit under GCC 8.0

Which is just a damned shame, as it was easier to just download someone else’s work.

Anyways, I now can build the old gcc-1.30 libc however… the linker that I’m using that works for GCC 2 links away and it looks like a working program but it doesn’t do anything. I have a feeling the linker drifted in those years between GCC-1.30 and GCC-2.something when it was adapted. Certainly by the time of 2.5.8. So yet more endian ghosts to chase down if I try to adapt that linker.