RETROTECHTACULAR: ASCII ART IN THE 19TH CENTURY

I saw this post on hack a day, and oddly enough my old Fortran Snoopy calendar was on there.

And as  a bonus in the comments was a talk on RTTY porn.  Obviously NFSW….  But kind of interesting & funny regarding the preservation of old things.  If the thought of ascii art port from the 1960s, along with some nude pictures from the 1920’s scare you, obviously don’t click.

To me what is crazy is that I can download an entire GIF CD faster today than I could download an image back when this stuff was new and exciting.  But I did have a 2400 baud modem.

Null DooM, GCC 1.39, GO32 and DPMI


phew.

DooM via DJGPP v1 GO32

Around the time of the x68000 port of DooM, I was cutting down the DooM source for a null/portable version.  I never could get it to actually run either using EMX or  DJGPP 1.03, as I couldn’t get it to link to save my life with a constant never ending battle of unresolved symbols. After a while I just used what I had towards the x68000 version and concentrated on getting it up and running, and just shelved the null/portable effort.

Later on I wanted to get it running again as part of messing with another cross compiler, as DooM isn’t a trivial application to port and verify correct operation. And in the process of trying to get the null version to build and run on Windows using TDM GCC, I wanted to make sure it at least kept compiling with GCC v1.x.

Once more again I was able to compile individual files but unable to link.  But this time, I just looked at the diffs for binutils, I thought it should be somewhat easy to get hosted on Windows.  Although versions may point to binutils 1.0, I had to use binutils-1.9.tar.gz even though the diffs are against Mar 24 1991, and the source for 1.9 is dated April 17 1991.

My first effort gave me a linker that would happily link, but go32 would either refuse to run the executable, or just crash.  I was going to give up again, but I found mention in another file that DJGPP actually uses the linker from G++, the C++ compiler which was a separate thing in the late ’80s and early’90’s.  This time it worked, and I could link a trivial hello world style application!

Now that I finally had a cross linker actually working, I didn’t want to compile under emulation, so looking at the other diffs, they didn’t look too extensive. I went ahead ,and took DJGPP v1.06 and patched up the compiler & assembler to get a full cross toolchain.  And in no time, I had a null version of DooM running on MS-DOS well at least tested on DOSBox.

This was fun, and all but I didn’t see any easy way to do fun things like hook interrupts so I could get the keyboard & clock like any good MS-DOS program.  DPMI greatly eased this kind of stuff, so looking at the DJGPP history, DJGPP v1 version 1.10 actually adds preliminary DPMI support!  And in the next version, DPMI was much more better supported, however the binary format had changed from a.out to COFF as part of the move to v1.11. I was able to take the memory, and DPMI portions from the final v1.12 libc, and manually build and run them against the v1.06 library / dev tools.

And much to my surprise, it actually worked!  At least having the wrong format didn’t have any effect on how GO32 worked for me.

So feeling lazy, I snagged some of the support code from Maraakate’s revamp of DooM, just to make sure of the timer code, and the keyboard code, and again verified that I can build with the keyboard & timer ISR and I’m able to play the v1.9 shareware & commercial levels fine.  I haven’t done a thing to clean up or update the DooM source itself against all the dozens of bugs and issues with Ultimate DooM, or other games like Chex Quest etc.

I’m sure 99% of people wouldn’t care but you can download it here:

Win32_DJGPPv1_DooM.7z
Download crossdjgppv1

Although I’m using DPMI to drive realtime events, if I looked further at the GO32 v1.06 environments I could either figure out how it operates it’s timer, or modify the extender directly to drive the PIC timer and keyboard as I need.  But overlooking that, the vintage 1991 software is more than capable of running DooM.

DECUS links to ancient GNU software

Digital Equipment Computer Users’ Society (DECUS), used to put out tapes of interesting things to it’s members.  Back when everyone didn’t have an internet connection, or even if they did a high speed one.

I was looking for stuff where I only had a patch, but not the original files.  So it was great for me to not only dig out an ancient sed from the era, but also bison, and gas.  The ancient binutils are great for people who need to manipulate the a.out format, although the later binutils version 2 supports far more formats by virtue of it’s “BFD” or binary file database or as it was known as back then a ‘big fucking deal’

