Blog 5 min de lecture

La légende Bill Gates : 40 ans du Basic pour 6502

Share this article
La légende Bill Gates : 40 ans du Basic pour 6502

Revenons d'abord dans le passé pour découvrir ce que faisait Bill Gates au début de sa carrière. Voici un bref résumé tiré de Wikipédia :

Après avoir lu le numéro de janvier 1975 de Popular Electronics, qui présentait l'Altair 8800, Gates contacta Micro Instrumentation and Telemetry Systems (MITS), les créateurs du nouveau micro-ordinateur, pour les informer que lui et d'autres travaillaient sur un interpréteur BASIC pour cette plateforme. En réalité, Gates et Allen ne possédaient pas d'Altair et n'avaient pas écrit de code pour lui ; ils voulaient simplement jauger l'intérêt de MITS. Le président de MITS, Ed Roberts, accepta de les rencontrer pour une démonstration, et en quelques semaines, ils développèrent un émulateur d'Altair qui tournait sur un mini-ordinateur, puis l'interpréteur BASIC. La démonstration, organisée dans les bureaux de MITS à Albuquerque, fut un succès et aboutit à un accord avec MITS pour distribuer l'interpréteur sous le nom d'Altair BASIC. Paul Allen fut embauché par MITS, et Gates prit un congé de Harvard pour travailler avec Allen chez MITS à Albuquerque en novembre 1975. Ils nommèrent leur partenariat « Micro-Soft » et installèrent leur premier bureau à Albuquerque. En un an, le trait d'union fut abandonné, et le 26 novembre 1976, le nom commercial « Microsoft » fut enregistré auprès du bureau du secrétaire d'État du Nouveau-Mexique. Gates ne retourna jamais à Harvard pour terminer ses études.

Microsoft BASIC pour 6502 était basé sur Altair BASIC, que Bill Gates et Paul Allen avaient créé pour le MITS Altair 8800 (qui utilisait le CPU Intel 8080) en 1975, en l'écrivant dans un motel d'Albuquerque, au Nouveau-Mexique. La même année, MOS Technology créa le microprocesseur 6502 comme une alternative moins chère aux autres microprocesseurs de l'époque. Le 6502 allait finalement être utilisé dans de nombreux ordinateurs populaires, comme l'Apple I, l'Apple II, les systèmes Commodore VIC-20 et 64, ainsi que dans des consoles de jeu comme l'Atari 2600.

Pour les passionnés, voici l'une des machines qui utilisaient le microprocesseur 6502 et exécutaient Microsoft BASIC.

Commodore 2001 computer

Voici quelques caractéristiques :

OS : Commodore Basic 1.0. CPU : 6502 @ 1 MHz. RAM : 4 Ko (première version) puis 8 Ko VRAM : 1 Ko ROM : 14 Ko MODES TEXTE : 40 x 25. MODES GRAPHIQUES : aucun

Que peut-on faire avec 4 Ko de RAM, alors qu'aujourd'hui il nous faut au moins 4 Go ? Était-il possible d'écrire des logiciels avec seulement 4 Ko de RAM ?

Oui, c'était possible — et voici la preuve: le plus ancien morceau de code source publiquement disponible écrit par Bill Gates, en 1978.

Explorons quelques faits à propos de ce code. D'abord, générons un nuage de mots à partir des commentaires du code source pour voir quelle était la principale préoccupation des développeurs :

String, Pointer, Variable, Value et Space sont les mots les plus fréquents, ce qui montre que la gestion de la mémoire était une préoccupation majeure pour ce type de machine. Le code est optimisé pour tirer le meilleur parti de la RAM disponible. Autre observation intéressante : le mot « garbage » apparaît de nombreuses fois — le ramasse-miettes était très important pour optimiser l'utilisation de la mémoire.

Voici comment les chaînes sont gérées, d'après les commentaires du code source :

