Back in high school, they had a computer room with clunky terminals and a teletype that were linked to a remote VAX computer. Somewhere around 1983 or so, they started offering afternoon classes where students could learn Basic. I remember a young guy with a long beard teaching us how to press control-c whenever we got in trouble. We were only about five in class.
At that time, your average home computer had specs that you would expect from a severely restricted embedded computer today, like a few KB of RAM or a 1 Mhz CPU that was in charge of the whole system.
But the small size of these systems meant that everything was documented and extensively covered in spiralbound handbooks that you got with the computer.
I eventually knew the 64K memory map of my Apple II inside out and did silly things in machine code like sliding the read-write head of the floppy drive around using the stepper motor, or doing sound sampling and output.
These things were only possible for me, because the Apple II had a built-in assembler which was even documented in the handbook with a full list of 6502 mnemonics and opcodes. As an average 14 year-old, I would never have been able to deduce these concepts like the workings of a stepper motor, or counting processor cycles for timing delay loops using NOP instructions.
My first computer (a Sinclair ZX81) actually used a tape recorder for storage. Luckily the Apple II already had floppy drives. I had a lot of these 5.25" floppies, full of games and programmes of the early 80's. While I kept a few of them for Nostalgia, most of them have gone. But I did keep the data!
I remember one afternoon, after reading the handbook again, wiring the Apple II gameport to the parallel port of my PC. I then wrote an Applesoft Basic program that read out floppy sectors and bit-banged them to a Turbo Pascal program on the PC. By a bit of luck, I had chosen the same sector format that's used by most Apple II emulators today – the images I transfered even boot up!