B279 I've even made a program to automate this procedure. This Is this programn posted on HPCALC.ORG, if yes what is its name?, if not could you send it to me, or better give me and exteded explanation about how can i make it my self. Marturo Ubi dubidum, Ibi libertas ==== This is really trivial: I have in HOME These program archive the current HOME to port 1 or port 2. In port 2 I have After a crash, open the filer, go to port 2, select the correct restore program and press the EVAL menu key right there in the Filer. Since my HOME sometimes is quite big, I actually use ARCHIVE only to backup a minimal version of my HOME, with all settings, keybindings, compilation tools etc. Then, to protect current work from crashes, I often backup the current directory with something like DIRBU1: << PATH @ get current path UPDIR @ chdir to parent directory DUP @ remember path REVLIST HEAD @ get current directory name DUP DUP PURGE @ purge any previous backup of the dir SWAP RCL SWAP STO @ STO the directory in the port EVAL @ chdir back to the directory Then, after a crash I use REST1 to get back my HOME, and then I copy the current working directory from he port. - Carsten P.S. Yes, Wolfgang, I know these programs can be improved... ==== It's not, and, I'm sorry, I won't. It's very easy, but it's hard to explain in simple words. What do you find challenging in making such a program? I don't ask to be rude, but for me to explain something, I need to know what to explain. ==== I have a 48GX that has helped me a lot over the last ?? years. When the HP49 was released, I decided it was not worth updating but better waiting for the next good thing from HP. Now that we know that there will not be a next good thing from HP. I am thinking about changeing to a 49, I am mainly interested by better integration of the MK more RAM (although usually I don't need that much) and the flash which I believe is more reliable than the RAM cards. I would like to know if people here have good reasons not to switch to the 49. Arnaud ==== I think the HP48GX is still a very good calc! But the HP49G has a few very nice additional things like a CAS the flash ROM and more RAM. The flash-rom is really usefull. You can safe all your important stuff in port 2 and the chance to loose any files is small. You also have the chance to upgrade your calc (although there might be no new Rom-versions in the future). You have a lot more room on the 49 than you have on the 48 and I wouldn't say it's too much. Of course there are also some things missing on the 49. The keyboard is not the same as on the 48. It's quite stiff (at least when the unit is new) and has another layout. The Equation-library is missing and you can't work with units the same way you did on the 48. Of course some of the missing things can be cured with some third-party-tools (Not the keyboard of course;-)). If you think you need any of the new features the HP49G has to offer I think you should consider to buy a 49 (You don't have to throw away your trusted 48;-)). Hope that helps a bit. Have a lot of fun Roman ==== Why not? What is the difference (after flag -117 has been set, of course)? - Carsten ==== I should have been going more to the detail about this. I'm aware of flag 117. But as an example you can't use units in the equationwriter (you can do this on the 48), which is (in my eyes) quite annoying if you want to check some Results as an example. Also you can't use units with the solver (numeric and exact). This is much more annoying (On the 48 you could have a look at the unit of the result and find a mistake quickly). Correct me if I'm wrong and let me know if there's a way to use units with the solvers. Have a lot of fun Roman ==== I'm a 48 owner and I don't know what do yuu mean. How does the 49 work with units? ==== If you read the previous posts, there is a very clear reason why to switch to the hp-49: Cna you say Computer Algebra System? If you are at all interested in mathematics or math software, this is the step to take. I did it, and am very poeased with making that decision. You will not regret it! ==== ...but if he is using Erable, getting a 49 is only a little step... ==== I do have ERABLE and actually don't use it that much... But what I would really want to know are the reasons why I should not buy a 49 Arnaud ==== a 49 That's the eternal discussion: many say 48, many say 49 The reason why I don't buy a 49, is its keyboard. I use the 48 everyday, and looking the keyboard of my TV remote, I think in five years from now... I hope still use my 48 (and the old 15c I've just got) and I don't kow how the 49's keyboard will be. By the other hand I must recognize that my 48 with the softwre I've installed, seems more a 49 than an original 48... (MetaKernel, Erable, Alg, Inferential statistics...) But this is only my point of view. ==== Well, the problem occurred when i tried to enter the code. I even used the DEFINE function to declare some functions, and there was no problem, i could run them perfectly, but when i tried to edit them (using EDITB from filer) and reenter the very same code (without modifications) it poped up the error message: INVALID SINTAX pointing to the first declared local variable. Thnx. ==== I have tried to purchase from them recently and have not had any luck. The web site is operational but when I send inquiries to their posted email they get bounced. Others have told me they only get VM when calling them and no response. No response to email, fax, or telephone calls. It sounds like they are not operational. -Kevin ==== EQ will test if two objects, whatever they are, are equal, and return TRUE if they are. -- Eduardo M Kalinowski ekalin@bol.com.br -- **Novo e-mail** **New e-mail** http://move.to/hpkb ==== A small addition: EQ tests if two objects are the SAME - i.e. occupy the same address. EQUAL test if two objects are identical, but they do not necessarily have to occupy the same address - they can be duplicates in memory. ==== ==== Use EQUAL. Are you sure you have read Eduardos SysRPL documents? ==== userRPL, push the What is the reason for the space? Barry ==== I have ported my homeless library to the HP49G. And it has turned out to be absolutely useless. :-( After changing the name of the HOME user command, neither the HOME in the status area (header) nor the one in the Filer (which is Home) are changed. Perhaps there is another way to change { HOME } - The header info is kept in the system RAM, isn't it? ... Anyway, there's one more problem when using SETHASH on the HP49G: The new name for HOME (or whatever command renamed) is not used by the stack. It is correctly retrieved in the command line and in the interactive stack, but the stack viewer uses built-in names for commands, overriding the new hash table. For example: I'll try to release a general version of the homeless lib (to rename any command, built-in or not), but only for the HP48. Unfortunately, there won't be a rename library for the 49G - unless a workaround is found (changing stack format, fonts ...) I don't want to upload this useless Homeless49 to hpcalc.org, but I'll email it to everyone interested in reproducing this behaviour (bug?). One more thought: Is/was SETHASH buggy? Mika's entries.srt: K&D's Programming in System RPL (2nd ed, page 100): 07638 SETHASH ( hxs #libnum ! ) Buggy? Jim Donnelly's entry list (11/94): ( http://groups.google.com/groups?hl=en&selm=CyM2zE.HGv%40hpcvra.cv.hp.com ) **New and Revised Library handling utilities** SETHASH EQU #07638 Was SETHASH buggy in early HP48SX's? It seems to work flawlessly on revisions P and R, and also on the HP49G. Tonight I'll check my rev J. Bye. HPCC member #1046 johil@tv3mail.com - ==== Is there an alternative - built in way to edit an user-RPL program on the 49 ? Thnx. ==== 49 ? Alternative to what? ==== To EDITB from filer, when i create an user RPL program, i just type in the code and store it as a variable, but when i try to edit it, i need to get into filer and use EDITB, is there another built in way to do so ? THNX ==== When you have an object on the stack (taking for granted you use RPN mode), pressing down-arrow will launch the appropriate editor. ==== Also consider Left-shift-and-hold down-arrow to edit. ==== If you don't like Keyman, than use the built-in way. place you command on the stack in the program delimeters (what an odd word. that and ampersand) then you need to type in the number of its row, column and function respectively in the format ab.c. a for the row number, b for the column number and c for the function (0 and 1 are normal keystroke, 2 is left shift keystroke, 3 is right-shift keystroke, 4 is alpha keystroke, 5 is alpha left-shift keystorke, 6 is right shift alpha keystroke). As far as I am aware, there is not an alpha-lock keystroke in user mode. Am i wrong? EG: (display of an HP-49) 4: 3: 1: 12.1 ASN This would assign the radians command to the f2 key. (12.1: first row, second column, regular keystroke.) Then when you go into user mode (left-shift alpha), pressing f2 would put you into radians mode. Of course, all this is covered in the manual that I am sure you have read. On my hp49, I have 12-15 keys programmed for things I want done such as polar mode, degree mode, radian mode, cube root, log base x, etc. Good luck! ==== I am curious to see what the Great and Noble Hp Users here have as ROCCOHP, Wolfgang, John Myers, Joseph Horn, etc. (Sorry for not mentioning all of you, that would be a long list). Here are my humble key assignments: -Aaron ==== By no means am I a great here but you asked a very good question that strikes a cord with me and I would like to weigh in with my own opinion. I can get past the rubber keys and the lack of a large ENTER key (in fact, I actually like the Hamster Butt Blue color), but I have a big problem with the layout of the keyboard and the menu structure on the 49. I think it's sloppy and there are too many commands that are buried in menus that are either redundant or obscure and impossible to find unless you have been familiar with the 48's. Choose boxes and dialog menus (or whatever they're called) just don't do it for me (softkeys rule!). I think the HIST key is a waste of space if when the up arrow does the same (ANS should have been grouped with CMD and UNDO); and I wish CST, EVAL, DEL, MTH and PRG were not shifted, like on the 48. The X key also annoys me--they should have just kept it shifted like all the other alpha keys (for uniformity's sake) and used the unshifted key for something else like... (char #128, alpha-LS-6; what a pain!) is also missing. I don't like the way the Greek letters were mapped to the keyboard and also think that the TOOL key was not well One of these days I'll get around to using Keyman, but in the meantime, I went back to my 48 because I have never, after nearly two years, gotten used to the 49's menu structure. (also, the 49 has no provision for a keyboard overlay) I think the problem has to do with the 49 trying to be everything to everybody by appealing to the high school TI crowd. The bottom line is that RPN and soft keys don't mix well with Algebraic and choose boxes, in the same machine... one or the other please, preferably the former. and RS-hold-9 key assignments. Isn't flash ROM so cool? I nearly lost it with 1.05. I only wish now that flag -91 could only be toggled from within MTWR. Here are my assignments (subject to change without notice): Sincerely, G Savage 11.1 .82 RND é 11.2 .82 MEM DROP { 'y=(x-x1)/(x2-x1)*(y2-y1)+y1' 'y=m*x+b' 'y=(x-x1)/COS(ATAN(m))*SIN(ATAN (m))+y1' 'y=(x-x1)/COS(a)*SIN(a)+y1' 'm= y2-y1)/(x2-x1)' 'b=y -(y2-y1)/(x2-x1)*x' } STEQ MINIT LINE EQS { x1 y1 x2 y2 x y m b a } MITM MSOLVR HALT { a b m y x y2 x2 y1 x1 Mpar EQ } PURGE 0 MENU é 12.2 .82 83 MENU é 13.2 .82 81 MENU é 15.1 .82 PICK é 21.2 .82 104 MENU é 22.1 .82 65 MENU é 23.1 .82 ANGLMENU TMENU HALT 0 MENU é -- ANGLEMENU is a custom menu in the HOME dir that contains a number angle related commands like: 25.1 .82 DEPTH ROLLD é 32.1 .82 STEQ é 35.1 .82 DEPTH ROLL é 36.1 .82 ROT é 44.1 .82 93 MENU é 45.1 .82 DROPN é 45.2 .82 PURGE é 45.3 .82 PGDIR é 54.3 .82 DERIV é 55.3 .82 RISCH é 63.1 .82 -73 tglF é :This requires the eql49 lib, L1008 72.1 .82 30 MENU é 72.2 .82 74 MENU é 72.3 .82 STEQ MINIT MSOLVR é 74.2 .82 80 MENU HALT { FV PMT PV I%YR N PYR } PURGE 0 MENU é 75.2 .82 -91 CF [[]] 1 DISP 1 WAIT é 82.3 .82 93 MENU é 83.2 .82 5 MENU é 83.3 .82 96 MENU é 84.1 .82 CONVERT é 85.2 .82 AXL é 93.2 .82 110 MENU é 93.3 .82 113 MENU é 95.1 .82 ADD é 95.2 .82 -91 SF {{}} 1 DISP 1 WAIT é 102.1 .82 60 CF 61 CF CONST é 103.1 .82 60 SF 61 CF CONST é 105.1 .82 DUPN é ==== Well, PDAs are becoming more and more powerful. You can even run maxima on some of them. Granted, maxima requires some typing, but it can do a fair amount: [ NOTE: the following requires a fixed/monospaced font like Courier for correct displaying. Using a proportional font will make the following look like junk. ] (C2) factor(10!); 8 4 2 (D2) 2 3 5 7 (C3) factor(x^6-1); 2 2 (D3) (x - 1) (x + 1) (x - x + 1) (x + x + 1) (C4) expand((x+y)^6)); 6 5 2 4 3 3 4 2 5 6 (D4) y + 6 x y + 15 x y + 20 x y + 15 x y + 6 x y + x (C5) integrate(1/(1+x^3),x); 2 x - 1 2 ATAN(-------) LOG(x - x + 1) SQRT(3) LOG(x + 1) (D5) - --------------- + ------------- + ---------- 6 SQRT(3) 3 (C6) linsolve( [ 3*x + 4*y = 7, 2*x + a*y = 13], [x,y]); 7 a - 52 25 (D6) [x = --------, y = -------] 3 a - 8 3 a - 8 (C7) solve( x^3 - 3*x^2 + 5*x = 15, x); (D7) [x = - SQRT(5) %I, x = SQRT(5) %I, x = 3] The above was done under maxima on Unix (and was taken from one of the maxima docs). On a PDA like the Sharp Zaurus, which has a narrower display, the result of the above integral would look like: (C2) integrate(1/(1+x^3), x); 2 x - 1 2 ATAN(-------) LOG(x - x + 1) SQRT(3) (D2) - --------------- + ------------- 6 SQRT(3) LOG(x + 1) + ---------- 3 For a pocket analysis device, much of the core engire is there. What's missing are the helper GUI and plotting capabilities (2d/3d plots exist under Unix/Windows, but not on PDAs). -- Darryl Okahata darrylo@soco.agilent.com DISCLAIMER: this message is the author's personal opinion and does not constitute the support, opinion, or policy of Agilent Technologies, or of the little green men that have been following him all day. ==== yeap i got maxima running on the terminal. it would be nice if they made it a pakage with plots, but i've already seen two plot programs for the zaurus. also, they could use hand-writen recognition (NK dream) or maybe use Parisse CAS :) ==== eMate, anyone? :-( Pete M. Wilson Gamewood, Inc. wilsonpm@gamewood.net ==== zero@wanadoo.es ==== Well, one possible way would be to solve one of the differential equations, substitute the solution to another, solve it and so on. Example: System: 1) d1Y(X)=Y(X)*Z(X) 2) d1Z(X)=Z(X)/X Enter (2), enter (1), enter Z(X) and press DESOLVE. The solution is Z(X)=cC0*X. In this solution change cC0 (constant of integration) to something else, for example cC01. Now you have diY(X)=Y(X)*Z(X) and Z(X)=cC01*X on the stack. Press SUBST to substitute Z(X) in (1) with cC01*X. Now you have d1Y(X)=Y(X)*cC0*X. Enter Y(X) and press DESOLVE. The solution is Y(X)=cCo*e^(X^2*cCO1/2), with cC0 the integration constant of the second differential equation. (We changed the first so that it doesn't interfere with the second.) It is also possible to SOLVE a differential equation for some function, the derivatives of which doesn't appear in the equation. Then we can substitute the solution to some other differential equation. For example you could SOLVE (1) for Z(X), take the answer Z(X)=d1Y(X)/Y(X) and SUBST it in (2), to obtain a new differential equation that only contains derivatives of Y(X) and the function Y(X) itself. In this case the resulting differential equation is more difficult for DESOLVE, but for other cases easier differential equations might result. Of course this way will not work always, but some systems can be solved that way. Hope it helped a little. Greetings, Nick. I downloaded EMU48 to my Ipaq (3670) and when I start it up, it delays for quite a while, then prompts with a message about whether I wish to retain memory... regardless of my answer, it just sits there. Although the keys seem active (at least they respond when pressed), nothing is ever displayed. I used the HP48GX rom, if that makes a difference... Megan Gentry Former RT-11 Developer +--------------------------------+-------------------------------------+ | Megan Gentry, EMT/B, PP-ASEL | Internet (work): gentry!zk3.dec.com | | Unix Support Engineering Group | (home): mbg!world.std.com | | Compaq Computer Corporation | addresses need '@' in place of '!' | | 110 Spitbrook Rd. ZK03-2/T43 | URL: http://world.std.com/~mbg/ | | Nashua, NH 03062 | pdp-11 programmer - some assembler | | (603) 884 1055 | required. - mbg KB1FCA | +--------------------------------+-------------------------------------+ ==== What is a Compaq Ipaq? Don't you mean a HP Ipaq? regards, Cyrille When I bought it, it was still Compaq... and is branded as such. regardless, it is still an IPaq. Megan Gentry Former RT-11 Developer +--------------------------------+-------------------------------------+ | Megan Gentry, EMT/B, PP-ASEL | Internet (work): gentry!zk3.dec.com | | Unix Support Engineering Group | (home): mbg!world.std.com | | Compaq Computer Corporation | addresses need '@' in place of '!' | | 110 Spitbrook Rd. ZK03-2/T43 | URL: http://world.std.com/~mbg/ | | Nashua, NH 03062 | pdp-11 programmer - some assembler | | (603) 884 1055 | required. - mbg KB1FCA | +--------------------------------+-------------------------------------+ ==== I'll use a hash (#) for sigma in this post. 1 #XY - - * #Y + #X n ------------------- 2 1 2 #X - - * (#X) n or put differently (#XY-1/n*#Y*#X)/(#X^2-1/n*(#X)^2) I want to store it as an equation named BofRL My problem is when I enter #XY it wants to evaluate it and of course doesn't find #Dat. Using '#XY' doesn't work because then the expresion does not correspond to the format of # on the HP 49G. Michael ==== Now this is a really hard to understand group. HP users keep bragging about the RPN superiority and now you insist on using an algebraic expresion. First of all, the numerator should read #XY-#X*#Y/n (that is #X and #Y are supposed to be multiplicated, not added). Now, write this in your calc (please tell me you are in RPN mode) 'BOFL' STO There you go. Now edit #DAT with your data and to find b just hit BOFL. Isn't that easier?. cybernesto PD: Yes, you could also use the function #line and find a and b, or decompose its result and keep b or whatever. ==== I noticed that after my post. Here is my solution. I tried to write it on the equation writer because I only just bought the HP and didn't think of writing a program for it. ==== What do you need to store in #DAT? Is the expression a function of n and a data set? ==== Yes #DAT will be a set like the following one, where the first coloumn are the values of X and the second one the values of Y. 2 120 8 210 3 185 5 160 4 142 6 110 6 155 Thus #X = 34 #Y = 1082 #XY = 5433 ... The fomulae will then calculate b in the regression line y=a+bx. (Statistics) The other thing I thought of is writing a program to calculate this from the existing #DAT, but it would be easier writing the equation and using eval on it to do my calculation. Which seems impossible. Hope you can help. Michael ==== Reply posted and emailed. Consider, in RPN mode, the program LINFIT makes sure that the straight line regression pattern is used. LR puts a and b from 'y = a + b*x' on levels 2 and 1 of the stack, resectively. NIP eliminates a from the stack, leaving b on level 1.. ==== use the equationwriter (EQW) for this. Have a lot of fun Roman ==== I have tried. It simply does not work. ==== ;-( You're right doesn't work. Roman ==== Just to get a feeling of the difference in speed consider the following two versions of a loop. Both count from 1 to 100 and produce the sin of a number N in approximate mode. Algebraic version in RPN mode: TEVAL gives 14.09 seconds RPN version in RPN mode: TEVAL gives 1.98 seconds which is about seven (7) times faster! My experience has shown me that depending on what you ask the machine to do the difference varies from about two (2) up to about ten (10) times faster than in algebraic mode. Do your self a favour and use RPN exclusively! Besides,it was never meant to be used as an algebraic machine. It would be crippled anyway. !Demeter! ==== You can't compare the two results. They are not doing the same thing and does not return the same result. I think you make the confusion between running a ALG-like program and a RPL one. Overall, yes RPL will be faster, however I have some cases where it's not the case :) Doing calculations however, using RPN will be faster and you will also see the intermediate results... Otherwise for long calculation involving the CAS , time should be similar as the algebraic compiler is extremely fast. Reply-To: ttw@lanl.gov ==== RPN takes fewer keystrokes, in general, than algebraic. RPN is closer to pencil and paper calculation. Algebraic looks like printed formulas. ==== Last night, I did my homework (ok, no more puns :) First of all, please note that in several docs, the order of the arguments for SETHASH is wrong. It should be: 2: romid (bint) 1: hex string ROM revisions A to M have a bug in SETHASH. The instruction at #0764Bh is GOC #07661 and should be GONC #07661 instead. In other words, the nibble at address #0764Bh must be '5' instead of '4'. It was corrected in rev P. Therefore, '48 versions P, R and all '49G don't have this bug. The workaround is simple. Use this code instead of SETHASH: CODE A=DAT1 A D1=D1+ 5 D=D+1 A R3=A ST=0 11 GOVLNG =SET (#07661) ENDCODE Bye. HPCC member #1046 johil@tv3mail.com - ==== Well, It's now the turn of APCD in Singapore it seems as HP has decided to stop the Jornada product line in favor of the iPaq. The APCD division will be dismantled except for the remaining Jornada with keyboard... Another decision lead by profit. The APCD's Jornada have been fully designed in house, while Compaq had OEM their iPaq to a Taiwanese company. They never did anything in house. The pity is that the last Jornada that was supposed to be released soon running Intel Xscale will go to garbage as well... What a shame, even the HP quote name has changed .... ==== JYA et al, I think it is a sad endictment of the times we live in, where stock value of a company is held in higher esteem than the product itself. OK, we definitely need investors in public companies, but if the company then steers its direction towards satisfying stockholders only, is that really the best way to stimulate innovation? Who invested in the Wright Brothers? Were they worried about stockholders? (Having said that, I don't think the Wright Brother tried to run a commercial airline!). I think we all thought of HP as innovators, and now we are questioning this. They are becoming (it seems) just another vendor. Necessary, but not nearly as interesting. Mark. ==== What else do you expect a company to base its decisions on? By the way, as a publicly held company, HP has a duty, by law, to its shareholders to maximize their profits. ??? What did you expect? That after the merger the new company would keep two stock tickers? That only one of the previous two would be used? Organization: Global Dial Internet ==== I am no expert on market but can remember a couple of things. One was that when you are in a mass market of a generic products like petrol or computers the hardest thing to attain was product diferentiation, or how to make your product stand out or preferable to similar generic products. HP used to be envied for having just that. They have now elected to join the mass market where they will be competing purely on price and the only profit control they will have is to reduce cost. This will limit them to a profit margin no better than the best practice of their competitors. Lack of R&D will also leave them vulnerable to future products and the long term viability and growth is suspect. ==== Of couse, but in there .com days, companies are playing short -term, only thinking about raising the share value in a month or at most a year, but completely forgetting the long term. Nowadays, value is not what we call value, but the expected value of stock options and shares within a year. I guess we will se e lots of big companies crashing in some years. Borja. ==== No, you're wrong. A company is obliged to play with open cards in many respects - it's not responsible for shareholders money. Maximum Shareholder Profit is one of many company profiles, and most companies has that as a percentage of the total profile (maybe 60%, maybe 30%). Many other ways to drive a company is much more important in the long run, but MSP yields a (somewhat large) result in a matter of days and weeks. This amount of success is not reachable by any other means, but it's a hollow success. In a few years time, a company betting 100% on MSP will die or be drastically crippled. In recent years there has been a huge rise in MSP profiles, and that I see as a big drawback. It's the greatest contributer to the crumbling of the IT-company illusion a year ago. Some learned back then (or got reminded), but HP (for instance) obviously didn't. To stand tall in the future, a company needs a fair amount of loyal employees, a couple of unique products (only attainable through an R&D departement with innovision), and black numbers on the bottom line. The size of the black numbers are less important than a healthy environment internally, and a clear vision for the future. Without vision, a company can't be number one. It tends to be last instead. One reason I see for this, is that economics is a bit like politics nowadays. A money wizard has to put up huge results in a very short time, or else he'll be looking for a new job in an instant. A bit like a politician afraid of not being elected again. If a company doesn't back an employee solidly in his decissions, then that employee has to stand for himself. Few in this world manages that now, so they have to kiss ass - and they have to do it fast. ==== What I said is not subject to debate, it is the law, in any country that knows the legal construct of a publicly-held company. As for the rest, maximizing profits does not mean maximizing short-term profits at all. Anybody with the least bit of knowledge in the area understands that, including the leadership of HP. ==== The law in Denmark does not say that a company shall maximize shareholders profits by any means, and at any cost. That would be silly, and would in fact lead to making do with the short term profit. It doesn't seem so. ==== Neither does it say so in the US, and neither di I say that. Yes, so why bring it up? ==== You obviously know even less than what I thought. And unfortunately you miss the big picture again. APCD was a profitable division. Never heard of them as loosing money. You're talking short term profit vs long term one. APCD was another leading R&D arms for HP. They did innovative work in handheld devices, wireless communication, battery life and so on. Compaq never did anything similar with their iPaq product line. First they OEM from Casio, then from a Taiwanese company. When they decide to shut down APCD it seems to follow a simple minded calculation: -look at profit, which one provides the biggest sale/expenses ration: Compaq, let's get rid of our own division. But what about the essence itself of what makes a leading industry? Research and innovation. If you remove and stop any operation of this kind, after a while what do you have left ? Did you have a look at the latest iPaq range vs Jornada? Sure iPaq had a leap forward. They used a 206 StrongArm CPU while the first jornada used a SH3 cpu. So iPaq was faster with a better screen. That was 3 years ago. What happened since? Did you see much change in the iPaq product line? Not much. While Jornada caught back, with a better screen, a much faster CPU. Now they had GPRS and blue tooth running on Xscale. A world first. Where is it going to finish? Garbage bin. You stated you were a teacher ? Now I'm starting to worry if you teach your student about your life's values: short term profit vs long term investment and innovation. Let's hope you post here just because you like arguing. I am an HP's shareholder, and I do not like how everything is going. Did you have a look at HP's stock in the past 2 years ? I do not care if HP is looking at a very short term maximised profit. If in 5 years from now there's no real innovation at HP, the stock will worth absolutely nothing. I don't salute you ==== My dear young friend, it should suffice to observe that you are in no position to make any kind of judgment on what I do or do not know, nor do you seem to have any idea at all what that big picture might be that you are talking about. So? Is that your big picture? As long as you are not losing money you should be fine? Are you really as naive as that? Maybe you would be kind enough to point out a statement of mine, any statement at all, that implied that I was talking about short-term profit. Otherwise, this is just another example of you fantasizing, I am sorry to say. Were you present at the board meetings when that decision was discussed? If not, on what basis do you make the above statement? Wait, let me guess: You just feel that that is the way things were decided, right? Well, I'll tell you a secret, young man: The people making these kinds of decisions are far less naive than you imagine them to be. It may surprise you to hear that, but, by and large, they are not complete idiots as you seem to assume. In particular, nobody in his/her right mind would base a decision like that on a sales/expenses ratio, whatever precisely that is supposed to mean... Is there any indication that the new company is planning to remove and stop any operation of this kind? If not, what precisely is it that you are talking about? Again, I must ask you, are you privy to the details of what will happen to that division and its assets? Do you know what will become of its intellectual capital? Are they selling off their pertinent patents to competitors? How many and who of the personnel is going to remain working for the company, and in what function? If you cannot answer these questions it appears, unfortunately, that you are again fantasizing. My dear child, you are free to worry about whatever you want. For the rest of the world, however, it appears that your worries are based on nothing but fantasy, as I pointed out above. You are free to sell your stock whenever you like. You are also free to vote according to your convictions at the appropriate occasions. Yes, so? Have you looked at the market valuation of just about any NASDAQ stock during the last two years? [Laughing] My, my, aren't we a smart little fellow! You should call up Carly and let her know what amazing discovery you have just made. I am sure she will appreciate learning such a fundamental truth, asking herself, like I do, how it could be that she never thought of this before. Grow up, child, and stop acting like a spoiled brat. You are not young enough anymore to excuse this kind of silly behavior. Love -- Helen. ==== Ok, Helen, I just lost all respect for you. I won't discuss this much further, but simply state a couple of things; But they are, largely (because they are driven by secondary goals). And yes, before you insult me - I see this first.hand often, I'm not naive, I do get what's going on, and I can clearly see a couple of the reasons to that behaviour. Logic does not guide this.... If they shut down a departement, and thereby loose all knowledge in that direction - how can they but stop any operation of that kind? You pretent to know who JYA is (and how old he is), and yet you ask that? *ploink* ==== Being driven by secondary goals is not the same as being an idiot, I'm sure you will agree. Why should I? I am generally a polite person, unless I am treated rudely. I have my doubts how far your experience reaches, and inhowfar it can be generalized, but I don't want to pursue this any further. Yes, it does, mostly anyway. The fact that you do not know all of the reasons underlying a specific decision does not mean that there weren't any. understand the context. By operation of that kind he was referring to any research and innovation, a claim that clearly has no basis. Yes, I do, although this was a rhetoric question, meaning that it has an obvious, negative, answer. Frankly, I don't understand your question. ==== And you have ?. You have nothing to say, just talk and talk. You said that before. Why are you asking this now? Ha ha ha. I believed you really knew about this. You would be taken aback if you knew how many decisions have been based on sales/expenses ratio. In addition to your age, are you nearsighted? Come on !!!, you can't see what everybody can? Agree, but as I said before : She can't be a teacher. Can everybody see? Just talking nonsense. Is he a child or not young enough ? Make up your mind! I think you just want to argue everything even if you are wrong or not. I'm wondering why. Max. -- ==== [Still laughing] Oh please, don't do that again, my side still hurts from laughing! I wonder if you can understand why... ==== We all have sources, but hey, I'm just a child right? Oh really? I wonder what your comments would have been before all the dot-com companies collapsed. Well, when it is a fact that the compaq iPaq team hasn't done any R&D but performing OEM, and you have retranched all the engineers that was working on it ... Come on, you should know better that in IT companies the main assets are the workforce. Without it, what's left of the intellectual capital? I won't give any precise numbers, that fact is, divisions are being shut down. I have ex-colleague that used to work there remember ? That would be fine if people received the proxy cards BEFORE the actual voting date. For the last annual meeting, proxy cards were sent 4 days before the actual voting, making it virtually impossible for anybody leaving outside the US to vote. Well, first of all HP is not listed on NASDAQ and if you want to compare look at IBM or GE then, Getting touchy now? Time will tell. At least I answer email when sent to me (unlike you) and I'm not hiding behind a fake female name. ==== I'm sure you do... No, you're not, but your problem is that you are acting like one. What a curious comment! So you think there is no difference between a dot-com and, say, a Fortune-500 company? Well, there's all sorts of people who make up a work force. Some are more essential than others. I asked you a number of questions. I explained to you that if you could not answer these, we would have to assume that you were just fantasizing. You replied, in so many words, that you don't know the answer to any of my questions. Case closed. Oh, of course... Why does that not surprise me? Why, of course they are! Do you think the new company should have parallel divisions for each of the areas they had in common? Ex-colleagues that used to work there? God almighty, do you even realize how pompously silly you sound? ??? Oh, I am sorry, I tend to forget your limited mastery of our language, which apparently prevents you from recognizing sarcasm. I will try to be more considerate in the future. [Incredulous] So you really imagined I would answer the kind of email then. Manners, first of all. ==== has taken an unfortunate turn. I sincerely apologize for my inappropriate remark concerning your English, which I regret. Furthermore, seeing as this thread is quickly leaving any rational ground, I will not pursue this discussion any further. -- Helen ==== Stick och brinn k.8arring-skr.8alle. ==== Y el resto, bonita de cara, te lo pongo en nuestro idioma (no vas a ser la .9cnica que pueda hablar de nuestro) y as.92 podr.8e usar el sarcasmo tanto como me venga en gana y t.9c, mestra en tantas lenguas, seguro que captar.87s los matices. Parece que no hay mucha gente que sepa qu.8en eres. La opini.97n m.87s generalizada es que te ocultas cobardemente bajo un seud.97nimo y encima, te dedicas a hacer comentarios insultantes y maleducados. Parece que ser.92a una suerte para este grupo, que no goza .9cltimemente de buena salud, que silenciosamente marcharas por donde has venido. Y nadie te echar.87 de menos: a enemigo que huye puente de plata. Atentamente ==== You are too kind. But as I said, I am not very good at Spanish, although I think the above should be o.k., and your post is blunt enough to not require much in the way of discerning nuances, I think. I think that is not a fair characterization. I was simply responding in kind. I wonder whether you find anything to criticize in JYA's behavior. Well, maybe you're right. -- Helen. ==== What a RUDE comment!! (...and, in how many lenguages are you as fluent?) ==== Yes, unfortunately. You need to consider the context of this behavior polite, now, would you? Three, but Spanish is not one of them. I can read some Spanish, and get the gist of it, but its finer nuances escape me, I'm sure. ==== Hum, interesting, I wonder if there's anything you can't do well. PS: still waiting for an answer to my email... ==== Comments from different posts below. far less naive ???! I'll tell you, these people play games just like everybody else do, except their stakes are a lot bigger (B$) than most. They'll make decisions like the pointy hair guy in Dilbert - which BTW is based on actual events that the readers pass on to Scott Adams. I read about Control Data in the 60-70s where the VPs would run very good people out of the company because those people would tell the VP his idea won't work. Then the VP gets canned after a year or two. Result=no good people in the company any more. This is exactly what Carly is doing. All you have to do is look at Enron, Arthur Andersen, etc. Here in the Detroit area we have DCT & K-mart. I'm sure the people here can come up with dozens if not hundreds more cases of stupidity by Corp. executives. Transferring projects from one division to another is a good way to kill the projects. Even if the project survives, you lose at least a year in development time. All except the most important patents. For a division like APCD in Singapore it might as well be everything. John Edry ==== Well, I can tell you how 'Intellectual property' is passed from a closing division to another one (by experience): The closing division engineers are busy filling their resume, meanwhile, the division 'taking over the business' are comming and are putting yellow stickers on the equipement they want to get... and that's it! This means that everything gets lost! more product while the knowledge that they are pattented fades away, the patent doesn't get renewed 4 years laters, and all is gone... This might sounds negative, but it is the reality! when you close a division, you loose everything! regards, Cyrille ==== you Agreed:Also, take in consideration the employee morale...All time lowest.... Is that the way to run a company???Heck No!!! I know alot of employees that are bailing out in different divisions... Carly has has tarnished HP's image greatly...Furthermore, how is HP going to attract new candidates for Research and Development... in the newspapers have focused in, on this very thing.... Someone at work told me that Carly had this philosophy of developing this perfect business model and she'll be remembered for it... Are we talking about someone who wants to surpass Deming??? I think Carly might do better working Nabisco or some other food manufacturer....I don't see her business philosophy at all. Micheal Dell is gaining on her mistakes....Big Time......Along with a few competitors.....Would you buy an HP server right now??? What a huge mistake!!!! James ==== No point in staying in business if you can't turn a profit. I just hope HP knows what it is doing by ditching the different departments....sooner or later they are only going to be left with printers or selling parts for printers.... What a sad state of a company that used to be herald as an industry leader.... Mark R. ==== My first exposure to HP hardware was in the early 70's. My impression of HP has always been one of quality, proprietary hardware from a market leader. HP's greatest triumphs seemed to me to be derived from first-and-best-in-class devices. When I went out into the industry, I saw HP Gas Chromatographs in all the labs, exclusively. The all familiar tactile-feedback buttons, plotting functions, &etc. I've never seen a non-HP GC. IMHO they made their first mistake trying to compete against IBM PC's (as did Radio Shack). This rapidly became a commodity item with smaller margins, as eventually did the calculator. The leadership became more and more difficult to assume. As Microsoft is finding out. I guess people have been much more inclined to use crappy calculators (YMMV, and no offense intended) than crappy GC's, if there are any. Cheers -- Mike R. ==== I don't think its gust a matter of turning a profit. because hp shuts them down even when they do turn a profit(hp calculators for ex)the new mega company is looking at things this way we as a company taking x amount of millions of dollars what's the ratio of profit from this division if its not way up there they will cut it.now if millions of people bought jordans or say the hp48 then hp would keep them. the bottom line in a big company like that is not people it investors and what gets them the biggest gains. If laying off 2000 people adds $10.00 to my stock ...............then let the axe swing screw them. of course I don't think that's right butwe little people dont count unless we all scream with one voice which of course rarely hapens enough to make a difference printers ==== Can you give an example of when it makes a sound in CAS? What calculation will produce it? ==== For example: LIMIT(1/X,0) ==== I don't think there's any way to switch the sound on or off on the ==== i have the following simple linear system which should be solved: x + y = 1 2x + 2y = 2 ... if you solve this system, you must get infinite solutions, but the hp49's CAS does give a special value: x: 0.5 and y: 0.5 Is there any option to show that there are infinite solutions? Or: how does the CAS search for the result, it is not randomly generated. Thx, Erdal Karaca. ==== CAS Erable 3.2 on my 48 gives the next infinite solutions: x=1 - y. I get the same in my 49 emulator. Can you explain what are you doing? ==== There are linear systems which have infinite solutions, like x + y = 1 2x + 2y = 2 But the 49 doesnt show that the linear system has infinite solutions, it just shows one solution. My question was: is there any possibility on the 49 to flag a linear system as one with infinite solutions, i.e. how can I know that a certain linear system has infinite solutions? Thx, Erdal. ==== Second part: Your example system has only two variables and we can think geometrically First eq: straigth line Second eq: the SAME straight line Solve: What points - pairs (x,y) - belong to both? Solution: ALL First eq or second eq is the solution. ==== Second part: Your example system has only two variables and we can think geometrically First eq: straigth line Second eq: the SAME straight line Solve: What points - pairs (x,y) - belong to both? Solution: ALL First eq or second eq is the solution. ==== Yes No, Erdal: x=1 - y is the infinite solutions. The infinite pairs (x,y) that form that straight line are the infinite solutions of the system. And this is a valid form for giving them. ==== (SNIP) (SNIP) The same thing happened to me sometime ago, on a Win2000 machine. As often we do in informatics sciences I fixed the problem by uninstalling and reinstalling the program. Give it a try.. maybe it can help you Kickaha ==== I wanted to fix a couple of small items in debug2 (I typically hex patch it so it puts the right headers for my 48GX). Also thought it would be cool to change the informbox maker to work with the older HP48 forms! So I downloaded the sources from the debug2 homepage. They are a little old! I'm a very experienced PC developer BUT not with PASCAL or DELPHI 6. I did change the directories settings of the project to properly scan the sources but I still get lots of errors. Anyone know how to patch the debug2 sources for DELPHI 6? Anyone ever worked on these sources and maybe could give me a pointer as to how to get them compiled (I get lots of errors just loading some of the forms!) -- - - - - - - - - - - - - - - - - - - Bill Graves RKBA! bgraves@ix.netcom.com ==== Did you first compile the components in teh 'composant' directory? you should do that first, then install the new package. You should then be able to open the forms from the source code... BTW, do you want the last version of the sources? regards, cyrille it to ==== This would be fairly hard to do. Apparently, you are limited to 256kB of heap, and I am guessing that the ROM of a 48 is more than 512kB. It would be nearly impossible to get 50% compression for something that is not very redundant. You could use a sort of paging system, but that would be excessively annoying. I am guessing that the biggest part of the OS, other than the normal math operations, is the UI, so it could be contained in one image and the other stuff in the other image. You do not exactly need most of the UI to be running when you are running a program (ex. filer, y= editor, etc.). If you page between the UI and the rest of the ROM, there should be little overlap. A better idea might be to make the math part of it as a data file. The emulator could lookup what to do as it encounters various math operations. This would make the emulator slower, but it would not require paging as much. Is the 256kB limit there is asm? If not, an emulator could be written in it and the entire ROM could be used. MuPAD on a handheld device would be cool, but I cannot seem to find the source to this 'open' CAS. I think that it would be very cool if Math Xpander was ported to the Apple Newton 2X00/eMate. They use StrongARM processors, so it should only take a recompile for it to work. I believe that WinCE cripples devices that could have the power of a desktop computer. The OS is huge and slow. For the most part this is because it was written to be used on all sorts of hardware. If they would just write a different version of the OS for different hardware setups, it would be far more efficient, there would be less OS bloating, and the entire device would run faster. Dylan X-Newsreader: Microsoft Outlook Express 5.00.2314.1300 ==== See also Coconut, HP41CX emulator for Palm OS : http://www.berndabel.de/products/coconut/ Best regards VG aapvtf$covop$1@ID-88878.news.dfncis.de... ==== can someone send to me the manual of the hp28. i know its old but if possible please help. a link a pdf or any sugestion please. ==== www.hpmuseum.org . They sell (cheap) a collection of CDs with manuals from discontinued HP calcs. The set contains the HP28 manual and several application guides (some scanned by me). Charles Perry P.E. ==== I think both of these statements are wrong. If they had listoned to the people in the calculator community that use their calculators on a day to day basis to do work and not play games, they would have made an upgrade to the 42s. That is what we needed. I like my 48GX, but it is very dificult for me to program on the fly. The 41/42, you could start a program and stop and save it from time to time or stop and come back to it when you decided where you wanted to go next. The 48, from my experiance, you have to have the program finished on paper before you even start entering it into the machine and if it's not just right, no save until ALL the i's are dotted and t's crossed. No middle ground, finish it or dump it, that is what I don't like about the 48 or the 49. ==== wow u guys are going of the deep end. I bet some years ago at the dawn of the use of electricity they had the same very talks....I'm sorry I just don't think these light bulb things are all that use full people should have to light each candle and lantern buy hand..I mean really people will become lazy if with a flick of a switch they can turn on hundreds of light instead of getting out the ladder and lighting each lamp individually ok maybe that was a bad example (some have gotten incredibly lazy ;)) This is the 21 century if we do not train students on computers and calculators they will be lost and unable to compete in a world were the time necessary to complete complex mathematical computations just is not there not when the competition is using computer to crunch the math. does that mean the student should not have the ability to do it long hand of course not. The computer/calculator is a tool like a wrench if u do not know what a wrench is or how to use it properly its useless. the problem is not the computers its the mentality of the general population that looks for an easy way out of every thing anything that takes work or more thought than what's on MTV to day is out of the question. my chem2 Prof. said time and time again before u touch that calc or even pick up the pencil know the chem./math involved in the problem and start working on the answer in your head. starting while ==== Even worse than what I thought. Sigh! :( Then making handhelds/notebooks/pdas/whatsoever that are affordable to anyone id a must. Can we hope for that? Greetings, Nick. ==== Wow ! We're surprised... you are getting better. No, not here. We caught you many messages before. Imagine if We would speak english. Results of calculations with no sense is very common... yeah ! But that is not because of calculators or slide rules, it's because they don't know what they are doing. We've never used a slide rule, not even We've math_physics_enginering is not for everybody... In the same way biology was not for me....and chemistry for me... :) -- ==== Well... If you start now, you'll be amazed about the capbilities of you Hp49. If you have some imagination (and patience) you can build some cool progrs. The tecniques that you'll going to acquire will let you be a better programmer in any language. For a example: I, sometimes, use some assembly stuff in my Delphi projects, the tecniques used in some programs for Windows are the same for Saturn. DanieL. ==== Probably not worth wasting your time on it. It is to all intents and purposes a dead language with an archaic syntax. The Saturn processor on which it only runs is well past it's use-by date. I doubt you will ever see another HP/Saturn calculator. Personally I think it is a shame to see the death of RPN and the well designed calculators that HP used to produce. However the market has voted for TI's so, if anything, you are better off learning to like your TI. ==== http://cgi-bin.spaceports.com/~hpkb/tutorials/index.php This is the addres for Programming in System RPL by Eduardo M. Kalinowski and Carsten Dominik. Is an awesome book, very clear, there are some things that i don't understand but that is my fault :). Marturo Ubi dubidum, Ibi libertas ==== You are welcome. BTW, Carsten is my first name, Dominik is my last name... - Carsten ==== I'd try these programs first: [48] http://www.hpcalc.org/hp48/science/chemistry/chemlb27.zip [48] http://www.hpcalc.org/hp48/science/chemistry/eqbil48.zip [48] http://www.hpcalc.org/hp48/science/chemistry/equil.zip [48] http://www.hpcalc.org/hp49/science/chemistry/chem.zip [49] http://www.hpcalc.org/hp49/science/chemistry/chemlb27_49.zip [49] http://www.hpcalc.org/hp49/science/chemistry/eqbilv16.zip Hope this helps. Bye. HPCC member #1046 johil@tv3mail.com - -- ==== I've just written: Sorry, it should be: http://www.hpcalc.org/hp48/science/chemistry/chem.zip Bye. HPCC member #1046 johil@tv3mail.com - -- ==== I think you used a translator to post your text in english, but i really don't understant what you mean in some parts of your post, i don't know if somebody else whose native language is english will, if you want you can post the message in spanish and i'll translate it for you, my english is not perfect, but maybe is better than a computer translator. Marturo Ubi dubidum, Ibi Libertas ==== Here are the programs I use to manage library data objects. The first one is based on ROMPTR E4 11. :: 0LASTOWDOB! CK2NOLASTWD CKREAL COERCE TOTEMPSWAP TWO{}N DUP OSIZE CODE GOSBVL =POP# R1=A.F A GOSBVL =SAVPTR A=DAT1 A D1=A LC(5) =DOEXT0 DAT1=C A D1=D1+ 5 C=R1.F A C=C-CON A,5 DAT1=C A GOVLNG =GETPTRLOOP ENDCODE ; (Checksum: #20A1h, Bytes: 60.5) It takes any object and a real and returns the library data object. The real is the romid/libid of the library: Library data means data belonging to a library, and every library has its unique id. Correct? The following program is based on ROMPTR E4 12 or ROMPTR E7 57. :: 0LASTOWDOB! CK2NOLASTWD CK&DISPATCH1 # AF1 :: COERCESWAP TOTEMPSWAP CODE GOSBVL =POP# C=DAT1 A CD1EX RSTK=C D1=D1+ 10 C=DAT1 A ?C#A A GOYES Bad# D1=D1- 10 LC(5) =DOLIST DAT1=C A D1=D1+ 5 LC(5) =DOBINT DAT1=C A Bad# C=RSTK D1=C GOVLNG =PushF/TLoop ENDCODE NOTcasedrop %0 INCOMPDROP SWAPDROP %1 ; ; (Checksum: #FE13h, Bytes: 77) It takes a library data and a real. Returns the original object and 1 if the real is equal to the library id, or 0 otherwise. Bye. HPCC member #1046 johil@tv3mail.com - ==== Just a couple of notes to my programs. which comes from HP: To avoid conflicts between applications, HP uses a convention for storing a list of information into a library data object. The information stored is actually a list consisting of a bint and another object, typically a list. The first five nibbles of the body encode the ROMID of the parent application. Jim Donnelly. An Introduction to HP 48 System RPL and Assembly Language Programming, page 232. romid. If the first five nibbles of the libdata's body do not correspond To test these programs, you can use the libdata used by the Minehunt game: Bye. HPCC member #1046 johil@tv3mail.com - ==== thanks to all for the information ==== That doesn't much help unless one is an experienced hacker :-) However, the new version 5.2002 of Libman has a command LIBD~ which toggles explosion/recreation of LIBDATA. Here it is ftp://ftp.math.fu-berlin.de/pub/usr/raut/HP49/tools/Libman.zip Usually, the content of a LIBDAT is a list the head of which is Lib-number of the corresponding library as a bint. LIBD~ shows it as a real in level 1. Pressing LIBD~ again (with the list in level 2 and the real in level 1) you recreate the original LIBDATA object. NOTE: explosion is of the so-called BANG-type. That is, even if you have a copy of the LIBDATA on the staack or in a variable, it will be exploded as well. - Wolfgang ==== Where does this structure comes from ? Maybe one program used library data that way, but that will probably be the only one. Lib data contains whatever the programmer decides it's going to be. So I don't see how you can make a LIBD~ command for it ==== Where does this come from? I have never heard about this. The idea of libdata is that you can put data in there so that the user cannot access or edit it (much like libraries themselves). The syntax is entirely up to the programmer (apart from prologue and lenght of course). Putting a list in LIBDAT only increases the size by 5 bytes (DOLIST & SEMI) and should be something you are against, isn't it? :-) -- This message was written with 100% recycled electrons Pivo ==== Well, If I remember well, this was the structure used by the mine hunt game, and it is kind of an unofficial structure that you can use... not compolsory though... regards, Cyrille ==== If I don't remember bad the first time I saw it was in the RPLCMP48 package from Detlef and Mika. There were some commads to create and split libdata in that manner. Them did that format an standard for all of us which doesn't mannage ML. Really it runs in a lot of app of the 48, _we_ use this format. Hope this help us. Luis charset=iso-8859-1 X-Priority: 3 X-MSMail-Priority: Normal ==== -- `What a depressingly stupid machine' Detlef Mueller -- Marvin Detlef[DOT]M[AT]hamburg[DOT]de http://mein.hamburg.de/homepage/grendel ==== Can any one recommend a good HP48GX program for differential equations? I have just started a DiffEQ class and I will be needing all the help that I ==== I had an idea to port hpcomm to Linux, but site that (used to) have sources, seem to no longer exist (www.hpcomm.org). Anyone has got the sources? I'd be very thankful. -- Computers are not intelligent. They only think they are. ==== Ah, found it. hpcomm on SourceForge. Surprise, surprise. -- Computers are not intelligent. They only think they are. ==== Hmm. Too early to be happy. For some mysterious reason, sources can't be downloaded from the site, only binaries.. And what's even stranger, is that the sources are placed exactly in the same place as binaries, on SF, but when I try to get them, I get a Connection Refused. So, the question arises again: anybody have the sources? I really like this app, and I'd really like to see it on Linux.. -- Computers are not intelligent. They only think they are. ==== Well, if worse comes to worse, one place you can always find them is on eBay..... Roger Arlington, TX disclaimer: The University of Texas does not necessarily reflect my views about anything. ==== find them is on First I wen to e-bay, but I've got a 15C exchanging for one of my calculators. ==== 20! no, but our Mechanical Vibrations professor teached us how to calculate eigenvalues with numerical recipes (iterative methods), and he wanted us to do so without programmable calculators, like a casio fx82 (Wich I used) Another professor gave us a exam of Thermic and Fluids Engineering, in the final exam stated: Se podr.87 hacer uso de una calculadora simple or A simple calculator can be used I took my HP49... It's simple for me!!! :) ==== I study business manganement and we're allowed to use calculaters. Not always programmable calcs but since I don't have another scientific calc (normal cheapo stuf which can do only basic stuff are not advanced enough for sin and cos etc), at least, I say I don't have one, so I can use my HP. For german exams it is explicitly stated that calculators are allowed (?) but only if you need to explain the text so I don't really see the use us a calculator there. were Uppsala ==== I just finished my math final exam today. I had both my hp-49 and TI-89 on my desk! The teacher didn't mind. just as long as you show me the work he said. I did get a lot of funny looks when I pulled both of them out! :o) ==== I have been with great delight, disassembling the HP49G ROM using nosy and have found many wonderful routines particularly in the falsh pages. The problem I have is that nosy shows you the page and address of the routine but I have no idea how to execute the routine directly from systemRPL or assembly. Either is fine. An example is the disassembly of the command EditMenu Rather than re-program the various menu items again, I would like to simply access the routines in the Flash Page to create my own menu Any help would be appreciated. Tim ==== To execute address # aaaaa in flash bank y: ' PTR aaaaa FPTR y 0 -- Eduardo M Kalinowski ekalin@bol.com.br -- **Novo e-mail** **New e-mail** http://move.to/hpkb ==== When using InputLine, is there a way to have one of the softkeys clear out the command line and then replace it with a suggested entry? ==== I have the above system. Recently I bought a new computer so I moved this system to a different computer desk and hooked everything back up. Now when I go to turn on the old system (HP 6350), the cpu powers up, the lights on the drives go on, the keyboard lights do the normal flash, but the monitor stays in the sleep mode - the light on the monitor stays in the orange/brownish color rather than the green color. The monitor stays dark and nothing appears. Does anyone have any experience with this problem? If so, please email me at Alex ==== world are his posts... charset=iso-8859-1 ==== The WCE3.0 even runs under Win9x, the WCE-emulators run fine under NT4.0 Supported WCE versions are from 2.11 to 3.0 (HPC and PPC) Organization: Global Dial Internet ==== Well if you're only going by what capabilities are documented? by HP for the HP49 then you only know 10% of it's capability. The HP48 with MetaKernal and the HP49 are fare more powerful than in terms of features than the standard HP48GX your comparing the TI to. A C compiler might be preferable if your preparing a large complex application but I understand that TI charges you extra for the Development Kit plus license fees and there are a lot of TI hardware issues to work around then you have to have a PC to work on plus a propriety communication kit. The logic of programming is pretty common to all languages it is only the particulars of the syntax to get used to. The HP48/49 doesn't need any extra's and all programming can be done on the Calculator or if you prefer on the PC. For small applications or just quick and dirty routines UserRPL is quick and easy. You don't have to type long code words, it's essentially keystroke programming and the result are immediate. It's preferable to a Basic interpreter (and C) because Basic really need's a qwerty keyboard to enter the code and the TI keyboard really is a shocker. S.Nash ==== Well, I was comparing in terms of built-in functionality. And as I HP48GX was the subject of this thread). Anyway, I'm not criticizing the HP48GX. I'm sure a lot of users are happy with their HP48GX's. More functionality isn't everything. ...or using standard software such as GMP. TIGCC is free (and will presumably always remain so). The TI SDK allows development of both Flash and non-Flash applications; you need signings from TI in order to distribute Flash apps, but this may change for freeware apps. These are less and less of a problem. With libraries being supported in TIGCC, you could have a program 128 KB or larger... Yes, that is a minor disadvantage. TI calculators also have TI-Basic, which can be programmed on the calculator or on the PC... Like TI-Basic :-) I don't have any trouble with the TI-92+ keyboard. -- Bhuvanesh ==== Press the VEC tab to get the little box for vector input to dissappear. When entering several rows it doesn't matter if the box is there or not because it's, well,.. a matrix. -- Markus Nylund markus.nylund@arcada.fi 040-5377 377 ==== be X It think it only prompts you to change modes with the new CAS commands (and very often when there is no need to, thanks to Foolish French Logic) ==== Charles, Ralf is right - check your mode settings. When I started out on Volume 1 (I haven't finished) I found that GU assumes you know what modes you require. He does cover mode settings very early on I think. Good luck, Mark. is ==== The graphics were deleted, corrections below ==== I have absolutely no idea how to program in System RPL. What I need is a program that adds up all the numbers on the stack. UserRPL is too slow. Michael ==== This program adds 64 numbers is 0.2s... Hope this helps ==== I got my 49 I won by winning Wolfgang's contest today. Now I can program again, so if you have any ideas let me know. -- This message was written with 100% recycled electrons Pivo ==== Has anybody heard anything about new hp models from Asia for next January ??? Has HP new R&D calc deparment forgotten unsenet?? J.Manrique ==== I also have tried sending email to Calcpro, and leaving them phone messages in the time since this message was posted and slightly before (I think the last email response I received from them, in response to a question I had on availability of an item, was sometime in February or March). All my phone messages since mid-April were not returned, and all my emails bounced. I did see that several postings since the one below have referred to doing business with them. Does anyone know if they are still in business? Geoff ==== > Does anyone know of any effort to make symbolic / heavy duty math > apps like ALG48, ERABLE, CAS, etc. for the PalmOS? The current PalmOS handhelds don't have the memory or CPU power to do a really decent job at CAS. If you really need CAS, you should really stick with one of: * The HP48/49. * A laptop (running Maxima -- see http://maxima.sourceforge.net/). * An iPaq. Bernard Parisse is supposedly working on a nice CAS-like program for this -- search the archives for more info. * A Sharp Zaurus (runs java/linux, and so a non-graphical Maxima does run on it). -- Darryl Okahata darrylo@soco.agilent.com DISCLAIMER: this message is the author's personal opinion and does not constitute the support, opinion, or policy of Agilent Technologies, or of the little green men that have been following him all day. ==== I don't know if you'd describe DERIVE (for DOS) as a CAS, but it even works on an HP-95LX;-) Raymond Darryl Okahata schrieb im Newsbeitrag > > > Does anyone know of any effort to make symbolic / heavy duty math > > apps like ALG48, ERABLE, CAS, etc. for the PalmOS? > > The current PalmOS handhelds don't have the memory or CPU power to > do a really decent job at CAS. If you really need CAS, you should > really stick with one of: > > * The HP48/49. > > * A laptop (running Maxima -- see http://maxima.sourceforge.net/). > > * An iPaq. Bernard Parisse is supposedly working on a nice CAS-like > program for this -- search the archives for more info. > > * A Sharp Zaurus (runs java/linux, and so a non-graphical Maxima does > run on it). > > -- > Darryl Okahata > darrylo@soco.agilent.com > > DISCLAIMER: this message is the author's personal opinion and does not > constitute the support, opinion, or policy of Agilent Technologies, or > of the little green men that have been following him all day. ==== I've got a HP48GX with memory card 1Mb and some programs, writtem by me, in RAM; how can i store them in memory card? Vittorio Reply-To: Veli-Pekka Nousiainen ==== use port numbers from 2 to 9 as tags for the name << I'm a >> :2:PIG STO 'PIG' 2 ->TAG is another way to create a tagged name :&:PIG RCL will search for any name in ports/RAM you can also EVAL programs using the wildcard tag. Naturally one could use the direct port tag << New program FOR a :2:PIG NEXT >> and...read the manuals... > I've got a HP48GX with memory card 1Mb and some programs, writtem by me, in RAM; > how can i store them in memory card? > > Vittorio ==== > > I on the hunt for a HP 41 CV or CX, but can someone tell me the market > prices for such a device? In Europe or USA? > > BR > Matti, Sweden One good place for buying no longer made HP Calculators (such as the HP 41C/CV/CX) is International Calculator in Florida, USA. Their website is www.internationalcalculator.com. I bought a working HP 48SX from them (as well as no longer made HP calculator cases). I Don O'Rourke does not like being called through the toll free number given on the website. A toll call from Sweden to Florida would be very expensive. ==== Heck, the source for Emu48 is available--I was seriously considering porting it to PalmOS until I discovered that PalmOS doesn't expose multithreading support to application programmers. Plus, I have no $$ and all this Cygwin/PilRC/gcc baloney is gunking up my gaming rig. There IS a CE version, but the source is not available (?). Probably VERY easy to convert the Win32 Emu48 code to WinCE. As a side note, I was thinking of porting Emu48 to Java just for kicks... ==== > X > > I think that we're familiar enough with ON& A&F, B, C, D, E, F, -, and > > +, but what about ON&CursorUp? That sends something from the serial > > port. You can capture it with HyperTerminal if you're curious. It seems > > to depend on what the speed parameter in IOPAR is set to (perhaps other > > things as well?). Does anyone know what that's all about? > > How about: a screen dump to your PC? Yes, now that you mention it, I should've known that; I did try it out a few times with HPComm, but haven't had any real need for it. I did think of the PRLCD command, but it didn't look like what the 48 series transmits for that, and it wasn't obvious (to me) what printer a PRLCD on the 49G would be formatted for. Ok, the printer for this hidden key is a PC program. I wonder whether there's a hidden key combination for LCD-> on the 49G, one that could be executed from any environment and regardless of whether or not the calculator is in user keys mode. -- James ==== > James M. Prange schrieb: > > > > I think that packing would be a better way to describe it than either > > defragmentation or garbage collection. My understanding is that the > > calculator alway puts any new object into a single block of memory. When > > it uses memory, it marks the object as referenced, and adds another > > reference mark for each additional pointer to the same object, and of > > course removes a reference mark each time a pointer to the object is > > removed. > > Well, the HP48/49 do it a bit differently. > > All objects are always allocated in a continuous block of memory (called > TEMPOB), below (i.e. at lower addresses than) the RPL return stack. All > free memory lies between the return and data stack. (Note that we're > speaking about RAM here - ERAM and flash are different.) Both stacks > grow towards this free memory: The return stack grows upwards and the > data stack downwards. > > That way, the HP avoids fragmenting memory. If it runs out of free space > to allocate more objects (or return/data stack elements, since each of > these pointers takes up 5 nibbles too), it starts the garbage > collection. This uses a marker field present in every temporary object > to mark all those object which are still referenced. After having run > through all possible locations for object pointers (the return and data > stacks, LAMs, etc.) it will then remove all objects from TEMPOB which > are not needed any more. Now there's where I find the garbage collection terminology perhaps a bit misleading. What in the world does it mean to remove an object from TEMPOB? I rather doubt that the system would bother to change the bits in memory to any particular pattern, and surely it wouldn't bother to move the unreferenced objects to somewhere else. I think that it's rather a matter of marking the memory that they occupy as available to be overwritten or perhaps of not marking it as not available to be overwritten, or unallocated versus allocated. But isn't the object still there until it's overwritten? It seems to me that it's the referenced objects that are being collected into a contiguous block, not the garbage objects that are being collected for disposal. But the term garbage collection is probably too traditional to be replaced by something less colourful like memory packing. > To keep the allocated objects in a continuous block, it must move all > objects after the removed one to lower memory addresses so as to fill > the gap. During SysRPL execution this is never a problem, since the GC > routine updates all pointers to their new locations, but in ML it can > be, because e.g. the hardware return stack (RSTK) is never updated. This tells me that using ML, you can recover some memory without actually doing a garbage collection? This is a bit deeper into the internals than I've ever cared to think about. I was thinking in terms of what happens in UserRPL. Of course, if you choose to bypass the system and do things your own way, you have to take care of certain things yourself. But it brings up a very good point; not only does an object have to be moved in memory, but any pointers to its old address have to be changed to its new address. I wonder whether this requires yet another scan of all the pointers to find any that pointed to the old address each time that an object is moved. > Note that the marker nibble is always zero outside GC. I do not know > whether the GC routine initializes it to zero before it scans through > the object pointers, but the memory allocation routine CREATETEMP does. So the objects in TEMPOB are never actually marked as referenced until the GC routine looks at the pointers in the system and marks any object pointed to as being referenced? Is the marker nibble changed for every additional pointer to a particular object that's found? > > A common UserRPL method of forcing a garbage collection is to execute > > MEM DROP. MEM forces a garbage collection so that it can simply > > calculate the size of that one block of memory rather than calculate and > > add up the sizes of all the unreferenced objects plus the unused memory. > > There may be other UserRPL operations that force a garbage collection; I > > don't know. > > Actually the free memory is never known exactly except after a GC - > since virtually no other routines make a difference between referenced > and unreferenced objects. (I know of only one other routine which does: > INTEMNOTREF?) Yes. I suppose that, in principle, it would be possible to find the sizes of all of the unreferenced objects in TEMPOB, but that would mean doing a good bit of the GC routine, so the calculator just does the entire GC when it needs to know the amount of memory that could be made available. But what I was really referring to was whether any other UserRPL operations force a GC. I suppose that 0 PVARS may, or FREE or MERGE might force one. > > Note that, as a general rule, the more you have on the stack, the longer > > it takes to do a garbage collection, and I've noticed that garbage > > collection seems to be especially slow when the stack has a lot of > > pointers to list elements (and I suppose elements of other composites > > and maybe arrays). > > This (I guess) happens because to find the TEMPOB marker which a pointer > on the stack references it must skip (via SKIPOB) objects until it > reaches the end of the TEMPOB object (in this case the whole composite), > where the marker is stored. So if you have a pointer to the first object > of a list, the GC routine must skip all the rest of it until it finally > reaches the end. Am I correct in thinking that there's only one marker for the composite, not one for each element? > Note that true arrays (DOARRY) can only exist as a whole; if you extract > elements from them, the element will be copied to a new TEMPOB object. Ok, I can see why. The type and body of each element aren't contiguous in the array, so it would be a bit difficult to meaningfully have a single pointer to an element of the array, short of making an entirely new object of the element. And indeed, a GC with a array of reals exploded onto the stack seems to be just as fast as having the reals on the stack by putting them there with a FOR loop. > However the 49 matrices (DOMATRIX) are very much like lists of lists. Do you mean the type 29 symbolic matrices? But I note that with the elements from type 29 matrices on the stack, garbage collection isn't especially slow, so I suppose that these elements are in TEMPOB as new objects too. So it seems to be only composites that cause the drastic slowdown of GC, not arrays of any kind. > I hope that these explanations clear things up instead of making them > more obscure =) On the whole, they do, although they also raise additional questions in my mind. Certainly it shows us that GC can involve quite a lot of activity. I suppose that it *might* be possible to speed up garbage collection, but quite possibly at the expense of slowing down everything else. Someone much more knowledgeable than me can consider that question. -- James ==== Ok, here goes the second part... James M. Prange schrieb: > > > To keep the allocated objects in a continuous block, it must move all > > objects after the removed one to lower memory addresses so as to fill > > the gap. During SysRPL execution this is never a problem, since the GC > > routine updates all pointers to their new locations, but in ML it can > > be, because e.g. the hardware return stack (RSTK) is never updated. > > This tells me that using ML, you can recover some memory without > actually doing a garbage collection? This is a bit deeper into the > internals than I've ever cared to think about. You can indeed recover memory if you happen to *know* that a TEMPOB zone is not referenced any more - ML programs can quite easily delete TEMPOB zones with the entry MOVERSD. [snip] > But it brings up a very good point; not only does an object have to be > moved in memory, but any pointers to its old address have to be changed > to its new address. I wonder whether this requires yet another scan of > all the pointers to find any that pointed to the old address each time > that an object is moved. There are even dedicated entry points for this (I faintly remember something about PTRADJUST2), since not only the GC routines need to update pointers: The MOVERSD (mentioned above) and MOVERSU entries must also keep them up to date, and there's even a memory swapping procedure called BLKSWAP+ which automatically handles the pointer business for the caller. > So the objects in TEMPOB are never actually marked as referenced until > the GC routine looks at the pointers in the system and marks any object > pointed to as being referenced? Is the marker nibble changed for every > additional pointer to a particular object that's found? I can only guess here, but I think it's not. As soon as the GC routine finds the end of a TEMPOB zone, it probably just puts a referenced value there, maybe 1 or F. Incrementing it would not make any sense, since after 16 pointers to that zone you'd have a 0 (zero) again, which seems to stand for unreferenced. [snip] > But what I was really referring to was whether any other UserRPL > operations force a GC. I suppose that 0 PVARS may, or FREE or MERGE > might force one. You are right, PVARS does, for any valid argument (i.e. 0, 1 or 2). Neither FREE nor MERGE do anything on the HP49, and I do not have a 48, so I cannot have a look there. A lot of ML programs which do not know in advance how many memory they might need also force one: MASD is a good example. > Am I correct in thinking that there's only one marker for the composite, > not one for each element? Yes. In fact there's exactly one marker in the whole zone, at the very end, as I explained in my other post. [snip] > > However the 49 matrices (DOMATRIX) are very much like lists of lists. > > Do you mean the type 29 symbolic matrices? Yes. > But I note that with the elements from type 29 matrices on the stack, > garbage collection isn't especially slow, so I suppose that these > elements are in TEMPOB as new objects too. I have just checked, at least GET does not make new objects. > So it seems to be only composites that cause the drastic slowdown of GC, > not arrays of any kind. Well, the terminology here is a bit difficult, since these type 29 matrices *are* technically the same as lists of lists, except that they have a different prologue. Maybe there is some side effect of a matrix command which decreases the slowdown a bit. > On the whole, they do, although they also raise additional questions in > my mind. > > Certainly it shows us that GC can involve quite a lot of activity. Unfortunately - or luckily, you might say - this is entirely hidden from the (user and, to a large extent, system) RPL programmer. In the world of ML things are more hairy, but in turn the pieces of the jigsaw start to fit =) > I suppose that it *might* be possible to speed up garbage collection, > but quite possibly at the expense of slowing down everything else. > Someone much more knowledgeable than me can consider that question. algorithm, which unfortunately needs some extra memory and thus possibly breaks certain ML programs: http://groups.google.ch/groups?selm=yuGl8.15147%24uR5.34221%40newsfeeds.bigp ond.com http://groups.google.ch/groups?selm=bVMl8.15234%24uR5.34040%40newsfeeds.bigp ond.com Greetings Thomas -- Thomas Rast If you cannot convince them, confuse them. -- Harry S. Truman ==== > > algorithm, which unfortunately needs some extra memory and thus possibly > > breaks certain ML programs: > > > > http://groups.google.ch/groups?selm=yuGl8.15147%24uR5.34221%40newsfeeds.bigp ond.com > > http://groups.google.ch/groups?selm=bVMl8.15234%24uR5.34040%40newsfeeds.bigp ond.com > > Yes indeed, that slipped my mind. I hope that he makes enough advance > information available so that updated ML programs can be ready. I hope > that it would be possible to have the updated ML programs work with both > the new and the current GC routine. than once all the objects previously allocated during the GC, it's much more optimized than that The way my new GC works is subdiving the Temporary Object area into 256 small module using a hash table, that's where extra memory is required Then I re-organize the tempob for the time of the GC in order to be able to save the size of the allocated object before it. That way the size of the allocated memory will be stored both at the end and at the beginning of the reserver memory: In the current GC process the TEMPOB memory is organized like this: | flag1_inused? (1n) | object1 (n nibbles) | size allocated area1 (5n) | flag2_inused? | object2 | size allocated 2 | etc.. It will then become: size allocated (18bits) | flag1_inused (1 bit) | size object (18 bits) | object 1.. | size object (18 bits) | On an HP39/49/40 you can't allocate more than 256KB of memory, so 18 bits is sufficient for the size field. As you can see I'm missing some bits to record all the data. For that I use the prologue inside the object itself: it is easily possible to have the prologue on 7 bits only (instead of 20 bits) as there are less than 128 type of objects on the HP49. Using 7 bits to encore the prologue will free 13 bits, which is JUST what I need. And that's it I can have all the information I need to have a fast GC... The most tricky part in the actual GC, is from an address in the stack, where the flag (stating that this object is in used or not) is located. The way it currently works is like this: -Get the address from the stack (or whatever) -Check if this pointer refers to a TEMPOB object -If it does, it will skip forward all the objects it can find until it finds the area where the size is saved. The may take a long time especially if you have an exploded list on the stack. Internally the memory could be something like: { obj1 obj2 obj3 ... objn } | size (5n) Let say on the stack you will find a pointer to obj2, to find the size field, you will have to jump obj3, then obj4 .. objn If your list was over 1000 elements exploded on the stack, you will have to perform 499500 SKIPOB (the sub-routine to calculate the size of an object). As you can see it can gt very slow very quickly. Another problem with the current algorithm is that you can't have a pointer on the stack referring to a non-composite object. Let say you had a string in TEMPOB, with a pointer referencing this string right in the middle. The OS has currently no way in skipping the object, from its middle to find the size field. For example, if you try the following: donwload an object to the HP49 so you know it will contain the famous header HPHP48 The usual trick is to simply perform a ->H 26 + H-> NEWOB on it. But remove the NEWOB and do instead: ->H 26 + H-> MEM DROP Make sure that the object is only referenced on the stack, and is not save in any variables (otherwise the object will not be in TEMPOB).. What do you get after the GC on the stack? garbage/junk. In fact, you may even get a memory clear. This limitation of how the GC works prevents any fix for the famous problem: if you run a program from port2 in ML, and this program allocate memory, it will crash. The main reason is that you can't from the Return Stack address skip the Code object to its end. But let's keep going into how the GC works: -If the object is found in memory, tag it to say it is used. -Keep repeating all the previous operations until you've parsed all the different stacks and reserved memory -Now you can delete all the objects that are not marked as being used.. My new GC works differently. When you want to mark an object to be in used, you first locate using the hash table where is the sub-area containing it. without any problem, I'll put it at the beginning of TEMPOB ! (will be a bit slower though). So far I was using one of the screen, but this is not too good as if somebody was using this memory, a GC would have corrupted it. My different trials show that this new GC is not much faster on an average basis that the old one. But if you have a 1000 objects list exploded on the stack, now the GC is almost instantaneous. While the previous version may take a long time. Try this: 1 1000 FOR I I NEXT 1000 ->LIST DUP LIST-> You should now have on the stack a list of 1000 elements, then 1000 integers (all sub-element of the list). Then type MEM and see how long it takes. I'v just done it on mine and it's been over 3 minutes so far With the new GC it takes 2.3s > > I suspect that the current GC routine is mostly or entirely legacy > code from the very early days of RPL. When there was very little (by > today's standards) ROM and RAM, GCs would've more been frequent, there > wouldn't have been so much to do for each GC, the GC would have to be > done using as little additional memory as possible, and the ROM code for > the GC would need to be as small as possible. With the relatively large > ROM and RAM available in the 48 series (at least with expansion cards) > and the 49G, the compromises made back then may very well not be optimal > today. The current GC is a great piece of software, very fast. As I said before I tried several times to rewrite it without any luck. It was always smaller than the existing one... I hope that all of this made sense to you. It's a bit complicated. not done :) (over 5 minutes now) ==== Reposting, my apologies if this turns out to be a duplicate. > > than once all the objects previously allocated during the GC, it's much more > optimized than that I'm glad to hear that. I had thought that each referenced object was moved all the way to its destination in one move, but that the objects were several objects were being moved at once, but only by the distance of one unreferenced object, which sounded painfully slow to me. > My different trials show that this new GC is not much faster on an average > basis that the old one. Except for the problem with lists, I usually find garbage collection to be only a minor annoyance. > But if you have a 1000 objects list exploded on the > stack, now the GC is almost instantaneous. While the previous version may > take a long time. > Try this: > 1 1000 FOR I I NEXT 1000 ->LIST DUP LIST-> > You should now have on the stack a list of 1000 elements, then 1000 integers > (all sub-element of the list). As a matter of fact I did that except without the DUP. > Then type MEM and see how long it takes. I'v just done it on mine and it's > been over 3 minutes so far I did TICKS MEM TICKS and then converted that to a time. I don't remember the result, except that it was horrendous. > With the new GC it takes 2.3s Sounds wonderful! But what's going on with the type 29 symbolic matrices? It seem that if I have one on the stack (a new one, not one stored in a variable somewhere), and I use GET to extract a real or ZINT from it, then the memory used by the matrix is released, but if I use GET to extract a name or algebraic from it, then the memory used by the matrix isn't released. > I hope that all of this made sense to you. It's a bit complicated. Some at least, even if not all. But it's not terribly important that I know how a GC works, just that I can rely on it doing its job. -- James ==== > Reposting, my apologies if this turns out to be a duplicate. Well, I didn't get it in the first place ... > I did TICKS MEM TICKS and then converted that to a time. I don't > remember the result, except that it was horrendous. It was over 6 minutes on my machine... > But what's going on with the type 29 symbolic matrices? It seem that if > I have one on the stack (a new one, not one stored in a variable > somewhere), and I use GET to extract a real or ZINT from it, then the > memory used by the matrix is released, but if I use GET to extract a > name or algebraic from it, then the memory used by the matrix isn't > released. But it will be exactly the same for all the other composite object.. In fact if you do something like << blahblah 'FOO' >> 'FOO' will be put on the stack, and because it is referenced in a composite (here a RPL program), such program will stay in memory until FOO is removed from the stack. In your case, in a symbolic matrix, if a ZINT is put on the stack and the memory is still released, it means that the zint was in the range of -9 to 9. It's the best way to save memory, and is mainly the fastest way. Just imagine how slow it would be if each time you were extracting an object from a list, a matrix or a program it had to first be copied into RAM.. it's not feasible with the way RPL works, object gets evaluated, and that makes them being pushed on the stack, not copied to the stack. . ==== I will not attend the HPPC september conference - because I'm no longer a member ;-) Now, for the new gc: Do I understand correctly that you have to move the objects in order to create the 'new' TEMPOB layout? What a pity that TEMPOB is not organized as follows: .. .. That way, locating the slot within which (not necessarily 'to which') a particular stack pointer pointed could be determined with a dichotomic search.. and the amount of space used is exactly the same. Too bad that reorganizing it this way for a gc looks too time-consuming. newsgroups after the demise of dejanews. every post. The amount of spam I receive is rising exponentially. A+, Werner ==== > I will not attend the HPPC september conference - because I'm no > longer > a member ;-) I'm not a member either, don't see why I wouldn't be able to participate to this conference.. > > Now, for the new gc: > Do I understand correctly that you have to move the objects in order > to create > the 'new' TEMPOB layout? What a pity that TEMPOB is not organized as > follows: I will not move the objects but will play around them.. > .. > .. > That way, locating the slot within which (not necessarily 'to which') > a particular stack pointer pointed could be determined with a > dichotomic search.. and the amount of space used is exactly the same. > Too bad that reorganizing it this way for a gc looks too > time-consuming. I thought about totally re-organizing the tempob area, but it would surely break some ML programs, and would also break some existing code that I couldn't think about. I can't really re-organize the memory as you describe during a GC< a it would eat some more memory > every post. That's why I'm not using google to post anymore, only for review. Actually, I like the way google display a thread, and I wonder if there is any existing news read for windows that works like google. Thread are organized by the most recent posts, while Outlook express will not. For example, for answering this post, I must go far back into the history. ==== > I'm not a member either, don't see why I wouldn't be able to participate to > this conference.. > Indeed. I thought it was 'members only' - the fact that *you* can go does not mean mere mortals can. But we already have a holiday planned for the weekend of the 21st.. > > > > Now, for the new gc: > > Do I understand correctly that you have to move the objects in order > > to create > > the 'new' TEMPOB layout? What a pity that TEMPOB is not organized as > > follows: > > I will not move the objects but will play around them.. But, the original tempob format is: where in-use flag is one nibble, and the prologue is 5 nibbles, for a total of 24 bits. After the change, it looks like: where is 1 bit in length, is 18 bits and the short prologue needs 7 bits. that's 26 bits preceding the object body? Werner Huysegoms ==== > > Indeed. I thought it was 'members only' - the fact that *you* can go does > not mean mere mortals can. But we already have a holiday planned for > the weekend of the 21st.. You put too much importance on me ! I honnestly would like to see more people at these conference, otherwise it tends to be somehow ... boring... Especially if it's only talking about HP41 like I've seen sometimes :) How can you plan holidays so far in advance! > But, the original tempob format is: > > where in-use flag is one nibble, and the prologue is 5 nibbles, for a total > of 24 bits. > After the change, it looks like: > > where is 1 bit in length, is 18 bits and the short prologue > needs 7 bits. that's 26 bits preceding the object body? Well, I thought I had explained it in my first post. The way the actual memory is as you mentionned: but if you also include the size of the *previous* object, then you will have: that's: 20 + 4 + 20 = 44 bits when all you need is: 18 + 1 + 18 + 7 = 44bits it fits ! Sure, you have the issue for the *first* object in TEMPOB, but in the HP49, the first object is always the same (Virtual Stack), so it's easy to work around it... ==== > I honnestly would like to see more people at these conference, otherwise it > tends to be somehow ... boring... > Especially if it's only talking about HP41 like I've seen sometimes :) > > How can you plan holidays so far in advance! > It's 'planned', not 'booked' as yet. > but if you also include the size of the *previous* object, then you will > have: > > that's: > 20 + 4 + 20 = 44 bits when all you need is: > 18 + 1 + 18 + 7 = 44bits > > it fits ! > > Sure, you have the issue for the *first* object in TEMPOB, but in the HP49, > the first object is always the same (Virtual Stack), so it's easy to work > around it... > Now I understand.. I had noticed the extra size field in front in your original post, but thought it had something to do with the split into 256 sections. Werner ==== Just got back from a two-week holiday in La Douce France, so maybe I'm not thinking clearly yet ;-) > Another problem with the current algorithm is that you can't have a pointer > on the stack referring to a non-composite object. > Let say you had a string in TEMPOB, with a pointer referencing this string > right in the middle. > The OS has currently no way in skipping the object, from its middle to find > the size field. > > For example, if you try the following: donwload an object to the HP49 so you > know it will contain the famous header HPHP48 > The usual trick is to simply perform a ->H 26 + H-> NEWOB on it. > > But remove the NEWOB and do instead: > ->H 26 + H-> MEM DROP > ->A 16 + A-> ( ;-)) ) A pointer on the stack may point to any object within a TEMPOB slot as long as skipping the object (and the ones following it) will eventually lead to the end of the slot. But I guess you meant: DOSTR nnnnn x ob y if the stack pointer points to ob, and y is not 'skippable', a gc will crash, as is the case (about half of the time) with these HPHP48 strings, since there may be a dummy nibble following ob. > > This limitation of how the GC works prevents any fix for the famous problem: > if you run a program from port2 in ML, and this program allocate memory, it > will crash. > The main reason is that you can't from the Return Stack address skip the > Code object to its end. Not if you do it 'my way', blatantly stolen from Mika's code (as with may things) A+, Werner ==== > Just got back from a two-week holiday in La Douce France, so maybe I'm > not thinking clearly yet ;-) So obviously you enjoyed it :) > Not if you do it 'my way', blatantly stolen from Mika's code (as with > may things) Yes, there are some ways, but it involves integrating SysRPL code.. Not very obvious. There are some things the user/programmer shouldn't worry about. How is the GC working is one of them.. > Will I see you in London ? ==== my comparisons HP vs TI www.geocities.com/jaimezacalcs/hp-versus-ti.htm Jaime fernando meza meza ==== X > algorithm, which unfortunately needs some extra memory and thus possibly > breaks certain ML programs: > > http://groups.google.ch/groups?selm=yuGl8.15147%24uR5.34221%40newsfeeds.bigp ond.com > http://groups.google.ch/groups?selm=bVMl8.15234%24uR5.34040%40newsfeeds.bigp ond.com THE reason for a 1.19-7 upgrade. I would even suggest that HP should release it as Commercial OS 2.00 !!! ==== James M. Prange schrieb: > > Now there's where I find the garbage collection terminology perhaps a > bit misleading. What in the world does it mean to remove an object > from TEMPOB? I rather doubt that the system would bother to change the > bits in memory to any particular pattern, and surely it wouldn't bother > to move the unreferenced objects to somewhere else. Well, it does not actually move them somewhere else - it *deletes* them (maybe remove was not a clever choice). Memory looks like this: | ... | TEMPOB -> +-------------------+ | Temporary objects | TEMPTOP -> +-------------------+ | Return stack | RSKTOP -> +-------------------+ | ##### free ###### | DSKTOP -> +-------------------+ | Data stack | EDITLINE -> +-------------------+ | ... | (Note that the zone between TEMPOB and TEMPTOP is usually also called TEMPOB.) What I meant with all objects are always allocated in a continuous block of memory is this: The *only* free memory *always* lies between RSKTOP and DSKTOP. If an object zone O of size S is not referenced any more, the GC routine takes these steps: - First, all objects from O to RSKTOP (except O itself) and the whole return stack are moved S+6 nibbles towards TEMPOB (to lower addresses). - Second, all references to the moved objects are updated (by subtracting S+6 from them). Note that there cannot be any references to the return stack. Allocating a new object zone of size T is a bit easier because of that last Note: The return stack is moved T+6 nibbles towards DSKTOP, thus creating room for the new zone just under the return stack. Okay, now the explanation where the 6 comes from and why lists cannot be deleted as long as there are any references to it: An object zone in TEMPOB looks like this: | ... | +----------------------------+ 5 | Previous object's length | +----------------------------+ 1 | Previous object's marker | +============================+ | RPL object | +----------------------------+ 5 | Length | +----------------------------+ 1 | Marker | +============================+ | Next object | +----------------------------+ | ... | The length is a bit special: It is actually the object's length plus 6. Another way to look at it is that it is a backwards offset to the previous object's length. As you can see there is only one marker for the whole object zone; if the RPL object inside is a list which has any of its elements referenced, the zone will be marked referenced and cannot be deleted. > I think that it's > rather a matter of marking the memory that they occupy as available to > be overwritten or perhaps of not marking it as not available to be > overwritten, or unallocated versus allocated. But isn't the object > still there until it's overwritten? It seems to me that it's the > referenced objects that are being collected into a contiguous block, not > the garbage objects that are being collected for disposal. As far as I understand, this is how garbage collection works in languages like C. However RPL has the advance that it keeps all pointers to objects in a few known places like the return and data stack, allowing it to move object zones as long as it updates all references. Unfortunately I've run out of time; I will (try to) answer the rest of your questions this evening. Greetings Thomas -- Thomas Rast If you cannot convince them, confuse them. -- Harry S. Truman ==== > X > > Note that true arrays (DOARRY) can only exist as a whole; if you extract > > elements from them, the element will be copied to a new TEMPOB object. > > However the 49 matrices (DOMATRIX) are very much like lists of lists. > > To make it more clear: > true arrays: 48-style all numeric (real/complex) arrays > the 49 matrices: Symbolic Matrices or any matrix > have any single element as either a symbolic, like 'X+1', Y, etc > OR integer, like 1768 , eg. a number without a decimal point. Hmm.... I would think that Thomas meant arrays such as are used for some of the message tables. That is, the elements can be of any type, but they all have to be the same type, because the type is only included in the array once, not with each element. I'm under the impression that the real/complex arrays are special cases of arrays. -- James ==== X > Hmm.... I would think that Thomas meant arrays such as are used for some > of the message tables. That is, the elements can be of any type, but > they all have to be the same type, because the type is only included in > the array once, not with each element. I'm under the impression that the > real/complex arrays are special cases of arrays. X But...then the length would have to be the same, too ?! Right ???!!!! ==== >> the array once, not with each element. I'm under the impression that the >> real/complex arrays are special cases of arrays. >X >But...then the length would have to be the same, too ?! >Right ???!!!! According to the Introduction to Saturn Assembly Language by FH Gilbert and Eric Rechlin, Page 95 an array is: Prologue 029E8 (5 Nibbles) Kind of Element (5 Nibbles) Number of dimensions (5 Nibbles) Dimension 1 (5 Nibbles) . . . Dimension N (5 Nibbles) . . . The array can contain any number of elements that are of the same type. It seems that any type of object is valid inside the array, including and array of strings. The only issue is that all elements must be of the same type. The bare HP48 can only display one or two dimensional arrays of reals, or I think the only special case for reals or imaginaries is that the HP48 has the capability to display and edit these arrays built in. Hope this helps. If I am wrong, please correct me. Bill alternate E-dress wtstorey@ieee.org.no.spam.please (Use the obvious) ==== > X > > Hmm.... I would think that Thomas meant arrays such as are used for some > > of the message tables. That is, the elements can be of any type, but > > they all have to be the same type, because the type is only included in > > the array once, not with each element. I'm under the impression that the > > real/complex arrays are special cases of arrays. > X > But...then the length would have to be the same, too ?! > Right ???!!!! Good question. I don't know for sure how it determines where one element of an array ends and the next begins. I got my information from RPLMAN.DOC, which doesn't seem to spell out that minor detail. For fixed-length element types, it could be computed easily enough. I suppose that for variable-length element types, the length fields or ending delimiters would be included as part of the element bodies. I have found that the message tables are arrays of strings, or, in many cases, linked arrays of strings, and these strings are certainly not the same length. Certainly the elements of the array all have to be of the same type, and I get the impression that the type is only in the array once, not with each element. Perhaps I'm mistaken. -- James ==== Veli-Pekka Nousiainen schrieb: > > X > > Hmm.... I would think that Thomas meant arrays such as are used for some > > of the message tables. That is, the elements can be of any type, but > > they all have to be the same type, because the type is only included in > > the array once, not with each element. I'm under the impression that the > > real/complex arrays are special cases of arrays. Yes, exactly. > But...then the length would have to be the same, too ?! > Right ???!!!! No. I shall explain the way the HP stores a string first. For a more detailed reference of all data types, see Introduction to Saturn Assembly Language, available on hpcalc: HTML: http://www.hpcalc.org/details.php?id=1695 PDF: http://www.hpcalc.org/details.php?id=1693 PS: http://www.hpcalc.org/details.php?id=1694 A string looks like this: +---------------------+ 5 | DOCSTR | +---------------------+ 5 | Length | +---------------------+ | Data... | +---------------------+ So, the first five nibbles are the object prologue. Every object has a prologue, which denotes its type; for strings it is #02A2Ch. Then follows the length field, which includes itself, but not the prologue. Another way to look at it would be that it is an offset to the end of the object. And at last you have the string data, (Length-5) nibbles. Note that this must not necessarily be an even number, though UserRPL does not let you create such strings. Lets have a look at the true arrays now, as I called them. +----------------------+ 5 | DOARRY | +----------------------+ 5 | Length | +----------------------+ 5 | Prologue of objects | +----------------------+ 5 | Number of dimensions | +----------------------+ | Dimension sizes | +----------------------+ +----------------------+ The beginning is almost the same: A prologue, #029E8h for arrays, and the length, which again includes itself, but not the prologue. Next you have the prologue of the included objects. The advance of this is that these five nibbles do not need to be repeated for every object in the array; the disadvance is that all objects must have the same prologue, and thus the same type. Then you have the number of dimensions, followed by that many 5-nibble dimensions sizes, and lastly the contents. Apparently for two-dimensional arrays the first dimension size is the number of rows, and the second the number of columns; the content is then stored row-wise from left to right. An example with strings of different lengths: ARRY [ World! ] @ ASM ->H (Note that MASD can create arrays of strings, at least with ROM 1.19-6!) This gives you a string with a lot of hex digits (57 to be exact). Below they are listed, with some line breaks and comments. Mind that the Saturn chip reverses the nibble order in memory, so e.g. 1 in a 5-nibble field looks like 10000. It's in a way little-endian like the x86, but nibble-based instead of byte-based. 8E920 The prologue: #029E8h 43000 The length: #34h or #52d C2A20 The prologue of the included objects: #02A2C 10000 One dimension 20000 Two rows 11000 Length of World!: #11h = #17d 75F627C64612 Characters World! Ok, enough of this =) Greetings Thomas -- Thomas Rast If you cannot convince them, confuse them. -- Harry S. Truman ==== I seem to have lost the website for this emulator - it would emulate either the HP48G or HP48SX as I recall, using the hi-res Sony PDAs. Does anyone have the URL for this? TIA, Pad ==== http://ftp.mindspring.com/~hildinger/Power48/ Of course a Palm can do everthing an HP can, and more... > I seem to have lost the website for this emulator - it would emulate > either the HP48G or HP48SX as I recall, using the hi-res Sony PDAs. > Does anyone have the URL for this? TIA, Pad > ==== > I seem to have lost the website for this emulator - it would emulate > either the HP48G or HP48SX as I recall, using the hi-res Sony PDAs. > Does anyone have the URL for this? TIA, Pad > Knowing that the Sony Clie is runnin PalmOS, I doubt you will ever see an HP48 emulator on such machine. ==== would it be possible using the ROM of the 49 having an emulator running on the X25? Martin > > >>I seem to have lost the website for this emulator - it would emulate >>either the HP48G or HP48SX as I recall, using the hi-res Sony PDAs. >>Does anyone have the URL for this? TIA, Pad >> >> > > Knowing that the Sony Clie is runnin PalmOS, I doubt you will ever see an > HP48 emulator on such machine. > > > > > > ==== > would it be possible using the ROM of the 49 having an emulator running > on the X25? > Martin On the X25 you have the CPU power to handle such task. However, there's no X or FLTK running there... So the first thing you will have to do is port it to the X25. There s a good HP49 emulator for unix made by Ivan Bertolotti I have a few applications that I would like to see on a cheap PDA device like the X25, I guess I will have to get my hand dirty again and do the porting myself ==== but didn't HP pull the plug on the X25 ? you also have the sharp zaurus as option :) it uses QT. > > > would it be possible using the ROM of the 49 having an emulator running > > on the X25? > > Martin > > On the X25 you have the CPU power to handle such task. > However, there's no X or FLTK running there... So the first thing you will > have to do is port it to the X25. > > There s a good HP49 emulator for unix made by Ivan Bertolotti > > I have a few applications that I would like to see on a cheap PDA device > like the X25, I guess I will have to get my hand dirty again and do the > porting myself > ==== sorry about this dumb question, but what is X and FLTK? Martin > > >>would it be possible using the ROM of the 49 having an emulator running >>on the X25? >>Martin >> > > On the X25 you have the CPU power to handle such task. > However, there's no X or FLTK running there... So the first thing you will > have to do is port it to the X25. > > There s a good HP49 emulator for unix made by Ivan Bertolotti > > I have a few applications that I would like to see on a cheap PDA device > like the X25, I guess I will have to get my hand dirty again and do the > porting myself > > > > > > > ==== To know what X is, you could go to http://www.x.org and read: The X Protocol was developed in the mid 1980's amid the need to provide a network transparent graphical user interface primarily for the UNIX operating system. X provides for the display and management of graphical information, much in the same manner as Microsoft's Windows and IBM's Presentation Manager. For FLTK, you could go to http://www.fltk.org and read: FLTK (pronounced fulltick) is a LGPL'd C++ graphical user interface toolkit for X (UNIX¨), MacOS¨, and Microsoft¨ Windows¨, and supports 3D graphics with OpenGL¨. It is currently maintained by a small group of developers across the world with a central repository on Source Forge. In JX25 the User Interface its done with Chai-LX, I think. But, at least it has a linux kernel, so using the right driver it could be possible to run X and a Window Manager like Matchbox: http://handhelds.org/~mallum/matchbox/ Probably you could see some nice ports before the end of September for Jornada X25 units.. J.Manrique Club de Usuarios de Gijon #1077 HPCC Member http://www.asturlinux.org/~jsmanrique > sorry about this dumb question, but what is X and FLTK? > Martin > > > > > > > >>would it be possible using the ROM of the 49 having an emulator running > >>on the X25? > >>Martin > >> > > > > On the X25 you have the CPU power to handle such task. > > However, there's no X or FLTK running there... So the first thing you will > > have to do is port it to the X25. > > > > There s a good HP49 emulator for unix made by Ivan Bertolotti > > > > I have a few applications that I would like to see on a cheap PDA device > > like the X25, I guess I will have to get my hand dirty again and do the > > porting myself > > > > > > > > > > > > > > ==== Your HP48 emu program looks great (too bad my palm isn't fast enough). Since HP is getting out of calculators, have you thought about trying to port some of the most useful HP48 software (erable, ALG48, CAS...) directly to PalmOS? I think that software to duplicate the functionality of an HP, but used the (great) Palm interface instead of the (clumsy) HP48 interface is the biggest thing lacking in the handheld market right now. There are some decent calculators and spreadsheets, but no hard-core symbolic math packages out there. Just my 2cents, good luck... > sorry about this dumb question, but what is X and FLTK? > Martin > > > > > > > >>would it be possible using the ROM of the 49 having an emulator running > >>on the X25? > >>Martin > >> > > > > On the X25 you have the CPU power to handle such task. > > However, there's no X or FLTK running there... So the first thing you will > > have to do is port it to the X25. > > > > There s a good HP49 emulator for unix made by Ivan Bertolotti > > > > I have a few applications that I would like to see on a cheap PDA device > > like the X25, I guess I will have to get my hand dirty again and do the > > porting myself > > > > > > > > > > > > > > > ==== How about getting the emulation to support the HP49 then you will have the (quick flexible) interfacace of the 49 rather than the (complex slow) Palm/math package interface. For day to day calcs and solving familiar problems I prefer the HP49 over a graphical maths package. Problem setup and the mouse interface tends to slow things down. I'll jump to a PC maths package if I need to study a problem or if the number crunching is just to much for the 49. Nowdays I'm also finding more of my data is coming from the PC so I'll often manipulate the data on the PC. Stephen N > Your HP48 emu program looks great (too bad my palm isn't fast enough). > Since HP is getting out of calculators, have you thought about trying > to port some of the most useful HP48 software (erable, ALG48, CAS...) > directly to PalmOS? > > I think that software to duplicate the functionality of an HP, but used > the (great) Palm interface instead of the (clumsy) HP48 interface is > the biggest thing lacking in the handheld market right now. There are > some decent calculators and spreadsheets, but no hard-core symbolic > math packages out there. Just my 2cents, good luck... > > > > > sorry about this dumb question, but what is X and FLTK? > > Martin > > > > > > > > > > > > >>would it be possible using the ROM of the 49 having an emulator running > > >>on the X25? > > >>Martin > > >> > > > > > > On the X25 you have the CPU power to handle such task. > > > However, there's no X or FLTK running there... So the first thing you will > > > have to do is port it to the X25. > > > > > > There s a good HP49 emulator for unix made by Ivan Bertolotti > > > > > > I have a few applications that I would like to see on a cheap PDA device > > > like the X25, I guess I will have to get my hand dirty again and do the > > > porting myself > > > > > > > > > > > > > > > > > > > > > > > ==== > > > I seem to have lost the website for this emulator - it would emulate > > either the HP48G or HP48SX as I recall, using the hi-res Sony PDAs. > > Does anyone have the URL for this? TIA, Pad You are probably referring to http://one-two-three-four-five.com/palm/tofu.html. This isn't an emulator (or even a simulator as advertized), it's just an HP48 keyboard on a rather low-feature RPN calculator. > Knowing that the Sony Clie is runnin PalmOS, I doubt you will ever see an > HP48 emulator on such machine. > Agreed, unfortunately, because of 2 main things: 1) The 68K-derived CPU doesn't have the raw speed needed. Featurewise, however, it is pretty good (remember those 68xxx v. 80x86 debates 20+ years ago?) 2) The PalmOS programming model is severely limiting. This is probably the biggest impedance. I have no idea if PalmOS 5 will rectify the programming model issues. They probably will, but I haven't seen anything yet about a new native SDK. The ARM core it uses will certainly have the speed and capability. After all, Emu48 on WinCE (oops -- PocketPC) devices reportedly performs reasonably well. Old apps will run (mostly) unchanged on PalmOS 5, i.e. they will be emulated. This will be like when Apple introduced their PowerMac line. I've toyed with the idea of porting Emu48 to PalmOS, but don't think it would be practical, at least not with PalmOS <=4.1. At a blue-sky guess it would probably be 10x slower than an HP48. After all, anything is possible given sufficient time and resources. However, I don't have the time, let alone justification, to do that. - Paul Goertz ==== > > > > > I seem to have lost the website for this emulator - it would emulate > > > either the HP48G or HP48SX as I recall, using the hi-res Sony PDAs. > > > Does anyone have the URL for this? TIA, Pad > > You are probably referring to > http://one-two-three-four-five.com/palm/tofu.html. This isn't an > emulator (or even a simulator as advertized), it's just an HP48 > keyboard on a rather low-feature RPN calculator. > > > Knowing that the Sony Clie is runnin PalmOS, I doubt you will ever see an > > HP48 emulator on such machine. > > > > Agreed, unfortunately, because of 2 main things: > > 1) The 68K-derived CPU doesn't have the raw speed needed. Featurewise, > however, it is pretty good (remember those 68xxx v. 80x86 debates 20+ > years ago?) > > 2) The PalmOS programming model is severely limiting. This is probably > the biggest impedance. > > I have no idea if PalmOS 5 will rectify the programming model issues. > They probably will, but I haven't seen anything yet about a new native > SDK. The ARM core it uses will certainly have the speed and > capability. After all, Emu48 on WinCE (oops -- PocketPC) devices > reportedly performs reasonably well. Old apps will run (mostly) > unchanged on PalmOS 5, i.e. they will be emulated. This will be like > when Apple introduced their PowerMac line. > > I've toyed with the idea of porting Emu48 to PalmOS, but don't think > it would be practical, at least not with PalmOS <=4.1. At a blue-sky > guess it would probably be 10x slower than an HP48. After all, > anything is possible given sufficient time and resources. However, I > don't have the time, let alone justification, to do that. > > - Paul Goertz Pad, The website you're looking for is http://www.mindspring.com/~hildinger/Power48/. I'm afraid you're wrong. As the website above shows I have built an HP48 emulator for the Sony NR70 series running PalmOS 4.1. Paul, I'm the author of the HP48SX/GX emulator referenced in the above website. The emulator at the current beta level only runs on a Sony NR70 clie, which has a Motorola DragonBall SuperVZ CPU running at 66MHz, and uses PalmOS 4.1. I wanted to respond to a few of your points... First with regard to speed, with the 66MHz processor I've achieved an emulation speed of approximately 80% of the actual hardware for the 48SX and 40% for the 48GX. I hope to optimize the code further and increase the speed a few points, but in general I'm happy with the speed I've obtained and find the emulator quite usable at those speeds. In reeality, the biggest bottleneck is the fact that the basic data unit of the HP48 is a nibble, and the fact that the registers are loaded in reverse order. As soon as there is ARM hardware available, I expect the emulator to stomp the real thing in terms of performance. Unfortunately, as you surmise, PalmOS 5 doesn't really alter the programming model in any way. They (Palm) have, however, allowed an opening in the model and allowed to developers to write what are called Armlets, or natively compiled ARM functions that can be called from regular 68K code. Since the entire core of my emulator is written as a single function, the speed increase should be dramatic when recompiled as an armlet. ==== > Paul, > > I'm the author of the HP48SX/GX emulator referenced in the above > website. The emulator at the current beta level only runs on a Sony > NR70 clie, which has a Motorola DragonBall SuperVZ CPU running at > 66MHz, and uses PalmOS 4.1. > > I wanted to respond to a few of your points... > > First with regard to speed, with the 66MHz processor I've achieved an > emulation speed of approximately 80% of the actual hardware for the > 48SX and 40% for the 48GX. I hope to optimize the code further and > increase the speed a few points, but in general I'm happy with the > speed I've obtained and find the emulator quite usable at those > speeds. In reeality, the biggest bottleneck is the fact that the basic > data unit of the HP48 is a nibble, and the fact that the registers are > loaded in reverse order. As soon as there is ARM hardware available, I > expect the emulator to stomp the real thing in terms of performance. > > Unfortunately, as you surmise, PalmOS 5 doesn't really alter the > programming model in any way. They (Palm) have, however, allowed an > opening in the model and allowed to developers to write what are > called Armlets, or natively compiled ARM functions that can be called > from regular 68K code. Since the entire core of my emulator is written > as a single function, the speed increase should be dramatic when > recompiled as an armlet. > > probably would achieve the same speed with PalmOS 3.5, 3.0, or > lower... > > Anyway, just FYI.... > > developer, Power48 > power48support@mindspring.com I am absolutely delighted to have been proved wrong! I was unaware that model's CPU was 66MHz. Just to save face, when I scale that performance to the speed of my Palm Vx (22-24MHz?), I get 14%. I don't suppose you'd consider supporting more pedestrian Palms? I have actually been sketching out a 160x160 bitmap, but haven't yet done the KML script. I've dispensed with the digit and function keys, and would map the hard buttons to arrow, on and enter keys. The resulting screen has buttons of the approximate size of Russ Webbs RPN. You'd have to resort to using grafitti for much of the input, but then I always use the PC keyboard with Emu48 and only rarely use the mouse. -- Paul Goertz ==== By checkerboard I mean individual pixels alternate between off and on in both directions. I came up with a few ways but was wondering if there was any kind of trick that would let me do it quicker. I guess doing it once then storing the LCD in a GROB would be the fastest but that would also waist a lot of space so lets say no GROBs allowed. -- john R. Latala jrlatala@golden.net ==== here's the shortest version I made in the mid 90ies: **************************************************************************** * CODE GOSBVL =SAVPTR GOSBVL =D0->Row1 C=0 A LCHEX 37 D=C A LCHEX 5555555555555555 A=C W A=A+A W CBarLp DAT0=C W D0=D0+ 16 DAT0=C W D0=D0+ 16 DAT0=C B D0=D0+ 2 ACEX W ** Prepare for shifted checkers line D=D-1 A GONC CBarLp GOVLNG =GETPTRLOOP ENDCODE **************************************************************************** * It's 45.5 bytes in size. Of course in HP SASM syntax;-) Raymond schrieb im Newsbeitrag > By checkerboard I mean individual pixels alternate between off and on in > both directions. I came up with a few ways but was wondering if there was > any kind of trick that would let me do it quicker. I guess doing it once > then storing the LCD in a GROB would be the fastest but that would also > waist a lot of space so lets say no GROBs allowed. > -- > john R. Latala > jrlatala@golden.net ==== Raymond Hellstern schrieb: > > here's the shortest version I made in the mid 90ies: Combining yours with a Good Idea (tm) in mine one gets CODE SAVE GOSBVL D0->Row1 LC(2) 63 D=C.A LC 555555555555555 A=C.W A+A.W { DAT0=C.W D0+16 DAT0=C.W D0+16 DAT0=C.B D0+2 ACEX.W D-1.B UPNC } LOADRPL ENDCODE 45 bytes, #DDA9h Greetings Thomas -- Thomas Rast If you cannot convince them, confuse them. -- Harry S. Truman ==== Nice work, Thomas, Raymond, Jonathan! Could you kindly comment you programs and resend them so that we all could learn from them. > Raymond Hellstern schrieb: ==== Veli-Pekka Nousiainen schreef: > Nice work, Thomas, Raymond, Jonathan! I agree but I've managed to shave off 2.5 bytes (#F1EFh 34 bytes) > Could you kindly comment you programs > and resend them so that we all could learn from them. There are some comments but I doubt if you can learn from it CODE SAVE % save RPL pointers SCREEN % point D0 to screen LA 3F % #3F = 63 counter for lines LC 55 % bit pattern 01010101 { C=-C-1 B % logical NEG { DAT0=C B % write byte to screen D0+2 % point to next position P+1 % P is one 4 bits wide UPNC % so do it 16 times } DAT0=C B % write last byte to D0+2 % complete 34 nibble line A-1 B % loop 64 times UPNC } LOADRPL % get RPL pointers and return ENDCODE -- This message was written with 100% recycled electrons Pivo ==== another variation of the checkers, not the binary;-) , also readable for SASM users: CODE GOSBVL =SAVPTR GOSBVL =D0->Row1 LCHEX 37 * Row count A=C A LCHEX 55 * Pattern CBarLp DAT0=C B D0=D0+ 2 P=P+1 GONC CBarLp * On exit; P=0 DAT0=C B D0=D0+ 2 C=-C-1 A * Switch pattern A=A-1 B GONC CBarLp GOVLNG =GETPTRLOOP ENDCODE 33Bytes Chk:#D2B1h Raymond Peter Geelhoed schrieb im > > > Veli-Pekka Nousiainen schreef: > > > Nice work, Thomas, Raymond, Jonathan! > > I agree but I've managed to shave off 2.5 bytes > (#F1EFh 34 bytes) > > > Could you kindly comment you programs > > and resend them so that we all could learn from them. > > There are some comments but I doubt if you can learn from it > > CODE > SAVE % save RPL pointers > SCREEN % point D0 to screen > LA 3F % #3F = 63 counter for lines > LC 55 % bit pattern 01010101 > { C=-C-1 B % logical NEG > { DAT0=C B % write byte to screen > D0+2 % point to next position > P+1 % P is one 4 bits wide > UPNC % so do it 16 times > } > DAT0=C B % write last byte to > D0+2 % complete 34 nibble line > A-1 B % loop 64 times > UPNC > } > LOADRPL % get RPL pointers and return > ENDCODE > > -- > This message was written with 100% recycled electrons > > Pivo > > ==== For real bit freaks we could also make it 33.5 bytes #B095h CODE SAVE % save RPL pointers SCREEN % point D0 to screen LC 3F % #3F = 63 counter for lines A=C A % LC is 3 nibbles smaller than LA LC 55 % bit pattern 01010101 { C=-C-1 B % logical NEG { DAT0=C B % write byte to screen D0+2 % point to next position P+1 % P is one 4 bits wide UPNC % so do it 16 times } DAT0=C B % write last byte to D0+2 % complete 34 nibble line A-1 B % loop 64 times UPNC } LOADRPL % get RPL pointers and return ENDCODE -- This message was written with 100% recycled electrons Pivo ==== Peter Geelhoed schrieb: > > For real bit freaks we could also make it 33.5 bytes #B095h Or 33 (#4CF1h): CODE SAVE SCREEN LC 3F A=C.A LC 55 { C=-C-1.A % Note that .A is one nibble shorter { DAT0=C.B D0+2 P+1 UPNC } DAT0=C.B D0+2 A-1.B UPNC } LOADRPL ENDCODE This is fun =) Thomas -- Thomas Rast If you cannot convince them, confuse them. -- Harry S. Truman ==== > > ?ABIT=0.6 UP > I can't believe I didn't think of this. I was looking for a smaller counter for a while. Originally it was asked to have a fast way of doing it. so I've made a version with very few cycles. it's a *bit* larger at 1116.5 bytes buy it also 65 times faster so by the standard minichallenge rule time*bytes it is better :-) CODE CD0EX RSTK=C D0= 00120 GOSUBL DATA NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 NIBHEX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5555555555555555555555555555555555 *DATA C=RSTK ?CBIT=0 0 -> ODD C+1 A *ODD DAT0=C A C=RSTK D0=C A=DAT0 A D0+5 PC=(A) ENDCODE @ -- This message was written with 100% recycled electrons Pivo ==== > so I've made a version with very few cycles. > > it's a *bit* larger at 1116.5 bytes buy it also 65 times faster > > so by the standard minichallenge rule time*bytes it is better :-) Yes, but it wouldn't follow the classic minichallenge rules: That is, do not leave the calculator in a *wierd* state. Now, the guy will be stuck with a chessboard on his screen. Which can be corrupted easily. Let say you save your program in a variable. Run it. now save something else in VAR< you got an even wierder screen. If you run the program directly after you've compiled it and do MEM DROP, it will also give interesting result. What kind of solution is that ??? ==== > > so by the standard minichallenge rule time*bytes it is better :-) > > Yes, but it wouldn't follow the classic minichallenge rules: > That is, do not leave the calculator in a *wierd* state. > > Now, the guy will be stuck with a chessboard on his screen. > Which can be corrupted easily. > Let say you save your program in a variable. Run it. now save something else > in VAR< you got an even wierder screen. The chessboard remains on my 49 > If you run the program directly after you've compiled it and do MEM DROP, it > will also give interesting result. It is still there, but to satisfy your needs we can just save the pointer to the screen first the problem is that it is so fast that you do not see the chessboard anymore CODE LC 806DA CD0EX RSTK=C C=DAT0 A RSTK=C D0= 00120 GOSUBL DATA % % chessboard *DATA C=RSTK ?CBIT=0 0 -> ODD C+1 A *ODD DAT0=C A C=RSTK C+10 A C+10 A DAT0=C A C=RSTK D0=C A=DAT0 A D0+5 PC=(A) ENDCODE @ -- This message was written with 100% recycled electrons Pivo ==== On Mon, 12 Aug 2002 10:14:21 +0200, Peter Geelhoed > >> >> ?ABIT=0.6 UP >> > >I can't believe I didn't think of this. I was looking for a smaller counter for a while. I guess I have an excuse for doing something as stupid as an explicit test for the parity of the row counter. ;) > >Originally it was asked to have a fast way of doing it. > >so I've made a version with very few cycles. > >it's a *bit* larger at 1116.5 bytes buy it also 65 times faster hehe. Talk about brute force. ;) > >so by the standard minichallenge rule time*bytes it is better :-) > Well, in that case I think Raymond Hellstern's version modified by Thomas Rast would be the winner. But I think the size challenge is more interesting since even the slowest version is almost beyond human perception in terms of even noticing that it had run. ;) ---------------------------------------------------------------------------- --- Jonathan Busby - before replying. ==== On Mon, 12 Aug 2002 08:18:12 -0500, Jonathan Busby >>so by the standard minichallenge rule time*bytes it is better :-) >Well, in that case I think Raymond Hellstern's version modified by >Thomas Rast would be the winner. Well, I take that back. If you're getting a time only 65 times faster then I think it's due to the fact that your version is so fast that it's beyond TEVAL's timing resolution. ---------------------------------------------------------------------------- --- Jonathan Busby - before replying. ==== > [..] > This is fun =) > It would be more fun (at least for me) if you used SASM or JAZZ syntax;-) Raymond ==== I even forgot the rules for the D0[+-] instructions, this fixes it. ---8<------------------------------------------ #!/usr/bin/perl -w use strict; my @instr = split /s+|[%;].*n/, (join , <>); my $i = shift @instr; my $f = (A|B|P|X|XS|W|WP|S); my $r = ([ABCD]); my $lnum = 0; my (@begin, @end); sub label { sprintf L%04x, $lnum++; } sub openblock { my ($b, $e) = (label (), label ()); push @begin, $b; push @end, $e; ($b, $e); } # MASD abbreviations # each line must have a t in front to distinguish it from a label! my %abbrev = ( SAVE => tGOSBVL =SAVPTRn, LOAD => tGOSBVL =GETPTRn, LOADRPL => tGOSBVL =GETPTRLOOPn, RPL => tA=DAT0tAntD0=D0+t5ntPC=(A)n, LOOP => tA=DAT0tAntD0=D0+t5ntPC=(A)n, SCREEN => tGOSBVL =D0->Row1n, MENU => tGOSBVL =D0->Sft1n, INTOFF2 => tGOSBVL =DisableIntrn, INTON2 => tGOSBVL =AllowIntrn, ERROR_C => tGOSBVL =ErrjmpCn, A=IN2 => tGOSBVL =AINRTNn, C=IN2 => tGOSBVL =CINRTNn, OUT=C=IN => tGOSBVL =OUTCINRTNn, RES.STR => tGOSBVL =MAKE$Nn, RES.ROOM => tGOSBVL =GETTEMPn, RESRAM => tGOSBVL =MAKERAM$n, SHRINK$ => tGOSBVL =Shrink$n, COPY<- => tGOSBVL =MOVEDOWNn, COPYDN => tGOSBVL =MOVEDOWNn, COPY-> => tGOSBVL =MOVEUPn, COPYUP => tGOSBVL =MOVEUPn, DISP => tGOSBVL =DBUGn, DISPKEY => tGOSBVL =DBUG.KEYn, SRKLST => tGOSBVL =Shrink$Listn, ZEROMEM => tGOSBVL =WIPEOUTn, MULT.A => tGOSBVL =MULTBACn, MULT => tGOSBVL =MPYn, DIV.A => tGOSBVL =IntDivn, BEEP => tGOSBVL =makebeepn ); # Instructions without field argument # Note that the 1's are dummies and not used my %passthru = ( ASLC => 1, ASRC => 1, BSLC => 1, BSRC => 1, CSLC => 1, CSRC => 1, DSLC => 1, DSRC => 1, A=IN => 1, C=IN => 1, PC=A => 1, PC=C => 1, PC=(A) => 1, PC=(C) => 1, D0=A => 1, D0=C => 1, D0=AS => 1, D0=CS => 1, AD0EX => 1, CD0EX => 1, AD0XS => 1, CD0XS => 1, CLRST => 1, C=ST => 1, ST=C => 1, CSTEX => 1, OUT=C => 1, OUT=CS => 1, UNCNFG => 1, CONFIG => 1, RESET => 1, C=ID => 1, BUSCB => 1, BUSCC => 1, BUSCD => 1, SREQ? => 1, SHUTDN => 1, INTOFF => 1, INTON => 1, RSI => 1, SETHEX => 1, SETDEC => 1, RTN => 1, RTNSXM => 1, RTNSC => 1, RTNCC => 1, RTNC => 1, RTNNC => 1, P+1 => 1, P-1 => 1, C+P+1 => 1, C=RSTK => 1, RSTK=C => 1 ); # Instructions which invariably require a single argument my %onearg = ( GOC => 1, GONC => 1, GOTO => 1, GOLONG => 1, GOVLNG => 1, GOSUB => 1, GOSUBL => 1, GOSBVL => 1, D0=(2) => 1, D0=(4) => 1, D0=(5) => 1, D1=(2) => 1, D1=(4) => 1, D1=(5) => 1 ); # Inverted tests # keys are regexps, values must eval() to the substitution string my %testinv = ( ?$r=$r.$f => q{?$1#$2.$3}, ?$r#$r.$f => q{?$1=$2.$3}, ?$r=0.$f => q{?$1#0.$2}, ?$r#0.$f => q{?$1=0.$2}, ?$r>$r.$f => q{?$1<=$2.$3}, ?$r<=$r.$f => q{?$1>$2.$3}, ?$r<$r.$f => q{?$1>=$2.$3}, ?$r>=$r.$f => q{?$1<$2.$3}, ?ST=0.(d+) => q{?ST=1.$1}, ?ST=1.(d+) => q{?ST=0.$1}, ?[AC]BIT=0.(d+) => q{?$1BIT=1.$2}, ?[AC]BIT=1.(d+) => q{?$1BIT=0.$2}, ?P=(d+) => q{?P#$1}, ?P#(d+) => q{?P=$1} ); # Skip and Skip-Else instructions and the jump they translate to my %skips = ( SKIP => GOTO, SKIPL => GOTOL, SKIPC => GOC, SKC => GOC, SKIPNC => GONC, SKNC => GONC, SKUB => GOSUB, SKUBL => GOSUBL ); my %skelse = ( SKELSE => GOTO, SKLSE => GOTO, SKEC => GOC, SKENC => GONC ); # Translators for UP UPC UPNC (only the C NC part) my %jumpcond = ( => GOTO, C => GOC, NC => GONC ); while (defined $i) { if ($i =~ /CODE/) { print STDERR Warning: RPL mode not supported (yet?)n; } elsif ($i =~ /*(.*)/) { print $1n; } elsif (exists $abbrev{$i}) { print $abbrev{$i}; } elsif (exists $passthru{$i}) { print t$in; } elsif (exists $skips{$i}) { my ($b, $e) = openblock; print t, $skips{$i}, t$en$bn; } elsif ($i eq }) { my $e1 = pop @end; pop @begin; print $e1n; if (@instr and exists $skelse{$instr[0]}) { my $i = shift @instr; my ($b2, $e2) = openblock; print t, $skelse{$i}, t$e2n$b2n; } } elsif ($i eq {) { my ($b, $e) = openblock; print $bn; } elsif ($i =~ /^P=(d+)?$/) { if (/^P=(d+)$/) { print t$1t$2n; } else { $i .= shift @instr; next; } } elsif ($i =~ /UP(N?C)?(d*)/) { my $n = $2; $n = 1 unless $n; print t, $jumpcond{$1}, t, $begin[@begin - $n], n; } elsif ($i =~ /EXIT(N?C)?(d*)/) { my $n = $2; $n = 1 unless $n; print t, $jumpcond{$1}, t, $end[@end - $n], n; } elsif ($i =~ /^?/) { if ($i !~ /./ and $i ne ?SB=0 and $i ne ?MP=0 and $i ne ?XM=0 and $i ne ?SR=0) { $i .= . . shift @instr; } my $t = shift @instr; if ($t eq { or $t eq SKIPYES) { my ($b, $e) = openblock; print t$intGOYESt$en$bn; } elsif ($t eq ->) { $t = shift @instr; if ($t eq {) { my ($b, $e) = openblock; for (keys %testinv) { if ($i =~ /$_/) { $i = eval $testinv{$_}; last; } } $i =~ s/./t/; print t$intGOYESt$en$bn; } else { $i =~ s/./t/; print t$intGOYESt$tn; } } elsif ($t =~ /UP(d*)/) { $i =~ s/./t/; my $n = $1; $n = 1 unless $n; print t$intGOYESt, $begin[@begin - $n], n; } elsif ($t =~ /EXIT(d*)/) { $i =~ s/./t/; my $n = $1; $n = 1 unless $n; print t$intGOYESt, $end[@end - $n], n; } } elsif ($i =~ /D[01][+-]/) { $i .= shift @instr unless $i =~ /D[01][+-].+/; $i =~ /(D[01])([+-])(.*)/; print t$1=$1$2t$3n; } elsif ($i !~ /./) { $i .= . . shift @instr; next; } elsif ($i =~ /([^.]+).(.*)/ and exists $onearg{$1}) { print t$1t$2n; } elsif ($i =~ / $r ([+-]) (d+) . $f /ox) { if ($3 == 1) { print t$1=$1$2$3t$4n; } else { print t$1=$1$2CONt$4,$3n; } } elsif ($i =~ / $r = $r - $r . $f /ox) { print t$1=$2-$3t$4n; } elsif ($i =~ / $r ([+&!-]) $r . $f /ox) { print t$1=$1$2$3t$4n; } elsif ($i =~ / $r = ( (?:-1)? -) $r . $f /ox) { print t$1=$2$3t$4n; } elsif ($i =~ / ( L[AC] (d+) ) . (.*) /ox) { print t$1t$2n; } elsif ($i =~ / ( L[AC] ) . (.*) /ox) { print t$1HEXt$2n; } elsif ($i =~ / ( D[01]= ) . ([0-9A-F]+) /ox) { print t$1( . length ($2) . )t#$2n; } elsif ($i =~ / (.*) . $f /ox) { print t$1t$2n; } elsif ($i =~ / G (OIN)? ([245]) . (.*) /ox) { print tREL($2)t$3n; } $i = shift @instr; } ---8<------------------------------------------ -- Thomas Rast If you cannot convince them, confuse them. -- Harry S. Truman ==== Raymond Hellstern schrieb: > > It would be more fun (at least for me) if you used SASM or JAZZ syntax;-) --8<------------------------------------------------ #!/usr/bin/perl -w use strict; my @instr = split /s+|[%;].*n/, (join , <>); my $i = shift @instr; my $f = (A|B|P|X|XS|W|WP|S); my $r = ([ABCD]); my $lnum = 0; my (@begin, @end); sub label { sprintf L%04x, $lnum++; } sub openblock { my ($b, $e) = (label (), label ()); push @begin, $b; push @end, $e; ($b, $e); } # MASD abbreviations # each line must have a t in front to distinguish it from a label! my %abbrev = ( SAVE => tGOSBVL =SAVPTRn, LOAD => tGOSBVL =GETPTRn, LOADRPL => tGOSBVL =GETPTRLOOPn, RPL => tA=DAT0tAntD0=D0+t5ntPC=(A)n, LOOP => tA=DAT0tAntD0=D0+t5ntPC=(A)n, SCREEN => tGOSBVL =D0->Row1n, MENU => tGOSBVL =D0->Sft1n, INTOFF2 => tGOSBVL =DisableIntrn, INTON2 => tGOSBVL =AllowIntrn, ERROR_C => tGOSBVL =ErrjmpCn, A=IN2 => tGOSBVL =AINRTNn, C=IN2 => tGOSBVL =CINRTNn, OUT=C=IN => tGOSBVL =OUTCINRTNn, RES.STR => tGOSBVL =MAKE$Nn, RES.ROOM => tGOSBVL =GETTEMPn, RESRAM => tGOSBVL =MAKERAM$n, SHRINK$ => tGOSBVL =Shrink$n, COPY<- => tGOSBVL =MOVEDOWNn, COPYDN => tGOSBVL =MOVEDOWNn, COPY-> => tGOSBVL =MOVEUPn, COPYUP => tGOSBVL =MOVEUPn, DISP => tGOSBVL =DBUGn, DISPKEY => tGOSBVL =DBUG.KEYn, SRKLST => tGOSBVL =Shrink$Listn, ZEROMEM => tGOSBVL =WIPEOUTn, MULT.A => tGOSBVL =MULTBACn, MULT => tGOSBVL =MPYn, DIV.A => tGOSBVL =IntDivn, BEEP => tGOSBVL =makebeepn ); # Instructions without field argument # Note that the 1's are dummies and not used my %passthru = ( ASLC => 1, ASRC => 1, BSLC => 1, BSRC => 1, CSLC => 1, CSRC => 1, DSLC => 1, DSRC => 1, A=IN => 1, C=IN => 1, PC=A => 1, PC=C => 1, PC=(A) => 1, PC=(C) => 1, D0=A => 1, D0=C => 1, D0=AS => 1, D0=CS => 1, AD0EX => 1, CD0EX => 1, AD0XS => 1, CD0XS => 1, CLRST => 1, C=ST => 1, ST=C => 1, CSTEX => 1, OUT=C => 1, OUT=CS => 1, UNCNFG => 1, CONFIG => 1, RESET => 1, C=ID => 1, BUSCB => 1, BUSCC => 1, BUSCD => 1, SREQ? => 1, SHUTDN => 1, INTOFF => 1, INTON => 1, RSI => 1, SETHEX => 1, SETDEC => 1, RTN => 1, RTNSXM => 1, RTNSC => 1, RTNCC => 1, RTNC => 1, RTNNC => 1, P+1 => 1, P-1 => 1, C+P+1 => 1, C=RSTK => 1, RSTK=C => 1 ); # Instructions which invariably require a single argument my %onearg = ( GOC => 1, GONC => 1, GOTO => 1, GOLONG => 1, GOVLNG => 1, GOSUB => 1, GOSUBL => 1, GOSBVL => 1, D0=(2) => 1, D0=(4) => 1, D0=(5) => 1, D1=(2) => 1, D1=(4) => 1, D1=(5) => 1 ); # Inverted tests # keys are regexps, values must eval() to the substitution string my %testinv = ( ?$r=$r.$f => q{?$1#$2.$3}, ?$r#$r.$f => q{?$1=$2.$3}, ?$r=0.$f => q{?$1#0.$2}, ?$r#0.$f => q{?$1=0.$2}, ?$r>$r.$f => q{?$1<=$2.$3}, ?$r<=$r.$f => q{?$1>$2.$3}, ?$r<$r.$f => q{?$1>=$2.$3}, ?$r>=$r.$f => q{?$1<$2.$3}, ?ST=0.(d+) => q{?ST=1.$1}, ?ST=1.(d+) => q{?ST=0.$1}, ?[AC]BIT=0.(d+) => q{?$1BIT=1.$2}, ?[AC]BIT=1.(d+) => q{?$1BIT=0.$2}, ?P=(d+) => q{?P#$1}, ?P#(d+) => q{?P=$1} ); # Skip and Skip-Else instructions and the jump they translate to my %skips = ( SKIP => GOTO, SKIPL => GOTOL, SKIPC => GOC, SKC => GOC, SKIPNC => GONC, SKNC => GONC, SKUB => GOSUB, SKUBL => GOSUBL ); my %skelse = ( SKELSE => GOTO, SKLSE => GOTO, SKEC => GOC, SKENC => GONC ); # Translators for UP UPC UPNC (only the C NC part) my %jumpcond = ( => GOTO, C => GOC, NC => GONC ); while (defined $i) { if ($i =~ /CODE/) { print STDERR Warning: RPL mode not supported (yet?)n; } elsif ($i =~ /*(.*)/) { print $1n; } elsif (exists $abbrev{$i}) { print $abbrev{$i}; } elsif (exists $passthru{$i}) { print t$in; } elsif (exists $skips{$i}) { my ($b, $e) = openblock; print t, $skips{$i}, t$en$bn; } elsif ($i eq }) { my $e1 = pop @end; pop @begin; print $e1n; if (@instr and exists $skelse{$instr[0]}) { my $i = shift @instr; my ($b2, $e2) = openblock; print t, $skelse{$i}, t$e2n$b2n; } } elsif ($i eq {) { my ($b, $e) = openblock; print $bn; } elsif ($i =~ /^P=(d+)?$/) { if (/^P=(d+)$/) { print t$1t$2n; } else { $i .= shift @instr; next; } } elsif ($i =~ /UP(N?C)?(d*)/) { my $n = $2; $n = 1 unless $n; print t, $jumpcond{$1}, t, $begin[@begin - $n], n; } elsif ($i =~ /EXIT(N?C)?(d*)/) { my $n = $2; $n = 1 unless $n; print t, $jumpcond{$1}, t, $end[@end - $n], n; } elsif ($i =~ /^?/) { if ($i !~ /./ and $i ne ?SB=0 and $i ne ?MP=0 and $i ne ?XM=0 and $i ne ?SR=0) { $i .= . . shift @instr; } my $t = shift @instr; if ($t eq { or $t eq SKIPYES) { my ($b, $e) = openblock; print t$intGOYESt$en$bn; } elsif ($t eq ->) { $t = shift @instr; if ($t eq {) { my ($b, $e) = openblock; for (keys %testinv) { if ($i =~ /$_/) { $i = eval $testinv{$_}; last; } } $i =~ s/./t/; print t$intGOYESt$en$bn; } else { $i =~ s/./t/; print t$intGOYESt$tn; } } elsif ($t =~ /UP(d*)/) { $i =~ s/./t/; my $n = $1; $n = 1 unless $n; print t$intGOYESt, $begin[@begin - $n], n; } elsif ($t =~ /EXIT(d*)/) { $i =~ s/./t/; my $n = $1; $n = 1 unless $n; print t$intGOYESt, $end[@end - $n], n; } } elsif ($i !~ /./) { $i .= . . shift @instr; next; } elsif ($i =~ /([^.]+).(.*)/ and exists $onearg{$1}) { print t$1t$2n; } elsif ($i =~ / $r ([+-]) (d+) . $f /ox) { if ($3 == 1) { print t$1=$1$2$3t$4n; } else { print t$1=$1$2CONt$4,$3n; } } elsif ($i =~ / $r = $r - $r . $f /ox) { print t$1=$2-$3t$4n; } elsif ($i =~ / $r ([+&!-]) $r . $f /ox) { print t$1=$1$2$3t$4n; } elsif ($i =~ / $r = ( (?:-1)? -) $r . $f /ox) { print t$1=$2$3t$4n; } elsif ($i =~ / ( L[AC] (d+) ) . (.*) /ox) { print t$1t$2n; } elsif ($i =~ / ( L[AC] ) . (.*) /ox) { print t$1HEXt$2n; } elsif ($i =~ / ( D[01]= ) . ([0-9A-F]+) /ox) { print t$1( . length ($2) . )t#$2n; } elsif ($i =~ / (.*) . $f /ox) { print t$1t$2n; } elsif ($i =~ / G (OIN)? ([245]) . (.*) /ox) { print tREL($2)t$3n; } $i = shift @instr; } --8<------------------------------------------------ Notes: - Input comes from <>, i.e. the files given on the command line or, if none, stdin. Output goes to stdout. - RPL mode is not supported: CODE and ENDCODE spit out a warning (to stderr), all other RPL stuff will cause it to do unpredictable things. - Some of the less used features of MASD are not supported either. - Expressions are not translated, as this would (probably) require a full-blown parser. - Generally, it relies on your program being correct. Weird things may happen if it's not. - Your program should not contain any labels of the form Lxxxx, where each x is a hex digit. The labels generated for MASD skips and blocks look like this. If you already have a few thousand lines of code and desperately waited for this program, change the sprintf line near the top. - Comments are silently dropped. Well, it doesn't get more readable anyway, you should keep the original version for that. - The code may look a bit ugly. In fact, it is. This program is in the public domain. Do whatever you want with it. If you become a millionaire through the use of this script, don't credit me, I won't take the blame anyway. Greetings Thomas -- Thomas Rast If you cannot convince them, confuse them. -- Harry S. Truman ==== On Sat, 10 Aug 2002 23:54:53 +0200, Thomas Rast >Raymond Hellstern schrieb: >> >> here's the shortest version I made in the mid 90ies: > >Combining yours with a Good Idea (tm) in mine one gets >45 bytes, #DDA9h If you're optimizing for size we can get to even smaller byte counts by using a different method : ( HPTOOLS/Jazz syntax ) CODE GOSBVL =SAVPTR GOSBVL =D0->Row1 A=0 A -- LC(2) 33 B=C A LC(1) #A ?ABIT=0 0 GOYES + C=-C-1 A + - DAT0=C P D0=D0+ 1 B=B-1 B GONC - A=A+1 A ?ABIT=0 6 GOYES -- GOVLNG =GETPTRLOOP ENDCODE This one is 36.5 bytes with checksum # DC1h (48G) . ---------------------------------------------------------------------------- --- Jonathan Busby - before replying. ==== Your code variation is even two CPU cycles faster per loop;-) D=D-1 A 7 cycles D=D-1 B 5 cycles Greetings, Raymond Thomas Rast schrieb im Newsbeitrag > Raymond Hellstern schrieb: > > > > here's the shortest version I made in the mid 90ies: > > Combining yours with a Good Idea (tm) in mine one gets > > CODE > SAVE GOSBVL D0->Row1 > LC(2) 63 D=C.A > LC 555555555555555 > A=C.W A+A.W > { > DAT0=C.W D0+16 > DAT0=C.W D0+16 > DAT0=C.B D0+2 > ACEX.W > D-1.B UPNC > } > LOADRPL > ENDCODE > > 45 bytes, #DDA9h > > Greetings > Thomas > > -- > Thomas Rast > If you cannot convince them, confuse them. > -- Harry S. Truman ==== Raymond Hellstern schrieb: > > Your code variation is even two CPU cycles faster per loop;-) > > D=D-1 A 7 cycles > D=D-1 B 5 cycles I've noticed that processor cycles are not everything. Consider the difference between the R0=C.A and R0=C.W opcodes: The former is 6 nibbles long and takes 14 cycles, while the latter is 3 nibbles long and takes 20.5 cycles (according to Introduction to Saturn Assembly Language). So choosing one of the two - at least where both are possible - seems to be a question of space or speed. However the additional memory reads needed to fetch the longer one (R0=C.A) mostly undo the speed advance. This can be seen quite easily: Short form: CODE C=0.A C-1.A { R0=C.W C-1.A UPNC } RPL ENDCODE 16 bytes, #2270h, TEVAL: 15.22 seconds Long form: CODE C=0.A C-1.A { R0=C.A C-1.A UPNC } RPL ENDCODE 17.5 bytes, #1978h, TEVAL: 14.90 seconds So the difference in execution time for one single instruction is 0.32 seconds divided by #FFFFFh: 3.05E-7 seconds. While the expected difference is 6.5 cycles divided by 4MHz: 1.63E-6 seconds, more than five times as much. Note that the last number is even an underestimate, since the Saturn runs either at 3.75 or 3.95 MHz. Greetings Thomas -- Thomas Rast If you cannot convince them, confuse them. -- Harry S. Truman ==== jrlatala@shell.golden.net schrieb: > > By checkerboard I mean individual pixels alternate between off and on in > both directions. I came up with a few ways but was wondering if there was > any kind of trick that would let me do it quicker. I guess doing it once > then storing the LCD in a GROB would be the fastest but that would also > waist a lot of space so lets say no GROBs allowed. How about (in MASD syntax) CODE SAVE GOSBVL D0->Row1 LC(2) 63 B=C.A % Loop counter LC 5555555555555555 % Pattern (16 digits) { DAT0=C.W D0+16 % Write a display line DAT0=C.W D0+16 DAT0=C.B D0+2 CSRB.W % Alternate pattern P=C.0 C=P.15 % Copy leftmost nibble B-1.B UPNC % Decrement counter } P=0 LOADRPL ENDCODE 47 bytes, CRC #E27Fh TEVAL: 0.0313 seconds If you want the top left pixel to be white instead of black, change the pattern to all A's instead of 5's. HTH Thomas -- Thomas Rast If you cannot convince them, confuse them. -- Harry S. Truman ==== > By checkerboard I mean individual pixels alternate between off and on in > both directions. I came up with a few ways but was wondering if there was > any kind of trick that would let me do it quicker. I guess doing it once > then storing the LCD in a GROB would be the fastest but that would also > waist a lot of space so lets say no GROBs allowed. Try the following program. It is a lot faster than any pixel-by-pixel program I have seen, and works on an HP48 or HP49: << 0. 130. XRNG 0. 63. YRNG ERASE { #0 #0 } PVIEW 0. 63. FOR Y 0. Y R->C 130. Y R->C LINE 2 STEP 0. 130. FOR X X 0. R->C X 63. R->C TLINE 2 STEP 7 FREEZE >> ==== > >> By checkerboard I mean individual pixels alternate between off and on in >> both directions. I came up with a few ways but was wondering if there was >> any kind of trick that would let me do it quicker. I guess doing it once >> then storing the LCD in a GROB would be the fastest but that would also >> waist a lot of space so lets say no GROBs allowed. > >Try the following program. It is a lot faster than any >pixel-by-pixel program I have seen, and works on an HP48 or HP49: > ><< 0. 130. XRNG 0. 63. YRNG ERASE { #0 #0 } PVIEW > 0. 63. FOR Y 0. Y R->C 130. Y R->C LINE 2 STEP > 0. 130. FOR X X 0. R->C X 63. R->C TLINE 2 STEP > 7 FREEZE >>> You'll also find working in direct screen coordinates is faster than going through the HP's scaling functions. Something like: << #131d #64d BLANK PICT STO 0 64 FOR y #0d y R->B 2 ->LIST #130d y R->B 2 ->LIST LINE 2 STEP o 130 FOR x x R->B #0d 2 ->LIST x R->B #63d R->B 2 ->LIST TLINE 2 STEP 7 FREEZE >> On my GX your original program ran in about fourteen seconds whereas the above one runs in about ten. -- john R. Latala jrlatala@golden.net ==== > >> By checkerboard I mean individual pixels alternate between off and on in >> both directions. I came up with a few ways but was wondering if there was >> any kind of trick that would let me do it quicker. I guess doing it once >> then storing the LCD in a GROB would be the fastest but that would also >> waist a lot of space so lets say no GROBs allowed. > >Try the following program. It is a lot faster than any >pixel-by-pixel program I have seen, and works on an HP48 or HP49: > ><< 0. 130. XRNG 0. 63. YRNG ERASE { #0 #0 } PVIEW > 0. 63. FOR Y 0. Y R->C 130. Y R->C LINE 2 STEP > 0. 130. FOR X X 0. R->C X 63. R->C TLINE 2 STEP > 7 FREEZE >>> At least it's in RPL! :-) I guess I should have mentioned in my original post that I wasd looking for an RPL solution. I tried it and on my GX it took about 14 seconds which is slower than my RPL solution which runs in about one second (give or take). %%HP: T(3)A(D)F(.); << LCD-> SIZE BLANK PICT STO { # 0d # 0d } PVIEW { # 0d # 0d } PIXON { # 1d # 1d } PIXON PICT { # 2d # 0d } PICT { # 0d # 0d } { # 1d # 1d } SUB REPL PICT { # 4d # 0d } PICT { # 0d # 0d } { # 3d # 1d } SUB REPL PICT { # 8d # 0d } PICT { # 0d # 0d } { # 7d # 1d } SUB REPL PICT { # 16d # 0d } PICT { # 0d # 0d } { # 15d # 1d } SUB REPL PICT { # 32d # 0d } PICT { # 0d # 0d } { # 31d # 1d } SUB REPL PICT { # 64d # 0d } PICT { # 0d # 0d } { # 63d # 1d } SUB REPL PICT { # 128d # 0d } PICT { # 0d # 0d } { # 2d # 1d } SUB REPL PICT { # 0d # 2d } PICT { # 0d # 0d } { # 130d # 1d } SUB REPL PICT { # 0d # 4d } PICT { # 0d # 0d } { # 130d # 3d } SUB REPL PICT { # 0d # 8d } PICT { # 0d # 0d } { # 130d # 7d } SUB REPL PICT { # 0d # 16d } PICT { # 0d # 0d } { # 130d # 15d } SUB REPL PICT { # 0d # 32d } PICT { # 0d # 0d } { # 130d # 31d } SUB REPL 7 FREEZE >> P.S. Even though I was looking for an RPL solution it was informative looking at all the other solutions. -- john R. Latala jrlatala@golden.net ==== well I am glad to announce that yes I had both calculators in my hands to day and I could not really tell a difference in the key the broken calc was a Chinese model and the Indonesian replacement has the good screen and I am very happy again I just finished installing the beta flash ROM and now I can begin using my new books from Gilberto Urroz which I highly recommend they are very well written. hopefully I will be answering question instead of asking so many after the 2 books ;) good night all > I purchased a hp 49g from Samson in Dec of last year. recently I went to > turn it on and to make a long story short its dead in the water so the hp > tech that I talked to recommended ups 2 day replacement as I cant wait 2 > weeks to get another calculator I have to start using it as soon as possible > for my calculus class. that part of the service was incredible great > technicians pleasant fast and all that my problem is they are replacing my > Chinese model with an Indonesian model I have hear bad things about these > calculators now I can deal with stiff keys I'm a big strong boy (loll) but > my main concern is a screen with poor visibility or that has fun colors etc. > if the Indonesian calculators are obviously inferior why is hp still selling > / sending them to nice loyal customers like me I have previously owned the > last 2 models in this series. my cal id number is id94202887 is there any > way to find out just how bad its going to be by the number? thanks I know > this was a little long winded but....I appreciate the help > > ==== > well I am glad to announce that yes I had both calculators in my hands to > day and I could not really tell a difference in the key the broken calc was > a Chinese model and the Indonesian replacement has the good screen and I am > very happy again I just finished installing the beta flash ROM and now I can > begin using my new books from Gilberto Urroz which I highly recommend they > are very well written. hopefully I will be answering question instead of > asking so many after the 2 books ;) good night all > > I purchased a hp 49g from Samson in Dec of last year. recently I went to > > turn it on and to make a long story short its dead in the water so the hp > > tech that I talked to recommended ups 2 day replacement as I cant wait 2 > > weeks to get another calculator I have to start using it as soon as > possible > > for my calculus class. that part of the service was incredible great > > technicians pleasant fast and all that my problem is they are replacing my > > Chinese model with an Indonesian model I have hear bad things about these > > calculators now I can deal with stiff keys I'm a big strong boy (loll) but > > my main concern is a screen with poor visibility or that has fun colors > etc. > > if the Indonesian calculators are obviously inferior why is hp still > selling > > / sending them to nice loyal customers like me I have previously owned the > > last 2 models in this series. my cal id number is id94202887 is there any > > way to find out just how bad its going to be by the number? thanks I know > > this was a little long winded but....I appreciate the help > > > > I purchased mine from amazon and it is a chinese model, I really don't have any problems with it. The buttons are a little stiff at first but with use they either become less stiff or I'm just getting used to them. I haven't had any problems with the screen...only problem I have is trivial, the calculator slide cover after being taken off and put back on so many times no longer stays on as well. Other than that, its a great calculator! ==== > I purchased a hp 49g from Samson in Dec of last year. recently I went to > turn it on and to make a long story short its dead in the water so the hp > tech that I talked to recommended ups 2 day replacement as I cant wait 2 > weeks to get another calculator I have to start using it as soon as possible > for my calculus class. that part of the service was incredible great > technicians pleasant fast and all that my problem is they are replacing my > Chinese model with an Indonesian model I have hear bad things about these > calculators now I can deal with stiff keys I'm a big strong boy (loll) but > my main concern is a screen with poor visibility or that has fun colors etc. > if the Indonesian calculators are obviously inferior why is hp still selling > / sending them to nice loyal customers like me I have previously owned the > last 2 models in this series. my cal id number is id94202887 is there any > way to find out just how bad its going to be by the number? thanks I know > this was a little long winded but....I appreciate the help I purchased an HP 49G from HP Shopping and it was an Indonesian model that had a screen that scratched easily, but no rainbow effect. I called HP and they asked for the serial# off the back, and after I read it off to them, they told me it was a model that wasn't supposed to be defective. They said, the defective ones were the first runs made in Indonesia and that later ones produced there were okay. Well, after telling the man that regardless of any of that, my screen scratches by simply wiping off the dust, so they gave me an order # and address to their new service center in Tennessee and I ended up with a brand new one from China, which is perfect. Even if your new replacement model is of the bad batch, it can still be returned again until you get a good one. Oh, and HP has a service as well, where they will send you the new calc first and let you return the old one after getting your new one. ==== >so they gave me an order # > and address to their new service center in ***Tennessee*** and I ended up > with a brand new one from China, which is perfect. Gene: What service center in TN? I live in Nashville. Anyone know where this is located? ==== > >so they gave me an order # > > and address to their new service center in ***Tennessee*** and I ended up > > with a brand new one from China, which is perfect. > > Gene: What service center in TN? I live in Nashville. Anyone know where this > is located? It is in LaVergne Tennessee, by the way were practically neighbors, I'm from Kentucky. ==== Try: http://www.contrib.andrew.cmu.edu/~drury/hp48gaur/ It's not the complete guide, though. Best wishes, Walter. > I'm trying to locate a copy of the hp48 Advanced User's Reference. Does > anyone know if it is available for download? Can't locate it at hpcalc.org. > > ==== try www.calcpro.com $29.95 > I'm trying to locate a copy of the hp48 Advanced User's Reference. Does > anyone know if it is available for download? Can't locate it at hpcalc.org. > > ==== Do somebody on the group had the idea to control the Philips Expanium 401 with hp49g? (Because there's some kind of in-cord remote attached...) Is it possible? ==== > > Using ROM 1.19-6, Calc is set to RAD and EXACT (I've also tried > > different configurations that yield the same result listed below). > > > > I'm not sure if the ->Qpi command is working properly. > > > > For example 4.712 should convert to '(3*pi)/2' using the ->Qpi > > command. > > Instead it converts to '33/7' - the same as the ->Q command. > > > > Based on the '48 manual, the ->Qpi command compares the fractional > > equivalent of the original number AND the fractional equivalent of the > > original number divided by pi. It returns the fraction with the > > smallest denominator - which should by '(3*pi)/2' and not '33/7'. > > > > What am I doing incorrectly? > > > The command ->Qpi does work correctly. It doesn't give (3*pi)/2 when > you feed it with the decimal approximation of 33/7 because 4.712 is > not the 12 digits approximation for (3*pi)/2. If you feed it with > 4.71238898038 then it will return (3*pi)/2. > > Greetings, > Nick. you're correct in pointing out that the numeric format (and hence, the precision) determines whether the ->Qpi command functions properly or works the same as ->Q. Glenn ==== > glenn-bob escribi.97 en el mensaje > > Using ROM 1.19-6, Calc is set to RAD and EXACT (I've also tried > > different configurations that yield the same result listed below). > > > > I'm not sure if the ->Qpi command is working properly. > > > > For example 4.712 should convert to '(3*pi)/2' using the ->Qpi > > command. > > Instead it converts to '33/7' - the same as the ->Q command. The effect of the ->Qpi command (and the XQ and ->Q commands) depends on the current display settings. If you are using the STD (standard) display then you need 11 or 12 significant digit precision in the decimal representation in order to guarantee the '(3*pi)/2' result. However, using a FIX display, for example 6 FIX, and a 6 decimal place roundoff of the numerical value of '(3*pi)/2', you will find that ->Qpi will give '(3*pi)/2'. Some experimentation is necessary to determine how many significant digits are needed with the various display options to get a good conversion to rational or rational multiple of pi format. NOTE: The numeric display options are STD (standard), n FIX (fixed), n SCI (scientific), n ENG (engineering), with 0 <= n <= 11, for the number ofdecimal places to be displayed. The RND (roundoff) function takes as input a number-to-be-rounded and a roundoff code n, with -11 <= n <= 11. Negative n's round to |n| significant digits (at least 1) while non-negative n's round to n decimal places (including zero), the same as in the HP48 series. ==== I'm looking for the unoffical manual of hp28s/c made by a french man in french language in which there it is indicated how to connect this calculator to a PC thanks a lot Nicolas ==== On Sat, 10 Aug 2002 16:43:01 +0200, Nicolas >I'm looking for the unoffical manual of hp28s/c made by a french man in >french language in which there it is indicated how to connect this >calculator to a PC >thanks a lot > Nicolas > Is this what you're looking for? : http://www.courbis.com/voyage28.html ---------------------------------------------------------------------------- --- Jonathan Busby - before replying. ==== Jonathan Busby a .8ecrit dans le message : edmelucts5gea2sfbfjjkamcoh3ohnuec5@4ax.com... > On Sat, 10 Aug 2002 16:43:01 +0200, Nicolas > > >I'm looking for the unoffical manual of hp28s/c made by a french man in > >french language in which there it is indicated how to connect this > >calculator to a PC > >thanks a lot > > Nicolas > > > > Is this what you're looking for? : > > http://www.courbis.com/voyage28.html > > > yes, thank you very much ==== On my new HP49G I have a dark irritating shadow under every sign on the display. Though the LCD has a higher contrast it's worth readable than my old HP48G because of this shadow. I thought that HP has improved the displays. Any similar experiences? Georg. ==== Try reducing the contrast (Press and hold 'on'; press '-' or '+') >On my new HP49G I have a dark irritating shadow under every sign on >the >display. Though the LCD has a higher contrast it's worth readable than >my old HP48G because of this shadow. I thought that HP has improved >the displays. > >Any similar experiences? > > > >Georg. ==== > Try reducing the contrast (Press and hold 'on'; press '-' or '+') > > >On my new HP49G I have a dark irritating shadow under every sign on > >the > >display. Though the LCD has a higher contrast it's worth readable than > >my old HP48G because of this shadow. I thought that HP has improved > >the displays. > > > >Any similar experiences? > > > > > > > >Georg. Unfortunately that doesn't help much. Georg. ==== > Try reducing the contrast (Press and hold 'on'; press '-' or '+') > > >On my new HP49G I have a dark irritating shadow under every sign on > >the > >display. Though the LCD has a higher contrast it's worth readable than > >my old HP48G because of this shadow. I thought that HP has improved > >the displays. > > > >Any similar experiences? > > > > > > > >Georg. Unfortunately that doesn't help much. Georg. ==== Taoist writings, formatted for Scribe. The writings of Chuang Tzu http://www.windmills.freeserve.co.uk/ChuangTzu/ ==== Yick. Asian philosophy is why the Chinese and Indians are still living in the same serfdom they've enjoyed for millennia. Rational thought produces extensible results. Tossing the ol' I Ching bones and repeating vaguely plausible aphorisms doesn't benefit anybody any more than a drag on a thai stick does. Only through progress can things improve, and progress requires systematic, methodical change for the better. Any system which does not allow for change is therefore an enemy of improvement. This includes virtually all non-western philosophy and ALL religions. This also explains why the West innovates while the pacific rim asian economies knock them off. Even the Japanese had to borrow Deming's principles to reach their current position (which is in decline due to traditional counterproductive practices, plus the goose laying the golden eggs [USA] is killing itself). > Taoist writings, formatted for Scribe. > > The writings of Chuang Tzu > http://www.windmills.freeserve.co.uk/ChuangTzu/ > ==== > Yick. Asian philosophy is why the Chinese and Indians are still living in > the same serfdom they've enjoyed for millennia Still they produce your HP49 much cheaper than anywhere else so don't complain too much. What is more I doubt Taoism is really a religion and whatever it is now is far FAR FAR (in even bigger) from what it used to be. So it can evolve and you can adapt it to whatever you want which is a good thing I guess. Arnaud ==== Quisiera que alguien me ayude, el problema es que le transferi un programa que era para HP48 a mi HP49G, y al momento de reiniciar para terminar la instalacion en el puerto 2 no entro mas, la he reseteado muchas veces y no responde, seq ueda en el mensaje de los autores de CAS, incluso la he dejado horas desconectada y lo mismo. Espero me puedan ayudar ==== Mant.8en presionada la tecla [DROP] mientras la calculadora se reinicializa. Despu.8es de varios intentos seguro que puedes acceder. Ve al puerto 2 y borra la librer.92a en cuesti.97n. Por cierto, el grupo en espa.96ol para las calculadoras hp es: es.comp.sistemas.hp48 Saludos > Quisiera que alguien me ayude, el problema es que le transferi un > programa que era para HP48 a mi HP49G, y al momento de reiniciar para > terminar la instalacion en el puerto 2 no entro mas, la he reseteado > muchas veces y no responde, seq ueda en el mensaje de los autores de > CAS, incluso la he dejado horas desconectada y lo mismo. > Espero me puedan ayudar ==== I am a surveyor and only use my 49g for running programs I use for work. these are written in RPN and work well for what I do. Is there any need for me to update to the latest ROM? I have ROM version 1.18. ==== I don't know where i have heard it but: Never change a running system!!! Martin > I am a surveyor and only use my 49g for running programs I use for work. > these are written in RPN and work well for what I do. Is there any need for > me to update to the latest ROM? I have ROM version 1.18. > > > > > ==== > I don't know where i have heard it but: > > Never change a running system!!! That may be the case for some system. But on the HP49, it's definitely worth upgrading to the latest ROM. ==== yes, I agree with you. Martin > > >>I don't know where i have heard it but: >> >>Never change a running system!!! >> > > That may be the case for some system. But on the HP49, it's definitely worth > upgrading to the latest ROM. > > > > > > ==== The 1.18 has more and bigger bugs than the 1.19-6 So, pick your choice...wait for a disaster or prevent it ! > I don't know where i have heard it but: > > Never change a running system!!! > > Martin > > > > I am a surveyor and only use my 49g for running programs I use for work. > > these are written in RPN and work well for what I do. Is there any need for > > me to update to the latest ROM? I have ROM version 1.18. ==== Ever since ROM 1.19-5 (now 1.19-6) the HP 49G OS has been perfect. That is: no major bugs and loaded with useful operations. For example I like the CAS help system very much. I recommend upgrading to the latest ROM anyway. > I am a surveyor and only use my 49g for running programs I use for work. > these are written in RPN and work well for what I do. Is there any need for > me to update to the latest ROM? I have ROM version 1.18. > > > > ==== I have a program that gives at the end a GROB. This GROB displayed on the screen and saved in XXX variable(for other time display). I used a temporary (TEMP) variable. I am wondering if it is must using this temperary variable: . . . @ here is the GROB 'TEMP' STO << TEMP ->LCD 3 FREEZE >> 'XXX' STO XXX >> Tal ==== Why don't you try it ! ;-) > > I have a program that gives at the end a GROB. > > This GROB displayed on the screen and saved in > XXX variable(for other time display). > > I used a temporary (TEMP) variable. > > I am wondering if it is must using this temperary > variable: > . > . > . @ here is the GROB > 'TEMP' STO > << TEMP ->LCD 3 FREEZE >> 'XXX' STO > XXX > >> > > Tal ==== I have a repeatable file result that stored in xxx variable. Does anyone could help to check if this file is exist and if so the result file name will be changed and will be stored as xxx1 and so on. Tal Reply-To: Veli-Pekka Nousiainen ==== Do you mean something like: << IF 'xxx' VTYPE -1 == THEN 'xxx' STO ELSE 0 -> k << k WHILE 'xxx SWAP + STR-> VTYPE -1 == REPEAT 'k' INCR END 'xxx k + STR-> STO >> END >> or, if you can give up on the initial 'xxx' and settle for 'xxx0' and with some trimming and experimenting: << -1 -> k << 0 DO DROP 'k' INCR 'xxx SWAP + STR-> DUP VTYPE -1 UNTIL # @ 'not equal' above [+/-] key END STO >> >> > > I have a repeatable file result that stored in xxx > variable. > > Does anyone could help to check if this file is > exist and if so the result file name will be changed > and will be stored as xxx1 and so on. > > Tal ==== -- Al. Andreou, ee4299 at ee.teiath.gr. | When everything else fails, http://nemesis.ee.teiath.gr/~ee4299/ | this won't work either. . . ==== I have a repeatable file result that stored in xxx variable. Does anyone could help to check if this file is exist and if so the result file name will be changed and will be stored as xxx1 and so on. Tal ==== > > I have a repeatable file result that stored in xxx > variable. > > Does anyone could help to check if this file is > exist and if so the result file name will be changed > and will be stored as xxx1 and so on. > > Tal Though I don't get exactly what a repeatable file is, you can always check if a variable with a given name exists by using: VARS nameOfYourFile POS where nameOfYourFile can be 'xxx' or anything else. For renaming variables, look at the command RENAME. Greetings, Nick. ==== I have one made in 1999 (Indonesia), poor quality, but already with a black on green screen. New HP48GX seem to have the black on white (or rather grey) screen from the HP49G. Does anyone know since when the HP48GX comes with the new screen? In which country are the newest HP48GX made? Still in Indonesia? Georg. ==== > > I have one made in 1999 (Indonesia), poor quality, > > True... the old Singapore units were great. I dropped mine and cracked the > screen 8..( a few years ago and now I have an older Indonesian unit, Also, > I recently picked up a new one (at a price lower than the others) with a the > back screen. > > >New HP48GX seem to have the black on white (or > > rather grey) screen from the HP49G. > > Yep. > > > Does anyone know since when the HP48GX comes with the new screen? > > I've seen them around for sevel months -- some places that still have the > greenish-blue screens are likely sitting on older stock that hasn't been > moving very quickly. > > >In which country are the newest HP48GX made? Still in Indonesia? > > Still Indonesia. > > The new units have nomenclature printed on the keys (and usually not > straight). My newer unit is slower than the older one and the alarm/beeper > is considerably less audible. The over all quality is reduced, but so is > the price (I would have gladly paid extra for better quality and lasting > value, and enjoyed buying the products from a firm that truly believed in > customer service -- the game does not work that way anymore). > > > Greg I still have a one question: Is the brand new screen really better readable? On the display of the HP49g there is a much bigger shadow underneath every sign compared to the old green screen. I could get a HP48gx made in Singapore 1995 second hand with the blue on green screen. Will there be a big difference to my Indonesian one (1999) with the black on green screen? Georg. ==== X > Is the brand new screen really better readable? On the display of the > HP49g there is a much bigger shadow underneath every sign compared to > the old green screen. > I could get a HP48gx made in Singapore 1995 second hand with the blue > on green screen. Will there be a big difference to my Indonesian one > (1999) with the black on green screen? X Are you sure your 49G is ok?! I have in front of me a 48SX (3109S00700) and a 48GX (3448S03303) plus a 49G (ID93101038) (my own, not the original though) a 49G (ID93100819) (long loan) a 49G (ID95000985) AND a 41CX (2426S42123) The best displays are 41CX (with a small shadow) and the 49G, where I can see the shadow when light comes from 45 up-front (above the calculator) AND when I look the LCD from the left side while the light is almost directly above the calculator, maybe slightly to the north the real pixels almost vanish and I can see only the shadow. BUT under normal use I never noticed that before, so I ask once again: Is your HP 49G ok? The 48SX looses contrast when tilting, but the 48GX seems to be ok. Adjusting the contrast with [ON] [ + ] / [ - ] helps somewhat. I don't know how much of this is just a viewers opinion different lightning conditions, contrast settings, etc. Comments? ==== chao ==== > > Yes it is a bug!!! > Look at the example! Some digits are missing! Oh no, and I was thinking that the continuation character (...) was meant here. Now that I tried it myself, I see. > I never noticed this before and only God knows how many > errors I have made trusting to the fact that I will always get > to see a window-full of numbers never missing a single digit !! Exactly the same with me. So this buggy thing is not to be trusted at all? Will someone tell us *all* things that we have to worry about using the HP49G, or do we have to find each and every bug and error ourselves and one at a time? Anyway, it seems that the HP49G is just a good chance for training the detectivistic abilities. What Jedi Knights are we talking about? I feel more and more like Columbo trying to brong some light to the ingredients of this calculatory crime ;-) > AUTSCH! This is painful but nice to know that there is Yes, and what after 1.19-7? Or does someone expect to get at last a clean system with 1.19-whatsoever? Greetings and thanks for notifying me about this bug. Nick. P.S. Patching a patchwork gives always a new even more complicated patchwork, which at some point breaks down without any particular reason. Long live the Hewlett-Patch 49G ;-) > > > > > No, it isn't a bug and actually this very same behavior occurs when > > editing any kind of object that contains lines longer than the > > display. Convert your long number to a string and try to edit it. > > You'll notice the same. The ellipsis ... (character 30 on the HP49G) > > is a help for you, for quickly noticing that some object extends past > > the right or left edge of the display. > > > > Greetings, > > Nick. > > > X > > > Example > > > 123456789012345678901234567890 > > > When you attempt to edit the number, in the first 'window' you see > > > 123456789012345678901... > > > pushing left shift right arrow twice gets you: > > > ...34567890123456789012... > > > and the next window: > > > ...4567890 etc ==== X > Oh no, and I was thinking that the continuation character (...) was > meant here. Now that I tried it myself, I see. > > > I never noticed this before and only God knows how many > > errors I have made trusting to the fact that I will always get > > to see a window-full of numbers never missing a single digit !! > > Exactly the same with me. So this buggy thing is not to be trusted at Yes, this was exactly my 1st reaction !! But now I take back some of the *bugging* here. To me, personally, ever since 1.19-5 was released there has been no big crashes, no major bugs and the overall functionality is excellent. even the smaller bugs that tend to crawl under the hood ;-) > all? Will someone tell us *all* things that we have to worry about > using the HP49G, or do we have to find each and every bug and error > ourselves and one at a time? X With the current state of the things (quite good) and remembering the fact that this is the only HP calculator with Flash ROM I wouldn't be so worried - as long as JYA kindly patches everything on request. Now we need just one more thing: Bernard to put units back into the EQW !!! Then this calculator would be perfect IMO. Veli-Pekka ==== > With the current state of the things (quite good) and remembering > the fact that this is the only HP calculator with Flash ROM > I wouldn't be so worried - as long as JYA kindly patches everything > on request. The job is indeed good but my only concern is that we can't go on for ever asking Jean Yves to do this and that for us. When sometime in future he gets tired of doing all this work for nada, what then? Will the HP49G have reached a state with few minor bugs, or will then new hidden bugs appear? > Now we need just one more thing: > Bernard to put units back into the EQW !!! No chance, I think. To me it seems that the professor doesn't like the units to be a major part of his CAS. But then again, instead of *1_m we can do *m (having nothing stored in m) > Then this calculator would be perfect IMO. Oh no! It will not be. There are many too many things to be corrected even in the CAS. If HP had only give those guys adequate support and time! But no, HP found better to put them out. What a loss! Greetings, Nick. ==== > 123456789012345678901234567890 > > Enter > > When you attempt to edit the number, in the first 'window' you see > > 123456789012345678901... > > pushing left shift right arrow twice gets you: > > ...34567890123456789012... > > no matter which font or view mode or editing that I have tried, I get the > same result, loosing one number at the beginning and end of each window. Some may argue that... Page Left/Right have been put there in order to view or find text easily. If you summarize Page Left/Right to: equivalent of pressing 22 (or 33) times left/right arrow. editor is the same as the HP49) I didn't have anything to refer to. That is, the HP48 doesn't have page left/right, and I do not know any other HP48 editor displaying the ... at the edge of the page, therefore hard to compare with anything existing. So I had to make a choice. If you edit a string made of 1234567890 many times First time you edit you will see: 123456789012345678901... , the ... hiding the 2 Pressing LS Right Arrow will put the cursor on the last 1. Pressing again: will display: ..34567890123456789012... As you can see, the previous 2 is *still* in the window. So you see it twice (even if it's covered). Depending on the number of characters to display, the page scroll will always be a move of 21 characters (or 32). this is by design choice. I had intensive review of this behaviour, and have always questioned myself wether I should change the number of characters to be shifted at a time. I believe the actual choice give the best compromise between speed and how useful it is, I only use the PageScroll to quickly find text, then I use the non-shifted arrow keys. In the nearly 7 years of existence of this text editor, I never had any complains about it :) ==== X > If you summarize Page Left/Right to: equivalent of pressing 22 (or 33) times > left/right arrow. X > Depending on the number of characters to display, the page scroll will > always be a move of 21 characters (or 32). > this is by design choice. > I had intensive review of this behaviour, and have always questioned myself > wether I should change the number of characters to be shifted at a time. I > believe the actual choice give the best compromise between speed and how > useful it is, I only use the PageScroll to quickly find text, then I use the > non-shifted arrow keys. X I still don't quite get it, sorry! Why not move 20/31 characters at a time AND at the first page 21/32 OR which I think might be even better: pad it with one |> store arrow at the beginning to equalize the length & to show that you are back at the beginning when moving to the left. The last page seems to be ok length with a space for cursor to the right. After using years (from 1973: HP-21), no - decades of HP calculatrice I have come to trust them, that is, I trust the engineers taken care of *everything* and I just use them without a care because they are Best ! This feature - cosmetic to some, thinking it only as a quickview (quite ok) - crucial to those (like me) who think it as a tool to write down long integers or hex digits - can be corrected very easily. Please?! Veli-Pekka ==== the > editor is the same as the HP49) I didn't have anything to refer to. That is, > the HP48 doesn't have page left/right, and I do not know any other HP48 > editor displaying the ... at the edge of the page, therefore hard to compare > with anything existing. > So I had to make a choice. > > I had intensive review of this behaviour, and have always questioned myself > wether I should change the number of characters to be shifted at a time. I > believe the actual choice give the best compromise between speed and how > useful it is, I only use the PageScroll to quickly find text, then I use the > non-shifted arrow keys. explain it. I can see how for page scrolling of text it is very useful. I thought the page scroll was older than that, (btw I dont have a 48... yet.) as I know that the HP 16 had a window function for long binary numbers, as going through binary numbers one by one, would be very confusing. (Which is why sane people convert them to hex :) ) However scrolling through long hex or decimal numbers can get confusing too. So currently what I do is I put page breaks after each 20 characters so I can see all the numbers on the screen at once, so I'll simply write a short program doing just that. > In the nearly 7 years of existence of this text editor, I never had any > complains about it :) lol. sorry to be the first. :) Blair. ==== > So currently what I do is I put page breaks after each 20 characters so I > can see all the numbers on the screen at once, so I'll simply write a short > program doing just that. I suggest the following program to do just that: 256 ATTACH << ->STR 20 R~SB 100000000 R~SB #9B003 FLASHEVAL DROP >> 'CUT20' STO Will do just what you want to do, but very fast .. ==== Perfect, Blair > I suggest the following program to do just that: > 256 ATTACH > << > ->STR 20 R~SB 100000000 R~SB > #9B003 FLASHEVAL DROP > >> > 'CUT20' STO > > Will do just what you want to do, but very fast .. > > > ==== what would i have to change (48SX) to make this work on an HP49G? (for external keyboard) TX Several people have mentioned the lack of support for Using the Power of Your HP-48sx from your PC in the cable/software package. In order to help bridge that gap - and mostly because I can't type long programs on the 48's keyboard - I have written a program that allows object entry from a terminal or it basically to see if I could do it. I hope that someone can get some good use out of it. Purpose: This program will allow a user to type objects on a terminal (or terminal emulator directly to the HP-48sx. Directions for use: Download the directory TERM. Setup your IOPAR variable for XON XOFF and for whatever other communication parameters you want to use. For example: for 9600 baud, no parity checking, and XON XOFF - your IOPAR variable could be { 9600 0 1 1 3 1 }. Note that the translate code, and checksum type are not used. Connect the 48sx to your terminal or PC and set up the communication parameters on both the 48 and PC. Make TERM the current directory, and execute TRM. You should see: Term Entry 1.0 on your terminal screen, as well as on the 48sx screen. Now you can type things on your terminal. Each character is sent to the 48. To tell the 48 that you are finished with the current object, type END on a line by itself. All the lines you have typed so far will be combined into an object and left on the stack. The backspace key (Control-H) will delete the last character you typed on a current line. This is the only form of editing allowed. To enter the symbols <<, >>, or -> you should type <<, >>, -> respectively. The program automatically takes care of converting the symbols. Since this program uses XMIT and SRECV for I/O, the translate code in IOPAR is not used. This means that <<, >>, and -> will be the only symbols converted. because I wanted to be able to use a typewriter keyboard to enter data into the 48. I have some ideas for enhancements such as better editing capabilities, two way data transfer, more control of the 48 from a terminal, etc. If I get the chance, I'll add some of these features. Also, and this is VERY IMPORTANT. This code expects the stack to be empty before it is run. I know this is not good calculator programming etiquette, but hey, I'll fix it in a later release. As you've probably guessed, I'm a software engineer :-) Feel free to do whatever you want to this code. Please let me know if you make any cool enhancements. The directory contains the following objects: TRM - Main entry point to this program. This saves the current flags, prints Term Entry 1.0 on the 48's display, and calls GETPROG. Flag 2 is set. Flag 2 does not mean anything. It was supposed to mean that the program should echo characters back to the terminal. The program always echos characters to the terminal, so flag 2 doesn't do anything. I should remove it, but I haven't yet. GETPROG - Get a program (or any object). This procedure opens I/O communications, clears the I/O buffer, and sends Term Entry 1.0 to the Terminal. Then it collects lines of text, until the user types END. Afterwards, it combines all the lines of text into a single object and leaves it on the stack. READLN - Reads a line of text. A line is a string of characters terminated with a carriage return. FIXLN - Convert <<, >>, -> into their 48sx representations everywhere they appear in a line. CNVR - Convert all the strings on the stack (lines) into one object. READCH - Read a single character from the terminal, and add it to the current string. If the character is a backspace, then erase one character from the string. If the character is a carriage return, then echo a carriage return, line feed sequence. DECL - Remove one character from the current line. LIN - Current line is stored here. When the line is terminated, it gets pushed as a string onto the stack. Jamie Odell MXO - Commercial Systems Division (CSY) Hewlett-Packard Co. jodell@hpda.hp.com ---------------------------------------------------------------------------- -- #FD90h 953 %%HP: T(3)A(D)F(.); DIR TRM << CLLCD Term Entry 1.0 1 DISP RCLF -> f << 2 SF @ Set terminal echo on (not used!). GETPROG f STOF >> >> GETPROG << OPENIO BUFLEN DROP SRECV DROP @ Clear the serial I/O buffer before doing anything DROP Term Entry 1.0 13 CHR + 10 CHR + XMIT @ Transmit message with CR/LF DROP DO READLN LIN @ Read in next line FIXLN @ Convert special characters to 48 characters UNTIL LIN END 13 CHR + SAME @ Loop until user types END on a line by itself 'LIN' STO END CNVRT @ Pack all lines into a single object >> READLN << DO READCH DUP @ Read characters until CR 'LIN' SWAP STO+ UNTIL 13 CHR SAME LIN 2 DISP END >> FIXLN << -> l << 1 CF @ Check for occurences of << >> -> DO l CASE l @ Loop until no more occurences are found, << POS @ converting each occurence on the way to the 48 THEN l @ representation. << POS << @ REPL @ More special characters can be added as needed. END l @ Just add a new case. >> POS @ Remember to replace the number of characters you THEN l @ remove with an identical number of characters. >> POS >> REPL END l -> POS THEN l -> POS -> REPL END 1 SF END 'l' STO UNTIL 1 FS? @ Flag 1 is a boolean used to tell us if we are done END l >> >> CNVRT << DROP DEPTH @ Drop the END string off the stack -> d << IF d 1 > @ Combine everything on the stack into one string THEN 2 d START + NEXT END OBJ-> @ Convert the string into an object >> >> READCH << DO @ Wait until the user types a key on the terminal UNTIL BUFLEN DROP 0 > END 1 SRECV @ Get one character at a time! DROP -> c << CASE c 13 @ If the character is a return then echo CR/LF CHR SAME THEN c 10 CHR + XMIT DROP c END c 8 @ If the character is a backspace, then erase the CHR SAME @ character from the terminal, and remove it from THEN c @ the current line. + c + XMIT DROP DECLN END c XMIT DROP c @ Otherwise, just echo the character. END >> >> DECLN << LIN 1 LIN SIZE 1 - SUB 'LIN' STO >> LIN END ==== > > what would i have to change (48SX) to make this work on an HP49G? > (for external keyboard) The big problems were that LIN is a command in the 49G, and that the 49G needs to have literal characters (not the ones that are part of a Kermit translation code) doubled up. I took the liberty of making a few other changes. It does work (except that you may find some unwanted CR characters within strings), sort of, and it's kind of cute, but terribly slow. a lot of improvements could be made, but I expect that something like this really ought to be written in SysRPL or assembly. Oh yeah, it looks like if you want a newline within a string, type it in as 010. Change all references to the calculator to read 49G. > Purpose: This program will allow a user to type objects on a terminal (or > terminal emulator directly to the HP-48sx. Well, this version needs a 49G, but slight changes would let it work on a 48. I believe that the only change needed would be to use something other than SREPL in the FIXLN program. > Directions for use: Download the directory TERM. Setup your IOPAR variable > for XON XOFF and for whatever other communication parameters you want to use. > For example: for 9600 baud, no parity checking, and XON XOFF - your IOPAR > variable could be { 9600 0 1 1 3 1 }. Note that the translate code, and > checksum type are not used. XON/XOFF doesn't work on a 49G, just don't type too fast. The buffer can hold 255 characters. > Connect the 48sx to your terminal or PC and set up the communication > parameters on both the 48 and PC. Make TERM the current directory, and execute > TRM. You should see: > Term Entry 1.0 I changed it to Term Entry JMP.1. > on your terminal screen, as well as on the 48sx screen. > > Now you can type things on your terminal. Each character is sent to the 48. > To tell the 48 that you are finished with the current object, type END on a > line by itself. > > All the lines you have typed so far will be combined into an object and left > on the stack. > > The backspace key (Control-H) will delete the last character you typed on a > current line. This is the only form of editing allowed. > > To enter the symbols <<, >>, or -> you should type <<, >>, -> > respectively. The program automatically takes care of converting the symbols. -> was translated to a right arrow followed by a space. I eliminated that space. But I left the space next to the program delimiters. > Since this program uses XMIT and SRECV for I/O, the translate code in IOPAR is > not used. This means that <<, >>, and -> will be the only symbols > converted. For the translations that I prefer, replace the FIXLN program with the following, but observe the usual dire warnings about being sure of the argument for SYSEVAL: ----------------------------------------------------------------------- %%HP: T(3)A(R)F(.); @ 49G version of FIXLN @ # A192h, 63.5 bytes << DUP IF @ Make sure we have a string. TYPE 2. =/ THEN 514. DOERR END # 2F34Dh SYSEVAL @ KINVISLF for 49G DROP >> ----------------------------------------------------------------------- Or for a 48, use this instead: ----------------------------------------------------------------------- %%HP: T(3)A(R)F(.); @ 48 series version of FIXLN. @ # E3AAh, 63.5 bytes << DUP IF @ Make sure we have a string. TYPE 2. =/ THEN 514. DOERR END #3016Bh SYSEVAL @ KINVISLF for 48 series. DROP >> ----------------------------------------------------------------------- The above will do the same translation as would be done to a Kermit ASCII transfer, and the translation mode (I prefer 3) in IOPAR is respected. The argument checking might not be really necessary, but with a rough program like this, I'd prefer to err on the side of caution. > because I wanted to be able to use a typewriter keyboard to enter data into > the 48. I have some ideas for enhancements such as better editing > capabilities, two way data transfer, more control of the 48 from a terminal, > etc. If I get the chance, I'll add some of these features. > > Also, and this is VERY IMPORTANT. This code expects the stack to be empty > before it is run. I know this is not good calculator programming etiquette, > but hey, I'll fix it in a later release. As you've probably guessed, I'm a > software engineer :-) A trivial fix, no need to have an empty stack now. But note that I stashed the old stack in a local variable, which means that it will be lost if the program errors out. Change that to a global variable if the old stack contents are really important to you. > Feel free to do whatever you want to this code. Please let me know if you > make any cool enhancements. > > The directory contains the following objects: > > TRM - Main entry point to this program. This saves the current flags, prints > Term Entry 1.0 on the 48's display, and calls GETPROG. Flag 2 is set. Flag > 2 does not mean anything. It was supposed to mean that the program should > echo characters back to the terminal. The program always echos characters to > the terminal, so flag 2 doesn't do anything. I should remove it, but I > haven't yet. > > GETPROG - Get a program (or any object). This procedure opens I/O > communications, clears the I/O buffer, and sends Term Entry 1.0 to the > Terminal. Then it collects lines of text, until the user types END. > Afterwards, it combines all the lines of text into a single object and leaves > it on the stack. > > READLN - Reads a line of text. A line is a string of characters terminated > with a carriage return. > > FIXLN - Convert <<, >>, -> into their 48sx representations everywhere they > appear in a line. > > CNVR - Convert all the strings on the stack (lines) into one object. > > READCH - Read a single character from the terminal, and add it to the current > string. If the character is a backspace, then erase one character from the > string. If the character is a carriage return, then echo a carriage return, > line feed sequence. > > DECL - Remove one character from the current line. > > LIN - Current line is stored here. When the line is terminated, it gets > pushed as a string onto the stack. Changed the above to CLIN to avoid conflict with 49G's LIN command. > Jamie Odell > MXO - Commercial Systems Division (CSY) > Hewlett-Packard Co. > jodell@hpda.hp.com My version follows: ----------------------------------------------------------------------- %%HP: T(3)A(R)F(.); @ Term Entry for 49G @ # 7A73h, 757. Bytes DIR TRM @ Main program. << CLLCD Term Entry JMP.1 1. DISP DEPTH ->LIST -> s @ Save the stack. << GETPROG @ Get an object from I/O. CLOSEIO s LIST-> @ Restore the old stack. 1. + ROLL @ Move new object back to level 1. >> >> GETPROG @ Gets an object from I/O. << 'CLIN' STO @ Start with current line empty. OPENIO @ Clear the I/O buffer. BUFLEN DROP SRECV DROP2 Term Entry JMP.1010013 @ Transmit message with CRLF. XMIT DROP DO READLN @ Read in next line. CLIN @ Put the line on the stack. FIXLN @ Translate characters. UNTIL CLIN @ Loop until user types END END013 SAME @ on a line by itself. 'CLIN' STO @ Store an empty string. END CNVRT @ Pack all lines into a single object >> READLN @ Read in a line. << DO @ Read characters one at READCH DUP @ a time until CR. 'CLIN' SWAP STO+ UNTIL 013 SAME CLIN 2. DISP @ Display the line. END >> FIXLN @ Translate special characters. << @ Also see alternate versions above. << << SREPL DROP @ Note that SREPL is 49G only. >> >> SREPL DROP -> -> SREPL DROP >> CNVRT << DROP @ Drop the END from the stack. @ Combine the stack into one string. DEPTH -> d << IF d 1. > THEN 2. d START + NEXT END STR-> @ Convert the string to >> @ whatever object. >> READCH @ Read characters one at a time << DO @ Wait for a character. UNTIL BUFLEN DROP 0. > END 1. SRECV DROP -> c @ Get the character. << CASE c 013 SAME @ If it's a CR, then transmit CRLF. THEN 013010 XMIT DROP 013 END c 008 SAME @ If it's a backspace, THEN 008 008 XMIT DROP @ Erase from the terminal screen DECLN @ and the calculator. END @ Otherwise just c XMIT DROP @ transmit the character. c END >> >> DECLN @ Remove the last character << @ from the current line. CLIN 1. OVER SIZE 1. - SUB 'CLIN' STO >> CLIN @ Variable to hold current line. END ------------------------------------------------------------------------ -- James ==== THANKs a lot ! nice, clean and useful. you should send it to HPCALC. i installed it from the PC without effort :) ________________________________________________________________________ ==== > THANKs a lot ! > > nice, clean and useful. I'm glad that you found it useful, but most of the credit goes to Jamie Odell. I just fixed up the imcompatibilities with the 49G and made what I considered to be some rather modest improvements. I felt that it left a bit to be desired, but considering that it was posted in July of 1990, well, all HP 48 programs were written by newbies at the time. But I've made more improvements, and although my new version is still rather rudimentary, I'm happy with it. > you should send it to HPCALC. Hmm, but I'd have to write documentation for it then. But the source code is heavily commented so it shouldn't be all that hard. As if hpcalc.org really needs yet another terminal program.... > i installed it from the PC without effort :) Good, I expected that it should be just a matter of cutting and pasting to its own file, and then downloading to the calculator. By the way, I looked at some of my other programs, and a much simpler method of checking that there's a valid argument for that KINVISLF SYSEVAL is to just use + just before it; if there's no argument, then the + will error out, and whatever object was available for an argument will be changed to a character string if it's not already one. -- James ==== > > what would i have to change (48SX) to make this work on an HP49G? > (for external keyboard) [program snipped] By the look of it, I don't see any reason why this program shouldn't work directly on the HP49 ==== thanks for your reply does LIN work the same in the HP48sx and HP49G ? > > > > > what would i have to change (48SX) to make this work on an HP49G? > > (for external keyboard) > [program snipped] > > By the look of it, I don't see any reason why this program shouldn't work > directly on the HP49 > ==== Running rom 1.19-6 if I input the summation notation k=0 to infinity 1/(k!) I get ? yet, according to wolfram's math website, it should output e http://mathworld.wolfram.com/e.html ==== > Running rom 1.19-6 > > if I input the summation notation k=0 to infinity 1/(k!) I get ? > yet, according to wolfram's math website, it should output e > http://mathworld.wolfram.com/e.html ==== > > Sum Calculates the value of a finite series. On the other hand, the summation of 'e^x' from x=0 to minus infinity yields '-1/(e^1-1)'. Summation works fine with infinity as limits, but only for certain summands. ==== > Great to hear from you! How long til you're back in civilisation? nov 2003. See everybody around ;-) . . . no need to respond. . . TW ==== Oh-no! I want to have yet another Assigned key, but the key that I use is full, that is, even using Wolfgang's KeyMan I managed to overload one key and several others are near to be filled, too. Therefore I suggest using a new technique in the forthcoming 1,19.7: double-shift ! What does it mean? First of all there is a change in the way that the shift keys and indicators work: You can have them both on at the same time! Canceling happens just by pressing the appropriate shift key. Holding down the second shift key would bring up the old shift&hold feature - resulting a .01 added to the keyplane. The keyplanes would be 7 for normal left&right shift and 8 for the alpha mode left&right shift. The order of left&right or right&left wouldn't matter. Comments? Veli-Pekka ==== and finally... Veli-Pekka Nousiainen schrieb im Newsbeitrag > Oh-no! I want to have yet another Assigned key, > but the key that I use is full, that is, even using Wolfgang's > KeyMan I managed to overload one key and several others > are near to be filled, too. > Do you want to have all functions on *one* key? Maybe you should define all keys around your favourite key as shift keys... > > Comments? > > Veli-Pekka > Raymond (still not using *any* key assignments on the HP-48) ==== After assigning my favorite TIME functions on [ 9 ] and most CONVERsions on [ 6 ] I found out that I can't have both MATRICES and STATistics on key [ 5 ] so I used [EQW] eg . MTRW for the matrix stuff. [ 1 ] has some CoMPLeX operations on it, while [ 3 ] is filled with binary operators. [SIN] [COS] [TAN] has the hyberbolics assigned, there I have free space, but relevant to assign to. [SPC] has Angle Measure and Coord. System togglers on it. I have managed to assign some easy-to-remember programs to [APPS], [VAR], [TOOLS], and [CAT] but I'm slowly running out of memory to remember these so I thought that I would use shift&hold just to show what assignments I have on that key and therefore I would be very pleased for the extra levels of 7 and 8 as previously explained, if the new key assignment system could handle it via a simple modification (including the new annuciator handling) > and finally... > > > Veli-Pekka Nousiainen schrieb im Newsbeitrag > > Oh-no! I want to have yet another Assigned key, > > but the key that I use is full, that is, even using Wolfgang's > > KeyMan I managed to overload one key and several others > > are near to be filled, too. > > > Do you want to have all functions on *one* key? > Maybe you should define all keys around your favourite key as shift keys... > > > > > > Comments? > > > > Veli-Pekka > > > > Raymond (still not using *any* key assignments on the HP-48) > > ==== > but I'm slowly running out of memory to remember these > so I thought that I would use shift&hold just to show I don't have anyway near that much key assignments butalready have problem remembering them so the way I go about it is by assigning drop down lists of commands which bring menu or other drop down lists to long held keys. This tends to produce big assignements but I put them in a library which I can store in port memeory and I believe it is good. You don't remember all your key assignements and you want some more. How will you do. Maybe you could glue two HPs back to back that would double your key assignements Arnaud ==== The HP-41 CX had a key CAT. Maybe someone wants to write something similar. Or does Keyman from Wolfgang already have this feature? If yes, why this thread? However, I'm still wondering that one needs so many key assignments that he/she doesn't remember them. On the HP-48, I have a special CST menu with one and a half pages, and all utilities I need only a few key strokes away. On the HP-41, I had about ten key assignments. Ok, the 41 has the feature of NULLifying a key if held longer (like SpeedMiner;-) But I only made key ASNs for functions I needed very often. And believe me, I used the HP-41 very excessively. Raymond > > > but I'm slowly running out of memory to remember these > > so I thought that I would use shift&hold just to show > > I don't have anyway near that much key assignments butalready have > problem remembering them so the way I go about it is by assigning drop > down lists of commands which bring menu or other drop down lists to > long held keys. > This tends to produce big assignements but I put them in a library > which I can store in port memeory and I believe it is good. > You don't remember all your key assignements and you want some more. > How will you do. > Maybe you could glue two HPs back to back that would double your key > assignements > > Arnaud ==== > The HP-41 CX had a key CAT. So does the HP49.. And many people complain that it's a waste :) ==== Veli-Pekka Nousiainen schrieb im Newsbeitrag > Oh-no! I want to have yet another Assigned key, > but the key that I use is full, that is, even using Wolfgang's > KeyMan I managed to overload one key and several others > are near to be filled, too. Right-Shift-Hold-Left-Shift-Hold-Alpha-Hold-Key??? ;-) No, not realy? ..Heiko ==== A good place to buy HP Calculators (especially the HP 48GX) and accessories for them is Calcpro website www.calcpro.com. They are in Corvallis, OR, USA. I have bought several calculators (including an HP 48GX) from them and have had good dealings with its manager, Paul Nelson. Paul sells to overseas countries such as in Europe, Australia, etc. Good luck! ==== wingman schrieb im Newsbeitrag > I want to buy a hp48gx. Does anyone know a shop in Germany where I can > get one for less than 150 Euro? Do you need the expandability of the GX? If not you will get an 48G+ for 69 Euro at www.abyte.de Holger ==== > I had a HP49 and liked it so much that I bought a HP48. > > I've never used the 49 since. > > Roland I had a BMW 48G (A 48G upgraded in Germany to 256K, then loaded with metakernel and other stuff), but it was stolen between Milan and Amsterdam. So I bought a 49. It is the greatest calculator yet made. I would not go back to the 48. While the 48 keyboard is better, the 49 allows faster data entry for me (once you make a change to keytime) Since I bought it recently, I have the advantage of keyboard and screen fixes. I found the things I was expecting to hate (keyboard and screen) much less annoying than I thought. Everything else is tremendous, particular after I learned about the arrow key SWAP shortcut. People at my office say it looks much better, if that matters. If this is the end for HP calculators, they went out on a high. ==== X > tremendous, particular after I learned about the arrow key SWAP > shortcut. People at my office say it looks much better, if that X but...it has always had that SWAP shortcut... I'm just trying it with my HP 48SX: it works! ==== price. ==== Hung ==== A scanned-in copy is on a CD that you can purchase at http://www.hpmuseum.org/. For the actual book, you could check the classified ads at the same site, and there's always eBay. -- James ==== Hung > > A scanned-in copy is on a CD that you can purchase at > http://www.hpmuseum.org/. For the actual book, you could check the > classified ads at the same site, and there's always eBay. > > > -- > James > ==== > Does anyone know where I can get program developement for 48 series > calculators. There use to be a HP package however I have been unable to find > it. > Warren Knorr > Wknorr@aol.com Just wait for the new HP49 SDK that will be able to compile and debug HP48 code. Now writing GUI (and Input Form boxes) will be dead easy (just like on the HP49). Great tool, much more stable than the previous version.. It rocks. Should be available soon ==== First of all I would like to thank you people here help me to understand how to transfer program into my calculator. But, I got new question arise. Well I hope everyone forget my stupid questions. 1. I copy those file into my calculator, how can I put the program into a direcry into my calculator. 2. I donwload one of this math program for DEQ, it got set, and library file, how can I get it run, cause I use soft key to push the one look call 'Diff file it didn't run. I hope someone here can help me on this. tsli ==== http://www.hpcalc.org/install.php > > First of all I would like to thank you people here help me to > understand how to transfer program into my calculator. But, I got new > question arise. Well I hope everyone forget my stupid questions. > > 1. I copy those file into my calculator, how can I put the program > into a direcry into my calculator. 'My.File' DUP RCL SWAP brings the contents of 'My.File' into stack level 2 and the name in level 1, ready for STOrage. 'UTILS' CRDIR creates a directory called 'UTILS' UTILS (without the quotas) goes to that directory STO Now you can go UPDIR to PURGE the 'My.File' > 2. I donwload one of this math program for DEQ, it got set, and > library file, how can I get it run, cause I use soft key to push the > one look call 'Diff file it didn't run. If it's a library, it should be store in a port. ReCalL the library to the stack 0 STO should STOre it into the internal port 0. If you have any memory cards installed you may wish to use port 1 or port2... > I hope someone here can help me on this. > > tsli Veli-Pekka ==== my PC before downloading. I have tried to find a ROM on HPcalc.org but I cannot find anything but a 39G. Could somepone please point me in the right direction? GN ==== > my PC before downloading. I have tried to find a ROM on HPcalc.org but I > cannot find anything but a 39G. Could somepone please point me in the right > direction? In http://www.hpcalc.org/hp49/pc/rom/ you will find the latest (1.19-6) in a 1.2MB (almost) zip file that contains the ROM for the calculator and the ROM for the emulator. -- Al. Andreou, ee4299 at ee.teiath.gr. | When everything else fails, http://nemesis.ee.teiath.gr/~ee4299/ | this won't work either. . . ==== http://www.epita.fr/~avenar_j/hp/49.html Have you learned to use Google to search newsgroups? on > my PC before downloading. I have tried to find a ROM on HPcalc.org but I > cannot find anything but a 39G. Could somepone please point me in the right direction? ==== Love Bytes (or sex and the single computer) They say that computers do not think like human beings. But do they _feel_ like humans? A certain computer, to which (to whom?) we have guaranteed absolute anonymity, has supplied us with this piece of computer-style erotic-gossip that is going the rounds of the sophisticated number crunchers in the web. If you have an under-age computer around, on no account let it see this - it might be totally diskusted (!) and even corrupt its little CPU forever! Micro was a real-time operator and protocol made it easy for him to inter- face with numerous input/output de- vices, even if it meant time-sharing. One evening he arrived home just as the sun was crashing, and had parked his Merced in the main drive (he had missed the serial bus that morning), when he noticed an elegant piece of liveware admiring the daisy wheels in his garden. He thought to himself, She looks user-friendly. I'll see if she'd like an update tonight. Mini was her name, and she was delightfully engineered with eyes like Ada and a Prime mainframe archi- tecture that set Micro's peripherals networking all over the place. (to be continued...) ==== after a long unused time I wanted to reactivate my HP41C. But it does not work. When I set in the batteries, it makes strange sounds. These change when I press some keys (i.e. R/C). Pressing ON and some other keys results in a beep. The display shows nothing. Do anyone of you have an idea what could be wrong with the calc? Contacts and everything else look like new. Holger ==== > > after a long unused time I wanted to reactivate my HP41C. But it does not > work. > > When I set in the batteries, it makes strange sounds. These change when I > press some keys (i.e. R/C). Pressing ON and some other keys results in a > beep. The display shows nothing. > > Do anyone of you have an idea what could be wrong with the calc? Contacts > and everything else look like new. Also try the forum at http://www.hpmuseum.org/. Try a search of the forum archives before you ask. -- James ==== James M. Prange schrieb im Newsbeitrag > Also try the forum at http://www.hpmuseum.org/. Try a search of the > forum archives before you ask. have the idea to ask in the forum. Holger ==== It could be static that is causing the malfunction (but I strongly doubt this). Try removing the batteries and place a short circuit across the outer two contacts. Also remove all application pacs, card readers etc. I don't think that shorting these terminals will cause any damage, but if you are worried, there is a lot of info, including circuit diagrams at www.hp41.org Good luck Andre Claassens > > after a long unused time I wanted to reactivate my HP41C. But it does not > work. > > When I set in the batteries, it makes strange sounds. These change when I > press some keys (i.e. R/C). Pressing ON and some other keys results in a > beep. The display shows nothing. > > Do anyone of you have an idea what could be wrong with the calc? Contacts > and everything else look like new. ==== Lindi Claassens schrieb im Newsbeitrag > It could be static that is causing the malfunction (but I strongly doubt > this). Try removing the batteries and place a short circuit across the outer > two contacts. Also remove all application pacs, card readers etc. I don't > think that shorting these terminals will cause any damage, but if you are > worried, there is a lot of info, including circuit diagrams at www.hp41.org Shortcutting didn't help. But I found the service manual at that side. Maybe It will help me! Holger ==== Working a bit with my calc I find that the SOLVE command behavior, as pointed out several times before, it a bit confusing. My current question it's on the input/output schema I'm trying to usi it from a program but I don't know what to spect as results. It's there any doc or threat that clearly explain this command's behavior? When and how it answer periodict anwers and so? My problem is that it answer periodic ones with n1, n2, ... index but I don't know how and when more over Is there any way to get the first solution? Even numericaly I was unable to get it! I needed to user MSLV! My example is EXP(18*X)+2 'X' -> SOLVE -> X=((2*i*n1+i)*PI+LN(2))/18 in exact comples mode. But if EXP(18*n1)+2 'n1' -> SOLVE -> n1=((-(i*PI)-LN(2))/(2*i*PI-18) Why that different behavior? This last one doesn't looks like a case of the first series for a natural n1 which is what I spect n1 be so Whats n1? I'm looking in all my PDFs and searchin the group but I'm still doesnt found an explanation so if it's there, please excuse me and just point me there! TIA Luis ====