Mario de Lama
malar@arrakis.es
http://www.arrakis.es/~malar
>No encuentro información sobre las nuevas rutinas en SYS RPL, me explico,
> la HP48 G tiene unos cuantos comandos nuevos, entre ellos unos que operan
> con matrices (como ROW->, ->COL, RCIJ, etc) que usando JAZZ veo que
> referencian a comandos de SYS RPL o ROM PTR, ¿Alguien sabe dónde
> conseguir la información para hacer estas rutinas más rápidas?
Estas rutinas son comandos de nuevas librerías, por ejemplo el comando ->COL es el objeto 67 de la librería 171 o XLIB 171 67 que si la descompilas con JAZZ (más información de esta librería en el documento system2.htm de mi web) obtienes ROMPTR AB 43 (en hexadecimales: 171 67). Como no deja de ser una librería puedes descompilarla también con el comando L->DIR de la librería <-LIB-> v2.3 (18k) de Detlef Müller. Para ello ponla en la pila en una lista { ->COL } y ejecuta OBJ-> (o el comando OB-> de esa misma librerñia) DROP L->DIR. Obtendrás:
Que descompilado nos da: ":: CK1&Dispatch FOUR ROMPTR C3 14 ;"
Aquí te puedes ahorrar ya el tiempo del chequeo de datos. Puedes llamar a la XLIB 195 20 con una matriz en el nivel 1 y te hará lo mismo, pero ¡OJO! ¡¡¡ CON LA MATRIZ EN 1: !!! si no te puedes cargar la memoria.
Seguimos descompilando: Si ejecutas OB-> (de la misma librería <-LIB->) sobre External <4d> XLIB 195 20 obtienes el metaobjeto:
4: External
3: <4d>
2: XLIB 195 20
1: 3
Borra los niveles 4:, 3: y 1: y vuelve a ejecutar L->DIR con XLIB 195 20, ahora obtienes (descompilando el programa system que deja L->DIR):
" :: DUP MDIMS NOTcase ROMPTR C3 13 (XLIB 195 19) 2DROP CKREF PTR 38179 ROMPTR C3 12 (XLIB 195 18) ; "
Para seguir viendo lo que hace esta XLIB 195 20 pon una matriz en la pila en 2: y la XLIB en 1: y ejecuta el debugger de JAZZ (comando SDB).Si presionas SNXT (en el menú) verás que te aparece el siguiente comando a ejecutarse, si presionas ->SST se ejecuta y ves que (si la matriz es un vector) el código: MDIMS NOTcase XLIB 195 19 es el encargado de efectuar el trabajo. En caso contrario el trabajo lo realiza el código: CKREF PTR 38179 ROMPTR C3 12.
Por de pronto ya puedes aligerar tu programa poniendo uno de estos dos códigos según quieras deshacer un vector o una matriz. Si sigues descompilando las XLIB y los PTR, o mejor evaluándolos paso a paso con los comandos del debugger (->IN, etc.) seguro que ves cómo reducir el tiempo de ejecución del comando que deseas eliminando todas las comprobaciones y demás que te sobren.
Esta es la única manera de hacer los programas más rápidos. Como puedes ver es un trabajo tedioso y a la gente no le da luego por comentar lo que ha aprendido a base de descompilar comandos de la calculadora. De esta forma siempre estamos igual, cada uno tiene que empezar todo el trabajo desde cero. Otra opción sería que según como vayamos descompilando código y llegando al más rápido para cada objeto lo pusiéramos en esta lista de correo o en el grupo de news es.comp.sistemas.hp48. Así el trabajo sería menor y todo más fácil.
Estoy empezando a exponer un curso de programación System (además de seguir con el actual de User) en mi página, espero que esto sirva para algo y así se anime alguien más a compartir sus conocimientos. Si no tenéis web y deseáis colaborar, en este o cualquier otro tema, estoy abierto a cualquier sugerencia. Cualquier tipo de documento o programa es bienvenido.