Archives of Genesis8 Amstrad Page from 1999 to 2025 about games, page 27 / 79





Bug hunting on Shinobi for Amstrad CPC by Richard Aplin

-

Richard Aplin is the coder of the Amstrad CPC port (1989) of the arcade game Shinobi (1987). While programming it, he searched for two weeks a rare bug of Shinobi, which he is writing about it on Twitter. With his agreement, here is all the text and screens present on Twitter (screens coming a bit later : more work to do).

Back in the days of 8-bit micros, in this case the Amstrad CPC (a popular - in Europe - Z80-based home computer). I worked for a games company, I was doing a conversion [i.e. rewrite] of Sega's "Shinobi" arcade machine onto this machine.

There were all sorts of geeky, tweaky technical tricks to make it run fast and look nice (coded in assembly language), and all went well, game turned out pretty nice, ran fast and played pretty well, until one day, when nearly done, play testers reported that it occasionally - crashed on one level. Boom! Reset. It was really hard to reproduce.

Nobody could come up with anything they actually _did_ to make it crash (or not); was about one in ~20 times(IIRC), when fighting a boss.

I had nothing fancy like a logic analyzer or in-circuit-emulator or other hardware debugging tools, just a regular retail computer. So it just crashed, once in a while, when playing one specific part of the game.

Sure, just some coding bug, like any other, not uncommon. But WHERE and WHY and HOW!? ..and why so hard to reproduce? You could play for hours and no problem, but just when it seemed like it was a ghost or maybe fixed for no known reason.... BOOM reset.

This went ON and ON and I was utterly mystified. I just could _not_ induce this bug to happen more often [the key to find/fixing it], no matter what I tried, I could not find even a way to reproduce reliably, let alone the root cause.

I started doing stuff like checksumming the RAM every frame, looking for some sort of random corruption, putting all sorts of checks in there that slowed it down to a crawl, and still nothing. The bug seemingly came and went as it pleased, never in quite the same place.

