jueves, 30 de agosto de 2012

El sonido en 8 bits (III): En el Amstrad CPC

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

El sonido desde el BASIC en un Amstrad CPC


El sucesor del Spectrum en el mercado fue claramente el Amstrad CPC, sobre todo desde el momento en que Amstrad adquirió a la empresa de Sinclair, en este artículo hablaré de como hacer sonar a este aparato desde BASIC.

El sonido en el Amstrad CPC

La gama CPC utiliza el chip de sonido General Instrument AY-3-8912, que proporciona tres canales configurables de sonido para generar ondas cuadradas y ruido blanco. El aparato integra un pequeño altavoz de 4 centímetros mono interno, con un potenciómetro de control de volumen. Si deseamos salida estéreo hay que usar una salida de sonido mediante una jack de 3,5 mm para auriculares.

Por la forma de trabajar del equipo, la salida estéreo y la mono estaban separadas, ya que la implementación de este chip es que usaba el canal 1 como la izquierda, el 2 como el centro y el 3 como la derecha, por lo que en todos los juegos se escucha por el altavoz la música de fondo y los efectos sencillos, y en algunos se sacaba por la toma de auriculares música o efectos de sonido mas elaborados.

Es posible reproducir muestras de sonido digital en una resolución aproximada de 5 bits enviando una trama de valores al chip de sonido, pero como esta técnica consume muchos recursos de procesador, no se puede usar durante los juegos, por eso se usó principalmente en las pantallas del menú del juego, o en escenas no jugables, en juegos como Chase H.Q., Meltdown, y RoboCop.

Sonido desde BASIC

Desde el BASIC se usa la instrucción SOUND, que permite emitir sonidos con bastante control desde el programa. La sintaxis es (entre corchetes la parte opcional):

SOUND canal, nota[,duración][,volumen][,envolvente volumen][,envolvente tono][,ruido]

  • Canal indica por que canal deseamos emitir el sonido, lo que permite producir varios sonidos a la vez, uno por cada canal. Los canales se denominan 1, 2 y 4, Si queremos emitir el mismo sonido por dos canales, solo debemos sumarlos, así indicamos 5 (1+4) para los dos canales izquierdo y derecho, o 7 (1+2+4) para todos los canales.
  • Nota es la frecuencia de la nota que queremos ejecutar, disponemos de 8 octavas desde la -3 hasta la 4. Las notas de la octava cero, la octava central, son DO=478, RE=426, MI=379, FA=358, SOL=319, LA=284, SI=253
  • Duración es el tiempo en centésimas de segundo que queremos que suene la nota, si no indicamos nada durará 20 centésimas de segundo. Si queremos que suene un segundo indicaremos el valor 100
  • Volumen al que queremos que suene la nota, que puede ir desde 0 (silencio) a 7 (máximo).

Como primer ejemplo pondré este que ejecuta teóricamente un silbido de Goku de Dragon Ball

100 REM Las notas a usar
110 DO=478: RE=426: MI=379: FA=358: SOL=319: LA=284: SI=253
120 REM Bucle de lectura
130 READ a$
140 IF a$=”” THEN STOP
150 IF a$=”Do” THEN SOUND 1, DO
160 IF a$=”Re” THEN SOUND 1, RE
170 IF a$=”Mi” THEN SOUND 1, MI
180 IF a$=”Fa” THEN SOUND 1, FA
190 IF a$=”Sol” THEN SOUND 1, SOL
200 IF a$=”La” THEN SOUND 1, LA
210 IF a$=”Si” THEN SOUND 1, SI
220 GOTO 130
230 REM La melodía
240 DATA “Re”,“Si”,“La”,“Sol”,“La”,“Si”,“Re”,“Si”,“La”,“Sol”
250 DATA “Re”,“Si”,“La”,“Sol”,“La”,“Si”,“Mi”,
260 DATA “Re”,“Si”,“La”,“Sol”,“La”,“Si”,“Re”,“Si”,“La”,“Sol”
270 DATA “Mi”,“Si”,“La”,“Sol”,“La”,“Si”,“Mi”
280 DATA “La”,“Mi”,“Re”,“Mi”,“Re”,“Mi”,“Re”,“Si”
290 DATA “La”,“Si”,“Re”,“”
Errata corregida: en el artículo publicado pone en las líneas 150 a 210 siempre DO

Las envolventes

Una característica de los CPC es que permiten hacer variaciones sobre un sonido mientras se emite, pudiendo variar el volumen o el tono del sonido, para lo que se usan las envolventes, que se especifican usando el comando ENV y ENT respectivamente.

Para indicar que el volumen debe variar mientras se reproduce el sonido deberemos crear una "envolvente de volumen", usando:

ENV nro,etapa, cambio,duración[etapa, cambio,duración][etapa, cambio,duración]
  • Nro es el número que identifica la envolvente, de esta manera podemos tener varias preparadas a la vez, podemos tener hasta 15 diferentes.
  • Etapa es la cantidad de etapas que queremos tener
  • Cambio es la cantidad en que aumentamos el volumen, puede ser positivo para subir, negativo para bajar, o cero para mantener
  • Duración es cuanto dura cada una de las etapas
Cada envolvente puede tener hasta tres tramos, ejecutándose uno tras otro, de forma que podemos subir y bajar el volumen en una sola envolvente. Un ejemplo de una etapa sería este:

ENV 1,5,3,20
SOUND 1,478,0,0,1
ENV 2,12,1,5,1,0,20,6,-2,20
SOUND 1,426,0,0,2

La primera envolvente define que tenemos 5 etapas de aumento, en cada etapa subiremos tres unidades el volumen, y cada etapa durará 20 centésimas de segundo. Luego se emite un DO, que parte del volumen cero, y mediante la envolvente 1 irá subiendo de 3 en 3 unidades hasta que llegue a 15, y la duración total del sonido será la del al envolvente, por lo que no indicamos duración, que será en este caso sería de 5x20, 1 segundo.

