CPC ZERO Part 0: Intro, CPU and ROM
Reverse engineering the Amstrad CPC Revision Zero PCB made me wonder exactly what a 6502 based Amstrad would look like. So I have begin a project, which I’m calling the CPC ZERO, to design such a machine. The prototype PCB is so broken that it doesn’t give much of a starting point for a system, …. Read More
Amstrad CPC Revision Zero: Can It Be Fixed?
I think the genesis of the Amstrad CPC is fairly well known among retro enthusiasts: Amstrad hired some guys to design a machine based around the MOS 6502 processor, but the task was beyond them, Alan Sugar said “You’re Fired”, and a new team, headed by Roland Perry, were hired and came up the the …. Read More
Pico Garry 2350 Part 3: CSIGS (Conditional Signals)
This is the third part of my ‘live blogging’ series as I create a replacement gate array for the Amstrad CPC using a Raspberry Pi RP2350B microcontroller. In this part I work on the /CAS, /244EN and /MWE signals. /244EN and /MWE are only asserted during a fixed portion of the gate array cycle and …. Read More
Pico Garry 2350 Part 2: FSIGS (Fixed signals)
This is the second of my development logs as I work to create a replacement for the Amstrad CPC gate array based around a Raspberry Pi RP2350 microcontroller. In the previous article I divided the gate arrays input and output signals into a number of blocks depending on their function. In this article I implement …. Read More
Why Your Amstrad CPC Might Crash in 2104!
Recently I was reading the source code of the firmware routine which updates the system TIME in the Amstrad CPC. This code contains a bug which will eventually crash your machine! Read on for the full gory details! Updating the Timer The TIME counter is a is 32-bit wide integer (four bytes) which is updated …. Read More
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
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
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