STRINGS
		IN THE VARIABLE TABLES STRINGS ARE STORED JUST LIKE
		NUMERIC VARIABLES. SIMPLE STRINGS HAVE THREE VALUE
		BYTES WHICH ARE INITIALIZED TO ALL ZEROS (WHICH
		REPRESENTS THE NULL STRING). THE ONLY DIFFERENCE
		IN HANDLING IS THAT WHEN "PTRGET" SEES A "$" AFTER THE
		NAME OF A VARIABLE, "PTRGET" SETS [VALTYP]
		TO NEGATIVE ONE AND TURNS
		ON THE MSB (MOST-SIGNIFIGANT-BIT) OF THE VALUE OF
		THE FIRST CHARACTER OF THE VARIABLE NAME.
		HAVING THIS BIT ON IN THE NAME OF THE VARIABLE ENSURES
		THAT THE SEARCH ROUTINE WILL NOT MATCH
		'A' WITH 'A$' OR 'A$' WITH 'A'. THE MEANING OF
		THE THREE VALUE BYTES ARE:
			LOW
				LENGTH OF THE STRING
				LOW 8 BITS
				HIGH 8 BITS  OF THE ADDRESS
					OF THE CHARACTERS IN THE
					STRING IF LENGTH.NE.0.
					MEANINGLESS OTHERWISE.
			HIGH
		THE VALUE OF A STRING VARIABLE (THESE 3 BYTES)
		IS CALLED THE STRING DESCRIPTOR TO DISTINGUISH
		IT FROM THE ACTUAL STRING DATA. WHENEVER A
		STRING CONSTANT IS ENCOUNTERED IN A FORMULA OR AS
		PART OF AN INPUT STRING, OR AS PART OF DATA, "STRLIT"
		IS CALLED, CAUSING A DESCRIPTOR TO BE BUILT FOR
		THE STRING. WHEN ASSIGNMENT IS MADE TO A STRING POINTING INTO
		"BUF" THE VALUE IS COPIED INTO STRING SPACE SINCE [BUF]
		IS ALWAYS CHANGING.

Et voici comment les erreurs sont traitées :

	ERROR MESSAGES
		WHEN AN ERROR CONDITION IS DETECTED,
		[ACCX] MUST BE SET UP TO INDICATE WHICH ERROR
		MESSAGE IS APPROPRIATE AND A BRANCH MUST BE MADE
		TO "ERROR". THE STACK WILL BE RESET AND ALL
		PROGRAM CONTEXT WILL BE LOST. VARIABLES
		VALUES AND THE ACTUAL PROGRAM REMAIN INTACT.
		ONLY THE VALUE OF [ACCX] IS IMPORTANT WHEN
		THE BRANCH IS MADE TO ERROR. [ACCX] IS USED AS AN
		INDEX INTO "ERRTAB" WHICH GIVES THE TWO
		CHARACTER ERROR MESSAGE THAT WILL BE PRINTED ON THE
		USER'S TERMINAL.

Ce qui est intéressant dans ce code source, c'est la clarté avec laquelle de nombreux aspects du programme sont expliqués — inutile de chercher ailleurs pour comprendre ce que fait le code.

Quelques faits sur la qualité du code :

  • Le nommage est facile à comprendre

En explorant le code source, vous ne trouverez pas de noms de variables tels que a, b ou x, contrairement à certains projets développés récemment. Les noms sont bien choisis et clairement documentés.

  • Le code est découpé en de nombreuses petites sous-routines

Le langage d'assemblage du 6502 est de très bas niveau ; pour rendre le code plus facile à comprendre et à maintenir, le principe « diviser pour régner » est appliqué : le code est découpé en de nombreuses petites sous-routines, ce qui les rend plus faciles à lire et à maintenir. Voici un exemple de petite sous-routine définie dans le code source :

Après avoir exploré le code, je pense que Bill Gates était un développeur brillant autant qu'un homme d'affaires talentueux. Il n'est pas surprenant qu'il soit devenu l'une des figures les plus influentes du monde informatique, aux côtés de Steve Jobs et de quelques autres légendes.

Share this article