Some of My History of Hypertext

So in 1979, young Digital Mark is shown a computer, a TRS-80 Model I, by 4th-grade teacher. Other kids play Snake, I hit break and type LIST, seeing BASIC code, because I've been reading the instruction card. "I can read and learn this!" Nothing else now matters to Mark.

That summer, I take an adult college summer course on programming. Over the next few years before I get my Atari 800, I use school computers, mostly TRS-80 but some Apple ][, to program obsessively. Libraries and book stores are scoured for information.

The main sources of knowledge for me then were:

  • Stimulating Simulations, by C. William Engel (1977)
  • Creative Computing magazine, ed. David H. Ahl (1974-85)
  • Basic Computer Games, Microcomputer Edition, by David H. Ahl (1978)
  • some TRS-80 Level II BASIC book
  • My Computer Likes Me When I Speak BASIC, by Bob Albrecht, People's Computer Company (1972)
  • Computer Lib/Dream Machines, by Ted Nelson (1974-5)

The first three I could buy, the last two I only ever found in the library. They are now all on Internet Archive. As noted here a few years ago.

Computer Lib is bizarre rantings mixed with really visionary stuff. It's a two-sided flippy book, pages numbered CL 1-68 one side, DM 1-60 the other). Computer Lib is about how computers work "now" (1965-1974), teletypes talking to mainframes or minicomputers. This is important! There's a range of computing levels.

Ted talks about BASIC and how to use it seriously, using arrays as data structures, in a few pages. Some weird stuff about other languages I haven't heard of. More about data structures, links between data in different places. I'M LIKE TEN YEARS OLD, man, you can't dump that on me! I didn't fully understand this stuff until Sedgewick's Algorithms years later.

Political ranting, some of it now unacceptably phrased, but CYBERCRUD is a good primer on how computers aren't the problem, people with computers are the problem. This echoes the People's Computer Company slogans

BASIC is the People's Language!

Use computers FOR people, not against them!

Dream Machines has a 1975 supplement about the Altair, bitmap graphics, and cheap microcomputers, which largely lines up with Computer Lib's earlier predictions. It goes in depth into how you can use graphics, image and audio processing.

If Computers Are The Wave Of The Future, Displays Are The Surfboard

Branching Presentational Systems - Hypermedia

And here he develops a theory of Hypertext, "by which I mean non-sequential writing". Everything you now know about the World Wide Web and GUIs, you pretty much got by way of Ted Nelson, Doug Englebart of NLS, JCR Licklider of Project MAC (multi-user time-sharing), and Ivan Sutherland of Sketch. I read this wide-eyed and believing everything.

The giant over-arching project for this is XANADU (earworm Olivia Newton-John song here). Xanadu is a very well-specified, complex, solves everything system. Ted's argument is that long-run everyone will use his system for every computation. This starts at DM 44, read that entire section if you read nothing else.

Returning CL/DM must've been the hardest thing ever. I read it again a few times over the years. (I have a stack of notes about it from more recent reading, but I'm here staying brief and focused.)

Over the next decade, we got and then slowly lost things like Hypercard. HC's an amazing technology, it is The Future We Didn't Get, because it was Mac-only, monochrome-only, Hypertalk is a somewhat annoying hybrid of BASIC, COBOL, and C, limited to either tiny windows smaller than the small Mac desktop, or full-screen Mac 512x344. Later that got better, and Myst was written in HC + many addons, but it remained a weird silo.

Repeatedly Ted Nelson says Xanadu is coming soon, shares new technical details which conflict with previous statements, various people on his team promote it, then unpromote it. The exchange in Dr Dobb's Journal 1983 disillusions me, convinces me Xanadu will not be coming soon.

The Internet became available to me in 1989, and Gopher came out in 1991, providing a real hypertext solution. It didn't have inline links, "transclusion" (include a chunk from another document), or bidirectional links, but it did let you make complex menus with text, links, images and other media, and interaction with forms/search fields. Gopher became the best way to hyperlink and index everything.

The WWW was not an attractive system until Mosaic came out in 1993, mid-year it got inline image tags and imagemaps as a dumb hack, and Netscape Navigator commercialized it in 1994. Gopher might've survived this except the UMinn administration tried to extort payments for servers in 1993. I moved everything into my web site, as did everyone else.