Until one day I got lucky. I caught it in the act! One single byte in the middle of my program code got trashed - and this time I caught it _before_ the whole thing blew up. But how?! What on earth was causing this? [OH for a hardware logic analyzer !

Finally, _finally_, after probably two weeks of solid bug-hunting and hair-tearing I found it.

So back in those days, it was customary for the game's music to be written by someone else, and provided as a binary blob of code plus data (e.g. 4Kbytes) that you would just call once a frame, and it took care of controlling the sound chip and playing whatever music tracks.

And it turned out that the music player (I didn't have source code) had a bug in it. Not a big bug. A teeeeeny little bug. It didn't audibly affect the music at all, but one _single_ note, on one channel, in one of the tunes on one of the levels, used a wrong data byte.

And normally, when that single duff musical note played, nothing bad happened, it was a fairly harmless bug, however it caused music player to read wrong byte of RAM; not just off by one byte, but off by tens of KBytes... in fact, it ended up reading a byte of the display ram.

If I recall correctly, it ended up - at that instant - reading a single byte of the display right around where this green circle is, in the upper left corner.

And when that single bad musical note in the tune played - IF the top bit (and only the top bit) of that pixel was a 1, it would then take that as a memory address ELSEWHERE in RAM and increment that location which corrupted a single byte inside of my program code, leading to a subsequent - but not quite immediate; a couple of seconds later, when a baddie was decided to shoot at you - crash.

This was a 2D scrolling game of course, so you were constantly jumping around and doing stuff fighting ninjas- the crash only happened if ONE pixel of the display was a certain color at the instant that one single note of ONE background tune played, and it wasn't in my code.

I vividly remember finally discovering the root cause (disassembling and patching the music player, and finally catching it 'in the act', and figuring out the long chain of events..) .. To this day I have never had a bug as hard as that one.. was SO rewarding to find.

I've had a bunch of equally obscure bugs in the decades since then, but the tools got so much better - protected memory, logic analyzers, CPUs that don't just explode on contact with bad data - nothing has ever been as difficult to track down as that one. Was a great lesson which is that if you persevere for long enough you will win in the end against a computer - bugs can't hide forever. Ever since then I've known it's just a matter of time, and patience. Nowadays I relish a good bug, I rub my hands and chuckle - the game is ON! ;-).


Youtube video




NOMWARS, an Amstrad CPC game written with 8BP v041 (and more)

-

Jose Javier Garcia Aranda has released a new version of NOMWARS (tape and disk) written with 8BP v41 (8bits de poder : 8bits of power), his RSX library to write Amstrad CPC games in basic and asm.

A physical edition of the game can be bought on Hobby Retro.

You can download 8bp on github.

You can also get SPEDIT v14, an utility to capture sprites from games or pictures made with an utility such as ConnvImgCPC, Martine...

And finally, he is working on a menu application for DES cartridges, to allow easy launching on games installed inside such a cartridge.


Youtube video



Josh, a reflexion and arcade game for Amstrad CPC by Retropoke

-

Josh is a reflexion and arcade Amtrad CPC game by Philippe MOULIN (Retropoke) for the code, Kukulcan for the introduction and game ending, and Rayxamber for the music.

This following description comes directly from CPC Power : between reflexion and d'arcade, Josh will bring you in varied enigmas which aim is to get all fragments of diamonds in a box of the same color to go to the next level. On your road, you will find differents objects which will help you to accomplish your mission and differents ennemies who will want you to loose. Beware you have only one try and any mistake will plunge you in an infinite void.

Retropoke has written many other software for Amstrad CPC this last years, check on CPC-Power.


Youtube video



CHR$(143) by Nicolas JEAN, a tribute to Amstrad CPC 464 CHaRacter$ based games

-

CHR$(143) on Steam by Nicolas JEAN for 3,29 € is a game for windows being a tribute for the Amstrad CPC 464 (user-defined) "CHaRacter$" based games.

Guiding a small group of "agents", you will gradually discover a Lost World, the seemingly simple graphics of which conceal its hidden complexity...

You will learn to move in it, to understand its physical properties, to accumulate sufficient stocks of materials, to build structures, machines and vehicles, to engineer various types of power plants to fullfill your growing needs for energy, and to search, sometimes even in the fog of war, for the enemy that your destiny requires you to defeat...

72 built-in levels + unlockable User Level Editor and (experimental) unlockable LAN Multiplayer Mode.

You can see on Nicolas JEAN's Youtube some videos including ones about level 5 et 6 (spoiler alert).


Youtube video




Jewel Warehouse 2 by EgoTrip, a platform/reflexion game for Amstrad CPC

-

After Jewel Warehouse released in 2016, Egotrop just released its following, simply Jewel Warhouse 2, a platform/reflexion game for Amstrad CPC. It uses the development framework CPCTelera.

There is also a Nintendo DS version Jewel Warehouse.


Youtube video



Gates of Integrity for windows, a remake of Bards Tales by Oliver Lenz

-

Oliver Lenz is the author of the Amstrad CPC emulator for msdos (v0.8a) and windows (v1.02) : Arnimedes.

In May 2020, he finally finished its remake of Bards Tales : Gates of Integrity. Beware it's oldschool, you can save only in the guild.


Youtube video



Puzzle Bobble by Crazy Piri is available for download

-

Crazy Piri has released yesterday its Puzzle Bobble, have fun !

Credits are : Benjamin (OneVision) Yoris for the graphics, Stephane (Shaan) Liuzzi for the sound and Miguel (RedBug) Vanhove for the code. For the loading screen : Cedric (LeZone) Grandemange for the graphics, Alexis (KOOPA) Lambin for the sound and Bruno (Kukulcan) CPCPOWER for the code. Additionnal credits : Julien (Targhan) Nevo for the musical player AKG and Andre Leiradella for the 280 QR code library : qrc1.


Youtube video




Elite the New Kind by Christian Pinder for windows (and other platforms)

-

Elite the New Kind by Christian Pinder is a remake of Elite made by reverse engineering based on the source code of the BBC version of Elite and written in C. This version has been ported to many platforms. For a while it couldnt be available, but since the 30th anniversary of Elite, it's once again available.



PunyInform v3.1 by Fredrik Ramsberg and Johan Berntsson to write text adventure games

-

PunyInform v3.1 by Fredrik Ramsberg and Johan Berntsson is a library written in Inform 6 to create adventure game (pure text, no graphic support contrary to DAAD) using the Z-machine virtual machine which will run on 8bit computers (or more recent computers too). PunyInform has a parser, knowing of common verbs and a framework to write adventure games.

PunyInform is based on the Inform 6 library written by Graham Nelson. Its goal is to make easily adventure games in Inform 6, with a manual describing the differences between the official library and PunyInform..

Games using PunyInform can be compiled in z3, z5 and z8 format (z3 being the best format for 8bit computers, other formats have more features). Compared to the Inform 6 library, it means that there is no support for the Glulx virtual machine but z3 format is important as Inform 6 doesnt support it.

To compile games written with PunyInform, you should use the Inform 6 compiler maintained by David Kinder. Binaries are available on if-archive. PunyInform needs Inform v6.35 (or more).

They are tutorials to write adventure game with PunyInform (end of the page) and all the documentation including a 8 page cheat sheet (quick reference)..

To try your game after compilation, you can use WinFrotz by David Kinder, to create map easily you can use Trizbort.

And finally, to create an Amstrad CPC and PCW disk image, you will have to use the Puddle BuildTools.



PunyInform v3.0 by Fredrik Ramsberg and Johan Berntsson to write text adventure games

-

PunyInform v3.0 by Fredrik Ramsberg and Johan Berntsson is a library written in Inform 6 to create adventure game (pure text, no graphic support contrary to DAAD) using the Z-machine virtual machine which will run on 8bit computers (or more recent computers too). PunyInform has a parser, knowing of common verbs and a framework to write adventure games.

PunyInform is based on the Inform 6 library written by Graham Nelson. Its goal is to make easily adventure games in Inform 6, with a manual describing the differences between the official library and PunyInform..

Games using PunyInform can be compiled in z3, z5 and z8 format (z3 being the best format for 8bit computers, other formats have more features). Compared to the Inform 6 library, it means that there is no support for the Glulx virtual machine but z3 format is important as Inform 6 doesnt support it.

To compile games written with PunyInform, you should use the Inform 6 compiler maintained by David Kinder. Binaries are available on if-archive. PunyInform needs Inform v6.35 (or more).

They are tutorials to write adventure game with PunyInform (end of the page).

To try your game after compilation, you can use WinFrotz by David Kinder, to create map easily you can use Trizbort.

And finally, to create an Amstrad CPC and PCW disk image, you will have to use the Puddle BuildTools.



Sokoban for SymbOS by Prodatron

-

Prodatron has just released an adaptation of Sokoban for SymbOS. This version extends the original game principle with a lot of additional puzzle objects such as coloured boxes, ice floors, holes, portals, rails and magnets.


Youtube video



dMagnetic v0.32, a Magnetic Scrolls emulator by Dettus for various BSD and Linux distributions

-

dMagnetic v0.32 by Dettus is available for several versions of Unix (BSD, Ubuntu, Debian, Gentoo) with ANSI drawing in a terminal. This utility lets you play adventure games by Magnetic Scrolls. The version 0.31 added Apple 2 support (.NIB and .2MG), v0.32 adds Apple 2 .WOZ support and clode cleanup.

The emulator is using the original files of the games for Amstrad CPC, C64, msdos, windows (1991 compilation), .MAG et .GFX files on the magnetic scrolls memorial.



For more news, Go to home page