Gestion interruption VG5000

Cette catégorie traite de développements récents pour nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Carl, Papy.G, fneck

Répondre
joaopa
Messages : 400
Enregistré le : 14 sept. 2013 12:17

Gestion interruption VG5000

Message par joaopa » 02 nov. 2013 08:10

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

Markerror
Messages : 1350
Enregistré le : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: Gestion interruption VG5000

Message par Markerror » 02 nov. 2013 08:35

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

joaopa
Messages : 400
Enregistré le : 14 sept. 2013 12:17

Re: Gestion interruption VG5000

Message par joaopa » 02 nov. 2013 08:43

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....

Daniel
Messages : 10818
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Gestion interruption VG5000

Message par Daniel » 02 nov. 2013 09:15

Bienvenue au club des programmeurs de l'EF9345 :D
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.

Avatar du membre
Patrice
Messages : 1197
Enregistré le : 14 janv. 2008 10:42
Localisation : Charente maritime
Contact :

Re: Gestion interruption VG5000

Message par Patrice » 02 nov. 2013 10:00

joaopa a écrit :Je programme directement l'EF9345.
............................................
Il ne veut rien m'afficher le saligaud....
As-tu respecté cette condition incontournable:
BUSY.PNG
BUSY.PNG (52.44 Kio) Vu 1448 fois
Alice la passion ;-)

joaopa
Messages : 400
Enregistré le : 14 sept. 2013 12:17

Re: Gestion interruption VG5000

Message par joaopa » 02 nov. 2013 10:11

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

Avatar du membre
Patrice
Messages : 1197
Enregistré le : 14 janv. 2008 10:42
Localisation : Charente maritime
Contact :

Re: Gestion interruption VG5000

Message par Patrice » 02 nov. 2013 10:20

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
Alice la passion ;-)

Avatar du membre
Carl
Modérateur
Messages : 10254
Enregistré le : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: Gestion interruption VG5000

Message par Carl » 02 nov. 2013 10:50

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

Markerror
Messages : 1350
Enregistré le : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: Gestion interruption VG5000

Message par Markerror » 02 nov. 2013 12:01

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.

joaopa
Messages : 400
Enregistré le : 14 sept. 2013 12:17

Re: Gestion interruption VG5000

Message par joaopa » 02 nov. 2013 20:04

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..
Sais-tu comment on fait ca?

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..Image
Image

Markerror
Messages : 1350
Enregistré le : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: Gestion interruption VG5000

Message par Markerror » 03 nov. 2013 08:58

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 :-).

Daniel
Messages : 10818
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Gestion interruption VG5000

Message par Daniel » 03 nov. 2013 10:52

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.

joaopa
Messages : 400
Enregistré le : 14 sept. 2013 12:17

Re: Gestion interruption VG5000

Message par joaopa » 04 nov. 2013 00:49

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

joaopa
Messages : 400
Enregistré le : 14 sept. 2013 12:17

Re: Gestion interruption VG5000

Message par joaopa » 04 nov. 2013 02:22

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 :-).
J'ai essayé. Ca marche !!!!

Avatar du membre
Dominique
Messages : 482
Enregistré le : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: Gestion interruption VG5000

Message par Dominique » 06 nov. 2013 23:15

Markerror a écrit : ..............
Un simple DI suffira peut-être (à tester).
......
Je pense que Markerror a donné la meilleure solution.

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

Répondre