El cartucho Simons' Basic comercializado por Commodore
El Simons' Basic [ 1] es una extensión del Commodore BASIC 2.0 para el Commodore 64 . Escrito en 1983 por un joven programador inglés de 16 años, David Simons, fue comercializado por Commodore como cartucho de extensión. También se distribuyó oficiosamente en forma de archivo ejecutable (en disquete por ejemplo).
Características
El Commodore BASIC 2.0 recibe 114 nuevas instrucciones para aprovechar el potencial multimedia del Commodore 64 más simplemente. El conjunto de instrucciones extendido añade comandos que facilita el manejo de los sprites , los gráficos de alta resolución y multicolor, el chip SID para el sonido. Simons' Basic también propone instrucciones relacionadas con la programación estructurada . Además, se podía usar los prefijos $ para los números hexadecimales y % para los números binarios.
Las instrucciones
Gestión de sprites
MOB SET - definir los atributos de un sprite
MMOB - posición del sprite en la pantalla
RLOCMOB - mover un sprite de un lugar a otro
CMOB - definir los dos colores principales para los sprites multicolores
MOB OFF - desactivar un sprite
DETECT - inicializar la detección de colisión del sprite
CHECK - verificar si hay colisión de un sprite
@ - dibujar un sprite en una cuadrícula usando unas letras específicas del teclado
DESIGN - asignar espacio memoria para la creación de un sprite
Gestión de gráficos alta resolución
HIRES - inicializar un modo gráfico alta resolución
MULTI - inicializar un modo gráfico multicolor
NRM - volver en modo texto (baja resolución)
LOW COL - definir el color del punto/pixel
HI COL - re-inicializar el color del punto/pixel a su valor por defecto
PLOT - dibujar un punto/pixel
LINE - dibujar una línea
CIRCLE - dibujar un círculo
ARC - dibujar un arco
ANGL - dibujar un rayo de círculo
PAINT - rellenar una superficie
REC - dibujar un rectángulo vació
BLOCK - dibujar un rectángulo lleno
DRAW - dibujar una figura geométrica
ROT - determinar la rotación y el zum para la instrucción DRAW
CHAR - escribir un carácter en una pantalla de alta resolución
TEXT - escribir un texto en una pantalla de alta resolución
TEST - determinar si en una posición definida hay un punto/pixel dibujado o no
Otros comandos gráficos
COLOUR - atribuir el color de fondo y del borde de la pantalla
CSET - seleccionar un conjunto de caracteres (tipo de letra)
MEM - copiar el conjunto de caracteres (tipo de letra) de la ROM a la RAM
BCKGNDS - cambiar el color de fondo de un carácter
FLASH - hacer parpadear la pantalla
OFF - parar el parpadeo de la pantalla del comando FLASH
BFLASH - hacer parpadear el borde de la pantalla
FCHR - rellenar una parte de la pantalla con un carácter específico
FCOL - cambiar el color del carácter usado en el comando FCHR
FILL - una combinación de los comandos FCHR y FCOL
MOVE - copiar una parte/zona de la pantalla
INV - invertir una parte/zona de la pantalla
LEFT - mover la pantalla a la izquierda
RIGHT - mover la pantalla a la derecha
UP - mover la pantalla arriba
DOWN - mover la pantalla abajo
SCRSV - guardar una pantalla de texto en el disquete/casete
SCRLD - cargar una pantalla de texto desde el disquete/casete
GRAPHICS - devolver el valor a la dirección de base del VIC-II , a $D000
Gestión del sonido y del chip SID
MUSIC - escribir una música y sus efectos audios a partir de un lista de caracteres
PLAY - reproducir la música escrita con MUSIC
VOL - determinar el volumen principal
WAVE - definir la forma de onda para un canal definido (voz)
ENVELOPE - definir el ADSR para un canal definido (voz)
SOUND - devolver el valor a la dirección de base del SID , a $D400
Gestión del teclado
FETCH - definir el tipo y la cantidad de caracteres entrados por el teclado
INKEY - averiguar que tecla de función ha sido presionada
ON KEY - averiguar si una tecla en particular ha sido presionada y ejecutar un salto de programación si es cierto
DISABLE - desactivar el comando ON KEY
RESUME - reactivar el comando ON KEY
Gestión de periféricos de entrada
JOY - informar de la posición del joystick
POT - informar de la posición del paddle
PENX - informar de la posición horizontal del lápiz óptico
PENY - informar de la posición vertical del lápiz óptico
Gestión de errores
ON ERROR - definir una rutina de detección de un error
OUT - comando para salir de la rutina de detección de un error
NO ERROR - desactivar el comando ON ERROR y devolver la gestión de errores al BASIC
DIR - mostrar parte o todo el directorio de un disquete
DISK - enviar una instrucción de acceso a la disquetera
HRDCPY - imprimir una pantalla de texto
COPY - imprimir una pantalla de gráfico
Gestión de cadena de caracteres
INSERT - insertar una cadena de caracteres en otra
INST - similar a INSERT , pero sobrescribir en vez de insertar
PLACE - buscar una cadena de caracteres dentro de otra
DUP - copiar una cadena de caracteres "n" veces
Gestión de texto
AT - escribir un texto en una posición específica en la pantalla
CENTER - centrar un texto en su línea
USE - definir un formato de números
LIN - determinar el número de la línea del cursor
Instrucciones matemáticas
MOD - ejecutar una división y mostrar el resto
DIV - ejecutar una división y mostrar el cociente
FRAC - mostrar la parte fraccional de un número
EXOR - ejecutar un «o exclusivo» entre dos números
Ayuda a la programación
AUTO - generar automáticamente los números de las líneas de un programa BASIC
RENUMBER - volver a numerar los números de las líneas de un programa BASIC (pero no corrige los números de GOTO /GOSUB )
OLD - restaurar un programa BASIC accidentalmente borrado par la instrucción NEW
KEY - asignar una(s) instrucción(es) Simons' Basic macro a una tecla de función
DISPLAY - listar todas las teclas de función y sus macros definidas por la instrucción KEY
PAUSE - suspender la ejecución de un programa durante el tiempo especificado
CGOTO - equivalente al GOTO , pero acepta expresiones calculadas
RESET - mover el puntero del comando DATA a una línea específica
MERGE - unir un programa BASIC de un disquete/casete, con el programa BASIC en memoria
PAGE - mostrar el código del programa BASIC, página por página
OPTION - poner en evidencia las instrucciones específicas Simons' Basic cuando se usa LIST
DELAY - modificar la velocidad del desfile vertical del comando LIST
FIND - buscar una cadena de caracteres en un programa BASIC
TRACE - mostrar la línea del programa cuando este es ejecutado
RETRACE - continuar el TRACE donde el programa ha sido interrumpido
DUMP - mostrar todos los valores de variables, excepto las matrices de variables
COLD - reset del Commodore 64 , para volver a la página de inicio de Simons' Basic
Instrucciones de seguridad
DISAPA - indicar la(s) línea(s) del programa BASIC que queremos ocultar
SECURE - ocultar todas las líneas especificadas con DISAPA para que no aparezcan cuando se usa LIST
IF...ELSE...THEN - similar al IF /THEN del BASIC pero con la condición añadida ELSE (SI NO)
REPEAT...UNTIL - similar al FOR...NEXT pero en vez de repetir un número de veces, se usa una condición
RCOMP - ejecutar de nuevo la última condición IF...ELSE...THEN
LOOP...EXIT IF - ejecutar un bucle hasta que la condición EXIT IF sea cierta
END LOOP - si la condición es cierta, salir del bucle
PROC - inicio de la creación de una subrutina
END PROC - fin de la creación de una subrutina
CALL - saltar a la subrutina definida por PROC /END PROC (similar al GOTO pero con un nombre de subrutina)
EXEC - saltar a la subrutina definida por PROC /END PROC y volver (similar al GOSUB pero con un nombre de subrutina)
LOCAL - redefinir (temporalmente) una(s) variable(s) usada(s) en una subrutina
GLOBAL - devolver los valores de la(s) variable(s) previo al uso del comando LOCAL
Otras funcionalidades
$ y % son igualmente considerados como instrucciones, para un total de 114 nuevas instrucciones BASIC
Curiosidad
Las instrucciones GRAPHICS , SOUND y LIN no son descritas en el manual del Simons' Basic.
Referencias
↑ Simons' Basic User Manual (Published by Commodore)
Enlaces externos