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

orga -- stack machine virtuelle de puant

Posté le 14/04/2023 02:24

Yo les gens ! Je viens ici pour présenter orga, une petite stack machine que j'ai design, accompagné d'un assembleur et un émulateur. Ce post initial est assez sec et inaccessible à première vue si vous n'avez jamais touché à ce genre de projet, n'hésitez pas à poser des questions.

dépot git d'orga

Disposition mémoire

L'unité mémoire d'orga est le short (uint16_t).
La mémoire addressable d'orga fait 0x10000 (65536) shorts. Elle est parcourue par le program counter à l'exécution.
Les stacks (stack principal et return stack) peuvent contenir jusqu'à 65536 shorts également.

Écran

Dimensions de 128x128.
Le framebuffer d'orga est placé de 0xbfff à 0xffff dans la mémoire addressable.
Le layout est séquentiel, chaque pixel de gauche à droite, ligne par ligne de haut en bas.
Les pixels eux mêmes sont stockés en R5G6B5.
L'écran et les events sont raffraichis à l'appel de l'instruction SLP.

Entrée utilisateur

À l'addresse mémoire 0xbffe se trouvera les entrées utilisateur, dans la même disposition que les controlleurs NES.

Et comment ça s'utilise ?

$ git clone https://kdx.re/cgit/orga
Cloning into 'orga'...
Fetching objects: 110, done.
$ cd orga/
$ ./build.sh
orgaasm
orgaemu
$ ./orgaasm samples/screen.orgaasm screen.rom
$ ./orgaemu screen.rom




À quoi ressemble un programme ?

La syntaxe est largement inspirée par uxntal d'100r.

    LIT ,hellostr ( shorthand: -hellostr )
    JRT ,putstr   ( shorthand: /putstr )
    RET

@putstr ( str -- )
    DUP LDA WRT  ( write )
    INC          ( increment pointer )
    DUP LDA      ( loop until end of string )
    JNZ ,putstr
    POP
    RET

( "hello world" )
@hellostr 0068 0065 006c 006c 006f 0020 0077 006f 0072 006c 0064 000a 0000


    LIT ,Screen
@loop
    DUP DUP STA   ( draw pixel )
    INC DUP       ( overflow check )
    JNZ ,loop
@infinite
    SLP
    JMP ,infinite


D'autres exemples sont disponibles dans le dossier samples/ du git.

Pourquoi ce topic ?

Je suis en capacité de porter l'émulateur naivement sur 90+E en très peu de temps, mais je m'attend à devoir faire diverses optimisation pour tenir à 30FPS sans overclock sur calto. Je prépare le terrain avec ce topic pour archiver mes questions (la shout part trop vite ça me fatigue).

dépot git d'orga

Fichier joint


Lephenixnoir Hors ligne Administrateur Points: 24235 Défis: 170 Message

Citer : Posté le 15/04/2023 17:25 | #


Sérieux KikooDX mais le nom quoi
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Potter360 Hors ligne Rédacteur Points: 1221 Défis: 2 Message

Citer : Posté le 15/04/2023 17:25 | #


x) oh nan putain j'y avais pas pensé xD
Globalement, coder. Mal, mais coder.
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 15/04/2023 17:30 | #


Potter360 a écrit :
Quand j'essaie de le build j'ai quelques erreurs

C'était ma faute ! j'ai fait une comparaison avec == au lieu de =, j'ai push le fix. Pull et ça devrait être bon.

Lephenixnoir a écrit :
Sérieux KikooDX mais le nom quoi

J'étais étonné que personne n'ait remarqué lol
ouais ouais
Potter360 Hors ligne Rédacteur Points: 1221 Défis: 2 Message

Citer : Posté le 15/04/2023 17:32 | #


Ah merci ! Juste une petite dernière :
$ ./build.sh
orgaasm
orgaemu
src/orgaemu.c: In function ‘render’:
src/orgaemu.c:130:26: warning: implicit declaration of function ‘SDL_GetTicks64’; did you mean ‘SDL_GetTicks’? [-Wimplicit-function-declaration]
  130 |  const Uint64 cur_time = SDL_GetTicks64();
      |                          ^~~~~~~~~~~~~~
      |                          SDL_GetTicks
/usr/bin/ld : /tmp/ccH2Ip8w.o : dans la fonction « main » :
orgaemu.c:(.text.startup+0x1f9) : référence indéfinie vers « SDL_GetTicks64 »
/usr/bin/ld : orgaemu.c:(.text.startup+0x464) : référence indéfinie vers « SDL_GetTicks64 »
collect2: error: ld returned 1 exit status

Globalement, coder. Mal, mais coder.
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 15/04/2023 17:33 | #


Ça c'est une erreur signature Debian stable eheh. T'es sur une ancienne version de SDL2 qui n'a pas SDL_GetTicks64, essaye avec
./build.sh -DSDL_GetTicks64=SDL_GetTicks

ouais ouais
Potter360 Hors ligne Rédacteur Points: 1221 Défis: 2 Message

Citer : Posté le 15/04/2023 17:36 | #


all right ça fonctionne ! Merci !
Globalement, coder. Mal, mais coder.
Mb88 Hors ligne Labélisateur Points: 944 Défis: 3 Message

Citer : Posté le 15/04/2023 18:12 | #


Kikoodx a écrit :
Potter360 a écrit :
Quand j'essaie de le build j'ai quelques erreurs

C'était ma faute ! j'ai fait une comparaison avec == au lieu de =, j'ai push le fix. Pull et ça devrait être bon.

Moi j'avais aucun problème, j'ai juste dû le lancer avec bash pour que ça marche
Mb88 Hors ligne Labélisateur Points: 944 Défis: 3 Message

Citer : Posté le 15/04/2023 18:13 | #


Lephenixnoir a écrit :
Sérieux KikooDX mais le nom quoi

J'ai pas compris ...
Potter360 Hors ligne Rédacteur Points: 1221 Défis: 2 Message

Citer : Posté le 15/04/2023 18:17 | #


Si tu veux de l'aide, ça a un rapport avec le nom du programme qui assemble... (et avec l'extension des fichiers)
Globalement, coder. Mal, mais coder.
Mb88 Hors ligne Labélisateur Points: 944 Défis: 3 Message

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