Envoyer un e-mail à Collection ThomsonCollection Thomson
EditoForum 2002Liens
Nanoreseau
Docs
Logiciels
Matériel
Imprimer le document
Retour à la liste

Vos papiers, s'il vous plaît !

Le repérage de l'ordinateur concerne les programmes compatibles.

Selon la machine varient les emplacements de mémoires, les adresses de registres, l'écran, etc... Certes, les programmeurs soucieux de faire tourner leurs programmes en langage machine sur plusieurs ordinateurs doivent déjà avoir une connaissance assez large des Thomson.

La valeur 8 bits contenue dans le registre $FFF0 (registre commun à toute la gamme TO/MO) permet à tout programmeur de cerner d'emblée et avec une grande précision le type de la machine utilisée. Cette valeur peut varier selon les conditions connues suivantes:

...mais la reconnaissance peut être plus fine, si l'on veut différencier un TO d'un MO. Les zones de RAM commutables de ces deux familles se trouvent à des adresses différentes, de $6000 à $9FFF pour les MO et de $A000 à $DFFF ($BFFF sur TO7) pour les TO. $A000 étant l'adresse de la ROM pour le disque sur MO, il suffit donc de tenter d'altérer la valeur à cette adresse et d'en tirer les conclusions:

  LDX    #$A000     Pointeur pour test
  LDB    ,X         Protège valeur
  COM    ,X         Complémente mémoire
  CMPB   ,X         | Si mémoire inchangée,
  BEQ    MO         | il s'agit d'un MO
  STB    ,X          | Ne pas oublier de restituer
  ...                | la valeur initiale pour le TO

...ou en basic:

A=&HA000:D=PEEK(A):POKEA,NOT(PEEK(A))AND255:IFPEEK(A)<>D THEN POKE(A),D:
PRINT"TO"ELSEPRINT"MO"

Bien qu’il s’agisse là de la méthode couramment utilisée, elle n’est malheureusement pas totalement fiable, puisque la mémoire vive d’un TO7 sans extension ne couvre pas cette adresse. Il pourrait y avoir confusion avec un MO. Il est alors toujours possible de tester le poids fort du vecteur de SWI3, celui-ci pointant en ROM sur les MO et en RAM sur les TO. Le programme précédent ne servirait plus alors qu’à tester la présence d’une extension mémoire sur TO7 :

TST    $FFF2      Teste le vecteur de SWI3
BMI    MO         Si négatif, il s'agit d'un MO

...ou en basic:

D=PEEK(&HFFF2):IF D>127 THEN PRINT"MO" ELSE PRINT"TO"

...ou de vérifier le bit 6 du registre DP : s’il est à 1, il s’agit d’un TO ; s’il est à 0, il s’agit d’un MO.

En poussant la recherche à son extrémité, comment différencier un TO8 d'un TO8D? Il semblerait judicieux, puisque la différence réside dans le fait que seul le TO8D possède un lecteur interne, de tester le bit 7 de l'image du registre $E7E7 en $6081, qui indique la présence d'un lecteur externe. Mais le TO8D peut lui aussi tourner en contrôleur externe. Ce ne serait donc pas un test fiable.

La seule différence invariable entre ces deux machines est dans le dessin du menu général (cf. "Désassemblage du Moniteur du TO8D" par Obsidian). Le graphique MIG du "D" de TO8D se trouve en banque 1 du moniteur et décale certaines données à cet endroit. Le test sera donc, par exemple:

     LDD  #PROG        | Initialise vecteur
     STD  $6055        | de JSR
     JSR  $FFA0        Exécute en banque 1
     CMPB #$DC         | Si donnée = $DC,
     BEQ  TO8D         | il s'agit d'un TO8
     ...               Sinon, c'est un TO8
PROG LDB    $F600      Récupère la donnée
     RTS                |

...ou en basic:

A=&HE7C3:POKE A,PEEK(A) OR &H10:D=PEEK(&HF600):POKEA,PEEK(A) AND &HEF:
IFD=&HDC THEN PRINT"TO8D" ELSE PRINT"TO8"

Appendice sur la reconnaissance du contrôleur

Pour vérifier la présence d'un contrôleur (interne ou externe), on testera les 4 premiers caractères de la zone réservée à cet effet, en $A000 pour les MO et en $E000 pour les TO:

  • Caractère 1 : Immatriculation du contrôleur disque ("M" pour Thomson Micro-Informatique, "D" pour Western Digital, etc...)
  • Caractère 2 : Taille de la FAT ("K" pour 80 octets, "T" pour 160 octets, etc...)
  • Caractère 3 : Densité du support ("D" pour double densité, "C" pour simple densité, etc...).
  • Caractère 4 : Checksum du descriptif de contrôleur, c'est à dire la somme des 3 caractères précédents augmentée de $55.

Outre le fait de rechercher un type de contrôleur précis, le calcul de validité du checksum de descriptif peut renseigner immédiatement sur sa présence.

Site
Plus
Forums
Code
Créations

*Site en favoris
*Page en favoris
*Site en démarrage
*Page en démarrage


Haut de page

Collection Thomson 2015 © Ghislain Fournier & François Mouret