SERIE COMPARANDO BASICS (III) ALTAIR BASIC INTRODUCCION Si el Basic de Darmouth fue el primer Basic para sistemas con terminales en línea, el Basic Altair fue el primero para un 8 bits, y encima el primer Basic de Microsoft (entonces llamado Micro -Soft.) Asi que, ¿que mejor forma de continuar esta serie de comparativas, si no es con esta versión de BASIC? Como siempre, divido mi texto en varias partes, una dedicada al Altair, que es y cual fue su historia. Una segunda dedicada a su BASIC y una tercera dedicada a compararla con el Basic Sinclair. PARTE I Hablemos del Altair " Al poco de introducir Intel su chip 8080, una peque~a firma en Albuquerque, Nuevo Mexico, de nombre MITS (Micro Instrumentation and Telemetry Systems) anuncio un computador en kit llamado Altair. MITS tuvo exito donde otras, firmas mejor establecidas fallaron, y fue su maquina la que inauguro la era de las computadora personales. MITS empezo su carrera en 1971 al introducir un kit de calculadora electronica H. Edward Roberts, ex oficial de la fuerza aerea de los EEUU, nacido en Florida y jefe de MITS, decidio dise~ar un computador peque~o pero funcional basado en el Intel 8080. Su hija sugirio el nombre de la nueva maquina en base a la estrella Altair. En enero de 1975, una foto del Altair aparece en la portada del magazin Popular Electronics. El titulo era " el primr kit de Minicomputador del mundo en rivalizar con modelos comerciales." Segun el magazin, se venderia el kit a $395, y ensamblada a $498. Roberts penso que venderia unos 200 Altairs pero en tres meses recibio 4,000 pedidos. Muchos compradores encontraron el kit dificil de ensamblar, a menos que tuviesen experiencia con electronica digital y un local con un sofisticado equipo de pruebas. Incluso si se ensamblaba correctamente el kit, era dificil lograr que el Altair operase optimamente. " NdT: traducido del original en ingles publicado en la pag. web: https://americanhistory.si.edu/collections/search/object/nmah_334396 con el titulo "Altair 8800 Microcomputer" Muy bien ahora que ya sabemos que era el Altair y quien lo construyo, pasamos a ver ahora todo lo que se pueda respecto a su BASIC. PARTE II 1. El Basic del Altair El Altair 8800 usaba el Intel 8080 como CPU. Era un "armelo ud. mismo y luego a ver que uso encuentra que pueda darle". Era solamente una caja de metal en cuyo frente habian varias palanquitas y un monton de lucecitas que una vez encendiso el aparato se prendian y apagaban. Aparte de eso... que mas podia hacer con el Altair un usuario? Podria decirse que no fue hasta la aparicion de un lenguaje de programacion como era el BASIC que el Altair se volvio en un autentico computador programable al gusto del usuario. Y la historia ahora es... " La cosa empieza cuando Bill Gates y Paul Allen que entonces crearon Micro-Soft leyeron acerca del Altair en Popular Electronics, ambos comprendieron que el precio de las computadoras bajaria al punto que vender software para dichas maquinas seria un negocio muy rentable. Asi que contactaron a Ed Roberts fundador del MITS, y le dijeron que habian creado un interprete, y le preguntarone si queria ver una demonstracion. (Resulta que no tenian nada hecho,) y Roberts acepto verlos para dicha demonstracion en Marzo de 1975. Ellos lograron terminar su interprete (usando un emluador en una PDP), incluyendo su propio sistema de E/S y editor de lineas, el cual cabia en solo cuatro kilobytes de memoria (al cual se le llamo entonces Basic MITS 4k), dejando espacio suficiente para el prog. interpretado. Paul Allen volo con ella a Albuquerque. Resulta que Allen termino el bootstrap (programa de arranque) antes de que el vuelo aterrizara (y el resto es historia.) " NdT - Traducido, extraido y adaptado de la pag. web: Altair BASIC – Microsoft’s first software product made available via GitHub. - por Julian Horsey Muy bien, ya sabemos como y cuando nacio lo que se considera el primer Basic para micro ordenadores de 8 bits en adelante. Ahora paso a... 2. Los comandos y funciones del Altair Al Basic original de 4k le siguio una expansion, el BASIC MITS 8K, y eventualmente, el BASIC Extendido de Disco Altair (para ser usado con unidades de disco de la misma MITS) A continuacion una lista de las palabras reservadas en BASIC ALTAIR: en la Version 4K ABS CLEAR DATA DIM END FOR GOSUB GOTO IF INPUT INT LET LIST NEW NEXT PRINT READ REM RESTORE RETURN RND RUN SGN SIN SQR STEP STOP TAB( THEN TO USR La version 8K incluye todas las antes listadas, y ademas tiene ASC AND ATN CHR$ CLOAD CONT COS CSAVE DEF EXP FN FRE INP LEFT$ LEN LOG MID$ NULL ON OR NOT OUT PEEK POKE POS RIGHT$ SPC( STR$ TAN VAL WAIT Nota: en la version de BASIC 4K, los nombres de variable son de solo una letra o una letra seguida de un numero. Por lo tanto, no hay ninguna posibilidad de conflicto con las palabras reservadas. Otro detalle: en 4k, si se reponde con RETURN a un INPUT se genera un error. A continuacion un breve resumen de lo que hace cada instruccion: COMANDOS CLEAR {n} borra vaiables pero en 8k fija espacio n para las cadenas LIST {n} lista el programa con linea inicial n opcional, ^C lo detiene NULL n solo 8k, fija n caracteres nulos a imprimir de 0 a 71 RUN {n} ejecuta programa, sin parametros en 4k, acepta linea n en 8k NEW eli8mina el programa enteros con todas sus variables CONT continua programa tras ser detenido por ^C o sentencia STOP CLOAD p carga programa p de la cinta de casete CSAVE p salva programa en curso bajo el nombre p OPERADORES = asignacion LET o comparacion igual IF - signo negativo o resta + suma * multiplicacion / division ^ exponenciacion - solo 8k <> distinto > mayor < menor <= menor igual =< >= mayor igual => AND conjuncion y - solo 8k logico y binario OR " o - " 8k " y " NOT negacion - " 8k " y " SENTENCIAS DATA solo numeros en 4k y alfanumericos en 8k DEF define funcion de usuario FN solo 8k DIM solo numericos en 4k y alfanumericos en 8k END termina un programa y es opcional si es la ultima linea FOR genera bucle con la sintaxis FOR v=inic TO final {STEP paso} GOTO salta a la sentencia especificada por su numero de linea GOSUB va a la primera sentencia de una subrutina por su num. de linea IF ... GOTO salto condicional solo 8K IF THEN ejecuta sentencias o salta a linea si la condicion es cierta INPUT acepta formulas como rpta. en 4k y solo constantes en 8k LET asigna valor a una variable siendo LET opcional NEXT marca el final de un bucle FOR ON ... GOTO/GOSUB solo 8k, salta a lineas o subrutinas de la lista OUT i,j solo 8k, envia byte J al puerto I POKE i,j solo 8k, deposita byte J en la pos. de memoria I PRINT imprime informacion de una lista hacia una terminal elegida READ lee la informacion almacenada en lineas DATA REM permite poner comentarios al listado RESTORE permite releer sentencias DATA RETURN sale de la subrutina y vuelve adonde fue invocada con GOSUB STOP interrumpe la ejecucion de un programa y vuelve al modo comando WAIT i,j{,k} solo 8k, lee puerto I, XOR a K y hace AND al resultado J FUNCIONES Solo en 4k: ABS(x) valor absoluto de x, x si x>=0, -x en caso contrario INT(x) da el mayor entero menor igual a x RND(x) genera valor aleatorio entre 0 y 1 SGN(x) 1 si x>0, 0 si x=0, -1 si x<0 SIN(x) seno de x SQR(x) raiz cuadrada de x TAB(i) genera espacios hasta la columna x especificada en el terminal USR(i) llama subrutina en c.m. en i Solo en 8k: ATN(x) arcotangente de x COS(x) coseno de x EXP(x)constante E(2.71828) elevado a la x FRE(x{$}) da los bytes no usados por el Basic INP(i) lee status (byte) de un puerto i LOG(x) logaritmo natural en base E de x PEEK(i) retorna contenido de pos. de mem. i POS(i) da la pos. actual del cabezal de impresion o cursor en pantalla SPC(i) imprime i espacios en blanco TAN(x) tangente de x ASC(x$) valor numerico ASCII del primer caracter de x$ CHR$(i) convierte valor ASCII i en su caracter correspondiente LEFT$(x$,i) da los i caracteres a la izquierda de la cadena x$ LEN(x$) largo o longitud de x$ MID$(x$,i{,j}) extrae j caracteres a partir de i dentro de x$ RIGHT$(x$,i) da los i caracteres a la derecha de la cadena x$ STR$(x$) convierte en cadena un valor numerico x VAL(x$) extrae el numero existente dentro de x$ BASIC EXTENDIDO DELETE y{-x} borra solo y, de y a x, del comienzo a x si se omite y LIST y{-x} opera igual que DELETE ERASE se usa para borrar matrices DIMensionadas SWAP i{$},j{$} intercambia los valores de dos variables TRON activa el modo de rastreo de ejecucion de un programa TROFF desactiva el rastreo ELSE ahora es IF (si x) THEN (entonces v) ELSE (de lo contrario z) DEF ahora puede ser de cualqueir tipo y tomar n argumentos EDIT permite editar lineas mediante subcomandos de edicion USING asociado a PRINT permite formatear valores numericos DEFINT designa como enteras un rango de variables DEFSTR designa como cadena un rango de variables DEFDBL designa como doble presicion un rango de variables DEFSNG designa como simple presicion un rango de variables CINT(x) convierte x a entero CSNG(x) convierte x a simple presicion CDBL(x) convierte x a doble presicion \ division entera MOD devuelve valor segun la formula: a MOD b = a-(b*(a/b)) PARTE III 1. El Basic en accion Arrancando el sistema Una vez encendido se hace Click a la palanquita subprograma para que se enfoque en el teclado. En pantalla apareceran los sigtes. mensajes: Al "MEMORY SIZE?" (tama~o de la memoria), pulsar RETURN Ante "TERMINAL WIDTH?" (ancho del terminal), tambien RETURN. A "WANT SIN?" (quiere sin), tIpear 'Y' seguido de RETURN Tsas esto aparecera un OK en pantalla, con la nota de que tiene 727 bytes libres para usar. Programa de ejemplo Conociendo ya los comandos y funciones del Basic, podemos ya a modo de prueba tipear un programa para dibujar una onda seno: 1 P=3.141592 4 C=62 5 R=18 6 T=0.055 10 FOR Y=1 TO -1 STEP -2/R 20 FOR X=0 TO 2*P STEP 2*P/C 30 IF ABS(SIN(X)-Y) < T THEN GOTO 35 31 PRINT " ";:GOTO 40 35 PRINT "*"; 40 NEXT X 45 PRINT "" 50 NEXT Y Y eso es todo. RUN y a ver el resultado. Para editar una linea Tipeamos por ejemplo: EDIT 5 ESPACIO para mover el cursor hacia adelante I para insertar caracteres desde el cursor y ESCape para finalizar X como I pero inserta a la derecha del cursor H como X pero borrando todo a la derecha para luego insertar nD borra n caracteres a la derecha nSz busca n apariciones del caracter z en la linea editada nKz como S pero elimina caracteres nCz cambia n caracteres en base a z E igual que RETURN pero no imprime nada Q sale sin generar cambio alguno a la linea L imprime la linea y reinicia la edicion para posibles cambios A restaura la linea modificada 2. Comparandolo con el Spectrum El original Altair era un 8080A, con una velocidad de 2mhz y tan solo 256 bytes de RAM. Ademas, en vez de teclado usaba unos switches que se conocian como Interruptores de sentido. No deberia ser imposible de emular en un Spectrum. Su sucesor el Altair 8800B, era plenamente compatible con la version anterior pero venia con 2k de RAM y un coprocesador Intel 8224. Hubo tambien otro modelo del mismo a~o, el Altair 680, basado en Motorola 6800, a 500khz, con 1k de RAM y 1k de ROM pero que no fue tan exitoso. El Basic de 4k deberia caber sin problemas en un Spectrum de 48k e incluso el de 8k. Pero debido a que no existe emulacion del Altair pensado para el Spectrum, ya sea el 48k, 128k o +3 hasta el momento de escribir estas notas, no nos queda mas remedio que dedicarnos a convertir cualquier listado Basic de Altair que nos podamos encontrar por ahi, a su equivalente en Basic Sinclair. Variables de una sola letra como en el Basic Sinclair. ON GOTO es definible. LEFT$, MID$ y RIGHT$ son tambien definibles. FRE, ONERROR y DELETE estan presentes en el Basic de Timex. Mientras que MOD, EDIT y USING existen en el Betabasic, ni que decir que el SAM tiene todo lo anterior a excepcion de EDIT. Es interesante ver tambien como a medida que el Basic de Altair se fue expandiendo y mejorando, aunque sin graficos ni sonido, iba mostrando lo que seria el nucleo del Basic Microsoft definitivo en sus muchas variantes, siendo el GWbasic y su sucesor QuikBasic los que se notan mas completos en su repertorio de comandos y funciones. Cualquier otra maquina anterior o posterior a esta no tuvo tanta relevancia, pero supongo que su eclipsacion seria ya con la aparicion del APPLE. A ver si un dia alguien se decide por la emulacion del Altair 8800 y aunque sea con Basic 4k para Spectrum o SAM. (c)2022-23 zx_if1@hotmail.com