Anterior Siguiente Indice

7. Preguntas sobre programación y funciones avanzadas de usuario

7.1 He oído los nombres RPL, Saturn, STAR, GL, etc... Que significan?

ASAP

Es un simple ensamblador Saturn , escrito en lenguaje Perl.

Chip8, Chip48, Schip, Schip8

Es un programa de lenguaje de maquina que fue inspirado en el interpretador de video juegos chip8 para el microprocesador RCA CDP1802 varios años atrás. Chip8 permite escribir video juegos simples basados en gráficos para la HP48 SX. Entre los juegos escritos hay clones de Breackout, PacMan y Pong, por nombrar algunos.

Chip48, Schip y Schip8 son dos nombres diferentes para una versión mejorada de chip8 especialmente diseñada para la HP48 SX. Las personas han escrito programas para compilar lenguaje de maquina Schip de tal forma que sea directamente usable por Schip en una HP48. Existen interpretes Schip disponibles para las series S y G.

GL

GL (Game Language, lenguaje de juegos) es un lenguaje para los programadores que quieren casi la velocidad del assembler, pero que no quieren gastar mucho tiempo y esfuerzo en aprender todos los trucos de la programación de assembler en al HP48. GL tiene una sintaxis parecida a la del assembler, y hay un compilador para PC y otro para la HP48. Las instrucciones son poderosas, con sprites y gráficos basados en pixeles, sound, control de teclado, y mas. Hay 256 registros de 1-byte que pueden ser usados en pares como palabras de 2-bytes. Un programa GL puede tener un tamaño de hasta 64 Kb. Gl fue inspirado por Schip, pero es mucho mejor en todos los aspectos. Es utilizable para muchas aplicaciones, no solo juegos, que requieren alta velocidad. Por supuesto funciona en la HP48 S/SX y la G/GX. GL fue escrito por Erik Bryntse.

ML

Lenguaje de maquina (Machine Language). Este es usado en referencia al lenguaje de programación assembler de la HP48.

MLDL

Machine Language Development Library. Esta es una librería que te permite eliminar errores de programas de lenguaje de maquina con solo una HP48.

PDL

"Program Development Link". Este es un programa de DOS, vendido por Hewlett-Packard, que permite escribir y desarrollar aplicaciones para la HP48 desde tu clon IBM PC. Los programas son escritos en tu PC, transferidos a tu HP48, y probados desde tu PC (y no la HP48).

RPL

RPL es el nombre del lenguaje usado para programar las series de calculadoras HP48 y HP-28. RPL significa "Reverse Polish Lisp". Es interesante destacar que un articulo del HP Journal describió incorrectamente a RPL como "ROM-based Procedural Language".

SASS

SASS es un simple ensamblador Saturn, escrito en C/yacc (BSD Unix &Bison). Usa las mnemotecnia de Alonzo Gariepy.

Saturn

"Saturn" es el nombre clave interno del procesador usado en las series HP48 y HP-28, y muchas otras calculadoras (casi todas las calculadoras HP desde las series HP18/28).

STAR

Este es el "Saturn Macro Assembler" (como "STAR" deriva de esto, no lose), un ensamblador que usa mayormente las mnemotecnias de Alonzo Gariepy. Esta escrito en C y corre en muchas maquinas diferentes (PCs, Amigas, Unix, etc.). STAR esta disponible vía ftp anónimo en ftp://hpcvbbs.cv.hp.com/dist/unix/star-1.04.4.tar.gz

System RPL

Este es el nombre para el "sistema operativo/lenguaje" propio de la calculadora HP48 usado para programar el CPU. System RPL es un grupo de comandos extraordinarios que se suman a los user RPL; además de los comandos normales RPL accesibles para el usuario, system RPL incluye mucha funciones de bajo nivel. El lenguaje System RPL esta solo un paso mas arriba que el lenguaje de maquina.

HP ha lanzado una caja de herramientas para desarrollo de sistema (para el IBM PC), que contiene un compilador de system RPL, assembler y loader, completo con unos cientos de paginas de documentación. La caja de herramientas, aunque tiene derechos de autor, es copiable sin costo. Si puedes encontrar una BBS o archivo que los contenga, puedes bajar todos los archivos de system RPL y su respectiva documentación.

USRLIB

USRLIB es un programa que toma el contenido de un directorio de la HP48 y lo convierte en una librería. Corre actualmente bajo MSDOS.

Voyager

Voyager es un "desensamblador interactivo" para clones IBM PC que desensambla RPL y código de maquina de la HP48 SX. Puedes bajar una copia de la RAM y ROM de tu HP48 SX a tu PC, y ejecutar Voyager. Usando Voyager, tu puedes ver el código desensamblado. Desafortunadamente (o afortunadamente), Voyager usa la mnemotecnia de HP, y no la de Alonzo Gariepy. Voyager esta disponible en la BBS de HP ftp://hpcvbbs.cv.hp.com/dist/, y en otras varias BBS (el foro de HP handhelds en Compuserve también tiene una copia). La ultima versión es la "1.07".

7.2 Existe un compilador C para la HP48?

Si, Alex Ramos escribió un traductor GNU C para el procesador Saturn. Los binarios están disponibles para Linux y Windows 95/NT, y el código fuente esta disponible para compilarlo en otras plataformas.

Revisa http://www.cris.com/~ramos/hp48/hp48xgcc.htm para la ultima versión.

7.3 Porque los programas en SysRPL corren mas rápido que los en UserRPL?

SysRPL es el lenguaje incorporado, especialmente diseñado para el procesador Saturn usado en la familia de las HP48. UserRPL es un "subconjunto" de SysRPL. La mayor razón de la diferencia en la velocidad es el hecho de que los comandos en UserRPL tienen incorporado revisión de argumentos y errores. En SysRPL, el programador es responsable de todas las revisiones de errores para evitar el borrado de la memoria.

