Thomson MO6: asm ->basic

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

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

Thomson MO6: asm ->basic

Message par dinoprodest »

Bonjour tout le monde, Existe-t-il un moyen d'exécuter un programme de base à partir du langage machine?
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: Thomson MO6: asm ->basic

Message par Fool-DupleX »

C'est quoi un programme de base ?

Ah, je crois que tu veux dire "a BASIC program" en fait. :mrgreen:

Je ne pense pas, non. Il faudrait que tout l'interpréteur BASIC soit correctement initialisé. En théorie tout est possible, mais en pratique ça n'est que de la théorie.
dinoprodest
Messages : 312
Inscription : 01 févr. 2020 20:31
Localisation : Rome - Italy

Re: Thomson MO6: asm ->basic

Message par dinoprodest »

merci pour la réponse, en pratique je voudrais créer une cartouche contenant une liste de basic qui commence lorsqu'elle est sélectionnée.
dinoprodest
Messages : 312
Inscription : 01 févr. 2020 20:31
Localisation : Rome - Italy

Re: Thomson MO6: asm ->basic

Message par dinoprodest »

je pense avoir trouvé l'adresse mémoire de la commande RUN mais je pense qu'il a besoin de certains paramètres pour passer avec les registres pour le faire fonctionner
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: Thomson MO6: asm ->basic

Message par Fool-DupleX »

La commande RUN ne te suffira pas. L'interpréteur BASIC initialise la zone $2100 à $25A2 avec plein de variables et aussi du code de hook et des vecteurs de redirection. Cette initialisation est indispensable au bon fonctionnement de l'interpréteur.
Dernière modification par Fool-DupleX le 10 déc. 2022 19:25, modifié 1 fois.
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Thomson MO6: asm ->basic

Message par Daniel »

Il y a une solution, je l'utilise pour restaurer l'état de l'émulateur dcmoto sur la vraie machine.

Il faut charger le programme BASIC en mémoire , lancer l'exécution et l'arrêter juste avant l'interprétation de la première instruction. On sauve alors dans un fichier toute la RAM, l'état des PIA, les registres du processeur.

Pour exécuter le programme il faut tout restaurer : RAM, PIA, registres. C'est un peu délicat. Le programme doit être dans une zone inutilisée, par exemple en mémoire vidéo entre $1F40 et $2000. Les registres doivent être restaurés dans un certain ordre, avec S et PC en dernier. Mais ça marche 8)
Daniel
L'obstacle augmente mon ardeur.
dinoprodest
Messages : 312
Inscription : 01 févr. 2020 20:31
Localisation : Rome - Italy

Re: Thomson MO6: asm ->basic

Message par dinoprodest »

merci, j'utilise massivement le débogueur. J'espère trouver une solution plus simple. 😀
dinoprodest
Messages : 312
Inscription : 01 févr. 2020 20:31
Localisation : Rome - Italy

Re: Thomson MO6: asm ->basic

Message par dinoprodest »

quelques progrès...
avec ce code, je peux exécuter la commande RUN. :)

Code : Tout sélectionner

	ldx #$b2c6
	pshs x
	ldx #$ceff
	pshs x
	lda #$52
	sta $295b
	lda #$55
	sta $295c
	lda #$4E
	sta $295d
	clr $295e
	clr $295f
	clr $2960
	clr $2961
	ldy #$2a5a
	ldu #$295A
	ldx #$295b
	ldd #$520a
	jmp $cf73
nouvelhermes
Messages : 401
Inscription : 22 juil. 2020 20:56

Re: Thomson MO6: asm ->basic

Message par nouvelhermes »

Bonjour à tous,

En fait je ne vois pas trop le problème, il me semble que la partie protégée avec CLEAR ,X n'est pas détruite lorsqu'on charge un programme avec LOAD.

Je suppose que l'on cherche ici à exécuter un programme BASIC comme sous-programme, donc

