Archives de Genesis8 Amstrad Page de 1999 à 2025 à propos de développement, page 7 sur 20





A la chasse au bug sur la version Amstrad CPC de Shinobi par Richard Aplin

-

Richard Aplin est le développeur du portage Amstrad CPC (1989) de la borne d'arcade Shinobi (1987). Lors de son développement il a cherché durant deux semaines un bug rare de Shinobi, il en parle sur Twitter. Avec sa permission je mets en ligne sur le site tout le texte présent sur Twitter (pour les photos cela va prendre plus de temps).

Pour la traduction du texte ci-dessous, et bien cela prends du temps, donc sous peu.

A l'époque des micros 8bit, dans le cas présent l'Amstrad CPC (à base de Z80 populaire en europe). J'ai travaillé pour une société de jeux, je réécrivais une conversion du jeu d'arcade Shinobi pour l'Amstrad CPC.

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



La ROM Basic v1.1 de l'Amstrad CPC 6128 désassemblée par Bread80

-

Après le désassemblage du firmware Amstrad CPC du 6128, Bread80 a mis en ligne sur github la ROM Basic v1.1 désassemblée de l'Amstrad CPC 6128. Il en parle sur son site web et Twitter.

Pourquoi utiliser un des compilateurs commerciaux du Basic Amstrad CPC quand on peut améliorer sa vitesse à la base ?



SDCC v4.1.0 disponible (programmation en C pour Amstrad CPC) sur PC et MacOS

-

Une nouvelle version du compilateur C multiplateforme SDCC v4.1.0 est disponible depuis le 8 mars 2021 pour windows, linux et MacOS.



NOMWARS, un jeu Amstrad écrit avec 8BP v041 (et plus)

-

Jose Javier Garcia Aranda a sorti son remake de Commando : NOMWARS (cassette et disquette) écrit avec 8BP v41(8bits de poder : 8bits of power), sa librairie RSX pour développer des jeux Amstrad CPC en basic et assembleur.

Une édition physique du jeu peut être acheté sur Hobby Retro.

Vous pouvez télécharger 8bp sur sa page github.

Vous pourrez récupérer également SPEDIT v14, un utilitaire pour capturer des sprites à partir de jeux ou d'images créées avec des outils comme ConvImgCPC, Martine...

Par ailleurs, il prépare un outils de menu pour cartouche DES pour lancer plus facilement les jeux que vous y aurez installé.


Youtube video



RASM v1.6 par Roudoudou, un assembleur multi plate-forme pour Amstrad CPC

-

La dernière version de RASM (v1.6) est sortie le 29 octobre 2021.

Rasm est maintenant disponible sur Github (documentation incluse).

Cet assembleur multi plate-forme (entre autre linux, windows, mais pas que comme MorphOS sur Amiga) permet de programmer pour Amstrad CPC.



PunyInform v3.1 par Fredrik Ramsberg et Johan Berntsson pour écrire des jeux d'aventure texte

-

PunyInform v3.1 par Fredrik Ramsberg et Johan Berntsson est un librairie écrite en langage Inform 6. PunyInform permets de créer des jeux d'aventure (pur texte, pas de support pour des images contrairement à DAAD) utilisant la machine virtuel Z-machine, qui pourront fonctionner sur des ordinateurs 8bit ou plus récents. Il contient un parser, une implémentation de verbes courants, ainsi qu'un framework pour écrire des jeux d'aventure.

PunyInform est basé sur la librairie Inform 6 développée par Graham Nelson. Il est destiné à rendre facile l'écriture de jeux au format Inform 6, un manuel décrit les différences entre les deux librairies.

Les jeux utilisant PunyInform peuvent être compilés au format z3, z5 et z8 (z3 est le plus adapté pour les ordinateurs 8bit, les autres formats ont des fonctionnalités supplémentaires). Comparé à la librairie Inform 6 cela signifie qu'il n'y a pas de support pour la machine virtuelle Glulx mais il y a bien le support du format z3 (que la librairie Inform 6 ne supporte pas).

Pour compiler des jeux utilisant PunyInform, il est recommandé d'utiliser le compilateur Inform 6 maintenu par David Kinder. Les binaires sont disponibles sur if-archive. PunyInform nécessite Inform v6.35 ou plus récent.

Il y a des tutoriels pour écrire des jeux d'aventure avec PunyInform (fin de la page) ainsi que toute la documentation dont une cheat sheet (quick reference) de 8 pages.

Pour essayer votre jeu après sa compilation, vous pouvez utiliser WinFrotz par David Kinder et pour créer une carte de votre jeu il y a Trizbort.

Et enfin pour créer une image disquette pour Amstrad CPC et PCW il vous faudra utiliser Puddle BuildTools.



Les ROMS de l'Amstrad CPC 6128 désassemblées (Firmware et Basic) par Bread80

-

Vu sur CPCWiki, Bread80 a mis en ligne sur github le firmware désassemblé de l'Amstrad CPC 6128 sur github (le basic suivra dans quelques semaines). Il en parle sur son site web et Twitter.

C'est l'occasion d'améliorer le firmware et pourquoi la vitesse du basic !



PunyInform v3.0 par Fredrik Ramsberg et Johan Berntsson pour écrire des jeux d'aventure texte

-

PunyInform v3.0 par Fredrik Ramsberg et Johan Berntsson est un librairie écrite en langage Inform 6. PunyInform permets de créer des jeux d'aventure (pur texte, pas de support pour des images contrairement à DAAD) utilisant la machine virtuel Z-machine, qui pourront fonctionner sur des ordinateurs 8bit ou plus récents. Il contient un parser, une implémentation de verbes courants, ainsi qu'un framework pour écrire des jeux d'aventure.

