Designing an Intel 8008 Computer. Part 1: Power, Clocks and Signals
The Intel 8008 was the second microprocessor, and the first 8-bit one, as well as being the first microprocessor to go on general sale. It’s an interesting and quirky beast which was constrained by bleeding edge technology and a curious edict from the Intel management. In terms of history, the 8008 was designed under contract …. Read More
Passing Code Pointers as Data in Amstrad CPC BASIC
One of my secret coding pleasures is passing a function as a parameter to a subroutine. Most modern languages have what’s called ‘first class code’. That means that you can assign the address of a function to a variable, store it in an array, and pass it as a parameter to a function. This enables …. Read More
How Amstrad CPC BASIC Compresses Error Messages
Amstrad CPC BASIC saves a few bytes by using some interesting compression in the way it stores error messages. Let’s take a look at how it works and how much space it saves. Below is the table of error messages. The messages are stored in what I refer to as ASCII7 format – bit 7 …. Read More
Comparing Datapoint 2200, 8008, 8080 and Z80 Instruction Sets
Before Intel created the 8080 it designed the 8008, the first eight bit microprocessor, and the first microprocessor to go on general sale. The 8008 was designed as a single chip version of the TTL processor in the Datapoint 2200, itself the first desktop computer. I’ve long known that the Datapoint 2200 had a very …. Read More
Variables, DEF FN Definitions and Arrays Storage in Amstrad CPC/Locomotive BASIC
(The information in this article comes from reverse engineering Amstrad CPC BASIC. You can find the reverse engineered source code in my CPC BASIC source code repository. You can find an example BASIC program which ‘walks’ the storage areas in the Examples folder of that repository. See also the CPC Wiki page for more technical …. Read More
My RetroChallenge 2021/10 Project – Amstrad CPC Firmware
My entry for RetroChallenge 2021/10 is to publish reverse engineered versions of the Amstrad CPC firmware ROMs which can be modified and assembled. In this post I want to explain why why I’m doing this. The first reason is a personal one: I have several projects on the go which would benefit from this. The …. Read More
Understanding the Amstrad CPC Video, RAM and Gate Array Subsystem
The Amstrad CPC is my favourite 8-bit home computer system – I still have my childhood CPC464. There are a number of things I love about it’s design, including the video system, which offers higher resolution and a larger colour palette than most of it’s siblings. Recently I’ve put some effort into understanding how the …. Read More
Couch to 64k Part 5: Adding RAM and a CP/M Compatible Memory Architecture to the Z80 Breadboard Computer
If you’ve been following this series so far then you’ll have a basic Z80 based computer with ROM, an LCD display and a keypad or keyboard. What we don’t have yet is any way store store data. We need to add some RAM (Random Access Memory). This is what I’ll be focusing on in this …. Read More
Couch To 64k Part 4: Adding a Keypad/Keyboard to our Z80 Breadboard Computer
In the previous part of this series we added a character LCD display to our breadboard computer. We discussed how input, output and address decoding works on the Z80, which means we know most of what we need to know to be able to add an input device. In this part we’ll be adding some …. Read More
Couch to 64k Part 3: Adding a Character LCD Display to our Z80 Breadboard Computer
In the previous part of this series we attached a ROM chip to our Z80 so we can run programs. But running programs is of little use unless our computer has some way to communicate with the outside world. We need input and output (I/O). In this part we’ll discuss how input and output work …. Read More