Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » gint : un noyau pour développer des add-ins
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

gint : un noyau pour développer des add-ins

Posté le 20/02/2015 17:30

Ce topic fait partie de la série de topics du fxSDK.

En plus des options de programmation intégrée comme le Basic Casio ou Python, la plupart des calculatrices Casio supportent des add-ins, des programmes natifs très polyvalents avec d'excellentes performances. Les add-ins sont généralement programmés en C/C++ avec l'aide d'un ensemble d'outils appelé SDK.

Plusieurs SDK ont été utilisés par la communauté avec le temps. D'abord le fx-9860G SDK de Casio avec fxlib pour Graph monochromes (plus maintenu depuis longtemps). Puis le PrizmSDK avec libfxcg pour Prizm et Graph 90+E (encore un peu actif sur Cemetech). Et plus récemment celui que je maintiens, le fxSDK, dont gint est le composant principal.

gint est un unikernel, ce qui veut dire qu'il embarque essentiellement un OS indépendant dans les add-ins au lieu d'utiliser les fonctions de l'OS de Casio. Ça lui permet beaucoup de finesse sur le contrôle du matériel, notamment la mémoire, le clavier, l'écran et les horloges ; mais aussi de meilleures performances sur le dessin, les drivers et la gestion des interruptions, plus des choses entièrement nouvelles comme le moteur de gris sur Graph monochromes.

Les sources de gint sont sur la forge de Planète Casio : dépôt Gitea Lephenixnoir/gint

Aperçu des fonctionnalités

