Sur son blog officiel, Bill Gates a bien sûr voulu parler de ce qui a changé le monde de l’informatique. Alors, à 19 ans, Bill Gates, avec son pote Paul Allen, ils ont développé un logiciel, Altair BASIC, pour l’Altair 8800, le premier ordinateur personnel américain, fabriqué par la société MITS.
Pour fêter ça, Bill Gates te permet de télécharger gratuitement le code source d’Altair BASIC sur son blog. C’est le tout premier logiciel de la firme, un moment historique pour les amateurs de technologie !
Ce code est écrit en langage assembleur pour le microprocesseur Intel 8080.
Bien que le document contienne des extraits du « Original-Microsoft-Source-Code.pdf » et fasse référence à « BASIC MLS RDRB » et « MATHPK FOR BASIC », le code affiché est du code assembleur de bas niveau, et non du code source BASIC directement exécutable. On peut observer des mnemoniques d’instructions assembleur (comme MOV
, PUSH
, CALL
, RET
, JMP
, IN
, OUT
), des adresses mémoire et des étiquettes.
Bien que ce soit du code source de Microsoft lié à BASIC, le langage de programmation dans lequel ces extraits de code sont écrits est l’assembleur 8080.
Structure et Organisation du Code
Le code est clairement structuré en sections, souvent introduites par des commentaires descriptifs. On observe l’utilisation de directives DEFINE
pour établir des constantes et des macros, ce qui suggère une approche modulaire et une tentative de rendre le code plus lisible et maintenable. Par exemple, on trouve des définitions pour des opérations arithmétiques (DEFINE FAD
, DEFINE FSUB
), des fonctions (DEFINE FNINT
), et des constantes (DEFINE TRUE
, DEFINE FALSE
).
- Exemple :
00010 DEFINE TRUE 377 00011 DEFINE FALSE 0
Fonctionnalités et Modules
Le code implémente un interpréteur BASIC. Plusieurs sections sont dédiées à des aspects spécifiques du langage, tels que :
-
Gestion des nombres à virgule flottante : Une partie significative du code est consacrée aux opérations mathématiques sur les nombres à virgule flottante (addition, soustraction, multiplication, division, fonctions exponentielles, trigonométriques, etc.). On observe des routines pour la normalisation, l’arrondi et la gestion des erreurs de dépassement de capacité (
OVERFLOW
).- Exemple : La section commençant à la ligne 169 porte le titre « SUBTTL FLOATING POINT ARITHMETIC ROUTINES ».
-
Gestion des chaînes de caractères : Des routines existent pour manipuler les chaînes, telles que la concaténation, la comparaison et la recherche.
- Exemple : La section commençant à la ligne 650 porte le titre « SUBTTL STRING FUNCTIONS ».
-
Entrée/Sortie : Le code inclut des fonctions pour la gestion des entrées et sorties, potentiellement liées à la console ou à des périphériques de stockage comme des cassettes.
- Exemple : On trouve des références à
CONSOLE
dans des directivesDEFINE
(ligne 75).
- Exemple : On trouve des références à
-
Évaluation d’expressions : Une logique complexe est dédiée à l’évaluation des expressions mathématiques et logiques, en respectant la précédence des opérateurs.
- Exemple : La section commençant à la ligne 462 porte le titre « SUBTTL FORMULA EVALUATION CODE ».
-
Gestion de la mémoire : Des mécanismes sont présents pour l’allocation et la gestion de la mémoire, notamment pour les variables et les chaînes de caractères.
- Exemple : On observe des références à des « free area » et des routines pour la gestion de l’espace disponible (lignes 828 et suivantes).
-
Gestion des erreurs : Le code contient des messages d’erreur prédéfinis pour signaler des problèmes tels que la division par zéro, le dépassement de capacité, les erreurs de syntaxe, etc.
- Exemple : Une section importante (lignes 306 et suivantes) est dédiée aux « ERROR MESSAGES », listant divers types d’erreurs et les messages associés (e.g., « UCL!SYNTAX ERROR », « UCL!OVERFLOW »).
Conventions de Codage et Commentaires
Le code est relativement bien commenté, avec des explications pour les routines, les variables et les blocs de code importants. On note l’utilisation de titres et de sous-titres pour structurer le code et faciliter la compréhension. Les commentaires utilisent souvent une syntaxe spécifique avec des astérisques pour délimiter les blocs.
- Exemple : Le début du fichier contient des informations sur la version, la date et les auteurs : « BASIC MLB 8080 GATES/ALLEN/DAVIDOFF MACRO 47(113) 03112 10=SEP=75 PAGE 1 ».
- Exemple : De nombreux blocs de code commencent par des commentaires descriptifs de la fonctionnalité implémentée.
Références aux Auteurs et à l’Origine
Le code source contient des mentions explicites des auteurs, Bill Gates, Paul Allen et Monte Davidoff, ainsi que des informations sur le copyright.
- Exemple : « COPYRIGHT (C) 1975 BY BILL GATES AND PAUL ALLEN » (ligne 88).
- Exemple : « BILL GATES WROTE THE RUNTIME STUFF » (ligne 90).
- Exemple : « PAUL ALLEN WROTE THE I/O PACKAGE » (ligne 91).
- Exemple : « MONTE DAVIDOFF WROTE THE MATH PACKAGE. » (ligne 92).
- Exemple : À la fin du fichier, on trouve la mention « BASIC 8080 WRITTEN BY BILL GATES & PAUL ALLEN & MONTE DAVIDOFF » (ligne 4654).
Spécificités Techniques et Contraintes
Le code est conçu pour un processeur Intel 8080, comme l’indique le titre « BASIC MLB 8080 ». Les contraintes de mémoire et de performance de cette époque sont implicites dans la conception du code. On observe des techniques d’optimisation et une gestion minutieuse des registres et de la pile.
- Exemple : Le titre de chaque page mentionne « 8080 ».
- Exemple : Des commentaires font référence à la taille de la pile et aux registres (e.g., ligne 103 : « MAKE STACK HIGH ENOUGH STUFF EXACT »).
Fonctionnalités Avancées (pour l’époque)
Malgré les limitations matérielles, le BASIC implémenté semble offrir des fonctionnalités relativement avancées, notamment la gestion des nombres à virgule flottante avec une certaine précision et la manipulation de chaînes de caractères.
Citations Significatives
- Concernant l’objectif du code : « JBASIC TERMINAL POSITION HERE » (ligne 630).
- Décrivant la gestion des nombres : « I 2 MEANS RR, 1 MEANS RR, 2 MEANS RRA » (ligne 7).
- Concernant les auteurs : « BILL GATES WROTE THE RUNTIME STUFF » (ligne 90).
- Concernant le copyright : « COPYRIGHT (C) 1975 BY BILL GATES AND PAUL ALLEN » (ligne 88).
- Un message d’erreur typique : « UCL!DIVISION BY ZERO » (ligne 1396).
- Une indication de fonctionnalité : « PRINT NUMBERS USING THE ABOVE POINTER » (ligne 3398).
- Une référence à la version : « ULTAIR BASIC VERSION 3.0 » (ligne 4752).
Conclusion
L’analyse de cet extrait du code source Microsoft original révèle une implémentation détaillée et structurée d’un interpréteur BASIC pour le processeur Intel 8080. Le code témoigne des compétences des auteurs (Bill Gates, Paul Allen et Monte Davidoff) et des défis de la programmation à cette époque. On y observe une gestion rigoureuse de la mémoire, des algorithmes pour les opérations mathématiques et la manipulation de chaînes, ainsi qu’un mécanisme de gestion des erreurs. Les nombreux commentaires et la structure du code facilitent, dans une certaine mesure, la compréhension de son fonctionnement. Ce document offre un aperçu des fondations logicielles qui ont contribué à l’essor de la micro-informatique.
https://www.gatesnotes.com/home/home-page-topic/reader/microsoft-original-source-code