2016-05-05 12:12:42 +02:00
|
|
|
gint project
|
|
|
|
============
|
|
|
|
|
2016-05-05 13:30:49 +02:00
|
|
|
gint (pronounce 'guin') is a low-level library for fx-9860G calculators. It
|
2016-12-25 11:45:05 +01:00
|
|
|
provides a mostly free-standing runtime support for the platform, and can be
|
|
|
|
used to develop add-ins under Linux along with the gcc toolchain (`sh3eb-elf`
|
|
|
|
target) and the [fxSDK](http://git.planet-casio.com/lephe/fxsdk).
|
2016-05-05 12:12:42 +02:00
|
|
|
|
2016-12-25 11:45:05 +01:00
|
|
|
gint is free software: you may use it for any purpose, share it, modify it and
|
|
|
|
share your changes. No credit of any kind is required, though appreciated.
|
2016-05-05 12:12:42 +02:00
|
|
|
|
2018-04-09 08:31:12 +02:00
|
|
|
**TODO: Update this file for everything related to project organization**
|
|
|
|
|
2016-05-05 12:12:42 +02:00
|
|
|
|
2016-12-25 11:45:05 +01:00
|
|
|
Programming interface
|
|
|
|
---------------------
|
2016-05-05 12:12:42 +02:00
|
|
|
|
2016-12-25 11:45:05 +01:00
|
|
|
Because of its free-standing design, gint's API provides direct and efficient
|
|
|
|
access to the low-level MPU features, among which:
|
|
|
|
* Extensive keyboard control, including replication of the system behavior for
|
|
|
|
office applications and event-driven decisions for games
|
|
|
|
* Hardware timers running at over 10 MHz, allowing microsecond-level control
|
|
|
|
* Unlimited mappings of callbacks to Real-Time Clock events (requires build)
|
2017-01-01 17:41:16 +01:00
|
|
|
* Access to processor registers for debugging information, determination of
|
2016-12-25 11:45:05 +01:00
|
|
|
processor speed (overclock is on the TODO list), backlight management...
|
2016-05-05 12:12:42 +02:00
|
|
|
|
2016-12-25 11:45:05 +01:00
|
|
|
The library also offers powerful higher-level features:
|
|
|
|
* A gray engine that works by rapidly swapping monochrome images
|
2017-01-01 17:41:16 +01:00
|
|
|
* Blazingly fast drawing functions when working with the fxSDK (10 times faster
|
|
|
|
image rendering that MonochromeLib)
|
|
|
|
* C Standard functions such as the `printf()` family
|
2016-05-05 12:12:42 +02:00
|
|
|
|
|
|
|
|
2016-12-25 11:45:05 +01:00
|
|
|
Interrupt handler
|
|
|
|
-----------------
|
2016-05-05 12:12:42 +02:00
|
|
|
|
2016-12-25 11:45:05 +01:00
|
|
|
The interrupt handler is the lowest-level part of the library. It directly
|
|
|
|
accesses the peripheral modules and workarounds the system to perform keyboard
|
|
|
|
analyzes directly on hardware or timer management.
|
2016-05-05 13:30:49 +02:00
|
|
|
|
2016-12-25 11:45:05 +01:00
|
|
|
gint does not allow user programs to use their own handlers, but it allows them
|
|
|
|
to complete the original handler if they want to use interrupts that are not
|
|
|
|
supported by the library. It is also possible to map various interrupt-driven
|
|
|
|
events to user-provided callbacks using the API, which is not allowed by the
|
|
|
|
operating system. This is particularly useful for timers and the Real-Time
|
|
|
|
Clock (the 16 Hz interrupt can be used to run a physical engine, while the 1 Hz
|
|
|
|
interrupt can be used in a real-time management game).
|
2016-05-05 13:30:49 +02:00
|
|
|
|
|
|
|
|
|
|
|
Building and installing
|
|
|
|
-----------------------
|
|
|
|
|
2016-12-25 11:45:05 +01:00
|
|
|
To build and install gint, you will need the following components:
|
|
|
|
* The `sh3eb-elf` toolchain linked somewhere in the PATH
|
|
|
|
* The [fxSDK](http://git.planet-casio.com/lephe/fxsdk) installed and available
|
|
|
|
in the PATH
|
|
|
|
|
|
|
|
The classical way to build gint is to enter a terminal and use the usual:
|
|
|
|
|
|
|
|
$ ./configure
|
|
|
|
$ make
|
|
|
|
# make install
|
2016-07-25 22:38:47 +02:00
|
|
|
|
2017-02-25 19:02:07 +01:00
|
|
|
This will build the `all-lib` target and install the following components in
|
|
|
|
the storage folder of the fxSDK:
|
2016-05-05 13:30:49 +02:00
|
|
|
* `libgint.a`, the gint library
|
2016-12-25 11:45:05 +01:00
|
|
|
* `libc.a`, the partial standard library
|
|
|
|
* The libgint headers for development
|
2016-05-05 13:30:49 +02:00
|
|
|
|
2017-02-25 19:02:07 +01:00
|
|
|
When explicitly running target `all`, the following additional files will be
|
|
|
|
generated in the working directory:
|
2016-12-25 11:45:05 +01:00
|
|
|
* `gintdemo.g1a`, a test application
|
2017-02-25 20:10:48 +01:00
|
|
|
* `gintdbg.g1a`, a non-gint application used for debugging in case gint crashes
|
2016-07-06 11:28:51 +02:00
|
|
|
|
2016-12-25 11:45:05 +01:00
|
|
|
The usual `clean`, `mrproper`, and `distclean` rules will clean the directory.
|
|
|
|
There are configuration options, which can be obtained using
|
|
|
|
`./configure --help`. Most of them customize size limits, if a project needs to
|
|
|
|
extend them. The true free-standing program may build the library using the
|
|
|
|
`--no-syscalls` switch, but some features will be disabled (dynamic
|
|
|
|
allocation...).
|
2016-07-06 11:28:51 +02:00
|
|
|
|
|
|
|
|
|
|
|
Source organization
|
|
|
|
-------------------
|
|
|
|
|
2017-02-25 19:02:07 +01:00
|
|
|
gint is made of *modules*. Each module has one or more of the following
|
|
|
|
component files:
|
2016-07-25 22:38:47 +02:00
|
|
|
* A header file in `/include`
|
|
|
|
* An internal header file in `/include/internals`
|
|
|
|
* Single-function source files in `/src/module`: to avoid linking against the
|
|
|
|
whole library, some functions have their own object files. Their names are
|
|
|
|
those of the functions.
|
|
|
|
* Other source files in `/src/module`: contain multiple functions that always
|
|
|
|
work together, or are lightweight enough not to be separated. Their names
|
|
|
|
often begin with `module_`.
|
2016-12-25 11:45:05 +01:00
|
|
|
* Other files in `/src/module`: the `display` module contains a font.
|
2016-07-25 22:38:47 +02:00
|
|
|
|
2017-02-25 19:02:07 +01:00
|
|
|
The demo application is in the `demo` folder.
|