• Este topico es para discutir las alternativas del hardware de la computadora, que micro conviene utilizar, que tipo de bus, memoria, chips de video, sonido, sistemas de almacenamiento, conectores de entrada y salida, etc.
    En cuanto al video, adjunto la hoja de datos de un chip muy simple, que tiene salida tanto RGB como para LCDs. Aunque solamente maneja textos en colores, de 40 columnas y 25 filas, la interfaz con el micro es muy simple y es un componente que se fabrica actualmente, por lo cual podria servir para una version inicial de la maquina.
     

  • Revivo este tema que quedo archivado por un "poquito" de tiempo.  ;D
    Despues de mucho investigar el hardware que se podria usar para una computadora, termine descartando cualquier chip que no se fabricara actualmente, lo cual dejo de lado casi todo lo que se usaba en los 80s. La idea era evitar que la gente empiece a desarmar computadoras funcionales para armar algo nuevo. Lo que mas me preocupaba era la salida de video, investigue las soluciones modernas y son demasiado complejas y caras porque ya nadie piensa en un chip de video con salida de video compuesto, por lo cual termine investigando las alternativas implementadas con microcontroladores. Encontre proyectos con salida VGA, pero muy limitados o incompletos, y dada la velocidad de los microcontroladores que se consiguen me tuve que conformar a una salida de video compuesto que requiere la mitad de procesamiento que una salida VGA. Vi dos proyectos que podian utilizarse, uno con un PIC18 y otro con ATMega8, el del PIC no lo pude hacer andar porque no consegui el micro exacto y si consegui uno identico pero sin oscilador interno de 8MHz, pero al no tener un cristal de 8MHz pase inmediatamente al otro proyecto que era un poco mejor, aunque con un micro ATMega8 que jamas use. Tuve que investigar como grabarlo, me arme el cable para grabarlo por el puerto paralelo de la PC, encontre el soft adecuado y grabe el programa, pero me di cuenta de que hay que grabar los fusibles de configuracion de manera separada, por lo cual tuve que descifrar los parametros y una vez grabados funciono perfectamente.  biglaugh
    El problema era que acepta caracteres por RS232, pero le faltaba el adaptador de niveles (MAX232) para poder conectarse a la PC, por lo cual decidi armar todo en una placa antes de continuar, y he aqui que en una noche quedo armada.
    En esta foto se ve la placa armada con el micro y el adaptador de niveles de TTL a RS232, la placa esta conectada al puerto serie de la PC y a la entrada de video compuesto de un sintonizador para monitor VGA.
    EPSN3013s
     

  • Esta es la placa, el chip de video es el microcontrolador que se ve abajo, el largo de 28 pines, con 2 diodos, 2 resistencias, un cristal de 16MHz con sus dos capacitores, y un capacitor para filtrar ruidos en la alimentacion. Ademas de eso lleva 6 jumpers para seleccionar PAL o NTSC y algunos parametros de la terminal, como agregar automaticamente LINE FEED despues de CR, velocidad de la RS232, etc.
    El circuito no genera color asi que el video es puramente monocromo, pero implementa el conjunto de caracteres estandar de la PC, por lo cual a pesar de no soportar un modo grafico de mapa de bits, se pueden llegar a implementar graficos bastante elaborados con caracteres. Como sea es un comienzo, mas adelante cuando se encuentre la forma de generar color solo habra que modificar la BIOS para usar el nuevo chip.
    EPSN3014s
     

  • Los componentes que se ven arriba son el MAX232 para adaptar los niveles a RS232, el conector DB9 para placa, el regulador de 5V porque en mi mundo todo anda a 12V para poder usar baterias de alarmas, un conector para usar 12V de la fuente de PC y una bornera para conectar un cable de bateria 12V 7A, ademas de unos jumpers en el medio para desviar las lineas RS232 al chip de video o a la computadora una vez que haya un micro en la placa.
    Con mucha suerte e imaginacion, esa va a ser la placa madre de la computadora, ahi tiene que entrar un 6502 (o un Z80), una RAM de 8K, la flash de 512K que tengo (que es SMD asi que no ocupa mucho), otro ATMega8 emulando un SID, y algun PIC para E/S basica, como teclado PS/2.
    Aca se ve el circuito andando antes de armar la placa, no es muy complicado, lo mas dificil es grabar el micro porque hay que armarse el cable paralelo, pero en mi caso no use mas componentes que los cables, aunque se recomienda colocar unas 4 resistencias para proteger el puerto.
    EPSN3009s
     

  • Me olvidaba, esta es la pagina del proyecto para quien lo quiera hacer: LINK
    Hay algunos detalles que no estan explicados y hay que leer bastante para deducirlos. Por ejemplo la programacion de los fusibles de configuracion la tuve que sacar de los scripts hechos para el AVRDude que es el programa que usaron ellos. Yo use el PonyProg2000 corriendo en XP, con este programador, pero sin las resistencias: LINK
     

  • Muy bueno el proyecto ese! Esta bueno para hacer algo simple porque te independizas de detalles del mapeo de memoria y del raster de video, creo que la MSX funcion mas o menos asi, con un chip independiente con memoria no mapeada, pero que complica para los juegos porque estan limitados a la velocidad de procesamiento del procesador de video.

      En realidad no es ni PAL ni NTSC, porque estos standares solo indican como se codifica el color, independientemente de la cantidad de cuadros por segundo (hay pal de 60 cuadros por segundo, no se si hay NTSC de 50), lo que elegis es si es 50 o 60 cuadros por segundo.

    Hace un tiempo anduve averiguando sobre estas cosas y me arme el pic pong http://www.rickard.gunee.com/projects/video/pic/pong.php ,  que tambien genera video monocromatico, pero esta muy pegado al juego no es un programa tan general como este.  En la pagina tiene explicaciones sobre como generar video, pero para generar la señal de color, si lo queres hacer exclusivamente desde el micro vas a necesitar mucho procesamiento, el chabon usa un micro de como 100Mhz creo para la version color. Habia un proyecto de una consola de juegos con un ATMega creo que 64 o 644 que tenia salida color pero que en realidad tenia salida RGB que la transformaba en video compuesto con un chip medio raro.

      Sobre la programacion de ATMega parece que tuviste exactmante los mismos problemas que tuve yo con el ATMega32 del SD64, y creo que yo ya habia subido la explicacion de como grabarlo con el ponyprog y como programar los malditos flags y hacer el cable paralelo, pero creo que nadie mas grabo un micro para el SD64 asi que no estoy seguro. Lo peor es que el PonyProg te invierte los flags y no te lo aclara en ningun lugar, si te guias por el datasheet vas a perder mucho tiempo.


           Saludos
          MARCOS
     

  • Si, la arquitectura usada por la MSX para el tema del video, lo mismo que la C128 para el chip de 80 columnas, es mas flexible porque la memoria se maneja fuera del mapeado del procesador, lo que evita interrupciones en la ejecucion de programas cuando el chip de video necesita acceder a la memoria. La desventaja es que se tiene que hacer todo a traves de los registros del chip, y eso hace mas lento el acceso cuando se quiere mover muchos datos a la VRAM, ya que no se tiene acceso directo a cada byte de la memoria de video. En este caso es aun peor porque el chip recibe los datos en serie, pero tambien es un proyecto mucho mas modesto. El programa implementa una terminal bastante completa, soporta la reubicacion del cursor, tiene numerosos comandos de escape para apagar el cursor, hacerlo como linea o bloque, cambiar el tamaño (al doble) de las letras horizontal y/o verticalmente, borrar pantalla, etc. Tambien soporta creo que hasta 4 juegos de caracteres, eso depende del ATMega que uses, solo importa que tenga mas memoria, en mi caso solo pude conseguir ese modelo en encapsulado DIP, se conseguia otro mas grande en SMD y no me quise complicar la vida sin haber programado jamas uno de estos micros.
    Fijate este video corto, sobre todo la parte final donde implementa un juego, la velocidad de video es muy buena, segun calculamos con Pablo se puede lograr un minimo de alrededor de 6 fps escribiendo completamente la pantalla cada vez, pero dado que el micro soporta la reubicacion del cursor, es posible mostrar animaciones mas rapidas escribiendo solo las diferencias.
    http://www.youtube.com/watch?v=VQNT2bKiFv0

    El tener el juego de caracteres de la PC (el que se usa en DOS) es una ventaja porque se puede aprovechar una gran cantidad de soft para convertir imagenes en arte ASCII, con lo cual se pueden lograr resultados muy interesantes aproximados una maquina con graficos bitmap.
    Como tenia ganas de ver las posibilidades y soy de madera para hacer arte ASCII, me robe una parte de un texto del estilo tipico que ponian los crackers en las distribuciones de los juegos, hay que tener en cuenta que solo tengo 38x25 caracteres y los textos estan hechos para 80 columnas asi que solo se ve parte. Conecte la placa al sintonizador y de ahi al LCD y tome una foto.
    EPSN3016s
     

  • Adjunto el texto que mande a la placa por si alguien quiere compararlo viendolo en DOS o algun editor de texto que soporte el juego de caracteres.
    Para que se vea sin fantasmas lo que hice fue entrar al sintonizador por s-video, conectando la salida de video compuesto de la placa a la entrada de luminancia, dejando sin conectar la entrada de color. De este modo se ve una imagen monocromo perfecta sin bordes de colores inventados por el sintonizador. Asi tambien habia hecho con la salida de video compuesto monocromo de 80 columnas de la C128.
    Con respecto a los otros proyectos de video, estuve investigando mucho antes de elegir este, por supuesto que mi objetivo era una salida con bitmap de alrededor de 320x240, en lo posible 256 colores (o 16 minimo) con salida VGA, y tambien algun modo de 80 columnas de 16 colores o monocromo, para correr soft mas serio. Investigue los chips nuevos y no servian para lo que pretendia, ya que ahora todo esta hecho para manejar LCDs de forma directa (como para celulares o reproductores de musica o video) y con aceleracion 2D o 3D, ademas de ser inmanejables desde el punto de vista electronico (son SMD y extremadamente dificiles de soldar), mas aptos para comprarlos en placas armadas con un kit de desarrollo conectable a la PC. Ademas todo eso se suele programar en alto nivel, perdiendose la gracia de entender como funciona. Despues mire que se podia implementar con chips programables, descarte las FPGA porque son una solucion exagerada, justificable solamente para hacer una maquina entera, no un simple chip de video. Termine entonces buscando DSPs y microcontroladores, y me encontre con que los microcontroladores estaban al limite de lo necesario para generar el video que pretendia. La velocidad permite generar VGA en 320x240 y 256 colores, pero no para uso general sino al estilo Atari 2600, donde el programa esta escrito para generar de forma directa el video y no puede funcionar una cosa separada de la otra. Dado que lo necesitaba lo mas generico posible, me tuve que resignar a bajar las especificaciones a una salida de video compuesto, con lo cual ya el proceso necesario es menor y permite dedicar tiempo completo a la generacion de video.
    Por ahora ese va a ser mi punto de partida, ya que si esperamos a tener todo lo que queremos nunca vamos a hacer nada, en el futuro se iran logrando soluciones mejores, con mas resolucion y colores, o salida VGA. Si se escribe una BIOS y se trata de no hacer acceso directo al hard, no habra problema mas adelante en cambiar el chip por otro totalmente distinto.
    En cuanto al programador, no tuve tiempo de ponerme a buscar lo que publicaste de como grabar el micro, aunque no me acuerdo si lo publicaste o se lo pasaste por privado a los que te lo pidieron. Por suerte en los scripts de grabacion del AVRDude que ponen a disposicion la gente que hizo el TellyMate pude ver los valores de los bytes alto y bajo de los fusibles de programacion, asi que mirando la hoja de datos y las opciones del programador deduje como iban (es confuso que hay que chequear un bit en el programador para ponerlo en 0), y grabando exclusivamente los fusibles esos el micro empezo a andar (ya habia grabado el codigo antes).
    Me olvidaba, el principio de funcionamiento de este proyecto, igual que el implementado con un PIC18, es mas o menos el mismo que yo habia pensado utilizar en mi propio chip, que es basicamente tener una memoria de video de caracteres en los registros, una fila detras de otra, y cargar los datos de los caracteres en memoria de codigo, almacenando un byte por grupo horizontal de 8 pixels. Todo tiene que estar almacenado de forma tal que se pueda con dos coordenadas acceder con dos tablas de saltos a la linea horizontal actual a mostrar en pantalla. Lo que hace el programa es usar un puerto serie por hard programado a la velocidad adecuada para la generacion de video (bastante al limite del maximo permitido), de forma tal que se obtenga un grupo de 8 pixels desde la memoria de programa (que hace de ROM de caracteres) y se de la orden al registro de desplazamiento para empezar a enviar los pixels, mientras se busca el siguiente byte en las tablas. El margen de tiempo para hacer todo eso es tan estrecho que es imposible utilizar interrupciones, y se debe implementar la lectura del puerto RS232 de forma coordinada con la generacion de video. En el PIC18 se esta mas limitado porque no da la velocidad que tiene el ATMega8 de 16MHz (corriendo internamente a 32MHz), ya que si bien el PIC soporta la misma velocidad, su ciclo de ejecucion tarda casi el doble que el del ATMega8.
    Como comentario al margen, pense que podia encadenar varios chips monocromaticos generando cada uno un plano de bits para dar una imagen en colores, esto requeriria 4 micros para 16 colores, 8 para lograr 256, pero es realmente una locura. Tal vez precisamente por eso algun dia lo implemente.  shades ;D ;D
     

  • Que buena idea la de ponerlos en paralelo! es "facil" para lograr distinos tonos de grises, habria que averiguar como generar señal de colores en base a 3 señales RGB o HSL, una vez busque pero no encontre.

    Me encanto el video ese, ahora tengo muchas ganas de usarlo. Me agarro ahora cargo de conciencia porque deje abandonada una placa con un 6502 rodeada de un monton de cables que estaba haciendo, me da una fiaca tremenda revisarla ahora que esta casi lista (hace como 6 meses!) pero no tengo mas escusas ya hasta me compre el sintonizador de TV para la netbook para probarla mas simple. Voy a ver si ahora junto coraje y me enfrento a la maldita placa asi puedo avanzar algo, que bueno estaria hacer una maquina con un 6502 y esta salida de video!

    Vos pensas usar un 6502 para hacerla andar con esta placa?

          Saludos
         MARCOS
     

  • Todavia no me decido entre un 6502 y un Z80, estuve hablando con Pablo acerca de la memoria, y ambos queremos tener mas de los 64K posibles, en mi caso porque quiero manejar archivos TAP, D64 y otros que exceden ese tamaño. Por eso y para evitar ocupar un gran espacio en la placa con chips de memoria de baja capacidad estaba pensando en usar SIMMs de 30 o 72 pines, pero aca entra en escena el tema del refresco de las memorias, lo cual el Z80 simplifica un poco. Estuve investigando ahora y hay aplicaciones para usar esos SIMMs con PIC o ATMega, implementando tambien el refresco, asi que ahora creo que seria bueno hacer una especie de administrador de paginas de memoria y generador de refresco de DRAM todo en un PIC. Si hago eso me da igual el procesador que use. De todas maneras por ahora necesito experimentar con otra tecnologia, y eso lo voy a hacer con un PIC como procesador temporal, por ejemplo una de las primeras cosas que necesito hacer es justamente manejar un SIMM o leer el directorio de una tarjeta SD, que podra verse directamente en el monitor.  shades
    Mi idea es utilizar el PIC para escribir las rutinas de bajo nivel de E/S, y cuando quede resuelto ahi si traducirlo a Z80 o 6502. Tambien estaba pensando en agregar hard de temporizado asistido por un PIC, como un inicio un PIC podria tener un puerto de 8 bits que apareceria como una direccion de memoria al procesador, el micro colocaria un numero de 8 bits que representaria por ejemplo intervalos de 1ms cada uno, el PIC detendria el procesador y decrementaria el contador hasta llegar a cero, cuando reanudaria la ejecucion. De esta manera, el 6502 (o Z80) simplemente colocaria el numero en el PIC, ejecutaria 3 o 4 NOP esperando la detencion, el PIC lo "congelaria" por ese tiempo y el micro no se daria cuenta, simplemente el programa continuaria despues de los NOP y seria como si esas 3 o 4 lineas formaran un bucle de temporizado bastante preciso.
    Tambien habria que aprovechar para incorporar en el PIC de temporizado un puerto serie basico para conectar el procesador al chip de video, y de ser posible otro puerto serie para redireccionarlo a la salida RS232 para comunicacion con una PC.
    Agregando todo ese soporte de hard se podria escribir codigo que no diferiria mucho en 6502 o Z80, ya que funcionaria independientemente de la velocidad del micro o la duracion de los ciclos de ejecucion, lo unico que si seria dependiente del procesador es el mapeado de la ROM que estaria en sitios opuestos en el Z80 y el 6502.
    Con respecto a los chips de video en paralelo, me olvide de decir que la salida esa, de 4 bits porque no creo que valga la pena mas, tendria que ir a un circuito de paleta de colores, que por cada valor de 4 bits genere los bits RGB adecuados, eso se puede hacer con una GAL o una ROM que soporte la velocidad, el problema es que solo andaria en un monitor RGB de 15KHz asi que habria que agregar un modulador para verlo en video compuesto o s-video. De todas maneras seria un chip equivalente a una CGA en modo texto ya que esto daria 16 colores pero no graficos bitmap, y habria que modificar el programa para que funcione en base a un reloj maestro comun a los 4 chips.
     

Moderador (s): homecomputer, Selandari, ArielP, pastbytes, Durandal