Normal Service Will Resume Shortly…

…or, perhaps I should say eventually.

In case you wondered why things are so quiet here at the moment, it’s because a week and a half a go I finally took possession of my new home.  It’s going to be several weeks before I have internet access, and no doubt several more before I can turn my attention from decorating to geekiness!

Rest assured that I will eventually get back to tinkering with FPGAs and all things retro.


Building for multiple targets

One of the challenges I’ve faced in the ZPUDemos project is keeping the various targets up to date.  When I add a peripheral to – for example – the SDBootstrap SOC, I have to modify each and every target’s project file to match, and it’s very easy to lose track of which ones have been updated and which ones haven’t.

ZPUDemos currently supports no fewer than eight different target boards, and contains eleven different projects – that’s a lot of project files!

In an attempt to make this more manageable, I’ve written some scripts to generate project files automatically, from a list of RTL files, and a board-specific template file.  I’ve taken the opportunity to clean up the whole project, too, so the directory structure is more logical. Continue reading

New home for the ZPU

It’s good to be able to report that the upstream ZPU project – and also the toolchain – has officially moved from its previous home to github, so the source for the GCC port can now be found here:\

Better yet, this repo contains the various build fixes needed to compile this old version of GCC on a modern Linux system, so much of my previous “Setting up the toolchain” post is no longer relevant, and has been updated accordingly.

Stopping the Bit Rot

A few people have pointed out to me that the ZPU toolchain is becoming more difficult to build as time goes on.  It’s based around a specific version of GCC and hasn’t been updated in a while, so while technologies used in the build process move on and the incompatibilities that creep in are fixed in the GCC mainline, the ZPU toolchain is left out in the cold.

In an attempt to halt the bitrot, I’ve updated the patch on my “Setting Up the Toolchain” post, which while being workaround-laden rather than an actual fix, should render the toolchain buildable on a more modern Linux distro.

A closer look at the OSD/Control Module

Part 7 – Loading data from SD card.

In this part of the series I’m going to look at the most useful aspect of the control module – using it load data from SD card and pass it to the host core.

To make a meaningful demonstration, the host core needed to be able to do something with the received data, so I’ve pulled in the SDRAM controller and VGA framebuffer from the ZPUDemos project.  What I’ve called the “host core”, the part of the project which the ZPU-based control module is supporting, is now capable of displaying a 640x480x16-bit VGA screen from SDRAM, and as such the project is now quite a bit more complicated; however, the only new file needed by the control module itself is spi.vhd which handles communication with the SD card.
Fileselector Continue reading

A closer look at the OSD/Control Module

Part 6 – resource sharing

So far we have the control module merging an on-screen display with the underlying host core’s video output, responding to keypresses and running a simple on-screen menu. The largest single addition now will be SD card access, which I will explore in the next part. In this part, however, I’m going to talk about resource sharing.

Some cores, like the test-pattern generator we’ve been using so far or the PC-Engine core, make no use of the keyboard or SD card, so giving sole access to the control module is no problem. If, on the other hand, the underlying core does make use of keyboard and SD card (such as the OneChipMSX core, for instance) we need to have some way of arbitrating for access to these resources. Continue reading

880 Gamer issue 5 is out!

Always worth a plug, 880 Gamer is a magazine produced in the style of the half-a-dozen or so glossy news-stand magazines we could choose from back in the Amiga’s heyday.

Distributed as a PDF, it also has two coverdisks in .adf format, and printable labels for each, should you wish to write them to physical disks!

All five issues of 880 gamer produced to date can be found at:

A closer look at the OSD/Control Module

Part 5 – Adding a Menu

Having talked in depth about the hardware in previous parts, in this part I’m going to talk about the software side of things.

I mentioned before that the character ROM contains 128 characters which, from characters 32 upwards, are standard 7-bit ASCII. I’ve added some special characters in the lower 32 character slots, however, which have uses in drawing the OSD. The extra characters are as follows:

  • 0 – 7: solid blocks 7 pixels high, 1 to 8 pixels wide, left aligned in the character cells. Useful for drawing progress bars.
  • 8 – 15: As above but right-aligned within the character cell. May be useful in progress bar applications but I haven’t actually used these yet, so might eventually reassign them.
  • 16 – 19: Arrow heads, pointing right, left, up and down, respectively. (The right arrow is used as a cursor in the menu.)
  • 20: Checkmark
  • 21: Cross
  • 22: Cycle
  • 23: ellipsis
  • 24 – 31: Currently unused

For the OneChipMSX and FPGA PC Engine cores I put together a simple, lightweight data-driven menu system, which can be found in CtrlModule/Firmware/menu.[c|h]


Continue reading