nabaztag_hack_kit 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +7 -0
- data/.travis.yml +3 -0
- data/CHANGELOG.md +11 -0
- data/Gemfile +4 -0
- data/README.md +119 -0
- data/Rakefile +21 -0
- data/bin/mtl_comp +41 -0
- data/bin/mtl_merge +22 -0
- data/bin/mtl_simu +40 -0
- data/bytecode/lib/buffer.mtl +109 -0
- data/bytecode/lib/button.mtl +27 -0
- data/bytecode/lib/data_helper.mtl +88 -0
- data/bytecode/lib/ear.mtl +90 -0
- data/bytecode/lib/led.mtl +33 -0
- data/bytecode/lib/rfid.mtl +50 -0
- data/bytecode/main.mtl +129 -0
- data/config.ru +6 -0
- data/ext/bytecode/Commands.md +172 -0
- data/ext/bytecode/Docs.md +488 -0
- data/ext/bytecode/README.md +5 -0
- data/ext/bytecode/lib/arp.mtl +159 -0
- data/ext/bytecode/lib/cfg.mtl +74 -0
- data/ext/bytecode/lib/choreos.mtl +1487 -0
- data/ext/bytecode/lib/dhcp.mtl +152 -0
- data/ext/bytecode/lib/dns.mtl +89 -0
- data/ext/bytecode/lib/http.mtl +84 -0
- data/ext/bytecode/lib/tcp.mtl +340 -0
- data/ext/bytecode/lib/udp.mtl +49 -0
- data/ext/bytecode/lib/util.mtl +74 -0
- data/ext/bytecode/lib/var.mtl +15 -0
- data/ext/bytecode/lib/wifi.mtl +243 -0
- data/ext/bytecode/nominal-ping.mtl +5828 -0
- data/ext/mtl/Makefile +42 -0
- data/ext/mtl/README.md +13 -0
- data/ext/mtl/bc.cpp +1891 -0
- data/ext/mtl/conf.bin.sans_password +0 -0
- data/ext/mtl/config.txt +5 -0
- data/ext/mtl/dumpbc.c +2566 -0
- data/ext/mtl/extconf.rb +1 -0
- data/ext/mtl/linux_simu.c +271 -0
- data/ext/mtl/linux_simuaudio.c +16 -0
- data/ext/mtl/linux_simuaudio.h +18 -0
- data/ext/mtl/linux_simunet.c +620 -0
- data/ext/mtl/linux_simunet.h +7 -0
- data/ext/mtl/log.c +297 -0
- data/ext/mtl/log.h +20 -0
- data/ext/mtl/main_compiler.cpp +104 -0
- data/ext/mtl/main_simu.cpp +221 -0
- data/ext/mtl/mp3/GTKANAL.H +97 -0
- data/ext/mtl/mp3/LAYER3.C +2090 -0
- data/ext/mtl/mp3/TABINIT.C +82 -0
- data/ext/mtl/mp3/common.c +265 -0
- data/ext/mtl/mp3/dct64_i386.c +316 -0
- data/ext/mtl/mp3/decode_i386.c +155 -0
- data/ext/mtl/mp3/huffman.h +332 -0
- data/ext/mtl/mp3/interface.c +258 -0
- data/ext/mtl/mp3/mpg123.h +182 -0
- data/ext/mtl/mp3/mpglib.h +44 -0
- data/ext/mtl/properties.c +293 -0
- data/ext/mtl/properties.h +10 -0
- data/ext/mtl/simu.c +750 -0
- data/ext/mtl/simuaudio.c +662 -0
- data/ext/mtl/simuaudio.h +74 -0
- data/ext/mtl/simunet.c +400 -0
- data/ext/mtl/simunet.h +30 -0
- data/ext/mtl/utils/correct_const.sh +34 -0
- data/ext/mtl/vaudio.c +677 -0
- data/ext/mtl/vaudio.h +46 -0
- data/ext/mtl/vbc.h +160 -0
- data/ext/mtl/vbc_str.h +166 -0
- data/ext/mtl/vcomp/Makefile +29 -0
- data/ext/mtl/vcomp/bootstrap.cpp +89 -0
- data/ext/mtl/vcomp/compiler.cpp +470 -0
- data/ext/mtl/vcomp/compiler.h +200 -0
- data/ext/mtl/vcomp/compiler_file.cpp +929 -0
- data/ext/mtl/vcomp/compiler_prog.cpp +250 -0
- data/ext/mtl/vcomp/compiler_term.cpp +1053 -0
- data/ext/mtl/vcomp/compiler_type.cpp +872 -0
- data/ext/mtl/vcomp/compiler_var.cpp +289 -0
- data/ext/mtl/vcomp/file.cpp +79 -0
- data/ext/mtl/vcomp/file.h +39 -0
- data/ext/mtl/vcomp/filesystem.h +14 -0
- data/ext/mtl/vcomp/interpreter.cpp +85 -0
- data/ext/mtl/vcomp/interpreter.h +121 -0
- data/ext/mtl/vcomp/memory.cpp +241 -0
- data/ext/mtl/vcomp/memory.h +326 -0
- data/ext/mtl/vcomp/param.h +95 -0
- data/ext/mtl/vcomp/parser.cpp +427 -0
- data/ext/mtl/vcomp/parser.h +97 -0
- data/ext/mtl/vcomp/parser_xml.cpp +124 -0
- data/ext/mtl/vcomp/prodbuffer.cpp +125 -0
- data/ext/mtl/vcomp/prodbuffer.h +42 -0
- data/ext/mtl/vcomp/resource.h +17 -0
- data/ext/mtl/vcomp/stdlib_core.cpp +122 -0
- data/ext/mtl/vcomp/terminal.cpp +73 -0
- data/ext/mtl/vcomp/terminal.h +30 -0
- data/ext/mtl/vcomp/util.cpp +48 -0
- data/ext/mtl/vcomp/util.h +31 -0
- data/ext/mtl/vinterp.c +1349 -0
- data/ext/mtl/vinterp.h +11 -0
- data/ext/mtl/vloader.c +127 -0
- data/ext/mtl/vloader.h +31 -0
- data/ext/mtl/vlog.c +589 -0
- data/ext/mtl/vlog.h +69 -0
- data/ext/mtl/vmem.c +424 -0
- data/ext/mtl/vmem.h +107 -0
- data/ext/mtl/vnet.c +255 -0
- data/ext/mtl/vnet.h +19 -0
- data/lib/nabaztag_hack_kit/message/api.rb +39 -0
- data/lib/nabaztag_hack_kit/message/helper.rb +39 -0
- data/lib/nabaztag_hack_kit/message.rb +36 -0
- data/lib/nabaztag_hack_kit/server.rb +50 -0
- data/lib/nabaztag_hack_kit/version.rb +3 -0
- data/lib/nabaztag_hack_kit.rb +4 -0
- data/nabaztag_hack_kit.gemspec +29 -0
- data/public/bytecode.bin +0 -0
- data/test/bytecode/helper.mtl +60 -0
- data/test/bytecode/native.mtl +28 -0
- data/test/bytecode/test.mtl +221 -0
- data/test/spec_helper.rb +5 -0
- data/test/unit/message_spec.rb +56 -0
- metadata +209 -0
data/bytecode/main.mtl
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
// VLISP - Jan 2012
|
2
|
+
|
3
|
+
proto main 0;;
|
4
|
+
proto earsInit 0;;
|
5
|
+
|
6
|
+
#include "../ext/bytecode/lib/var"
|
7
|
+
#include "../ext/bytecode/lib/util"
|
8
|
+
#include "../ext/bytecode/lib/cfg"
|
9
|
+
#include "../ext/bytecode/lib/arp"
|
10
|
+
#include "../ext/bytecode/lib/udp"
|
11
|
+
#include "../ext/bytecode/lib/tcp"
|
12
|
+
#include "../ext/bytecode/lib/dns"
|
13
|
+
#include "../ext/bytecode/lib/http"
|
14
|
+
#include "../ext/bytecode/lib/dhcp"
|
15
|
+
#include "lib/data_helper"
|
16
|
+
#include "lib/buffer"
|
17
|
+
#include "../ext/bytecode/lib/wifi"
|
18
|
+
|
19
|
+
//-------------------- HTTP
|
20
|
+
fun playerUrl tag=
|
21
|
+
strcatlist confGetServerUrl::"/players/"::(webmac tag)::".jsp"::nil;;
|
22
|
+
|
23
|
+
fun eventUrl data=
|
24
|
+
strcatlist confGetServerUrl::"/events.jsp"::"?event[data]="::data::nil;;
|
25
|
+
|
26
|
+
fun buttonUrl data=
|
27
|
+
strcatlist confGetServerUrl::"/vl/button.jsp?"::data::nil;;
|
28
|
+
|
29
|
+
fun logUrl=
|
30
|
+
strcatlist confGetServerUrl::"/vl/log.jsp"::nil;;
|
31
|
+
|
32
|
+
fun _cbdummyhttp http res=
|
33
|
+
0
|
34
|
+
;;
|
35
|
+
|
36
|
+
fun evalTrame res=
|
37
|
+
let parseResponse httpgetcontent res -> bufferlist in
|
38
|
+
if bufferlist != nil then
|
39
|
+
(
|
40
|
+
for l = bufferlist; l != nil; tl l do
|
41
|
+
(
|
42
|
+
let hd l -> [code val] in
|
43
|
+
if code == 12 then // OK
|
44
|
+
(
|
45
|
+
0
|
46
|
+
)
|
47
|
+
else if code == 16 then // (RE) INIT
|
48
|
+
(
|
49
|
+
earsInit;
|
50
|
+
0
|
51
|
+
)
|
52
|
+
else if code == 17 then // LOG
|
53
|
+
(
|
54
|
+
httprequest "POST" logUrl (strcat "logs=" logs) #_cbdummyhttp HTTP_NORMAL;
|
55
|
+
set logs = "";
|
56
|
+
0
|
57
|
+
)
|
58
|
+
else if code == 18 then // ERROR
|
59
|
+
(
|
60
|
+
0
|
61
|
+
)
|
62
|
+
else if code == 19 then // REBOOT
|
63
|
+
(
|
64
|
+
exit
|
65
|
+
)
|
66
|
+
// led buffers: short 20-24 loop 25-29; 3Byte: short 30-34 loop 35-39
|
67
|
+
else if code >= 20 && code <= 39 then
|
68
|
+
(
|
69
|
+
let code % 10 -> index in
|
70
|
+
let 2 * (code / 30) + 1 -> step in
|
71
|
+
let index / 5 -> loop in
|
72
|
+
_bufferFill index step loop val;
|
73
|
+
0
|
74
|
+
)
|
75
|
+
// ear buffers: short 40-41, loop 42-43
|
76
|
+
else if code >= 40 && code <= 43 then
|
77
|
+
(
|
78
|
+
let code % 10 -> index in
|
79
|
+
let 1 -> step in
|
80
|
+
let index / 2 -> loop in
|
81
|
+
_bufferFill index+10 step loop val;
|
82
|
+
0
|
83
|
+
)
|
84
|
+
)
|
85
|
+
)
|
86
|
+
;;
|
87
|
+
|
88
|
+
fun _cbHttp http res=
|
89
|
+
evalTrame res;
|
90
|
+
0
|
91
|
+
;;
|
92
|
+
|
93
|
+
//inputs
|
94
|
+
#include "lib/rfid"
|
95
|
+
#include "lib/button"
|
96
|
+
|
97
|
+
//outputs
|
98
|
+
#include "lib/led"
|
99
|
+
#include "lib/ear"
|
100
|
+
|
101
|
+
//###############################################
|
102
|
+
//-------------------- LOOP ---------------------
|
103
|
+
fun loop=
|
104
|
+
wifiRun;
|
105
|
+
wifiCheck;
|
106
|
+
|
107
|
+
//checkRFID;
|
108
|
+
checkButton;
|
109
|
+
setLeds;
|
110
|
+
earRead 0;
|
111
|
+
earRead 1;
|
112
|
+
0;;
|
113
|
+
|
114
|
+
//###############################################
|
115
|
+
//-------------------- MAIN ---------------------
|
116
|
+
fun main=
|
117
|
+
confInit;
|
118
|
+
wifiInit 0;
|
119
|
+
buffersInit 14;
|
120
|
+
earsInit;
|
121
|
+
|
122
|
+
loopcb #loop; // 20 p. second
|
123
|
+
|
124
|
+
netstart;
|
125
|
+
startdnsclient;
|
126
|
+
|
127
|
+
sndVol 0;
|
128
|
+
srand time_ms;
|
129
|
+
0;;
|
data/config.ru
ADDED
@@ -0,0 +1,172 @@
|
|
1
|
+
# Projet METAL
|
2
|
+
|
3
|
+
## Commands
|
4
|
+
List of commands supported by the VM. _custom_ got added by me (see lib `openNabaztag.mtl`)
|
5
|
+
|
6
|
+
### Native
|
7
|
+
| famille | label | type | commentaire |
|
8
|
+
| -- | -- | -- | -- | -- |
|
9
|
+
| core | hd | fun[list u0]u0 | premier élément d'une liste |
|
10
|
+
| core | tl | fun[list u0]list u0 | liste privée de son premier élément |
|
11
|
+
| core | tabnew | fun[u0 I]tab u0 | création d'une table : valeur d'initialisation, taille de la table |
|
12
|
+
| core | tablen | fun[tab u0]I | taille d'une table |
|
13
|
+
| core | abs | fun[I]I | valeur absolue |
|
14
|
+
| core | min | fun[I I]I | minimum |
|
15
|
+
| core | max | fun[I I]I | maximum |
|
16
|
+
| core | rand | fun[]I | nombre aléatoire sur 16 bits |
|
17
|
+
| core | srand | fun[I]I | définition de la graine du générateur aléatoire |
|
18
|
+
| core | strnew | fun[I]S | création d'une nouvelle chaîne de caractères, dont la taille est passée en argument |
|
19
|
+
| core | strset | fun[S I I]S | changement d'un caractère d'une chaîne : chaine, index, valeur |
|
20
|
+
| core | strcpy | fun[S I S I I]S | copie d'une sous-chaîne de caractère : chaîne destination, index destination, chaîne source, index source, longeur |
|
21
|
+
| core | vstrcmp | fun[S I S I I]I | comparaison d'une sous-chaîne de caractère : chaîne destination, index destination, chaîne source, index source, longeur |
|
22
|
+
| core | strfind | fun[S I S I I]I | recherche d'une sous-chaîne dans une chaîne : chaîne, index, sous-chaîne, index, taille ; retourne l'index dans la chaîne (nil si non trouvé) |
|
23
|
+
| custom| strstr | fun[S S I]I | fin substring string, needle, start; returns pos
|
24
|
+
| core | strfindrev | fun[S I S I I]I | recherche inversée d'une sous-chaîne dans une chaîne : chaîne, index, sous-chaîne, index, taille ; retourne l'index dans la chaîne (nil si non trouvé) |
|
25
|
+
| core | strlen | fun[S]I | taille d'une chaîne de caractères |
|
26
|
+
| core | strget | fun[S I]I | retourne le n-ième caractères d'une chaîne (entier entre 0 et 255) |
|
27
|
+
| core | strsub | fun[S I I]S | calcul d'une sous-chaîne : chaîne source, index source, taille |
|
28
|
+
| core | strcat | fun[S S]S | concaténation de deux chaînes |
|
29
|
+
| core | strcatlist | fun[list S]S | concaténation d'une liste de chaînes |
|
30
|
+
| custom| listtostr | fun[list I]S | integer list to string
|
31
|
+
| core | atoi | fun[S]I | Conversion d'une chaîne en base 10 vers un entier |
|
32
|
+
| core | htoi | fun[S]I | Conversion d'une chaîne hexadécimale vers un entier |
|
33
|
+
| core | itoa | fun[I]S | Conversion d'un entier vers une chaîne en base 10 |
|
34
|
+
| core | ctoa | fun[I]S | Conversion d'un code ascii vers une chaîne d'un seul caractère |
|
35
|
+
| core | itoh | fun[I]S | Conversion d'un entier vers une chaîne en hexadécimal |
|
36
|
+
| core | ctoh | fun[I]S | Conversion d'un caractère vers une chaîne en hexadécimal de taille 2 |
|
37
|
+
| core | itobin2 | fun[I]S | Conversion d'un entier vers une chaîne de deux caractères |
|
38
|
+
| core | strcmp | fun[S S]I | Comparaison de deux chaînes de caractères |
|
39
|
+
| core | crypt | fun[S I I I I]I | Cryptage simple : chaîne, index, taille, clef, delta ; retourne la nouvelle clef |
|
40
|
+
| core | uncrypt | fun[S I I I I]I | Décryptage simple : chaîne, index, taille, clef, delta ; retourne la nouvelle clef |
|
41
|
+
| core | listswitch | fun[list[u0 u1] u0]u1 | Recherche d'un élément quelconque dans une liste d'associations |
|
42
|
+
| core | listswitchstr | fun[list[S u1] S]u1 | Recherche d'une chaîne dans une liste d'associations |
|
43
|
+
| device | led | fun[I I]I | définition de la couleur d'une led : numéro de la led, couleur rgb 24 bits |
|
44
|
+
| device | motorset | fun[I I]I | réglage d'un moteur : index moteur, direction |
|
45
|
+
| device | motorget | fun[I]I | lecture de la position d'un moteur : index moteur |
|
46
|
+
| device | button2 | fun[]I | lecture de l'état du bouton de tête : 0=relâché |
|
47
|
+
| device | button3 | fun[]I | lecture de l'état de la molette : 0 = position maxi, 255= position butée |
|
48
|
+
| device | load | fun[S I S I I]I | lecture de la flash : chaîne destination, index, chaîne source (="conf.bin"), index source (=0), taille |
|
49
|
+
| device | save | fun[S I S I I]I | sauvegarde dans la flash : chaîne source, index source, chaîne destination (="conf.bin"), index destination (=0), taille |
|
50
|
+
| device | loopcb | fun[fun[]I]fun[]I | définition de la callback principale (appelée 20 fois par seconde) |
|
51
|
+
| device | rfidGet | fun[]S | lecture du tag rfid : retourne "nil" si aucun, "ERROR" si erreur, id de tag sinon |
|
52
|
+
| device | reboot | fun[I I]I | Force le reboot : deux valeurs magic 0x0407FE58 0x13fb6754 |
|
53
|
+
| device | flashFirmware | fun[S I I]I | Flashage du firmware : chaîne, deux valeurs magic 0x13fb6754 0x0407FE58 |
|
54
|
+
| hack | gc | fun[]I | provocation du gc |
|
55
|
+
| hack | corePP | fun[]I | Retourne le pointeur de pile |
|
56
|
+
| hack | corePush | fun[u0]u0 | Forcer l'empilement d'une valeur |
|
57
|
+
| hack | corePull | fun[I]I | Forcer le dépilement d'une valeur |
|
58
|
+
| hack | coreBit0 | fun[u0 I]u0 | Modifie le bit 0 de la valeur située au sommet de la pile |
|
59
|
+
| net | netCb | fun[fun[S S]I]fun[S S]I | Définition de la callback réseau, dont les arguments sont : trame, mac émetteur |
|
60
|
+
| net | netSend | fun[S I I S I I]I | Envoi d'une trame réseau : chaîne source, index, taille, mac destination, xxx,xxx |
|
61
|
+
| net | netState | fun[]I | Retourne l'état de la connexion |
|
62
|
+
| net | netMac | fun[]S | Retourne l'adresse mac de l'hôte (chaîne de 6 caractères) |
|
63
|
+
| net | netChk | fun[S I I I]I | Calcul le checksum IP : chaîne, index, taille, checksum de départ |
|
64
|
+
| net | netSetmode | fun[I S I]I | Demande la passage dans un mode réseau particulier |
|
65
|
+
| net | netScan | fun[S]list[S S S I I I I] | Effectue un scan réseau : SSID cherché (nil : tous) ; retourne une liste [ssid mac bssid rssi channel rateset encryption] |
|
66
|
+
| net | netAuth | fun[[S S S I I I I] I I S][S S S I I I I] | Procédure d'authentification : résultat du scan, mode d'authentification, style d'authentification, clef |
|
67
|
+
| net | netPmk | fun[S S]S | Calcul de la clef Pmk (Wpa) : ssid, clef wpa |
|
68
|
+
| net | netRssi | fun[]I | Retourne le Rssi moyen (puissance de réception) |
|
69
|
+
| net | netSeqAdd | fun[S I]S | Mise à jour d'un numéro de séquence TCP : numéro initial, taille paquet |
|
70
|
+
| net | strgetword | fun[S I]I | Lit un mot 16 bits dans un header IP : chaîne source, index |
|
71
|
+
| net | strputword | fun[S I I]S | Ecrit un mot 16 bits dans un header IP : chaîne source, index, valeur |
|
72
|
+
| simu | udpStart | fun[I]I | Démarre un serveur udp : port udp ; retourne un id de socket |
|
73
|
+
| simu | udpCb | fun[fun[I S S]I]fun[I S S]I | Définit la callback udp, dont les arguments sont : id de socket, trame reçue, ip émetteur |
|
74
|
+
| simu | udpStop | fun[I]I | Stoppe un serveur udp : port udp |
|
75
|
+
| simu | udpSend | fun[I S I S I I]I | Envoi d'une trame udp : id de socket, ip destinataire, port destinataire, chaîne, index, longueur |
|
76
|
+
| simu | tcpOpen | fun[S I]I | Crée une connexion tcp : ip destinataire, port destinataire ; retourne un id de socket |
|
77
|
+
| simu | tcpClose | fun[I]I | Ferme une connexion tcp : id de socket |
|
78
|
+
| simu | tcpSend | fun[I S I I]I | Envoi d'une trame tcp : id de socket, ip destinataire, port destinataire, chaîne, index, longueur ; retourne l'index du prochain octet à transmettre |
|
79
|
+
| simu | tcpCb | fun[fun[I I S]I]fun[I I S]I | Définit la callback tcp, dont les arguments sont : id de socket, événement(-1 : erreur/fin, 2 : accept (dans ce cas, le troisième argument est l'id de la nouvelle socket), 0 : write, 1 : read), trame reçue |
|
80
|
+
| simu | tcpListen | fun[I]I | Démarre un serveur tcp : port tcp ; retourne un id de socket |
|
81
|
+
| simu | tcpEnable | fun[I I]I | Place une socket tcp en pause : id de socket, mode (1=pause, 0=normal) |
|
82
|
+
| sound | playStart | fun[I fun[I]I]I | lancement du player audio : inutilisé, callback de remplissage du buffer audio (paramètre : nombre d'octets attendus) |
|
83
|
+
| sound | playFeed | fun[S I I]I | remplissage du buffer audio : chaîne, index, taille. Retourne le nombre d'octets copiés dans le buffer |
|
84
|
+
| sound | playStop | fun[]I | arrêt du player audio |
|
85
|
+
| sound | recStart | fun[I I fun[S]I]I | lancement de l'enregistreur audio : fréquence (8000), gain (0=automatique), callback (paramètre : échantillon enregistré) |
|
86
|
+
| sound | recStop | fun[]I | arrêt de l'enregistreur audio |
|
87
|
+
| sound | recVol | fun[S I]I | calcul du volume : chaîne, index |
|
88
|
+
| sound | sndVol | fun[I]I | définition du volume du player audio |
|
89
|
+
| sound | playTime | fun[]I | retourne le temps de décodage |
|
90
|
+
| sound | sndRefresh | fun[]I | force l'appel à la routine de gestion du chip audio |
|
91
|
+
| sound | sndWrite | fun[I I]I | Ecrit un registre du chip audio : numéro de registre, valeur |
|
92
|
+
| sound | sndRead | fun[I]I | Lit un registre du chip audio : numéro de registre |
|
93
|
+
| sound | sndFeed | fun[S I I]I | Ecrit directement dans le buffer du chip audio : chaîne, index, taille |
|
94
|
+
| sound | sndAmpli | fun[I]I | Définit l'état de l'ampli : 1=on, 0=off |
|
95
|
+
| sound | adp2wav | fun[S I S I I]S | Conversion adp vers wav : chaîne destination, index destination, chaîne source, index source, longueur |
|
96
|
+
| sound | wav2adp | fun[S I S I I]S | Conversion wav vers adp : chaîne destination, index destination, chaîne source, index source, longueur |
|
97
|
+
| sound | alaw2wav | fun[S I S I I I]S | Conversion alaw/mulaw vers wav : chaîne destination, index destination, chaîne source, index source, longueur, type (xxx) |
|
98
|
+
| sound | wav2alaw | fun[S I S I I I]S | Conversion alaw/mulaw vers wav : chaîne destination, index destination, chaîne source, index source, longueur, type (xxx) |
|
99
|
+
| sys | Secholn | fun[S]S | affichage d'une chaîne de caractères sur la sortie standard, suivie d'un retour à la ligne |
|
100
|
+
| custom | SLecho | fun[list S]S | echo string list
|
101
|
+
| custom | SLecholn | fun[list S]S | echo string list
|
102
|
+
| custom | ILecho | fun[list I]S | echo string list
|
103
|
+
| custom | ILecholn | fun[list I]S | echo string list
|
104
|
+
| sys | Secho | fun[S]S | affichage d'une chaîne de caractères sur la sortie standard |
|
105
|
+
| sys | Iecholn | fun[u0]u0 | affichage d'un entier en décimal sur la sortie standard, suivie d'un retour à la ligne |
|
106
|
+
| sys | Iecho | fun[u0]u0 | affichage d'un entier en décimal sur la sortie standard |
|
107
|
+
| sys | time | fun[]I | heure en secondes |
|
108
|
+
| sys | time_ms | fun[]I | heure en millisecondes |
|
109
|
+
| sys | bytecode | fun[S]S | chargement d'un nouveau bytecode |
|
110
|
+
| sys | envget | fun[]S | lecture de l'environnement |
|
111
|
+
| sys | envset | fun[S]S | réglage de l'environnement (limité à 4096 octets) |
|
112
|
+
| device | rfidGetList | fun[] list S | lecture d'une liste de tags rfid |
|
113
|
+
| device | rfidRead | fun[S I]S | lecture d'un bloc de données d'un tag : id du tag, numéro du bloc ; retourne les données (chaîne de 4 octets binaires) |
|
114
|
+
| device | rfidWrite | fun[S I S]I | écriture d'un bloc de données d'un tag : id du tag, numéro du bloc, donnée à écrire (chaîne de 4 octets) ; retourne 0 si ok |
|
115
|
+
|
116
|
+
## Bytecode
|
117
|
+
|
118
|
+
| label | opcode | commentaire |
|
119
|
+
| -- | -- | -- |
|
120
|
+
| exec | 0 | appel d'une routine |
|
121
|
+
| ret | 1 | fin d'une routine |
|
122
|
+
| intb | 2 | empiler un entier 8 bits |
|
123
|
+
| int | 3 | empiler un entier |
|
124
|
+
| nil | 4 | empiler "nil" |
|
125
|
+
| drop | 5 | dépiler un élément |
|
126
|
+
| dup | 6 | dupliquer un élément dans la pile |
|
127
|
+
| getlocalb | 7 | empiler une variable locale, dont l'index tient sur 8 bits |
|
128
|
+
| getlocal | 8 | empiler une variable locale, dont l'index au sommet de la pile |
|
129
|
+
| add | 9 | ajouter les deux valeurs au sommet de la pile |
|
130
|
+
| sub | 10 | soustraire les deux valeurs au sommet de la pile |
|
131
|
+
| mul | 11 | multiplier les deux valeurs au sommet de la pile |
|
132
|
+
| div | 12 | diviser les deux valeurs au sommet de la pile |
|
133
|
+
| mod | 13 | modulo des deux valeurs au sommet de la pile |
|
134
|
+
| and | 14 | ET logique entre les bits des deux valeurs au sommet de la pile |
|
135
|
+
| or | 15 | OU logique entre les bits des deux valeurs au sommet de la pile |
|
136
|
+
| eor | 16 | OU EXCLUSIF logique entre les bits des deux valeurs au sommet de la pile |
|
137
|
+
| shl | 17 | décalage vers la gauche |
|
138
|
+
| shr | 18 | décalage vers la droite |
|
139
|
+
| neg | 19 | changement de signe de la valeur au sommet de la pile |
|
140
|
+
| not | 20 | inversion des bits de la valeur au sommet de la pile |
|
141
|
+
| non | 21 | inversion booléenne |
|
142
|
+
| eq | 22 | test d'égalité des deux valeurs au sommet de la pile |
|
143
|
+
| ne | 23 | test de différence des deux valeurs au sommet de la pile |
|
144
|
+
| lt | 24 | test d'infériorité des deux valeurs au sommet de la pile |
|
145
|
+
| gt | 25 | test de supériorité des deux valeurs au sommet de la pile |
|
146
|
+
| le | 26 | test "inférieur ou égal" des deux valeurs au sommet de la pile |
|
147
|
+
| ge | 27 | test "supérieur ou égal" des deux valeurs au sommet de la pile |
|
148
|
+
| goto | 28 | déplacement du pointeur programme |
|
149
|
+
| else | 29 | déplacement conditionnel du pointeur programme en fonction de la valeur au sommet de la pile |
|
150
|
+
| mktabb | 30 | crée une table dont la taille est constante et tient sur 8 bits |
|
151
|
+
| mktab | 31 | crée une table dont la taille est au sommet de la pile |
|
152
|
+
| deftabb | 32 | crée une table dont la taille est constante et tient sur 8 bits, en initialisant les valeurs à partir de la pile |
|
153
|
+
| deftab | 33 | crée une table dont la taille est au sommet de la pile, en initialisant les valeurs à partir de la pile |
|
154
|
+
| fetchb | 34 | empile un élément d'un tuple, dont l'index est constant et tient sur 8 bits |
|
155
|
+
| fetch | 35 | empile un élément d'un tuple, dont l'index est au sommet de la pile |
|
156
|
+
| getglobalb | 36 | empiler une variable globale, dont l'index tient sur 8 bits |
|
157
|
+
| getglobal | 37 | empiler une variable globale, dont l'index au sommet de la pile |
|
158
|
+
| Secho | 38 | voir lib native |
|
159
|
+
| Iecho | 39 | voir lib native |
|
160
|
+
| setlocalb | 40 | écrit une variable locale, dont l'index tient sur 8 bits |
|
161
|
+
| setlocal | 41 | écrit une variable locale, dont l'index est dans la pile |
|
162
|
+
| setglobal | 42 | écrit une variable globale |
|
163
|
+
| setstructb | 43 | écrit un élément d'un tuple, dont l'index est constant et tient sur 8 bits |
|
164
|
+
| setstruct | 44 | écrit un élément d'un tuple, dont l'index est donné dans la pile |
|
165
|
+
| hd | 45 | voir lib native |
|
166
|
+
| tl | 46 | voir lib native |
|
167
|
+
| setlocal2 | 47 | écrit une variable locale, dont l'index est dans la pile |
|
168
|
+
| store | 48 | écrit un élément d'un tuple, dont l'index est donné dans la pile |
|
169
|
+
| call | 49 | appel d'une routine |
|
170
|
+
| callrb | 50 | appel d'une routine |
|
171
|
+
| callr | 51 | appel d'une routine |
|
172
|
+
| first | 52 | empile le premier élément d'un tuple |
|