JAZZ V6.5
(c) 1995 by Mika Heiskanen & Jan Brittenson
(Documento traducido del original en ingls)

   Biblioteca de Desarrollo en RPL del Sistema y Lenguaje Mquina
   **************************************************************


CONTENIDO
=========

   1 Introduccin
      1.1 Copyrights y Reconocimientos
      1.2 La Biblioteca Jazz
      1.3 Instalacin y Borrado de la Biblioteca
      1.4 Modo descubierto de Jazz
      1.5 Tablas de Entradas
      1.6 Biblioteca Universal de Fuentes

   2  El Ensamblador de RPL del Sistema/Lenguaje Mquina
      2.1 Errores
      2.2 Ensamblado del RPL del Sistema
         2.2.1 Generacin de Variables Lambda
      2.3 Ensamblado del Lenguaje Mquina
         2.3.1 Macros
         2.3.2 Ensamblado Condicional
         2.3.3 Expresiones
         2.3.4 Generacin de Etiquetas
         2.3.5 Depuracin
      2.4 Ensamblado de Bibliotecas
      2.5 Diferencias con las Herramientas HP (HP-Tools)

   3  El Desensamblador de RPL del Sistema/Lenguaje Mquina
   4  El Depurador del RPL del Sistema
   5  El Depurador del Lenguaje Mquina
   6  La Pila del RPL del Sistema
   7  El Catlogo de Entradas
   8  El Editor del RPL del Sistema/Lenguaje Mquina
      8.1 El Visualizador
   9  Utilidades de la Tabla de Entradas


1. Introduccin
===============

1.1 Copyrights y Reconocimientos
--------------------------------

Todos los ficheros de la biblioteca Jazz tienen el copyright (c) por Mika
Heiskanen a menos que se indique lo contrario.

La biblioteca Jazz se distribuye bajo dominio pblico confiando en que sea de
utilidad, pero se suministra "tal cual" y puede modificarse sin previo aviso.
No se da ninguna garanta de ningn tipo con respecto al software o la
documentacin. El autor no se hace responsable de cualquier error ni de
consecuencias de cualquier tipo relacionadas con el software y la
documentacin.
Queda dicho.

Se permite la copia de todo el paquete Jazz sin modificaciones siempre que
las copias no se hagan o se distribuyan para la reventa (exceptuando el cobro
de los gastos de copiado).

Crditos extras y reconocimientos:

   Jan Brittenson       El programa DB es originalmente de la biblioteca MLDL
                        de Jan y todava tiene su copyright. Los mnemnicos
                        se han cambiado a los usados por HP y se han hechos
                        algunos otros cambios mas o menos importantes.
   Jens Kerle           Correccin de errores
   Dan Kirkland         Reescritura de la subrutinas de espera de tecla de
                        ED/EC. Ordenacin de las tablas por defecto.
   Will Laughlin        Bsqueda hacia atrs y tecla EC en ED
   Christophe Meynard   Ordenacin alfabtica y bsqueda en EC. Tecla de
                        relleno (Fill) en ED. Edicin de registros en DB.
                        Reformateo de la pantalla en DB
   Mario Mikocevic      Base del desensamblador de instrucciones en lenguaje
                        mquina. GNU Tools (Herramientas GNU)
   Detlef Mueller       Inspiracin a partir del paquete RPL48.
   & Raymond Hellstern
   Rick Grevelle        Fuente mediana
   Davor Jadricevic     Fuente pequea original.
   Al Arduengo          Fuente pequea mejorada
   Cary McCallister     Por responder.

Probadores Beta y sugerencias:

   Seth Arnold         Bill Levenson
   Douglas Cannon      Tom van Migem
   Carlos Ferraro      Mario Mikocevic
   Rick Grevelle       Detlef Mueller
   Joe Horn            Richard Steventon
   Boris Ivanovich     Kurt Vercauteren
   Jens Kerle          Vladimir Vukicevic
   Dan Kirkland        Christ van Willegen
   Jeoff Krontz        Stefan Wolfrum
   Will Laughlin

   y muchos ms

1.2 La Biblioteca Jazz
----------------------

La biblioteca Jazz proporciona comandos para ensamblar, desensamblar y
depurar tanto el rpl del sistema como el lenguaje mquina. Este documento
describe solo los comandos proporcionados, no los lenguajes en s. Para
informacin sobre los lenguajes, remtase al paquete de herramientas
publicado por HP (HP-Tools), especialmente a los ficheros RPLMAN.DOC,
RPLCOMP.DOC y SASM.DOC. De ahora en adelante se supone que se est
familiarizado con los aspectos fundamentales de ambos lenguajes.

Se recomiendan los siguientes ficheros disponibles en
hpcvbbs.external.hp.com: 

   dist/ms-dos/tools.exe                        HP Tools (Herramientas HP)
   dist/hp48g/programming/entries/ent_srt.zip   Entradas Ordenadas
   dist/hp48s/programming/entries/entries.zip   Entradas ordenadas por
                                                direccin
   dist/unix/sadhp105.zip                       Desensamblador Unix

Las GNU Tools estn disponibles en fly.cc.fer.hr:

   pub/hp48/gtools


1.3 Instalacin y Borrado de la Biblioteca
----------------------------------------

Para instalar la biblioteca Jazz necesitas como mnimo:

   - Una GX con suficiente RAM o una tarjeta RAM en la ranura 1
   - Una S/G con suficiente expansin de RAM
   - Una SX con una tarjeta RAM en la ranura 1 o 2 

Los comandos de Jazz no funcionarn desde un puerto cubierto, as que no se
puede instalar Jazz en los bancos 2 a 33 de la GX.

Para instalar la biblioteca en el puerto 0: (similar para el puerto 1)
   a) Elimina cualquier versin antigua con :0:992 PURGE
   b) Carga la biblioteca en tu HP48
   c) Pon la biblioteca en la pila y purga la variable creada en el proceso
      de carga.
   d) 0 STO
   e) Ejecuta las tecla OFF-ON o haz ON-C

1.4 Modo Jazz descubierto
-------------------------

Desde la versin  4.9, Jazz incluye el comando JAZZ, cuyo propsito es
permitir el uso de Jazz por quines solo tienen una sola tarjeta con ms de
128K y que, por tanto, tienen que ponerla en la ranura de tarjetas numero 2
de la GX.

El comando JAZZ espera encontrar la biblioteca Jazz en el puerto 2 y si es
as, cambiar las variables de entorno mantenidas por la HP48 de modo que
piense que solo hay un nico puerto visible. En otras palabras, la HP48
pensar que el puerto 2 es el nico existente y no se dar cuenta que, de
hecho est trabajando como el puerto 1 (descubierto).

Para que el comando JAZZ funcione el usuario debe almacenar tanto Jazz como
las tablas de entrada, descritas en la siguiente seccin, en el puerto 2 de
la tarjeta multi-banco y entonces ejecutar JAZZ para iniciar el modo
descubierto.

En el modo descubierto:

   -  Todos los puertos superiores son inaccesibles
   -  El puerto 2 se comporta como si fuera descubierto

Desgraciadamente la HP48 es lo suficientemente buena como para darse cuenta
de la intrusin durante el chequeo del puerto despus de un OFF-ON y se
producir un arranque en caliente. Esto significa que el usuario debe tener
cuidado de no dejar que los comandos ED/EC/SSTK/SDB se pasen de tiempo
mientras esperan que se pulse una tecla.

El comando JAZZ es solo el primer intento de solucionar el problema aunque lo
siguiente que se estudiar es:

   El comando UNJAZZ que restaura el entorno normal de nuevo.

Hasta entonces la nica manera de salir del modo descubierto es ON-C u OFF-ON
como se describi arriba. Y si es posible, puedo hacer el proceso automtico
incluyendo las llamadas a JAZZ/UNJAZZ en todos los comandos disponibles en la
biblioteca Jazz. Esto podra dar lugar a algunos problemas imprevisibles,
pero confo en que funcionar.


1.5 Tablas de Entradas
----------------------

Jazz permite usar dos tablas de entradas diferentes:

   RPL.TAB  -  Entradas ordenadas por su nombre.
   DIS.TAB  -  Complementa a RPL.TAB proporcionando ordenacin por
               direcciones.

El propsito de las tablas es el mismo que el de entries.o para HP y GNU
Tools, proporciona los nombres para los programas y objetos normales en ROM.
Sin las tablas tendras que usar direcciones para todos los objetos de la ROM
en vez de nombres, o asignar nombres a las direcciones en cada cdigo fuente.
En cualquier caso, la programacin sin los nombres de entradas apropiados es
extremadamente extenuante, y as, aunque Jazz no necesita las tablas para
operar, se recomienda encarecidamente su uso.

Las tablas proporcionadas en este paquete se construyeron a partir de la
ltima versin de la tabla de entradas soportada por HP, con algunas
modificaciones menores que consider necesarias. Las tablas se almacenan
dentro de una biblioteca para su fcil mantenimiento y acceso, pero la
biblioteca se puede separar en objetos si alguien slo quiere mantener la
tabla de nombres (RPL.TAB). DIS.TAB proporciona una ordenacin por
direcciones de las entradas con lo que se consigue un incremento crucial de
velocidad al desensamblar comandos, por lo que, de nuevo, se recomienda
mantener ambas tablas.

Las tablas se pueden almacenar en cualquier puerto. Sin embargo almacenarlas
en un puerto cubierto significa que cuando se accede a las tablas, se copian
en la RAM de usuario. Esto implica que la memoria libre efectiva disponible
disminuye y, desde luego, hay cierta prdida de velocidad debido al copiado.
Sin embargo, yo personalmente mantengo las tablas en un puerto cubierto, de
modo que no debe ser tan malo.

Si alguien ha estado usando las tablas de entradas suministradas con los
paquetes de Jazz anteriores a la versin 4.2, se recomienda que el usuario
coja las tablas de este paquete en vez de aquellas, ya que han cambiado y se
ha mejorado la ordenacin. La tabla se construy a partir del fichero
hpentr.a, que tambin se suministra con el paquete.