Les fonctionnalités phares de gint (avec le fxSDK) incluent :

  • Toutes vos images et polices converties automatiquement depuis le PNG, sans code à copier (via fxconv)
  • Un contrôle détaillé du clavier, avec un GetKey() personnalisable et un système d'événements à la SDL
  • Une bibliothèque standard C plus fournie que celle de Casio (voir fxlibc), et la majorité de la bibliothèque C++
  • Plein de raccourcis pratiques, comme pour afficher la valeur d'une variable : dprint(1,1,"x=%d",x)
  • Des fonctions de dessin, d'images et de texte optimisées à la main et super rapides, surtout sur Graph 90+E
  • Des timers très précis (60 ns / 30 µs selon les cas, au lieu des 25 ms de l'OS), indispensables pour les jeux
  • Captures d'écran et capture vidéo des add-ins par USB, en temps réel (via fxlink)

Avec quelques mentions spéciales sur les Graph monochromes :
Un moteur de gris pour faire des jeux en 4 couleurs !
La compatibilité SH3, SH4 et Graph 35+E II, avec un seul fichier g1a
Une API Unix/POSIX et standard C pour accéder au système de fichiers (Graph 35+E II seulement)

Et quelques mentions spéciales sur les Graph 90+E :
Une nouvelle police de texte, plus lisible et économe en espace
Le dessin en plein écran, sans les bordures blanches et la barre de statut !
Un driver écran capable de triple-buffering
Une API Unix/POSIX et standard C pour accéder au système de fichiers

Galerie d'add-ins et de photos

Voici quelques photos et add-ins réalisés avec gint au cours des années !



Arena (2016)Plague (2021)



Rogue Life (2021)



Momento (2021)



Communication avec le PC (cliquez pour agrandir)


Utiliser gint pour développer des add-ins

Les instructions pour installer et utiliser gint sont données dans les divers tutoriels recensés dans le topic du fxSDK. Il y a différentes méthodes de la plus automatique (GiteaPC) à la plus manuelle (compilation/installation de chaque dépôt). Le fxSDK est compatible avec Linux, Mac OS, et marche aussi sous Windows avec l'aide de WSL, donc normalement tout le monde est couvert

Notez en particulier qu'il y a des tutoriels de développement qui couvrent les bases ; tout le reste est expliqué dans les en-têtes (fichiers .h) de la bibliothèque que vous pouvez consulter en ligne, ou dans les ajouts aux changelogs ci-dessous.

Changelog et informations techniques

Pour tester les fonctionnalités et la compatibilité de gint, j'utilise un add-in de test appelé gintctl (dépôt Gitea Lephenixnoir/gintctl). Il contient aussi une poignée d'utilitaires d'ordre général.

Ci-dessous se trouve la liste des posts indiquant les nouvelles versions de gint, et des liens vers des instructions/tutoriels supplémentaires qui accompagnent ces versions.

VersionDateInfos supplémentaires
gint 2.10.02 Avril 2023
gint 2.9.021 Août 2022
gint 2.8.017 Mai 2022Effets dynamiques sur les imagesAPI de manipulations d'images
Overclock intégré
gint 2.7.119 Mars 2022Tutoriel capture des flux standards
gint 2.7.031 Décembre 2021
gint 2.6.029 Août 2021Tutoriel de capture vidéo par USB
gint 2.5.28 Juin 2021
gint 2.5.12 Juin 2021
gint 2.5.026 Mai 2021Intégration de fxlibc (dépôt) — Tutoriel de communication par USB
gint 2.4.027 Avril 2021Api GINT_CALL() pour les callbacks
gint 2.3.12 Février 2021
gint 2.3.029 Janvier 2021
gint 2.2.112 Janvier 2021
gint 2.2.011 Janvier 2021
gint 2.1.116 Septembre 2020
gint 2.1.021 Août 2020Polices UnicodeNouvelle API du moteur de gris
gint 2.0.3-beta10 Juillet 2020Modifications de l'API timer
gint 2.0.2-beta17 Juin 2020
gint 2.0.1-beta1er Juin 2020

Anecdotes et bugs pétés

Ô amateurs de bas niveau, j'espère que vous ne tomberez pas dans les mêmes pièges que moi.


TODO list pour les prochaines versions (2023-04-03)

gint 2.11
  1. Changements de contextes CPU. À reprendre du prototype de threading de Yatis pour permettre l'implémentation d'un véritable ordonnanceur. Demandé par si pour faire du threading Java.
  2. Applications USB. Ajouter le support de descripteurs de fichiers USB. Potentiellement pousser jusqu'à avoir GDB pour debugger.
  3. Support de scanf() dans la fxlibc. Codé par SlyVTT, plus qu'à nettoyer et fusionner.

Non classé

  • Regarder du côté serial (plus facile que l'USB) pour la communication inter-calculatrices (multijoueur) et ultimement l'audio (libsnd de TSWilliamson).
  • Un système pour recompiler des add-ins mono sur la Graph 90+E avec une adaptation automatique.
  • Support des fichiers en RAM pour pouvoir utiliser l'API haut-niveau sur tous les modèles et éviter la lenteur de BFile à l'écriture quand on a assez de RAM.



Précédente 1, 2, 3 ··· 10 ··· 20 ··· 30 ··· 40 ··· 50 ··· 60 ··· 69, 70, 71, 72, 73, 74 Suivante
Slyvtt Hors ligne Maître du Puzzle Points: 2309 Défis: 17 Message

Citer : Posté le 12/03/2023 18:25 | #


Superbe. En plus, il faut noter la qualité du pixel art dans la doc gint associée ...
Va falloir que tu nous fasses un joli tuto, when done car ça a l'air un tantinet velu en terme d'utilisation.

Bon courage.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Mb88 Hors ligne Labélisateur Points: 944 Défis: 3 Message
Slyvtt Hors ligne Maître du Puzzle Points: 2309 Défis: 17 Message

Citer : Posté le 12/03/2023 18:53 | #


Mb88 a écrit :
C'est du ASCII art
Tu as tout à fait raison mon clavier a fourché
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 14/03/2023 10:08 | #


Slyvtt a écrit :
Superbe. En plus, il faut noter la qualité du pixel art dans la doc gint associée ...
Va falloir que tu nous fasses un joli tuto, when done car ça a l'air un tantinet velu en terme d'utilisation.

Il faut au moins ce niveau de détail rien que dans ma tête sinon je rate des cas ! Il est super important d'avoir tout sous les yeux, au propre et au clair. Cela dit, tous les détails de ce header ne vous concernent pas, ils ne sont destinés qu'aux drivers USB et serial en gros. Vous, vous voyez uniquement les fonctions de lecture dans <gint/usb.h>, qui ont leurs détails subtils mais sont quand même bien plus simples.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Slyvtt Hors ligne Maître du Puzzle Points: 2309 Défis: 17 Message

Citer : Posté le 14/03/2023 11:16 | #


C’est moins sexy
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 16/03/2023 19:18 | #


Bon ben je voudrais dire, c'est compliqué ces bêtises. Je me dis que tout le monde n'a peut-être pas en tête en quoi ça consiste de développer un truc bas-niveau de ce genre, alors voilà un bout d'histoire...

TL;DR : J'avance mais ne vous fiez pas à l'absence de photos concrètes c'est dur.

Il y a deux problèmes majeurs : les cas particuliers (à la fois logiciels et matériels), et construire une API qui marche bien.

Les cas particuliers il y en a partout. Attendre qu'un bout de données arrive sur le module USB et lire des trucs c'est pas dur. Le faire de façon consistante sans jamais planter dans tous les scénarios ça l'est beaucoup plus ! Un cas particulièrement méchant est le suivant : le module USB de la calto reçoit les données par paquets de 2048 octets. Déjà, comment sait-on quand un envoi est fini ? Si je reçois moins de 2048 octets c'est clair que c'est la fin. Mais si je reçois exactement 2048 octets, impossible de savoir s'il y a une suite ou pas. En l'occurrence si le transfert se finit il faut que l'ordinateur envoie un paquet de plus avec zéro octets dedans pour bien clarifier qu'il n'y a plus rien (et devinez quoi, c'est pas très clair dans la norme USB quand et comment il faut en ajouter, du coup c'est pas par défaut dans libusb !).

Mais tout ça ne suffit pas. Voyez-vous, quand le buffer reçoit des données le module USB déclenche une interruption pour nous l'annoncer, et la première chose qu'on fait c'est de tester le bit "Buffer Status" qui nous indique si on a le droit d'aller lire le buffer (quand le module lit/écrit dans le buffer il nous bloque l'accès). Bon ben cas particulier : si le buffer est vide le bit "Buffer Status" ne passe pas à 1, autrement dit le module te dit en même temps "psst y'a des trucs à lire" et "t'as pas le droit de lire" (parce que le buffer est vide).

Et puis je rentre pas dans les détails juteux où du coup quand on reçoit un buffer complet de 2048 octets potentiellement ça peut répondre à plusieurs appels à usb_read si jamais l'utilisateur demande peut de données ; mais aussi l'inverse, un seul appel à usb_read peut manger plusieurs buffers complets si jamais l'utilisateur demande des grandes quantités de données. Et si on a un appel à usb_read qui vide tout pile le buffer, devinez quoi ? Encore un cas particulier !

Ces choses deviennent encore plus drôles quand on rajoute les questions d'API. Si à la fin de l'histoire le driver marche mais l'API est immonde ça sera toujours insupportable à utiliser. Un truc classique c'est qu'on veut (1) ne pas se lancer dans une lecture s'il n'y a rien à lire (ça bloquerait potentiellement indéfiniment, ce qui est un freeze, ce qui est super chiant à debugger pour tout le monde), et donc (2) quand on lit en boucle, savoir quand on aura fini. De la même façon que pour le buffer de 2048 octets la solution élégante c'est que tant que usb_read demande X octets et que j'ai X octets à donner, la lecture continue. Même si j'avais exactement X octets et que donc après la lecture il en reste 0, le driver ne passe pas à l'envoi suivant avec le PC. Il attend que l'utilisatrice demande encore 1 octets de plus, auquel cas il en renvoie 0 et il passe à l'envoi suivant. De cette façon l'utilisatrice peut appeler usb_read tant qu'elle récupère autant d'octets qu'elle en demande, et elle sait que l'envoi est fini une fois que usb_read en donne moins que demandé.

Tout ça c'est donc mignon mais c'est compliqué et donc on limite ce mécanisme à la version asynchrone de usb_read (celle pour les utilisateurs avancés). La version synchrone bien de base on veut qu'elle se comporte aussi simplement que possible pour cacher tous ces détails pour les programmeurs moins aventureux. Sauf que ça laisse plein de cas particuliers en plus ! Par exemple l'appel synchrone va passer plus agressivement à l'envoi suivant (ignorant la méthode décrite dans le paragraphe précédent), mais cette illusion peut casser si jamais on alterne entre des lectures synchrones et asynchrones, et j'en passe des meilleures.

En pratique ce qui se passe c'est que je lance l'add-in, je démarre la connexion USB, et là j'essaie d'envoyer des données avec fxlink. Parfois ça marche (c'est pas mal). Parfois ça plante, les données sont pas lues correctement et donc la commande est pas comprise comme il faut (ça ça va). Mais souvent, ça freeze et du coup y'a aucun log qui sort, et faut essayer de deviner quelle est la boucle qui finit jamais et pourquoi. Sachant que quand je dis "boucle" c'est pour simplifier ; parfois c'est des appels successifs qui finissent pas parce que l'interruption qui devait les arrêter a été ignorée parce que le bit "Buffer Status" n'était pas à 1...

Une fois le problème identifié généralement soit c'est une erreur stupide de code, soit c'est une erreur stupide de code parce que la série d'appels de fonctions ou le sens des variables dans le driver a changé 20 fois et qu'un bout a pas été adapté durant la 12ème mise à jour, soit c'est un comportement du module que je connaissais pas et qui remet presque systématiquement en cause le modèle avec lequel je travaille.

Et c'est ce changement permanent qui rend fou. Si vous regardez asyncio.h c'est détaillé au point de donner la nausée parce qu'il y a besoin d'avoir tous ces détails sous les yeux en permanence pour vérifier scrupuleusement que toutes les fonctions se comportent comme exigé par le dessin et pas autrement. Quand de la logique asynchrone s'en mêle y'a juste pas moyen d'y aller à l'intuition. Après avoir un tel détail c'est satisfaisant plus qu'autre chose, c'est un bonne façon de vérifier qu'on comprend ce qu'on fait et une fois que c'est propre ça solidifie tellement le code c'est un délice.

Mais ce qui martèle le cerveau, c'est devoir faire un changement mineur, et soudain il faut adapter tout le code. À chaque fois je suis obligé de réécrire une bonne partie de asyncio.h et de la partie lecture dans gint/usb.h pour m'assurer que j'ai bien mesuré toutes les implications du changement sinon je mélange un détail de la nouvelle version avec un détail incompatible d'une version précédente. Il faut ensuite modifier le code, qui couvre environ 500 lignes pour la partie centrale, dont la majorité ne nécessite aucun changement (donc je passe assez vite dessus) sauf un petit détail dans un coin (que j'oublie et qui bien sûr créera des bugs trois itérations plus tard).

Là je vais pas vous mentir ça fait une semaine que je tourne en boucle et chaque nouvelle version ne marche pas parce qu'il y a toujours un cas particulier où soit il y a un problème prévisible que j'ai pas vu venir, soit le module matériel se comporte pas comme je le pensais. Et à chaque fois faut tout réécrire, hacker n'importe comment pour essayer de récupérer les logs quand ça freeze, et se taper la tête quand inévitablement une erreur stupide se révèle. x)

Je sais que je progresse mais je sais pas combien de temps ça va prendre pour converger...

(Ah et pendant que j'y suis : lisez pas les headers que j'ai lié trop en détail, tout ce qui trait à la lecture va pas mal changer au prochain commit. Et probablement de nouveau à celui d'après.)
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Slyvtt Hors ligne Maître du Puzzle Points: 2309 Défis: 17 Message

Citer : Posté le 16/03/2023 20:20 | #


C'est clair que c'est une sacrée aventure le développement d'un driver/d'une API.
Il faut vraiment de la patience et de la méthode.
Merci à toi d'avoir pris le temps de faire un long post "d'état d'avancement", car c'est vrai qu'on a du mal à se représenter ce que cela signifie.
Personnellement j'ai bien pu voir durant mon essai sur le serial, j'ai absolument rien pu en tirer, clairement pas le niveau pour faire ça, alors je te tire mon chapeau.
Allez, bon courage à toi, et je ne doute pas que tu vas nous mitonner un truc aux petits oignons malgré toutes ces galères.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 17/03/2023 09:55 | # | Fichier joint


Le LSP clangd permet d'accéder à de nombreux outils et fonctionnalités puissantes dans votre éditeur de texte favori.



Pour utiliser clangd avec gint, créez un fichier compile_flags.txt à la racine de votre projet. Vous pouvez écrire à l'intérieur de ce fichier les flags passés à clangd, un flag par ligne.
-Wall
-Wextra
-std=c99

Vous aurez besoin de spécifier une des calculatrices ciblée par macro...
-DFX9860G
#ou -DFXCG50

... ainsi que le chemin d'inclusion des headers utilisés par gint. Je recommande d'utiliser les fichiers du fxsdk directement. Vous pouvez les localiser avec locate ou find (sudo updatedb; plocate gint/defs/types.h).
-I/home/kdx/.local/share/fxsdk/sysroot/sh3eb-elf/include/
-I/home/kdx/.local/share/fxsdk/sysroot/lib/gcc/sh3eb-elf/11.1.0/include/

Voici mon compile_flags.txt final :
-std=c99
-Wall
-Wextra
-DFXCG50
-I/home/kdx/.local/share/fxsdk/sysroot/sh3eb-elf/include/
-I/home/kdx/.local/share/fxsdk/sysroot/lib/gcc/sh3eb-elf/11.1.0/include/

Notez que mon nom d'utilisateur est "harcodé" ici, mais c'est vraiment rapide à modifier si vous êtes un contributeur et vous pouvez simplement ajouter compile_flags.txt à votre .gitignore après l'avoir commit.

Malgrès le fait que cette solution est brutale, je la partage pour qu'elle ne se perde pas. Si quelqu'un en trouve une plus propre, je mettrai à jour ce message en ajoutant un lien ci-dessous.
ouais ouais
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 17/03/2023 10:01 | #


Pas mal. Pour obtenir le chemin on peut demander au fxSDK pour éviter la recherche :

% fxsdk path include
/home/el/.local/share/fxsdk/sysroot/sh3eb-elf/include
% echo "$(fxsdk path sysroot)/lib/gcc/sh3eb-elf/11.1.0/include/
/home/el/.local/share/fxsdk/sysroot/lib/gcc/sh3eb-elf/11.1.0/include/

Sinon on pourrait le faire générer. La difficulté c'est qu'il y a à la fois des flags du SDK (genre -DFXGC50) et des flags de l'utilisateur.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 17/03/2023 10:06 | #


Selon la doc, il y a un moyen pour que CMake génère compile_commands.json automatiquement. Je n'ai pas creusé, préférant gérer ce type de configuration à la main. Mais si tu veux l'automatiser pour tous les utilisateurs, ça devrait se faire.

https://clangd.llvm.org/design/compile-commands#compilation-databases a écrit :
a file named compile_commands.json listing commands for each file. Usually generated by a build system like CMake.

ouais ouais
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 19/03/2023 14:50 | #


Alright, donc update sur l'USB pour résumer ce qui s'est passé récemment ! @RDP

J'ai eu pas mal de requêtes demandant à améliorer le driver USB pour supporter les transferts dans le sens PC → calto (jusqu'ici seul le sens calto → PC était supporté). J'ai fait pas mal de progrès sur ce point :

  • J'ai d'abord consolidé le driver USB (qui n'était qu'un prototype !), notamment en introduisant des outils de communication asynchrone. L'asynchrone ça consiste en gros à faire les communications en fond avec des notifications quand les messages arrivent et partent. C'est super puissant et ça sera utile pour le driver série/3-pin
  • J'en suis à ~90% du code de lecture à proprement parler ; toute la structure est fixée à quelques briques près, et l'API utilisateur est faite aussi (à cet endroit de <gint/usb.h>).
  • J'ai amélioré fxlink avec un mode TUI (photo ci-dessous) qui permet d'envoyer des messages et aide énormément pour debugger. Dans le même temps j'ai poli l'API de fxlink ; dans le futur il sera possible de s'en servir comme bibliothèque, pour ceux d'entre vous qui veulent faire de l'USB mais ne savent pas comment écrire la partie PC.

Actuellement sur la branche dev c'est utilisable (avec fxlink/gintctl comme démo), mais pas encore très user-friendly vu qu'il n'y a pas de tutorial. Vous êtes invité·es à essayer si ça vous branche !



Image : fxlink envoie la commande /echo xyz (fenêtre "Console" en bas à gauche),
la calculatrice reçoit la commande (avec la trace "Command is..." en bas de l'écran)
et répond avec le texte xyz (fenêtre "Text output from calculators" en haut à gauche).

Ça fait très longtemps que je n'ai pas publié une nouvelle version de gint, ça arrivera sans doute une fois cette fonctionnalité finie (et dans la suivante le scanf() de SlyVTT et les projets mono/CG sans doute).
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dimartino Hors ligne Maître du Puzzle Points: 310 Défis: 2 Message

Citer : Posté le 19/03/2023 15:42 | #


Ehh beh, ça m'a l'air incroyable tout ça !
Mon projet du moment : Memen'Casio
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 19/03/2023 16:57 | #


C'est assez hype en effet ! La démo ne fait pas honneur au temps qu'il a fallu passer dessus, mais je suis sûr que vous trouverez des trucs plus flashy à faire avec. x3
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Pokexpert30 Hors ligne Membre Points: 200 Défis: 0 Message

Citer : Posté le 28/03/2023 16:10 | #


Je viens depuis ta vidéo tutube. Il s'en est passé des trucs depuis que j'ai eu mon bac en 2014 et donc abandonné l'univers casio. En principe je suis devenu ingé en informatique, mais vous continuez a etre de grands malades a mes yeux.

Edit : putain ça fait dix ans jour pour jour que j'ai créé ce compte!
Graph 35/75 (Sh4) ( 35+ Tweakée)
Projets que je soutiens
Parmis tant d'autres
Pokemon Jade de dododormeur
Minecraft de limachi
Yu-gi-oh! de intelligide
Fix-os de kristaba

Baston!
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 28/03/2023 16:25 | #


Hey 10 ans sur Planète Casio ça se fête !

La valeur des calculatrices graphiques comme tremplin vers l'informatique continue de se justifier à mes yeux
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Pokexpert30 Hors ligne Membre Points: 200 Défis: 0 Message

Citer : Posté le 28/03/2023 16:30 | #


Bof le dev m'a vite cassé les burnes, je suis resté fan de la meme chose depuis que j'ai 7 ans et que j'ai supprimé DOS sur un pc sous win 3.1 :
apprendre en cassant des trucs. Oui je suis admin systeme linux
Graph 35/75 (Sh4) ( 35+ Tweakée)
Projets que je soutiens
Parmis tant d'autres
Pokemon Jade de dododormeur
Minecraft de limachi
Yu-gi-oh! de intelligide
Fix-os de kristaba

Baston!
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 28/03/2023 16:52 | #


Aaah on est content que vous soyez là. Tu tombes bien d'ailleurs j'ai cassé un truc ou deux avec un serveur VNC et...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Pokexpert30 Hors ligne Membre Points: 200 Défis: 0 Message

Citer : Posté le 28/03/2023 21:28 | #


Lephenixnoir a écrit :
Aaah on est content que vous soyez là. Tu tombes bien d'ailleurs j'ai cassé un truc ou deux avec un serveur VNC et...


Graph 35/75 (Sh4) ( 35+ Tweakée)
Projets que je soutiens
Parmis tant d'autres
Pokemon Jade de dododormeur
Minecraft de limachi
Yu-gi-oh! de intelligide
Fix-os de kristaba

Baston!
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 02/04/2023 00:16 | #


Nouvelle version : gint 2.10.0

Release associée du fxSDK : fxSDK 2.10.0
Release associée de la fxlibc : fxlibc 1.4.5

Une de plus grosses versions du projet, puisque gint 2.9.0 a plus de 6 mois... donc pas mal de changements !

Bien sûr la fonctionnalité phare est le support de la communication PC → calculatrice via USB, qui étend largement les possibilités de l'USB. Ce changement aura notamment beaucoup consolidé le driver (qui n'était qu'un prototype avant...) ainsi que l'API de <gint/usb.h>. Beaucoup de choses se sont développées côté PC avec fxlink, voyez les notes de publication du fxSDK pour les détails.

Changements majeurs :
  • Ajout de la communication PC → calculatrice dans le driver USB.
  • Support de l'overclock sur toutes les Graph mono (par SlyVTT).
  • Amélioration de l'écran System ERROR avec possibilité de sortir sans RESET (détails ici).
  • Ajout d'une combinaison de touches SHIFT + 7 + 3 + AC/ON pour abort() en cas de boucle infinie.
  • Support de la Graph 85 Slim et son clavier permuté (par calamari).
  • Support pour Add-In Push de circuit10 (pas encore publié, voir les notes de publication du fxSDK).

Changements mineurs :
  • Ajout d'une fonction dgetpixel() pour lire les pixels dans la VRAM.
  • Ajout d'une fonction dwindow_set() permettant de clip les fonctions de rendu de gint à n'importe quel rectangle et pas juste à l'écran complet.
  • Ajout du syscall SetQuitHandler() (sans pour autant résoudre le problème des sorties ambiguës des applications, pour l'instant).
  • Ajout d'un filtre clavier keydev_set_async_filter() permettant de pré-filtrer les événements clavier avant qu'ils ne soient présentés à pollevent(). Utilisé notamment pour interrompre les programmes avec AC/ON dans PythonExtra.
  • Ajout de la fonction rename() sur Graph 90+E.
  • Préparation de l'implémentation future du driver série (avec l'aide de SlyVTT).

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Yannis300307 Hors ligne Membre Points: 276 Défis: 0 Message

Citer : Posté le 02/04/2023 11:35 | #


Cool une nouvelle version du FxSDK !! Par contre, j'ai un problème à l'installation car il ne trouve pas ncurses...
WOW ! Mais qu'est-ce-que je vois ??!! Une extension VS Code qui permet de simplifier le développement sur calculatrices ??!! C'est ici : Casio Dev Tools. C'est incroyable ! C'est prodigieux !
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 02/04/2023 11:36 | #


Si tu es sous Debian/Ubuntu ou dérivé, essaie d'installer le paquet ?

% sudo apt install libncurses-dev

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Précédente 1, 2, 3 ··· 10 ··· 20 ··· 30 ··· 40 ··· 50 ··· 60 ··· 69, 70, 71, 72, 73, 74 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 46 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd