newRPL - build 1255 released! [updated to 1299]
12-15-2017, 10:15 PM (This post was last modified: 10-23-2019 02:17 PM by Claudio L..)
Post: #1
 Claudio L. Senior Member Posts: 1,840 Joined: Dec 2013
newRPL - build 1255 released! [updated to 1299]
Quick links section (this will remain on top, see below for other info):

Latest development ROMS can be found following these links for the 50g, the 39gs /39g+ and the 40gs

Android build is here:
newRPL for Android APK package

Currently they are at build 1299, while the official release remains at 1255.

Official release files for the different targets can be downloaded directly from Sourceforge.
** Important **: First installation of newRPL requires the original HP connectivity kit (via USB) or the use of an SD card. Please read step-by-step installation instructions. Once installed, future updates can be done through newRPL Desktop.
** Important too **: Starting with the build 1001 release, the PC simulator is also the connectivity kit (not just a demo), so go ahead and install it too!. Mac and Linux users have to build from sources but it's perfectly compatible.
** MORE Important **: Always make a backup of your RAM using either SDARCHIVE or USBARCHIVE before upgrading. Once you upgrade your firmware you MUST upgrade the Desktop version too since USB protocols are completely new. Starting build 1255, the new newRPL Desktop cannot communicate with a calculator running old versions of newRPL and vice versa.

Also, please head over to the newRPL Official Wiki for installation instructions and general useful information.

Release notes (build 1299):

The main focus on this update was the unit system:
* All units values affected by the 2019 SI Revision were updated (1_eV, 1_Fdy, 1_u)
1_bit and 1_B (byte), with all their base 10 and base 2 multiples
1_katal and 1_U (unit of catalytic activity and enzyme unit respectively, go Google this, I had no idea this existed...)
1_ksi (kilopounds per square inch)
1_Da (dalton)
1_ydUS
1_annum (Julian year, normally symbol 'a' but was taken already)
* Angle objects auto-convert to angular units when operated with any other units.

Many small bugs resolved:
* Unbalanced parentheses when functions and units are used together
* MAPLIST→ crashes the calc when there's recursion
* Approximate numbers in different bases
* UPURGE and parallel list processing
* RE applied to a real number returns strange object
* Three quirks in →Q
* Micro (μ) prefix is inaccessible from keyboard (now Alpha-LS-M)
* MIN & MAX misbehavior with symbolic arguments
* Units menu doesn't show units when in ENG mode.
* No type checking in ->#h and co.
* ->#o disappeared from the BASE
* BDIV doesn't handle division by zero
* Quirks of the BASE menu
* Bad number length and FIX display mode
* Can't create "\" literal (claudio) - resolved.
* STO leaves garbage on the stack when doing list processing.

Release notes (build 1282):

This is mainly a hotfix release, it fixes a regression introduced in 1280 affecting expressions with a multiplication by 1.

Release notes (build 1280):

**** All users of this release please update to a newer version ****
This is mainly a bugfix release, the following bugs and improvements were fixed:
* Contrast setting is not persistent after crash
* Conversion of angles to numbers was completely revisited, see the wiki for new treatment of angles.
* '+/-' key malfunctions when editing expressions
* Inconsistency in SDSETPART argument, also added SDGETPART command
* SIGN of a complex number leaves argument on the stack
* Erratic behavior of undirected infinite ∞̅
* SIGN and ABS give wrong results with complex numbers in polar form
* Coercion of complex values into reals was made more consistent .
* →Q doesn't work with parallel list processing
* (TVM) Solving for I%YR, N or PYR when other variables are undefined leaves the stack dirty besides erroring out as expected
* Algebraic rule matching longest numerical expression fails
* RCLF dumps corrupted flags
* Move cursor to exact place where the syntax error is
* Convert flags internal storage format to BINDATA objects
* Corrupted DIRobject prevented upgrade of newRPL and locks calc when evaluated
* Directory object are indistinguishable on stack
* ROOT can't find a solution if the guesstimates don't bracket exactly one solution
* Calc hangs when solving equation
* Unary plus or minus have precedence over multiplication or division AUTOSIMPLIFY rules

* Support for PACKDIR objects, and editable form of directory trees

Release notes (build 1261):

* Thumb mode was enabled for 39gs target so it fits in the smaller flash.
* New command BNEG honors the word size while changing sign.
* Bugfixes: Operator not equal not compiling. Direct conversion between POLAR and SPHER is not possible. Program with DIGITS, PRIME and LIST manipulation crashs the HP50g but not the simulator. STR-> error. Crash during EVALuation of symbolic.

Release notes (build 1255):