La segunda envolvente tiene tres tramos, el primero tiene 12 tramos de 5 centésimas cada uno, subiendo una unidad de volumen en cada tramo a partir de lo indicado en el SOUND, luego tiene una etapa en la que no toca el nivel del sonido durante 20 centésimas, y termina con 6 etapas de bajada de 2 unidades cada una, que duran 20 centésimas.

 De igual manera se puede cambiar el tono de la nota con la envolvente de tono por tramos y etapas, usando la sentencia:

ENT nro,etapa,cambio,duración[etapa, cambio,duración][etapa, cambio,duración]
  • Nro es el número que identifica la envolvente de tono, de esta manera podemos tener varias preparadas a la vez, podemos tener hasta 15 diferentes.
  • Etapa es la cantidad de etapas que queremos tener
  • Cambio es la cantidad en que cambiamos el tono de la nota, puede ser positivo para subir, negativo para bajar, o cero para mantener
  • Duración es cuanto dura cada una de las etapas
Cada envolvente puede tener hasta tres tramos, ejecutándose uno tras otro, de forma que podemos subir y bajar el tono de la nota en una sola envolvente. Un ejemplo de una etapa sería este:

ENT 1 ,80 ,-4 ,1
SOUND 1,478,50,15 ,0 ,1

El sonido comienza con una frecuencia de 478 (DO), la modificamos en 80 pasos, bajando 4 unidades de tono en cada paso, y estos pasos tienen una duración de una centésima de segundo. Como usamos un cero en la orden SOUND para envolvente de volumen no se usa ninguna, pero se pueden combinar ambos efectos.

Ruido blanco

Podemos añadir un último parámetro a la orden SOUND, que solo puede ser un uno, para indicar que emita ruido a la vez que el sonido, alterando el mismo. Este tipo de ruido se denomina ruido blanco por ser una señal completamente aleatoria

10 FOR i=0 TO 10
20   f=INT(RND*20)
30   SOUND 1,f,25,10,0,0,1
40 NEXT

Para la programación en código máquina del AY-3-891x dedicaré otra entrada, ya que la serie AY-3-8910/AY-3-8912/ AY-3-8913 son iguales internamente, solo cambia el número de puertos de entrada de que disponen, y han sido usados en aparatos como, Amstrad CPC, MSX, Atari ST, Oric 1 y Atmos, Timex, Spectrum 128/+2/+3 o Spectravideo entre otros, en la tarjeta de sonido Mockingboard para el Apple II, o en videoconsolas como la Intellivision o la Vectrex.



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

miércoles, 29 de agosto de 2012

Introducción a la programación usando BASIC (IV): Cadenas, GOTO

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

CONTROL DEL PROGRAMA Y MANEJO DE CADENAS. EJEMPLO: CALCULADORA

En la entrada anterior presentamos la instrucción básica de control del programa, la sentencia IF condición THEN acción, que junto al uso del GOTO permite realizar cualquier programa, mas adelante usaremos otras sentencias de control, que agilizan el manejo del programa, pero vamos a centrar esta entrada en estas dos, junto con instrucciones de manejo de cadenas, para hacer una nueva versión de la calculadora.

Vamos a hacer una calculadora que nos pregunte que operación deseamos usar, la escribamos en una solo línea, la analice y la ejecute. Así podemos poner “3+2-7” y debe darnos como resultado -2. De momento usaremos solo operaciones sencillas, ya iremos ampliando. Iremos por partes (al final el programa completo)


100 REM ********************************************************
110 REM Calculadora. J.A.Vaque 2011
120 REM ********************************************************
130 REM
140 REM ********************************************************
150 REM Presentar la pantalla
160 REM ********************************************************
170 CLS
180 PRINT "Calculadora simple. Version 3.0"
190 PRINT "*******************************"
200 PRINT
210 REM Introducir valores
220 PRINT "Introduzca la operación a efectuar: ";
230 INPUT P$
240 IF (P$="FIN") OR (P$="fin") OR (P$="Fin") THEN GOTO 680


La primera parte es sencilla, empieza por comentarios que ponemos el nombre del programa, el autor y la fecha. Luego presenta la pantalla inicial entre las líneas 140 y 200, seguido de la pregunta principal, el INPUT en que se guarda el valor de lo introducido en la variable P$. Lo primero es analizar esa cadena, si hemos elegido “FIN” acaba el programa. Por ejemplo podemos escribir la expresión 32-23*2
 
250 REM ********************************************************
260 REM Analizamos la cadena. Inicializamos valores necesarios
270 REM ********************************************************
280 LET NUM=0
290 LET RES=0
300 LET O$=""
310 REM ********************************************************
320 REM Analizamos la cadena. Analizar y ejecutar
330 REM ********************************************************
340 IF LEN(P$)=0 THEN GOTO 520
350 LET C$=LEFT$(P$,1)
360 LET P$=RIGHT$(P$,LEN(P$)-1)
370 LET OK=0
380 IF (C$>="0") AND (C$<="9") THEN GOTO 460
390 IF (C$="+") OR (C$="-") OR (C$="*") OR (C$="/") THEN GOTO 520
400 IF OK=1 THEN GOTO 340
410 PRINT "Error en la cadena analizada"
420 STOP

Ya tenemos en la variable P$ una cadena con una operación, podemos empezar a analizarla, para lo que primero inicializamos tres variables que nos controlarán el proceso, en NUM iremos guardando los números que vamos leyendo, en nuestro ejemplo 32, 23 y 2. En la variable RES guardaremos el resultado final de la operación. En la variable O$ guardaremos la operación a efectuar, en nuestro ejemplo menos y por.

Empieza el análisis en la línea 340, para lo que vamos sacando caracteres de la cadena P$, y el proceso finalizará cuando la cadena esté vacía. En ese momento tenemos que ejecutar la última operación que tengamos pendiente con el último número que tengamos encontrado. Eso es lo que hacemos en la línea 340, cuando ya hemos terminado de analizar saltamos a la operación.

