Obligement - L'Amiga au maximum

Jeudi 22 février 2024 - 22:13  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
ALL


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


Programmation : Création d'une démo - chapitre 2, partie 2, les plans de bits
(Article écrit par Nori - février 2024)


Alien, le 8e passager

Je suis ronchon. Le résultat d'un excès de sucre et de chocolat, probablement. Et j'espère sincèrement que ma mauvaise humeur ne déteindra pas sur le corps de l'article. Mais vous pardonnerez, au vu de mon état, ma lente dérive vers le côté orageux.

Récemment, j'ai été aspiré par un court mais non moins intéressant billet qui s'apparentait plus à une diatribe antichirurgie esthétique, en fait. De grands noms de la réalisation américaine se plaignaient de l'excès de chirurgie esthétique par des actrices de plus en plus jeunes et nombreuses. La voie vers la perfection par le biais d'un sourire sans rides leur ouvre grand les bras. Tirer la peau, gonfler les lèvres ou bloquer certains muscles du visage, entre autres, nuiraient à la qualité du jeu d'acteur. La raison ? Les rides et mouvements quasi indécelables du visage seraient indispensables à l'émotion juste. Ici, l'imperfection et l'erreur n'ont pas leur place, mais en contrepartie, on pourrait se poser la question, pas si paradoxale, de ce que serait la perfection sans son imperfection ? Cet indéfinissable quelque chose qui nous rendrait imparfaits, donc humain. Ça me ramène à Ripley, lorsqu'elle demanda à Ash (un parfait symbole de la science) la raison de son admiration pour cet alien, il lui répondit que cet être était parfait, hautement hostile, dépourvu de toute morale. Elle lutta de toutes ses forces pour ne pas laisser entrer ce 8e passager dans son monde. Peine perdue, non seulement il s'y est engouffré, mais il a converti un à un la population entière du Nostromo. Un monde où seuls les plus forts, lisses, sans défauts, agressifs et dégagés de toute empathie, seraient tolérés. Je vous l'ai dit, je suis d'humeur maussade.

Présentation

Le voici donc, cet élément supplémentaire, un logo affiché dans la bande horizontale supérieure de notre écran. Pour ajouter un peu d'action, nous allons le faire bouger latéralement dans un mouvement oscillatoire. Pour des raisons de place et ne pas surcharger le source, et donc épargner des lignes supplémentaires à l'article, nous n'allons utiliser qu'un seul plan de bits, soit deux couleurs pour le dessiner, ou pour résumer simplement, le logo sera structurellement en monochrome. Pour apporter un peu de fantaisie, nous lui adjoindrons un dégradé de couleurs changeantes dans le corps.

Pour résumer donc, à l'issue de cet article, nous aurons dans cette démo :
  • Un fond dégradé verticalement.
  • Des barres de couleurs horizontales qui oscillent verticalement.
  • Un logo qui oscille horizontalement.
  • Des couleurs mouvantes dans le logo.
Description de notre écran

Notre écran est pour l'instant construit de la manière suivante :
  • La zone supérieure de dimension 320x64 pixels contiendra le logo. Cette zone sera paramétrée de façon à contenir un plan de bits, ce qui permet donc d'avoir des graphismes en deux couleurs.

  • La zone juste au-dessous de dimension 320x192 pixels ne contient, pour l'instant, aucun plan de bits. Elle contiendra des rasters qui déborderont sur les côtés.
Le passage d'un mode graphique à un autre entre les deux zones se fera à leur frontière par des instructions Copper à la position $6C. Pour trouver cette ordonnée Copper à laquelle procéder à ce changement, rien de plus simple, nous savons grâce à DIWSTRT ($dff08e) que l'ordonnée de départ des DMA plans de bits vaut $2C, le plan de bits contenant le logo a une hauteur définie de 64 pixels de haut. Ce qui nous fait donc : $2C+$40 (64 en décimal) = $6C.

$6C est l'ordonnée de départ de la zone B, à cette position, il suffit d'insérer une instruction WAIT dans la liste Copper, à ça rajouter d'autres instructions Copper qui modifient les registres d'affichage, nous obtiendrons ainsi une transition douce et sans perturbation.

Plan de bits

Le logo bouge

Nous allons concentrer notre attention sur la zone A. Pour bouger le logo horizontalement, nous allons, à chaque trame, altérer les pointeurs plans de bits ($e0,$e2, etc.) et les bits de retard DMA plans de bits contenus dans BPLCON1 ($dff102).

Si votre mémoire vous est fidèle (Cf. article précédent), vous vous souviendrez que le retard de DMA n'est effectif que pour les DMA et uniquement les DMA plans de bits. Les données qui concernent le plan de bits hors zone visible en sont exclues. Ce qui explique ce phénomène inévitable : tous les pixels qui apparaitraient à gauche du premier pixel de notre écran visible seront vides, donc affichés avec la couleur n°0 ($dff180).

Pour contourner ce problème, il suffit de cacher la zone visible de notre écran en utilisant DIWSTR.

Pour illustrer mon propos, il vous suffirait dans le source de remplacer cette ligne :

	move.l #$008e2c91,(a0)+			; DIWSTRT

...par celle-ci :

	move.l #$008e2c81,(a0)+			; DIWSTRT

En faisant ça, on ramènerait DIWSTRT au même niveau que DDFSTRT, ce qui ferait apparaître les pixels noirs entrant par la gauche. Donc, pour résumer, on ne peut résoudre le problème, la seule alternative est de cacher la bande verticale de 16 pixels qui se trouve à l'extrême gauche de notre écran visible. Pour ce faire, on modifie le registre DIWSTRT en augmentant sa valeur de 16 ($10 en hexadécimal).

Nous pouvons, sur ce schéma, voir cette bande de 16 pixels représentée hachurée en couleur bleu clair :

Plan de bits

Conversion de formats

Nous partons du principe que le logo a été dessiné avec un logiciel natif Amiga qui sauve notre fichier au format ILBM. Malheureusement, notre Amiga ne sait pas reconnaître ce format à l'affichage, il faudra au préalable passer par une conversion. Pour intégrer le graphisme du logo dans notre démo, on a le choix parmi plusieurs possibilités. La plus simple et la plus logique serait d'intégrer le fichier ILBM directement dans notre programme avec une commande "incbin" (inclusion du fichier binaire dans le corps du programme). Une fois ce fichier intégré, il faudrait ajouter dans le source de la démo une routine pour convertir son format afin qu'il soit enfin affichable par les circuits graphiques de l'Amiga, format final que l'on appellera BRUT (RAW en anglais). Toutefois, nous n'allons pas choisir cette solution, nous allons procéder autrement. Pour ce faire, nous ferons appel à un petit logiciel bien pratique : IFFMaster. Il permet, entre autres, et c'est ce que l'on va voir, de convertir, au préalable sans que nous ayons à le faire dans notre source, une image ILBM en format BRUT. Nous pourrons ainsi l'intégrer dans notre source sans nous soucier de la conversion.

Plan de bits
Figure 1 : logiciel IFFMaster

Chargeons l'image (ou la brosse) du logo en format ILBM. Avant tout, bien vérifier que l'image est au bon format/taille/nombre de couleurs (640x64 pixels en deux couleurs). On obtient quelque chose d'équivalent à la figure 1. Ensuite, allons dans le menu préférences et activons les options telles que vous les voyez sur la figure 2.

Plan de bits
Figure 2 : menu "Options" d'IFFMaster

Enfin, sélectionnez avec la souris le logo aux dimensions désirées, ici 640x64 pixels, attention soyez précis, la sélection ne souffre aucun décalage.

Plan de bits
Figure 3 : sélection du logo

Allez dans la barre de menu : "Project/Save Brush/As Raw Data". Sauvez le fichier. C'est celui-ci que l'on utilisera dans notre programme. En temps normal, on devrait aussi sauver la palette pour l'intégrer dans ASMOne mais comme il s'agit d'un dessin en monochrome, on le fera directement à la main dans le source, ce sera plus rapide.

Initialisation de la zone logo

Intéressons-nous à la manière dont on met en place la bande écran contenant le logo. Pour ce faire, nous utilisons le mieux qualifié pour ce genre de tâche, à savoir le Copper. C'est pourquoi nous allons décrire la manière dont nous l'initialisons (sous routine "initcop"). Procédons par étape :

La palette

La palette du logo est chargée dans les registres couleurs. Ici rien de bien compliqué, puisque nous n'avons que deux couleurs, celle du fond et celle du logo en soi.

	lea pallogo(pc),a1			; tableau contenant les valeurs RVB de la palette
	move.w #$0180,d0			; 1er registre couleur
	move.w #(1<<NBPDBL)-1,d7		; nb-1 couleurs
