Texas Instruments TI 99/4A

English Version
WikipédiA



Mon premier ordinateur acheté vers 1983

Découvrez My Little Compiler (accélérez vos programmes BASIC!)

Téléchargements!

Merci à Pascal-J pour les scans
et le partage de son travail.
Merci aux auteurs qui conservent
la propriété intellectuelle des ouvrages.
Demandez moi un accès à mon Cloud pour obtenir
ces manuels.


Manuel du TI/99 en Français. 50 programmes (finances, jeux, maths...) en TI-Basic (3 programmes en Basic Etendu). Français. 99'Magazine, n°3, décembre 1983, français. Livret technique, tome 1, anglais. Livret technique, tome 2, anglais. Livret technique console et boitier d'extension, anglais.
Caractéristiques Ce que je possède Relecture des cassettes

Mon tout premier ordinateur de table. Malgré tous les défauts que j'y vois aujourd'hui, j'y suis resté "attaché". C'est une machine qui poussait à la rigueur: tolérance zéro dans la syntaxe, une lenteur telle que l'optimisation était incontournable. Je me suis vu remplacer des "/4" par "*.25", des "Var=10" par "V=10", des numéros de lignes à 3 chiffres par deux ou un pour gagner de la place et de la vitesse. De plus, pour un vrai 16 bits, l'absence de variables entières "A%" était une lacune grossière.Cependant...

Un ordinateur plein d'atouts:
  1. un cpu 16 bits, 3MHz
  2. 16k de ram vidéo séparée
  3. 16 couleurs, mode texte, basse et haute résolution
  4. des sprites électroniques
  5. extension par modules rom
  6. un vrai clavier mécanique
  7. son sur trois voies
  8. langages Pascal, Logo, Assembleur, Basic
  9. port manettes
  10. port extension (Disquettes, RS232, Centronics, Ram)
