[why?] bcasm -- language assembleur pour Basic Casio
Posté le 20/08/2021 12:16
Un projet minuit passé. Ça faisait longtemps
bcasm est un petit language et assembleur Basic Casio, qui traduit du code syntaxe assembleur en Basic Casio exécutable on-calc.
bcasm est restreint by design, et inspiré par le jeu
TIS-100.
Le prototype est fonctionnel, voici le meilleur jeu de tous les temps porté en bcasm :
dumb.asm
;dumbasm clicker
MOV 0 S
;draw position
MOV 1 X
MOV 1 Y
MOV 0 ANS
;main loop
LBL A
; display score
LOC
#include "waitkey.asm"
; increase score
MOV S ANS
ADD 1
MOV ANS S
JMP A
waitkey.asm
;wait for release
LBL R
MOV GTK ANS
JEZ R
;wait for press
LBL P
MOV GTK ANS
JNZ P
Pour assembler ce code rien de plus simple, une ligne suffit !
$ bcasm dumb.asm
0->S
1->X
1->Y
0
Lbl A
Locate X,Y,Ans
Lbl R
Getkey
Ans=>Goto R
Lbl P
Getkey
Ans=0=>Goto P
S
Ans+1
Ans->S
Goto A
bcasm écrivant sur STDIN, vous pouvez rediriger sa sortie dans un fichier.
$ bcasm dumb.asm > dumb.txt
Vous pouvez maintenant connecter votre calto et transférer dumb.txt dans sa mémoire secondaire !
Une fois la calculatrice ejectée, rendez vous dans le menu PRGM et utilisez LOAD pour charger dumb.txt (F6→F4). Enjoy!
Les sources et instructions d'installation sont disponibles sur SourceHut avec un miroir sur le Gitea de Planète Casio.
bcasm sur SourceHut
Miroir sur le Gitea de Planète Casio
Liste des instructions bcasm
Cliquez pour recouvrir
#include
NOP
MOV
ADD
SUB
MUL
DIV
NEG
LBL
JMP
JEZ
JNZ
JMZ
JLZ
CLS
DSP
LOC
Partagez vos « programmes » bcasm ici, pour contribuer au sentiment de
-- Déso pas déso @RDP
Citer : Posté le 20/08/2021 12:17 | #
Ah ben c'est malin tiens, tu trouves que le Basic a trop de structures de contrôle comme ça ?
Citer : Posté le 20/08/2021 13:16 | #
poggers
Citer : Posté le 20/08/2021 15:35 | #
Ah ben c'est malin tiens, tu trouves que le Basic a trop de structures de contrôle comme ça ?
Je veux montrer au monde que goto est l'ultime structure de contrôle surtout !
poggers
yes sir
J'ai beaucoup trop joué avec bcasm aujourd'hui, ce qui m'a mis en retard sur le reste de mes plans sigh. J'ai corrigé un bug et ajouté l'instruction MOD <src> pour les modulos. J'ai aussi programmé deux nouveaux exemples, prime.asm et n.asm.
prime.asm affiche à l'écran tous les nombres premiers entre 3 et 100, et n.asm est une petite démo avec entrée utilisateur. Vous pouvez voir les sources sur sr.ht, avec coloration syntaxique s'il vous plaît !
https://git.sr.ht/~kikoodx/bcasm/tree/main/item/examples/prime.asm
https://git.sr.ht/~kikoodx/bcasm/tree/main/item/examples/n.asm
Ce sera intéressant de voir jusqu'où je peux pousser cet abus.
Citer : Posté le 20/08/2021 15:46 | #
Probablement où tu veux vu que c'est Turing-complet.
Mais un truc stylé serait de programmer un interpréteur de ce language en add-in, de montrer que c'est plus rapide que le programme Basic généré lancé dans PRGM, et de l'appeler ASM.Basic
Citer : Posté le 20/08/2021 16:59 | #
Probablement où tu veux vu que c'est Turing-complet.
Il y a de grosses limites de mémoire et performance, mais oui si on prend pas en compte le temps ça devrait aller.
Mais un truc stylé serait de programmer un interpréteur de ce language en add-in, de montrer que c'est plus rapide que le programme Basic généré lancé dans PRGM, et de l'appeler ASM.Basic
C'est drôle, j'avais écrit ça à Masséna à 15:39 J'aime bien le nom ASM.Basic ! C'est quelque chose que j'aimerai essayer, c'est pas trop dur et ça m'amuse beaucoup.
Prochaine étape de la connerie : écrire un interpréteur bcasm crossplatforme PC/calto
Ça sent le Soon™ qui sortira jamais alors je dis rien
Citer : Posté le 20/08/2021 19:48 | #
Tu as moyen d'automatiser les résultats de la 1KBCJ5 avec ça ?
Citer : Posté le 20/08/2021 19:52 | #
Donne moi trois semaines et je t'envoie un programme BCASM qui score tout ça pour toi :ok_hand:
Citer : Posté le 21/08/2021 15:17 | #
ce qui serait bien c'est de faire un compilateur Basic->assembleur->linker->add-in sur calculatrice, avec une petite couche de GUI ;),
ca pourrait très bien tenir sur 200-400Ko
je trouve que ce serait une bonne idée, ca permettra d'exécuter les programmes plus vite, car le basic préinstallé est super lent
Citer : Posté le 21/08/2021 15:21 | #
Ah carrément, tu pourrais écrire le linker en mode full ELF et utiliser le loader de Yatis.
Btw il existe déjà C.Basic pour accélérer les programmes Basic avec l'aide d'un add-in
Citer : Posté le 21/08/2021 15:23 | #
heu... , non, c'est juste une proposition, et c'est quoi le loader de Yatis?
Citer : Posté le 21/08/2021 15:24 | #
ce qui serait bien c'est de faire un compilateur Basic->assembleur->linker->add-in sur calculatrice, avec une petite couche de GUI ;),
ca pourrait très bien tenir sur 200-400Ko
je trouve que ce serait une bonne idée, ca permettra d'exécuter les programmes plus vite, car le basic préinstallé est super lent
Le plus proche qu'on ait est C.Basic, qui est déjà des magnitudes plus rapide que PRGM. Si tu te lances là dedans je suivrai avec attention, personne ne le fera pour toi c'est gigantesque.
Ce langage jouet n'a vraiment rien à voir.
Citer : Posté le 21/08/2021 15:26 | #
C'est moi
Citer : Posté le 21/08/2021 15:26 | #
le plus facile, déjà, c'est de faire le Basic->assembleur et ensuite on utilise as et ld
Ajouté le 21/08/2021 à 15:27 :
C'est moi
et le loader?
Citer : Posté le 21/08/2021 15:28 | #
Et on utilise as et ld sur la calculatrice avec le noyau Linux de la Graph 90+E, son système de fichiers EXT4 et son dual-core 1.5 GHz ?
Plus sérieusement, on développe déjà plein de trucs avec as et ld aujourd'hui (je m'en sers personnellement pour précompiler des assets), c'est le "sur la calculatrice" dans ton premier message qui a déclenché l'ironie. x3
Citer : Posté le 21/08/2021 15:30 | #
non je parlais sur le pc!
on code sur BIDE et ensuite on transforme en assembleur et on appelle as et ld
et la ca va aller super vite
Ajouté le 21/08/2021 à 15:31 :
oh! j'ai oublier qui fallait recoder tout les drivers de l'écran et du clavier!
Citer : Posté le 21/08/2021 15:32 | #
Je m'y connais pas autant que Yatis et Lephé mais ça serait beaucoup plus compliqué que de faire une conversation Basic→ASM. Je sais pas si tu as beaucoup utilisé le Basic ou si tu es un peu naïf, mais l'idée C:Basic de Sentaro21 (qui consiste à convertir le code Basic en C) est déjà plus réaliste. Dans tous les cas, ça diverge un peu de ce topic x)
Citer : Posté le 21/08/2021 15:33 | #
Ah oui, ça c'est différent ! C'est faisable honnêtement, si tu t'y connais un peu en compilateurs il n'y a pas de difficulté majeure.
Je suggérerais même de simplement générer l'assembleur et d'ensuite utiliser un SDK complet (le fx-9860G SDK, le Prizm SDK ou le fxSDK). En gros, mélanger les sources Basic avec les sources C. C'est parce que linker ne suffit pas pour former un add-in.
Citer : Posté le 21/08/2021 15:38 | #
si il faut utiliser des sdk en C, autant programmer en C a ce moment la, car la ca n'a plus aucun intérêt
Citer : Posté le 21/08/2021 15:40 | #
Si tu veux obtenir du code compilé (aka. un add-in), tu dois utiliser un SDK comme ça... ou en recoder un. Rien ne t'empêche de créer un SDK Basic qui cache le C pour permettre aux gens de coder en Basic. Parce que l'intérêt de ce genre d'idées c'est juste de rendre le Basic plus accessible, si tu sais coder en C ça n'a en effet plus aucun intérêt (c'est pour ça que ça n'a jamais été fait alors qu'on a les compétences pour).
Maintenant KikooDX a raison, on dérive beaucoup, ouvre un autre topic si tu veux poursuivre cette idée
Citer : Posté le 21/08/2021 15:42 | #
je laisse tomber...