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 » dxn -- machine virtuelle de mort
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

dxn -- machine virtuelle de mort

Posté le 02/01/2022 14:53

Salut ! J'ai commencé il y a quelques jours à travailler sur une machine virtuelle et son langage ASM associé destinés au gamedev expérimental. J'apprécierais énormèment des critiques sur le format du binaire, l'addressage et la syntaxe assembleur. Je suis relativement nouveau dans ce monde, et tout peut m'aider.

Je l'ai nommé dxn. dxn combine des caractéristiques de langages que j'aime dans l'idée, mais ne fonctionnent tous pas exactement comme je le souhaiterais. Les inspirations principales de dxn sont : la programmation d'un Gameboy DMG, uxn, CHIP-8 et TIS-100.

Le fichier concept.s de mon dépôt de développement contient un exemple de programme idéal. sample.s et sample.dxn représentent l'avancement actuel du projet.
dxna est l'assembleur, dxnd le désassembleur.
http://kiko.ovh/cgit/dxn/

Je veux terminer une toolchain complète pour systèmes POSIX, avec l'objectif final de porter un interpréteur dxn sur calculatrice.

Maintenant que dxna et dxnd fonctionnent, je vais pouvoir attaquer le premier interpréteur de prototypage.

Merci d'avoir lu jusqu'ici, tiens un cookie pour ton temps


Lephenixnoir En ligne Administrateur Points: 24228 Défis: 170 Message

Citer : Posté le 05/01/2022 10:45 | #


Ce ne sera pas dans les specs, mais dxnr exécute sleep(0) quand noop est rencontré. Ça permet de préserver le CPU en plaçant un noop dans les boucles de délai.

Comment ? Je ne savais pas que sleep(0) avait un effet. Tu as une référence de de doc ou une info du même style ?
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 05/01/2022 12:40 | #


Lephenixnoir a écrit :
Comment ? Je ne savais pas que sleep(0) avait un effet. Tu as une référence de de doc ou une info du même style ?

L'info n'est pas clairement mentionnée quelque part, mais de ce que j'ai saisi, sleep met en pause le thread et le place à la fin de la queue du scheduler. Ça permet aux autres applications d'utiliser le CPU, et dans la situation où il y a n'y a qu'un thread actif sleep(0) met tout de même en pause pour un très court laps de temps, ce qui suffit à réduire la charge (le système appelant le scheduler X fois par seconde).

https://pubs.opengroup.org/onlinepubs/9699919799/functions/sleep.html a écrit :
The sleep() function shall cause the calling thread to be suspended from execution until either the number of realtime seconds specified by the argument seconds has elapsed or a signal is delivered to the calling thread and its action is to invoke a signal-catching function or to terminate the process. The suspension time may be longer than requested due to the scheduling of other activity by the system.

L'utilisation de mon CPU est passée de 100% à 20% après ce changement, ça a un effet en tout cas.
ouais ouais
Lephenixnoir En ligne Administrateur Points: 24228 Défis: 170 Message

Citer : Posté le 05/01/2022 12:46 | #


Fair enough, c'est sensé.
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 05/01/2022 15:03 | #


dxnr : ajouté l'instruction rnd. Roguelike soon™ (or not).



La premier build jouable de mon petit jeu, dxn Race (remake du jeu Basic éponyme), est en pièce jointe.

Edit 18:23
Mis à jour le build.
ouais ouais
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 05/01/2022 15:03 | # | Fichier joint


Nah.

Ajouté le 06/01/2022 à 01:56 :
Re yo. Je ne dors jamais. J'ai passé la majeure partie de mon temps sur race dxn maintenant que dxn est relativement stable. Les specs ne sont pas encore fixées, mais on s'en approche.

dxnr supporte maintenant le changement de palette, en modifiant les valeurs des addresses FFD0 à FFD5. C'est du 3-bit, très facile à utiliser et permet de faire des petits effets stylés. Étant donné que cette fonctionnalité n'ajoute aucune instruction, elle peut être complètement ignorée par les implémentations (je pense notamment à un éventuel port graph mono). cls a enfin été implémenté.

race dxn avance, si z'êtes curieux vous pouvez regarder les sources et le build vous même. Ça avance bien sur tous les plans, et je n'ai pas rencontré de problème lié au design du jeu d'instructions. À part peut-être que les comparaisons sont un peu pénibles (faut sub/add), mais honnêtement c'est juste parce que j'ai pas configuré mon éditeur de texte pour le rendre plus facile.