Luego en la línea 350 guardamos el primer carácter de la cadena en la variable C$, para lo que usamos una operación de cadenas, LEFT$(cadena, longitud) extrae de una cadena los caracteres de su izquierda con la longitud que indiquemos. En la línea 360 quitamos el primer carácter de la cadena, usando la operación contraria, RIGHT$(cadena, longitud) extrae de la cadena los últimos caracteres por su derecha. Para ello usamos la función LEN(cadena), que nos retorna la longitud total de la cadena, y al restarle uno sacamos los caracteres de la cadena menos el primero.

NOTA: En el Spectrum no existe LEFT$ ni RIGHT$, en su lugar se usa Cadena$(ini TO fin), en donde Cadena es una variable, ini es la posición inicial, fin la final, si no se indica inicial es desde el principio, si no se indica final es hasta el fin. Por eso hay que cambiar esas dos líneas para que ponga:


350 LET C$=P$(1 TO 1)
360 LET P$=P$(2 TO)

En la línea 370 ponemos un indicador, que nos dirá si los siguientes procesos han encontrado un carácter correcto. Si el carácter a analizar es un número, en la línea 380 lo vemos y enviamos a la línea 460, donde está la rutina en que montará los números. Si es una operación, la línea 390 la reconoce y envía a la rutina que ejecuta la operación. Ambas rutinas cambian el indicador de carácter correcto encontrado, si no lo han hecho el carácter no es bueno, y en las líneas 400 a 420 parar el programa.

430 REM ********************************************************
440 REM Guardarse el numero
450 REM ********************************************************
460 LET OK=1
470 LET NUM=NUM*10+VAL(C$)
480 GOTO 340
490 REM ********************************************************
500 REM Ejecutar la operacion
510 REM ********************************************************
520 LET OK=1
530 IF (O$<>"") THEN GOTO 560
540 LET RES = NUM
550 GOTO 600
560 IF (O$="+") THEN RES = RES + NUM
570 IF (O$="-") THEN RES = RES - NUM
580 IF (O$="*") THEN RES = RES * NUM
590 IF (O$="/") AND (NUM<>0) THEN RES = RES / NUM
600 LET O$=C$
610 LET NUM=0
620 IF (LEN(P$)<>0) THEN GOTO 340
630 REM ********************************************************
640 REM presentar el resultado
650 REM ********************************************************
660 PRINT "Resultado: ";RES
670 GOTO 200
671 REM ********************************************************
672 REM Final del programa
673 REM ********************************************************
680 PRINT
690 PRINT "Fin del programa"
700 PRINT

Nos quedan tres rutinas, la que guarda el número que hemos encontrado está entre las líneas 460 y 480, solo pone el indicador de correcto, y luego añade el dígito al número que llevamos, para lo que solo tienes que multiplicar lo que llevamos por 10 y sumarle el número encontrado. Como el número encontrado es un carácter, debe convertirse en número, para ello usamos la función VAL(cadena), que nos devuelve el valor numérico de una cadena de caracteres.

La rutina de análisis de la operación primero pone el indicador de correcto, y luego mira si ya tenemos una operación, si es la primera, entonces solo hay que guardarse el número que hemos encontrado hasta el momento como el primer resultado y saltamos a las parte que guarda la operación para después en O$, borra el número encontrado para comenzar el siguiente, y mientras queda cadena, sigue procesando. Si ya hay una operación, salta a la línea 560, en la que primero hay que ejecutar la operación anterior, que tenemos guardada en O$, luego guardamos la operación, borramos el número, y mientras quede cadena seguir procesando.

Lo último es la rutina que está entre la línea 660 que presenta el resultado, y luego volvemos a empezar pidiendo otras operaciones, y entre las líneas 680 y 700 está el final del programa.

Control de errores

La línea 590 contiene un control de errores, como no se puede dividir por cero, antes de realizar esa operación se verifica que sea posible, si no es posible no se hace. El uso del indicador y el error de las líneas 400 a 420 es otro tipo de control de errores, ambos son necesarios para que el programa no se pare por errores.

En esta entrada hemos reforzado el uso de las instrucciones IF y GOTO, hemos aprendido algunas funciones de manejo de cadenas, y hemos usado un pequeño control de errores, mejorando la calculadora básica. En la próxima entrada seguiremos con control del programa, mejoraremos esta calculadora usando otras funciones de control de flujo. Animaros a teclear este programa, 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


EL PROGRAMA COMPLETO


100 REM ******************************************************
110 REM Calculadora. J.A.Vaqué 2011
120 REM ******************************************************
130 REM
140 REM ******************************************************
150 REM Presentar la pantalla
160 REM ******************************************************
170 CLS
180 PRINT "Calculadora simple. Version 3.0"
190 PRINT "*******************************"
200 PRINT
210 REM Introducir valores
220 PRINT "Introduzca la operación a efectuar: ";
230 INPUT P$
240 IF (P$="FIN") OR (P$="fin") OR (P$="Fin") THEN GOTO 680
250 REM ******************************************************
260 REM Analizamos la cadena. Inicializamos valores necesarios
270 REM ******************************************************
280 LET NUM=0
290 LET RES=0
300 LET O$=""
310 REM ******************************************************
320 REM Analizamos la cadena. Analizar y ejecutar
330 REM ******************************************************
340 IF LEN(P$)=0 THEN GOTO 520
350 LET C$=LEFT$(P$,1)
360 LET P$=RIGHT$(P$,LEN(P$)-1)
370 LET OK=0
380 IF (C$<="0") AND (C$>="9") THEN GOTO 460
390 IF (C$="+") OR (C$="-") OR (C$="*") OR (C$="/") THEN GOTO 520
400 IF OK=1 THEN GOTO 340
410 PRINT "Error en la cadena analizada"
420 STOP
430 REM ******************************************************
440 REM Guardarse el número
450 REM ******************************************************
460 LET OK=1
470 LET NUM=NUM*10+VAL(C$)
480 GOTO 340
490 REM ******************************************************
500 REM Ejecutar la operación
510 REM ******************************************************
520 LET OK=1
530 IF O$<> "" THEN GOTO 560
540 LET RES = NUM
550 GOTO 600
560 IF (O$="+") THEN LET RES = RES + NUM
570 IF (O$="-") THEN LET RES = RES - NUM
580 IF (O$="*") THEN LET RES = RES * NUM
590 IF (O$="/") AND (NUM<>0) THEN LET RES = RES / NUM
600 LET O$=C$
610 LET NUM=0
620 IF LEN(P$)<>0 THEN GOTO 340
630 REM ******************************************************
640 REM presentar el resultado
650 REM ******************************************************
660 PRINT "Resultado: ";RES
670 GOTO 200
671 REM ******************************************************
672 REM Final del programa
673 REM ******************************************************
680 PRINT
690 PRINT "Fin del programa"
700 PRINT

