Pico Garry 2350 Part 4: Memory Read Select
Following on from the previous part in this series I now turn to /ROMEN and /RAMRD signals, collectively called Memory Read Select. When the CPU wants to read from memory the gate array has to decide whether that read should come from RAM or ROM. This decision is based on the memory bank being accessed …. Read More
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
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
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