miércoles, 25 de junio de 2014

Contrucción de un PONG casero (II) La familia del Chip AY-3-8500

La primera máquina de videojuegos domestica fue la Magnavox Odyssey, desarrollara por Ralph Baer y lanzada al mercado en 1972.


Esta máquina es un Pong, pero las paletas se pueden mover tanto horizontal como verticalmente. Disponía de varios juegos, que se seleccionaban usando unas tarjetas que se insertaban, aunque en dichas tarjetas no había circuitos, se limitaban a comportarse como interruptores. Existe un clon español que es idéntica, el Overkal, pero usaba interruptores para seleccionar los juegos.

Tras esta máquina que fue una revolución, Atari lanzó su Pong en 1975, y desde aquí empezó la revolución de los videojuegos domésticos.




Estas máquinas usaban un montón de chips en su interior, pero eran chips estándar, ninguno específico, por lo que en un momento en que la revolución de los chips personalizados estaba explotando, la General Instruments decidió lanzar al mercado un chip que integrara todos los necesarios para montar un Pong. Lanzado en 1975 el AY-3-8500 revolucionó el mercado. Todos querían fabricar máquinas de videojuegos y este chip hacía que fuera muy económico, pero Coleco se adelantó y compró la producción de un año, así salió mucho antes que la competencia con su pong al mercado.

El bom del pong fue veloz, alcanzando un auge muy rápido, en muchos paises se produjeron Pong, USA, casi toda Europa incluida España, países del Este, paises árabes, y en Asia sobre todo Filipinas (entonces todavía habían muchos americanos en las islas) y Taiwan. Se publicaron esquemas de pong en muchas revistas de electrónica de todo el mundo, y muchos aficionados montaron el suyo casero.

Pero igual que surgió rápido, el nacimiento de la NES a principios de los 80 acabó con ellos, sufriendo un rápido declive.

La General Instrument produjo un conjunto de chips de la serie, configurando tres tipos de máquinas diferentes con ellos, los básicos, los multijuego de cartuchos y los programables de cartucho. La serie la conforman los chips:

  • Pong Básico, un chip con el juego del pong y sus variantes:
    • AY-3-8500 (PAL), AY-3-8500-1 (NTSC): El pong basico en blanco y negro, denominado BALL & PADDLE, 6 juegos incluyendo dos de pistola, paletas solo con movimiento vertical, juegos para 1 y 2 jugadores. Se podía complementar con el AY-3-8515 para  convertir la salida en una señal de color, separando fondo, marcador, jugador izquierdo y jugador derecho en colores diferentes.
    • AY-3-8550 (PAL), AY-3-8550-1 (NTSC): El pong mejorado en blanco y negro, las paletas pueden moverse también horizontalmente. Podía usar el AY-3-8515 para salida en color.
    • AY-3-8610 (PAL), AY-3-8610-1 (NTSC): El SuperPong en blanco y negro, denominado SUPERSTAR, con 10 juegos incluyendo dos de pistola, paletas con movimiento vertical y horizontal. Se complementaba  con el AY-3-8615 que permite convertir la salida del 8610 en una señal de color.
    • AY-3-8710 (PAL), AY-3-8710-1 (NTSC): Pong con un juego de Batalla de tanques
    • AY-3-8710 (PAL o NTSC seleccionable internamente): Pong con un juego en que manejas una moto, con varios tipos de juego.
  • Pong Programable, serie económica, en esta serie los catuchos contienen el chip con el juego, y otro chip dentro de la máquina proporciona funciones de base:
    • AY-3-8615: Chip de funciones gráficas básicas que va dentro de la consola.
    • Los chips que se colocaban en el cartucho erán el AY-3-8603-1 (Roadrace: 2 variantes de carreras de coches), AY-3-8605-1 (Submarine: 2 variantes de submarinos), AY-3-8606-1 (Wipeout: 4 variantes de tipo arkanoid), AY-3-8607-1 (Rifle: 4 juegos de disparos), AY-3-8610-1 (Superstar: 10 variantes del pong clásico), AY-3-8750-1 (Superspace: nave espacial, aunque era una variante del AY-3-8710), AY-3-8765-1 (Cycle: 4 variantes de motos, hacía lo mismo que el AY-3-8710)
  • Pong Programable, serie completa, en esta serie la máquina incluye un procesador y los cartuchos son la ROM del juego. Sacó dos líneas de chips auxiliares, para hacer consolas de gama media o alta, todas con el procesador de 8 bits CP-1610. De esta serie no presento los chips que la componen ya que no voy a sacar ninguna placa para ellos, pero los juegos no son complejos, ya que no podía hacer gráficos demasiado bonitos, serían en resolución inferiores a los de una Atari 2600 por ejemplo.

