Syscall

De Casio Universal Wiki
Révision datée du 27 avril 2014 à 17:18 par Lephenixnoir (discussion | contributions) (Terminé la liste des sycalls.)
Aller à : navigation, rechercher

Les syscalls (abréviation en anglais de system call, traduit en français par appel système) sont des fonctions inscrites dans le noyau du système de la calculatrice. Pour pouvoir lancer un syscall, on a besoin de son numéro. Malheureusement, Casio n'a jamais donné ces informations, il faut donc les trouver en tâtonnant. Nous connaissons le point d'entrée de la fonction (0x80010070), mais la liste des numéros de fonctions (et surtout de leurs paramètres) est loin d'être complète. Simon Lothar et Andreas Bertheussen ont fait une documentation(en anglais) sur les syscalls disponible sur Planète Casio

Intérêts

Les avantages de ces syscalls sont nombreux, grâce à eux on peut :

  • Utiliser des fonctions utilisables juste en C, comme le système RTC (Real-Time Clock ou Horloge temps réel) qui permet d'avoir l'heure sur sa calculatrice (heure qui continue à tourner lorsque cette dernière est éteinte).
  • Utiliser des fonctions beaucoup plus rapides que celles fournies par Casio dans la bilbiothèque fxlib.h. Lorsque les syscalls sont bien utilisés, on peut obtenir des fonctions beaucoup plus rapides, comme celles de Monochrome Lib par exemple.

Liste des sycalls connus

Voici quelques exemples de ce que permettent les syscalls.

Contrôle du curseur

int  Cursor_SetPosition   (char column, char row);
int  Cursor_GetFlashStyle (void);
void Cursor_EnableFlash   (void);
void Cursor_DisableFlash  (void);

Pour déplacer le curseur et utiliser le clignotement (champs de saisie).

Affichage de texte

void Print_Generic    (int mode, char *string, int maxcol);
void Print_AtCursor   (char *string, int type);
void Print_AtLocation (char *string, int column, int row);

Des fonctions de texte utilisées par les fonctions habituelles du SDK mais ne faisant pas partie de fxlib.

Gestion du clavier

int Kbd_GetKeyWait (int *col, int *row, int waittype, int timeout, int menu, ushort *keycode);

Un GetKeyWait fonctionnel, contrairement à celui de fxlib.

Gestion de l'affichage

char *Disp_GetVRAMPtr (void);
char *Disp_Manage     (int pageID, int action);

Permettent d'utiliser directement la VRAM et les buffers de sauvegarde de SaveDisp() et RestoreDisp().

Applications intégrées

void App_CONICS  (int isAppli, unsigned short optionNum);
void App_DYNA    (int isAppli, unsigned short optionNum);
void App_EACT    (int isAppli, unsigned short optionNum);
void App_EQUA    (int isAppli, unsigned short optionNum);
void App_PRGM    (int isAppli, unsigned short optionNum);
void App_FINANCE (int isAppli, unsigned short optionNum);
void App_GRAPH   (int isAppli, unsigned short optionNum);
void App_LINK    (int isAppli, unsigned short optionNum);
void App_MEMORY  (int isAppli, unsigned short optionNum);
void App_RECUR   (int isAppli, unsigned short optionNum);
void App_RUNMAT  (int isAppli, unsigned short optionNum);
void App_STAT    (int isAppli, unsigned short optionNum);
void App_SYSTEM  (int isAppli, unsigned short optionNum);

Ces syscalls permettent de lancer n'importe quelle application déjà existante de l'OS.

int App_RefreshAddInTable  (void);
int App_GetIntegratedCount (void);
int App_Run                (int R4, int R4, int index, int allow_recursion);

Ces derniers donnent la possibilité de lancer également des application ajoutées par l'utilisateur.

Utilisation de l'interface Serial

int Serial_ReadByte                (unsigned char *dest);
int Serial_ReadBytes               (unsigned char *dest, int max, short *size);
int Serial_WriteByte               (unsigned char byte);
int Serial_WriteBytes              (unsigned char *src, int size);
int Serial_GetRxBufferSize         (void);
int Serial_GetTxBufferFreeCapacity (void);
int Serial_ClearReceiveBuffer      (void);
int Serial_ClearTransmitBuffer     (void);
int Serial_Open                    (unsigned char *conf);
int Serial_Close                   (int mode);
int Serial_Peek                    (int index, unsigned char *dest);
int Serial_IsOpen                  (void);

[1]
L'utilisation de l'interface Serial est à la base de toute communication entre calculatrices/composants électroniques.

Utilisation du système RTC

void ResetRTC          (uint mode);
void RTC_GetTime       (uint *hours, uint *mins, uint *secs, uint *msecs);
int  RTC_GetTicks      (void);
int  RTC_HasElapsed_ms (int start_value, int duration);
void RTC_SetDateTime   (uchar **data);

L'ensemble de ces syscalls permet d'accéder au système RTC (Real Time Clock ou Horloge Temps Réel) de la calculatrice et de le manipuler. Cela permet d'utiliser des compteurs de temps ou autres horloges dans les programmes.

Les Timers

int Timer_Install   (int TimerID, void (*handler)(void), int delay);
int Timer_Uninstall (int TimerID);
int Timer_Start     (int TimerID);
int Timer_Stop      (int TimerID);

Ces quatre syscalls permettent d'utiliser les timers du système.

Accès aux variables de configuration

char Setup_GetEntry     (unsigned int index);
char *Setup_SetEntry    (unsigned int index, char value);
char *Setup_GetEntryPtr (unsigned int index);

On peut modifier les entrées du menu SET UP, partout accessible avec la combinaison de touches [SHIFT]+[MENU].

Variables de la mémoire Alpha

char *Alpha_GetData   (char variable, char *dest);
char Alpha_SetData    (char variable, char *src);
void Alpha_ClearAlpha (void);
void Alpha_ClearAll   (void);

Les variables de la mémoire Alpha sont A~Z, ainsi que r, têta et Ans.

Manipulation des chaînes de caractères étendus

int       MB_IsLead            (char character):
int       MB_ElementCount      (char *str);
int       MB_ByteCount         (char *str);
char      *MB_strcat           (char *dest, char *src);
char      *MB_strncat          (char *dest, char *src, int bytes);
char      *MB_strcpy           (char *dest, char *src);
char      *MB_GetSecondElemPtr (char *str);
short int MB_GetElement        (char *str);

Les caractères étendus sont stockés sur plus d'un octet, car la table de la calculatrice en est longue. La plupart de ces fonctions sont des adaptations des fonctions standard de manipulation des chaînes de caractères.

Notes et références

  1. , Dans la documentation du syscall Serial_ReadBytes, dest n'est pas un pointeur, mais cela reste invraisemblable. Le même phénomène se retrouve pour le paramètre src du syscall Serial_WriteBytes.