WAIT, SKIP et COPJMPx : un usage avancé du Copper sur Amiga (1/2)

La programmation du Copper sur Amiga est très particulière. Tout d’abord, ce coprocesseur graphique ne comprend que trois instructions, MOVE, WAIT et SKIP, auxquelles il est toutefois possible de rajouter JUMP, quoiqu’elle ne se code pas comme les autres. Ensuite, on n’écrit pas du code pour le Copper comme on écrit du code pour le 68000 : point de mnémoniques, il faut écrire directement en opcodes. Enfin, WAIT et SKIP présentent certaines limitations dont la prise en compte conduit à complexifier le code dès que ce dernier doit pouvoir fonctionner quelle que soit la ligne que le faisceau d’électrons – le raster – est en train de balayer à l’écran.
Paradoxalement, ces limitations n’entravent généralement pas la programmation d’effets visuels complexes comme le plasma ou l’affichage d’une image true color en plein écran – oui, l’Amiga 500 peut afficher en true color, et sans utiliser aucun bitplane par ailleurs -, c’est-à-dire sur toute la largeur des 320 pixels et toute la hauteur des 256 lignes de pixels d’une surface classiquement utilisée dans une démo en PAL. La surprise du codeur n’en est que plus grande quand il s’y heurte. Pour les dépasser, il faut exploiter l’information qui réside dans une section assez cryptique de l’Amiga Hardware Reference Manual. Explications.
Un effet plasma (un plasma RGB pour être plus exact)

Continuer la lecture de « WAIT, SKIP et COPJMPx : un usage avancé du Copper sur Amiga (1/2) »

WAIT, SKIP et COPJMPx : un usage avancé du Copper sur Amiga (1/2)

Des sources de cracktros et d’intros sur Amiga

Mise à jour du 18/09/2017 : la carte de voeux 1993 est disponible sur Flashtro.
Mise à jour du 03/08/2017 : l’intro pour Skara Brae est disponible sur Flashtro.
Mise à jour du 19/07/2017 : l’intro pour Comotion est disponible sur Flashtro.
14 juillet oblige, feu d’artifice de sources ! Pour clore un bon mois de retour dans le passé sur la programmation en assembleur 68000 du hardware de l’Amiga, voici une collection de sources de cracktros et d’intros sur cette machine.
Intros et cracktros sur Amiga
Elles ont été réalisées au début des années 1990 pour différents groupes de warez (Skid Row, Interpol, Paradox, Fairlight ou Passwords) ainsi que pour le groupe Comotion et pour une BBS allemande, Skara Brae.
Toutes ces cracktros et intros ont été codées en assembleur 68000 attaquant directement le hardware de l’Amiga, tout particulièrement deux coprocesseurs graphiques qui ont fait l’objet de présentations détaillées dans de précédents articles : le Blitter et le Copper.
A l’exception de l’intro pour Comotion qui reprend un module de Modesty, Code by Yragael, Music by Monty, comme expliqué dans les textes qui y apparaissent.

Continuer la lecture de « Des sources de cracktros et d’intros sur Amiga »

Des sources de cracktros et d’intros sur Amiga

Utiliser l’interruption VERTB sur Amiga

Un dernier pour la route ! Dans la foulée des précédentes séries d’articles prenant pour prétexte la programmation d’une cracktro (1 et 2) et celle d’un sine scroll (1, 2, 3, 4 et 5), pour présenter dans le détail la manière d’attaquer le hardware de l’Amiga 500 en assembleur 68000 après avoir court-circuité l’OS, il convient de revenir sur un point délicat qui a été soulevé, à savoir celui de la gestion des « interruptions hardware ».
Le problème plus particulièrement étudié est le suivant : comment mettre sous « interruption VERTB » un bout de code dont l’unique fonction est de modifier la couleur de fond (COLOR00) ? Pour bien en visualiser les effets, nous allons élaborer un scénario au fil duquel la couleur de fond sera notamment modifiée par un tel bout de code quand le faisceau d’électrons atteint certaines positions verticales :
Changement de COLOR00 par le Copper, le programme principal et un gestionnaire d'interruption VERTB
Cliquez ici pour télécharger le source du programme présenté ici.

Continuer la lecture de « Utiliser l’interruption VERTB sur Amiga »

Utiliser l’interruption VERTB sur Amiga

Coder un sine scroll sur Amiga (5/5)