martes, 28 de agosto de 2012

Electrónica de Andar por Casa, Artículo 5: El polímetro

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

Electrónica de andar por casa, by javu61


El nombre correcto del aparato del que hablaré debe ser multímetro o polímetro, ya que sirven para efectuar múltiples tipos de medición, pero se les conoce como tester, y es el instrumento básico para la electrónica.

El tester, herramienta básica de la electrónica

Es un instrumento portátil para medir directamente magnitudes eléctricas activas (voltaje o tensión o potencial, amperaje o corriente) y pasivas (resistencias), e indirectamente puede medir otras variables como la capacidad de un condensador. Las medidas pueden realizarse para corriente continua o alterna, y en varios márgenes de medida para cada una. Los primeros eran analógicos, pero hoy día son digitales, salvo los que pretenden tener aspecto retro.

El aparato se basa en la ley de Ohm, una de las bases de la electrónica, que es muy sencilla, dice que el voltaje que circula por un punto es el producto de la intensidad de la corriente en el punto y la resistencia existente en dicho punto, lo que relaciona las tres magnitudes básicas de la electricidad:

V = I . R      I = R / V (corregida errata)  I = V / R       R = V / I      (Ley de Ohm)

Ampliación sobre lo publicado: Aunque creo que la definición anterior es suficiente para nuestros propósitos, para ser mas precisos hay que decir que el voltaje es la diferencia de potencial entre dos puntos de un circuito, por lo que en lugar de hablar del voltaje en un punto hay que decir que la diferencia de potencial existente entre dos puntos es el producto de la intensidad que circula entre dichos puntos y la resistencia existente entre dichos puntos. Por eso para medir voltajes hay que poner siempre una punta en un punto de masa y la otra en el punto del circuito a medir.

El aparato internamente solo es un voltímetro o un amperímetro, y dispone de una batería interna, por lo que puede generar una corriente de valor conocido cuando lo necesita, y aplicando la fórmula calcula la magnitud a medir.

También hay que saber que solo saben medir corriente continua, por lo que las mediciones en alterna las realiza a través de un conversor, y solo dan medidas del valor eficaz de la corriente, que no coincide exactamente con la que pasa por el punto.

Descripción del aparato

Aunque hay varios diseños, todos son básicamente iguales. Constan de una pantalla de aguja o digital en la que se presenta la medida, una ruleta para seleccionar el tipo de medición a efectuar, y varias tomas para las puntas de prueba, una es siempre negra que representa la masa del aparato, en ella siempre se introduce el cable negro, otra es roja para medir voltajes/resistencias, y las restantes sirven para medir intensidades, el cable rojo se introduce en una de esas tomas según el tipo de medida que deseemos. Pero si alguno tiene uno como el de la foto, que me lo diga, mi padre tenía uno de estos y es el que yo usaba cuando di mis primeros pasos en el tema, y me gustaría tener uno así.

Pueden tener entradas adicionales para medir, la más común mide transistores, formada por un conjunto de 8 agujeros en los que se introducen las patas de los transistores, pero los hay con entradas de sondas de temperatura, de medición de condensadores, o de otras mediciones. Pueden tener iluminación de la pantalla, o un botón Hold para fijar la lectura y poder verla al quitar las sondas.

La ruleta está dividida en 5 zonas, con varias escalas en cada zona, la de resistencias-diodos, la de voltaje en continua, la de voltaje en alterna, la de intensidad en continua, y la de intensidad en alterna, aunque hay aparatos que solo tienen dos selectores, uno de Voltios-Ohmios-Amperios y otros de Continua-Alterna, y la escala se ajusta automáticamente.

Mediciones de resistencias

Para medir el valor de una resistencia, primero debemos poner la ruleta en la escala de resistencias apropiada, conectar el cable rojo a la toma de voltios/Ohmios, y luego tocar con las puntas de las sondas los alambres que salen de la resistencia. Nos debe dar en la pantalla el valor de la misma, siempre teniendo en cuenta que las resistencias se fabrican con una tolerancia, por tanto una del 10% de 800Ohmios puede dar un valor de entre 820 y 880 (corregida errata) 720Ohmios y 880Ohmios, aunque normalmente no se van tanto.

Si la resistencia está en un circuito, al medir no mediremos su valor, sino el valor de la resistencia del circuito, que se verá afectada por el resto de componentes, por eso para medir hay que levantar una pata de la resistencia. Si medimos fuera del circuito, un error común es sujetar la resistencia con las manos, esto es lo mismo de antes, la piel humana tiene una resistencia que alterna el valor de la medida. Podéis hacer la prueba simplemente sujetando las puntas con los dedos y variando la escala, encontrareis la resistencia de la piel, y si apretáis las sondas con los dedos veréis que varía.

Mediciones de continuidad

Para medir la continuidad, y saber si hay conexión entre dos puntos, o si un cable está roto, mediremos la resistencia. Si hay continuidad la resistencia será muy baja, cero o cercana a cero, por lo que solo debemos usar la escala mas baja de resistencia y medirla. La mayoría de los tester modernos tienen una posición específica para ello, marcada con el símbolo de diodos, ya que también se usa para comprobarlos. En esta posición, el tester emitirá un pitido si hay continuidad, por lo que nos ahorramos estar mirando la pantalla, y es muy cómodo. Esta es una de las mediciones básicas y mas utilizadas del aparato, de hecho con esta medición y la de voltajes tenemos resueltas la mayoría de nuestras mediciones, tanto en nuestros aparatos como en la electrónica general.


