Gracias META.
EL PIC18F252 con cristal de 12Mhz (12MIPS) en realidad esta corriendo a 48Mhz, porque utiliza un multiplicador interno 4X. Si logra aguantar el overclock con cristal de 16Mhz, tendre entonces el PIC corriendo a 64Mhz, con rendimiento de 16MIPS, esta semana consigo el cristal a 16Mhz y ya pedi un par de AD725 como muestras gratis a analog devices.
En principio mi intensión era utilizar una SRAM Externa, pero ya eran 2 integrados a utilizar y las SRAM llevan muchas patitas (15 de direcciones + 8 de datos + 3 de control) con lo que se complicaba el disenio, claro que puedo hacerlo pero mi intensión era generar el video unicamente con el PIC18F252.
Estaba en eso cuando encontre en internet el proyecto UzeBox, que con tan solo un microprocesador de 8 bits con 4K ram interna, generaban juegos de 240x224 pixels a 256 colores. Me sorprendio demasiado, y pense si yo podria ser capaz de generar algo parecido con las reducidas prestaciones del PIC18F252.
Empeze a hacer ensayos en papel, de posibles algoritmos para generar imagenes similares con las instrucciones privilegiadas de la serie 18F, si se consigue pero solo bajando la calidad de los pixels de 8bits (256 colores) a 4bits (16 colores), cosa que es muy aceptable, ya que los antiguos adaptadores de video EGA, trabajan a 16 colores y generaban muy buenos juegos y el nintendo de 8 bits generaba imagenes de 16 colores tambien.
Los 4bits es mejor, porque al leer un byte de la memoria FLASH del pic estaremos leyendo 2 pixels (4bits) en lugar de 1 pixel (8bits), con lo que conoseguimos disminuir los ciclos nescesarios para procesar un pixel. Ademas OJO A LO SIGUIENTE... Si presento un byte en el puerto B, donde tendremos 4 bits inferiores para el pixel.. pues tan solo con intercambiar los 4 bits superiores con los inferiores se obtiene el otro pixel en tan solo 1 ciclo, SWAPF PORTB.
chequen algo (esta no es la rutina final, la rutina final esta muy optimizada)
TBLRD*+ // Leemos un byte de la memoria FLASH
MOVFF TABLAT,PORTB // Presentamos el byte en el puertob.. Se muesta el primer pixel de 4bits
SWAPF PORTB // Intercambiamos los 4bits inferiores con los 4bits superiores. Se muestra el segundo pixel de 4bits.
Esto solo ocupo 5 ciclos de reloj, para mostrar 2 pixels de 4bits.
Espero haberles dado la idea principal de mis rutinas, repido.. mis rutinas estan muy optimizadas y son mas complejas que lo que presente aqui..
Suerte y si alguien consigue overclockear el PIC18F252 mas alla de los 64Mhz (Cristal 16Mhz) les agradecere si comparten como lo hicieron.