VG5000: appel basic par assembleur

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

joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

VG5000: appel basic par assembleur

Message par joaopa »

Bonjour,

Sur VG5000, y a-t-il un moyen d'appeler un programme basic en assembleur

Merci d'avance
Xavier

Re: VG5000: appel basic par assembleur

Message par Xavier »

joaopa a écrit :Bonjour
Sur VG5000, y a-t-il un moyen d'appeler un programme basic en assembleur
Merci d'avance
Il est utile de préciser la question.
Car un programme basic ne peut être traité comme un sous-programme...

>y a-t-il un moyen d'appeler un programme basic
En chargeant un programme basic remplaçant l'existant, mais dans ce cas, un "RET" doit sortir de la routine assembleur car le pointeur de la pile revenir sous basic avec une bonne adresse d'entrée... sinon plantage du moniteur basic.

La seule possibilité d'utiliser les programmes basic en mode "sous-programme" est de charger les programmes basic en utilisant des données dites "protégée" à une adresse mémoire qui ne sera pas modifièe lors du chargement des programmes basic!

Add=&hFF00
if PEEK(add)=1 then run"prg1"
if PEEK(add)=2 then run"prg2"
....
Les infos de statu du jeu peuvent être placés dans un tableau à la même adresse...
Markerror
Messages : 2123
Inscription : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: VG5000: appel basic par assembleur

Message par Markerror »

Bonjour,

En général, c'est plutôt le contraire qu'on fait :-). Quel est ton besoin exact ? En théorie, cela doit être possible, mais je ne vois pas trop l'intérêt du truc (à moins de vouloir compacter du code Basic ou le protéger des regards indiscrets).

Accessoirement, si un jour, quelqu'un nous sort un périphérique de masse (contrôleur disquette, équivalent de la SDMOTO), un loader K7 assembleur ne facilitera pas la tâche du transfert vers ce support.
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: VG5000: appel basic par assembleur

Message par joaopa »

Le programme basic du loader sera très court.
10 call &"4a20"
20 cload
30 call &"4a00"

L'idée c'est d'utiliser la zone mémoire écran (4000h-47d0h) comme zone de stockage du code pour les pièces du jeu d'échecs.
Dans le loader, je place donc ces codes dans cette zone.
L'exécution de la ligne 10 crée l'image de Sargon du loader. La ligne 20 sert a charger le jeu d'échecs. J'ai fait des test. Un cload (qui fait un New) n'efface pas cette zone mémoire. Le problème est que si je rends la main au basic je réactive les interruptions, et cela fera disparaître l'image de Sargon du loader. Donc, je veux appeler ma ligne 20 directement par l'assembleur (cload ne semble pas réactiver les interruptions).

J'ai bien vu la routine &"25ea", mais elle fait un RUN sur la première ligne du basic et je ne sais pas comment lui dire de commencer le RUN sur la deuxième ligne.

J'étais content de mon idée d'utiliser la zone écran comme zone mémoire, sauf que je suis face à ce problème maintenant :roll: :evil:
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3052
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: VG5000: appel basic par assembleur

Message par Papy.G »

Tu ne peux pas appeler directement la routine de Cload depuis l'assembleur, puis après le ret, dès que tu as la main, remplir les registres nécessaires à la reprise d'un run à la ligne 20 par un branchement sauvage?
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Xavier

Re: VG5000: appel basic par assembleur

Message par Xavier »

J'ai bien vu la routine &"25ea", mais elle fait un RUN sur la première ligne du basic et je ne sais pas comment lui dire de commencer le RUN sur la deuxième ligne.
Tu restes avec cette méthode.
Mais, tu ajoutes une ligne au début:

5 GOTO 10

10 call &"4a20"
20 cload
30 call &"4a00"

Puis, dans ton programme ASM tu pokes "20" en lieu et place du "10" dans le programme basic...
Ca te fera un programme basic dynamique.
Au prochain RUN, le saut sera non pas en ligne 10, mais en ligne 20.
Il ne faudra pas ajouter de ligne avant pour conserver l'offset de la chaine de caractère.
Mais, je ne connais pas l'encodage de la valeur du VG5000, car cela peut être Alfa-numérique ou sur deux octets.
Répondre