nabaztag_hack_kit 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. data/.gitignore +7 -0
  2. data/.travis.yml +3 -0
  3. data/CHANGELOG.md +11 -0
  4. data/Gemfile +4 -0
  5. data/README.md +119 -0
  6. data/Rakefile +21 -0
  7. data/bin/mtl_comp +41 -0
  8. data/bin/mtl_merge +22 -0
  9. data/bin/mtl_simu +40 -0
  10. data/bytecode/lib/buffer.mtl +109 -0
  11. data/bytecode/lib/button.mtl +27 -0
  12. data/bytecode/lib/data_helper.mtl +88 -0
  13. data/bytecode/lib/ear.mtl +90 -0
  14. data/bytecode/lib/led.mtl +33 -0
  15. data/bytecode/lib/rfid.mtl +50 -0
  16. data/bytecode/main.mtl +129 -0
  17. data/config.ru +6 -0
  18. data/ext/bytecode/Commands.md +172 -0
  19. data/ext/bytecode/Docs.md +488 -0
  20. data/ext/bytecode/README.md +5 -0
  21. data/ext/bytecode/lib/arp.mtl +159 -0
  22. data/ext/bytecode/lib/cfg.mtl +74 -0
  23. data/ext/bytecode/lib/choreos.mtl +1487 -0
  24. data/ext/bytecode/lib/dhcp.mtl +152 -0
  25. data/ext/bytecode/lib/dns.mtl +89 -0
  26. data/ext/bytecode/lib/http.mtl +84 -0
  27. data/ext/bytecode/lib/tcp.mtl +340 -0
  28. data/ext/bytecode/lib/udp.mtl +49 -0
  29. data/ext/bytecode/lib/util.mtl +74 -0
  30. data/ext/bytecode/lib/var.mtl +15 -0
  31. data/ext/bytecode/lib/wifi.mtl +243 -0
  32. data/ext/bytecode/nominal-ping.mtl +5828 -0
  33. data/ext/mtl/Makefile +42 -0
  34. data/ext/mtl/README.md +13 -0
  35. data/ext/mtl/bc.cpp +1891 -0
  36. data/ext/mtl/conf.bin.sans_password +0 -0
  37. data/ext/mtl/config.txt +5 -0
  38. data/ext/mtl/dumpbc.c +2566 -0
  39. data/ext/mtl/extconf.rb +1 -0
  40. data/ext/mtl/linux_simu.c +271 -0
  41. data/ext/mtl/linux_simuaudio.c +16 -0
  42. data/ext/mtl/linux_simuaudio.h +18 -0
  43. data/ext/mtl/linux_simunet.c +620 -0
  44. data/ext/mtl/linux_simunet.h +7 -0
  45. data/ext/mtl/log.c +297 -0
  46. data/ext/mtl/log.h +20 -0
  47. data/ext/mtl/main_compiler.cpp +104 -0
  48. data/ext/mtl/main_simu.cpp +221 -0
  49. data/ext/mtl/mp3/GTKANAL.H +97 -0
  50. data/ext/mtl/mp3/LAYER3.C +2090 -0
  51. data/ext/mtl/mp3/TABINIT.C +82 -0
  52. data/ext/mtl/mp3/common.c +265 -0
  53. data/ext/mtl/mp3/dct64_i386.c +316 -0
  54. data/ext/mtl/mp3/decode_i386.c +155 -0
  55. data/ext/mtl/mp3/huffman.h +332 -0
  56. data/ext/mtl/mp3/interface.c +258 -0
  57. data/ext/mtl/mp3/mpg123.h +182 -0
  58. data/ext/mtl/mp3/mpglib.h +44 -0
  59. data/ext/mtl/properties.c +293 -0
  60. data/ext/mtl/properties.h +10 -0
  61. data/ext/mtl/simu.c +750 -0
  62. data/ext/mtl/simuaudio.c +662 -0
  63. data/ext/mtl/simuaudio.h +74 -0
  64. data/ext/mtl/simunet.c +400 -0
  65. data/ext/mtl/simunet.h +30 -0
  66. data/ext/mtl/utils/correct_const.sh +34 -0
  67. data/ext/mtl/vaudio.c +677 -0
  68. data/ext/mtl/vaudio.h +46 -0
  69. data/ext/mtl/vbc.h +160 -0
  70. data/ext/mtl/vbc_str.h +166 -0
  71. data/ext/mtl/vcomp/Makefile +29 -0
  72. data/ext/mtl/vcomp/bootstrap.cpp +89 -0
  73. data/ext/mtl/vcomp/compiler.cpp +470 -0
  74. data/ext/mtl/vcomp/compiler.h +200 -0
  75. data/ext/mtl/vcomp/compiler_file.cpp +929 -0
  76. data/ext/mtl/vcomp/compiler_prog.cpp +250 -0
  77. data/ext/mtl/vcomp/compiler_term.cpp +1053 -0
  78. data/ext/mtl/vcomp/compiler_type.cpp +872 -0
  79. data/ext/mtl/vcomp/compiler_var.cpp +289 -0
  80. data/ext/mtl/vcomp/file.cpp +79 -0
  81. data/ext/mtl/vcomp/file.h +39 -0
  82. data/ext/mtl/vcomp/filesystem.h +14 -0
  83. data/ext/mtl/vcomp/interpreter.cpp +85 -0
  84. data/ext/mtl/vcomp/interpreter.h +121 -0
  85. data/ext/mtl/vcomp/memory.cpp +241 -0
  86. data/ext/mtl/vcomp/memory.h +326 -0
  87. data/ext/mtl/vcomp/param.h +95 -0
  88. data/ext/mtl/vcomp/parser.cpp +427 -0
  89. data/ext/mtl/vcomp/parser.h +97 -0
  90. data/ext/mtl/vcomp/parser_xml.cpp +124 -0
  91. data/ext/mtl/vcomp/prodbuffer.cpp +125 -0
  92. data/ext/mtl/vcomp/prodbuffer.h +42 -0
  93. data/ext/mtl/vcomp/resource.h +17 -0
  94. data/ext/mtl/vcomp/stdlib_core.cpp +122 -0
  95. data/ext/mtl/vcomp/terminal.cpp +73 -0
  96. data/ext/mtl/vcomp/terminal.h +30 -0
  97. data/ext/mtl/vcomp/util.cpp +48 -0
  98. data/ext/mtl/vcomp/util.h +31 -0
  99. data/ext/mtl/vinterp.c +1349 -0
  100. data/ext/mtl/vinterp.h +11 -0
  101. data/ext/mtl/vloader.c +127 -0
  102. data/ext/mtl/vloader.h +31 -0
  103. data/ext/mtl/vlog.c +589 -0
  104. data/ext/mtl/vlog.h +69 -0
  105. data/ext/mtl/vmem.c +424 -0
  106. data/ext/mtl/vmem.h +107 -0
  107. data/ext/mtl/vnet.c +255 -0
  108. data/ext/mtl/vnet.h +19 -0
  109. data/lib/nabaztag_hack_kit/message/api.rb +39 -0
  110. data/lib/nabaztag_hack_kit/message/helper.rb +39 -0
  111. data/lib/nabaztag_hack_kit/message.rb +36 -0
  112. data/lib/nabaztag_hack_kit/server.rb +50 -0
  113. data/lib/nabaztag_hack_kit/version.rb +3 -0
  114. data/lib/nabaztag_hack_kit.rb +4 -0
  115. data/nabaztag_hack_kit.gemspec +29 -0
  116. data/public/bytecode.bin +0 -0
  117. data/test/bytecode/helper.mtl +60 -0
  118. data/test/bytecode/native.mtl +28 -0
  119. data/test/bytecode/test.mtl +221 -0
  120. data/test/spec_helper.rb +5 -0
  121. data/test/unit/message_spec.rb +56 -0
  122. 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,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift ::File.expand_path(::File.dirname(__FILE__) + '/lib')
4
+ require 'nabaztag_hack_kit/server'
5
+
6
+ run NabaztagHackKit::Server.new
@@ -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 |