Nota que System RPL es un lenguaje compilado y que por eso necesitas un programa como Jazz o los GNU-Tools para crearlos. Esto significa que no puedes editar o ver SysRPL directamente en tu HP48, a diferencia de UserRPL. Sin embargo ambos pueden ejecutarse de la misma forma.

7.4 Cual es una buena referencia para aprender SysRPL y ML?

El libro "An Introduction to HP48 System RPL and Assembly Language Programming" de Jim Donnelly provee 230 paginas de instrucciones paso a paso para nuevos programadores lleno de ejemplos. También viene con un disco de 3.5 pulgadas que contiene los ejemplos en código fuente y las herramientas de desarrollo de HP para DOS. Esta disponible a través de EduCalc por $25 U.S.

El numero ISBN es: 1-879828-06-5

También son útiles RPLMAN.DOC y SASM.DOC disponibles en el Goodies Disk 4. Ve el Apéndice E-5 para mas información. También puedes ver en la siguiente URL: http://titan.cs.uni-bonn.de/~wolfrum/hpbooks.html

7.5 Puedo hacer mis propias Librerías? Puedo Desarmar Otras?

Si, puedes usar USRLIB de las herramientas de desarrollo de HP para crear librerías en DOS, o puedes hacerlas directamente en tu HP con los utilitarios de hacker como D->LIB y L->DIR de Rick Grevelles que pueden crear y desarmar librerías de/hacia directorios. Las puedes encontrar en la librería HACK de Mika Heiskanen en http://www.hut.fi/~mheiskan/

7.6 Como puedo saber que numero de identidad de librería usar para mi programa?

Nota: Mientras este documente dice HP48 SX, también es valido para la GX.

Números de Identidad de Librerías para la HP48 SX Paul Swadener, Soporte de Diseñadores de Programas de HP. 03 Sep. 1993

La HP48 se confundirá si dos o mas librerías actualmente en la maquina tienen el mismo numero de identificación. Para ayudar los esfuerzos de los Diseñadores de Programas (ajenos a HP), HP mantiene una lista de los Números de Identificación de la HP48 ya asignados.

Mas abajo están las "reglas". El castigo por no seguir estas reglas es que tu librería puede no funcionar si otra librería en la maquina tiene el mismo numero.

  1. No uses ningún numero en el rango de 000h hasta 300h. Estos están reservados para el uso de HP.
  2. No uses ningún numero en el rango de 301h hasta 5A0h a menos que se te halla asignado ese numero por HP. Estos números están reservados para diseñadores de programas que están en el negocio de distribución de su software, esto es, Diseñadores Independientes de Software. Para calificar para la asignación de un ID# contacta a Paul Swadener, Hewlett-Packard Company, 1000 NE Circle Blvd., Corvallis, OR 97330, numero de fax 541-715-2192, dirección de internet paul_swadener@hp6400.desk.hp.com. Tu debes ser un diseñador de software registrado y dar el nombre/naturaleza de tu producto, y tu dirección actual (casa), teléfono/fax/dirección internet/etc.
  3. Usa un numero entre 5A1h hasta 600h para trabajo y software experimental. HP no lleva registro de estos números.
  4. Usa un numero entre 601h hasta 6F6h para tus aplicaciones personales, esas que podrías compartir con un numero conocido de usuarios para su uso personal. HP no lleva registro de estos números.
  5. No uses ningún numero entre 6F7 hasta 6FF, ya que esos números fueron asignados antes de que el proceso formal de asignación fuera instituido.
  6. No uses ningún numero sobre 700h. Estos números también están reservados para su uso por HP.

Espero que esto ayude a aclarar como funcionan los números de librerías

7.7 Que información existe acerca de los interiores de la HP48?

El documentos mas importantes son parte de las herramientas de desarrollo "System RPL", una gama completa de herramientas para IBM PC no soportadas por HP Corvallis (los creadores de la HP48). Estas herramientas, que corren solo en maquinas DOS, contienen documentación sobre:

Sin embargo la documentación también es valida para algunos de los nuevos programas de herramientas de desarrollo como Jazz y GNU-Tools. (Ve la próxima pregunta para saber donde conseguirlos).

7.8 Donde puedo conseguir algunas herramientas de desarrollo de programas?

Las herramientas de desarrollo System RPL no soportadas y su documentación (de HP) están disponibles a los clientes sin cargo para ayudarlos en el desarrollo de aplicaciones de la HP48, sujetos a ciertos términos legales, que no son dados con las herramientas (son demasiado largos y detallados para ponerlos aquí).

Puedes conseguir una copia de alguna de las siguientes formas:

Otra alternativa es usar alguno de los paquetes creados por miembros de la comunidad HP. En particular, Jazz es una librería creada por Mika Heiskanen que permite programar en System RPL y lenguaje de maquina directamente en tu HP48! Requiere una SX con una tarjeta RAM o una GX.

Jazz esta disponible en http://www.hut.fi/~mheiskan/

También están los GNU-Tools de Mario Mikocevic (Mozgy) que es un conjunto de programas que reemplazan las herramientas de desarrollo de HP, que no solamente corren en DOS, sino en sistemas Unix como Linux y Solaris. Es distribuido en código fuente y en sus binarios.

GNU-Tools están disponibles en:

7.9 Se UserRPL. Como comienzo con SysRPL?

Aquí hay una guía rápida para aprender System RPL. Ve otras preguntas para mayor información de como obtener los siguientes itemes.

7.10 Hay viruses para la HP48?

