Thomson MO6: asm ->basic
Modérateurs : Papy.G, fneck, Carl
-
- Messages : 312
- Inscription : 01 févr. 2020 20:31
- Localisation : Rome - Italy
Thomson MO6: asm ->basic
Bonjour tout le monde, Existe-t-il un moyen d'exécuter un programme de base à partir du langage machine?
-
- Messages : 2284
- Inscription : 06 avr. 2009 12:07
Re: Thomson MO6: asm ->basic
C'est quoi un programme de base ?
Ah, je crois que tu veux dire "a BASIC program" en fait.
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.
Ah, je crois que tu veux dire "a BASIC program" en fait.
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.
-
- Messages : 312
- Inscription : 01 févr. 2020 20:31
- Localisation : Rome - Italy
Re: Thomson MO6: asm ->basic
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.
-
- Messages : 312
- Inscription : 01 févr. 2020 20:31
- Localisation : Rome - Italy
Re: Thomson MO6: asm ->basic
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
-
- Messages : 2284
- Inscription : 06 avr. 2009 12:07
Re: Thomson MO6: asm ->basic
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.
Re: Thomson MO6: asm ->basic
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
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
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
-
- Messages : 312
- Inscription : 01 févr. 2020 20:31
- Localisation : Rome - Italy
Re: Thomson MO6: asm ->basic
merci, j'utilise massivement le débogueur. J'espère trouver une solution plus simple.
-
- Messages : 312
- Inscription : 01 févr. 2020 20:31
- Localisation : Rome - Italy
Re: Thomson MO6: asm ->basic
quelques progrès...
avec ce code, je peux exécuter la commande RUN.
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
-
- Messages : 401
- Inscription : 22 juil. 2020 20:56
Re: Thomson MO6: asm ->basic
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)
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)
Re: Thomson MO6: asm ->basic
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.
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.
L'obstacle augmente mon ardeur.
Re: Thomson MO6: asm ->basic
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.
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.
L'obstacle augmente mon ardeur.
-
- Messages : 2284
- Inscription : 06 avr. 2009 12:07
Re: Thomson MO6: asm ->basic
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" ?
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" ?
Re: Thomson MO6: asm ->basic
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
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.
L'obstacle augmente mon ardeur.
-
- Messages : 312
- Inscription : 01 févr. 2020 20:31
- Localisation : Rome - Italy
Re: Thomson MO6: asm ->basic
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 (68.88 Kio) Consulté 2182 fois
Re: Thomson MO6: asm ->basic
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.
L'obstacle augmente mon ardeur.