Mise à jour du 12/07/2017 : perfomances améliorées suite à la suppression du positionnement de BLTPRI dans DMACON.
Cet article est le cinquième et dernier article d’une série de cinq consacrés à la programmation d’un one pixel sine scroll sur Amiga, un effet très utilisé par les coders de démos et autres cracktros durant un temps. Par exemple, dans cette cracktro du groupe Angels :
Sine scroll dans une cracktro du groupe Angels
Dans le premier article, nous avons vu comment installer en environnement de développement sur un Amiga émulé avec WinUAE et coder la Copper list de base pour afficher quelque chose à l’écran. Dans le deuxième article, nous avons vu comment préparer une police de caractères 16×16 pour en afficher facilement les colonnes de pixels des caractères, précalculer les valeurs du sinus requises pour déformer le texte en modifiant l’ordonnée des colonnes, et mettre en place un triple buffering pour alterner proprement les images à l’écran. Enfin, dans le troisième article, nous avons vu comment dessiner et animer le sine scroll, d’abord au CPU, puis au Blitter. Dans le quatrième article nous avons vu comment enjoliver le sine scroll avec quelques effets peu coûteux en cycle assurés par le Copper.
Dans ce cinquième et dernier article, nous allons optimiser le code afin d’être bien certain de tenir dans la trame, et nous protéger des lamers tentés de modifier le texte. Pour terminer, nous verrons s’il n’y a pas quelques leçons à tirer de cette immersion dans la programmation en assembleur du hardware de l’Amiga.
Cliquez ici pour télécharger l’archive contenant le code et les données du programme présenté ici – c’est la même que dans les autres articles.
NB : Cet article se lit mieux en écoutant l’excellent module composé par Nuke / Anarchy pour la partie magazine de Stolen Data #7, mais c’est affaire de goût personnel…

Continuer la lecture de « Coder un sine scroll sur Amiga (5/5) »

Coder un sine scroll sur Amiga (5/5)

Coder un sine scroll sur Amiga (4/5)

Mise à jour du 17/07/2017 : attente du Blitter avant de procéder à la finalisation.
Cet article est le quatrième article d’une série de cinq consacrés à la programmation d’un one pixel sine scroll sur Amiga, un effet très utilisé par les coders de démos et autres cracktros durant un temps. Par exemple, dans cette intro, aussi magnifique que vintage, du groupe Miracle :
Sine scroll dans une intro du groupe Miracle
Dans le premier article, nous avons vu comment installer en environnement de développement sur un Amiga émulé avec WinUAE et coder la Copper list de base pour afficher quelque chose à l’écran. Dans le deuxième article, nous avons vu comment préparer une police de caractères 16×16 pour en afficher facilement les colonnes de pixels des caractères, précalculer les valeurs du sinus requises pour déformer le texte en modifiant l’ordonnée des colonnes, et mettre en place un triple buffering pour alterner proprement les images à l’écran. Enfin, dans le troisième article, nous avons vu comment dessiner et animer le sine scroll, d’abord au CPU, puis au Blitter.
Dans ce quatrième article, nous allons enjoliver le sine scroll avec quelques effets peu coûteux en cycles car assurés par le Copper, et rendre la main aussi proprement que possible à l’OS.
Cliquez ici pour télécharger l’archive contenant le code et les données du programme présenté ici – c’est la même que dans les autres articles.
NB : Cet article se lit mieux en écoutant l’excellent module composé par Nuke / Anarchy pour la partie magazine de Stolen Data #7, mais c’est affaire de goût personnel…

Continuer la lecture de « Coder un sine scroll sur Amiga (4/5) »

Coder un sine scroll sur Amiga (4/5)

Coder un sine scroll sur Amiga (3/5)

Cet article est le troisième d’une série de cinq consacrés à la programmation d’un one pixel sine scroll sur Amiga, un effet très utilisé par les coders de démos et autres cracktros durant un temps. Par exemple, dans cette cracktro du groupe Supplex :
Sine scroll dans une cracktro du groupe Supplex
Dans le premier article, nous avons vu comment installer en environnement de développement sur un Amiga émulé avec WinUAE et coder la Copper list de base pour afficher quelque chose à l’écran. Dans le deuxième article, nous avons vu comment préparer une police de caractères 16×16 pour en afficher facilement les colonnes de pixels des caractères, précalculer les valeurs du sinus requises pour déformer le texte en modifiant l’ordonnée des colonnes, et mettre en place un triple buffering pour alterner proprement les images à l’écran.
Dans ce troisième article, nous allons rentrer dans le vif du sujet en voyant comment dessiner et animer le sine scroll, d’abord au CPU, puis au Blitter.
Cliquez ici pour télécharger l’archive contenant le code et les données du programme présenté ici – c’est la même que dans les autres articles.
NB : Cet article se lit mieux en écoutant l’excellent module composé par Nuke / Anarchy pour la partie magazine de Stolen Data #7, mais c’est affaire de goût personnel…

Continuer la lecture de « Coder un sine scroll sur Amiga (3/5) »

Coder un sine scroll sur Amiga (3/5)

Coder un sine scroll sur Amiga (2/5)