.c:						;
	move.w d0,(a0)+				;
	move.w (a1)+,(a0)+			; couleur
	addq.w #2,d0				; incrémente registre couleur
	dbf d7,.c				; prochaine couleur

Dimension fenêtre affichage

Rien de bien extraordinaire, des dimensions d'écran standard, à savoir 320x256. Bien évidemment, la hauteur de l'écran sera tronquée à 64 pixels par le Copper. A noter aussi la bande de 16 pixels la plus à gauche de notre écran qui est cachée (pour les explications, voir plus haut), nous avons donc un écran visible de 304x64.

	move.l #$008e2c91,(a0)+			; DIWSTRT / cache le 1er mot de DMA à chqe ligne
	move.l #$00902cc1,(a0)+			; DIWSTOP
	move.l #$00920038,(a0)+			; DDFSTR
	move.l #$009400d0,(a0)+			; DDTSTOP / 20 mots de DMA chargés à chqe ligne

Pointeurs plans de bits

Nous devons indiquer à quelles adresses se situent les plans de notre logo. IFFMaster les range l'un après l'autre, il peut aussi, en fonction de ce qu'on lui indiquerait dans les préférences, les ranger d'une manière différente, mais on expliquera ce point particulier dans un autre billet, pour l'instant, contentons-nous d'une méthode basique. De toute façon, nous n'avons qu'un seul plan, la question ne se pose pas réellement.

Si notre logo était en huit couleurs par exemple, ses plans seraient rangés de la manière suivante :
  • Premier plan rangé à une adresse donnée, par exemple dans notre source l'adresse est "logo".
  • Le deuxième plan se situerait à l'adresse : logo+taille du premier plan.
La taille du premier plan vaut : largeur*hauteur, en octets. Ce qui nous donnerait dans notre cas : (640/8)*hauteur = 80*64 = 5120 octets. Notre second plan se trouverait donc à logo+5120.
  • Troisième plan : logo+(taille1erplan)*2.
Nous aurions donc : logo + 5120*2 = logo+10240

Quelle que soit la méthode de rangement, prenez soin de poser les plans à des adresses paires.

Dans ce cas précis, nous sommes dans un cas particulier, à savoir, il n'y a qu'un seul plan de bits (logo en deux couleurs). Nous n'avons donc que les pointeurs BPL1PTH et BPL1PTL ($dff0eo et $dff0e2) à renseigner. C'est ce que fait cette routine :

	move.l a0,sptlogo			; sauve pos registre pdb ds liste Copper
	move.l #logo,d0				; adr 1er pdb
	move.l #(LL/8)*(HL),d1			; taille en byte d'1 pdb => 80*64 = 5120 octets
	move.w #NBPDBL-1,d7			; nb-1 de pdb
	bsr setpdb				; injecte init pdb ds liste Copper
.
.
.
.
	; injecte pts pdbs dans liste Copper
	; entree: d0= adr 1er pdb
	;         d1= taille en byte d'1 pdb
	;         a0= pos liste Copper
	;         d7= nb-1 de pdb
	; sortie:
	; Regs  : d0/d1/d2/d7/a0
setpdb:
	move.w #$00e0,d2		; premier registre pt pdb
.l:					;
	move.w d2,(a0)			; registre pt pdb poids fort
	move.w d0,6(a0)			; adresse pdb poids faible
	swap d0				;
	addq.w #2,d2			;
	move.w d2,4(a0)			; registre pt pdb poids faible
	move.w d0,2(a0)			; adresse pdb poids fort
	swap d0				;
	add.l d1,d0			;
	addq.w #2,d2			; prochain registre pt pdb
	addq.l #8,a0			; prochaine position dans liste Copper
	dbf d7,.l			;
	rts

"sptlogo" contient l'adresse mémoire exacte où se trouveraient les instructions Copper du chargement des registres vidéo, ces instructions Copper sont comme suit :

$00E0,Adresse haute plan de bit 0 logo
$00E2,Adresse basse plan de bit 0 logo

Retard de DMA

Le changement de pointeurs vidéo seul ne suffit pas à obtenir un déplacement d'écran fluide (déplacement par pas de 1 mot, soit 16 pixels), il faut y adjoindre un déplacement plus fin (précision de 1 pixel). Dans cette routine d'initialisation Copper, nous mettons en place le registre BPLCON1 ($dff102). Nous en profitons aussi pour sauver l'adresse Copper du contenu de ce registre $102 dans sretardlogo (réutilisé dans la boucle principale). Ce qui nous donnerait quelque chose comme : $010200xx où x = [0,15].

	move.l a0,sretardlogo			; sauve pos dans liste Copper du registre retard
	addq.l #2,sretardlogo			; on se cale directement sur la valeur du registre
	move.l #$01020000,(a0)+			; délai DMA plan de bits

Pour résumer, afin d'obtenir un déplacement fin, à chaque trame, dans la boucle principale, en fonction d'une abscisse de logo : nous calculons l'adresse du plan de bits du logo que nous injecterons dans la liste Copper (adresse retrouvée grâce à sptlogo) et nous injectons aussi un décalage plus fin qui nous permet de placer le logo plus précisément (adresse d'injection retrouvée grâce à sretardlogo).

Modulos

Pour les modulos, c'est très simple. Nous soustrayons la largeur totale du plan de bits de la largeur de l'écran visible, tout ça en octet, le résultat doit être pair. Ce qui donne : (LL/8)-(WL/8) = 80-40 = 40.

C'est ce que fait ce passage :

	move.w #$0108,(a0)+			;
	move.w #(LL/8)-(WL/8),(a0)+		; modulo plans impairs = 40
	move.w #$010a,(a0)+			;
	move.w #(LL/8)-(WL/8),(a0)+		; modulo plans pairs	 = 40

Mode écran

Et enfin, nous renseignons BPLCON0, pour indiquer le mode graphique et le nombre de plans. Ce que fait ce code :

	move.w #$0100,(a0)+			; registre contrôle pdb
	move.w #(NBPDBL*$1000)+$0200,(a0)+	; écran 1 plan de bits

Arrivé à ce stade, nous avons un logo affiché, fixe.

A cela, nous allons lui adjoindre la possibilité d'avoir un dégradé de lignes horizontales dont leurs couleurs seront dégradées verticalement. Nous rajouterons donc le code suivant :

	; dégradé couleurs dans logo
	move.l a0,sdeglogocop			; sauve pos. ds liste Copper des couleurs du dégradé logo
	addq.l #6,sdeglogocop			; on se positionne directement sur la 1ère couleur
	lea deglogo(pc),a1			; table de couleurs du dégradé
	move.l #$2bdffffe,d0			; 1er WAIT
	move.w #HL-1,d7				; couleurs sur toute la hauteur du logo
.l1:					 	;
	move.l d0,(a0)+				; WAIT Copper
	move.w #$0182,(a0)+			; couleur du logo à dégrader
	move.w (a1)+,(a0)+			; couleur de la ligne
	add.l #$01000000,d0			; incrémente ordonnée du WAIT
	dbf d7,.l1				; prochaine ligne

Il suffira ensuite dans la boucle principale, à chaque trame, d'altérer les couleurs qui se trouvent à chaque ligne. Nous pourrons accéder à ces couleurs grâce au pointeur au préalable renseigné dans "sdeglogocop".

Une fois le logo complètement affiché, nous remettrons à zéro le compteur de plans (dans BPLCON0) ce qui équivaut à couper les DMA plans de bits. Ce que fait ce code :

	move.l #(($2b+HL)<<24)+($df<<16)+$fffe,(a0)+	; wait fin logo et début rasters = $6bdffffe
	move.l #$01000200,(a0)+				; désactive tous les plans de bits

Ce qui génére ce code Copper :

$6bdf,$fffe		; WAIT à l'ordonnée 6D, abscisse $DF
$0100,$0200		; MOVE la valeur $0200 dans $DFF100

Après ces instructions Copper, nous serions prêts, si on le désirait, à la définition d'une nouvelle fenêtre ou plusieurs, au choix. Ici en l'occurrence, nous n'avons qu'un reste d'écran dépourvu de plans.

Boucle principale

Un peu d'action. Quittons la construction de la liste Copper et intéressons-nous à présent à ce qui se passe à chaque trame. La routine suivante est appelée à chaque trame afin de faire bouger le logo latéralement.

	; mvt oscillatoire logo
	; entrée:
	; sortie:
	; regs  : d0/d1/d2/d7/a0
