A105 Well, if someone is interested in doing the hardware for this connection (it can be done with a simple state machine, or a small FPGA), I can give all the information as I, at one point reverce engineered the protocol (physical and logical) ==== There is a set of _very_ extensive documents regarding TI's linking protocol on the TiLP site. A programming group was able to figure everything out about it. These documents include hardware diagrams, active linking, and even silent linking (for the calcs that support ==== hey i am trying desperately to understand the cordic algorithm...i know that calculators use it...i have an hp49g..does it use it too? the goal is to write a program in PC assembly language which uses the CORDIC algorithm i have found: http://www.math.tamu.edu/~jmorgan/Right_Angle_March_99/calculator.htm but i am getting stuck on the part where it talks about a subsequence of values (see the middle of the page, where it has the sigma symbol)...i know the notation but can't c how it ties into it..and the rest of the page depends on ur understanding of that sub sequence!!! ==== It does for transcendental elementary functions I believe. The above link doesn't provide a very good explanation of the CORDIC algorithm - the approach it takes is algorithmically stupid ( ...requires at most 50 multiplications... ) and unclear ( ...there exists a subsequence... ) IMHO. No one uses this approach in Real Life [TM]. Instead we iteratively perform the computation theta_(n+1) = theta_n + d * arctan( 2^(-n) ) ( d = +/- 1 ) where at each step we choose the d that brings theta_n closest to zero. Since there is no subsequence of the values arctan( 2^(-n) ) the multiplications by the values 2^n/(arctan( 2^(2n) + 1) can be precomputed for any fixed number of iterations. A very clear and concise explanation of this method can be found at http://www.fpga-guru.com/cordic.htm . Hope this helps... ---------------------------------------------------------------------------- --- ==== : This should be theta_(n+1) of course. ==== I'm in the process of writing a sine / cosine cordic implementation on a DSP. Here's what I used: X(i+1) = K(i)*( X(i) - Y/2^i ) Y(i+1) = K(i)*( Y(i) + X/2^i ) A(i) = atan(1/2^i) X will end up being the cosine of the angle and Y will end up being the sine of the angle. A(i) is the angle, which will be rotated (A(0) is the angle you want to find the sine and cosine of). Successive A(i)'s will be added or subtracted to the previous (A(i-1)) depending on the sign of A(i-1). The sum of all K(i) turns out to be a constant: K=.607252935. What I did is made the initial X value K and the initial Y as 0. Then I ignored the K(i), so: X(i+1) = ( X(i) - Y/2^i ) Y(i+1) = ( Y(i) + X/2^i ) X(0)=.607252935 Y(0)=0 The objective is to drive A(i) to 0, which is why you subtract from the previous A(i) if it's greater than 0 and add to it if it's less than 0. Last, the atan(1/2^i) should be stored in a look-up table. -- ==== http://www.swarthmore.edu/NatSci/smaurer1/Math6B/calculatorsParris-rev.pdf http://www.hpcalc.org/hp49/docs/misc/49g_aug.zip (3.3 MB) ==== One needs to have at least beta 1.19-1, but naturally everyone has already flashed their ROM to the current 1.19-6 Pressing [NXT] key while in EQW gets you to the next page where the new CAS commands help exists. ==== Sure - you can of course also get help in the catalog (as I said). Beyond that HELP and CASCMD exist. HELP doesn't take any arguments, but launches the CAS help box, and exits with a zero. CASCMD takes one string as argument, for example EXPAND. The difference between CMDS and HELP in the EQW, is that if you highlight a subexpression containing a CAS command, HELP will show directly help for that command, instead of merely showing the list of CAS commands (as CMDS does). ==== I've never used HELP on a subexpression command before! ==== He also needs to update his OS. New 49s come with 1.18, and online help was added in 1.19-something, if I remember correctly. The current (beta) version is 1.19-6b (again, if I remember correctly), but it is no longer on HP's web site. My computer got zapped by a nasty virus, so I no longer have it. ==== I am trying to use a hp48gx program in a hp49.I found this line IF XLIB 171 90 THEN... and I am trying to use an equivalent line without using a hp48gx xlib. Does anyone what can I use? ==== Are you sure about the 90 ? there's no built-in XLIB 171 90 on the HP48G.. Otherwise, what you can do to find out on how to replace it (you need a HP48G for that, an emulator is fine), Type #aaabbb LIBEVAL on an empty stack where aaa is the command number in hexa (here 90 -> 5A) bbb is the lib number in hexa (here 171-> AB) and look at the error name. Then see just put this name on the HP49. ==== I guess that by saying binary you mean log base of 2. You must define a small program to do this, such as << LOG 2 LOG / >> which in approximate mode gets a number (x) from stack and produces the required, log base 2 of x. Instead of LOG (log base 10) you can use LN (log base e)to do the job. ==== ln will be on base e and log in base 10. If you want a log in base 2 (which I think you mean by binary) then just use the formula: log(x)/log(2) or ln(x)/ln(2) whatever looks better to you ==== I Why don't you simply evaluate the term of the list ? if it's a real nothing will happen, if it's infinity or any other symbolic constant, then the type will be changed. ==== ! applying XNUM to the list get reals from integers... ==== You mean with expand or exploding the list? I'd rather avoid exploding the list, and treating each element of it, since it takes a lot of time. Speed is important in this I think, which is also why POS was a good approach. ==== But XNUM fails for symbolic arguments (which it didn't in the first ROMs), so it's not that easy anymore to add symbolic handling. ==== I do not see the problem { 'PI' } HEAD TYPE : 18 { 'PI' } HEAD EVAL TYPE: 9 I just had a look at your original post, and my mistake. What about instead of doing inf POS, you do { inf } HEAD POS, it should work ==== X work AND to save time in a loop save the value into a local called 'inf' prior to looping and use that 'inf' instead ==== i just saw one similar to the 32sII in an ad (ISDN magazine) it was all black, and instead of 'ENTER' had 'INPUT,' the letters were green. nice looking! was that a graphic-makeover or a real calc? ==== Is there an hp-48 (or equiv) emulator that i can install without owning the actual calculator? (if needed) where would I find the rom image and then where would i install it in the directory tree? are there any emulators with documentation? i installed x48 into debian 2.2 (potato), but it wants a rom image. even if i were to find the image and put it in the right place, i can find no documentation on the program. The eskimo.com link to a *.tar.gz file is down, but perhaps there are other suitable roms. thanks for any pointers. it ==== please take a look at www.hpcalc.org. There are ROM images, too. Be sure to read the docs how to convert the image to a suitable format for any of the emulators. ... ==== Given the following equation: hf=(3.01*v^1.85)/(c^1.85*d^1.17) Symbolically solve for 'c', the 49g gives solve error: non unary operator. The same is true when using the isol command. Is there a way of symbolically solving these types of equations on the 49g? Also noteworthy is the fact that the ti89, using solve() is able to reduce the above to: c=1.814*[v^1.85/(d^1.17*hf)] I've called HP support, and they acknowledged this issue - but have been able to find a work around. It appears that the 49g's weakness lies in its ability to evaluate exponents. For example try this on the 49g: (x^.258)*(x^.125)=no solution The 89 yeilds: x^.383 I have a feeling that the flag settings may be playing a part in this. Anybody have any ideas ==== Which is (partly) because of the numeric values, hilariously enough. Do XQ on the equation (which is the first thing you want to do, when you want to solve an equation containing numeric values), to get 'hf=301/100*v^(37/20)/(c^(37/20)*d^(117/100))'. Now we can clearly see a problem (if you couldn't before); Although 'c' is only present one single time (hence it should be very easy to isolate), it's to a fractional power. The HP49G turns 'c^(37/20)' into 'c*c^(17/20)' or 'c*EXP(17*LN(c)/20)'. That's a problem, since 'c' is then present at two places. My first thought was this, which solves the equation symbolically in less than 30 seconds: 'hf=(3.01*v^1.85)/(c^1.85*d^1.17)' XQ (to enter the EQW and select the '37/20' part in 'c^(37/20)'. It's very intuitive once you do it) CUT A ENTER (to replace that part with a single variable name, 'A', and return to the stack) 'c' SOLVE 'A' PASTE = SUBST Voila. there are other ways to do it, and the quickest might be to do it manually in the EQW (it took about the same amount of time when I did that, I guess). No, it's 'c=1.814*(v^(1.85)/(d^(1.17)*hf))^(0.541)', and that's not a symbolic solution by the way (the solution provided by the HP above is). My TI89 HW2 spent around 9 minutes finding a symbolic solution, and that solution was not complete. I doubt it - it's one of its forces. Where are LNCOLLECT, EXPLN, LIN, TEXPAND & TSIMP on the TI89? How did you try to simplify it? The HP49G doesn't simplify by itself - you have to tell it in which form you like the result. On the HP49G: '(X^.258)*(X^.125)' XQ LIN (change to numeric mode) LIN EXP2POW -> 'X^.383'. These types of manipulations I find very natural on the '49. It seems odd, but that's the case. i don't think it should have to be THAT difficult - slightly less awkward had been enough ;-) ==== 'X^.383'. http://www.hpcalc.org/details.php?id=4360 which has a POWCOLLECT command, which will give you (.258+.125) X You can now go to the exponent and EVAL the sum, if needed.. ==== I didn't tell it how I wanted it simplified (I wasn't aware that I could!). And yes you were correct in the 89's evaluation of the equation - I forgot to type the last (encompassing) exponent. BTW, my statement should have read that HP support was NOT able to find a again. ==== . Hum... Yes something is wrong: Change the batteries ! More seriously, the batteries are checked when an interrupt occurs, that is typically when you're pressing a key. So this behavior is perfectly normal. ==== If you really get the message LowBat(S) during normal operation, then it doesn't seem properly operating. Perhaps you try [ON]-[C]? ==== But John-Yves, when the batteries of my HP49G are weak, the message LowBat(S) appears only when powering on the calc, and not when I press some key during normal operation. During normal operation only the annunciator ((o)) goes on. ==== I don't know about the 49 but on the 48 the LowBat(S) message is only generated by the ?FlashAlert entry point which is called via InitSysUI after a warm/cold-start or after DEEPSLEEP returns in the TurnOff entry. ==== You can get the lowbat message not only at the poweron of the calculator. When using KERMIT or XMODEM (on the HP48 and HP49) and on the HP49 when copying data into the Flash port as the batteries are checked at that time and the operation won't be completed if you have low batteries. : Well, yes! I have been copying matrices to and from flash and I don't recall if the message box appeared only when I was doing that (I'll keep an eye out for it, the other eye I think I'll keep for myself!). All the operations of copying matrices to and from flash have completed ok but I am dealing with relativelly small matrices (5x20). I wonder why the correct operation of the LowBatt(S) was not explained in the users manual. I am still not getting the ((o)) annunciator, any clues Santos Lucero ==== This is how I understood the operation of LowBatt(S) was, but, in my defense, I must confess that I have been reading the user's manual. ==== << SWAP LIST-> 2 + DUP ROLL @ explode list, roll number to level 1 OVER 3 SWAP @ from 3 to n+2: START OVER ROLL @ get top level element IF OVER 2 MOD @ if least significant bit set THEN ROT ROT @ then leave element on stack ELSE DROP SWAP 1 - SWAP @ else drop it and decrement list size END 2 / IP @ shift number to the right NEXT DROP 2 - ->LIST @ build list >> 105 bytes, cksm 66D7 (on stack) ==== I would use small letters in locals: Ç -> eq x Ç eq 'X' x = @ 'X^2' 'X=5' SUBST @ '5^2' EVAL @ 25 eq x @ arguments back È DROP2 @ this is for LASTARG È ==== a I've got an HP 48SX and it does not recognize the SUBST command. Is there any equivalent? ==== : Try 2 ->LIST | instead of = SUBST ==== Yes - the Where command (a simple vertical line) is a great SUBSTitute and is used for example when you numerically integrate something on the stack with the Integral sign (elongated S) IIRC Again: Ç -> eq x Ç eq 'X' x 2 ->LIST | EVAL eq x È DROP2 È ==== No, it doesn't survive a warmstart (=ON&C). No application does, be that the ON-key is intensionally disabled. Also no supendend programs does, even the content of PICTURE and some flag settings are lost if not saved in STARTUP. That's OK since a warmstart is a kind of (soft) resetting the calculator. ==== Sure it does work... Maybe it's time to update ? (I use latest beta) As (1/X^3)+1 is already in the good form, it is the result the calculator should return... Or did you mistype 1/(X^3+1) ? Then : Into real mode, PARTFRAC answers '1/3/(X+1)-(X-2)/3/(X^2-X+1) Into complexe mode, it says '-((1-i*SQRT(3))/3/(2*X-(1-i*SQRT(3))))+1/3/(X+1)-(1+i*SQRT(3))/3/(2*X-(1+i* SQRT(3)))' ==== I find the 48GX somewhat frustrating to me in the time it takes to move from through directories and menus. Is the 49G faster? Also, the 48GX is not a recent purchase. Perhaps the speed in improved in more recent production. Any advice is appreciated. ==== which is quite fast, easy, and has a lot of keyboard shortcuts AND it can even sort the files it shows - like a windows browser. ==== Or, if you have an 48G or GX, just use Filer48 (from www.hpcalc.org), which is the best and fastest file manager for the 48 series. And it looks like the 49G filer and has the same features;-) ==== ==== ==== ====