Problema extraño con Display Toolkit y Q-emuLator

Subforo oficial del Sinclair QL: realiza aquí las consultas relativas a tu QL.

Moderador: Sir Cilve Sinclair

Problema extraño con Display Toolkit y Q-emuLator

Notapor programandala.net el Jue Abr 28, 2011 2:32 pm

Estoy teniendo problemas extraños en Q-emuLator con tres palabras de Display Toolkit: DMODE, FLIM_W y FLIM_H. No se enlazan bien al cargar la extensión con la ROM MGE (y a veces con la ROM JM). No siempre pasa con las tres a la vez. Con las ROMs JS y Minerva no pasa esto. He hecho muchas pruebas y no sé qué causa el fallo, no encuentro ninguna lógica. Con QPC2 no he observado este problema.

Uso DMODE en un boot para preparar la pantalla antes de cargar el programa principal. Pues cuando DMODE no ha sido enlazado correctamente, lógicamente es interpretado como una variable no declarada y nada funciona.

Algunas veces sí funciona con solo quitar alguna línea del programa o poner algún REMark aquí y allá... sin ninguna lógica, porque son líneas que no se ejecutan en las pruebas ni tienen nada que ver.

Sospeché que el tamaño del fichero tenía algo que ver, pero no era así. Sospeché que el problema estaba en la opción de Q-emuLator para pulsar F1 o F2 automáticamente en el arranque, pero tampoco era así. Ya no imagino más posibles causas.

He hecho muchas pruebas y no averiguo nada. No sé si el problema está en la extensión o en el emulador o en las ROMs o en alguna combinación entre ellos.

Cuando DMODE, FLIM_W o FLIM_H no son enlazados se aprecia fácilmente porque se quedan en minúsculas en el listado, pero como he dicho no siempre pasa con las tres a la vez.

Añado unos ejemplos de boot con los que he hecho pruebas:

Esto debería imprimir el modo de pantalla actual (0 u 8) y parar, pero con la ROM MGE imprime "*" porque DMODE no ha sido enlazado:

