Exemple de DMA

Le coin des demomakers et des programmeurs en herbe.

Modérateurs : SirG, Redfield1, shubibiman, Laucops

Avatar de l’utilisateur
xav
NECrophage
Messages : 1159
Inscription : mar. 05 juil. 2005 22:12
Localisation : Le plus grand four solaire de France, Montpellier

Exemple de DMA

Message par xav »

La DMA "Direct Memory Access" permet de transférer de facon hardware des données en ram sans travail du CPU.

Pour la nec, cette dma permet de travailler directement dans la ram video, ce qui permet des effet interressant sans ralentir le CPU.

Cette example contient deux application:

1 - Changer le contenu d'un tile "à  la volé" pour affiché une animation cyclique
2 - changer le contenu d'un tile avec la méme image sensiblement décalé, pour simulé un scroll

http://rapidshare.com/files/133828373/dma.rar.htm

La seule inconnu est la facon dont le circuit video gére 2 dma transmise coup sur coup, la premiére n'etant pas terminer.... A tester
"Theory, it's when we know everything and nothing works. Practice, it's when everything works and nobody knows why. Here, we have put together theory and practice : Nothing works... and nobody knows why!" (Albert Einstein)
Avatar de l’utilisateur
Sebnec
NECrophile
Messages : 996
Inscription : lun. 19 sept. 2005 01:24
Localisation : Marseille

Message par Sebnec »

First, there was a menace
Now, Psygnosis presents a DMA Design game. Blood money.


Désolé, il y a des mots qui évoquent des souvenirs en moi (les fans de l'Amiga reconnaîtront). :D

EDIT: sinon, j'ai rien compris à  ton post. J'ai honte.
Avatar de l’utilisateur
shubibiman
Administrateur
Messages : 16392
Inscription : jeu. 23 sept. 2004 14:26
Localisation : Meet me at Shubibi's

Message par shubibiman »

Pareil, n'étant pas au fait de tout ce qui touche à  la prog, je ne comprends que rarement les messages de Xav. Tu as donc 2 possibilités :

a) tu te réjouis car quand Xav poste, c'est toujours pour annoncer de bonnes nouvelles

b) tu cliques sur le lien, tu télécharges, tu installes sur ta flashcard et tu testes sur une PCE et tu admires.

Généralement, ça marche bien :wink:

Edit: je pense avoir compris! En fait, tu joues sur l'affichage des tiles pour simuler un scrolling? J'ai bon?

Edit 2 : bah oui, en fait c'est clairement dit dans ton message. Je vais regarder ça ce soir en rentrant du taf.
"You are truly the PCE game clearing master"

*****Membre du FLPCE Canal Historique*****
Avatar de l’utilisateur
El magnifico
NECrophage
Messages : 1481
Inscription : mer. 09 août 2006 14:35
Localisation : Nantes -Bretagne

Message par El magnifico »

Question d'abruti total en la matière :

Les concepteur des jeux Nec originaux, avaient-ils des outils pour réaliser les jeux ou faisaient-ils tout au code au cas par cas ?

Et si les outils existaient, est-ce qu'ils sont utilisables par des gars surpuissant en programmation comme xav ?
Avatar de l’utilisateur
shubibiman
Administrateur
Messages : 16392
Inscription : jeu. 23 sept. 2004 14:26
Localisation : Meet me at Shubibi's

Message par shubibiman »

Donc si je comprends bien le principe : tu remplaces une tile par une autre tile différente, celle qui a été remplacée apparaissant à  gauche (si scrolling horizontal), etc...C'est ça?

Genre par exemple :

Image 1 : -_-_1-_
Image 2 : _-_1-_-
Image 3 : -_1-_-_
Image 4 : _1-_-_-

Donc là , au lieu d'avoir un scroll, j'ai 7 tiles. Non? Edit : même pas, j'en ai 3 dont 2 s'affichant 2 fois à  l'écran.

Si oui, la programmation, c'est quand même bien plus que de simples lignes de code, il faut avoir une sacrée jugeotte.
"You are truly the PCE game clearing master"

*****Membre du FLPCE Canal Historique*****
Avatar de l’utilisateur
Kaminari
Modérateur
Messages : 7049
Inscription : ven. 24 sept. 2004 19:36
Contact :

