A389 following way, apparently some unwanted ID's appeared in the code. I'm still wondering why did that happened (I'm still a newbie). The checksum was different than yours, although it compiled correctly and it was working like the EVAL command. %%HP: T(3)F(.); !RPL !NO CODE :: CK0NOLASTWD ' ID cmds NOTcase :: No saved commands FlashWarning ; INNERCOMP DUP#0=case :: DROP No saved commands FlashWarning ; FALSE { } BIND NULL$ BINT0 ' :: BINT5 FALSE ' :: NoExitAction { { EVAL :: TakeOver TRUE' STO FPTR 2 76 ; } NullMenuKey NullMenuKey NullMenuKey { CANCL FPTR 2 77 } { OK FPTR 2 76 } } ; TRUE ; FPTR 2 72 NOT?SEMI ABND case ID GaENTER InitEdLine EditString CODE 00015 8FB97608F558628DC7530 STO_CURS_POS2 ; @ I guess (haven't tried it) that the unescaped quotes () are to blame. Maybe you can escape them () or use C$ $ in front instead of the surrounding . I'm glad to hear the program's useful for you =) I'll try that in the future. It is strange though, it worked fine for the GaEnter program. One more thing, I noticed that the program does not keep the history events for things entered through the EQW and MTRW unlike the normal CMD history, not even when you DUPlicate or PICK and EVAL on the stack. I wonder why is that. : Only the top-level system outer loop is calling AlphaENTER; it's also not called from EDIT[B], by the way. IIRC the 48G does store new matrix elements, however, which shows that it's calling AlphaENTER from there also, apparently. fine does and Because GaENTER gets only called if you exit the command line with ENTER, not if you exit an application (like the editor, EQW and MTRW) which pushes something onto the stack. To force the object on stack level 1 into the history, use a program like :: EDITDECOMP$ ID GaENTER ; If you find an hyperterminal which can use the usb port you may be able to send file with xmodem protocol. Well, some old programs (that still use the same tokens) see to work when transferred BACK to the 48G in binary!!! No UserRPL programs whatsoever can be directly transferred in binary are at different ROM addresses, and so are most commands. no valid addresses at all when transferred back from 49G to 48G as a *binary* object -- that's why FIXOB etc. are dangerous! What *is* binary compatible, IIRC: Maybe some SysRPL programs, containing a very limited set of entry points, some objects (Grobs, Numeric Matrices, Complex#s, strings, most but *not*all* real values, user binary integers, and lists of same). But always first test on an inconspicuous area (e.g. Emu48 :) I'm not sure of understand your problem, but when you were in an INFORM screen, pressing the button CALC (press NXT before), you'll be in the stack. Do your calculations, and press OK. That was exactly what I was looking for. Again, Stat48Pro has been great, better than great, but backing though all the GUI windows was a pain. Currently I.82m using this for PORT 2 and use the checksum, but it is way to slow! Well, if it is fast that would do it. All changes of PORT 2 would be monitored, if only the stack is used (storing/purging via the stack, if the object already exists, the calc complains so it has to be purged before it can be stored under the same name again). I could check the filer, which can replace objects in a port directly, seperatly. Unfortunatly I do not have enough knowledge to do it myself in ML. I probably forgot to mention that I use local named variables in my Begin/Until-Loop (also for exiting the loop) and that this might cause the calc crashing when used in the library config object. Do INV EVAL INV. you should first copy the rom to the directory where the convert program is, then you should go to MS-DOS prompt, go to that directory, hope this helps. I am a big fan of HP-Tools (only because I sit in front of a computer all day and the tools work well with EMU48) A couple of question, when you transfer the files, I am assuming that you are using the HP conectivity kit, ensure that you have binary mode set. Now, the likely cause, is the need for a header at the top of your source code to tell the calc. what version you are using, something like this: ASSEMBLE NIBASC HPHP49-C RPL :: A simple program may look like this ASSEMBLE NIBASC /HPHP49-C/ RPL :: ( defines the start of a source object ) CK2&Dispatch ( check if there are two real numbers on the stack ) 2REAL :: ( if so...) ; ; ( ends the main source object ) When I use nbumeric solver for this equation X^4-8X^3+8X^2+32X-44=0 I only get one answer. When I plot the graph I can see that it has 4 roots. How can I solve for all the solutions. use CAS. I want to see how it solves it. How do I do it? You can set flag -109 (for numeric solutions) and -103 (for complex mode). Then enter the polynimial, enter its variable and SOLVE. If with I want to see how it solves it you mean that you want to see the internal procedures, then I must disappoint you, because this can't be done in this case. (Or did somebody found a way?) This might not be one of the methods used by the solver, but one way is to find the eigenvalues of the companion matrix. As cybernesto found, this seems to work well on the TI-89/92+. It will work also on the HP49G, but very very slow. And as I never tried this method, I can't tell if step by step or verbose will show anything useful then. It won't. Yes, that'll work, but is a bit slow on the '49. One advantage in exchange for the usually massive computing effort needed, is that this method (eigenvalues) is one of the most robust finding close (and/or multiple) roots. I seem to recall how the '49 solves univariate (and to some extent also multivariate) polynomials; Roots of polynomials of order 1 and 2 are computed directly. If symbolic roots are wanted, the GCD and first derivative is computed, which in turn can yield the roots. If the polynomial has only rational coefficients, all rational solutions are isolated by testing the finite number of num/denom pairs made up by the constant coefficients and leading coefficient divisors (polynomial remainder theorem). If exact solving fails, completely or partially, numerical methods are used to find the rest of the roots. These methods are mainly different factorization algorithms - examples are Bairstow and Laguerre methods. I believe the Berlekamp algorithm is used too, on the '49. When solving polynomials by hand, I find that factorization is usually the most obvious way to do it. When the complete factorization is not obvious (and hence almost impossible on paper), the eigenvalues method in some form or another will always get the job done. It mayl take you all day, but it'll work... PS. If anyone is wondering what a companion matrix is, look at http://mathworld.wolfram.com/CompanionMatrix.html. The comapnion matrix of the above polynomial is then [[0 0 0 44][1 0 0 -32][0 1 0 -8][0 0 1 8]], and EGVL on that matrix yields [-1.96811878507 2.50401716993 5.96811878507 1.49598283007] (the roots of 'X^4-8*X^3+8*X^2+32*X-44'). The fastest way to solve 'X^4-8*X^3+8*X^2+32*X-44' is by using Polynomial49. the companion matrix method uses 10-12 seconds and SOLVE uses 3.84 seconds. My HW2 TI89 spends 3.96 seconds on the solution in comparison. And setting the flag for the VERBOSE state doesn't help more... To use the CAS, try SOLVE with 'X' (or SOLVEVX where 'X' is the default variable -aka the VX-). But that won't tell you how to proceed exactly as you certainly know what to do : a FACTORing or a X COLLECTing first... Make sure the flag 01 is unchecked for general solutions. Both the solve application and the stack commands for finding roots (SOLVE and PROOT)return the former an array and the latter a list with all four real roots: 1.496, 2.504, -1.968, 5.968. I don't understand what you did or didn't do to come up with the same results. That'll of course only return one slution (That's how it's supposed to Try X^4-8X^3+8X^2+32X-44 SOLVEVX in approximate mode Numeric Solver - Solve Poly. Enter: [1 -8 8 32 -44] Press solve and get: Roots: [1.49... 2.50... -1.96... 5.96...] This version rounds to nearest integer square root, and returns TRUE / FALSE. If you do not care about TRUE / FALSE flag, ie. then you might test to see if another iteration is necesarry, and in many cases avoid last iteration. ( which would reduce run time with about 20-40 % for large integers.) This version is only efficient for integers with size below 250, but will work for any size. Further it doubles the accuracy for each iteration. I believe it does not cycle between results, as may be problem if N = ( A -1 )*A , where a is integer. * returns square root if Zinteger, with flag for exact result * i.e. same as ZSQRT , but for any size of Zinteger * uses Newton-Raphson iteration with doubling of accuracy * for each iteration * x' = x + (y-x*x)/x /2 * -------------------------------------------- DEFINE QAdd FPTR2 ^QAdd DEFINE QSub FPTR2 ^QSub DEFINE QMul FPTR2 ^QMul DEFINE ZDIVext FPTR2 ^ZDIVext CK1NoBlame FPTR2 ^CK1Z FALSE SWAPDUP * calculate 16 digits of square root, convert to Zinteger * ID Z2%%2 %%SQRT %%FLOOR ID %%2z * calulate at least 8 correct digits FPTR2 ^ZSQRT DUP OSIZE BINT10 #- ( d digits in square root ) * #8 ( n dynamic size, init. 2 * 8) #4 ( n dynamic size, init. 2 * 4) DUP (a digits to be removed ) {{ a n d }} BEGIN ROTDROP DROPDUP !n ( update dynamic size, but max d) d SWAP#- !a ( digits to remove from x ) OVER a #2* ID noff ( downsize y ) OVER a ID noff ( downsize x ) DUPDUP QMul ROTSWAP QSub * check if exact result DUP ZINT 0 EQUAL 5UNROLL SWAP ZDIVext DROP ZINT 2 ZDIVext QAdd ( correct rounding ) #0 a #- ID noff ( back to orig. size ) DUPUNROT QAdd SWAP ZINT 0 EQUAL UNTIL SWAPDROPSWAP ABND ; @ :: * ID noff * truncate ZINT * ZINT #off * guard against underflow * Gjermund Skailand 2002-03-06 CODE GOSBVL POP# GOSBVL SAVPTR C=DAT1.A D1=C D1+5 C=DAT1.A C-6.A C-A.A LA 50000 A=C.A GOVLNG PUSH#ALOOP ENDCODE ID setsize ; @ :: * ID setsize * ZINT # * guard against underflow * Gjermund Skailand 2002-03-04 * # is digits only, does not include sign NULLHXS SWAP#1+ EXPAND ( include sign ) CODE GOSBVL SAVPTR CD1EX D1=C D0=C D0+5 C=DAT0.A D0=C A=DAT0.A % type C=DAT1.A D1=C DAT1=A.A % write type D1+5 C=DAT1.A D=C.A D0+5 A=DAT0.A % point to tails B=A.A AD0EX A+B.A AD0EX B=C.A CD1EX C+B.A CD1EX ?C