Seuls les membres ayant 30 points peuvent parler sur le chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Casio Basic Web Interpreter
Krevo_Hors ligneMaître du PuzzlePoints: 373 Défis: 2 Message

Casio Basic Web Interpreter

Posté le 29/08/2014 15:06

Je vous présente ici mon projet "Casio Basic Web Interpreter" qui a débuté en 2014 et dont le développement se poursuis encore actuellement.

Il s'agit d'un interpréteur pour le langage basic des calculatrices Casio.
Le truc c'est que c'est un interpréteur en mode web, le rendu (=écran de la calculatrice) se fait sur un canvas HTML5.

Donc c'est ici => Casio Basic Web Interpreter



ATTENTION : ce que je partage avec vous est dans une version "alpha", il manque encore beaucoup de choses...
J'ai mis pleins de programmes en exemple.

En vrac la liste des instructions supportées :

[color1] Plot
[color1] PlotOn
PlotOff
PlotChg
[color1] PxlOn
PxlOff
PxlChg
PxlTest
[color1] Line
[color1] [sketchMode2] F-Line
[color1] [sketchMode2] Horizontal
[color1] [sketchMode2] Vertical
[color1] [sketchMode2] Circle
Plot/Line-Color color1
S-L-Normal
S-L-Dot
S-L-Broken
S-L-Thick
S-L-Normal
S-L-Thin
Cls
ClrText
ClrGraph
BG-Pict
BG-None
StoPict
RclPict
AxesOn
AxesOff
LabelOn
LabelOff
Isz
Dsz
Lbl
Goto
Prog
Return
Stop
Mcl
Range
ViewWindow
Menu
Locate
Text
expr->variable
expr->variableStart~variableEnd
variable
"string"
?->variable
"string"?->variable
Ran#
RanInt#
GetKey
MOD(
Int
Intg
Frac
Deg
Rad
Grad
sin
cos
tan
Rec
Pol
Ans
+
-
*
/
=> (If)
If/Then/Else/IfEnd
<=
>=
=
<> (or !=)
<
>
And/Or/Xor/Not
(expr)
-expr
Do/LpWhile
While/WhileEnd
For/Next
Break

{1,2,3,4}->List n
List n->List m
List Ans
x->Dim List n
Dim List n
Filen
Seq(
x->List n[expr]
List n
List n[expr]
ClrList
ClrList n
Sum list
Prod list
Mean(list
Median(list
Max(list
Min(list
SortA(list
SortD(list
Fill(value,list)
Augment(list,list)
Cuml list
?List list
Percent list
RanInt#(min,max,nb)
RanList#(int)

[[1,2,3][4,5,6]...]->Mat n
Mat n
Mat Ans
{l,c}->Dim Mat n
Dim Mat i
x->Mat n[expr,expr]
Mat n[expr,expr]
Mat n->Mat m

1 color can be Black, Blue, Red, Magenta, Green, Cyan or Yellow
2 sketchMode can be SketchNormal, SketchThick, SketchBroken, SketchDot, SketchThin


Vous trouverez les sources sur GitHub.

A bientôt.
Krevo_


Pages : Précédente1, 2, 3, 4, 5, 6, 7, 8Suivante
Krevo_Hors ligneMaître du PuzzlePoints: 373 Défis: 2 Message

Citer : Posté le 14/01/2019 13:15 | #


14/01/2019 :
- retouche sur PxlTest pour accepter avec et sans parenthèses (et même avec seulement la parenthèse du début)

Ajouté le 14/01/2019 à 14:09 :
Sentaro21 a écrit :
Thanks!
I'm looking forward to it.


A speed adjust button is hidden on the right of the "STOP !" button

And for @Lephenixnoir debug mode is now false by default and a "Debug On/Off" button is hidden ... because I always forget to set debug mode to false before uploading to the public website.... (and Firefox is much much slower when debug mode is On). For information, this debug mode is just console.logging a lot of debug messages.
Découvrez mon projet principal : Casio Basic Web Interpreter, le basic Casio dans votre navigateur web !
Sentaro21Hors ligneMembrePoints: 641 Défis: 0 Message

Citer : Posté le 14/01/2019 14:47 | #


Krevo_ a écrit :
A speed adjust button is hidden on the right of the "STOP !" button .

Thanks!

Hmm?
Where is it?
Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Krevo_Hors ligneMaître du PuzzlePoints: 373 Défis: 2 Message

Citer : Posté le 14/01/2019 15:01 | # | Fichier joint


As a 'Master of the puzzle', I can found hidden things ... and also hide things very well


Découvrez mon projet principal : Casio Basic Web Interpreter, le basic Casio dans votre navigateur web !
Sentaro21Hors ligneMembrePoints: 641 Défis: 0 Message

Citer : Posté le 14/01/2019 15:22 | #


Wow!
This is a very useful feature!
Thanks!!
Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
LephenixnoirEn ligneAdministrateurPoints: 16422 Défis: 140 Message

Citer : Posté le 14/01/2019 18:15 | #


And for @Lephenixnoir debug mode is now false by default and a "Debug On/Off" button is hidden ...

Ah yes, I had noticed about these logs (I even used them once), I was wondering about the performance too. A rough estimate would be a few ms for each operation. This is quite fast, well done!

As a 'Master of the puzzle', I can found hidden things ... and also hide things very well

Ha ha, didn't spot this one! Using people's tricks against themselves.

Sentaro21 a écrit :
This is a very useful feature!

Call it C.Basic emulation !
Sentaro21Hors ligneMembrePoints: 641 Défis: 0 Message

Citer : Posté le 15/01/2019 10:23 | #


@Krevo_
Is it possible to set the timeout to zero?
What happens if set the timeout to zero?

@Lephenixnoir
Also C.Basic may be an emulation of Basic Casio especially with 90+E.
Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
LephenixnoirEn ligneAdministrateurPoints: 16422 Défis: 140 Message

Citer : Posté le 15/01/2019 12:19 | #


Sentaro21 a écrit :
Also C.Basic may be an emulation of Basic Casio especially with 90+E.

It's not just an emulation, it's a huge upgrade!
Sentaro21Hors ligneMembrePoints: 641 Défis: 0 Message

Citer : Posté le 15/01/2019 13:53 | #


Thanks!
Perhaps it's not an emulation but a simulation.
Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Krevo_Hors ligneMaître du PuzzlePoints: 373 Défis: 2 Message

Citer : Posté le 16/01/2019 17:43 | #


Sentaro21 a écrit :
@Krevo_
Is it possible to set the timeout to zero?
What happens if set the timeout to zero?


I've uploaded a modified version where you will be able to choose 0ms as 'timeout' value.
Nothing really special happens, It seems to be a little bit faster than "1 ms" timeout.

But I should do some more precise calculations.

Timers (as used in setTimeOut() in javascript) are not very accurate. I will probably rewrite the use of setTimeOut() by a sort of "trampoline" function. Currently, I avoid to call executeNextLine() recursively because the maximum call stack will be exceeded.

Don't forget that this feature of adjusting speed is experimental.

Ajouté le 16/01/2019 à 19:32 :
ATTENTION : les programmes qui utilisent Text() doivent être executés en basse résolution. D'ailleurs je pense rajouter des directives/pragma pour forcer tel ou tel mode.

ATTENTION 2 : le programme "Bool. table" est actullement HS car l'introduction des couleurs a aussi introduit des bugs et j'ai donc encore du travail pour que tout fonctionne à merveille...
Découvrez mon projet principal : Casio Basic Web Interpreter, le basic Casio dans votre navigateur web !
Sentaro21Hors ligneMembrePoints: 641 Défis: 0 Message

Citer : Posté le 17/01/2019 08:07 | #


Thanks!
I understood a little that Java's time management is not easy.

By the way,
I try "Maze generator" with real calculator.
The drawing result seems to be a little different.
How is Range different from ViewWindow?

Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Krevo_Hors ligneMaître du PuzzlePoints: 373 Défis: 2 Message

Citer : Posté le 17/01/2019 08:34 | #


I tried to, some times ago. It means my interpreter is not exactly like real hardware on this point (Plot/Line).

To get rid of these problems you can replace
Plot A*5,(B+C)*5
Plot (A+1)*5,(B+1-C)*5
Line


by

F-Line A*5,(B+C)*5,(A+1)*5,(B+1-C)*5


And 'Range' is exactly the same as 'ViewWindow' (but for very old calc). I generate the same opcode for these 2 instructions.

Concerning timers in JavaScript (not Java), accuracy is browser dependant. Anything below 4ms won't be as precise as I ask. The function will be called but it may be after 7ms or even more....

Thanks for testing. Anything said here helps me to make progress.
Découvrez mon projet principal : Casio Basic Web Interpreter, le basic Casio dans votre navigateur web !
Sentaro21Hors ligneMembrePoints: 641 Défis: 0 Message

Citer : Posté le 17/01/2019 09:21 | #


Thanks!
and I'm sorry, it was Javascript.

I also understood that Range is the same as ViewWindow.
So,I changed to F-Line and it works well.
When changing ViewWindow to the following value, it was able to draw the full screen.
ViewWindow 0,126,0,62,0,0


This is the conversion formula used in C.Basic.
// screen  coordinates.
// px:(1~127) pixel
// py:(1~63)  pixel

// ViewWindow coordinates
// X:real number
// Y:real number

Xdot = (Xmax-Xmin)/(126);
Ydot = (Ymax-Ymin)/( 62);

from screen to ViewWindow coordinates.
X = (    px-1)*Xdot + Xmin ;
Y = ( 62-py+1)*Ydot + Ymin ;

from ViewWindow to screen coordinates.
px =     1 + ( (X-Xmin)/Xdot + 0.5 ) ;
py =  62+1 - ( (X-Ymin)/Ydot - 0.49999999999999 ) ;

for 90+E, 126 and 62 are tripled to 378 and 186.
Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Krevo_Hors ligneMaître du PuzzlePoints: 373 Défis: 2 Message

Citer : Posté le 19/01/2019 11:59 | #


Ajouts récents :
- directives #lowres, #hires, #black&white, #blue&green, #multicolor qui forçent le changement de résolution ou de palette
- fix exemple "Bool. table" (qui n'affichait que la ligne de titre et le dernier chiffre en bas à droite) en revoyant le système de changement de couleurs sur la police graphique
- ajout fonction Circle(x,y,r) (oui bon c'est comme ça, au passage, juste histoire de faire un cercle avec l'algo de Bresenham)

Bon, je poursuis .... j'ai encore beaucoup de choses à faire dont certains trucs qui nécessitent un peu de temps.

Ajouté le 23/01/2019 à 13:29 :
- ajout boucle For/Next
- ajout Break
- réécriture de Do/LpWhile et While/WhileEnd (ces boucles ne respectaient pas le timer qui cadence l'execution des instructions et étaient donc paradoxalement trop rapides. + le fait qu'elles n'était pas "Breakable")

Du coup, avec les changements récents, l'exemple Maze Generator s'écrit tout simplement :
ViewWindow 0,126,0,62,0,0
For 0->B To 13
  For 0->A To 25
    RanInt#(0,1)->C
    F-line 5A,5(B+C),5(A+1),5(B+1-C)
  Next
Next


Ajouté le 25/01/2019 à 21:46 :
- ajout ClrGraph, AxesOn et AxesOff
Découvrez mon projet principal : Casio Basic Web Interpreter, le basic Casio dans votre navigateur web !
Sentaro21Hors ligneMembrePoints: 641 Défis: 0 Message

Citer : Posté le 26/01/2019 08:03 | #


I'm happy to implemented For/Next as it is used frequently.
Maze Generator works the same with Basic Casio.

By the way,
It seems that the execution speed of the loop is little slow at default.
However it is no problem as speed adjustment can be used.
Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Krevo_Hors ligneMaître du PuzzlePoints: 373 Défis: 2 Message

Citer : Posté le 26/01/2019 18:17 | #


@Santaro21: Thanks for your encouragements. I've changed the default from 10ms to 15ms, thus making it a little slower by default... done that because, it should look like real hardware by default (and I know that you have the speed adjust button to do what you want/need).

By the way, I've a little TamperMonkey (equiv. of GreaseMonkey) script, that always show developpers buttons :

// ==UserScript==
// @name         Casio Web Basic Interpreter - Show developper buttons
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @include      http://basic.crevola.org/
// @require      http://code.jquery.com/jquery-3.3.1.min.js
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    $("#devButtons").show();
})();


For/Next loops : it could have been implemented earlier but I wanted to solve the fact that Do/LpWhile and While/WhileEnd loops were too fast (because not using the timer) and were not Breakable. Sure It was easy to implement at first, but now I've a second (more complex) implementation that I use for all kind of loops (For/Next, Do/LpWhile and While/WhileEnd).

And YES it was something really missing. I currently try to open existing programs and determine what is used frequently and what is missing. Sure, I've done nice progress since this november, 3 months ago, ... but I've got so much to do .... don't know if it will take months or years.
Découvrez mon projet principal : Casio Basic Web Interpreter, le basic Casio dans votre navigateur web !
Sentaro21Hors ligneMembrePoints: 641 Défis: 0 Message

Citer : Posté le 27/01/2019 13:53 | #


Krevo_ a écrit :
By the way, I've a little TamperMonkey (equiv. of GreaseMonkey) script, that always show developpers buttons :
Thanks!
I installed it on my Chrome.
This is very useful!

If possible,
I also want to see the execution of perfect no-wait.

In case of C.Basic development,
At first,just a simple program works,
Almost of the game program uploaded here did not worked.
Because there are many strange specifications of Basic Casio,
keeping compatibility is very difficult.
About 4 years lator now, the number of game programs that can be played has increased.

I'm pleased if there is something I can help you with the development experience so far.


Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Krevo_Hors ligneMaître du PuzzlePoints: 373 Défis: 2 Message

Citer : Posté le 01/02/2019 10:51 | #


News du 31/01 :
- ajout constante π
- correction bug sur sin / cos / tan, par exemple cos 0 donnait 0 au lieu de 1 :-(

News du 01/02 :
- légère retouche sur boucle For, For 1->A To 187 Step 5 ne s'arrêtait pas (ça faisait 1, 6, .... 186, 191, .... et le le but de 187 n'était jamais atteint mais dépassé) ... alors qu'en vrai ça s'arrête quand la valeur est dépassée.

News du 08/02 :
- (presque fini) Ajout de ce que j'appelle les sketchMode : SketchNormal, SketchThick, SketchBroken, SketchDot, SketchThin devant les commandes graphiques + S-L-Normal, S-L-Dot, .... à l'occasion modif du programme d'exemple "Lines" pour dessiner des lignes avec un style choisi au hasard. Ajout également d'un programme "Football Pitch" fortement inspiré de "IMG'FOOT", programme qui dessine le terrain de foot de Fifaa19 de Manolo, merci à lui.

Découvrez mon projet principal : Casio Basic Web Interpreter, le basic Casio dans votre navigateur web !
ManoloHors ligneMembrePoints: 910 Défis: 13 Message

Citer : Posté le 09/02/2019 00:35 | #


Série, c'est un plaisir de t'avoir aidé
Sentaro21Hors ligneMembrePoints: 641 Défis: 0 Message

Citer : Posté le 09/02/2019 12:40 | #


@Krevo_
I'm happy to see steady progress.
If Mat andDrawStat can be added, Tetris seems to work.

@Manolo
In C.Basic a problem was found that the image generated by Fifaa 19 can not be used in the main program.
I will fix it now.

Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
ManoloHors ligneMembrePoints: 910 Défis: 13 Message

Citer : Posté le 09/02/2019 13:30 | #


Ah ! For me, it hasn't error...
Krevo_Hors ligneMaître du PuzzlePoints: 373 Défis: 2 Message

Citer : Posté le 09/02/2019 19:52 | #


Each new program we test / use .... make us progressing :-)

Ajouté le 15/03/2019 à 13:31 :
Bon, ça suffit la pause ... faut que je reprenne les devs là.
Découvrez mon projet principal : Casio Basic Web Interpreter, le basic Casio dans votre navigateur web !
Pages : Précédente1, 2, 3, 4, 5, 6, 7, 8Suivante

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2019 | Il y a 131 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