Le noyau est basé sur le BASIC 6502 de Microsoft et, de ce fait, partage de nombreuses caractéristiques avec d'autres BASIC 6502 de l'époque, tels que l'Applesoft BASIC . Commodore a acquis une licence BASIC auprès de Microsoft en 1977, selon le principe « paiement unique, sans redevances », après que Jack Tramiel eut refusé l'offre de Bill Gates de du PET était très similaire à l'implémentation originale de Microsoft, à quelques modifications près. Le BASIC 2.0 sur C64 était également similaire et se retrouvait aussi sur les C128 (en mode C64) et d'autres modèles. Les PET ultérieurs intégraient le BASIC 4.0, similaire à l'original mais doté de commandes supplémentaires pour la gestion des disquettes .
BASIC 3.5 fut la première version à véritablement innover, en ajoutant de nombreuses commandes pour la gestion des graphismes et du son, ainsi qu'un mini- assembleur intégré au moniteur de langage machine des C16 et Plus/4 . BASIC 7.0 était inclus avec le Commodore 128 et reprenait les commandes de programmation structurée de BASIC 3.5 du Plus/4, ainsi qu'un éditeur de sprites et des mots-clés conçus spécifiquement pour tirer parti des nouvelles capacités de la machine. La dernière version, BASIC 10.0, faisait partie du Commodore 65, resté inédit .
Commodore 128 (with V7.0) that a Microsoft copyright notice was displayed. However, Microsoft had built an easter egg into their software to prove its provenance: the commandWAIT 6502,1 on a PET with the version 2 or "upgrade" BASIC will show MICROSOFT! at the top of the screen. (The easter egg was well-obfuscated—the message did not show up in any disassembly of the interpreter.)The popular Commodore 64 came with BASIC v2.0 in ROM even though the computer was released after the PET/CBM series that had version 4.0 because the 64 was intended as a home computer, while the PET/CBM series were targeted at business and educational use where their built-in programming language was presumed to be more heavily used. This saved manufacturing costs, as the V2 fit into smaller ROMs.
Technical details
EDIT command, or a "copy cursor" that truncated the line at the cursor's position.Il permettait également d'enregistrer des fichiers nommés sur n'importe quel périphérique, y compris la cassette – un support de stockage populaire à l'époque du PET et qui resta en usage tout au long de la vie des Commodore 8 bits comme solution de stockage de masse économique. La plupart des systèmes ne prenaient en charge que les noms de fichiers sur disquette , ce qui compliquait l'enregistrement de plusieurs fichiers sur d'autres périphériques. L'utilisateur de ces systèmes devait alors se fier au compteur affiché par l'enregistreur pour localiser le fichier, une méthode imprécise et sujette à erreurs. Avec le PET (et le BASIC 2.0), il était possible de demander des fichiers sur cassette par leur nom. Le périphérique recherchait le fichier en lisant les données séquentiellement, ignorant les noms de fichiers non correspondants. Le système de fichiers bénéficiait également d'une structure d'enregistrement performante , permettant le chargement et l'enregistrement de fichiers. Les données des cassettes Commodore étaient enregistrées numériquement, contrairement aux méthodes analogiques, moins coûteuses (et moins fiables), utilisées par d'autres fabricants. C'est pourquoi le Datasette , un lecteur spécialisé , était nécessaire au lieu d'un magnétophone standard. Des adaptateurs utilisant un convertisseur analogique-numérique permettaient d'utiliser un enregistreur standard, mais leur prix était à peine inférieur à celui du Datasette.
La commande LOAD peut être utilisée avec le paramètre optionnel ,1 , qui charge un programme à l'adresse mémoire contenue dans les deux premiers octets du fichier (ces octets sont ignorés et ne sont pas conservés en mémoire). Si le paramètre ,1 n'est pas utilisé, le programme est chargé au début de la zone de programme BASIC, qui varie considérablement d'une machine à l'autre. Certaines variantes de Commodore BASIC proposaient des commandes fonctionnant comme leurs équivalents dans Applesoft BASIC , permettant de charger ou d'enregistrer des bitmaps à partir d'emplacements mémoire spécifiés.BSAVE
Le PET ne prend pas en charge les programmes relogeables et la commande LOAD charge toujours le programme aux deux premiers octets de son contenu. Cela posait problème lors du chargement de programmes BASIC enregistrés sur d'autres machines Commodore, car ils se chargeaient à une adresse supérieure à celle attendue par le BASIC du PET. Des solutions de contournement existaient pour « déplacer » les programmes à l'emplacement correct. Si un programme était enregistré sur une machine CBM-II , le seul moyen de le charger sur un PET était de modifier les deux premiers octets avec un éditeur de secteur de disque, car la zone de programme BASIC de la série CBM-II se situait à l'adresse $0. Cette modification entraînait un blocage du PET lors d'une tentative de chargement à la page zéro.
Les mots-clés BASIC de Commodore pouvaient être abrégés en appuyant d'abord sur une touche sans la touche Maj, puis sur la touche Maj correspondant à la lettre suivante. Cette action activait le bit de poids fort , ce qui interrompait la lecture de l'instruction par l'interpréteur et l'amenait à consulter une table de correspondance. Ainsi, l'instruction jusqu'au bit de poids fort activé était acceptée comme substitut à la saisie de la commande complète. Cependant, comme tous les mots-clés BASIC étaient stockés en mémoire sous forme de jetons d'un octet, il s'agissait davantage d'une commodité pour la saisie des instructions que d'une véritable optimisation.
Dans le jeu de caractères par défaut en majuscules uniquement, les caractères décalés apparaissent comme un symbole graphique ; par exemple, la commande ` GOTOm` pouvait être abrégée G{Shift-O}(ce qui donnait à l'écran : `m`). La plupart de ces commandes comportaient deux lettres, mais certaines étaient plus longues. Dans ce cas, une ambiguïté survenait, nécessitant l'ajout de lettres supplémentaires, comme `(m )` pour `m` . Certaines commandes n'avaient pas de forme abrégée, soit par souci de concision, soit en raison d'une ambiguïté avec d'autres commandes. Par exemple, la commande ` m` n'avait pas d'abréviation car son orthographe entrait en conflit avec le mot-clé `m`, situé plus haut dans la table de correspondance des mots-clés . Cette commande, très utilisée, possédait un seul raccourci, comme c'était courant dans la plupart des dialectes Microsoft BASIC. L'abréviation des commandes par décalage est une spécificité du Commodore BASIC.GΓGO{Shift-S}GO♥GOSUBINPUTINPUT#PRINT?
Cette méthode de tokenisation présentait un dysfonctionnement : si l’on insérait une REMinstruction BASIC permettant d’ajouter un commentaire au code, suivie d’une virgule {Shift-L}, lors de la consultation du listing du programme, l’interpréteur BASIC interrompait immédiatement l’affichage, affichait un message d’ ?SYNTAX ERRORerreur et revenait à l’ READY.invite de commande. Ce dysfonctionnement était exploité avec succès par les programmeurs souhaitant protéger leur travail, bien qu’il fût relativement facile à contourner.
En abrégeant les mots-clés, il était possible de faire tenir plus de code sur une seule ligne de programme (pouvant occuper deux lignes d'écran sur les écrans 40 colonnes, comme le C64 ou le PET, ou quatre lignes sur l'écran 22 colonnes du VIC-20). Cela permettait de réaliser une légère économie d'espace mémoire, sans toutefois augmenter significativement la taille des lignes de programme supplémentaires. Toutes les commandes BASIC étaient tokenisées et occupaient 1 octet (ou deux, pour certaines commandes BASIC 7 ou BASIC 10) en mémoire, quelle que soit leur saisie. Ces lignes trop longues étaient fastidieuses à éditer. La LISTcommande affichait l'intégralité du mot-clé, étendant ainsi la ligne de programme au-delà des 2 ou 4 lignes d'écran pouvant être saisies en mémoire.
Performance
À l'instar de l' interpréteur Microsoft BASIC d'origine , le Commodore BASIC est plus lent que le code machine natif , en raison de la surcharge liée à l'interprétation à l'exécution. Des tests ont montré que la copie de 16 kilo-octets de la ROM vers la RAM prend moins d'une seconde en code machine, contre plus d'une minute en BASIC. Pour accélérer l'exécution, les programmeurs ont eu recours à diverses techniques. L'une d'elles consistait à stocker les valeurs à virgule flottante fréquemment utilisées dans des variables plutôt que d'utiliser des valeurs littérales, car l'interprétation d'un nom de variable était plus rapide que celle d'un nombre littéral. Le type à virgule flottante étant le type par défaut de toutes les commandes, il est plus rapide d'utiliser des nombres à virgule flottante comme arguments que des entiers. Lorsque la vitesse était primordiale, certains programmeurs convertissaient des sections de programmes BASIC en langage assembleur 6502 ou 6510. Ces sections étaient chargées séparément à partir d'un fichier ou insérées en mémoire par des instructions DATA à la fin du programme BASIC, puis exécutées depuis BASIC à l'aide de la commande SYS , soit en mode direct , soit directement depuis le programme . Lorsque la vitesse d'exécution du langage machine était trop élevée, comme pour un jeu ou lors de l'attente d'une entrée utilisateur, les programmeurs pouvaient interroger en lisant des emplacements mémoire sélectionnés (tels que $C6 pour le 64, ou $D0 pour le 128, désignant la taille de la file d'attente du clavier) pour retarder ou arrêter l'exécution.:GOTO160de liste simplement chaînée, avec un pointeur (contenant l'adresse du début de la ligne de programme suivante), un numéro de ligne, puis le code tokenisé de la ligne. Pendant la saisie d'un programme, BASIC réorganisait constamment les lignes de programme en mémoire afin que les numéros de ligne et les pointeurs soient tous en ordre croissant. Cependant, une fois le programme saisi, la modification manuelle des numéros de ligne et des pointeurs à l'aide des commandes POKE permettait une exécution hors séquence, voire d'attribuer le même numéro de ligne à chaque ligne. À l'époque où BASIC était utilisé commercialement, il s'agissait d'une technique de protection logicielle visant à dissuader toute modification non autorisée du programme.
Les numéros de ligne peuvent aller de 0 à 65 520 et occupent cinq octets, quel que soit le nombre de chiffres qui les composent. Toutefois, plus le numéro de ligne est court, plus l’exécution est rapide. Placer plusieurs instructions sur une même ligne permet d’économiser de la mémoire et d’accélérer l’exécution.
en complément à deux )qu’Applesoft BASIC .
Le format numérique natif du Commodore BASIC, comme celui de son ancêtre MS BASIC , était à virgule flottante . La plupart des implémentations BASIC contemporaines utilisaient un octet pour l'exposant et trois octets pour la mantisse . La précision d'un nombre à virgule flottante avec une mantisse de trois octets n'est que d'environ 6,5 chiffres décimaux, et les erreurs d'arrondi sont fréquentes. Les implémentations 6502 de Microsoft BASIC utilisaient l'arithmétique à virgule flottante 40 bits, ce qui signifie que les variables nécessitaient cinq octets pour être stockées (quatre octets pour la mantisse et un octet pour l'exposant), contrairement à la virgule flottante 32 bits du BASIC-80.
Alors que les implémentations 8080/Z80 de Microsoft BASIC prenaient en charge les variables entières et à double précision, les implémentations 6502 ne prenaient en charge que les nombres à virgule flottante.
Bien que Commodore BASIC prenne en charge les variables entières signées (indiquées par le signe pourcentage) comprises entre -32 768 et 32 767, en pratique, elles ne sont utilisées que pour les tableaux et permettent d'économiser de la mémoire en limitant la taille des éléments à deux octets (un tableau de 2 000 éléments occupera 10 000 octets s'il est déclaré comme un tableau de nombres à virgule flottante, contre seulement 4 000 octets s'il est déclaré comme un tableau d'entiers). Déclarer une variable comme entière force BASIC à la reconvertir en nombre à virgule flottante, ce qui ralentit l'exécution du programme et gaspille de la mémoire, chaque signe pourcentage nécessitant un octet supplémentaire (ceci s'appliquant également aux tableaux d'entiers, il est conseillé de les éviter, sauf pour les très grands tableaux qui dépasseraient la mémoire disponible s'ils étaient stockés en nombres à virgule flottante). De plus, il est impossible d' accéder à des adresses mémoire supérieures à 32 767 avec une adresse définie comme un entier signé.fonction USR pour appeler des routines en langage machine. Elle charge automatiquement les registres du processeur avec les valeurs de $30C à $30F (C64, valeurs variables sur d'autres machines). Ces registres peuvent servir à transmettre des données à des routines en langage machine ou à appeler des fonctions du noyau depuis BASIC (par exemple, effacer l'écran).Microsoft BASIC , si un tableau n'est pas déclaré avec une instruction DIM , il est automatiquement initialisé à dix éléments (en pratique onze, car les éléments d'un tableau sont numérotés à partir de 0). Les tableaux plus grands doivent être déclarés, sinon BASIC affichera une erreur à l'exécution du programme. Il est impossible de redimensionner un tableau en cours d'exécution, sauf si toutes les variables sont effacées via une instruction CLR. Les tableaux numériques sont automatiquement initialisés à zéro lors de leur création ; un bref délai peut survenir lors de l'exécution du programme si le dimensionnement d'un grand tableau est effectué.
De nombreuses extensions BASIC ont été développées pour le Commodore 64, en raison des capacités relativement limitées de son BASIC 2.0 natif. Parmi les plus populaires figurait DOS Wedge , inclus sur la disquette de test/démo Commodore 1541. Cette extension de 1 Ko ajoutait plusieurs commandes liées au disque, notamment la possibilité de lire un répertoire disque sans interrompre le programme en mémoire. Ses fonctionnalités ont ensuite été intégrées à diverses extensions tierces, comme la cartouche Epyx FastLoad . D'autres extensions BASIC ajoutaient des mots-clés supplémentaires pour faciliter la programmation de sprites, de sons et de graphismes haute résolution, à l'instar de Simons' BASIC (1983) et Vision BASIC (2022).
Bien que l'absence de fonctionnalités sonores ou graphiques dans BASIC 2.0 ait été frustrante pour de nombreux utilisateurs, certains critiques ont fait valoir que cela était finalement bénéfique car cela obligeait l'utilisateur à apprendre le langage machine.,8Loadstar , un magazine sur disquette pour le C64 , était un lieu de rencontre pour les programmeurs amateurs, qui partageaient des collections de proto-commandes pour BASIC, appelées avec la Microsoft BASIC , presque tous les BASIC pour ordinateurs personnels de l'époque souffraient de défauts similaires. Chaque ligne d'un programme Microsoft BASIC se voyait attribuer un numéro par le programmeur. Il était courant d'incrémenter ces numéros (5, 10 ou 100) pour faciliter l'insertion de lignes lors de l'édition ou du débogage, mais une mauvaise planification impliquait souvent que l'insertion de sections importantes nécessitait une restructuration complète du code. Une technique courante consistait à démarrer un programme à un numéro de ligne bas avec une table de branchement ON...GOSUB , le corps du programme étant structuré en sections commençant à un numéro de ligne désigné, par exemple 1000, 2000, etc. Si une section importante devait être ajoutée, il suffisait de lui attribuer le prochain numéro de ligne majeur disponible et de l'insérer dans la table de branchement.
De plus, toutes les variables sont traitées comme des variables globales. Il est difficile de créer des boucles clairement définies au-delà de la structure FOR...NEXT, ce qui oblige souvent le programmeur à utiliser la commande GOTO (ce problème a été corrigé ultérieurement dans BASIC 3.5 avec l'ajout des commandes DO, LOOP, WHILE, UNTIL et EXIT ). Il était souvent nécessaire de créer des variables d'état pour effectuer certaines tâches.ordinateurs personnels , les machines Commodore démarraient directement dans l'interpréteur BASIC. Les commandes de fichiers et de programmation de BASIC pouvaient être saisies en mode direct pour charger et exécuter des logiciels. Si l'exécution d'un programme était interrompue par la touche RUN/STOP, les valeurs des variables étaient conservées en RAM et pouvaient être affichées pour le débogage. Le Commodore 128 consacrait même sa seconde banque de 64 Ko au stockage des variables, permettant ainsi aux valeurs de persister jusqu'à l'émission d'une commande RUN NEWou STOP. Ceci, combiné à l' celle d'un REPL ; les programmeurs pouvaient insérer et modifier des lignes de programme à n'importe quel emplacement de l'écran, construisant ainsi le programme de manière interactive. Cela contraste avec les systèmes d'exploitation professionnels de l'époque, tels que CP/M ou MS-DOS , qui démarraient généralement dans une interface en ligne de commande . Si un langage de programmation était nécessaire sur ces plateformes, il devait être chargé séparément.RUN
DLOADAlors que certaines versions de Commodore BASIC incluaient des commandes spécifiques aux disques DSAVE, la version intégrée au Commodore 64 en était dépourvue. L'utilisateur devait donc spécifier le numéro du lecteur de disquettes (généralement 8 ou 9) à la LOADcommande standard, qui utilisait par défaut le lecteur de bande. Autre lacune du BASIC 2.0 du Commodore 64 : l'absence d'une DIRECTORYcommande permettant d'afficher le contenu d'une disquette sans vider la mémoire principale. Sur le 64, l'affichage des fichiers sur une disquette était implémenté en chargeant un « programme » qui, une fois affiché, présentait le répertoire comme un pseudo-programme BASIC, la taille des blocs du fichier correspondant au numéro de ligne. Ceci avait pour effet d'écraser le programme en cours d'exécution. Des extensions comme DOS Wedge contournaient ce problème en affichant directement le contenu du répertoire à l'écran.
Exemple de code
Versions et fonctionnalités
Liste des versions de CBM BASIC par ordre chronologique, avec les fonctionnalités ajoutées successivement :
Versions publiées
- V1.0 : PET 2001 avec clavier chiclet et Datassette intégrée (PET d'origine)
- tableaux limités à 256 éléments
- La commande PEEK est explicitement désactivée pour les emplacements ROM BASIC supérieurs à $C000.
- V2.0 (première version) : PET 2001 avec clavier à course complète et ROM mises à jour
- ajout de la prise en charge de la norme IEEE-488
- a amélioré la collecte des ordures
- correction d'un bug de tableau
- Easter egg – l'entrée affiche MICROSOFT! un nombre aléatoire de foisWAIT6502, [number]Opérations disque : DLOAD, DSAVE, COPY, SCRATCH, etc. (15 au total)VIC-20 ; C64
- V2.2 C64GS (1990)
- V4+ : série CBM-II (alias gamme B, P)
- Gestion de la mémoire : BANQUEAutres opérations disque : BLOAD , BSAVE , DCLEAR
- impression formatée : IMPRIMER À L'AIDE DE,PUDEFC16/116 , Plus/4
- commandes sonores et graphiques
- Entrée du joystick : JOYConversion décimal ↔ hexadécimal : DEC(),HEX$()débogage (traçage) : TRON , TROFF
- Commande d'entrée MLM : MONITORC128
- davantage de commandes sonores et graphiques, y compris la gestion des sprites
- Éditeur de sprites intégré : SPRDEFEntrée pour la palette et le stylo optique : POT, PENfonction exclusive ou : XORLe système de commutation de banque du 128 permettait de stocker le code du programme séparément des variables. Les valeurs des variables étaient conservées d'une exécution à l'autre si le programme était lancé avec la commande GOTO.
- Autres opérations disque : BOOT, DVERIFYÉcran LCD Commodore (prototype non commercialisé). Presque identique à la V7.0, avec les différences suivantes :
- Commodore 65 (prototype non commercialisé)
- Commandes graphiques/vidéo : PALETTE, GENLOCKEntrée souris : MOUSE,RMOUSESuper Expander (VIC-20 ; livré sur cartouche ROM ) (Commodore)
- Super Expander 64 (C64 ; cartouche) (Commodore)
- BASIC de Simons (C64 ; cartouche) (Commodore)
- Graphiques BASIC (C64 ; disquette) ( Hesware )
- BASIC 8 (C128 ; disquette et puce ROM interne en option) ( Walrusoft )
- Vision BASIC (C64 ; disquette) (Dennis Osborn)
- JiffyDOS (Micro-conceptions créatives)
- Commodore 65 (prototype non commercialisé)
Plus d articles de Worldlex Wiki
Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.
Explorer l index