mvtlogo:
	lea tbmvtlogo(pc),a0			; table mvt logo
	moveq #0,d0				;
	move.w itbmvtlogo(pc),d0		; index table
	move.w d0,d1				;
	addq #2,d1				; mouvement grâce à incrémentation index
	and.w #$00ff,d1			 	; empêche débordement index
	move.w d1,itbmvtlogo-tbmvtlogo(a0)	; réinjecte nouvel index
	add.w d0,d0				; table en .W
	move.w (a0,d0.w),d0			; abscisse
	add.w #WL/2,d0				; recentrage logo
	move.w d0,d1				;
	lsr.w #4,d0				; nbre de mots
	add.w d0,d0				; adresse partielle paire, en octets
	add.l #logo,d0				; adresse finale plan du logo
	and.w #$000f,d1			 	; uniquement 4 bits poids faible abscisse logo
	move.w #15,d2				;
	sub.w d1,d2				;
	move.w d2,d1				;
	lsl.w #4,d2				;
	or.w d2,d1				;
	move.l sretardlogo(pc),a0		; pos. du registre retard ds liste Copper
	move.w d1,(a0)				; injecte nouvelle valeur retard
	move.l sptlogo(pc),a0			; pos. ds liste Copper
	move.l #LL/8*HL,d1			; taille en byte d'1 pdb
	move.w #NBPDBL-1,d7			; nb-1 de pdb à traiter
	bsr setpdb				; injecte pt pdb ds liste Copper

Nous allons chercher une abscisse dans la table de mouvement oscillatoire "tbmvtlogo".

Grâce à cette abscisse, nous calculons l'adresse du plan de bits et le retard de DMA.

Calcul adresse plan :

	lsr.w #4,d0				; nbre de mots
	add.w d0,d0				; adresse partielle paire, en octets
	add.l #logo,d0				; adresse finale

Nous calculons l'adresse relative partielle du logo par rapport au bord gauche de l'écran. Le résultat est ajouté à l'adresse du plan de bits, ici, nous l'avons appelé "logo".

Ensuite, le décalage plus fin se calcule de la façon suivante :

	and.w #$000f,d1				; uniquement 4 bits poids faible abscisse logo
	move.w #15,d2				;
	sub.w d1,d2				;
	move.w d2,d1				; retard plans pairs
	lsl.w #4,d2				; calcul retard plans impairs
	or.w d2,d1				; retard plans pairs et impairs
	move.l sretardlogo(pc),a0		; pos. du registre retard ds liste Copper
	move.w d1,(a0)				; injecte nouvelle valeur retard

Le calcul est lui aussi assez simple. Nous n'avons besoin que des quatre derniers bits de l'abscisse du logo car le retard DMA ne peut avoir que des valeurs appartenant à l'ensemble [0,15]. Pour ce faire, nous effaçons les autres bits avec un "and.w #$000f,d1". Nous n'avons plus qu'à faire 15-d1 = retard.

Dernière opération, il faut dédoubler cette valeur dans les quatre bits supérieurs car si l'on jette un oeil à BPLCON1, nous avons :

Plan de bits
BPLCON1 détail. La Bible De L'Amiga, © Micro Application

Effectivement, le retard des plans pairs se trouve dans les bits 0-3 et ceux des plans impairs dans les bits 4-7.

Le dédoublement de cette valeur se fait comme suit :

	sub.w d1,d2				;
	move.w d2,d1				; retard plans pairs
	lsl.w #4,d2				; calcul retard plans impairs
	or.w d2,d1				; retard plans pairs et impairs

Nous n'avons plus qu'à injecter cette valeur dans la liste Copper :

	move.l sretardlogo(pc),a0		; pos. du registre retard ds liste Copper
	move.w d1,(a0)				; injecte nouvelle valeur retard

Enfin, nous injectons l'adresse du plan de bits du logo (= registre d0) dans la liste Copper :

	add.l #logo,d0				; adresse finale plan du logo
	move.l sptlogo(pc),a0			; pos. ds liste Copper
	move.l #LL/8*HL,d1			; taille en byte de 1 pdb
	move.w #NBPDBL-1,d7			; nb-1 de pdb à traiter
	bsr setpdb				; injecte pt pdb ds liste Copper

Concernant les remarques et points à améliorer, ceux évoqués dans le chapitre consacré au Copper s'appliquent aussi ici, donc rien de nouveau.

Nous arrivons au bout de l'article. La prochaine étape sera la mise en place d'un champ de lutins se mouvant en (pseudo) parallaxe.

Plan de bits
Capture d'écran de notre démo

                    ; **************************************************
                    ; *                                                *
                    ; *                 DEMO OBLIGEMENT                *
                    ; *                                                *
                    ; **************************************************

                    ; date:                       octobre 2023
                    ; auteur:                     NoRi
                    ; plateforme:                 Amiga OCS (512Ko minimum)
                    ; compileur/linkeur:          VASM + VLINK (ou Asm-one)
                    ; publication:                Amiga Obligement


                    INCDIR     ""                                          ; recherche fichiers et données dans le répertoire

                    section    programme,code_p                            ; hunk pour DOS, alloue mémoire pour code

DEBUG            = 0                                                       ; drapeau activation des parties code pour debogage

                    ; constantes pour écran

LECRAN           = 320                                                     ; largeur écran video affichage
HECRAN           = 256                                                     ; hauteur écran video affichage

                    ; données affichage écran (centrage affichage)

XSTRT            = 129                                                     ; position de départ
XSTOP            = XSTRT+LECRAN                                            ; 129+320
YSTRT            = $2c                                                     ;
YSTOP            = YSTRT+HECRAN                                            ;
HSTRT            = XSTRT-16                                                ; 129-16
RES              = 8                                                       ; 8=basse résolution (4=haute résolution)

                    ; **************************************************
                    ; *          CONSTANTES ECRAN PRINCIPAL            *
                    ; **************************************************

NBP              = 0                                                       ; nb de plan de bits
WS               = LECRAN                                                  ; largeur écran de travail
HS               = HECRAN                                                  ; hauteur écran de travail

                    ; **************************************************
                    ; *                CONSTANTES RASTERS              *
                    ; **************************************************

COLB             = $0000                                                  ; couleur bordure
NBB              = 16                                                     ; nb de barres rasters
HBR              = 16                                                     ; hauteur en pixel d'une barre

                    ; **************************************************
                    ; *                CONSTANTES LOGO                 *
                    ; **************************************************

HL               = 64                                                     ; hauteur en pixels logo
LL               = 640                                                    ; largeur en pixels logo
NBPDBL           = 1                                                      ; nb de plans de bits partie logo
WL               = WS                                                     ; largeur écran logo, DMA*16

                    ; ***************************************************
                    ; *                 MACRO DEFINITION                *
                    ; ***************************************************

                    ; macro d'attente de la libération du blitter
waitblt             MACRO
                    tst.b        $02(a6)                                   ; évite bug A4000
.\@                 btst        #6,$02(a6)                                 ;
                    bne.b        .\@                                       ;
                    ENDM

debut:
                    ; **************************************************
                    ; *                  INIT GENERALES                *
                    ; **************************************************

                    bsr sauvesys                                           ; pas terrible à remplacer par qqch de plus solide

                    lea $dff000,a6                                         ; adresse de base registres spécialisés de l'amiga
                    waitblt                                                ; on s'assure que le blitter ait fini
                    bsr initcopvide                                        ; génère la liste Copper vide
                    move.w #$7fff,$96(a6)                                  ; désactive tous les DMA

                    lea $dff000,a6                                         ; attend d'être dans la zone non affichable
                    move.l #300<<8,d1                                      ; avant de continuer
                    bsr vbl                                                ;

                    move.w #$83c0,$96(a6)                                  ; active DMA pdb,Copper,blitter
                    move.w #$7fff,$9a(a6)                                  ; coupe interruptions
                    bsr init                                               ; inits générales

                    ; **************************************************
                    ; *                                                *
                    ; *                BOUCLE PRINCIPALE               *
                    ; *                                                *
                    ; **************************************************

bouclep:
                    lea $dff000,a6                                         ; synchro verticale
                    move.l #280<<8,d1                                      ;
                    bsr vbl                                                ;

                    move.l principal,a0                                    ; récupère pointeur vers routine principale en cours
                    jsr (a0)                                               ; tt principal

                    btst.b     #6,$bfe001                                  ; test bouton gauche souris appuyé ?
                    bne.b      bouclep                                     ; non alors continue la boucle
exit:                                                                      ; oui
                    bsr restauresys                                        ; pas terrible à remplacer par qqch de plus solide
                    clr.l d0                                               ; code retour Amiga DOS
                    rts                                                    ; sortie vers DOS

                    ; **************************************************
                    ; *                                                *
                    ; *             SOUS-ROUTINES GENERALES            *
                    ; *                                                *
                    ; **************************************************

                    ; synchro verticale
                    ; entrée: d1 = position verticale raster * 256
                    ;         a6 = $dff000
                    ; sortie:
                    ; regs  : d0/d1/d2
