Is this how Steve learned assembly programming?

  • SpinRite Release Candidate #5 Posted
    Another heads-up for anyone who's interested in remaining current with SpinRite as it moves from pre-release to final v6.1. The DOS executable "SRPR.EXE" now being offered by GRC's pre-release page has been updated to Pre-Release #5. Only one error was found in RC4: When the log exceeded more than 113,359 lines, the oldest lines were not being discarded from the on-screen "scroll-back" buffer. That's fixed in RC5. Otherwise, so far as anyone knows, SpinRite 6.1 is finally ready for the world. This interim FAQ page has pre-release downloading details.
  • Be sure to checkout “Tips & Tricks”
    Dear Guest Visitor → Once you register and log-in:

    This forum does not automatically send notices of new content. So if, for example, you would like to be notified by mail when Steve posts an update to his blog (or of any other specific activity anywhere else), you need to tell the system what to “Watch” for you. Please checkout the “Tips & Tricks” page for details about that... and other tips!


Since Steve learned Assembly long before there was a public InterNET, much less YouTube, I seriously doubt that he used YouTube videos to learn it.
My first step into computers and coding was in 1974 when I started my degree in electrical & electronic engineer at North Staffordshire Polytechnic, UK.

The book for studies was Fundamentals of Digital Systems 1973. I see now that these fetch a good price.

We were not allowed to initially use a language/assembler instead there was a Tutor Computer call Scottie (I think this stood for Stafford College Of Technology Instructional Engine ?? was a long time ago). This was basically a big board with painted outline legends of an 8 bit computer. Accumulator, Output, some registers and some memory locations. The there were sets of switches to set binary values (instruction codes and data) and other switches to to do Load, Save, Shift etc.

We had to set the switches manually and in the correct sequence to perform some basic computer tasks. eg. add two numbers together etc. As I recall some more complex stuff could be done.

Once that was all done along with basic logic (AND, NAND, NOR, NAND NOR Transforms, Karnaugh Maps, Sequential Logic etc.) we were let loose on real programming (if that is what you call it?) These were done on Digital PDP8, HP and other computers, all done with ticker tape or punch cards. Languages were assembler, Basic and Fortran. On the HP you could also directly type your program into a session.

But here is the interesting part which I suspect many of us here really got into to programming. For me this was the Sinclair ZX80 and ZX81. In the US I seem to recall the Altair computer really drove the home/self programming experience. On the Sinclair I got to really learn and do fun stuff with Basic and Z80 Assembler. Later on the Amstrad CPC464 really made life so much better. No more TVs as monitors with RF modulators.

For Z80 assembler the Rodnay Zaks "Programming the Z80" was an affordable and good bible.

The the likes of Acorn and Commodore kit came on the market. The Tandy TRS80 and lots of others.

Ultimately the IBM PC stole the show and this spawn all the other PC makes and models by the likes of Viglen etc.

What I hope the above personal story / path in learning to program, to get into programming, to enjoy and do useful stuff in programming is that there is no "Big Bang" moment for most of us. I has been an educational and fun path when we started and for some later on in their careers became a job and source income. For others they stuck to their day job and just enjoyed doing something different in their leisure time, e.g. programming. Read hobby. And whilst some hobbies based around mainly analogue electronics (e.g. audio, HAM radio, etc) we have seen over the years the infiltration of digital into those once analogue only domains. So audio buffs, HAM radio buffs etc. have broadened their expertise by learning and venturing into the digital world.

Finally (there never is a finally) the affordability of technology (take computers as an example) has opened once closed areas of fun to soooo many. It was not until the ZX80/81 came on the market that I or any other person with limited finances could actually get into programming for real. What was really attractive was that this was a "hands on" and "your own" kit era that sparked no doubt Steve and all the rest of us into programming.
I don't consider myself an assembly language programmer at all, but back at the day I couldn't escape it entirely because I wanted sector access to hard drives. What I learned I got from this book:


Funny thing is, that throughout the book you wrote a very simple disk editor called DiskPatch. Then when I had to decide what to call the tool I eventually wrote I stole the name because I liked it so much. My DiskPatch was mainly PowerBasic with inline assembly for disk access code.

Last edited:
It was not until the ZX80/81 came on the market that I or any other person with limited finances could actually get into programming for real. What was really attractive was that this was a "hands on" and "your own" kit era that sparked no doubt Steve and all the rest of us into programming.
Did you use a cassette tape to store your programs?
Did you use a cassette tape to store your programs?
On the ZX81 yes on a separate tape recorder. When I got the Amstrad CPC464 it was luxury compared to the ZX81. The Amstrad had a proper keyboard, built in tape recorder and a separate monitor. Twas luxury at an affordable price.

With regards to Z80 assembler then like many I used it for game hacks. I'm struggling to remember now but I think my first hack was to relocate a program/game from base machine memory into the extension RAM pack.

What was nice about the Z80 and other processors of that era was their was no segmentation. The memory was a linear address space. When the PC came along and more memory was required things became a little more complicated for assembler programming. The period also saw a big increase in other languages that made the need for assembler less likely. You had decent Basic and then a game changer was Turbo Pascal which unlike Basic which was interpreted, Turbo Pascal compiled to native assembler and was lightning fast.