miércoles, 18 de junio de 2014

Contrucción de un PONG casero (I)

En los foros de Va de Retro un usuario montó uno, y nos hemos picado a comprar todos los chips diferentes que encontremos y montar varios modelos propios del foro, para que cualquiera pueda tener el suyo.

La idea de base es montar tres tipos de Pong diferentes, con todos los esquemas y la información disponibles para que todos puedan montar el suyo, pero solo se hará una producción de placas del primer modelo que montaremos, el Pong básico, el resto cada uno deberá montárselo personalmente. Creo que al final seremos once los que lo montaremos, ya hemos pedido el chip básico necesario para ello, el AY-3-8500, pero si alguien quiere una placa que lo diga en el foro, aproximadamente en un mes la pondré en producción.

Los tres modelos que voy a montar son los siguientes:

  • MODELO A: Pong básico en blanco y negro con salida de AV y sonido. Usaré el montaje estándar del AY-3-8500, un cristal de 2Mhz y un chip harán el circuito del reloj, y la fuente será con un regulador 7806, todo muy sencillo y básico. Pero tras comentarios de unos y otros se han suscitado ya dos variantes y algunas ampliaciones:
    • Variante Base: Pong en una sola caja, con los mandos externos o incluidos en la misma, una sola placa de circuito con todo.
    • Variante Mini: Pong en dos cajas, en cada una lleva un mando y una parte del circuito, así en dos cajitas pequeñas unidas por un cable tienes todo el pong montado.
    • Opción de salida con el campo en gris, una paleta en negro y otra en blanco, en una plaquita adicional con dos chips.
    • Opción de salida en color.
    • Opción de entrada de pistola
    • Opción de interruptores de pulsación suave en lugar de con interruptores.
    • Opción de mandos sin hilos.
  • MODELO B: Pong multi-cartucho, que reproduce uno de los denominados "programables", consolas en las que el cartucho no tiene el programa, sino un chip con el juego en sí. Tendrá varios chips en una sola placa, una para cada juego, y se podrá elegir el juego con un selector, en lugar de ir poniendo cartuchos, así el diseño es mas sencillo. El diseño incluye además de los selectores del juego a lanzar, los selectores estándar de velocidad o dificultad y un teclado numérico. Hay que considerar que este pong usaba un mando de dos direcciones, no solo podía mover la paleta (o el muñequito del juego) arriba y abajo, sino que podía mover la paleta por toda la pantalla. Este pong tendrá también alguna variante:
    • Opción de entrada de pistola
    • Opción de interruptores de pulsación suave en lugar de con interruptores.
    • Opción de mandos sin hilos.
  • MODELO C: Pong usando un procesador, un PIC o similar, en el que podemos poner los juegos de los chips que no encontremos, o variantes de los existentes.
    • Opción de mandos sin hilos.
Seguiré en próximas entradas con una introducción al chip AY-3-8500 y los esquemas del modelo A.

lunes, 9 de junio de 2014

Lavabos y aviones, un poco de física con Coriolis

Hace mucho que no escribo en el blog, y para retomarlo, voy a empezar por algo que no es informática ni electrónica, sino de física.



He estado de viaje de trabajo por Centroamérica, y los amigos me pidieron fotografiar el lavabo para ver hacia donde gira el agua, ya que está muy extendida la idea de que giran al contrario en cada hemisferio terrestre,  tiene que ser cierto, ya que ¡ha salido en Los Simpson y en Expediente X! (no entiendo por qué eso tiene que convertirlo en cierto, si por lo menos fuese en BigBang Theory que tiene físicos entre los guionistas).