gentab2.c es una versin modificada de gentab.c de Detlef Mueller. La versin
modificada generar el cdigo fuente de una biblioteca, dada una tabla de
entradas como dato. gentab2 tambin tiene en cuenta las entradas preferidas
en el desensamblado ordenando los nombres para una direccin dada basndose
en su orden en la entrada original. Sintaxis: gentab2 <SupRomEntr.a> tabla.a


1.6 Biblioteca de Fuentes Universal
-----------------------------------

Jazz necesita que este instalada la biblioteca de fuentes universal
conteniendo las fuentes pequea y mediana para funcionar apropiadamente. Por
conveniencia, se suministra con el paquete. Para instalarla cargar "ufl3.lib"
y proceder con el procedimiento habitual de instalacin de bibliotecas. Ten
en cuenta que Jazz requiere que UFL este instalada en el mismo puerto que
Jazz - normalmente en el puerto 1.


2  El Ensamblador de RPL del Sistema/Lenguaje Mquina
=====================================================

Al contrario que las herramientas proporcionadas por HP, Jazz solo tiene un
comando para ensamblar cdigo fuente. El ensamblador supone que el cdigo
fuente es RPL a menos que se cambie por medio de instrucciones especiales.

   Comando:       ASS
   Pila:          ( $ --> ob )
   Descripcin:   Ensambla la cadena de caracteres fuente
   Teclas:        La tecla ON aborta el ensamblaje
   Banderas de Usuario:
          1 -  Modo Informe activado (enlentece el ensamblaje
               considerablemente!)
          7 -  Desactiva las tablas de entrada

En principio, el comando ASS es equivalente a los siguientes programas,
puestos uno a continuacin del otro

      RPLCOMP  -  Precompilador RPL 
      MAKEROM  -  Constructor de Bibliotecas 
      SASM     -  Ensamblador del Saturno 

En realidad, lo que hace el ensamblador es simplemente cambiar el modo
interno cuando se encuentra algunas instrucciones especiales. Sin embargo hay
algunos cambios obvios, como que faltan varios mnemnicos, pero tambin hay
algunos nuevos para facilitar la programacin.


2.1  Errores
------------

Al contrario que el ensamblador del PC, ASS se detiene en el primer error que
encuentra. Para que el mensaje de error sea lo mas claro posible, no se
ejecuta el cdigo interno de manejo de errores, slo se emula lo justamente
necesario su comportamiento. La pantalla de error resultante se muestra en
fuente pequea como sigue:

             Parte superior de la pantalla
         +---------------------------------+
         |ErrorMensaje       lnea/posicin|
         |Instrc/Lnea Fuente              |

Para evitar comportamientos inesperados, el cdigo de error emulado espera
que exista una trampa estndar de errores (SysErrorTrap) en la secuencia de 
instrucciones RPL, si ste no es el caso, entonces debe asumir, por defecto,
que la trampa de errores puede ser crucial para el programa que llam al
ensamblador. As que se reintroduce el cdigo de error normal para
proporcionar la entrada adecuada en la trampa de errores. Para aquellos
programas que encuentran necesario mantener los mensajes de errores completos
desde ensamblador, una trampa de errores que empiece con ":: NOP" tambin
causa que se muestren los mensajes completos. Esto debera ser til, por
ejemplo, en las substituciones internas del SOL (el entorno normal de
usuario) y as, por ejemplo, SSTK usa esta caracterstica.

2.2  Ensamblaje del RPL del Sistema
-----------------------------------

El ensamblado del RPL del Sistema es el modo por defecto de ASS y funciona
ms o menos como se explica en RPLMAN.DOC y RPLCOMP.DOC. Los comentarios en
el modo RPL son cualquier lnea que comienza con "*" y cualquier cosa
encerrada entre parntesis. Observe que RPLCOMP tambin necesita que haya un
espacio en blanco despus del carcter "(" inicial.

Los objetos que generan instrucciones son como sigue:

   ;                     --> fin de objeto compuesto, ej SEMI
   {                     --> inicio de una lista, ej DOLIST
   }                     --> fin de una lista, ej SEMI
   ::                    --> inicio de un programa, ej DOCOL
   SYMBOL                --> inicio de un smbolo, ej DOSYMB
   UNIT                  --> inicio d una unidad, ej DOEXT
   # hhhhh               --> binario del sistema
   #hhhhh                --> binario del sistema          [1]
   ddddd                 --> binario del sistema          [1]
   PTR hhhhh             --> puntero
   ACPTR hhhhh hhhhh     --> puntero de acceso, solo G/GX
   ROMPTR hhh hhh        --> objeto puntero rom 
   ddd.dd                --> nmero real
   % ddd                 --> nmero real                   [2]
   %% ddd                --> nmero real largo             [2]
   C% ddd ddd            --> nmero complejo               [2]
   C%% ddd ddd           --> nmero complejo largo         [2]
   HXS     <len> <hh.h>  --> nmero hex                    [3]
   GROB    <len> <hh.h>  --> grob                          [3]          
   LIBDAT  <len> <hh.h>  --> datos de biblioteca           [3]
   BAK <len> <hh.h>      --> objeto copia de seguridad     [3]
   LIB <len> <hh.h>      --> objeto biblioteca             [3]
   EXT1  <len> <hh.h>    --> tipo externo 1, solo S/SX     [3]
   EXT2  <len> <hh.h>    --> tipo externo 2                [3]
   EXT3  <len> <hh.h>    --> tipo externo 3                [3]
   EXT4  <len> <hh.h>    --> tipo externo 4                [3]
   ARRY  <len> <hh.h>    --> formacin                     [3]
   LNKARRY <len> <hh.h>  --> formacin encadenada          [3]
   CODE  <len> <hh.h>    --> objeto de cdigo              [3]
   NIBB  <len> <hh.h>    --> nibbles variados
   $ "<string>"          --> string                        [4]
   "<string>"            --> string                        [4]
   ID <string>           --> objeto identificador          [4]
   LAM <string>          --> objeto identificador lambda   [4]
   TAG <string> <..>     --> objeto etiquetado             [4]
   CHR <char>            --> objeto carcter               [4]

[1]   En vez de generar un objeto, un binario del sistema se busca en las
      reas estables de la ROM y si se encuentra se genera el puntero a ese
      objeto en su lugar. (RPLCOMP no lo hace).
[2]   El valor tambin puede ser -Inf, Inf o NaN, lo que significa valores
      infinitos o un valor indefinido. Observe que estos valores solo tienen 
      significado en lenguaje mquina, no en RPL del Sistema. (RPLCOMP no
      hace esto).
[3]   La longitud del campo tambin puede ser cero, en cuyo caso se genera un
      objeto nulo.
[4]   Se realizan substituciones con caracteres especiales en la parte de
      cadena de caracteres.

Otras instrucciones soportadas son:

xROMWORD                   -->   puntero o ROMPTR dependiendo del nmero de
                                 biblioteca al que pertenece el comando. (Por
                                 ejemplo, "xDUP" se compila como puntero pero
                                 xASS lo hace como puntero rom)
INCLOB  <nombre>           -->   Incluye el objeto almacenado en la variable
INCLUDE <nombre>           -->   Incluye el cdigo fuente
DEFINE  <instruc> <cadena> -->   Define un substituto para la instruccin.
                                 Las substituciones no se podrn hacer dentro
                                 de instrucciones compuestas, por ejemplo:
                                 "ID <instruc>" no est permitido.
CODE <salto de lnea>      -->   Inicia el ensamblado de Cdigo Maquina
ASSEMBLE                   -->   Inicia el ensamblado de Cdigo Maquina


2.2.1 Generacin de Variables Lambda
------------------------------------

Para facilitar el uso de las variables lambda NULLLAM, Jazz implementa
uniones lambda locales como sigue:

   {{ etiqueta1 etiqueta2 .. etiquetaN }}

se compila a

   ' NULLLAM <#N> NDUPN DOBIND (o 1LAMBIND si slo hay 1 etiqueta)

Despus de la unin las etiquetas se pueden usar as:

   etiqueta1  --> 1GETLAM
   =etiqueta1 --> 1PUTLAM
   !etiqueta1 --> 1PUTLAM
   etiqueta1! --> 1PUTLAM

El nmero mximo de variables en la declaracin es 22. Las igualdades son
efectivas hasta la prxima unin de variables lambda.

Por ejemplo, el siguiente programa se ensambla a 

   ::                    ::
      {{ A B }}             ' NULLLAM TWO NDUPN DOBIND
      B A!        -->       2GETLAM 1PUTLAM
      ABND                  ABND
   ;                     ;
   

2.3  Ensamblaje del Lenguaje Mquina
------------------------------------

El ensamblador cambia al modo de lenguaje mquina cuando se encuentra una
instruccin especial ASSEMBLE o el par especial CODE-ENDCODE. En el primer
caso la instruccin RPL cambia de nuevo al modo RPL del Sistema. Los
mnemnicos soportados son bsicamente aquellos descritos en SASM.DOC

El comportamiento de los siguientes mnemnicos ha cambiado:

   TITLE   texto    Texto mostrado en la lnea 1, lnea 2 borrada
   STITLE  texto    Texto mostrado en la lnea 2
   MESSAGE texto    Texto mostrado en la lnea 1, lnea 2 borrada

   D0=D0+  expre    \
   D0=D0-  expre     Permiten valores entre 1 y 256, y
   D1=D1+  expre     generan mltiples cdigos si es necesario.
   D1=D1-  expre    /

Los siguientes mnemnicos son reconocidos pero se ignoran:

   EJECT, REL, LIST, LISTM, LISTALL, UNLIST

Los siguientes mnemnicos no se han implementado:

   EXITM

   ABS expr           No Implementado
   RDSYMB  fichero          ..
   CHARMAP fichero          ..
   Dn=HEX  hh.h             ..
   GOSHORT etiqueta         ..
   JUMP    etiqueta         ..    
   INC(n)  etiqueta         ..
   LINK    etiqueta         ..
   SLINK   etiqueta         ..
      
   
   NIBBIN  bb..b            ..  (GNU Tools Opcodes)
   NIBGRB  bb..b            ..
   HEX(n)  hh.h             ..
   HEXM(n) hh.h             ..
   ASC(n)  \ASCII\          ..
   ASCM(n) \ASCII\          ..

