Page 1 sur 2

comment jouer une note en asm sur VG5000µ ?

Publié : 06 sept. 2017 17:45
par rendomizer
Je cherche désespéramment de jouer une note mais un message d'erreur s'affiche a chaque tentative ??? J'utilise la routine call $008F page 76 "clefs pour VG5000"

Code : Tout sélectionner

.org $6000
_debut:    
          push hl
          ld bc,_buffer ; buffet ou sont stockés les notes
          ld e,6 ; longuer du buffet
          call $008F
          pop hl
          ret
_buffer:
.db $54,$32,$30,$43,$44,$45

Re: comment jouer une note en asm sur VG5000µ ?

Publié : 06 sept. 2017 18:00
par Carl
Comment faire un sound et non un play "ABCD...."
Capture2.JPG
Capture2.JPG (56.56 Kio) Consulté 5499 fois
Capture.JPG
Capture.JPG (48.08 Kio) Consulté 5499 fois
Carl

Re: comment jouer une note en asm sur VG5000µ ?

Publié : 06 sept. 2017 18:07
par Carl
Pour le Play...
Capture3.JPG
Capture3.JPG (38.1 Kio) Consulté 5495 fois
Capture4.JPG
Capture4.JPG (55.39 Kio) Consulté 5494 fois
Carl

Re: comment jouer une note en asm sur VG5000µ ?

Publié : 06 sept. 2017 18:13
par Daniel
La routine $008F altère tous les registres, c'est écrit en bas de la page 76 de Clefs pour VG5000.

Re: comment jouer une note en asm sur VG5000µ ?

Publié : 06 sept. 2017 19:21
par rendomizer
je n'y arrive pô. Toujours le même message d'erreur de syntax :shock:

Re: comment jouer une note en asm sur VG5000µ ?

Publié : 06 sept. 2017 21:02
par Mokona
Envoie moi le code, je peux regarder.

Re: comment jouer une note en asm sur VG5000µ ?

Publié : 06 sept. 2017 21:07
par __sam__
Faire gaffe à la pile!!! La doc indique qu'il faut pusher un truc bidon après l'addresse de retour (la routine play se plante avec la pile). Cf l'exemple avec la routine playx au paragraphe 27.2. Un décalage sur la pile peut provoquer des erreurs bizarres, comme par exemple des fausses syntax-error.

Re: comment jouer une note en asm sur VG5000µ ?

Publié : 06 sept. 2017 21:12
par rendomizer
Mokona a écrit : 06 sept. 2017 21:02 Envoie moi le code, je peux regarder.

Code : Tout sélectionner

.org $6000
    
          ld bc,_buffer ; buffet ou sont stockés les notes
          ld e,6 ; longuer du buffet
_debut:         
          call $008F
          jp _debut
_buffer:
.db $54,$32,$30,$43,$44,$45

Re: comment jouer une note en asm sur VG5000µ ?

Publié : 06 sept. 2017 22:39
par Mokona
Voilà ma proposition (l'assembleur est un peu différent dans la syntaxe, mais la transcription est aisée)

Comme indiqué dans la documentation ci-dessus, il faut ajouter sur la pile, après l'adresse de retour mise par le call, une valeur qui ne servira pas.

Ceci est du à la manière dont la commande est appelée (et que je n'ai pas fini d'analyser).

L'astuce classique est donc de mettre sur la pile l'adresse de retour avec un call (l'interprêteur BASIC lui, fait ça à la main, ça serait aussi une solution valide, cf. $250a dans la ROM 1.1), puis d'embrayer sur un JP (qui lui ne touche pas la pile), avec la manipulation de la pile entre temps.

Code : Tout sélectionner

org $6000
_debut:
          ld bc,_buffer ; buffet ou sont stockés les notes
          ld e,6 ; longueur du buffer
          call play
          ret
play:
          push hl
          jp $008F
_buffer:
          defb $54,$32,$30,$43,$44,$45

Re: comment jouer une note en asm sur VG5000µ ?

Publié : 07 sept. 2017 06:09
par joaopa
Un call suivi d'un ret. Mes yeux saignent :mrgreen:

Re: comment jouer une note en asm sur VG5000µ ?

Publié : 07 sept. 2017 07:05
par rendomizer
Ca marche ouf, un grand merci pour cette démonstration de code. Mon VG5000 n'a rien compris :D

Re: comment jouer une note en asm sur VG5000µ ?

Publié : 07 sept. 2017 09:50
par Carl
faire un grand merci à tous les intervenants dans ton post aurait été un plus... :roll:

Carl

Re: comment jouer une note en asm sur VG5000µ ?

Publié : 07 sept. 2017 09:56
par Mokona
Pour le bien être des yeux de joaopa, qui me semblent dangereusement rouge, je précise que ce squelette d'appel est une forme générale qui permet du code avant et après le call.

Si la pile contient l'adresse de retour de l'appel de "_debut" au moment du "call play" et qu'il n'y a rien à faire entre ce call et le ret, alors la paire "push hl" "jp $008F" suffit.

Re: comment jouer une note en asm sur VG5000µ ?

Publié : 07 sept. 2017 20:55
par rendomizer
Un grand merci à tous les intervenants du forum vous avez été choux

Re: comment jouer une note en asm sur VG5000µ ?

Publié : 03 mai 2020 04:26
par joaopa
Bonjour à tous. Ce bug est vraiment étrange. Et comme je voudrais mourrir moins con, j'espère que quelqu'un pourra m'expliquer

Ceci fonctionne

Code : Tout sélectionner

play:
     push hl
     jp 0a87h
buffer: db "ABCDE"                
                
monsuperprogramme:
    ld bc,buffer
    ld e,5
    call play
MAIS ceci ne fonctionne pas (pile non valide)

Code : Tout sélectionner

buffer: db "ABCDE"

monsuperprogramme: 
    ld bc,buffer
     push hl
     call 0a87h
Quelqu'un saurait-il pourquoi?