As you may remember, I implemented a transfer tool using Protocol 7.00 back in 2016/2017, called "p7", and did many, many projects regarding protocols and file formats since, that were more or less never released however.

Back in February, I've restarted the whole project to write a complete documentation this time around, and made Cahute.

Cahute is a library and set of command-line utilities to handle serial and USB communication protocols and file formats related to CASIO calculators, dating from the 1990s to today. It provides the following features:
  • Transferring storage files from and to fx-9860G compatible calculators, over USB and serial links;
  • Receiving programs from all CASIO calculators since 1991, over USB and serial links;
  • Converting between character encodings (see the table of supported conversions);
  • Screenstreaming from fx-9860G, fx-CG and compatible calculators, over USB links;
  • Flashing fx-9860G and compatible using the fxRemote method.
Latest release is 0.4 (published on 2024-05-06), and the currently supported systems are Archlinux-based and macOS / OS X. Support for Windows, AmigaOS and MS-DOS, and packaging for Debian and derivatives is on the way, although contributions are welcome.

Some links for the project are the following:
Let me know of your experience with Cahute, I take all available feedback Smile
Seems interesting! I remember having issues with p7, but unfortunately the new project doesn't seem to have fixed these.

When I connect my fx-CG 50 AU to my computer (Arch Linux), the calculator picks up that the USB connection has been made and prompts me what I want to use, but no matter what option I select, p7 list-devices lists nothing and p7screen doesn't work.

Do you have any suggestions?
Hi! There are unfortunately a few layers to unpack here:
  • Names are not very well chosen in p7, and I've only kept them for compatibility: list-devices and --com are only for serial links, while it seems that you want USB. See p7 command line reference and an example guide for more context, if need be.
  • The fx-CG and fx-CP calculator models have a "USB Key" mode which is different from the "Transfer" mode in fx-9860G and compatible (monochrome). For storage transfers, you should mount the volume and access it through here. Lephe's fxlink, included within the fxsdk, is the only one for now able to send files to such calculators without prior mounting.
  • For screenstreaming (p7screen), I'm intrigued because it should work on all calculators, including the fx-CG. You can try adding --log info to the command to see more debug output, and if that still doesn't work, the vulnerability reporting guide lists the information I will need.
Thanks for the feedback Smile
Thanks for the clarifications!

Turns out the screen receiver not working was a cable issue, so no worries there.

On a side note, It would be interesting to see whether protocol 7 is still implemented (or parts of it) on the new Casio Math+ calculators. Do you know if any testing has been done?
I haven't looked into the newer models in detail, but if it's the same as the fx-CG50, it will probably be UMS-based on USB, and Protocol 7.00 on serial. Time will tell though, I already have enough on my plate with all other models since '91/'92. Smile
Release 0.5 was published today! It's mostly a bugfix / refactoring release, bootstrapping support for Visual Studio build and support for other platforms such as Win32, MS-DOS or AmigaOS; although neither are officially supported platforms yet, due to runtime & packaging issues for these. Smile
I deeply appreciate the effort baked into utilities like this, solid work. I'm not too familiar with CASIO's product line and I can't seem to find a firm answer to this in your documentation: exactly which models will this library work for?
The goal is to support all possible interactions with all graphic calculators dating back to around 1991 or 1992, i.e. up to the first ones with a serial port (and not a cassette port like on the fx-8500G). AFAIK it's not as diverse as with TI calculators, there are mostly five eras:
  • What I call "CAS40" calculators, with very primitive data transfer (1991/1992 to 1996).
  • What I call "CAS50" calculators, with better data transfer and some control logic to the protocol (from 1996 to 2004).
  • The AFX/Graph 100, running on DOS on an i286, which I call "CAS100" calculators (2000 to 2004).
  • fx-9860G and derivatives, i.e. recent monochrome models running on "CASIOWIN" (2004 to current, AFAIK)
  • fx-CP, fx-CG and derivatives, starting from the fx-CP400 and Prizm (~2011 to current).

Currently, what I support depends on the feature:
  • For main memory interactions, the library works for all models, except fx-CG / fx-CP over USB for now, since I'll require FAT support for this (yay).
  • For storage interactions, fx-9860G and derivatives only. Both the AFX / Graph 100 and the fx-CP / fx-CG unfortunately also require FAT support AFAIK.
  • For screen streaming / screen capture, all models (although I may be missing one or two picture formats from the CAS50 era).
  • For flashing, fx-9860G and derivatives only. fx-CG support would require a community Update.EXE for this target; I currently use fxRemote's Update.EXE.

Note that for main memory interactions, I currently only support programs. I have documented most formats for older protocols, but not implemented them yet, and need to actually document the newer (2000 to nowadays)' formats to make sure my abstractions are correct. There are a lot of formats, it's going to be a mess but I'll need to do this at some point.

Also, I'm realizing the five eras are indeed not very well described in the documentation, and I should probably find a way to integrate them :p
Actually there seems to be a sixth era, being the fx-CP300 / fx-CP330 (+), released in 2003. It's some kind of weird mix between CASIOLINK (0x16 / 0x13 handshake at start), uses ASCII-HEX and escaping from Protocol 7.00, has a two-byte ASCII-HEX checksum when data is present using the same checksum logic as Protocol 7.00, and has a two-byte ASCII-HEX "packet subtype" past the packet type on all packets except the initiation handshake, excluded from the checksum.

I'm still investigating, but that will probably arrive in Cahute at some point; not sure of the form it will take though.
  
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