Se han implementado los siguientes mnemnicos nuevos:

   LCSTR \ASCII\        LCASC Invertido
   LASTR \ASCII\        LAASC Invertido
   CSTRING \ASCII\      NIBASC con un byte 0 terminal
   ABASE expr           Activa un contador de asignacin en la direccin   
                        especificada por <expr>
   etiqueta ALLOC expr  Asigna <expr> nibbles para la etiqueta en el contador
                        de asignacin, luego incrementa el contador de
                        asignacin con <expr>
   Dn=Dn+r              p.ej D0=D0+A ==> CD0EX C=C+A CD0EX
   Dn=Dn-r              p.ej D0=D0-C ==> AD0EX A=A-C AD0EX
   Dn=Dn+P              p.ej D0=D0+P ==> CD0EX C+P+1 CD0EX
   Dn=Dn-P              p.ej D0=D0-P ==> CD0EX C=-C C+P+1 C=-C CD0EX
   r=Dn                 p.ej A=D0    ==> AD0EX D0=A
                        p.ej B=D0    ==> CD0EX B=C CD0EX
   INCLOB <nombre>      Incluye el objeto almacenado en la variable

   Observa que en Dn=Dn-P el acarreo se activa a menos que el resultado sea
   cero.

   INCLOB se comportara de modo diferente en cdigo que en rpl. Dependiendo
   del tipo de objeto que se incluya o bien se incluye por completo o bien se
   saltan los nibbles iniciales (prolog + posibles campos de datos) en los 
   siguientes tipos de objetos:

      Prolog  Salto  Prolog  Salto  Prolog  Skip
      ------  -----  ------  ----  ------  ----
      DOCODE  10     DOEXT0  10     DOGROB  20
      DOCSTR  10     DOEXT2  10     DOARRY  5
      DOHSTR  10     DOEXT3  10
                     DOEXT4  10


2.3.1  Macros
-------------

El ensamblador no implementa los macros tal como se describen en SASM.DOC, en
concreto, no existe ninguna substitucin de argumentos por ahora.

As se definen macros:

<etiqueta> MACRO
   <lnea1>
   ..
   <lneaN>
<etiqueta> ENDM

La ltima etiqueta es opcional y si existe, simplemente se ignora. En el caso
en que la definicin macro solo tenga una lnea, se puede hacer lo siguiente
para comprimir el cdigo fuente:

<etiqueta> MICRO <definicin>

Como quiera que hay varios usos obvios para los micros en trminos de
asignacin de registros, se puede hacer lo siguiente para asignar un nombre
simblico a un registro auxiliar:

<etiqueta> REG <nombre del registro auxiliar>

Por ejemplo la siguiente lnea

X REG R2

sera equivalente a las siguientes cuatro definiciones micro

A=X MICRO A=R2
C=X MICRO C=R2
X=A MICRO R2=A
X=C MICRO R2=C

Ten en cuenta que, como el ensamblador no usa las tablas de mnemnicos por
rapidez, no puede hacer comprobaciones completas de palabras reservadas
durante el ensamblado. As que el usuario puede declarar errneamente el
nombre de un registro de trabajo como P, lo cual, desde luego, causa
problemas si el usuario intenta usar el cdigo "C=P <n>" en algn sitio del
programa fuente. As que se pide cautela en el uso de nombres simblicos.

2.3.2  Ensamblado Condicional
-----------------------------

Jazz no sigue los cdigos de ensamblado condicional innecesariamente
complicados de las Herramientas HP o GNU. En vez de eso Jazz permite los
operadores de comparacin en las expresiones y con ello el conjunto de los
cdigos de ensamblaje condicional se reduce a:

   IF <expr>
   ELSE
   ENDIF     

Los cdigos se implementan independientemente de la etiqueta, as que no se
debera usar la convencin de etiquetas que se usa en RPLMAN.DOC - dara
lugar a errores de etiquetas repetidas. Esto significa que todos los IF's
deben tener su correspondiente ENDIF - lo que, desde luego, ASS comprueba.
Sin embargo, debido al sencillo mtodo de implementacin, la apilacin de
ELSE no es posible y, por tanto, si hay mltiples IF's anidados y un ELSE
extra entre ellos, se pueden perder. Esto no causa ningn mal-efecto ya que
slo puede suceder cuando el cdigo ELSE no se ensamblara de todos modos.

La profundidad mxima de anidamiento para los IF-ELSE-ENDIF es 64. Las
instrucciones emparejadas deben encontrarse en el mismo fichero fuente. Los
cdigos estn implementados actualmente solo en modo ensamblador, pero la
implementacin permite usarlos tambin en RPL como sigue:

   ASSEMBLE
   IF sBEGINNER
   RPL

       DROP SWAP DROP

   ASSEMBLE
   ELSE
   RPL

       DROPSWAPDROP

   ASSEMBLE
   ENDIF
   RPL

Las instrucciones apropiadas para hacer lo mismo directamente desde el modo
RPL estn previstas para las futuras versiones de Jazz va las instrucciones
#IF, #ELSE y #ENDIF.


2.3.3  Expresiones
------------------

Las expresiones en el fuente en ensamblador se definen como se describe en
SASM.DOC, pero adems con los enteros binarios y las etiquetas locales.

   Factores:
      #hh.h     entero hex
      %bb.b     entero binario
      dd.d      entero decimal
      =symbol   smbolo global (RPL.TAB comprobado tambin)
      :symbol   smbolo local
      symbol    smbolo local
      *         contador PC
      + - ++ -- etiquetas locales

   Operadores: Prioridad:
      ^            9
      *            8
      /            8
      %            8 (mdulo)
      +            7
      -            7
      &            5 (y)
      !            4 (o)
      <=>          2 (operadores de comparacin)

Observa en particular que los factores ascii no estn implementados. Como en
sasm, se deben poner entre parntesis todos los smbolos cuando se usan
operadores.

Los operadores de comparacin permitidos son < <= == >= > <> - ninguno de los
cuales esta implementado ni en las Herramientas HP ni en las Herramientas
GNU. Todas las comparaciones se realizan usando matemticas de enteros sin
signo.


2.3.4 Generacin de etiquetas
-----------------------------

A veces, la asignacin de etiquetas para bifurcaciones insignificantes puede
ser pesado. Para facilitar la programacin, el ensamblador es capaz de
generar etiquetas locales:


   +   se refiere a la siguiente etiqueta +
   ++  se refiere a la siguiente etiqueta ++
   -   se refiere a la anterior etiqueta -
   --  se refiere a la anterior etiqueta -- 

Por ejemplo, para buscar el siguiente carcter "salto de lnea" se puede
usar:



   LCASC '\n'
-  A=DAT0  B <--+
   D0=D0+  2    |
   ?A#C    B    |
   GOYES  ------+

Tenga en cuenta que no es recomendable un uso abusivo ya que puede hacer
ilegible el cdigo fuente y causar fcilmente errores si se usan varios
generadores de etiquetas muy juntos.

2.3.5  Depuracin
-----------------

El ensamblador reconocer DEBUG como una instruccin especial y realizar una
llamada GOSBVL al punto de entrada apropiado dentro del depurador DB. Observe
que aunque el resultado final ser el mismo, la direccin que se llama est
dentro de la biblioteca, a diferencia de una variable RAM, como en los puntos
de entrada "ganchos" explicados en la seccin DB. Naturalmente aun se puede
usar GOSBVL =DBGX (o =DBSX).


2.4  Ensamblado de Bibliotecas
------------------------------

ASS se puede usar para ensamblar cdigo fuente MAKEROM con las siguientes
instrucciones:

   xROMID #hhh             Define el nmero de la biblioteca en hex
   xROMID dec              Define el nmero de la biblioteca en decimal
   xTITLE <title>          Define que el ttulo ser el resto de la lnea. Si
                           falta el ttulo se usa entonces un ttulo nulo.
   xCONFIG <etiqueta>      Define la localizacin del objeto de configuracin
                           por medio de  una etiqueta. Si falta la etiqueta
                           se supone que no existe ninguna configuracin.
   xMESSAGE <etiqueta>     Define la localizacin de la tabla de mensajes por
                           medio de una etiqueta. Si falta la etiqueta se
                           supone entonces que no existe ninguna tabla de
                           mensajes.
   EXTERNAL <etiqueta>     Define la etiqueta como externa. El orden de la
                           introduccin determina el nmero de comando de los
                           comandos en la biblioteca de modo que los comandos
                           visibles sern los primeros, luego vendrn los
                           nombres nulos.
   xNAME <etiqueta>        Especifica la localizacin de un comando visible.
                           Nombre: "xetiqueta" Hash: "etiqueta"
   sNAME <etiqueta> <hash> Especifica la localizacin de un comando visible.
                           Nombre: "etiqueta" Hash: "hash"
   hNAME <etiqueta>        Especifica la localizacin de un comando
                           'visible'. Nombre: "etiqueta" Hash: nulo
   NULLNAME <etiqueta>     Especifica la localizacin de un comando oculto.
                           Nombre: "etiqueta" Hash: ninguno
   tNAME <etiqueta> <hash> Especifica el "hash" secundario para un comando.

xROMID y xTITLE se deben usar al principio del cdigo fuente. O sea, antes de
que se haya emitido cualquier cdigo real. Adems xROMID debe estar antes de
cualquier otra instruccin MAKEROM.

Las declaraciones xCONFIG y xMESSAGE pueden estar en cualquier sitio (o no
estar), pero una situacin adecuada es despus de las declaraciones xROMID y
xTITLE.

La declaracin EXTERNAL se necesita si el correspondiente comando se usa
antes de que se especifique su localizacin con su declaracin NAME. Una
situacin adecuada es despus de las declaraciones de cabecera y posiblemente
sea mejor declarar todos los comandos.

xNAME, sNAME, hNAME y NULLNAME especifican la localizacin del comando, as
que deberan estar justo antes del objeto que definen como comando. Todos
menos NULLNAME tambin definen el campo cabecera romid/cmd propiamente y as
precisan un campo de tipo, tpicamente el valor 8 para marcar un comando
normal y 000 para marcar una funcin normal. Para otros valores consultar
"entries.srt" u otros documentos. Tambin definen un smbolo '~etiqueta' que
contiene un valor de 6 nibbles conteniendo los 3 nibbles inferiores el romid
y los 3 nibbles superiores el nmero del comando.

