Création de démos

7 sujets de 16 à 22 (sur un total de 22)

  • 1
  • 2
  • Anonyme

      #244649

      La Enigma/Phenomena, démo de référence sur A500, a été codé avec Devpac 2.14. Source : Interview d’Azathot.

      Good Luck !

      thellier

        #244654

        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=$dff000

        color00=$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=$bfe001

        nbrebitplans=5
        large=320
        haut=256
        taillebitplan=large*haut/8
        nbrecouleurs=32

        memoireChiplong=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 couleurs

        lea degradelist1,a1
        lea vdegrade1,a2
        move.l #haut_plasma,d7
        jsr new_make_degrade

        lea degradelist2,a1
        lea vdegrade2,a2
        move.l #haut_plasma,d7
        jsr new_make_degrade

        lea 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,d7

        jsr 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 ladresse 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_valeur

        btst #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,d5

        move.w d4,bleu
        sub.w d4,d5 ;differences debut-fin

        ext.l d5
        divs d3,d5 ;d5 = bleu progression

        move.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,vert

        sub.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,rouge

        sub.w d4,d5 ;differences debut-fin
        ext.l d5
        divs d3,d5 ;d4 = bleu progression
        move.w d5,rougeStep

        loopdegrade:
        move.w bleustep,d4
        add.w d4,bleu
        move.w vertstep,d4
        add.w d4,vert
        move.w rougestep,d4
        add.w d4,rouge

        moveq #0,d1
        move.b rouge,d1
        asl.w #4,d1
        ori.b vert,d1
        asl.w #4,d1
        ori.b bleu,d1

        move.w d1,(a2)+
        subq #1,d7
        beq.s fincop

        subq #1,d3
        bne.s loopdegrade
        bra encore_des_couleurs
        fincop:
        rts

        bleu:
        dc.w 0
        vert:
        dc.w 0
        rouge:
        dc.w 0

        bleuStep:
        dc.w 0
        vertStep:
        dc.w 0
        rougeStep:
        dc.w 0

        degradelist1:
        dc.w $8bf,$02a,40
        dc.w $018,$d8b,25
        dc.w $d8b,$7fe,20
        dc.w $7fe,$091,30
        dc.w $091,$fc5,45

        degradelist2:
        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,40

        vdegrade1:
        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,a3

        moveq #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_decal

        rts

        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,d1

        chaque_ligne:
        jsr cosinus

        lsr.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_ligne

        rts
        ;=====================================
        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_open

        move.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,0

        dc.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,0

        Anonyme

          #244657

          Bonjour 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 !

          Anonyme

            #244672

            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…

             

            Anonyme

              #244704

              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.

              Anonyme

                #244732

                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.

                 

                Anonyme

                  #244743

                  @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

                Amiga Impact