René DescartesDescartes et les Mathématiques

Mémoire de masse

Bibliothèque TICE - Sélection d'archives ouvertes EduTice : publications dans les bulletins de l'EPI.

Sommaire

I)      Supports magnétiques

II)    Copier : programmes BASIC sur cassette

III)    Copier : programmes BASIC sur disquette

IV)    Compatibilité des programmes BASIC

V)    Acte 1 : copie cassette vers disquette

VI)    Acte 2 : dé-protection de programmes BASIC

VII)  Listing de toutes les couleurs

VIII) Programme BASIC sur cassette trop long

IX)  Amélioration des programmes

X)    Améliorations diverses des programmes BASIC

XI)  Fichiers séquentiels

XII)  Acte 3 : fichiers binaires

Du MO5 au PC
25 ans d'informatique pédagogique

Liens

MO5.com : Thomson

Bidouille du système Thomson
TO7 - MO5 - TO9

logo EPI Les bulletins de l'EPI no 44 - décembre 1986 et no 45 - mars 1987

TO7, MO5, TO9 ou nanoréseau, compatibles ou pas ? J'ai un programme sur un appareil, que faire pour le faire tourner sur un autre ?
Comment copier une cassette, de cassette à disquette ? Comment se servir des programmes, des fichiers de données ou des programmes binaires ? Beaucoup de vérités et de contre-vérités circulent. Les transferts sont possibles, parfois simples, souvent plus compliqués que prévu. Il faut bien mesurer le temps à passer. Il est parfois plus sain de réécrire plutôt que de chercher à modifier ou pirater.

I) Supports magnétiques

Actuellement nous pouvons disposer de 8 supports magnétiques différents pour stocker des informations Thomson. Tous ces supports sont logiquement équivalents, mais physiquement incompatibles.

Cassette TO7

Lentes, peu sûres et difficiles à régler (la cartouche de réglage n'est toujours pas diffusée). Dommage que ce format ait été repris pour les TO8 et TO9.

Cassette MO5

Plus rapides et moins encombrées d'informations inutiles. Compatibles avec les cassettes MO6 1200 bauds.

Cassette MO6 (2400 bauds) :

Encore un nouveau format. Est-ce vraiment nécessaire ?

Disquettes 5 pouces, simple densité

Compatibles TO7 et MO5, utilisables en LOGO. Capacité insuffisante : 78k. Vendus 3 000 francs il y a deux ans (1984), on trouve actuellement des lecteurs à 990 francs.

Disquettes 5 pouces, double densité

Spécial Thomson : 2 fois 160 k. Chaque face est considérée comme une disquette séparée. L'ordinateur utilise le drive comme si c'était un double lecteur "0:" et "1:" contenant deux disquettes. Les manipulations pour retrouver un fichier sont doublées. Le TO9 persiste avec ce système. Il n'a qu'un avantage : lorsque vous plantez (c'est relativement fréquent), vous ne perdez qu'une moitié de disquette !
Ces disquettes sont compatibles TO7 et MO5… et TO9, on peut utiliser les anciennes disquettes 80 k sur la face 0: avec la simple densité, en formatant une face en simple densité, utilisable avec tous les lecteurs et la face 1: en double densité pour les nouveaux. L'ordinateur s'y retrouve à condition de programmer correctement DENSITY.

Disquettes 3 pouces 1/2

TO9 et TO8. Les TO7, MO5 et MO6 peuvent les utiliser avec un contrôleur spécial. Peu fiables, simple face sur TO9, double face deux fois 320 k sur TO9+ et les autres appareils.

Microdrive

Compatibles TO7, MO5 et TO9+, DOS spécial en mémoire vive, donc incompatibles DOS disquette, TO9 et nanoréseau.
Il devait être génial, il est peu cher. Il devait remplacer les magnétophones, il remplace les disquettes. Fiabilité à tester, car la mécanique semble légère. L'intérêt était la compatibilité avec les disquettes, le nanoréseau. C'est raté. On attendait les 3,5 pouces, on trouve 2,8 pouces (fabrication exclusive Thomson).

Disquettes MS-DOS Nanoréseau

Compatibles TO7, MO5 et GWBASIC (MS-DOS), mais non compatibles TO9. Le MS-DOS est à ce jour l'avenir de la micro-informatique, Thomson s'en est volontairement exclu et risque de le payer très cher.

II) Copier : programmes BASIC sur cassette

Dans la légalité, au moins (loi du 3 juillet 1985). Unique copie de sécurité, mais peut-on être sûr avec le DOS Thomson.

Catalogue cassette : DIR"CASS:" n'existe pas. Pour repérer les fichiers, on peut :

  • taper SKIPF"XXX"
  • noter leur nom et leur place,
  • à la fin de la bande terminer par un RESET.

Ceci permet de vérifier le bon état physique de la bande, sans I/0 erreur.

Copier : il n'existe pas plus de BACKUP avec cassette.
1) Le plus simple, le plus sûr : recopier intégralement la cassette origine avec un double magnétophone. Les fréquences informatiques sont compatibles avec les fréquences audio. Ce n'est pas très drôle.

2) Utiliser un lecteur de disquettes pour le transfert.
Il suffit de faire un transfert de cassette vers disquette :

Cassette
source

LOAD"CASS:"

mémoire centrale

SAVE"0:PROG"

disquette

Puis, dans un deuxième temps, de disquette vers cassette :

disquette

LOAD"0:PROG"

mémoire centrale

SAVE
"CASS:PROG"

cassette but

3) Avec uniquement un magnétophone : charger en mémoire centrale, puis changer de cassette et garer vers la cassette. Pour un transfert mixte MO 5 vers TO 7 ou le contraire, utiliser soit la compatibilité des disquettes, DOS Thomson ou nanoréseau, soit les programmes picoréseau du CNDP.

Par exemple : disquette DOS Thomson ou nanoréseau :

Sur le TO7 :

Cassette TO 7

LOAD"CASS:"
SAVE"0:PROG"

Disquette

 

Sur le MO5 :

Disquette

LOAD"0: PROG"
SAVE"CASS:PROG"

Cassette MO5

Picoréseau : avec un TO 7 (par exemple programme CMO5 du CNDP) :
Cass. TO7 : LOAD"CASS: " → mém.centrale ; SAVE"CMO5:PROG" → Cass. MO5

Ou dans l'autre sens :
Cass. MO5 : LOAD"CMO5:" → mém.centrale ; SAVE"CASS:PROG" → Cass. TO7

Pour des copies cassette vers disquette, il est commode d'utiliser la cartouche assembleur ou l'ordre COPIER de la gestion de fichiers du TO9.

III) Copier : programmes BASIC sur disquette

programmes basic sur disquette - copyright Patrice Debart

Les cas cassette TO7-cassette MO5 supposent ici l'utilisation d'un TO7 avec le programme CMO5.
Pour les transferts de disquettes entre DOS Thomson et nanoréseau, sauver sur magnétophone ou utiliser le picoréseau ou un cordon disco reliant un poste du nano à un système disquette isolé :

