Le Simons' BASIC est une extension du BASIC V2 de Commodore utilisé par le Commodore 64. Écrit en 1983 par un jeune programmeur anglais de 16 ans, David Simons, il a été commercialisé par Commodore sous forme de cartouche d'extension. Il a également été diffusé de façon non officielle sous forme de fichier exécutable.
114 instructions sont ajoutées au BASIC V2 de Commodore dans le but d'exploiter le potentiel multimédia du Commodore 64 de façon simplifiée. Le jeu d'instructions étendu ajoute des commandes pour gérer les sprites, les modes graphiques haute résolution, le SID pour le son. Le Simon's BASIC ajoute également des instructions permettant une approche de programmation structurée.
MOB SET
- définit les attributs d'un spriteMMOB
- position du sprite sur l'écranRLOCMOB
- déplace un sprite d'une position à une autreCMOB
- définit les deux couleurs principales pour des sprites multicouleursMOB OFF
- désactive un spriteDETECT
- initialise la détection de collision du spriteCHECK
- vérifie s'il y a collision d'un spriteHIRES
- initialise un mode graphique haute résolutionMULTI
- initialise un mode graphique multicouleursNRM
- retourne à l'affichage textuelLOW COL
- change la couleur du pixel de dessinHI COL
- réinitialise la couleur du pixel de dessin à sa couleur d'originePLOT
- dessine un pixelLINE
- dessine une ligneCIRCLE
- dessine un cercleARC
- dessine un arc de cercleANGL
- dessine un angle de cerclePAINT
- effectue une opération de remplissage de surfaceREC
- dessine un rectangleBLOCK
- dessine un rectangle pleinDRAW
- dessine un ensemble de lignesROT
- définit le facteur de zoom pour l'instruction DRAW
CHAR
- écrit un caractère sur un écran en haute résolutionTEXT
- écrit une chaîne de caractères sur un écran en haute résolutionTEST
- détermine si à un emplacement défini le pixel est dessiné ou nonCOLOUR
- définit la couleur de fond d'écran et de la bordure d'écranCSET
- sélectionne une police de caractèresMEM
- copie la police de caractères standard de la ROM en RAMBCKGNDS
- configure le mode étendu de la couleur de fondFLASH
- fait flasher l'écranOFF
- annule le flashage de l'écran provoqué par l'instruction FLASH
BFLASH
- fait flasher la bordure de l'écranFCHR
- rempli une zone d'écran avec un caractèreFCOL
- change la couleur des caractères dans une zone d'écranFILL
- une combinaison des instructions FCHR
et FCOL
MOVE
- copie une partie de l'écranINV
- affiche une partie de l'écran à l'enversLEFT
- déplace l'écran vers la gaucheRIGHT
- déplace l'écran vers la droiteUP
- déplace l'écran vers le hautDOWN
- déplace l'écran vers le basGRAPHICS
- variable réservée toujours égale à $D000 (l'adresse de base du VIC-II)MUSIC
- joue une série de notes contenue dans une variable de chaîne de caractèresPLAY
- détermine si le programme doit continuer ou non pendant l'exécution de l'instruction MUSIC
VOL
- définit le volume principalWAVE
- définit la forme d'onde pour une voixENVELOPE
- définit l'enveloppe ADSR d'une voixSOUND
- variable réservée, toujours égale à $D400 (l'adresse de base du SID)FETCH
- attend une saisie sur le clavier avec les restrictions définies par la commande FETCHINKEY
- teste si une touche de fonction a été saisieON KEY
- teste une touche particulière et exécute un saut si ouiDISABLE
- désactive la commande précédente ON KEY
RESUME
- réactive la commande précédente ON KEY
JOY
- informations en lecture de la position du joystickPOT
- informations en lecture du paddlePENX
- informations en lecture de la position horizontale du stylo optiquePENY
- informations en lecture de la position verticale du stylo optique@
- représente une ligne de graphique d'un sprite ou d'un caractère graphiqueDESIGN
- utilise les lignes @
pour définir un sprite ou un caractère graphiqueON ERROR
- défini une séquence de code lors d'une détection d'une condition d'erreurOUT
- fin d'une séquence de code de gestion d'erreurNO ERROR
- annule ON ERROR
et rend le contrôle des erreurs BASIC à l'interpréteurDIR
- affiche le répertoire d'une disquette sans effacer un éventuel programme BASIC stocké en mémoireDISK
- envoie une commande au lecteur de disquetteSCRSV
- sauvegarde un écran de texte sur disquetteSCRLD
- recharge un écran de texte depuis une disquetteHRDCPY
- imprime le contenu d'un écran texteCOPY
- imprime le contenu graphique d'un écranINSERT
- insère un champ texte à l'intérieur d'un autre champINST
- similaire à INSERT
, mais réécrit par-dessus au lieu d'insérerPLACE
- recherche d'un champ texte dans le contenu d'un autre champDUP
- duplique un champ de texte un nombre donné de foisAT
- affiche un champ texte aux coordonnées d'un écran texteCENTER
- centre un champ texte au milieu d'un écran texteUSE
- défini un format numérique d'un champ texteLIN
- retourne la position verticale du curseurMOD
- effectue une division et restitue le reste de la division entièreDIV
- effectue une division et restitue le quotient de la division entièreFRAC
- restitue la partie fractionnelle d'un nombreEXOR
- effectue une opération logique OR exclusiveAUTO
- génère automatiquement des numéros de lignes lors de la saisie d'un programme BASICRENUMBER
- renumérote les lignes d'un programme BASIC (mais ne corrige pas les redirections GOTO
/GOSUB
)OLD
- restaure un programme BASIC accidentellement effacé par l'instruction NEW
KEY
- assigne un champ texte en tant que macro à une touche de fonctionDISPLAY
- affiche toutes les touches de fonctions macroMERGE
- fusionne un programme BASIC de la disquette à celui actuellement en mémoirePAGE
- affiche un programme BASIC page par pageOPTION
- affiche en surbrillance les instructions spécifiques Simons' BASIC lors de l'instruction LIST
DELAY
- modifie la vitesse d'affichage du scroll lors d'une commande LIST
FIND
- recherche un champ texte dans un programme BASICTRACE
- affiche la ligne de programme actuellement en cours lorsqu'un programme est exécutéRETRACE
- affiche le résultat d'un traceDUMP
- affiche toutes les valeurs des variables excepté les tableaux de variablesCOLD
- reset à froid du C64DISAPA
- cache une ligne de programme BASICSECURE
- cache toutes les lignes marqués avec DISAPA
afin qu'elles n'apparaissent pas lors d'un affichage avec LIST
ELSE
- permet un choix alternatif lors d'une condition IF
/THEN
REPEAT
- démarre une boucle de type REPEAT
/UNTIL
UNTIL
- défini la condition de boucle à REPEAT
/UNTIL
et en fixe la finRCOMP
- reprend la dernière condition IF
/THEN
LOOP
- défini le début d'une boucle qui va jusqu'à ce que la condition EXIT IF
soit vraieEXIT IF
- si la condition est vrai, quitte la structure LOOP
/END LOOP
END LOOP
- défini la fin de la boucle jusqu'à ce que la condition EXIT IF
soit vraiPROC
- défini le début d'une procédure nomméeEND PROC
- défini la fin d'une procédure nomméeCALL
- saute à une procédure nommée défini par PROC
/END PROC
et y resteEXEC
- saute à une procédure nommée défini par PROC
/END PROC
et revient à la suite du code après exécutionLOCAL
- redéfini une variable utilisée dans une procédureGLOBAL
- inverse l'effet de la précédente commande LOCAL
CGOTO
- équivalent du GOTO
, mais accepte des expressions issues de calculsRESET
- déplace le pointeur d'exécution DATA
à une ligne définiePAUSE
- suspend l'exécution du programme pour un temps spécifié en secondes$
and %
sont également considérés comme instructions pour un total de 114 instructions supplémentaires.