Grabación de ficheros con el Kernal

La rutina del Kernal involucrada en la escritura de ficheros es SAVE:

Save

A su vez, la rutina SAVE hace referencia a las rutinas SETLFS y SETNAM:

Setlfs y Setnam

Comparando estas tres rutinas con la grabación BASIC vista en la entrada anterior, la analogía salta a la vista:

  • Rutina SETLFS: Especificará el dispositivo y si el fichero incluirá cabecera de dirección.
  • Rutina SETNAM: Especificará el nombre del fichero.
  • Rutina SAVE: Especificará el rango de posiciones de memoria a grabar y dará la propia orden de grabación del fichero.

Llegados a este punto, lo mejor es que el lector revise y ejecute el programa de ejemplo. Se trata de un programa en ensamblador que graba en disco el contenido de una zona de memoria (que a su vez es otro pequeño programa).

Partiremos de una imagen D64 vacía como esta:

Crear D64

La conectaremos al emulador VICE (“Attach”) y ejecutaremos el programa de grabación con SYS 49152. Veremos esto:

Saving Miprograma

Y ahora tendremos una imagen D64 con el fichero “MIPROGRAMA”:

MiPrograma

En la siguiente entrada, veremos cómo cargar “MIPROGRAMA” desde un programa en ensamblador. Sin embargo, por el momento nos conformaremos con cargar y ejecutar “MIPROGRAMA” desde BASIC, básicamente para comprobar que está bien grabado y que se puede recuperar bien.

Cerraremos el emulador VICE actual y arrancaremos otro, de modo que partamos de un mapa de memoria completamente limpio. Conectaremos la imagen DISCO.D64 al nuevo VICE.

Dado que “MIPROGRAMA” es un programa en ensamblador, y no BASIC, la carga no debe producirse en la zona BASIC, sino en la dirección indicada por la cabecera del fichero ($c102 = 49410). Es decir, no deberemos usar LOAD “MIPROGRAMA”, 8, sino LOAD “MIPROGRAMA”, 8, 1 (el ,1 del final es fundamental):

Carga BASIC

Si hacemos LIST no veremos nada, porque no hemos cargado un programa en BASIC, sino un programa en ensamblador. Y si hacemos SYS 49410 lo ejecutaremos:

Ejecución BASIC

Como se puede observar, el programa que se ha cargado y ejecutado es el mismo que se grabó (ver fichero MiPrograma.asm), como no podía ser de otro modo.

En la siguiente entrada se verá cómo hacer esta carga también desde un programa en ensamblador.


Programa de ejemplo: Prog59

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s