fede2222 escribió:Hermosa explicación saturn, por ahora vi la parte 1 y se entendió de 10.
Me alegro que al menos alguien la haya entendido. Ja ja!
fede2222 escribió:Es un z80 custom?.. Obviamente tenés investigado un montón. Después voy a buscar desarrollo en coleco para ir viendo código en ensamblador
Tengo entendido que no es "custom". Básicamente es un Zilog Z80, junto a dos procesadores de Texas Instruments: uno de video (TMS9928A para NTSC y TMS9929A para PAL) y otro de sonido (SN76489). Después hay 8K de memoria ROM para la BIOS, 1K de RAM de propósito general y 16K de RAM para la placa de video.
Recién encontré el esquemático de la Colecovision:
http://www.atarihq.com/danb/files/colecovision.pdf
Estuve pensando y al cartucho llegan las línea A0-A14 de direccionamiento de memoria, lo que alcanzaría para poder mapear los 32KB totales del cartucho (2^15 = 32768 = 32K) por lo que podríamos omitir los CS0-CS3 que, creo, se implementaron para que los cartuchos no tengan que agregar un integrado adicional para poder habilitar el número de memoria EPROM de 8K a leer. Esa parte se ve claramente en el integrado 74LS138 del esquemático que linkee antes.
fede2222 escribió:Ahí vi los otros dos...
Asumo que la idea es que cuando arranca el cartucho lee de la rom el programita que muestra el listado, y lo muestra como un cartucho hacia la coleco, y los "32k" primeros de la RAM del MC es para que el cartucho "listado" los use a su antojo. O se carga el cartucho "listado" en los primeros 32k y se lo lanza?
El usuario selecciona la imagen del cartucho, lee de la SD y lo copia en la 2da parte de la RAM del MC. El MC sabe que la próxima solicitud de memoria desde el coleco la mapea a esta segunda parte de su RAM. Así ya comienza a ejecutar la "ROM" del cartucho
Reinicia el ProgramCounter al cero del cartucho y cuando pida al MC instrucciones será de los segundos 32k la RAM del MC
Esta muy interesante esto...
Sí fede, esa es exactamente la idea! Arrancamos enviándole una memoria ficticia de 32K que es básicamente un programita para que liste y muestre los contenidos de la SD, con la excepción que puede que necesitemos "atrapar" al procesador en algunos momentos críticos para que nos de tiempo a leer la SD, generar los menúes, etc. También se podría hacer multitarea sin bloquear el flujo del programa pero complica el programa del uC. Una vez que el usuario elige el juego, se lee de la SD el contenido del juego a otros 32K de memoria RAM disponibles en el uC y hacemos saltar el PC al vector inicial del cartucho o invocamos un soft reset si es que lo implementa la BIOS del Colecovision. En ese caso ya el uC brinda la data del cartucho cargado en RAM y se comporta como un emulador de memoria EPROM.
Es importante destacar que antes de hacer el cambiazo de direccionamiento a los contenidos del cartucho a emular y enviar al PC al vector inicial, es necesario garantizar que los registros compartidos (el STACK, INTERRUPCIONES, REGISTROS ESPECIALES DEL PROCESADOR, VIDEO, SONIDO, ETC) estén seteados al estado inicial con los que dicho juego original se encontraría al encenderse la Colecovision originalmente. Sino seguro aparecen glitches o se cuelgan los juegos en algún momento. Es decir que hay que limpiar los registros que usamos durante nuestro programita de carga y selección de juego antes de pasarle limpio y devolverle el control al cartucho a emular.
fede2222 escribió:El MC viene con algo propio para leer el filesystem de la SD, o tenés que hacer algo propio?
No conozco ninguno que venga listo para leer SD. Pero hay librerías y es sólo cuestión de implementarlas. Lo he hecho en otras marcas de microcontroladores, en estos de NXP nunca me tocó hacerlo pero no es para nada imposible.