While building BBS Basic in Assembler, we had to have an awareness of the external hacking methods of the time. Apple BBS's were routinely being broken into with a CTRL-Y attack. Our communications driver had been coded to watch for anyone attempting to use CTRL-Y on our site and would respond, "Because we CTRL-like you!". Nothing like a wise-guy BBS to discourage a hacker.

What is Assembler??
For those who aren't familiar with Assembler, it's the closest programming language to raw machine code that you can get without coding in raw machine code. Unlike any other language, each and every Assembler command has a direct CPU instruction number (Opcode) that the command represents. The only difference between coding in assembler and coding in machine code is Assembler still uses words or word like text to program with while machine code is completely numbers for commands and parameters. Machine code has the advantage of being able to be placed in memory, value by value, at which point its immediately executable while Assembler code must have its commands "Translated" into the CPU command numbers before it can be executed. The process is considered "Compiling" but it's more like translation where Assembler is concerned.

Assembler is highly specific to the machine and even the CPU. There is no language capable of more computing power and more control over the machine. It's also the only language option available for building hardware-to-software interfaces which is why device drivers and ROMS are written in machine code or assembler. All of that being said, the machine specific nature of assembler has historically made it a bad option due to its cross compatibility issues but we've been working in the same CPU line since the intruduction of the IBM PC and Intel has maintained backward compatibility to all of its earlier instruction sets so a 1984 IBM PC assembler program can still run on a 64 bit i5 or i7 today! So it can be said that Microsofts has had more cross compatibiility issues between QBASIC, VB4, VB6 and then from VB6 to VB.Net and Java has had more cross compatibility issues with Struts and Strusts2 then 80x86 assembler has had in its entire 30+ year history! Very much a reversal of one of the reasons why higher level languages were were built to begin with.

If you learn nothing else about a computer know that EVERYTHING that happens on a computer regardless of how it was written, what technologies are used, what tools are employed, EVERYTHING boils down to machine code Radio Shack Colour Computerinstructions executed by the CPU. Once you've coded in Assembler where efficiencies are measured in nanoseconds,  the inefficiencies of higher level languages is shocking.

I mention this because you would be amazed at the number of times an interviewer has corrected me with, "Our system is written in XXX which is far too powerful for anything like Assembler"

If you’re interested in the topic, I strongly recommend a very pricey book by Kip Irvine called, "Assembly Language for x86 Processors". IF you've never done it before, this will give you a solid foundation and if you have done it before it will reacquaint you with the nuances of the language and instruction set.

The Machine
My first exposure to Assembler was back in 1983 on the Radio Shack Colour Computer which used the Motorola 6809E microprocessor. This was a pseudo 8/16 bit processor very similar to the early Intel 8088 but a good 5 years before the platform found the mainstream.  The machine was nicknamed the "Coco" and was ridiculed in its time for having a "Chicklett" keyboard, so named after the Chicklett candies, a failing that every Macintosh and most Intel laptops are popular for today. Despite the machine's outward reputation, the Coco had it where it counted. Through Assembler the Coco had direct access to its internal UART communications chip, Western Digital 1793 controller chip via the multi-pack interface, the keyboard controller and video display memory.

Me in front of my Color ComputerThe "NEW" old Social Media
Something that was all the rage back in the early 80's were the computer based Social media, Bulletin Boards. There was no canned software for running one of these. If you wanted one, you had to build it yourself. Thus hackers (folks interested in the extreme technical aspects of the hobby) would build BBS's for the technical challenges and the rest of the world would socialize on them in the message boards, forums and online games.

To build one I worked for a little over a year with my hacker buddies in Assembler, building RS-232 (Modem) communications drivers, ASCII Translation algorithms to allow my little Coco to communicate with any form of 8 bit ASCII from normal ASCII and ATASCII to EPSIDIC. I expanded the BASIC programming language by 12 commands and 24 functions to incorporate new BBS specific language features like X-Modem download protocols built into the language, Special security features for intrusion detection and ROM based OS expansions which increased drive speed from 20ms to 5ms (I tried 4ms but lost a FAT so...) simply by removing "wait states" on the drive head. I even wrote a Scrambler/Loader system for piracy protection of our software that would not only make loading a copied version of the system very difficult but utilized a direct interaction with the 1793 controller chip to cause hackers like myself who may be analyzing our loader to wipe out the disk via their own actions.

My Coco was heavily "mod'ed" with RS-232 data LEDs on the front case wired directly to the UART controller chip, a true upper/lowercase text display board, true parallel port wired directly to a piggy-backed PIA controller chip and a complete rewrite of the ROM based disc controller system on another piggy-backed ROM chip connected to a switch to go between original ROM OS and custom Assembler ROM OS.

I got into some 16 bit Assembler on the PC/XT/AT through the late 80's, mostly disassembling and interpreting early viruses like Stoned and Ping Pong so I could code inoculations. But nothing as great as the old Coco days. Recently I've begun re-exploring Assembler in the form of 32/64 bit coding.

As for my old Coco, although I recently and begrudgingly surrendered my Atari ST (Motorola 68000 CPU) and my TRS-80 Model I to the recyclers, the Coco became such a part of our lives that not even my wife (A non-programmer) will let me part with it or anything associated with it. It sits safely in the closet in its original packing styrofoam, in its original radio shack box. All its drives and other goodies are equally nesltled away safe and sound.