esa rutina desde hace tiempo tambien la tenia pensada hacer para los scores, y no solo para esto, tambien para mejorar un juego simulador de máquina tragaperras que hice hace tiempo, para simular el avance de las frutas.
La diseñé para eso, para los scores. Poniendo un cero fijo como unidades la rutina contaría de diez en diez, ¡ideal para un buen mata marcianos!
Una forma fácil de que vaya más rápida, asi de pronto es llamandola dos veces (o más) en cada golpe de int en lugar de una.
No hace falta llamarla mas de una vez dentro del IRQ, juega con la variable TEMP y verás. :wink:
no la he mirado todavia por dentro la rutina, pero imagino que haces una rotación de bloques de 8 bits hacia arriba, en simbolos que no se usan copiando previamente los datos de los simbolos de los numeros en la zona que guarda los datos del juego de caracteres, ¿verdad?
Al menos es lo que yo hubiera hecho. Lo que no entiendo es por que tarda tanto la copia o generación de caracteres en la inicialización, siendo en código máquina... quizá habria que retocar la forma en que se gestionan los bucles de copia, pero tampoco es nada muy serio, teniendo en cuenta que solo ocurre una vez al principio del programa y no tarda una cosa exagerada...
¡¡Exacto!! Se copian los carácteres de la ROM a la RAM, se le dice al VIC que ahora los patrones del juego de carácteres están en la RAM y ahí la rutina trabaja con unos carácteres poco importantes. Pero la copia de la ROM a la RAM la hace un pequeño programa en BASIC, de ahí su lentitud.
Primero se hace un scroll hacia arriba del carácter destino, y después se utiliza un direccionamiento indexado con Y para coger la línea del patrón de bits correspondiente al carácter fuente que debe aparecer por abajo del carácter destino.
En definitiva, se vuelca el contenido de un carácter en otro pero línea a línea. Por supuesto con un algoritmo para que la rutina sepa cuando aparece un cero y acarree una unidad en la cifra de peso superior (cuando pasa del 9 al 10 o del 99 al 100 o ......).