Appel ASM sur Thomson depuis BASIC

C'est la catégorie reine de l'ordinophile, 8 bits et pas un de plus!
Single board ou bus S-100 acceptés.

Modérateurs : Papy.G, fneck, Carl

Ythunder
Messages : 928
Inscription : 21 août 2019 10:12

Appel ASM sur Thomson depuis BASIC

Message par Ythunder »

Hello

même si je n'y comprendrais pas grand chose, sauf niveau logique quand à ma question, je me suis toujours demandé la chose suivante :

Un programme BASIC, et l'appel d'une routine assembleur sur Thomson ?
Le programme en assembleur est stocké dans un fichier, on appel ce ficher via le BASIC avec une instruction, ou un ensemble de déclarations en BASIC pour charger le programme assembleur (reservation d'espace libre etc.)

Mais concrètement, ça donne quoi ?
Merci de m'éclairer
Yves
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Appel ASM sur Thomson depuis BASIC

Message par Daniel »

Pour appeler une routine en langage machine en BASIC, il faut d'abord réserver de l'espace en mémoire avec l'instruction CLEAR, puis charger la routine dans cet espace. Il y a plusieurs moyens : par exemple LOADM à partir d'un fichier, ou initialisation de la RAM en BASIC à partir de lignes de DATA. On peut aussi, si le programme est petit, le stocker dans une chaîne du BASIC, dans ce cas l'allocation de mémoire est automatique (le CLEAR n'est pas nécessaire).

Ensuite on lance l'exécution de la routine par l'instruction EXEC. Si un retour au BASIC est prévu à la fin de la routine, il faut qu'elle commence par sauver les registres utilisés par le BASIC (dans le doute il est conseillé de les sauver tous), puis qu'elle les restaure à la fin. On sort de cette routine par un RTS, il permet de revenir dans l'interpréteur BASIC à l'instruction juste après l'EXEC.

Exemple avec des lignes de DATA (extrait de SDTRANSFERT)
Le CLEAR,&H9DFF réserve la mémoire du MO5 entre $9E00 et $9FFF.
La boucle de la ligne 62 charge le programme en mémoire à partir des DATA.
EXEC &H9E00 lance la routine en langage machine

Code : Tout sélectionner