If you have ancient and or obsolete stuff, GNU stuff can fill the void of the often missing vendor development tools.  It’s crazy how many people sold the tools that kept their systems relevant, although needless to say that attitude pretty much solidified the end of their existence..

The good stuff from 1989 to 1993.

http://www.decuslib.com/decus/lt89a/gnusoftware/
http://www.decuslib.com/decus/lt89b2/gnusoftware/
http://www.decuslib.com/decus/lt90a/gnusoftware/
http://www.decuslib.com/decus/lt90b1/gnusoftware/
http://www.decuslib.com/decus/lt91a/gnusoftware/
http://www.decuslib.com/decus/lt91b/gnusoftware/
http://www.decuslib.com/decus/lt93a/gnusoftware/
It’s not complete, but it’s still fantastic!

 

Sometimes the 80’s never end.

Here is one of the dockets, along with this one that includes images of the complaint.

The age old battle of owning right to SDF Macros redistribution outside of Japan.  It’s a shame that this is dragging on, as Battletech has been seemingly crushed every moment in it’s life, from originally going by Battledroids and having to be renamed care of Lucas co, then buying art assets it turns out that had been sold prior to New harmony gold.

Rumor is that it’s over the robotech movie stuck in development hell.  Which is a double shame as I don’t see it having mass appeal, and the latest Harebrained Schemes game was moving along quite well.

It’s bizzare in a world where making things with Japanese assets is less money than doing realestate and it’s more profitable to go to litigation rather than licensing them.

I wonder if it’s even possible to discuss BattleTech: The Crescent Hawk’s Inception, using the included drawings, and media in this litigious age.

Hsiao & Hunter, Inc.’s GIF News

While trolling through the internet archive I stumbled onto this ‘zine from back in the day, ‘gif news’.  I think it’s kind of interesting in a way, back from the time of dialup BBSes, although later in 1991 it did become available over the internet, but It’s original issue as below was availbale over dialup.  The early collection is here.

Domo Arigato! Thank-You! Gracias! Merci! Sheh-Sheh!

For taking the time to download the first 1990 issue of GIF News. I’d like to wish everyone a happy new year/decade! May the 90’s bring good fortune to everyone who reads GIF News. This issue has articles on: The Eighties, The Colonel’s Bequest, VGA Games, sound cards, and more!

And behold.

 

Of course it is reminiscent of web pages.  Back in the day, various online services wanted this kind of look and feel for news, and in some ways this news paper folio design carries on today.  Although this kind of thing may not have caught on, much like offline readers, everyone wants a live feed.  And we are so lucky living in the iPhone world, when we went from shitty annotated, and cut down websites, to having hand held computers that rival some desktops, but also a significantly fast enough internet connection.

I don’t think I would have bothered trying to setup something like this back in the day, but the barrier for random posts, much like this thanks to things like wordpress sure lowers that barrier, and a random thought can become a post, as easy as 1-2-3!

Setting up an SRX branch office

SRX 210

This is more of a placeholder for now.  Basically I needed a real gateway, with updates new code etc etc.

So as reference a few links

So using that as a starting point let’s cook up a config:

set version 12.1X46-D66.1
set system host-name srx210be
set system time-zone UTC+8
set system root-authentication encrypted-password 50m3th1nG
set system name-server PUBLIC_DNS1
set system name-server PUBLIC_DNS2
set system services ssh
set system services dhcp-local-server group g1 interface ge-0/0/1.0
set system syslog archive size 100k
set system syslog archive files 5
set system syslog user * any emergency
set system syslog file messages any critical
set system syslog file messages authorization info
set system syslog file interactive-commands interactive-commands error
set system ntp server 17.253.84.253
set interfaces ge-0/0/0 unit 0 family inet address PUBLIC_IP/30
set interfaces ge-0/0/1 unit 0 family inet address 192.168.1.1/24
set routing-options static route 0.0.0.0/0 next-hop PUBLIC_GW
set protocols lldp interface ge-0/0/1.0
set security alarms audible
set security alarms potential-violation policy destination-ip
set security alarms potential-violation replay-attacks
set security screen ids-option untrust-screen icmp ping-death
set security screen ids-option untrust-screen ip source-route-option
set security screen ids-option untrust-screen ip tear-drop
set security screen ids-option untrust-screen tcp syn-flood alarm-threshold 1024
set security screen ids-option untrust-screen tcp syn-flood attack-threshold 200
set security screen ids-option untrust-screen tcp syn-flood source-threshold 1024
set security screen ids-option untrust-screen tcp syn-flood destination-threshold 2048
set security screen ids-option untrust-screen tcp syn-flood timeout 20
set security screen ids-option untrust-screen tcp land
set security nat source rule-set trust-to-untrust from zone trust
set security nat source rule-set trust-to-untrust to zone untrust
set security nat source rule-set trust-to-untrust rule source-nat-rule match source-address 0.0.0.0/0
set security nat source rule-set trust-to-untrust rule source-nat-rule then source-nat interface
set security nat static rule-set rs1 from zone untrust
set security nat static rule-set rs1 rule SSH match destination-address PUBLIC_IP/32
set security nat static rule-set rs1 rule SSH match destination-port 2022
set security nat static rule-set rs1 rule SSH then static-nat prefix 192.168.1.5/32
set security nat static rule-set rs1 rule SSH then static-nat prefix mapped-port 22
set security nat static rule-set rs1 rule QuakeWorld match destination-address PUBLIC_IP/32
set security nat static rule-set rs1 rule QuakeWorld match destination-port 27500
set security nat static rule-set rs1 rule QuakeWorld then static-nat prefix 192.168.1.7/32
set security nat static rule-set rs1 rule QuakeWorld then static-nat prefix mapped-port 27500
set security nat static rule-set rs1 rule WEB match destination-address PUBLIC_IP/32
set security nat static rule-set rs1 rule WEB match destination-port 8080
set security nat static rule-set rs1 rule WEB then static-nat prefix 192.168.1.6/32
set security nat static rule-set rs1 rule WEB then static-nat prefix mapped-port 443
set security nat static rule-set rs1 rule HECNet match destination-address PUBLIC_IP/32
set security nat static rule-set rs1 rule HECNet match destination-port 5500
set security nat static rule-set rs1 rule HECNet then static-nat prefix 192.168.1.5/32
set security nat static rule-set rs1 rule HECNet then static-nat prefix mapped-port 5500
set security policies from-zone trust to-zone untrust policy trust-to-untrust match source-address any
set security policies from-zone trust to-zone untrust policy trust-to-untrust match destination-address any
set security policies from-zone trust to-zone untrust policy trust-to-untrust match application any
set security policies from-zone trust to-zone untrust policy trust-to-untrust then permit
set security policies from-zone trust to-zone trust policy trust-to-trust match source-address any
set security policies from-zone trust to-zone trust policy trust-to-trust match destination-address any
set security policies from-zone trust to-zone trust policy trust-to-trust match application any
set security policies from-zone trust to-zone trust policy trust-to-trust then permit
set security policies from-zone untrust to-zone trust policy SSH_Server match source-address any
set security policies from-zone untrust to-zone trust policy SSH_Server match destination-address 192.168.1.5/32
set security policies from-zone untrust to-zone trust policy SSH_Server match application tcp_2022
set security policies from-zone untrust to-zone trust policy SSH_Server match application tcp_22
set security policies from-zone untrust to-zone trust policy SSH_Server then permit
set security policies from-zone untrust to-zone trust policy QuakeWorld match source-address any
set security policies from-zone untrust to-zone trust policy QuakeWorld match destination-address 192.168.1.7/32
set security policies from-zone untrust to-zone trust policy QuakeWorld match application udp_27500
set security policies from-zone untrust to-zone trust policy QuakeWorld then permit
set security policies from-zone untrust to-zone trust policy WebServer match source-address any
set security policies from-zone untrust to-zone trust policy WebServer match destination-address 192.168.1.6/32
set security policies from-zone untrust to-zone trust policy WebServer match application tcp_8080
set security policies from-zone untrust to-zone trust policy WebServer match application tcp_443
set security policies from-zone untrust to-zone trust policy WebServer then permit
set security policies from-zone untrust to-zone trust policy HECNet match source-address any
set security policies from-zone untrust to-zone trust policy HECNet match destination-address 192.168.1.5/32
set security policies from-zone untrust to-zone trust policy HECNet match application udp_5500
set security policies from-zone untrust to-zone trust policy HECNet then permit
set security zones security-zone trust address-book address 192.168.1.7/32 192.168.1.7/32
set security zones security-zone trust address-book address 192.168.1.6/32 192.168.1.6/32
set security zones security-zone trust address-book address 192.168.1.5/32 192.168.1.5/32
set security zones security-zone trust host-inbound-traffic system-services all
set security zones security-zone trust host-inbound-traffic protocols all
set security zones security-zone trust interfaces ge-0/0/1.0
set security zones security-zone untrust interfaces ge-0/0/0.0
set access address-assignment pool dhcp-pool family inet network 192.168.1.0/24
set access address-assignment pool dhcp-pool family inet range range1 low 192.168.1.130
set access address-assignment pool dhcp-pool family inet range range1 high 192.168.1.190
set access address-assignment pool dhcp-pool family inet dhcp-attributes maximum-lease-time 86400
set access address-assignment pool dhcp-pool family inet dhcp-attributes name-server PUBLIC_DNS1
set access address-assignment pool dhcp-pool family inet dhcp-attributes name-server PUBLIC_DNS2
set access address-assignment pool dhcp-pool family inet dhcp-attributes name-server 8.8.8.8
set access address-assignment pool dhcp-pool family inet dhcp-attributes router 192.168.1.1
set applications application tcp_8080 protocol tcp
set applications application tcp_8080 destination-port 8080
set applications application tcp_2022 protocol tcp
set applications application tcp_2022 destination-port 2022
set applications application tcp_22 protocol tcp
set applications application tcp_22 destination-port 22
set applications application udp_27500 protocol udp
set applications application udp_27500 destination-port 27500
set applications application tcp_443 protocol tcp
set applications application tcp_443 destination-port 443
set applications application udp_5500 protocol udp
set applications application udp_5500 destination-port 5500