Mediciones de voltaje

Para medir el voltaje de una fuente, ponemos el tester en posición voltios en la escala apropiada, conectar el cable rojo a la toma de voltios/Ohmios, y ponemos la punta negra en un lugar del aparato que sea masa, y la roja en el punto en que queramos medir, en la pantalla aparecerá el valor del voltaje en dicho punto. Un error común es no poner la masa adecuadamente, y un accesorio útil es una pinza de cocodrilo, para fijar el cable de masa y medir más cómodamente en el aparato.


Para medir el voltaje de un alimentador, introducimos el cable rojo en el conector, y tocamos con el negro el exterior. Si la medición es positiva, eso quiere decir que el interior del conector da voltaje positivo, y el exterior negativo (positivo al centro). Si la medición es negativa, quiere decir que el interior del conector es negativo, y el exterior positivo (negativo al centro). Esto se representa con este símbolo en las fuentes, en este caso el centro es positivo y el exterior negativo.

Mediciones de amperaje

Para medir el amperaje hay que complicar un poco el tema, ya que lo que se mide es la corriente que atraviesa el aparato, debe efectuarse en serie con lo que medimos, no en paralelo. Ponemos el tester en posición amperios en la escala apropiada, conectar el cable rojo a la toma de amperios apropiada, y ponemos las dos puntas del aparato haciendo un puente entre lo que se quiere medir. Por ejemplo para medir el consumo de un aparato, hay que desoldar un hilo del conector de alimentación, y puentear con el teste ese hilo, cuando encendamos el aparato, la corriente que atraviesa el tester es la que consume el aparato, dándonos la lectura en la pantalla, como veis no es muy complicado, pero hay que modificar algo el circuito a medir, para que el aparato pueda tomar la lectura de la corriente. Con esto podemos saber cuanto consume realmente nuestros aparatos, ya que las fuentes suelen ir sobredimensionadas para evitar problemas, o para poder enchufar otros periféricos al aparato.


El siguiente capítulo empezamos con la electrónica analógica, y lo dedicaré a las fuentes de alimentación.

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

lunes, 27 de agosto de 2012

Memorias de núcleos magnéticos

Indice de entradas sobre Historia de la Informática

Corregido el 28/02/2013

Los primeros ordenadores usaban memorias de propagación o de retardo, como las de mercurio o los tubos Williams, había otras como las que usaban un alambre al que se hace vibrar, según la longitud tardaba más o menos en detectarse al final del alambre la vibración. Pero todas estas memorias eran delicadas, las de propagación dependían mucho de la dilatación del medio, por lo que era importante mantener una temperatura constante. Los tubos Williams eran susceptibles a interferencias, y tendían a de-sincronizarse tras un tiempo funcionando, por lo que se buscó un nuevo sistema, y el mejor fueron las memorias de ferritas, ideadas por Jay Forrester (más conocido como padre de la Dinámica de Sistemas), al que le costó 7 años convencer a las empresas de su uso, pero que luego fueron adoptadas de forma muy rápida (y sin pagar derechos de patente, por lo que Jay pasó otros 7 años litigando), y fueron usadas en todos los ordenadores hasta el desarrollo de las memorias en chip, incluyendo las primeras calculadoras electrónicas de sobremesa.

Si por un hilo circula una corriente eléctrica, se genera un campo magnético que lo rodea y cuya dirección depende del sentido de la corriente, por lo que es controlable. Si agarramos con la mano derecha el hilo (aunque seamos zurdos), extendiendo el pulgar en la dirección de la corriente, los otros dedos indican la dirección del campo magnético que envuelve al hilo (regla de la mano derecha).

Si arroyamos un hilo sobre un material ferroso, como un clavo, se concentra el campo magnético imantando el clavo y formando un electroimán. Al contrario, un anillo ferroso puede imantarse en uno u otro sentido, dependiendo del sentido de la corriente de un hilo que lo atraviese, solo es necesario enviar una corriente de un determinado valor, y el sentido en que recorre la corriente el anillo cambia. Además, podemos detectar el sentido del campo magnético del anillo, viendo cómo afecta a una corriente que circule por el hilo.

Bien, ya tenemos la posibilidad de almacenar un solo bit, usando un anillo y un hilo. Pero si necesitamos muchos bits, no podemos usar un hilo por cada uno, si queremos almacenar 1K byte, dispondremos de 8.192 bits, y no es practico usar 8.192 hilos, por lo que se recurrió a la solución de establecerlos en filas y columnas, poniendo un anillo en cada intersección. Si por cada hilo se envía la mitad de la corriente necesaria para hacer cambiar el sentido de magnetización del anillo, solo afectará al anillo situado en la intersección de la fila y columna, cambiando el estado de ese anillo pero no los de alrededor. Esta disposición permite ahorrar muchos hilos, si usamos 8 de columna y 1.024 de fila podemos manejar 1K, y hemos reducido de 8.192 a 1.032 los hilos necesarios. Por razones de interferencia los anillos se disponían alternativamente a izquierdas o derechas, como se aprecia en la figura de ejemplo.

Para leer un byte, simplemente se envía la señal de cambio de valor por el hilo de fila, para que cambien a cero todos los anillos de la fila, si el anillo está a cero no pasa nada, pero si está a uno, el cambio de sentido del campo magnético induce una corriente en el hilo de columna, que es detectada. De esta forma se puede leer un byte completo cada vez, ya que no es práctico leer bit a bit. Como hemos puestos a cero todos los anillos de la fila, la lectura es destructiva, por lo que es necesario nada mas leer un dato, volverlo a escribir en la memoria, por lo que al contrario de las memorias modernas, eran más lentas en lectura que en escritura.

