• En estas últimas semanas me dediqué a desensamblar y documentar el codigo de la expansión de comandos Sprite BASIC para C64, algo que quería hacer hace varios años, por curiosidad, para saber como funciona una expansión de comandos y si se puede, agregar más comandos.
    En el archivo adjunto se encuentra el codigo fuente del Sprite BASIC (spritebasic_dis.asm) y un mapa de memoria practicamente completo (Spritebasic-map.txt)
    El codigo fuente esta en formato ACME con comentarios en ingles. Hay algunas notas en castellano donde encontre lugares donde se podría optimizar el codigo.
    El codigo fuente se puede ensamblar con ACME directamente, lo que genera un archivo .prg identico byte a byte al original, solo que mucho más chico ya que no incluye al final del archivo toda la basura de más que se grabó en el original al generarlo desde el listado BASIC.

    ]spritebasic_source.zip[/file]
     

  • Estuve mirando un poco el codigo (todavia no lo probe el sprite basic), que complicacion que el vic lo mapeen a otra area de la RAM, a mi me sacas el poke 1024 y no se que hacer en el basic! y por lo que veo a la vez te roba de los 16Kb del VIC para correr el programa en la misma zona! no queda espacio para los sprites y para acceder al VIC a la memoria de sprites hay que tocar el mapeado? y lo mismo para la memoria de color en D800? que lio!
    Cuando corrija el ultimo bug (o mejor dicho el ultimo bug que a esta altura me importa corregir) del explorador del DirectLoader64, me quiero hacer algun juego para la maquina, porque aprendi unas cuantas cosas y junte experiencia con muchos temas muy molesto, sobre todo lo del mapero de memoria, con un programa mas o menos grande como este (14Kb) pero que usa mucha RAM (mas de 32 Kb creo) te das cuenta que lo mas molesto es el mapeo de RAM, hay que saberlo elegir bien del principio como mapear el VIC, si elegis uno de los 4 bloques que no te conviene perdes un monton de tiempo despues ajustando todo.
    Yo uso el DASM y me parece berreta en muchas cosas, sobre todo que no devuelve bien el errorlevel cuando hay un error y a veces no me entero que no ensamblo bien y corro un programa con 0 bytes, y tampoco me gusta como implementa las subrutinas y  declaraciones locales. Tambien un par de veces se colgaba directamante hasta que cambiaba de orden alguna declaracion, no es un programa muy serio.
    El ACME que ventajas tiene? yo no encontre mucha documentacion. Es mas completo?
    Saludos
    MARCOS
     

  • El VIC lo mapea en C000-FFFF, el sprite basic usa C000-CBCA para guardar sus comandos.
    Despues en CC00 vienen los 1000 bytes de la pantalla de texto del BASIC, seguido de los 8 punteros de los sprites
    En E000-EFFF estan las definiciones de los sprites, y en F000-FFFF el juego de caracteres.
    Los sprites y los caracteres estan en la RAM por debajo de la ROM del Kernal, pero desde el punto de vista el VIC no hay drama porque siempre ve RAM en esa zona.
    Desde el punto de vista del spritebasic lo que hace es banquear la RAM al ejecutar un comando de definicion de caracteres o sprites, y volver a banquear la ROM al terminar el comando.
    En esas ocasiones y al iniciar el sprite basic son las unicas en las que se usa el banqueo de RAM/ROM

    Y el BASIC solo pierde 4K de espacio de variables.

    La RAM de color en D800 no es problema porque el VIC siempre la ve en la direccion en la que esta la pantalla de texto, sin importar cual sea. (la RAM de color usa los 4 bits superiores del bus de datos de 12bits del VIC)

    No puedo hacer una comparación entre el ACME y el DASM porque yo siempre he usado ACME, la documentación es bastante buena, viene dentro del zip. Lo que tiene de bueno es que hay version Linux (hay que compilarla)

    El único problema que tuve fue con las etiquetas calculadas que use en el spritebasic (que serían las de tiempo de ejecución). No las pude usar como parametro de saltos condicionales porque las toma (correctamente) como variable de 16bits en lugar de como una etiqueta y calcular el offset.

    Una ventaja que tiene, al menos no se si lo tendra el DASM, es que tenes comandos para entrar texto en formato ASCII, PETSCII o codigo de pantalla. Para poder 'pokear' el texto directamente a la pantalla de texto.
     

  • El VIC lo mapea en C000-FFFF, el sprite basic usa C000-CBCA para guardar sus comandos. Despues en CC00 vienen los 1000 bytes de la pantalla de texto del BASIC, seguido de los 8 punteros de los sprites En E000-EFFF estan las definiciones de los sprites, y en F000-FFFF el juego de caracteres. Los sprites y los caracteres estan en la RAM por debajo de la ROM del Kernal, pero desde el punto de vista el VIC no hay drama porque siempre ve RAM en esa zona. Desde el punto de vista del spritebasic lo que hace es banquear la RAM al ejecutar un comando de definicion de caracteres o sprites, y volver a banquear la ROM al terminar el comando. En esas ocasiones y al iniciar el sprite basic son las unicas en las que se usa el banqueo de RAM/ROM Y el BASIC solo pierde 4K de espacio de variables. La RAM de color en D800 no es problema porque el VIC siempre la ve en la direccion en la que esta la pantalla de texto, sin importar cual sea. (la RAM de color usa los 4 bits superiores del bus de datos de 12bits del VIC) 

    the woz

    Ahora que lo explicas me doy cuenta que en realidad la forma en que mapean el VIC es optimo, porque no entorpecen la memoria del basic y aprovechan la RAM escondida detras de la ROM.
    Ademas si los sprites y caracteres solamente se escriben desde el programa (solo los lee el VIC) entonces no hay ni que cambiar de bancos, porque la PLA cuando es un acceso de escritura a A000-BFFF o E000-FFFF aunque este mapeda la ROM, envia la escritura a la RAM de atras (si por ejemplo lees E000 y escribis en E000 sin tocar la parte de mapeo, haces una copia de la ROM en RAM) asi te ahorras el problema de la proteccion contra interrupciones o resets mientras trabajas en la memoria de sprites, porque siempre se puede leer la Kernal.
    Me gusto tanto el mapeo que me parece que es el que mas me conviene para cuando haga un nuevo juego, porque mando todos los sprites al final y lo mismo la/las pantallas y tengo libre un bloque continuo de ram mas abajo, las veces que toque el mapeo del VIC ni tome en serio este mapeo, ahora me doy cuenta que es el mas groso en muchos sentidos, los juegos grandes lo deben usar todos asi.
    Voy a buscar despues documentacion del ACME, pero me parece que por el momento siguo en el DASM, mal que mal me funciona.
    Lo de los textos con codigos C64 no me afecta porque para la parte de texto escribi mis propias herramientas en C para generar binarios ya convertidos, me gusta hacen programas externos para no depender tanto del compilador, cada vez intento usar mas mis propios lenguajes y transformarlos a la salida final (codigo autogenerado), que labure la computadora no yo.
    Saludos
    MARCOS
     

Moderador (s): homecomputer, Selandari, ArielP, pastbytes, Durandal