Las rutinas internas de mostrar menes dejan de mostrar los menes de
biblioteca si se encuentran un comando sin "hash". As que cualquier comando
declarado despus de hNAME no se mostrar en el men de la biblioteca pero
tendrn, desde luego, nombres de comando escribibles/desensamblables del modo
usual si se especifica as con las instrucciones NAME.

tNAME se puede usar en cualquier sitio despus de la declaracin del romp
(puntero rom). Se asigna el hash secundario. Una posicin adecuada es justo
despus del sitio de la declaracin del NAME correspondiente. Observa que
tNAME se puede usar para declarar nombres para los NULLNAMESs, proporcionando
as un fcil acceso a las subrutinas de bajo nivel si fuera necesario. Un
comando puede tener varios nombres secundarios.

Observe que INCLOB no hace ningn trabajo de conversin ID --> ROMP en el
objeto incluido como hace el constructor de bibliotecas DIR --> LIB.

Ejemplo: El cdigo fuente MAKEROM de Jazz empezara as:

   xROMID  992
   xTITLE  Jazz v4.0 Fin'95 10.06.95 mheiskan@gamma.hut.fi
   xCONFIG JazzCfg
   xMESSAGE JazzMsg

   EXTERNAL xASS       ( Comando de Usuario ASS )
   EXTERNAL Assemble   ( Objeto de cdigo principal del ensamblador )
   [..]
   EXTERNAL UnShowSel! ( Subrutinas de bajo nivel de SSTK )
   EXTERNAL >SelPict!

   etiqueta JazzCfg    ( Objeto de Configuracin )
   :: 992 TOSRRP ;

   etiqueta JazzMsg    ( Tabla de Mensajes )
   ARRY hhhhh hhh..h

   NIBB 1 8       ( Mas fcil que ASSEMBLE CON(1) 8 RPL )
   xNAME ASS      ( Nota: las declaraciones EXTERNAL )
   :: CK1 ... ;   ( las fuentes declaradas van antes de ASS )
   [..]           ( cuando se asignan los nmeros de comandos )


2.5  Diferencias con las Herramientas HP
----------------------------------------

Adems de los mnemnicos aadidos o no implementados, hay varias diferencias
con las Herramientas HP en el diseo, de las cuales se describen las ms
importantes a continuacin.


1. Ya que el ensamblado se realiza en la calculadora misma, no hay ninguna 
   necesidad de incluir la lnea de cabecera (NIBASC 'HPHP48-X') en el cdigo
   fuente.

2. El manejo de smbolos/etiquetas permite ms cosas que en SASM. Por
   ejemplo, lo siguiente causara un error en las Herramientas HP si se usara
   en una expresin:

      (=GETPTR)-(=SAVPTR)

   El manejo de smbolos lleva a cabo las comprobaciones de errores
   necesarias aunque, por ejemplo, cada valor de cada expresin se determina 
   si es absoluto o relativo y por tanto algunos cdigos darn error. Por 
   ejemplo


      D0=D0+  etiqueta                   ==> Error
      D0=D0+  (etiqueta2)-(etiqueta1)    ==> Vlido

3. El procesador Saturno contiene cdigos con errores y por tanto SASM 
   fallar, por ejemplo, si se usa A=A+CON fs,expr con un selector de campo
   de un slo nibble. El ensamblador Jazz permite usar los cdigos pues
   aunque tienen errores, muestran un comportamiento predecible. Para
   aqullos interesados, el fallo aparece en la suma/resta operando en los 64
   bits del registro, comenzando por el nibble especificado por el selector
   de campo. Tambin falla el acarreo. Los que no estn seguros deberan
   probar a depurar con DB el siguiente ejemplo:

   CODE
      A=0 W           Borra A[W]
      A=A+CON S,15    Funciona bien mientras no haya ningn desbordamiento
      A=A+CON S,2     Obsrvalo por ti mismo..
      LOOP
   ENDCODE

4. Como quiera que no hay ningn "linkador" especfico en Jazz, espera que
   algunos smbolos se puedan resolver cuando se introducen. Tales smbolos
   son aquellos definidos por los mnemnicos de equiparacin (=, EQU, ALLOC y
   ABASE).

5. La instruccin EXTERNAL no esta implementada de la misma manera que en
   RPLCOMP. En concreto no se puede usar para declarar que "~smbolo" sea
   externo de modo que "smbolo" se compilara como un ROMPTR. Sin embargo,
   usar un DEFINE sera mucho mas simple en este caso.

6. RPLCOMP inserta automticamente "::" y ";" en los lugares adecuados en los
   segmentos dentro de un WHILE-REPEAT. Esto es as porque WHILE solo espera
   un slo objeto antes del comando REPEAT. Sin embargo las Herramientas HP
   tambin introducirn los delimitadores cuando no se desea. Por ejemplo lo
   har con "WHILE DROP REPEAT" dnde slo hay un objeto simple entre las
   instrucciones. Esto incrementa innecesariamente el tamao del cdigo y lo
   enlentece.


3  El Desensamblador de los Lenguajes RPL/Mquina
=================================================