Message par Kaminari »

Marche bien en émul :)

Très astucieux en effet. J'imagine que cette technique peut permettre des effets de pseudo transparence, genre l'avant-plan qui projette une fausse ombre sur l'arrière-plan (façon Spriggan ou Magical Chase) ?
Avatar de l’utilisateur
xav
NECrophage
Messages : 1159
Inscription : mar. 05 juil. 2005 22:12
Localisation : Le plus grand four solaire de France, Montpellier

Message par xav »

C'est ma faute :oops: , ce post répond a une discussion que j'ai eu avec touko a propos des bidouilles a faire en video, donc il faut avoir quelque connaissance en prog pour bien comprendre.
Les concepteur des jeux Nec originaux, avaient-ils des outils pour réaliser les jeux ou faisaient-ils tout au code au cas par cas ?
J'imagine que nec diffusait à  ces editeurs un kit de prog officiel, libre a eux de l'utilisé ou de programmé des kits perso
Image 1 : -_-_1-_
Image 2 : _-_1-_-
Image 3 : -_1-_-_
Image 4 : _1-_-_-
Tu a bien compris, il n'y a qu'un tile pour la lave, et 8 étape d'animation (l'ideal est d'en avoir 16 pour une fluidité optimale), il suffit juste d'étre sur que le tile "boucle sur lui méme":

Par example pour un tile de 4 pixel (pour plus de clarté)

Etape 1: ABCD
Etape 2: BCDA
Etape 3: CDAB
Etape 4: DABC
et on reboucle sur la premiere etape indefiniment et on à  notre pseudo scroll... Cette technique je l'ai decouverte sur C64, quelque jeux nes l'exploite aussi. Sur Nec Dracula X et Magical chase l'utilise a fond.

EDit:
rès astucieux en effet. J'imagine que cette technique peut permettre des effets de pseudo transparence, genre l'avant-plan qui projette une fausse ombre sur l'arrière-plan (façon Spriggan ou Magical Chase) ?
Exactement, Manta l'utilise d'ailleurs mais en transfert soft, la grande nouveauté est l'introduction de la DMA :wink:
"Theory, it's when we know everything and nothing works. Practice, it's when everything works and nobody knows why. Here, we have put together theory and practice : Nothing works... and nobody knows why!" (Albert Einstein)
Avatar de l’utilisateur
shubibiman
Administrateur
Messages : 16392
Inscription : jeu. 23 sept. 2004 14:26
Localisation : Meet me at Shubibi's

Message par shubibiman »

Cool, je commence à  comprendre certaines choses. Bon courage, Xav ;)
"You are truly the PCE game clearing master"

*****Membre du FLPCE Canal Historique*****
Avatar de l’utilisateur
touko
NECromancer
Messages : 2297
Inscription : lun. 31 mars 2008 14:32

Message par touko »

xav a écrit :C'est ma faute :oops: , ce post répond a une discussion que j'ai eu avec touko a propos des bidouilles a faire en video, donc il faut avoir quelque connaissance en prog pour bien comprendre.
Je vais regarder ca de plus prés :-) ...

Mais y'a de L'asm dedans ;-) ..
El magnifico a écrit :Question d'abruti total en la matière :

Les concepteur des jeux Nec originaux, avaient-ils des outils pour réaliser les jeux ou faisaient-ils tout au code au cas par cas ?

Et si les outils existaient, est-ce qu'ils sont utilisables par des gars surpuissant en programmation comme xav ?
Les devs avaient tout ce qu'il faut doc technique, fonctions premachées,moteurs,sprites,et surement un soutien technique de nec etc ..

Ensuite, chaque dev fait ensuite des fonctions/moteurs à  sa sauce, en fonction de ses connaissances du systeme, mais tout été en ASM à  cette époque.
comme aujourd'hui en fait.
shubibiman a écrit :
Si oui, la programmation, c'est quand même bien plus que de simples lignes de code, il faut avoir une sacrée jugeotte.
C'est sur que les idées ca sert, mais egalement l'experience, car quelqu'un qui a develepper pour les 8 bits, peut sans soucis reutiliser ses connaissances qui s'appliqueront pour les autres systemes.