copier cassette vers disquette - copyright Patrice Debart

IV) Compatibilité des programmes BASIC

Globalement les BASICs des trois appareils, du nanoréseau et le GWBASIC (MS-DOS) sont compatibles. Le programmeur devra connaître ces quatre styles et ce qui les distingue, les différences entre TO7 et MO5 et aussi entre DOS et non DOS.
On devra veiller à utiliser le basic plus petit dénominateur commun Thomson et éventuellement utiliser des sous-programmes de substitution.

Les instructions manquantes sur MO5 sont :

  – AUTO (uniquement avec le DOS. Ne se trouve pas dans les programmes),
  – INPUTWAIT (&ag rave; remplacer par une boucle avec INKEY$),
  – PEN et ONPEN (la conversion demande un peu de travail. Voir « clés pour MO5 » de Gilles Blanchard),
  – LET (peu utilisé),
  – conversions en hexa ou en octal, constantes binaires, HEX$ se trouve dans le DOS,
  – le masquage : MASQ, UNMASQ et le dernier attribut de ATTRB,
  – caractères semi-graphiques télétels, ainsi que la troisième police de caractères (on doit pouvoir écrire les GR$ correspondants).

Les codes ESC sont différents sauf pour les couleurs de forme saturées,
  – la double précision,
  – PRINT USING chaîne de caractères : remplacer PRINT USING"% ",A$ par PRINT LEFT$(A$+" ",5),
  – SCREEN(X,Y) ne renvoie pas les mêmes codes pour les accents.

  • USR et DEF en version cassette.

On espère toujours un DOS MO5 qui, à la place de la tortue graphique DRAW, contiendrait toutes ces instructions.

Les instructions manquantes sur TO 7

  – Les couleurs 8 à 15 ne sont pas directement utilisables,
  – la mire initiale permet de se dispenser des instructions DOS et TUNE.

Compatibilité DOS

Par exemple, l'instruction CIRCLE du DOS ou du BASIC 128 peut être remplacée par un simple sous-programme basic, assez lent, ou assembleur (voir Microtom no 2).
Il suffit donc de tester la présence des disquettes :

IF PEEK(0)=32 THEN DKFLG=PEEK(&H6080) ELSE DKFLG=PEEK(&H2080)
IF DKFLG THEN CIRCLE(A,B),R ELSE FOR THETA=0 TO 6.3 STEP 0.1:PSET(A+R*COS(THETA),B+R*SIN(THETA)):NEXT THETA

Tester le type d'appareil : (ulE-routine GETCH du moniteur)

IF PEEK(&HFIAF)=132 THEN MICRO=1 'TO7 Moniteur T9000
IF PEEK(&HFlAF)=32 THEN MICRO=2 'TO7
IF PEEK(&HF1AF)=214 THEN MICRO=10 'TO7-70
IF PEEK(&HFIAF)=95 THEN MICRO=20 'TO8
IF PEEK(&HFIAF)=4 THEN MICRO=50 'TO9
IF PEEK(&HFlAF)=151 THEN MICRO=100 'MO5
IF PEEK(&HFIAF)=223 THEN MICRO=200 'MO6

Écrire le type de TO7 :

IF PEEK(0)<>32 AND PEEK(7)<>77 THEN PRINT"ce n'est pas un TO7":GOTO …
IF PEEK(&H65AC)=&H7F THEN MICRO=I: PRINT"TO7 8k"
IF PEEK(&H65AC)=&HBF THEN MICRO=2: PRINT"TO7 mémoire 16k
IF PEEK(&H65AC)=&HDF THEN MICRO=10: PRINT"TO7-70"
IF PEEK(&HFlAF)=95 THEN MICRO=20: PRINT"TO8 émulant TO7-70"
IF PEEK(&HF1AF)=4 THEN MICRO=50: PRINT"TO9 émulant TO7-70"

Signaler une incompatibilité :

IF PEEK(0)<>32 THEN PRINT"Programme inadapté au MO5 :modifier ON PEN" :END
IF PEEK(0)=32 AND PEEK(7)=49 THEN PRINT"Basic TO9 interdit.

Introduire une disquette DOS et charger le Basic TO 7 (no 4).
Taper sur une touche.":R$=INPUT$(1):RESET

DOS ou nanoréseau :

IF PEEK(0)=32 THEN IDDISK!=&HEOOO:DKFLG=&H6080:TRACK=&H6052 ELSE
IDDISK!=&HAOOO:DKFLG=&H2080:TRACK=&H2052
IF PEEK(DKFLG)=0 THEN PSTE=O:PRINT"Magnétophone"
IF PEEK(IDDISK!)=68 THEN PSTE=-1:PRINT"Disquette DOS Thomson"
IF PEEK(IDDISK!)=81 THEN PSTE=-2:PRINT"Micro-drive QDD"
IF PEEK(IDDISK!)=82 THEN PSTE=PEEK(TRACK):PRINT"Nanoréseau poste"; PSTE

Périphérique par défaut :

IF PEEK(0)=32 THEN PERI=&H218D ELSE PERI=&H6200
IF PERI=2 AND DKFLG=-1 THEN PRINT"DEVICE CASS:"
IF PERI>127 AND DKFLG=-1 THEN PRINT"lecteur de disquette"; PERI AND 127;":"

V) Acte 1 : copie cassette vers disquette

Programmes BASIC. Pour effectuer une copie de sauvegarde d'une cassette I.P.T. ou la recopier sur disquette voua devez charger le programme avec un simple LOAD"CASS:". Ne pas lancer l'exécution, mais le LISTer.
Dans ce programme rechercher, SEARCH en basic DOS-MO5 ou TO9, les instructions : LOAD, RUN ou MERGE, LOADM, CLEAR, PEEK et POKE, "CASS:", SKIPF, MOTOR, ON ERROR et RESUME, OPEN, INPUT#N et CLOSE, "LPRT:" ou "SPOO:".

LOAD, RUN au MERGE :

Attention au passage du mode d'accès séquentiel (cassette) au mode direct (disquette). Si l'on trouve des instructions de la forme :

RUN"" ; LOAD"",R ; RUN"CASS:" ou LOAD"CASS:",R

Sur la cassette, le programme suivant va être chargé. Il faut retrouver son nom, PROG2 par exemple, et remplacer dans le premier programme le

200 RUN""

par :

200 LOAD"PROG2",R

Et vérifier qu'un ON ERROR blinde l'accès aux disquettes :

IF ERL=200 THEN PRINT"Erreur"ERR"au Chargement de PROG2":PRINT"Vérifier la disquette et taper une touche";
R$=INPUT$(1):IF R$=CH R$(3) THEN END ELSE RESUME 200

Erreurs possibles : 61 PP : programme protégé,
55 129 FD : le nom est mal écrit sur disquettes
70 FS, 58, BD 130 : le programme est mal enregistré (fatal),
53, 155 I/O : erreur disque,
71, 76,128 : problèmes disquettes,
62, 134 NE :le programme n'existe plus (il peut être sur une autre disquette essayer DEVICE"0:" puis DEVICE"1:"),
Sur cassette : le lecteur déroule toute la bande sans rien trouver.

LOADM : Le programme est un programme machine. Les ennuis commencent (même s erreurs que LOAD).

CLEAR : En début de programme toujours remettre en place le haut de la mémoire en testant le type d'appareil :

IF PEEK(0)=32 THEN CLEAR 300,&HDFFF ELSE CLEAR 300,&H9FFF

CLEAR plus sophistiqué :

10 IF PEEK(0)<>32 THEN CLEAR 300,&H9FFF,0:MICRO=100:GOTO 40 'MO5
20 IF PEEK(7)<77 THEN CLEAR 5000,&HDFFF,0,& HGFFF:MICRO=50:GOTO40 'Basic 128
30 CLEAR 300,PEEK(&H65AC)*256+PEEK(&H65AD)+1,0' divers TO 7
40 …

Cette instruction génère souvent les erreurs :
"OM error"- 7 : Dépassement de la capacité mémoire
"OS error"-14 : Manque de place pour les chaînes de caractères.

OM erreur au chargement d'un programme : soit le programme ne correspond pas à la configuration (présence du DOS), soit un CLEAR antérieur est encore actif. Taper en mode direct:
CLEAR 300,&HDFFF sur TO7-70
CLEAR 300,&H9FFF sur MO5 et réessayer un LOAD

OM ou OS erreur à l'exécution d'un programme : si l'on trouve un ordre CLEAR, vérifier la correspondance avec votre type d'appareil, et éventuellement introduire un CLEAR compatible.
CLEAR a été méchamment introduit, accompagnée de SCREEN 0,0,0 dans de nombreux programmes. Il faut regarder quelles parties de la mémoire sont réservées. Attention à la pile système qui est à la fin de la mémoire utilisateur et qui doit être préservée.
Vérifier la compatibilité avec l'utilisation éventuelle des disquettes (le deuxième paramètre doit être supérieur à &H8833 sur TO7 et a &H48C7 sur MO 5 sinon utiliser le MINIDOS).
Le BASIC 128 est très gourmand pour les chaînes de caractères et CLEAR est souvent à remplacer par CLEAR 5000.

"CASS: ", MOTOR ON ou OFF, SKIPF : en général à supprimer

Parfois remplacer "CASS:" par "0:" en DOS isolé ou "1:" sur nanoréseau.
Il est plus sûr de remplacer PERI$="CASS:" par PERI$="". En effet, écrire PERI$="0:" doit être accompagné d'une gestion d'erreur :

PERIBI$="1:"

200 LOAD PERI$+P$
10000 IF (ERR=62 OR ERR=134) AND ERL=200 THEN RESUME 11000
11000 LOAD PERIBI$+P$:GOTO 210

Gérer les erreurs : ON ERROR et RESUME

Trop de programmes I.P.T. contiennent un ON ERROR appelant un RESUME inconditionnel sans test générant une boucle, sans fin, absurde. Supprimer ces deux instructions dangereuses qui empêchent de retrouver la cause d'erreur.

10 ON ERROR GOTO 1000
1000 RESUME 70

Si le programme contient :

10 ON ERROR GOTO 1000
200 OPEN"I" #1,"FICONJ"
500 OPEN"O",#2,"LPRT:(80)"
1000 PRINT"L'imprimante n'est pas branchée":RESUNE 70

À remplacer, en gérant les accès aux périphériques et en pensant à la compatibilité avec le nanoréseau, par :

20 IF PSTE>0 THEN IM$="SPOO:" ELSE IM$="LPRT:(80)
500 CLOSE#2:OPEN"0",#2,IM$
1000 IF ERL=200 THEN PRINT"erreur disque"ERR"à la lecture de FICONJ.DAT" : PRINT"Vérifier":R$=INPUT$(1) IF r$=CHR&(3) THEN END ELSE RESUME 200 1010 IF ERL=500 THEN PRINT"L'imprimante n'est pas branchée": RESUME 70 1100 PRINT"erreur"ERR"ligne"ERL:END

On peut aussi écrire :

1010 IF ERL=110 THEN PRINT"L'imprimante n'est pas branchée":IM$="SCRN:
 " : RESUME 500

Ou terminer par :

1100 IF ERR>100 THEN PRINT"Erreur nanoréseau":GOTO 1200
1110 IF ERR>=50 THEN PRINT"Erreur fichier"
1200 PRINT"erreur"ERR"ligne"ERL:END

Copie d'écran sur imprimante :

Pour les copies d'écran, rendre compatible avec le nanoréseau :

500 IF PSTE>0 THEN PICTURE PRINT ELSE SCREEN PRINT

Pour une imprimante Manesman avec TO7:

100 CLEAR,&HDF39:LOADM"GRAFICH"
500 IF PSTE>0 THEN PICTURE PRINT ELSE EXEC &HDF3A

PEEK et POKE :

En général, les adresses page 0 sont 6000 sur TO7 et 2000 sur MO5, la RAM moniteur est vers E700 sur TO7 et A700 sur MO5 et le haut de la mémoire est 7FFF, BFFF, DFFF suivant les types de TO7 et 9FFF sur MO5.

Lorsque l'on trouve des PEEK ou POKE il faut comprendre leur utilité, les rendre compatibles ou les supprimer.

Citons deux exemples où TO7 et MO5 n'utilisent pas les mêmes registres :
Par exemple, pour le BUZZER : (bip du clavier), OUT

IF PEEK(0)=32 THEN POKE &H6073,1 ELSE POKE &H2019,PEEK(&H2019) OR 8

BUZZER IN

IF PEEK(0)=32 THEN POKE &H6073,0 ELSE POKE &H2019,PEEK(&H2019) AND &HF7

Pour les MAJUSCULES écrire :

IF PEEK(0)=32 THEN POKE &H2019,PEEK(&H2019) AND 127 ELSE POKE &HE7C3, PEEK(&HE7C3) AND 247'à trouver sur TO9

Et les MINUSCULES :

IF PEEK(0)=32 THEN POKE &H2019,PEEK(&H2019) OR 1 ELSE POKE &HE7C3, PEEK(&HE7C3) OR 8

Les couleurs et la mémoire écran

On s'éclate sur TO9 et il est impossible de transférer les programmes spécifiques. Sinon trois choix sont possibles.
1) Le plus simple et pauvre : n'utiliser que 8 couleurs.
2) Suivant l'appareil utiliser 8 couleurs sur TO7 ou 16 :

IF PEEK(0)=32 and PEEK(7)<>49 THEN NBCOUL=8 ELSE NBCOUL=16 COLOR C MOD NBCOUL