PunyInform est basé sur la librairie Inform 6 développée par Graham Nelson. Il est destiné à rendre facile l'écriture de jeux au format Inform 6, un manuel décrit les différences entre les deux librairies.

Les jeux utilisant PunyInform peuvent être compilés au format z3, z5 et z8 (z3 est le plus adapté pour les ordinateurs 8bit, les autres formats ont des fonctionnalités supplémentaires). Comparé à la librairie Inform 6 cela signifie qu'il n'y a pas de support pour la machine virtuelle Glulx mais il y a bien le support du format z3 (que la librairie Inform 6 ne supporte pas).

Pour compiler des jeux utilisant PunyInform, il est recommandé d'utiliser le compilateur Inform 6 maintenu par David Kinder. Les binaires sont disponibles sur if-archive. PunyInform nécessite Inform v6.35 ou plus récent.

Il y a des tutoriels pour écrire des jeux d'aventure avec PunyInform (fin de la page).

Pour essayer votre jeu après sa compilation, vous pouvez utiliser WinFrotz par David Kinder et pour créer une carte de votre jeu il y a Trizbort.

Et enfin pour créer une image disquette pour Amstrad CPC et PCW il vous faudra utiliser Puddle BuildTools.



Le code source de l'assembleur et désassembler DAMS est disponible depuis mars 2015

-

Pascal SEGUY est l'auteur de l'assembleur DAMS, édité par Micro Applications dès 1985.

Je viens de découvrir dans le sujet FutureOS sur CPCWiki que M. SEGUY mets à disposition sur Github le code source de DAMS.



Turbo Rascal SE v0.13.216, développement pascal pour Amstrad CPC et plus...

-

Turbo Rascal SE (TRSE) v0.13.2162 est disponible. C'est une suite complète (IDE, compilateur, langage de programmation, éditeur de sprites) destiné au développement de jeux et démos pour ordinateurs 8 et 16bit avec un focus sur les MOS 6502, Motorola 68000, (GB)Z80 et X86. TRSE supporte actuellement le développpement pour les ordinateurs C64, C128, VIC-20, PLUS4, NES, Gameboy, PET, ZX Spectrum, TIKI 100, Amstrad CPC 464, Atari 2600, 8086AT, Amiga 500 et l'Atari ST 520 (liste complète ici). Avec les bénéfices d'un IDE moderne (messages d'erreur, complétion de code, coloration syntaxique, etc...) et beaucoup d'outils intégrés, il n'a jamais été aussi facile de programmer pour votre ordinateur préféré en Pascal !

Rejoignez TRSE sur Facebook !

Je n'ai pas les détails de la version .013 par rapport à la 0.12.



De nouveaux articles sur 64 NOPS

-

De nouveaux articles sont disponibles sur 64 NOPS, un blog sur la programmation Amstrad CPC par Hicks (Vanity) et Toms (Pulpo Corrosivo). Entre autre une traduction en anglais d'un article par Tom et Jerry sur les logiciels de composition musicale et la suite sur le FDC par Roudoudou :




PunyInform v2.8 par Fredrik Ramsberg et Johan Berntsson pour écrire des jeux d'aventure texte

-

PunyInform v2.8 par Fredrik Ramsberg et Johan Berntsson est un librairie écrite en langage Inform 6. PunyInform permets de créer des jeux d'aventure (pur texte, pas de support pour des images contrairement à DAAD) utilisant la machine virtuel Z-machine, qui pourront fonctionner sur des ordinateurs 8bit ou plus récents. Il contient un parser, une implémentation de verbes courants, ainsi qu'un framework pour écrire des jeux d'aventure.

PunyInform est basé sur la librairie Inform 6 développée par Graham Nelson. Il est destiné à rendre facile l'écriture de jeux au format Inform 6, un manuel décrit les différences entre les deux librairies.

Les jeux utilisant PunyInform peuvent être compilés au format z3, z5 et z8 (z3 est le plus adapté pour les ordinateurs 8bit, les autres formats ont des fonctionnalités supplémentaires). Comparé à la librairie Inform 6 cela signifie qu'il n'y a pas de support pour la machine virtuelle Glulx mais il y a bien le support du format z3 (que la librairie Inform 6 ne supporte pas).

Pour compiler des jeux utilisant PunyInform, il est recommandé d'utiliser le compilateur Inform 6 maintenu par David Kinder. Les binaires sont disponibles sur if-archive. PunyInform nécessite Inform v6.34 ou plus récent.

Il y a des tutoriels pour écrire des jeux d'aventure avec PunyInform (fin de la page).

Pour essayer votre jeu après sa compilation, vous pouvez utiliser WinFrotz par David Kinder et pour créer une carte de votre jeu il y a Trizbort.




WIP The Swarm is coming... par Minilop Software pour Amstrad CPC et ZX Spectrum

-

The swarm is coming... par Minilop Retroware (sur Twitter) est un jeu en cours d'écriture pour ZX Spectrum et Amstrad CPC. C'est un jeu du type de Cybernoid avec 4 niveaux réalisés (ZX Spectrum) et un seul pour le moment sur Amstrad CPC. Les graphismes sont plutôt sympathiques, il y a deux vidéos disponibles sur Twitter :



Pour plus d'informations, allez sur la page principale