Mise à jour du 23/07/2017 : correction d’une erreur mineure dans la figure sur la déformation.
Cet article est le deuxième d’une série de cinq consacrés à la programmation d’un one pixel sine scroll sur Amiga, un effet très utilisé par les coders de démos et autres cracktros sur Amiga… jusqu’à ce qu’il soit passé de mode, étant mis à portée de n’importe que lamer par le fameux DemoMaker du groupe Red Sector Inc., ou RSI :
Le DemoMaker du groupe Red Sector Inc. (RSI), pour lamers uniquement
Dans le premier article, nous avons vu comment installer en environnement de développement sur un Amiga émulé avec WinUAE et coder la Copper list de base pour afficher quelque chose à l’écran.
Dans ce deuxième article, nous allons voir comment préparer une police de caractères 16×16 pour en afficher facilement les colonnes de pixels des caractères, précalculer les valeurs du sinus requises pour déformer le texte en modifiant l’ordonnée des colonnes, et mettre en place un triple buffering pour alterner proprement les images à l’écran.
Cliquez ici pour télécharger l’archive contenant le code et les données du programme présenté ici – c’est la même que dans les autres articles.
NB : Cet article se lit mieux en écoutant l’excellent module composé par Nuke / Anarchy pour la partie magazine de Stolen Data #7, mais c’est affaire de goût personnel…

Continuer la lecture de « Coder un sine scroll sur Amiga (2/5) »

Coder un sine scroll sur Amiga (2/5)

Coder un sine scroll sur Amiga (1/5)

Mise à jour du 12/07/2017 : suppression du positionnement de BLTPRI dans DMACON pour améliorer les performances.
Mise à jour du 17/07/2017 : désactivation de la fonctionnalité Save marks dans ASM-One pour faciliter l’édition mixte PC / Amiga.
Un des effets les plus mobilisés par les coders sur Amiga a été le sine scroll, c’est-à-dire le défilé de texte déformé en modifiant l’ordonnée de colonnes de pixels successives selon un sinus, comme par exemple dans cette intro du groupe Falon :
Un beau sine scroll par Falon sur Amiga 500, mais pas au pixel
Le must est le one pixel sine scroll, où chacune de ces colonnes est affichée à une ordonnée spécifique. Toutefois, produire un tel effet est très consommateur en temps de calcul, comme nous le montrerons en y procédant d’abord au seul moyen du CPU. Pour étendre l’effet, nous déchargerons le CPU en sollicitant deux coprocesseurs graphiques : le Blitter et le Copper.
Cet article peut être lu par n’importe qui, ayant été rédigé pour qui n’aurait jamais codé en assembleur 68000, et encore moins pour attaquer le hardware de l’Amiga.
Cliquez ici pour télécharger l’archive contenant le code et les données du programme présenté ici.
Cette archive contient plusieurs sources :
  • sinescroll.s est la version de base dont il sera question jusqu’à ce que nous optimisions ;
  • sinescroll_final.s est la version optimisée de la version de base ;
  • sinescroll_star.s est la version enjolivée de la version optimisée.
Cet article est le premier d’une série de cinq. Nous allons voir comment installer en environnement de développement sur un Amiga émulé avec WinUAE et coder la Copper list de base pour afficher quelque chose à l’écran.
NB : Cet article se lit mieux en écoutant l’excellent module composé par Nuke / Anarchy pour la partie magazine de Stolen Data #7, mais c’est affaire de goût personnel…

Continuer la lecture de « Coder un sine scroll sur Amiga (1/5) »

Coder un sine scroll sur Amiga (1/5)

Coder une cracktro sur Amiga (2/2)

Cet article est le second, et donc le dernier, d’une série consacrée au développement d’une cracktro sur Amiga. Dans le premier article, nous avons vu comment mettre en place un environnement de développement en assembleur 68000 dans le contexte d’un émulateur Amiga, et nous sommes rentrés dans une présentation d’un des deux coprocesseurs graphique, le Blitter, exemple à l’appui. Ici, nous présenterons pareillement le Copper et nous conclurons sur l’intérêt de revisiter ce passé.
Cracktro sur Amiga
Pour rappel, vous pouvez visualiser un enregistrement de la cracktro sur YouTube ou un parfait portage en HTML5 sur Flashtro. Quant au code (à peine un gros millier d’instructions en assembleur 68000), vous pouvez le télécharger en cliquant ici.

Continuer la lecture de « Coder une cracktro sur Amiga (2/2) »

Coder une cracktro sur Amiga (2/2)

Coder une cracktro sur Amiga (1/2)

A l’occasion de la sortie du deuxième documentaire de la formidable série From bedrooms to millions cette fois consacré à l’Amiga de Commodore, prenons un instant pour revisiter ce qui fut un des nombreux aspects de la scène de l’époque : la production de cracktros. Nous prendrons pour exemple une cracktro codée il y a un quart de siècle pour le célèbre groupe Paradox :
Cracktro sur Amiga
Cette cracktro a été choisie parce que son code a été retrouvé et qu’elle exploite le Blitter et le Copper, deux des coprocesseurs de l’Amiga dont il sera ainsi possible de souligner l’originalité de l’architecture.
Noter qu’il est possible de visualiser un enregistrement vidéo du résultat produit sur YouTube. La cracktro fait même partie de la sélection de portages en HTML5 de We Are Back, mais les auteurs de ce portage ont fait l’impasse sur l’effet le plus notable : l’utilisation d’une police à espace variable… Par contre, leurs homologues de Flashtro ont parfaitement réussi.

Continuer la lecture de « Coder une cracktro sur Amiga (1/2) »

Coder une cracktro sur Amiga (1/2)