3) Pour les demi-teintes placer les sous-programmes suivant :

10 IF PEEK(0)<>32 THEN OI=1 ELSE IF PEEK(7)=49 THEN OI=4 ELSE OI=2-(PEEK(&H65AD)=&HDF)

Pour la couleur de forme remplacer COLOR 8+C par GOSUB 2000

2000 ON OI GOTO 2001,2002,2003,2001
2001 COLOR 8+C:RETURN'MO5 ou BASIC 128
2002 COLOR C:RETURN'ancien TO 7
2003 PRINT CHR$(27) CHR$(112+C);:RETURN 'TO 7-70

De même , pour la couleur de fond remplacer COLOR, 8+C par GOSUB 2100 :

2100 ON OI GOTO 2101,2102,2103,2101 2101 COLOR, 8+C: RETURN
2102 COLOR C:RETURN
2103 PRINT CHR$(27) CHR$(120+C);:RETURN

Attention, après modification, les couleurs doivent rester cohérentes.
éviter l'écriture ton sur ton : SCREEN 0,8 transformé en SCREEN 0,0.
Débugger les SCREEN C,C ou COLOR C,C ou les plus méchants
SCREEN 4,6,6 ou COLOR, 6 suivis de COLOR 6.

Dans un programme I.P.T., l'instruction SCREEN 0,0,0, à remplacer par SCREEN 7,0,0, indique les zones sensibles. Que veut cacher le programmeur ?
L'adresse du PRC système est E7C3 sur TO7-TO9 et A7C0 sur MO5.
Ces deux registres jouent le même rôle pour la mémoire écran

10 IF PEEK(O)=32 THEN STAD=&H4000:PRC=&HE7C3 ELSE STAD=O:PRC=&HA7C0
20 AD=STAD+X*8+Y*320 'Groupe de Points Yème ligne Xème colonne
30 POKE AD, FORME
40 POKE PRC,PEEK(PRC) AND 254'sélection banque couleur
50 POKE AD,COULEUR
60 POKE PRC,PEEK(PRC) OR 1 'retour à la forme

Sur MO5 le calcul de la couleur est relativement simple :

COULEUR=16*CFORXE+CFOND,

Sur TO7 il faut se rappeler que le codage a d'abord été fait sur 3 bits puis les demi-teintes ont été rajoutées sur TO7-70 alors que les bits 6 et 7 étaient à 1 :

FORME=CFORME AND 7:DEMIFORXE=CFORME AND 8:
EMIFORME=1+(DEMIFORME=8)
FOND=CFOND AND 7:DEMIFOND=CFOND AND 8:DEMIFOND=1+(DEMIFOND=8)
COULEUR=DEMIFOND*128+DEMIFORXE*64+FORME*8+FOND

Enregistrement d'image

On peut manipuler un seul enregistrement de forme TO7 et les couleurs correspondantes aux deux appareils :

10 IF PEEK(0)=32 THEN DECAL=O:PRC=&HE7C3 ELSE DECAL=-&H4000: PRC=&HA7C3
20 LOADM"IMAFORME",DECAL
30 POKE PRC,PEEK(PRC) AND 254
40 IF PEEK(0)=32 THEN LOADM"IMACOUL.TO7" ELSE LOADM "IMACOUL.MO5
50 POKE PRC,PEEK(PRC) OR 1

Sur nanoréseau il est impossible de charger directement l'enregistrement couleur, car le DOS utilise le haut de la mémoire de forme de 1F5D à 1FFF (ou 5F5D…) pour les consignes NET$ et les pointeurs.
Il faut donc translater l'enregistrement et utiliser un programme assembleur pour remettre en place les couleurs.

VI) Acte 2 : dé-protection de programmes BASIC

Un DRAPEAU : 0=faux lorsque le programme est listable.
255=&HFF (-1 = vrai) quand il est protégé.

Protection MO5 : drapeau &H217F

L'exécution de LIST passe par l'adresse &H21FB située en RAM et contenant un JUMP en &HC324. En mode direct on ignore le travail fait par le BASIC à partir de cette adresse. Effectuer soit un RTS (retour de sous-programme)
soit un JUMP direct en &HEOE9.

Méthode : Petit journal I.P.T. Fourberies de Microtom :
taper NEW NEW
POKE &H21FB,57
POKE &H21FC,&HE0
POKE &H21FD,&HE9
charger le programme : LOAD "… " LOAD "… "
Le programme est listable, le modifier éventuellement, puis le sauver, éviter de l'exécuter. Il est prudent de remettre le basic en place ; drapeau mis à zéro :
POKE &H217F,0
POKE &H217F,0
restaurer le basic :
POKE &H21FB,&H7E
POKE &H217F,&HC3
POKE &H217F,&H24

Ces méthodes échouent sur certains programmes. Essayer de déplomber avec un TO7, sinon manipulations style TO 9. On peut parfois surmonter ainsi une IO error du magnétophone.

Protection TO 7 : drapeau &H61A2

On utilise le fait que l'ordre EXEC (RUN programme binaire) n'est pas protégé et que WEND n'est pas utilisé.
Taper: POKE &H6236,&HOF 'CLR
POKE &H6237,&HA2 '$61A2 direct
POKE &H6238,&H39 'RTS
puis charger le programme et taper; WEND (TO7) ou EXEC &H6236 (TO9).
Pour interdire la dé-protection par EXEC 1216 écrire en première ligne :
1 IF PEEK(0)=32 THEN POKE &H61A2,255

Protection TO 9 basic 128 : drapeau &X6179

Valider les lignes suivantes :
LOAD" PROG"
OK
NEW
OK
BANK 1:FOR A=&HA005 TO &HAOFF:IF PEEK(A)=0 THEN ? HEX$(A) ELSE NEXT
A0XX
OK
POKE &HA002,&HXX'XX Deux derniers octets de la valeur A0XX

Ces manipulations sont assez longues. Utiliser PROTECT que l'on charge avant le programme protégé. Le texte des calculs restant en mémoire écran
10 INPUT"Nom du programme",P$
20 PRINT"Valider les lignes suivantes :"
30 PRINT:PRINT"LOAD"CHR$(34)"P$"CHR$(34)
40 PRINT:PRINT"NEW
50 PRINT:PRINT"BANK 1: FOR A=&HA005 TO &HAOFF: IF PEEK(A)<32 THEN RINT HEX$(A) ELSE NEXT
60 PRINT"A0XX
70 PRINT:PRINT"POKE &HA002,&HXX'XX Deux derniers octets de la valeur A0XX trouvée ci-dessus."
80 LOCATE 0,CSRLIN-11

On retrouve la partie de programme située en banque 1. Travail analogue dans les autres banques pour les programmes de plus de 16 k (en utilisant la banque 1 pour la variante du programme PROTECT).

VII) Listing de toutes les couleurs

