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
Pico Garry 2350 Part 1 – Signals
In 2020 I began a project to emulate the gate array from an Amstrad CPC computer using a Raspberry Pi RP2040 IC (as used in the first generation RPi Pico microcontroller boards). The project ran into challenges due to insufficient GPIO pins on the chips and the need to convert voltage levels for signals between …. 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
Writing a Compiler 3: The Branch Fixup
I left the last article by talking about a bug. Look at this source code: and the IL which is being generated from it: Assignments to a variable are versioned. I.e. every variable reference has a ‘subscript’, which is incremented for every write. So in this example we have %a_0, %a_1, and %a_2, all of …. Read More
Writing a Compiler 2: Conditionals
In part one I showed how my compiler is parsing expressions and converting this into an intermediate language format suitable for optimisation and code generation. The code in part one was purely linear with no branches or loops. In this second article I begin to deal with code which has multiple execution paths. I’ll start …. Read More
Writing a Compiler 1: Expressions and Intermediate Language
Recently I’ve been getting increasingly broody to write a compiler. They’ve always been something of a mystery to me and, while I’ve always fancied writing one, I’ve never had a convincing reason to do so. But, since I’ve returned to retro computing, I can see definite limitations in the options currently available for writing software …. Read More