jueves, 10 de enero de 2013

Un recorrido por la historia del Spectrum: ZX80


Índices: Máquinas Sinclair       Historia de la Informática


Clive Sinclair, en ese momento mediante la empresa Science of Cambridge, lanzó al mercado en 1980 el ZX80, siendo el primer equipo completo disponible en el Reino Unido "por menos de cien libras", en forma de Kit se vendía por 99.95 Libras, o montado por un poco mas. En los EE.UU. el precio era de 149'95$ en kit y 199'95$ montado, y cambiaron el eslogan por "la primera computadora personal por menos de 200$". Rápidamente se hizo muy popular, por lo que se creó una lista de espera de varios meses para conseguir una unidad. Su nombre está basado en el Z80, añadiendo una "X" (según la BBC fue por su "ingrediente misterioso"). Se calcula que se vendieron unas 50.000 unidades del ZX80, lo que hicieron al Reino Unido líder en ordenadores personales del momento, aunque por problemas de calidad y sobrecalentamiento es difícil encontrar hoy máquinas operativas.

Una unidad del ZX80 (fuente: oldcomputers.ne)
Como solo disponía de 1Kb de RAM, usaba dos ingeniosos mecanismos para ahorrar el máximo de memoria posible, aunque complicaba el uso y programación del aparato, los Tokens (palabras del BASIC) se definieron dentro del mapa de caracteres, por lo que cada comando usaba un solo byte en lugar de uno por cada carácter (así PRINT usaba un byte en lugar de 5), eso le hizo disponer de un teclado un tanto especial para poder escribir los programas, que fue heredado por el Spectrum. El segundo mecanismo fue el uso de una memoria de pantalla dinámica, al usar solo texto, en la memoria de pantalla solo se guardaban las líneas hasta el CR, y solo hasta la última línea rellena en la pantalla, ahorrando guardar los espacios a la derecha y las líneas en blanco inferiores, aunque complicaba un poco la circuitería de vídeo.

La máquina fue diseñada por Jim Westwood, usando un Z80 a 3,25 MHz, con una memoria RAM estática de 1Kb (ampliable a 16Kb como máximo) y una ROM de 4Kb, sin usar chips especiales. La salida de vídeo era hacia una televisión, y el almacenamiento utilizando una grabadora de casete.No disponía de ningun sistema para generar sonido.

El diseño externo es del diseñador industrial Rick Dickinson, se montaba dentro de una pequeña caja de plástico blanco, con el teclado de membrana en azul en la parte delantera. Aunque dispone de una rejilla en la parte trasera de la caja, no es funcional sino estética, por lo que la máquina tenía problemas de sobrecalentamiento, lo que unido a la necesidad de reducir el coste usando componentes lo mas económicos posibles, y el casi nulo control de calidad por parte de la empresa, lo hacían poco durable.

La ROM disponía de la primera versión de BASIC de Sinclair, que solo podía manejar números enteros para funcionar mas rápido, un editor de programas y un mínimo sistema operativo para el manejo de los periféricos. Los Tokens del BASIC estaban predefinidos en el juego de caracteres de la máquina, comportándose como lo hacen las calculadoras, en que cada tecla da acceso a un comando, pero para poder acoplar todo el juego de caracteres, en el teclado de membrana de 40 teclas, estas disponían de tres funciones en cada una, que se seleccionaba según la posición en la línea en que se pulsara (al principio siempre va un token, luego irán los parámetros de ese token), pudiendo alterarse con el Shift.

El generado de vídeo usaba las ideas popularizadas por Don Lancaster en su TV Typewriter, todo controlado por el Z80 directamente, por lo que solo podía generar una imagen completa mientras estaba inactivo, esperando una pulsación del teclado. Cuando se ejecuta un programa básico, o incluso cuando se pulsa una tecla, la pantalla estaba en negro momentáneamente mientras el procesador estaba ocupado. Esto hacía que hacer un programa con gráficos móviles fuera muy difícil, ya que debía detenerse continuamente al procesador para presentar la pantalla. Esto se usó en el ZX81 para hacerle trabajar en modo FAST, sin refrescar la pantalla mientras se procesaba.

La unidad por dentro, integraba placa y teclado juntos (fuente: oldcomputers.net)

La salida de vídeo era solo en modo texto monocromo, aunque se podían redefinir los caracteres para simular gráficos basados en caracteres. Al usar solo vídeo monocromo, no tenía problemas para adaptarse a otros sistemas no ingleses de vídeo, cambiando la frecuencia de vídeo y el generador de RF para adaptarlo a cada país. Como la RAM se usaba como memoria de pantalla, y podía llegar a usar una pantalla de 24 líneas de 32 caracteres, lo que ocupaba 768bytes, dejando solo 256bytes libres al usuario. El mecanismo de guardar solo la parte rellena de la pantalla hacía que se pudiera usar mas memoria, con el truco de acumular en la parte superior izquierda el máximo de información, podía ampliar un poco esto, pero al final era casi imprescindible usar una ampliación de memoria.

En la parte trasera disponía de un bus de expansión de borde de la placa, que era el mismo para el ZX81 y con algunas modificaciones lo usó el Spectrum, lo que motivó la creación de algunas expansiones. Sinclair disponía de expansiones de RAM estática de 1, 2 o 3Kb, y de 16Kb usando RAM dinámica. Luego sacó un interface y una impresora. Otras empresas fabricaron otras ampliaciones, principalmente de memoria, pero al ser compatible con el ZX81, se le podían añadir hasta discos.

Con el lanzamiento del ZX81, una expansión con una ROM de 4Kb podía convertir el ZX80 en un ZX81, incluyendo un nuevo overlay para el teclado y el manual del ZX81, había que cambiar la ROM, con algunas pequeñas modificaciones en la placa, y ubicar el overlay sobre el teclado, pero no disponía del modo FAST/SLOW al carecer de posibilidad de deshabilitar la NMI.

El overlay del teclado del ZX81, detrás una ampliación de memoria de Sinclair (fuente: yourcomputeronline)


Una de las modificaciones más comunes por los aficionados era cambiar la placa a una caja más grande, con un teclado mejor, lo que mejoraba la refrigeración y el manejo.

Clones

La Timex solo sacó máquinas compatibles con el ZX81 por lo que no hubo clones oficiales, pero si existieron clones no autorizados en USA y Brasil (pais que tenía prohibida la importación de ordenadores y consolas para fomentar la industria nacional):