Un programme listable, mais l'écran change de couleurs : on trouve des CONSOLE, des ATTRB, etc.
Il a été « miné » par des attributs télétel (exemple ELMO). Parcourir la mémoire et supprimer tous les codes inférieurs à 32 (autre que le chaînage et les numéros de ligne).

  • 14 passage en semi-graphique,
  • 27 (Escape> suivi d'un octet ou d'un espace et d'un autre octet,
  • 31 (LOCATE télétel) suivi de deux octets,
  • les codes qui gèrent l'écran ou les diverses imprimantes.

Pour trouver ces codes et les remplacer par un, deux ou trois espaces, MERGEr à la fin du programme les lignes suivantes. (ne pas utiliser le BASIC 128)

60000 DEB=PEEK(DEB)*256+PEEK(DEB+1)
60010 FIN=PEEK(DEB)*256+PEEK(DEB+1) 60020 IF FIN=O THEN END
60030 FOR I=DEB+4 TO FIN-2
60040 IF PEEK(I)=27 THEN POKE I,32:POKE I+1,32
60050 IF PEEK(I)=31 THEN POKE I,32:POKE I+1,32:POKE I+2,32
60060 IF PEEK(I)<31 THEN POKE 1,32
60070 NEXT
60080 DEB=FIN: GOTO 60010

Puis taper RUN 60000

VIII) Programme BASIC sur cassette trop long

Un certain nombre de programmes basic utilisent plus de 22 Ko et ne peuvent loger avec le DOS : c'est parfois une forme de protection (exemple : AUTOBAS d'Informatique Pour Tous).

Quatre possibilités :
1) Utiliser le minidos disquette mis au point pour les cartouches.
On ne peut que faire LOAD, pas de DIR ni de SAVE. Charger le programme sur disquette avec la cartouche assembleur ou avec un TO9.
2) Utiliser le basic 128.
3) Souvent ces programmes contiennent beaucoup de données. Les placer dans un fichier en remplaçant les READ DATA par des INPUT#1, avec disquette l'accès à ces fichiers est facile.
4) Découper si possible le programme en plusieurs parties, en dupliquant les sous-programmes communs. Finir la première partie par LOAD"PROG2",R.

IX) Amélioration des programmes

Écran

Toute utilisation de l'informatique doit viser transparence et confort d'utilisation.
Hélas, pour des raisons essentiellement commerciales,I.P.T. s'est orienté dans le sens contraire.
Il faut donc reprendre les programmes et en supprimer tout ce qui marche mal, volontairement ou non.

Curseur

Allumé : LOCATE X,Y,1 ou PRINT CHR$(17);
éteint : LOCATE X,Y,0 ou PRINT CHR$(20);
Lors des compositions graphiques ou si l'on utilise le crayon optique le curseur doit être éteint. Le laisser allumé lors des accès clavier:
Le dernier paramètre de LOCATE n'est modifié qu'explicitement. Il n'est pas nécessaire de le répéter. Le moniteur a quelques bugs et perd parfois le curseur, mais multiplier les LOCATE X,Y,1 ne change rien.

Attribut
La taille des caractères, transitoire, est réinitialisée lors du OK. Il est donc inutile de commencer les programmes par ATTRB 0,0.

Accents
La longueur d'une lettre accentuée est 3 (Invention PTT, norme télétel). Cela induit des bugs dans les comparaisons de chaînes de caractères, le calcul de leur longueur et è l'affichage :
Par exemple, il est impossible d'écrire un accent colonne 38 ou 39:
LOCATE 38,Y: PRINT"é" affiché au début de la ligne suivante.
Une chaîne contenant des accents sera affichée à la ligne suivante si la position d'affichage plus la longueur dépasse 39: La frappe de la touche ACC colonne 39 sur TO7 chaîne la ligne avec la suivante (effacer ensuite la lettre, le chaînage reste). Cela remplace le CNT W du MO 5.

Ligne 24 : (25e ligne)
Pour écrire ligne 24 utiliser PRINT…; le « ; » empêche le défilement de l'écran. Il est impossible d'écrire avec PRINT dans la case 39,24. Utiliser PSET(39,24)".".
LOCATE X,Y écrit ligne 24 si Y est supérieur à 24, mais génère une erreur sur TO9. Attention aux LOCATE 0,25 de certains programmes qui ont oublié la ligne 0.
De même, LOCATE 40,Y; PSET(X,200) ou PSET(320,Y) acceptés par le TO7 gênèrent une erreur en BASIC 128.

Clavier

L'accès clavier doit être le plus transparent possible : exactement le contraire des programmes Informatique Pour Tous qui commencent par SCREEN 0,0,0:LOCATE 0,0,0 et où il faut taper une touche sans que cela soit précisé. C'est se moquer de nos élèves : pour corriger, avant la boucle INKEY$ écrire un message et initialiser INKEY$ avec un premier INKEY$ fictif.

100 PRINT"Pour commencer taper sur une touche";
110 R$=INKEY$
120 R$=INKEY$:IF R$="" THEN 120

Ces deux dernières lignes sont avantageusement remplacées par : R$=INPUT$(1), mais le CNT C n'est plus actif. Bonne occasion de le contrôler et de remettre les attributs en place :
R$=INPUT$(1)
IF R$=CHR$(3) THEN CONSOLE 0,24:LOCATE 0,24,1:PRINT"Au revoir": END

Si possible, remplacer INPUT par un sous-programme testant les caractères un par un, permet un contrôle strict, des réponses plus rapides et en numérique évite des « Redo from start », mal compris des élèves.

Pour saisir un seul caractère, utiliser INPUT$(1) à la place de INPUT.
Tester une possibilité d'accès direct (touche RAZ) et éventuellement de guide (touche ACC, norme télétel) :

R$=INPUT$(1)
IF R$=CHR$(1) THEN PRINT"appeler votre professeur":STOP 'CNT A
IF R$=CHR$(3) THEN CONSOLE 0,24:LOCATE 0,24,1:END 'CNT C
IF R$=CHR$(12) THEN 1000
IF R$=CHR$(22) THEN GOSUB 2000 'ACC
1000 'MENU …
2000 'GUIDE …

Ne jamais utiliser des INPUT multiples : INPUT A,B.
Utiliser LINEINPUT si l'on veut saisir des phrases où peuvent figurer des virgules.

Ne pas demander à l'utilisateur de se mettre en majuscule ou minuscule, mais l'imposer en utilisant par exemple :
POKE PRC,PEEK(PRC) AND 247 (PRC=&HE7C3 ou &HA7C0).

Éviter les consignes trop strictes de la forme « pour commencer taper sur C », remplacer par « une touche » (quelconque). Précéder toute lecture d'un message. Pour les non-initiés préciser lorsque l'on doit terminer par Entrée: Dire clairement si l'accès est au crayon optique et/ou au clavier. Tester éventuellement les deux possibilités.

X) Améliorations diverses des programmes

Boucle d'attente