Dejando aparte que Centroamérica está en mismo hemisferio que España (mis amigos no son buenos en física ni tampoco en geografía según parece, pero les quiero igualmente), esto solo es un mito falso, uno de los muchos que circulan, y voy a comentar este y otro relacionado, los aviones viajan más rápido de América hacia Europa que al contrario, ya que la tierra se mueve bajo ellos.

Lo primero a considerar es que debería ser justo al contrario, ya que cuando viajamos de España a Centroamérica la tierra se mueve acercando a Centroamérica, y cuando viajamos al contrario la tierra se mueve alejando a España del avión, por lo que es fácil pensar que esto no es correcto.

Por fortuna, la gravedad hace que cualquier cosa sobre la tierra, incluyendo su atmósfera y los objetos que se mueven por ella, se comporte como un sistema cerrado de referencia, nos atrae hacia abajo, lo que hace que giremos con ella, a los aviones les atrae hacia abajo, pero al estar girando les tira a la vez hacia su sentido de rotación, eso hace que aunque un helicóptero permanezca quieto en el aire, mantenga la misma perpendicular con la tierra, por muchas horas que esté en el aire. Hay un experimento sencillo, si nos subimos a un tren que se mueva en línea recta aunque viaje a 300 por hora por ser un AVE, si saltamos caeremos en el mismo lugar, a pesar de que si nos mantenemos un segundo en el aire el tren ha recorrido 80 metros en ese tiempo, por muy rápido que sea el tren permanecemos unidos a él por las fuerzas de la inercia. De la misma forma, cuando el avión vuela permanece sólidamente unido a la superficie terrestre, aunque de manera invisible, comportándose como un coche sobre la superficie.

Solo si el avión abandona la atmósfera y sale al espacio, la atracción de la tierra es lo suficientemente débil para poder separarse de la tierra, y las naves espaciales van girando por el espacio de manera independiente del giro de la tierra.

Entonces, que hace que el avión corra más en una dirección que en otra si va de oeste a este, la respuesta la dio un físico francés llamado Gaspard-Gustave Coriolis en 1836, que estudió las fuerzas que se producen en un cuerpo en rotación cuando otro objeto se mueve en su superficie, demostrando la existencia de una fuerza perpendicular al movimiento de los dos objetos influyendo al objeto móvil, esto hace que cuando viajamos en una dirección norte a sur  se produzca un desvío de la trayectoria del objeto hacia la izquierda, y si viajamos de sur a norte hacia la derecha, este impulso adicional es mayor contra mas se mueva hacia el este o el oeste el objeto, y es máximo justo cuando viaja de oeste a este o al contrario, solo que es a favor del movimiento del objeto cuando es de oeste a este, y contrario cuando es de este a oeste, lo que hace que los aviones se muevan un poco más rápido o un poco más lento, ya que la fuerza de Coriolis es bastante pequeña. Y no solo los aviones, la propia atmósfera y el océano se ven influidos, formando remolinos gigantescos en la atmósfera, y formando las corrientes marinas, que giran en sentidos opuestos al tirar de ellos las fuerzas de Coriollis en direcciones contrarias según esten al norte o al sur del ecuador.

Cuando eso mismo lo llevamos al lavabo, la distancia entre ambos bordes del mismo no es tan grande como para influir de ninguna manera en su sentido de giro. El sentido de giro del agua proviene del flujo laminar y el flujo turbulento en las tuberías, y se ve afectado por cualquier pequeño desnivel o por las curvas de la tubería, siendo completamente aleatorio.

Hay muchas webs de física donde se ha pedido a la gente que mire su lavabo, y se verifica que aproximadamente la mitad gira en un sentido y la otra mitad en otro, el que quiera puede poner como comentario el sentido de giro que tiene en sus lavabos, o en las tazas del excusado, o en las pilas del fregadero, o en sus bañeras o duchas, y a lo mejor ve que alguno de estos gira en dirección contraria al resto, cosa que contradice inmediatamente la afirmación del giro en ambos hemisferios.

