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 » C.Basic Projets
Sentaro21 Hors ligne Membre Points: 878 Défis: 0 Message

C.Basic Projets

Posté le 30/04/2017 11:08

Hello, everyone.

I am Sentaro21, and I am developing C.Basic, a Basic interpreter that allows high-speed execution of Basic programs while maintaining compatibility with genuine Casio Basic.

Here is an English site, by Krtyski, about the C.Basic project (I helped him with the translation, but it's still unfinished) :
https://egadget2.web.fc2.com/CBasic/Interpreter/CBasic_interpreter.html

The articles and various programs from this site served as a reference to evaluate the compatibility level of C.Basic. Results were not good every time I tested them, but compatibility increased over time.

These programs have been ported experimentally. Many thanks to their authors.

Block Tower (C.Basic version)
https://pm.matrix.jp/CB/CB_BlockTower.zip

Sudoku (C.Basic version)
https://pm.matrix.jp/CB/CB_Sudoku.zip

Maze Generator (C.Basic version)
https://pm.matrix.jp/CB/CB_MazeGene.zip

Graph 3D (C.Basic version)
https://pm.matrix.jp/CB/CB_Graph3D.zip

TokiTori (C.Basic version 25/11/2018)
https://pm.matrix.jp/CB/CB_Tokitori.zip
(added Save/Load feature)

Ice slider (C.Basic version 25/11/2018)
https://pm.matrix.jp/CB/CB_IceSlider.zip
(added Save/Load feature)

Clonelab (C.Basic version 25/11/2018)
https://pm.matrix.jp/CB/CB_Clonlab.zip
(added Save/Load feature)

Arkenstone (C.Basic version 25/11/2018)
https://pm.matrix.jp/CB/CB_Arkenstone.zip
(added Save/Load feature)

Aventura (C.Basic version 25/11/2018)
https://pm.matrix.jp/CB/CB_Aventura.zip
(added Save/Load feature)

Electricity (C.Basic version 10/2/2019)
https://pm.matrix.jp/CB/CB_Electric.zip
(added Save/Load feature)

Here are examples of programs that reach near-C performance :

BallGame (C.Basic version)
https://pm.matrix.jp/CB/CB_BallGame.zip

Asprin (C.Basic version)
https://pm.matrix.jp/CB/CB_Aspirin.zip


The C.Basic project is still yet to be completed, thus I would like to get your feedback.

This is the latest version of C.Basic 2.47 beta for Graph 35+USB/35+EII/75/85/95 (SD)
https://pm.matrix.jp/CB/CBASIC247beta02.zip (updated 11/12/2023)

This is the latest version of C.BasicCG 1.47 beta for Graph90+E/fx-CG10/20/50:
https://pm.matrix.jp/CB/CBASICCG147beta02.zip (updated 11/12/2023)

C.Basic manuals
https://gitlab.com/sentaro21/cbasic

Currently C.Basic exists thanks to this site.
Thank you very much.


Précédente 1, 2, 3 ··· 10 ··· 20 ··· 24, 25, 26, 27, 28, 29, 30, 31, 32 Suivante
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 27/08/2020 09:47 | #


Les nombres décimaux de C.Basic sont au format flottant, 0.01 est difficile à traquer. Ce sera plus simple si tu vas juste de 1 en 1 pour trouver. Soit c'est un float de 4 octets, soit c'est un double de 8 octets. Tu peux aussi envoyer des chaînes de caractères, ce sera plus facile à déchiffrer. Une fois que tu auras trouvé les données tu peux trouver l'en-tête et le footer. Ou lire le code de C.Basic !
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Farhi Hors ligne Membre Points: 1375 Défis: 0 Message

Citer : Posté le 27/08/2020 11:08 | #


En effet j'ai trouvé que le chiffre flottant était de 8 octets. Et actuellement j'essaye de convertir ces octets mais j'ai du mal à comprendre la comment ça fonctionne.
J'ai aussi essayer les chaînes de caractère mais cela ne fonctionne pas du tout de la même manière.
Maintenant ce qu'il reste à faire c'est trouver un moyen pour convertir 8 octets en float.
Merci pour ton message
"La créativité est contagieuse faites la tourner"
Albert Einstein
Kbd2 Hors ligne Membre Points: 269 Défis: 0 Message

Citer : Posté le 27/08/2020 11:16 | #


8 bytes is for storing a double-precision floating point number, and in the calculator would be stored as big-endian - info on doubles can be found here.
Farhi Hors ligne Membre Points: 1375 Défis: 0 Message

Citer : Posté le 27/08/2020 18:36 | #


Merci beaucoup Kbd2 !
Grâce à toi j'ai réussi à convertir les données en floattant
Voici le code pour ceux qui sont intéressés.
C.Basic:

1.01->A
Send(A,7)


Python:

import serial
import struct
arduino=serial.Serial("COM6",baudrate=38400,timeout=1)#port de l'arduino à régler en fonction de celui que vous utilisez
b=arduino.readline()
c=list(b)
c=c[8:] #Retire le header
data=bytes(c)
NbFloat=struct.unpack('>d', data)[0]


Arduino:


    #include <SoftwareSerial.h>

    SoftwareSerial serialCalc(10, 11); // RX, TX

    void setup()  
    {
        // Ouvre les ports serials
        Serial.begin(38400); //Pour la com avec l'ordi. Dont les ports sont Tx:1, Rx:0
        serialCalc.begin(38400); //Pour la com avec la calculatrice. Les  Donc les ports sont Tx:11, Rx:10 (ils sont définis juste au dessus)
    }

    void loop()
    {
        //si la calculatrice nous envoi quelque chose, alors on l'envoi sur l'ordi
        if(serialCalc.available())
            Serial.write(serialCalc.read());
        //si l'ordi nous envoi quelque chose, alors on l'envoi sur la calculatrice
        if(Serial.available())
            serialCalc.write(Serial.read());
    }


Voilà !
"La créativité est contagieuse faites la tourner"
Albert Einstein
Kbd2 Hors ligne Membre Points: 269 Défis: 0 Message

Citer : Posté le 28/08/2020 00:54 | #


Glad I could help
Redcmd Hors ligne Membre Points: 380 Défis: 7 Message

Citer : Posté le 07/09/2020 12:54 | #


Bug Report: "" commands are very slow
This is because the screen is refreshed everytime a new character is displayed, rather than after the entire string, like in normal CASIO Basic
Create a program like
"1234567890ABCDEFGHIJ"
"1234567890ABCDEFGHIJ"
"1234567890ABCDEFGHIJ"
"1234567890ABCDEFGHIJ"
"1234567890ABCDEFGHIJ"
"1234567890ABCDEFGHIJ"
"1234567890ABCDEFGHIJ"

Notice how every single character of each line is sent to the screen separately, instead of the entire line all at once
This ends up making C.Basic being slower than normal CASIO Basic
(Can be more easily seen when using a ScreenReceiver tool)
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 07/09/2020 13:14 | #


Usually C.Basic native rendering functions such as those from MonochromeLib are much faster. There might be options to Locate and LocateYX to not refresh the VRAM too.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Inikiwi Hors ligne Membre Points: 594 Défis: 8 Message

Citer : Posté le 31/08/2021 18:04 | #


il est ou le code source?
Redcmd Hors ligne Membre Points: 380 Défis: 7 Message

Citer : Posté le 31/08/2021 20:44 | #


On page 26
Brickcities Hors ligne Membre Points: 91 Défis: 9 Message

Citer : Posté le 07/01/2022 10:10 | #


Désolé si je ressors un topic du fin fond des abîmes mais, franchement, WAOUW

Du Casio Basic avec des graphismes fluides, des fonctions graphiques étendues, des switchs, elseIf, des sous-programmes prenant des arguments et renvoyant des valeurs, la possibilité d'utiliser plus de variables que A~Z, je n'aurai même pas oser en rêver quand j'ai commencé le Basic Casio (bon, ok, c'était il y a 15 ans ) ... et tu l'as fait !

