Add-in development tools for fx-9860G and fx-CG 50, to use with GCC and gint.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
Lephenixnoir 0fd94fd894
bump version to 2.7.1
1 year ago
fxconv fxconv: explicit error when no metadata is set for a file 1 year ago
fxg1a fxg1a: always add a sensible internal name 2 years ago
fxlink fxlink: don't use <endian.h> 1 year ago
fxsdk cmake: allow single quotes in paths for generate_g3a() 1 year ago
.gitignore cmake: provide the noudisks2 configuration 2 years ago
CMakeLists.txt bump version to 2.7.1 1 year ago README: ah, yes, the famous apt setup on Arch Linux 2 years ago
giteapc-config-noudisks2.make cmake: provide the noudisks2 configuration 2 years ago
giteapc.make use CMake to build the fxSDK 2 years ago


The fxSDK is a development kit for CASIO graphing calculators in the fx-9860G and fx-CG 50 families. It provides command-line helper tools and build systems for add-ins and libraries, and is commonly used to develop add-ins running the gint kernel.

The fxSDK is free software; you may use it for any purpose, share it, modify modify it and share your changes. No credit required, but please let me know!

The fxSDK is compatible with Linux and has been successfully built on Mac OS. If there are compatibility issues, I am willing to try and port stuff to your favorite operating system. Windows users have good support with WSL.

Basic install and use

The simplest way to install the fxSDK is to use GiteaPC, an automation tool that builds and installs repositories from Planète Casio's Gitea forge.

% giteapc install Lephenixnoir/fxsdk

The fxSDK depends on the sh-elf-gcc compiler so GiteaPC might build it too as a dependency. You will also need the PIL library for Python, as well as libusb and optionally UDisks2 for fxlink. Use the GiteaPC configuration :noudisks2 to disable UDisks2-based features.

# On Debian, Ubuntu, WSL and the like:
% sudo apt install python3-pil libusb-dev # (Optionally) udisks2
# On Arch Linux, Manjaro and the like:
% sudo pacman -S python-pillow libusb # (Optionally) udisks2

Use the fxsdk command to manage projects. You can create an empty add-in project with fxsdk new and a name for a new folder:

% fxsdk new MyAddin

From that folder, you can build the add-in with the build commands:

# Build the add-in for fx-9860G (.g1a):
% fxsdk build-fx
# Build the add-in for fx-CG 50 (.g3a):
% fxsdk build-cg

Tools in the fxSDK

A tool called fxos used to live here and has now moved to its own repository.

Project management with fxsdk

fxsdk lets you set up projects almost instantly with a default folder structure and a build system for both fx-9860G and fx-CG 50. The default build system is CMake since version 2.3, and a bare-bones Makefile is also supported.

fxsdk only writes files at project creation time, so you keep control over your build system and configuration - it just helps you get started faster.

Summary of commands (fxsdk --help for details):

  • fxsdk new: Create a new project
  • fxsdk build/build-fx/build-cg: Configure and compile add-ins and libraries
  • fxsdk send/send-fx/send-cg: Install files to the calculator (WIP)

G1A file generation with fxg1a

fxg1a is a versatile g1a file editor that creates, edits and dumps the header of fx-9860G add-ins files. It is used to build a g1a file out of a binary program.

It supports PNG icons, checking the validity and checksums of the header, repairing broken headers and dumping both the application data and icon.

fxg1a is called automatically by the build system in your add-in, so you don't need to worry about it, but here are the main commands:

  • fxg1a -g: Generate g1a files
  • fxg1a -e: Edit g1a files
  • fxg1a -d: Dump metadata, checksum, and icon
  • fxg1a -r: Repair control bytes and checksums for broken files
  • fxg1a -x: Extract icon into a PNG file

Asset conversion with fxconv

fxconv is a programmable asset converter that converts images, fonts and other common asset types into data structures usable directly in add-ins. The built-in formats include gint images and fonts, libimg images, and binary blobs.

Projects can extend the support to custom types for maps, dialogs, GUI descriptions, or other application-specific assets. Extensions to fxconv are implemented in Python within the project.

fxconv can be used directly on the command-line but normally you specify parameters in fxconv-metadata.txt and let the build system do the magic.

USB communication with fxlink

fxlink is a USB communication tool that can be used to send files to calculators as well as to communicate with gint's USB driver from an add-in. Currently, the tool is a work-in-progress, and most of the work has been spent in properly detecting, characterizing and filtering connected calculators.

The main backend is libusb. With libusb, fxlink can detect CASIO calculators connected through USB and has a test mode used to prototype interactions with gint.

fxlink also supports a UDisks2 backend for systems that have UDisks2; with this backend, fxlink can detect Mass Storage calculators (essentially the fx-CG series and the G-III series) connected through USB, mount them without root access, and transfer some files all from the command-line.

Manual build instructions

The fxSDK is platform-agnostic; a single install will cover any target platforms. Here are the dependencies:

  • CMake
  • libpng ≥ 1.6
  • Python ≥ 3.7 (might work in 3.6)
  • The Pillow library for Python 3
  • libusb 1.0
  • The UDisks2 library, unless disabled

First configure; usual options are:

  • -DCMAKE_INSTALL_PREFIX to change the install folder;
  • -DFXLINK_DISABLE_UDISKS2=1 to disable UDisks2 support in fxlink.
% cmake -B build

Then make and install as usual.

% make -C build
% make -C build install

If you selected an install folder for which you don't have write access (which apparently includes the default folder on Mac OS), you will need sudo to install.