Se proporcionan varios comandos del desensamblador para diferentes
propsitos. El usuario debera notar que teniendo DIS.TAB adems de RPL.TAB
se acelera notablemente el desensamblador (bsqueda binaria versus bsqueda
lineal).


   Comando:       DIS
   Pila:          ( ob --> $ )
   Descripcin:   Desensambla el objeto. Si pila1 es un puntero a una
                  direccin de la ROM solo se desensamblar el puntero.

   Comando:       DISXY
   Pila:          ( direccin_hxs direccin_hxs_fin --> $ )
   Descripcin:   Desensambla rea de memoria. Adivina el modo inicial y
                  cambia de modo durante el proceso si es necesario (modos
                  RPL/Lenguaje Mquina)

   Comando:       DOB
   Pila:          ( ob | #direccin | direccin_hxs | "entrada" --> $ )
   Descripcin:   Desensambla rea de memoria. Adivina el modo inicial y la
                  direccin final.

   Comando:       DISN
   Pila:          ( direccin_hxs %N --> $ )
   Descripcin:   Desensambla rea de memoria como lenguaje mquina solo.

   Banderas de Usuario:
      2 - desactiva el modo adivinacin
      4 - desactiva el desensamblado en lenguaje mquina en DIS
      5 - desactiva el tabulador, usando espacios en su lugar
      6 - fuerza la generacin de etiquetas en filas propias
      7 - desactiva las tablas de entradas

En el modo adivinacin el desensamblador intentar adivinar estructuras de
datos embebidas en el lenguaje mquina. Normalmente slo se reconocen los
siguientes tipos:

      GOSUB +
      REL(5)  +                Indicador de tamao opcional
      BSS expr                 El dato es todo ceros
   + C=RSTK

      GOSUB +
      REL(5)  +                Indicador de tamao opcional
      NIBASC  \ASCII\          \ Posiblemente alternando y ocupando
      CSTRING \ASCII\          / mltiples lneas.
   + C=RSTK

      GOSUB +
      REL(5)  +                Indicador de tamao opcional
      NIBHEX  hh.h             Datos varios
   + C=RSTK


La condicin suficiente para que una adivinacin ascii tenga xito es que el 
rea de datos consista mayoritariamente (75%) en caracteres ascii comunes.
Las lneas ascii se dividan en CSTRINGs o por caracteres "salto de lnea" o
de modo que las lneas tengan una longitud mxima de 40 caracteres.

Si el programador novel en lenguaje mquina se preguntara porque es necesario
el modo adivinacin, sera suficiente decir que como el lenguaje mquina no
es un lenguaje estructurado de alto nivel, no hay nada que nos diga cuando
termina el lenguaje mquina o incluso cuando empieza. En concreto, no hay
nada que nos diga cuando alguien ha embebido, por ejemplo, una tabla de datos
dentro del cdigo mquina. La llamada a una instruccin C=RSTK es una manera
habitual de pasar la direccin de una tabla de esas, pero hay otras maneras
que el desensamblador no puede esperar razonablemente en adivinar. As que
hay casos en los que el desensamblador esta destinado a fallar.


Por conveniencia, todos los comandos del desensamblador tambin comprueban si
existe la variable 'Romps' en el directorio Home que puede contener nombres
para los punteros rom de objetos. Esta caracterstica sera especialmente
til cuando se depuran bibliotecas. La variable contendra una lista de la
forma

   {
      ROMPTR hhh hhh  ID nombre1
      ROMPTR hhh hhh  ID nombre2
      ...
   }

Advertir que un producto asociado, la biblioteca "Profiler" que calcula
tiempos de ejecucin y lleva a cabo anlisis de "crash" (cadas del sistema)
en bibliotecas proporciona un comando que crea la variable Romps dado un
fichero de texto que contiene los nombres de los diferentes romptrs (punteros
rom).


Advertencias:

-  DOB, DISXY y DISN desensamblan reas de memoria en lugar de objetos bien
   definidos. Usar estos comandos para desensamblar la memoria en el rea de
   objetos temporales es peligroso ya que una posible "recoleccin de basura"
   (Garbage collection) durante el proceso puede mover la memoria que se est
   desensamblando. Usa DIS slo para desensamblar objetos en tempob!!! (rea
   de memoria para objetos temporales).
-  La historia de los objetos compuestos se sigue hasta 64 niveles. Si se
   exceden, puede aparecer un ";" cuando debera ser un "}".
-  Al contrario que el ensamblador, el desensamblador no puede manejar las
   tablas hash ocultas, as que algunos ROMPTRs con nombre se desensamblarn
   como "ROMPTR xxx yyy".
-  Los valores de las etiquetas se adivinan para instrucciones Dn=(2) y
   Dn=(4) si
      - Dn=(2) es probable que se refiera a la pgina IO
      - Dn=(4) es probable que se refiera a una variable RAM
   Esto funciona bien cuando se desensambla la ROM pero no lo hace muy bien
   cuando se desensambla un programa que usa el mtodo de las pginas pares
   en la colocacin de sus datos. Aun as los beneficios son claramente
   grandes.

4  El Depurador de RPL del Sistema
==================================

Comando:       SDB
Pila:          ( seco | id | lam | romp --> ? )
Descripcin:   Inicia la depuracin del programa indicado por el nivel 1 de
               la pila. Si el depurador de rpl del sistema ya est
               ejecutndose, entonces el comando SBD solo mostrar el men
               SBD:

   ->SST          -  Ejecuta en un solo paso el prximo comando. Si se pulsa
                     la tecla de desplazamiento derecho, entonces se hace en
                     un slo paso el resto de la secuencia de instrucciones,
                     como si fueran una unidad.

   ->IN           -  Si el siguiente comando a ejecutarse es compuesto, entra
                     en l y lo ejecuta paso a paso, si no, lo hace de un
                     slo paso.

   SNXT           -  Muestra los siguientes comandos en el rea de estado.
                     Pulsado por segunda vez muestra la pila de retornos.

   SST->          -  Inicia la ejecucin continua del modo ->SST. Volvindolo
                     a pulsar cambia el modo: lento/rpido, o sea, si se
                     actualiza cada vez la pantalla que muestra la pila o no.
                     Cualquier otra tecla aborta la evaluacin continua.

   IN->           -  Inicia el modo ->IN continuo

   DB             -  Inicia el DB en el siguiente objeto de cdigo

   xKILL          -  El comando KILL de la HP48 (xCONT se puede evaluar
                     mediante las teclas LS+ON)=([Dezpla.Izq.]+ON)

   SKIP           -  Se salta el siguiente comando. Si est pulsado el
                     [Despl.Der.] se salta el resto de la lnea de comandos
                     actual, o sea, ejecuta el comando SEMI.

   SEXEC          -  Ejecuta el comando en pila1 como si fuera el 'siguiente'
                     comando.
   
   SBRK           -  Coloca un objeto "punto de ruptura" en PILA1. Si est
                     pulsado [Despl.Der.] se borra el objeto "punto de
                     ruptura".

   LOOPS          -  Examina los entornos loop. Usar las teclas Arriba/Abajo
                     para desplazar, cualquier otra tecla para salir. Si est
                     pulsado [Despl.Der.] vuelca el entorno mas alto a la
                     pila.

   LAMS           -  Examina los entornos lam. Usar las teclas Arriba/Abajo
                     para desplazar, las teclas izquierda/Derechav para
                     decrementar/incrementar el entorno. Cualquier otra tecla
                     para salir. Si est pulsado [Despl.Der.] vuelca el
                     entorno ms alto a la pila.

   IN?            -  Cambia el modo ->IN a nunca entrar en los secundarios,
                     slo en los IDs/LAMs/ROMPTRs cuando estn permitidos.
                     Evita que el depurador entre en subrutinas ROM durante
                     la depuracin continua.


Observe que SDB viene de "debugging system rpl" (depuracin de rpl del
sistema), no rpl de usuario. As pues, algunos comandos del rpl de usuario no
se pasarn bien de un slo paso cuando se usa SDB. Un ejemplo es xHALT, para
el que se proporciona el substituto xSHALT. Observe que SDB debe estar
corriendo antes que funcione SHALT.

Advertencias:
   La depuracin del rpl del sistema es muy peliaguda e indudablemente SDB no
   puede depurar algunos comandos, menos conocidos, correctamente. Si se
   encuentra uno de tales comandos, SDB puede incluso causar una cada del
   sistema y la prdida de la memoria. Esto es, desafortunadamente,
   inevitable aunque hay realmente demasiado cdigo en ROM para preocuparse.
   SBD se manejar bien para depurar los programas normales.

   SDB o bien entra comandos o ejecuta comandos (por emulacin si es
   necesario) No se emula ninguno de los comandos interactivos de la ROM de
   la HP48, sobre todo el PolOuterLoop. Para emular el PolOuterLoop necesitas
   insertar comandos SHALT en los objetos display o lo que sea que quieres
   depurar, luego iniciar SDB, entonces usar CONT para alcanzar el punto del
   comando SHALT.

      
5  El depurador del Lenguaje Mquina
====================================

Comando:             DB
Pila:                ( id --> )
                     ( romp --> )
                     ( $entrada --> )
                     ( #direccin --> )  
                     ( direccin_hxs --> )
                     ( code --> )
Descripcin:         Depura lenguaje mquina


Entrada Especial: (los "ganchos". Un programa con esta instruccin se dice
                  que esta "enganchado")

      SX: GOSBVL #70520 o "DBSX"
      GX: GOSBVL #806A0 o "DBGX"

Los ganchos de entrada especiales se inicializan cuando se empieza DB. Para
estar seguros que los ganchos estn activos antes de evaluar el programa
enganchado, haz "0 DB" que hace todas las inicializaciones pero retorna
inmediatamente. La bandera de usuario 1 desactiva las entradas de modo que
vuelven inmediatamente, permitiendo con ello pruebas de ejecucin libres en
la fase de desarrollo. Una manera fcil de asegurar que todo va bien es hacer
"0 DB", que inicializa los ganchos, coloca el tamao de la pantalla y aborta
porque la entrada de un nmero real es invlida.

La entrada especial no puede hacer todas las inicializaciones como la entrada
normal, especialmente:
   - No se pueden hacer bsquedas en las tablas con normalidad
   - La pantalla no se puede inicializar con normalidad

SSTK une las tablas a LAMs, siendo esto lo suficientemente fcil para
comprobar en lenguaje mquina que para usar las tablas en la entrada
especial, empieza SSTK antes de evaluar el programa enganchado.

El grob de la pantalla de texto tiene generalmente 7 lneas de alto, mientras
que DB usa el tamao expandido de 8 lneas. La expansin no se puede hacer en
lenguaje mquina sin violar el contenido de los registros de la CPU, de modo
que asegrate que tu pantalla de texto esta en el tamao expandido antes de
evaluar el programa enganchado. La manera mas fcil es usar "0 DB". Si no se
hace esto, PICT se puede corromper y se puede perder la memoria.

Los ciclos usados por DB son los medidos experimentalmente con CTIM en la
biblioteca HACK para las calculadoras G/GX. Los ciclos se han escalado por 4
para evitar unidades de 0.25 ciclos.


   Teclas de Pantalla:

N.T.>Se traduce "runstream" por "sucesin [de instrucciones]"

      [alfa]         - Pantalla de ayuda
      [A]            - Pantalla 1 (registros generales)
      [B]            - Pantalla 2 (registros generales de 64-bit)
      [C]            - Pantalla 3 (sucesin de instrucciones generales)
      [D]            - Pantalla 4 (desensamblado de la sucesin de instrucs.)
      [E]            - Pantalla 5 (volcado de memoria)
      [F]            - Pantalla 6 (desensamblado del lenguaje mquina)
      [MTH]          - Pantalla 7 (registros generales + puntos de ruptura)
      [VAR]          - Pantalla 8 (puntos de visualizacin)
      [SPACE]        - Actualizar Pantalla
      [EEX]          - Visualiza PICT (si existe) mientras se pulsa EEX
      [CST]          - Muestra el argumento en binario

   Subpginas de la Pantalla 4:

      [D]            -  Si la pantalla 4 ya esta activa, cambia el formato de
                        la pgina.
      [SQRT]         -  Cambia la pantalla 4 para mostrar D0, D1 o ambos.
      [SQRT]         -  Si ARG, entonces pone una nueva tabla de formato
                        CON(m)/REL/(n) a partir de los nibbles bajos de ARG
      [^]            -  Cambia entre mostrar D0 o el nivel N de la pila.
                        Espera que se pulse a continuacin el valor de N
                        (0-8)
   Argumentos:
      [0]            -  Comienza la entrada del argumento.

                        [0-9A-F] aade un dgito
                        [DEL]    aborta la entrada
                        [BS]     borra el ltimo dgito
                        [+/-]    niega el argumento

   Nota: BS = tecla Borr (la de la etiqueta "DROP-CLR")

   Teclas de Movimiento:

      [NXT]          - Salta la instruccin (o las instrucciones ARG)
      [left]         - PC=PC-1                     (o -ARG)
      [right]        - PC=PC+1                     (o +ARG)
      [up]           - PC=PC-16                    (o -16*ARG)
      [down]         - PC=PC+16                    (o +16*ARG)
      [.]            - Pone una marca al PC        (o al ARG)
      [+/-]          - Intercambia el PC y la marca
      [ENTER]        - Si ARG entonces hace PC = ARG
      [EEX]          - Si ARG entonces hace PC += ARG (si no, muestra PICT)

   Teclas de Depuracin:

      [+]            -  Instrucciones paso a paso (ARG)
      [-]            -  Instrucciones paso a paso (ARG), depura los GOSUBS
                        como una sola instruccin
      [*]            -  Instrucciones paso a paso (ARG) actualizando la
                        pantalla. Si no ARG entonces pone ARG a #FFFFF.
      [/]            -  Instrucciones paso a paso (ARG) actualizando la
                        pantalla, depura los GOSUBs como una sola
                        instruccin. Si no ARG entonces pone ARG a #FFFFF.
      [EVAL]         -  Contina hasta el final o hasta un "punto de ruptura"
      [SIN]          -  Salva los registros actuales
      [COS]          -  Carga los registros con los salvados (al arrancar se
                        salvan los registros por primera vez)
      ARG + [SIN]    =  activa el contador de ciclos 1
      ARG + [COS]    =  activa el contador de ciclos 2

   Teclas de salida:

      [DEL]          -  Restaura los registros y sale
      [BS]           -  Sale ahora
      [1/x]          -  Sale con un reset, pulsar por segunda vez para
                        confirmar

   Puntos de ruptura:

      [PRG]          - Pone punto de ruptura en ARG
      [STO]          - Pone un contador de punto de ruptura en ARG

   Opciones:
      [CST]          - Cambia el nmero de opcin (siguiente tecla)

                                     3        - Modo ascii/hex
                                     4        - Desplaza el volcado de
                                                memoria por 1
                                     5        - Cambio automtico entre
                                                PICT/ABUFF durante la
                                                depuracin
                                     6        - Activa/Desactiva RPL.TAB y
                                                DIS.TAB 
                                     7        - Mostrar cdigo/ciclos

   Edicin de registros:

      ['] Registro editado indicado por la siguiente tecla pulsada:

      [A] : A[W]      [P] : P         [0] : R0[W]     [S] : SB
      [B] : B[W]      [T] : ST        [1] : R1[W]     [X] : XM
      [C] : C[W]      [Y] : CRY       [2] : R2[W]     [ENTER] : @PC
      [D] : D[W]      [H] : HEX/DEC   [3] : R3[W]     [ARG]: @ARG
      [E] : D0        [K] : DAT0      [4] : R4[W]
      [F] : D1        [L] : DAT1      [R] : RSTK1
      [.] : Recalcula el CRC de la biblioteca dentro en la cual esta el PC

      Teclas de Edicin:

      [BK]  : Cursor izq.     [ENTER] :     Graba y sale 
      [CI]  : Cursor izq.     [/] : /16     [+/-] : Negar 
      [CD]  : Cursor der.     [*] : *16     [EEX] : No lgico  
      [CAr] : Rota a izq.     [-] : /2      [1/X] : Inverso
      [CAb] : Rota a der.     [+] : *2      [DEL] : Borrar

      Nota: C=Tecla cursor+(I=izq., D=der., Ar=Arriba, Ab=Abajo)    

Pantallas ejemplo que se pueden reproducir razonablemente bien con:

   "#>HXS" DB  (o #59CCh DB)

y escribiendo luego

   012345 [PRG] 1  - pone punto de ruptura 1 en la direccin #12345
      090 [STO] 1  - pone contador del punto de ruptura 1 a #90 = -70


   Pantalla 1  - Estado General de la CPU (tecla [A])
                                   +----------------------+
   Mnemnico...................... |GOSUBL  SAVPTR        |
   Cdigo......................... | 8E4CD0               |
   PC, P, Cry, Hex/Dec, ST........ |@059D1 P:0 CH ST:B318 |
   A[A], C[A], MP, SR............. |A:059CC C:B1CB7 MP SR |
   B[A], D[A], SB, XM............. |B:A90E1 D:01BF8 SB XM |
   D0 y 6 bytes @D0............... |D0:2345C/6B436F6A04B2 |
   D1 y 6 bytes @D1............... |D1:B1CBC/000000000000 |
   3 niveles superiores de RSTK... |RST:00000:00000:00000 |
                                   +----------------------+
   Se muestran los nombres de los HST, y en video inverso si estn activados.
   (HST son los "Hardware STatus bits" o "bits de estado de Hardware")


   Pantalla 2  - Estado General de la CPU II (tecla [B])
                                   +---------------------------------+
   Mnemnico...................... |059D1 8E4CD0  GOSUBL  SAVPTR     |
   A[W],  P, ST................... |A:6A51F4941A9059CC P:0 ST:B318   |
   B[W],  ST[X] bits.............. |B:00000000000A90E1 0011 0001 1000|
   C[W],  Cry, Hex/Dec, HST....... |C:B0000000077B1CB7 CH MPSRSBXM   |
   D[W],  D0, @D0................. |D:9800000000001BF8 D0:2345C/6B436|
   R0[W], D1, @D1................. |0:00000000000A51E9 D1:B1CBC/00000|
   R1[W], RSTK.................... |1:6A51F4941A9059D1  00000 00000  |
   R2[W], RSTK.................... |2:6A51F4941A9CEF94  00000 00000  |
   R3[W], RSTK.................... |3:6A51F4941A900000  00000 00000  |
   R4[W], RSTK.................... |4:00000000000B2302  00000 00000  |
                                   +---------------------------------+

   Pantalla 3 - Estado de la CPU y Secuencia de Instrucciones (tecla [C])
                                   +---------------------------------+
   A[A], C[A], D0, @D0............ |A:059CC C:B1CB7 D0:2345C/6B436F6A|
   B[A], D[A], D1, @D1............ |B:A90E1 D:01BF8 D1:B1CBC/00000000|
   Instruccin 1, P, Cry, Hex/Dec. |059D1 GOSUBL  SAVPTR    |P:0  CH |
   Instruccin 2, ST.............. |059D7 GOSUBL  POP#      |ST:B318 |
   Instruccin 3, HST............. |059DD R1=A              |MPSRSBXM|
   Instruccin 4, R0[A]........... |059E0 C=0     A         |R0:A51E9|
   Instruccin 5, R1[A]........... |059E2 LC(1)   5         |R1:059D1|
   Instruccin 6, R2[A]........... |059E5 GOSUB   MAKE$N    |R2:CEF94|
   Instruccin 7, R3[A]........... |059E9 C=R1              |R3:00000|
   Instruccin 8, R4[A]........... |059EC DAT0=C  A         |R4:B2302|
                                   +---------------------------------+

   Pantalla 4.1 - Secuencia de Datos (tecla [D])
                                   +---------------------------------+
   Volcado de memoria D0.......... |D0:409C1/9CB0428A0459A04C4A040691|
   Secuencia Ascii D0............. | 40980:......-..@..V.@94..@....  |
   ............................... | 409B0:..- .@.o..@..T.@L...a.n.  |
   ............................... | 409E0:....ENTER{y..a#2..b*q...  |
   ............................... | 40A10:..Q...[....[...>M...#2..  |
   Volcado de memoria D1.......... |D1:B5CA1/000000000000000000000000|
   Secuencia ascii D1............. | B5C50:.........@p...@....E....  |
   ............................... | B5C80:W*R..?0W..@pK..D........  |
   ............................... | B5CB0:..................... ..  |
   ............................... | B5CE0::....:..,......|........  |
                                   +---------------------------------+
      La posicin actual de D0/D1 se muestra en video inverso
      La tecla [SQRT] cambiar entre mostrar solo D0, D1 o ambos
      Las teclas [CST] [3] cambiarn el volcado de memoria entre hex/ascii
      La tecla [D] cambia a la pantalla 4.2


   Pantalla 4.2 - Secuencia RPL (tecla [D])
                                   +---------------------------------+
   D0 Secuencia RPL............... |D0:409C1 AtUserStack             |
   ............................... |   409C6 KeyOb@                  |
   ............................... |   409CB KeyOb0                  |
   ............................... |   409D0 Custom?                 |
   ............................... |   409D5 NOTcaseDROP             |
   D1 Secuencia RPL............... |D1:B5CA1 PTR 00000               |
   ............................... |   B5CA6 PTR 00000               |
   ............................... |   B5CAB PTR 00000               |
   ............................... |   B5CB0 PTR 00000               |
   ............................... |   B5CB5 PTR 00000               |
                                   +---------------------------------+
      La tecla [SQRT] cambiar entre mostrar D0, D1 o ambos
      Las teclas [^] [0-8] pasarn a mostrar la secuencia segn el valor
      contenido en el nivel N de la pila en vez de D0
      La tecla [D] cambia a la pantalla 4.3


   Pantalla 4.3 - Secuencia de la Tabla de Datos (tecla [D])


                                   +---------------------------------+
   D0 Secuencia de la Tabla....... |D0:409C1 CON(5) #40BC9           |
   ............................... |   409C6 REL(5) L81448           |
   ............................... |   409CB CON(5) #40A95           |
   ............................... |   409D0 REL(5) L8141C           |
   ............................... |   409D5 CON(5) #61960           |
   D1 Secuencia de la Tabla....... |D1:B5CA1 CON(5) #00000           |
   ............................... |   B5CA6 REL(5) LB5CA6           |
   ............................... |   B5CAB CON(5) #000000          |
   ............................... |   B5CB0 REL(5) LB5CB0           |
   ............................... |   B5CB5 CON(5) #000000          |
                                   +---------------------------------+
      La tecla [SQRT] cambia entre mostrar solo D0, D1 o ambos
      Las teclas [ARG] [SQRT] cambiarn el formato de la tabla
      Las teclas [^] [0-8] cambiarn a mostrar las tablas segn el valor que
      haya en el nivel N de la pila en vez de D0
      Las teclas [CST] [3] mostrarn caracteres ascii en vez de constantes
      hex.
      La tecla [D] cambia a la pantalla 4.1


   Pantalla 5  - Volcado de Memoria (tecla [E])
                                    +---------------------------------+
   Posiciones 5990-589F............ | 05990:3AE680D0F40D4F01 .n..O... |
   Posiciones 59A0-59AF............ | 059A0:56113680913420CC e.c..C.. |
   Posiciones 59B0-59BF............ | 059B0:4E0156716FCC56FD ..e...e. |
   Posiciones 59C0-59CF............ | 059C0:015B38D5E0101D95 ...]...Y |
   Posiciones 59D0-59DF............ | 059D0:08E4CD08E46C0101 .N..N... |
   Posiciones 59E0-59EF............ | 059E0:D230574911191443 -.u...A4 |
   Posiciones 59F0-59FF............ | 059F0:4E4A201101311456 ......Ae |
   Posiciones 5A00-5A0F............ | 05A00:12280A50143174E7 !...A.G~ |
   Posiciones 5A10-5A1F............ | 05A10:8E58D01311741431 ...1.GA. |
   Posiciones 5A20-5A2F............ | 05A20:743450000EA248BE GC...*.. |
                                    +---------------------------------+
    la posicin actual se indica con un carcter inverso.


   Pantalla 6  - Secuencia de Instrucciones LM (tecla [F])
                                   +---------------------------------+
   Instruccin 1.................. |059D1 GOSUBL  SAVPTR             |
   Instruccin 2.................. |059D7 GOSUBL  POP#               |
   Instruccin 3.................. |059DD R1=A                       |
   Instruccin 4.................. |059E0 C=0     A                  |
   Instruccin 5.................. |059E2 LC(1)   5                  |
   Instruccin 6.................. |059E5 GOSUB   MAKE$N             |
   Instruccin 7.................. |059E9 C=R1                       |
   Instruccin 8.................. |059EC DAT0=C  A                  |
   Instruccin 9.................. |059EF LC(5)   =DOHSTR            |
   Instruccin 10................. |059F6 A=R0                       |
                                   +---------------------------------+


   Pantalla 7  - Pantalla de la Tabla de Puntos de Ruptura (tecla MTH)
                                   +---------------------------------+
   Mnemnico.................BRK1. |GOSUBL  SAVPTR       |1:12345 -70|
   Cdigo....................BRK2. | 8E4CD0              |2:00000  00|
   Ciclos / Ciclos Totales...BRK3. |14                0  |3:00000  00|
   PC, P, Cry, Hex/Dec, ST...BRK4. |@059D1 P:0 CH ST:B218|4:00000  00|
   A[A] C[A] MP SR...........BRK5  |A:059CC C:B5C9C MP SR|5:00000  00|
   B[A] D[A] SB XM...........BRK6. |B:A9634 D:027AF SB XM|6:00000  00|
   D0 y 6 bytes @D0..........BRK7. |D0:409C1/9CB0428A0459|7:00000  00|
   D1 y 6 bytes @D1..........BRK8. |D1:B5CA1/000000000000|8:00000  00|
   3 primeros niveles RSTK..R0[A]. |RST:00000:00000:00000   R0:A56F6 |
   R1[A] R2[A] R3[A] R4[A]........ |R1:059D1 2:DE77D: 3:00000 4:BFA21|
                                   +---------------------------------+

   Cualquier punto de ruptura en la posicin actual se muestra en video
   inverso

   Pantalla 8 - Puntos de Visualizacin (tecla [VAR])                         
                                   +---------------------------------+
   Punto de Visualizacin 1....... |1:00000:2369B108DADF1008 2.......|
   Punto de Visualizacin 2....... |2:00000:2369B108DADF1008 2.......|
   Punto de Visualizacin 3....... |3:00000:2369B108DADF1008 2.......|
   Punto de Visualizacin 4....... |4.00000:2369B108DADF1008 2.......|
   Punto de Visualizacin 5....... |5:80100:3707020403047020 sp @0@..|
   Punto de Visualizacin 6....... |6:80319:A1A1A1A1A1A1A1A1 ........|
   Visualiz. del fondo tempob..... |  817CC:000000E4A20DB000 ...N*...|
   Visualiz. del inicio tempob.... |  A960C:00000895836B5834 ...Y8..C|
   Visualiz. Pila RPL de Retornos. |  A963E:5A5E3A534F4C4147 ...5...t|
   Visualiz. Pila RPL de Datos.... |  B5C7E:1075A22549FEF303 .W*R..?0|
                                   +---------------------------------+

      Los Punto de Visualizacin 1-6 se pueden cambiar con [ARG] [VAR] [N]

      Los Punto de Visualizacin 5-6 se pueden cambiar, pero DB los
      inicializa a :

       5: direccin base del IRAMBUFF (#70100/#80100)
       6: direccin del uart_buffer   (#701FC/#80319)

      Los Puntos de Visualizacin 7-10 son fijos y son actualizados
      continuamente por DB segn:

       7: variable RAM TEMPOB, fondo del area tempob (objetos temporales)
       8: variable RAM TEMPTOP, parte superior del rea tempob
       9: variable RAM RSKTOP, parte superior de la pila de retornos RPL
      10: variable RAM DSKTOP, fondo de la pila de datos RPL


6  La pila del RPL del Sistema
==============================

El comando SSTK inicia un nuevo ncleo (kernel) que es una versin modificada
del ncleo interno. Para salir de SSTK pulsa SSTK otra vez.

Modificaciones del ncleo interno:

- La pila tiene 5 lneas, incluso la pila interactiva.
- La bandera 3 modifica el descompilador de la pila:
   Activado:  Usa el descompilador interno
   Apagado :  Usa el descompilador de rpl del sistema
- No existe el modo Multi-lnea



7  El Catlogo de Entradas
==========================

El comando EC sirve para examinar las tablas de entrada. Ya que las entradas
se listan ordenadas por direcciones son necesarias ambas tablas RPL.TAB y
DIS.TAB para ejecutar EC.

Las teclas son:

   Flecha Arriba        - Sube una entrada
   Flecha Abajo         - Baja una entrada
   DI + Flecha Arriba   - Sube una pgina
   DI + Flecha Abajo    - Baja una pgina
   DD + Flecha Arriba   - Salta a la primera entrada
   DD + Flecha Abajo    - Salta a la ltima entrada

   Nota: DI = tecla desplazamiento izquierdo
         DD = tecla desplazamiento derecho

   Flecha Derecha       -  Visualiza el contenido de la entrada seleccionada
                           usando ED (o VV para los grobs)
   A                    -  Cambia la ordenacin: Alfabtica/por direcciones
   B                    -  Cambia el modo de bsqueda: subcadena/exacto
   F/alfa               -  Entrada de cadena a buscar (entrar nombre)
   NXT                  -  Repetir la bsqueda
   LS + NXT             -  Repetir la bsqueda hacia atrs
   EEX                  -  Cambiar al modo "grep" (solo muestra lo
                           encontrado)
   ENTER                -  Coloca la entrada en la pila como
                           :nombre:direccin
   DI + ENTER           -  Coloca la direccin de la entrada en la pila
   DD + ENTER           -  Coloca el nombre de la entrada en la pila
   0-9                  -  Encuentra la entrada cuya direccin comienza con
                           el dgito pulsado. Usar 0-9A-F para introducir una 
                           direccin mas especifica.
   ON                   -  Salir del programa
   +/-                  -  Activa/Desactiva el sonido


8  El editor de RPL del Sistema/Lenguaje Mquina
================================================

ED es un editor pensado para editar el cdigo fuente de rpl del sistema y del
lenguaje mquina. ED no hace un duplicado en la memoria de la cadena que se
edita si sta ya se encuentra en el rea de objetos temporales lo que permite
la edicin de cadenas muy grandes. Observe que esto implica que no se guarda
ninguna copia de la cadena original!

Observe que ED es muy rpido pero debido a que soporta el uso del tabulador,
tiene que hacer clculos especiales cuando se desplaza la visualizacin. As
que desplazar lo que se muestra puede ser bastante lento si las lneas son
muy largas.

Una caracterstica que promete ser til es que ED admite opcionalmente una
posicin del cursor en el nivel 1 de la pila. As que si ASS te da la
posicin del error podrs saltar inmediatamente a ella.

Si la entrada no es una cadena (de caracteres) o una cadena con el argumento
opcional de posicin del cursor, ED desensambla el objeto para editarlo y lo
ensambla al salir. Cualquier error en el ensamblaje hace que el editor vuelva
a comenzar en esa posicin.

La mayora de las teclas de caracteres normales estn en sus posiciones
habituales, otros se pueden obtener por medio del examinador especial de
caracteres.

Las teclas especiales que tienen diferentes definiciones estn principalmente
en un plano distinto del alfa. Los planos SD, DI y DD  (S_in D_esplazamiento,
D_esplazamiento I_zquierda y D_ezplazamiento D_erecha) se definen como sigue:
   +-------+-------+-------+-------+-------+-------+
   |BSTART |BEND   |BCOPY  |BCUT   |       |FIND   |
   |       |       |       |BDEL   |GREPL? |REPL?  |
   |BLKUP  |BLKDN  |BSWAP  |BKEEP  |GREPL  |REPLALL|
   +-------+-------+-------+-------+-------+-------+
   |ARG?   |ECCAT  |MEXEC  |REVERSE|UP     |NEXT   |
   |ROW?   |CHR?   |MSTART |TOHEX  |PGUP   |PREV   |
   |POS?   |CHRCAT |MEND   |TOASC  |TOP    |STATUS |
   +-------+-------+-------+-------+-------+-------+
   |''     |STK    |       |LEFT   |DOWN   |RIGHT  |
   |       |BPUSH  |       |LWORD  |PGDN   |RWORD  |
   |       |RCLSTK1|       |LSTART |BOTTOM |LEND   |
   +-------+-------+-------+-------+-------+-------+
   |GOTO   |GOSUB  |GOYES  |       |  ^    |DFIND  |
   |GOLONG |GOSUBL |GONC   |       |CNTRINI|       |
   |GOVLNG |GOSBVL |GOC    |       |CNTR   |       |
   +---------------+-------+-------+-------+-------+
   |EXIT           |TOGSPD |TOGBEEP|DEL    |BS     |
   |               |ASS    |TOGCASE|DELLINE|BSLEFT |
   |               |DOB    |TOGOVER|DELRGHT|BSRIGHT|
   +-------+---------+---------+---------+---------+
   |alpha  |7        |8        |9        |/        |
   |       |SETMK7   |SETMK8   |SETMK9   |()       |
   |       |GOMK7    |GOMK8    |GOMK9    |#        |
   +-------+---------+---------+---------+---------+
   |lshift |4        |5        |6        |*        |
   |       |SETMK4   |SETMK5   |SETMK6   |[]       |
   |       |GOMK4    |GOMK5    |GOMK6    |ASS_RPL  |
   +-------+---------+---------+---------+---------+
   |rshift |1        |2        |3        |-        |
   |       |SETMK1   |SETMK2   |SETMK3   |<<>>     |
   |       |GOMK1    |GOMK2    |GOMK3    |""       |
   +-------+---------+---------+---------+---------+
   |REDISP |0        |.        |SPC      |+        |
   |       |         |,        |TAB      |{}       |
   |OFF    |GOMK0    |NEWLINE  |TAB      |::       |
   +-------+---------+---------+---------+---------+
Explicaciones:

TOGBEEP   - Activa/Desactiva el sonido. El valor por defecto se toma a partir
            del valor de la bandera del sistema.
TOGCASE   - Cambia entre letras maysculas/minsculas. Tambin afectado por
            alfa+DI+alfa
TOGOVER   - Cambia entre el modo insertar/sobreescribir
TOGSPD    - Cambia entre el modo normal/rpido

LSTART    - Salta al principio de la lnea
LEND      - Salta al final de la lnea
LWORD     - Se salta una palabra hacia la izquierda
RWORD     - Se salta una palabra hacia la derecha

DEL       - Borra el carcter en el cursor
DELLINE   - Borra la lnea en la que esta el cursor
DELRGHT   - Borra los caracteres a la derecha del cursor 
BS        - Borra un carcter a la izquierda del cursor
BSLEFT    - Borra una palabra a la izquierda
BSRIGHT   - Borra una palabra a la derecha 

BSTART    - Coloca la marca de inicio de bloque
BEND      - Coloca la marca de final de bloque
BLKUP     - Selecciona un bloque desde el inicio del texto hasta el cursor
BLKDN     - Selecciona un bloque desde el cursor hasta el final del texto
BCOPY     - Copia el bloque/portapapeles a la posicin del cursor
BCUT      - Borra el bloque (se copia al portapapeles)
BDEL      - Borra el bloque (no se copia al portapapeles)
BKEEP     - Borra todo menos el bloque (no se modifica el portapapeles)
BSWAP     - Intercambia el portapapeles con el texto actual
BPUSH     - Coloca el bloque/portapapeles en la pila
RCLSTK1   - Copia la cadena del nivel 1 de la pila en la posicin del cursor

FIND      - Bsqueda Incremental. La bsqueda tiene en cuenta si las letras
            son maysculas/minsculas cuando la cadena a buscar contiene
            minsculas. 
REPLALL   - Buscar/reemplazar todo
REPL?     - Buscar/reemplazar con verificacin
GREPL     - Reemplazar todo (global) sin cambiar la posicin del cursor.
GREPL?    - Como el anterior (global) pero con verificacin. Por ejemplo,
            para reemplazar todos los "L05512" con alguna etiqueta ms
            descriptiva:
                     -  pon el cursor en la etiqueta y presiona GREPL
                     -  pulsa alfa para apagar el modo alfa
                     -  pulsa flecha-abajo para insertar la etiqueta en la
                        lnea de entrada
                     - pulsa ENTER para aceptarlo
                     - escribe el substituto y presiona enter

NEXT      - Buscar la siguiente coincidencia
PREV      - Buscar la anterior coincidencia
DFIND     - Buscar el delimitador correspondiente el que hay en el cursor (el
            que hace pareja con l, por ejemplo: si el cursor esta en "::" se
            busca el ";" que le corresponde, no el primero que encuentre)
MSTART    - Inicia la definicin de la secuencia de teclas de una macro 
MEND      - Termina la secuencia de teclas de la macro
MEXEC     - Ejecuta la macro de la tecla

ARG?      - Pide el nmero de veces que se repetir la prxima tecla que se
            pulse despus de ingresar el argumento.
ROW?      - Pide la fila a la que saltar 
POS?      - Pide la posicin a la que saltar
CHR?      - Pide el nmero del carcter a insertar
CHRCAT    - Examinador de caracteres. La tecla ENTER copia el carcter
            escogido a la posicin del cursor. La tecla ON sale del
            examinador
ECCAT     - Catlogo de Entradas. Cualquier entrada que escojas (pulsando
            ENTER) se insertar en la posicin del cursor 
SETMKn    - Pone la marca nmero <n>
GOMKn     - Salta a la marca nmero <n>
GOMK0     - Va a la posicin anterior del cursor
   
TOHEX     - Convierte el bloque a nibbles en hexadecimal 
               (Adecuado para NIBASC -> NIBHEX)
TOASC     - Convierte el bloque a nibbles asc 
               (Adecuado para NIBHEX -> NIBASC)
REVERSE   - Invierte el orden de los caracteres en el bloque/palabra
ASS       - Ensambla el cdigo fuente, si se produce un error muestra el
            mensaje y despus de pulsar una tecla, salta a la posicin del
            error.
DOB       - Desensambla la entrada bajo el cursor usando DOB. Abre un nuevo
            editor para ver el desensamblado. Despus de volver al editor
            original, el desensamblado estar en el portapapeles (si lo
            permite la memoria) listo para insertarlo en el texto si se
            desea. Casos especiales:
                  #hhhhh          -->  se visualiza (igual que una entrada
                                       normal)
                  Lhhhhh          -->  se visualiza 
                  ROMPTR hhh hhh  -->  se visualiza 
                  PTR hhhhh       -->  se visualiza
                  ID nombre       -->  se visita el contenido
                                       (RCL+DIS+ED+ASS+STO)
                  INCLOB nombre   -->  se visita el contenido
                                       (RCL+DIS+ED+ASS+STO)
                  INCLUDE nombre  -->  se visita el contenido de texto
                                       (RCL+ED+STO)
                  GROB hhhhh hh.h -->  se visualiza el grob
STK       - Inicia un SOL normal. Se permiten comandos EDs recursivos. Se
            vuelve de nuevo a ED con la tecla CONT. Se pierden todos los
            marcadores internos excepto la posicin del cursor.
            NOTA: SOL normal se refiere a la pantalla de la pila normal HP48
CNTRINI   - Inicializa una variable contadora. El nmero de dgitos usados
            determina la anchura del contador. Si empieza con un "#" implica
            un contador hexadecimal.
CNTR      - Inserta un contador en el texto y lo incrementa. Al principio la
            anchura se inicializa a 1 nibble hex. As por ejemplo, pulsando
            [ARG?] 16 ENTER [CNTR] se obtendra "0123456789ABCDEF"

Teclas especiales mientras se esta en la lnea de entrada:

   ENTER       -  Entrada OK
   ON          -  Cancelar
   DEL         -  Borra carcter
   BACKSPACE   -  Borra carcter anterior (tecla BS)
   TI/TD       -  Mueve a la izquierda/derecha. Durante la entrada de una
                  bsqueda (find:) si se pulsa la tecla TD (tringulo o
                  cursor derecha) estando al final de la entrada, se entrar
                  el carcter que se encuentra despus del cursor (que
                  normalmente ser el de la ltima coincidencia), con lo que
                  se facilita completar la coincidencia.
   NXT         -  Siguiente coincidencia durante la entrada de bsqueda
                  (find:). 
   PREV        -  Coincidencia anterior durante la entrada de bsqueda
                  (find:).
   DD+PRG      -  Inicia el catlogo de caracteres
   ABAJO       -  Pone la palabra que est en el cursor en la lnea de
                  edicin

Teclas especiales en el plano alfa:

   A DI -      =     ::\n;   (con chequeo de endentacin)
   A DD -      =     $ ""
   A DI +      =     {\n}    (con chequeo de endentacin)
   A DD +      =     CODE\nENDCODE
   A ENTER     =     \n + endentacin igual que la lnea anterior de texto
   A DD DEL    =     ECCAT
   A BACKSPACE =     Rellenado (FILL) (completa el nombre de entrada donde 
                     est el cursor con la mejor coincidencia que encuentre

Notas:
   La repeticin y la ejecucin de una tecla macro se pueden abortar con la
   tecla ON. La repeticin, salvar macro y ejecutar macro se abortan
   automticamente si se produce un error. La mxima longitud de una
   secuencia de teclas macro es de 50 teclas.


8.1  El Visualizador
--------------------

Comando:       VV
Pila:          ( $|grob --> $|grob )
Descripcin:   Visualizador sencillo de cadena/grob.
Notas:         Si se implementa el comando AGROB (EQSTK o Java) se usa
               automticamente para visualizar cualquier otro objeto con
               tamao 1 (pequeo).

Teclas cuando se visualiza una cadena:

                  Up/Down/Left/Right  = desplazan la pantalla
                  PRG/STO/'/EVAL      = desplazan la pantalla una pgina
                  F/NXT               = inicio/fondo
                  -                   = desplazamiento lento
                  +                   = desplazamiento rpido (por defecto)
                  ON/ENTER            = salir

Teclas cuando se visualiza un grob:

                  Up/Down/Left/Right = mueven el grob
                  .                  = centran el grob
                  ON/ENTER           = salir
                  A-F                = seleccionan velocidad desplazamiento
                                       1-6
                                                                           
El visualizador de grobs usa una substitucin de grob! con cortado
automtico. Todava no esta apropiadamente implementado el enmascaramiento de
grobs con una anchura menor de 4 bits. La visualizacin se hace en el grob de
texto, as que el siguiente programa crear un efecto extrao:

:: ABUFF xVV ;
    


9  Utilidades de la Tabla de Entradas
=====================================

Comando:       EA
Pila:          ( $entrada      --> direccin_hxs )
               ( direccin_hxs --> $entrada   )
               ( ob            --> direccin_hxs )
Descripcin:   Cambia entre nombre de entrada y su direccin y viceversa.
               Para otro tipo de argumentos, da la direccin del objeto en 
               memoria.

Comando:       RTAB
Pila:          ( --> $ )
Descripcin:   Coloca RPL.TAB en la pila

Comando:       DTAB
Pila:          ( --> $ )
Descripcin:   Coloca DIS.TAB en la pila

Comando:       RTB->
Pila:          ( --> $ )
Descripcin:   Convierte RPL.TAB a una forma legible y la coloca en la pila

Comando:       ->RTB
Pila:          ( $ --> $' )
Descripcin:   Convierte una lista de entradas al formato RPL.TAB
                      Se aceptan las siguientes lneas:
                      [=]nombre[espacio en blanco][EQU #]direccin\n
                      ~~~       ~~~~~~~~~~~~~~~~~
                      opcional      opcional

                     Observe que la entrada debe estar ordenada. No se hace
                     ninguna comprobacin de que sea as. Tambin el ltimo
                     carcter en la cadena de entradas deber ser un carcter
                     "salto de lnea" (\n)

Comando:       ->DTB
Pila:          ( --> )
Descripcin:   Crea una DIS.TAB basndose en RPL.TAB y la almacena en el 
               directorio home.


Adicin de una nueva entrada a RPL.TAB:

   -  Usa RTB-> para obtener una cadena editable
   -  Usa ED para aadir la definicin de la nueva entrada. Debes aadirla en
      la posicin correcta
   -  Usa ->RTB para obtener la nueva RPL.TAB 
   -  Substituye la antigua RPL.TAB con la nueva
   -  Usa ->DTB para obtener una nueva DIS.TAB
   -  Substituye la vieja DIS.TAB con la nueva

De modo parecido se pueden borrar entradas

El mtodo preferido de edicin de las entradas es editar la tabla hpentr.a en
el PC y usar gentab2 para generar las nuevas tablas.

----------------------------------------------------------------------