PD1: Para Marcos, con cariño

PD2: Lo que realmente hace que los aviones ganen media hora a una hora son las corrientes de aire, que viajan de oeste a este, la fuerza de coriolis les impulsará para ganas pocos minutos en un vuelo largo, y los pilotos la compensan, de igual manera que compensan las diferencias en la alineación de los elementos de control, los vientos laterales, etc, cada x tiempo verifican donde están realmente y compensan el desvio producido sobre su posición teórica.

jueves, 28 de noviembre de 2013

Electrónica de Andar por Casa, Artículo 8: Fuentes de alimentación (II)

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

FUENTES DE ALIMENTACION II

En el anterior artículo vimos las dos primeras partes de una fuente de alimentación, el transformador y el rectificador, seguimos con las fuentes en esta entrada.


3 - Filtrado


Tras la rectificación, tenemos una señal contínua positiva, pero pulsante, ya sea con media onda o con onda completa. El objetivo es filtrar el máximo de ondulación de la señal en esta fase, para que en la regulación se obtenga una señal contínua de buena calidad. Muchas fuentes económicas no disponen de regulador, muchos de nuestros equipos, como los Spectrum o las consolas de Sega externamente tienen los tres primeros pasos, dejando la regulación para el interior de la máquina. 

El elemento que necesitamos para el filtro es un condensador, cuando recibe corriente en la parte de subida de la onda la almacena en su interior, y cuando la corriente baja libera lo almacenado, de esta forma se consigue mantener una corriente contante en la salida


Vemos en azul la corriente tras el condensador, y en rojo punteado la del regulador, cuando sube la corriente el condensador de carga, cuando baja se descarga poco a poco, hasta que el nivel de la corriente es igual al restante en el condensador, luego vuelve a subir. Con esto no tenemos una salida plana perfecta, pero si muy poco ondulada, contra mayor sea el condensador menos ondulada será la señal.

4 - REGULADOR

Una vez disponemo de una señal mas o menos adecuada, lo siguiente es usar un regulador que nos proporcione el voltaje que necesitamos, lo mas estable posible. Para ello este tipo de fuentes lineales lo que hacen es partir de un voltaje superior, y bajarlo al que buscamos, de esta forma se aseguran de que hay una corriente suficiente en la entrada para proporcionar una salida estable.

El mas sencillo es usando un diodo Zenner, que tiene la particularad de que el voltaje en su salida es siempre el mismo, mientras en su entrada tenga un voltaje igual o superior. Vemos como el voltaje de entrada se aplica a una resistencia, y el diodo Zenner entre su salida y masa estabilizará su salida, manteniendo la cirriente contante en el voltaje Zenner del diodo. Estos diodos se compran para un voltaje determinado.


Este tipo es muy sencillo, pero admite poca corriente, por ello se usa un sistema en el que el diodo pilota un transistor, que compara el voltaje de la entrada desde el diodo con el que tenemos en la salida del filtro, y se justa la corriente para que coincida (esta esplicación es muy de andar por casa, pero es suficiente). En el esquema vemos que la corriente de entrada se ubica en el colector del transistor, su base la pilota el diodo Zenner, y la salida es el voltaje regulado.

Podemos emplear una mejora importante, en lugar del Zenner ubicamos una referencia de tensión, un circuito mas preciso que solo el diodo, y si en lugar del transistor directamente ubicamos entre ambos un comparador, que compare el voltaje de la entrada con el voltaje del zenner, y en su salida nos de la regulación a aplicar, que pilotará el transistor. Esto ya nos complica mas el diseño, y no voy a entrar en mas detalles, con que se entienda esto es suficiente en este nivel, pero tenemos la ventaja de que se venden estos montajes ya listo para funcionar, por lo que usaremos un regulador encapsulado para nuestra fuente, que proporciona mejor regulación, estabilidad, protección contra sobretensión y sobrecalentamiento. 