Hay varios, la mayoría franceses. En EE.UU., un virus llamado "virus Michigan" apareció hace unos cuantos años. Hay un programa en el Goodies Disk 8 que revisa la existencia del Virus Michigan. Actualmente, los virus no representan una amenaza apreciable para las HP48.

7.11 Como guardo campos de largo variable efectivamente?

Ve el Apéndice A-5 cerca del final de este archivo.

7.12 Que es "Vectored Enter, y como puedo ocuparlo?

Texto original de Bill Wickes

Los manuales de la HP48 no comentan acerca de una característica muy poderosa que llamamos "Vectored ENTER", que te permite en efecto redefinir o omitir la parada de la línea de comando y tener una mirada a la pila etc. después de que la línea de comandos haya sido ejecutada.

Teclas que ejecutan un ENTER automático llevan a cabo un proceso de dos pasos:

  1. La línea de comando es parada y evaluada.
  2. La definición de teclas es ejecutada.
cuando la banderas -62 y -63 están arriba, el sistema este proceso como sigue:
  1. En la ruta actual (directorio) es buscada una variable llamada *aENTER (donde "*a" es la letra griega alfa-caracter 140). Si esta presente, la línea de comando es ingresada como un objeto string y *aENTER es ejecutado. Si no se encuentra la línea de comando es parada y evaluada normalmente.
  2. La definición de teclas es ejecutada.
  3. En la ruta actual se busca una variable llamada *bENTER ("*b" es la letra griega beta-caracter 223). Si esta presente, entonces un string representando la definición de teclas es puesto en la pila, y *bENTER es ejecutado. El string es la definición de teclas de el nombre de objeto de su comando, nombre XLIB, nombre global o local, o un string vacío para otros tipos de objetos; su primer propósito es implementar cosas como el modo TRACE en otras calculadoras, donde tu puedes imprimir un registro móvil de lo que estas haciendo.
Un ejemplo simple del uso de *aENTER es la creación de una calculadora de binarios mas conveniente, donde *aENTER pega un "#" en el frente de la línea de comando, así no tienes que molestarte cuando ingresas números.

7.13 Que es "WSLOG"?

Es una característica que recientemente ha dejado ser no documentada, que significa "Warm Start Log" (registro de reinicio en caliente, que es descrito en el apéndice de comandos en manuales nuevos de la G, así como es totalmente explicado en el AUR).

Tipea WSLOG con mayúsculas, y la calculadora mostrara la hora y la causa de las ultimas cuatro reinicio en caliente. Esta característica ayuda al soporte técnico de HP a reparar tu HP48 en caso de que se caiga.


0 - registro borrado por <ON> <SPC> después <ON>

1 - condición de baterías bajas, auto invocación de modo de sueño profundo para ahorrar baterías

2 - falla de hardware durante IR (fuera de tiempo)

3 - corrió a través de dirección 0

4 - hora del sistema corrupto

5 - despertó de modo de sueño profundo (alarma?)

6 - no usado

7 - palabra de prueba del CMOS en la RAM estaba corrupto

8 - anormalidad detectada en relación a la configuración de dispositivos

9 - lista de alarmas corrupta

A - problema con movimiento en RAM

B - modulo de tarjeta arrancado

C - hardware reset (reinicio)

D - error del manipulador de system RPL no encontrado en el flujo de ejecución

E - tabla de configuración corrupta

F - tarjeta de RAM de sistema arrancada

7.14 Que son SYSEVALs?

SYSEVALs son direcciones que apuntan directamente a un lugar de la ROM de la HP48. Muchos strings hexadecimales SYSEVAL son comandos System-RPL. Ya que no hay revisión de argumentos, es muy fácil borrar la memoria de tu HP48.

En el archivo SYMBOLS.GX, HP designa tres tipos de entradas. El primer tipo son las "soportadas". Esto significa que una entrada particular funcionara en TODAS las versiones de la HP48 y HP soporta el uso de esta entrada.

El segundo tipo de entrada son las "no soportadas". Esto significa que HP no soporta el uso de esta entrada y que no será la misma en todas las versiones de la HP48.

El tercer tipo son las "no soportadas-estaticas". Esta es una entrada que HP no soporta, pero es la misma para todas las versiones.

7.15 Cules son algunos SYSEVALs útiles?

Para una lista completa de las entradas, ve http://www.hut.fi/~mheiskan/

En System RPL, distintos tipos de objetos HP son referidos por símbolos. estos símbolos son usados para construir diagramas de pila, que le dicen al usuario como usar los comandos System-RPL. Aquí hay alguno de los símbolos:


Símbolo  Tipo                        Ejemplo

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

$        string                      "ABCDEFG"

id       Global Name                 'A'

arry     Array                       [[ 1 2 ] [ 3 4 ]]

grob     HP48 Graphics Object        Graphic 131x64

#        Binary Number               <1h>

symb     Symbolic Object             'A^2+B^2'
Para interpretar el diagrama de pila:

Todo lo que esta en el lado izquierdo de la flecha -> son la entrada. Eso se necesita que este en la pila antes de ejecutar el SYSEVAL. Los símbolos muestran que tipo de datos poner en la pila. Una vez que ejecutes el syseval (ve el próximo párrafo), la HP devolverá los datos indicados en el lado derecho de la flecha.

Para usar las siguientes entradas, haz lo siguiente:

  1. Esta seguro (triple revisión) de que en la pila están los argumentos apropiados.
  2. Presiona Right-shift /, deberías obtener un # en la línea de comando.
  3. Ingresa el string hexadecimal exactamente como se muestra en la columna de string hexadecimal.
  4. Pon una h minúscula en el final del string hexadecimal.
  5. Presiona enter.
  6. Tipea SYSEVAL.

Aquí a unos cuantos ejemplos:

