Index du forum




Un petit coup de main... Vous pouvez nous aider à mettre ce site à jour: n'hésitez pas à me contacter !!!

* Connexion   * Inscription

* FAQ
Nous sommes actuellement le 29 Nov 2025, 22:59

Index du forum » Z80 Coding

Le fuseau horaire est UTC+1 heure


Questions sur les interruptions

Modérateur: poulette73



Publier un nouveau sujet Répondre au sujet  Page 1 sur 1
 [ 11 message(s) ] 
  Aperçu avant impression Sujet précédent | Sujet suivant 
Auteur Message
dentifiant
 Sujet du message : Questions sur les interruptions
Message Publié : 28 Fév 2011, 17:48 
Hors-ligne
Rulez
Rulez

Inscription : 25 Fév 2011, 19:35
Message(s) : 33
Bien le bonjour.

J'ai lu pas mal de docs dispo sur les interruptions, mais il subsiste quelques points obscurs dans mon esprit.

Déjà quel est la difference fondamentale entre placer EI RET ou juste RET en &38 ? Je comprend à peu près la difference d'effet entre les deux (enfin je crois), mais je comprend pas le pourquoi du comment techniquement parlant...

Ensuite, dans mon projet, j'ai besoin à un moment de compter le temps (genre : mon gars, à partir de maintenant, il te reste 1 minute 37 secondes avant qu'il se passe un truc). Ai-je absolument besoin des interruptions pour ça, et si oui, comment faire pour en placer une (d'interruption), quand je me suis débarassé de toutes celles du système et des vecteurs avec ? (Idem, j'ai lu qu'il y avait moyen, mais le comment m'échappe un peu).

Merci d'avance pour vos lumières.


Haut
 Profil  
 
fano
 Sujet du message : Re: Questions sur les interruptions
Message Publié : 28 Fév 2011, 17:55 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 15 Août 2008, 13:00
Message(s) : 968
Localisation : Troyes, France
La différence est que si tu ne mets pas le EI tu ne vas pas autoriser à nouveau les interruptions quand tu sortira de ta routine de traitement.

Sinon , pour compter le temps restant , ça dépends si tu cales ton programme sur la VBL tu peux avoir un compteur basé sur 1/50ème de seconde et pas te faire chier avec les interruptions.
Après , c'est pas compliqué d'écrire sa propre routine d'interruption , ce qui est pas mal c'est d'identifier la première int en testant la VBL (pas sur que ça marche avec des configs CRTC "exotiques") et de faire une table de branchement en fonction.

En IM1 , ta routine est obligatoirement en #38 , en IM2 tu peux choisir moyennant un bradage de 256 octets.Sur CPC , tu ne choisis pas quand l'int tombe , c'est 6 fois par image (52 lignes?) , tu peux retarder la prochaine int mais je crois que c'est tout.

_________________
"NOP" tel est le programme parfait ! court, rapide, lisible et sans bugs (connus)


Haut
 Profil  
 
dentifiant
 Sujet du message : Re: Questions sur les interruptions
Message Publié : 28 Fév 2011, 18:04 
Hors-ligne
Rulez
Rulez

Inscription : 25 Fév 2011, 19:35
Message(s) : 33
fano a écrit :
La différence est que si tu ne mets pas le EI tu ne vas pas autoriser à nouveau les interruptions quand tu sortira de ta routine de traitement.


Parce que les interruptions sont interdites dans ce cas ? (Comme un DI implicite sortit de nulle part, qui va avec le call &38 ?) Excusez mes questions un peu bancales mais c'est pas toujours évident à suivre quand on débarque :sweatingbullets:

fano a écrit :
Sinon , pour compter le temps restant , ça dépends si tu cales ton programme sur la VBL tu peux avec un compteur basé sur 1/50ème de seconde et pas te faire chier avec les interruptions.


J'attend bel et bien la prochaine VBL pour afficher proprement oui, mais je m'occupe pas de savoir combien en sont passées pendant la boucle précédente donc ça va être tendu.

fano a écrit :
Après , c'est pas compliqué d'écrire sa propre routine d'interruption , ce qui est pas mal c'est d'identifier la première int en testant la VBL (pas sur que ça marche avec des configs CRTC "exotiques") et de faire une table de branchement en fonction.


Bon, je vais essayer de digérer ça déjà. Faut que je retourne manger du gate array et du CRTC si je pige tout :sweatingbullets: Merci bien :)


Haut
 Profil  
 
fano
 Sujet du message : Re: Questions sur les interruptions
Message Publié : 28 Fév 2011, 18:31 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 15 Août 2008, 13:00
Message(s) : 968
Localisation : Troyes, France
dentifiant a écrit :
Parce que les interruptions sont interdites dans ce cas ? (Comme un DI implicite sortit de nulle part, qui va avec le call &38 ?)
Pas de souci , y'a effectivement un DI implicite quand l'int est lancée.

Voilà un petit exemple d'une routine d'int simple qui se loge en #38 , avec juste un bout de code du player son appelé que tu peux ignorer.

Code :
;ISR code

   push AF
   push BC
   push HL

;get if we are on VBL
   ld B,#F5
   in A,(C)
   rra
   jr nc,int_not_VBL

   ld A,#FF
   ld (int_counter),A

.int_not_VBL