Mais plein de bâtons dans les roues:
  1. les registres CPU sont des emplacements RAM (lenteur)
  2. la ram vidéo sert à stocker le programme Basic (possibilités graphiques réduites au texte en Basic, lenteur de l'interprétation)
  3. modules chers
  4. périphériques hors de prix
Ceci fait du Basic TI le langage le plus lent qu'il m'ait été donné d'utiliser. Il était également contraignant au niveau de la syntaxe et de l'édition. Avec le Basic Etendu, les choses s'amélioraient (légère accélération due à un jeu d'instruction plus complet et à la possibilité d'écrire plusieurs instructions par ligne).

Le langage machine du processeur TMS9900 était, quant à lui, extrêmement agréable, complet, facile à apprendre. Huit registre généraux, des modes d'adressage variés, et un vrai 16 bits.

J'ai toujours regretté de ne pas avoir pu m'offrir les périphériques qui en auraient fait un ordinateur complet.

Voici ce que je possède:


Mes extensions

L'extension TI Speech Synthesizer donne de la voix à l'ordinateur par le sous programme CALL SAY du TI Basic Etendu par exemple. D'autres cartouches y donnent accès: l'Assembleur, les jeux comme PARSEC.

En chaine on trouve la carte CF7+ détaillée plus bas.

La carte CF7+

Extension géniale qui combine trois éléments essentiels:
  1. un port parallèle Centronics
  2. une extension mémoire 32 Ko
  3. un lecteur de Compact Flash qui simule trois unités de disques DSK1, DSK2 et DSK3 a choisir parmi les images disques chargées sur la carte (selon sa capacité) avec les sous programmes CALL MOUNT/UNMOUNT et CALL FORMAT.
Utilisation de CALL MOUNT dans un programme

La commande CALL MOUNT, celle qui permet de changer de disquette virtuelle, ne fonctionne pas à l'intérieur d'un programme, ceci empêche un logiciel nécessitant plusieurs volumes de tourner à moins d'un manipulation avec un STOP/CONT pour repasser en mode commande.

J'ai donc écrit un petit utilitaire pour sélectionner le volume qu'on veut insérer dans chaque unité DKS1/3. Il s'agit du fichier MOUNTOBJ qui s'utilise ainsi à partir d'un programme en Basic Etendu:
CALL INIT
CALL LOAD("DSK1.MOUNTOBJ")
CALL LINK("MOUNT",u,v)
  • u est l'unité à charger (1,2 ou 3 pour DSK1,2 ou 3)
  • v est le numéro du volume de 1 à votre capacité maximale.
J'ai finalisé une seconde version qui ajoute l'appel:
CALL LINK("XMOUNT",u,v)
qui conserve les réglages même après un RESET.Ainsi que l'appel:
CALL LINK("DSKINF",V())avec DIM V(3) minimum
qui renvoit dans V(1), V(2) et V(3) les volumes montés dans chaque unité.

Télécharger ici le fichier CF7XMOUNT.DSK contenant:
  • le source assembleur XMOUNT
  • le programme objet XMOUNTOBJ
  • un fichier d'aide avec le source largement commenté XMOUNT.TXT

Code source MOUNT
(Je n'ai pas mis la partie XMOUNT car elle est un peu longue... Elle est détaillée dans le ZIP ci-dessus!)

* MONTAGE D'UN VOLUME CF7
* DANS UNE UNITE DSKn
*
* APPEL EN BASIC ETENDU
* CALL LINK("MOUNT",N,V)
* N=1,2 OU 3 POUR DSKN
* V=VOLUME DE 1 A MAX
        DEF  MOUNT
        VSBW EQU  >2020
        XMLLNK EQU  >2018
        NUMREF EQU  >200C
        FAC    EQU  >834A
        STATUS EQU  >837C 
        MYREG  BSS  32
GPL     DATA >0020
MOUNT   LWPI MYREG
        LI   R0,0
        LI   R1,1         UNIT 1-3
PARAM   BLWP @NUMREF      GET PARAM       
        BLWP @XMLLNK      TO INTEGER       
        DATA >12B8       
        MOV  @FAC,R4       
        A    R4,R4       
        AI   R4,16376     VDP ADR        
        LI   R0,0       
        LI   R1,2         DISK PARAM       
        BLWP @NUMREF      GET PARAM       
        BLWP @XMLLNK      TO INTEGER       
        DATA >12B8       
        MOV  @FAC,R1        
        MOV  R4,R0       
        BLWP @VSBW        HIGH OF DISK       
        INC  R0           NEXT RAM POS       
        SWPB R1       
        BLWP @VSBW        LOW OF DISK        
        SZCB @GPL+1,@STATUS       
        LWPI >83E0       
        B    @>0070        
        END
Quelques précisions:

Il m'a fallu désassembler un program de chez Texas pour écrire mon code car le passage de paramètresainsi que le retour au Basic Etendu ne fonctionnaient pas.
A partir du désassemblage de "SPEAK" du disk TI Speech, j'ai observé que:
  • pour la conversion Float ver Integer DATA >1200 ne marchait pas, mais DATA >12B8 si.
  • Un retour avec B *R11 (en utilisant l'adresse sauvegardée) ne fonctionnait pas non plus, mais un retour à la mainen fixant le GPLWS avec LWPI et en se branchant à l'adresse >0070 marchait bien.
  • Effacer le GPL STATUS BYTE semble incorrect, mais l'utilisation du masque >20 fonctionne.


Ce que fait le programme:

Il écrit simplement les numéros de volumes à des adresses VDP RAM spécifiques:
  • DSK1: WORD en 16378
  • DSK2: WORD en 16380
  • DSK3: WORD en 16382
Le problème est que ce réglage ne résiste pas au RESET. Je voulais faire un programme MENU qui, entre autres,fixait les volumes 30 et 31 pour ma programmation assembleur, et qui aurait écrit "Rebootez avec la cartouche E/A".Mais les réglages seront perdus!
Donc maintenant, l'appel à XMOUNT résout le problème.

Problème entre TI Speech et la CF7+

Le module TI Speech ne reporte pas sur son connecteur externe les deux sources +/-5V, ce qui empêche le reste de la chaine de fonctionner correctement. J'ai donc reporté moi-même ces deuxsources qui correspondent aux broches 1 et 43. Voilà les deux fils à souder. Attention à les souder le plus intérieurement sur leconnecteur externe car il doit s'enficher presque entièrement dans l'extension suivante.

Je n'ai pas résolu tous les problèmes d'accès à la CF7+ par cette manipulation. Si quelqu'un peut m'aider!
LA SOLUTION!

J'ai fini par trouver la solution! Il fallait mettre le module Speech après la CF7. Mais cette dernière n'ayant pas de report de conecteur,j'en ai fait un maison avec de la nappe IDE soudée sur la CF7 et à un connecteur mâle que j'ai fabriqué à partir d'un connecteur ISA d'une vieille carte graphique.

Il suffit de reporter 17 contacts pour que le module marche (8 au dessus et 9 au dessous), pour savoir lesquels, je vous renvoie à l'excellente pageTI-99 Upgrade.

J'ai accès entièrement aux disques: si les SAVE/OLD du BASIC fonctionnaient avant ce montage, il m'était impossible de charger un programme binaire (Comme l'Editeur ou l'Assembleur). C'est maintenant corrigé.


Le F18A

Il s'agit du remplacement du chip graphique TMS9918 par une puce améliorée amenant:
  • Une sortie VGA pour utiliser un écran moderne et sans scintillement
  • Un surplus de 2Ko de VDP RAM
  • Un générateur aléatoire
  • Une horloge
  • Une meilleure gestion des sprites (32 affichables par ligne)
  • Un plan graphique superposable haute définition et 4 couleurs
  • Un second processeur embarqué pouvant travailler directement sur la VDP RAM


Ci-contre, premier lancement du TI-99/4A équipé du nouveau F18A, test avec Pole Position et un écran 17 pouces.

Merci de ne faire aucun commentaire sur la poussière recouvrant l'écran et l'ordi...

Site de Matthew, créateur du F18A, c'est ICI


Le compilateur MLC supporte ces nouvelles possibilités depuis sa version 1.30
avec un jeu d'instructions pour gérer:

Un second processeur TMS9900 travaillant en parallèle sur la VDP RAM Une couche graphique superposable (BML) de 4 couleurs en haute résolution Un timer précis à 10ns, enfin une horloge dans le TI 99.


On enlève simplement l'ancien TMS9918 de son support
(pin 1 vers le haut de l'image)
On le remplace par le F18A
(connecteur vga vers la gauche de l'image)

Pas de son par le VGA!

Il faut donc repiquer les pins 5 et 6 du connecteur A/V et les brancher sur l'entrée d'un haut-parleur amplifié.


Le système remonté avec son, VGA, Speech et CF7+


Accélérer la console de 20%

Le TI 99/4A peut être overclocké. Son quartz de 12 MHz peut être changé par un quartz de 14,32 MHz sans problème de stabilité. La fréquence résultante est proche de 3,6 MHz. Cette manipulation a été prise sur le site TI-99 Upgrade qui propose plusieurs montages de manière claire et très professionnelle.

L'Assembleur avec la Minimémoire


L'assembleur devenait accessible avec la Minimémoire qui est à la fois:
  1. une extension RAM 4Ko permanente
  2. une interface vers la mémoire 32Ko non gérée par le TI Basic
  3. une interface pour charger des programmes depuis les unités de disque
  4. une interface vers le TI Basic avec les sous programmes CALL INIT, POKEV, PEEKV, LOAD, PEEK, LINK et CHARPAT pour gérer la mémoire et les sous programmes assembleur.
Il est livré avec un assembleur symbolique (sans sauvegarde du source!) et un exemple graphique LINES.

J'ai remplacé la pile interne 3V par un berceau avec deux piles standard 1,5V. Elles durent depuis des années.

Programmation

Deux cartouches indispensables:
  1. L'Editor/Assembler:
    1. un editeur pleine page
    2. un assembleur
    3. un debugger
    C'est un assembleur facile à aborder, clair, contenant peu de pièges.
  2. Le Basic Etendu:
    1. l'accès aux sprites, l'accès au module Speech
    2. plusieurs instructions par ligne, IF..THEN..ELSE
    3. sous-programmes avec paramètres CALL/SUB
    4. utilise la mémoire 32Ko et permet directement le chargement de routines assembleur
Relecture des cassettes

Les données sur cassette sont enregistrées sous forme d'un son sinusoïdal.
  1. Chaque ZERO est une demi-sinusoïde, positive ou négative de durée T. (figures ci-contre)
  2. Chaque UN est une sinusoïde complète de durée T. (figure ci-contre)
Le long bip de démarrage est une série de zéros: ceci permet decalibrer le lecteur et faisant la moyenne de la durée entre deux changements de signe pour estimer T.Ensuite, on calcule le temps entre deux changements de signe et
  1. dès qu'un changement de signe dure plus de 3T/4 je considère que c'est un ZERO
  2. si il dure moins de 3T/4 je considère que c'est la moitié d'un UNet je vérifie qu'il y a bien un second changement consécutif de moins de 3T/4.
Le début des données est marqué par un octet %b11111111 égal à 255 (ou -1 en signé).L'octet suivant indique le nombre de blocs contenus dans cet enregistrement.Chaque bloc est composé de deux fois 74 octets:
  1. 10 octets de contrôle (signification indéterminée)
  2. 64 octets de données
  3. répétition du bloc de 10 octets
  4. répétition du bloc de 64 octets
Le doublement des données est un système de contrôle de validité de la bande. Si il était débrayableles transferts seraient deux fois plus rapides!.

Pour reconstituer le programme, on recolle les blocs de 64 octets en supprimant les doubles et les octets de contrôle.On peut ainsi estimer la taille maximale d'un programme BASIC:
255 (nombre maximal de blocs) fois 64 = 16320 octets.

Application sur Atari

J'ai écrit un programme pour Atari TT + ST Replay 16 pour relire les cassettes du TI-99.Ainsi, il m'était possible de conserver une trace de mes programmes surdisquettes ou d'en imprimer un exemplaire avant d'avoir la CF7+.Telechargez cet archive qui contient:
  1. OLD_CS1.PRG, le programme de lecture
  2. CASSETTE.TXT le détail du codage des programmes sur bande
  3. CUBERT.CS1 un exemple de jeu que j'ai écrit il y a longtemps et récupéré grâce à ce système


15 décembre 2007