Para mejorar la detección de los valores, no se usaba el mismo hilo para lectura y escritura, por lo que habitualmente las ferritas estaban atravesados por tres hilos, el de columnas era siempre de selección, y disponían de un hilo de filas para lectura y otro para escritura.



Como hemos visto, hacían falta muchos hilos para una memoria de 1K, por lo que para optimizar el diseño en lugar de 1024x8 se empleaban sistemas más cuadrados (también hay que tener en cuente que en esa época las palabras no eran todavía de 8 bits, lo normal eran 11, 13, 21 y hasta 35 bits por byte). Aun así eran muchos hilos, por lo que el diseño se complicó, pasando de una disposición 2D, a una denominada 3D, en la que se disponían las ferritas en capas, pudiendo tener varias capas de ferritas una junto a la otra, todas atravesadas por los mismos hilos de fila y columna, por lo que fue necesario añadir un cuarto hilo, el de inhibición, que permitía seleccionar que plano de ferritas deseábamos usar, para ello se enviaba a una señal de grabación pero negativa por ese hilo, de forma que al cruzarse en los anillos no deseados se anulasen la señal de lectura/escritura con la de inhibición. Por razones de hilado este hilo se tejía en diagonal, formando el habitual núcleo de 4 hilos, que es el logotipo de la informática en España, ya que ningún elemento ha revolucionado tanto la informática y la ha hecho prosperar más que las introducción de estas memorias, que fueron un avance fundamental.





Las primeras unidades usaban anillos de 8mm de diámetro, pero conforme más pequeño fueran los anillos, menos energía hacía falta para manejarlos y menos se interferían entre sí, por lo que podían juntarse más, y se conseguía ampliar la capacidad de las memorias y aumentar su velocidad, lo que hizo que las últimas memorias llegaran a tener 0'2 mm de diámetro, apenas visibles por el ojo.

En esta foto del proyecto Apolo de la NASA hay unas operarias "tejiendo" las ferritas, usando un microscopio para ello:


Una explicación mas detallada la podeis ver aquí

sábado, 25 de agosto de 2012

Cerrado por vacaciones

Tengo poco tiempo, demasiadas cosas siempre en el taller, me cuesta ir a correos a llevar los paquetes, el tiempo prefiero emplearlo en seguir reparando, y al final siempre me retraso en todo, y encima dejo mis cosas sin mirar.

Compré un IBM portable, que me costó un día poder probar solo por no tener sitio en la mesa, tengo el taller a tope de cosas, nunca tengo hueco en la mesa, no me caben mas cosas, acabo amontonando cosas una sobre otra, y mis cosas no las puedo ni tocar.

Tengo varios proyectos en espera desde hace mucho tiempo, tengo que restaurar mi TV con Pong incluido, tengo que mirar el IBM portable, tengo un portátil Amstrad 386sx que funciona, pero tengo que mirar la batería, tengo un Compac al que solo le falta el cable del alimentador, pero es de 5 hilos y tengo que mirar como va, tengo que revisar todo lo que tengo, pues hay cosas de las que ni me acuerdo que las tengo.

Tengo que poner en marcha todavía el Jupiter de hace un año, que me falta montar la salida de AV para poder probarlo, montar el clon del Spectrum y el nuevo clon del Jupiter.Tengo en mente montar una placa para convertir las Game Gear, de las que tengo varias placas que funcionan pero fallan las pantallas, en una consola de sobremesa, conectada a la tele, y con entrada de cartuchos de Game Gear o Master. 

Tengo que comprar una placa FPGA y montar una máquina con ella, aunque no se todavía cual, antes de que olvide del todo el VHDL.Y encima tengo que aprender de una puñetera vez inglés en condiciones, quiero hacer un master o comenzar otra ingeniería, tengo que ponerme a estudiar cosas que necesito para el trabajo.

Por eso he decidido cerrar de momento el taller de reparaciones, acabar con lo que tengo, y solo abrirlo para las quedadas y eventos, para poder dedicarme a mis máquinas y proyectos. Por tanto, si tienes alguna máquina que quieres que mire, tendrá que esperar.

jueves, 23 de agosto de 2012

Historia de la informática: Casi todos los de primera generación




Entrada actualizada varias veces, las últimas el 05/09/12 , el 07/09/12

El 02/03/26 en verde hay máquinas añadidas y la nueva columna Tipo con los valores:

  • M - Electromecánicas
  • R - Por Relés
  • L - Con lámparas de vacío 


Esta es una lista de casi todos los ordenadores de primera generación que he podido localizar. Marco en fondo amarillo los primeros en algo y los primeros de cada país.

Fecha País Maquina Tipo Comentarios
1936 Alemania Zuse Z1 M No Turing completa, calculadora programable, nunca funcionó del todo bien. Se desarrolló entre 1936 y 1939, momento en que comenzó la Z2.
1939 USA Arthur Halsey Dickinson (IBM) M Dispositivo electrónico temprano con salida visual; no programable. Fuente: listado histórico de ordenadores de válvulas.
1939 USA NCR 3566 (Joseph Desch) M Calculadora electrónica con tiratrones (para su uso en contadores, no en la parte lógica); no programable. Fuente: listado histórico de ordenadores de válvulas.
1940 Alemania Zuse Z2 M No Turing completa, calculadora programable, no pasó de prototipo.
  USA CNC R La Complex Number Calculator fue la primera calculadora no programable con relés de George Stibitz...
1941 Alemania Zuse Z3 R No Turing completa; calculadora programable; primera máquina plenamente operativa.
1942 USA Atanasoff–Berry Computer L No Turing completa, especializada en ecuaciones. Nunca funcionó del todo bien.
1943 GB Colossus computer L De propósito especial sólo para criptoanálisis, usado para descifrar comunicaciones alemanas.
  USA Relay Interpolator R Segunda calculadora con relés de Stibitz, uso militar, 440 relés.
