Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » [why?] bcasm -- language assembleur pour Basic Casio
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

[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


Lephenixnoir Hors ligne Administrateur Points: 20736 Défis: 143 Message

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 ?
Loieducode Hors ligne Membre Points: 129 Défis: 0 Message

Citer : Posté le 20/08/2021 13:16 | #


poggers
J'ai beacoup trop de projets, nyohoho!
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

Citer : Posté le 20/08/2021 15:35 | #


Lephenixnoir a écrit :
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 !

Loieducode a écrit :
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.
Protip
Ne me remerciez pas
Lephenixnoir Hors ligne Administrateur Points: 20736 Défis: 143 Message

Citer : Posté le 20/08/2021 15:46 | #


Ce sera intéressant de voir jusqu'où je peux pousser cet abus.

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
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

Citer : Posté le 20/08/2021 16:59 | #


Lephenixnoir a écrit :
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.

Lephenixnoir a écrit :
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.
KikooDX a écrit :
Prochaine étape de la connerie : écrire un interpréteur bcasm crossplatforme PC/calto

Ça sent le Soon™ qui sortira jamais alors je dis rien
Protip
Ne me remerciez pas
Massena Hors ligne Rédacteur Points: 1892 Défis: 11 Message

Citer : Posté le 20/08/2021 19:48 | #


Tu as moyen d'automatiser les résultats de la 1KBCJ5 avec ça ?
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

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:
Protip
Ne me remerciez pas
Inikiwi Hors ligne Membre Points: 156 Défis: 0 Message

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
Lephenixnoir Hors ligne Administrateur Points: 20736 Défis: 143 Message

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
Inikiwi Hors ligne Membre Points: 156 Défis: 0 Message

Citer : Posté le 21/08/2021 15:23 | #


heu... , non, c'est juste une proposition, et c'est quoi le loader de Yatis?
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

Citer : Posté le 21/08/2021 15:24 | #


Inikiwi a écrit :
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.
Protip
Ne me remerciez pas
Yatis Hors ligne Membre Points: 558 Défis: 0 Message

Citer : Posté le 21/08/2021 15:26 | #


c'est quoi le loader de Yatis?

C'est moi
Inikiwi Hors ligne Membre Points: 156 Défis: 0 Message

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 :
Yatis a écrit :
c'est quoi le loader de Yatis?

C'est moi

et le loader?
Lephenixnoir Hors ligne Administrateur Points: 20736 Défis: 143 Message

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
Inikiwi Hors ligne Membre Points: 156 Défis: 0 Message

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!
Kikoodx Hors ligne Labélisateur Points: 2705 Défis: 11 Message

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)
Protip
Ne me remerciez pas
Lephenixnoir Hors ligne Administrateur Points: 20736 Défis: 143 Message

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.
Inikiwi Hors ligne Membre Points: 156 Défis: 0 Message

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
Lephenixnoir Hors ligne Administrateur Points: 20736 Défis: 143 Message

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
Inikiwi Hors ligne Membre Points: 156 Défis: 0 Message

Citer : Posté le 21/08/2021 15:42 | #


je laisse tomber...

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 v42 © créé par Neuronix et Muelsaco 2004 - 2021 | Il y a 85 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