History and background
I began programming when I was in school, and I loved electronics and computers, however unfortunately, at that time, those subjects were not widely available. At college, there was only O'Level Computer Science, but no A'Level, and the only subject that was remotely close was Physics because the syllabus contained Operational Amplifiers. Reluctantly I studied it, however, the rest of it such as Newton’s Laws, bored the Hell out of me. Even worse, I had an awful Physics teacher at Carshalton College who provided such a poor quality education that only one person out of a class of 20 ever passed!
The ZX81 was introduced when I was in school, and I remember looking at the advertisements, thinking I would like to have one of those, however, unfortunately, it was very expensive. I did not have Daddy Warbucks to buy it for me, so I got a Saturday job washing cars for a local garage and saved every penny I had until I had enough money to buy the computer. I of course bought the kit version, which was even better. I treated the ZX81 more like a development system because there were many interfacing projects published in the weekly electronics magazines. I had already begun to try a few, by building the circuits and writing the code for it.
In 1993, I found an old 286 PC being disposed of at a local auction called Rosan Auctions on London Road. They would often throw things away in the backyard skip if it did not sell. However, this was ideal for me, as I was able to repair it and use it. There was also a large box full of software disks for the computer, and one of the disks was a "C" compiler! I liked programming in C because it was a language I had played with at King's College University. I had a liking for it and thought it was a far more elegant language compared to Pascal and Basic.
The compiler also allowed one to embed assembly language in-line, which meant I could prototype functions in assembly language, and call them from C. I first experimented with writing interrupt driven graphics functions in assembly language. It usually involved loading register AX with a value, register BX with a value and calling interrupt function 10h to plot a pixel on the screen. This led to writing graphics primitives in assembly and calling them from C. I had a function for a line, square, and circle...
I realised that BIOS service routines were too slow, so I decided to write directly into video memory, and this meant having to learn about stacks and using the special function registers. This led to C++, prototyping and Object Oriented Programming (OOP). I have always been good at learning things up from a book, and I managed to learn a lot on my own from books and did not need anybody showing me anything.