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).
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)
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
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 Merci bien
Inscription : 12 Juin 2008, 20:29 Message(s) : 1710
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))
Inscription : 15 Août 2008, 13:00 Message(s) : 968 Localisation : Troyes, France
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)
Inscription : 28 Août 2008, 23:41 Message(s) : 261
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.
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.
Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 3 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