The thing is, these are not Xanadu. Ted got increasingly strident that the WWW is not Hypertext because it's not bidirectional etc. But of course this is impossible: A local database can be forced to be consistent, but a network of unreliable computers cannot. One-way works with stupid complexity and GeoCities, and two-way does not. Imagine entering a web page and seeing 500 "sites who called here" links, some of them private. Each of them has to validate that it's paid the micropayment for copyright access to the site. It's not "web scale".

In the end, post 2000, there's a demo "release" of Xanadu, with a hand-hacked single-site database, no editor, no way to link your own stuff with it. It's not anything.

More notes to come, we'll be talking about this more on the Lispy Gopher Climate Show every Tuesday midnight UTC (like 17:00 PST). hashtag

ZX Spectrum Next

Backed this in Sep 2020. After 3.5 years of of antici…




… pation, I finally have my SpecNext release 2!

I don't have it set up in its final location in the living room yet, so it's replaced my side terminal on my desk. Ideally I'd like to have a classic computer hutch desk, medium LCD instead of CRT, and a slightly janky '80s-style plush office chair to recreate the 1984 experience.

The box has a universal power brick with 4 national connectors that lock in, very nice. It doesn't have an HDMI cable, and I had some shenanigans with a bad cable in the wrong storage, but finally found a good one.

Played some baSnake and tried the demos, then down to some BASIC, starting with 10 Print Had to find the charset in the manual, and I always forget ZX BASIC doesn't really need args or parens.

10 PRINT CHR$ (134+INT(RND+0.5)*3);
20 GO TO 10

Playing more stuff from the browser, IT RUNS Z5 FILES NATIVELY!!! Just shove your Infocoms etc. in there and hit Enter. I got a new standard text adventure player!

The keyboard's fine for me, but some people will immediately hook up a PS2 keyboard. The key travel's short but very crisp. The layout's mostly OK, nice big spacebar, but it really should've moved the ;",. keys over to the right, so you have something besides ENTER under your pinky on home keys. I'm perpetually typing off by one column because of this.

In BASIC, there's no shortcut commands like ? or P. for PRINT, which means I'm very very tired of typing PRINT … PRINT … PRINT. But at least it's not like the classic ZX81 keyboard, with keywords on every key. My left pinky is getting a bit worn out from symbol-B for *, symbol-L for =, etc.

Videogame controls are weird:

  • Consoles: normal Joystick/D-Pad/Analog sticks, ^ O X [] buttons.
  • Most 8-bit computers: normal Arrows or HJKL, sometimes IJKL
  • All recent computers: normal WASD
  • Spectrum: unusable QA or 2W up/down, OP or 90 left/right, M to fire. Needless to say, I did NOT beat NextIPEDE with this control scheme.

So I got a knockoff Genesis ("MegaDrive" to some) controller, which has worked perfectly. See Joystick FAQ

Looking into NextBASIC, the manual is fantastic. 318 pages, spacey cover art, super technical. Hundreds of pages on graphics, sound, using the ZXOS. There's a section on IN/OUT ports, registers, a hardware diagram if you want to replace the RasPi module or something. I still need to read more Z80 ASM from another book, but everything short of that is in here.

I've got the real-time clock and wifi working (note: only AP names without spaces!), but haven't figured out how to uplaod/download from it yet. Uh, that's important. I can pop the SD card and get files when I back up, but I'd like to use the wifi.

I have from a couple years ago, quite a bit of a text dungeon game developed on emulator, but I'll rewrite some of the code now with new features (optional LET command! Better loops, locals, and "static"/private vars!), and the graphics now to use tiles at least, or first-person if I'm feeling ambitious.

Haven't even looked at the CP/M core, which I think will be very exciting, having a good CP/M machine in the modern age. I see Gary Kildall on Computer Chronicles every so often and I miss what could've been.

I'm calling it now: Best computer of 2024 is a 28MHz Z80 with 2MiB RAM.

An Atari New Year!

I spent a little time this evening making some fireworks for tomorrow night!

Download, unzip, launch in your favorite Atari 800 emulator, like Atari800MacX

Pick Y from the menu, ESC to end, reboot to get back to the menu. See you in a year!

