ibniz
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédenteDernière révisionLes deux révisions suivantes | ||
ibniz [2018/12/03 12:31] – [Ibniz] Benjamin Labomedia | ibniz [2023/08/15 13:06] – autre ref tom | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Ibniz ====== | ====== Ibniz ====== | ||
+ | |||
+ | ===== Ibniz ===== | ||
IBNIZ est un logiciel qui permet générer de l' | IBNIZ est un logiciel qui permet générer de l' | ||
Ligne 5: | Ligne 7: | ||
L' | L' | ||
- | {{ibniz.jpg?300}} {{youtube> | + | {{ youtube> |
- | ====== Installation ====== | ||
- | ===== Sous Ubuntu / Debian / Raspbian | + | |
+ | ===== Installation ===== | ||
+ | |||
+ | ==== Sous Ubuntu / Debian / Raspbian ==== | ||
==== Par les dépôts ==== | ==== Par les dépôts ==== | ||
Ligne 23: | Ligne 27: | ||
./ibniz pour lancer le logiciel | ./ibniz pour lancer le logiciel | ||
+ | Ou | ||
+ | git clone https:// | ||
+ | cd IBNIZ/src | ||
+ | sudo apt install libsdl1.2-dev | ||
+ | make | ||
+ | ./ibniz | ||
==== Kano ==== | ==== Kano ==== | ||
raspbian customisé par os Kano http:// | raspbian customisé par os Kano http:// | ||
Ligne 32: | Ligne 42: | ||
{{: | {{: | ||
- | ===== Sous Mac OSX ===== | + | ==== Sous Mac OSX ==== |
==== Installation de Xcode ==== | ==== Installation de Xcode ==== | ||
Ligne 52: | Ligne 62: | ||
puis | puis | ||
make | make | ||
- | vous obtiendrez: | + | vous obtiendrez |
- | <code bash> | + | |
- | gcc -c -Os ui_sdl.c -o ui_sdl.o `sdl-config --libs --cflags` -DX11 -lX11 | + | C'est normal ... |
- | i686-apple-darwin10-gcc-4.2.1: | + | |
- | i686-apple-darwin10-gcc-4.2.1: -framework: linker input file unused because linking not done | + | |
- | i686-apple-darwin10-gcc-4.2.1: | + | |
- | i686-apple-darwin10-gcc-4.2.1: | + | |
- | i686-apple-darwin10-gcc-4.2.1: | + | |
- | i686-apple-darwin10-gcc-4.2.1: | + | |
- | i686-apple-darwin10-gcc-4.2.1: | + | |
- | gcc -c -O3 vm_slow.c -o vm_slow.o | + | |
- | gcc -c -Os clipboard.c -o clipboard.o `sdl-config --libs --cflags` -DX11 -lX11 | + | |
- | i686-apple-darwin10-gcc-4.2.1: | + | |
- | i686-apple-darwin10-gcc-4.2.1: | + | |
- | i686-apple-darwin10-gcc-4.2.1: | + | |
- | i686-apple-darwin10-gcc-4.2.1: | + | |
- | i686-apple-darwin10-gcc-4.2.1: | + | |
- | i686-apple-darwin10-gcc-4.2.1: | + | |
- | i686-apple-darwin10-gcc-4.2.1: | + | |
- | gcc -Os -s ui_sdl.o vm_slow.o clipboard.o -o ibniz `sdl-config --libs --cflags` -DX11 -lX11 -lm | + | |
- | ld: warning: option -s is obsolete and being ignored' | + | |
- | </ | + | |
si vous obtenez l' | si vous obtenez l' | ||
- | '' | + | |
- | '' | + | / |
- | '' | + | ui_sdl.c: |
- | '' | + | make: |
essayez d' | essayez d' | ||
- | '' | + | |
==== lancement du logiciel ==== | ==== lancement du logiciel ==== | ||
Ligne 89: | Ligne 81: | ||
Voila pour le mac | Voila pour le mac | ||
- | ===== IBNIZ pour Android | + | ==== IBNIZ pour Android ==== |
- | Un portage de Ibniz par ce très cher Cedriko <3 en version beta à télécharger là : {{ :: | + | Un portage de Ibniz par ce très cher Cedriko <3 en version beta à télécharger là : {{ media_07: |
- | ===== IBNIZ pour iOS ===== | + | ==== IBNIZ pour iOS ==== |
Par ici : http:// | Par ici : http:// | ||
- | ====== Enregistrement / Lecture d'un set ====== | + | ===== Principes & Fonctionnement |
+ | Je propose de documenter un peu le fonctionnement d' | ||
- | ===== Enregistrement ===== | ||
- | La commande suivante va lancer IBNIZ puis enregistrer tout ce qui sera taper au clavier en conservant très précisément le délais qui séparera chaque commande. Il est ainsi possible d’enregistrer un live de plusieurs heures. | + | ==== Concepts à expliquer ==== |
+ | * Hexadecimal | ||
+ | * Notation polonaise inversée | ||
+ | * Arithmetique à virgule fixe | ||
+ | * Pile | ||
+ | * Le compteur " | ||
+ | * L' | ||
+ | * L' | ||
- | '' | + | ==== Hexadecimal ==== |
+ | D'abord, l'hexadecimal, | ||
+ | Pour éviter la confusion dans ce qui va suivre, je met la base du nombre à gauche du nombre. | ||
+ | Exemples : | ||
+ | < | ||
+ | (b10) 0 = (b2) 0 = (b16) 0 | ||
+ | (b10) 9 = (b2) 1001 = (b16) 9 | ||
+ | (b10) 14 = (b2) 1110 = (b16) E | ||
+ | (b10) 200 = (b2) 11001000 = (b16) C8 | ||
+ | </code> | ||
+ | Du coup, historiquement, | ||
- | ===== Lecture | + | ==== Notation polonaise inversée |
+ | C'est une normalisation qui permet à chacun d' | ||
+ | 3 10+ 2* = 26 | ||
+ | 10 2* 3+ = 23 | ||
+ | ==== Arithmetique à virgule fixe ==== | ||
+ | Au sujet de la forme des nombres manipulés dans Ibniz, l' | ||
+ | Le format des nombres est 4 digits hexadecimaux à gauche de la virgule (partie entière) et 4 digits hexadecimaux à droite de la virgule (partie décimale). | ||
+ | De plus, la virgule n'est pas symbolisé par une virgule, mais par un point dans le monde anglosaxon de l' | ||
+ | Du coup c'est un peu particulier par rapport aux nombres que l'on côtoie habituellement, | ||
+ | |||
+ | ==== Pile ==== | ||
+ | |||
+ | ==== Le compteur "dent de scie" ==== | ||
+ | Le principe de ibniz, c'est qu'il y a un compteur incrémenté de 0000.0000 jusqu' | ||
+ | |||
+ | {{ media_07: | ||
+ | |||
+ | ==== L' | ||
+ | Pour l' | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | La sortie audio de Ibniz ne produit des sons qu' | ||
+ | </ | ||
+ | |||
+ | Ensuite le compteur est incrémenté à une certaine vitesse. Cela dépend de la vitesse de calcul de la machine que tu utilise, mais avec 60 FPS, le compteur compte de 0 à 60 en 1 sec, cela fait 60*1024 incrément audio. Cela veut dire que 60 fois par seconde, la partie décimale du compteur passe de 0 à 1 par incrément de 1/ | ||
+ | |||
+ | {{ media_07: | ||
+ | |||
+ | Du côté de la production sonore de Ibniz, en fait, ibniz prend en entrée une valeur comprise entre 0 et 1 et produit un son. Donc par défaut, la dent de scie est envoyé et une dent de scie qui varie 60 fois par seconde entre 0 et 1 cela produit le son par défaut de Ibniz. | ||
+ | |||
+ | === Exemple: production d'une note LA avec Ibniz === | ||
+ | D'un autre côté, la note LA, est produite par une sinusoide de fréquence 220 Hz. | ||
+ | |||
+ | {{ media_07: | ||
+ | |||
+ | Pour produire un LA avec Ibniz, il faut donc produire non pas une dent de scie, mais une sinusoide qui varie entre 0 et 1 à 220 Hz. Le jeu consiste donc à ecrire la bonne fonction mathématique dans Ibniz qui sera capable de convertir la dent de scie entre 0 et 1 qui varie 60 fois par seconde en une sinusoide qui varie entre 0 et 1 220 fois par seconde. | ||
+ | \\ \\ | ||
+ | Pour cela, il y a une fonction sin dans ibniz qui prend une valeur en entrée et retourne une valeur comprise entre -1 et 1. sin 0 = 0 sin Pi/2 = 1 (Pi/2 correspond à un angle de 90°) sin Pi = 0 sin 3*Pi/2 = -1 sin 2*Pi = 0 On dit que la fonction sin est periodique de periode 2*Pi. Si on arrive à faire varier l' | ||
+ | \\ \\ | ||
+ | Enfin, la fonction sinusoide d' | ||
+ | |||
+ | {{ media_07: | ||
+ | |||
+ | Au sujet du +1 /2 (ou 1+ 2/) : la sinusoide produit un résultat compris entre -1 et 1. Or, lbniz, pour produire du son, ne prend que la partie entre 0 et 1 du résultat. | ||
+ | Exemples pour la simple formule s dans ibniz (cela va juste calculer le sinus de la valeur sur la pile) : | ||
+ | Au début, la première valeur sur la pile (en entrée de la formule) (le départ de la dent de scie) est 0000.0000. voyons ce qui ce passe étape par étape : | ||
+ | |||
+ | * Pile = 0000.0000 => sin(0000.0000 * 2Pi) = 0 => On envoie 0 sur la sortie son | ||
+ | * Pile = 0000.0040 => sin(0000.0040* 2Pi) =~ 0000.0199 => On envoie 0000.0199 sur la sortie son | ||
+ | * Pile = 0000.0080 => sin(0000.0080* 2Pi) =~ 0000.0664 => On envoie 0000.000E sur la sortie son | ||
+ | [...] | ||
+ | * Pile = 0000.1000=> | ||
+ | * Pile = 0000.A000=> | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | Quand le sinus retourne une valeur négative, on envoie à la carte son la partie décimale de la valeur négative, et du coup le son ne sera pas produit par une belle sinusoide mais par une sorte de demi sinusoide bizare avec une fréquence 2 fois plus élevée. Pour avoir une belle sinusoide sur la sortie son, il faut adapter la sortie initiale du sinus entre -1 et 1 à l' | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== L' | ||
+ | Pour la vidéo, le compteur est incrémenté par pas de 0000.0001 soit 1/65536. | ||
+ | Pour la vidéo, le compteur va donc avoir les valeur suivantes : 0, 1/65536, 2/65536, ..., 65535/ | ||
+ | |||
+ | |||
+ | ==== Les bases de fonctionnement issues de l' | ||
+ | Notes : Les informations ci-dessous sont issues de ce que j'ai compris d' | ||
+ | |||
+ | ==== La machine et la pile ==== | ||
+ | |||
+ | IBNIZ reproduit un ordinateur virtuel minimaliste qu'on programme en assembleur IBNIZ. | ||
+ | |||
+ | IBNIZ fournit un jeu d' | ||
+ | |||
+ | On retrouve les instructions habituelles pour programmer en assembleur tel que poser une valeur sur la pile, l' | ||
+ | |||
+ | IBNIZ utilise une pile LIFO : Last In, First Out, et pose à chaque cycle des valeurs sur la pile, qui changent selon le mode (voir plus bas). | ||
+ | |||
+ | Les commandes que l'on tape modifient ces valeurs, et IBNIZ utilise ces nouvelles valeurs pour produire de l' | ||
+ | |||
+ | **Exemple, la fameuse texture du XOR : ^xp** | ||
+ | |||
+ | - IBNIZ pose sur la pile 3 valeurs : X, Y, T (T est au bas de la pile et X en haut. X a été la dernière valeur posée sur la pile, cela sera donc la première valeur enlevée de la pile). IBNIZ balaye l' | ||
+ | - Le chapeau ^ effectue l' | ||
+ | - La lettre x inverse les deux valeurs de la pile : T passe en première position en haut de la pile, suivi de X^Y en seconde position | ||
+ | - La lettre p (pop) enlève une valeur de la pile, il reste donc sur la pile le résultat de X^Y, et IBNIZ se sert de cette valeur pour faire la video et le son. | ||
+ | |||
+ | Un nouveau cycle recommence, IBINIZ repars à l' | ||
+ | |||
+ | ==== Les différents modes de fonctionnement ==== | ||
+ | |||
+ | IBNIZ dispose de 3 modes de fonctionnement : | ||
+ | |||
+ | Vidéo en mode TYX : IBNIZ pose sur la pile TTTT.0000, YYYY.YYYY et XXXX.XXXX | ||
+ | |||
+ | '' | ||
+ | |||
+ | Vidéo en mode T : IBNIZ pose sur la pile TTTT.YYXX | ||
+ | |||
+ | '' | ||
+ | |||
+ | Audio en mode T : IBNIZ pose sur la pile TTTT.TTTT | ||
+ | |||
+ | '' | ||
+ | |||
+ | Attention, l' | ||
+ | |||
+ | ===== Enregistrement / Lecture d'un set ===== | ||
+ | ==== Enregistrement ==== | ||
+ | La commande suivante va lancer IBNIZ puis enregistrer tout ce qui sera taper au clavier en conservant très précisément le délais qui séparera chaque commande. Il est ainsi possible d’enregistrer un live de plusieurs heures. | ||
+ | |||
+ | '' | ||
+ | |||
+ | ==== Lecture ==== | ||
Pour le rejouer, il faut utiliser la commande suivante : | Pour le rejouer, il faut utiliser la commande suivante : | ||
- | '' | + | '' |
- | ====== | + | ===== Exemples |
+ | |||
+ | < | ||
+ | Shortest IBNIZ programs that show something " | ||
+ | |||
+ | All 0-2-char-long programs that stackbalance to +1 in T- or TXY-video | ||
+ | have been tested. | ||
+ | |||
+ | EMPTY PROGRAM: | ||
+ | - gradient & sawtooth | ||
+ | |||
+ | 1-CHARRERS: | ||
+ | - flasher slowing down: q | ||
+ | - glitchy halfscreen: ( | ||
+ | - colorfade: ! | ||
+ | |||
+ | 2-CHARRERS: | ||
+ | - tv noise: *d | ||
+ | - trippy & whining rotator: d* | ||
+ | - *-textured headache: -d | ||
+ | - zooming *-texture: ** | ||
+ | - stopping near negative star: */ | ||
+ | - mcp: %* %/ %* %% | ||
+ | - gradual art: %a | ||
+ | - spotlights among *-textures: a* a/ a% | ||
+ | - flasher: 9/ | ||
+ | - plasmas: Al | ||
+ | - moving glitchsquares: | ||
+ | - jupiter storm: +/ +% -/ -% r/ r% l/ l% | ||
+ | - blinking stripes: +r +l -r -l | ||
+ | - stopping in hyperspace: /* // /% | ||
+ | - stuff with sierpinski triangles: &* && |* |/ |% &- |a | ||
+ | - munching epilepsy: ^* ^/ ^% | ||
+ | - polyrhythmic flasher slowing down: qs | ||
+ | - noisy bar scrolling down slowly: q) | ||
+ | - random squeaks: q@ | ||
+ | - noisy bar in a *-textured night: s) | ||
+ | - squarewave sliding down: )~ | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== en vrac ==== | ||
+ | |||
+ | 0!1!2! 0@2@8rs* 1@2@8r.4+s*+ | ||
+ | |||
+ | Ici aussi : https:// | ||
+ | |||
+ | Et tous les programmes d'une personne qui s'est bien creusée la tête pour comprendre comment fonctionne ibniz : https:// | ||
+ | |||
+ | ==== couleurs ==== | ||
+ | |||
+ | p 6F4D.B000 \ tous les pixels de la même couleur | ||
+ | * p : pop la valeur de T depuis la pile | ||
+ | * 6F4D : définition de la teinte de la couleur | ||
+ | * B000 : luminosité | ||
+ | |||
+ | Fl : ne garde que la partie entière | ||
+ | ==== séquences ==== | ||
+ | |||
+ | Une séquence basée sur des sous-routines avec une tentative d' | ||
+ | |||
+ | < | ||
+ | 1{d6r+} | ||
+ | 2{d4r^} | ||
+ | 3{d3r*} | ||
+ | 4{dFr-} | ||
+ | 2)6r3& | ||
+ | </ | ||
- | ===== Modification | + | Tourne entre 1,2,3,4, quand on change 6 ça tourne |
+ | * **2)** récupère T au fond de la pile | ||
+ | * **3&** ne conserve que les deux derniers bits (donc compris entre 0 et 3) | ||
+ | * **1+** ajoute 1 le résultat est compris en 1 et 4 | ||
+ | * **V** récupère la sous-routine du chiffre qui précède | ||
+ | ===== Expérimentation ===== | ||
+ | ==== Modification de la font ==== | ||
Pour changer l' | Pour changer l' | ||
Ligne 139: | Ligne 333: | ||
Voici un essai avec des caractères qui bouclent entre eux. {{: | Voici un essai avec des caractères qui bouclent entre eux. {{: | ||
- | ===== Construction d'un set avec un script Python | + | ==== Construction d'un set avec un script Python ==== |
La structure d'un fichier d' | La structure d'un fichier d' | ||
Ligne 271: | Ligne 465: | ||
{{: | {{: | ||
- | ===== Alimenter IBNIZ de l' | + | ==== Alimenter IBNIZ de l' |
Piste : [[http:// | Piste : [[http:// | ||
- | ===== Autres versions | + | ==== Autres versions ==== |
Info : https:// | Info : https:// | ||
Ligne 289: | Ligne 483: | ||
</ | </ | ||
INFO : ./ibniz -e > events | INFO : ./ibniz -e > events | ||
- | '' | + | '' |
- | '' | + | '' |
- | '' | + | '' |
- | ===== Principes & Fonctionnement ===== | + | ==== References ==== |
- | Je propose de documenter un peu le fonctionnement d' | + | |
- | + | ||
- | + | ||
- | ==== Concepts à expliquer ==== | + | |
- | * Hexadecimal | + | |
- | * Notation polonaise inversée | + | |
- | * Arithmetique à virgule fixe | + | |
- | * Pile | + | |
- | * Le compteur "dent de scie" | + | |
- | * L' | + | |
- | * L' | + | |
- | + | ||
- | ==== Hexadecimal ==== | + | |
- | D' | + | |
- | Pour éviter la confusion dans ce qui va suivre, je met la base du nombre à gauche du nombre. | + | |
- | Exemples : | + | |
- | < | + | |
- | (b10) 0 = (b2) 0 = (b16) 0 | + | |
- | (b10) 9 = (b2) 1001 = (b16) 9 | + | |
- | (b10) 14 = (b2) 1110 = (b16) E | + | |
- | (b10) 200 = (b2) 11001000 = (b16) C8 | + | |
- | </ | + | |
- | Du coup, historiquement, | + | |
- | + | ||
- | ==== Notation polonaise inversée ==== | + | |
- | C'est une normalisation qui permet à chacun d' | + | |
- | 3 10+ 2* = 26 | + | |
- | 10 2* 3+ = 23 | + | |
- | + | ||
- | ==== Arithmetique à virgule fixe ==== | + | |
- | Au sujet de la forme des nombres manipulés dans Ibniz, l' | + | |
- | Le format des nombres est 4 digits hexadecimaux à gauche de la virgule (partie entière) et 4 digits hexadecimaux à droite de la virgule (partie décimale). | + | |
- | De plus, la virgule n'est pas symbolisé par une virgule, mais par un point dans le monde anglosaxon de l' | + | |
- | Du coup c'est un peu particulier par rapport aux nombres que l'on côtoie habituellement, | + | |
- | + | ||
- | ==== Pile ==== | + | |
- | + | ||
- | ==== Le compteur "dent de scie" ==== | + | |
- | Le principe de ibniz, c'est qu'il y a un compteur incrémenté de 0000.0000 jusqu' | + | |
- | + | ||
- | {{ : | + | |
- | + | ||
- | ==== L' | + | |
- | Pour l' | + | |
- | + | ||
- | <WRAP center round important 60%> | + | |
- | La sortie audio de Ibniz ne produit des sons qu' | + | |
- | </ | + | |
- | + | ||
- | Ensuite le compteur est incrémenté à une certaine vitesse. Cela dépend de la vitesse de calcul de la machine que tu utilise, mais avec 60 FPS, le compteur compte de 0 à 60 en 1 sec, cela fait 60*1024 incrément audio. Cela veut dire que 60 fois par seconde, la partie décimale du compteur passe de 0 à 1 par incrément de 1/1024. | + | |
- | + | ||
- | {{ : | + | |
- | + | ||
- | Du côté de la production sonore de Ibniz, en fait, ibniz prend en entrée une valeur comprise entre 0 et 1 et produit un son. Donc par défaut, la dent de scie est envoyé et une dent de scie qui varie 60 fois par seconde entre 0 et 1 cela produit le son par défaut de Ibniz. | + | |
- | + | ||
- | === Exemple: production d'une note LA avec Ibniz === | + | |
- | D'un autre côté, la note LA, est produite par une sinusoide de fréquence 220 Hz. | + | |
- | + | ||
- | {{ : | + | |
- | + | ||
- | Pour produire un LA avec Ibniz, il faut donc produire non pas une dent de scie, mais une sinusoide qui varie entre 0 et 1 à 220 Hz. Le jeu consiste donc à ecrire la bonne fonction mathématique dans Ibniz qui sera capable de convertir la dent de scie entre 0 et 1 qui varie 60 fois par seconde en une sinusoide qui varie entre 0 et 1 220 fois par seconde. | + | |
- | \\ \\ | + | |
- | Pour cela, il y a une fonction sin dans ibniz qui prend une valeur en entrée et retourne une valeur comprise entre -1 et 1. sin 0 = 0 sin Pi/2 = 1 (Pi/2 correspond à un angle de 90°) sin Pi = 0 sin 3*Pi/2 = -1 sin 2*Pi = 0 On dit que la fonction sin est periodique de periode 2*Pi. Si on arrive à faire varier l' | + | |
- | \\ \\ | + | |
- | Enfin, la fonction sinusoide d' | + | |
- | + | ||
- | {{ : | + | |
- | + | ||
- | Au sujet du +1 /2 (ou 1+ 2/) : la sinusoide produit un résultat compris entre -1 et 1. Or, lbniz, pour produire du son, ne prend que la partie entre 0 et 1 du résultat. | + | |
- | Exemples pour la simple formule s dans ibniz (cela va juste calculer le sinus de la valeur sur la pile) : | + | |
- | Au début, la première valeur sur la pile (en entrée de la formule) (le départ de la dent de scie) est 0000.0000. voyons ce qui ce passe étape par étape : | + | |
- | + | ||
- | * Pile = 0000.0000 => sin(0000.0000 * 2Pi) = 0 => On envoie 0 sur la sortie son | + | |
- | * Pile = 0000.0040 => sin(0000.0040* 2Pi) =~ 0000.0199 => On envoie 0000.0199 sur la sortie son | + | |
- | * Pile = 0000.0080 => sin(0000.0080* 2Pi) =~ 0000.0664 => On envoie 0000.000E sur la sortie son | + | |
- | [...] | + | |
- | * Pile = 0000.1000=> | + | |
- | * Pile = 0000.A000=> | + | |
- | + | ||
- | <WRAP center round important 60%> | + | |
- | Quand le sinus retourne une valeur négative, on envoie à la carte son la partie décimale de la valeur négative, et du coup le son ne sera pas produit par une belle sinusoide mais par une sorte de demi sinusoide bizare avec une fréquence 2 fois plus élevée. Pour avoir une belle sinusoide sur la sortie son, il faut adapter la sortie initiale du sinus entre -1 et 1 à l' | + | |
- | </ | + | |
- | + | ||
- | + | ||
- | ==== L' | + | |
- | Pour la vidéo, le compteur est incrémenté par pas de OOOO.OOO1 soit 1/65536. | + | |
- | Pour la vidéo, le compteur va donc avoir les valeur suivantes : 0, 1/65536, 2/65536, ..., 65535/ | + | |
- | + | ||
- | + | ||
- | ===== Les bases de fonctionnement issues de l' | + | |
- | Notes : Les informations ci-dessous sont issues de ce que j'ai compris d' | + | |
- | + | ||
- | ==== La machine et la pile ==== | + | |
- | + | ||
- | IBNIZ reproduit un ordinateur virtuel minimaliste qu'on programme en assembleur IBNIZ. | + | |
- | + | ||
- | IBNIZ fournit un jeu d' | + | |
- | + | ||
- | On retrouve les instructions habituelles pour programmer en assembleur tel que poser une valeur sur la pile, l' | + | |
- | + | ||
- | IBNIZ utilise une pile LIFO : Last In, First Out, et pose à chaque cycle des valeurs sur la pile, qui changent selon le mode (voir plus bas). | + | |
- | + | ||
- | Les commandes que l'on tape modifient ces valeurs, et IBNIZ utilise ces nouvelles valeurs pour produire de l' | + | |
- | + | ||
- | **Exemple, la fameuse texture du XOR : ^xp** | + | |
- | + | ||
- | - IBNIZ pose sur la pile 3 valeurs : X, Y, T (T est au bas de la pile et X en haut. X a été la dernière valeur posée sur la pile, cela sera donc la première valeur enlevée de la pile). IBNIZ balaye l' | + | |
- | - Le chapeau ^ effectue l' | + | |
- | - La lettre x inverse les deux valeurs de la pile : T passe en première position en haut de la pile, suivi de X^Y en seconde position | + | |
- | - La lettre p (pop) enlève une valeur de la pile, il reste donc sur la pile le résultat de X^Y, et IBNIZ se sert de cette valeur pour faire la video et le son. | + | |
- | + | ||
- | Un nouveau cycle recommence, IBINIZ repars à l' | + | |
- | + | ||
- | ===== Les différents modes de fonctionnement ===== | + | |
- | + | ||
- | IBNIZ dispose de 3 modes de fonctionnement : | + | |
- | + | ||
- | Vidéo en mode TYX : IBNIZ pose sur la pile TTTT.0000, YYYY.YYYY et XXXX.XXXX | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | Vidéo en mode T : IBNIZ pose sur la pile TTTT.YYXX | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | Audio en mode T : IBNIZ pose sur la pile TTTT.TTTT | + | |
- | + | ||
- | '' | + | |
- | + | ||
- | Attention, l' | + | |
- | + | ||
- | ===== References | + | |
* Le site officiel est http:// | * Le site officiel est http:// | ||
* Une bonne page pour (commencer à) comprendre [[http:// | * Une bonne page pour (commencer à) comprendre [[http:// | ||
Ligne 437: | Ligne 499: | ||
* Une version de Ibniz qui permet d' | * Une version de Ibniz qui permet d' | ||
* Une interface graphique qui permet de gérer différents sets IBNIZ et de lancer plusieurs IBNIZ à des positions et avec des tailles et à des positions différentes : [[https:// | * Une interface graphique qui permet de gérer différents sets IBNIZ et de lancer plusieurs IBNIZ à des positions et avec des tailles et à des positions différentes : [[https:// | ||
+ | * Un PAD avec plein de " | ||
+ | * Une {{ :: | ||
+ | * https:// | ||
+ | * http:// | ||
- | + | {{tag> | |
- | + | ||
- | + | ||
- | + | ||
- | {{tag> | + |
ibniz.txt · Dernière modification : 2024/03/05 16:23 de Benjamin Labomedia