Attention aux longueurs. Un des problèmes de l'informatique, surtout en basic, est la lenteur. Certains programmeurs en rajoute, en abusant du graphisme, en multipliant la musique ou des : FOR I=1 TO 1000 :NEXT.

Dans les boucles d'attente, permettre à l'utilisateur, des sorties plus rapides, en testant clavier et/ou crayon optique. Attention la vitesse d'exécution varie en fonction des appareils :
FOR I=1 TO 8000: NEXT '10 secondes
est à remplacer, en utilisant PLAY (vitesse invariable), par :
R$=INKEY$: PLAY"L1"
FOR I=1 TO 300
PLAY"P":R$=INKEY$
IF R$>"" OR PTRIG THEN I=300
NEXT I:PLAY"L24"

Modifier de même les sous-programmes TIME$ de temporisation Michel Oury qui utilise le TIMER du TO7, incompatibles avec les TO9 et MO5. (1/10e de seconde à remplacer par PLAY"L1P")

Ordinateur que fais-tu ?

Ne pas laisser tourner un programme longtemps sans affichage.
Dans un calcul assez long, montrer que l'ordinateur travaille, avec environ toutes les 10 secondes, un message ou tout simplement un SCREEN, ,X.
10 FOR I=1 TO 1000
20 IF I MOD 100=0 THEN SCREEN, , (I/100) MOD 8

Signaler les appels aux périphériques (attention à la sélection par défaut). Faire précéder :
200 LOADM"TOTO"
par le message :
195 PRINT"Je charge le fichier TOTO"
Avec ce genre de message, le programme « MYCOTER » sur les champignons devient utilisable (actuellement on n'a pas la patience d'attendre le chargement de fichiers).
Ne pas oublier de gérer les erreurs disque IF ERL=200 THEN 'erreur au chargement de…

RND

Le basic Thomson n'a pas de fonction RANDOMIZE. Pour rendre RND « aléatoire » il n'est pas nécessaire de demander un nombre, mais utiliser après un affichage une boucle INKEY$ :
100 PRINT"taper une touche";:R$=INKEY$
110 R$=INKEY$:A=RND:IF R$="" THEN 110

FOR … NEXT

En basic Microsoft il est interdit de sortir d'une boucle sans passer par l'instruction NEXT
10 FOR 1=1 TO 10
30 IF CONDITION THEN 110
100 NEXT I
110 'SUITE

Doit être remplacé par :
30 IF CONDITION THEN I=10:GOTO 100

Si la valeur de I est à réutiliser, la ranger dans un drapeau :
30 IF CONDITION THEN DRAP=I:I=10:GOTO 100
110 I=DRAP

En BASIC 128 on peut écrire :
30 IF CONDITION THEN EXIT
Les erreurs ne sont pas signalées immédiatement : uniquement lorsque l'on retrouve un NEXT sans nom de variable ou un FOR … NEXT concernant la même variable. Les messages ne sont explicites : NF ou FN, parfois SN error.

Analyse d'erreur

Lorsque vous découvrez une erreur dans un programme, l'écran est souvent sous SCREEN 0,0,0 (loi de l'ennui maximum).

SCREEN 7 est à taper en frappe aveugle
CONSOLE 0,24 peut éventuellement remettre en place l'écran.

On doit alors retrouver un message d'erreur :
Error 2 line 127 ou SN Error In 127
Taper LIST. sur TO7 ou interroger en mode direct : ? ERR ; ERL
Attention, RESUME peut avoir modifié ces paramètres.

Si vous ne découvrez pas la raison de l'erreur, supprimer du programme les SCREEN 0,0,0, les ON ERROR et contrôlez le CLEAR.
Vérifier les branchements avec RENUM 60000,6000.
Tentez une nouvelle exécution, en utilisant éventuellement TRON et bon courage.

XI) Fichiers séquentiels

Le programme utilise-t-il des fichiers ?

Instructions :
OPEN "0", #1, "XXXXXX. DAT"
INPUT #1…
CLOSE
Ces fichiers de données peuvent être recopiés avec de petits programmes comme CASDIS.
Lorsqu'ils sont courts, on a intérêt à les introduire dans le programme sous forme de DATA, en remplaçant les INPUT#1… par des READ… Parfois les noms de fichiers sont précédés de "CASS:". Supprimer ce préfixe pour pouvoir utiliser des disquettes.
Certains programmes utilisent plusieurs fichiers de données sous le même nom. En version disquette il faut les numéroter et modifier le programme basic pour laisser le choix du fichier de travail.

- Travaux pratiques 1 : conjugaison I.P.T

La cassette contient :
ENTCONJ.BAS : programme ENTETE, destiné à faire patienter pendant le chargement du magnétophone, peut être supprimé.
CONJUG.BAS programme principal puis trois fichiers :
FICONJ.DAT.
Le programme CONJUG contient la ligne suivante pour la lecture des fichiers :
3 IFFO=ITHENF0=0:LOCATE4,23:PRINT"Je mets les phrases en mémoire ":OPEN" I",#1,"FICONJ":GOTO4ELSE6
La remplacer par :
3 PRINT"Sur quel fichier voulez-vous travailler 1,2 ou 3";:R$=INPUT$(1):IF R$>"0" AND R$<"4" THEN OPEN" O",#l,"FICONJ"+R$ ELSE 3

Puis exécuter 3 fois le programme suivant CASDIS en nommant les fichiers FICONJ1,FICONJ2 et FICONJ3.
10 CLS:PRINT"TRANSFERT DE FICHIERS DE DONNEES"
20 PRINT"Source : cassette (magnétophone en position lecture)
30 INPUT but : nom du fichier Disquette ";NOM$
40 OPEN" I", #l, "CASS:
50 OPEN" 0", #2, NOM
60 LINEINPUT #1,A$
70 WRITE #2,A$
80 IF EOF(1) THEN CLOSE ELSE 60

À la fin de la cassette, on trouve : EDCONJUG.BAS programme de création de fichiers.
CAAV.TO7 retour à la mire, peut être supprimé (exemple de programme compactifié. Une seule ligne de 453 caractères, seul le début de la ligne est listable).

- Travaux pratiques 2 : Invasion des chiffres