Sans oublier l'éditeur qui ajoute pas mal de petites fonctionnalités. C'est juste incroyable comme travail. C'est bien simple, c'est la seule raison pour laquelle je viens de racheter une calculatrice après avoir crashé la mienne

Merci pour ce travail incroyable, qui me permet de rédécouvrir le plaisir du Casio Basic, tout en profitant de fonctionnalités que je me suis habitué à utiliser dans d'autres langages. Enfin fini de passer d'un programme à un autre avec des stockages dans des variables temporaires ou d'enchaîner des If imbriqués

En tous cas, je me vais me faire un plaisir de tester tout ça
Redcmd Hors ligne Membre Points: 380 Défis: 7 Message

Citer : Posté le 18/02/2022 05:28 | #


Bug report:
Mat Ans memory is not seperate from List Ans memory

running this code will assign [5,6,7,8] to Mat Ans

[[0,1][2,3]]
// [0,1]
// [2,3]
{5,6,7,8}
// 5
// 6
// 7
// 8
Mat Ans


(not to be confused with Ans, which is a variable)

Ajouté le 18/02/2022 à 05:31 :
I notice @Sentaro21 hasn't been on in a while
is there a way to contact him?


Also running
[[5,6
1->A
causes a Syntax ERROR
This because C.Basic tries to the find closing ], but instead finds 1, which causes a syntax error
In normal basic, the closing ] is optional
I did notice that having it at the end of the file causes no error
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 18/02/2022 09:00 | #


Yeah Sentaro is very busy IRL as far as I understand. CalcLoverHK has been maintaining documentation, but I don't think there's anyone other than Sentaro who can work on the code right now.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Brickcities Hors ligne Membre Points: 91 Défis: 9 Message