10 '===================================
11 ' SD2DISK - version 2014.07.17 
12 ' Transfert fichier .fd
13 ' Sens carte SD vers disquette
14 ' Daniel Coulom - février 2013
15 ' http://dcmoto.free.fr
16 '===================================
20 CLEAR,&H9DFF
21 CLS:SCREEN2,0,0:LOCATE0,0,0
22 HR$="":FORI=1TO40:HR$=HR$+"=":NEXT
23 GOSUB100
30 PRINT"Vous devez avoir:"
31 PRINT"- Un lecteur contenant une disquette"
32 PRINT"  formatée et non protégée."
33 PRINT"- Un module SDMOTO avec une carte SD"
34 PRINT"  et sur cette carte un fichier .fd"
35 PRINT"- L'adresse physique du premier bloc"
36 PRINT"  du fichier .fd, en hexadécimal."
37 PRINT:COLOR3
38 PRINT"Le contenu de la disquette sera détruit"
40 PRINT:COLOR7
41 PRINT"Si tout est prêt, appuyez sur":PRINT
42 PRINT"0 = fd face 0 vers disquette face 0"
43 PRINT"1 = fd face 0 vers disquette face 1"
44 PRINT"2 = fd 2 faces vers disquette 2 faces":PRINT
45 PRINT"Les autres touches arrêtent SD2DISK";
50 F$=INPUT$(1)
51 IFF$<"0"THENEND
52 IFF$>"2"THENEND
53 '===================================
60 CLS:GOSUB100 
61 PRINT"Patientez...";:LOCATE0,7:A=&H9E00
62 READX:IFX>=0THENPOKEA,X:A=A+1:GOTO62
70 PRINT"Tapez l'adresse hexadécimale du"
71 PRINT"premier bloc du fichier .fd"
72 PRINT"(ou CTRL-C pour abandonner)"
73 PRINT:PRINT"Exemple: 0BECCA00"
74 LOCATE7,13,1:INPUTX$
75 CLS:LOCATE0,13,0:GOSUB100
76 PRINT"Transfert vers face";
77 IFF$<"2"THENPRINT" ";F$; ELSEPRINT"s 0 & 1";
78 PRINT" en cours...";:LOCATE0,20,0
80 A=&H9FD7:FORI=1TO7STEP2
81 POKEA,VAL("&H"+MID$(X$,I,2))
82 A=A+1:NEXTI
83 IFF$<>"1"THENPOKE&H9FD0,0:EXEC&H9E00
84 IFF$<>"0"THENPOKE&H9FD0,1:EXEC&H9E00
90 R=PEEK(&H9FD0)
91 PRINT"Transfert terminé. Code retour:";R;
92 PRINT"     ":PRINT
98 END
99 '===================================
100 COLOR2:PRINTHR$:ATTRB1,1
101 PRINT"SD2DISK ";:ATTRB0,0
102 PRINT"version 2014.07.17"
103 PRINT"Transfert d'un fichier .fd d'une"
104 PRINT"carte SD vers une disquette Thomson"
105 PRINTHR$:COLOR7:RETURN
109 '==================================
200 DATA 52,127,26,208,142,31,64,230,132,99,132,225,132,39,6,99,132,134,167,32,14,142,64,0,191,159,209,142,96,0,191,159,211,134,231,31,139,150,206,132,251,151,206,198,96,215,204,138,4,151,206,134,84,183,231,231,254,159,211,182,159,208,167,200,73,134,1
210 DATA 183,159,208,167,200,72,173,201,128,4,79,95,237,200,74,76,167,200,76,134,8,167,200,72,134,10,23,1,53,51,141,1,121,23,0,218,16,37,0,125,23,0,206,134,4,23,1,34,134,2,183,159,208,16,142,2,0,49,63,39,104,51,141,1,103,23,0,181,23,0,178,37,240,134,3
220 DATA 183,159,208,23,0,168,37,82,111,141,1,59,23,0,232,72,42,4,108,141,1,49,134,3,23,0,236,141,102,16,190,159,209,254,159,211,16,175,200,79,173,201,128,4,166,200,76,129,16,38,18,230,200,75,193,79,39,29,92,231,200,75,134,1,167,200,76,32,214,76,167,200
230 DATA 76,16,174,200,79,49,169,1,0,16,175,200,79,32,209,127,159,208,53,255,182,159,213,38,15,124,159,217,38,15,124,159,216,38,10,124,159,215,32,5,124,159,218,38,13,124,159,217,38,8,124,159,216,38,3,124,159,215,57,198,8,52,4,16,190,159,209,51,141,0,185
240 DATA 141,29,141,100,129,254,38,250,142,2,0,141,91,167,160,48,31,38,248,141,83,141,81,141,180,106,228,38,223,53,132,141,71,76,38,251,142,0,6,166,192,141,14,48,31,38,248,141,35,161,192,39,2,67,57,79,57,198,8,52,4,72,86,84,215,204,202,32,215,204,196
250 DATA 223,215,204,106,228,38,239,202,64,215,204,53,132,79,198,127,215,204,209,204,198,95,215,204,37,4,134,252,32,5,74,38,237,134,254,198,127,215,204,209,204,198,95,215,204,73,37,243,57,52,2,204,127,95,151,204,215,204,151,204,215,204,151,204,215,204
260 DATA 151,204,215,204,151,204,215,204,151,204,215,204,151,204,215,204,151,204,215,204,106,228,38,220,53,130,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,81,0,0,0,0,255,0,64,0,0,0,0,149,1,72,0,0,1,170,135,0,119,0,0,0,0,255,0,105,64,0,0,0,255,0,122,0,0
270 DATA 0,0,255,0,-1
Daniel
L'obstacle augmente mon ardeur.
Répondre