Releases: bxparks/rpn83p
Releases · bxparks/rpn83p
0.9.0 - complex numbers
- 0.9.0 (2024-01-06)
- Breaking: Change names and internal formats of various appVars
STKlist variable replaced withRPN83STKREGSlist variable replaced withRPN83REGRPN83SAVremains unchanged- the old
STKandREGSvariables can be manually removed - see TI-OS Interaction for more
details
- Breaking: Add
CPLXmenu at the previous location ofCONVCPLXmenu seemed most convenient on row 1 of theROOTmenu where
the oldCONVwas locatedCONVgot pushed to row 2, where theUNITmenu was previously
locatedUNITgot pushed to row 3, into an empty slot- the RPN83P home menu row now has exactly the same items as the
MATH
menu on the TI-OS:- RPN83P:
MATH,NUM,PROB,CPLX - TI-OS:
MATH,NUM,CPX,PROB
- RPN83P:
- Support more than 14 digits during edit/input
- When more than 14 digits are entered, the left most digits scroll off
to the left, with the left most digit replaced with an ellipsis
character indicates existence of extra digits. - Normal mode:
- accepts maximum of 20 digits, which supports entering all 14
digits encoded by the TI-OS floating point number format
- accepts maximum of 20 digits, which supports entering all 14
- Complex mode:
- accepts maximum of 41 digits to allow 2 floating point numbers
BASE BINmode- accepts up to 32 digits, to allow a 32-bit binary number when the
WSIZis 32.
- accepts up to 32 digits, to allow a 32-bit binary number when the
- see Input Limits and Long
Numbers for more
details
- When more than 14 digits are entered, the left most digits scroll off
PROB- Expand range of
COMB(n,r)andPERM(n,r)arguments ton,r<=65535
fromn,r<=255. - Improve performance of
COMB(n,r)whenr>(n-r)by taking advantage
of the symmetry ofCOMB(n,r)==COMB(n,n-r). - Eliminate floating point round-off errors in computing
COMB(n,r)by
incrementing the divisor from 1 tor, instead of decrementing it
fromrto 1.
- Expand range of
- Complex Numbers
- redesign RPN stack and storage registers to support both real and
complex numbers - extend arithmetic, algebraic, transcendental handlers to support
complex numbers - add explicit CPLX menu group with: REAL, IMAG, CONJ, CABS, CANG
- support RRES (real result) and CRES (complex result) menu settings
- support RECT (rectangular), PRAD (polar radian), PDEG (polar degree)
menu settings - display complex numbers in RPN stack in rect and polar modes
- support complex numbers in SHOW in rect and polar modes
- support Linking/Unlinking a complex number and its 2 real components
using 2ND LINK (equivalent to COMPLEX button on the HP-42S) - support entry of complex numbers on a single line in RECT, PRAD, and
PDEG modes using the2ND iand2ND ANGLEkeys. - see Complex Numbers for more
details.
- redesign RPN stack and storage registers to support both real and
- Save and restore app MODE settings independently from the TI-OS settings
- decouple the TI-OS MODE settings from the RPN83P MODE settings
- the TI-OS MODE settings are saved upon app start, and restored upon
app exit - the app MODE settings are saved and restore independently
- for example, it is now possible to set the TI-OS to FIX(2) and DEG,
while setting RPN83P to SCI(4) and RAD and the 2 settings are managed
separately, even though there is only a single set of global OS
settings
- Bug Fix: Render 3-digit EE exponents correctly in
SHOWmode.- 3-digit exponents can only be shown for complex numbers, so the bug
was latent until complex numbers were added
- 3-digit exponents can only be shown for complex numbers, so the bug
- Bug Fix: Fix overflow in rectangular to polar conversion
>POL- the built-in TI-OS
RToP()function has a bug which throws an
exception whenx^2+y^2becomes>=1e100, which can happen forx
oryas low as7.07e49. - reimplement using a custom
rectToPolar()without the scaling bug
- the built-in TI-OS
- Breaking: Change names and internal formats of various appVars
0.8.0 - increase performance by 2.5X on 83+SE/84+/84+SE; add SHOW command
- 0.8.0 (2023-12-03)
- Breaking: Flip the order of polar-rectangular conversion menu function
(>POLand>REC) so that they are consistent with the HP-42S. I don't
know why I had them reversed.Yregister holds theyorthetavalue, entered first, andXregister holds thexorrvalue, entered second.
- Breaking: Flip the order of
(X, Y)coordinates of theATN2menu
function, so that they are consistent with the>POLfunction.Yregister holds theyvalue, which is entered first, thenXregister holds thexvalue, which is entered second.
- Breaking: Change
WSIZto prompt the user for the base word size
usingWSIZ _ _prompt, instead of using the value in theXregister.- Solves a major usability problem where the user was forced to enter
the word size using the currently selected base mode (e.g.HEXor
BIN). For example, the word size16was required to be entered as
10000inBINmode, which was too confusing. - See Base Word Size for more details.
- Solves a major usability problem where the user was forced to enter
- Bug Fix: Tweak the stack-lift logic so that certain operations
(RollDown, RollUp, X<>Y) enable stack lift even if the previous command
was aCLEARorCLX.- The
rpnFlagsLiftEnabledwas not set properly for RollDown, RollUp,
X<>Y and potentially other commands. - So a
CLEAR RollDown RollDown RollDown RollDownfollowed by a number
would overwrite theXregister, instead of doing a stack lift.
- The
- Increase execution speed by 2.5X on 83+SE, 84+, 84+SE
- set CPU speed to 15 MHz when supported by hardware
- remain at 6 MHz on the 83+
SHOWdisplay mode- implement "Show" function using
2NDENTRYon TI keyboard - displays all 14 internal digits of the TI-OS floating point number
- if integer < 10^14: display as integer
- otherwise: display in scientific notation
BASEmode variationBINmode: displayWSIZdigits in groups of 4, using up to 4
display lines- all other
BASEmodes: display underlying floating point number
- see SHOW Mode for details
- implement "Show" function using
BASEinput limit- limit the number of digits that can be entered in
BASEmode to a
maximum that is appropriate for the selectedWSIZand the baseNumber
selected byHEX,DEC,OCTandBIN - for example, selecting
HEXandWSIZ16 will allow only 4 hex
digits to be entered - see Base Input Digit Limit for
details
- limit the number of digits that can be entered in
- HELP pages
- Add page for
CONVfunctions to show order of (x, y, r, theta)
variables on RPN stack - Add page for
STATfunctions - Add page for
NUMfunctions - Add page for various display MODEs
- Add page for
- Breaking: Flip the order of polar-rectangular conversion menu function
0.7.0 - time value of money (TVM); multiple BASE word sizes
- 0.7.0 (2023-11-20)
STAT- fix broken
Sigma+andSigma-whenY==0 - use alternate equation for
SLOP(slope) which works when theY
data points are the same - fix "stack lift disable" feature of
Sigma+andSigma-which
probably got broken during an earlier refactoring - check for division by zero when calculating weighted mean
WMN, and
show9.9999999999999E99to indicate error, allowing weightedX (or
weightedY) to be evaluated even if the other is undefined
- fix broken
BASE- implement
WSIZ(set word size) restricted to 8, 16, 24, and 32
(inspired by HP-16C and Free42) - display appropriate number of digits for various
WSIZvalues, for
various base modes (HEX,OCT,BIN) - display ellipsis character on left most digit in
BINmode if
the binary number cannot be fully displayed using 14 digits on the
screen - Breaking Change: change order of
BDIVresults inXandY
registers- now
X=quotient=Y/XandY=remainder=Y%X - allows easier recovery of original
XusingLastX*
- now
- implement
MATH: addLN1+,E^X-- implement
log(1+x)ande^x-1respectively - more accurate than their naive implementations when
xis close to 0 - use mathematical identities involving hyperbolic
sinh()and
asinh()functions to avoid roundoff errors
- implement
TVM- add TVM (time value of money) submenu hierarchy (inspired by HP-12C
and HP-30b) - implement relatively simple Newton-Secant root solver to calculate
theI%YRfrom the other 4 TVM variables - significant performance and robustness improvements can probably be
made in the future
- add TVM (time value of money) submenu hierarchy (inspired by HP-12C
- add storage register arithmetic operations
STO+,STO-,STO*,STO/RCL+,RCL-,RCL*,RCL/
- convert to multi-page flash application
- now consumes 2 flash pages (2 x 16 kiB)
CLEARmultiple times to clear RPN stack- If
CLEARis pressed on an empty edit line (just a_cursor), then
the message "CLEAR Again to Clear Stack" will be displayed. - If
CLEARis pressed again right after this message, the RPN stack is
cleared, invoking theROOT > CLR > CLSTmenu function. - Provides a quick shortcut to the
CLSTfunction which can be
difficult to reach when the current menu item is deeply nested in
another part of the menu hierarchy. - The TI-OS does not support
2ND CLEAR, it returns the same keycode as
CLEAR. So invokingCLSTon multipleCLEARpresses seemed like
the most reasonable workaround.
- If
- implement jumpBack for
MODEbutton shortcut- When
ROOT > MODEis reached through the hierchical menu, the
ON/EXIT/ESCbutton goes back up the menu hierarchy to the parent,
theROOT. - When
ROOT > MODEis invoked through theMODEbutton on the
keyboard, theON/EXIT/ESCbutton jumps back to the previous menu
location, instead of going back up the menu tree. - This allows quick changes to the
FIX,SCI, andENGdisplay
modes, without losing one's place in the menu hierarchy.
- When
- fix incorrect handling of
DELafter aFIX,SCI, orENGmode- when the
DEL(backspace) button is pressed after a 2-digit argument
of aFIX(orSCIetc), one of the digits of the 2-digit argument
remained in the input buffer - the fix now correctly clears the input buffer when transitioning into
edit mode from a normal mode
- when the
- Potential Breaking Change:
STO,RCL,FIX,SCI,ENGargument
prompt is no longer saved and restored on QUIT or OFF- a new Command Arg parser was required to support storage register
arithmetics - it uses a secondary
GetKey()parsing loop which implements its own
2ND QUITand2ND OFFhandlers - the state of the secondary
GetKey()parsing loop is not saved and
restored
- a new Command Arg parser was required to support storage register
0.6.0 - save and restore app state; add carry flag; add BASE ops from HP-16C
- 0.6.0 (2023-09-22)
- save application state
- preserve app state into an appvar named
RPN83SAVupon exit - reconstruct the app state upon restart
- preserve app state into an appvar named
- save
Xregister to TI-OSANSonly on2ND QUITor2ND OFF- previously saved to
ANSevery timeXwas changed - no user-visible change, but is more efficient internally
- previously saved to
- rename
P>Rto>REC, andR>Pto>POL- for consistency with other conversion functions, and for consistency
with HP-42S - I prefer the
P>RandR>Pbut the difference is not worth breaking
consistency
- for consistency with other conversion functions, and for consistency
- support custom MenuGroup handlers
- absorb
changeMenuGroup()functionality into thedispatchMenuNode() - add onExit events into
changeMenuGroup() - add custom
mBaseHandlerforBASEmenu to activate or deactivate
thebaseNumberupon entering or leaving theBASEmenu hierarchy
- absorb
BASEmode- make all
BASEoperations useu32integers, evenDECmode - add Carry Flag which is updated for arithmetic, shifting, rotating
operations- add
SCF(set carry flag),CCF(clear carry flag),CF?(get
carry flag) - add
Cor-display indicator
- add
- remove base number indicator (
DEC,HEX,OCT,BIN) from the
status line (top line)- no longer needed since those menu items show a "dot" when selected
- the base number is only relevant within the
BASEmenu hierarchy
- add
ASL(arithmetic shift left),RLC(rotate left through carry
flag),RRC(rotate right through carry flag) - add
SLn,SRn,RLn,RRn,RLCn,RRCn(shift or rotateY
forXtimes) - add
CB(clear bit),SB(set bit),B?(get bit) - add
REVB(reverse bits),CNTB(count bits)
- make all
- add additional HELP pages
- CFIT Models
- BASE Ops
- save application state
0.5 - statistics and curve fit; menu selector dots
- 0.5.0 (2023-08-31)
USER_GUIDE.md,README.md- Update "Menu Indicator Arrows" section with latest screenshots which
changed the menu arrows. - rename 'Menu Strip' to 'Menu Row' for consistency with HP-42S
terminology.
- Update "Menu Indicator Arrows" section with latest screenshots which
BASE- display just a bare
-for negatives numbers inBASEmodes (instead
of...which is now reserved for valid numbers which overflows the
number of digits supported by the display) - validate that the
XandYvalues are in the range of[0, 2^32)
when performing bitwise operations (e.g.B+,AND,XOR, etc).
Floating point numbers are truncated tou32integers before the
bitwise operations are performed.
- display just a bare
- Add menu selector dots
- Replicate HP-42S menu selector dots, where a menu item can be both an
action (e.g. selectDEG) and a selection indicator. - display modes:
FIX,SCI,ENG - trig modes:
RAD,DEG - base modes:
DEC,HEX,OCT,BIN
- Replicate HP-42S menu selector dots, where a menu item can be both an
- Improve menu name centering algorithm.
- No change for strings which are even-number of pixels wide.
- Strings which are odd-number of pixels wide are now centered
perfectly, instead of being off-centered by one-px to the left. - Allows strings which are 17px wide to be rendered properly.
- Add
STATmenu items- 1 or 2 variable statistics
Sigma+(add data point),Sigma-(remove data point)SUM,MEAN,WMN(weighted mean)SDEV(sample standard deviation),SCOV(sample covariance)PDEV(population standard deviation),PCOV(population covariance)
- Add
CFITcurve fit menu itemsY>X(forcast X from Y)X>Y(forcast Y from X)SLOP(least square fit slope)YINT(least square fit y-intercept)CORR(correlation coefficient)LINF(linear curve fit model)LOGF(logarithmic curve fit model)EXPF(exponential curve fit model)PWRF(power curve fit model)BEST(choose best curve fit model)
- Fix RPN stack lift logic for pending input
- Simplify stack lift logic to handle empty and non-empty pending input
consistently. - If the input buffer is empty (showing just a
_cursor), then any
subsequent keystroke that generates a single value (e.g.PIor
STAT:N) replaces the emptyXregister. - If the input buffer is pending but not empty (i.e. has digits with a
trailing_cursor), then subsequent keystrokes causes a stack lift,
preserving the pending input into theYregister. - If the subsequent keystroke is a function that consumes an
X
register, then the empty input buffer is assumed to be a0value.
- Simplify stack lift logic to handle empty and non-empty pending input
- Allow data transfer between RPN83P and TI-OS through the
ANSvariable.- When the RPN83P app starts, the TI-OS
ANSvariable (if Real) is
available as theLastXregister. - When the RPN83P app exits, the most recent
Xregister becomes
avaiable in TI-OS as theANSvariable.
- When the RPN83P app starts, the TI-OS
- Add
X Root Ymenu item underMATH
0.4 - more BASE function; improve speed of PRIM by 7x
- 0.4.0 (2023-08-16)
- More
BASEmenu functions:SL(shift left),SR(shift right),RL(rotate left circular),RR` (rotate right circular).B+,B-,B*,B/BDIV(division with remainder)
- Map
+,-,*, and/buttons to their bitwise counterparts when in
HEX,OCT, orBINmodes.- Too confusing to have floating point operations bound to the
easy-to-reach buttons while in HEX, OCT or BIN modes. - This is consistent with the HP-42S.
- Too confusing to have floating point operations bound to the
PRIM(isPrime)- change result values:
- 1 if the number is a prime, or
- smallest prime factor (always greater than 1) if not prime.
- preserve the original
X, and push it up toY- allows the
/button to be chained with additionalPRIMto
calculate all prime factors - see Prime Factors for details
- allows the
- improve speed by 7X using u32 integer routines instead of floating
point routines
- change result values:
- More
0.3.3 - use pandoc to convert markdown to PDF files
- 0.3.3 (2023-08-14)
- Add
Makefiletargets for converting GitHub markdown files to PDF files. - Update some sections in
README.mdandUSER_GUIDE.md. - No code change.
- Add
0.3.2 - add executive summary in README.md
- 0.3.2 (2023-08-13)
- Add executive summary of the app at the top of README.md.
- No code change.
0.3.1 - add animated GIFs of Examples 1 and 2
- 0.3.1 (2023-08-13)
- Add animated GIF to illustrate Examples 1 and 2 in README.md.
- No code change.
0.3 - rearrange some menu items for usability
- 0.3 (2023-08-13)
- Move
CLRGfrom F1 position to F3. MoveCLXto F1. If the F1
is accidentally hit twice when selecting theCLRmenu group, then
invokingCLXis a lot less destructive than invokingCLRG. - Move
IP,FP,...menu strips before theABS,SIGN,...menu strip. The
IP,FPfunctions seem more frequently used than theABS,SIGNfunctions.
- Move
Full Changelog: v0.2.1...v0.3