Video: First looks at the Alcon 2020 game on Amstrad CPC


Here’s my ‘straight out of the box’ review of a hardware scrolling and awesome audio solution on an Amstrad CPC via a cartridge and associated adaptor (for Amstrad CPC). All the info is in the CPCWiki topics:


Here’s my video below, what an awesome game and awesome product !

Posted in Alcon 2020 game, CPC 664 | Leave a comment

Video: Ghosts n Goblins game via the RGB2HDMI on Amstrad CPC 464


This video came via a comment on about scrolling in the Ghosts n Goblins game when using the RGB2HDMI adaptor. So take a look and tell me what you think

Posted in CPC 464, RGB2HDMI | Leave a comment

Disassembling my old code part 9 – Assembling the code


This is part 9 of a blog series I’m doing to catalog some of the programs I wrote back in 1988 on the Amstrad CPC 6128, starting with a disc sector editor I wrote called Disced. I’m doing this because I like doing it, it brings back memories of how I started my career with computers back in the 80’s, long before the Internet (as we know it today) or mobile phones.

Below are a list of previous blog posts on this subject.

  • Disassembling my old code part 1 – Getting started with WinAPE
  • Disassembling my old code part 2 – Setting screen mode & Soft 968
  • Disassembling my old code part 3 – Text operations
  • Disassembling my old code part 4 – Set cursor position & disc cache
  • Disassembling my old code part 5 – Get Shift key and set translate
  • Disassembling my old code part 6 – Processing disc activities
  • Disassembling my old code part 7 – Drawing rectangles
  • Disassembling my old code part 8 – Processing HEX in the left pane
  • Disassembling my old code part 9 – Assembling the code <—- you are here

First of all apologies for the delay in updating this series, I’ve been very busy with real work and other things have taken priority. Don’t worry though, if you are following this series I do intend to finish it no matter what it takes and no matter how long it takes, so please be patient. We’ll get there in the end and hopefully both you and I will have learned a few things along the way.

Looking at the code I currently have in Notepad ++ I’m unsure if MAXAM would even let me assemble it in it’s current configuration, it’s been THAT long since I actually assembled any Z80 code that I’m obviously out of touch with it.

I won’t tackle MAXAM today, but I will attempt to make corrections to the current edited code using the built in Assembler in WinAPE. So let’s get started, and this is a good time to see if it would even compile in it’s current unfinished state.

Using the WinAPE Assembler

In WinAPE, click on the Assembler menu option and select Show Assembler F3.

The Assembler window appears, and as we have not used it before it’s blank.

Click on File and load the current version of your saved assembly source code.

Now comes the fun part, as I’m out of practice obviously the current code has some issues. So let’s try and fix that. To start off, click Assemble, then click on Assemble within that drop down menu within the WinAPE Z80 Assembler window, this should highlight any issues it has with the source code.

straight away we can see some problems found, so let’s step through them one by one,

The first problem is in Line 2, and it becomes obvious when you look at how it interprets the website URL. Obviously it doesn’t like the colon, so let’s fix that.

Using the edit ability in the Assembler, move your cursor to the problem and correct the mistake, in my case I changed the URL from to simply

To prove that this has solved it, Assemble the code again. And sure enough after Assembling the code again, the Line 2 – Bad Syntax error is no longer present !

Next we need to find out what is wrong with Line 652 – Undefined Symbol. To speed that up, let’s use CTRL+G to go to the line number 652.

Tip:  You can also double click on the line that has an error in the bottom pane and it will automatically go to that line number in the upper pane.