1980: MicroAce Microcomputer, de la empresa MicroAce (USA), con 2Kb de RAM y la misma ROM del Sinclair (incluso tenía el símbolo £ en lugar del $), por lo que tuvo que dejar de fabricarlos al perder el juicio por plagio. Cambió levemente la máquina para conseguir un clon sin parpadeos, y luego obtuvo permiso de Sinclair para vender un kit de un clon del ZX81.
1980: TK80, de Microdigital (Brasil), con 1Kb de RAM y 2Kb de ROM, pronto fue reemplazado por los siguientes modelos.
1981: TK82 y TK82C, de Microdigital (Brasil), salían con 2Kb de RAM. El modelo básico con 4Kb de ROM, y  la versión C (por Científico) que manejaba números reales desde Basic, disponía de 8Kb de ROM. Disponían de interface de Joystick, generador de tonos para el sonido, y el interface de cinta podía trabajar a 300 o a 4800 baudios. Luego sacaron el TK-82S con 8 KB de ROM y el TK-83 con memoria expandible a 64Kb, ambos usaban una ULA en lugar de los chips TTL.
1981: NE-Z80, de las empresas Nova Electrônica y Prológica (Brasil), con 1Kb de RAM y 4Kb de ROM, una copia casi idéntica al modelo de Sinclair.

lunes, 7 de enero de 2013

Un recorrido por la historia del Spectrum: MK-14


Índices: Máquinas Sinclair       Historia de la Informática


Este fue el primer ordenador vendido por Sinclair en 1977, entonces la empresa se llamaba Science of Cambridge. Se vendía en forma de Kit por 39'95 libras. Se desarrollaron 5 issues o versiones de la placa, con pequeñas diferencias entre ellas, y se calculan unas ventas de entre 20.000 y 50.000 unidades según fuentes.

Como a Clive Sinclair no le gustaba demasiado la idea de entrar en la informática en ese momento, el proyecto lo desarrolló Chris Curry y fue fabricado por la National Semiconductor, siendo mucho mas económico que el principal competidor, el Compukit-101. Al final Chris Curry dejó la compañía en 1978, fundó Acorn Computers junto con Herman Hauser y construyó su primer ordenador, el System-1, vendido en kit. Unos meses más tarde, viendo las ventas del MK-14, Sinclair decidió entrar de lleno en el mundo de los ordenadores, comenzando el proyecto de un ordenador completo por menos de 100 libras, el ZX-80.

 

Un MK14 issues 1, 2 y 4 (fuente: old-computers.com)


Estaba basado en el entrenador Introkit de la National Semiconductor, por tanto usaba el microprocesador SC/MP (la referencia en el chip era INS8060, por tanto era uno con tecnología MOS de canal N, funcionando a 4'4Mhz, aunque internamente el reloj se dividía por dos). Disponía de 128 o 256 bytes de memoria RAM según modelo, ampliable hasta 640 bytes en la propia placa (recordar que bytes no son Kbytes). Usaban una ROM de 512 Bytes con un programa monitor sencillo.

La entrada/salida primaria era como en las calculadoras, para la entrada disponía de un teclado de 20 teclas, mas un pulsador de reset, las primeras versiones era de membrana, pero luego se mejoró a uno mecánico. Para la presentación de datos disponía de una pantalla con 8 o 9 displays LED rojos de 7 segmentos, para presentar datos de la memoria, y en alguna versión disponía de salida para una pantalla capaz de presentar en modo texto 32 columnas y 16 líneas, o en modo gráfico 64×64 puntos.

Disponía de dos conectores de expansión, uno en la trasera general, y otro en un lateral, asociado a líneas de entrada salida. Como opciones de ampliación podía disponer de 16 líneas de entrada/salida añadiendo un chip controlador INS8154N, que en la última versión estaba incluido ya en la placa. Para el almacenamiento externo disponía en opción un interface para cintas de casete, o se podía añadir una placa con un chip PROM como almacenamiento (idea usada en su ultima máquina, el Z88). No disponía de sonido, pero si circulaba un esquema de como montarse una. Con una placa externa, se podía aumentar la memoria hasta los 64Kb máximos que podía direccionar el SC/MP.



El esquema original (fuente: www.theoddys.com)


Aparecieron montajes e ideas para la máquina en varias revistas para aficionados a los ordenadores caseros, como Personal Computer World o Practical Electronics. Hoy día hay varias páginas en Internet con proyectos, algunos con procesadores SC/MP o su equivalente en FPGA, y otros con emulación, al disponer de muy poca memoria interna, hasta con un PIC he visto emuladores.

jueves, 3 de enero de 2013

Un recorrido por la historia del Spectrum: Máquinas de Sinclair



Índices: Historia de la Informática


Esta es una lista de todas las máquinas de Sinclair o sus clónicos, en varias partes, primero los ordenadores y periféricos oficiales por fecha de lanzamiento, luego equipos que no eran ordenadores por grupos según fecha de inicio de la actividad, y después los numerosos equipos clónicos de todas sus máquinas. El Apple II tuvo muchos clones, el IBM PC por supuesto es el rey de los clones, pero solo en Rusia tengo 70 clones del Spectrum en la lista, aunque hay mucha confusión en algunos modelos, y 32 mas del resto del mundo.

Ver primero la breve historia de Clive Sinclair.

ORDENADORES Y PERIFERICOS SINCLAIR
Año Empresa Nombre Comentarios
1977 Sciencie of Cambridge MK-14 Basado en un procesador SC/MP
1979 Sciencie of Cambridge ZX80
1981 Sinclair Computer ZX81
1981 Sinclair Computer ZX Printer Impresora térmica para el ZX-81, compatible con ZX-80 y ZX-Spectrum
1982 Timex Sinclair TS 1000 Versión oficial (ZX81)
1982 Timex Sinclair TS 2000 Versión oficial. Prototipo no lanzado al mercado (ZX81)
1982 Sinclair Research ZX Spectrum Aquí podeis ver su evolución
1982 Sinclair Research ZX Interface 1 Interface con un puerto serie, red y microdrivers para el ZX-Spectrum
1982 Sinclair Research Microdriver Unidad de almacenamiento compatible con el Interface-1
1982 Sinclair Research ZX Interface 2 Entrada de cartuchos y dos puertos de Joystick
1983 Timex Sinclair TS 1500 Versión oficial (ZX81)
1983 Timex Sinclair TS 2048 Nunca lanzado (ZX Spectrum)
1983 Timex Computer TC 2048 Solo en Portugal (ZX Spectrum)
1983 Timex Sinclair TS 2068 Versión oficial (ZX Spectrum)
1983 Timex Computer TC 2068 Solo en Portugal (ZX Spectrum)
1984 Sinclair Research ZX Spectrum+
1985 Sinclair Research ZX Spectrum 128 Desarrollado en España por Investrónica
1985 Sinclair Research QL El Salto Quantico de la Sinclair
1986 Amstrad ZX Spectrum +2 El "gris", por el color de su carcasa. Un 128 con casete
1988 Amstrad ZX Spectrum +3 Cambio completo, añade disquetera de 3"
1988 Amstrad ZX Spectrum +2A/+2B Un +3 sin disco y con casete. Los primeros realmente son +3 sin chip de disquetera. El +2B es idéntico al +2A, cambia el lugar de montaje y que lleven soldados o en zócalo las memorias.
1988 Cambridge Computers Z88 Portable
1988 Amstrad Sinclair PC200 PC Compatible (8086), un Amstrad PC20 remarcado
1989 Amstrad Sinclair PC500 PC Compatible (8086), un Amstrad PC1512 DS remarcado.
1990 Amstrad Sinclair APC386sx PC Compatible (80386), un Amstrad Mega PC 386SX

EQUIPOS ELECTRÓNICOS Y VEHÍCULOS
Año Empresa Nombre Comentarios
Amplificadores de Audio y equipos HI-FI
1962 Sinclair Radionics Micro-Amplifier
1964 Sinclair Radionics TR5, TR750, X-10
1965 Sinclair Radionics X20
1966 Sinclair Radionics Z12, Z120
1968 Sinclair Radionics IC-10, Neoteric 60, System 2000
1969 Sinclair Radionics Z30
1970 Sinclair Radionics Z50
1971 Sinclair Radionics Super IC-12
1972 Sinclair Radionics Project 605, System 3000
1973 Sinclair Radionics Project 80
1974 Sinclair Radionics System 4000
Televisores
1966 Sinclair Radionics Microvision Prototipo de TV de tubo
1976 Sinclair Radionics TV1A / MON1A TV de tubo
1984 Sinclait Research TV80 TV de pantalla plana
Calculadoras
1972 Sinclair Radionics Cambridge
1973 Sinclair Radionics Executive
1975 Sinclair Radionics Oxford
1975 Sinclair Radionics Scientific
1977 Sinclair Radionics Enterprise
1977 Sciencie of Cambridge Wrist Calculator
1978 Sciencie of Cambridge President
Equipos de medidas electrónicas
1974 Sinclair Radionics DM1 Multímetro
1975 Sinclair Radionics DM2 Multímetro
1977 Sinclair Radionics PDM35 Multímetro
1978 Sciencie of Cambridge DM235, DM350, DM450 Multímetro
1979 Sciencie of Cambridge PFM200 Medidor de frecuencias
1979 Sciencie of Cambridge C110 Osciloscopio
Relojes digitales
1977 Sinclair Radionics The Black Watch Reloj de pulsera
1977 Sinclair Radionics Microquartz Reloj para el automovil
1984? Sinclair Research FM Radio Watch Reloj de pulsera con radio FM, solo se fabricaron 11.000 unidades, casi todos fueron a EEUU
Vehículos terrestres y submarinos
1985 Sinclair Vehicles C5 Vehiculo eléctrico triciclo con pedales
1992 Sinclair Research Zike Bici plegable
1994 Sinclair Research Zeta Motor para bici
2001 Sinclair Research SeaScooter Propulsor submarino
2002 Sinclair Research Wheelchair Drive Unit Propulsor silla ruedas

EQUIPOS CLONICOS
Año Empresa Nombre Comentarios
Clones del ZX-80
1980 MicroAce (USA) MicroAce
1980 Microdigital (Brazil) TK80
1981 Nova Electrônica/Prológica (Brasil) NE-Z80
1981 Microdigital (Brazil) TK82 Con 2Kb de memoria y varias versiones
Clones del ZX-81
1981 Czerweny (Argentina) CZ 1000 y CZ 1000 Plus
1981 Ritas (Brasil) Ringo R470
1982 Engebras (Brasil) AS-1000
1982 Prológica (Brasil) CP-200 
1982 Nova Electrônica/Prológica (Brasil) NE-Z8000
1982 Microdigital (Brasil) TK83   
1982 Lambda Electronics (Hong Kong) Lambda 8300 También se fabricó para otros como PC 8300, Power 3000, Unisonic 8300, Futura 8300 (de Unisonic), Your Computer,  Basic 2000, DEF 3000
1983 CDSE (Brasil) Apply 300
???? TL801 Clon italiano
Clones del Timex TS 1500
1982 Czerweny (Argentina) CZ 1500 y CZ1500 Plus
1982 Microdigital (Brazil) TK85
Clones del ZX Spectrum. Europa occidental
1981 Jupiter Cantab (UK) Jupiter ACE De los creadores del ZX-80, ZX81 y Spectrum, usando lenguaje Forth
1986 Investrónica (España) Inves Spectrum+ Único clónico 100% español
1989 Miles Gordon (UK) SAM Coupe Clónico de trabajadores de Sinclair tras la compra por Amstrad
Clones del ZX Spectrum. Sudamerica
1983 Czerweny (Argentina) CZ 2000
1983 Czerweny (Argentina) CZ Spectrum
1984 Czerweny (Argentina) CZ Spectrum+
1985 Microdigital (Brasil) TK90X
1986 Microdigital (Brasil) TK95
Clones del Timex TS 2086
1983 Polbrit International (Polonia) Unipolbrit 2086
Clones del ZX Spectrum. Europa del este salvo Rusia
1983 Intreprindera Electronica (Rumanía) CIP-03
1983 Didaktik Skalica (Checoslovaquia) Composite
1985 ICE-Felix (Rumanía) HC-85
1986 ICE-Felix (Rumanía) HC-85+
1986 Híradástechnikai Szövetkeze (Hungria) HT 3080C
1986 Elwro (Polonia) Elwro 600 junior
1986 Elwro (Polonia) Elwro 800 junior Gama compuesta por los modelos 800, 800-2 y 800-3
1986 Elwro (Polonia) Elwro 804 junior PC
1986 Híradástechnikai Szövetkezet (Hungría) HT 3080C
1987 Didaktik Skalica (Checoslovaquia) Didaktik Alfa También conocido como Didaktik Gama/87
1987 ? (RDA) HCX
1988 Didaktik Skalica (Checoslovaquia) Didaktik Beta También conocido como Didaktik Gama/88
1988 ICE-Felix (Rumanía) HC-88
1988 Hübner Elektronik (RDA) Spectral
1989 Didaktik Skalica (Checoslovaquia) Didaktik Gama
1989 Radio Amateur (Checoslovaquia) Mistrum
1990 Didaktik Skalica (Checoslovaquia) Didaktik M 90/91
1990 ICE-Felix (Rumanía) HC-90
1991 Didaktik Skalica (Checoslovaquia) Didaktik Kompakt
1991 ICE-Felix (Rumanía) HC-91
1993 ICE-Felix (Rumanía) HC-2000
???? Rumanía Jet
???? Universidad de Timisoara (Rumanía) TimS y microTim TIMisoara Spectrum
Clones del ZX Spectrum. Rusia (por orden alfabético)
1993 ATM 1
1994 ATM 2
1995 ATM Turbo
1991 Bajt
1988 Baltic También conocido como Baltica
1983 Best_III
???? Byte
???? Cobra
???? Composite
1991 Delta
???? Delta C
1990 Delta S-128
???? Dynamo Computer Digra
1991 Dubna 48K
???? Dynael M.48B
???? Elektronika BI-201
1991 Ella Ra También conocido como Elara-Disk 128
???? Fanny
???? GrandRomMax Varios modelos, luego fue el GRM2+ y GrandBoard2+
1990 Dmitry Mikhailov y Mikhail Osetinskii Hobbit Personal Computer También conocido como Hobbit o Hobeta
1998 Kay 1024
1991 Krasnogorsk 1990
???? Kvant-BK También conocido como MC 0530
???? Kvorum
???? Kvorum-64
???? Kvorum-128
???? Kvorum-128+
1989 Leningrad-1
1991 Leningrad-2
1990 Magic
1990 Master
1991 Ivanovo Master K11
???? Master Olympic-C
1993 Peters Plus Ltd. MC-64
1989 Mistrum
1988 Moskva
1989 Moskva-128
1990 Nafanja
???? Orel_BK08
???? Orizon
???? Parus
1989 Pentagon-48
1989 Pentagon-128
???? Peters Plus Ltd. ? Peters MC64 Variantes MC64S1, MC64S3, MD-256S3
???? Pioneer
1990 Profi Tambien conocido como ZX Profi
???? Robi
1989 Selto-Rotor Robik
1990 Santaka 002
1992 Scorpion ZS-256
1990 Sever (Nord) 48/002
???? Sintez
1993 Sintez 2
???? Sintez-M
1991 Oryol PC Spektr 48
1996 Peters Plus Ltd. Sprinter SP97 También conocido como ZX-Sprinter
???? Peters Plus Ltd. Sprinter Sp2000
Sp2000-Light
Variantes del Sprinter
???? Westa IK-31
???? Widicon
???? ZX Next También conocido como ZX Frium 2 y ZX Forum 2
1992 ZX Spectrum 48/64
???? ZX Spectrum Varios modelos se llamaron así (al menos he visto 6)
???? ZX Spectrum 128 Varios modelos se llamaron así (al menos he visto 3)
Clones del QL
1981 ICL One per Desk Modelo de ICL, Sinclair y British Telecom
1981 British Telecom Merlin M1800 Tonto El modelo de ICL, Sinclair y BT. TONTO=The Outstanding New Telecoms Opportunity
1981 Telecom Australia Computerphone El modelo de ICL, Sinclair y BT para Australia
1984 Sandy (Italia) Sandy QLT / Futura Prototipo de Sandy con Software de Qjump (UK).
1986 Cambridge Systems Technology CST Thor PC Un QL con placas de expansión. También conocido como Thor 1
1987 Cambridge Systems Technology CST Thor 20/21 Un QL con placas de expansión, usando una placa con un 68020 en lugar del 68008.
1988 CST y DanSoft CST Thor XVI Placa rediseñada por completo
Qubbesoft Aurora Placa madre de reemplazo para el QL
Peter Graf para D&D Systems Q40 / Q40i / Q60
Miracle Systems QXL / QXL II  Tarjetas para usar en un compatible PC

miércoles, 2 de enero de 2013

Un recorrido por la historia del Spectrum: Clive Sinclair


Índices: Máquinas Sinclair       Historia de la Informática


Para conocer la historia del Spectrum hay que conocer la historia de su creador, Clive Sinclair, sus ideas y las muchas empresas que creó, esto nos dará una idea del porque de ciertas características del aparato. Su principal premisa, "lo pequeño es elegante y refinado", nos hace entender muchos de sus diseños, junto a sus otras dos máximas "que sea económico" y "que sea completo", lo que le hace diseñar productos que hacen todo lo que necesitas (pero nada mas), y sus controles de calidad sean mínimos, lo que abarata el coste de producción.

Nació el 30 de julio de 1940, y desde joven se entusiasmó con las matemáticas, lo que le condujo a la electrónica, y colaborar en revistas, tanto publicando como editando. Prefirió no cursar estudios universitarios, en lugar de ello se pudo a fabricar y vender kits electrónicos en 1958, lo que le hizo conocido, y escribió no solo artículos en revistas de electrónica, sino algunos libros, llegando a actuar de editor y director técnico. Tres años después de comenzar su aventura, sus ventas son buenas, por lo que en 1961 crea su primera empresa, Sinclair Radionics Ltd., ya que en esa época vendía sobre todo kits de radio y de audio. No consigue capital para ampliar adecuadamente la empresa, por lo que debe seguir trabajando de editor en revistas y editoriales para complementar los ingresos. Todos sus productos tienen dos características en común, con pequeños y son económicos, lo que es una obsesión para el.
El Micro-amplificador (fuente: wylie.org)

Los productos que lanza son muy pequeños, un mini-amplificador del tamaño de una moneda, radios de bolsillo, pero una idea le ronda hace tiempo, y en 1966 anuncia un televisor miniatura, que cabe en la palma de la mano a pesar de usar una pantalla de tubo, en esa época no había pantallas planas, pero no consigue ponerlo en producción.

En 1967 lanza su primera calculadora electrónica de bolsillo, la Cambridge, a la que siguen varias hasta llegar a la Executive. En 1974 funda Sinclair Radionics en Boston (USA). En 1975 presenta el Black Watch, uno de los primeros relojes de pulsera digitales. En 1976 lanza por fin su televidor miniatura, el TV1A, que se convierte en su primer fracaso económico.

La Microvisión TV1A (fuente: nvg.ntnu.no)


Sigue fabricando calculadoras, entre las que destacan sus últimos modelos de 1977, la Sovereing una elegante calculadora, y la Wrist una calculadora de muñeca. Ese mismo año 1977 funda la empresa Sciencie of Cambridge, donde lanza su primer ordenador, el MK-14, basado en el procesador SC/MP, es una modificador de su entrenador MicroKit, es poco mas que una calculadora, y tiene un éxito relativo, pero salva la situación económica del momento.


El MK-14 (fuente: searle.hostei.com)

En Mayo de 1979 el Financials Times precide que en 5 años apareceá un ordenador completo por menos de 100 libras, lo que le espolea en sus investigaciones, y en 1980 Science of Cambridge lanza el ZX80 por 99 libras, por lo que es es apodado "el ordenador más pequeño y barato del mundo", ordenador que se vende en Kit y que cumple sus máximas, era pequeño y económico, para conseguirlo tiene muy poca memoria, ya que es el componente mas caro del aparato en esa época, por lo que se lanza con solo 1Kb de RAM, pero dispone de todo lo necesario, un teclado, salida para televisión de 24 líneas y 32 columnas en blanco y negro, y entrada/salida de casete, junto a un ROM de 4Kb con un Basic que solo maneja enteros, pero hace que se pueda usar desde el primer momento. Está basado en un Z80 a 1Mhz. Se calcula que vende unas 50.000 unidades. Cambia el nombre de la empresa Science of Cambridge por el de Sinclair Computer Ltd.

ZX80 y ZX81 (fuente: www.fib.upc.edu)

Al año siguiente lanza una mejora, el ZX81, agrupando casi todos los chips auxiliares en uno solo, por lo que reemplaza 12 chips por uno, un chip programable en fábrica desarrollado por Ferranti, denominado ULA (Uncommited Logic Array), que lo hacen mas económico, se vende por 70 libras. Aumenta el tamaño de la ROM a 8Kb, en la que añade posibilidad de manejo de numero reales, y lo dota de dos modos de trabajo, el FAST hacer que no se refresque la pantalla mientras se realizan cálculos. Vuelve a cambiar el nombre de Sinclair Computer por el definitivo Sinclair Research Ltd.

En 1982 lanza el ordenador europeo mas vendido, el ZX Spectrum, un ordenador que supuso un éxito comercial sin precedentes, con un precio de salida de 180libras. Se lanza un solo modelos con dos variantes, con 16Kb o con 48Kb de RAM, un Z80 a 3'5Mhz (usualmente los primeros fabricados por NEC). Ofrece mejor modo gráfico, alcanzando 256x192 pixels, aunque para reducir costes dispone de 16 colores, pero solo se pueden aplicar a un bloque de 8x8 pixels. La ROM aumenta hasta 16Kb, mejorando no solo el Basic, sino añadiendo comandos para manejo de periféricos. Añade un pequeño altavoz interno, por lo que es posible hacer sonar el aparato. Todo ello dentro de una pequeña caja con un teclado de membrana, cuyas teclas son de goma. El coste del aparato es cuatro veces menor que el del otros como el Commodore 64, por lo que rápidamente se convierte en el mas vendido, se calcula que se vendieron unos dos millones de ordenadores en Europa, y otros tantos en América.
Un ZX Spectrum (Fuente: old-computers.com)

En septiembre de 1982 Margaret Thatcher visita Japón, y regala un Spectrum al primer ministro japonés como muestra del poderío industrial inglés. En 1983 es nombrado caballero.

En 1984 lanza el Sinclair QL, máquina con intención de entrar en el mercado empresarial, basado en un Motorola 68008, su segundo gran fracaso, ya que su teclado y sus unidades de almacenamiento no lo hacen atractivo, si hubiese empleado una disquetera estándar y un teclado mecánico quizá hubiese logrado su intención. Disponía de una muy buena versión de Basic, y de un sistema operativo que podía realizar multitarea, pero solo vende 60.000 unidades, y es un gran lastre financiero para la empresa. Ese mismo año lanza el modelo Spectrum+, en el que solo cambia el teclado de goma por uno mejor, y añade un reset.

Sinclair QL (Fuente: classiccmp.org)


En 1985 presenta el Spectrum 128, diseñado realmente por Investrónica en España, que no logra recuperar la cuota del spectrum, pero lo que acaba de hundirle es la actualización de su televisión, el TV80, y un vehículo eléctrico, el Sinclair C5, lo que fue su mayor desastre financiero, debido a que se le negó el permiso de circulación por vías públicas, ya que su tamaño y baja altura lo hacían peligroso para la circulación, aunque al final consigue fabricar 10.000 unidades.

Sir Clive Sinclair en su C5 (fuente: dailymail.co.uk)

En 1986 la grave crisis que sufre la empresa le lleva a venderla, junto con el nombre, a Amstrad, su más directo competidor, que lanza algunos modelos mas con la marca Sinclair, los modelos +2 y +3.

A pesar de su fracaso, lo vuelve a intentar, y a finales de 1987 funda Cambridge Computers, en la que lanza el Cambridge Z88, un ordenador portátil revolucionario para la época, basado en un Z80 a 3,5 MHz, capaz de direccionar 3,5 Mbyte de RAM, nuevamente sin discos, pero con 4 pilas AA podía operar hasta 20 horas. No consigue muchas ventas, por lo que deja definitivamente la empresa.

El Z88 (Fuente: retrothing.typepad.com)

El 12 de julio de 2006 lanzó la A-bike, una bicicleta plegable, y ha vuelto a Sinclair-Research, donde venden ahora Zeta, un pequeño motor eléctrico para cualquier bicicleta.

domingo, 30 de diciembre de 2012

El sonido en 8 bits (IV): En los MSX

Artículo publicado en el número 5 de RetroWiki Magazine


El estándar MSX1 definía una máquina con el típico chip de sonido de General Instrument, el AY-3-8910, lo que se mejoró mínimamente en el MSX2, se aumentó en los  MSX2, llegando al máximo en los Tubo-R. En su versión del Microsoft Basic incluyeron una forma muy sencilla de usar para hacer música. En su versión del Basic para los MSX1, Microsoft incluyó tres instrucciones de manejo del sonido, que daban todo el control del chip al usuario. 

El sonido en los MSX
El estándar original de los MSX definía el uso de un chip generador de sonido programable (PSG) de General Instrument, el AY-3-8910, que proporciona tres canales configurables de sonido para generar ondas cuadradas y ruido blanco, con dos puertos de entrada/salida para su gestión. Como cada fabricante podía implementar sus máquinas con muchas opciones, la mayoría de los MSX1 solo disponían de salida de sonido mono a través del televisor, solo algunos permitían salida estéreo desde un conector trasero. 

En los MSX2 no se mejoró mucho la capacidad de generar sonido, ya que usaba el chip de Yamaha YM2149 que es compatible con el AY-3-8910, pero todas las implementaciones ya tenían mono o estéreo por la tele, y siempre estéreo por un conector de salida. El MSX2+ mantenía el sistema, añadiendo opcionalmente un segundo chip de sonido Yamaha YM2413, que proporcionaba síntesis musical de 1 instrumento entre 15 posibles, que también fue muy usado en cartuchos de ampliación.  El TURBO-R cambiaba todo el sistema, mejorando los chips usados y añadiendo MIDI, pero muy pocas máquinas lo usaron.

Sonido desde BASIC

Para producir sonido desde el BASIC hay tres formas, usando BEEP, SOUND o PLAY, cada una tiene una forma diferente de enviar los comandos.

La forma mas sencilla es usar BEEP, que hace un sonido fijo de duración establecida, es un pitido sencillo en el altavoz, y se usa mucho antes de una interacción con el usuario para avisarle:

10 BEEP
20 INPUT “Introduzca un valor: “;A$


La orden SOUND permite enviar a los registros internos del chip los valores que se deseen, por lo que hay completo control del sonido, a costa de necesitar conocer perfectamente como trabaja el chip. La sintaxis es: SOUND registro, valor
  • Registro: indica el registro que se desea modificar. Los AY-3-8910 disponían de 16 registros de 8 bits, algunos usados de dos en dos para conseguir valores de 16 bits, pero no todos admitían cualquier valor: 
    • 0 y 1: En los 12 bits se establece la frecuencia para el canal A, el 0 es el byte bajo (0-255) y el 1 el medio byte alto (0-15), pudiendo manejar 4096 tonos. Para enviar un sonido, por ejemplo de 1456, hay que calcular:
      • Byte alto: parte entera del valor dividido entre 256 -> |1456/256|=5 
      • Byte bajo: el valor menos el byte alto por 256 -> 1456-(5*256)=176
    • 2 y 3: Lo mismo para el canal B. 
    • 4 y 5: Lo mismo para el canal C .
    • 6: En 5 bits el tono del canal de sonido blanco. 
    • 7: En 6 bits que canales se activan a la vez, será la suma de los valores deseados entre los siguiente, así si queremos que suenen a la vez A y C, y por el A añadir ruido blanco, sería 1+4+8=13:
      •    1: Canal A
      •    2: Canal B
      •    4: Canal C-Sonido Blanco)
      •    8: Ruido blanco en el canal A
      •  16: Ruido blanco en el canal B
      •  32: Ruido blanco en el canal C
    • 8, 9 y 10: Volumen del canal A, B o C respectivamente, entre 0 (mínimo) y 15 (máximo), pero siempre hay que sumarle 16 para activar el registro.
    • 11, 12: Frecuencia del patrón de envolvente del sonido, 11 byte bajo y 12 byte alto.
    • 13: Modo del patrón del envolvente de volumen, con valores que se sumen entre:  1 para activar Hold, 2 para activar Alternate, 4 para activar Attack, 8 para activar Continue (ver el artículo sobre los Amtrad para entender mejor los envolventes).
    • 14 y 15: No se usan para el sonido, son los valores de los puertos de entrada/salida del chip
  • Valor: es el valor a guardar en el registro, dependiendo de los bits que pueda recoger cada uno.