vbl:
                    move.l #$1ff00,d2                                      ; masque
.1:                                                                        ;
                    move.l     $04(a6),d0                                  ; position faisceau à électron en cours
                    and.l      d2,d0                                       ;
                    cmp.l      d1,d0                                       ; position atteinte ?
                    bne.b      .1                                          ; non
                    rts                                                    ; oui commence tt trame

sauvesys:
                    move.b #%10000111,$bfd100                              ;
                    move.w $dff01c,sintena                                 ;
                    or.w #$c000,sintena                                    ;
                    move.w $dff002,sdmacon                                 ;
                    or.w #$8100,sdmacon                                    ;
                    rts                                                    ;
restauresys:
                    move.w #$7fff,$dff09a                                  ;
                    move.w sintena,$dff09a                                 ;
                    move.w #$7fff,$dff096                                  ;
                    move.w sdmacon,$dff096                                 ;
                    move.l 4,a6                                            ;
                    lea nom_glib,a1                                        ;
                    moveq #0,d0                                            ;
                    jsr -552(a6)                                           ;
                    move.l d0,a0                                           ;
                    move.l 38(a0),$dff080                                  ;
                    clr.w $dff088                                          ;
                    move.l 4,a6                                            ;
                    jsr -138(a6)                                           ;
                    rts


                    ; *************************************************
                    ; *                                               *
                    ; *                INITIALISATIONS                *
                    ; *                                               *
                    ; *************************************************
init:
                    move.l #initpart6,principal                            ; init pt routine principale

                    ; désactive éventuels lutins parasites

                    lea $dff000,a6                                         ; on veut être sûr d'être dans la zone
                    move.l #300<<8,d1                                      ; du temps mort vertical avant de
                    bsr vbl                                                ; traiter la désactivation des lutins
                    lea $140(a6),a0                                        ;
                    move.w #$0020,$96(a6)                                  ; désactive DMA lutins
                    moveq #8-1,d7                                          ; désactive les 8 lutins
.l:                                                                        ;
                    clr.w (a0)+                                            ; efface SPRxPOS
                    clr.w (a0)+                                            ; efface SPRxCTL
                    clr.w (a0)+                                            ; efface SPRxDATAA
                    clr.w (a0)+                                            ; efface SPRxDATAB
                    dbf d7,.l                                              ; tt prochain lutin
                    rts

                    ; construction liste Copper
                    ; entrée:
                    ; sortie:
                    ; regs  : d0/d1/d7/a0/a1
initcop:
                    lea copper0,a0                                         ;
                    move.l #$01060000,(a0)+                                ; bplcon3 minimal
                    move.l #$01fc0000,(a0)+                                ; mode 16 bits lutins/plan de bits

                    ; partie supérieure = logo

                    lea pallogo(pc),a1                                     ; table contenant les valeurs RVB de la palette
                    move.w #$0180,d0                                       ; 1er registre couleur
                    move.w #(1<<NBPDBL)-1,d7                               ; nb-1 couleurs / tt 2 couleurs
.c:                                                                        ;
                    move.w d0,(a0)+                                        ; registre couleur
                    move.w (a1)+,(a0)+                                     ; couleur RVB
                    addq.w #2,d0                                           ; incrémente registre couleur
                    dbf d7,.c                                              ; tt prochaine couleur

                    move.l #$008e2c91,(a0)+                                ; DIWSTRT / cache le 1er mot de DMA à chqe ligne
                    move.l #$00902cc1,(a0)+                                ; DIWSTOP
                    move.l #$00920038,(a0)+                                ; DDFSTR
                    move.l #$009400d0,(a0)+                                ; DDTSTOP / 20 mots de DMA chargés à chqe ligne

                    move.l a0,sptlogo                                      ; sauve pos registre pdb ds liste Copper
                    move.l #logo,d0                                        ; adr 1er pdb
                    move.l #(LL/8)*(HL),d1                                 ; taille en octets d'1 pdb => 80*64 = 5120 octets
                    move.w #NBPDBL-1,d7                                    ; nb-1 de pdb
                    bsr setpdb                                             ; injecte init pdb ds liste Copper

                    move.l a0,sretardlogo                                  ; sauve pos dans liste Copper du registre retard
                    addq.l #2,sretardlogo                                  ; on se cale directement sur la valeur du registre
                    move.l #$01020000,(a0)+                                ; délai DMA plan de bits
                    move.l #$01040064,(a0)+                                ; priorité pdb/lutins
                    move.w #$0108,(a0)+                                    ;
                    move.w #(LL/8)-(WL/8),(a0)+                            ; modulo plans impairs = 40
                    move.w #$010a,(a0)+                                    ;
                    move.w #(LL/8)-(WL/8),(a0)+                            ; modulo plans pairs   = 40
                    move.w #$0100,(a0)+                                    ; registre contrôle pdb
                    move.w #(NBPDBL*$1000)+$0200,(a0)+                     ; écran 1 plan de bits

                    ; dégradé couleurs ds logo

                    move.l a0,sdeglogocop                                  ; sauve pos. ds liste Copper des couleurs du dégradé logo
                    addq.l #6,sdeglogocop                                  ; on se positionne directement sur la 1ère couleur
                    lea deglogo(pc),a1                                     ; table de couleurs du dégradé
                    move.l #$2bdffffe,d0                                   ; 1er WAIT
                    move.w #HL-1,d7                                        ; nb-1 de lignes à traiter
                                                                           ; -> couleurs sur toute la hauteur du logo
.l1:                                                                       ;
                    move.l d0,(a0)+                                        ; WAIT Copper
                    move.w #$0182,(a0)+                                    ; registre couleur du logo à dégrader
                    move.w (a1)+,(a0)+                                     ; couleur de la ligne
                    add.l #$01000000,d0                                    ; incrémente ordonnée du WAIT
                    dbf d7,.l1                                             ; tt prochaine ligne

                    move.l #(($2b+HL)<<24)+($df<<16)+$fffe,(a0)+           ; wait fin logo et début rasters = $6bdffffe
                    move.l #$01000200,(a0)+                                ; désactive tous les plans de bits

                    ; écran principal = dégradé et barres couleurs

                    move.l a0,sdegcop                                      ; sauve pos. ds liste Copper du dégradé de couleurs
                    lea degrade(pc),a1                                     ;
                    move.l #$6cdffffe,d0                                   ; partie droite ligne
                    move.l #$6c07fffe,d1                                   ; partie gauche ligne
                    move.w #HS-HL-1,d7                                     ; nb-1 de lignes à traiter
.l2:                                                                       ;
                    move.l d1,(a0)+                                        ; wait pour bordure gauche
                    move.w #$0180,(a0)+                                    ; couleur de fond dégradée
                    move.w (a1)+,(a0)+                                     ; couleur de la ligne
                    move.l d0,(a0)+                                        ; wait pour bordure droite
                    move.w #$0180,(a0)+                                    ;
                    move.w #COLB,(a0)+                                     ; couleur bordure (noire)
                    add.l #$01000000,d0                                    ;
                    add.l #$01000000,d1                                    ;
                    dbf d7,.l2                                             ; prochaine ligne
                    move.l #$fffffffe,(a0)+                                ; fin liste Copper
                    rts

                    ; active un écran noir vide
initcopvide:
                    lea copperv,a0                                         ; liste Copper minimaliste
                    move.l #$01000200,(a0)+                                ; aucun plans de bits
                    move.l #$01800000,(a0)+                                ; fond noir
                    move.l #$fffffffe,(a0)+                                ; fin liste Copper
                    move.l #copperv,$dff080                                ;
                    clr.w $dff088                                          ; active liste Copper noire
                    rts

                    ; injecte pts pdbs dans liste Copper
                    ; entree: d0= adr 1er pdb
                    ;         d1= taille en octets d'1 pdb
                    ;         a0= pos liste Copper
                    ;         d7= nb-1 de pdb
                    ; sortie:
                    ; Regs  : d0/d1/d2/d7/a0
setpdb:
                    move.w #$00e0,d2                                      ; premier registre pt pdb
.l:                                                                       ;
                    move.w d2,(a0)                                        ; registre pt pdb poids fort
                    move.w d0,6(a0)                                       ; adresse pdb poids faible
                    swap d0                                               ;
                    addq.w #2,d2                                          ;
                    move.w d2,4(a0)                                       ; registre pt pdb poids faible
                    move.w d0,2(a0)                                       ; adresse pdb poids fort
                    swap d0                                               ;
                    add.l d1,d0                                           ;
                    addq.w #2,d2                                          ; prochain registre pt pdb
                    addq.l #8,a0                                          ; prochaine position dans liste Copper
                    dbf d7,.l                                             ; tt prochain plan
                    rts


                    ; **************************************************
                    ; *                                                *
                    ; *                   VARS/TABLES                  *
                    ; *                                                *
                    ; **************************************************

