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
Citer : Posté le 15/04/2023 17:25 | #
Sérieux KikooDX mais le nom quoi
Citer : Posté le 15/04/2023 17:25 | #
x) oh nan putain j'y avais pas pensé xD
Citer : Posté le 15/04/2023 17:30 | #
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.
Sérieux KikooDX mais le nom quoi
J'étais étonné que personne n'ait remarqué lol
Citer : Posté le 15/04/2023 17:32 | #
Ah merci ! Juste une petite dernière :
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
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
Citer : Posté le 15/04/2023 17:36 | #
all right ça fonctionne ! Merci !
Citer : Posté le 15/04/2023 18:12 | #
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
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 15/04/2023 18:13 | #
Sérieux KikooDX mais le nom quoi
J'ai pas compris ...
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
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)
Citer : Posté le 15/04/2023 20:09 | #
Ah oui ...
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html