Dudas
Diferencias entre los distintos lenguajes de programación de la HP

Mario de Lama   malar@arrakis.es
http://www.arrakis.es/~malar

>Hola.
>Vi en tu pagina el curso de USER-RPL y observe que todos los
>comandos eran propios de la HP48 ¿Es que programar en USER es hacer los
>programas con los comandos que se encuentran en la calculadora?.

Eso es lo que se hace con cualquier lenguaje de programación en el PC o en la HP: Hacemos los programas con palabras que nos provee el compilador. Cada palabra representa un programa que dicho compilador se encarga de sustituir cuando compila. Algunos de esos comandos son funciones como SIN, COS, etc. y otros nos sirven para poner condiciones, controlar el flujo del programa, ... Como las construcciones IF THEN ELSE END, START NEXT, ...

En realidad los comandos de la calculadora son programas, mejor dicho punteros a una dirección de memoria donde se encuentra el programa. Aparte de los comandos que vienen listados en los manuales hay otros muchos que juntamente con ellos forman la ROM de la hp (creo que en total más de 5000). Todos están guardados en una lista. El compilador de la calculadora lo único que hace es convertir la "etiqueta" o nombre de los comandos User por la dirección de memoria a la que apuntan, para eso va a la lista y reemplaza cada palabra del listado del programa por la dirección que en ella pone (dicho así parece fácil :-). Cuando ejecutamos un programa el sistema operativo de la máquina sólo tiene que ir llamando a las direcciones de memoria marcadas en el listado del programa ¿Qué ocurre con los otros comandos que hay en la lista y que no vienen en los manuales? estos comandos no tienen etiqueta y para poder utilizarlos debes conocer su dirección y ejecutarla con el comando SYSEVAL. Por ejemplo #3188h SYSEVAL llama al programa de la dirección 3188 (normalmente las direcciones de memoria se expresan en hexadecimal) ¿Qué hace? Duplica el contenido del nivel 1 de la pila (NO LO EJECUTES SI NO HAY NADA EN LA PILA, te borraría la memoria). Pero no lo confundas con el DUP de User. Si pudieras descompilar el DUP de User tendrías un programa System RPL que sería ":: CK1 DUP ;" CK1 chequea si hay un argumento en la pila, en caso afirmativo ejecuta el DUP de System (la dirección 3188), en caso negativo da un error. Para hacer un DUP en System escribiríamos ":: DUP ;" y una vez compilado (en el PC o con los compiladores para la HP) aparecería en la pila de la calculadora como External. Por tanto todos los programas User están formados por objetos que a su vez son objetos Sytem (o ML= Machine Language) a los que antecede una comprobación, en realidad el lenguaje User RPL es un subconjunto del System.

¿Porqué son más lentos los programas User que los System? Porque a la hora de ejecutar un programa User cada comando lleva en sí una o más comprobaciones previas. Por ello un programa en User es también mucho más seguro. Programando en System eliminamos estas comprobaciones por lo que el código se acelera más pero a nada que nos equivoquemos borramos la memoria de la calculadora.

Si descompilas el DUP de System te aparece otro listado que está en ML, por lo que a su vez este DUP de Sytem es una etiqueta que representa un programa en ML y el compilador de System se encarga de reemplazar la etiqueta por la dirección de memoria 3188. A su vez puedes descompilar este programa de ML y obtienes para cada una de sus etiquetas una serie de 0 y 1 que es el lenguaje binario que entiende la máquina y que ejecuta el procesador.

>Otra pregunta es : en donde puedo conseguir el SYS-RPL para PC para la
>HP48 y su respectivo manual, porque no se nada de ese lenguaje y quisiera
>aprender ya que corre los programas con mas rapidez.

Yo te recomiendo que primero aprendas a usar el User, si no sabes programar en User no puedes programar en System. Es un lenguaje que no te puede borrar nunca la memoria y con él aprendes a controlar la hp. Aparte de eso, desarrollar un programa en System puede llevarte mucho tiempo y no sacar un incremento de velocidad tal que justifique los días de más que te has pasado haciéndolo.

El manual está en perfecto inglés (lo de perfecto es mío :-), no existe en castellano. Lo tienes en el GD4 (RPLMAN.DOC) y el compilador para el PC en ese mismo Goodie Disk (son de HP), la web del recopilador de esos discos es: http://www.liberty.com/home/joehorn/HP48.htm El mejor compilador para la calculadora es JAZZ, de Mika Heiskanen, puedes encontrarlo en: http://www.hut.fi/~mheiskan/ Ocupa mucha memoria pero hay una versión light. Con él puedes compilar y descompilar programas tanto en Sytem como en ML (que son los que en la pila aparecen como Code en vez de External). Este último tiene la gran ventaja de ser mucho más sencillo (hacerlo en el PC es un coñazo), aparte de que nada más compilar puedes ejecutar el programa y luego descompilarlo para corregir errores (además tiene un debugger bastante majo). En el PC no se puede descompilar, tienes que corregir el código fuente que tienes guardado y volver a compilarlo, por lo que no puedes ver aquellos programas de los que no tengas el fuente y tampoco puedes aprender de ellos.


Regresar