So let’s go through the mess.

To start, the SRX has a static internet connection, which we are going to NAT our internet traffic out of.  Our home LAN is a simple 192.168.1.0/24 network, and I decided to use both of the gigabit Ethernet ports on the SRX to connect to the WAN and LAN.  If it matters, on the LAN side, I have a gigabit Ethernet switch with all my servers being on a VMWare server which is in turn using LACP.  But that’s neither here nor there, we want to configure the WAN.

I’ll need to walk backwards, but basically you want to configure the physical ports first, although if you have modern enough kit, auto detection will basically ‘work out of the box’.  I don’t need any VLANs for this as I’m not giving anyone external interactive access to anything so I don’t need or care for a traditional DMZ.  I’m trying to keep this one simple.

You will have to initially set a password for the root user, and it is done clear text.  Naturally this isn’t my password, and I hope it isn’t yours either. Also we can go ahead and put in the IP addresses.

set system root-authentication encrypted-password 50m3th1nG
set interfaces ge-0/0/0 unit 0 family inet address PUBLIC_IP/30
set interfaces ge-0/0/1 unit 0 family inet address 192.168.1.1/24
set routing-options static route 0.0.0.0/0 next-hop PUBLIC_GW
set protocols lldp interface ge-0/0/1.0

With this fragment configured, and if your WAN is all working you can now ping out over the internet.  Very simple, right?
root@srx210be> ping 4.2.2.4 count 3
PING 4.2.2.4 (4.2.2.4): 56 data bytes
64 bytes from 4.2.2.4: icmp_seq=0 ttl=57 time=39.556 ms
64 bytes from 4.2.2.4: icmp_seq=1 ttl=57 time=39.501 ms
64 bytes from 4.2.2.4: icmp_seq=2 ttl=57 time=39.314 ms

With basic internet connectivity established it’s time to create some basic rules, and NAT.  The first thing to do is establish some security zones.  As I have imagination they are simply called trust and untrust.
set security zones security-zone trust interfaces ge-0/0/1.0
set security zones security-zone untrust interfaces ge-0/0/0.0

Next I allow all the inbound system services on the trust interface (internal).  In more sophisticated setups you would have a management network that this would sit on that was access restricted, but I’m still trying for that old branch office restricted feel.
set security zones security-zone trust host-inbound-traffic system-services all
set security zones security-zone trust host-inbound-traffic protocols all