The remaining errors are all Undefined Symbol so I think (or hope at least) that I can ignore that for now. I can also see that from line 652 on-wards the code appears untouched or unfinished (i.e. it’s the direct dump from my original disassembly and therefore some text has not yet been converted to Ascii.

Running assembled code

For fun I decided to try Assembling the code and then running it. If you click on Run it will Assemble the code first and inject it to the memory space it should be at in this case &9000.

Next, by calling &9000 in the CPC from basic after assembling/run the code,

and pressing enter, it just hung with a blank screen, yikes. I needed to determine what broke it so I compared known good code (by running disced.bas) to my ‘broken’ assembled code.

I placed a RET (C9) before the disk_processing_activities function and that worked fine so i know the hang is caused in the disk_processing_activities function or via something it in turn calls.

To help me figure it out I compared a screenshot of the code in memory from the Assembly attempt (right hand side screenshot), to a known good working disced.bas injected code (left hand side screenshot), there were several differences marked here.

So that leaves me with some minor edits that I can make to the code, the most obvious is 2 remove the 2 added spaces that appear in the code in-front of the Disced title text, so let’s try that. I can also see that the (c) symbol is not showing correctly in the source code.

Here’s the code side-by-side again after I removed the 2 spaces and re-assembled it, at least it now matches up, but again the addresses to some of the other functions is way off, so I need to dig deeper.

At the start of the disk_processing_activities there a mention of initial_cursor_position and that address in the good code was &9626, so I used my comparing trick (take a screenshot of the area with known good code, and then compare that screenshot with the assembled code).

At this point I’m not sure what the issue is, but I can see that everything from &961A is different in the assembled code so I need to look at the source code again.

Looking at it makes it clear where the problems are, after the initial “Exit DISCED Y/N” text, the remaining ‘code’ is gibberish, in other words I haven’t converted it yet to it’s real ‘code’ and/or ‘text’.

We’ll deal with that in the next part, until then, adios !



Posted in assemble, Disassemble, Disced, MAXAM, WinApe | Leave a comment

Video: Resetting a Dandanator after it was loaded with a 512kb game


This video is a direct result of a comment I got where a user (Mark) had problems resetting his Dandanator Mini after it was loaded with the Sword of Ianna. That game uses up the entire 512kb ROM and auto-launches as soon as you start the Amstrad CPC. 

Resetting the Dandanator using the code provided in the ROM Generator software was tricky, in 10 times I tried it, I only got it to reset a few times. It seems that the USB button sometimes works, sometimes not, it’s flakey. I’m not quite sure why it works (or doesn’t work) the way it does, and I don’t think it’s my setup or my USB cable as reprogramming the Dandanator works every time otherwise. This is the only function on the Dandanator software that behaves this way for me.

Hopefully this video helps you to get it working. I also cover how to re-install the Sword of Ianna back on the Dandanator (full 512KB Rom game).

You can download the Sword of Ianna here –

Posted in Dandanator, The Sword Of Ianna | 2 Comments

Video: First looks at the DES (Dandanator Entertainment System) for Amstrad CPC


I’ve been using Dandanators for a few years now and I love them, their simplicity makes loading games very easy. I heard about a competing product called DES which uses the same hardware and software to work with the cartridges, but which is incompatible with the other Dandanators. It’s like they were 2 separate projects.

Anyhow, I ordered and paid for a DES system and it took some time to arrive, when it did I decided to do a video about it, hopefully I covered most aspects.

Some questions to my viewers:

1. What do you think about the product compared to other Dandanators or a DDI5 or an M4 ?

2. What (if anything) would you have changed about it if YOU were marketing/selling the DES ?

also, as a side note Jason Brooks your Dandanator mini makes a guest appearance in this video

Posted in Dandanator, DES | Leave a comment

Video: First looks at the Amstrad SSA 1 for CPC 464


In this video I took a close look at the Amstrad SSA 1 for CPC 464 explaining some of it’s main features.

The Amstrad SSA-1 is a Speech Synthesiser & Stereo Amplifier including speakers but it’s only compatible with the CPC 464.

Here’s the video:

In the video I also referred to the SSA-1 software (a basic file and a BIN file) and you can download that software from a few places such as here. Below is the BASIC listing in full.

10 ssa1%=&FBEE: size%=&1434
20 d%=INP(ssa1%) AND &C0
30 IF d%<>&80 THEN 70
40 OUT ssa1%,4
50 d%=INP(ssa1%) AND &C0 
60 IF d%=0 THEN 80
70 PRINT:PRINT"SSA1 not operational":PRINT:END 
100 PRINT: PRINT "`S``S``A1 Software already installed.`": PRINT
110 |ECHO,0: END
120 IF ERR=28 THEN 140
130 PRINT"Loader terminated: BASIC error";ERR;"at line";ERL: END
160 PRINT "Program length is ";HEX$(size%,4);" Hex"
170 PRINT: PRINT"Enter loading address, or just "
180 LINE INPUT " ENTER for top of memory > "; base$
190 IF LEN(base$)=0 THEN base=HIMEM-size%: GOTO 220
200 base=VAL(base$)
210 IF (base<16384) OR (base>HIMEM-size%-1) THEN PRINT :PRINT"Insufficient memory":GOTO 170
220 CLS: PRINT"Loading...."
230 FOR i=1 TO 5:READ ap(i): NEXT
240 PRINT CHR$(23)+CHR$(0);
250 INK 3,1
260 ORIGIN 320,48
270 DATA 27,7,62,53,4 
280 DATA -1,112,20,116,16,208,40,128,20,116,-36,144,80,144,96,176,120,208,80,224,0,224,-112,192,110,152,88,80,32,0,0,0
290 DATA -120,208,112,268,106,304,100,320,90,334,82,344,74,348,0,350
300 DATA-80,224,72,288,88,304,106,304
310 DATA-32,192,52,208,76,208,96,192,76,176,52,176,32,192
320 DATA-64,80,56,96
330 DATA-120,224,132,232,140,230,142,192,132,128,120,128,108,140
340 DATA-1,290,72,288,-80,144,72,64,999,0
350 side=1 :GOSUB 640:x=54:y=192:GOSUB 700
360 RESTORE 280:x=0
370 side=-1:GOSUB 640:x=-74:y=192:GOSUB 700
380 DATA ap,ap,ap,oy,ap,oy,ap,cy,cy,stop
390 ORIGIN 320,124
400 x=50:y=8:xt=25:yt=4:xb=23:yb=6:onn=20:off=0
410 PRINT CHR$(23)+CHR$(1);
420 xt(1)=xt:yt(1)=yt:xb(1)=xb:yb(1)=yb
430 MEMORY base-1 
440 LOAD "!ssa1.bin",base
470 start=base+(PEEK(base)+PEEK(base+1)*256)
480 CALL start
490 LOCATE 1,23:PRINT"Load complete": INK 3,26
500 READ a$:IF VAL(a$)>0 THEN t=TIME:WHILE t+10*VAL(a$)>TIME:WEND:GOTO 500
510 IF a$="stop"THEN NEW: |SPOFF: END
520 IF UPPER$(a$)="CX" THEN xt=xt-4:xb=xb-4
530 IF UPPER$(a$)="OX" THEN xt=xt+4:xb=xb+4
540 IF UPPER$(a$)="CY" THEN yt=yt-2:yb=yb+8
550 IF UPPER$(a$)="OY" THEN yt=yt+2:yb=yb-8
560 IF a$="ap" THEN GOSUB 720
570 dxt=xt:dxb=xb:dyt=yt:dyb=yb:GOSUB 620
580 IF twoplus THEN dxt=xt(1):dxb=xb(1):dyt=yt(1):dyb=yb(1):GOSUB 620
590 xt(1)=xt:yt(1)=yt:xb(1)=xb:yb(1)=yb
600 twoplus=-1
610 GOTO 500
620 MOVE x,y:DRAW dxt,dyt,3:MOVER -2,0:DRAW -dxt,dyt:MOVER -2,0:DRAW -x,y:DRAW -dxb,dyb:MOVER 2,0:DRAW dxb,dyb:MOVER 2,0:DRAW x,y :RETURN
630 STOP
640 WHILE x<999
650 READ x,y
660 IF x=999 THEN 680
670 IF x<0 THEN MOVE ABS(x)*side,y ELSE DRAW x*side,y,3
680 WEND
700 MOVE x,y:DEG:FOR n=1 TO 360 STEP 10:PLOTR 2*SIN(n),2*COS(n):NEXT n:RAD
720 apoint=apoint+1:|SPOUT,ap(apoint)+128:RETURN
730 |SPOUT,ap(apoint)+64


I then copied the games that were compatible with the SSA-1 to my M4 and tested it.

If you’d like info about setting up an M4 then checkout my blogs below:

First looks at the M4 board for Amstrad CPC

Adding ROMS to the M4 board

Video: Using an M4 board on an Amstrad CPC 464




Posted in Amstrad, M4 board, SSA-1 | Leave a comment

Video: First looks at the RGB2HDMI for Amstrad CPC


I blogged about this new RGB2HDMI card here but now you can watch the video showing it’s features.

Check it out.

Posted in RGB2HDMI | Leave a comment

Video: First looks at the Ultimate CPC MIDI Sound & MIDI Interface Card


I blogged about the Ultimate Midi sound card for Amstrad CPC here, but this post is to point you to a video I uploaded to youtube, take a look and see and hear for yourself how cool this card is !

Posted in Ultimate MIDI | Leave a comment

First looks at the Ultimate CPC MIDI Sound & MIDI Interface Card


I saw a video on an Amstrad CPC facebook group that I thought was rather amazing, in it was an Amstrad CPC 464 with cards connected to the expansion slot and playing back MIDI music brilliantly, it sounded so cool, I knew I had to try one.

This card is the work of Michael Wessel, who truly loves anything MIDI and is a keen fan of the Amstrad CPC. He started out using an Amiga 500 but later progressed to an Amstrad CPC and was disappointed that there weren’t any decent MIDI alternatives for the CPC, so he created one, the Ultimate CPC MIDI card !

To follow his GitHub project see here.

The card is loaded with features and they are listed below.

  • CPC MIDI Soundcard using the S2 GM MIDI Module from Serdashop
  • CPC can send MIDI data over output port &FBEE to the S2
  • MIDI IN and MIDI OUT via Adadfruit Midifeather (standard MIDI DIN sockets)
  • MIDI IN to the CPC: check for new MIDI byte on input port &FBFE and fetch pending byte from buffer via &FBEE
  • MIDI soft through: all incoming MIDI data (from CPC or MIDI IN) can be forwarded / relayed to the MIDI OUT socket (“MIDI SOFT THRU”)
  • CPC MIDI Synthesizer software in machine code (MIDI INPUT demo)
  • CPC GM Drumcomputer software in BASIC (MIDI OUTPUT demo)
  • “Lazy engineering”: MX4 compatible CPC extension board using three sockets, one for the Blue Pill, one for the S2, one for the optional Midifeather.
  • Only one additional chip required – a GAL22V10 programmed as an address decoder. The Blue Bill does not have enough 5V-compatible GPIO ports to do the decoding fully in sofware
  • Everything else is done purely in software – unlike LampdaSpeak, no additional glue logic is required to manage the databus (e.g., no flip flop to latch the databus upon IOWRITE requests, or busdriver to tristate the microcontroller output to the bus upon IOREAD requests). The 72 MHz Blue Pill is fast enough to respond to and manage IO requests and the databus via ISRs (Interupt Service Routines). It was tedious to get the timing of the ISRs right (done by inserting __asm__("nop") at the right spots), but it works flawlessly by now.
  • No extra circuitry for Z80 /WAIT management
  • Low cost – final PCB will be in the 50 to 60 EUR range
  • Very DIY friendly (no SMD, plug and play of standard modules)

The brains in the card which handles MIDI, is the Blue Pill card (plugged into the front of the card, on the right side facing you). On the rear of the card is an S2 sound card which gives great audio output, you can also upgrade to an even better Roland compatible X2 GS sound card but it’s not cheap.

But let’s start getting to know the card and to do that we’ll first test get it plugged into the CPC. For that you’ll need a connector board as it won’t plug in directly to the CPC. You also optionally need a MAXAM rom board to handle the assembly files, more of that later.

Below is the connector board I purchased from Michael, you can find similar ones on ebay.

And here’s my ROM board, complete with a few ROMS including MAXAM 1.5.

Tip. If you are using multiple ROMS only enable the MAXAM during recording as the other ROMS can cause incompatibilities.

Connect everything up so it looks something like this. Note: In the photo below I have not got my MIDI cables connected yet.

There are some additional things you’ll need, for example you’ll want to connect the board up to your speakers, and for that you’ll need a 3.5 inch audio cable and you’ll need USB to MIDI cables to connect to your PC. Lastly, if you want to connect to a MIDI device (like a MIDI keyboard) you’ll need MIDI cables.

Note: Not all MIDI cables are the same, I ordered another one initially (no-name cheap crap) and it produced more problems than it solved, the cables below worked perfectly for me.

Getting connected to your PC

Now that you have the board connected up, you’ll want to verify that it’s talking to the CPC and vice versa. The board comes with 2 DIN sockets, one for MIDI in and one for MIDI out. The corresponding cables need to be connected to your DIN sockets. You’ll also want to get some MIDI capable software to run on your PC. I recommend MIDI-OX which is free for personal use.

Once you’ve downloaded that software, install it, then start it up and connect your USB to MIDI cable to your PC. The MIDI cable doesn’t need any drivers and should be auto-detected by Windows. I’ve tested it on Windows 10 (and Windows 11) with no issues. If you look in device manager you’ll see the MIDI cable show up under Sound, Video and game controllers.

Next, start up MIDI-OX. Click on Options and set the MIDI-in and MIDI-out options to point to your MIDI-USB cable.

At this point if you output some MIDI on the CPC you should see it reflected in the MIDI-OX window.

But let’s start with recording something from the PC to the CPC. To do that, start up MIDI-bar (in C:\Program Files (x86)\MIDIOX\Midibar.exe)

Once again, you’ll need to configure it to point to your MIDI-USB cable by clicking on the circle with dots, then select your USB MIDI Interface from the options available.

Once done, download the following DSK files from Michaels GitHub, I used the following but he keeps updating with more content.

You’ll also want to download some MIDI files to test with. There are some samples on Michaels GitHub.

On the UltMidi3 disc you’ll find a Recorde2.bas file, run it and you’ll see options to record (1), playback (2) and so on. In the short video below I played back a MIDI file using Minibar on the PC and recorded it directly to the CPC, amazing !


After you’ve recorded your MIDI file from the PC to the CPC you can save it for playback. It’s all really awesome.

Connecting a MIDI keyboard

You can also connect up your MIDI keyboard and configure it to output to the MIDI cable (check the Manual for your MIDI keyboard to do so). I set the following two settings on my MIDI keyboard, function 15, 16.

  • 015: Local Off
  • 016: External Clock OFF

With Michaels help we figured out that my Yamaha YP2-230 MIDI keyboard was outputting to channel 1 (using Midi-OX we could see that). So we edited a line in one of his programs to point to that channel instead of the default (channel 0).

The result ?

I could play on the MIDI keyboard and using CPCSynth.bas from the UltMidi.dsk I was able to see that happening in real time on the Amstrad CPC, awesome or what.

If you have access to a 512KB expansion on a 464 (like the DDI5) you can try out the 512 KB MIDI from RAM playback2.bin with EYESKY.DSK demo.


The Ultimate CPC MIDI Sound & MIDI Interface Card is just that, it’s amazing. It gives you options to play MIDI like you’ve never heard it before on your Amstrad CPC either directly through the CPC speaker or via some external speakers. You will be blown away by the sound quality.

That said, you will however need a fair amount of equipment, cables, software and patience to get it all going but the end result is definitely worth it !

I’ll upload a video review of the card to my youtube channel in the coming days, so please stay tuned !




Posted in Ultimate MIDI | Leave a comment

First looks at the RGB2HDMI adapter from Piotr Bugaj


I recently ordered an RGB2HDMI adapter made by Piotr Bugaj via the SellMyRetro website here. The device cost me 55 GBP + another 5 Euro postage. I was excited to test this alternative method of showing Amstrad content on modern monitors as I’ve been using the following method on my LCD for the last few years.

The hardware is based on a publicly available GitHub project called RGBtoHDMI which was originally designed for the BBC Micro but works on many different systems. The hardware runs on a Raspberry Pi Zero W v 1.1.  You can get details about the RGBtoHDMI project here.

When the device arrived it came with an anti static bag, a receipt, no instructions and a DIN 6 cable to connect from the RGB2HDMI adapter to a CPC 464/6128 . There is also a CPC + cable available for purchase from Piotr but I did not get one.

The original for sale post on SellMyRetro says a 5v power supply is required, but basically any USB-A cable with a mini USB-A connector that is connected to 5v output will do.

What it didn’t mention was that you’ll also need a mini-HDMI cable connector to connect up to your LCD or monitor. The mini-HDMI connector is shown in the red box below.

I ordered a mini-HDMI cable that had a DVI connector on the other end which I could connect to my old Dell LCD. I also sourced a USB-A to USB-A mini cable which I’ll use for powering the device by connecting it to a USB-A powered port.

So what’s in the 3D printed box ?

I carefully removed the device from it’s enclosure to get a close look at what it’s made of, you can see it disassembled here. At the bottom of the photo you see the Raspberry Pi Zero W v 1.1 and there are a further two mini boards that sit on top of it.

Both of the other boards belong to the RGBtoHD project, one is a Three/Four level analog RGB/YUV & composite monochrome interface for RGBtoHD, and the other is the RGBtoHD 12 Bit issue 4 board which contains the switches and leds as well as the Xilinx CPLD.

Strangely, none of the boards are branded with Piotr’s usual ZAXON brand.

After connecting everything up and playing with the device, I determined that the three horizontal switches and LED’s on the device work like so. It would be useful if this information was shared with the device in printed format or better yet, 3D printed on the device.

According to the wiki quick start guide the buttons do as follows:

Short press = Call up menu
Long press = toggle scanlines (if available) on/off

Short press = Screen capture (File is written to SD card)
Long press = Toggle NTSC artifact colours on/off

Short press = Enable (if disabled) or refresh genlock
Long press = Calibrate sampling position

When the menu is on screen:

SW1: Select menu option or enter editing mode for the selected parameter
SW2: Cursor Down or increase selected parameter
SW3: Cursor Up of decrease selected parameter

Pressing SW2 and SW3 together will take a screen capture with the menu on screen

A fourth button SW4 can be used to reset the Pi but only if an additional 2 pin header is fitted on the Pi zero.

Connecting the device

To use the device, connect a 5v mini USB-A power cable to the mini USB-A port on the right side under the 5V LED, and connect your mini HDMI cable to the mini HDMI connector. You can see those cables are connected here along with some explanations of what the ports are.

On the left side of the device, is the micro SD card slot where a 4GB card contains the files needed for the solution. On the right side there’s a 6 pin connection slot for a cable supplied with the device, that cable is either for connecting to a CPC or CPC+ model, depending on what you order.

Once you have connected the device it’s time to turn everything on. I connected up an Amstrad CPC 472. I noticed that the borders normally evident on an Amstrad monitor were not present, in other words the text went right to the edge of the screen. You can see that in the photo below.

After some digging around in the settings, I later found out in the configuration where to change that setting, more about that later.

The colours are bright and cheerful, there is little if no noise on the screen, it really looks great.

Using the On Screen Menu

The power of this device is in that it is flexible, and there are lots of settings that you can play with in the on screen menu (OSD). Pressing the first button brings up the menu, and you can then scroll through the settings or change them, it’s very easy to do so and intuitive.

Note: be careful about what you change as you can screw it up, for example I played around with the resolution and after saving the changes and rebooting the Pi, I got no video.  To solve that I had to eject the 4GB mini SD card, mount it on my PC and copy the contents of the default_config.txt to config.txt. You can see those files below.

Remember the no-border I talked about before ? to change that simply bring up the OSD and navigate to Scaling. Mine was set to Auto (Integer/Sharp).

After pressing the menu button and changing that setting to Interpolate Full/Soft I got the Amstrad border look I wanted.

Don’t forget to Save your configuration by selecting Save Configuration. Followed by Return, it’ll inform you that a reboot is needed.

After changing the setting, it looks like this, which is more accurate in terms of an Amstrad display.

Saving screen captures from the CPC

The RGB2HDMI comes with another great feature and that is the ability to take screen captures from the CPC. Below are some screen captures I took, it’s so easy to do and really show’s the power of your CPC.

It’s simple to activate, just press and hold the middle button in for a few seconds when not in the OSD. Once done, you’ll briefly see a message across the screen telling you where it’s saving the screen capture and it’s file name. Check out these sample screen captures, amazing quality !


The RGB2HDMI device is very nice indeed, it’s tiny, and it’s small size hides it’s power. It’s built on well established hardware using a publicly available GitHub project so development will continue for a long time I’m sure. It’s encased in a nicely 3D printed case and the price is OK, considering what you get. Well done Piotr on making this available for the Amstrad CPC and CPC+ computers. Hopefully he’ll read this and include some of my thoughts in the next version.

well that’s my first look at the RGB2HDMI, what do you think of it ?




Posted in Amstrad, RGB2HDMI | 11 Comments