I made the ROM writable by soldering a CMOS ram chip across the ROM (was it 16KB?) and any write to the ROM would end up in the RAM. A switch selected either the ROM or RAM to read from. On startup simply copy the ROM to the RAM and flip the switch.
After this operation, using 'The Spectrum ROM disassembly' book the world was your oyster. I modified the ROM routines for reading/writing those little tape drives and bypass copy protection, for experimental purposes of course :)
Decades later, I did (pre-)order and read "The ZX Spectrum ULA", which documents, in painful detail, the inner workings of the custom Ferranti chip that powered most of the Spectrum.
This really did drive home the message that, no matter how much I thought I understood the low-level workings of my Speccy, there were still many lower-level layers left to explore. Which, I guess, is the central lesson of IT...
My greatest sense of accomplishment came from figuring out how floating point arithmetic worked in an 8-bit processor, and then the sin, cos and tan functions.
As an inquisitive young person, you are, quite likely, at some point confronted with something that seems like magic.
If you're truly (or perhaps excessively?) inquisitive, you try to dissect that magic. Sometimes that leads to true understanding, sometimes just to confusion, or at best the understanding that you don't understand.
The "home computers" of the 1980s were still simple enough to allow "true understanding". But only up to some point: I could find my way around a ZX Spectrum memory map just fine, but could I have built such a machine from scratch? No way!
In hindsight, I only understood a very small portion of the technology I was working with, even though that understanding was absolutely mindblowing at the time. Today, that portion would very likely have been "higher up the stack": let's say, I would be an absolute master of the DOM using Javascript, instead of a master of the ZX Spectrum ROM using Z80 assembly.
But would that portion be less "worthy" or less useful? I'm not so sure...
But maybe I'm reading too much into their post.
I'm a dev of 12 years who cut my teeth on assembly and c, i currently write "modern" js and I feel this way, if it's far too complicated for me, it's going to be even worse for a newbie
The built-in BASIC made the Spectrum very accessible. But it was also quite limited, mostly due to being very slow. But: the great thing was, all the machine code that processed said BASIC was right there, in the ROM, just waiting to be examined.
I still remember disassembling the machine code responsible for handling the "LOAD" and "SAVE" commands, which were an interface between memory and the tape deck (the only long-term storage available). It was surprisingly small and elegant, and easily modified to perform certain tricks, such as varying the baud rate of the cassette interface, the order in which bytes were loaded (allowing for cool effects like "the screen is populated, but not from top-to-bottom, but the other way around), and many other things.
And this was all waaaaay before the Internet, relying on (photocopies of) library books about the Z80 and magazine articles, which arrived late-if-at-all. At some point, I'm pretty sure I had memorized the purpose of every "OS-related" memory location of the Spectrum (all 16384 bytes of it).
The complexity of today's systems makes all of that impossible. But that's mostly nostalgia talking: the capabilities of the Spectrum would be laughed away (and rightfully so) these days.