Citer : Posté le 24/01/2023 11:08 | #


Est-ce que quelqu'un aurait un exemple d'utilisation de DrawMat sur une calculatrice monochrome ? J'ai essayé de me baser sur les exemples dans la doc mais je n'ai jamais réussi à afficher quoi que ce soit :/
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 25/01/2023 18:33 | # | Fichier joint


Pour DrawMat, c'est très facile :

[[1,1,1]
 [1,0,1]
 [1,1,1]]→Mat B
DrawMat Mat B[1,1],X,Y,3,3

Affiche un petit carré avec un pixel blanc au milieu.

Maintenant si tu veux afficher des vraies images, tu t'en sortiras mieux avec _Bmp. Mettons que je veux afficher cette image de 16x16 :


Je convertis les pixels en bits (blanc=0, noir=1), et en les lisant ligne par ligne, de gauche à droite, je les groupe par 8 en entiers (le classique) ; je stocke le résultat dans une matrice d'octets, et j'utilise _Bmp :

[[15,0,31,128,27,192,16,200,47,164,45,171,16,64,16,64,47,160,64,16,95,208,160,40,160,40,160,40,96,48,63,224]]→Mat A.B
_Bmp VarPtr(Mat A),X,Y,16,16

C'est plus compact et il y a pas mal de fonctions qui acceptent ce format.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Brickcities Hors ligne Membre Points: 91 Défis: 9 Message

Citer : Posté le 01/02/2023 00:20 | #


Oups, je viens seulement de voir ton message, désolé
De fait, j'avais trouvé pour drawMat, mais le conseil de _bmp me sera très utile pour réduire la taille de mon programme Merci !

PS: Mais du coup, on est obligé d'avoir un multiple de 8 pour la longueur et la largeur ?
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 01/02/2023 08:05 | #


Brickcities a écrit :
PS: Mais du coup, on est obligé d'avoir un multiple de 8 pour la longueur et la largeur ?

Pour le stockage, tu es obligé de compléter chaque ligne pour atteindre un multiple de 8 (ie. chaque nombre dans la matrice est sur une seule ligne, si un nombre n'est pas complet en fin du ligne tu complètes avec des pixels blancs et tu commences la prochaine ligne au nombre suivant), par contre si tu mets une lrgeur qui n'est pas multiple de 8 dans _Bmp, il va afficher ce que tu veux, ie. ignorer les pixels blancs de remplissage.
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: 325 Défis: 2 Message

Citer : Posté le 28/05/2023 20:30 | #


Salut, je voulais savoir : comment contrôler le rafraîchissement de l'écran ? Je suis allé lire le manuel mais il n'y a pas d'explications précises.
Quelqu'un pourrait m'expliquer ?

Ce que j'aimerais c'est pouvoir contrôler le rafraîchissement pour que cela soit constant pour éviter que mes FPS changent en fonction du nombre d'infos à traiter
Mon projet du moment : Memen'Casio
Calcloverhk Hors ligne Membre Points: 358 Défis: 10 Message

Citer : Posté le 28/05/2023 20:45 | #


@Dimartino
It looks like you are looking for the TicksWait command. TicksWait accepts negative value alongside the positive one, and its usage is a bit different.

From C.Basic Wiki (https://cbasic.fandom.com/wiki/Commands/TicksWait):
If the number of ticks passed since the last Ticks[%]Wait <-value> was executed is smaller than |-value|, wait until it reaches |-value|.
Skips the pause otherwise, or if executing it for the first time.


Using the following program as a example:
Do
    <statements>
    TicksWait -8
LpWhile 1

Assume <statements> take 2 ticks to complete, then "TicksWait -8" will create 6 ticks pause such that the loop runs constantly at 16 fps. In other words, the duration of the pause created by "TicksWait -8" depends on the total time spent by the previous statements.
C.Basic Wiki Project progress as of 2024/2/12
   30%


Dimartino Hors ligne Maître du Puzzle Points: 325 Défis: 2 Message

Citer : Posté le 31/05/2023 11:35 | #


Salut, j'ai une nouvelle question : est-il possible de récupérer la vram pour la stocker dans une matrice ? Donc une matrice de 127x63 ?
Mon projet du moment : Memen'Casio
Lephenixnoir En ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 31/05/2023 12:11 | #


Oui : https://gitlab.com/sentaro21/cbasic/blob/master/FX/Manual_FR.txt#L234-235
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: 325 Défis: 2 Message

Citer : Posté le 31/05/2023 13:11 | #


Merci beaucoup, ça réduit mon temps de chargement entre les maps de 3 secondes à 0.1s !
Mon projet du moment : Memen'Casio
Précédente 1, 2, 3 ··· 10 ··· 20 ··· 24, 25, 26, 27, 28, 29, 30, 31, 32 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