Gestion interruption VG5000
Modérateurs : Papy.G, fneck, Carl
Gestion interruption VG5000
Bonjour à tous,
mon projet de Tetris en assembleur avance plutot bien. La gestion du jeu lui_même est terminée. Je voudrais ajouter la mélodie qui accompagne une partie de Tetris.
Puisque la musique doit être jouée simultanément au déroulement de la partie, je dois la placer dans une interruption. Malheureusement, je ne trouve aucune doc sur la gestion des interruptions pour le VG5000. le livre clefs pour VG5000 n'en parle pas.
Quelqu'un sait-il comment on les utilise?
Merci d'avance
mon projet de Tetris en assembleur avance plutot bien. La gestion du jeu lui_même est terminée. Je voudrais ajouter la mélodie qui accompagne une partie de Tetris.
Puisque la musique doit être jouée simultanément au déroulement de la partie, je dois la placer dans une interruption. Malheureusement, je ne trouve aucune doc sur la gestion des interruptions pour le VG5000. le livre clefs pour VG5000 n'en parle pas.
Quelqu'un sait-il comment on les utilise?
Merci d'avance
Re: Gestion interruption VG5000
Bonjour,
Bonne nouvelle, un nouveau projet VG5000 !
La gestion des interruptions par le VG5000 est étroitement liée à son processeur, le Z80.
Je serai donc tenté de dire qu'il faut chercher du côté des Restart (page 73 du bouquin clef pour VG5000).
On doit pouvoir utiliser RST 38 (vieux réflexe de programmeur Amstrad CPC ) qui est facilement
possible de détourner.
Reste à faire de tests pour savoir à quelle fréquence cette adresse de saut est appelée (50ème de seconde ?)
En jetant un oeil rapide sur la rom basic, il y a aussi l'adresse &66 (interruption NMI) qui pourrait être utile.
Tiens, sinon, petite question. Pour la partie affichage, tu programmes directement l'EF9345 ou tu passes par
le buffer mémoire de 2ko ?
Markerror
Bonne nouvelle, un nouveau projet VG5000 !
La gestion des interruptions par le VG5000 est étroitement liée à son processeur, le Z80.
Je serai donc tenté de dire qu'il faut chercher du côté des Restart (page 73 du bouquin clef pour VG5000).
On doit pouvoir utiliser RST 38 (vieux réflexe de programmeur Amstrad CPC ) qui est facilement
possible de détourner.
Reste à faire de tests pour savoir à quelle fréquence cette adresse de saut est appelée (50ème de seconde ?)
En jetant un oeil rapide sur la rom basic, il y a aussi l'adresse &66 (interruption NMI) qui pourrait être utile.
Tiens, sinon, petite question. Pour la partie affichage, tu programmes directement l'EF9345 ou tu passes par
le buffer mémoire de 2ko ?
Markerror
Re: Gestion interruption VG5000
Je programme directement l'EF9345.
Je ne regrette pas. J'ai appris des tonnes de choses sur son fonctionnement.
Mais il n'est pas des plus amical. En ce moment, je suis en train de me battre avec le CALL $92
Il ne veut rien m'afficher le saligaud....
Je ne regrette pas. J'ai appris des tonnes de choses sur son fonctionnement.
Mais il n'est pas des plus amical. En ce moment, je suis en train de me battre avec le CALL $92
Il ne veut rien m'afficher le saligaud....
Re: Gestion interruption VG5000
Bienvenue au club des programmeurs de l'EF9345
Les membres doivent se compter sur les doigts d'une seule main, et aucun d'entre eux ne maîtrise encore toutes les subtilités de la bête. Pour l'avoir émulé dans dcvg5k et dcalice, je peux dire qu'il reste beaucoup de points d'interrogation dans les commentaires du programme. Certaines fonctions ne sont même pas émulées (par exemple KRV, EXP, CMP, KPE).
Les membres doivent se compter sur les doigts d'une seule main, et aucun d'entre eux ne maîtrise encore toutes les subtilités de la bête. Pour l'avoir émulé dans dcvg5k et dcalice, je peux dire qu'il reste beaucoup de points d'interrogation dans les commentaires du programme. Certaines fonctions ne sont même pas émulées (par exemple KRV, EXP, CMP, KPE).
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
- Patrice
- Messages : 1562
- Inscription : 14 janv. 2008 10:42
- Localisation : https://www.ville-saintes.fr/
- Contact :
Re: Gestion interruption VG5000
As-tu respecté cette condition incontournable:joaopa a écrit :Je programme directement l'EF9345.
............................................
Il ne veut rien m'afficher le saligaud....
Re: Gestion interruption VG5000
Oui, je pense que c'est OK. Je vois apparaitre ma chaine de caracteres, mais elle disparait apres une fraction de seconde. Voici le code de test
ORG $5000
JP main
chaine: db "tototo*"
busy:
PUSH AF
CALL $0286
POP AF
RET
EF9345_BUSY:
PUSH BC
CALL $0D7C
CALL busy
POP BC
RET
main:
CALL $9E
LD BC, chaine
LD H, 15
LD L, 12
loop:
LD A, (BC)
LD D, A
LD E, $01
PUSH BC
CALL $95
CALL EF9345_BUSY
POP BC
INC BC
LD A, (BC)
CP "*"
JP NZ, loop
toto:
JP toto
RET
ORG $5000
JP main
chaine: db "tototo*"
busy:
PUSH AF
CALL $0286
POP AF
RET
EF9345_BUSY:
PUSH BC
CALL $0D7C
CALL busy
POP BC
RET
main:
CALL $9E
LD BC, chaine
LD H, 15
LD L, 12
loop:
LD A, (BC)
LD D, A
LD E, $01
PUSH BC
CALL $95
CALL EF9345_BUSY
POP BC
INC BC
LD A, (BC)
CP "*"
JP NZ, loop
toto:
JP toto
RET
- Patrice
- Messages : 1562
- Inscription : 14 janv. 2008 10:42
- Localisation : https://www.ville-saintes.fr/
- Contact :
Re: Gestion interruption VG5000
Dans la boucle d'attente BUSY il est impératif de ne rien faire d'autre que d'attendre le passage du bit 7 de 1 à 0 (ne rien insérer à l'intérieur de la boucle ce qui ne semble pas être le cas dans EF9345_BUSY).
JP main
.........................
busy:
PUSH AF
CALL $0286 <----- qu'elle est la fonction exacte de cet appel
POP AF
RET
.........................
EF9345_BUSY:
PUSH BC
CALL $0D7C <---- qu'elle est la fonction exacte de cet appel
CALL busy
POP BC
RET
.........................
toto:
JP toto
RET
JP main
.........................
busy:
PUSH AF
CALL $0286 <----- qu'elle est la fonction exacte de cet appel
POP AF
RET
.........................
EF9345_BUSY:
PUSH BC
CALL $0D7C <---- qu'elle est la fonction exacte de cet appel
CALL busy
POP BC
RET
.........................
toto:
JP toto
RET
- Carl
- Modérateur
- Messages : 13299
- Inscription : 08 avr. 2007 13:21
- Localisation : http://www.doledujura.fr
- Contact :
Re: Gestion interruption VG5000
Tu peux trouver des infos ici : http://vg5000.free.fr/
dans cette doc :
Philips VG5000 Departement Formation Technique (09-84)
Document interne à l'usage des ingénieurs de la Radiotechnique avec annotations
I SCHEMA SYNOPTIQUE DU VG5000
II LE Z8O DANS LE VG5000
II-1 CYCLE DE RECHERCHE D'INSTRUCTION
II-2 LES HORLOGES
II-3 LE COMPTEUR DE RAFRAICHISSEMENT
II-4 LES INITIALISATIONS
III LE DECODEUR D'ADRESSES DES MEMOIRES
IV LA MEMOIRE DE PROGRAMME
V LES MEMOIRES VIVES
V-1 RAPPELS SUR LES MEMOIRES PSEUDO-STATICS
VI LE DECODEUR D'ADRESSES DES ENTREE-SORTIES
VII LE CLAVIER
VIII L'INTERFACE K7 ET SON
VIII-1 LA SORTIE SON
VIII-2 L'INTERFACE K7
VIII-2-1 EN SORTIE
VIII-2-2 EN ENTREE
VIII-2-3 PROCEDURE DE COMMUNICATION
IX L'INTERFACE VIDEO
IX-1 COMMUNICATIONS ENTRE L'EF9345 ET LE TELEVISEUR
IX-2 COMMUNICATIONS ENTRE LE Z80 ET L'EF 9345
IX-3 COMMUNICATIONS ENTRE LA RAM ET L'EF 9345
X LE CONNECTEUR D'EXTENSIONS
ADDITIF n1 QUELQUES MOTS SUR LE Z80
ADDITIF n2 ORGANISATION MEMOIRE DE LA RAM
ADDITIF n3 MANIPULATION SUR LA SORTIE SON
ADDITIF n4 L'INTERFACE VIDEO EF9345
ADDITIr n5 PROGRAMME BASIC PERMETTANT DE TRAVAILLER LE JEU D'INSTRUCTIONS DU ZX80 EN HEXADECIMAL
ADDITIF n6 QUELQUES FROGRAMMES EN LANGAGE BASIC
Carl
dans cette doc :
Philips VG5000 Departement Formation Technique (09-84)
Document interne à l'usage des ingénieurs de la Radiotechnique avec annotations
I SCHEMA SYNOPTIQUE DU VG5000
II LE Z8O DANS LE VG5000
II-1 CYCLE DE RECHERCHE D'INSTRUCTION
II-2 LES HORLOGES
II-3 LE COMPTEUR DE RAFRAICHISSEMENT
II-4 LES INITIALISATIONS
III LE DECODEUR D'ADRESSES DES MEMOIRES
IV LA MEMOIRE DE PROGRAMME
V LES MEMOIRES VIVES
V-1 RAPPELS SUR LES MEMOIRES PSEUDO-STATICS
VI LE DECODEUR D'ADRESSES DES ENTREE-SORTIES
VII LE CLAVIER
VIII L'INTERFACE K7 ET SON
VIII-1 LA SORTIE SON
VIII-2 L'INTERFACE K7
VIII-2-1 EN SORTIE
VIII-2-2 EN ENTREE
VIII-2-3 PROCEDURE DE COMMUNICATION
IX L'INTERFACE VIDEO
IX-1 COMMUNICATIONS ENTRE L'EF9345 ET LE TELEVISEUR
IX-2 COMMUNICATIONS ENTRE LE Z80 ET L'EF 9345
IX-3 COMMUNICATIONS ENTRE LA RAM ET L'EF 9345
X LE CONNECTEUR D'EXTENSIONS
ADDITIF n1 QUELQUES MOTS SUR LE Z80
ADDITIF n2 ORGANISATION MEMOIRE DE LA RAM
ADDITIF n3 MANIPULATION SUR LA SORTIE SON
ADDITIF n4 L'INTERFACE VIDEO EF9345
ADDITIr n5 PROGRAMME BASIC PERMETTANT DE TRAVAILLER LE JEU D'INSTRUCTIONS DU ZX80 EN HEXADECIMAL
ADDITIF n6 QUELQUES FROGRAMMES EN LANGAGE BASIC
Carl
Re: Gestion interruption VG5000
Il y a un autre truc à ne pas oublier. Il est impératif de bloquer la recopie de la ram video du système 2ko vers l'EF9345.
C'est ce que font les "bons" jeux VG5000 programmés en assembleur.
C'est ce que font les "bons" jeux VG5000 programmés en assembleur.
Re: Gestion interruption VG5000
Sais-tu comment on fait ca?Markerror a écrit :Il y a un autre truc à ne pas oublier. Il est impératif de bloquer la recopie de la ram video du système 2ko vers l'EF9345..
Pour obbtenir l'affichage, j'ai du créer mes propres routines assembleurs. Ca sauverait de la place si je pouvais utiliser les routines rom du VG5000
Ci-joint deux captures d'écran montrant le jeu..
Re: Gestion interruption VG5000
Bonjour,
Pour éviter que le système ne mette à jour la mémoire interne de l'EF9345 avec les données contenues dans le buffer de 2k, la solution consiste à inhiber la routine qui fait cela. Cette dernière est tout simplement le RST &38. Il commence par faire un CALL en &47D0 (par défaut, il y a un RET à cet endroit, probablement pour pouvoir être détourné), puis enchaîne sur une routine d'envoi des données au processeur vidéo.
Je n'ai pas fait de test, mais dans le code du "Monstre", on trouve ça.
&47D0 INC SP
&47D1 INC SP
&47D2 RET
Ca me semble assez simple en fait .
Dans Glouton, même idée, mais avec un RETI à la place du RET (les interruptions ne doivent donc pas être désactivées).
Un simple DI suffira peut-être (à tester).
Sinon, quelques remarques pour ton futur jeu. Même si c'est déjà très propre au niveau graphique, ça serait sympa de mettre un fond d'écran fixe. Comme le jeu ne nécessite pas beaucoup de caractères redéfinis, ça serait un bon moyen d'améliorer l'aspect visuel du jeu. Sinon, si tu veux mettre de la musique pendant le jeu, prévoie quand même une touche pour la stopper, il n'y a pas que des fans de buzzer ici .
Pour éviter que le système ne mette à jour la mémoire interne de l'EF9345 avec les données contenues dans le buffer de 2k, la solution consiste à inhiber la routine qui fait cela. Cette dernière est tout simplement le RST &38. Il commence par faire un CALL en &47D0 (par défaut, il y a un RET à cet endroit, probablement pour pouvoir être détourné), puis enchaîne sur une routine d'envoi des données au processeur vidéo.
Je n'ai pas fait de test, mais dans le code du "Monstre", on trouve ça.
&47D0 INC SP
&47D1 INC SP
&47D2 RET
Ca me semble assez simple en fait .
Dans Glouton, même idée, mais avec un RETI à la place du RET (les interruptions ne doivent donc pas être désactivées).
Un simple DI suffira peut-être (à tester).
Sinon, quelques remarques pour ton futur jeu. Même si c'est déjà très propre au niveau graphique, ça serait sympa de mettre un fond d'écran fixe. Comme le jeu ne nécessite pas beaucoup de caractères redéfinis, ça serait un bon moyen d'améliorer l'aspect visuel du jeu. Sinon, si tu veux mettre de la musique pendant le jeu, prévoie quand même une touche pour la stopper, il n'y a pas que des fans de buzzer ici .
Re: Gestion interruption VG5000
Autre conseil : Tester de temps en temps sur un vrai VG5000. L'émulateur n'est pas parfait, en particulier pour l'émulation EF9345. Il est souvent plus tolérant que le matériel réel, ce qui peut causer de mauvaises surprises ensuite.
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: Gestion interruption VG5000
Malheureusement, je n'aurai en main mon VG5000 qu'en Décembre. Je suis en déplacement actuellement. Donc je ne pourrai pas tester en réel avant Noël. Espérons qu'il n'y est pas trop de problème avec l'EF9345 en émulation
Re: Gestion interruption VG5000
J'ai essayé. Ca marche !!!!Markerror a écrit :Je n'ai pas fait de test, mais dans le code du "Monstre", on trouve ça.
&47D0 INC SP
&47D1 INC SP
&47D2 RET
de buzzer ici .
Re: Gestion interruption VG5000
Je pense que Markerror a donné la meilleure solution.Markerror a écrit : ..............
Un simple DI suffira peut-être (à tester).
......
Pour l'éditeur Forth j'avais le même probleme et la solution était ainsi
Code : Tout sélectionner
; ENTREE FORTH
540B E5 PUSH HL ; Indispensable pour retour Basic
540C ED 73 20 52 LD (ret_basic),SP
5410 F3 DI
..
;RETOUR BASIC
5F32 FB EI
5F33 ED 7B 20 52 LD SP,(ret_basic)
5F37 E1 POP HL
5F38 C9 RET