Hay varios chips que hacen esto, pero la serie 78XX es la mas usada. Solo debemos reemplazar XX por el voltaje que deseemos en la salida, y tendremos un regulador de ese voltaje con un solo componente, por ejemplo nuestras máquinas usan en general un regulador 7805, para proporcionar los 5 voltios en la salida, solo debe tener por lo menos 1’5 voltios mas de los que vamos a regular, por lo que la salida del filtro debe proporcionar por lo menos 6’5 voltios o mas, aunque usualmente se usan de 9 a 12 voltios.



De los tres pines, el de la izquierda es la entrada de corriente, el central es la masa, y el de la derecha es la salida. Para mejorar la estabilidad y el filtrado de la corriente, se suelen añadir unos condensadores en la entrada y la salida, usando este esquema:

Seguiremos en la próxima entrada con el esquema completo de la fuente para poder montarnos una en casa de forma económica.


José Antonio Vaqué Urbaneja, podeis
contactar conmigo en mi mail

martes, 26 de noviembre de 2013

Introducción a la programación usando BASIC (VII): CONTANTES, READ/DATA/RESTORE

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

CONTANTES, READ/DATA/RESTORE

Una constante es un valor que no cambiará a lo largo de la ejecución del programa, en BASIC no existe la definición de constantes, pero se pueden simular usando variables. Pongo un ejemplo de un conversor de grados a radianes, para lo que usaremos el valor de PI, y luego guardaremos el valor de la relación entre grados y radianes. Una vez calculados estos valores, no cambiarán ya en el resto del programa:


10 REM Constantes 
20 LET PI=3.1416 
30 LET RD=180/PI 
40 INPUT "Valor en grados: ",G 
50 IF (G=0) THEN STOP 
60 LET R=G/RD 
70 PRINT G;" grados son ";R;" radianes" 
80 PRINT



En BASIC existe otro mecanismo para definir valores que no cambian a lo largo de la ejecución, la instrucción DATA permite acceso secuencial a datos, es una especie de almacén en el que almacenar cosas, con la limitación de que solo se pueden ver de una en una y una tras otra.

Ejemplo sencillo, pedimos una fecha y la imprimimos en formato texto con el nombre del mes en lugar de su número:

100 REM IMPRESION DE FECHAS
110 INPUT "Dia: ";D
120 IF (D=0) THEN STOP
130 IF (D<1 or="">31) THEN PRINT "Dia no valido" : GOTO 110
140 INPUT "Mes: ";M
150 IF (M=0) THEN STOP
160 IF (M<1 or="">31) THEN PRINT "Mes no valido" : GOTO 140
170 INPUT "Año: ";A
180 IF (A=0) THEN STOP
190 LET M$=""
200 RESTORE 400
210 FOR I=1 TO M
220   READ M$
230 NEXT I
240 PRINT : PRINT "Fecha: ";D; " de ";M$;" de ";A
250 PRINT : PRINT
260 GOTO 110
400 DATA "Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto"
410 DATA "Septiembre","Octubre","Noviembre","Diciembre"


El programa pide primero día, mes y año, si se deja a cero cualquiera el programa termina, si se introduce un día o mes fuera de rango también termina. Luego pone en blanco la variable m$ (ojo, existe una variable llamada m y otra llamada m$, son diferentes y no tienen nada que ver entre sí, lo he hecho así para que se vea claramente este tema). Llama a la instrucción RESTORE, que vuelve a poner a cero el contador interno para los DATA, lee el número de meses indicado en la variable m el data correspondiente, la primera vez que pasa por el bucle lee “Enero”, la segunda vez lee “Febrero”, y así sucesivamente. El resultado de la ejecución del programa es este:


Pensemos que lo vamos a hacer multi formato o multi idioma, es muy sencillo el cambio, ya que la instrucción RESTORE tiene como opción la línea a partir de la cual empezamos a leer datos, por lo que solos necesario tener dos secuencias de DATA