From then on I was basically hooked on high level languages. In my employment as an analogue engineer when I got involved in custom hardware for monitor and hard disk development test kit then there was an increasing need to marry the analogue and digital worlds. This led to the use of microcontrollers and especially the Intel 8051/8751. Again a nice linear address space to program in. When real "grunt" was required it was the Motorola 68000 that we used. Yet again a nice linear address space.

In the hobby/slowly emerging small company business market in the UK then Sinclair introduced the QL, a Motorola 68000 based machine. I never personally had one but my companies Competitive Analysis and Human Factors departments had several. They also had many other bits of kit e.g. Apple I and II, Amstrad, Commodore, etc.

Today my languages of choice are Visual Basic and Rexx. Rexx is a beautiful language. Easy to learn but also extremely powerful with many large corporate company programs written in Rexx. Neither are assembler/assembly level languages.

When it comes to little electronics/digital as a hobby I now dabble with Arduino kit. Many now use the very successful Raspberry Pie kits. This is a great way for anybody wanting to learn to program for hardware related projects. In the computer world the boring? "Hello World" program was a starting point. With these microcontroller kits your first fun program could be a visual satisfying LED flashing display. From there it is down to one's imagination and in many cases a special need. In my case my next Arduino project will probably be an electronic ignition unit for a 35 year old car for which you can no longer get the ignition control unit. Being a carburettor (4 of them) car then all the Arduino (or other) will have to do is monitor engine crank position (TDC), engine RPM and engine vacuum and from those three input work out when to send a pulse to the ignition coil.
Hi all. I know nothing about current assembly language, and find it quite impressive that @Steve works with it in the modern world. I learned 6502 assembly back in 1985, but that was LONG ago. I've been threatening to buy the following book from Nostarch Press for years, but haven't because I just don't have the time to put into it. But, you all might find it interesting. Nostarch generally puts out some pretty good quality stuff.

Art of Assembly Language, 2nd Edition by Randall Hyde
March 2010, 760 pp.
ISBN-13: 9781593272074

May your bits be stable and your interfaces be fast. :cool: Ron
You had decent Basic and then a game changer was Turbo Pascal which unlike Basic which was interpreted, Turbo Pascal compiled to native assembler and was lightning fast.
I went from the ZX80 to the Coleco*Vision Adam (because it had a letter quality printer). I programmed it in assembler, basic, and Logo. For me the game changer was Turbo C / C++. I currently program in C# for fun.

My mainframe languages were Fortran, IBM S/360 assembler, RPG and of course Cobol.
I started out on a GE-255 time-sharing system, which I dialed into with an acoustic modem from my high school using ASR-33 TTYs. The GE system was at the local university, and we were granted 'free' time on it It ran time-sharing versions of Dartmouth BASIC, FORTRAN, and ALGOL. This was in 1972-1972.

When I went to college in the fall of 1972, I started using the college's Xerox system, which ran ALGOL as its OS. I took courses on COBOL and FORTRAN to run on the mainframe via punched cards. Didn't get access to dial up terminals using ASR-33 TTYs for another year or so. I did a couple of co-op stints at MSFC in Huntsville in 1973 and 1975, which was about the time that the 8080/8085, 6800, 6502, and Z-80 microprocessors came out.

I founded my college's microcomputer club and ran our microcomputer lab as a grad student, 1976-1979. We had Digital Group systems with Z-80, 6800, and 6502 CPU boards, Phi-deck digital tape decks, and 8" floppy drives. The DG systems ran BASIC, and also had native assemblers/debuggers, so I was at home writing and tinkering in assembly language on all those processors as well as writing BASIC programs for the DG systems. I ended up writing the CP/M BIOS for the DG Z-80 system we had, so we could run CP/M on the 8" floppy drives. My master's thesis was on "microprocessor control of a radio amateur repeater system", and ran on a 6802 with PIA and 567 tone decoders to allow TouchTone(r) remote control of the college's radio club's repeater system. That was all done in 6800 assembly.

After leaving college, I worked for a company that made about a million electric typewriters a year, and worked in the product test & assurance organization, programming 8085-based test systems. Assembly and PL/M was the order of the day. I then worked for the then-nascent PC industry, on combo memory, video, and mass storage controller cards for the PC, writing replacement IBMBIO and IBMDOS drivers for those boards, all in assembly.

It wasn't until I started working for what was then the world's largest tape backup drive manufacturer for PC's and compatibles, that I started working in C, first using Lattice C and PMate as a text editor. Our PC's were networked using Arcnet, and we had a Novell server. I spec'ed and installed the network and server. That would be about 1985.

I've been working mainly in C ever since. I still have my K&R C from about then.
My favorite book from that time period was The Elements of Programming Style by Kernighan and Plauger. I still have it.
I also have my Harbinson & Steele from when I became 'Unix-aware' when I started a job in 1990 to port an extensive machine vison library from AMD2900 bit-slice code to C, targeting i960C-core processors, using GCC960, CVS, and EMACS on Sun Sparc systems running 4.13_U1.

Soon after, I started running Linux kernel version 0.99pl14 on a 286-based PC system at home, having paid $2000 for 32MB of RAM. I started with Slack loaded from dozens of 3 1/2" floppies and Yggdrasil from CD-ROM, and later Red Hat CD-ROM and SuSE DVD-ROM distributions. Walnut Creek CD ROMs figured prominently for source code for various tools.
  • Like
Reactions: Barry Wallis