Exemple de DMA
Modérateurs : SirG, Redfield1, shubibiman, Laucops
- xav
- NECrophage
- Messages : 1159
- Inscription : mar. 05 juil. 2005 22:12
- Localisation : Le plus grand four solaire de France, Montpellier
Exemple de DMA
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
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)
- Sebnec
- NECrophile
- Messages : 996
- Inscription : lun. 19 sept. 2005 01:24
- Localisation : Marseille
- shubibiman
- Administrateur
- Messages : 16392
- Inscription : jeu. 23 sept. 2004 14:26
- Localisation : Meet me at Shubibi's
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
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.
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
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*****
*****Membre du FLPCE Canal Historique*****
- El magnifico
- NECrophage
- Messages : 1481
- Inscription : mer. 09 août 2006 14:35
- Localisation : Nantes -Bretagne
- shubibiman
- Administrateur
- Messages : 16392
- Inscription : jeu. 23 sept. 2004 14:26
- Localisation : Meet me at Shubibi's
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.
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*****
*****Membre du FLPCE Canal Historique*****
- Kaminari
- Modérateur
- Messages : 7049
- Inscription : ven. 24 sept. 2004 19:36
- Contact :
- xav
- NECrophage
- Messages : 1159
- Inscription : mar. 05 juil. 2005 22:12
- Localisation : Le plus grand four solaire de France, Montpellier
C'est ma faute
, 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.
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:

J'imagine que nec diffusait à ces editeurs un kit de prog officiel, libre a eux de l'utilisé ou de programmé des kits persoLes concepteur des jeux Nec originaux, avaient-ils des outils pour réaliser les jeux ou faisaient-ils tout au code au cas par cas ?
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":Image 1 : -_-_1-_
Image 2 : _-_1-_-
Image 3 : -_1-_-_
Image 4 : _1-_-_-
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:
Exactement, Manta l'utilise d'ailleurs mais en transfert soft, la grande nouveauté est l'introduction de la DMArè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) ?
"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)
- shubibiman
- Administrateur
- Messages : 16392
- Inscription : jeu. 23 sept. 2004 14:26
- Localisation : Meet me at Shubibi's
- touko
- NECromancer
- Messages : 2297
- Inscription : lun. 31 mars 2008 14:32
Je vais regarder ca de plus présxav a écrit :C'est ma faute, 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.
Mais y'a de L'asm dedans
Les devs avaient tout ce qu'il faut doc technique, fonctions premachées,moteurs,sprites,et surement un soutien technique de nec etc ..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 ?
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.
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.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.
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).
- MooZ
- Administrateur
- Messages : 2090
- Inscription : jeu. 16 déc. 2004 14:25
- Contact :
- xav
- NECrophage
- Messages : 1159
- Inscription : mar. 05 juil. 2005 22:12
- Localisation : Le plus grand four solaire de France, Montpellier
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.Si je ne raconte pas de conneries, si tu passes la resolution en X à 512, le transfert dma est accéléré.
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)
- Kaminari
- Modérateur
- Messages : 7049
- Inscription : ven. 24 sept. 2004 19:36
- Contact :
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.
- MooZ
- Administrateur
- Messages : 2090
- Inscription : jeu. 16 déc. 2004 14:25
- Contact :
Ca y ressemble
La resolution horizontale est changée pendant le hsync.
Tu auras par exemple :
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:
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
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.