int_counter   EQU $+1
   ld A,0
   inc A
   and 7
   ld (int_counter),A

   add A,A
int_table   EQU $+1
   ld HL,int_default_table
   ld C,A
   ld B,0
   add HL,BC
   ld A,(HL)
   inc HL
   ld H,(HL)
   ld L,A

   jp (HL)

.int_done

   pop HL
   pop BC
   pop AF
   ei
   ret
   
;interrupt table - 8 vectors
.int_default_table
dw int_done
dw int_SND_Player
dw int_done
dw int_done
dw int_done
dw int_done
dw int_done
dw int_done

;sound player INT
.int_SND_Player
   ld A,(#4000)
   push AF
   ld BC,#7FC7
   out (C),C
   
   call SND_Run
   
   pop AF
   ld B,#7F
   out (C),A
   jr int_done

_________________
"NOP" tel est le programme parfait ! court, rapide, lisible et sans bugs (connus)


Haut
 Profil  
 
dentifiant
 Sujet du message : Re: Questions sur les interruptions
Message Publié : 28 Fév 2011, 19:24 
Hors-ligne
Rulez
Rulez

Inscription : 25 Fév 2011, 19:35
Message(s) : 33
Waa nickel merci bien, j'm'en vais décortiquer tout ça :JC_doubleup:


Haut
 Profil  
 
norecess
 Sujet du message : Re: Questions sur les interruptions
Message Publié : 01 Mars 2011, 00:23 
Super aide de ta part fano, je trouve ca tip top! :winner:


Haut
  
 
dentifiant
 Sujet du message : Re: Questions sur les interruptions
Message Publié : 01 Mars 2011, 00:34 
Hors-ligne
Rulez
Rulez

Inscription : 25 Fév 2011, 19:35
Message(s) : 33
Pratique le truc de equ $+1, je connaissais pas.

Par contre, le fait qu'il y ai un point devant un nom de label change quelquechose ou c'est juste une autre syntaxe ?

Si j'ai tout bien comris, int_SND_Player est executé à chaque VBL ?
Ou j'ai raté un truc ? :sweatingbullets:

norecess a écrit :
Super aide de ta part fano, je trouve ca tip top! :winner:


+1 merci c'est vraiment cool


Haut
 Profil  
 
Megachur
 Sujet du message : Re: Questions sur les interruptions
Message Publié : 01 Mars 2011, 08:27 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 12 Juin 2008, 20:29
Message(s) : 1726
le . indique juste que c'est un label... mais on en pas besoin.
tu trouveras également des ":" à la fin d'un label aussi... selon l'assembleur c'est accepté (dams, maxam, etc.)

exemple :

label
.label
label:

int_SND_Player est exécuté à la seconde interruption... et normalement, le compteur d'interruption doit passer à 2 une fois par VBL (à condition d'être synchro avec la VBL ce que fait le morceau de code qui réinitialise le compteur à &ff (qui devient 0 à la 1ière interruption))


Haut
 Profil  
 
fano
 Sujet du message : Re: Questions sur les interruptions
Message Publié : 01 Mars 2011, 08:36 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 15 Août 2008, 13:00
Message(s) : 968
Localisation : Troyes, France
:oops:

Le point c'est l'habitude de NASM mais à mon grand regret WINAPE ne gère pas les labels locaux (Démoniak si tu m'entends !) donc c'est inutile , je les garde juste pour faire ressortir les labels du reste.

Sinon , tu as tout compris , int_SND_Player est exécuté pour la seconde interruption à chaque frame.
Il y 8 adresses dans la table pour des questions de simplicité (un AND 7 c'est plus facile et rapide que de capper à 5) et il se peut que le code ne soit pas synchro sur la première frame et c'est pour ça qu'il faut renseigner les deux adresses en trop.

_________________
"NOP" tel est le programme parfait ! court, rapide, lisible et sans bugs (connus)


Haut
 Profil  
 
Longshot
 Sujet du message : Re: Questions sur les interruptions
Message Publié : 01 Mars 2011, 11:27 
Hors-ligne
VIP
VIP
Avatar de l’utilisateur

Inscription : 28 Août 2008, 23:41
Message(s) : 270
Citer :
en IM2 tu peux choisir moyennant un bradage de 256 octets

257...et calés sur une frontière de page.
L'adresse du vecteur d'interruption est composée du registre Z80A I et d'un octet aléatoire.
L'octet aléatoire peut être FF, donc le Z80A doit aller chercher le reste de l'adresse sur la page suivante.


Haut
 Profil  
 
dentifiant
 Sujet du message : Re: Questions sur les interruptions
Message Publié : 01 Mars 2011, 16:49 
Hors-ligne
Rulez
Rulez

Inscription : 25 Fév 2011, 19:35
Message(s) : 33
Bon, je crois que j'ai tout bien compris tout ça, du moins ce qui va m'être utile dans les jours à venir. Pour le mode IM2, je verrais ça plus tard. Apprenons à marcher avant de se mettre à courire.


Haut
 Profil  
 
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  Page 1 sur 1
 [ 11 message(s) ] 

Index du forum » Z80 Coding

Le fuseau horaire est UTC+1 heure


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 18 invité(s)


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Aller vers :  
cron
Powered by phpBB® Forum Software © phpBB Group
Traduit en français par Maël Soucaze.