http://kiko.ovh/cgit/dxn-race
ouais ouais
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 06/01/2022 14:13 | # | Fichier joint


Yop. Ajouté le support de dbs pour stocker des chaînes de caractères. J'ai créé pour l'occasion une police custom 3x4 qui couvre tous les caractères visibles de la plage ASCII. Oui, je me déteste.



Et voici le code complet de ma fonction print suivi d'un exemple d'utilisation, qui peut simplement être cat à la fin d'un programme pour l'utiliser.
;args: str (0 terminated), x, y
print:
    pop _print_y
    pop _print_x
    pop _print_str
    movp _print_acc, @_print_str
    jz @_print_acc, _print_ret
_print_char:
    movp _print_acc, @_print_str
    jz @_print_acc, _print_ret
    sub _print_acc, #21
    jnz $FFF0, _print_no_draw
    add _print_acc, _print_font
    movp _print_sp, @_print_acc
    xsp @_print_sp, @_print_x, @_print_y
_print_no_draw:
    inc _print_str
    add _print_x, #4
    jmp _print_char
_print_ret:
    ret

_print_acc:
    noop
_print_sp:
    noop
_print_str:
    noop
_print_x:
    noop
_print_y:
    noop
_print_font:
    db #0
    db #1011
    db #55
    db #7575
    db #3636
    db #5635
    db #7357
    db #22
    db #2112
    db #1221
    db #525
    db #2720
    db #1200
    db #700
    db #1224
    db #2552
    db #2232
    db #6143
    db #3463
    db #4475
    db #3416
    db #2536
    db #2247
    db #7257
    db #3452
    db #2020
    db #1202
    db #6160
    db #7070
    db #3430
    db #2043
    db #7457
    db #5757
    db #7573
    db #7117
    db #3553
    db #7137
    db #1137
    db #7517
    db #5575
    db #7227
    db #3227
    db #5535
    db #7111
    db #5557
    db #5553
    db #7557
    db #1757
    db #3557
    db #5357
    db #7417
    db #2227
    db #7555
    db #2555
    db #2775
    db #5225
    db #2255
    db #7147
    db #3113
    db #4221
    db #3223
    db #52
    db #7000
    db #21
    db #5757
    db #7573
    db #7117
    db #3553
    db #7137
    db #1137
    db #7517
    db #5575
    db #7227
    db #3227
    db #5535
    db #7111
    db #5557
    db #5553
    db #7557
    db #1757
    db #3557
    db #5357
    db #7417
    db #2227
    db #7555
    db #2555
    db #2775
    db #5225
    db #2255
    db #7147
    db #4234
    db #2222
    db #1621
    db #56

hello_world_str:
    dbs "Hello, world!"
hello_world:
    push hello_world_str
    push #F          ;x
    push #8          ;y
    call print
    show


Faudrait que je rédige un tuto sur les bases de dxna, pour éviter que dxn devienne le truc mystique que je suis le seul à comprendre. Surtout que je spam de ouf, faut que je justifie au bout d'un moment
ouais ouais
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 07/01/2022 01:48 | # | Fichier joint


Le retour du fils prodige ! (Comment ça « non » ?)

J'ai tenté de porter dxnr sur calto avec gint, mais je me suis vite tapé des difficultés invisibles. Il faudra que je m'équipe de libprof et tout le barda pour, quand j'aurai rassemblé le courage, m'engager dans une session de debug intensive. Je n'ai pas hâte du tout u_u

La spec n'a pas évolué aujourd'hui (bon signe !).

Le projet a désormais un joli README, ainsi qu'une license (MIT) et des instructions de build et installation.
Les Makefile que j'ai écrit rendent le processus beaucoup moins pénible pour l'utilisateur que les feu build.sh (make; sudo make install fait le taf).

Les démos ont été mises à jour pour utiliser #bind proprement.

La rédaction d'un tutoriel d'introduction a été entamé. Vu le fonctionnement et les objectifs de dxn, il ne sera pas vraiment destiné aux nouveaux programmeurs. J'espère qu'il pourra au moins servir de support si quelqu'un souhaite comprendre le fonctionnement de la chose un jour futur.

dxnr gère désormais les divisions par zéro. Oupsi.

Une implémentation Lua de dxn a été entamée.

Je manque tellement de sommeil
ouais ouais

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 76 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