Páginas y slots en Sjasmplus

Todo sobre la creación, diseño y programación de nuevo software para
nuestro Spectrum

Moderador: Sir Cilve Sinclair

Responder
Avatar de Usuario
Rinconete
Jack The Nipper
Mensajes: 193
Registrado: Mar Oct 09, 2007 7:32 pm
Ubicación: Valladolid

Páginas y slots en Sjasmplus

Mensaje por Rinconete » Dom Nov 04, 2007 9:43 am

Estoy usando SjASMPlus 1.07 para ensamblar un programilla.

Siguiendo los ejemplos que acompañan la distribución del ensamblador utilizo las directivas DEVICE ZXSPECTRUM48 al comienzo y SAVESNA "programa",Inicio al final, de modo que se genera una imagen SNA cargable en un emulador. La etiqueta Inicio es el lugar donde debería saltar para ejecutar el programa. El listado contiene varios ORGs para situar las distintas rutinas y datos en sus respectivos lugares.

He estado haciendo pruebas y todo iba bien: ensamblo y después cargo con Spectaculator o EmuZWin. Después de añadir la última rutina he comprobado que al cargar en el emulador ya no se ejecuta el programa, en su lugar me aparece el intérprete de BASIC y el mensaje "OK, 0:1".

Sin embargo, si utilizo el depurador y me voy hasta la zona de memoria donde está ubicado el programa veo que está allí. Si cambio el PC a pedal y lo sitúo en la posición de arranque y ejecuto todo va bien. Esto pasa tanto con Spectaculator como con EmuZWin, por lo que parece que se trata de alguna característica de SjASMPlus.

Revisando la documentación veo que cuenta con un par de directivas sospechosas SLOT y PAGE. Parece como si la memoria estuviera paginada (en bloques de #4000 bytes) y hubiera que indicar la página de trabajo. He hecho alguna prueba sin éxito y la documentación es muy básica.

¿Alguien entiende lo que está pasando?

Avatar de Usuario
TrueVideo
Jack The Nipper
Mensajes: 195
Registrado: Mié May 23, 2007 8:34 am
Ubicación: BCN
Contactar:

Re: Páginas y slots en Sjasmplus

Mensaje por TrueVideo » Mar Nov 13, 2007 8:41 pm

Desde luego aquí pasa algo raro. He probado a reproducir la situación que comentas y parece que la dirección de ejecución del snapshot es siempre la del primer ORG. Nunca me había dado cuenta de esto porque con el modelo de memoria de 128K (el que utilizo siempre) sí funciona:

Código: Seleccionar todo

   DEVICE   ZXSPECTRUM128

   SLOT   3
   PAGE   0

;-------------------------------

   ORG   $C000

START1   DI

.LOOP   
   LD   A,4
   OUT   (254),A
   INC   A
   OUT   (254),A
   JR   .LOOP

;-------------------------------

   ORG   $CA00

START2   DI

.LOOP   
   LD   A,1
   OUT   (254),A
   INC   A
   OUT   (254),A
   JR   .LOOP

;-------------------------------

   SAVESNA "TEST.SNA",START2


Cambiando el segundo parámetro de SAVESNA verás que se ejecuta una u otra rutina, las cuales están en zonas de memoria delimitadas por ORG. En el modelo 48K debería funcionar exactamente igual, por lo que deberías reportarlo al autor como posible bug (o si lo prefieres puedo hacerlo yo mismo).

Por lo que respecta a las directivas SLOT y PAGE, estas no tienen que influir para nada en tu caso ya que estás trabajando con un modelo de memoria sin paginación. Al seleccionar el modelo de 48K con DEVICE el ensamblador crea el correspondiente mapa de memoria por defecto.

J

Avatar de Usuario
Rinconete
Jack The Nipper
Mensajes: 193
Registrado: Mar Oct 09, 2007 7:32 pm
Ubicación: Valladolid

Re: Páginas y slots en Sjasmplus

Mensaje por Rinconete » Vie Nov 16, 2007 9:05 am

oops, olvidé responder: además de lo que comentas hay alguna otra cosa rara porque parece que cuando hay varios ORG y el código supera cierto tamaño la ejecución ya no se hace a la dirección que se indica en la directiva SAVESNA, o al menos es lo que me pasa con un programilla que tengo entre manos. En cuanto meto un DEFS 640 deja de ejecutarse ¿?.

Voy a reportarlo al autor a ver si tiene explicación. Gracias!

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados