It was really interesting, listening to Anders Hejlsberg talking about his 'early history'
My past is, to a degree, somewhat similar – like, I too wrote assemblers/disassemblers, editors (folding!), compilers, and EPROM-blowers for quite a few early machines - like the Z80-based machines that were around at the time (esp. the Tatung Einstein: I used to work for Tatung - a long time ago (Zaks, and Lance Leventhal are your friends (Eeeek, those tomes are still on my bookshelf!)))! Sorry for all of the ((())) there - but most of it took me by surprise!
Back to the scoop: Around about the same time, I also wrote a suite of programs called (imaginatively enough) 'Pete's Utilities' – which worked on all of the CP/M machines around at that time.
The suite included a file-undelete, a utility to program the F? keys - and display their functionality directly (on-screen), via writing directly to the machine's video memory - a TPA utility, …, …, and a program called go.com – of which I'm especially proud: as I consider it to have returned infinite-profit!
Let me explain...
Back then (in the good ol' days), programs like WordStar, Lotus-123 and dBase loaded into the Transient Program Area (TPA) of a machine's memory – which I seem to recall started at 0100H (absolute). However, the resident-part of the OS (if one can call it an OS!) loaded below, and above this TPA area. Hmmmm (see where this is going?)!
Now, if you exited WordStar (say), to (say) copy a file somewhere (using PIP); in order to run WordStar again, you had to re-load it again – which, from five and a quarter-inch single-sided floppies took sometime (believe me – I can still hear the chunk, chunk, chunk – and the smell of coolant)! Of course, you'd also have to have saved your document before exiting WordStar! All in all, a right royal pain in the ****.
Anyway, in CP/M, when you exited a program, the program you'd just been running stayed in memory (located above the 0100H mark) – after all – why zero that memory! So, noticing this, I wrote an assembler-program (all that I knew how to program in then really) that contained absolutely nothing - literally, it had zip in it - and assembled it into go.com.
Now, when you ran go.com, the OS loaded its contents (nothing), and then jumped to the TPA (0100H) to run whatever was just loaded (nothing)! Thus, go.com would re-run whatever was previously loaded in at 0100H – which was WordStar/Lotus-123/dBase etc! Cool!
Now, not only did it work real-quick - you can imagine that to load zero-bytes takes very little time – even from a single-sided five and a quarter-inch floppy - but it restarted apps right where they'd left off – read - intact document/spreadsheet/database and all! Woot!!
I sold go.com (for £5) separately from the rest of 'Pete's Utilities'; and it was quite a success! However, it wasn't long before I had letters (there was no email back then) from, let's call them, 'interested users', about how it all worked!
The most common question was, 'how do you hide go.com's file-size – as it's reported by CP/M as being zero bytes long!?'. I replied that I wasn't hiding go.com's file-size at all - and that it REALLY was zero bytes long! By return post, I then had some heated replies: 'So, you've charged me £5 for nothing - what a rip-off!' Actually, that wasn't the term used – but it was something like that!' Anyway, I replied that I hadn't charged something for nothing at all, and that I'd actually charged £5 for go.com's neat, and original, functionality (insert raspberry-sound just here)!
Anyway, as it sold for £5, and given that it had nothing in it whatsoever, the program was in a way, infinitely profitable! five (pounds) divided by, on a per-byte-written basis (zero) gives you – um, a really big headache!!
Modern day(ish): Years later, when I was telling someone about this in the early MS-DOS days, I was asked to 'prove it'. So, not having a CP/M machine to hand, I recreated it in, I think, MS-DOS 2.11 – and, guess what, it still worked (damn that EXE-file format crap – it screwed up my retirement-fund up something rotten)!
I still have the listings for 'Pete's Utilities' (which, BTW, and for those interested in these things, was developed on a Tatung TPC-2000, and then ported (using Kermit) to the Einstein, and other CP/M machines). I really must dig those listings out sometime, and tell my son all about the good ol' days! Of course, he'll say, 'DAD, just shut up!' God, I feel old!
P.S. Writing about this has got me reminiscing really badly – and, perhaps, if it continues, I'll write something about the other stuff I worked on, back in the times of yore – dual-mode Windows/DOS apps, the Star-Trek (instigated) StarField screensaver I wrote for Windows 1.03, the Pascal compiler I created for DOS 3.00, and WLO (don't ask!), and other stuff, that I've learned to suspect is still in there somewhere – but is being deliberately hidden by my own (now) aged-brain. Well, perhaps it knows best!
Anyway, I hope that you have enjoyed my little trip down memory lane – I know that I have!