Exemple le tile swapping, marche pour nec, snes, md etc ...
Tout comme le cyclage de palette, en fait pas mal d'effet sympa sont tres simples à  programmer.
Le plus dur en tant qu'amateur, et de partir de zero, sans doc (ou à  moitier), et essayer de comprendre comment ca marche avec juste du code (qd il est dispo).

Le language C, permet une approche plutot simple de la prog sur nec (avec quelques petits inconvenients).
Avatar de l’utilisateur
MooZ
Administrateur
Messages : 2090
Inscription : jeu. 16 déc. 2004 14:25
Contact :

Message par MooZ »

Si je ne raconte pas de conneries, si tu passes la resolution en X à  512, le transfert dma est accéléré.

C'etait tout :p
Avatar de l’utilisateur
xav
NECrophage
Messages : 1159
Inscription : mar. 05 juil. 2005 22:12
Localisation : Le plus grand four solaire de France, Montpellier

Message par xav »

Si je ne raconte pas de conneries, si tu passes la resolution en X à  512, le transfert dma est accéléré.
En réfléchissant ça semble logique, d'aprés McDonald le VDC est cadencé par le VCE, sachant que le VCE augmente ca fréquence suivant qu'il travaille en 256,320 ou 512 point, on peux donc raisonnablement penser que la DMA en est accélérée.

Tiens, un truc à  essayer changer la resolution en 512 pendant le Vsync, lancer la dma et juste avant la fin du vsync revenir en 320...
"Theory, it's when we know everything and nothing works. Practice, it's when everything works and nobody knows why. Here, we have put together theory and practice : Nothing works... and nobody knows why!" (Albert Einstein)
Avatar de l’utilisateur
Kaminari
Modérateur
Messages : 7049
Inscription : ven. 24 sept. 2004 19:36
Contact :

Message par Kaminari »

Je ne sais pas si ça s'y rapporte, mais Chris Covell a pondu une petite démo qui affiche les trois résolutions en split-screen.
Avatar de l’utilisateur
MooZ
Administrateur
Messages : 2090
Inscription : jeu. 16 déc. 2004 14:25
Contact :

Message par MooZ »

Ca y ressemble :) La resolution horizontale est changée pendant le hsync.
Tu auras par exemple :

Code : Tout sélectionner

vsyncHandler:
    jsr     set_xres256

    stz     <_y

    st0     #$06
    st1     #64   ; La scanline #64 est la première visible 
    st2     #00    
    rts

hsyncHandler:
    lda     <_y
    bne     .l0
        jsr     set_xres256
        bra    .end
.l0:
    cmp     #Y0
    bne     .l1
        jsr     set_xres320
        bra     .end
.l1:
    cmp     #Y1
    bne     .l2
        jsr     set_xres512
        bra    .end
.l2:
.end:
    inc    <_y
    rts
De toute façon le code de la demo de Chris est dispo :)

Sur pce il n'y a qu'une seule interruption (irq1) pour le hsync, le vsync et la fin transfert DMA (vram->satb ou vram->vram), et d'autres trucs. Il faut regarder les bits de $0000 pour savoir ce qui a claqué. Et en gros tu peux faire ça:
  • Quand vsync claque: tu passes la resolution horizontale à  512 et tu lances le transfert DMA.
  • Si la fin de transfert DMA claque et que le hsync n'a pas claqué c'est la fete.
  • Si hsync claque: quoiqu'il arrive il faut retourner dans la resolution de base. L'affichage risque d'être affreux si le transfert n'est pas fini. Et faire du "double buffering" risque d'être tendu. Il faut connaitre les tiles affectées par le transfert DMA, et alterner les addresses. La meilleure solution reste de se débrouiller pour que le transfert se finisse avant le hsync.
Avatar de l’utilisateur
dudule
NECromancer
Messages : 3111
Inscription : sam. 25 déc. 2004 21:06

Message par dudule »

eh vous quatres la c'est pour quand la prog en equipe ? cvous devriez nous pondre un truc nan ? :P
<a><img></a><br>
Avatar de l’utilisateur
Luciole
NECromancer
Messages : 3320
Inscription : mar. 10 mai 2005 15:19
Localisation : Calais

Message par Luciole »

En voyant tout ça j'ai eu à  peu pres la même reflextion!

Vous devriez faire un bouquin "technique" NEC franchement! :wink:
Semper Fidelis.
Répondre