100 REM IMPRESION DE FECHAS 
110 INPUT "Dia: ";D 
120 IF (D=0) THEN STOP 
130 IF (D<1) OR (D>31) THEN PRINT "Dia no válido" : GOTO 110
140 INPUT "Mes: ";M 
150 IF (M=0) THEN STOP 
160 IF (M<1) OR (M>31) THEN PRINT "Mes no válido" : GOTO 140
170 INPUT "Año: ";A 
180 IF (A=0) THEN STOP 
190 INPUT "Formato (C/L): ",F$ 
200 IF (F$="l") THEN F$="L" 
210 IF (F$="c") THEN F$="C" 
211 IF (F$<>"L") AND (F$<>"C") THEN PRINT "Formato no válido" : GOTO 190 
220 REM Proceso ------------------------------- 
230 LET M$="" 
240 IF (F$="L") THEN RESTORE 400 
241 IF (F$="C") THEN RESTORE 420 
250 FOR I=1 TO
260   READ M$ 
270 NEXT
280 PRINT : PRINT "Fecha: ";D; " de ";M$;" de ";A 
290 PRINT : PRINT 
300 GOTO 110 
310 REM Datos ------------------------------- 
400 DATA "Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto" 
410 DATA "Septiembre","Octubre","Noviembre","Diciembre" 
420 DATA "Ene","Feb","Mar","Abr","May","Jun" 430 DATA "Jul","Ago","Sep","Oct","Nov","Dic"


Este programa es muy similar al anterior, solo que pide una variable adicional con el tipo de formato, la pone en mayúsculas para evitar comparaciones, y según su valor usa una u otra línea de DATA 




Avanzamos con el BASIC, ir probando cosas de los DATA, que ofrecen un mecanismo sencillo para almacenar cosas en el propio programa.

 Jose Antonio Vaqué Urbaneja, podéis
contactar conmigo en mi mail

martes, 19 de noviembre de 2013

El sonido en 8 bits (VI): Sonido en el C64 (II)

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

El sonido en un Commodore 64 (II)

Seguimos con el sonido en los Commodore 64, las envolventes de sonido nos permiten modificar el volumen del sonido

El generador de envolvente

Cuando una nota musical sube de volumen, a la velocidad con que lo hace se le denomina ataque (ATTACK). Cuando baja de volumen a la velocidad se le denomina caída (DECAY), si la nota baja hasta cero se le denomina liberación (RELEASE). Si la nota se mantiene durante el tiempo se le denomina sostenido (SUSTAIN). Esto lo ejemplarizamos en esta gráfica, y se les denomina como conjunto por sus siglas en inglés ADSR.

Para cada una de las tres voces se utilizan dos registros de 8 bits para controlar los parámetros ADSR , 5 y 6 para la voz 1 , 12 y 13 para la voz 2 y 19 y 20 para la voz 3. El primer registro de cada pareja controla ataque y caída, y el segundo liberación y sostenido, cada parámetro por tanto usa 4 bits, y puede usar valores por tanto entre cero y 15. A los primeros cuatro bits se les denominan Altos, y a los segundos Bajos, y hay que combinarlos para obtener el parámetro a usar, siendo los altos para caída y liberación y los bajos para ataque y sostenido. La forma más sencilla es sumar los valores del (valor Alto * 16) + (Valor Bajo), así por ejemplo si el valor del Ataque es 4 y el de caída 8, el valor a usar sería 8*16 + 4 = 132.

10 FOR L=54272 TO 54296:POKE L,0:NEXT Limpia el SID
20 POKE 54296,15 Ajusta volumen máximo
30 POKE 54277,64 Establece ataque/caida
40 POKE 54273,162:POKE 54272,37 Nota en la voz 1
50 PRINT "PUSA UNA TECLA" Mensaje en pantalla
60 GET K$:IF K$="" THEN 60 Mira el teclado
70 POKE 54276,17:FOR T=1 TO 200:NEXT Forma de onda triangular
80 POKE 54276,16:FOR T=1 TO 50:NEXT Para la nota
90 GOTO 50 Repite la ejecución


En la línea 30 se establece la tasa de ATTACK/DECAY, ponemos ataque a cuatro y caída a cero, por tanto 4*16+0=64. Podemos jugar con los valores de la línea 30 para ver cómo afecta al volumen de la nota que está sonando. Lo mismo se puede hacer con el sostenido y liberación, por ejemplo añadiendo esta línea al programa:

35 POKE 54278,128