1944 USA Harvard Mark-1 (IBM ASCC) R Primera de Aiken; no Turing completa; electro-mecánica; usada para tablas. Primer ordenador en USA.
  USA Ballistic Computer R Tercera calculadora con relés de Stibitz, con posibilidades de programación.
1945 USA Error Detector Mark 22 R Cuarta calculadora con relés de Stibitz.
1945 Alemania Zuse Z4 R No Turing completa; primera vendida a una empresa.
1946 USA ENIAC L Electronic Numerical Integrator And Computer. No Turing completa. Primer ordenador a lámparas, 100% electrónico. Trabajaba en base decimal.
  USA Model V R Quinta y mayor calculadora con relés de Stibitz; 10 toneladas, con programación limitada.
1944 USA Harvard Mark-2 R Segundo diseño de Aiken; calculadora con relés; usada para compilar tablas de datos.
1948 USA IBM SSEC R Selective Sequence Electronic Calculator. No Turing completa, calculadora electromecánica, primera en mezclar programa y datos en la entrada.
  USA IBM 604 R Calculadora electromecánica; no Turing completa.
  GB SSEM L Manchester Small-Scale Experimental Machine. Primera máquina con programa en memoria.
1949 USA IBM CPC R Card-Programmed Electronic Calculator. Calculadora electromecánica; no Turing completa.
  GB Manchester Mark 1 L Base para la Ferranti Mark I.
  Australia CSIRAC L Council for Scientific and Industrial Research Automatic Computer. Prototipo operativo, con programa en memoria. Primer ordenador en generar música.
  GB EDSAC L Electronic Delay Storage Automatic Calculator. En ella se creó el primer videojuego de la historia (OXO).
  USA BINAC L Binary Automatic Computer. Con doble procesador.
1950 USA ERA 1101 / UNIVAC 1101 L Trece en binario es 1101. Primer ordenador científico de ERA/UNIVAC.
  USA SEAC L Standards Eastern Automatic Computer. Primer ordenador operativo en EE. UU. con programa almacenado en memoria usando válvulas y diodos.
  USA SWAC L Standards Western Automatic Computer. Ordenador científico del NBS; entre los más rápidos del mundo en 1950.
  USA MADDIDA L Magnetic Drum Digital Differential Analyzer. Analizador diferencial digital con tambor magnético, de la Northrop Aircraft Corporation.
  USA Harvard Mark III R Tercer diseño de Aiken. Memoria en 7 tambores, CPU en 2 tambores.
  Suecia BARK R Binär Automatisk Relä Kalkylator. 5000 relés. Precursor del BESK.
  GB Pilot ACE L Prototipo del ACE. Operativo durante varios años por falta de equipos.
  Alemania Zuse Z5 R Mejora de la Z4; primera fabricada bajo pedido. Último electromecánico.
1951 USA EDVAC L Computadora binaria similar al ENIAC.
  USA Whirlwind L Diseñada desde 1943; terminó digital. Primer ordenador con pantalla de salida.
  GB Harwell Dekatron RL También llamado WITCH. Restaurado recientemente, usaba tubos Dekatron como contadores, no para la parte lógica.
  GB Ferranti Mark I L Primer ordenador comercial construido en serie.
  USA UNIVAC I L Segundo ordenador producido en serie, por unos meses.
  USA ORDVAC L ORdnance Discrete Variable Automatic Computer. Derivó en ILLIAC; basado en IAS.
  GB LEO I L Primera máquina base de un centro de cálculo.
  Rusia MESM L Primer ordenador soviético.
  Francia Bull Gamma2 L Prototipo francés; calculadora de tarjetas perforadas.
1952 USA ERMA L Primer ordenador bancario. Sistema desarrollado por Stanford Research Institute para Bank of America.
  USA Remington Rand 409 R Calculadora electromecánica programable por tarjetas perforadas.
  USA Harvard Mark IV R Último modelo de Aiken; tambores + ferritas.
1953 USA JOHNNIAC L Tipo IAS.
  USA IBM 702 L
  USA UNIVAC 1103 L Mainframe científico temprano
  USA RAYDAC L Computador militar/científico de Raytheon.
  Rusia Strela computer L Primer mainframe de producción en Rusia
1954 USA IBM 650 L Primero en ser vendido masivamente, 450 unidades en su primer año.
  Dinamarca DASK L Primer ordenador danés.
  Suecia FACIT EDB 2 L Arquitectura IAS desarrollada en la Universidad de Lund.
  USA IBM 704 L
  USA IBM 705 L
  Suecia BESK L Primer ordenador electrónico sueco; su equipo creó luego Facit.
  Japón FACOM 100 R Ordenador con relés desarrollado por Fujitsu.
  Alemania Zuse Z11 R Primer Zuse producido en serie, totalmente con relés.
  Francia SEA CUBA R Calculadora programable que evolucionó a ordenador de uso general.
  GB BTM HEC 1200 R British Tabulating Machine; 5 unidades; asociada a tarjetas.
  USA IBM NORC L Naval Ordnance Investigation Calculator. Primer superordenador. Calculó π con 3089 decimales en 13 minutos.
  USA UNIVAC 1102 L
  USA DYSEAC L Mejora del anterior SEAC.
1955 USA CALDIC L California Digital Computer; construido en Berkeley; económico y fácil de mantener.
  Alemania Zuse Z22 R Primera Zuse con lámparas; la Z23 ya sería totalmente transistorizada (1961).
  GB DEUCE L Digital Electronic Universal Computing Engine; comercial derivado del Pilot ACE.
  Francia SEA CAB-1011 L Ordenador criptográfico para servicios secretos franceses.
  Francia SEA CAB-2000 L Tres unidades fabricadas; dos variantes.
  Japón ETL Mark II R Evolución del Mark I; también con relés.
1956 USA IBM 305 RAMAC L Primer ordenador con disco duro.
  USA Bendix G-15 L Computador científico compacto con tambor magnético.
  USA LGP-30 L Ordenador “de sobremesa” para docencia e ingeniería.
  USA UNIVAC 1103A L Revisión y mejora del 1103.
