Over the years I have owned or had in my care many of the early model computers, from simple, little more than calculators right up to full blown serious business computers.
I cannot guarantee this will be correct chronologically because many of them arrived here as repairs for other people
some of them stayed (I was hooked) it is these that I will describe in a little more detail.
This was one of the first home constructed personal computers that used the popular Z80 processor chip.
It first appeared in 1978 as a very crude attempt at getting enthusiasts of the up and coming computer hobby to build their own. This was a pretty basic machine, but with advanced features that showed great promise for future developments. The basic model had just 1K (1024 bytes) of actually usable memory to store programs, a 48 character by 16 line monochrome screen that displayed on an ordinary domestic TV receiver by using a low power TV transmitter on the printed circuit board. It had it's own special keyboard that connected to the main computer board by a ribbon cable.
Program loading and recording was to a conventional cassette tape recorder this was very slow, prone to all kinds of problems with bad tapes and generally very unreliable, but it was a start, you could if you were lucky manage to save the program you has taken hours to type in byte by byte, and get it to work again without re-typing it all.
My first Nascom arrived by way of a friend that repaired these things for people that had taken on the project of building one themselves and not quiet got it right?
(There were quite a few of these)
There was a point where to get a badly built one going would cost more that making a new one, so the inevitable happened, we were left with the dead-ones!
(This was a challenge for me on a hobby basis)
I had been studying logic design for a few years and attained a reasonable understanding of how to design a logic controller, so the step to repairing a faulty one was relatively simple, only problem was learning to think differently about the solution and adopt the software idea instead of the previously well understood hardware one.
Fortunately the Nascom had a very comprehensive monitor program built in that did all the set up at "boot" time, provided the CPU was connected correctly to the RAM and ROM the rest of the hardware could be de-bugged with simple logic probes an oscilloscope and a test meter.
Most of the faults were due to bad soldering, too little,
too much, so a visual inspection often revealed these faults. Then there were the chips in the wrong sockets, or sometimes in the right sockets but the wrong way around, these were easily detected both by visual and blistered finger methods (reversed power made them HOT, very).
In the end, many boards were repaired successfully and inevitably the odd unwanted one stayed...
I was HOOKED
Almost overnight I had turned from a logic engineer to a software engineer. Taming the beast was quite a struggle at the beginning, to get any program loaded first off, one had to type in the Op-codes one by one so one needed to learn them and what they could do, much manual and specification sheet reading was required.
To the newbie these things were quite daunting, so much to remember, but where to start?
|Nascom 1 (picture from www.binarydinosaurs.co.uk/Museum/Nascom/)|
All micro processors use registers to store instructions, these may be discrete registers, or they may be in RAM (external memory) the Z80 has the following registers.
A single 8 bit register for all arithmetic and logical work
F (Flag) register stored results of operations in A
B most significant byte of 16 bit pair BC
C least significant byte of 16 bit pair BC
D most significant byte of 16 bit pair DE
E least significant byte of 16 bit pair DE
H most significant byte of 16 bit pair HL
L least significant byte of 16 bit pair HL
IX first 16 bit Index pointer, IY second 16 bit Index pointer
I special 8 bit register used for INTERRUPT control
Finally two special function registers
SP & PC
SP is the Stack Pointer, used to address an area of memory in the system memory map for use as a temporary store.
PC is the Program Counter, this is not directly addressable by the computer user, it's value is controlled by the code in a program and follows the code position in a program, on an instruction by instruction basis, being set to Zero by a hardware Reset.
Operations on registers
Direct:8 bit (single byte) loads can be performed on
all registers A-L with a 2 byte instruction
<register code><byte value>
16 bit (single word) loads can be performed on
Registers BC,DE, HL & SP
<register pair code><word low><word high>
and on IX or IY with <DD/FD><21><word low><word high>
All the instruction codes that apply to HL can be used on the Index pair IX & IY by adding the prefix byte DD or FD
Indirect:8 bit (single byte) loads only apply to A register
in the 3 byte form <3A><word low><word high>
in this form the A register is loaded with the byte
at the address in memory at <high><low>
8 bit (single byte) stores apply to A register only
in the 3 byte form <32><word low>word high>
in this form the A registers contents are placed
at the address in memory <high><low>
Here was one of the FIRST confusions for the beginner the addressing of the memory location or 16 bit value
to be used is reversed from the conventional
as written thinking.
16 bit (single word) loads apply to register HL (only)
in the form <2A><word low><word high>
16 bit (single word) stores apply to HL (only)
in the form <22><word low><word high>
16 bit (single word) loads apply to BC, DE & SP in the
four byte form <ED><reg LD code><word low><word high>
16 bit (single word) stores apply to BC, DE & SP in the
four byte form <ED><reg STO code><word low><word high>
So the Program Counter (PC) will increment after each instruction by the length of that instruction
(1,2,3 or 4 steps)