Esta tabla puede servirnos para establecer los valores de los 4 parámetros en cuatro niveles sin necesidad de calcular, solo suma el valor de Ataque y Caída deseado para el primer parámetro, y sumar los valores de Sostenido y liberado deseados para el segundo parámetro.

Alto Medio Bajo Muy bajo Alto Medio Bajo Muy bajo
Ataque Ataque Ataque Ataque Caída Caída Caída Caída
Sostenido Sostenido Sostenido Sostenido Liberado Liberado Liberado Liberado
128 64 32 16 8 4 2 1

FILTRADO

Para ajustar el timbre de las notas se utilizan los filtros, son los más difíciles de ajustar, pero se puede hacer que nuestro C64 suene como cualquier instrumento musical ajustando los filtros. Existen tres filtros a usar, ajustan un nivel de señal para cortar las otras:

  • Filtro de paso alto. Este filtro reduce el nivel de las frecuencias inferiores a la frecuencia de corte especificada. Pasan todas las frecuencias iguales o superiores al punto de corte, mientras que reduce las frecuencias por debajo del corte.
  • Filtro de paso bajo. Al contrario, este filtro deja pasar las frecuencias por debajo del corte y reduce las superiores al corte.
  • Filtro paso banda. Este filtro deja pasar una banda estrecha de frecuencias en torno al corte y reduce el nivel de todas las demás.
  • Un filtro adicional llamado filtro de rechazo, que es el contrario al de paso banda, puede sintetizarse combinando los filtros de paso alto y bajo.
El registro 24 permite indicar el uso de los filtros, y también se usa en el control de volumen, por lo que hay que sumar ambos valores. Los bits a usar son:

      BIT Uso
      4 Selecciona el uso del filtro de paso bajo (valor 8)
      5 Selecciona el uso del filtro de paso banda (valor 16)
      6 Selecciona el uso del filtro de paso alto (valor 32)

Para activar los filtros se usa el registro 24 del SID, solo se puede activar un filtro a la vez, usando un valor  de 0 a 15 para cada uno, para usarlo se usan estos bits:

      BIT Uso
      7-4 Valor de resonancia del filtro (valor 0 a 15 multiplicado por 16)
      3 Entrada externa del valor del filtro (valor 8)
      2 Activar el filtro para la voz 3 (valor 4)
      1 Activar el filtro para la voz 2 (valor 2)
      0 Activar el filtro para la voz 1 (valor 1)


La frecuencia de corte es un número de once bits, por lo que su valro oscilará entre 0 y 2047. Los ocho bits superiores (11 al 3) se almacenan en el registro 22, mientras que los tres bits más bajos (2 al 0) se almacenan en el registro 21. Añadiremos al programa anterior líneas que nos permite probar los valores de los filtros:

10 FOR L=54272 TO 54296:POKE L,0:NEXT      Limpia el SID
20 POKE 54296,15 Ajusta volumen máximo
30 POKE S+24,31 volumen total + filtro paso bajo
35 POKE S+23,1 filtro de voz 1
37 POKE S+22,128:POKE S+21,7 frecuencia de corte
40 POKE 54273,162:POKE 54272,37 Nota en la voz 1
50 PRINT"PUSA UNA TECLA" Mensaje en pantalla
60 GET K$:IF K$="" THEN 60 Mira el teclado
70 POKE 54276,17:FOR T=1 TO 200:NEXT Forma de onda triangular
80 POKE 54276,16:FOR T=1 TO 50:NEXT Para la nota
90 GOTO 50 Repite la ejecución


Hasta aquí el manejo del sonido de nuestros C64 desde su Basic, con esto completamos el repaso de la forma de sacar el sonido de los principales sistemas de 8 bits, Spectrum, Amstrad, MSX y C64.

 Jose Antonio Vaqué Urbaneja, podéis
contactar conmigo en mi mail

domingo, 17 de noviembre de 2013

Cableado MOD Megadrive I con Led Bicolor

Para aclarar el tema del cableado de la Mega Drive I, usando un Led Bicolor para indicar la velocidad, os pongo el esquema mas general y sencillo:




Cualquier duda solo teneis que decirlo.