La semana pasada use mi cuenta para comprar algo en ebay para un amigo, segun el seguimiento el envio desde EEUU llego en 2 dias a Buenos Aires, y al dia siguiente ya llego a Puerto Madryn, justo cayo el fin de semana asi que en la semana me voy a enterar si llego, pero teniendo en cuenta esto me parece que me tengo que olvidar de los chips de WDC. De todas maneras habia empezado a hacer una computadora con 6510 para hacer pruebas de hard y de programacion en assembler, ya que hace años que no programo en 6502, pero a medida que la definia se volvio un proyecto un poco mas ambicioso asi que va a ser una computadora completa, de 64K de memoria, 1MHz de reloj, alguna logica, memorias SRAM y algunos microcontroladores de soporte (uno para el video en modo texto y otro/s para E/S). El diseño intenta ser simple pero a la vez no desperdiciar recursos y ser lo suficientemente flexible para cualquier uso.
Ariel me mando unas SRAM de 32K, por lo cual el diseño se basa en dos memorias de 32K, mas un espacio de ROM de 16K, los primeros 48K se mapean con RAM y los ultimos 16K corresponden a la ROM, excepto los primeros 256 bytes de esos 16K que quedan reservados al espacio de E/S. Ese espacio se puede asignar a uno o dos decodificadores de 3 a 8, que seleccione 8 zonas de E/S de 32 bytes cada una, o 16 zonas de 16 bytes cada una, lo cual tiene que ser mas que suficiente para la mayoria de las aplicaciones.
Tengo todo hecho en borradores en varios papeles, y como eso lo hago cada tanto en algun que otro momento libre, si espero a pasarlo en limpio no publico nada, asi que aca va un bosquejo del mapa de memoria y algunos diseños que hice originalmente hasta llegar al actual.
El mapa esta diseñado para 16 zonas IO (E/S) de 16 bytes cada una, con dos chips de 3 a 8 encadenados, con lo cual se tendrian 4 lineas de direccion y 16 salidas que quedan listas para conectarse a chips de E/S, pero no esta incluido en el circuito porque cada uno lo adapta como quiera a su conveniencia. Estuve unos dias tratando de optimizar la decodificacion, y de paso le agregue una linea SHADOW que si esta en 1 activa los 16K de RAM debajo de la ROM cuando se accede a los ultimos 16K de los 64K (es decir entre 48K y 64K), esto es util para desarrollar codigo porque podemos tener una ROM basica de arranque que se copie a RAM y luego se desactive la ROM para dejar solo RAM. Pero esa linea si bien esta contemplada en el diseño no se puede activar hasta tener un chip de E/S que permita manejarla desde el procesador (con el 6510 se puede hacer directamente usando el puerto de E/S integrado).
Asi es como quedo el circuito por el momento:
Entran las ultimas 8 lineas de direccion, mas la señal SHADOW que por ahora se deja en 0 para que siempre los ultimos 16K (salvo el espacio de E/S) sea ROM, y salen las lineas de seleccion RAM0 para el primer chip de 32K, RAM1 para el segundo chip de 32K, del que solo se usan los primeros 16K, ROM para los ultimos 16K de los 64K totales (que coinciden con los segundos 16K de la segunda RAM), y la linea IO que se activa cuando se accede a la zona de 256 bytes que empieza en la direccion 49152 (48K), es decir los primeros 256 bytes de la zona de ROM. El circuito esta hecho un poco improvisado, no me acuerdo nada de logica booleana mas que lo que uso, y nunca hago circuitos tan grandes como para tener que optimizar, asi que las especificaciones estan sujetas a cambios sin previo aviso.
Por otro lado, cuando optimizaba algo me quedaban compuertas OR, las cuales son discriminadas por los fabricantes de chips, ya que las AND y las NAND existen con mas de 2 entradas mientras que las OR no, por lo cual tenia que convertir ORs en ANDs o NANDs para aprovechar mejor los chips. Las letras en las compuertas indican a que chip corresponde cada una, aunque tambien esta sujeto a modificaciones.