In my childhood, the only calculator(also my only electronic device with screen and keypad) I have is a CASIO fx-991ES PLUS, which is a non-programmable scientific calculator. I had a lot of fun playing around its exploits, during which I started to imagine how it solves math problems inside.
Now I have multiple graphing calculators, but I still miss the old days exploring all possibilities of that little scientific thingy. One day I saw a thread on Universal Casio Fourm describing the low-level mechanism in detail. I got attracted immediately and tested all of these hackstrings one by one.
Finally, I came up to an idea: Writing an emulator to realize my childhood dream. So I started working on it a few days ago.
Well, story time is over!

What is this?
This is a calculator emulator running on another calculator. To be more specific, this is a CASIO fx-ES PLUS series calculator emulator running on TI-83 Plus and its variants.

What is it capable of?
It is currently unfinished, but the planned features are:

  • Precise emulation based on community-made documentation
  • Configurable key mapping
  • Memory and core registers view
  • Savestate files

The emulation speed is not guaranteed, because the emulated core is a 3-stage-pipelined RISC running at ~125kHz. Emulating such a processor on a z80 @6MHz might not be the best solution.

How to use it?
I may not publish an executable directly since ROM of the emulated calculator is probably copyrighted by CASIO, so you may need to build the executable by yourself. No much worrying though, it only involves 3 steps:

  • Put your ROM dump file into the directory
  • Assemble it with a PC program(currently SPASM)
  • Sign the produced binary to get a .8xk file

After these, you can just send the application to your calculator.

Current progress?
I'm still working on the emulation part, thus unable to be built currently.

    Core

    • Fetching
    • Decoding (finished)
    • Executing
    • Interrupts

    External hardware

    • LCD
    • Keyboard

    Utilities

    • Memory view
    • Savestates (finished)


As you can see, it's still on the very early stage of developmenting Sad I doubt if I can finish it in this year since I'm really not familiar with z80, nor implementing emulators.

This is my first serious calculator programming project, also it is my dream(implementing a calculator emulator on something). Hope I can improve my programming skills and eventually finish it, also hope that it will be useful to calculator comminity.
I want to thank everyone helped me in chat: Zeroko, calc84maniac, Tari, fghsgh and others. I also want to thank Cemetech for this amazing community!
If you have any idea, problem, suggestion, don't be hesitate posting it here! Also the source code is available on Github, you can open an issue/pull request if you have any idea correcting/improving the code!
After some days of struggling, I've finally rewritten the savestate part and tested it! Now it's fully working! Razz Thanks to the chat for so many optimizations and programming tips, I've learnt many advanced tricks like "using SP as emulated program counter" and "writing multiple stubs for 1 subroutine to save cycles" and more! The code I've written is not really optimized, so if you are willing to, please go to the GitHub repository(link above) and open issues/pull requests about implemention/optimization suggestions, I'm always happy to get feedbacks and learning chances Wink
This is a pretty cool idea and will certainly be a great programming exercise.
  
Register to Join the Conversation
Have your own thoughts to add to this or any other topic? Want to ask a question, offer a suggestion, share your own programs and projects, upload a file to the file archives, get help with calculator and computer programming, or simply chat with like-minded coders and tech and calculator enthusiasts via the site-wide AJAX SAX widget? Registration for a free Cemetech account only takes a minute.

» Go to Registration page
Page 1 of 1
» All times are UTC - 5 Hours
 
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

 

Advertisement