CPC Rulez
https://cpcrulez.fr/forum/

Amstrad + DMA
https://cpcrulez.fr/forum/viewtopic.php?f=5&t=5434
Page 1 sur 2

Auteur :  power_ukx [ 05 Jan 2015, 17:34 ]
Sujet du message :  Amstrad + DMA

Bonjour à tous,
quelqu'un pourrait il me dire en combien de temps l'Asic (DMA) met à jour un registre AY (sélection du reg + nouvelle valeur) ?

Et quand on utilise les 3 DMAs, comment se passe la programmation de l'AY ?

Je n'ai malheureusement plus d'oscillo pour mesurer BDIR et BC1...

Merci

Auteur :  AsT [ 05 Jan 2015, 19:04 ]
Sujet du message :  Re: Amstrad + DMA

Les Dma se mettent à jour pendant et à chaque hbl et ceci est valable pour les 3 canaux Dma pour chaque instruction de ta Dma-list.
Concernant l'ay, les Dma prennent le pas sur l'ay et seront toujours prioritaires. Une fois la Dma-list passée, l'ay reprends le pas.
Je ne te donnerai pas le temps que prends l'instruction durant la Hbl sachant que je n'ai rien pour mesurer.

Auteur :  Plissken [ 05 Jan 2015, 19:49 ]
Sujet du message :  Re: Amstrad + DMA

J'en profite pour rajouter une question: on peu avoir en même temps ay et dma ?Genre 2 canaux AY et le dernier utilisé par le DMA ?

Auteur :  AsT [ 05 Jan 2015, 20:30 ]
Sujet du message :  Re: Amstrad + DMA

Oui, je l'ai fait pour la Synergy Demo avec mon emulation malheureuse des Sid Voices. J'avais fait des essais également avec des transferts ayc ST qui géraient les Digidrums. L'ay s'occupait de gérer le tradi, tandis que le dma, lui gérait les samples.

Dans la rst#38, mon choix a été different puisque j'ai fait mon propre player Full-Dma qui gérait à la fois le tradi (1 canal Dma) et les samples (2ème canal Dma)

Pour revenir à l'utilisation des Dma sur Cpc plus, vous pouvez aussi utiliser celui-ci.

Auteur :  power_ukx [ 05 Jan 2015, 20:49 ]
Sujet du message :  Re: Amstrad + DMA

Merci pour ta reponse Ast, mais j'aurais voulu les timings... Pour 3 dma-list : 3x4µs ?

Auteur :  Plissken [ 05 Jan 2015, 21:12 ]
Sujet du message :  Re: Amstrad + DMA

Merci aussi pour ta réponse.

Mais j'ai jamais rien compris non plus au dma :(
/hors sujet on
Fano a coder un outils pc:mycpctoolkit qui gere certains aspect du plus pour info.

http://cpcrulez.fr/coding-crossdev_coding-mycpctoolkit.htm
/hors sujet off

Auteur :  AsT [ 05 Jan 2015, 21:55 ]
Sujet du message :  Re: Amstrad + DMA

@Power, poste sur push'n pop, je suppose que Grim ou Offset auront une réponse pour toi concernant les timings.

Auteur :  arnoldemulator [ 06 Jan 2015, 14:12 ]
Sujet du message :  Re: Amstrad + DMA

http://www.cpctech.org.uk/docs/arnold5a.html

"The exact timing is based on 1us cycles as follows. After the leading edge of HSYNC from the 6845, there is one dead cycle followed by an instruction fetch cycle for each channel which is active (i.e. enabled and not paused). The execute cycles then follow for each active channel. All instructions execute in one cycle, except that LOAD requires at least 8 cycles. An extra cycle is added to a LOAD if the CPU is accessing the 8255, or two extra cycles if the CPU access was itself a PSG register write."

If all 3 channels are enabled, and all are using LOAD.

After HSYNC start it us:

1us unused, 1us channel a instruction, 1us channel b instruction, 1us channel c instruction, load channel a, load channel b, load channel c.

Total: 1+1+1+1+8+8+8 = 28 Cycles.

This is not confirmed yet, but I think these are the timings.

The DMA does restore selected PSG register and PPI port A input/output state.
I have tested this.

Auteur :  AsT [ 06 Jan 2015, 14:21 ]
Sujet du message :  Re: Amstrad + DMA

thanks for your explanations.

Auteur :  power_ukx [ 12 Jan 2015, 11:51 ]
Sujet du message :  Re: Amstrad + DMA

Thanks arnoldemulator for you explanations.

Actuellement je me fabrique un logic analyzer "basic", j'ai recupere un proto d'un projet de mon ancien taf (à base de LPC2388 à 72MHz). J'arrive à une période de 69.4ns. En pièce jointe , un screenshot de ce que j’obtiens.
Le soft est pas encore terminé comme vous pouvez le voir :) mais çà avance bien !

Pour info le trig est placé sur la ligne RED[3] du circuit AMS40464 (DAC video), j'ai donc triggé un pixel rouge en fin de ligne (proche HSYNC).

J'y retourne ... ;)

Auteur :  AsT [ 12 Jan 2015, 14:02 ]
Sujet du message :  Re: Amstrad + DMA

Peux tu nous dire à quoi ça va servir?

Auteur :  power_ukx [ 12 Jan 2015, 14:59 ]
Sujet du message :  Re: Amstrad + DMA

Yop,
un logic analyzer permet comme son nom l'indique d'analyser des signaux logique (0 ou 1), contrairement à l'oscilloscope qui mesure des tensions,quoique ...

Mon tools me permet de visualiser certains timings, et permet de répondre à ma question de départ :
Citer :
quelqu'un pourrait il me dire en combien de temps l'Asic (DMA) met à jour un registre AY (sélection du reg + nouvelle valeur) ?

Je comprends mieux les timings données par arnoldemulator.

L'exemple donné correspond à la mise à jour des 3 registres de volume de l'AY avec 3 DMAs, sans accès du Z80. On peut voir que l'ASIC effectue à la suite :
- sélection registre AY
- écriture donnée
- sélection registre AY
- sélection registre AY
- écriture donnée
- sélection registre AY
- sélection registre AY
- écriture donnée
- sélection registre AY

Bref c'est un peu ridicule dans ce cas, car il y a 2xsélection registre AY entre 2 DMAs, quelle perte de temps :).

Et du coup je comprend mieux pourquoi ma technique pour lire les samples >4 bits et dégueulasse :D

Voila, voila.

Auteur :  TotO [ 12 Jan 2015, 15:35 ]
Sujet du message :  Re: Amstrad + DMA

Bel outil !
J'espère qu'on continuera à avoir des news à son sujet... :)

Auteur :  Megachur [ 12 Jan 2015, 19:46 ]
Sujet du message :  Re: Amstrad + DMA

power_ukx a écrit :
- sélection registre AY
- sélection registre AY


en fait, y'a pas forcément deux fois l'instruction sélection registre AY... C'est plutôt qu'il y a un out qui sélectionne le registre AY puis le temps que l'instruction suivante soit envoyé à l'AY, celui-ci fait la même chose tant qu'on a pas changé l'instruction suivante

exemple de code pour illustrer : tant que BDIR et BC1 ne sont pas changer, l'AY fait la même chose !

// The Gate Array has the following roles: generation of a 1Mhz clock for the CRTC and AY-3-8912

dans le cas du PLUS, c'est donc l'ASIC qui dirige l'AY !

Code :
switch(this.BDIR<<1|this.BC1) {
         case 0x00: // inactive
         break;
         case 0x01: // read
         break;
         case 0x02: // write
         break;
         case 0x03: // select PSG register
         break;
}

Auteur :  arnoldemulator [ 13 Jan 2015, 09:57 ]
Sujet du message :  Re: Amstrad + DMA

Is it this?

dma select register
dma write register
restore previous ay register selection
dma select register
dma write register
restore previous ay register selection
dma select register
dma write register
restore previous ay register selection

?

What does the ay data look like?

I would also be interested to see the pattern when both "cpu" and dma are accessing ay.

Does DMA wait or steal?

Page 1 sur 2 Le fuseau horaire est UTC+1 heure
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/