1957 Australia SILLIAC L Construido como un derivado de ILLIAC/IAS, instalado en Sídney.

Francia SEA CAB‑1011 L Ordenador criptográfico de la SEA.

Francia SEA CAB‑2000 L Sistema con variantes comercial/científica (tres unidades).

GB Stantec Zebra L Ordenador británico/neerlandés con tambor magnético.

GB Ferranti Mercury L Mainframe científico sucesor del Mark I.
1957 Japón ETL Mark III L Versión con programa almacenado (laboratorio ETL).
  USA RCA BIZMAC L Ordenador empresarial a gran escala.
  Francia Bull Gamma 3 L Primer modelo comercial francés; calculadora de tarjetas perforadas.
  GB Ferranti Pegasus L
  GB BTM HEC 1201 R Primer modelo comercial HEC 1200; 70 unidades.
1958 USA IBM 709 L
  USA UNIVAC II L Evolución del UNIVAC comercial (mejoras de memoria/E/S).
  USA UNIVAC 1105 L Mainframe científico de gran escala.
  USA AN/FSQ-7 L La máquina más grande jamás fabricada, con 55.000 lámparas, diseñada para el sistema SAGE de la USAF.
1957 Japón FACOM 128A R Ordenador científico japonés de relés.
1957 Japón PD‑1516 Parametron L Prototipo basado en parametrón; etapa de transición tecnológica.
1957 Japón MUSASINO‑1 L Plataforma universitaria (parametrón/lámparas).
  Japón NEAC 1101 L Primer ordenador de NEC (serie 110x); diseño basado en parametrón.
  GB Ferranti Perseus L
  GB BTM HEC 1202 R Mejora del modelo anterior; calculadora asociada a tarjetas perforadas.
  Francia SEA CAB-3000 L Modelos 3030 (comercial) y 3040 (científico).
1959 Rusia Ural series L Modelos Ural‑1 a Ural‑4; producción entre 1959 y 1964.
  Alemania Zuse Z12 L Con una única unidad producida, fué una versión especial de la Z11.
  Italia Olivetti ELEA‑9002 L Segundo prototipo; lámparas en CPU y circuitos impresos. El modelo comercial llegó en 1959. Fué el previo al ELEA‑9003 ya transistorizado.
1960 India TIFRAC L Ordenador científico/estatal del TIFR.
  Yugoslavia CER‑10 L Actualmente Serbia.

Holanda Philips Pascal L Era un lenguaje de programación, no un ordenador.
1961 USA Sumlock ANITA calculator L Primera calculadora electrónica de sobremesa.
1962 Polonia UMC‑1 L Le siguió la UMC‑10 con transistores.

miércoles, 22 de agosto de 2012

Log de reparaciones: Para Imsai8080

Este verano he tenido un pequeño problema de acumulación de cosas, y por desgracia como las pongo una sobre otras, al final me era mas sencillo empezar por la última llegada que mover cajas, por lo que esta ha terminado antes que otras. No tengo fotos de todo.



Recibido 03/08/2012 Finalizado 16508/2012 Precio 30 euros

Aparato................: Consola Pong Soundic N/Serie
Avería reportada: No funcionan bien los mandos
Avería detectada: Problema de los potenciómetros, uno va regular y el otro muy mal.
Reparación: Se desmonta por completo el potenciómetro que no funciona y se limpia internamente. Se limpia con CRC el que funciona regular aprobechando que hay sitio para que entre bien, quedando los dos operativos

Aparato................: Atari 2600Jr UK N/Serie
Solicitado: MOD salida AV
Efectuado: Se realiza el MOD con una placa auxiliar, se cablea en la TIA soldando por la cara superior, ya que no cabe en otro lugar la placa auxiliar, y se añade un conector Jack hembra a la carcasa, cableando la placa nueva al conector. Luego se confecciona un cable de Jack a tres conectores RCA. Así dispone de las dos salidas, la de RF y la nueva de AV.

Aparato................: Game Gear mas un alimentador N/Serie
Avería reportada: No funciona bien la cruceta, le cuesta coger los juegos.
Avería detectada: Problema la cruceta, esta rota. Los condensadores tienen perdidas de liquido, aunque funciona bien. He probado 5 juegos y los ha tomado a la primera, por lo que debe ser problema de limpieza de los cartuchos.
Reparación: Se cambia la cruceta por otra, y se cambian todos los condensadores de la placa de video y la de sonido.

Se aprecia que le falta la pestaña
inferior a la cruceta, cosa habitual

Aparato................: Spectrum 48Kb N/Serie
Avería reportada: No funciona el teclado.
Avería detectada: Mal las dos tiras, con intentos de reparación anteriores con aluminio y pintura de plata, la ancha esta rota por completo, y la estrecha hasta la mitad. El resto de la membrana parece en buen estado, y se aprecia que recortando hay sitio para poder usar los conectores.
Reparación: Se recortan las dos lengüetas aprovechando al máximo su parte buena, y se alargan los conectores del teclado original.

Así esta la tira ancha, rota y arreglada
con aluminio todas las pistas

La estrecha lo mismo, rota parcialmente
y con aluminio para su arreglo.

Al sacarla se ve que internamente
parece en buen estado.

Así se ve que la estrecha también
se intento con pintura de plata

En estos casos lo mejor es recorte,
sin miedo cortamos por la zona
aprovechaba, debe quedar uno o dos
centímetros por lo menos.

Luego quito el refuerzo de plástico
que lleva y lo pego en la parte
sana de la membrana, es para que
luego entre en el conector bien.

La ancha lo mismo, esta va un poco
mas corta

Aquí quitando el protector de
plástico de la cinta.

La cinta aprovechable, con los
refuerzos pegados, acordaros
de que van en la parte posterior,
no en las pistas. La pruebo y veo
que funciona, podemos seguir.

Ahora quito los dos conectores de
las cintas de la placa, con un
desoldador y un poco de cuidado.

Y los alargo con unos cables, en este
caso sacados de un conector de
disqueteras.