principal:          dc.l 0                                                ; pt vers sous routine principale

sdegcop:            dc.l 0                                                ; pt vers degradé couleurs ds liste Copper
degrade:
                    dc.w $000,$000,$000,$000,$000,$000,$001,$000          ; couleurs du dégradé
                    dc.w $001,$001,$101,$001,$101,$101,$111,$101
                    dc.w $111,$111,$111,$111,$112,$111,$112,$112
                    dc.w $112,$112,$112,$112,$112,$112,$112,$112
                    dc.w $112,$112,$112,$112,$112,$112,$213,$212
                    dc.w $213,$213,$213,$213,$213,$213,$213,$213
                    dc.w $213,$213,$213,$213,$213,$213,$213,$213
                    dc.w $213,$213,$213,$213,$213,$213,$213,$213
                    dc.w $213,$213,$223,$213,$223,$223,$223,$223
                    dc.w $223,$223,$223,$223,$223,$223,$223,$223
                    dc.w $223,$223,$223,$223,$223,$223,$223,$223
                    dc.w $223,$223,$223,$223,$223,$223,$223,$223
                    dc.w $223,$223,$223,$223,$223,$223,$223,$223
                    dc.w $223,$223,$223,$223,$223,$223,$223,$223
                    dc.w $223,$223,$223,$223,$223,$223,$223,$223
                    dc.w $223,$223,$223,$223,$223,$223,$223,$223
                    dc.w $223,$223,$223,$223,$233,$233,$233,$233
                    dc.w $233,$233,$233,$233,$233,$233,$233,$233
                    dc.w $233,$233,$233,$233,$233,$233,$243,$233
                    dc.w $243,$243,$243,$243,$243,$243,$243,$243
                    dc.w $244,$244,$244,$244,$244,$244,$244,$244
                    dc.w $244,$244,$244,$244,$244,$244,$244,$244
                    dc.w $244,$244,$244,$244,$244,$244,$254,$244
                    dc.w $254,$254,$254,$254,$254,$254,$254,$254
                    dc.w $254,$254,$253,$254,$253,$253,$253,$253
                    dc.w $353,$353,$353,$353,$353,$353,$353,$353
                    dc.w $353,$353,$452,$353,$452,$452,$452,$452
                    dc.w $452,$452,$452,$452,$452,$452,$452,$452
                    dc.w $552,$552,$552,$552,$552,$552,$551,$552
                    dc.w $561,$561,$561,$561,$561,$561,$561,$561
                    dc.w $561,$561,$561,$561,$661,$561,$661,$661
                    dc.w $661,$661,$661,$661,$661,$661,$661,$661

itbsin:             blk.w NBB,0                                            ; index table mvt barres rasters
tbsin:              dc.b 128,126,124,123,121,120,118,117,115,113,112       ; table des ordonnees barres rasters
                    dc.b 110,109,107,106,104,103,101,100,99,97,96,94
                    dc.b 93,92,91,89,88,87,86,84,83,82,81,80,79,78
                    dc.b 77,76,75,74,73,72,72,71,70,70,69,68,68,67
                    dc.b 67,66,66,65,65,65,64,64,64,64,64,64,64,64
                    dc.b 64,64,64,64,64,64,65,65,65,66,66,66,67,67
                    dc.b 68,69,69,70,71,71,72,73,74,75,75,76,77,78
                    dc.b 79,80,82,83,84,85,86,87,89,90,91,92,94,95
                    dc.b 97,98,99,101,102,104,105,107,108,110,111
                    dc.b 113,114,116,117,119,120,122,124,125,127
                    dc.b 128,130,131,133,135,136,138,139,141,142
                    dc.b 144,145,147,148,150,151,153,154,156,157
                    dc.b 158,160,161,163,164,165,166,168,169,170
                    dc.b 171,172,173,175,176,177,178,179,180,180
                    dc.b 181,182,183,184,184,185,186,186,187,188
                    dc.b 188,189,189,189,190,190,190,191,191,191
                    dc.b 191,191,191,191,191,191,191,191,191,191
                    dc.b 191,190,190,190,189,189,188,188,187,187
                    dc.b 186,185,185,184,183,183,182,181,180,179
                    dc.b 178,177,176,175,174,173,172,171,169,168
                    dc.b 167,166,164,163,162,161,159,158,156,155
                    dc.b 154,152,151,149,148,146,145,143,142,140
                    dc.b 138,137,135,134,132,131,129,128


barre:              dc.w $0518,$0627,$0746,$0865                           ; couleurs barre raster de 16 lignes de haut
                    dc.w $0A84,$0B93,$0CB2,$0DD1
                    dc.w $0DD1,$0CB2,$0B93,$0A84
                    dc.w $0865,$0746,$0627,$0518

itbmvtlogo:         dc.w 0                                                 ; index table mvt logo
tbmvtlogo:
                    dc.w 0,-3,-7,-11,-15,-19,-23,-27,-31,-35,-39,-42,-46   ; table des abscisses du mvt logo 
                    dc.w -50,-54,-57,-61,-65,-68,-72,-75,-79,-82,-85,-89
                    dc.w -92,-95,-98,-101,-104,-107,-110,-113,-116,-118
                    dc.w -121,-124,-126,-128,-131,-133,-135,-137,-139
                    dc.w -141,-143,-144,-146,-148,-149,-150,-152,-153
                    dc.w -154,-155,-156,-157,-157,-158,-158,-159,-159
                    dc.w -159,-159,-159,-159,-159,-159,-159,-158,-158
                    dc.w -157,-156,-155,-154,-153,-152,-151,-150,-148
                    dc.w -147,-145,-144,-142,-140,-138,-136,-134,-132
                    dc.w -130,-127,-125,-122,-120,-117,-114,-112,-109
                    dc.w -106,-103,-100,-97,-94,-90,-87,-84,-80,-77,-73
                    dc.w -70,-66,-63,-59,-55,-52,-48,-44,-40,-37,-33
                    dc.w -29,-25,-21,-17,-13,-9,-5,-1,1,5,9,13,17,21
                    dc.w 25,29,33,37,40,44,48,52,55,59,63,66,70,73,77
                    dc.w 80,84,87,90,94,97,100,103,106,109,112,114,117
                    dc.w 120,122,125,127,130,132,134,136,138,140,142,144
                    dc.w 145,147,148,150,151,152,153,154,155,156,157
                    dc.w 158,158,159,159,159,159,159,159,159,159,159
                    dc.w 159,158,158,157,157,156,155,154,153,152,150
                    dc.w 149,148,146,144,143,141,139,137,135,133,131
                    dc.w 128,126,124,121,118,116,113,110,107,104,101
                    dc.w 98,95,92,89,85,82,79,75,72,68,65,61,57,54,50
                    dc.w 46,42,39,35,31,27,23,19,15,11,7,3
sretardlogo:        dc.l 0                                                 ; pt vers registre retard logo ds liste Copper
sptlogo:            dc.l 0                                                 ; pt vers registres pt pdb logo ds liste Copper

pallogo:            dc.w $0000,$0ffe                                       ; palette logo

sdeglogocop:        dc.l 0                                                 ; sauve pt vers dégradé couleurs logo ds liste Copper
deglogo:
                    dc.w $FFF,$FFF,$FFF,$EFF,$EFF,$EFF,$EFF,$DFF           ; liste couleurs du dégradé de couleurs logo
                    dc.w $DFF,$DEF,$CEF,$CEF,$CEF,$CEF,$BEF,$BEF
                    dc.w $BEF,$AEF,$AEF,$ADF,$ADF,$9DF,$9DF,$9DF
                    dc.w $8DF,$8DF,$8DF,$8DF,$7CF,$7CF,$7CF,$6CF
                    dc.w $6CF,$6CF,$6CF,$5CF,$5CF,$5CF,$5CF,$5CE
                    dc.w $5CE,$5CD,$6CD,$6CD,$6CC,$6CC,$6CB,$7CB
                    dc.w $7CA,$7BA,$7BA,$7B9,$8B9,$8B8,$8B8,$8B7
                    dc.w $8B7,$9B7,$9B6,$9B6,$9B5,$9A5,$AA4,$AA4
                    dc.w $AA4,$AA3,$BA3,$BA2,$BA2,$BA1,$CA1,$CA1
                    dc.w $CA0,$CA0,$CA0,$CA0,$CA1,$CA1,$CA1,$CA2
                    dc.w $DA2,$DA2,$DA3,$DA3,$DA3,$DA4,$DA4,$E94
                    dc.w $E95,$E95,$E95,$E96,$E96,$E97,$F97,$F98
                    dc.w $F98,$F99,$F99,$F9A,$F9A,$F9A,$F9A,$F9A
                    dc.w $F9A,$FAB,$FAB,$FAB,$FAB,$FBB,$FBC,$FBC
                    dc.w $FBC,$FCC,$FCD,$FCD,$FCD,$FDD,$FDD,$FDE
                    dc.w $FDE,$FEE,$FEE,$FEF,$FEF,$FFF,$FFF,$FFF
fdeglogo:
ideglogo:           dc.w 0                                                 ; index table dégradé couleurs logo

sintena:            dc.w 0                                                 ; sauve intena
sdmacon:            dc.w 0                                                 ; sauve dmacon
nom_glib:           dc.b"graphics.library",0                               ; nom de la librairie
                    even

                    ; **************************************************
                    ; *                                                *
                    ; *        SOUS-ROUTINES BOUCLE PRINCIPALE         *
                    ; *                                                *
                    ; **************************************************

                    ; tt double tampon
                    ; entrée:
                    ; sortie:
                    ; regs  :
;dtampon:
;                   eor.b #$ff,flgdf                                      ; permutte indicateur double tampon
;                   beq.b .page2                                          ;
;                   bra.b .nxt1                                           ;
;.page2:
;                   bra.b .nxt1
;nxt1:
;                   rts


                    ; initialisations rasters
                    ; entrée:
                    ; sortie:
                    ; regs  : d0/d7/a0
initpart6:
                    bsr        initcopvide                                 ; écran noir et vide

                    ; init les index des barres rasters

                    lea itbsin(pc),a0                                      ;
                    moveq #0,d0                                            ;
                    move.w #NBB-1,d7                                       ;
.ib:                                                                       ;
                    and.w #$00ff,d0                                        ; empêche débordement index
                    move.w d0,(a0)+                                        ;
                    add.w #6,d0                                            ; déphase le prochain index de 6
                    dbf d7,.ib                                             ; tt prochain index

                    bsr initcop                                            ; construction nouvelle liste Copper
                    move.l #copper0,$dff080                                ; nouvelle liste Copper active à la prochaine trame

                    clr.w itbsin                                           ; raz index table sinus
                    addq.l #6,sdegcop                                      ; pointe directement sur couleur ds liste dégradé Copper

                    move.l #part6,principal                                ; à la prochaine trame, le tt se fera
                                                                           ; dans l'effet démo en-soi
                    rts

part6:
;                   bsr dtampon                                            ; tt double tampon

                    bsr rasters                                            ; effet de couleurs barres et fond coloré
                    bsr cologo                                             ; effet couleurs dans logo
                    bsr mvtlogo                                            ; oscillation horizontale logo
                    rts


                    ; couleurs mouvantes dans logo
                    ; entrée:
                    ; sortie:
                    ; regs  : d0/d1/d7/a0/a1
cologo:
                    lea deglogo(pc),a0                                     ; table des couleurs
                    move.w ideglogo(pc),d0                                 ; index
                    addq.w #2,d0                                           ; déplace couleurs
                    and.w #$00ff,d0                                        ; empêche débordement index
                    move.w d0,ideglogo-deglogo(a0)                         ; sauve nouvel index
                    move.l sdeglogocop(pc),a1                              ; 1ère couleur du dégradé ds liste Copper
                    move.w #HL-1,d7                                        ; nb-1 de couleurs à traiter
.l:                                                                        ;
                    and.w #$00ff,d0                                        ; empêche débordement index
                    move.w (a0,d0.w),(a1)                                  ; injecte nouvelle couleur ds liste Copper
                    addq.w #8,a1                                           ; on se positionne sur prochaine ligne Copper
                    addq.w #2,d0                                           ; déplace pos. 1ère couleur
                    and.w #$00ff,d0                                        ; empêche débordement index
                    dbf d7,.l                                              ; tt prochaine ligne
                    rts

                    ; mvt oscillatoire logo
                    ; entrée:
                    ; sortie:
                    ; regs  : d0/d1/d2/d7/a0
mvtlogo:
                    lea tbmvtlogo(pc),a0                                   ; table mvt logo
                    moveq #0,d0                                            ;
                    move.w itbmvtlogo(pc),d0                               ; index table
                    move.w d0,d1                                           ;
                    addq #2,d1                                             ; mouvement grâce à incrémentation index
                    and.w #$00ff,d1                                        ; empêche débordement index
                    move.w d1,itbmvtlogo-tbmvtlogo(a0)                     ; réinjecte nouvel index
                    add.w d0,d0                                            ; table en .W
                    move.w (a0,d0.w),d0                                    ; abscisse
                    add.w #WL/2,d0                                         ; recentrage abscisse logo
                    move.w d0,d1                                           ;
                    lsr.w #4,d0                                            ; nbre de mots
                    add.w d0,d0                                            ; adresse partielle paire, en octets
                    add.l #logo,d0                                         ; adresse finale plan du logo
                    and.w #$000f,d1                                        ; uniquement 4 bits poids faible abscisse logo
                    move.w #15,d2                                          ;
                    sub.w d1,d2                                            ;
                    move.w d2,d1                                           ; retard plans pairs
                    lsl.w #4,d2                                            ; calcul retard plans impairs
                    or.w d2,d1                                             ; retard plans pairs et impairs
                    move.l sretardlogo(pc),a0                              ; pos. du registre retard ds liste Copper
                    move.w d1,(a0)                                         ; injecte nouvelle valeur retard ds liste Copper

                    move.l sptlogo(pc),a0                                  ; pos. ds liste Copper
                    move.l #LL/8*HL,d1                                     ; taille en octets d'1 pdb
                    move.w #NBPDBL-1,d7                                    ; nb-1 de pdb à traiter
                    bsr setpdb                                             ; injecte pt pdb ds liste Copper
                    rts

                    ; tt effets de couleurs au Copper
                    ; entrée:
                    ; sortie:
                    ; regs  : d0/d6/d7/a0/a1/a2/a3/a4
rasters:

                    ; tt effacement barres rasters

                    lea degrade(pc),a0                                     ; couleurs du dégradé de fond
                    move.l sdegcop(pc),a2                                  ; pt vers liste Copper
                    move.w #HS-HL-1,d7                                     ; 256 lignes à traiter
.clr:                                                                      ;
                    move.w (a0)+,(a2)                                      ; injecte couleur ds liste Copper
                    lea 16(a2),a2                                          ; prochaine ligne Copper
                    dbf d7,.clr                                            ; tt prochaine ligne

                    ; tt affichage barres rasters

                    lea itbsin(pc),a0                                      ; liste d'index des 16 barres rasters
                    lea tbsin(pc),a1                                       ;
                    move.l sdegcop(pc),a2                                  ; pointe vers liste Copper
                    move.w #NBB-1,d7                                       ; nb-1 barres rasters
.2:
                    move.w (a0),d0                                         ; index table sinus
                    addq.w #1,(a0)+                                        ; incrémente index
                    and.w #$00ff,d0                                        ; évite débordement
                    move.b (a1,d0.w),d0                                    ; ordonnée écran de la barre raster
                    sub.w #HL-1,d0                                         ; recentrage
                    lsl.w #4,d0                                            ; adresse offset ds liste Copper
                    move.l a2,a3                                           ; base adr. début dégradé dans liste Copper
                    add.w d0,a3                                            ; a3 = adr. cible ds liste Copper où y dessiner barre

                    lea barre(pc),a4                                       ; pointe sur couleurs de la barre raster
                    move.w #HBR-1,d6                                       ; hauteur-1 d'une barre raster
.1:                                                                        ;
                    move.w (a4)+,(a3)                                      ; injecte couleur ligne barre raster ds liste Copper
                    lea 16(a3),a3                                          ;
                    dbf d6,.1                                              ; tt prochaine ligne de la barre
                    dbf d7,.2                                              ; tt prochaine barre
                    rts                                                    ;


                    ; ***********************************************
                    ; *                                             *
                    ; *                  CHIP RAM                   *
                    ; *                                             *
                    ; ***********************************************


                    section    donneesgraph,data_c

                    ; premier plan du logo qui est déjà préchargé par le graphisme du logo
