A109 Was there ever a mini-challenge in UserRPL to find the prime factorization of a number? One of the first things I did when I learned how to program (well...thought i learned how to program) my HP was write two programs in UserRPL that found the prime factorization of a number on stack level one and returned its prime factorization in a list on stack level one. Has anyone else done this? Yes, in 1990. It was one of the first mini-challenges. My entry can be found on Goodies Disk #1, as 'PRIME'. A much faster version by Mark Adler can be found on GD2 as 'FACNUM'. Both of the above use the simple sieving algorithm, so they are very slow if the smallest prime factor is large. Much faster algorithms exist, but to my knowledge nobody has coded them *in User RPL*. Is the fastest ML factorizer the FACTOR command in ALG48? It factors (10^17-1)/9 into 2071723 * 5363222357 in 5.3 seconds, and determines that (10^19-1)/9 is prime in 4 seconds. I don't know of any faster *HP48* factorizer. -Joe- In this case ALG48 uses Pollard-Rho, which is indeed quite fast for such smallish factors. A method which often is equally fast and occasionally a lot faster is Pollard p-1. However, in this case 2071723-1 = 2*3*17*19*1069 536322257 = 2*2*17*389*202753 so that Pollard p-1 would be fairly slow due to the large last factor (1069). Since Pollard p-1 requires calculating powers by just about all numbers until 1069 (ignoring the possible optimizations..), it seems obvious that the algorithm would be slow. However, I'm not really sure whether it would take more than 5.3 seconds or not. As for other Pollard-Rho implementations, the one in ALG48 is heavilily optimized, so taking a large enough test set I'm confident no implementation is significantly faster. However, for any single test there can be significant variations based on a lucky choice of the initial values in the algorithm. Also, ALG48 only performs the Miller-Rabin primality test, which is probabilistic. If one uses all prime bases in succession, then some limits are known. For example, if all prime bases 2,3,...,19 are used, then it is known that if the number passes the test in all those bases, it must be a prime if it is less than 341550071728321 [1]. If one continues up to base 31, the first known failure is the number 56897193526942024370326972321, which factors into 137716125329053 and a 15-digit number. However, it is *not* known whether any smaller ones exist. is a vanishingly small probability that the number isn't a prime after all. Actually, in this case the limit is incorrect, since when the number does not fit into 64 bits ALG48 uses a SRPL version of the Miller-Rabin test. For speed only bases up to 11 are tested, in which case the first known failure comes at 2152302898747. That is, PRIM? returns 1 for the number in 4 seconds only because it doesn't want to waste more time to make a vanishlingly small probability of failure even smaller. [1] G. Jaeschke, Math.Comp., 61, (1993) p915-926 : i didn't tried, but i thought of it, coz we were talking about the RSA encoding system the other day... -- I'll have to get them back from a friend who has them on his calculator. Right now I'm on spring break (a week off that American schools give to their students) so I won't be seeing that friend until next monday. Anyway, it was two simple programs, PRIME and ISPRIME. ISPRIME returned a 1 or 0 if the number was prime (by checking all the 2 and all the odd numbers from 3 to the square root of the number being checked. PRIME would find the prime factors of a number by searching through all the odds (and 2 of course) and, when it found a prime factor, divided that factor into the original number and recursively called PRIME on the remaining number. I'm sure there are better programs there, but it took me 2 weeks to program that (I was learning UserRPL at the same time) and I've only written one other program...a UserRPL sunthetic division program for the division of polynomials. Anyway, I'll try to get those programs to you when I see that friend. I propose a Mini-Challenge... Break a 512bits modulus built from 2 strong primes, with a HP48... Only RPL progs accepted, no Sys-RPL nor Asm... I'm cool with that, but what's a 512bits modulus? :-) thank you, it works. it works, but only after 4 retries 48gx I used to have to retry a number of times to get things to transfer. It was just a matter of positioning the calc correctly. Laying them both on a flat surface about 2 or 3 inches apart with the i/r lined up together seems to be the way to make it work. I still get it wrong sometimes and have to do a retry but most of the time it works the first time now. By the way, I made a couple of little programs that I can call from my cst menu, one called wire and one called ir, that set the i/o apropriatly. I also have a saved setup on my 200lx for the 48. Barry There will be on the new calculator a extension port PCMCIA, same the 200LX ! and the processor will run at 50 Mhz... My sources are quite reliable ! but i dont know when this calculator will be available ... Or build a sniffer on the NEW HP! Or keep my progs on that 520MB hard disk on PCMCIA! Or put my web server on my HP (who will port Apache on the NEW HP?) J'en doute.... Why put a PCMCIA on a calculator? Maybe you're talking about the next PDA from HP? How could you know? There will be on the new calculator a extension port PCMCIA, same the 200LX ! and the processor will run at 50 Mhz... My sources are quite reliable ! but i dont know when this calculator will be available ... thinking the object. matching. of user's Here at Georgia Tech, it seems to be a consensus amongst the faculty (at least at the freshman level classes) that graphing/programmable calculators should not be allowed. This is very frustrating - not because I want to use my HP48GX's programming/graphing features to give me an advantage, but because I will be forced to buy a cheap calculator (4 function) with which I am not familiar in order to take tests more efficiently. As with most (all?) schools, we have an honor code. Why not simply disallow use of programming and graphing features during tests? That way I can (1) save money by not having to buy another calculator, and (2) be able to use the calculator with which I am most familiar. Odd, very odd. I went through engineering school (WVU) with a 28C with no problems. In graduate school I used a 48GX, again no problems. When I took the PE exam I used a 48GX and had another 48GX and my trusty 28C as backups, again no problems. To be honest, I never used the graphing functions because I never really needed them, BUT I can't imagine taking the electrical power classes without either of these calcs' ability to handle complex numbers (and matrices) easily. I guess if I were forced to use something else, I would use a 42S (not available anymore) or a 41CX (also not available) and as a last resort a 32sII. Luckily I have at least one of all of these :-) It is odd that many schools (high schools in particular and some colleges) are requiring students to buy complex graphing calcs and then other schools are banning them. On that same line, does HP make a simple 4 function RPN calculator? Sometimes my physics teacher gets paranoid that people are programming their calculators (I don't...because anything I would need is probably already in there :-)) Anyway, she knows that I use HP (she's an HP fanatic too...but she only has a 28 or a 42...i can't remember....by the way, she's a GT alumni) and since she knows I use HP, she doesn't make me use nasty TI-30X with the rest of the class. She lets me use her HP28/42 (as before, I cannot remember) I know I could do a lot more on it than the other students if I learned really how to use it, but I don't because that would be unfair. Anyway, seriously, is there a 4 function RPN calculator made by someone? Try a non-graphing RPN calculator - you'll be more familiar with it and it should be allowed. calculators use I disallow http://www.hpcalc.org/docs/programming/irinasm.zip There is some example code about how to use ASM to control the IR device on the HP48. My question is: How exactly is the baud rate being set to 7500? I tried to look through the RPL documentation for references to the #0100D address/register but did not find anything in there. Is this something that I should research in the Saturn architecture documents? I have got an HP 48 & a TI82, I have made the parrallel link, the program said that the link work but when I transfert, there is an error. My cable work very well with TI92. lazer jets are more expensive when they breake and hp cant afford to give new ones whare with an inkjet hp just gives them a new one with out telling them??? a possible answer. I nolonger remember the location of a really greate webpage and a document conntaing all of the pinouts of the calculator... What i need is a document that has the pin outs for port 2 of the expantion port in the gx, the port that can handle upto a 4 meg card... I am makeing a 1meg memcard and have everything but the hp's pinouts. Following several requests, I've made two new versions for my romupload program: -ROMUPLIR: Upload the ROM from any HP48 using the IR port (standard speed rate 2400bps) -ROMUPLIR4800: Same thing, but at 4800bps. I couldn't try them since I have no IR capable PC. But I'm pretty confident that it will work. Everything is available at: http://www.epita.fr/~avenar_j/hp/product/romupl.html Download the zip file. It contains the three binaries. With all 88 constellations (whew!) minor bug fixes, and a bonus prize. For budding astronomers or for those who just want to amaze their friends with their calculator, though I am sure few who own one would deign to call it that. This is a simple star chart for the HP48G series graphing calculator, with the option to plot the position of the sun, moon, and 5 nearest planets. With brief instructions, and the price is right (free). Perfect for the man/woman who has everything/everybody. Anyway, in my school, I'm one of the two people who use an HP48. I bought a G last year when I lost my TI82 and the other HP user sat in front of me in trig class and introduced me to the 48. Unfortunately, Service Merchandise (a department store) had only a G, and I didn't know better, so I bought a G. Well, In calculus this year, I decided it was time to buy a GX. So I did. One thing I've noticed, though, is the weight of the total 3 HP48s at my school. I bought my HPs in late 97 and late 98. He's had his G since I think 93 or 94. Anyway, his calculator (which is a revision R just like my 2) weighs probably about half as much as my two calculators. Does anyone know why? I was just wondering.... Jeremy (perhaps his is a fast processor and has just burned the extra calories in it's year of service? :-)) calculators... If you really percieve a weight difference then I would take the batteries out since different brands likely weigh different amounts and then use an actual scale. Well, I haven't weighed them without the batteries on an actual scale, but it is a SERIOUS difference. I don't think it's likely that the batteries create such a big difference. When I see him next week, I get some solid figures, but for now, assuming it isn't the batteries, what could it be? I know that my GX weighs more than my G because I have two RAM cards in my GX. You'd be surprised how much extra weight those add. -- http://www.rose-hulman.edu/~froydnj/ I'm starting to get offended that people are assuming that I would be so frivolous in announcing that my HP48s weigh more than his :-) Anyway, both my HP48G and my unaltered HP48GX weigh SIGNIFICANTLY more than his....I will post statistics, but any solution right now would be appreciated. Mr. Arnett? I'll bet that you have a lot more software in your HP48's than he does. As was discussed here a while ago, 1 bits weight more than 0 bits, so the more data you have in your HP48, the more it will weigh. Four ways of reducing the weight therefore spring to mind: (1) If any of your objects contain more 1's than 0's, perform a NOT on that data and store it. It'll weigh less. (2) BZ everything. Then do #1 above. (3) Purge unnecessary objects. (4) Move to a location on the Earth with minimum gravity and maximum levity. -Joe- ---------------------------------------------------------------------- I have read lots here about the anticipated replacement for the 48GX. I think most posters have underestimated HP. Can others remember the introduction of the HP-41C in about 1979? WOW -- it had alpha characters! Look, it has four (4) expansion ports! Named functions! and peripheral such as a card reader with promise of more to come. Ten years later the scene repeated, with the 48-SX -- WOW, computer link cable, four-line display, hundreds and hundreds of built-in functions, and, once again, a huge step forward in the calculator state-of-the-art. Predictions I have been reading fall far short of that kind of great leap for the next calculator. My prediction? I think you are all underestimating what HP will do. What it will be I can only guess (and hope), but I suspect that there will be some startled users one morning early this summer. I'd place my order now if I knew where to do so... Hewlett-Packard's Australian Calculator Operation (ACO) announced a new graphic calculator on Thursday, the HP 89G, as the successor to the HP48G series. It will sell for approximately US$150 and will include the following features: 256KB of user memory 512KB of flash memory 10MHz Motorola 68000-compatible CPU 160x100 pixel monochrome display (grayscale available through assembly language) Built-in Computer Algebra System (CAS) based on Derive All-new stack with pretty print and either algebraic or RPN input Animated 3D graphing The 89G, based on the TI-89, marks the first time Hewlett Packard has licensed a calculator from another company. We decided that because we couldn't beat the competition, we'd join them, said product team leader Ronald Sorensen. When asked why someone would buy the more expensive HP 89G over the TI-89, Sorensen replied, The 89G adds Reverse Polish Notation and the HP brand, ensuring quality service and support. All TI-89 programs will run on the new HP, and HP48 User RPL programs may be typed in while in RPN mode. Expect the calculator to be in stores in May. photograph of the new calculator, shown below: http://www.hpcalc.org/newhp.html they even have a picture of it there I know we have this 'April Fools' tradition in the States, where we spend far too much time on April 1st playing pranks and hoaxes on our friends. Is this tradition held in other countries? Or are our international readers just wondering about our strange (but incredibly well-executed) techno-humor again? Dave. ------ I don't speak for TI when I post here. One of the pranks is to tape a paper fish to someone's back :-) The history of April Fools is here: http://www.usis.usemb.se/Holydays/celebrate/april.htm So does this mean that HP is dropping the HP48 (IR transfers, expansion cards, etc) line of calculators ?? TI's are flimsy and cheap looking. I remember reading in a FAQ somewhere how to uncripple the IR port on a = 48G so that it will transmit farther than 12 inches or so. Anyone know = how to do this? --=20 Nate Meier [nmeier@chat.carleton.ca] Aerospace Engineering Carleton University ------=_NextPart_000_0011_01BE7BDB.78CCE220 uncripple the IR=20 port on a 48G so that it will transmit farther than 12 inches or = so. =20 erospace=20 ------=_NextPart_000_0011_01BE7BDB.78CCE220-- Well, the 48G will *transmit* farther than 12 inches. It just can't *recieve* from farther than 12 inches. The FAQ can be found on http://www.hpcalc.org (I don't remember where.) -- I remember reading in a FAQ somewhere how to uncripple the IR port on a 48G so that it will transmit farther than 12 inches or so. Anyone know how to do this? -- Is there any way for the 48G (or GX) to just store raw data transmitted = from another IR device? I've got a remote that I'm trying to reprogram = and get my 48G to emulate. Is there any way to get the 48G to capture = the data send by the remote when a button on the remote is pushed? try one of the remote emulation programs available from most hp48 ftp = sites . Is there any way for the 48G (or GX) to just store raw data = transmitted from another IR device? I've got a remote that I'm trying = to reprogram and get my 48G to emulate. Is there any way to get the 48G = to capture the data send by the remote when a button on the remote is = pushed? http://members.tripod.com/~hpclub/novahp.html Tacio - HP Club This is one new HP joke that is really funny. Good job! What program did you use for the graphics? The Hewlett-Packard Calcualtor Products Team is proud to announce the all new HP 58SX symbolic expandable calculator! The HP 58SX is now the most powerful handheld dedicated calculator ever developed. With the 58SX, you can do anything and everything from basic math to advanced vector calculus. With it's unique new interface and powerful algebraic engine, it can handle any equation you throw at it! - Product Features - * The all new RISC Uranus processor, over 100 times faster than the Saturn processor used in the HP 48 series, running at 50Mhz. * 4MB of ROM with an all new, and fully optimized, RPN based operating system, utilizing both a fast menu-driven system, and a user friendly forms-based system. * 2MB of RAM with two card slots that are compatible with both the old HP 48 cards and new HP 58SX cards capable of faster input/output for use in varying applications from high speed memory to fast wireless data transfer. * An improved equation library featuring over 2000 scientific, engineering, mathematical, and even surveying equations. * HP MatrixWriter 2. An all new incarnation of the original MatrixWriter application, now supporting unlimited dimension matricies (including more than three dimensions!) and symbolic entry. * HP EquationWriter. The all new EquationWriter is easier to use, and has better prompts, including easy to use menus to select the mathematical symbol you want to insert. * HP Solve. The new Solve includes the ability to solve for variables or numeric values, and now supports symbolic integration. * The all new Plotting application uses hardware assited drawing to achieve the fastest plotting routine (including all forms of 3D plotting) ever found in a handheld device. Plus, new 4D plotting via time variation! * New irDA-compiant infrared communications, along with a faster serial port, for faster file transfers and printing. * Now supports User RPL, System RPL, and C++ natively! - Product Specifications - Product name/Model Number: 58SX (Symbolic Expandable) Physical Features: Display: 320x240 pixel 32 color, reflective color display Entry system logic: RPN or Algebraic Menus, promps, alpha messages, softkeys: Yes RAM/no of variables or registers: 2 MB built in, expandable to 64 MB, unlimited within available memory Built-in functions: Over 10000 Redefinable keyboard and menu keys: Yes Math and Statistical Features: +, -, x, /, sq. root, 1/x, +/-, 1nx, e^x, n!, y^x, logx, 10x, x^2, %, pi: Yes Fractions: Yes Trig., Hyperbolic, HP Solve (root finder): Yes Symbolic integration/Complex number functions: Yes Statistical analysis: Multivariate/stat SUM x, SUM x^2, SUM y, SUM y^2, SUM xy: Yes Sample standard deviation/ mean/ weighted mean: Yes Linear regression, combinations, permutations: Yes Curve fit (LN, LOG, EXP, POW): Yes Normal, X, t, F distribution: Yes Scientific Features: Decimal hrs/hrs.min.sec. conversions: Yes Polar/rectangular and angle conversions: Yes Base conversions and arithmetic: Yes Unit conversions: Yes Bit, Boolean operations: Yes Vector and Matrix Operations: Symbolic matrix operations, rectangular and polar: Yes Cylindrical, spherical: Yes HP MatrixWriter2, unlimited dimensions: Yes APLETS: Yes Notepad: Yes (directly) Graphic Functions with interactive graphics: 4D Customizing Features: Method: HP Solve/RPL/C++ No. of steps/formulas or programs: Unlimited within available memory Peripherals: Optional Infra-red Printer, HP 82250: Yes Computer Link: Yes Two-way irDA Infra-red I/O: Yes Batteries: 3 x AAA Warranty: One-year warranty - For more information - For more information, please visit our new web site at www.hp.com/calculators/products/product_info/58sx_info.html WOW!!!!! Finally I can put the ti I've been using for a ocuple of years to supplement my hp to bed!! I only hope your telling us the truth, as the URL you describe is currently coming back to me with a 404 not found error. This sounds like the calculator we've all been dreaming of. When will this be available? Price??? Please tell us more... It is an APRIL FOOL !!! The URL given return 404 not found error because this page doesn't exist. it is the second APRIL FOOL about HP58 but this one is much more realistic than the previous one. The Hardware specs reminds me of the latest WinCE Color Palm sized PCs. Similar to the HP Jornada 420 (Nice little machine, but expensive US$500). Carlos. it all seemed very reasonable...except for the 10,000+ built in functions...??? it would seemingly also have to include a moog synthesyzier, auto-diagnostic system, programmable short-wave reciever, various electronic test applicances and a gizmo to measure the pollen count--- but these aren't mentioned in the blurb...??? ----------- :: o .---..-..-..-..-..-..-. . .-. .-. .-..-..-.. .-. `-' `-'`-'`-' `-' `. ^ .' `--^--'`-'`-'`-'' `--^--' RefuteEnlightenmentWithTheMonotonyOfPlainExistence Here here, allthough I regret not looking at the day before I reply, but if someone could send these specs to hp, and they managed to make it for less than $250, I think we would all be very pleasently surprised. BTW, adding would be much appreciated! http://www.multimania.com/packman2/index.htm for learning pourpose, I'd like to disassemble the whole 512 Kb ROM of my hp48g. It'd be interesting to print the file with the listing, but : how can i make it ? I tried with Jazz' DISXY (using emu 48), but it's not so comfortable... The disass of emu 48 differs in some addresses with the disassembled of Jazz (why ? Try to dis. SWAP - #03223 - and see !). Any suggestion is welcome ! Thanx in advance http://www.europe.hp.com/calculators/products/books.html#b48g a list of several books is available. Which book is the best for a non-experienced person in RPL-programs ===== variable be without its locality? (Global, I guess.) when b ). arquitecture, but that That's right, but there's another reason: You are allowed to use almost any names for your local variables, unlike globals. You need a mark (<<) to of locals you wish to create), and when the program starts. Look at the following (easy) example, and predict what is on the stack after it has been run (I know that you know this, Steve): Christian as to 'why do we always have to start a secondary, or thirdary, or fourthary...program delimiter set every time we declare new local variables...' is.... not entirely correct. you can easily get around this, and treat all your local variables as global variables, inside one big program block, by simply....!!!...defining all your variables, of the local variety at the beginning of the main program...! you can additionally use the <- ( left pointing arrow ) as a prefix to create traveling local variables...!!!...that will jump from program to program while the ( directory/program group ) is running...!!! ( !!! ) [ ? ] <3 sproogles... tw Please describe these functions. You might get an antiderivative that does not look like what you get with your TI89 but that does not mean that Erable fails. And I know many functions that Erable can integrate but not the TI89: for example all the functions that can only be integrated using the Risch algorithm like (1+2x^2)*exp(x^2) ---------------------------------------------------------------------- Okay, this is exactly the kind of exchange I was hoping for, constructive, with good ideas. I just thought I'd mention that the day after I posted the original, I got a reply from someone (who shall remain nameless) asking where to find information on the new HP58... (I thought mythical and wish list would make it abundantly clear . . .) As for the QWERTY question? I still find that the TI-92 is entirely to unweildly to use effectively. I would accept the clamshell design of the 28, maybe even with a sideways QWERTY, but that is most defenitly low on my list, as I can type 30 wpm on my 48... (Lots of practice) And, I just saw a Gameboy color, and I have to say, if HP pulled color off as well as on that machine, and kept long battery life (at least a month of heavy use), I would accept color. But again, that's low on my list. programming - learn Just a little nit-picking of terminology: The kinds of programing languages you aree talking about are actually called _low_ level languages, because they are closer (lower) to the hardware. : that if you want a QWERTY keyboard, buy a WinCE device and get the HP : emulator for it. Please, not BASIC or Pascal. Both languages have been deprecated strongly by their authors, respectively Dartmouth College and Nicholas Wirth, for encouraging poor programming styles. Originally, BASIC and PASCAL could not initialize variables in their declarations, BASIC has goto statements, both are missing reasonable data types, orthogonal statement types and operators, etc. Yes, I am aware that _some_ later variants of these did address some of these problems. Nicholas Wirth deliberately had omitted data types, statement types, available functions, variable initializations so that students would not have more than one choice for any particular need to reduce student confusion by having multiple choices and to ease grading student programs. Unfortunately, most people are not willing to learn more than one language and apply the ``if the only tool I have is a hammer, then every thing is a nail'' technique to all their programming. I would suggest subsetted and interpreted Java, C, or C++ as appropriate. I could accept Perl, Tcl or Python as other reasonable models (with some provision for initialized variables). Randolph J. Herber, herber@dcdrjh.fnal.gov, +1 630 840 2966, CD/CDFTF PK-149F, 60510-0500, USA. (Speaking for myself and not for US, US DOE, FNAL nor URA.) (Product, trade, or service marks herein belong to their respective owners.) Sort of impossible, no ? I thought an RPL program is just a list of addresses of ROM-pointers which point to objects, (which point to objects, iterate if needed) which are machine language. Let me know if I'm wrong... etc, b) smaller, bigger screen, fewer keys, more menus, easier to access menus, user defined/orderable menus...( allow the user to redefine the menu access trees...so instead of simply creating more menus, the user could customize the user interface...( this however would make it very frustrating when you lend it to someone...??? )) Of course.. I changed it as an afterthought for 1 GET in a (futile) attempt to outwit you. from vectors (use with care on 2 and 3d vectors, flag-dependable, that's why it's slow.) Here's a little mc: Write the best program (lowest b*t*speed) to extract each of the following: [ -1.2 ] [[ -1.2]] (2 programs, if you like) Christian To Recap from Larry: If necessary, they should add a new catenate operator. gether. This would also allow us to define a rigorous mathematically correct semantic for it that would apply to numbers as well as strings and string/number combina- building up certain types of expressions. ------------------------:: o this sounds like a good idea, but if they're going to add (Eeeeeeeek!) a new catenate operator/function then perhaps they should use the ones already available to Set Theory, and along that include some new characters for Union...and uhhh...what ever else is part of Set Theory... along with some characters/operators/functions for Symbolic Logic, allowing for fractional logical values ( Fuzzy logic ) and the Set Theory operators that go along with that... as i suggested/mentioned several months ago during the Object Oriented Fiasco... whenever we say add or subtract or whatever, we are very often refering to many operations with a single term...maybe HP should extend the Operator base to include all the sub-operators as User level functions...or SubUser Level functions...???...that is, 'rare' functions...??? they could be hidden away in a buried directory somewhere, and have limited error checking, so that if they fail, they wouldn't fail catestrophically, but only crash the individual program--while allowing the user to write, somewhat less friendly, but much faster code...??? To Recap: Is there any way to merge 2 arrays into one? Eg: [ [ 1 2 3] [ 4 5 6] [ 7 8 9] ] merge with [ [.2 .4 .5] ] ------------------:: o this program is about as lagubrious (?) as yours... If you have a G series: that are not in the ASCII table, such as the square root symbol, the integral symbol, and so on. THE CURRENT SOLUTION: The HP48 allows you to set TRANSIO mode 3 which translates all such characters into typable three-character codes. For example, the square root symbol is translated into v/, the integral symbol is translated into .S, and so on. Although the program can be reconstructed from these TRANSIO codes, it makes listings ugly and only human-readable to those who've memorized the TRANSIO codes. BUT LOOK AT THIS! Wanna see magic? Key in the following program: and see what happens when you press ENTER. (Don't run it, just look at it, and compare it with what you typed.) The 'RATIO(2,3)' turned into '2/3'. The CLUSR turned into CLVAR. The LAST turned into LASTARG. If you have a G/GX, the GRAPH turned into PICTURE. (The KILL is just there to prevent the program from running.) This ability of the HP48 to have command-name aliases which automatically get translated into an alternate name gives rise to the following suggestion for the next HP high-end machine... A BETTER (?) SOLUTION: The next machine should supply TYPABLE ALIASES for all commands with non-typable names. Already-existing examples of aliases are LAST (which turns into LASTARG when typed into a program), CLUSR (which turns into CLVAR), and GRAPH on the G/GX (which turns into PICTURE). In a similar way, it would be A Very Nice Thing if the user could type INTEGRAL into a program and have it change into the integral symbol automatically. This would make listings easy to type on a computer, easy to type back into the calculator, and no special translation modes or codes or arcane knowledge would be necessary. It'd be automatic. A newby reading the listing could type INTEGRAL, and an experienced user could press the integral symbol on the keyboard; either way, you'd get the integral symbol in the program. EXAMPLES OF SUGGESTION IN ACTION: The first column is what you see in listings now. Wouldn't it be nice if you could see *and type* the suggested alias in the second column instead, and have the machine translate it for you? HP48 name Possible alias --------- -------------- CLGS CLSUM pi PI v/ SQRT .S INTEGRAL GS+ SUM+ .d DERIV =/ NOT= F0Gl F0LAM or BBODY GDLIST DELTALIST or DIFFLIST |vMATCH MATCHDOWN or MATCHDN and so on. Of course, the concept allows for any typable alias; I'm not campaigning for any particular aliases. OTHER POSSIBLE SOLUTIONS TO THE PROBLEM: (1) Eliminate all non-typable command names. This is the easiest solution, but it constitutes a giant leap backwards, not forwards. We don't need no stinkin' COBOL! Blech! (2) Add typable aliases that don't automatically change. An existing example of that in the HP48 is PREDV and PREDY which are identical in all respects but they keep their own names when typed into a program. This would not really solve the problem at hand, since people desiring to type a program listing for publication would have to know (or look up) all of the typable aliases, since the machine didn't translate them automatically. That kinda defeats the whole purpose of having the aliases in the first place. (3) Make the TRANSIO-type codes more meaningful. For example, /SQRT/ could be the code for the square root symbol, or SQRT (but in that case you MUST have a key on the calculator!). (4) Adopt APL. That way *nothing* would be typable, *everything* would be unreadable by humans, and thus no command would be more annoying than any other. This has the added benefit of making you look like a genius when you glance at a dense page of code, point to a random hieroglyphic in the middle and say, Oh, *there's* the problem! That should be a counter-clockwise buckysplat! To Recap: ...pulse is a good word for it. But now it's turning into too much of a good thing - two of the six softkeys are now making a loud SNAP when I press them, as if they were catching on a layer of plastic (which is probably what it is). -----------------------::o i had that same problem occur on 2 ( or 3 ) of my various 48's...and in both ( all (???) ) cases, i called HP and they replaced the calc for FREE...! although in the last case, it happened to my old sx and i had to shell out 100$ for a new gx...! it had a very annoying feel to it...i was sure that they were right of the verge of falling out...!!! and then: Deticated cursor... what i would like to see, is either a touch sensitive screen...my Casio watch has one of these, and i think that it works fine...it's been very durable for 10+ years...! OR---a single stationary mouse key...kind of like the red key that i've seen in the middle of some lap top computer i saw someplace...although, the way i've visualized it, it would be a flat key that would 'wiggle', you could rest your finger on it and move the cursor around, and press a little to 'click' it...there might have to be a screw or somesuch to control the sensativity for individual users... and also, the more you move the key from it's center, the faster the cursor would move...it all sounds much to 'sensative' for a small key, but i suspect that with a little practice, it would become almost 'unexplainable' (???) in the sense that you couldn't explain to anyone how you were controlling it, after you got the hang of it...like balancing a bicycle perhaps...??? a single stationary mouse key...kind of like the red key that i've seen in the middle of some lap top computer i saw someplace ... Many of the newer laptops, especially IBMs have this device. The biggest problem I would forsee about this device in a calculator is that it would make it a more mouse-graphical interface instead of the keyboard interface currently used. While this is nice for a palmtop, I'd find it annoying on an HP 58. --------------------------::o well, i find the four directional keys very annoying...it would seem (?) to be much more efficient to put that spacial fuction to navigate over a 2 dimensional plane, onto a single key with movement along the 2 dimensional axes...??? i don't see how anyone ( in their right mind ) could think that using 4 keys to navigate over a surface, as such, could in any way, be desirable...??? [Answer in Bad English] I'm searching for a program to reduce expressions to their lowest terms. Here is an example : 2+ACo-x+ALI-/2 -+AD4- program -+AD4- x+ALI- one way ( this is a very confusingly written question (?) ) to do this is to Expand the Equation with EXPAN repeatedly, until it doesn't expand anymore...check with SIZE...(?)...then Contract it with COLCT until it doesn't get any smaller... (???) both of these functions are hidden in the Symbolic Directory the [9] key... Z Suggestion... Try the built-in PROOT command... for example, to solve 5x^3 + 2x^2 - x + 4 = 0 , enter: [5 2 -1 4] PROOT (you enter every coefficient from greatest power of x to least power of x, in ax^n+bx^(n-1)+cx^(n-2) ... = 0 form.) This won't work for negative powers, like x^(-1)+5=0. If you need to enter something without one of the terms, like: 5x^2+2=0, make sure you enter [5 0 2] to solve, and NOT [5 2]. The only problem you have now is to get it to extract the coefficients... I'm not sure how to do this, maybe you know... Two solutions for you: called PCOEF (Polynomial Coefficients) and it can be found on Goodies Disk #1. and coeffs into poly); it's available at http://www.hpcalc.org/math/misc/poly2coe.zip e.g. LaPlace routines I've made in UserRPL that uses some LaPlace functions in NeoPolys v6.5. When I transfer those files from the HP to the computer, everything is OK. When I try to get them back, the HP says Invalid Syntax XLIB ......... The problem is that the command used is exchanged with the XLIB number. This _should_ be recognised properly when the appropriate libriary is installed and attached in the HP, right? I'm using a program called Transfile Win 48 v2.0. Should I use something else? I think I've tried every combination of binary and ASCII transfers. It's not OK if you look at your computer text file (e.g. with Notepad) and already see XLIB ... ... in the file, which means that you sent the file as text (i.e. using Kermit in ascii mode) when the necessary library was not attached; this causes the names of the library commands to be lost, and only the the library and command numbers to remain. True; when you read ascii text files back using Kermit, they must be re-compiled into a program as if they had just been typed in, but the internal compiler does not recognize XLIB mmm nnn Only if it was installed *both* when first SENDing the program (in ascii), and then once again when RECVing it. While SENDing (in ascii mode), library calls (which exist internally only as numeric references to library and command numbers) are looked up by scanning the library for the command name; if a name can not be found, then XLIB mmm nnn is substituted. While RECVing (in ascii mode), command names are looked up, and if not found in any library, then they are compiled as variable names, rather than as library function references. Thus, to be successful in transmitting a user program in both directions in *ascii* mode, all libraries which it references must be attached during both sending and receiving; OTOH, there is no problem when using *binary* transfer (except that you can't then read or edit the program on your computer). If after binary transfer you see XLIB ... ... displayed in the program, just attach the library(ies) you need and then proceed; the program will work once the library(ies) are attached. -- A new unofficial update (Service Pack 9) of Emu48 is available at http://privat.swol.de/ChristophGiesselink for download. It based on the original Emu48 V1.0 and solve several problems and add many new features. Changes to SP8: - many bugfixes in the emulation part (Port2, MMU, ...) This is a bugfix version only. I hope that most of the emulation bugs are fixed now. Examples of now running programs: - graphic editor of the Metakernel (key autorepeat) - Julien Meyer's ZELDAHP demo (except grayscale) Sorry for all 4MB card users, the Invalid Card Data message at power up or restart is emulated as well now (now Emu48 behave like an original GX). If this is true ( globally/spiritually true ): Anyway, one could define + to be *compiled* differently within an algebraic than in an RPL program (just as some algebraic functions actually are, e.g. XROOT, because of argument order), but I tend to go along with the idea that to make a function act fundamentally differently when part of an algebraic than when part of an RPL program could be confusing, particularly after HP declared in the AUR and in the to be completely equivalent. ----------------------------:: o then: maybe RPN shouldn't consider + to mean Union in the Set Theory manner. they should have a separate U Union command/function which would be accessible via a shift + key...??? i would certainly like to believe that EVERYONE agrees that it's [wrong] ( morally and spiritually ) for + within an algebraic to be thought of as anything other than an arithmatic +... ??? ( !!! ) Anyone have any code to do a bitwise AND of two BINTS? I've been working on a code object to do this, but I figure I might not want to reinvent the wheel... Our ram cards do not have the shroud (do you mean the metal slide that covers the pins?) and we have used sold thousands of them in the past year with less trouble than we used to have with the slide type. While the ram card is in the calculator, this slide is not covering the pins. However, the slide does protect these pins from abrasion and static during transit. We use a protective case - I'm sure they use something similar. I've read previous postings recommending their cards, but I cannot personally vouch for them. Your discussion of the Cynox cards intrigued me so I took a trip over to Cynox homepage and found that they now offer the card either with or without the protected cover. http://www.cynox.de/start.htm ZZZ Do you know the great Frequently Asked Questions? http://www.engr.uvic.ca/~aschoorl/faq/ and the superb HP48 Software Archive? http://www.hpcalc.org to look for *old* HP48 postings see Some time ago, the following script was posted: #!/bin/sh # 48trans 1.0 # Permission is granted to freely use, distribute, and/or modify # this script for use on your system provided that credits to the # author are maintained. I am *NOT* responsible for anything bad # that might happen because of these scripts. It doesn't do anything # bad on my system, but it is not my fault if it does something bad # on your system! # Purpose: # Send and receive data to/from a HP48 (or X48 :-) using the xmodem # protocol. # Requirements: # You will need the programs 'sx' and 'rx' to use this # script. They are included in the package lrzsz (I use v. 0.12.14). # Go to http://ftpsearch.ntnu.no/ and do a case insensitive glob # search for 'lrzsz*' to obtain a copy of this package. # # You will will need read/write access to the device you are trying # to send/receive data to/from (which is pretty obvious :-). # Your HP48 IO parameters must be { 9600 0 0 1 3 0 }. # Usage: # * Uploading data from your computer to your HP48: # Assuming that your HP48 is connected to cua1(com2), type: # 48trans put filename /dev/cua1 # where 'filename' is the name of the file you want to send to # your HP48. # Now prepare your HP48 for the transfer: # - Enter a variable name on the stack # - [leftshift] [I/O] [NXT] # - Press [xrecv] # The transferred data is stored in the variable name you entered. # # * Downloading data from your HP48 to your computer: # Prepare your HP48 for the transfer: # - Enter the variable name you want to transfer on the stack # - [leftshift] [I/O] [NXT] # - Press [xsen] # Assuming that your HP48 is connected to cua1(com2), type: # 48trans get filename /dev/cua1 # The transfered variable is stored in 'filename' in your current # directory. FILE=$2 DEVICE=$3 HELPMSG=Usage: 48trans get/put file device case $# in 3) case $1 in put) (stty -evenp -cstopb cread clocal -crtscts -inpck -inlcr -icrnl igncr ixon ixoff -iuclc -ocrnl -onlcr -onocr -onlret 9600 echo -e n; ;; get) (stty -evenp -cstopb cread clocal -crtscts -inpck -inlcr -icrnl igncr ixon ixoff -iuclc -ocrnl -onlcr -onocr -onlret 9600 echo -e n; ;; *) echo $HELPMSG esac ;; *) echo $HELPMSG esac I didn't get any xmodem transfer working on my linux-box, but perhaps you have more luck! I used Fast FTP Search (http://ftp.ntnu.no/ftpsearch). I typed 'kermit.*gz' in the Search Field, chose 'Regular expression each' in the 'Search type' engine burped out quite a bunch of links. Look out there. did you tried the latest http://gaztelan.bi.ehu.es/~inigo/x48/x48-0.5.0.tar.gz http://www.hpcalc.org/pc/emulators/x48-050.tgz it supports load/save objects Don't try this. Com 2 and Com 4 share IRQ 3. Com 1 and Com 3 share IRQ 4. Putting your mouse on Com2 and modem on Com4 will cause them not to like each other. You need to have a null modem cable, which is a cable that has the transmit and receive pins (2 and 3) reversed. If you are not sure, haul out your VOM (volt-ohms meter) and check the pins. http://www.hpcalc.org/pc/programming/ hp48xgcc is a cross compiler by Alex Ramos. the problem is a missing 'stdio' lib to access HP48's hardware here is my FRF (French Francs) to EUR (Euros) converter (HP48GX Rel. P). I have created a CHANGE directory in { HOME}: { HOME CHANGE}. In this directory, I have created 3 VARs: - FRF: 1_? - EUR: 6.55957_FRF NOTE: CTS stands for CuSTom menu variable. 1_? stands for user unit. When I need to convert FRF to EUR, I make { HOME CHANGE } my current menu. Then I use the FRF and EUR units as standard HP48 unit. You just need to add a BEF (Belgian Francs) variable or to modify as following: - EUR: 1_? - BEF: 0.02478934205776_EUR - FRF: 0.152449_EUR I'm starting to work with sysRPL and I'm making a small program. Imagine that I'm already with troubles with it. I want the program to recall the flags that control the angle mode, store it, set to grad mode, make some calculations and finally restore the angle mode to the original. The interest is obvious: make the program use a specific angle mode in its calculations without interfering with the user settings. Can anyone help me making such a program. My attempts have completely failed. The following will work on individual system flags: If you have several flags you would like to modify it may be easier to recall the flags at the beginning of the program and then restore them at the end with the following: The usual way is to do RCLF (recall flags) keeping the result on the stack or storing it in a local variable, then at the end of the program put it last on the stack and do STOF (store flags). This restores all flags, system and user, to their status quo ante. This allows you to change any user or system flags during the program and restore them at the end to what they were before entering the program. The only thing that needed to be done to mine was simple cleaning to remove the suryup(sp) from the keyboard. This wasn't worth the cost. * Remove the batteries and any exterior covers. * With a small screw driver slide it under the aluminium keyboard cover. This will deform the cover so be as careful and reduce the amount of damage to a minimum. * Once the keyboard cover is off there will be a number of recessed pins that snap the back cover to the front. I drilled these out using a drill the save size as the exterior hole as a finger drill. I DID NOT USE A DRILL. The plastic is soft enough to get through. * Once these catches have been removed then the covers catches can be popped fairly easily. Still take care care. You will need these catches in good shape to reassemble the calculator. So, change to scientific notation, even temporarily; for example, the following program will temporarily re-display the stack in scientific notation; it will revert back to the previous display mode at the next keypress: Be sure that the hex address is exactly as shown, or else something untoward might happen. i think that it has to do with precision... if the 48 thinks that the number can be accurately displayed with zero's then it will do so in STD mode, but if the 'significant' digits leak out past the 12 digit limit, then it switches to SCI mode...for that number...??? this might help a little... ( assign this to a user key ) i have a more complicated program which displays the 'object' on 1: anyway you want on 1: for a few moments, and then reverts back to 'normal' display parameters... Here are 3 display routines that take an object on 1: and modifies it somehow and then pastes it back on the display in a new format in such a way that it's For viewing purposes only...! Takes an Object on 1: and converts it to SCI notation while leaving everything else on the stack in a pre-SCI format...! To escape, hit any key, and that will return the object on 1: to it's former state...! << RCLF OVER 4 SCI 1: @ 20 Spaces 1 22 4 PICK SIZE - LCD215 { # 0d # 46d } WAIT DROP STOF -------------------------------------------: << fraction as an integer fraction. Before: 3: 123 2: Bite me 1: 2.25 After 3: 123 2: Bite me 1: 2 1/4 << << STD DUP IP - SUB + -------------------------------------------: << The general solution. Takes 2 objects; The object to be acted on, And the modifing function or program. 2: object << RCLF 3 PICK ROT 1: @ 20 Spaces 1 22 4 PICK SIZE - IFERR 0 WAIT THEN END DROP STOF User flag 56 controls this behaviour - however it isn't in the STK screen as we didn't feel it warranted going to multiple pages or implementing scrolling. So, to disable commas you can just do: 56 CF - well i saw the key word USER...so for anyone else who missed it, it is the USER FLAG and NOT the normal system flags that control the calculator that needs to be will not work well... When I want transfer some files I reboot my computer in MS-DOS safe mode, disconnect my mouse and run Kermit using COM1... I know that my COM4 (in Win95b) works because I can make direct cable connection using it... my homepage moved from http://www.cyberline.de/kkgbr to http://www.uuhome.de/oklotz Well if you already can receive files from your HP, you can just start the server under kermit and then send all the files you want from the HP, without having to bother anymore about the kermit. Maybe you could tell me how to setup colubia kermit under linux, cos I can't get a connection to my hp48 (So many options!). My .mykermrc looks this way: set delay 1 set dial display on set window 5 set block 3 set receive packet-length 1000 set send pack 1000 set file type bin set file name lit set modem hayes set terminal apc off set server display on getting files from the HP: kermit -C set line /dev/ttyS2, set speed 9600, receive, exit sending files to the HP: kermit -C set line /dev/ttyS2, set speed 9600, send $1, exit kermit server mode: kermit -C set line /dev/ttyS2, set speed 9600, server, exit Of course, you have to change /dev/ttyS2 to match the right com-port. The correct IOPAR on the HP is 9600,0,1,1,3,3 This should be enough to get things up and running. Try running the kermit software in server mode and send the files from the HP rather than get them from the HP. This is how I used to do it. You can even write a user rpl program to send the HP directories that you want to backup with the push of one button. information about the Saturn Processor, mnemonics, and the keyboard of HP48G. My guess is that the HP uses its root solver to find eigen values. If I remember my diffeq correctly, then eigen values are the roots of the charateristic equation to differential equation. For systems of diffeqs, I would say that is uses its matrix inversion routine to solve for the eigen vectors. I am not sure which numerical method its uses, but my best guess would be Newton-Raphson or some variant. On the other hand, when I took Stat in grad school, the prof said that we could roll in any text, textbook or IBM 370 if we wanted, and it, by itself, of the writer.) It's like prepping for the SAT - by learning to make full utilization of the HP48 in high school you are opening yourself up to all the wonderful intricacies of math and logic (is that philosophy or math?). In fact, you will find yourself better prepped to do intuitive excercises because of the library you've built in your mind. I have a problem on: Numeric diff solving with matrix. The thing is that on the hp48 there are a numeric diff solver, that solve numerically diff equation of the form of: y'= f(y,t) And it works on matrix too, look on section 19. The declaration in this is only f(y,t) as matrix form to one order diff. My problem is now: I want to solve a diff matrix problem of the form of: = _ _ = _ C*y' = W(t) - G*y = = Were the C G is sq-matrix, and the rest is vectors. ! I cant jest inverse C and multiply it with the right size, cause the C-matrix are under defined, and by definition does not have any inverse or determinant. The equation is a equation from the circuit simulation program 'Csim'. Were C-matrix is the representation of component that depends of j*w, like condensators inductans and mutual things. And the G-matrix is the representation of resistive components, like R and S. And the W-vektor is voltage. A solution of a 'AC' problem looks like this: _ _ = = y = W/(G+j*w*C) ( my quest is not about this, it's about the 'transient'-analyse that need diff solving ) Some examples of matrix is here: W=[[ 0 ] [ 0 ] [ 0 ] [ 0 ] [ 0 ] [ -1 ]] C=[[ 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 ] [ 0 0 0 .0000001 -.0000001 0 ] [ 0 0 0 -.0000001 .0000001 0 ] [ 0 0 0 0 0 0 ]] G=[[ .1 0 0 0 0 -1 ] [ 0 .01 0 -.01 0 1 ] [ 0 0 .002 0 0 0 ] [ 0 -.01 0 .01 0 0 ] [ 0 0 5.E499 -5.E499 0 0 ] [ 1 -1 0 0 0 0 ]] I have made a program were i can choose between different numeric diff solve algorithms. I choose between Eulers, trapezoide, Runge-kutta and the two different methods the hp48 calculator have inbuilt ( what ever they is based on ). and its a small bug in the attachment of it, type 1040 ATTACH, for properly use. I wonder how the built in numeric solver takes something called Absolute error tolerance how in the heck can it figure out the error of the answer? All of them support solutions with matrix, so i thought that i have made a good play-ground to se what algorithm is best later on. BUT it didn't work with the Csim program. the author of Csim claims in his documentation, the he implemented the transient analyze on only 15 minutes!! So i thought i could make a better job. But i have definitely tried to over come this problem more than 15 minutes! And i can't do it... The Csim program solves it's diff with the following algorithm: _ = = = _ _ y.n+1 = (C+Delta*G)^-1 * ( C*y.n + Delta*W.n+1) { with euler algorithm } And _ = = = = _ y.n+1 = (C+(Delta/2)*G)^-1 * ((C+(Delta/2)*G)*y.n + _ _ (Delta/2)*(W.n+1+W.n)) { with trapezoideal algorithm } Yea well i can't chow all the steps to prove it here now, but it is in the author of Csim Per Stenbius documentation. you find it here: http://www.aplac.hut.fi/publications/ct-11/main.html The question was agen: How can i solve this differential equation numerically, = _ _ = _ C*y' = W(t) - G*y on the hp48, and the C matrix is under defined. And how can the hp48 check Absolute error tolerans that i need to specify in the diff solver? ( way not only the step ?) someone (?) mentioned the other day that this Board was not as exciting as so... without deviating too very much from the topicalness of the HP48...i would like to propose that people start posting more 'problems' that they're having that they hope to solve with the HP48. so that the new set of problems will be for the '48, and not so much about the '48...??? -------------- < First two problems: 1) i was asking awhile ago about a program or technique, or process or approach to solving a spiral... i got several 'starts' to this, but i never got around to finishing it... what i would like is a program in which you could input 2: The angle of the spiral 0 = circle or singularity at 0 radius 1: Desired length from center center would always be (0,0) So that the program would then return the (x,y) of where the spiral would be after extending outward along the spiral path for, say; 22 units...??? ??? 2) the other thing that i got hung up on awhile ago was a tube maker for my Perspectivator Directory... this always seemed like a very simple problem, and yet... the input would be a list of [ x y z ] coordinates that would define a path or string in 3D space... and the number of sides to the final rope...??? 2: { [ x y z ] [ x y z ] [ x y z ] ... } 1: sides the sides would be 4 if you wanted the final rope to look like a stretched out box...???...or 12, if you wanted it look more roundish...??? the output would then be; 2: All the [ x y z ] coordinates for all the polyhedra, which would probably be rectangles. 1: All the rectangles, defined so that they refer to the coordinates in list 2: using this approach... a cube would be: 2: { [ -1 1 1 ] [ 1 1 1 ] [ 1 1 -1 ] [ -1 1 -1 ] [ -1 -1 1 ] [ 1 -1 1 ] [ 1 -1 -1 ] [ -1 -1 -1 ] } 1: { { 1 2 3 4 } { 1 5 6 2 } { 2 6 7 3 } { 3 7 8 4 } { 4 8 5 1 } { 5 8 7 6 } } all the rectangle ( squares ) should also be defined so that they occur/appear counter-clockwise from the center so that the hidden line removal technigue &/or play-shadows may be applied to the final object ( rope in this case )...! thanx... what i would like to see are problems having to do with number theory, number series, perspective, geometry... or something completely different...!!! yes, I agree that there should be an increased focus on specfic problem solving for HP calculators, however, I'm an old HP-28S user recently becoming a power-user with no intention of upgrading to a 48 series until my calc breaks. The HP-28S is a mighty powerful younger brother to the 48 series. The Hp-28S was discontinued in 1993 with the introduction of the HP48G. Loyal HP-28S power users still out there are especially welcome. -----------------------:: o whether you're using a 28 or a 48 is 'almost' irrelevant' as they both ( naked calcs ) speak essentially the same language. so that problems that are intended for one, would be easily converted to the other... (?) ( mostly ) and then: actually--the 28S was replaced by the 48SX, the G came much later, after the GX. And finally...have you even tried fooling around on a 48...??? i loved my 28 dearly, and could kick myself for giving away my 28C...but after i got my 48, i can't stand even touching the old 28...it is just so amazingly clumbersome to use...!!! there are a couple of things that i liked about the 28, like the menu arrangements...i still have a very hard time finding things on the 48, if i don't already know where they are...i often resort to looking up the spelling of various functions in the pocket guide after searching for them in the menu trees...!!! but all in all...the 48 has a much easier to use interface which is considerably more valuable than the bigger screen or larger memory...! try one...you'll ( almost certianly ) like it...!!! The thing is that on the hp48 there are a numeric diff solver, that solve numerically diff equation of the form of: y'= f(y,t) And it works on matrix too, look on section 19. The declaration in this is only f(y,t) as matrix form to one order diff. My problem is now: I want to solve a diff matrix problem of the form of: = _ _ = _ C*y' = W(t) - G*y = = Were the C G is sq-matrix, and the rest is vectors. ! I cant jest inverse C and multiply it with the right size, cause the C-matrix are under defined, and by definition does not have any inverse or determinant. The equation is a equation from the circuit simulation program 'Csim'. Were C-matrix is the representation of component that depends of j*w, like condensators inductans and mutual things. And the G-matrix is the representation of resistive components, like R and S. And the W-vektor is voltage. A solution of a 'AC' problem looks like this: _ _ = = y = W/(G+j*w*C) ( my quest is not about this, it's about the 'transient'-analyse that need diff solving ) Some examples of matrix is here: W=[[ 0 ] [ 0 ] [ 0 ] [ 0 ] [ 0 ] [ -1 ]] C=[[ 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 ] [ 0 0 0 .0000001 -.0000001 0 ] [ 0 0 0 -.0000001 .0000001 0 ] [ 0 0 0 0 0 0 ]] G=[[ .1 0 0 0 0 -1 ] [ 0 .01 0 -.01 0 1 ] [ 0 0 .002 0 0 0 ] [ 0 -.01 0 .01 0 0 ] [ 0 0 5.E499 -5.E499 0 0 ] [ 1 -1 0 0 0 0 ]] I have made a program were i can choose between different numeric diff solve algorithms. I choose between Eulers, trapezoide, Runge-kutta and the two different methods the hp48 calculator have inbuilt ( what ever they is based on ). and its a small bug in the attachment of it, type 1040 ATTACH, for properly use. I wonder how the built in numeric solver takes something called Absolute error tolerance how in the heck can it figure out the error of the answer? All of them support solutions with matrix, so i thought that i have made a good play-ground to se what algorithm is best later on. BUT it didn't work with the Csim program. the author of Csim claims in his documentation, the he implemented the transient analyze on only 15 minutes!! So i thought i could make a better job. But i have definitely tried to over come this problem more than 15 minutes! And i can't do it... The Csim program solves it's diff with the following algorithm: _ = = = _ _ y.n+1 = (C+Delta*G)^-1 * ( C*y.n + Delta*W.n+1) { with euler algorithm } And _ = = = = _ y.n+1 = (C+(Delta/2)*G)^-1 * ((C+(Delta/2)*G)*y.n + _ _ (Delta/2)*(W.n+1+W.n)) { with trapezoideal algorithm } Yea well i can't chow all the steps to prove it here now, but it is in the author of Csim Per Stenbius documentation. you find it here: http://www.aplac.hut.fi/publications/ct-11/main.html The question was agen: How can i solve this differential equation numerically, = _ _ = _ C*y' = W(t) - G*y on the hp48, and the C matrix is under defined. And how can the hp48 check Absolute error tolerans that i need to specify in the diff solver? ( way not only the step ?) Any help or comments are wery welcome!! Is there any way to defeat the following bug: In Java37b4 bringing a line higher than level 1 into the standard HP editor crashes the calculator and deletes the stack. Bringing a matrix higher than level 1 into the HP matrix editor crashes the calculator hard and deletes all the memory. Just go to: http://www.chez.com/sunhp http://studwww.eurecom.fr/~grundsch/ramcard.html when everything is set up for transfer, you just have to type 'server' in the kermit. You can put all youroptions in a '~/.kermrc' (~ is a shortcut for your HOME directory). You can create the file with any text-editor (ASCII only). Mine contains the following: set line /dev/ttyp2 set file type binary set speed 9600 and that's all. The 'set line /dev/ttyp2' command usually doesn't work, because the line is set by x48 when it starts, and it depends on the number of pseudo-terminals (xterm or other) that you have on your screen. As you surely know, the line that x48 uses is written as 'wire: /dev/ttyp*' just under the screen. Today in math I experienced an extremely unusual circumstance. While working with exponents in my Algerbra 2 (Alg 3,4) I performed the following operation (-8)^(2/3) This problem yielded an imaginary number (-2,3.46410161514) when the answer should have been 4. (Did it the long way (-8)^2 = 64^(1/3)=4) I checked the back of the book and the book agreed with the answer of 4. I consulted a person in front of me who used a Carpio, oops I mean a Casio :-) and they also got the same imaginary number. Can some one please explain why this occurs and how to circumvent this problem. One other thing, this bulliton board's trafic seems to have significantly decreased fractional exponent of a negative number because it calculates the fraction first, so what you are trying to do is calculate -8 to the .666666666667 power. Casio and HP have complex number functions that let them calculate the primary answer for these problems, which is why you get the (actually one of the) correct response from these calcs! If you want the cube root of -8 squared, you should try (-8^2)^(1/3) or something of that nature :) ere is a old story I was 17 when I bought my CPC, 1989. I bought my first '48 hm.. three years later ? There was no serial connection with the CPC, just a parallel port with missing 8th bit (THANX, Amstrad) There was a small HOWTO_get_data_from_CPC_to_PC in germans most popular magazin c't (http://www.heise.de/ct/). Remember: the CPC used 3 discs( THANKS again, Amstrad to be three weeks faster than IBM in setting standards). A simple serial interface by sending through data pin 1 and receiving with the busy signal ;) i tried to connect my HP that way. I remember a long night playing around with the wait&send loop on the CPC and on the HP, until i got fitting values. Ok, here is the source for the '48. Just wait, read the right pin, write into a string ( DIR gave me the amount of blocks to send). And so on. What speed did i reach ? ( Recv19k2 ) :: CK1NOLASTWD :: CK&DISPATCH0 # 1 COERCE # B ; BINT80h OVER#< ?SKIP :: BINT80h #* ; DUP #+ NULL$ SWAP EXPAND CODE GOSBVL =SAVPTR P= 0 GOSBVL =GetStrLenStk C=C-1 A D=C A D0=(5) =IOC LC(1) 8 DAT0=C P LoopIt LC(3) #1FF OUT=C GOSBVL =CINRTN ?CBIT=1 15 GOYES Exit D0=(5) =RCS C=DAT0 1 ?CBIT=0 0 GOYES LoopIt D0=(5) =RBR C=DAT0 B DAT1=C B D1=D1+ 2 D=D-1 A GONC LoopIt Exit GOVLNG =GETPTRLOOP ENDCODE ; While working with exponents in my Algerbra 2 (Alg 3,4) I performed the following operation (-8)^(2/3) This problem yielded an imaginary number (-2,3.46410161514) when the answer should have been 4. (Did it the long way (-8)^2 = 64^(1/3)=4) ---------------------------------:: o This sort of thing is outside of the way my brain normally works... but... i was fooling around this a little, and noticed that the Absolute ABS of ( -2, 3.46410151514 ) is 4. which means that it's 4 units from (0, 0) as the parakeet flys. so that i would guess, that, the 48 provides you with the really real solution in 2 dimensions, to account for the negativity factor, but 4 is the correct answer for 1 dimension ( 1 axes ) (?). ??? You could just do ABS to get a real final result, *if* the result should be positive, but some real results should in fact be negative, e.g. -32 '3/5' ^ should be -8 But as you point out, if you are more interested in the magnitude, and don't care much about the sign, you can simply do ^ ABS Hmm.. Is there any definite relationship between the ARG of the complex result and what the final sign of a real result should be? Y'all try this as a MC or something; my brain's too fried just now. Here is a simplistic program for obtaining a real answer from the ^ function, when the power is a fraction which is the quotient of small integers: But wouldn't you know it, if the power (level 1 argument) is negative, the above program fails, because, e.g. If the power is a negative fraction, it's even worse: (in this case, we *still* have a fractional power!) Oh, well; please update your program to fix the above: 1 == -1 IFT ROT ROT DUP TYPE { XPOW } { ^ } IFTE Please make sure that the program name within the program itself agrees with the name under which this program is stored (i.e. the program may recursively call itself). Now it works better, e.g. Well, it sure is a good thing that this didn't get into a new ROM version before we fixed it! :) After problem 2 (25 jan), here's: Problem 4: 3000 To 13 significant digits, what is the coefficient of X in the expansion of: 2000 2 1000 4 3 2 500 (x+1) (x +x+1) (x +x +x +x+1) 500 This is equivalent to calculating P, with P: 4 2 2 4 3 2 (x + 1) (x + x + 1) (x + x + x + x + 1) We'll need a program to multiply two polynomials, here it is: Again, I will use the fact that: . dot products are inherently more accurate than repeated addition, since a dot product is executed in long precision; . matrix multiply (*) is much faster than DOT @-------------------------------------------------- @ PMUL @ @ multiply two polynomials @ @ In : Pn Pm @ Out: Pnm @ @ A polynomial is given by a vector of its @ coefficients, with the coefficient of the highest @ order in first position @ @ bytes: 410.5 @ check: #F8824h @-------------------------------------------------- << OVER SIZE EVAL @ get sizes OVER SIZE EVAL IF DUP2 < THEN @ order SWAP ROT 4 ROLLD END ROT ROT DUP2 + 1 - @ get N+M-1 OVER 1 - @ M-1 << IF M1 THEN 1 M1 FOR I PM M I - 1 + M SUB PN 1 I SUB * 1 GET NEXT 1 NM M1 DUP + - FOR I PM PN I DUP M1 + SUB * 1 GET NEXT 1 M1 FOR I PM 1 M I - SUB PN N M1 - I + N SUB * 1 GET NEXT ELSE PN PM 1 GET * END In our case, the polynomials are symmetric, and the program can be simplified (and speeded up): @-------------------------------------------------- @ SPML @ @ Multiply symmetric polynomials @ In : SPn SPm @ Out: SPnm @ @ bytes: 364.0 @ check: #7F37h @-------------------------------------------------- << OVER SIZE EVAL @ get sizes OVER SIZE EVAL IF DUP2 < THEN @ order SWAP ROT 4 ROLLD END DUP2 + 1 - @ get N+M-1 OVER 1 - @ M-1 OVER 2 / CEIL @ (N+M)/2 << IF M1 THEN 1 M1 FOR I PM M I - 1 + M SUB PN 1 I SUB * 1 GET NEXT 1 NM2 M1 - FOR I PM PN I DUP M1 + SUB * 1 GET NEXT IF NM 2 MOD THEN TAIL END ELSE PN PM 1 GET * END Using three times with P1 = [ 1 7 24 54 90 119 130 119 90 54 24 7 1 ] (which is P, calculated with PSML) we arrive at P125 in about a half hour. To calculate P250, I freed up my memory and removed the 'make full P' part, as it is not necessary. I divided P125 by 10^250 to avoid overflow. The calculation took 62 minutes. To get the coefficient of X3000, it is sufficient to take the DOT product of the resulting 1501-element vector with itself, multiply by two and subtracting X[1501]^2 - as can easily be seen if you multiply a symmetric polynomial of degree 3, for instance, with itself and want to determine the coefficient of the result's middle term. The result (after multiplying by 1e1000 to account for the previous scaling): 3.97394226543e1426 Obviously not correct to within 13 digits, but that would be kind of hard if you only work with 12. TI92 answer : 3.9739422655849e1426 PS. The PMUL routine as presented here, while written in plain RPL, will outperform any other similar routine I have been able to test (Eric your server is down!) for sufficiently large polynomials. Of course, it accepts only arrays, no lists/symbolics.. programs compared: PMUL by WH (RPL) - Werner Huysegoms PMUL by MH (SYS) - Mika Heiskanen, from arit.lib and polylib.lib ( with flag 5 clear) PMUL by WHS (RPL) - Wayne H. Scott, from poly.zip PMUL by WH8 (SYS) - Wayne H. Scott, from poly8.lib PMULT by DNF (RPL) - Dang Ngoc Francois P1 = { 1 7 24 54 90 119 130 119 90 54 24 7 1 } P2 = P1*P1, degree 24 P5 = P2*P2*P1, of degree 60 timings in secs P1 P2 P5 WH 5.72 12.75 39.34 MH 3.21 12.04 88.85 WHS 8.09 31.82 200.10 WH8 3.42 13.47 121.00 DNF 21.80 105.00 853.00 PPS. You don't think I'm crazy enough to sit and wait x hours for some program to finish? Emu48 is 10.4 times faster than the real thing on my PC, but since other stuff runs at the same time, the timings may be off by a few percent.. to 11 sig digits in about 1 (ONE) hour. The result posted for the 512x512 matrix as posted on the TI site is wrong, it should be: 1.18114088216e781 obtained in a bit more than 4 hours. Werner Huysegoms remove the x before replying I was told recently that the 48G uses the Motorola 68000 processor which is the same processor used in the old Mac SE computers. Is this true? It's the TI-89 that uses the M68K. Nope. The HP48G/GX uses a Saturn cpu that was designed by HP. The TI-89 and the TI-92 do use the Motorola 68000 cpu. That cpu is no longer used in the Mac. I think the last Macs with Motorola cpu's used the 68040 or maybe 68050. But they stopped making Macs with Motorola cpu's a few years ago, I think. The very first Macs used the 68000. That was around 1982 I think. They moved in a year or 2 to the faster cpu's. However, the 68000 is a good cpu and gives a lot of power for a calculator. That should make the TI's much faster than the HP, but since the programming isn't as good, some features are faster and some are slower. There's general agreement on the HP48 newgroup, I think, that the HP48 is a little faster for the things people do most. There's also general agreement on the everything many times faster than the HP. :) That's the difference in asking the TI students, and asking the HP programmers and engineers. HP people are much more subtle in our comparisons and inevitable conclusions. Barry Barry ...There's also general agreement on the I have both the TI-89 and the HP48GX. For certain symbolic computations, the TI is superior. However, for almost all numeric computations and matrices, the HP48, (despite being almost a decade older than the TI) is clearly superior. I find myself in a strange never-never land of using a TI to help me learn how to do certain symbolic computations by hand, yet for everything else I use my HP48. Numeric RPN computations on the HP48 are just as fast as on the TI-89. Hardly a day goes by that I don't deeply wish for the new HP to come out, that will just blow all the TIs away... - J.C. Randerson The PowerPC series are a Motorola CPU (including the fantastic G3). Also, the first mac was released in 1984. Amiga and Atari released a computer based on the 68000 cpu in 1986 and 1987. Also, the Mac classic, released in the early 1990 used a 68000 CPU.. You also find a 68000 in every Playstation ! (to control the joystick). It's an excellent CPU, fast, lot of registers (32 bits). It's a shame to see how slow is the TI89/92 with such a good cpu... What a waste of @#$@# programming the No, an IBM CPU: IBM PowerPC I have my first PowerMac home, and if you look at it, there's a blue Want a digital pic of it? It's quite beautiful ;)) You also find a 68000 in every Playstation ! (to control the joystick). The worst thing about your messages is that they all can be construed into hints about the next calc's design :-) AAAAAAUUUUUUUUUGGGGGGGGGGGGHHHHHHHHHHHHH... I visited the www.hpcalc.org and I found some fonts (.fnt) that are grobs . I want to use these fonts in my programs How can I do this ? Can I use these fonts with UFL ? I just recently moved to Budapest, Hungary to do a study abroad program in mathematics. While still in the US I remember that there were many HP48 accessories distributors in Europe. I was wondering if anyone knew of a good place in Budapest to get cheap ram cards... I would normally consider credit card purchases, but package delivery to my address takes quite a while (e.g. I sent some boxes to my Budapest address in mid-December and just now received them :) I have a Cassiopeia E-10 palm pc running Windows CE that I would like to use to backup my HP. I was wondering if anyone could give me information on how to use the IR ports to communicate. I have used the HP IR port to connect to a desktop before but I can't seem to get this to work. Any help would be appreciated. Since a few days I'm using an HP48 GX. I'm heavily using the formula editor. My formulas do have lower and upper case letters as variables (e.g. J, j). The problem that I'm now facing is that I can type lower case letters in the editor. However, if I later switch to the solver the only letters that are shown are just upper case letters for the variables (J,J), which might lead to confusion or makes it impossible to identfy which variable is meant by which letter. Is there any advise that somebody can give me. Is this a known problem or is it something that I need to do to change this? Any help is appreciated. Thx thx again Renata editor. j). the is METHOD #1: On the G/GX, press right-shift down-arrow. On the S/SX, press left-shift down-arrow. This displays the variables and their contents in menu order, with upper and lower case clearly visible, and you can thus discern which menu key stands for which variable. METHOD #2: Specify the desired order of your variables. For example, if you have 'J+j=5' in EQ (which would put J and j in the menu in that order) but you prefer to have j before J in the menu, then store { 'J+j=5' { j J } } into EQ. The list specifies the order. You can customize the menu in other nifty ways too; check your manual. Hope this helps! -Joe- editor. j). the is HPSauce, a stack replacement program, is well suited for this. It has four different versions, according to what you need and how much space you have available. I know for sure the biggest version (9.7K) will change the menu labels so that lower case letters are differentiated from upper case. The program documentation will tell you more. More stack replacement programs at http://www.hpcalc.org/utils/stack/default.html the menu labels can only display uppercase letters! So the only solution is to only use uppercase letters or only to use lowercase letters which have no uppercase counterparts. BTW in programming the HP48 lowercase letters are by convention reserved for local variables (formulas are sort of programming aren't they :-)) CU TB Unless you use a good stack-replacement :-) There are several of these, you'd best check out the FAQ Don't see it in here but I ran across this in my wanderings. Hope it helps. http://www.hp.com/calculators/service/y2k.html Mac post... Therefore, the picture you can get here is quite innacurate on how exactly is the HP48... Who will post: I've bought an HP48 9 years ago, and unfortunately nothing bad happened... I've tried not to use it properly and everytime it has displayed the correct error message... Worst of all, last time I wanted to do a matrix operation and I got the expected answer.. Please help me, is there anything I can do to change the behavior ? Before I used to have a TI calculator and I've never been in such situation. our pain.. That is true, however, the HP48 does have a bad screen. I have seen soooooooooo many reports of the blue blur, missing columns...... being reported on the HP48. I have yet to hear any about the TI's, Palm's or any minature device that uses an LCD. I'm a TI85 (although I also have a HP48) user since 6-7 years and the LCD does get screwed up. I almost can't see (actually I CAN'T see) 2 lines in the screen. Well now you've heard something about a TI's screen :) =============== ABSOLUT JOOLIO =============== reported exactly happened... correct situation. our Matrix writer in the HP48. I am looking for something that is similar to the HP48 Matrix writer but can handle symbolics. Not really. The best I've seen is AI048 and I'd rather write matrices by hand. I like AOI48. It's available at the usual place. Dave Zelkowski Could somebody give my a little push in the right direction and help me out with this. I have translated the ? from Swedish to English and used Clinton and Lewinsky instead of the Greek letters. If there is a good harted Swede out there you can read the jpg. This is standard engineering book kosan---- ãThe cowä P=(x, y) and Pâ=(xâ,yâ) have the same distance r from origo O in the direction angels as ä Clintonä and ä Clinton + Lewinsky ä (m a p positive äLewinskyä around O. Express x,y,xâ ond yâ in r, äLewinskyä and ä Clintonä and extrapolate them step by step using there similarities in a coordinate system with there development around origo. xâ=x cos äLewinskyä öy sin äLewinskyä { yâ=x sin äLewinskyä +y cos äLewinsky ---- The Unified Field Theory In the beginning, there was Aristotle, And objects at rest tended to remain at rest. And objects in motion tended to come to rest. And soon everything was at rest, And God saw that it was boring. Then God created Newton, And objects at rest tended to remain at rest, But objects in motion tended to remain in motion. And energy was conserved. And momentum was conserved. And matter was conserved, And God saw that it was conservative. Then God created Einstein, And everything was relative. And fast things became short, And straight things became curved. And the universe was filled with inertial frames. And God saw that it was relatively general, But some of it was specially relative. Then God created Planck, And there was the principle. And the principle was quantum. And all things were quantified, But some things were still relative. And God saw that it was confusing. Then God was going to create Furgeson, And Furgeson would have unified. And he would have fielded a theory. And all would have been one, But it was the seventh day, And God rested. And objects at rest tend to remain at rest. I've never traded in my old HP-28S for the new 48's that came out in 1993. I'm too comfortable with it to ever trade up until it breaks, however, HP has not and will not conduct any tests on the 28S to determine if it's Y2K complient. Also there's nothing on HP's web site covering the 28. All support terminates 5 years after a calc is discontinued. If anyone could help me out that would be great!!! I plan on programming a clock program for it to determine if it's capable of rolling over past 2000. I think the 28S *should* be Y2K compliant, since I believe the real-time clock is just an elapsed time counter, keeping track of the amount of time since the batteries were put in or the last system halt. Any program which uses the real-time clock to calculate the date and manipulates dates in 4 digit format should work fine. I haven't tested this, but in theory it should work. The HP28S built-in clock-calendar has a 100-year range, either from 1989-2088 or from 1991-2090, depending on which ROM version you have (rev J and all G-series had their 100-year window advanced by two years). Any two-digit year displays or inputs automatically correspond to whichever calendar year lies within the given range; in fact, at least in the G-series, with the input forms, even when you input a 4-digit year (to set an alarm or a date) only the last two digits are used, and those digits are then made to correspond with a year within this range, causing confusion to people who thought that they could set the calendar to their birth date, for example, but then found that it seemed to come out to the wrong day of the week (because the calc took the year to be in the next century instead). As to date arithmetic (DATE+ and DDAYS), the range of input/output dates remains the same: 1582/10/15 thru 9999/12/31 (so any HP48 buried in a time capsule may have a Y10K problem :) I am a little shocked to see how many very late-model products and systems do not seem to have thought of the world lasting beyond 1999. It's also amusing to read web sites of companies having to declare their systems non-compliant for such trivial matters as that they might print the wrong date on a printout cover sheet, or in one case that the battery replacement date for a UPS (uninterruptible power supply) might appear by mistake in red on a screen instead of blue, so you'll need to download a free software upgrade to fix this tragic error. The whole affair seems to be a very great boon to the legal industry, however, and to many other folks who are making a fine career opportunity out of it. Microsoft seems to be so paranoid that they have declared MS Access 2.0 non-compliant just because if you enter a year as only two digits, e.g. 1/1/00, then the input parser will take it to be 1900 (you can always type 1/1/2000, however), whereas in fact their date/time data type can actually store any date from year 100 to year 9999; well, don't miss a good sales opportunity to scare people into buying all new software every two years, I guess. [possibly mistaken stuff about HP28S deleted] Oops! The fog must have rolled in, since I didn't notice that it said HP28S, rather than HP48S. I can't even cancel the answer (either Netscape or the which may be a result of my different reply to address). Anyway, it would be most surprising if the HP28S didn't have a very similar functionality, except for the exact range of dates, but as you said, you can find out quite readily just by the experiment of trying to set the current date; sooner or later, you will come to a year which you can't set as the current date, and that's what will be the end of the calendar span. If it doesn't go well past 2000, I'll stop buying HP products entirely! Has anyone heard what will be the replacement calculator for the HP 48 GX ? It seems that Texas Instruments may be surpassing HP in the calculator business. All HP enthusiasts are eagerly awaiting the arrival of the new HP machine. There is no official information, only rumours. There was a rumour coming from someone within HP that the next HP would have a 190 MHz processor, who thought it would be a great joke. As improbable as it sounded, I wanted to believe it, and bit hard on that baited hook. - I learned my lesson on that one! I believe nothing on a new HP machine it until I pay for it, put the batteries in, and fire it up! - J.C. Randerson ------------- yea right..TI surpassing the hp48..not going to happen...consider that the hp48 is reinvented each time you download a new program for it or operating environment like java and there are many very useful hp48 tools for many real life uses in industry....when was the last time you saw a serious engineering major 'go wait a minute let me push in a whole bunch of numbers into my nonflexible TI ' while the undergrad just uses his hp48 and then gets a coke and a candy bar for himself while the TI crowd is still slaving away at the abacus... the only upgrade i would like is increased resolution in the display...i've tried to think how to do it better electronically but there is nothing that i cant program what i don't like.... While I agree the HP is the best thing out there, that doesn't mean it couldn't stand some improvement. A faster processor is easy enough to do these days (cpu speeds go up exponentially, the hp's current one is several orders of magnitude less than it could be today), and more memory could be had pretty cheaply as well. Built in rom support for erable level symbolic calculus and alg48 level algebra, as well as a symbolic stack could do wonders for those who don't know how to upload to the calculator, and would raise the bar for addons, making new programs extend the operations even farther. A higher resolution screen would ease reading and useage in general, and many of the inputs (esp matrix and equation) could be streamlined and sped up significantly. Right now when I'm working feverishly on the calculator, I sometimes have to wait for the calculator. The calculator should be waiting on me. (obviously there are exceptions...mathematica even takes a while to integrate sometimes) Ken While I agree the HP is the best thing out there, that doesn't mean it couldn't stand some improvement. A faster processor is easy enough to do these days (cpu speeds go up exponentially, the hp's current one is several orders of magnitude less than it could be today), and more memory could be had pretty cheaply as well. Built in rom support for erable level symbolic calculus and alg48 level algebra, as well as a symbolic stack could do wonders for those who don't know how to upload to the calculator, and would raise the bar for addons, making new programs extend the operations even farther. A higher resolution screen would ease reading and useage in general, and many of the inputs (esp matrix and equation) could be streamlined and sped up significantly. Right now when I'm working feverishly on the calculator, I sometimes have to wait for the calculator. The calculator should be waiting on me. (obviously there are exceptions...mathematica even takes a while to integrate sometimes) I agree the HP is the best thing out there, that doesn't mean it couldn't stand some improvement. A faster processor is easy enough to do these days (cpu speeds go up exponentially, the hp's current one is several orders of magnitude less than it could be today), and more memory could be had pretty cheaply as well. Built in rom support for erable level symbolic calculus and alg48 level algebra, as well as a symbolic stack could do wonders for those who don't know how to upload to the calculator, and would raise the bar for addons, making new programs extend the operations even farther. A higher resolution screen would ease reading and useage in general, and many of the inputs (esp matrix and equation) could be streamlined and sped up significantly. Right now when I'm working feverishly on the calculator, I sometimes have to wait for the calculator. The calculator should be waiting on me. (obviously there are exceptions...mathematica even takes a while to integrate sometimes) Ken Someone recently asked for quaternion-stuff, here's a first shot... You'll find a directory attached below, if it evolves into something of more interest I might bother to translate it in sRPL and LIBrarize it. But it's nothing much yet... USE : The quaternions are meant to be represented by lists of 4 elements, as to allow for some symbolic manipulation in some cases. Thus { a b c d } is simply 'a + bI + cJ + dK'. The operators QUPLUS, QUMINUS, QUMULT, QUDIV work on reals and quaternions as defined above, further argument checks are not made, but there is no risk involved if you feed the rubbish, you'll just get more of it, this is uRPL (what ease and joy to program :-) . The DIR also includes * QUINV which as you may guess finds the inverse of a quaternion * a couple of other simplistic things * a bonus QUEXP which returns (not symbolically) e^{a b c d} many improvements can be made, functions added, etc... I'm afraid this is for the G-series, I forgot about the S-series inability to do LIST-processing... I'll do better upon request... Not all functions need modification... MC : uRPL proggie to calculate LN(q) , COS(q) ... you name it :-) The other night, after dropping my HP while working on some homework, I realized just how vulnerable the LCD of my HP48 was. I took an old CD Jewel Case, and cut out a small piece of plastic to cover the LCD, and secured it with an elastic band. The elastic looked kinda cheesy, but at least my LCD was safe from scratches getting hit. I was just curious if any of you out there had your own ways of protecting your LCD's, or maybe some suggestions for me on how to better attach a piece of plastic to my HP to protect my LCD. That is a great idea. I thought of that one too. But the edges may look like crap from cutting it. Of course you could file those edges also to make it look good. What you could do is to make the plastic piece the exact dimensions of the screen cut-out. Seems as though something belongs there anyway. Another thing you could think of is the way the plastic slip covers the names and numbers on a cordless telephone. You could just get a thin and clear piece of hard plastic ( but bend able ) to put between the gap of the screen and the cover plate. Like I said, seems as though something belongs there anyway. Maybe HP was in such a big hurry to get it out there that they didn't care about that anyway; they left it to public engineers like ourselves. Please let me know if you use my idea so that I will know that it works. P.S. The good thing about the small slip of plastic is that you won't have to tear up your CD cases to have a cover; you could just bend the slip of plastic very easily and replace it fast. :-) Have an HP48 of a day!! I'm experiencing some trouble with the frontend while using EMU48 together with the script called jc (which announces itself as small but realistic HP48 on startup. I can't recall whether it comes with the original distribution or in one of the service packs). The buttons do not seem to coincide with the actual spots where one has to click with the mouse. I was able to fix this in the jc.kml script file. But there is still some annoying trouble: the annunciators seem to mess up the display and are only displayed as coloured patches, no symbols. Has anyone used that script and fixed it? The KML file is wrong. There are small working frontends on Casey Pattersons homepage at http://www.gulftel.com/~pattersc/win48/. I hope the URL is correct, but there must be a link from Sebastien Carliers homepage too. [...] Can anyone tell me how can I make a choosebox in SysRPL. I haven't found information on that. Another thing: how can I get the Jim Donnelly book for sysRPL in Europe. If possible near my country - Portugal. I imagine that ordering from the USA is very timeconsuming. Download the new version 2.4: http://over.to/hpcomm I decided to release another 2.x version, before the 3... Too many people had problems with the current version. the library xmodem31.zip found at www.hpcalc.org/utils/comms It works even faster than the built in XModem of the G-serie (about 6x faster than Kermit)!!! The next version will have a built in viewer for all kind of GROBs (including animations) and many more convenient improvements. If the first four levels of the stack look like this... 56 25 4 10 then what does a programme need to look like to change these arguments to look like this on level one of the stack? [ 56 25 4 10] Hope that works for 'ya. First put the number 4 on the stack. That's how many elements you have Dave Zelkowski Can anyone point me to web site (or other source) featuring a legible image of an HP-48GX keyboard? I use a commercial keyboard overlay that's not much fun to remove and replace, and on those infrequent occasions that I have to do something that requires access to the system utilities, I have to pry off the overlay to figure out which keys do what. The 48SX manual had a nice, full shot of the native keyboard on the cover of the owner's manual, but the 48GX has only a cropped shot that doesn't expose all they keys. And, unless I've missed something, there isn't a keyboard diagram in the manual, which makes accessing the native shifted keys difficult when using an overlay. (I know, I know, I could hand-draw a diagram, but I'm hoping to find a more elegant solution.) There are many excellent pictures of the HP48 here: http://www.hpcalc.org/pc/pictures/ -Joe- This | is not a pipe. -- Rene Magritte I am wanting to write a COGO program for the HP-48 which would involve storing coordinates of points. Could someone please inform me on the best way to store the points in a data file? How would the data file be constructed and accessed? Any help will be greatly appreciated... Chris cmnail@meta3.net Could someone please inform me on the best way to store the points in a data file? How would the data file be constructed and accessed? ---------------------:: o i can't help but think that someone is going to insist that you're going to have to load up some huge peripheral library to do this... while the easiest solution is to simply use the Matrix writer... open it up with rightshift ENTER then enter the first 2 or 3 axes for one coordinate, ENTER those, and hit the down {Q key} key... then thereafter, all the points will be arranged in sets of 2 or 3, depending on your initial input set. then when you're done, hit ENTER to move the Array to the stack... [[1 2] [3 4] ... ] if you want to change them to a list of (x,y) coordinates hmmmmmm...how to do this...??? DUP TAIL 0 + SWAP DUP SIZE 1 - 1 SWAP SUB is that it...does that work...??? I made a useful library that I would like some of you to try. It's basically a program manager with a lot of functions for better handling of files and data. It allows you to have different working directories where a file is kept with information on what programs were run in the directory, or what equations were used, or the name of the used data files, etc. The main routine prompts these names, and once we choose on it runs the program or opens up the file in the correct environment. Some of these environments are build-in environment, but some not. For example, one of them that I find very useful in my labs is the environment to work with data. It easily creates a file that has the entered data in form of a matrix, and name for each column of the matrix. Once the file is created, there are several functions to manipulate this data, like a much useful data fitting subroutine that the built-in one, or a command that creates a new column in the matrix with the new values as a function of any of the other columns. All this information is stored in the data file, and can be easily viewed. One important thing: there is also a routine to install programs so that they can be managed by the library (all the programs are stored in the HOME directory) and an uninstall routine too. It has many more useful functions so please if you are willing to try it, It would be very usefeul for mr if i could have other hp user's opinion. I have one problem with the EMU48 software. First I had dificulties with the correct romdump, then with the .bmp that wasn't in the right directorie. Then I tought everything should be right. Now I get the error: Under german Nt 4.0 : Dr.Watson f237r NT: Ein Anwendungsfehler ist aufgetreten. Ausnahme: Zugiffsverletzung (0x0000005), Adresse: 0x004195ff. Wich means something like: violation of memory-zone. I get something similar under win 95. cann someone say me, how to convert some lists like: {1 2 3} {2 3 4} {3 4 5} in a Matrix: [[1 2 3] [2 3 4] [3 4 5]] When you did this to all of them you just enter the number of columns you I already did it: << << 1 n FOR c NEXT You just have to put the number of lists you want to convert on the stack below the lists and EVAL the prog. it works one day but not the next day. Now,... all keys on the right row work the same way as the 'minus' key. Does anyone has the same problem ? Any solution ? Could this be just a contact problem ? Could this because of the wheather of oregon (rain a lot) ? == And here are my results, this introduction contains some very crucial errors. Here they are, hope this will help some of you out there. I'm referring to this manual in *.pdf format, so I can use page number: ***** page 86, chapter 52.2 string (asm program) ***** there is (about 17 lines from the bottom of the page 86) D1=D1+ 5 % pass the prologue and point to the % size nibbles C=DAT1 A % read size of string D=C A % and store it into D ***** there should be: D1=D1+ 5 % pass the prologue and point to the % size nibbles C=DAT1 A % read size of string C=C-5 A %remove its length ****************new line D=C A % and store it into D ***** ***** page 88 about 14 lines from the bottom of the page, ***** chapter 52.3 global name ***** there is CSRB A % and divide it per two, now Ca contains % number of characters inside the string R1=C A % save the number of chars into R1a C=C+7 A % add 7, with 5 nibbles for global name % prologue and 2 for the length field A=C A % put that number into Aa GOSBVL 039BE % this routine is called RES_ROOM, it allocates % Aa nibbles and produces an Insufficient Memory ***** there should be CSRB A % and divide it per two, now Ca contains % number of characters inside the string R1=C A % save the number of chars into R1a C=C+C A % multiply it per two as we need its size in nibbles**** new % to reserve memory ****lines C=C+7 A % add 7, with 5 nibbles for global name % prologue and 2 for the length field ---------- line removed, RES_ROOM takes size from Ca not Aa GOSBVL 039BE % this routine is called RES_ROOM, it allocates % !!!!!Ca!!!! nibbles and produces an Insufficient Memory ***** ***** page 89 chapter as above, the same program, 6 line from the top of ***** the page, there is C=C-1 B % remove one, if CARRY is set GOC PUSH % then string is empty, so push the empty global % name on stack C=C-1 B % remove 1 because we're going to use % a carry loop A=R0 A % recover string's address ***** there should be C=C-1 B % remove one, if CARRY is set GOC PUSH % then string is empty, so push the empty global % name on stack -------------------line deleted, we already have removed one, if you are -------------------in doubt then execute uncorrected program on a string -------------------of length one eg A the program will loop FFFFF times -------------------which is like formatting your RAM, of course causing -------------------memory lost A=R0 A % recover string's address ***** ***** page 90 chapter 52.4 local name ---- look at the prologoue it is 02E48, now look at the prologoue in ---- the chart it is 02E6D, one of them must be wrong, I suppose this one ---- in the chart is correct, and one in the text (just below the ---- chapter's title) should be corrected from: **** there is Prologue 02E48 **** there shold be Prologue 02E6D **** I've written a program that returns a prologue of argument, so **** I'm sure it's correct. It required a small trick. The asm prog that **** returned prologue was called PROL, I had to write a small user RPL **** stack here C is local variable ***** page 91 chapter 52.5 user binary integer about 12 lines from the top ***** there is (the beginning of asm program) GOSBVL 0679B % save registers LA 0005A % reserve 90 nibbles GOSBVL 039BE % RES_ROOM call ***** there shold be GOSBVL 0679B % save registers LC 0005A % reserve 90 nibbles !!!!!!!!!line modified ------- RES_ROOM takes argument from Ca not Aa !!!!!, now the warnig at ------- the bottom of this program becomes obsolete, and everything works ------- fine GOSBVL 039BE % RES_ROOM call ***** I checked everything twice, so there shouldn't be typos, also I checked it on a calculator (32kb RAM) and emu48 for winNT. It took me a whole day of memory losting and insufficent memory errors to discover that this stupid RES_ROOM takes argument from Ca not Aa. BTW if anyone knows what it returns except that D0 is the addres of new reseved memory - what is in registers D,D1 etc, this routine seems to destroy almost all of them, I would be glad to know. I hope that the manual will be verifeid soon, and I think that authors owe me a credit for finding those errors! yours sincerly # Jan Kozicki # janek@thenut.eti.pg.gda.pl * bytes: 86.5 * check: #7648h :: 0LASTOWDOB! CK3NOLASTWD CK&DISPATCH1 # 311 ( string real real ) :: COERCE2 ROT CKREF UNROT CODE GOSBVL =POP2# RSTK=C GOSBVL =SAVPTR D1=D1- 2 B=C A C=A A GOSUB Lchk D0=C C=RSTK GOSUB Lchk D1=C A=DAT0 B C=DAT1 B DAT0=C B DAT1=A B GOVLNG =GETPTRLOOP Lchk ?C=0 A GOYES Ebav GOYES Ebav C=C+C A C=C+A A RTN Ebav LCHEX 00203 ( Bad Argument Value ) GOVLNG =GPErrjmpC ENDCODE ; ; I dreamed up some more wish list items for the HP49. Feel free to tell me it's too late for this sort of thing. (1) How about a generalized user key scheme -- analogous to key maps in Emacs. Users could create key assignments that would be active in the normal stack environment, different key assignments that would be active in the text editor, etc. It's my understanding that the TOOL key already behaves this way (although I don't know if the mode-sensitive definitions of this key are assignable), why not make the whole user keyboard mode-sensitive? Users should also be able to create new key maps for use by UserRPL/Basic programs. Of course, this would require that changing key definitions be much faster than on the 48SX. There could still be a delay to compile a key map, but switching between key maps would need to be fast and it would be necessary to be able to store key maps in compiled form. (2) I guessing that there are now more than four (as in the 48SX) functions available for curve fitting. How about, in addition, a generalized least-squares curve-fitting application (possibly as a future downloadable upgrade). I so much of the code may already be available. (3) I would like to be able to push a button to see the full mantissa of a number -- like f-prefix on the HP15C. Popping into the editor with down arrow does this on the 48SX, but that's too slow. Maybe this is now fast enough to use for this purpose. If not, I'd like a show mantissa function. (4) I'd like a BREAK instruction to get out of loops in UserRPL/Basic. (5) I'd like an indicator in the display that shows whether or not there are more pages to the current menu. (6) I still don't like the way STO works for the interactive stashing away of numbers. In my last post, I proposed a kludgy secondary STO15 function, which, of course, was not general enough to be a good idea. (But it works for me. As quite pleased with it.) Here's a second proposal: Leave the STO function as is. It the calc goes into alpha-lock mode and awaits the user to type the variable name and then complete the operation with ENTER or one of the operator keys*. If ENTER was pressed, the contents of the stack level 1 are stored into the variable. If one of the operators are pressed, then the contents of stack level 1 are added to, subtracted from, etc., the contents of the named variable. Please note that for subtraction and division the contents of stack level 1 should be the subtrahend and the divisor respectively. This is more efficient than STO -- it avoids the necessity of hitting the quote key and the alpha key, and it restores usable store arithmetic. Of course, left shift in the VAR menu can work as before. A system flag controls whether the contents of stack level 1 stack. * To get division, the user types RS / as usual during alpha mode. (7) When you come out with your next calculator, the inevitable HP39, please leave the RPN mode in. I assume you'll rip out the CAS, the assembler/disassembler stuff, the user flash ROM, much of the system flash ROM if enough space is saved by ripping out the CAS, and much of the RAM. But please do leave in the RPN mode. Some high school kids will try it, and it seems to me that those who really give RPN a try generally like it. And if interest in RPN isn't perpetuated, RPN won't survive. Since I won't be buying the HP39, feel free to use whatever wild color you want. :-) Now for some questions; feel free to tell me to wait until August: (8) A 10 to 100-fold speed increase over the 48GX was advertised. Does UserRPL code speed up this much? (Or even half this much?) Or is this speedup only for internal applications like the equation writer and such? (9) Will information on the HP49 be available on the HP web site after the ASEE conf.? (I assume that's what you're waiting for, though it doesn't explain why you missed the NCTM conf.) (10)Does the flash ROM get fragmented? That is, if I store program_1, store program_2, store program_3, and then delete program_2, is there now a gap between programs 1 and 3? If so, are there any facilities for packing the flash ROM? -- Dan PS I realize that suggesting that the ANS history be used as the stack by UserRPL code running in algebraic mode wasn't a good idea: a history must be a queue and RPL needs a stack. But I'm still curious as to whether UserRPL can be used in algebraic mode and whether Basic can be used in RPN mode. Dear all. The HP49 will be presented during the ASEE show in Charlotte (NC). So if anybody is around who wishes to see/test this machine feel free to come. Many people from ACO will be there including: -Bernard Parisse -Cyrille de Brebisson and myself. Dave Arnett will also be there. See you. What date will the event be held? You guys ever get to Austin, Texas? Can someone give me some ideas why I would get an Invalid Card Data error message, when installing a library on a 48G. I've tried different libraries, and get the same error with all of them. sure! it's because you need to initialize your ports. Just type in the command PINIT and everything should be fine. This seems to be one of the most frequently asked questions.. maybe Eric should add this tip to his did you know section (if it isn't already there).. I have been owrking on a page that teaches you how to make your own cable, this is because it cost me like lkess than 3 dollars to make my own cable and i think the hp one costs over 20. The page is not ready yet, but there is a graphic in it that might help you a little: http://carlos.solorzano.com/hp48.html the graphic might not be to clear on the page, so the actual graphic is at: http://carlos.solorzano.com/hp-pc.gif anything else. hope that helps Carlos Good point! The thing is chaotic isn't it, and has no closed-form, so it's almost bound not to have a useful series approximation. Wish list for the hp 51 Ok, the hp 49G is coming. It seems to replace and enhance quite adequately the 48S/SX/G/GX/G+ models. Still, there are a few things missing in the 48 that I would like to see in the 51, and some things that are in the 48 that must be in the 51. Let's begin with those. 1. RPL is an absolute must. I don't mind ALG for students, BASIC for . I don 't know who yet, ASM and ML (I could try that, I liked it on the hp 41), or RKL for Klingons, but RPL is an absolute, non-negotiable must. And please, let nobody even utter the dreaded Windows CE here. I believe that HP has simply betrayed each and every hp 200LX owner by presenting us the incredibly cumbersome 300 et al series as a replacement for that magnificent machine. Windows CE had no place in a HP machine to begin with, except maybe the bigger 800 series. 2. USER mode (the capability to assign objects to keys, and I don't mean 210 la 42S) is an absolute necessity on a machine that could have thousands of different commands. I like the 48 capability of having several assignment key files. Could it be enhanced? 3. A sturdy, professional-looking body. OK, I'll get the 49 anyway, but I could have devised a better color scheme with my eyes and brain tied behind my back. Now, what could be new? This part of the wish list might be obsolete when the 49G finally appears, because it seems so expandable (1 Meg or Flash ROM is better than anything else I have seen!), but here it is. 1. Financial software. Not just TVM, but a complete set of financial functions, all programmable in RPL et al, of course. The hp 19B needs 64K or ROM to contain everything, including stuff already available in the 49G, so just think of what could be accomplished in, let's say, 128K. Of course, maybe HP is working on a replacement to the 19B - unless the 200LX is it. 2. Spreadsheet. It goes hand in hand with the last item, I guess. Whether Lotus , Excel or Lucid, I don't care: I'll learn. It should be possible to use RPL objects in it, and some commands should be applicable to a spreadsheet. 3. Appointment book. It doesn't have to be a Desktop Day-Timer, but if that machine could replace the 49G and the 200LX, I could resell both . The hp 48 has the basis of that with its alarm software. names and phone numbers (and maybe addresses), I could resell the 200LX. How about things that I don't really care about? 1. Color. I'd rather keep my batteries working for a couple of months than have a pocket laptop. 2. Algebra. (Remember, that's my wish list. I'll take it if it's there, but I would gladly do without it) Those lists are not complete. Add, comment, and maybe someday we'll send it to HP. Don't know how... but make sure to publish it on the internet when yer done... that would be cool cuz I'm sick of having to find my mp3 program behind other windows (or games) and such to do anything with it... g---------------------------------------------------------------- g It nagged at me and nagged at me, and finally, digging earlier MC along this line. I saw Good artists create. Great artists steal attributed to Picasso the other day, and though I had already worked out most of this, someone else did it first: Donald -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= the g------------------------------------------------------------ g Gray to Binary can be done in a number of ways but I've never been really happy with any of the programs I've written to do it. That's not really true but the best one I've used is a table lookup method which is pretty easy on an embedded micro but probably not the best answer for the HP48. again ... and again ... If you keep doing it you'll find you end up right back where you started where you started you'll find it's the same as the number of bits in your original binary value. That's not really true because if you try doing it with oddball word sizes (i.e. 12 or 13) you'll find that it only works when the word size is a 'nice' power of two (2, 4, 8, 16, ... ). << 1 RCWS 1 - START NEXT (provided you stay with the 'nice' power of two word sizes). If you look at what a binary to gray actually does, especially if you've ever seen a hardware implementation with it's cascade of XOR gates, you should notice two things ... you still have the original MSBit and usually an XOR operation is reversible. binary number you'll find that you have the MSBit right (it never changes) and you also have the second MSBit too because you've XORed the MSBit out of it! That means you now have two or your original bits! What happens if you shift this new value right TWO bits positions and XOR it with itself again? You end up with your original for MSBits back. This can be used to make a nice Gray to Binary but the drawback is that the program is very dependant on the word size! Let's assume you do all your binary calculations using 64 bit word sizes. If that's true then you can use something like the following to do gray to binary conversion: << @ recover the second MSBit DUP SR XOR @ recover the four MSBits DUP SR SR XOR @ recover the eight MSBits DUP SR SR SR SR XOR @ recover the sixteen MSBits DUP SRB XOR @ recover the thirty-two MSBITS DUP SRB SRB XOR @ recover all sixty-four bits DUP SRB SRB SRB SRB XOR You can make the above work for any word size by saving the word size, forcing 64 bit words, doing a 64-bit gray to binary conversion then restoring the original word size. The only gotcha is that you have to make sure that after you widen the word size to 64 bits the high order bits are all zero. This seems to be quite easy to do because it seems that any logical operation clears them out. To see this try this sequence: 64 STWS #123456789ABCDEFh 8 STWS 64 STWS which gives one answer while: 64 STWS #123456789ABCDEFh 8 STWS NOT NOT 64 STWS gives you a different answer! With all that in mind something like this should do it ... << @ clear the upper bits in case we're not using 64 bit words NOT NOT @ get the word size and save it RCWS SWAP @ do a 64-bit word gray to binary conversion @ recover the second MSBit DUP SR XOR @ recover the four MSBits DUP SR SR XOR @ recover the eight MSBits DUP SR SR SR SR XOR @ recover the sixteen MSBits DUP SRB XOR @ recover the thirty-two MSBITS DUP SRB SRB XOR @ recover all sixty-four bits DUP SRB SRB SRB SRB XOR @ @ narrow the wordsize back to what it used to be @ SWAP STWS I haven't tried the above program so I'm not sure if I've got it exactly right but it doesn't work it should give you the idea and it shouldn't be too difficult to debug ... -- john R. Latala jrlatala@golden.net The easiest (best?) way to do it is with boolean instructions. Here are the boolean functions for 4 bit Binary to Gray: the bits of the Gray number - E is MSB) E=A F=!A*B+A*!B G=B*!C+!B*C H=!C*D+C*!D -- Aaron. Here's a simple question.. where is the manufacturing plant for the 49? Is it still in indonesia? I have no doubts about the quality of the software or hardware, but how good will the assemblage be? -ehfisher I don't know about the 49G, but the new 6S is manufactured in China. On Fri, 18 Jun 1999 16:34:51 -0500, E H Fisher thread, but I have to say some things a I have no idea where that algorithm came from. I got it from... Cyrille! If you read my first post, I say specifically that i got the idea from him. It's a rearangement of his code! 'computer' has a MUL instruction that multiplies two integers.) Please note that if I had seen that code in the HP ROM or in a book I would naturally quote it! But anyhow, I'm very happy that the code i devised is the same than the HP. it means I'm on the good track ;-) other, You are absolutely correct. Cyrille's program is faster. The question is that when I try to solve a problem, i prefer to use the simpler and cleanlier approach. and it's undeniable that the code i gave is more beautiful. You, the ROM programmers, must be concerned with speed. I am not (at least at that level). I prefer a simpler algorithm, albeit slower, but more understandable. But here we will be on more philosophical grounds, and thus, much more subjective. here are some answers to your questions code this ?ABIT=1.3. ??? This is the same as ?ABIT=1 3 It means that it's going to check if bit 3 of register A is set (=1) You can learn MASM syntax with the program HP-DEV by Cyrille. It's available on http://www.hpcalc.org/pc/programming/ the posts constant Well, i have devised an algorithm to do it, but i thought it would be more fun to try a mini challenge with this one, and I started a new thread with it. Let's see if we have some good answers. If we do not, I will send you the algorithm (that is, if you are still interested!) Have fun Andre' all work fine except that in user mode when I press view all I get is editm and miniwriter doesn't launch. I can launched it manually by typing in editm. Any suggestions? ---------------------------------------------------------------------- Does anyone know how to launch EC and paste the commands to the string while working inside ED from Jazz? This is something that has worried me for about one and a half year :) some problems)1) Start ED (of course) 2) Press [PRG] (you have launched EC) 3) choose your mnemonic with its adress (type the adress with the numeric keypad) or by its name (use the find utility, I think it is F but I'm not sure). 4) When you have the one you want, simply press [ENTER] and it is paste in ED. Reverences, M@rquis (fleurial) http://cgi.ebay.com/aw-cgi/eBayISAPI.dll?ViewItem&item=119441812 Please take a look if you're interested. Share what you know. Learn what you don't. Try here for what is available in this sort of thing. http://www.hpcalc.org/apps/pims/ good luck, shayne. PS. Did you know HP is to release the HP49? Details http://www.hpcalc.org/hp49g.html. bye.   functions, mainly do ---- I really hope HP nevers abandons RPL. Otherwise it could cross my mind to abandon HP ... 7kf8va$ovk@caribe.pdx.oneworld.com... to it too friendly there I am looking for a program which can calculate Vectors and convert into curl,div Any ideas or sites? Go for a 48 : It's cheaper, and if you don't program in RPL, but in ML for example, you won't notice much difference, as the CPU is the same. -- http://perso.club-internet.fr/mils/main.html Finalement, le Minitel est toujours vivant Actually, it's a reason that you might not buy it. -- http://perso.club-internet.fr/mils/main.html Finalement, le Minitel est toujours vivant Ok, I propose to all ML coders a nice challenge: Is it possible to divide two numbers ocupying the whole W field of registers A and C, using only the B register as an auxiliar in the calculus? The output should have the result and the remainder in registers A and C. If you think it's possible, please post your code. In case that there are answers to this challenge, the winner is the one with the fastest code! ASCII Encoding HP48 SX Objects object does not have an ASCII form, such as is the case for library objects. There are various encoding schemes available on different computer systems, but these require that the sender and receiver have similar computers, or at least compatible encode/decode schemes. The programs listed below perform the encoding and decoding on the HP48 SX itself, which has the advantage of being completely independent of any computer. an object from the stack and converts it to a string, in which each nibble of the object and its checksum is converted to a character 0-9 or A-F. (The object must be in RAM, otherwise a ROM Object error is is broken up by linefeed characters after every 64 characters. and converts it back into an object. When you transmit the encoded encoded in the string to verify that the decoding is correct. An Invalid String error is returned if the result object does not match your computer, use HP48 translate mode 3 so that the HP48 will convert any CR/LF's back to LF's when the string is later downloaded. user language, using SYSEVALs to execute system objects. P2 is a string that the setup program uses P1 to decode into an executable than the first, and also uneditable and therefore safer (but it can't be transmitted in ASCII form, which helps to make the point of this exercise). Here are the programs, contained in a directory (if you have problems with this and you are using the HTML version of the FAQ, you may wish to try the plain text version or download a binary copy of the program): %%HP: T(3)A(D)F(.); DIR << IF DUP TYPE 2 =/ THEN Not A String DOERR << 16 STWS #0 NEWOB SWAP DUP SIZE IF DUP 4 < THEN DROP SWAP DROP Invalid String DOERR END DUP 65 / IP - 4 - # 18CEAh SYSEVAL OVER # 61C1Ch SYSEVAL SWAP # 6641F8000AF02DCCh # 130480679BF8CC0h # 518Ah SYSEVAL # 19610313418D7EA4h # 518Ah SYSEVAL # 7134147114103123h # 518Ah SYSEVAL # 5F6A971131607414h # 518Ah SYSEVAL # 12EA1717EA3F130Ch # 518Ah SYSEVAL # 280826B3012808F4h # 518Ah SYSEVAL # 6B7028080BEE9091h # 518Ah SYSEVAL # BE5DC1710610C512h # 518Ah SYSEVAL # 705D00003431A078h # 518Ah SYSEVAL # 3D8FA26058961431h # 518Ah SYSEVAL # 312B0514h # 518Ah SYSEVAL # 18F23h SYSEVAL DUP BYTES DROP 4 ROLL IF == THEN SWAP DROP ELSE DROP Invalid String DOERR END ws STWS D9D20D29512BF81D0040D9D20E4A209000000007566074726636508813011920 140007FE30B9F060ED3071040CA1304EC3039916D9D2085230B9F06C2A201200 094E66716C696460235472796E676933A1B21300ED30FD5502C230C1C1632230 CCD20FA0008F14660CC8FB97608403104AE7D814313016913213014117414317 414706131179A6F5C031F3AE7171AE214F8082103B6280821909EEB0808207B6 215C0160171CD5EB870A13430000D50713416985062AF8D341508813044950B9 F06BBF06EFC36B9F0644230C2A201200094E66716C696460235472796E676933 A1B2130B21300373 D9D20D2951881304495032230FD5502C230A752688130ADB467FE30322306AC3 0CB916E0E30CBD30F6E30C1C1632230CCD20DC0008F14660CC8FB97608403104 AE7D8143130169174147061741431311534AC6B4415141534946908D9B026155 4A6F53131F3AE731A014C161AE215F08082103A6280821939EEC08082170A621 4C161170CD56B870A18503430000D5071351796A9F8D2D02639916D9D2085230 C2A209100025F4D402F426A6563647933A1B2130A2116B213033C0 SETUP @Automatic setup program { P1 P2 P3 SETUP } PURGE END Installation instructions: 1. Save the above text into a text file named CONV (for example). Be sure that you leave the strings exactly as entered above, with no extra spaces or other invisible characters at the beginnings or ends of the lines. 2. Set the HP48 SX into ASCII transfer mode. 3. Using Kermit, download CONV text file to the 48, verify its checksum (6C8Ah). 4. Execute CONV to make it the current directory. 5. Execute SETUP. computer, be sure to set the HP48 SX in binary transfer mode before uploading. Disclaimers: o Use the programs at your own risk. Any time you delve into the SYSEVAL world, there are increased dangers. Archive your 48 memory before experimenting with these programs! Also, verify the checksums of objects defined above to make sure they have been o I will not answer questions about how the programs work. This is not because of any great secrecy, but rather because it's hard to give any answer that doesn't lead to more questions, and more, and more... o 48 hackers are welcome to mine any nuggets they can from the decompile an object. 9.2. OBJFIX When a binary object received by Kermit on the HP-48 is left as a string beginning with HPHP48, OBJFIX will extract the HP-48 object if the only problem is that extra bytes got appended to the end. OBJFIX takes a variable name in stack level 1 and modifies the contents of the variable if no other problems are detected. Note: This is like FIXIT by Horn and Heiskanen on Goodies Disk 8, but this one is by HP and so I suppose it's more reliable. Although it fails the test cases included with FIXIT, that may be because they were artificially contrived cases. Try both on real-world downloads that need fixing. Which do you like better? OBJFIX.ASC %%HP: T(3)A(D)F(.); D9D202BA81D9F81B2040D9D20F2A26DA91629C8145126489162C23072C80CCD2 0BD0008FB9760147108134164142C2818F24D534501008B2F41643150D73B840 58405438314A161966D2BF6BF6A6F5BE16314213114334CF8208A6F58F235A04 55136D7D4EA494D231A1CA101110131CA130DBE284F8FC0760D41198F29960D4 130142119EA1408F5E0108D341503223072D70B2130B21301460 9.3. FIXIT PURPOSE: Converts a badly uploaded string into the original object. THEORY: A lot of folks upload HP48 objects poorly, such that when you download them, you just get strings full of garbage that look something like this: HPHP48-E#c&r$a%p@!*!... [looks familiar, eh?] That's because they uploaded it using XMODEM, or managed to screw it up some other way. The following FIXIT program takes such a string and extracts the actual HP48 object that they originally intended to upload (if at all possible). Such object extraction can be done by hand, but it's too dangerous. FIXIT minimizes the danger of Memory Clear. It checks whether the extracted object is a valid one, and if not, drops it from the stack before the HP48 attempts to display it. All of the many bad downloads I've archived over the years are fixed by FIXIT, whereas about half of them cause a Memory Clear when extracted manually. No guarantees, however. Use at your own risk. The actual extraction is done by a Code object written by Mika Heiskanen. The User RPL shell around this code object is what minimizes the danger of Memory Clear; it was written by Joe Horn. INSTRUCTIONS: BACKUP YOUR MEMORY, just in case the string contains a logic bomb. Place the bad download on the stack (see HPHP48-...) and run FIXIT. Possible results: o No error: the object was extracted successfully and is on level 1. o Bad Argument Type error: you didn't have a string on level 1. o Bad Argument Value error: the string wasn't of the proper form; it must be an HPHP48-... downloaded string. o Invalid Definition error: the object was mangled in transmission so badly that its end was lost; the object cannot be extracted. o Undefined Result error: there is no HP48 object in the string. o Recover Memory? YES/NO: the string contained a bomb, and FIXIT detonated it. Press YES to sift through the shrapnel and rubble in a feeble attempt to resurrect the dead. Press NO to bury them. EXAMPLES: To do the following examples, download the FIXIT directory to your HP48 and get into it. o Press HI. See HPHP48-E..., a badly uploaded download. Before pressing FIXIT to fix it, try doing what we all used to do: press EDIT to see if we can recognize anything (usually a futile attempt). We see: But looks can be deceiving; press ON to exit the editor, and then press FIXIT to extract the intended upload: o Press WTAV; see another garbage download. But EDIT refuses; the string contains null characters. Press FIXIT; see successfully extracted directory. o Press BAD1. Notice that it looks exactly like WTAV. (Press WTAV, compare, then DROP). But its ending is all messed up; manually extracting WTAV from BAD1 can cause Memory Clear. Press FIXIT and see Error: Invalid Definition indicating that the object inside BAD1 is so mangled that its end cannot be located. o Press BAD2. Looks like WTAV again. But its body is messed up; manually extracting it would create an External object that could cause Memory Clear if evaluated. Press FIXIT and see Error: Undefined Result indicating that there is nothing recognizable inside BAD2. FIXIT.ASC %%HP: T(3)A(D)F(.); 69A20FF7CE20000000402414442340C2A203B000840584054383D25403A20FF7 2500000000403535947440D9D20E16329C2A2DBBF13013216DF1406A1C42328D BF193632B213034000407545146540D9D20E163292CF1EFFB1DBBF1EBFB150FA 193632B2130003030303034C000402414441340C2A203B000840584054383D25 469A20FF72500000000403535947440D9D20E16329C2A2DBBF13013216DF1406 A1C42328DBF193632B213034000407545146540D9D20E163292CF1EFFB1DBBF1 EBFB150FA193632B2131313131313134C000407545146540C2A203B000840584 054383D25469A20FF72500000000403535947440D9D20E16329C2A2DBBF13013 216DF1406A1C42328DBF193632B213034000407545146540D9D20E163292CF1E FFB1DBBF1EBFB150FA193632B2130003030303034C00020849420C2A20570008 40584054383D254D9D20E163284E2050841607079784E20603416D6075627936 32B2130A0BA02D456C616E63686F6C697022416269702BB28000506494859445 50D9D20E16323CE2278BF168BC1ED2A2167E1AFE22D9D203CE2278BF19C2A274 3A2C58C1C2A2031000840584054383D2167E1AFE22D9D2078BF18B9C1DBBF1AA F028DBF1CCD201200014713717917F137145142164808C5BF22D9D2033920200 0000000005150933A1B21305DF22B21305BF22D9D20339202000000000004150 933A1B21305DF223CE2278BF168BC1D8DC1167E1AFE22D9D203FBF1339202000 000000002770933A1B21305DF223CE2278BF19D1A1DBBF18DBF1E0CF1D5CE1AF E22D9D208DBF1339202000000000000030933A1B21305DF22CB2A193632B2130 B21303D4F 9.4. LASTX The LASTX function is useful in calculations where a number occurs more than once. By recovering a number using LASTX, you do not have to key that number into the calculator again. Note however that LASTX uses the built in last argument feature, so if you use LASTX you will lose the contents of your LASTARG. For example, calculate: 96.704 + 52.394706 -------------------- 52.394706 Keystrokes: Stack: ----------------- -------------------- 96.704 ENTER 96.704 52.304706 + 149.098706 LASTX 149.098706 52.304706 / 2.84568265351 @ This is a version of LASTX for the HP48 @ %%HP: T(3)A(D)F(.); << LASTARG DEPTH n << ROLLD s 1 - DROPN 9.5. Compact Data Storage A simple length-encoding technique can be put to use for a free- format, very compact multi-field data storage system. Two tiny programs, SUBNUM and STRCON are here to help the process, and are listed near the end of this note. At the end of the note is a directory that may be downloaded into the HP48 that contains the examples. The principle is to store starting indices in the beginning of a string that point to fields stored subsequently in the string. The indices are stored in field order, with an additional index at the end to accommodate the last field. There are several small points worth mentioning: o Fields may be 0-length using this technique. o The execution time is uniform across all fields. o This technique saves about 4 bytes per field after the first field, n. EXAMPLE: Indices | Fields Character | 1 11111111 12222222222 Position : 1 2 3 4 |567890 12345678 90123456789 +--+--+--+--+------+--------+-----------+ String : | 5|11|19|30|Field1| Field2 | Field 3 | +--+--+--+--+------+--------+-----------+ This is a string that contains 3 fields, and therefore 4 index entries. The first field begins at character 5, the second field begins at character 11, and the third field begins at character 19. To keep the pattern consistent, notice that the index for field 4 is 30, which is one more than the length of the 29 character data string. To extract the second field, place the string on the stack, use SUBNUM on character 2 to extract the starting position, use SUBNUM on character 3 to extract the (ending position +1), subtract 1 from the (ending position+1), then do a SUB to get the field data. NOTE: The index for field 1 is stored as char. data 5, NOT the string 5! To place the field index for field 1 in the string, you would execute data 1 5 CHR REPL. PROGRAM: The following program accepts an encoded data string in level 2 and a field number in level 1: << DATA ENCODING: The following program expects a series of 'n' strings on the stack and encodes them into a data string suitable for reading by the first example above. The programs SUBNUM and STRCON are used to assemble the indices. << 1 n FOR i data i SUBNUM OVER SIZE ; ... field index fieldsize + data SWAP ; ... field data index' i 1 + SWAP CHR REPL ; ... field data' SWAP + 'data' STO ; ... NEXT data ; data In this example, four strings are encoded: Input: 5: String 4: Str 3: STR 2: STRING 1: 4 Output: xxxxxSTRINGSTRStrString (23 character string) (The first five characters have codes 6, 12, 15, 18, and 24) VARIATION: The technique above has a practical limit of storing up to 254 characters of data in a string. To overcome this, just allocate two bytes for each field position. The code to extract the starting index for becomes a little more busy. In this case, the index is stored as two characters in hex. Indices | Fields Character | 11111 11111222 22222223333 Position : 12 34 56 78|901234 56789012 34567890123 +--+--+--+--+------+--------+-----------+ String : |09|0F|17|21|Field1| Field2 | Field 3 | +--+--+--+--+------+--------+-----------+ << OVER f 2 * SUBNUM + ; data start 16 * 3PICK f 1 + 2 * TWO VERY TINY HELPFUL PROGRAMS: << code CHR 'code' STO 1 count START code + NEXT Alternative Solution to the Problem: Jim allocates two bytes for each index entry (to handle longer strings), but on the other side obviously only uses values 00...FF for index dublets, which just doesn't make sense. He's at a 16*16 = 255 chars limit again! I have put together a working set of commands which support up to 65K strings, using two-byte indexing. The encoder (Encode) is User-RPL program which calls the binary N2C which converts the level 1 real into a 2 character string: @*** Encode *** %%HP: T(3)A(R)F(.); << IF DUP TYPE 0 = THEN 514 DOERR END << N 1 + 2 * #18CEAh SYSEVAL #45676h SYSEVAL 1 N FOR I I 2 * 1 - OVER SIZE 1 + N2C REPL SWAP + NEXT N 2 * 1 + OVER SIZE 1 + N2C REPL @*** N2C, cksum=#8919h *** %%HP: T(3)A(R)F(.); D9D202BA812BF819FF30D9D20AEC8111920001007FE3057A50C57463223057A5 0EE250B2130B21307206 ASCII download them with translate code 3, then call program 'Encode' with data strings in levels 2..n+1 and a real n in level 1 indicating the number of strings. The string decoder (Decode), which is usually speed-critical, is @*** Decode, cksum=#38E1h *** %%HP: T(3)A(R)F(.); D9D20D8A81D9F811192013000D9D20AEC8113D26CA130F6E30CA130E0E305080 311920001002CE30CAF0650803CBD30CAF06FED30F6E30CA130E0E3050803119 20001002CE30CAF0650803CBD30E0E3033750B2130B21309534 It takes a `database' string on level 2 and a real (record position) on level 1, then comes back with the appropriate substring (record). 9.6. HP82240B Printer Codes Size of physical row One printed row is either 24 normal characters, 12 expanded characters or 168 pixels wide. This means that one normal character has a width of 7 pixels. Any printed data falling off the row will be truncated and ignored by the printer. Reset ESC 255d This resets the printer to the following state: Roman8 character set (watch out: the power-up character set is ECMA94), both expanded and underline printing off, buffer cleared. Self test ESC 254d This causes the printer to print a selftest pattern. This mainly consists of a printout of the Roman8 character set. Expanded printing ESC 253d This turns expanded printing on. This means that from this code on all characters that are printed will be printed at twice the normal character width because each column of pixels is printed twice. Has no effect if expanded printing is already on. ESC 252d This turns expanded printing off. This means that from this code on all characters that are printed at normal character width again. Has no effect if expanded printing is already off. Underlined printing ESC 251d This turns underlined printing on. This means that from this code on all characters that are printed will be underlined because the bottom-most pixel in each columns of pixels is now always on. Has no effect if underlined printing is already on. ESC 250d This turns underlined printing off. This means that from this code on all characters that are printed will not be underlined anymore. The bottom-most pixel in each columns of pixels is printed as it is defined for the printed character. Has no effect if underlined printing is already off. Character sets ESC 249d This switches the printer to use the ECMA94 character set. This set is 100% identical to the character set used in HP48 calcula- tors. This is the power up default of the printer. Has no effect if ECMA94 is the current character set already. ESC 248d This switches the printer to use the Roman8 character set. This set is different than the character set used in HP48 calculators in the 128 last characters. As far as I know this set is used by older printers like the HP82240A and by HP28 calculators (hence the need for the OLDPRT command in HP48 calculators if you are printing to a HP82240A). This character set is turned on if you reset the printer with the reset code. Has no effect if Roman8 is the cur- rent character set already. Graphics ESC n data (with n between 1 and 247) This causes the printer to print graphics specified by the speci- fied data (one byte per pixel column). The value n specifies the number of bytes of data that follow the printer code that will be interpreted as graphics data. Any data after pixel column 168 will be truncated and ignored. 10. Appendix B: GX Specific Information 10.1. What's new in the HP48 G/GX? AUTOMATIC LIST PROCESSING Almost all commands that did not accept list(s) as their arguments can do so now. Here are just a few examples: { 1 2 3 } SF sets flags 1, 2, and 3 { freq freq ...} { dur dur ... } BEEP can play a song with no audible hiccup between tones. Since + has always been used to concatenate lists, a new ADD func- tion exists to add the elements of two lists, like this: { 1 2 3 } { 4 5 6 } ADD returns { 5 7 9 }, whereas { 1 2 3 } { 4 5 6 } + returns { 1 2 3 4 5 6 } as it did before. The only commands which do not have automatic list processing are: o those which never get a Bad Argument Type error (like DUP), o meta-object commands (like ROLL), o program branch structures (like FOR), and o commands that specifically work on lists (like GET). Sometimes the results are non-obvious, for example: PORTS AND MEMORY The HP48 G, like the 48 S, only has 32K RAM. The GX, unlike the SX, has 128K RAM built-in. Card slot 1 can contain another 128K (maximum), but card slot 2 can contain up to 4 megabytes of RAM. Only port 1 can be merged in the GX. Card slot 2, which is intended for large-capacity RAM cards, is permanently free, and is automatically divided up into 128K ports, each of which becomes Port 2, Port 3, Port 4, etc. Up to 4 Megabytes can be plugged into slot 2, which would then become Port 2 through Port 33. (Although the FREE and MERGE commands were kept for HP48 SX compatibility, GX users will prefer the new FREE1 and MERGE1 commands). Therefore the maximum amount of merged main memory is 256K (unlike the SX which allowed up to 288K) after MERGE1; the maximum amount of fully online free independent memory is 4224K after FREE1. LOCAL VARIABLES Variable names prefixed with a <- (backarrow character) are compiled as local (temporary) variable name objects even if share values through local variables, which is much faster than sharing values through global variables, and they get purged automatically. SPEED CPU clock speed is double the S/SX's, but throughput is estimated to be only 40% faster, primarily due to the fact that all RAM & ROM is now bankswitched (on the S/SX only a 32K portion of the ROM required bank switching), and it still has the same 4-bit bus bottleneck. IMPROVED COMMANDS: o AXES can now also specify the spacing of the tick marks. o DEPND can now also specify the initial values and tolerance for the new DIFFEQ plot type. o REPL and SUB now work on arrays. HP SOLVE EQUATION LIBRARY CARD COMMANDS: o AMORT, amortization calculations o CONLIB, starts Constants Library catalog o CONST, returns value of a named CONLIB constant o DARCY, calculates Darcy friction factor o EQNLIB, starts Equation Library catalog o F0lambda, calculates black-body power fraction o FANNING, calculates Fanning friction factor o LIBEVAL is a generalized form of the EQ card's ELSYSEVAL; it executes any XLIB by its library number o MCALC, marks an MSOLVR variable as not user-defined o MINEHUNT, starts the Minehunt video game o MINIT, initializes Mpar from 'EQ' for MSOLVR o MITM, customizes title & menu of MSOLVR's screen o MROOT, solve for variable(s) in MSOLVR o MSOLVR, shows Multiple Equation Solver menu o MUSER, marks an MSOLVR variable as user-defined o SIDENS, density of silicon as function of temperature o SOLVEQN, starts solver for specified EqLib equation(s) o TDELTA, subtracts temperatures like - ought to but doesn't o TINC, adds temperatures like + ought to but doesn't o TVM, shows the financial calculator (Time Value of Money) menu o TVMBEG, sets payments-at-beginning-of-periods mode o TVMEND, sets payments-at-end-of-periods mode o TVMROOT, solves for a TVM variable o ZFACTOR, calculates gas compressibility factor Z Note: The EQ Card's Periodic Table and Tetris game are not in the HP48 G/GX, but the EQ Card can be used in the GX if those applications are needed. Tetris was not included because no agreement on royalty was reached. The Periodic Table is available separately as freeware on HPCVBBS. NEW ARRAY COMMANDS: o COL+, inserts a column vector into a matrix or a number into a o COL-, deletes a column from a matrix or number from a vector (identical to DELCOL in Donnelly's Tool Library) repeated GETCOL in Donnelly's Tool Library) o COND, column norm condition number of a square matrix o CSWP, swaps two columns in a matrix (like EXCOL in Donnelly's Tool Library) o EGV, eigenvalues and right eigenvectors of a square matrix o EGVL, eigenvalues of a square matrix o FFT, discrete Fourier transform o IFFT, inverse discrete Fourier transform o LQ, returns the LQ factorization of a matrix o LSQ, minimum norm least-squares solution to an ill-determined system of linear equations o LU, returns the Crout LU decomposition of a square matrix o PCOEF, returns polynomial with given roots (inverse of PROOT) o PEVAL, evaluates polynomial at x o PROOT, finds all roots of polynomial (inverse of PCOEF) o QR, returns QR factorization of a matrix o RANK, rank of a rectangular matrix (uses flag -54) o RANM, creates matrix with random elements o RCI, multiplies elements in one row of a matrix by a scalar o RCIJ, does RCI then adds the result to a row o ROW+, inserts a row vector into a matrix or a number into a vector (like INSROW/PUTROW in Donnelly's Tool Library) o ROW-, deletes a row from a matrix or number from a vector (identical to DELROW in Donnelly's Tool Library) GETROW in Donnelly's Tool Library) o RSWP, swaps two rows in a matrix (identical to EXROW in Donnelly's Tool Library) o SCHUR, computes the Schur decomposition of a square matrix o SNRM, spectral norm of an array o SRAD, spectral radius of a square matrix o SVD, singular value decomposition of a matrix o SVL, computes the singular values of a matrix o TRACE, sum of diagonal elements of a square matrix GRAPHICS and PLOTTING COMMANDS: o ANIMATE, displays grobs on the stack sequentially. You can use the defaults, or specify your own delay between frames (can be very fast), the number of times to repeat the sequence, and even the pixel coordinates. It's just like a ROLL REPL loop... except very fast. Note: Charlie Patton converted 17 seconds of the Apollo moon-walk video into HP48 GROBs and ran them with ANIMATE, and it looked very good! o ATICK, specifies tick spacing on plot axes o EYEPT, specifies the eye-point coordinates in a perspective plot o GRIDMAP, selects the new gridmap plot type o PARSURFACE, selects the new parametric surface plot type o PCONTOUR, selects the new pcontour plot type o PICTURE, same as GRAPH command o SLOPEFIELD, selects the new slopefield plot type o WIREFRAME, selects the new wireframe plot type o XVOL, sets the width of the 3D plotting volume o XXRNG, sets the width of the 3D target mapping range for gridmap and parametric surface plots o YSLICE, selects the new yslice plot type o YVOL, sets the depth of the 3D plotting volume o YYRNG, sets the depth of the 3D target mapping range for gridmap and parametric surface plots o ZVOL, sets the height of the 3D plotting volume USER-INTERFACE COMMANDS: o CHOOSE, displays a point-and-click menu dialog box o INFORM, formatted multi-line input with named fields (nice!!) o MSGBOX, displays text in a centred box with shadow, then WAITs o NOVAL, placeholder for unspecified values in INFORM argument list LIST PROCESSING COMMANDS: o ADD, adds lists element-wise (see section above) o DOLIST, evals an object on multiple lists o DOSUBS, evals a program or command taking arguments from a list o ENDSUBS, returns the number of loops the current DOSUBS will do o HEAD, first element in a list or first char in a string (identical to CAR in Donnelly's Tool Library) o DeltaLIST, list of first finite differences of list objects o SigmaLIST, sum of the elements in a list o PiLIST, product of the elements in a list o NSUB, returns the current list pointer value during a DOSUBS o REVLIST, reverses the order of the objects in a list (like REVERSE in Donnelly's Tool Library) o SEQ, list of results from repeated execution of an object (like a FOR/STEP loop but the results go into a list) o SORT, sorts elements in a list into ascending order, or sorts a list of lists using each list's first element as the key (can be done with LSORT/QSORT in Donnelly's Tool Library) o STREAM, executes an object on first two elements of a list, then again on the result and the 3rd element, etc. Allows easy creation of things similar to SigmaLIST and PiList. o TAIL, returns a decapitated list or string (see HEAD above) (identical to CDR in Donnelly's Tool Library) SYSTEM COMMANDS: o CLTEACH, clears the 'EXAMPLES' directory created by TEACH o CYLIN, sets polar/cylindrical coordinate mode o FREE1, like 1 FREE (see section above) o MERGE1, like 1 MERGE (see section above) o PINIT, port initialize, esp. important for 4-Meg RAM card users o RECT, sets rectangular coordinate mode o SPHERE, sets polar/spherical coordinate mode o TEACH, loads the Owner's Manual examples into a dir in HOME o VERSION, returns the operating system ROM version string and a copyright notice, like this: 1: Copyright HP 1993 o XRECV, X-Modem protocol receive (binary mode only) o XSEND, X-Modem protocol send (binary mode only) MATH COMMANDS: o LININ, tests whether an equation is linear in a given variable o NDIST, normal probability density o PCOV, population covariance of SigmaDAT o PSDEV, population standard deviation of SigmaDAT o PVAR, population variance of SigmaDAT o RKF, solves initial value problem using Runge-Kutta-Fehlberg o RKFERR, change in solution and absolute error using RKF o RKFSTEP, next solution step with given error tolerance using RKF o RRK, solves initial value problem using Rosenbrock & RKF o RRKSTEP, next solution step with given error tolerance using RRK o RSBERR, change in solution and absolute error using Rosenbrock MENU NUMBERS and KEY CODES Many menu numbers have changed, so software that uses # MENU or # TMENU may not work the same as in the HP48 S/SX. (Specifically, only menu numbers 0-3, 28, 30, and 42-59 are the same). Likewise, almost all of the shifted keycodes correspond to new commands and menus, which programmers must take into account; for example, the RAD key on the S/SX had the keycode 82.2, but it's 21.2 on the G/GX. The left-shift key, which was orange on the S/SX, is now purple [officially lavender], and the right-shift key which was blue on the S/SX is now green [officially teal] on the G/GX. Also, the digit-key menus can be activated by both shift keys; left-shift gives the softkey menus like in the S/SX, but the right-shift gives the new user- friendly full-screen menus. The unshifted keys remain identical to the S/SX, except for a cosmetic colour change to match the very dark green of the calculator case. MANUALS The G/GX comes with two manuals, a Quick Start Guide for beginners, and a cost-cutting, slimmer owner's manual called the User's Guide which has only 21 pages about programming, since HP figures that the huge majority of all 48 owners never program it anyway. The power users can buy the optional Advanced Users Reference Manual (similar to the S/SX's Programmer's Reference Manual) which covers programming and the many commands that are not mentioned in the User's Guide. There is no Quick Reference Guide like the S/SX came with, although the case still has a pocket for one. Jim Donnelly has marketed a nice pocket guide, but it's too wide to fit in the case's pocket. The User's Guide is not spiral bound, but is made to open fully and last a long time, since it's not just glued but has sewn signatures like real books, and is printed on quality paper. Another possibility is The HP 48G/GX Pocket Guide by Chris Coffin and Thomas Dick (Grapevine Publications). It's 80 pages long, contains a complete command reference (with input/output stack diagrams), alpha keyboard description, system flag description, as well as examples of how to use various calculator features. This guide is designed to fit nicely in the pocket of the HP case. FLAGS Some previously unused flags are now used. They are: -14 Clear = end-of-period payment mode (for TVM calculations) Set = beginning-of-period payment mode -27 Clear = display symbolic complex numbers in coordinate form e.g. '(X,Y)' Set = display symbolic complex numbers using 'i' e.g. 'X+Y*i' -28 Clear = plot multiple equations like the S/SX does (serially) Set = plot multiple equations simultaneously -29 Clear = include axes in plots (like the S/SX does) Set = omit axes from 2D and statistics plots -30 is no longer used (it never did anything useful anyhow) -54 Clear = tiny matrix elements get rounded to zero Set = leaves matrix elements alone The default setting of all these flags is Clear (as in the S/SX). FLAG BROWSER There is a System Flag browser which shows the flag number, shows whether it's set or clear, lets you toggle it, and shows in English what the current setting means. CHARACTER BROWSER While programming, if you want to type any character at all, press CHARS and a screenful of ASCII characters is displayed that you can browse with the arrow keys, and not only does the screen also show the ASCII code (NUM value) and even the shortcut keyboard key sequence (if any) for each character, but if you press ECHO, it will be typed into your program. There's no need any more for the alpha keyboard table. DIRECTORY MAINTENANCE Press right-shift VAR to launch a Variable Browser which is a complete memory manager. You can tag multiple objects and copy, move, or delete them all with a single keystroke; there's even a Mark All and an Unmark All, like a real computer. It's slow, however, and has been obsoleted by the very fast PCT library. FRACTIONAL UNIT POWERS The S/SX only handled integer powers of units correctly, but the G/GX can use any real number as a unit power. NAME PLATE The case has a rectangular indentation in the back like the HP 95LX and 100LX, and it comes with an adhesive metal nameplate that you can get engraved with your name. XLIB NAMES All of the new commands in the GX are XLIB names, and therefore take 5.5 bytes in programs. The commands common to the SX and GX take 2.5 bytes each, as they did in the SX. INPUT FORMS and CHOOSE BOXES Many operations have two menu types: the old SX style, and a new drop-down menu and input forms that have the feel of computer dialog boxes. Especially useful for the HP48 beginner. ENHANCED PRECISION The internal precision of at least some of the matrix routines has been improved; INV gets better answers on square matrices than the SX did. HP has not released information about which routines were improved, how, and by how much. IMPROVED DISPLAY The LCD introduced with revision M of the G/GX is easier to read since it has higher contrast between on/off pixels. It has a slower cycle response time, however, making it difficult to use for rapid-motion video games or any other rapid animation. 10.2. Examples of INFORM, CHOOSE, and MSGBOX Some examples of INFORM, CHOOSE and MSGBOX on the HP48 GX. Just download the entire directory to your calculator and try the programs, change them, modify them and do everything else with them you can think of. SIMPLE: This program will demonstrate a simple INFORM input screen with 3 fields (one without type restrictions, one for real or complex numbers and one for strings) with some additional layout. MSGBOX and CHOOSE (with the third parameter equal 0) are used to show what the results of the INFORM command are. The list the INFORM command returns is left on stack so you can see what it looks like. ANGLE: This program will demonstrate the use of CHOOSE. It lets you choose between the three possible angle modes (DEG, RAD, GRAD) and when you choose one of them, the corresponding mode is set by evaluating a tiny program containing the right command. ISOLATE: This program will demonstrate the use of INFORM in ways that it is used in the calculator itself. It is a very simple shell around the ISOL command (isolation of a variable from an algebraic). It remembers it's settings in a variable called IPAR and the next time the program is run this will be the default values of the INFORM command, so you can isolate for a different variable using the same algebraic you used before, without retyping it. MSGBOX is used for error messages. TYPELIST: This program will again demonstrate the use of CHOOSE. It extracts the names of all the internal types of the HP48 GX from ROM and shows them in a CHOOSE-box (alphabetically sorted by name). If you choose one of them, its TYPE number is shown in a MSGBOX. MATHQUIZ: This final program will demonstrate the use of INFORM with variable field descriptions and default/reset values. It's will show you 8 fields that are simple math questions for you to solve (addition and subtraction). You can enter all the results and then you will see if your answers were correct (in a resetting a field (or all fields). %%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 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 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 NEXT 28 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 # NEXT 8 << X HEAD 2 OVER SIZE 1 - SUB = + X 1 ROT PUT SWAP << X HEAD 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 10.3. Some useful LIBEVALs Note well: backup memory before using any of the following! LIBEVAL can clear memory if used incorrectly. Warning to the clueless: LIBEVAL, NOT SYSEVAL!!! If you don't know what a bint is, don't use the ones that mention bints. Example usage: OUT OF RANGE Try Again #B0091h LIBEVAL. Try it! -----------------------------------------------------+---------- Function | LIBEVAL -----------------------------------------------------+---------- Displays message box with grob | #B1000h CMD last command window | #B2000h CHARS application | #B2001h MODES application input form | #B41C1h flag browser (returns t/f to level 1, just drop it) | #B41CFh MEMORY application (aka variable browser) | #B41D7h SOLVE application choose box | #B4000h solve equation input form | #B4001h solve difeq input form | #B4017h solve polynomial input form | #B402Ch solve linear systems of equations input form | #B4033h solve TVM input form | #B4038h PLOT input form | #B4045h SYMBOLIC application choose box | #B4113h integrate input form | #B4114h differentiate input form | #B4122h Taylor polynomial expansion input form | #B412Bh Isolate a variable input form | #B412Dh solve quadratic input form | #B4130h manipulate expression input form | #B4131h TIME application choose box | #B4137h Set alarm input form | #B4138h Set time and date input form | #B415Bh Alarm browser (aka alarm catalog) | #B416Eh STAT application choose box | #B4175h single-var stat input form | #B4176h frequencies input form | #B417Dh fit data input form | #B417Fh summary stat input form | #B418Fh I/O application choose box | #B4192h Send to HP48 input form | #B4193h Print input form | #B4197h Transfer input form | #B41A8h Get from HP48 (immediate) | #B50FFh recalls the contents of the reserve variable Mpar | #E4012h -----------------------------------------------------+---------- LIBEVAL : stack diagram / what it does ------- ----------------------------------------------------------- 1 FREEZE if you want it to stay there after program ends) #B2000h : launches the Last Command choose-box #B2001h : launches the CHARS application; returns nothing if user does not press ECHO #B2002h : launches the CHARS application; returns if user does not press ECHO #B41CFh : launches Flag Browser; leaves a True or False on stack, so follow this LIBEVAL with a DROP. that represents AM/PM/24-hr (just DROP it) 24-hr mode; just DROP it) a two-digit year) bints; year is two digits, interpreted as between 1991 & 2090 only) between 1991 and 2090; output is a real number) year is two digits interpreted as between 1991 & 2090; Sunday is #7; if you're in DMY mode, then the input order is #day #mon #yr) by EQ LIB and MINEHUNT; for example, try this: #E202Bh LIBEVAL 3 GET #E3063h LIBEVAL PICT STO PICTURE) #E202Bh : the first of the packed EQ LIB grobs (see above) #E2069h : the last of the packed EQ LIB grobs (see above) #E7039h : MINEHUNT packed grob (left screen border) #E703Ah : MINEHUNT packed grob (right screen border) or not; returns System-RPL True or False) 11. Appendix C: Details of Bugs 11.1. The EquationWriter Bug Rev E Behaviour Clear flag -53 first (the Precedence Flag). On a Rev E, put '((1+2)/(3+4))^5' on the stack and press down- arrow. You'll see: 5 / 1+2 | --- | (A) 3+4 / which is as it should be. But now press [orange-shift] [+]; see the message Implicit () off momentarily; press [left-arrow] (not backspace), then press the [EXIT] softkey. The expression gets mangled into this: 1+2 ----------- (B) (5) (3+4) which is not equal to expression (A) above! Bug, yes? Press ON to abort the process. Now set flag -53, then repeat the above procedure. First you see: 5 / 1+2 | --- | (C) 3+4 / which is the same as (A) above; but continuing as before, you see: (5) / 1+2 | ----- | (D) (3+4) / which is equal to the original. Thus the bug can be worked around by keeping flag -53 set (not a pleasant solution). Rev J Behaviour Major difference: after pressing down-arrow, Rev J goes directly into graphic mode, so you have to press ON and then EXIT to get into the equation editor (which Rev E goes directly into). But that's petty cash compared to the following big change. The same sequence of operations, first with flag -53 clear, then set, exactly as detailed above, yields these four displays in a Rev J: 5 / (1+2) | ----- | (A') 3+4 / (notice the extra parentheses?) and then: 5 / (1+2) | ----- | (B') (3+4) / which is equal to (A'); nothing at all like expression (B) above! and then: 5 / (1+2) | ----- | (C') 3+4 / which is the same as (A') above; and then: 5 / (1+2) | ----- | (D') (3+4) / which is also equal to (A'). No bug in Rev J. SUMMARY: Rev A-E have a bug in the EquationWriter that can mangle expressions if flag -53 is clear (the default) and if Explicit Paren- theses mode is toggled. This bug has been fixed in Rev J. Unfortunately (as you can see above) Rev J always puts parentheses around polynomial numerators. It is therefore impossible to use the (A) above; the simplest that can be had is expression (A'). Another minor change, while I'm at it: Rev A-E don't change the menu when you press REPL; Rev J automatically flips to the appropriate RULES menu. 11.2. Rotation Rate to Angular Frequency Conversion Bug About the Bug: There is a rotation rate conversion bug in the HP48 G/GX which I have not seen reported here before, so after discussion with the folks at Corvallis I am posting this description. Warning: it is 159 lines long! First - an example. Put the unit object 60_rpm in level 2 and the unit object 1_r/s in level 1, then execute the command CONVERT. You are asking the HP48 to convert a rotation rate of 60 revolutions per minute into an angular frequency in radians per second. 60 rpm is 1 revolution per second, or 2pi radians per second. No HP48 G/GX will give this answer! Not everyone uses rpm or is even aware of the existence of this unit - it is one of the extra units in the UTILS menu of the Equation Library - so here is a second example - add 2pi radians per second to one Hertz. Put 6.2832_r/s in level 1, 1_Hz in level 1, and add. You are adding an angular frequency of two pi (one cycle) per second to a rotation rate of one per second, so the result should be a frequency of two Hertz. On an HP48 S/SX that is the answer. On an HP48 G/GX it is not. When units are converted, by CONVERT, or during arithmetic on unit objects, the level 2 object is first turned into base units, and then the result is converted into the units of the level 1 object. On the HP48 S/SX, the base unit of angles is one rotation (or a unit circle or a revolution or a cycle). So, the angle unit of rpm (a revolution) or of Hz (a cycle if Hz is treated as a rotation rate) is already in base units - conversions to angles involving rpm and Hz automatically work correctly. On the HP48 G/GX, the base unit of angles is the current angle mode (DEG, RAD or GRAD) - so any conversion from rpm or Hz (or any formula which works in cycles, rotations, revolutions, unit circles) to angles should be preceeded by a conversion from the unit circle to the current angle. Apparently no-one noticed this would be necessary, because it all worked automatically on the HP48 S/SX. So, when you convert 60_rpm to units of _r/s, an HP48 G/GX converts not 60 rotations but 60 base angle units per minute to radians/second. In RAD mode, you get 1 radian per second. In DEG mode you get 1 degree per second, and in GRAD mode you get 1 grad per second (in each case expressed in radians). That's three different answers, none of which is correct! Exactly the same happens if you convert 1_Hz to angles per second, and the inverse mistake is made if you convert angles per time to cycles or rotations divided by time. I first learned of this bug from a member of HPCC (the British club for users of HP handhelds), Peter Embrey. He describes his journal, DATAFILE (in Volume 13 number 1 pages 12 to 14 and V13n2p6). He was calculating the energy stored by a flywheel - given by the formula (1/2)*I*omega^2 and after a time he decided the answers had to be much too big when he CONVERTed from kg*m^2*(r/s)^2 to W*h on an HP48 GX. It turns out that (r/s) are the correct units to get the right answer, but the GX was converting to degrees per second as it was in DEG mode, so his answer was too large by a factor of (360/2pi)^2 - a factor of about 3,300. In this case, his HP48 SX was not much better, since it converted from radians to unit circles. The way to get the correct answer is to use an HP48 G or GX in RAD mode - or to divide out the radians from the formula before using CONVERT. This is not yet a bug, but needs as much care as does use of temperature units on the HP48. But when Peter tried to deal with the problem by working in rpm, he came upon the bug described Apparently this bug not been reported before - at least my friends in HP tell me that it was not on their list of known problems until I told them of it. (This means it is not fixed in the new revision R.) Why not - does everyone know about it and work around it without thinking to tell anyone else? Or does no- one use their HP48 to do calculations on rotating bodies - or do most people do calculations with rotating bodies in such a way that they do not encounter this problem? Could there be hundreds of students and engineers out there calculating and designing things on their HP48 G/GX and getting wildly inaccurate results? Has anyone built a disk drive or a jet engine which rotates far too fast and will disintegrate because of this? No, of course not, all engineers know that any design calculation absolutely must be repeated on two entirely separate calculators or computer programs! :-| Maybe some students have lost marks in exams because of this though - but please, this is not intended to restart the discussion as to whether calculators should be allowed in exams! I want to underline again that apparently no-one has reported this before - which must mean that few people have been affected by it. It is therefore not a good reason to throw away your HP48 G/GX or get on a high horse and demand that HP replace your HP48 G/GX - but I think it is important that people be warned so they can take appropriate avoiding action. The rest of this message goes into more detail - if you never worry about rotation calculations then you can safely ignore the rest - though you might find it interesting, so don't stop yet :-) One way to avoid this would be to add a new unit to the HP48 - call it what you like - the cycle or rotation or already implied in the HP48 S/SX; to see this on an HP48 S/SX, put 360 degrees in level 1 and execute UBASE - the result is 1, meaning that 360 degrees are equivalent to one base unit of angle measurement, but that there is no named HP48 unit corresponding to this. In contrast, UBASE on an HP48 G/GX considers the base unit of angle measurement to be the radian, even though CONVERT behaves as though the base unit is the current angle mode. There appear to be two different norms for base angle units on the HP48 G/GX! The whole subject gets very little mention in HP's manuals. In the original HP48 SX manual (two volumes, spiral bound), the section on Dimensionless Units of Angle in chapter 13, on page 198, warns the reader about the danger of using dimensionless units and states how angle units and scalars are treated. In the later HP48 S and HP48 SX manual (one volume), the same warning is given in Converting Dimensionless Units of Angle, on page 13-12. The HP48 G Series User's Manual, in Converting Angular Units on page 10-7, says that conversion will interpret a scalar according to the current angle mode setting. (A scalar is a pure number with no units.) For a detailed description, look in the HP48 S/SX edition of HP48 Insights Vol II, section 21.4.3. This book is written by Dr Bill Wickes, who was the design team leader of the HP48 SX, of explanations and details that get left out of manuals. A good explanation of angle units is exactly the sort of thing one can find there! He explains the pitfalls and unavoidable contradictions of working with angles in the HP48 units system and points out that the HP48 S/SX make the somewhat arbitrary choice of using 2pi as the base unit of angles, thereby making conversions between angles per time and Hertz work correctly. Maybe no-one on the HP48 G/GX team read this while they were making changes from the HP48 S/SX! Why did they change the base unit at all? Most likely they were trying to deal with another contradiction: the units system lets you add pure numbers to angles, since both are dimensionless. If you add the number 1 in level 2 to the unit object 0_r in level 1 on an HP48 S/SX, the number 1 is treated as 1 base unit, or 2pi radians, and the result is 6.2832_r - but if you take the SIN of the number 1 instead, it is not treated as 2pi, but as 1 unit of the current angle mode. The change made on the HP48 G/GX does resolve this contradiction, but at the cost of introducing the bug described above. As mentioned, a way to resolve the problems involved would be to add the angle unit cycle explicitly to the HP48 units system. Hz would then be treated as cycles per second when used in calculations involving rotations - rpm would be treated as cycles per minute, and conversions would go from cycles to the appropriate angle units. This suggestion was made by Peter a good solution - but they have not implemented it yet. In the meantime, be very, very careful when converting between units of rotation rate and units of angular frequency. I would urge everyone who does not yet have a copy of Insights II to buy one and read the relevant section - maybe that will even entice Bill Wickes into publishing his long-awaited HP48 G/GX version of the book! I have not yet mentioned solid angles. In principle there should be no problem - on both the HP48 S/SX and the HP48 G/GX the base unit of solid angle is a unit sphere, or 4pi steradians. On the HP48 S/SX you can add the pure number 1 to 0_sr and get 12.5664_sr (4pi steradians). The HP48 G/GX manuals imply that exactly the same should happen, but on my (version L) HP48 GX this gives the error message Inconsistent Units. This is yet another undocumented difference between the Series S and Series G but at least it is no bug! Apologies for making this description so long, I hope most people will agree that a subject like this deserves a careful description! For my next trick - some details on the HP48 Random Number Generator. Addition Insight: Note: The < symbol below is actually the angle character. The angular conversion bug is actually in the definition of the rpm unit. If you put 1_rpm on the stack, and type UBASE, you get 1.66666666667E-2_1/s. Notice that there is no angular unit in the definition. If the rpm unit is instead defined as 6_