Actualizo, por el momento estoy trabajando en el mapa de memoria, lo que tengo definido es que va a haber 64K en 8 bloques de 8K, con un decodificador de 3 a 8 para seleccionar cada uno de los bancos de 8K, en los ultimos 16K de los 64K totales (desde 48K hasta 64K) va a haber ROM. La ROM basica (BIOS, kernel o como se la quiera llamar) va a estar en los ultimos 8K (56K hasta 64K), en los 8K anteriores (48K hasta 56K) en el futuro va a estar el BASIC o el lenguaje que se elija hacer (falta demasiado para eso pero el espacio ya esta reservado). En los anteriores 16K (32K hasta 48K) voy a implementar un sistema de paginado para usar varios MB de RAM, aunque por un tiempo (probablemente largo) eso va a quedar como RAM fija para el usuario. Los primeros 8K son para el sistema y parte para el usuario (programas BASIC por ejemplo), y lo que queda en medio, de 8K a 32K es memoria para los programas y datos del usuario.
Es decir quedaria algo asi:
56K - 64K ROM : (8K: BIOS, sistema operativo)
48K - 56K ROM : (8K: BASIC, aplicaciones integradas)
32K - 48K RAM : (16K: Por ahora RAM, en el futuro, una ventana de 16K para paginacion)
8K - 32K RAM: (24K: Memoria RAM de usuario)
0 - 8K RAM: (8K: Memoria RAM base, pagina 0, pila, E/S, datos de sistema y programas/datos del usuario)
La pagina 0 (posiciones 0 a 255) son usadas por el 6502 para el modo de direccionamiento de pagina 0, la pagina 1 (posiciones 256 a 511) son usadas por la pila del 6502, la pagina 2 (posiciones 512 a 767) queda reservada como espacio de E/S, dividida en 16 bloques de 16 bytes cada uno, de los cuales por el momento se van a usar 3 o 4 nada mas. Ya que no tengo mucho espacio en la placa, mi idea es aprovechar las GAL que tengo para hacer la decodificacion de direcciones, pero lo mismo se pueden usar compuertas logicas si se tiene el espacio fisico en la placa.
Si consigo un 8255 se puede agregar a la placa para mantener compatibilidad con la placa de Marcos, pero definitivamente voy a incluir un PIC en mi diseño para manejar tal vez algun puerto serie, aunque no puedo definirlo como parte del sistema por ahora porque va a ser como un comodin, todavia no se sabe que va a resolver.
Me tengo que conseguir un SIMM de 30 pines, de 1MB por lo menos, para investigar el refresco de las DRAMs, cuando pueda resolver eso el SIMM va a reemplazar al chip de 8K SRAM que tengo actualmente, utilizandose 48K del SIMM, ya que los ultimos 16K estan reservados a la ROM. Tengo un monton de SIMMs de 72 pines, pero se complica mas soldarlos a la placa por la separacion de las pistas y la cantidad de lineas.
En cuanto al ATMega de video, tengo que ver como usar la linea de datos de vuelta al host, ya que tiene esa opcion para devolverle al micro informacion tal como la posicion actual del cursor, algo util para evitar tener que llevar la cuenta en RAM principal de todo lo que se envio a pantalla, ya que el chip es una terminal totalmente independiente. Tengo que probar un emulador de chip SID hecho tambien con un ATMega8, pero me parece que acepta los datos en serie y no en paralelo como el chip original, tampoco esta muy documentado. El sitio del proyecto es este:
LINKDe todas maneras el sonido por ahora no es importante, es probable que lo arme como una placa intercambiable porque no estoy seguro de querer usar sonido SID en esta maquina, me es mas util el sonido digital de 8 bits ademas de tener un sintetizador con ondas basicas. La reproduccion de audio digital es algo que necesito para poder usar mensajes grabados en una memoria flash serie, algo que ya tengo hecho en proyectos con PIC.
Me olvidaba, para el refresco de las DRAMs por lo que vi se necesita detener el micro aproximadamente por 3ms cada algo asi de 4ms (los tiempos dependen de la cantidad de memoria), si se quiere hacer un circuito generico, y dado que no me termina de convencer el perder tiempo de procesamiento, quiero encontrar la manera de hacer el refresco por partes, entrelazado con la ejecucion del 6502. De esta manera el 6502 no se detendria nunca por el refresco, pero el circuito estaria atado a la velocidad del micro, ya no se podria usar por ejemplo en un Z80 o con un 6502 mas rapido. Por esto lo ideal seria planificarlo para un micro de 2MHz y en todo caso adaptarlo despues a 1MHz si se usa un micro de esa velocidad. La ventaja de todo esto es que podria usar SIMMs y tener una gran cantidad de memoria en poco espacio fisico y de forma muy barata.