THOMSON MO6 BASIC->ASM

Cette catégorie traite de développements récents destinés à 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

dinoprodest
Messages : 312
Inscription : 01 févr. 2020 20:31
Localisation : Rome - Italy

THOMSON MO6 BASIC->ASM

Message par dinoprodest »

bonsoir tout le monde, quelqu'un peut-il me montrer comment acquérir les paramètres de l'instruction exec à partir d'une routine d'assembleur?
Daniel
Messages : 17413
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: THOMSON MO6 BASIC->ASM

Message par Daniel »

La question est difficile à comprendre sans plus de précisions sur le contexte et sur l'objectif recherché.
Daniel
L'obstacle augmente mon ardeur.
dinoprodest
Messages : 312
Inscription : 01 févr. 2020 20:31
Localisation : Rome - Italy

Re: THOMSON MO6 BASIC->ASM

Message par dinoprodest »

Je fais un exemple: exec & h5a00, x%, y% Je veux transmettre le contenu des variables à la routine asm qui commence à & h5a00. Merci.
dinoprodest
Messages : 312
Inscription : 01 févr. 2020 20:31
Localisation : Rome - Italy

Re: THOMSON MO6 BASIC->ASM

Message par dinoprodest »

jsr $21c0
beq exit
jsr $eff8
ldx ,x
stx $2a5f
jsr $21c0
beq exit
jsr $eff8
ldx ,x
stx $2a66
exit
rts

avec cette routine, je peux récupérer les paramètres de la ligne de commande de base, mais pas à l'intérieur d'un programme, où à la place cela me donne une erreur de syntaxe.
Daniel
Messages : 17413
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: THOMSON MO6 BASIC->ASM

Message par Daniel »

Quand un programme BASIC appelle une routine en langage machine, cette routine peut revenir au BASIC par RTS, mais il y a une condition très importante : il faut que les registres utilisés par le BASIC ne soient pas modifiés. Sinon le BASIC plante.

De mémoire je ne sais pas dire quels registres doivent être préservés, mais dans le doute il suffit de les sauver tous :

Code : Tout sélectionner

    PSHS  U,Y,X,DP,B,A,CC     ;empilage des registres                  
    jsr   $21c0
    beq   exit
    jsr   $eff8
    ldx   ,x
    stx   $2a5f
    jsr   $21c0
    beq   exit
    jsr   $eff8
    ldx   ,x
    stx   $2a66
exit
    PULS  CC,A,B,DP,X,Y,U,PC  ;retour
Daniel
L'obstacle augmente mon ardeur.
dinoprodest
Messages : 312
Inscription : 01 févr. 2020 20:31
Localisation : Rome - Italy

Re: THOMSON MO6 BASIC->ASM

Message par dinoprodest »

merci Daniel, mais malheureusement ça ne semble pas être le problème !!!! J'attache une capture d'écran
Pièces jointes
Screenshot_20200202-093206.png
Screenshot_20200202-093206.png (72.28 Kio) Consulté 3472 fois
dinoprodest
Messages : 312
Inscription : 01 févr. 2020 20:31
Localisation : Rome - Italy

Re: THOMSON MO6 BASIC->ASM

Message par dinoprodest »

peut-il s'agir d'un discours de banque de mémoire?
__sam__
Messages : 7971
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: THOMSON MO6 BASIC->ASM

Message par __sam__ »

dinoprodest a écrit : 02 févr. 2020 07:39 Je fais un exemple: exec & h5a00, x%, y% Je veux transmettre le contenu des variables à la routine asm qui commence à & h5a00. Merci.
Sur MO6 je sais pas, mais j'ai souvenir quand dans la manuel du basic fournit avec mon TO9 il était indiqué les points d'entrée en ROM (basique) pour effectivement récupérer les paramètres de EXEC. D'expérience c'était bien trop compliqué pour mon usage car grosso-modo tout dépend tu type des paramètres (entiers, flottants, string et peut être tableaux) et passe par les registres EXTRAMON en page 2. EXTRAMON qu'il faut appeler quand le paramètre n'est pas du bon type (pour convertir les float -- type par défaut du basic-- en entier 16bits par exemple tout en faisant gaffe aux débordements etc). Bref, je suis vite passé par la technique de POKEr les valeurs que je veux directement dans les zones donnée de mon programme asm. C'est plus simple et ca va beaucoup plus vite en plus.

Le SYNTAX-ERROR me fait remarquer un truc: tu ne réserve pas la zone mémoire de ton programme binaire nulle part (voir instruction CLEAR). Or il est fort possible que l’exécution du programme avec les numéros de ligne vienne allègrement écrire dans ton programme assembleur qui ne sera plus ce qu'il devrait être. C'est un coup de chance que tu ne te retrouve avec un simple SYNTAX-ERROR car tu pourrais tout aussi bien partir dans un plantage complet de la machine.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
dinoprodest
Messages : 312
Inscription : 01 févr. 2020 20:31
Localisation : Rome - Italy

Re: THOMSON MO6 BASIC->ASM

Message par dinoprodest »

pourquoi ça marche en mode direct?
__sam__
Messages : 7971
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: THOMSON MO6 BASIC->ASM

Message par __sam__ »

L’exécution en mode direct n'utilise pas les mêmes ressources qu'en mode programme en mémoire. Donc ca marche un peu par accident. L'emplacement de tout programme binaire se doit d'être réservé par la commande CLEAR, sinon le résultat est indéterminé. C'est ce que tu observes: ca marche en ligne de commande et pas dans le programme basic, mais l'inverse pourrait tout aussi bien se produire.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
dinoprodest
Messages : 312
Inscription : 01 févr. 2020 20:31
Localisation : Rome - Italy

Re: THOMSON MO6 BASIC->ASM

Message par dinoprodest »

le problème semble systématique. Cependant, je passe également les paramètres avec poke ou peut-être en utilisant le pointeur vers une variable, mais j'aime avoir toutes les possibilités disponibles. :D
__sam__
Messages : 7971
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: THOMSON MO6 BASIC->ASM

Message par __sam__ »

As tu mis un clear avant le loadm dans ton programme basic ?
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
dinoprodest
Messages : 312
Inscription : 01 févr. 2020 20:31
Localisation : Rome - Italy

Re: THOMSON MO6 BASIC->ASM

Message par dinoprodest »

même chose
Pièces jointes
Screenshot_20200202-195743.png
Screenshot_20200202-195743.png (83.95 Kio) Consulté 3419 fois
__sam__
Messages : 7971
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: THOMSON MO6 BASIC->ASM

Message par __sam__ »

Tu fais le clear après le LOADM... A tous les coups le LOADM est trashé! Le bon ordre dans le programme basic, c'est: CLEAR au tout début, puis loadm et là ca roule le loadm est dans une zone protégée. Tout ce que tu charges avant le clear n'est pas garanti. Ensuite, il faudrait voir les points d'entrées pour lire les arguments que tu utilises dans ton programme ASM car ca me semble bien trop simple par rapport à ce dont j'ai souvenir sur TO9. Ils sortent d'où ces $21C0 et $EFF8 ?
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
dinoprodest
Messages : 312
Inscription : 01 févr. 2020 20:31
Localisation : Rome - Italy

Re: THOMSON MO6 BASIC->ASM

Message par dinoprodest »

jsr $eff8 Je l'ai vu dans le manuel ci-joint.
jsr $21c0 J'ai vu dans un code du programme SUONA3VOCI dans lequel, cependant, il crée des instructions de base.
Pièces jointes
Screenshot_20200202-210058.png
Screenshot_20200202-210058.png (620.09 Kio) Consulté 3405 fois
Répondre