•  

  • interesante el uzebox


    La verdad es que si, tiene una interesante resolución grafica y... 256 colores.

    Para el proyecto de computadora se podria usar como tarjeta grafica

    Ademas no es muy complicado de montar
     

  • bueno Angel ahi te lo envie por mail el libro un abrazo..Lucas
     

  • bueno Angel ahi te lo envie por mail el libro un abrazo..Lucas


    Lo acabo de recibir, parece muy interesante, muchas gracias. Un abrazo

    Ángel
     

  • Bueno, reviviendo este tema cuento brevemente los (pocos) avances hasta ahora. Como dije alguna vez en mi opinion el problema fundamental para construir una computadora es el chip de video, ya que no se comercializan los chips clasicos y ahora todo lo que se vende excede el nivel de complejidad que andamos buscando. Lo que hay ahora son todas aplicaciones para procesadores por lo general RISC de 32 bits, no diseñadas para ser conectadas a cosas tan modestas como un procesador Z80 o 6502, y menos para trabajar en assembler. Por otro lado tampoco tiene sentido armar una especificacion con un chip VDP como el de las MSX o un chip de sonido como el SID de la C64, ya que estariamos desarmando maquinas para armar otra. La idea es usar chips clasicos que todavia se fabriquen, o en todo caso tecnologia actual del nivel de complejidad adecuado para el proyecto (nada de FPGAs o CPLDs y cosas por el estilo), como ser PICs o microcontroladores similares para implementar por ejemplo un chip de sonido o de E/S (interfaz con tarjetas SD, IDE, teclado o mouse PS/2, etc.).
    Estuve en estos meses, en el poco tiempo que me quedo, investigando alternativas para generar video con microcontroladores, vi varias aplicaciones capaces de generar video en colores en un TV, pero todas eran consolas, lo cual implica que dentro del microcontrolador se encuentra el generador de video, la memoria de video y el programa ejecutable (el juego por lo general), con lo cual no tiene aplicacion para una computadora, y su adaptacion para convertirlo en un chip de video con RAM de video externa y un bus conectado a un microprocesador le agrega codigo extra que ya vuelve inaplicable el poder grafico disponible como consola y reduce las capacidades del chip.
    Tambien estuve mirando la consola uzebox, hecha con un ATMega64 que si mal no recuerdo trae 4K de memoria RAM interna, lo cual lo hace adecuado para mostrar texto (si lo usaramos como chip de video), descubri que esos chips son clones de los AVR, y superan a los PIC porque ejecutan casi 4 veces la cantidad de instrucciones por segundo usando la misma frecuencia de reloj. El chip corre overclockeado a 28MHz (es de 20MHz originalmente) pero dice que a 20MHz es tambien usable, lo cual me llevo a investigar un poco mas las series mas nuevas de los PICs buscando algo con mejor rendimiento. Vi que los PIC18 siguen tomando 4 ciclos de reloj por instruccion al igual que las series anteriores, y que pueden correr hasta 32MHz (al menos lo que se consigue en Argentina), insuficiente para compararse con el ATMega del proyecto, ya que tendriamos 8 MIPS contra mas de 20 del ATMega. Esto me llevo a buscar en series mejores y vi que recien la serie 24 que creo es de 16 bits, divide el reloj por 2 en vez de 4, pero ya es una tecnologia poco comun, con lo cual me quede desilusionado con los PIC, al menos en lo teorico.
    Sin embargo hice varios esquemas de como seria una implementacion de chip de video con un PIC, y segun mis calculos lo mas que podria lograr seria una imagen unicamente de caracteres (sin bitmaps) al mejor estilo ZX81, blanco y negro, de 32x24 caracteres, a 50Hz. Lo de 32 caracteres es por una cuestion de redondeo para poder calcular con menos codigo la direccion de memoria de un caracter en pantalla, y las 24 filas es para tener una resolucion cuadrada en una pantalla 4:3. Hice diseños usando RAM de video y ROM de caracteres externas, pero al final la configuracion optima termino siendo incluir la ROM de caracteres dentro del PIC (serian 2K) y la RAM de video de forma externa, con la posible variacion de incluirla internamente si se usa un PIC18 y usar un sistema de puertos para acceder indirectamente a la "VRAM" interna, al mejor estilo VDP de la MSX. De usar RAM de video externa tenemos la complicacion de la colision entre el acceso por parte del PIC y del microprocesador, que queda pendiente para resolver, ya que prefiero que el video no tenga bordes y eso hace necesario que sea una RAM de doble acceso o que se divida la pantalla en varios chips de memoria, por ejemplo en 4 chips, para que siempre haya 3/4 de la memoria accesibles en un momento dado.
    Hasta donde llegue con mi diseño asumi que el PIC como mucho podia llegar a manejar cada caracter y no mas que eso, ya que la velocidad le impide manejar cada pixel, asi que con cada caracter de la RAM de video el PIC buscaria el byte en la ROM de caracteres para el caracter y la linea correspondientes, y este byte representaria los 6 u 8 pixels de ancho que se deben imprimir en pantalla en ese momento. Este byte tendria que pasar a un registro de desplazamiento cuya salida seria directamente la luminancia de la señal de video. De esta manera el PIC buscaria el byte correspondiente al caracter actual, le dejaria el trabajo al registro de desplazamiento, e inmediatamente comenzaria a buscar la siguiente fila de pixels correspondiente al siguiente caracter.
     

  • Investigue un poco los puertos serie del PIC para usarlos como registro de desplazamiento, ya que esto acortaria el codigo ademas de simplificar la parte electronica, pero no vi ningun modo directamente aplicable y por lo tanto lo deje para investigarlo mas adelante, ya que no sabia si podian trabajar a la velocidad requerida por el video.
    Una vez que tuve una idea mas clara de lo que queria, volvi a buscar implementaciones similares, y esta vez pude encontrar una: LINK
    Para mi sorpresa encontre que el proyecto es muy similar, y si bien requiere algunas pequeñas modificaciones, me confirmo que era posible. Leyendo un poco el codigo me di cuenta donde es que esta el poder de la serie 18 de los PIC, mas que en la velocidad bruta de otros micros, la evolucion esta en varias mejoras al conjunto de instrucciones y a la organizacion de la memoria. Estos chips eliminan muchas limitaciones del paginado de memoria existente en las series anteriores, que hacian que aunque se tuviera mucha memoria en la mayoria de los modelos no se pudiera disponer por ejemplo de mas de 256 bytes contiguos, lo cual complicaria la implementacion de una memoria de pantalla. Tambien se agregaron instrucciones para manejar tablas de valores en ROM que reducen el tamaño del codigo requerido y permite trabajar con tablas mas grandes (antes se podia manejar un maximo de 255 valores), pero lo que mas me sorprendio fue el agregado de varios registros indice de 16 bits para direccionamiento indirecto, y que encima se puedan acceder con modos de pre-incremento, post-incremento y post-decremento, que ayudan a reducir el codigo significativamente.
    Para que tengan una idea, el PIC puede trabajar a 32MHz y ejecuta en condiciones normales 1 instruccion por cada 4 ciclos, esto es un maximo de 8 MIPS es decir 8 instrucciones por microsegundo. Una linea de video dura 64 microsegundos, lo cual si vamos a imprimir 32 caracteres hace que tenga que enviarse un caracter cada 2 us (microsegundos), por lo tanto por cada caracter en pantalla podemos ejecutar un maximo de 16 instrucciones, pero esto es el maximo ya que en ocasiones se necesita ejecutar instrucciones que requieren el doble de tiempo, por lo cual por caracter vamos a poder ejecutar entre 8 y 16 instrucciones como maximo. Con tan poco margen, el maximo teorico si se pudiera imprimir cada pixel con una sola linea de codigo que ejecute en 1 ciclo, se podrian lograr 16 pixels por caracter, lo que nos da 32 caracteres x 16 pixels = 512 pixels en blanco y negro, pero con la imagen fija y codificada en el programa. Si quisieramos leer la imagen desde memoria o que sea modificable ya no se podria lograr esa resolucion, ni siquiera la mitad, por esto es que sin hard adicional solamente se puede imprimir texto.
    La implementacion de ese proyecto hace uso de todas las ventajas que enumere de la serie 18, es decir utiliza una zona de memoria contigua como RAM de video, utiliza las instrucciones para acceder rapidamente a una tabla que contiene la ROM de caracteres, y hace uso del incremento automatico y los punteros de 16 bits, con lo cual obtiene un codigo suficientemente compacto, tanto que permite el funcionamiento por interrupciones, una cada aproximadamente 64 us, y hasta puede procesar el puerto serie del PIC para comunicarse con el dispositivo que le envia los caracteres.
    El proyecto basicamente es una terminal serie que recibe caracteres y los imprime en pantalla, consta de 38 columnas x 16 filas, mas una fila extra como linea de estado. Puede comunicarse a 1200, 2400, 4800 o 9600 bps, tiene scroll de pantalla hacia arriba y no implementa otros codigos como el borrado de pantalla o la ubicacion del cursor en una fila y columna determinadas. Ademas de esto implementa el registro de desplazamiento en el mismo PIC usando un puerto SPI, activandolo y desactivandolo para que actue como se requiere, de manera que el hard es extremadamente simple, funciona con un cristal de 8MHz ya que utiliza una caracteristica del PIC de multiplicar la frecuencia de reloj internamente a 32MHz, y usa un DAC basico de 3 resistencias para la salida de video, mas un capacitor de acople en la alimentacion del PIC.
    Las modificaciones que habria que hacer serian eliminar el puerto serie, implementar un sistema de puertos de 8 bits para comunicarse con el microprocesador, y definir algunos comandos basicos para ajustar la posicion del cursor, borrar pantalla, leer y escribir posiciones de memoria de la RAM de pantalla, leer la posicion del cursor, y alguna otra cosa que se nos ocurra. Tambien se podria ajustar la resolucion para adaptarla al sistema PAL, ya que ahora trabaja a 60Hz para un TV NTSC y se podria llegar a aumentar al menos la cantidad de filas que son muy pocas, eliminando ademas la linea de estado para que todas sean iguales.
     

  • En fin, creo que adaptando este proyecto ya podemos empezar con el resto, y de paso se simplifica el diseño ya que es adaptable tanto a un Z80 como a un 6502, y dejaria mas tiempo para ejecutar programas que el disponible en una maquina Sinclair, ya que no habria colision en el acceso a la VRAM, aunque por otro lado el acceso se hace de forma indirecta, tal como en una MSX.
    Partiendo de esta base queda para definir el procesador, memoria, entradas/salidas, escribir una BIOS, un editor, un lenguaje de programacion, y mientras tanto es posible que para cuando todo eso este resuelto ya tengamos implementado un sistema de video en color.  wink
     

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