QJUMP Ltd, 24 King Street, Ramton, Cambs.CB4 4Q (Reino Unido)
Manual traducido del inglés por E. DE JESUS
QLAVE 1988
La mayoría de los programas del QL pertenecen a una de las siguientes dos categorías principales, "extensiones residentes" y "programas transitorios". El SuperToolkit II es un ejemplo de una extensión residente, Quill lo es de un programa transitorio. Tal como su nombre indica, una extensión residente se diseña para ser cargada al principio de cada sesión de trabajo con el QL, y permanece residente por el resto de la sesión. De forma similar, un programa transitorio se carga cuando se le necesita, y puede ser eliminado de la memoria del QL cuando no se le necesite más.
Los programas invocados mediante "hotkey" son un caso especial diferente a los dos anteriores, ya que estos programas residen permanentemente, pero se empieza un programa transitorio al pulsar la "hotkey".
La situación se complica por el hecho de que algunos programas transitorios precisan de la presencia de un grupo particular de extensiones residentes, las cuales no pueden ser cargadas mientras haya programas transitorios presentes en el QL. La primera restricción es impuesta por el mismo programa, mientras que la segunda la impone el QDOS.
Este problema es suavizado por la facilidad BOOT del QL, que está pensada para ser usada en la carga de todas las extensiones residentes necesarias, las cuales pueden proceder de fuentes diferentes. El fichero BOOT se usa también en muchos programas comerciales para permitir a los usuarios el acceso inmediato al nuevo logicial - algunos usuarios no sobrepasan nunca este punto ¡ y reinicializan su QL cada vez que quieren cambiar de programa !.
La modificación de los programas BOOT para hacer frente a los nuevos logiciales, puede ir de muy fácil a imposible. Es fácil para los programas que se cargan con EXEC disN_nombredefichero, en cuyo caso no es necesario modificar tu propio fichero BOOT. Conversiones difíciles son aquellos casos en los que el fichero BOOT del programa original cae en la tentación de incluir mensajes de copyright, preciosos bordes, sonidos musicales u otros métodos de obscurecer los trozos útiles del código del fichero. Ficheros BOOT imposibles son aquellos que incluyen POKEs, o empiezan una aplicación con una sentencia CALL - estos pueden ser usados en algunas ocasiones, pero requieren el trabajo de un experto buceador en el código máquina, para poderlos convertir a una forma higiénica.
Para modificar tus propios programas BOOT, debes determinar que extensiones residentes son necesarios para ejecutar el logicial. Se puede determinar este extremo leyendo el manual o examinando el propio fichero BOOT del programa; puede pensarse que es una extensión residente cualquier código cargado por sentencias como la siguiente:
base=RESPR(tamaño):LBYTES disN_nombredefichero,base:CALL base
Puedes copiar las sentencias a tu propio fichero BOOT en el lugar apropiado, y puedes copiar también a tu disco BOOT normal el propio fichero contenedor de las extensiones. La forma anterior puede encontrarse repartida en varias líneas, u obscurecida por métodos como el de reservar solamente un área con el procedimiento RESPR y cargar mediante LBYTES varios ficheros dentro de dicha área. El fundamento, sin embargo, sigue siendo el mismo.
En los siguientes ejemplos, los tamaños dados para los ficheros no son necesariamente precisos: deberás usar el menú "Ficheros" de QRAM o el SuperToolkit II para encontrar el tamaño real necesario. Se asume que el medio BOOT es "flp1_", el cual, evidentemente, puede ser cambiado por cualquiera de tu elección. Todos los ejemplos usan la versión "ptr_gen" de la Interfase del Puntero, la cual trabaja tanto con la Interfase Interna para Ratón de QJUMP como con la Interfase del SuperMouse de Sandy, además de con el teclado. Esta versión sustituye a las versiones anteriores "ptr_kbd", "ptr_imi", etc. y a la invocada mediante el comando POINTER del SuperMouse de Sandy.
100 base=RESPR(12388):LBYTES flp1_ptr_gen,base:CALL base 110 base=RESPR(7762):LBYTES flp1_wman,base:CALL base 120 base=RESPR(25882):LBYTES flp1_hotkey,base:CALL base 130 HOTKEY
La sentencia HOTKEY de la línea 130 empieza el programa transitorio llamado HOTKEY, el cual es el responsable de que al pulsar "ALT"+"/" se empiece QRAM. Una vez que empieza el programa HOTKEY, no es posible reservar espacio para ninguna otra extensión residente sin eliminar dicho programa HOTKEY. Por ello la sentencia HOTKEY debe ser colocada después de todas las sentencias RESPR del fichero BOOT.
100 base=RESPR(16384):LBYTES flp1_tk2_rext,base:CALL base 110 base=RESPR(12388):LBYTES flp1_ptr_gen,base:CALL base 120 base=RESPR(7762):LBYTES flp1_wman,base:CALL base 130 base=RESPR(25882):LBYTES flp1_hotkey,base:CALL base 140 HOTKEY
o bien
100 TK2_EXT 110 base=RESPR(12388):LBYTES flp1_ptr_gen,base:CALL base 120 base=RESPR(7762):LBYTES flp1_wman,base:CALL base 130 base=RESPR(25882):LBYTES flp1_hotkey,base:CALL base 140 HOTKEY
La línea 100 inicializa el SuperToolkit II, en el primer caso a partir de un fichero "tk2_rext" creado mediante la versión configurable del Toolkit, en el segundo caso a partir de la ROM de una interfase de disco convenientemente equipada.
100 base=RESPR(5424):LBYTES flp1_qtyp_qspell,base:CALL base 110 base=RESPR(12388):LBYTES flp1_ptr_gen,base:CALL base 120 base=RESPR(7762):LBYTES flp1_wman,base:CALL base 130 base=RESPR(29538):LBYTES flp1_hotkey,base:CALL base 140 HOTKEY
Como en el caso del SuperToolkit II, se cargan las extensiones SPELL de la forma normal: el programa QTYP propiamente dicho se supone incluido en el "flp1_hotkey" junto a QRAM.
100 base=RESPR(16384):LBYTES flp1_tk2_rext,base:CALL base 110 base=RESPR(11242):LBYTES flp1_qmon_bin,base:CALL base 120 base=RESPR(5424):LBYTES flp1_qtyp_qspell,base:CALL base 130 base=RESPR(12388):LBYTES flp1_ptr_gen,base:CALL base 140 base=RESPR(7762):LBYTES flp1_wman,base:CALL base 150 base=RESPR(29538):LBYTES flp1_hotkey,base:CALL base 160 base=RESPR(9234):LBYTES flp1_qptr,base:CALL base 170 base=RESPR(5108):LBYTES flp1_ramprt,base:CALL base 180 HOTKEY 200 OUTLN #0;512,256,0,0 210 IF RMODE=8 THEN 220 WINDOW #0;448,40,32,216 230 ELSE 240 WINDOW #0;512,50,0,206 250 END IF 260 AT #0;1,0
De la forma señalada, se cargan todos los productos QJUMP. A parte de tener que cargar "wman" después de "ptr_gen", el orden de los ficheros no tiene importancia. Como siempre, la llamada HOTKEY debe venir después. La línea 200 y las siguientes son necesarias para el correcto funcionamiento del Toolkit del Puntero (QPTR).
100 base=RESPR(6074):LBYTES flp1_xtras,base:CALL base 110 base=RESPR(12388):LBYTES flp1_ptr_gen,base:CALL base 120 base=RESPR(7762):LBYTES flp1_wman,base:CALL base 130 base=RESPR(29538):LBYTES flp1_hotkey,base:CALL base 140 HOTKEY
El Editor de Digital Precision está escrito en SuperBasic y necesita el Turbo Toolkit para funcionar, de manera que en el fichero BOOT se carga el fichero "xtras". Se puede comenzar una copia del editor en cualquier momento ejecutándola desde el SuperBasic mediante la sentencia:
EXEC flp1_edt_bin
Por supuesto, el editor puede también ser ejecutado a partir del menú "Ficheros" de QRAM.
100 base=RESPR(10016):LBYTES flp1_qlib_run,base:CALL base 110 base=RESPR(1928):LBYTES flp1_qlib_bin,base:CALL base 120 base=RESPR(1476):LBYTES flp1_qlib_ext,base:CALL base 140 base=RESPR(12388):LBYTES flp1_ptr_gen,base:CALL base 150 base=RESPR(7762):LBYTES flp1_wman,base:CALL base 160 base=RESPR(29538):LBYTES flp1_hotkey,base:CALL base 170 HOTKEY
Este ejemplo carga las extensiones usadas para ejecutar el compilador Q_Liberator, el cual puede entonces ser ejecutado de la forma detallada en su manual. Como se carga también el sistema "runtime", cualquier programa que no lo incluya puede ser también ejecutado.
Con QRAM se incluye una utilidad llamada BOOT_MAKE que puede usarse para acelerar la carga de las extensiones residentes colocándolas todas juntas en único fichero, el cual se cargará más rápidamente que los ficheros individuales por separado. Puede haber, como efecto secundario, una pequeña reducción de la cantidad de memoria requerida.
BOOT_MAKE produce dos ficheros: un fichero en SuperBASIC nombrado normalmente "flp1_boot", y el fichero con las extensiones residentes que recibirá el mismo nombre pero acabado en "_rext". Los ficheros de extensiones pueden ser copiados desde cualquier número de medios fuente al fichero "_rext", cambiando el medio fuente si fuera necesario; como los ficheros son siempre escritos en el fichero "_rext" del medio de destino, éste debe permanecer en el mismo dispositivo hasta que BOOT_MAKE acabe. El diálogo para producir un fichero BOOT equivalente al descrito en el anterior ejemplo 5 podría ser el siguiente:
Boot filename> flp1_boot Command (ESC to finish)> Extension file (ESC to finish)> flp2_xtras Extension file (ESC to finish)> flp2_ptr_gen Extension file (ESC to finish)> flp2_wman Extension file (ESC to finish)> flp2_hotkey Extension file (ESC to finish)> Command (ESC to finish)> hotkey Command (ESC to finish)Nombre del fichero Boot> flp1_boot Comando (ESC para acabar)> Fichero de extensiones (ESC para acabar)> flp2_xtras Fichero de extensiones (ESC para acabar)> flp2_ptr_gen Fichero de extensiones (ESC para acabar)> flp2_wman Fichero de extensiones (ESC para acabar)> flp2_hotkey Fichero de extensiones (ESC para acabar)> Comando (ESC para acabar)> hotkey Comando (ESC para acabar)>
El fichero BOOT resultante sería:
100 base=RESPR(52106):LBYTES flp1_boot_rext,base:CALL base 110 HOTKEY
Alojado en / Hosted at: Sinclair QL Recursos en Castellano Sinclair QL Spanish Resources |