logo:
                    dc.l $00000000,$00000000,$0007FE00,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$001FFF80,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$003FFFE0,$00001FF8,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$003F8000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$007FFFF8,$0000FFF0
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$03FFF800,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00FFFFFC,$0003FFF0,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$0FFFFE00,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00FFFFFE,$000FFFF0
                    dc.l $00000000,$00007F00,$00000000,$00000000,$00000000,$3FFFFF80,$007F8000,$0000FE00
                    dc.l $0FE00000,$00000000,$00000000,$00000000,$00000000,$00000000,$000FF000,$00000000
                    dc.l $00000000,$00000000,$01FFFFFF,$001FFFE0,$00000000,$0000FFC0,$00000000,$00000000
                    dc.l $00000000,$FFFFFFC0,$007FC000,$0000FF80,$1FF00000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$000FFC00,$00000000,$00000000,$00000000,$01FFFFFF,$807FFFE0
                    dc.l $00000000,$0001FFE0,$00000000,$00000000,$00000001,$FFFFFFE0,$007FF000,$0000FFC0
                    dc.l $3FF80000,$00000000,$00000000,$00000000,$00000000,$00000000,$0007FE00,$00000000
                    dc.l $00000000,$00000000,$03FFFFFF,$C0FFFFC0,$00000000,$0001FFE0,$00000000,$00000000
                    dc.l $00000003,$FFFFFFF0,$003FF000,$0000FFE0,$7FFC0000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$0007FE00,$00000000,$00000000,$00000000,$03FFFFFF,$E3FFFFC0
                    dc.l $00000000,$0003FFE0,$00000000,$00000000,$00000007,$FF80FFF8,$003FF800,$0000FFF0
                    dc.l $7FFC0000,$00000000,$00000000,$00000000,$00000000,$00000000,$0007FF00,$00000000
                    dc.l $00000000,$00000000,$03FFFFFF,$F7FFFFC0,$00000000,$0003FFE0,$00000000,$00000000
                    dc.l $0000000F,$FE003FFC,$007FF800,$0000FFF0,$7FFC0000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$0007FF00,$00000000,$00000000,$00000000,$01FFFF0F,$FFFF7F80
                    dc.l $00000000,$0001FFE0,$00000000,$00000000,$0000001F,$F8001FFC,$007FF800,$0000FFF0
                    dc.l $7FFC0000,$00000000,$00000000,$00000000,$00000000,$00000000,$000FFF00,$00000000
                    dc.l $00000000,$00000000,$01FFFF07,$FFFE7F80,$00000000,$0000FFC0,$00000000,$00000000
                    dc.l $0000003F,$F0000FFE,$00FFF800,$0001FFF0,$3FF80000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$000FFF00,$00000000,$00000000,$00000000,$00FFFF03,$FFF8FF80
                    dc.l $00000000,$00007F80,$00000000,$00000000,$0000007F,$E00007FE,$00FFF000,$0001FFE0
                    dc.l $1FF00000,$00000000,$00000000,$00000000,$00000000,$00000000,$001FFE00,$00000000
                    dc.l $00000000,$00000000,$00FFFF00,$FFF0FF00,$00000000,$00001E00,$00000000,$00000000
                    dc.l $000000FF,$C00003FF,$00FFF000,$0003FFE0,$07C00000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$001FFE00,$00000000,$00000000,$00000000,$007FFF81,$FFE1FF00
                    dc.l $00000000,$00000000,$00000000,$00000000,$000000FF,$800003FF,$01FFF000,$0003FFC0
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$003FFE00,$00000000
                    dc.l $00000000,$00000000,$003FFFC3,$FFE1FF00,$00000000,$00000000,$00000000,$00000000
                    dc.l $000001FF,$000003FF,$01FFE000,$0003FFC0,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$003FFC00,$00000000,$00000000,$00000000,$000FFFE7,$FFC3FE3F
                    dc.l $C0000000,$0001FE00,$00000000,$00000000,$000001FF,$03FF81FF,$83FFE3FE,$0007FFC0
                    dc.l $7F800000,$00000000,$FF007F80,$00000000,$0000FF00,$3F000000,$003FFC00,$00000000
                    dc.l $00000000,$00000000,$0003FF8F,$FFC3FE3F,$F01FF00F,$F007FF00,$00007F00,$000007F0
                    dc.l $000003FE,$0FFFE1FF,$83FFEFFF,$8007FF80,$FFC00000,$1FE0000F,$FFE03FE0,$1FF00FE0
                    dc.l $000FFFE0,$7FE007FC,$007FFC00,$00000000,$00000000,$00000000,$00007E1F,$FFC7FE1F
                    dc.l $F87FF87F,$FC07FF00,$01FFFFC0,$007FC7F8,$000003FE,$3FFFF1FF,$87FFFFFF,$E00FFF80
                    dc.l $FFE0007F,$FFF8003F,$FFF03FF0,$7FF87FFC,$003FFFF0,$3FF03FFF,$07FFFF80,$00000000
                    dc.l $00000000,$00000000,$0000003F,$FFE7FE1F,$F8FFFCFF,$FE07FF00,$07FFFFE0,$01FFE7FC
                    dc.l $000003FC,$7FFFF9FF,$87FFFFFF,$F00FFF00,$FFE001FF,$FFFC00FF,$FFF83FF9,$FFF9FFFE
                    dc.l $00FFFFF8,$3FF8FFFF,$9FFFFFC0,$00000000,$00000000,$00000000,$3800007F,$FFFFFC1F
                    dc.l $FDFFFFFF,$FF07FF00,$1FFFFFF0,$07FFFFFE,$000007FC,$FFFFF9FF,$8FFFFFFF,$F01FFF00
                    dc.l $FFE007FF,$FFFC01FF,$F3F83FFF,$FFFFFFFE,$01FFF3F8,$3FF9FFFF,$DFFFFFC0,$00000000
                    dc.l $00000000,$00000000,$F80000FF,$FFFFFC1F,$FFFFFFFF,$FF07FF00,$7FFFFFF0,$0FFFFFFE
                    dc.l $000007FD,$FFFFF9FF,$8FFFF03F,$F81FFF01,$FFE00FFF,$FFFE03FF,$E1FC3FFF,$FFFFFFFF
                    dc.l $03FFE1FC,$3FFFFFFF,$FFFFFFC0,$00000000,$00000000,$00000003,$F80001FF,$FFFFF83F
                    dc.l $FFCFFFFF,$FF07FF00,$FFFFFFF0,$1FFFFFFE,$000007FF,$FFFFF9FF,$9FFFC03F,$F81FFE01
                    dc.l $FFE01FFF,$FFFE07FF,$C1FC3FFF,$8FFFFFFF,$07FFC1FC,$3FFFFFFF,$FBFFE780,$00000000
                    dc.l $00000000,$00000007,$F80003FF,$FCFFF83F,$FF07FF8F,$FF0FFF01,$FFF3FFF0,$3FFE7FFE
                    dc.l $000007FF,$FFFFF9FF,$9FFF801F,$F83FFE01,$FFC03FFC,$FFFE0FFF,$C1FC3FFF,$07FF8FFF
                    dc.l $0FFFC1FC,$3FFFC3FF,$C1FFE000,$00000000,$00000000,$0000000F,$F80007FF,$F87FF83F
                    dc.l $FE07FF07,$FF0FFE03,$FFC1FFF0,$7FF83FFE,$000003FF,$FFFFFBFF,$9FFF003F,$FC3FFE03
                    dc.l $FFC07FF8,$3FFE1FFF,$81FC7FFE,$07FE0FFF,$1FFF81FC,$3FFF81FF,$C3FFE000,$00000000
                    dc.l $00000000,$0000001F,$F8000FFF,$F87FF87F,$FE07FE0F,$FF1FFE03,$FFC0FFF0,$FFF01FFE
                    dc.l $000003FF,$F0FFF3FF,$BFFE003F,$FC7FFC03,$FFC0FFF0,$1FFE1FFF,$83FC7FFC,$07FE0FFE
                    dc.l $1FFF83FC,$7FFF03FF,$C3FFC000,$00000000,$00000000,$0000003F,$F8003FFF,$F03FF87F
                    dc.l $FC07FE0F,$FF1FFE07,$FF80FFF0,$FFF03FFC,$000001FF,$E0FFF3FF,$BFFE003F,$FC7FFC07
                    dc.l $FF81FFF0,$1FFE3FFF,$87FC7FFC,$0FFC1FFE,$3FFF87FC,$7FFE07FF,$C7FFC000,$00000000
                    dc.l $00000000,$0000003F,$FC007FFF,$F07FF07F,$FC0FFC1F,$FE1FFC0F,$FF80FFF1,$FFF03FFC
                    dc.l $0000007F,$C0FFE7FF,$3FFE007F,$FC7FFC07,$FF81FFE0,$1FFE3FFF,$8FF8FFF8,$1FFC1FFE
                    dc.l $3FFF8FF8,$FFFC07FF,$87FFC000,$00000000,$00000000,$0000007F,$FE01FFFF,$E07FF07F
                    dc.l $F81FFC1F,$FE3FFC0F,$FF00FFF1,$FFF07FF8,$0000001F,$C3FFC7FF,$3FFE00FF,$F8FFFC07
                    dc.l $FF03FFE0,$3FFC7FFF,$FFF8FFF8,$1FF83FFC,$7FFFFFF8,$FFFC0FFF,$87FFC000,$00000000
                    dc.l $00000000,$0000007F,$FF8FFFFF,$E0FFF0FF,$F83FF83F,$FE3FF81F,$FF01FFF3,$FFF07FF8
                    dc.l $1C00001F,$E3FF0FFF,$3FFE00FF,$F8FFF80F,$FF03FFE0,$3FFC7FFF,$FFF0FFF8,$3FF87FFC
                    dc.l $7FFFFFF0,$FFF81FFF,$8FFFC03C,$00000000,$00000000,$0000007F,$FFFFFFFF,$C0FFF0FF
                    dc.l $F83FF87F,$FC7FF81F,$FF83FFF3,$FFF07FF0,$3E00001F,$E1FC1FFF,$3FFE03FF,$F8FFF80F
                    dc.l $FF07FFE0,$7FFCFFFF,$FFF1FFF0,$7FF07FFC,$FFFFFFF1,$FFF01FFF,$0FFFC07C,$00000000
                    dc.l $00000000,$0000007F,$FFFFFFFF,$C0FFF1FF,$F07FF07F,$FC7FF81F,$FFC7FFE3,$FFF8FFF0
                    dc.l $3E00003F,$F0003FFE,$3FFF07FF,$F8FFF81F,$FE07FFF1,$FFFCFFFF,$FFE1FFF0,$7FF0FFF8
                    dc.l $FFFFFFE1,$FFF03FFF,$0FFFC0FC,$00000000,$00000000,$0000007F,$FFFFFFFF,$80FFF1FF
                    dc.l $F07FF0FF,$F87FF83F,$FFFFFFE3,$FFFFFFF0,$7C00003F,$F000FFFE,$3FFFFFFF,$F1FFFC1F
                    dc.l $FE07FFFF,$FFFCFFFF,$FFC3FFF0,$FFF0FFF8,$FFFFFFC3,$FFF03FFE,$0FFFC0FC,$00000000
                    dc.l $00000000,$0000007F,$FFFFFFFF,$01FFE3FF,$F0FFF0FF,$F8FFF87F,$FFFFFFE3,$FFFFFFF0
                    dc.l $7C00003F,$FC03FFFC,$3FFFFFFF,$F1FFFC1F,$FE0FFFFF,$FFF8FFFF,$FF87FFE0,$FFE1FFF8
                    dc.l $FFFFFF87,$FFE03FFE,$0FFFC1F8,$00000000,$00000000,$0000007F,$FFFFFFFE,$01FFE3FF
                    dc.l $F0FFE1FF,$F8FFF87F,$FFFFFFE3,$FFFFFFF0,$F800003F,$FFFFFFFC,$1FFFFFFF,$F1FFFF7F
                    dc.l $FE1FFFFF,$FFF8FFFE,$7F07FFE1,$FFE1FFF0,$FFFE7F07,$FFE07FFE,$0FFFE7F0,$00000000
                    dc.l $00000000,$0000007F,$FFFFFFFE,$01FFE3FF,$E1FFE1FF,$F8FFFDFF,$FFFFFFC3,$FFFFFFFD
                    dc.l $F000003F,$FFFFFFF8,$1FFFFFFF,$E1FFFFFF,$FFBFFFFF,$FFF87FFE,$001FFFE1,$FFE1FFF0
                    dc.l $7FFE001F,$FFE07FFE,$1FFFFFF0,$00000000,$00000000,$0000003F,$FFFFFFFC,$01FFF7FF
                    dc.l $E1FFE1FF,$F8FFFFFF,$FFFFFFC3,$FFFFFFFF,$F000003F,$FFFFFFF8,$1FFFFFFF,$C1FFFFFF
                    dc.l $FFFFFFFF,$FFF87FFF,$003FFFE3,$FFC1FFF0,$7FFF003F,$FFC07FFE,$0FFFFFE0,$00000000
                    dc.l $00000000,$0000003F,$FFFFFFF8,$03FFF7FF,$E3FFE1FF,$F8FFFFFF,$FFFFFFC1,$FFFFFFFF
                    dc.l $E000001F,$FFFFFFF0,$0FFFFFFF,$C1FFFFFF,$FFFFFFFF,$FFF03FFF,$81FFFFC3,$FFC1FFF0
                    dc.l $3FFF81FF,$FFC07FFE,$0FFFFFC0,$00000000,$00000000,$0000001F,$FFFFFFF8,$03FFFFFF
                    dc.l $E3FFC1FF,$FCFFFFEF,$FFFFFFC1,$FFFFFFFF,$C000001F,$FFFFFFE0,$07FFFFFF,$80FFFFFF
                    dc.l $FFFFFFFF,$FFF03FFF,$FFFFFFC3,$FFC1FFF8,$3FFFFFFF,$FFC07FFF,$0FFFFF80,$00000000
                    dc.l $00000000,$0000000F,$FFFFFFF0,$03FFFFFF,$E3FFC0FF,$FFFFFFC7,$FFFFFF80,$FFFFFFFF
                    dc.l $8000001F,$FFFFFFC0,$03FFFFFF,$00FFFFFF,$FFF9FFFF,$FFF01FFF,$FFFFFFC7,$FFC1FFFF
                    dc.l $1FFFFFFF,$FFC03FFF,$EFFFFF00,$00000000,$00000000,$0000000F,$FFFFFFE0,$03FFFFFF
                    dc.l $C3FFC0FF,$FFFFFF83,$FFFFFF80,$7FFE7FFF,$0000000F,$FFFFFF80,$01FFFFFC,$00FFFFEF
                    dc.l $FFF0FFFF,$FFF00FFF,$FFFFFFC7,$FFC0FFFF,$0FFFFFFF,$FFC03FFF,$E7FFFE00,$00000000
                    dc.l $00000000,$00000007,$FFFFFFC0,$01FFFFFF,$C3FFC07F,$FF3FFF01,$FFEFFF80,$3FFC3FFE
                    dc.l $00000007,$FFFFFF00,$007FFFF8,$007FFF87,$FFC03FFB,$FFE007FF,$FFE7FFC7,$FFC0FFFF
                    dc.l $07FFFFE7,$FFC01FFF,$C7FFFC00,$00000000,$00000000,$00000003,$FFFFFF00,$01FFFFFF
                    dc.l $C3FFC03F,$FE0FFC00,$3F0FFF00,$1FF01FF8,$00000007,$FFFFFC00,$001FFFC0,$001FFE03
                    dc.l $FF800FE3,$FFE001FF,$FF01FFC3,$FFC03FFE,$01FFFF01,$FFC00FFF,$81FFF000,$00000000
                    dc.l $00000000,$00000000,$FFFFFE00,$01FFFF3F,$C1FFC00F,$F803E000,$001FFF00,$07C007E0
                    dc.l $00000003,$FFFFF800,$0001FE00,$0007F000,$FC000003,$FFC0001F,$F0007FC3,$FF800FF8
                    dc.l $001FF000,$7FC003FE,$007F8000,$00000000,$00000000,$00000000,$3FFFF800,$00FFFE00
                    dc.l $00FF0000,$00000000,$001FFF00,$00000000,$00000000,$FFFFC000,$00000000,$00000000
                    dc.l $00000007,$FFC00000,$00000000,$FE000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$0FFFC000,$007FF800,$00000000,$00000000,$003FFE00,$00000000
                    dc.l $00000000,$3FFE0000,$00000000,$00000000,$00000007,$FFC00000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$000F8000
                    dc.l $00000000,$00000003,$007FFE00,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $0000E00F,$FF800000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000007,$C0FFFC00,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$0000F81F,$FF800000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000007,$FFFFFC00,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $0001FFFF,$FF000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000007,$FFFFF800,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$0001FFFF,$FF000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$0000000F,$FFFFF800,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $0001FFFF,$FE000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$0000000F,$FFFFF000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$0001FFFF,$FE000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000007,$FFFFE000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $0001FFFF,$FC000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000007,$FFFFE000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$0001FFFF,$F8000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000007,$FFFFC000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $0000FFFF,$F0000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000003,$FFFF8000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$0000FFFF,$F0000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000001,$FFFF0000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00007FFF,$C0000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$FFFE0000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00003FFF,$80000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$7FF80000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000FFF,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$0FE00000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$000003FC,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
                    dc.l $00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000

                    ; liste Copper principale
                    even
copper0:            blk.b        4096+2048,0                               ; à modifier par un allocmem()
fcopper0:


                    even
copperv:            blk.b 24,0                                             ; liste Copper vide (écran noir)

                    end


[Retour en haut] / [Retour aux articles] [Article précédent]