Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

support calling TI-BASIC programs from inside RPN83P #22

Open
bxparks opened this issue Apr 5, 2024 · 0 comments
Open

support calling TI-BASIC programs from inside RPN83P #22

bxparks opened this issue Apr 5, 2024 · 0 comments

Comments

@bxparks
Copy link
Owner

bxparks commented Apr 5, 2024

This is a living document which will be updated periodically as new info becomes available. This describes the requirements and implementation details of calling TI-BASIC programs from inside the RPN83P app.

Motivation

There are a number of advanced calculator features which are already implemented in the TI-OS which are not yet implemented in RPN83P. The FUTURE.md document describes some of these, but one of the more obvious missing features of RPN83P compared to modern HP calculators is the support for keystroke programming. It may be implemented eventually but it is expected to take a LOT of time and effort.

An alternative to keystroke programming within RPN83P may be to build on top of the existing programming feature of the TI-OS through its TI-BASIC. If RPN83P could call out to these TI-BASIC programs, it may satisfy much (but not all) of the need for keystroke programming within RPN83P. Native keystroke programming in RPN83P would still be needed for features which exist only in RPN83P. I suspect that eventually, we would want to implement both types of programming (TI-BASIC and native RPN83P keystroke).

Another set of frequently requested features by readers on the RPN83P thread on MoHPC are:

  • Numerical root solver (implemented as Solver... under the MATH menu in TI-OS)
  • Numerical integrator (implemented as fnInt( under the MATH menu in TI-OS)

These 2 features are hallmarks of HP scientific calculators since the early 1980s (since the HP-15C?) and they would be useful additions to the RPN83P app. In addition to implementing the actual Solve or Integrate algorithms, which is expected to be a substantial amount of work (to meet the expectations of HP calculator users), both features require a mechanism for user-defined functions, either as a keystroke program, or an algebraic equation string which needs to be parsed. The TI-OS already has these features. If they can be made accessible to RPN83P, we may be able to avoid reimplementing these them within RPN83P itself.

Requirements:

Here are some requirements how RPN83P should call out to TI-BASIC programs:

  • user should see the available TI-BASIC or assembly programs
  • user can select a program, and perform operations on it:
    • user can execute the program
    • user can delete the program
    • user can rename the program
    • user can archive to flash memory or unarchive to volatile RAM
  • the external program can send results back to RPN83P
    • storage variables A-Z,Theta are implemented in v0.10.0, which may be sufficient for single-valued results
    • do we need to support lists?
  • delegate the creation and editing of programs to TI-OS
    • the user interface is already there, so perhaps we can just reuse it
  • figure out how to call out to Solve... and fnInt( features of the TI-OS
    • (these functions are not exposed through the TI-83+ SDK, so I'm skeptical that there is easy access to these features)

Implementation Notes:

We know that a flash app (like RPN83P) has the ability to call another assembly program or a TI-BASIC program because there are programs for the TI calculators called "shells" which do exactly this. The 3 examples that I am aware of are:

Of these, I have limited experience with the DoorsCS, which seems to be the most recent and most sophisticated. It has the ability to execute a program which is stored in either volatile RAM, or is archived in flash memory. Normally, the TI-OS forces an archived program to be unarchived into RAM before it will execute it. But DoorsCS somehow gets around that limitation and allows the program to run while it is archived. This is a very convenient feature, one that we would like to implement in RPN83P.

I am not familiar with either MirageOS or Ion, but I think Ion is the only one of the 3 which comes with source code. DoorsCS and Mirage seem to be closed-source, which prevents us from learning how these shells work internally. The author of DoorsCS is the webmaster of https://www.cemetech.net/, so it may be possible to get more technical information about this feature from the Forums there. I have not pursued this, because I have not had any time to work on this feature, so it would have been premature for me to start that inquiry, without being able to follow up on any answers I get there.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant