Simulation de l'instruction Basic POP sur 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 : Papy.G, fneck, Carl

Répondre
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Simulation de l'instruction Basic POP sur VG5000

Message par joaopa »

Bonjour,

j'essaie de transposer un programme Basic de l'Atari 400 sur VG5000. Il est utilisé la fonction POP qui n'est pas disponible sur VG5000. Principalement POP permet de retourner d'un GOSUB sans RETURN en supprimant les infos relatif à ce GOSUB sur la pile
(voir le manuel page 25)
http://www.atarimania.com/documents/Ata ... -Rev-C.pdf
J'ai essayé de voir ce que ca donnerait sur VG5000 sans succès
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3047
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: Simulation de l'instruction Basic POP sur VG5000

Message par Papy.G »

Sais-tu où est le pointeur de pile?
Si oui, tu Peek sa valeur, tu la décrémentes, et tu Poke la nouvelle valeur.
A moins de pouvoir exécuter du code machine, et si le Z80 a un code permettant le décrément de valeurs RAM en place (genre DSZ addr).
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Avatar de l’utilisateur
Dominique
Messages : 828
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: Simulation de l'instruction Basic POP sur VG5000

Message par Dominique »

L'outil mise au point doit de donner l'adresse de la pile SP. Il suffira de retrouver l'adresse de retour; Et faire comme l'a dit Papy
Pile SP.jpeg
Pile SP.jpeg (174.08 Kio) Consulté 3665 fois
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3047
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: Simulation de l'instruction Basic POP sur VG5000

Message par Papy.G »

Ah, je n'ai pas précisé, il me semble que c'est le pointeur de pile de l'interpréteur Basic qu'il faut trouver, pour fausser le non-retour (RETURN) d'un GOSUB, sinon, il aurait demandé pour le Call/Ret, quoiqu'il n'aurait rien demandé, l'instruction POP existe dans le jeu d'instructions du Z80, non? :lol:
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Avatar de l’utilisateur
Dominique
Messages : 828
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: Simulation de l'instruction Basic POP sur VG5000

Message par Dominique »

Au temps pour moi ! C'était du Basic :oops:
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3047
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: Simulation de l'instruction Basic POP sur VG5000

Message par Papy.G »

Alors, je me suis penché vite fait sur les docs (car le VG5000 m'intéresse un peu, étonnamment :oops: ), et alors, dans la doc de base, où est le plan mémoire (annexe 2, P86), on voit la pile de l'interpréteur Basic (de 7FCA et à descendre), mais je ne sais pas si le pointeur de pile est la première valeur de celle-ci. Attention que le pointeur de pile ne soit pas relogeable, comme c'est le cas de la pile elle-même, comme expliqué dans le technical bulletin basic 1.1 section 14. Je verrais bien cette valeur se trouver entre 49FC et 47D0, dans la mémoire de travail, mais je n'ai pas trouvé, dans une première recherche, le détail des valeurs de travail du BASIC.
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Simulation de l'instruction Basic POP sur VG5000

Message par Daniel »

Je trouve cette méthode de programmation avec des POP très dangereuse. Ces Basic ne sont pas structurés, c'est un gros handicap, et le POP y ajoute une véritable acrobatie. C'est comme sortir d'une boucle par un GOTO, c'est possible mais pas très sain. Il vaut mieux modifier l'index pour provoquer la sortie. Pour que le programme soit compréhensible il y a des règles élémentaires à respecter.

A la place de joaopa je ne chercherais pas à simuler l'instruction POP, mais à ne plus l'utiliser en modifiant la structure du programme. Si ce n'est pas négociable, alors il faut écrire un programme de deux ou trois lignes en langage machine pour modifier l'index de la pile.

C'est même peut-être plus compliqué, car quand on arrive sur le POP après être sorti "malproprement" d'un sous-programme par un GOTO il faut modifier l'index de pile, par contre si on arrive sur le POP autrement (sans être sorti d'un GOSUB par GOTO) il ne faut probablement pas modifier l'index. Bref ce POP est une instruction tellement tordue qu'il vaut mieux tout faire pour l'éviter.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3047
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: Simulation de l'instruction Basic POP sur VG5000

Message par Papy.G »

Probablement qu'il y a une condition pour retourner par la voie naturelle, et une exception qui nécessite de ne pas y passer, le POP ne doit se produire qu'au passage par cette branche, pas de risque, à priori.
Il s'agit apparemment de porter un programme d'une autre machine au plus simple, je ne sais pas la complexité du programme en question, mais c'est peut-être plus facile de faire une petite routine, d'autant plus si le programme présente plusieurs fois cette bizarrerie, auquel cas il faudrait tout reprendre.
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: Simulation de l'instruction Basic POP sur VG5000

Message par joaopa »

Je crois que je vais reprendre la préconisation de Daniel et m'arranger pour éviter ce problème. Ca sera plus rapide que d'essayer de voir comment est gérée la pile Basic sur VG5000.
canal
Messages : 67
Inscription : 17 juil. 2015 00:15
Localisation : Paris
Contact :

Re: Simulation de l'instruction Basic POP sur VG5000

Message par canal »

Juste une remarque sur le sujet car j'avais écrit un message avec ce que je pensais être une solution ce matin et voyant mon erreur.... je l'ai effacé ! (J'avais tenté de simuler moi-même une pile mais ... GOTO xx attend forcément un nombre explicite pas une variable même pas numérique... tout est tombé à l'eau - a moins que le Basic du VG5000 l'accepte ????? a=100 : GOTO a ?)

En bref, comme dit Daniel, le plus simple est quand même de réécrire cela de façon plus lisible ... car faire un GOSUB implique normalement ... que l'on revienne par un RETURN. La c'est un peu bidouille ... et c'est bien la 1ere fois que je vois ce genre d'instruction a un Basic (POP). En clair, il faut comprendre ce que fait le programme et le réécrire... probablement avec des GOTO ! (°)
On y va ou on y va pas ... mais on se décide !

(°) Ce qui donne -en gros-:

Code : Tout sélectionner

100 r=2: GOTO 200 : 'au lieu de simplement GOSUB 200
110 END
200 ' POP ou pas: ni rien mettre a la place...
210 ON r GOTO 60,110,170 : ' au lieu de RETURN
Il faut juste noter (r=) tous les endroits (60,110,170) où il y a un GOSUB vers cette "fonction" avec POP ... et faire un ON r GOTO en guise de RETURN ... je n'ai pas regardé si le VG 5000 a où pas cette fonction ON x GOTO/GOSUB mais elle est souvent présente a cette époque...
Ca va pas marcher a tout les coups (genre POP puis RETURN ...) mais c déjà un point de départ...

<HR> :mrgreen:

Cependant, pour la petite histoire ... j'ai trouvé cela dans le QuickBasic 1.1 de MS-DOS (peut-être aussi en FreeBasic ???)... et bizarrement pas en Visual Basic sorti juste après :

c'est: RETURN xxx ! c-a-d RETURN a un numéro de ligne précis....... yes ! Evidemment xxx est optionel :mrgreen: :mrgreen: :mrgreen:

Et la, il suffit juste de faire, ça:
210 RETURN 220
220 ' et ça ca fait POP !!!

Alex.
PS: Et sinon en trouvant cette pile en mémoire... il y a aussi la méthode de Papy !
CP/M (Z80)
Répondre