* Completely new USB protocols, should work more reliably on all targets
* Now newRPL Desktop can flash firmware directly through the USB port to the 50g, 39gs, and 40gs targets.
* Optimized newRPL Desktop and android ports to reduce CPU usage (and battery drain).
* New constants library, adds pi, e, i and j for now (i and j are both defined as (0,1), so no quaternions)
* New "case" list type. Prepending a 'c' before the list it becomes a case-list. It only differs from regular lists in how overloaded operators work. Case-lists elements are considered alternative values of the same result. A variable X that contains c{ 1 2 }, means that X could take either the value of 1 or 2. For example, adding { 1 2 } { 3 4 } + would normally result in { 4 6 } (addition element-by-element). with case-lists, c{ 1 2 } c{ 3 4 } + results in c{ 4 5 5 6 }, which represents all possible combinations adding A+B where A could be 1 or 2 and B could be 3 or 4. Therefore A+B can be either: (1+3) (1+4) (2+3) or (2+4). Now the big question: WHY??? so that functions can return alternative results. For example √4 could return c{ -2 2 }, and if that's embedded within a larger expression, computations will carry on normally.
* New command ALLROOTS: Doing '√4+3' ALLROOTS returns c{ 5 1 } after ->NUM, as expected.
* Many, many bugfixes all over the place.

Release notes (build 1157):

* New Rules engine
* Operator | (given that) was added to properly parse rules and expressions. Rules engine doesn't use it yet.
* Wiki was updated with more info on rules and attributes (the symbolics section)
* Moved the rules symbol in the keyboard: Now LS-Enter does :-> (instead of ANS), and LS-Hold-Enter does the | operator.

Release notes (build 1127):

* Mapped LS-2 key to factorial (used to be DEF on the 50g)
* Improved backup file format.
* Improved cleanup of parallel processing with lists

Release notes (build 1111):

* Fixed rare but critical bug that affected results under special conditions.
* Added flag -88 "responsive mode"

Release notes (build 1105):

* Improved stability of multiple equation solver.
* Added command to control the editor from a program (see wiki for details, look for EDxxx commands)
* Improved the System/Math/Base menu to simplify entering and converting numbers between bases

Release notes (build 1099):

* Added command MSOLVE and ROOT.

Release notes (build 1089):

* Fixed compiler regression in expression with multiple parenthesis levels.

Release notes (build 1088):

* Added command NUMINT (numerical integration)
* Added internal generic user-function evaluator to use in numeric solvers.
* Added equation operator (=) to symbolics
* Added lists support within symbolics
* Improved behavior of EVAL1
* Fixed compiler bug in locals optimization
* Added parallel processing support to Bxxx commands (for numbers in other bases)
* Implemented framework for auto-evaluation of variables

Release notes (build 1052):

* Fixed LIBCLEAR to work even when library doesn't exist
* Added autocomplete of user library commands

Release notes (build 1046):

* Library objects are now implemented. (Please see the Wiki for articles on how to create user libraries in RPL).
* Lib menu is now available (RS-2 and also from the main menu)
Bugfixes:
* SDRESTORE/USBRESTORE use after free bug fixed
* Fixed possible (but very rare) bug while formatting numbers.
* Fixed string comparison bug looking past the end of string.
* Fixed compiler errors
* Fixed regression in autocomplete
* Fixed bug: On-A-C/Exit cannot stop WAIT or any command that uses the outer loop.
* Fixes on operator SAME and cross-object comparisons
* Fixed POS with lists.
* Fixed compiler bug that put double parenthesis on symbolic functions.
* Fixed bug in RDZ.

Also unreleased changes to the simulator:
* Enable grid pixel display
* Enable mouse clicks on the keyboard image
* Fixed RPL thread not stopped before closing simulator (under rare conditions)

Release notes (build 1016):

* Indexing of lists and matrices in symbolics, doing A(1,1) within a symbolic expression will GET elements if A is a list or a matrix.
* Indexing of matrices and lists in STO now works, so
1234 'A(1)' STO

will replace the first element in a vector or list.

* New and improved FUNCEVAL operator takes care of the internals of 'X(...)' in symbolics.
* A bug was found in the error handling of certain list operations. This is very likely responsible for the disabled undo feature reported. It's fixed.
* Stack not cleaned up during SORT errors, fixed.
* Improved error display shows name of missing variables.
* A new BINDATA object type was added to replace HEX strings as generic containers.

MKBINDATA: Creates a binary storage object (just provide a size in bytes)
BINGETB/BINPUTB: PUT/GET bytes inside of a BINDATA object.
BINGETW/BINPUTW: PUT/GET 32-bit words inside of a BINDATA object
BINGETOBJ/BINPUTOBJ: Store/Extract a binary copy of an RPL object inside a BINDATA.
BINMOVB/BINMOVW: Copy bytes or 32-bit words from one BINDATA to another BINDATA.