(I didn't get around to putting an emulator page on my site; I will before my next actual game)

Matrix Rain for Atari

I haven't seen the new movie yet, but I was in a mood to do something this primitive.

  • Nanorogue ATR disk: Download, unzip, load in your Atari 8-bit computer or emulator of choice (Atari800MacX: ⌘D, select this as D1), and reboot (Atari800MacX: sh-F5). Press M. There's probably some way to ESCAPE.

It'll go into attract mode eventually, which I think is cool, add 11 POKE 77,0 to disable it. Or any key that doesn't exit will clear it.

Not any really interesting coding tricks, except I replaced POSITION:? with POKE for speed. I use PEEK(764)=255 and then re-POKE it to test if there's a waiting key, but then use GET to read it in ATASCII instead of scan code.

(updated almost immediately: I realized on XL machines I can turn on accented characters instead of graphics blocks. Take out the POKE 756,204 line if you don't like that.)

(updated 2021-12-24: I made it pour in from random starts, rather than top of screen, looks somewhat more like the old intro.)

ZX SpecNext Emulation

Half a year late, due to pandemic, "brexit", China, and redesign perfectionism (which I appreciate, but it's delaying), delayed from summer '20 into sometime next spring(?), I'm still eager to get my ZX SpecNext. So in the meantime I do emulation.

I'd played a fair bit with a ZX Spectrum emulator, but SpecNext emulation was harder. After a lot of frustration with "CSpect", which is just a pile of C# crash logs, I tried "ZEsarUX" (hereafter "Zesarux") and with a bit of fiddling, it Just Works at emulating SpecNext.

  • Download from github.com/chernandezba/zesarux, install, run. It's unsigned, so macOS security theatre: right-click, Open (do not trash!), cancel, right-click, Open, Trust.
  • Zesarux FAQ
  • F5 for emulator menu
  • Settings, ZX Vision, disable First aid help (bullshit dialogs on every interaction! You can see most of it with F1 or just waiting 10s on a menu option)
  • Settings, General, disable Window Footer (ugly & useless)
  • Back up to Storage, MMC, select tbblue.mmc, enable MMC Emulation, Paging.
  • Back up to Machine, VTrucco/FB Labs, ZX Spectrum Next, TBBlue.
  • Autoconfigure? Yes. Where? Download. I picked 512M, and tbblue-512M.mmc. Configure? Yes. I picked 60hz, x2 scaling; YMMV.
  • Just wait a few seconds, and TBBlue should transition to "Welcome to NextZXOS" (seen above)
  • Now you're at the standard Speccy menu, right-arrow will increase speed to 28MHz, down a couple to NextBASIC
  • Type in a test program, like 10 print"Hello, Mark!" (have to type ^P for ", ^1 for !, it's a Speccy keyboard, but not the one-key ZX80 keyboard), run
  • save"hello.bas" (again ^P someday that'll be wired into my fingers) and cat to make sure it's there.

Sh-1 brings up the Speccy menu.

You'll need to memorize the keyboard layout in F5, Help, or make a little reference card like I did (for another emulator, on Zesarux Esc is Break, the far right-side keys don't do anything).

The MMC file (which is a disk image that holds your files) and .zesarux config are in home dir, which I dislike but I'm not arguing with it at this point. If I mount a FAT SD card, it should read/write that and it'd be easier to move files on and off, but I don't have one I can spare at the moment. Waiting for mail-order or shopping.

Computer Lib/Dream Machines

Someone has finally uploaded a (possibly legal?) copy of to archive:

Read it from either end, there's two coherent books written back-on-back like an Ace Double, happily you don't have to turn your monitor upside down.

The first personal computer book (before the Altair came out!), though the PCC Newsletters predates it (and he mentions them). Fascinating time capsule, political tract about use of computers to control you (CYBERCRUD as he puts it).

Any nitwit can understand computers, and many do.
Unfortunately, due to ridiculous historical circumstances,
computers have been made a mystery to most of the world. And
this situation does not seem to be improving. You hear more
and more about computers, but to most people it's just one big
blur. The people who know about computers often seem unwilling
to explain things or answer your questions. Stereotyped
notions develop about computers operating in fixed ways--and
so confusion increases. The chasm between laymen and computer
people widens fast and dangerously.

This book is a measure of desperation, so serious and abysmal
is the public sense of confusion and ignorance. Anything with
buttons or lights can be palmed off on the layman as a
computer. There are so many different things, and their
differences are so important; yet to the lay public they are
lumped together as "computer stuff," indistinct and beyond
understanding or criticism. It's as if people couldn't tell
apart camera from exposure meter or tripod, or car from truck
or tollbooth. This book is therefore devoted to the premise
that

EVERYBODY SHOULD UNDERSTAND COMPUTERS.

Computers are simply a necessary and enjoyable part of life,
like food and books. Computers are not everything, they are
just an aspect of everything, and not to know this is computer
illiteracy, a silly and dangerous ignorance.

In many ways as relevant as ever. Just because you have a computer or "smart" phone, doesn't mean you know anything about its operation, purpose, and purposes you can put it to. Most people just use them as glorified TV sets and newspapers, mass media delivering people.

Unredacted 1st ed, includes some very… Ted Nelson is a white male born in the 1930s, his language about race and sex are, uh… not acceptable sometimes. Be aware.

Also, cover price $7 in 1974 is $37.61 in 2021, not $120, as Ted currently charges for a photocopy on his website. But at least he managed to publish this, unlike Xanadu which took 50 years to ship nothing.

I have a much longer draft of notes about it, that I'll probably finish up at some point. Now that I can just point you at the original, that gets easier.

Nanorogue2 in BASIC

I've completed my BASIC 10-Liner contest entry, download on itch.io or find the latest version here:

Just shove the disk (.atr) in Atari800MacX or any other compatible Atari 800XL emulator, disable BASIC and hit reset, it should boot up into the launcher:

Where you can read docs or source:

And play the game!

So, the source for my first pass was manually-packed down, and I couldn't really fit everything I wanted in there, or switch to text-graphics mode. With some rethinking, and a better source editing tool, I could… So I wrote a filter program "Basic2List.py" that removes comments & blank lines, joins up everything after a numbered line with colons, lets me insert binary codes with \xFF escapes. It still looks a little dense, because I have to manually use abbreviated statement names or remove spaces, I'd like to make it smart enough about BASIC source to do that itself.

But it lets me turn source like:

5   POKE731,1       // noclick
    GR.1            // 20x20 wide chars, 40x4 regular
    SE.1,13,15      // palette 1 to gold
    W=20            // world size
    DIME$(27),M(W,W)    // E$() encounter table, M() map
    //RRRZZZD$$..........#######>
    E$="\xF2\xF2\xF2\xFA\xFA\xFA\xE4\x04\x04\xAE\xAE\xAE\xAE\xAE\xAE\xAE\xAE\xAE\xAE#######\x3E"
    H=10        // Hit Points
    L=1     // Level
    // G=0      // Gold, default value
    ?"NANOROGUE BY MDHUGHES"

into:

5 POKE731,1:GR.1:SE.1,13,15:W=20:DIME$(27),M(W,W):E$="RRRZZZD$$..........#######>":H=10:L=1:?"NANOROGUE BY MDHUGHES"

(except the RRR... are inverse & graphics chars)

See the Atari BASIC Quick Reference Guide to learn the abbreviations and some of Atari's peculiarities. And it's running in Turbo Basic XL which really helped the program size, so I was able to squeeze in stairs!

Last time I was using the compiler, and that worked but it distorted my sounds, and I couldn't make LAUNCHER.CTB run NANOROG2.CTB! So if I just left them all uncompiled (but tokenized) .BAS files it works fine.

The only down side is it's stuck in easy mode. I'd love to have a difficulty which increases the GP to Level Up, and makes monsters hit harder (but not reward more), but that didn't quite make the cut.

Generally I'm pretty pleased by this!

The ZX Spectrum (non-Next) port is turning out to be hard, it lacks a few things and doesn't have ELSE, either, so I don't know if it can be done.

10-Line BASIC Contest

Let's go back to the 1980s!

So I knocked down a tiny subset of my already tiny BASIC demo program, NANOROGUE, and plan to make 10-line versions for Atari 800 and ZX Spectrum. Getting it running on desktop in Chipmunk BASIC was trivial. Just a little ANSI for screen positioning.

Initially I just used standard Atari BASIC, and that worked fine, if very very tightly packed, and not fast… but the lack of an ELSE statement left me with an 11-line program, I wanted to end with 50 ... :GOTO 20:ELSE:GOTO 20:ENDIF but had to move it to a new line. Very frustrating. So I'm using an enhanced BASIC, which is allowed for the PUR-120 tier, for one command.

Being "compiled" (to bytecode, don't expect miracles) and making AUTORUN.SYS easier than my own utility is nice. TBXL is at least a 1985 tool; though at the time I was using the "official" BASIC XE cartridge instead, which had similar features, and mainly moving over to Action!, 6502 ASM, and C. But for retrocomputing it's fair game.

Making a TBXL executable & bootable disk is a little fussy.

  1. Make a blank floppy ATR (emulator disk format), format it, put Atari DOS 2.5 on it or whatever you like (from DOS 2.5, H to write DOS files). This is your program disk. Like TRON, everything you do will be encoded on it, and losing it will subject you to immediate deresolution.
  2. Turbo BASIC XL disk in D1, program disk in D2. Control menu, Disable BASIC, Cold Reset (Sh-F5). You should see a red load screen, then READY. Check you're in TBXL by typing DIR.
  3. Write your program. I recommend writing BASIC as LST files in a desktop editor, then Cmd-E "Edit an atr disk image", click "Atari/Mac Linefeed Translation", "Import Files From Mac". In BASIC, ENTER "D2:FOO.LST". RUN to test it. But if you like living the '80s lifestyle all the way (or using non-ASCII chars, which are annoying to work with), you can work entirely in TBXL.
  4. Save your program tokenized: SAVE "D2:FOO.BAS"
  5. BRUN "D1:COMPILER.COM", now swap D1 and D2 (Cmd-D, click the swap buttons; you want your program disk in D1!), hit 1, pick FOO.BAS, save as AUTORUN.CTB. Swap disks back (you want your program disk in D2!).
  6. Ctrl-D, J for Ja (yes) to go to DOS-XE. COPY D1:RUNTIME.COM D2:AUTORUN.SYS
  7. Now put your program disk in D1, reset, and it should come right up into your program, then prompt for Dos, Run, or Load when it ends. Nice!


So resuming work on NANOROG, I get:

The only down side is this tiny version has a very slow redraw, it renders the entire screen each move, instead of just fixing last/new positions. I'm pondering changing it to graphics 1 (wide text, 4 colors) and poking screen memory which is probably faster than printing. I made some acceptable bleeps and buzzes with SOUND commands; I'm a poor sound designer, but I get there with some trial and error.

Anyway, next week's task is the ZX Spectrum version. Speccy BASIC is pretty good, so I expect I can knock that out quick and without all these shenanigans.

Textfiles

Looking for VT100 documentation, I found a folder of textfiles VT100 animations, including the classic Bambi vs. Godzilla.

Slightly difficult to watch on any modern computer, so save this script: (works on Mac & other Unix-likes, wtf knows what Windows does for clear and reset.)

Use: % slowblade.py ~/Downloads/bambi_godzila.txt 500

slowblade.py: [update 2022-04-18, stdin for "-"]

#!/usr/bin/env python3

import os, sys, time

def slowblade(f, spd):
    try:
        os.system("clear")
        if f == "-":
            text = sys.stdin.read()
        else:
            text = open(f, encoding='Windows-1252').read()
        for c in text:
            sys.stdout.write(c); sys.stdout.flush()
            time.sleep(1.0/spd)
        print("")
    except (IOError, EOFError):
        pass
    finally:
        os.system("sleep 10; reset")

if __name__ == "__main__":
    if len(sys.argv) == 1: raise Exception("Usage: slowblade.py FILENAME [SPEED (default 100)]")
    else: slowblade(sys.argv[1], int(sys.argv[2]) if len(sys.argv) >= 3 else 100)

Computer Archaeology: Public Caves Discovered!

Exploring the archives of the People's Computer Company (a public timesharing computer center in the early '70s, yes before home computers), and many of the programs we're familiar with from David H. Ahl's Creative Computing come from here. 15 different variations on guess the number and guess a coordinate, sure, but also some really important things, many of them long forgotten.

Then I find this artifact:

pcaves

What the. This is basically a MUD†, from 1973!

Source code (uses a very long TREES library on previous pages).

Everyone knows WUMPUS, which is based on CAVES, but this is the rock star of these! How does everyone not have a copy of PCAVES? This is like finding a working Airwolf helicopter in a cave with ochre handprints on the walls. HOW THE FUCK did cavemen do that? Why don't we all have an Airwolf, if it existed 47 years ago?!

So anyway some barely-modernized version of this will be added to the MysticDungeon soon, you'll all be able to graffiti up a cave!

† more like a MUSH ("Multi-User Shared Hallucination") with one user at a time, specifically.

  • Note: You can play a version from the Narrascope conference 2019: PublicCavesNarrascope
  • Renga in Blue typed it in for the above event, and briefly reviews it as an adventure game. Which it's not, this is a social environment, literally a MUSH.