Hex    Nombre Sys-RPL    Categoria              Diagrama de Pila

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



15777  NULLID            Soportado              ( -> '' )

30794  VERSTRING         Soportado              ( -> "HPHP48-?" )

3A328  MakeStdLabel      Soportado              ( $ -> grob )

3A3EC  MakeDirLabel      Soportado              ( $ -> grob )

3A38A  MakeBoxLabel      Soportado              ( $ -> grob )

3A44E  MakeInvLabel      Soportado              ( $ -> grob )

3A1FC  DispMenu.1        Soportado              ( -> )

05F42  GARBAGE           Soportado              ( -> )

41F65  WaitForKey        Soportado              ( -> #KeyCode #Plane )

353AB  SYMB>IDS          No Soportado-Estatico  ( symb -> list )

40D25  LockAlpha         Soportado              ( -> )

40D39  UnlockAlpha       Soportado              ( -> )

3AA0A  1A/LockA          Soportado              ( -> )

44C31  DoNewMatrix       Soportado              ( -> arry )

44FE7  DoOldMatrix       Soportado              ( arry -> arry' T/F )

1314D  TOADISP           Soportado              ( -> )

13135  TOGDISP           Soportado              ( -> )

39531  ClrDA1IsStat      Soportado              ( -> )

130AC  RECLAIMDISP       Soportado              ( -> )

4E347  TURNMENUON        Soportado              ( -> )

05B15  $>ID              Soportado              ( $ -> id )

05BE9  ID>$              Soportado              ( id -> $ )

3A1E8  DispMenu          Soportado              ( -> )

39BAD  DispStack         No Soportado-Estatico  ( -> )

7.16 Que son LIBEVALs?

Texto original de Joe Horn (Copiado de "libeval.doc" en GD 9)

La G/GX tiene un nuevo comando: LIBEVAL. Es como SYSEVAL, pero en vez de hablar de direcciones de memoria (que serian ambiguos gracias a la necesidad de switcheo de bancos en la G/GX), toma numeros XLIB. Es una "entrada de atras" para nosotros los hackers. Al contrario de el comando ELSYSEVAL en la tarjeta HP Solve Equations Library, que solo funcionaba para las librerias en la tarjeta, LIBEVAL funciona para cualquier libreria, incluyendo las escondidas en el sistema opertivo.

PRECAUCIONA: LIBEVAL, al igual que SYSEVAL, es tan poderosa como peligrosa. Si la usas con entrada(s) incorrectas y/o en el ambiente equivocado, puede borrar tu memoria.
LIBEVAL toma un solo binary integer (entero binario) de la forma #LLLFFFh, donde LLL es la ID(hex) de la librería, y FFF es el numero de la función de tres dígitos (hex, con ceros precediéndolo si es necesario).

Por ejemplo el comando R->B es XLIB 2 9. Así que puedes hacer un R->B ejecutando #2009h LIBEVAL. Pruébalo: 10 #2009h LIBEVAL -> #Ah.

Usarlo para comandos con nombres es innecesario, pero la G/GX esta orientada a las XLIB (de nuevo, gracias a la necesidad de switcheo de bancos), y hay muchas características útiles e interesantes accesibles solo a través de LIBEVAL.

Un ejemplo claro es la inhabilidad de la G/GX para iniciar los nuevos "dialog boxes" dentro de programas. Supón que un programa necesite imprimir cosas; seria terriblemente agradable poder iniciar el I/O PRINT dialog box en la pantalla. La Guía de Usuario no ayuda en este aspecto, y de hecho parecería imposible de hacer. Pero #B4197 LIBEVAL es todo lo que se necesita! Inténtalo. Bacan,eh?

7.17 Cuales son algunas LIBEVALs útiles? (GX)

Ve el Apéndice B-3 para algunos ejemplos de LIBEVALs para la GX.

7.18 Cual es el formato de un objeto GROB?

Nota: recibí dos buenas respuestas a esta pregunta, y cada una apunta a un tipo de usuario distinto, así que las incluiré a ambas.

La forma fácil:

Primero, agrega pixeles al borde derecho para hacer la dimensión horizontal un múltiplo de 8, entonces separa el objeto horizontalmente en grupos de 4 pixeles. Supón, por ejemplo, que quieres hacer esto en un GROB de 22x8:


---------****---------

--------**--**--------

-------**----**-------

********------********

********------********

-------**----**-------

--------**--**--------

---------****---------
Deberías separarlo de esta forma:
 

---- ---- -*** *--- ---- ----

---- ---- **-- **-- ---- ----

---- ---* *--- -**- ---- ----

**** **** ---- --** **** **--

**** **** ---- --** **** **--

---- ---* *--- -**- ---- ----

---- ---- **-- **-- ---- ----

---- ---- -*** *--- ---- ----
Nota, que he agregado dos columnas de pixeles para hacerla de 24x8. Ahora, cada grupo de cuatro puede ser representado por un dígito hexadecimal.

---- 0          --*- 4          ---* 8          --** C

*--- 1          *-*- 5          *--* 9          *-** D

-*-- 2          -**- 6          -*-* A          -*** E

**-- 3          ***- 7          **-* B          **** F

Ahora reemplaza cada grupo de cuatro pixeles con el dígito hexadecimal correspondiente: 00E100 003300 081600 FF0CF3 FF0CF3 081600 003300 00E100.

Así la grob final es:


GROB 22 8 00E100003300081600FF0CF3FF0CF308160000330000E100 

La forma técnica:

  1. Cada uno de los formatos de objetos son decritos en RPLMAN.DOC, ve ese archivo para mas información.
  2. Todos los objetos de la HP son (obviamente), basados en nibbles. Cuando los ves en un PC, que es basado en Bytes, el nibble mas bajo siempre se lee primero.
  3. Los objetos de la HP comienzan con un prologo de 5 nib que identifican el tipo de objeto (y otras cosas). Este es el prologo para un objeto grob:
    
    02B1E pr HP:DOGROB
    
    02B1E @  Graphic prologue (/U GROB)
    
  4. Cada sub campo (5 nib) de un objeto, como el prologo, largo, etc., es leído en orden inverso (primero el nib mas bajo). El prologo de un grob aparece como E1B20, o 1E2Bx0 en un hex dump (vaciador hexadecimal) en el PC. El nibble menos significativo del siguiente campo comienza inmediatamente en el x de x0.
  5. Es usual trabajar siempre con los objetos de la HP en el PC con el encabezado HPHP48-E (reemplaza la letra de tu versión de ROM favorito) precediendo al prologo. Esto evita molestias cuando transmites hacia la calculadora vía Kermit o X-Modem.

Vaciado hexadecimal (hex dump) de un objeto grob.. (recuerda que cada campo de 5 nib esta en orden inverso)

  1. "HPHP48-E" string ascii de 8 bytes con msb apagado
  2. Prologo de 5 nib, 02B1E (hex)
  3. Campo de largo (5 nib), incluye el largo del cuerpo Y de los campos largo y dimensiones! No incluye los 5 nib del prologo. Entonces, el numero total de nibs que el objeto grob ocupa en la memoria de la HP es este numero + 5. Importante!
  4. Campo de altura de 5 nibs (si, la altura primero después el ancho)
  5. Campo del ancho de 5 nibs
  6. Curpo (descrito mas abajo)
El objeto grob mirado usando el editor incorporado (EDIT) en la HP..


GROB <ancho (dec)> <altura (dec)> < cuerpo >

El cuerpo se ve igual a como lo veríamos en un vaciado hexadecimal en el PC o en el editor incorporado de la HP48. Solo recuerda leer el nibble menor antes en el vaciado hexadecimal.

Por restricciones de hardware, el numero requerido para representar una línea horizontal debe ser par (alineado en byte). Entonces usa este método para calcular el numero de nibs en una línea.. (ejemplo en pascal)


nibs := width div 4;

if nibs mod 4 <> 0 then nibs := nibs + 1;

if odd(nibs) then nibs := nibs + 1;
Después para encontrar el # de nibs en el cuerpo entero, multiplícalo por la altura. Recuerda, el campo del largo debe ser el largo total del cuerpo + 15!

Por ejemplo, un grob de ancho 131 requiere 34 nibs para una línea horizontal, donde 5 de los bits no son usados. El primer nib en la segunda línea empieza en el nib 35 de este grob, etc... Si el grob es de 64 líneas, entonces el cuerpo tiene 2176 nibs. Agrégale 5 nibs por el prologo, 5 por el campo del largo, 5 por la altura y 5 por el ancho. El tamaño total del objeto (en la HP) es de 2196 nibs, o 1098 bytes. El campo del largo debería contener 2196 menos 5 del prologo =2191 (0088FF hex)

Nota que en cada nib, el bit que esta mas a la derecha es el pixel que esta mas a la izquierda en la pantalla. Este es casi siempre el caso de la memoria gráfica.

7.19 Que es el AUR y que información contiene?

Nota: este libro solo esta disponible en ingles.

Texto original de Jarno Peschier <jpeschie@cs.ruu.nl>

En este texto voy a tratar de responder a un numero de preguntas frecuentes acerca del Advanced User's Reference Manual de la serie HP48 G. En el resto de este texto voy a usar la abreviatura común AUR cuando me refiera a este libro.

Las respuestas que voy a tratar de responder son:

Que es el AUR?

El AUR es solo lo que su nombre dice de el: es un manual de referencia para la serie HP48 G. Tiene la misma apariencia externa que la Guía del Usuario de la Serie HP48 G (el manual que venia con tu HP48 G o HP48 GX cuando la compraste), exeptuando que es mucho mas grueso (apenas por debajo de los 4 cm). El AUR contiene cerca de 650 paginas de información útil sobre tu calculadora.

Que información contiene el AUR?

El AUR contiene información acerca de la programación en UserRPL, muchos ejemplos de programación, una referencia completa de todos los comandos (UserRPL) que la serie G reconoce y listas de referencia de todas las ecuaciones, errores y mensajes de estado, unidades, etc... Obviamente tiene un índice muy extenso en la parte posterior del libro.

Capitulo 1: Programming

Contiene: Understanding Programming, Entering and Executing Programs, Viewing and Editing Programs, Creating Programs on a Computer, Using Local Variables, Using Tests and Conditional Structures, Using Loop Structures, Using Flags, Using Subroutines, Single-Stepping through a Program, Trapping Errors, Input, Stopping a Program for Keystroke Input, Output, Using Menus with Programs, Turning Off the HP48 from a Program.

Capitulo 2: Programming Examples

Contiene: Fibonacci Numbers, Displaying a Binary Integer, Median of Statistics Data, Expanding and Collecting Completely, Minimum and Maximum Array Elements, Applying a Program to an Array, Converting Between Number Bases, Verifying Program Arguments, Converting Procedures from Algebraic to RPN, Bessel Functions, Animation of Successive Taylor's Polynomials, Programmatic Use of Statistics and Plotting, Trace Mode, Inverse-Function Solver, Animating a Graphical Image.

Capitulo 3: Command Reference

Este capitulo contiene una entrasa para cada comando (exepto para RULES) desde ABS hasta ZVOL y de + hasta ->. Cada entrada contiene:

  • Una descripcion de lo que hace el comando (con diagrama de pila).
  • Formas en la que lo puedes acceder desde el teclado (el submenu que necesitas, o si solo lo puedes teclear en el modo Alpha).
  • Que banderas afectan al comando.
  • Observaciones, y una lista de comando relacionados.
A menudo una comando tiene uno o mas programas de ejemplo tambien. Este capitulo es el grueso del libro, es de 424 paginas.

Capitulo 4: Equation Reference

Este capitulo contiene una entrada para cada sección en la Librería de Ecuaciones (ELIB). Cada entrada contiene: una tabla de las variables usadas y después una entrada para cada grupo de ecuaciones con alguna información adicional acerca del grupo de ecuaciones, el dibujo que la acompaña (si hay alguno), todas las ecuaciones y uno o mas grupos de números y soluciones de ejemplo. El final del capitulo tiene una lista de referencia de la cual todas las ecuaciones fueron sacadas.

Apéndice A: Error and Status Messages

Este capitulo contiene dos tablas con todos los mensajes posibles. La primera los tiene ordenados alfabéticamente y muestra el mensaje, el significado y el numero ERRN en formato hexadecimal. La segunda los tiene ordenados por los números ERRN (y por esto en categorías) y solo contiene el numero hexadecimal y el propio mensaje.

Apéndice B: Table of Units

Este capitulo contiene una tabla con todas las unidades que conoce la serie HP48 G. Contiene la unidad (el nombre que usas en la calculadora como el nombre completo) y el valor que representa en unidades SI.

Apéndice C: System Flags

Este capitulo contiene una tabla con todas las banderas de sistema de la serie HP48 G. La tabla contiene el numero seguido de una descripción de su uso y los resultados que obtendrás cuando la bandera esta arriba o abajo.

Apéndice D: Reserved Variables

Este capitulo contiene una tabla con todas las variables reservadas de la serie HP48 G (ALRMDAT, CST, "der"-nombres, EQ, EXPR, IOPAR, MHpar, Mpar, n1/n2/..., Nmines, PPAR, PRTPAR, s1/s2/..., VPAR, ZPAR, SigmaDAT y SigmaPAR) con información completa acerca de para que sirven y todos los posibles parámetros que pueden ser puestos en ellas.

Apéndice E: New Commands

Este capitulo enumera todos los comandos que son nuevos en la serie HP48 G, con una corta descripción de lo que hacen los comandos. Una lista como esta puede ser encontrada también en alguna parte de las FAQ de la HP48.

Apéndice F: Technical Reference

Contiene: Tamaño de los objetos, reglas de simplificación matemática usadas en la HP48, patrón usado por la HP48 para la diferenciación simbólica, reglas de expansión del EquationWriter, referencias usadas como fuente de las constantes y ecuaciones en la HP48 (las que no están en la Equation Library).

Apéndice G: Parallel Processing with Lists

Este capitulo contiene información de procesamiento paralelo que hace ver a UserRPL aun mas parecido a un lenguaje de programación funcional permitiendo (casi siempre) que todos los comandos funcionen en listas de parámetros también (i.e. agregando capacidades de mapeo a todos los comandos internos).

Necesito el AUR?

Si, lo necesitas. Según mi humilde opinión el AUR es solo "El Manual, Parte II" y cada dueño de una HP48 G o HP48 GX debería tenerlo, especialmente si tu estas o vas a programar en UserRPL por alguna razón. Un montón de preguntas frecuentes que aparecen en comp.sys.hp48 son preguntas que están hechas para que el AUR las conteste.

Porque HP no suministro el AUR con cada HP48?

Ya que estas leyendo este FAQ, probablemente tienes algún don: tu no eres un usuario de HP48 promedio. El grupo de "usuarios promedio" probablemente consista enteramente de personas que nunca van a programar su HP48 en ninguna forma ("Impresionante, también puede hacer eso!"). En ese caso, ellos no le darán ni un vistazo al AUR, y ya que es un libro bien grueso, seria perdida de dinero, arboles, al medio ambiente, costos de transporte, etc... para suministrar el AUR en cada caja. Probablemente esta es la razón de porque HP lo hizo un accesorio extra para esas personas que "de verdad lo necesitan". Esa es mi opinión...

Donde puedo encontrar el AUR?

Debería ser posible comprarlo (o encargarlo) en el mismo local donde compraste tu calculadora. El numero de inventario HP es 00048-90136. El libro parece que no tiene un ISBN; es un periférico HP, no un libro.

Contiene el AUR algún SYSEVAL o LIBEVAL?

Si, exactamente uno. El ejemplo del comando SYSEVAL te dice que #30794h SYSEVAL te da la versión de tu HP48. Mi HP48 GX rev. P da "HPHP48-P".

Dice algo el AUR sobre SysRPL o ML?

No, No dice nada.

7.20 Cual es la sintaxis para INFORM, CHOOSE, y MSGBOX? (GX)

Basado en una publicación en HPCVBBS de Cary McCallister. Revisado por Joe Horn. Re-formateado por Andre Schoorl.

INFORM - Crea un Input Form a medida (forma de entrada)

ENTRADA:


5: "titulo"

4: { campos }

3: <formato>

2: { valores_reinicio }

1: { valores_iniciales }

  

SALIDA:


Bien:   2: { nuevos_valores }

        1: 1



o :     1: 0

  

PROPÓSITO:

INFORM crea input forms a medida de pantalla completa, similares a las de las aplicaciones incorporadas.

ARGUMENTOS:

titulo

Es mostrado en tipo de letra 1 (pequeña) en el borde superior de la pantalla, centrado. Pude contener cualquier numero de caracteres, incluyendo 0, pero, a lo mas 31 caracteres serán mostrados. Strings mas largos que 31 caracteres serán truncados a 31 caracteres y mostrados con un elipsis arrastrado. Caracteres de línea nueva serán mostrados como rectángulos.

{ campos }

Es una lista de la forma { campo1 campo2 ... campon } donde cada campo es de una de estas formas:


1.    "etiqueta"

2.    { "etiqueta" "ayuda" }

3.    { "etiqueta" "ayuda" tipo1 tipo2 ... tipon }

4.    { }
La "etiqueta" es un string con texto arbitrario de 0 a 26 caracteres de largo (string mas largos serán truncados a 25 caracteres con un elipsis arrastrado). La "ayuda" es mostrada inmediatamente arriba del área de menú como una sugerencia útil para el usuario. La especificación de tipo de objeto describe los tipos permitidos en el campo (uno o mas), en la forma que el comando TYPE las devuelve. Si no es especificado, el texto de ayuda por defecto es en blanco y el campo aceptara todos los tipos de objeto. Si la especificación de campo es una lista vacía, ningún campo es producido; en vez de eso, el campo inmediatamente a la izquierda (si hay alguno) es expandido para rellenar el espacio de campo omitido. Esto permite personalizar aun mas la forma de esquema; por ejemplo, tener dos campos en una fila y tres campos en la siguiente.

<formato>

Tal vez alguno de los siguientes objetos:


1.    { }

2.    columnas

3.    { columnas }

4.    { columnas anchos }
Donde <columnas> es el numero de columnas en las que la pantalla estará dividida, si <columnas> es 2 y hay dos campos, ellos serán mostrados lado a lado en vez de uno encima del otro. <anchos> es el espacio entre la esquina izquierda de cada titulo y su campo; esto hace posible el alineamiento vertical de los campos. Títulos mas largos que ese espacio harán que el espacio se repita automáticamente. Si no es especificado, el numero de columnas por defecto es uno y el espacio entre titulo y campo por defecto es tres.

{ valores_reinicio }

Una lista de valores uno por campo de entrada que reemplazaran los valores de todos los campos cuando la tecla {RESET} sea presionada y "Reset all" (reinicie todo) sea elegido. Esta lista debe estar vacía o tener exactamente un item por campo correspondiendo a la lista { campos } de mas arriba. Si esta vacía entonces todos los campos son estimados inespecificados (i.e., en blanco). Cada valor de reinicio debe cuadrar con el tipo requerido por la forma de campo. Los campos pueden ser marcados como no especificados usando NOVAL como el valor de reinicio.

{ valores iniciales }

es una lista de valores, uno por campo de entrada, que especifican los valores de partida de todos los campos cuando el comando INFORM es invocado. Esta lista de be estar vacía o tener exactamente un item por campo correspondiendo a la lista { campos } de mas arriba. Si esta vacía, entonces todos los campos son estimados como no especificados (i.e., en blanco). Cada valor inicial debe cuadrar con el tipo requerido en la forma de campo. Los campos elegidos pueden ser marcados como no especificados usando NOVAL como el valor inicial.

RESULTADOS:

INFORM devuelve los nuevos valores de campo { valores_nuevos} como una lista en el nivel 2 y un nuevo real 1 en el nivel 2 si el usuario completo la input form presionando {OK} o ENTER. La lista contendrá un item por campo. Cada item deberá ser el ultimo valor de entrada para el campo correspondiente, o NOVAL si el campo fue inespecificado.

INFORM devuelve el numero real 1 si el usuario termina el input form presionando {CANCL} o CANCEL.

OBSERVACIONES:

NOVAL es básicamente un comando (un nombre XLIB) que no hace nada cuando es evaluado. Puede, sin embargo, ser comparado vía ==, SAME y POS.

CHOOSE - Crear una Choose-Box (ventana de selección) definida por el usuario

ENTRADA:


3: "titulo"

2: { itemes }

1: <numero_item_inicial>

  

SALIDA:


Bien:   2: { item_elegido }

        1: 1



o:     1: 0

  

PROPÓSITO:

CHOOSE crea una "choose-box" definida por el usuario: un rectángulo que contiene itemes, de los cuales el usuario puede elegir uno.

CHOOSE muestra un choose box estándar (normal, no maximizado; elección única, no elección múltiple) con una línea de titulo opcional.

ARGUMENTOS:

titulo

Si hay alguno, es mostrado en tipo de letra pequeña en el borde superior del rectángulo, centrado. Puede contener cualquier numero de caracteres, incluyendo 0, pero a lo mas, 22 caracteres serán mostrados. Strings mas largos que 22 caracteres serán truncados a 21 caracteres y mostrados con un elipsis arrastrado. Los caracteres de nueva línea serán mostrados como rectángulos. Si hay mas de 4 itemes, haciendo que las flechas de desplazamiento sean mostradas, el máximo de caracteres del titulo será reducido a 21. El texto del titulo es mostrado en el área de titulo en tipo de letra 1 (el tipo de letra del menú). Si el string del titulo es vacío, no se creara área de titulo en el choose box, y todo el rectángulo será dispuesto para los itemes.

{ itemes }

Una lista de objetos arbitrarios. Cada item ocupa una línea del choose box y es mostrado en la misma forma de la línea de comando. Solo los primeros 14 caracteres del objeto a mostrar serán exhibidas (13 si las flechas de desplazamiento están presentes). Si un item contiene mas de 14 (13) caracteres, será truncado a 13 (12) y el carácter final será reemplazado por un elipsis. Si cada item es una lista de exactamente dos objetos, el primer objeto será mostrado y el segundo devuelto si el item es elegido. Si el numero de itemes excede loa 4 con titulo y 5 sin, las flechas de desplazamiento serán mostradas, y si al mover el selecionador destacado pasa el borde superior o inferior del choose box, este se desplazara por los itemes no exhibidos.

<numero_item_inicial>

Especifica el campo que inicialmente estará destacado cuando recién se inicie el choose box (casi siempre 1). Un valor de 0 indica que ningún campo estará destacado y que la tecla {CANCL} será omitida del menú, haciendo que el choose box actúe como una imagen informativa sin selección del usuario..

RESULTADOS:

CHOOSE devuelve el item elegido (o el segundo objeto en una lista de itemes de dos objetos) y el numero real 1 si el usuario termina el choose box presionando {OK} o CANCEL. CHOOSE devuelve el número real 0 si el usuario termina el choose box presionando {CANCL} o CANCEL.

MSGBOX - Crear un simple Message Box (ventana de mensajes)

ENTRADA:


1: "string_de_mensaje"

  

SALIDA:


Ninguna

  

PROPÓSITO:

MSGBOX crea una simple ventana de mensaje sobre la pantalla actual, con sombra en 3D para reconocerla fácilmente, y que contiene cualquier texto arbitrario.

ARGUMENTOS:

string_de_mensaje

Es un string de caracteres. El texto es mostrado en tipo de letra 2 (tamaño mediano), encuadrado en la izquierda, con un largo de línea máximo de 15 caracteres. Líneas mas largas se rompen en líneas múltiples automáticamente, entre palabras si es posible, con un máximo de 5 líneas. Los caracteres de línea nueva pueden ser incluidos para forzar el quiebre de línea. El numero mínimo de líneas es 2, por eso los mensajes de una sola línea tendrán una línea en blanco en el borde inferior de la ventana.

RESULTADOS:

Ninguno. Se sale de MSGBOX presionando CANCEL, ENTER o {OK}, pero nodo es devuelto a la pila.

Para ejemplos de INFORM, CHOOSEy MSGBOOX ve el Apéndice B-2.

7.21 Como pongo campos de selección en mis menús INFORM?

Texto original de Matt Willis

No puedes hacer eso directamente en UserRPL. Si lo puedes hacer en System RPL (ve el libro de Jim Donnelly para mas detalles), o puedes usar la librería que esta en ftp://ftp.cis.com/pub/hp48g/uploads/infm2v1.zip

Me he dado cuenta que la versión System RPL de DoInputForm era lo suficiente no amigable como para usarla casualmente, por eso escribí una librería simple que te permite usar check boxes y choose list en User RPL.

Todo lo que hace es detener la ejecución de INFORM justo antes de DoInputForm, después busca en la pila y cambia los tipos de objetos a objetos check y choose. Entonces reinicia el comando INFORM. Al final, ordena los TRUE/FALSE a 1/0 etc...

Ejemplo de sintaxis:


"Test" {

"A" "B" "C" } 1 {} { :CHECK: 1  :CHOOSE: { 1 2 3 }  NOVAL }

IF INFORM2 THEN

   ...inserta código aquí...

END

7.22 Cual es la sintaxis para el comando INPUT?

Texto original de John Meyers

INPUT te permite mostrar un mensaje y después editar un string usando el editor de la línea de comando; el string editado es el resultado.

Argumentos:

Nivel 2:

"mensaje"

El mensaje es mostrado en "letra mediana" en la parte superior del "área de visualización de la pila" (la pila no es visible durante el comando INPUT). El mensaje puede ser un string vacío, o puede contener caracteres de línea nueva, para un mensaje de líneas múltiples.

Nivel 1:

El formato mas general es una lista no vacía que contiene hasta tres especificaciones opcionales, que pueden aparecer en cualquier orden:

{ "string" { fila columna } modo(s) }

"String" es el texto inicial que aparecerá en al línea de comando; puede ser un string vacío, o puede contener caracteres de línea nueva para texto de varias líneas. Si no especificas ninguno de los argumentos opcionales, puedes omitir la lista en si y suministrar solo el string en el nivel 1. Si el string es omitido de la lista de argumento, por defecto es un string vacío.

Modo(s) son cero o mas de los siguientes nombres reservados:

Si el usuario presiona CANCEL durante INPUT cuando hay algún texto en la línea de comando, todo el texto será borrado sin cancelar INPUT; si CANCEL es presionado nuevamente (o sin texto), entonces INPUT es cancelado.

Ejemplos del uso en un programa:


"Enter A, B, C" {

":A:

:B:

:C:" { 1 0 } V } INPUT

Nota: Pon caracteres de línea nueva entre las tres líneas del string inicial.

Cuando es ejecutado, la pantalla muestra:


Enter A, B, C

:A:(cursor appears here)

:B:

:C:

Si presionas ahora 1 FlechaAbajo 2 FlechaAbajo 3 ENTER, el string devuelto a la pila es:


":A:1

:B:2

:C:3"

Si después aplicas OBJ-> en este string, tu obtienes (en niveles separados de la pila):


:A: 1

:B: 2

:C: 3

Las "etiquetas" opcionales no interfieren con el uso de valores numéricos en funciones, o al guardarlos (la etiquetas son sacadas automáticamente en cada caso).

Otro ejemplo:


"Type a new notecard" { Alpha-symbol } INPUT

Este permite al usuario tipear cualquier texto de forma libre, el cual es devuelto como string después de presionar ENTER.

El ejemplo mas simple:


"" "" INPUT  (no message, empty initial command line)

Problemas potenciales con INPUT (si OBJ-> va a ser usado posteriormente para obtener los valores ingresados):

Para aplicaciones que esperan el ingreso de valores (no texto), El comando INFORM de la HP48G/GX es mas inmune a estos problemas y realiza un control mas profundo sobre lo que es ingresado, además de proveer una forma de visualización mas bonita, un casillero para cada campo de ingreso, etc. La sintaxis de INFORM es detallado en algún otro lugar de este FAQ.


Anterior Siguiente Indice