Release notes (build 1001):

* In this release, a lot of matrix related commands were implemented. Check with the detailed project status to see which commands are ready to use.
* USB communications are fully supported on all 4 targets.

USB comms are implemented as an HID device, therefore it doesn't need device drivers on any operating system. It's mostly self-explanatory, but in the next few days a more detailed description will go in the wiki.

The concept is very simple:
* Plug the cables, then on the host use the menu to show the connection panel, click the massively large button to select a device. If everything is connected well, you should see your calculator on the list. Select one of the calcs from the list (I only had one to test, but should be fine with many) and hit OK. The connected indicator will show on the simulated calc. At this point, the big button will indicate which calculator it's connected to. If the calc disconnects for any reason, the button will show "Click to reconnect". You are all set.
* You can send an object that's on the stack with USBSEND, returns 1 if successful, 0 if not.
* The other calc will receive the object and automatically do XEQ on it. This means if you send a program it will run automatically, other objects are simply left on the stack. Programs run automatically when the calculator is idle, so if it's running a program it will wait until it finishes to run the received object.
* You can manually receive an object (without executing it) with USBRECV. Just put a time in seconds on the stack (it waits up to that time for an object to come through the wire, can be canceled pressing ON). It returns on level 1 the number 1 if successful, 0 if not. If successful, level 2 has the object received.
* If you are not happy with automatic execution of remote commands, it can be disabled by setting flag -47. An "RX" indicator will show on the status area when there's an object waiting to be received. Use USBRECV to get the object. Until the object is processed, the device can't receive any new objects (any attempt at USBSEND from the other end will fail).

And that's all there is to it. Very simple, yet very powerful, and while testing this I had the most fun in a long time!
A few examples of what you can do:
Simple ping-pong program:
Code:
 «   @@ WRITE A PROGRAM THAT SENDS PONG BACK TO US   «     "PING"     "PONG"    DO     DUP    UNTIL USBSEND END   DROP    »   @@ AND SEND THE PROGRAM TO THE OTHER SIDE   DO     DUP    UNTIL USBSEND END   DROP  »

Remote RCL:
Code:
 «   USBSEND DROP @@ SEND THE VARIABLE NAME TO THE OTHER SIDE  @@ NOW CREATE A PROGRAM TO RCL AND SEND BACK THE RESULT   «     RCL      DO       DUP      UNTIL USBSEND END     DROP    »   @@ AND SEND THE PROGRAM TO BE AUTO-EXECUTED OVER THERE   DO     DUP    UNTIL USBSEND END   DROP   @@ WAIT A COUPLE OF SECONDS FOR THE CONTENTS TO ARRIVE   2 USBRECV DROP  »

Similarly, a remote STO command:
Code:
 «   2 →LIST USBSEND DROP  @@ MAKE A LIST WITH VALUE AND VARIABLE NAME AND SEND IT   @@ WRITE A PROGRAM TO EXPLODE THE LIST AND DO 'STO' IN THE OTHER CALC   «     OBJ→ DROP STO    »   @@ AND SEND IT!   DO     DUP    UNTIL USBSEND END   DROP  »

And there's a couple more commands that are extremely useful, especially for the 39/40 series where the SD card is not available:
USBARCHIVE/USBRESTORE will send a backup file over the USB wire. The format is 100% identical and compatible with SDARCHIVE/SDRESTORE.

USBRESTORE requires a timeout in seconds, just like USBRECV. Be aware that it works just like SDRESTORE, and without any warning will replace the entire calculator contents.

For example, to clone your physical calculator, just run 30 USBRESTORE on the simulator, then USBARCHIVE on your calc. The opposite works too, you can clone the simulator into your calc.
The simulator has 2 menu options to perform unattended ARCHIVE/RESTORE operations on the connected device without affecting the simulated one, saving/reading directly from disk. It's entirely hands-free operation (there's no need to type USBARCHIVE on the calculator), it pretty much works like the File->Open/Save menu options in the simulator, but for the physical calc at the other end of the wire.
A file with a backup created this way can be opened in the simulator from the menu (with File->Open), and also restored to the physical calculator via SD card and SDRESTORE, the files are completely interchangeable, even between different calculator models.
Of course, different models have different amounts of RAM, if you fill 1 MB on the simulator, the backup won't fit on the 50g. If you fill more than 256 kbytes on a 50g, you won't be able to use those backups on a 39 or 40.

Enjoy!

PS: Perhaps this should be called "newRPL Holiday Edition" instead of the boring "Build 1001"...
 « Next Oldest | Next Newest »