Esta forma de ejecutar sonido nos da todo el control sobre el chip generador de sonido, pero es más compleja de manejar. Un ejemplo con el canal de sonido blanco:

10 SOUND 6,0
20 SOUND 7,55
30 SOUND 8,16
40 SOUND 11,23
50 SOUND 12,2
60 SOUND 13,9

Como esta forma de manejarlo es mas compleja, hay una segunda forma de hacerlo mucho mas sencilla, que nos permite hacerlo incluso a los que no sabemos casi nada de música, con la orden PLAY, que tiene esa sintaxis: PLAY [EA] [,EB][,EC] en donde EA, EB y EC son tres cadenas de caracteres con las notas que se desea hacer sonar en los canales A, B y C respectivamente. Solo es obligatorio indicar una de las tres cadenas, y se componen de notas y variaciones de sonido, pudiendo usar cualquiera de estos comandos sin separaciones entre ellos (lo que dificulta un tanto la lectura):
  • Notas Musicales: Se indican mediante una letra o una “N” seguida de un número de una o dos cifras, y al igual que en un piano de una octava, se usa la escala cromática en lugar de la natural, con los semitonos usando sostenidos (añadiendo “#” o “+”) y bemoles (añadiendo “-“), y al igual que en un piano de una sola octava no están permitidos B# (Do de la siguiente octava), C- (Si de la anterior octava), E# (Fa), F- (Mi):
    •     Do        N36, C
    •     Do#      N37, C#, C+, D-
    •     Re        N38, D
    •     Re#      N39, D#, D+, E-
    •     Mi        N40, E
    •     Fa        N41, F
    •     Fa#      N42, F#, F+,G-
    •     Sol       N43, G
    •     Sol#     N44, G#, G+, A-
    •     La        N45, A
    •     La#      N46, A, A+, B-
    •     Si         N47, B   
  • Octava: Si no se indica nada se entiende la octava natural (la cuarta), si se desea usar otra octava se indica con al expresión “On” antes de la nota, donde n es el número de la octava de 1 a 8. Así O2B es el Si de la segunda octava. Si se usa la notación numérica, no es necesario, solo hay que usar el número mas o menos 12 veces la octava a usar, así el Do en las 8 octavas sería O1C=1,  O2C=12, O3C=24, O4C=36, O5C=48, O6C=60, O7C=72, O8C=84
  • Duración de la nota: Se indica usando “L” mas la duración entre 1 y 64, siendo L1=redonda y el resto la fracción 1/n del tiempo, así L2=blanca (1/2), L4=negra (1/4), L8=corchea (1/8), etc. Si solo queremos que afecte a una nota, lo pondremos justo después de su símbolo, Así A16 es una La semicorchea, y E4F es Mi negra Fa redonda, mientras que L4EF es Mi negra Fa negra.
  • Silencios: Se indican mediante “R” seguido de la duración, igual que la de una nota, así R1 es silencio de redonda y R8 silencio de corchea.
  • Puntillo: El símbolo “.” extiende la nota o silencio por 3/2 de su valor.
  • Tempo: Se usa “T” seguida de un número entre 32 y 255, indicando la duración base de una blanca. Si no se indica nada se asume T120.
  • Volumen: Se usa “V” seguida de un número entre 0 y 15 para indicar el volumen del canal.
  • Envolvente: Para manejarlo se usan “S” seguida de un número entre 0 y 15, para indicar la forma de la envolvente, y “M” seguida de un número entre 0 y 65535 para el periodo de la envolvente.
  • Uso de variables: Si se desea usar el contenido de una variable numérica en lugar de cualquier argumento numérico (no para notas), se puede usar en lugar de un número la expresión “=” mas el nombre de la variable mas “;”, así si disponemos de una variable llamada A y otra llamada B, podemos usar “BBO=A;T=B;”.

Un ejemplo sacado de un manual, en el que se presenta una melodía en tono de rock, o eso ponen en el libro:

10 A$=”T230O3EG#BO4C#DC#O3BG#”
20 B$=”T230O3AO4C#EF#GF#EC#”
30 C$=”T230O3BO4D#F#G#AG#F#D#”
40 PLAY A$ : PLAY A$ : PLAY B$
50 PLAY A$ : PLAY C$ : PLAY B$
60 GOTO 40

Este sistema de producir sonido es muy sencillo para que cualquiera pueda transcribir una partitura en su MSX.


Jose Antonio Vaqué Urbaneja, podéis contactar conmigo en mi mail o ver más cosas en mi blog

sábado, 29 de diciembre de 2012

Introducción a la programación usando BASIC (V): FOR y GOSUB


Artículo publicado en el número 5 de RetroWiki Magazine

BUCLES y SUBRUTINAS.

En este artículos presento los bucles y el manejo de las subrutinas, con esto simplificamos el manejo del control del programa, sin usar tantas sentencias GOTO.

BUCLES FOR

Una vez hemos repasado las sentencias IF y GOTO, que son las básicas para el manejo del programa, en esta entrada veremos dos que nos simplificarán su manejo, haciendo que el propio programa realice el control.

Un bucle es un trozo del programa que se ejecuta repetidamente, al final del bucle una sentencia GOTO nos retorna al principio, y en cualquier momento podemos salir de él usando otros GOTO. Vamos a hacer un bucle que nos calcule el factorial de un número, sabemos que el factorial de un número (que se marca con el símbolo de admiración) es el producto de los números entre 1 y el número que estamos calculando, así el factorial de 5 es:
5! = 5.4.3.2.1 = 120


100 REM --------------------------------------------------------
110 REM - Calculo de factoriales, JAVaqué‚ 2012                -
120 REM --------------------------------------------------------
130 CLS: INPUT "Número: ";N              :REM Pedimos el número mero
140 IF (N>=0) THEN GOTO 170             :REM No para negativos
150 PRINT "ERROR: No se puede calcular el factorial de un negativo"
160 GOTO 240                            :REM Ir al final
170 LET R=1                             :REM R será el resultado
180 IF (N=0) THEN GOTO 230              :REM El factorial de 0 es uno
190 LET S=1                             :REM En S lo que multiplicamos
200 LET R=S*R                           :REM Multiplicamos anterior
210 LET S=S+1                           :REM Sumamos 1 al número
220 IF (S<=N) THEN GOTO 200             :REM Mientras no sea mayor
230 PRINT ,N;"! = ";R                   :REM El resultado
240 PRINT : PRINT                       :REM Dejamos línea en blanco
250 INPUT "¿Otro? (S/N): ";O$           :REM Preguntamos si seguimos
260 PRINT : PRINT                       :REM Dejamos línea en blanco
270 IF (O$="S") OR (O$="s") GOTO 130    :REM Si es si seguimos
280 IF (O$="N") OR (O$="n") GOTO 310    :REM Si es no salimos
290 PRINT "Responda S o N" : GOTO 240   :REM Repetir pregunta
310 PRINT "Fin del programa"

La parte marcada en verde es la inicialización de las variables necesarias, en R tendremos el resultado, lo empezamos en uno ya que lo usamos multiplicando (si fuera sumando empezaríamos en cero), en S ponemos un contador hasta el número, empezamos a contar en uno. Luego en rojo el bucle, multiplicamos el resultado anterior por el contador del número, le sumamos uno al número, y se repite mientras no lleguemos a superar el número. Para entender mejor un bucle se usan diagramas de valores de variables, en el que se expresa como van cambiando las variables del programa a lo largo del tiempo, con un valor de ejemplo:

Paso Valor de N Valor de R Valor de S
130 INPUT N
<Se pide el número>
5 Indeterminado Indeterminado
170 LET R=1 5 1 Indeterminado
180 IF (N=0) THEN GOTO 230
<NO es 0, comienza el bucle>
5 1 Indeterminado
190 LET S=1 5 1 1
PASO 1 POR EL BUCLE
200 LET R=S*R 5 1 1
210 LET S=S+1 5 1 2
220 IF (S<=N) THEN GOTO 200
<Es menos, seguir el bucle>
5 1 2
PASO 2 POR EL BUCLE
200 LET R=S*R 5 2 2
210 LET S=S+1 5 2 3
220 IF (S<=N) THEN GOTO 200
<Es menos, seguir el bucle>
5 2 3
PASO 3 POR EL BUCLE
200 LET R=S*R 5 6 3
210 LET S=S+1 5 6 4
220 IF (S<=N) THEN GOTO 200
<Es menos, seguir el bucle>
5 6 4
PASO 4 POR EL BUCLE
200 LET R=S*R 5 24 4
210 LET S=S+1 5 24 5
220 IF (S<=N) THEN GOTO 200
<Es menos, seguir el bucle>
5 24 5
PASO 5 POR EL BUCLE
200 LET R=S*R 5 120 5
210 LET S=S+1 5 120 6
220 IF (S<=N) THEN GOTO 200
<Es mayor, fin del bucle>
5 120 6


Podemos simplificar esto usando la sentencia FOR - NEXT, que es el bucle usado en el BASIC para realizar estas labores. Es un bucle automático, en el que una variable va aumentando (o disminuyendo) su valor de forma automática. Veamos como cambiar las 6 líneas anteriores por
170 LET R=1                  :REM En R tendremos el resultado
180 IF (N=0) THEN GOTO 230   :REM El factorial de cero es uno
190 FOR S=1 TO N             :REM Bucle desde 1 hasta el valor de N
200   LET R=S*R              :REM Multiplicamos por el anterior
220 NEXT S                   :REM Repetir el bucle

Es muy similar, pero nos ahorramos inicializar el valor de S e ir comparando, el bucle se repite de forma automática, la sintaxis es FOR variable = inicial TO final [STEP suma] en el que usamos una variable por su nombre, que partirá de un valor inicial, y se irá sumando el valor indicado por STEP, hasta que se sobrepase al valor final, momento en que se sale del bucle
Paso Valor de N Valor de R Valor de S
130 INPUT N
<Se pide el número>
5 Indeterminado Indeterminado
170 LET R=1 5 1 Indeterminado
180 IF (N=0) THEN GOTO 230
<NO es 0, comienza el bucle>
5 1 Indeterminado
190 FOR S=1 TO N 5 1 1
PASO 1 POR EL BUCLE      
200 LET R=S*R 5 1 1
220 NEXT S
<Es menos, seguir el bucle>
5 1 2
PASO 2 POR EL BUCLE      
200 LET R=S*R 5 2 2
220 NEXT S
<Es menos, seguir el bucle>
5 2 3
PASO 3 POR EL BUCLE      
< 200 LET R=S*R 5 6 3
220 NEXT S
<Es menos, seguir el bucle>
5 6 4
PASO 4 POR EL BUCLE      
200   LET R=S*R 5 24 4
220 NEXT S
<Es menos, seguir el bucle>
5 24 5
PASO 5 POR EL BUCLE      
200 LET R=S*R 5 120 5
220 NEXT S
<Es mayor, fin del bucle>
5 120 6

Podemos usar STEP para indicar decremento, usando un valor negativo de incremento, si queremos usar bucle que empiece por 10 y llegue hasta 1 decrementando de uno en uno, usaremos FOR i=10 TO 1 STEP -1.

Podemos usar STEP para indicar que cuente de n en n, no tiene por qué ser uno, por ejemplo sumaremos todos los números múltiplos de 2 menores de cien, usaremos un bucle FOR i=0 TO 99 STEP 2, lo que hará un bucle  con los valores 0,0+2=2, 2+2=4, 4+2=6, etc. Si queremos multiplicar todos los números múltiplos de 13 menores de 130 inclusive, podemos usar FOR i=130 TO 0 STEP -13 (lo que dará 130, 117, 104,…, 13, 0) o bien FOR i=0 TO 130 STEP 13 (lo que dará 0, 13, 26,…, 117, 130).

En versiones más modernas del BASIC existen otras instrucciones de control de bucle, pero solo el FOR está disponible en todas las versiones de BASIC de nuestras máquinas.

Subrutinas

La sentencia GOTO hemos visto que transfiere la ejecución del programa a otra parte del mismo, y si queremos regresar a donde estábamos debemos usar otro GOTO. Para evitar este mecanismo, podemos usar el manejo de subrutinas, que nos ayudará en la definición de partes del programa reutilizables en otros programas, usando las instrucciones GOSUB y RETURN.

Una subrutina es un trozo del programa que se ejecuta por si mismo, de manera independiente del resto del programa, y que podemos llamar cuando queramos, devolviendo el control al punto donde la hemos llamado de forma automática, sin necesidad de sabe desde que punto la hemos llamado. Voy ha convertir nuestro programa de cálculo de factoriales en una subrutina, y nos dará la diferencia entre el factorial de dos números:

100 REM -------------------------------------------------------------
110 REM - Calculo de diferencia de dos factoriales, JAVaqué 2012    -
120 REM -------------------------------------------------------------
130 INPUT "Primer Número: ";N        :REM Pedimos el primer número
140 GOSUB 1000                       :REM Llamamos a la subrutina
150 IF (R=-1) THEN GOTO 130          :REM No para negativos
160 LET N1=N : LET F1=R              :REM Guardamos el valor
170 INPUT "Segundo Número: ";N       :REM Pedimos el segundo número
180 GOSUB 1000                       :REM Llamamos a la subrutina
190 IF (R=-1) THEN GOTO 130          :REM No para negativos
200 LET N2=N : LET F2=R              :REM Guardamos el valor
210 PRINT ,N1;"! (";F1;")- ";N2;"! (";F2;") = ";F1-F2 
220 PRINT : PRINT                    :REM Dejamos línea en blanco
230 INPUT "¨Otro? (S/N): ";O$        :REM Preguntamos si seguimos o no
240 PRINT : PRINT                    :REM Dejamos línea en blanco
250 IF (O$="S") OR (O$="s") GOTO 130 :REM Si es si seguimos
260 IF (O$="N") OR (O$="n") GOTO 280 :REM Si es no salimos
270 PRINT "Responda S o N": GOTO 220 :REM Si no es si o no repetir pregunta
280 PRINT "Fin del programa"
290 STOP                             :REM Necesario para finalizar
1000 REM -------------------------------------------------------------
1010 REM - Subrutina de cálculo de un facTOrial.                     -
1020 REM - Pasamos en N el número a calcular                         -
1030 REM - Retorna en F el factorial, o -1 si no puede calcularlo    -
1040 REM -------------------------------------------------------------
1050 IF (N>=0) THEN GOTO 1090       :REM No para negativos
1060 PRINT "ERROR: No se puede calcular el factorial de un negativo"
1070 LET R=-1                       :REM Marcamos el error
1080 RETURN                         :REM Salimos
1090 LET R=1                        :REM En R tendremos el resultado
1100 FOR S=1 TO N                   :REM Bule de 1 a N
1110   LET R=S*R                    :REM Multiplicamos por el anterior
1120 NEXT S                         :REM Bucle
1130 RETURN                         :REM Salimos

Tras pedir el primer número, llamamos a la nueva subrutina en la línea en verde usando GOSUB nro_de_linea, esto equivale a hacer GOTO 1000, y hacemos el cálculo del número factorial. Si el número es negativo ponemos el resultado como -1 indicando error y retornamos a la llamada usando la instrucción RETURN, que en este caso sería como hacer un GOTO 150. Si el número es correcto, calculamos el factorial  y al final volvemos con otro RETURN, lo que nuevamente sería equivalente a hacer un GOTO 150. Luego pedimos el segundo número, y llamamos nuevamente a la subrutina, lo que equivale a hacer un GOTO 1000, pero cuando finalice la subrutina con el RETURN primero o con el segundo, hará esta vez un GOTO 190, por lo que podemos usar la misma subrutina desde dos partes de nuestro programa, sin preocuparnos de desde donde se llame, cuando finalice continúa el programa por donde estaba, lo que es una gran ventaja, ya que no hay que preocuparse de donde era ese lugar. 

Solo existe una limitación, hay una pila de llamadas a subrutinas, en donde el programa guarda la dirección de retorno de la misma, y esta pila tiene un tamaño limitado, dependiendo de la versión del BASIC serán mas o menos, el mínimo creo que son 7, por lo que no podemos usar llamadas anidadas a subrutinas en muchos niveles, para evitar esto. Por otro lado, siempre que se pueda es mejor hacer un salto a una subrutina que poner muchos GOTO, ya que mejora la legibilidad del programa, sobre todo pensando que se puede salir de una subrutina desde cualquier parte, sin pensar a donde regresamos, evitando muchos GOTO a la misma línea.

En esta entrada hemos aprendido a manejar los bucles FOR y las subrutinas. En la próxima entrada seguiré con los bucles hablando de bucles anidados, y mejoraré el control del programa usando ON GOTO y ON GOSUB (que no son del primer BASIC pero si están en casi todos), y mejoraré nuestra calculadora. Luego nos queda DEF FN y READ/DATA para terminar el repaso de los comandos estándar. Animaros a teclear estos programas y a idear nuevos, entenderlo bien, e intentar mejorarlo, solo se aprende a programar programando.


Jose Antonio Vaqué Urbaneja, podéis contactar conmigo en mi mail o ver más cosas en mi blog