Transformation d'un petit fichier de données en DATA :
La cassette contient :
ENTINV.BAS qui peut être supprimé,
INVAS.BAS programme principal, puis un mini fichier :
INSINV.DAT dont le seul but est de vous faire jongler avec les touches du magnétophone et de donner du travail aux pirates (ce fichier n'existait pas dans les premières versions IREM du programme. Il a été introduit pour I.P.T.).
Nous pouvons exécuter LECTDATA permettant de lire les données et de les afficher à l'écran.
0
1 CLS:PRINT"lecture de fichier de Données et écriture de DATA"
10 PRINT"Source :cassette (magnétophone en position lecture)"
20 OPEN" I",#1,"CASS:"
30 A=20000:PRINT A"DATA";.
40 INPUT#1,D$
50 PRINT D$;
60 IF EOF(1) THEN CLOSE: END
70 IF POS(0)>35 THEN A=A+l0:PRINT:PRINT A"DATA" ELSE PRINT
80 GOTO 40

Nous obtenons les lignes suivantes que l'on conserve dans la mémoire écran :
20000 DATA 100, 11, 99, 11, 99, 11, 99
20010 DATA 11, 99, 2, 9, 2, 9, 2, 9, 2
20020 DATA 9, 0, 0, 0

Nous chargeons le programme INVAS (listable) LOAD"INVAS"
Puis validons les lignes de DATA: remonter le curseur et taper trois fois sur touche Entrée.
Dans le programme principal nous trouvons le sous-programme de lecture de fichier :
5925 CLS:SCREEN1,4,6:ATTRBO,O:LOCATE9,10:PRINT"Chargement des données"
5930 OPEN" I",#1,"I NS INV"
5940 INPUT#1,ZMX
5950 FOR NIV=1TO4
5955 INPUT#1,PNI(NIV),PNS(NIV),DNI(NIV),DNS(NIV)
5957 NEXT NIV
5958 INPUT#1,RET(1),SOM(1),DFMD(2)
5960 CLOSE #1

Il reste à modifier le programme INVAS : (transformation des INPUT#1 en READ)
5925 CLS:SCREEN1,4,6:ATTRBO,0
5930 RESTORE 20000
5940 READ ZMX
5950 FOR NIV=1TO4
5955 READ PNI(NIV),PNS(NIV),DNI(NIV),DNS(NIV)
5957 NEXT NIV
5958 READ RET(1),SOM(1),DFMD(2)
5960 'à supprimer

SAVE"INVAS" ; les vicieux rajoutent P
Le contenu de la cassette peut donc être réduit à ce seul programme qui est alors utilisable avec le Picoréseau.
Lorsque la liste des DATA dépasse une page écran on peut créer un fichier programme à MERGEr dans le programme principal en modifiant LECTDATA :

25 OPEN "O",#2,"LIGNES.BAS"
30 A=20000:L$=STR$(A)+"DATA"
50 L$=L$+D$
60 IF EOF(1) THEN PRINT #2,L$:CLOSE:END
70 IF LEN(L$)>230 THEN PRINT #2,L$:A=A+10:L$=STR$(A)+"DATA" ELSE L$=L$+","

Puis RUN
LOAD"PROG"
et MERGE"LIGNES"
enfin SAVE "PROG"

- Travaux pratiques 3 : Promenade

Pour utiliser les disquettes, recopier le fichier de donnée (RUN 60050 sous-programme se plaçant à la fin de PROMENAD).
60050 OPEN"I",#1,"CASS:INSPRO"
60060 INPUT#1,SENS
60070 INPUT#1,NIV3
60080 INPUT#1,CHIF
60090 INPUT#1,PPP
60100 CLOSE
60110 GOSUB 7580' utilisation de la partie enregistrement du programme de modifications accessible par INS + Entrée.

La section chargement des données peut être modifiée :
7610 CLS: SCREEN1,0,0:LOCATE10,11:ATTRB 0,0: PRINT "Chargement des données"
7615 'GOTO 7595' Si pas de fichier, magnétophone ou picoréseau
7620 OPEN" I",#1,"INSPRO"
7621 INPUT#1,SENS
7622 INPUT#1,NIV3
7623 INPUT#1,CHIF
7624 INPUT#1,PPP
7630 CLOSE:RETURN
7640 SENS=O:NIV3=0:CHIF=O:PPP=O:RETURN

Le ON ERROR 20000 permet de gérer l'utilisation du fichier INSPRO
20000 IF ERL=7620 THEN RESUME 7640' DATA remplaçant le fichier
20010 PRINT "Erreur" ERR "ligne" ERL: END

Un bon exercice de programmation consiste à supprimer complètement ce fichier et à transformer le sous-programme de modifications de données (lignes 7360-7590) en un programme les implantant directement en mémoire, ligne 7640 : suivre le chaînage à partir de 611C ou 2113 puis POKEr les nombres au format de STR$( ).
Les GR$ sont rangés dans un fichier de DAT qui est assez long à lire et qui est chargé à chaque exécution du programme par la ligne 14:
14 OPEN"I",#1,"PROMGR":FORT=OTO44:FORJ=1TO8:INPUT#1,A(J):NEXTJ: DEFGR$(I)=A(1),A(2),A(3),A(4),A(5),A(6),A(7),A(8):NEXT I:CLOSE

Il possible de supprimer ce fichier et d'implanter directement les GR$ en mémoire
30000 DEFGR$(0)=…

30440 DEFGR$(44)=…

Ces lignes sont créées sous forme fichier ASCII :
60000 OPEN" I",#1,"CASS:PROMGR":OPEN"O",#2, "LIGNES. BAS"
60010 FOR I=0 TO 44:PRINT#2,STR$(30000+I*10); "DEFGR$("MID$(STR$(I),2,LEN(STR$(I>>-1)")=";
60020 FOR J=1TO 8:INPUT#1,A:PRINT#2,MID$(STR$(A),2,LEN(STR$(A))-1);
60030 IF J<8 THEN PRINT#2,",";
60040 NEXT J:PRINT#2:NEXT:CLOSE
60042 MERGE"LIGNES"
60044 KILL"LIGNES.BAS

et remplacer la ligne 14 par : 14 GOSUB 30000 puis terminer avec :
30450 RETURN

En système disquette, il est performant d'utiliser un fichier binaire PRONGR.BIN à créer sur TO7-70, par exemple, après le lancement de PROMENAD par :
SAVEM"PRONGR",&HDFFF-8*45,&HDFFF,0

ou plus précisément :
IF PEEK(0)=32 THEN USERAF=&H602D ELSE USERAF=&H2070
ADRDEB=PEEK(USERAF)*256+PEEK(USERAF+1)
N=45:ADRFIN=APRDEB+N*8-1
SAVEM"PROMGR"

On peut retrouver les GR$ par un simple 14 LOADM" PROMGR"
Si l'on veut tenir compte des décalages entre les micros :
14 GOSUB 30000
30000 IF PEEK(0)=32 THEN USERAF=&H602D ELSE USERAF=&H2070
30010 ADRDEB=PEEK(USERAF)*256+PEEK(USERAF+1)
30020 LOADM"PROMGR",ADRDEB-&HDE97
30030 RETURN

XII) Acte 3 : fichiers binaires

Souvent les programmes machines ne sont pas compatibles sauf s'ils sont parfaitement translatables et si la correspondance des adresses a été trouvée. C'est souvent difficile, car les moniteurs TO7 et MO5 n'ont pas la même logique : sauts vectorisés sur TO7-TO9, interruptions sur MO5.

Copier

Pour dupliquer des fichiers binaires sur disquettes, le plus simple est d'utiliser l'ordre COPY :
COPY "FICH.BIN" avec un seul lecteur de disquette.
COPY "O:FICH.BIN" TO "1:FICH.BIN" avec deux lecteurs de disquette Thomson.
COPY A:FICH.BIN B: sur le serveur MS-DOS du nanoréseau.

LOADM-SAVEM

Pour une copie utilisant une cassette il faut charger le fichier en mémoire avec l'instruction LOADM et le sauver avec SAVEM.
Ces deux ordres ne sont pas symétriques. On peut facilement charger, mais pour effectuer un LOADM il faut connaître l'adresse du début, celle de la fin et l'adresse de lancement du programme binaire.
L'adresse d'exécution se trouve facilement. Elle est rangée en &H223F sur MO5 et en &H623F sur TO7. Par exemple sur TO7 :
ADEXEC=256*PEEK(&H623F)+PEEK(&H6240).

On la trouve aussi à la fin de l'enregistrement : les cinq derniers octets sont FF, 00, 00, ADEXECI ADEXEC2 suivis du reste du buffer précédent.
L'adresse de début est rangée en &H44EF sur un MO5 du nanoréseau sinon deux possibilités pour trouver les deux dernières adresses.

- Première méthode

On peut DUMPer la cassette ou la disquette (voir programme DUMPCASS ou SCRUTCAS Théophile).
Le premier octet est 00, suivi de deux octets indiquant la longueur de l'enregistrement, suivis de deux autres octets donnant l'adresse du début. Soit après une suite de FF,FF,FF indiquant le début de la cassette, on trouve : 00,LG1,LG2,ADDEBI,ADDEB2, puis le programme binaire.
L'adresse de fin est alors : ADFIN=ADDEB+LG-1.

- Deuxième méthode

Pour trouver ADDEB et ADFIN on peut aussi vider la mémoire puis en tester le début et la fin :
par exemple si l'on a trouvé un CLEAR &HA000 dans le programme chargeur BASIC (TO7-70) on peut lancer le programme
10 DEB=&HA000
20 CLEAR DEB 3
30 DEB=&HAOOO:FIN=&HDFFF 'Réécrire DEB effacé par CLEAR
40 FOR I=DEB TO FIN:POKE I,O:NEXT
50 LOADM"CASS:"
60 FOR I=DEB TO FIN
70 IF PEEK(I»O THEN ADDEB=I: I=FIN
80 NEXT
90 PRINT"Adresse de début &H";HEX$(ADEB)
100 FOR I=FIN TO DEB STEP -1
110 IF PEEK(I)>O THEN ADFIN=I:I=DEB
120 NEXT
130 PRINT"Adresse de fin &H";HEX$(ADFIN)
140 ADEXEC=PEEK(&H623F)*256+PEEK(&H6240)
150 PRINT"Adresse d'exécution &H";HEX$(ADEXEC)

Avant l'enregistrement du programme binaire on notera dans le chargeur basic ces trois adresses pour éviter de recommencer ce travail.
Un certain nombre de fichiers binaires sont directement exécutables. LOADM met à 1 le drapeau d'EXEC et lance le programme :
On peut les charger avec un décalage et garder la main au basic.
LOADM"CASS:",&H1000
Ne pas oublier ce décalage dans les calculs.

- Travaux pratiques 4 : Tennis

Dans le programme basic ENTETE, on trouve :
POKE &H61A2,&HFF remise à vrai du drapeau de protection, anti-"EXEC 1218"
POKE &H6294,&H32,&H62 LEAS
POKE &H6296,&H39 RTS
Modification de l'index de la page 0 du système. Supprime l'action des touches STOP et CNT C (à connaître).
CLEAR,&H7500 obligatoire sinon la saturation du haut de la moire plante l'ordinateur à la fin de l'enregistrement. (remarquer que l'on ne peut utiliser le DOS ordinaire.)
Puis LOADM pour charger le programme binaire TEN70.BIN.

Le début de l'enregistrement TEN70 est : 00,5E,BO,81,50,20,24,:.
L'adresse de début est donc &H8150.
L'adresse de fin est &H8150+&H5EBO-1=&HDFFF.

Le chargeur BASIC TENNIS s'écrit :
10 CLS:PRINT"Patience je charge TENNIS pour TO 7-70"
20 POKE &H6294,&H32
30 POKE &HG295,&H62
40 POKE &H6296,&H39
50 CLEAR, &H7500
60 PRINT CHR$(20)'curseur invisible
70 LOADM "TEN70", ,R
80 'SAVEM "TELAT70",&H8150,&HDFFF,&H9500 'pour mémoire

Puis changer de bande
SAVE "TENNIS"
SAVEM "TENT70",&H8150,&HDFFF,&H9500

Pour TO7+16k
SAVEM "TENTO7",&H7950,&HDFFF,&H7950

Pour MO5 : pas de POKE dans le chargeur.
CLEAR, &H4000

SAVEM "TENMO5",&H4150,&HDFFF,&H8500

CONCLUSION

En espérant que ces quelques trucs plus ou moins faciles vous aideront à comprendre le système. Bien se rappeler que ce qui fait l'intérêt d'un programme est sa documentation. Ne piratez pas : il faut que l'on trouve des logiciels pas chers et de qualité et cesser de payer implicitement pour toutes les copies pirates.

Patrice Debart : parcours informatique pédagogique

1980-1994 : Responsable de la cellule Création de logiciels du CRDP de Caen :
                     LSE, Logo et Basic pour ordinateurs Léanord, Goupil, Thomson

1984-1994 : Mi-temps responsable académique de télématique
1984-1994 : Association pour le Développement de l'informatique en BAsse NORmandie
1985 : Formateur Informatique Pour Tous - Nanoréseau
1988-1993 : Enseignement de l'option informatique au lycée Jean Rostand (TICE et Pascal)
1989-1994 : Président de la régionale EPI de Caen

1983 : Achat TO 7
1985 : Achat TO 9
1986 : Premier PC
1986 : La courbe au mieux in Microtom no 5

Table des matières

Index : archives personnelles

EPI : Bibliographie

EPI : l'informatique en Histoire-Géographie

Du MO5 au PC : 25 ans d'informatique pédagogique

Me contacter

WikiPédia

Thomson TO7

Thomson MO5

Thomson TO7/70

Thomson TO8

Thomson TO9+

Nanoréseau

Plan Informatique Pour Tous

EPI

Moteur de recherche

Logo Google  

Page mobile friendly Mobile friendly

Téléchargement

doc Télécharger bidouille_thomson.doc, ce document « .doc » (1389 ko)

pdf Télécharger la première partie au format PDF : epi.asso.fr ou edutice.archves-ouvertes : ccsd.cnrs.fr (475 ko)

pdf Deuxième partie au format PDF : epi.asso.fr ou edutice.archves-ouvertes : ccsd.cnrs.fr (215 ko)

Copyright 1986 - ©

 Statistique Orange persoe visite des pages « perso  ».

Page no 21, réalisée le 28/8/2002