Now for the nat statements.  Simple stuff the magic is in the direction
set security nat source rule-set trust-to-untrust from zone trust
set security nat source rule-set trust-to-untrust to zone untrust
set security nat source rule-set trust-to-untrust rule source-nat-rule match source-address 0.0.0.0/0
set security nat source rule-set trust-to-untrust rule source-nat-rule then source-nat interface

And our security policies.  This simply lets anything on the trust network flow between them, say if I add static routes on the SRX to bounce somewhere else it will be needed.  And I’m allowing trust to talk to anything on the untrust network.  Of course you can actually put in a policy that ONLY allows for registered IP space.  Probably the reasonable thing to do later.
set security policies from-zone trust to-zone untrust policy trust-to-untrust match source-address any
set security policies from-zone trust to-zone untrust policy trust-to-untrust match destination-address any
set security policies from-zone trust to-zone untrust policy trust-to-untrust match application any
set security policies from-zone trust to-zone untrust policy trust-to-untrust then permit
set security policies from-zone trust to-zone trust policy trust-to-trust match source-address any
set security policies from-zone trust to-zone trust policy trust-to-trust match destination-address any
set security policies from-zone trust to-zone trust policy trust-to-trust match application any
set security policies from-zone trust to-zone trust policy trust-to-trust then permit

And now you should be able to access the internet from the inside.

Now this is good fun, but what about hosting applications? So say I have this QuakeWorld server, how do I NAT it?

First we have to build a NAT rule. This would also let us put it on a different port, if we needed to, however 27500 is available on both the outside and inside, so the values just match.

set security nat static rule-set rs1 rule QuakeWorld match destination-address PUBLIC_IP/32
set security nat static rule-set rs1 rule QuakeWorld match destination-port 27500
set security nat static rule-set rs1 rule QuakeWorld then static-nat prefix 192.168.1.7/32
set security nat static rule-set rs1 rule QuakeWorld then static-nat prefix mapped-port 27500

Now we need to build a firewall rule. Notice that the destination is the internal private address. If the port were different you need to list BOTH ports in the rule.

set security policies from-zone untrust to-zone trust policy QuakeWorld match source-address any
set security policies from-zone untrust to-zone trust policy QuakeWorld match destination-address 192.168.1.7/32
set security policies from-zone untrust to-zone trust policy QuakeWorld match application udp_27500
set security policies from-zone untrust to-zone trust policy QuakeWorld then permit

We need to build the address book.

set security zones security-zone trust address-book address 192.168.1.7/32 192.168.1.7/32

And finally define the application

set applications application udp_27500 protocol udp
set applications application udp_27500 destination-port 27500

And now we are hosting an application on the internet!

From there I added fun things like DHCP, some basic security features of the SRX. It’s not a great config, but It’ll get you going.

Summer Steam Sales…..

I almost wish I could get this into games…

If you’ve never played Fallout, I’d highly recommend it.  No not that fallout, the old one. The original one.  Although not currently on sale, it is on GOG as well.  As the video mentions though, Fallout 3 was ‘ok’ but kind of un-remarkable.  New Vegas was head and shoulders above, and 4.. well.. it’s best to pretend it never happened.

I guess whatever drama was behind selling the original version has been finally cleared up and it’s everywhere now.

I also thought it was somewhat worth mentioning that You can browse Moby games by system requirements, so you can easily find all the ‘Direct X 3‘, and ‘Direct X 5‘ games.  There never was a Direct X 4.  I did kind of enjoy ‘The Hive‘, although I never had enough time to finish it.  I guess in that sense though it is significant as it is one of the handful of early first Direct X games.

Fallout MS-DOS over Windows 95

There was an MS-DOS version, along with MacOS 7 version, albeit for the PowerPC.  The MacOS version doesn’t run under emulation.  It was later carbonized for early OS X, which again is PowerPC only.  I haven’t tried it on OS X 10.6, the last version of OS X that included Rosetta.

You can find the MS-DOS exe / patches on kaneoheboy.com The GOG version for Mac OS X used to the MS-DOS version in DOSBox, however it’s been updated to the Windows version to use WINE.  On my machine the default launcher for STEAM and GOG don’t work, however the ‘classic’ launcher works fine.  If you get the black screen, then you too have to run the low resolution version.

For whatever reason, my Windows 95 + Direct X 7.0a won’t run Fallout.  Very strange, but the helpful message:

Oh well.