Código: Seleccionar todo
  100 tk2_ext
  110 lrespr "flp1_display_code"
  120 print dmode
  130 stop
  330 defproc init_ql_colours
  400 enddef
  410 deffn rgb(red,green,blue)
  430 enddef
  440 defproc init_the_window
  450   let csize_w=3-(scr_w=512)
  460   let csize_h=scr_w>512
  470   let tw=fopen("con_")
  480   csize #tw,csize_w,csize_h
  490   let tw_w=minimum(800,scr_w)
  500   let tw_h=minimum(600,scr_h)
  510   let tw_x=(scr_w-tw_w)/2
  520   let tw_y=(scr_h-tw_h)/2
  530   window #tw,tw_w,tw_h,tw_x,tw_y
  540   paper #tw,black
  550   ink #tw,light_grey
  560   wipe_the_window
  570   init_the_font
  580 enddef
  590 defproc wipe_the_window
  600   border #tw,0
  610   cls #tw
  620   border #tw,8
  630 enddef
  640 defproc splash_screen
  650   if flim_w(#0)=512 and flim_h(#0)=256
  660     lbytes dev$&img_ayc8_scr,address(#0)
  670   endif
  680 enddef


Pero si quito las líneas640-680, el programa funciona bien con la ROM MGE!

Si quito todo lo que sobra, sigue funcionando (pero no con la ROM JM):

Código: Seleccionar todo
  100 tk2_ext
  110 lrespr "flp1_display_code"
  120 print dmode
  130 stop


Si reinicio el emulador con la ROM JM y no arranco desde el fichero, sino que le doy los comandos a mano, entonces DMODE sí funciona...!

Otra prueba que no funciona:

Código: Seleccionar todo
  100 tk2_ext
  110 lrespr "flp1_display_code"
  120 print dmode
  130 stop
  330 defproc init_ql_colours
  400 enddef
  410 deffn rgb(red,green,blue)
  430 enddef
  440 defproc init_the_window
  450   let csize_w=3-(scr_w=512)
  460   let csize_h=scr_w>512
  470   let tw=fopen("con_")
  480   csize #tw,csize_w,csize_h
  490   let tw_w=minimum(800,scr_w)
  500   let tw_h=minimum(600,scr_h)
  510   let tw_x=(scr_w-tw_w)/2
  520   let tw_y=(scr_h-tw_h)/2
  580 enddef
  590 defproc wipe_the_window
  630 enddef
  640 defproc splash_screen
  680 enddef
 1700 deffn prog_device$
 1850 enddef
 1860 deffn prog_found_in(device$)
 1910 enddef


Si le quito la línea 520, DMODE funciona con la ROM MGE!

Lo he intentado con y sin TK2_EXT, con LRESPR y con LBYTES+CALL. Nada cambia.

Otra prueba que no funciona... a menos que quite la línea 510!:

Código: Seleccionar todo
  100 rem tk2_ext
  110 rem lrespr "flp1_display_code"
  110 let a=alchp(1094):lbytes "flp1_display_code",a:call a
  120 print dmode
  130 stop
  330 defproc init_ql_colours
  400 enddef
  410 deffn rgb(red,green,blue)
  430 enddef
  440 defproc init_the_window
  450   let csize_w=3-(scr_w=512)
  460   let csize_h=scr_w>512
  470   let tw=fopen("con_")
  480   csize #tw,csize_w,csize_h
  490   let tw_w=minimum(800,scr_w)
  500   let tw_h=minimum(600,scr_h)
  510   let tw_x=(scr_w-tw_w)/2
  580 enddef
  590 defproc wipe_the_window
  630 enddef
  640 defproc splash_screen
  680 enddef
 1700 deffn prog_device$
 1850 enddef
 1860 deffn prog_found_in(device$)
 1910 enddef


El manual de Display Toolkit cita posibles problemas con la ROM JM, pero solo para la palabra BYTES, nada que ver con esto.

No veo la lógica por parte alguna. ¿A alguien se le ocurre algo?

¿Alguien querría ver si le pasa lo mismo, copiando los ejemplos?
Marcos Cruz (programandala.net)
Avatar de Usuario
programandala.net
Jack The Nipper
 
Mensajes: 189
Registrado: Mie Ago 04, 2010 9:20 pm
Ubicación: España

Re: Problema extraño con Display Toolkit y Q-emuLator

Notapor programandala.net el Lun May 02, 2011 11:17 am

Siguiendo algunos consejos en qlforum.co.uk he llegado a bajarme otra vez la extensión Display (www.dilwyn.me.uk/tk/display2.zip), por si mi copia estaba corrompida, pero era idéntica.

Tras muchas vueltas, moviendo líneas del boot aquí y allá he dado con un fichero de arranque que funciona :) ¡Pero no tiene lógica! Aún no sé qué es lo que está mal. Es uno de los errores más raros que recuerdo.
Marcos Cruz (programandala.net)
Avatar de Usuario
programandala.net
Jack The Nipper
 
Mensajes: 189
Registrado: Mie Ago 04, 2010 9:20 pm
Ubicación: España

Re: Problema extraño con Display Toolkit y Q-emuLator

Notapor afx el Mar May 03, 2011 5:14 pm

¿Qué hace el Display Toolkit? ¿Qué facilidades aporta? (Nunca he usado ese toolkit).
afx
Sabreman
 
Mensajes: 396
Registrado: Dom Feb 24, 2008 11:56 pm

Re: Problema extraño con Display Toolkit y Q-emuLator

Notapor programandala.net el Mie May 04, 2011 12:28 am

afx escribió:¿Qué hace el Display Toolkit? ¿Qué facilidades aporta? (Nunca he usado ese toolkit).


Proporciona funciones para averiguar si los nuevos modos de pantalla están disponibles, cuál es el tamaño máximo, el modo de resolución de color, la dirección de memoria de la pantalla y su ancho de línea en octetos... Nada que no se pueda hacer en SMSQ/E. La ventaja es que con esta herramienta puedes hacer eso ANTES de saber si estás en QDOS o en Minerva o en SMSQ/E.

Sirve para poder preparar la pantalla del programa según las características de la máquina en que esté funcionando.
Marcos Cruz (programandala.net)
Avatar de Usuario
programandala.net
Jack The Nipper
 
Mensajes: 189
Registrado: Mie Ago 04, 2010 9:20 pm
Ubicación: España

Re: Problema extraño con Display Toolkit y Q-emuLator

Notapor programandala.net el Sab Jun 18, 2011 10:12 pm

En el hilo de presentación de la aventura «Asalto y castigo» cuento la explicación de este problema.
Marcos Cruz (programandala.net)
Avatar de Usuario
programandala.net
Jack The Nipper
 
Mensajes: 189
Registrado: Mie Ago 04, 2010 9:20 pm
Ubicación: España


Volver a Sinclair QL

¿Quién está conectado?

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