0 CLEAR ,&H5000:LOADM "ASM":EXEC &H5000 'appel du programme ASM
le programme BASIC
...
9999 EXEC &H7000 (l'adresse qui suit en fait le programme BASIC)

dans le programme aSM
5000 ....
6FFF RTS
7000 ....

Il faut juste prendre soin à restaurer le registre S à l'endroit où il était en entrant, et le registre DP si oin l'a modifié?

Le programme l'aigle d'or, fait cette manoeuvre à tout bout de champ.
D'autre part, Vera Cruz fait exactement ce que tu cherches, Daniel peux tu nous expliquer le principe de la protection de ce programme, car effectivement dans les deux parties, le programùe charge et exécute un programme BASIC aprèsune partie en assemvbleur (il me semble qu'il s'agit de la même protection que Mandragore sans en être sûr)
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Thomson MO6: asm ->basic

Message par Daniel »

Tu décris l'appel d'un programme en langage machine par un programme BASIC, avec ensuite retour au BASIC. Dinoprodest a un problème différent : le chargement et l'appel d'un programme BASIC par un programme en langage machine contenu dans une MEMO5.

L'affaire Vera Cruz, en version cassette MO5, a une protection par codage spécial de l'enregistrement sur cassette. Les octets ne peuvent pas être lus par les routines système standard. Un loader spécial (enregistré au format standard) est d'abord chargé pour permettre de lire la suite de la cassette (format non standard). Il y a un rapport avec le sujet de ce fil de discussion, en ce sens que le programme de chargement est en assembleur et charge un programme BASIC. Je vais l'analyser pour voir si on peut en tirer quelque chose.
Daniel
L'obstacle augmente mon ardeur.
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Thomson MO6: asm ->basic

Message par Daniel »

Alors effectivement, dans l'Affaire Vera Cruz, il y a un lancement de programme BASIC à partir du langage machine.

La RAM est initialisée à partir d'un fichier, ensuite le programme en langage machine initialise un certain nombre de zones de travail du BASIC et le registre DP, puis se branche à la routine RUN en ROM Basic. Je ne connais pas la signification de toutes les zones initialisées, il n'y a pas de documentation complète sur le sujet.

Code : Tout sélectionner

30E1 CC57FF     LDD    #$57FF             
30E4 FD211F     STD    $211F    adresse pile systeme          
30E7 FD211B     STD    $211B    adresse limite haute pile systeme           
30EA 83012C     SUBD   #$012C             
30ED FD2119     STD    $2119    adresse limite basse pile systeme          
30F0 C607       LDB    #$07               
30F2 F72076     STB    $2076    latence du clavier avant premiere repetition          
30F5 8621       LDA    #$21               
30F7 1F8B       TFR    A,DP     initialisation registre DP pour le BASIC          
30F9 6F9F21B3   CLR    [$21B3]  $21B3 = pointeur de texte ???         
30FD 8622       LDA    #$22               
30FF B72124     STA    $2124    ligne du curseur ???         
3102 7EC54B     JMP    $C54B    branchement routine RUN du BASIC            
Dernière modification par Daniel le 10 déc. 2022 12:19, modifié 2 fois.
Daniel
L'obstacle augmente mon ardeur.
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: Thomson MO6: asm ->basic

Message par Fool-DupleX »

Il n'y a pas à mon sens de protection dans Mandragore. L'integralité du jeu est en assembleur. Pour automatiser le chargement, le loader contient juste un patch sur le retour pour faire l'equivalent d'un ,,R et charge ensuite le noyau du jeu avec des blocs K7 tout a fait standard.

Si Vera Cruz fonctionne effectivement de la maniere supposee, je pense que ca meriterait un article de blog. Mais la logique veut que l'interpreteur basic est déjà parfaitement initialisé car il s'agit d'un programme K7. lancer un programme basic depuis une cartouche memo est d'un tout autre niveau de difficulté.

le $22, c'est pas un " pour faire RUN" ?
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Thomson MO6: asm ->basic

Message par Daniel »

Le $22 en $2124, c'est probablement la ligne du curseur. Je tiens cette information du désassemblage de la ROM Basic du MO5, réalisée par un de mes correspondant allemand, mais je ne peux pas la garantir. En fait c'est peut-être une zone de travail à usages multiples. Je ne pense pas qu'il y ait une double quote après RUN, car le programme BASIC est déjà en RAM. Sur la cassette il est dans un format protégé très spécial et ne peux pas être lu par les routines standard.

Si vous voulez analyser le chargement de l'Affaire Vera Cruz version MO5, je viens de mettre en ligne la version originale (non déprotégée) : fichier .wav pour reconstituer la cassette et fichier .lep à utiliser avec SDLEP-TFT ou avec l'émulateur dcmoto.
http://dcmoto.free.fr/programmes/l-affa ... index.html
Daniel
L'obstacle augmente mon ardeur.
dinoprodest
Messages : 312
Inscription : 01 févr. 2020 20:31
Localisation : Rome - Italy

Re: Thomson MO6: asm ->basic

Message par dinoprodest »

fort!!!!! avec ce code, je peux exécuter n'importe quelle instruction de base

Code : Tout sélectionner

        ldx #$b2c6
	pshs x
	ldx #$ceff
	pshs x
	leay comm,pcr
	ldx #$295b
loop
    lda ,y+
    beq exit
    sta ,x+
    bra loop
exit
	clr ,x+
    clr ,x+
    clr ,x+
    clr ,x+
	ldy #$2a5a
	ldu #$295A
	ldx #$295b
	ldd #$520a
	jmp $cf73
comm 
    fcc "CIRCLE(100,100),20"
    fcb 0
Pièces jointes
Screenshot_2022-12-10-14-54-05-731_com.dinoflorenzi.motoemu.jpg
Screenshot_2022-12-10-14-54-05-731_com.dinoflorenzi.motoemu.jpg (68.88 Kio) Consulté 2180 fois
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Thomson MO6: asm ->basic

Message par Daniel »

Daniel a écrit : 10 déc. 2022 11:58 Je ne pense pas qu'il y ait une double quote après RUN, car le programme BASIC est déjà en RAM.
Je me suis trompé. Après enquête la RAM contient seulement le code d'affichage de l'écran de présentation de la première partie, mais pas le reste du programme. Le programme BASIC n'est pas encore chargé, et FoolDupleX a parfaitement raison : le code assembleur lance l'instruction RUN" (avec la double quote) pour lire le programme à partir de la cassette et l'exécuter. Et donc, dans l'Affaire Vera Cruz, il n'y a aucun lancement d'un programme BASIC en RAM par du code en langage machine. C'est seulement l'appel de la classique commande RUN" du BASIC. Evidemment ça fonctionne parce que le BASIC est initialisé.

En démarrant sur une cartouche MEMO5 le problème est beaucoup plus complexe, car la ROM de la MEMO5 masque le BASIC.
Daniel
L'obstacle augmente mon ardeur.
Répondre