Texto original de Joe Horn
Casi todos los comandos que no aceptaban lista(s) como argumento, ahora lo hacen. Aquí hay unos cuantos ejemplos:
{ 1 2 3 } SF pone banderas 1, 2, y 3
{ 1 2 3 } SQ --> { 1 4 9 }
{ 2 4 } 10 / --> { .2 .4 }
10 { 2 4 } / --> { 5 2.5 }
{ 10 12 } { 2 4 } / --> { 5 3 }
{ .1 .2 .5 } ->Q --> { '1/10' '1/5' '1/2' }
{ freq freq ...} { dur dur ... } BEEP puede tocar una canción sin interrupciones audibles entre tonos.
Ya que + siempre ha sido usado para unir listas, la nueva función ADD fue creada para sumar los elementos de dos listas, como sigue:
{ 1 2 3 } { 4 5 6 } ADD devuelve { 5 7 9 }, así como
{ 1 2 3 } { 4 5 6 } + devuelve { 1 2 3 4 5 6 } como lo hacia antes.
Los únicos comandos que no tienen procesamiento automático de listas son:
Algunas veces los resultados no son obvios, por ejemplo:
5 { A B C } STO --> A=5, B=5, C=5
{ 5 6 7 } 'A' STO --> A={ 5 6 7 } (igual que en la SX)
{ 5 6 7 } { A B C } STO --> A=5, B=6, C=7
El procesamiento de listas solo es recursivo con ->Q y ->Qpi.
La HP48 G, como la 48 S, solo tienen 32Kb de RAM. La GX, al contrario de la SX, tiene 128 Kb de RAM incorporados. La ranura de inserción 1 puede contener otros 128 Kb (máximo), pero la ranura de inserción 2 puede contener hasta 4 megabytes de RAM.
Solo la puerta 1 puede ser fusionada con la RAM de la GX. La ranura de inserción 2 que fue ideada para tarjetas RAM de gran-capacidad, esta permanentemente "liberada", y es dividida automáticamente en "puertos" de 128Kb, convirtiéndose cada una en Puerto 2, Puerto 3, Puerto 4, etc. Hasta 4 Megabytes pueden ser insertados en la ranura 2, que se convertirían en el Puerto 2 hasta el Puerto 33. (Aunque los comandos FREE y MERGE han sido mantenidos por compatibilidad con la HP48 SX, los usuarios de la GX preferirán los nuevos comandos FREE1 y MERGE1). Por eso la cantidad máxima de memoria principal fusionada es 256 Kb (al contrario de la SX que permitía hasta 288Kb) después de MERGE1; La cantidad máxima de memoria independiente libre es 4224Kb después de FREE1.
Los nombres de variables con un <- antepuesto (carácter de flecha izquierda) son compilados como nombres de variables locales (temporales), aun si no están implícitamente después de FOR o ->. Esto permite a los programas compartir valores a través de variables locales, que es mas rápido que compartir valores a través de variables globales, y son borradas automáticamente.
La velocidad del reloj del CPU es dos veces la de la S/SX, pero el aumento del rendimiento es estimado en solo un 40%, principalmente por el hecho de que toda la RAM y ROM ahora es accesada por switcheo de bancos (en la S/SX solo una porción de 32 Kb de ROM requería switcheo de bancos), y todavía tiene el mismo cuello de botella, un bus de 4-bit.
Nota: La Tabla Periódica y el Juego Tetris no están incluidos en la HP48 G/GX, pero la tarjeta EQ puede ser usada si esas aplicaciones son requeridas. Tetris no fue incluido, porque no se llego a un acuerdo acerca de los derechos. La Tabla Periódica esta disponible separadamente como freeware (sin costo) en HPCVBBS.
2: "Versión HP48-R" <-- significa versión "R"
1: "Copyright HP 1993"
Muchos números de menú han cambiado, por eso el software que usan # MENÚ o # TMENU no funcionaran como en la HP48 S/SX. (Específicamente, solo los números de menú 0-3, 28, 30, y 42-59 son los mismos). Asimismo, casi todos los códigos de teclas con shift corresponden a nuevos comandos y menús, lo cual los programadores deben tener en cuenta; por ejemplo, la tecla "RAD" en la S/SX tiene el código de tecla 82.2, pero ahora es la 21.2 en la G/GX. La tecla shift-izquierda, que era naranja en la S/SX, ahora es púrpura, y la tecla shift-derecha que era azul en la S/SX ahora es verde en la G/GX. Además los menús de teclas pueden ser activados por ambas teclas shift; shift-izquierdo da los softkey menús como en la S/SX, pero shift-derecho da los nuevos menús amigables al usuario a pantalla completa. Las teclas sin shift quedan igual que en la S/SX, exeptuando un cambio cosmético de colores para hacerle contraste al verde obscuro de la caja de la calculadora.
La G/GX viene con dos manuales, una "Guía de Iniciación Rápida" para principiantes, y un manual del usuario mas delgado y barato llamado "Guía del Usuario" que tiene solo 21 paginas sobre programación, desde que HP supuso que la inmensa mayoría de los poseedores de 48s nunca la programan. Los usuarios avanzados pueden comprar opcionalmente el "Advanced Users Reference Manual" (similar al "Programmer's Reference Manual" de la S/SX) que cubre programación y los comandos que no son mencionados en la Guía del Usuario. No hay un "Quick Reference Guide" como la que venia con la S/SX, aunque la funda aun tiene un bolsillo para una.
Jim Donnelly ha lanzado una bonita guía de bolsillo, pero es muy ancha para caber en el bolsillo de la calculadora. La Guía del Usuario no tiene lomo espiral, pero esta hecha para abrirla completamente y que dure mucho tiempo, ya que no solo esta pegado sino también esta cosido como libros de verdad, y esta impreso en papel de calidad.
Otra posibilidad es la "The HP 48G/GX Pocket Guide" por Chris Coffin y Thomas Dick (Publicaciones Grapevine) en EduCALC. Tiene 80 paginas y contiene una referencia completa de los comandos (con diagrama de entrada/salida de pila), descripción del teclado alfa, descripción de banderas, así como ejemplos de como usar varias características de la calculadora. Esta guía esta diseñada para caber cómodamente en la funda de la HP.
Algunas banderas previamente "no usadas" ahora se usan. Ellas son:
-14 Arriba = modo de pago en final-de-periodo (para cálculos TVM)
Abajo = modo de pago en inicio-de-periodo
-27 Abajo = visualiza números complejos simbólicos en forma de coordenadas
e.g. '(X,Y)'
Arriba = visualiza números complejos simbólicos usando 'i'
e.g. 'X+Y*i'
-28 Abajo = plotea múltiples ecuaciones como la S/SX lo hace (serialmente)
Arriba = plotea múltiples ecuaciones simultáneamente
-29 Abajo = incluir ejes en el ploteo (como lo hace la S/SX)
Arriba = omite los ejes en los ploteos estadísticos y de 2D
-30 ya no es usada (nunca hizo algo útil de todas maneras)
-54 Abajo = elementos pequeños en matrices son redondeados a cero
Arriba = deja los elementos de las matrices tranquilos
Por defecto todas estas banderas están abajo (como en la S/SX).
El visualizador de banderas muestra el numero de bandera, si esta abajo o no, te deja cambiar su estado, y te muestra en ingles que significa el estado actual de cada bandera.
Mientras programas, si quieres tipear algún carácter, presiona CHARS y se muestra una pantalla de caracteres ASCII que puedes recorrer con las teclas de flechas, y no solo muestra el carácter, también el código ASCII (valor Numérico) y hasta la combinación de teclas (si hay alguna) de cada carácter. Si presionas ECHO, será "tipeado" en tu programa. Ya no hay necesidad de una tabla de teclado alfa.
Presiona shift-derecho para lanzar un visualizador de variables, que es un completo administrador de memoria. Puedes seleccionar múltiples objetos y copiarlos, moverlos o borrarlos, todo con un solo toque de tecla; incluso hay un Selecciona Todo y un Deselecciona todo, como un computador de verdad. Sin embargo es lento, y ha esta obsoleta gracias a la librería PCT, que es muy rápida.
La S/SX solo podía manejar poderes enteros correctamente, pero la G/GX puede usar cualquier numero real como unidad de poder.
La caja tiene un espacio rectangular en la parte posterior como la HP 95LX y 100LX, donde puedes pegar una placa metálica adhesiva (viene incluida) con tu nombre grabada en ella. ($5 si la ordenas con tu compra).
Todos los comandos nuevos en la GX son nombres XLIB, y por eso ocupan 5.5 bytes en los programas. Los comandos comunes en la SX y GX toman 2.5 bytes cada uno, como lo hacían en la SX.
Muchas operaciones tienen dos tipos de menú: el antiguo estilo de la SX, y un nuevo "menú desplegable" y "input forms" que se ven como ventanas de dialogo de los computadoras. Especialmente útil para principiantes de la HP48.
La precisión interna de algunas de las rutinas de matrices han sido mejoradas; INV da mejores respuestas en matrices cuadradas de las que daba la SX. HP no ha informado sobre que rutinas ha mejorado, como y cuanto.
La LCD introducida con la revisión M en la G/GX es mas fácil de leer ya que tiene mayor contraste entre los pixeles prendidos/apagados. Sin embargo tiene un tiempo de respuesta de ciclos mas lenta, haciéndola mas difícil de usar para juegos de video de movimiento rápido o cualquier otra animación rápida.
Texto original de Jarno Peschier
Algunos ejemplos de INFORM, CHOOSE y MSGBOX en la HP48 GX. Solo transfiere el directorio completo a tu calculadora y prueba los programas, cámbialos, modifícalos y hace todo lo que se te ocurra con ellos.
Este programa demostrara una simple pantalla de ingreso INFORM con 3 campos (uno sin restricción de tipo, uno para numeros reales o complejos y uno para strings) con algún esquema adicional. MSGBOX y CHOOSE (con el tercer parámetro igual a 0) son usados para mostrar que los resultados del comando INFORM. La lista que devuelve el comando INFORM es dejada en la pila para que veas como se ve.
Este programa demostrar el uso de CHOOSE. Te deja elegir entre los tres posibles ángulos (DEG, RAD, GRAD) y cuando eliges uno de ellos, el modo correspondiente es fijado evaluando un pequeño programa que ejecuta el comando adecuado.
Este programa demostrara el uso de INFORM en formas que son ocupadas por la misma calculadora. Es una interface muy simple que gira alrededor del comando ISOL (aislar una variable en un algebraico). Graba sus opciones en una variable llamada IPAR y la próxima vez que el programa es ejecutado estos serán los valores por defecto del comando INFROM, así que puedes aislar diferentes variables de la misma expresión algebraica que usaste anteriormente, sin volverla a tipear. MSGBOX es usado para mostrar los mensajes de error.
Este programa demostrara nuevamente es uso de CHOOSE. Extrae los nombres de todos los tipos internos de la HP48 GX del ROM y los muestra en una CHOOSE box (ordenadas alfabéticamente por nombre). Si eliges una de ellas, su numero de tipo (TYPE) es mostrado en un MSGBOX.
Este programa final demostrara el uso de INFORM con descripción de campo de variable y valores por defecto/reinicio. Te mostrara 8 campos que son simples preguntas matemáticas para que las resuelvas (suma y resta). Puedes ingresar todos los resultados y después ver si tus respuestas estaban correctas (en un MASGBOX). Debes llenar todos los campos. Pista: puedes hacer trampa reiniciando un campo (o todos los campos).
%%HP: T(3)A(D)F(.);
DIR
SIMPLE
\<<
IF
"AN EXAMPLE OF INFORM"
{ { } { } { } {
"OBJECT:"
"ALL OBJECTS ARE ALLOWED HERE"
} { } { "NUM:"
"ENTER A (COMPLEX) NUMBER"
0 1 } { "NAME:"
"ENTER YOUR FULL NAME"
2 } { } { } } { 3 1
} {
\<< 440 1
BEEP
\>> (0,1)
"JARNO PESCHIER" }
{ NOVAL 0 "N.N." }
INFORM
THEN DUP
"YOU ENTERED:" SWAP
0 CHOOSE DROP
"The list that INFORM produced is still on the stack."
ELSE
"You cancelled the INFORM."
END MSGBOX
\>>
ANGLE
\<<
IF
"ANGLE MEASURE" { {
"Degrees" DEG } {
"Radians" RAD } {
"Grads" GRAD } } 1
CHOOSE
THEN EVAL
END
\>>
ISOLATE
\<<
IF
"A VERY SIMPLE VARIABLE ISOLATOR"
{ { } { "EXPR:"
"ENTER THE EXPRESSION"
9 } { "VARIABLE:"
"ENTER VARIABLE TO ISOLATE"
6 } } { } { }
IF 'IPAR'
VTYPE 5 \=/
THEN { }
ELSE 'IPAR'
RCL
END INFORM
THEN DUP 'IPAR' STO
IF DUP
NOVAL POS
THEN DROP
"You must enter an expression and a variable!"
MSGBOX
ELSE OBJ\->
DROP
IFERR
ISOL
THEN
DROP2 "Error: "
ERRM + MSGBOX
END
END
END
\>>
TYPELIST
\<<
IF
"ALL HP48 TYPES (IN ROM)"
0 27
FOR msg
IFERR msg
263 + DOERR
THEN ERRM
END msg 2
\->LIST
NEXT 28
\->LIST SORT 1 CHOOSE
THEN
"That one has type number "
SWAP + "." + MSGBOX
END
\>>
MATHQUIZ
\<<
IF
"A SIMPLE MATH QUIZ"
1 8
FOR i "'"
RAND 100 * IP +
IF RAND
0.75 <
THEN "+"
ELSE "-"
END +
RAND 100 * IP + "'"
+ "ENTER RESULT #"
i + 0 3 \->LIST
NEXT 8
\->LIST DUP
\<< \-> X
\<< X HEAD
2 OVER SIZE 1 - SUB
"=" + X 1 ROT PUT
\>>
\>> DOLIST
SWAP
\<< \-> X
\<< X HEAD
OBJ\-> EVAL
\>>
\>> DOLIST 3
ROLLD { 2 5 } 4
PICK { } INFORM
THEN
IF DUP
NOVAL POS
THEN DROP2
"You didn't fill all the blanks."
ELSE
IF SAME
THEN
"All answers were correct!"
ELSE
"Not all answers were correct."
END
END MSGBOX
ELSE DROP
END
\>>
END
Texto original de Joe Horn
Nota importante: haz una copia de seguridad de tu memoria antes de usar lo próximo! LIBEVAL puede borrar la memoria si es usado incorrectamente. Advertencia a los despistados: LIBEVAL, NO SYSEVAL!!! Si no sabes lo que es un bint, no uses los que mencionan bints.
Ejemplo de uso: "OUT OF RANGE Try Again" #B0091h LIBEVAL. Pruébalo!
-----------------------------------------------------+----------
Función | LIBEVAL
-----------------------------------------------------+----------
Muestra message box con grob | #B1000h
CMD ventana de ultimo comando | #B2000h
Aplicación CHARS | #B2001h
Forma de entrada de aplicación MODES | #B41C1h
Visualizador de banderas | #B41CFh
(devuelve t/f a nivel 1, solo bótalo)
Aplicación MEMORY (aka visualizador de variables) | #B41D7h
Choose box de aplicación SOLVE | #B4000h
Forma de entrada solucionador de ecuaciones | #B4001h
Forma de entrada solucionador de ec dif | #B4017h
Forma de entrada solucionador de polinomios | #B402Ch
Forma de entrada solucionador sis ec lineales | #B4033h
Forma de entrada solucionador TVM | #B4038h
Forma de entrada de PLOT | #B4045h
Choose box de aplicación SYMBOLIC | #B4113h
Forma de entrada de integración | #B4114h
Forma de entrada diferenciación | #B4122h
Forma de entrada expansión polinomio de Taylor | #B412Bh
Forma de entrada aislamiento de una variable | #B412Dh
Forma de entrada solucionador cuadrático | #B4130h
Forma de entrada manipulación de expresiones | #B4131h
Choose box de aplicación TIME | #B4137h
Forma de entrada fijación de alarmas | #B4138h
Forma de entrada fijar hora y fecha | #B415Bh
Visualizador de alarmas (aka catalogo de alarmas) | #B416Eh
Choose box aplicación STAT | #B4175h
Forma de entrada estadística de una variable | #B4176h
Forma de entrada frecuencias | #B417Dh
Forma de entrada ajustar datos | #B417Fh
Forma de entrada sumario estadístico | #B418Fh
Choose box aplicación I/O | #B4192h
Forma de entrada mandar a HP48 | #B4193h
Forma de entrada imprimir | #B4197h
Forma de entrada transferencia | #B41A8h
Traer desde HP48 (inmediatamente) | #B50FFh
llama el contenido de la variable reservada Mpar | #E4012h
-----------------------------------------------------+----------
LIBEVAL : diagrama de pila / que es lo que hace
------- -----------------------------------------------------------
#B0091h : $ --> hace un message box con un símbolo de alerta en el
#E0044h : $ --> muestra una línea de titulo, centro de borde superior
(seguido de 1 FREEZE si quieres que se quede ahí después
del termino del programa)
#B2000h : ejecuta el choose-box del ultimo comando
#B2001h : ejecuta la aplicación CHARS; devuelve nada si el usuario
no presiona ECHO
#B2002h : ejecuta la aplicación CHARS; devuelve "" si el usuario no
presiona ECHO
#B41CFh : ejecuta el visualizador de banderas; deja True o False en la pila
así que pon des pues de este LIBEVAL un DROP.
#B50A3h : --> tiempo actual como hora, min, sec separadamente, además de un XLIB
que representa AM/PM/24-hr (solo bórralo)
#B50A4h : hh.mmss --> hh mm ss xlib (el xlib representa modo AM,PM, o
24-hr; solo bórralo)
#B50A6h : --> fecha actual como mes, día, año (siempre en esa orden,
y año de dos dígitos)
#B50A7h : mm.ddyyyy (o dd.mmyyyy) --> mes, día, año
#B50A9h : #mes #año --> #dias_en_ese_mes (entrada y salida son bints;
el año tiene dos dígitos, interpretados entre solo 1991 y 2090)
#B50AAh : #año --> %0.00año (entrada es un bint de dos dígitos interpretado entre
1991 y 2090; salida es un numero real)
#B50ABh : #mes #dia #año --> #dia_de_la_semana (entrada y salida son bints;
el año tiene dos dígitos interpretados ente 1991 y 2090;
Domingo es #7; si estas en modo DMY, entonces el orden de ingreso
es #dia #mes #año)
#B50B2h : --> { 1 2 3 ... 59 } (no muy rápido)
#B50B3h : --> { 1 2 3 ... 10 } (muy rápido)
#B50B4h : --> { 0 1 2 ... 23 } (muy rápido)
#B50B9h : --> { " 1 January" " 2 February" ... "12 December" }
#B50D5h : --> numero de alarmas actualmente fijadas (como bint)
#E3063h : hxs --> grob (este es un descompresor RLL de grob empaquetadas,
usado por EQ LIB y MINEHUNT; por ejemplo, prueba esto:
#E202Bh LIBEVAL 3 GET #E3063h LIBEVAL PICT STO PICTURE)
#E202Bh : el primero de los grob empaquetados de EQ LIB (ve arriba)
#E2069h : el último de los grob empaquetados de EQ LIB (ve arriba)
#E7039h : grob empaquetado de MINEHUNT (borde izquierdo de la pantalla)
#E703Ah : grob empaquetado de MINEHUNT (borde derecho de la pantalla)
#E801Eh : obj --> obj T/F (prueba si un objeto esta en la memoria temporal
o no; devuelve True o False de System-RPL)