Création de démos
7 sujets de 16 à 22 (sur un total de 22)
- 1
- 2
-
La Enigma/Phenomena, démo de référence sur A500, a été codé avec Devpac 2.14. Source : Interview d’Azathot.
Good Luck !
Tiens j’ai retrouvé ça
C’est un « plasma » au copper
C’est pas complet mais ça donne une idée du genre de source ASM Devpac
Auteur Alain Thellier vers 1990-94;registres systemes
custom_chips=$dff000color00=$180
bplcon0=$100
bplcon1=$102
bplcon2=$104
bpl1mod=$108
bpl2mod=$10a
ddfstrt=$092
ddfstop=$094
diwstrt=$08e
diwstop=$090
dmacon=$096
copjmp1=$088
cop1lc=$080; constantes des librairies
execbase= 4
forbid= -132
openlibrary= -408
closelibrary= -414
open= -30
close= -36
old= 1005
new= 1006
read= -42
allocmem= -198
freemem= -210;divers
start_up_clist=50
porteA=$bfe001nbrebitplans=5
large=320
haut=256
taillebitplan=large*haut/8
nbrecouleurs=32memoireChiplong=nbrebitplans*taillebitplan+64
chip=1
clear=16
;*******************************************************************
prog:;obtenir memoire chip
move.l execbase,a6
move.l #memoireChiplong,d0
add.l #finCopperlist-Copperlist,d0
moveq #0,d1
bset #chip,d1
bset #clear,d1
jsr allocmem(a6)
move.l d0,memoireChipdebut
bne.s memoireOK1
rts
memoireOK1:
move.l d0,pt_ecran
add.l #memoireChiplong,d0
move.l d0,pt_Chipcopperlist
;remplir ecran
move.l #taillebitplan-1,d0
move.l pt_ecran,a1
loop_ecran:
move.b #$ff,(a1)+
dbf d0,loop_ecran;ouvrirDOS
move.l execbase,a6
lea dosname,a1
moveq #0,d0
jsr openlibrary(a6)
move.l d0,dosbase;chargements des images
; move.l #filename,d1
; move.l pt_ecran,d4
; move.l #taillebitplan*nbrebitplans+64,d3
; jsr LOAD;chargements de la table cosinus
aprox=360
maxcos=1000
move.l #filename2,d1
move.l #tablecosinus,d4
move.l #aprox*2,d3
jsr LOAD;recopier palette
move.w #color00,d0
moveq #nbrecouleurs-1,d1
move.l pt_ecran,a1
add.l #nbrebitplans*taillebitplan,a1
lea palette1,a2
loop_palette:
move.w d0,(a2)+
move.w (a1)+,(a2)+
add.w #2,d0
dbf d1,loop_palette;pointeurs ecran
lea pointeurs_ecran,a1
moveq #nbrebitplans-1,d0
move.l pt_ecran,d1
loop_pointeurs:
move.w d1,6(a1)
swap d1
move.w d1,2(a1)
swap d1
addq #8,a1
add.l #taillebitplan,d1
dbf d0,loop_pointeurs
;creer couleurslea degradelist1,a1
lea vdegrade1,a2
move.l #haut_plasma,d7
jsr new_make_degradelea degradelist2,a1
lea vdegrade2,a2
move.l #haut_plasma,d7
jsr new_make_degradelea vdegrade1,a4
lea vdegrade2,a5
move.l #haut_plasma-1,d6
lea degrade,a2
loop_Hdegrade:
moveq #0,d1
move.w (a4)+,d1
moveq #0,d2
move.w (a5)+,d2
moveq #32,d3
moveq #32,d7jsr run_degrade
dbf d6,loop_hdegrade;creer table couleurs
haut_plasma=150
large_plasma=32
;d0=x,d1=y,d2=num ligne,
;a1=table plasma copper,a2 degrade’lea table_plasma,a1
lea degrade,a2
move.l #100,d2
move.l #haut_plasma-1,d1
loop_haut:
move.b d2,(a1)+
add.b #1,d2
move.b #124+32/2+1,(a1)+
move.w #$fffe,(a1)+
move.l #large_plasma-1,d0
loop_large:
move.w #color00+2,(a1)+
move.w (a2)+,(a1)+
dbf d0,loop_large
dbf d1,loop_haut;recopier Copper list
lea copperlist,a1
move.l pt_ChipCopperlist,a2
move.l #Copperlist-finCopperlist/4-1,d0
loop_Clist:
move.l (a1)+,(a2)+
dbf d0,loop_Clist;interdire multitache
move.l execbase,a6
jsr forbid(a6)
;trouver old_copperlist dans graphics library
;cest a dire l
adresse de l`ecran de depart
move.l execbase,a6
lea gfxname,a1
jsr openlibrary(a6)
move.l d0,gfxbase
move.l d0,a1
;nouvel ecran
move.l start_up_Clist(a1),oldclist
move.l pt_Chipcopperlist,start_up_Clist(a1)testSouris:
jsr onduler_plasma
add.w #5,cos_vertical_valeurbtst #6,porteA
bne.s testSouris
endprg:
move.l execbase,a6
move.l #memoireChiplong,d0
add.l #finCopperlist-Copperlist,d0
move.l memoireChipdebut,a1
jsr freemem(a6)move.l gfxbase,a1
move.l oldclist,start_up_Clist(a1)rts
*******************************************************************
;=============================================
new_make_degrade:encore_des_couleurs:
moveq #0,d1
moveq #0,d2
move.w (a1)+,d1 ;couleur debut
move.w (a1)+,d2 ;couleur fin
moveq #0,d3
move.w (a1)+,d3 ;nombre de ligne
run_degrade:
;bleu
move.l d1,d4
move.l d2,d5
andi.w #$f,d4 ;valeur de bleu
andi.w #$f,d5
asl.w #8,d4 ;grossir les valeurs
asl.w #8,d5move.w d4,bleu
sub.w d4,d5 ;differences debut-finext.l d5
divs d3,d5 ;d5 = bleu progressionmove.w d5,bleuStep
;vert
move.l d1,d4
move.l d2,d5
andi.w #$f0,d4 ;valeur de vert
andi.w #$f0,d5
asl.w #4,d4 ;grossir les valeurs
asl.w #4,d5
move.w d4,vertsub.w d4,d5 ;differences debut-fin
ext.l d5
divs d3,d5 ;d4 = bleu progression
move.w d5,vertStep;rouge
move.l d1,d4
move.l d2,d5
andi.w #$f00,d4 ;valeur de rouge
andi.w #$f00,d5
move.w d4,rougesub.w d4,d5 ;differences debut-fin
ext.l d5
divs d3,d5 ;d4 = bleu progression
move.w d5,rougeSteploopdegrade:
move.w bleustep,d4
add.w d4,bleu
move.w vertstep,d4
add.w d4,vert
move.w rougestep,d4
add.w d4,rougemoveq #0,d1
move.b rouge,d1
asl.w #4,d1
ori.b vert,d1
asl.w #4,d1
ori.b bleu,d1move.w d1,(a2)+
subq #1,d7
beq.s fincopsubq #1,d3
bne.s loopdegrade
bra encore_des_couleurs
fincop:
rtsbleu:
dc.w 0
vert:
dc.w 0
rouge:
dc.w 0bleuStep:
dc.w 0
vertStep:
dc.w 0
rougeStep:
dc.w 0degradelist1:
dc.w $8bf,$02a,40
dc.w $018,$d8b,25
dc.w $d8b,$7fe,20
dc.w $7fe,$091,30
dc.w $091,$fc5,45degradelist2:
dc.w $004,$d8b,45
dc.w $d8b,$fe7,10
dc.w $fe7,$ff0,3
dc.w $ff0,$fe7,15
dc.w $fe7,$fff,40
dc.w $fff,$631,40vdegrade1:
blk.w haut_plasma
vdegrade2:
blk.w haut_plasma
degrade:
blk.w large_plasma*haut_plasma************************************
even
bouger_plasma:lea degrade,a1
lea table_plasma+6,a2
lea decal_rouge,a3moveq #0,d7
move.w (a3)+,d2
lea (a2,d2.w),a2
move.l #haut_plasma-1-8,d1
sub.l d2,d1
loop_decal:
move.w (a1),(a2)
lea 32*2(a1),a1
lea 32*4+4(a2),a2
dbf d2,loop_decal
lea table_plasma+6,a2
dbf d1,loop_decalrts
even
decal_rouge:
dc.w 32*4+4*2************************************
onduler_plasma:move.w cos_vertical_valeur,d4
lea table_plasma,a1
move.l #haut_plasma-1,d1chaque_ligne:
jsr cosinuslsr.w #4,d5
add.w #32+124,d5
lsr.w #1,d5
bset #0,d5
move.b d5,1(a1)add.w cos_vertical_step,d4
lea large_plasma*4+4(a1),a1
dbf d1,chaque_lignerts
;=====================================
cosinus:
lea tablecosinus,a2
cmpi.w #aprox,d4
bmi.s pas_de_probleme
ext.l d4
divu #aprox,d4
swap d4
pas_de_probleme:
lsl.w #1,d4
move.w (a2,d4.w),d5
rts
**************************************
cos_vertical_step:
dc.w 20
cos_vertical_valeur:
dc.w 0
*********** sous programme : charge des fichiers ****************
LOAD:
openfile:
move.l dosbase,a6
move.l #old,d2
jsr open(a6)
tst.l d0
beq cant_openmove.l d0,filehandle
readfile:
move.l dosbase,a6
move.l filehandle,d1
move.l d4,d2
jsr read(a6)closefile:
move.l dosbase,a6
move.l filehandle,d1
jsr close(a6)cant_open:
rts
**************************************
memoireChipdebut:
dc.l 0
pt_ChipCopperlist:
dc.l 0
pt_Ecran:
dc.l 0
dosname:
dc.b ‘dos.library’,0
even
dosbase:
blk.l 1
even
filename:
dc.b ‘df0:mon_image’,0
even
filename2:
dc.b ‘df0:tablecosinus’,0
even
filehandle:
blk.l 1
even
gfxname:
dc.b « graphics.library »,0
even
gfxbase:
dc.l 0
oldclist:
dc.l 0;**********PROGRAMMES DU COPPER**********
even
copperlist:
dc.w bplcon0,$3200,bplcon1,0,bplcon2,0
dc.w bpl1mod,0,bpl2mod,0
dc.w ddfstrt,$038,ddfstop,$0d0
dc.w diwstrt,$2c81,diwstop,$2cc1
palette1:
blk.w 2*nbrecouleurs,$1fe
pointeurs_ecran:dc.w $00e0,0,$00e2,0,$00e4,0,$00e6,0
dc.w $00e8,0,$00ea,0,$00ec,0,$00ee,0
dc.w $00f0,0,$00f2,0,$00f4,0,$00f6,0dc.w 100*256+1,$fffe
dc.w diwstrt,$2c81+32,diwstop,$c1-32+$2c00
table_plasma:
blk.w large_plasma*2+2*haut_plasma,$1fe
dc.w color00+2,0
dc.w $ffff,$fffe
finCopperlist:tablecosinus:
blk.w 360,0Bonjour Thellier,
Merci pour tes références, notamment celles de bouquins, j’en aurai besoin. Avant d’espérer me lancer un jour dans un mix C/ASM, je vais déjà voir si j’arrive à me dépatouiller avec un seul dans un premier temps 😉
Merci pour ton code, ce sera un exemple qui me servira de repère.
@ColonelAsshole (ça c’est du pseudo), merci de ta contribution, fier de toi je suis, la nation avec !
Amos a été mentionné plus haut, pour un noob (sans sous entendu aucun faut bien commencer un jour) c’est tout à fait adapté, il y a plein d’exemples de scrolls de machins et de bidules, je peux te passer tout ce que j’ai aussi etc…
Salut Hivernaal,
Pas de souci, j’accepte l’idée d’être un noob, un rookie, un bossu de la rectitude sémantique informatique, un stagiaire assigné à la cafetière des développeurs, un apprenti pisseur de code, un cloporte rampant aux pieds des bits, un… (longue liste) 😀
Concernant les langages, j’avais touché le basic sous amstrad CPC, puis j’ai repris sur PC quelques années après. HTML, CSS, un peu de javascript, beaucoup de PHP pendant quelques années, vbscript au besoin, j’ai touché aussi au SQL… Survolé le shell sur nunux… Je me suis dirigé sur ces langages, qui n’ont rien à voir avec l’assembleur, parce que j’en avais l’utilité pratique en fonction d’attentes précises. Je ne suis pas développeur, mais je suis à l’aise pour mes besoins, sachant que c’est motivant d’atteindre ses objectifs.
Par contre, je n’ai jamais eu l’utilité de me pencher sur l’assembleur, et je dois dire que depuis mes 12 ans (où j’avais vu pour la première fois les listings ésotériques imprimés d’un voisin plus âgé que moi), ça m’a toujours titillé. Je ne sais pas encore si c’est avec des étoiles plein les yeux, ou comme on regarde une méduse crevée sur la plage, mais je suis très curieux de voir un peu le bidule de beaucoup plus près… maintenant que j’ai un but pratique.
‘Faut juste que je trouve un des trois bouquins mentionnés par Thellier, parce que je repars de zéro…
Si vraiment ça le fait pas, je testerai Amos en second lieu.
Il y a un monde entre les deux.
Mais à priori tu es loin d’être un noob, Amos (et ses défauts) ne va pas te convenir le blitz basic lui (gestion de l’AGA etc…) est un meilleur choix (dans les basics hein.. le reste j’y connais rien).
Tu feras voir au fur et à mesure ? Je suis toujours friand de l’expérience des autres.
@Hivernaal
Oui bien sûr, si j’arrive à quelque chose d’un peu potable, je partagerai. Le temps de m’y mettre, d’assimiler et d’arriver déjà à tirer quelques effets, ça ne va pas être immédiat. Mais avec toutes les indications des participants, j’ai déjà de quoi explorer de nombreuses pistes, et peut-être de trouver une voie.A suivre 🙂
7 sujets de 16 à 22 (sur un total de 22)
- 1
- 2
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › Création › Création de démos