[Mundo Viejuno] Introduccion al diseño de hardware para CPC
por
- 14/11/2007 a las 00:54 (2065 Visitas)
Introduccion al diseño de hardware para CPC
Por Oyzzo
Buenas, pues como dice el titulo voy a explicar un poco lo basico para poder hacer hardware para el amstrad CPC, en concreto yo uso un CPC464 asi que lo que hago tirara de sobras en los CPC superiores tambien.
Lo voy a orientar a gente autodidacta que supongo que sera la gran mayoria, asi que voy a intentar hacer las cosas sin complicarlo demasiado, esto quiere decir por ejemplo que usare el BASIC de amstrad para controlar el hardware en lugar de hacerlo en ENSAMBLADOR puesto que asi lo comprendera la mayoria de la gente, y si alguien sabe ensamblador no tendra ningun problema, viendo el codigo en basic, en hacerlo en ensamblador. Por la misma razon voy a usar los puertos de joystick y de impresora en lugar de usar el puerto de extension ya que es mas sencillo y permite que todo el mundo pueda hacer con un bajo presupuesto (menos de un euro en algunos casos xD) y de manera sencilla cacharros para el amstrad. Igual que sucede con el ensamblador, si alguien tiene mas conocimientos de electronica y sistemas digitales no tendra ningun problema en hacer su propio hardware usando el puerto de extension del CPC.
Mi objetivo es llegar a hacer cosas interesantes(y complejas) de hardware para el CPC, aunque de momento vamos a empezar por lo basico y veremos hasta donde llegamos
COMUNICARNOS CON EL EXTERIOR
Lo primero que necesitamos es ver como podemos conectar nuestros cacharros al CPC y como comunicarnos con ellos. Como ya os imaginais necesitamos dos direcciones de datos, la primera sera leer datos del exterior:
Esto lo haremos mediante el puerto de joystick del amstrad y mas adelante veremos como hacerlo.
La segunda direccion de datos es enviar datos desde el ordenador hacia nuestros proyectos para poder controlarlos:
Esta vez enviaremos los datos mediante el puerto de impresora del amstrad por simplicidad.
EL PUERTO DE JOYSTICK
El puerto de joystick del amstrad CPC es muy sencillo, se trata de un conector hembra de tipo D9 que viene a ser el mismo tipo de conector de puerto serie que tienen la mayoria de PCs, asi que nos sera muy sencillo encontrarlos para nuestros proyectos. En el amstrad CPC trabajaremos con 5V para indicar un 1 logico y con 0V para indicar un 0 logico, aunque como esta vida no es perfecta y el CPC lo sabe, interpretara como un 0 logico los valores entre 0,8v y 2,4v, los valores mayores que eso seran un 1 logico o freiran el CPC asi k tampoco es recomendable pasar de los voltajes indicados
El siguiente esquema muestra para que se usa cada pin del conector:
Muy bien, imaginaros k tenemos algun cacharro conectado ahi y nos envia algun dato por alguna linea de datos, para leerlo utilizaremos la siguiente instruccion en BASIC de amstrad:
Una vez ejecutada esa instruccion en la variable X tendremos un valor que nos indica que linea de datos dentro del puerto de joystick estan a 1 y que lineas estan a 0. En el amstrad CPC si en una linea no hay nada leera exactamente lo mismo que si hay un 1, asi que los cambios vendran al meter un 0 en alguna de las lineas de datos. En la siguiente tabla pongo los valores que leera el amstrad dependiendo de las lineas que esten a 0 (y las que esten a 1 o sueltas)Código:X = JOY(0)
Para los que sepan binario veran que los valores corresponden al valor binario en logica negativa. Si hay un 0 en mas de una linea a la vez el valor sera la suma de los valores de las lineas a 0. Por ejemplo si D0 D3 y D6 estan a 0 y los demas a 1, sumamos el valor 1 de D0 mas el 8 de D3 mas el 64 de D6 y vemos que al hacer X = JOY(0) tendriamos 73 en X.
EL PUERTO DE IMPRESORA
El puerto de impresora del amstrad tiene un conector un poco mas raro, asi que tendremos que buscarnos la vida a la hora de hacer la conexion de nuestros proyectos, pero es igualmente sencillo. El diagrama de continuacion muestra el uso de cada linea:
Vemos que hay una linea llamada Busy (ocupado) esto sirve para que nuestro cacharro indique al cpc cuando esta haciendo algo que le impide leer lo que el amstrad le quiera decir, asi que cuando nuestro proyecto ponga un uno en esa linea el amstrad esperara para enviarle datos. Para enviar datos por el puerto de impresora lo tenemos mas sencillo que para leerlos por el de joystick (aunque parezca imposible xD) ya que funciona con logica positiva. Para enviar datos utilizaremos la instruccion de BASIC:
61184 es la direccion del puerto, en este caso el de impresora. X el valor que corresponde a las lineas que queremos poner a 1.Código:OUT 61184,X
Tenemos 8 lineas de un bit cada una, esto es de D0 a D7, pues cojemos y ponemos en binario el numero correspondiente a las lineas que queramos poner a 1. Por ejemplo, si queremos enviar un 1(5v) por las lineas D3 y D0 hacemos:
Asi que enviamos el 9 por el puerto de impresora con OUT 61184,9 y listos. Sencillo, no? siempre hay alguien que no lo ve claro del todo, pero no os preocupeis que es muy sencillo y mas adelante hare un proyecto muuy simple que en si mismo no tendra mucha utilidad pero os quedara todo bien clarito.
-- Articulo original en http://www.mundoviejuno.com