nabaztag_hack_kit 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 |
|