Marcos, sos groso . . . ahora la excusa de que si le agregas un circuito es un lio . . . armaste un ATARI de cero chabón !!! Ahora terminalo como te gusta a vos, estereo, video compuesto re pulidito , etc
Ponerle el sonido, a la salida de sonido del TIA, tengo que conectarle los capacitores, resistencias y transistores necesarios para que genere el sonido. Siempre lo relego porque me dan ganas de hacerlo stereo,al tener las dos salidas independientes de cada una de las voces, (que el mother original van unidas), pero si le agrego un circuito independiente es un lio de componentes y tendria que ponerle 2 potenciometros, etc, etc
Muy bueno! Tenes la ventaja de que ya hay soft escrito para probar esa emulacion de ROM, a mi se me complica mas hacer eso porque todo el soft lo tengo que escribir yo, y no sabria si falla el programa o el sistema de carga en RAM. Por ahora como tengo poco para correr, porque no serian mas que unas lineas de codigo para destellar un led o alguna cosa simple, creo que voy a simular la ROM con el PIC, pero cuando este mas completa la placa no se si va a aguantar la velocidad, ya que quiero ir a 2MHz en lo posible, y como el 6502 accede a memoria en una de las dos fases del reloj, mi ROM en el peor de los casos tendria que soportar 4MHz. Si se complica voy a tener que hacer algun sistema como el tuyo por puerto serie, lo que pasa es que solo tengo un puerto y no quiero andar desconectando tanto (ahi tengo el PICStart Plus), o voy a tener que acelerar el desarrollo de la emulacion de ROM usando la flash de acceso paralelo.
Por ahora lo que estoy queriendo hacer es usar un SIMM de 30 pines, soldandole pines para que entre en la placa, pero estoy viendo como hacer el refresco de las memorias sin complicarme la vida. Tendria memoria de sobra que no voy a usar, pero es una solucion barata y compacta.
Mira mi idea es hacerme con el 6502, el PIC conectado a una RAM y la terminal esa que hiciste vos con un Atmel, y hacerla directamente en PCB, total no hay mucho que experimentar, para experimentar tengo esta del Atari.
Unifiquemos, hagamos la misma placa, te digo mas o menos mi idea:
* 6502
* RAM 64Kb
* ROM de 16KB. Por medio de un bankswitch (y un jumper) se selecciona si los 16Kb superiores se mapean a la RAM o la ROM. Durante el desarrollo no la usamos, pero una vez con un firmware terminado, la placa estaria buena que funcione con algo retro como una EPROM
* un 8255 para manejar perifericos, conectado a 3 puertos IDC10 para manejar de forma externa
* PIC 16F877 con puerto serial, tarjeta SD y acceso a la RAM, una modificacion de este programa para Atari
* Placa video ATMega
* Un puerto de expansion IDC20 para las direcciones y un IDC10 para datos
Habria que ver la forma mas facil de hacer la decodificcion del bus de direcciones, con una GAL o con 2 o 3 compuertas. Mi idea es usar las direcciones DFxx para manejar perifericos, de los 3 bits superiores con un multiplexor sacamos 8 lineas de select para 8 perifericos, y las 2 inferiores segun el periferico (el 8255 usa 2 lineas de adr)
Podemos ir haciendo la placa si usamos el mismo programa (Orcad tal vez)
Te conviene comprar otro placa COM o un puerto serial USB, pero igual tampoco hay que estar todo el tiempo actualizando el firmware del PIC, podes desenchufar el PICSTART, o comprarte el IDC2 USB que maneja mas micros. Asi es facil probar todo el mother desde una terminal serial de PC usando el PIC antes de meter el 6502, como hice aca, por ejemplo escribis la ram y lees el contenido, ver si podes manejar los perifericos, mandar datos a la terminar de video, etc, y colocas el 6502 cuando estas seguro que todo eso esta bien.
Si, por software, esta placa conviene hacerla lo mas simple posible, igual no te preocupes que seguro van a surgir problemas que la van a complicar, pero las optimizaciones quedaran para la siguiente.
Pensas temporizar el tren de pulsos RS232 directamente con el 6502? Hay que pensar en aprovechar algun PIC para incluirle esa funcion, ya que lo ideal seria poder trabajar al menos a 19200 bps para tener un video mas o menos fluido, eso para conectarse al ATMega de video.
Es muy comun el 8255, hay por todos lados. La verdad que tendria que ver cual es la memoria RAM mas comun que se consigue por ahi, yo tengo unas de 128Kb tiradas por ahi, pense que eran comunes, pero seguro 8Kb de RAM + 8Kb ROM para una placa simple creo que esta perfecto.
Como pensas tener los 64K? Con varias RAMs estaticas? Mi placa es un poco chica para eso, y esa es la razon de que este investigando los SIMMs, pero de ultima puedo por ahora usar el chip de RAM estatica de 8K que ya tengo, si igual dudo que escribamos en el futuro cercano tanto codigo como para llenarla. Los 16K de ROM me parecen bien, por ahora con 8K sobra pero hay que dejar el lugar reservado para 16K, dudo que se use mas que eso. Yo no creo que le ponga una EPROM en el futuro, pero si tengo pensado emular una con la memoria flash...
Podes poner el circuito de como esta conectado el 16F877 al sistema? En que programas el PIC? En C, BASIC o Assembler?
Si, por software, esta placa conviene hacerla lo mas simple posible, igual no te preocupes que seguro van a surgir problemas que la van a complicar, pero las optimizaciones quedaran para la siguiente.
Es muy comun el 8255, hay por todos lados. La verdad que tendria que ver cual es la memoria RAM mas comun que se consigue por ahi, yo tengo unas de 128Kb tiradas por ahi, pense que eran comunes, pero seguro 8Kb de RAM + 8Kb ROM para una placa simple creo que esta perfecto.
De hecho estuve pensando y voy a hacerlo lo mas simple posible:
*RAM estatica chica, 8Kb tal vez, la selecciono con la pata A15
*ROM chica (8Kb, 16Kb..) la selecciono negando A15
*CPU 6510 (tengo 2 de placas rotas de C64, espero que anden) asi aprovecho que tiene un puerto interno con 6 I/O y simplifico la placa. Le pongo un buffer entre las I/O y el mundo exterior por als dudas, de hecho puedo aprovechar el inversor
*Placa de video con ATMega8 conectado a uno de las salidas del 6510
*Entrada de teclado de PC conectada a otra I/O del CPU, tal vez la linea de Entrada de datos del teclado la puedo meter como interrupcion tambien.
*Un Led y un buzzer manejados por las I/O del micro
Lo programe con el Hitech C en el MPlab, en realidad copypastee distintas rutinas que tenia de otros programas, lo tengo que pulir un cacho antes de subir el codigo porque quedo hecho una porqueria, sobre todo con los miles de NOPs que le agregue cuando tenia un problema con la RAM (el problema resulto no tener nada que ver) y un monton de porquerias, igual todavia le falta la parte de manejar la tarjeta SD.
Esta primera placa la quiero hacer lo mas simple posible, 9600 creo que esta bien, no se bien cuanto tiempo por ciclo de refresco puedo enviarle datos a la plaquita de video, pero mientras pueda mostrar lo que escribis alcanza.Veo que cada bit a 19200 dura 52 us, asi que puede que funcione por soft, el tema es que se va a complicar hacer los ajustes de tiempo, pero si se usa una velocidad mas baja como 9600, que tambien por lo que estuve probando es aceptable, ya hay mas margen para ser precisos.
Aca mucho no consigo, por eso pido tantas cosas a Cika, por el momento mucho no puedo comprar pero algo se puede rescatar de alguna PC vieja. 8K tengo seguro, tendria que ver si rescato alguna otra memoria mas. 8255 no pregunte si se consigue en la zona, pero tengo una placa de 286 que por ahi tenga alguno.
Tengo un 6510, podemos usar eso para empezar, yo en el futuro quiero usar un 6502 estandar asi que el puerto integrado eventualmente lo reemplazaria, pero por algo se empieza.
Manejar PS/2 con el micro, ahi me parece que se va a complicar un poco, en mi diseño final segun lo que hablamos con Pablo es mejor usar un PIC que lea el teclado, que tenga un buffer de pongamos 10 o 15 caracteres, que aparezca al micro como una direccion de memoria y al leerlo se autodestruya, es decir que se pase al siguiente caracter en la proxima lectura. Tambien una opcion interesante es que si el micro escribe cualquier cosa en esa direccion, el PIC vacie el buffer. Se puede usar la opcion de PSP (Parallel Slave Port) del PIC16F877 por ejemplo, o usar un PIC de menos pines y alguna logica de decodificacion de direcciones. Usar un teclado directo como el de C64 simplifica las cosas pero ocupa dos puertos de 8 bits.
Yo trabajo todo en assembler, le tengo cierto rechazo a usar BASIC o C, pero supongo que todo es cuestion de tener el tiempo para probar, aunque lamentablemente por ahora no lo tengo.